26184 lines
1.4 MiB
26184 lines
1.4 MiB
/*****************************************************************************/
|
||
/* */
|
||
/* cbm.h */
|
||
/* */
|
||
/* CBM system-specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2015, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CBM_H
|
||
#define _CBM_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__CBM__)
|
||
# error This module may be used only when compiling for CBM machines!
|
||
#endif
|
||
|
||
|
||
|
||
/* We need NULL. */
|
||
|
||
#if !defined(_STDDEF_H)
|
||
# include <stddef.h>
|
||
#endif
|
||
|
||
/* Load the system-specific files here, if needed. */
|
||
#if defined(__C64__) && !defined(_C64_H)
|
||
# include <c64.h>
|
||
#elif defined(__VIC20__) && !defined(_VIC20_H)
|
||
# include <vic20.h>
|
||
#elif defined(__C128__) && !defined(_C128_H)
|
||
# include <c128.h>
|
||
#elif defined(__PLUS4__) && !defined(_PLUS4_H)
|
||
# include <plus4.h>
|
||
#elif defined(__C16__) && !defined(_C16_H)
|
||
# include <c16.h>
|
||
#elif defined(__CBM510__) && !defined(_CBM510_H)
|
||
# include <cbm510.h>
|
||
#elif defined(__CBM610__) && !defined(_CBM610_H)
|
||
# include <cbm610.h>
|
||
#elif defined(__PET__) && !defined(_PET_H)
|
||
# include <pet.h>
|
||
#endif
|
||
|
||
/* Include definitions for CBM file types */
|
||
#include <cbm_filetype.h>
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The file stream implementation and the POSIX I/O functions will
|
||
** use the following variable to determine the file type to use.
|
||
*/
|
||
extern char _filetype; /* Defaults to 's' */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Character-codes (CBM charset) */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define CH_HLINE 192
|
||
#define CH_VLINE 221
|
||
#define CH_ULCORNER 176
|
||
#define CH_URCORNER 174
|
||
#define CH_LLCORNER 173
|
||
#define CH_LRCORNER 189
|
||
#define CH_TTEE 178
|
||
#define CH_BTEE 177
|
||
#define CH_LTEE 171
|
||
#define CH_RTEE 179
|
||
#define CH_CROSS 219
|
||
#define CH_CURS_UP 145
|
||
#define CH_CURS_DOWN 17
|
||
#define CH_CURS_LEFT 157
|
||
#define CH_CURS_RIGHT 29
|
||
#define CH_PI 222
|
||
#define CH_HOME 19
|
||
#define CH_DEL 20
|
||
#define CH_INS 148
|
||
#define CH_ENTER 13
|
||
#define CH_STOP 3
|
||
#define CH_LIRA 92
|
||
#define CH_ESC 27
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions for directory reading functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* CBM FILE ACCESS */
|
||
#define CBM_A_RO 1 /* Read only */
|
||
#define CBM_A_WO 2 /* Write only */
|
||
#define CBM_A_RW 3 /* Read, Write */
|
||
|
||
struct cbm_dirent {
|
||
char name[17]; /* File name in PetSCII, limited to 16 chars */
|
||
unsigned int size; /* Size, in 254-/256-byte blocks */
|
||
unsigned char type;
|
||
unsigned char access;
|
||
};
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Machine info */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define TV_NTSC 0
|
||
#define TV_PAL 1
|
||
#define TV_OTHER 2
|
||
|
||
unsigned char get_tv (void);
|
||
/* Return the video mode the machine is using. */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* CBM kernal functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Constants to use with cbm_open() for openning a file for reading or
|
||
** writing without the need to append ",r" or ",w" to the filename.
|
||
**
|
||
** e.g., cbm_open(2, 8, CBM_READ, "0:data,s");
|
||
*/
|
||
#define CBM_READ 0 /* default is ",p" */
|
||
#define CBM_WRITE 1 /* ditto */
|
||
#define CBM_SEQ 2 /* default is ",r" -- or ",s" when writing */
|
||
|
||
/* Kernal-level functions */
|
||
unsigned char cbm_k_acptr (void);
|
||
unsigned char cbm_k_basin (void);
|
||
void __fastcall__ cbm_k_bsout (unsigned char C);
|
||
unsigned char __fastcall__ cbm_k_chkin (unsigned char FN);
|
||
void __fastcall__ cbm_k_ciout (unsigned char C);
|
||
unsigned char __fastcall__ cbm_k_ckout (unsigned char FN);
|
||
void cbm_k_clall (void);
|
||
void __fastcall__ cbm_k_close (unsigned char FN);
|
||
void cbm_k_clrch (void);
|
||
unsigned char cbm_k_getin (void);
|
||
unsigned cbm_k_iobase (void);
|
||
void __fastcall__ cbm_k_listen (unsigned char dev);
|
||
unsigned int __fastcall__ cbm_k_load(unsigned char flag, unsigned addr);
|
||
unsigned char cbm_k_open (void);
|
||
unsigned char cbm_k_readst (void);
|
||
unsigned char __fastcall__ cbm_k_save(unsigned int start, unsigned int end);
|
||
void cbm_k_scnkey (void);
|
||
void __fastcall__ cbm_k_setlfs (unsigned char LFN, unsigned char DEV,
|
||
unsigned char SA);
|
||
void __fastcall__ cbm_k_setnam (const char* Name);
|
||
void __fastcall__ cbm_k_talk (unsigned char dev);
|
||
void cbm_k_udtim (void);
|
||
void cbm_k_unlsn (void);
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* BASIC-like file I/O functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The cbm_* I/O functions below set _oserror (see errno.h),
|
||
** in case of an error.
|
||
**
|
||
** error-code BASIC error
|
||
** ---------- -----------
|
||
** 1 = too many files
|
||
** 2 = file open
|
||
** 3 = file not open
|
||
** 4 = file not found
|
||
** 5 = device not present
|
||
** 6 = not input-file
|
||
** 7 = not output-file
|
||
** 8 = missing file-name
|
||
** 9 = illegal device-number
|
||
**
|
||
** 10 = STOP-key pushed
|
||
** 11 = general I/O-error
|
||
*/
|
||
|
||
|
||
|
||
unsigned int __fastcall__ cbm_load (const char* name, unsigned char device, void* data);
|
||
/* Loads file "name", from given device, to given address -- or, to the load
|
||
** address of the file if "data" is the null pointer (like load"name",8,1
|
||
** in BASIC).
|
||
** Returns number of bytes that were loaded if loading was successful;
|
||
** otherwise 0, "_oserror" contains an error-code, then (see table above).
|
||
*/
|
||
|
||
unsigned char __fastcall__ cbm_save (const char* name, unsigned char device,
|
||
const void* addr, unsigned int size);
|
||
/* Saves "size" bytes, starting at "addr", to a file.
|
||
** Returns 0 if saving was successful, otherwise an error-code (see table
|
||
** above).
|
||
*/
|
||
|
||
unsigned char __fastcall__ cbm_open (unsigned char lfn, unsigned char device,
|
||
unsigned char sec_addr, const char* name);
|
||
/* Opens a file. Works just like the BASIC command.
|
||
** Returns 0 if openning was successful, otherwise an error-code (see table
|
||
** above).
|
||
*/
|
||
|
||
void __fastcall__ cbm_close (unsigned char lfn);
|
||
/* Closes a file */
|
||
|
||
int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size);
|
||
/* Reads up to "size" bytes from a file into "buffer".
|
||
** Returns the number of actually-read bytes, 0 if there are no bytes left.
|
||
** -1 in case of an error; then, _oserror contains an error-code (see table
|
||
** above). (Remember: 0 means end-of-file; -1 means error.)
|
||
*/
|
||
|
||
int __fastcall__ cbm_write (unsigned char lfn, const void* buffer,
|
||
unsigned int size);
|
||
/* Writes up to "size" bytes from "buffer" to a file.
|
||
** Returns the number of actually-written bytes, or -1 in case of an error;
|
||
** _oserror contains an error-code, then (see above table).
|
||
*/
|
||
|
||
unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...);
|
||
/* Opens directory listing. Returns 0 if opening directory was successful;
|
||
** otherwise, an error-code corresponding to cbm_open(). As an optional
|
||
** argument, the name of the directory may be passed to the function. If
|
||
** no explicit name is specified, "$" is used.
|
||
*/
|
||
|
||
unsigned char __fastcall__ cbm_readdir (unsigned char lfn,
|
||
struct cbm_dirent* l_dirent);
|
||
/* Reads one directory line into cbm_dirent structure.
|
||
** Returns 0 if reading directory-line was successful.
|
||
** Returns non-zero if reading directory failed, or no more file-names to read.
|
||
** Returns 2 on last line. Then, l_dirent->size = the number of "blocks free."
|
||
*/
|
||
|
||
void __fastcall__ cbm_closedir (unsigned char lfn);
|
||
/* Closes directory by cbm_close(lfn) */
|
||
|
||
|
||
|
||
/* End of cbm.h */
|
||
#endif
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _6525.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __6525_H
|
||
#define __6525_H
|
||
|
||
|
||
|
||
/* Define a structure with the 6525 register offsets. The shadow registers
|
||
** (if port C is unused) are currently not implemented, we would need a
|
||
** union to do that, however that would introduce an additional name.
|
||
*/
|
||
struct __6525 {
|
||
unsigned char pra; /* Port register A */
|
||
unsigned char prb; /* Port register B */
|
||
unsigned char prc; /* Port register C */
|
||
unsigned char ddra; /* Data direction register A */
|
||
unsigned char ddrb; /* Data direction register B */
|
||
unsigned char ddrc; /* Data direction register C */
|
||
unsigned char cr; /* Control register */
|
||
unsigned char air; /* Active interrupt register */
|
||
};
|
||
|
||
|
||
|
||
/* End of _6525.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _pia.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __PIA_H
|
||
#define __PIA_H
|
||
|
||
|
||
/* Define a structure with the pia register offsets */
|
||
struct __pia {
|
||
unsigned char porta; /* port A data r/w */
|
||
unsigned char portb; /* port B data r/w */
|
||
unsigned char pactl; /* port A control */
|
||
unsigned char pbctl; /* port B control */
|
||
};
|
||
|
||
|
||
|
||
/* End of _pia.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* limits.h */
|
||
/* */
|
||
/* Sizes of integer types */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2002 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _LIMITS_H
|
||
#define _LIMITS_H
|
||
|
||
|
||
|
||
#define CHAR_BIT 8
|
||
|
||
#define SCHAR_MIN ((signed char) 0x80)
|
||
#define SCHAR_MAX 127
|
||
|
||
#define UCHAR_MAX 255
|
||
|
||
#define CHAR_MIN 0
|
||
#define CHAR_MAX 255
|
||
|
||
#define SHRT_MIN ((short) 0x8000)
|
||
#define SHRT_MAX 32767
|
||
|
||
#define USHRT_MAX 65535U
|
||
|
||
#define INT_MIN ((int) 0x8000)
|
||
#define INT_MAX 32767
|
||
|
||
#define UINT_MAX 65535U
|
||
|
||
#define LONG_MAX 2147483647L
|
||
#define LONG_MIN ((long) 0x80000000)
|
||
|
||
#define ULONG_MAX 4294967295UL
|
||
|
||
|
||
|
||
/* End of limits.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* plus4.h */
|
||
/* */
|
||
/* Plus/4 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2006, Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _PLUS4_H
|
||
#define _PLUS4_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__PLUS4__)
|
||
# error This module may only be used when compiling for the Plus/4!
|
||
#endif
|
||
|
||
|
||
|
||
/* Include the base header file for the 264 series. include file.
|
||
*/
|
||
#ifndef _CBM264_H
|
||
#include <cbm264.h>
|
||
#endif
|
||
|
||
/* Define hardware */
|
||
#include <_6551.h>
|
||
#define ACIA (*(struct __6551*)0xFD00)
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void plus4_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void plus4_stdser_ser[];
|
||
|
||
|
||
|
||
/* End of plus4.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* serial.h */
|
||
/* */
|
||
/* Serial communication API */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _SERIAL_H
|
||
#define _SERIAL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Baudrate settings */
|
||
#define SER_BAUD_45_5 0x00
|
||
#define SER_BAUD_50 0x01
|
||
#define SER_BAUD_75 0x02
|
||
#define SER_BAUD_110 0x03
|
||
#define SER_BAUD_134_5 0x04
|
||
#define SER_BAUD_150 0x05
|
||
#define SER_BAUD_300 0x06
|
||
#define SER_BAUD_600 0x07
|
||
#define SER_BAUD_1200 0x08
|
||
#define SER_BAUD_1800 0x09
|
||
#define SER_BAUD_2400 0x0A
|
||
#define SER_BAUD_3600 0x0B
|
||
#define SER_BAUD_4800 0x0C
|
||
#define SER_BAUD_7200 0x0D
|
||
#define SER_BAUD_9600 0x0E
|
||
#define SER_BAUD_19200 0x0F
|
||
#define SER_BAUD_38400 0x10
|
||
#define SER_BAUD_57600 0x11
|
||
#define SER_BAUD_115200 0x12
|
||
#define SER_BAUD_230400 0x13
|
||
#define SER_BAUD_31250 0x14
|
||
#define SER_BAUD_62500 0x15
|
||
#define SER_BAUD_56_875 0x16
|
||
|
||
/* Data bit settings */
|
||
#define SER_BITS_5 0x00
|
||
#define SER_BITS_6 0x01
|
||
#define SER_BITS_7 0x02
|
||
#define SER_BITS_8 0x03
|
||
|
||
/* Stop bit settings */
|
||
#define SER_STOP_1 0x00 /* One stop bit */
|
||
#define SER_STOP_2 0x01 /* Two stop bits */
|
||
|
||
/* Parity settings */
|
||
#define SER_PAR_NONE 0x00
|
||
#define SER_PAR_ODD 0x01
|
||
#define SER_PAR_EVEN 0x02
|
||
#define SER_PAR_MARK 0x03
|
||
#define SER_PAR_SPACE 0x04
|
||
|
||
/* Handshake settings. The latter two may be combined. */
|
||
#define SER_HS_NONE 0x00 /* No handshake */
|
||
#define SER_HS_HW 0x01 /* Hardware (RTS/CTS) handshake */
|
||
#define SER_HS_SW 0x02 /* Software handshake */
|
||
|
||
/* Bit masks to mask out things from the status returned by ser_status.
|
||
** These are 6551 specific and must be mapped by drivers for other chips.
|
||
*/
|
||
#define SER_STATUS_PE 0x01 /* Parity error */
|
||
#define SER_STATUS_FE 0x02 /* Framing error */
|
||
#define SER_STATUS_OE 0x04 /* Overrun error */
|
||
#define SER_STATUS_DCD 0x20 /* NOT data carrier detect */
|
||
#define SER_STATUS_DSR 0x40 /* NOT data set ready */
|
||
|
||
/* Error codes returned by all functions */
|
||
#define SER_ERR_OK 0x00 /* Not an error - relax */
|
||
#define SER_ERR_NO_DRIVER 0x01 /* No driver available */
|
||
#define SER_ERR_CANNOT_LOAD 0x02 /* Error loading driver */
|
||
#define SER_ERR_INV_DRIVER 0x03 /* Invalid driver */
|
||
#define SER_ERR_NO_DEVICE 0x04 /* Device (hardware) not found */
|
||
#define SER_ERR_BAUD_UNAVAIL 0x05 /* Baud rate not available */
|
||
#define SER_ERR_NO_DATA 0x06 /* Nothing to read */
|
||
#define SER_ERR_OVERFLOW 0x07 /* No room in send buffer */
|
||
#define SER_ERR_INIT_FAILED 0x08 /* Initialization failed */
|
||
#define SER_ERR_INV_IOCTL 0x09 /* IOCTL not supported */
|
||
#define SER_ERR_INSTALLED 0x0A /* A driver is already installed */
|
||
#define SER_ERR_NOT_OPEN 0x0B /* Driver is not open */
|
||
|
||
/* Struct containing parameters for the serial port */
|
||
struct ser_params {
|
||
unsigned char baudrate; /* Baudrate */
|
||
unsigned char databits; /* Number of data bits */
|
||
unsigned char stopbits; /* Number of stop bits */
|
||
unsigned char parity; /* Parity setting */
|
||
unsigned char handshake; /* Type of handshake to use */
|
||
};
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char __fastcall__ ser_load_driver (const char* driver);
|
||
/* Load and install a serial driver. Return an error code. */
|
||
|
||
unsigned char ser_unload (void);
|
||
/* Uninstall, then unload the currently loaded driver. */
|
||
|
||
unsigned char __fastcall__ ser_install (void* driver);
|
||
/* Install an already loaded driver. Return an error code. */
|
||
|
||
unsigned char ser_uninstall (void);
|
||
/* Uninstall the currently loaded driver and return an error code.
|
||
** Note: This call does not free allocated memory.
|
||
*/
|
||
|
||
unsigned char __fastcall__ ser_open (const struct ser_params* params);
|
||
/* "Open" the port by setting the port parameters and enable interrupts. */
|
||
|
||
unsigned char ser_close (void);
|
||
/* "Close" the port. Clear buffers and and disable interrupts. */
|
||
|
||
unsigned char __fastcall__ ser_get (char* b);
|
||
/* Get a character from the serial port. If no characters are available, the
|
||
** function will return SER_ERR_NO_DATA, so this is not a fatal error.
|
||
*/
|
||
|
||
unsigned char __fastcall__ ser_put (char b);
|
||
/* Send a character via the serial port. There is a transmit buffer, but
|
||
** transmitting is not done via interrupt. The function returns
|
||
** SER_ERR_OVERFLOW if there is no space left in the transmit buffer.
|
||
*/
|
||
|
||
unsigned char __fastcall__ ser_status (unsigned char* status);
|
||
/* Return the serial port status. */
|
||
|
||
unsigned char __fastcall__ ser_ioctl (unsigned char code, void* data);
|
||
/* Driver specific entry. */
|
||
|
||
|
||
|
||
/* End of serial.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _pbi.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
#ifndef __PBI_H
|
||
#define __PBI_H
|
||
|
||
/* parallel bus interface area */
|
||
#define PBI ((unsigned char*)0xD100)
|
||
|
||
/* parallel device IRQ status */
|
||
#define PDVI ((unsigned char*)0xD1FF)
|
||
|
||
/* parallel device select */
|
||
#define PDVS ((unsigned char*)0xD1FF)
|
||
|
||
/* parallel bus interface RAM area */
|
||
#define PBIRAM ((unsigned char*)0xD600)
|
||
|
||
/* parallel device ID 1 */
|
||
#define PDID1 ((unsigned char*)0xD803)
|
||
|
||
/* parallel device I/O vector */
|
||
#define PDIDV ((unsigned char*)0xD805)
|
||
|
||
/* parallel device IRQ vector */
|
||
#define PDIRQV ((unsigned char*)0xD808)
|
||
|
||
/* parallel device ID 2 */
|
||
#define PDID2 ((unsigned char*)0xD80B)
|
||
|
||
/* parallel device vector table */
|
||
#define PDVV ((unsigned char*)0xD80D)
|
||
|
||
/* End of _pbi.h */
|
||
#endif /* #ifndef __PBI_H */
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _6526.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __6526_H
|
||
#define __6526_H
|
||
|
||
|
||
|
||
/* Define a structure with the 6526 register offsets.
|
||
** NOTE: The timer registers are not declared as 16 bit registers, because
|
||
** the order in which the two 8 bit halves are written is important, and
|
||
** the compiler doesn't guarantee any order when writing 16 bit values.
|
||
*/
|
||
struct __6526 {
|
||
unsigned char pra; /* Port register A */
|
||
unsigned char prb; /* Port register B */
|
||
unsigned char ddra; /* Data direction register A */
|
||
unsigned char ddrb; /* Data direction register B */
|
||
unsigned char ta_lo; /* Timer A, low byte */
|
||
unsigned char ta_hi; /* Timer A, high byte */
|
||
unsigned char tb_lo; /* Timer B, low byte */
|
||
unsigned char tb_hi; /* Timer B, high byte */
|
||
unsigned char tod_10; /* TOD, 1/10 sec. */
|
||
unsigned char tod_sec; /* TOD, seconds */
|
||
unsigned char tod_min; /* TOD, minutes */
|
||
unsigned char tod_hour; /* TOD, hours */
|
||
unsigned char sdr; /* Serial data register */
|
||
unsigned char icr; /* Interrupt control register */
|
||
unsigned char cra; /* Control register A */
|
||
unsigned char crb; /* Control register B */
|
||
};
|
||
|
||
|
||
|
||
/* End of _6526.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* apple2enh.h */
|
||
/* */
|
||
/* enhanced Apple //e system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2004 Oliver Schmidt, <ol.sc@web.de> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _APPLE2ENH_H
|
||
#define _APPLE2ENH_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__APPLE2ENH__)
|
||
# error This module may only be used when compiling for the enhanced Apple //e!
|
||
#endif
|
||
|
||
|
||
|
||
/* If not already done, include the apple2.h header file */
|
||
#if !defined(_APPLE2_H)
|
||
# include <apple2.h>
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Characters codes */
|
||
#define CH_DEL 0x7F
|
||
#define CH_CURS_UP 0x0B
|
||
#define CH_CURS_DOWN 0x0A
|
||
|
||
/* These are defined to be OpenApple + NumberKey */
|
||
#define CH_F1 0xB1
|
||
#define CH_F2 0xB2
|
||
#define CH_F3 0xB3
|
||
#define CH_F4 0xB4
|
||
#define CH_F5 0xB5
|
||
#define CH_F6 0xB6
|
||
#define CH_F7 0xB7
|
||
#define CH_F8 0xB8
|
||
#define CH_F9 0xB9
|
||
#define CH_F10 0xB0
|
||
|
||
/* Styles for textframe */
|
||
#define TEXTFRAME_WIDE 0x00
|
||
#define TEXTFRAME_TALL 0x04
|
||
|
||
/* Video modes */
|
||
#define VIDEOMODE_40x24 0x0011
|
||
#define VIDEOMODE_80x24 0x0012
|
||
#define VIDEOMODE_40COL VIDEOMODE_40x24
|
||
#define VIDEOMODE_80COL VIDEOMODE_80x24
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void a2e_auxmem_emd[];
|
||
extern void a2e_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void a2e_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||
extern void a2e_ssc_ser[];
|
||
extern void a2e_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
extern void a2e_lo_tgi[];
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ textframe (unsigned char width, unsigned char height,
|
||
unsigned char style);
|
||
/* Output a frame on the text screen with the given width and height
|
||
** starting at the current cursor position and using the given style.
|
||
*/
|
||
|
||
void __fastcall__ textframexy (unsigned char x, unsigned char y,
|
||
unsigned char width, unsigned char height,
|
||
unsigned char style);
|
||
/* Same as "gotoxy (x, y); textframe (width, height, style);" */
|
||
|
||
unsigned __fastcall__ videomode (unsigned mode);
|
||
/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx
|
||
** constants.
|
||
*/
|
||
|
||
|
||
|
||
/* End of apple2enh.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* fcntl.h */
|
||
/* */
|
||
/* File control operations */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2004 Ullrich von Bassewitz */
|
||
/* R<>merstra<72>e 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _FCNTL_H
|
||
#define _FCNTL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Flag values for the open() call */
|
||
#define O_RDONLY 0x01
|
||
#define O_WRONLY 0x02
|
||
#define O_RDWR 0x03
|
||
#define O_CREAT 0x10
|
||
#define O_TRUNC 0x20
|
||
#define O_APPEND 0x40
|
||
#define O_EXCL 0x80
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Functions */
|
||
int open (const char* name, int flags, ...); /* May take a mode argument */
|
||
int __fastcall__ close (int fd);
|
||
int __fastcall__ creat (const char* name, unsigned mode);
|
||
|
||
|
||
|
||
/* End of fcntl.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*
|
||
** _heap.h
|
||
**
|
||
** Ullrich von Bassewitz, 1998-06-03, 2004-12-19
|
||
**
|
||
*/
|
||
|
||
|
||
|
||
#ifndef __HEAP_H
|
||
#define __HEAP_H
|
||
|
||
|
||
|
||
/* Structure that preceeds a user block in most cases.
|
||
** The aligned_malloc function may generate blocks where the start pointer
|
||
** and size are splitted to handle a memory hole that is needed for
|
||
** alignment.
|
||
*/
|
||
struct usedblock {
|
||
unsigned size;
|
||
struct usedblock* start;
|
||
};
|
||
|
||
/* Space needed for administering used blocks */
|
||
#define HEAP_ADMIN_SPACE sizeof (struct usedblock)
|
||
|
||
/* The data type used to implement the free list.
|
||
** Beware: Field order is significant!
|
||
*/
|
||
struct freeblock {
|
||
unsigned size;
|
||
struct freeblock* next;
|
||
struct freeblock* prev;
|
||
};
|
||
|
||
|
||
|
||
/* Variables that describe the heap */
|
||
extern unsigned* _heaporg; /* Bottom of heap */
|
||
extern unsigned* _heapptr; /* Current top */
|
||
extern unsigned* _heapend; /* Upper limit */
|
||
extern struct freeblock* _heapfirst; /* First free block in list */
|
||
extern struct freeblock* _heaplast; /* Last free block in list */
|
||
|
||
|
||
|
||
/* End of _heap.h */
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stdio.h */
|
||
/* */
|
||
/* Input/output */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STDIO_H
|
||
#define _STDIO_H
|
||
|
||
|
||
|
||
#ifndef _STDDEF_H
|
||
# include <stddef.h>
|
||
#endif
|
||
#ifndef _STDARG_H
|
||
# include <stdarg.h>
|
||
#endif
|
||
|
||
|
||
|
||
/* Types */
|
||
typedef struct _FILE FILE;
|
||
typedef unsigned long fpos_t;
|
||
|
||
/* Standard file descriptors */
|
||
extern FILE* stdin;
|
||
extern FILE* stdout;
|
||
extern FILE* stderr;
|
||
|
||
/* Standard defines */
|
||
#define _IOFBF 0
|
||
#define _IOLBF 1
|
||
#define _IONBF 2
|
||
#define BUFSIZ 256
|
||
#define EOF -1
|
||
#define FOPEN_MAX 8
|
||
#define SEEK_CUR 0
|
||
#define SEEK_END 1
|
||
#define SEEK_SET 2
|
||
#define TMP_MAX 256
|
||
|
||
/* Standard defines that are platform dependent */
|
||
#if defined(__APPLE2__)
|
||
# define FILENAME_MAX (64+1)
|
||
#elif defined(__ATARI__)
|
||
# define FILENAME_MAX (12+1)
|
||
#elif defined(__LUNIX__)
|
||
# define FILENAME_MAX (80+1)
|
||
#else
|
||
# define FILENAME_MAX (16+1)
|
||
#endif
|
||
#define L_tmpnam FILENAME_MAX
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Functions */
|
||
void __fastcall__ clearerr (FILE* f);
|
||
int __fastcall__ fclose (FILE* f);
|
||
int __fastcall__ feof (FILE* f);
|
||
int __fastcall__ ferror (FILE* f);
|
||
int __fastcall__ fflush (FILE* f);
|
||
int __fastcall__ fgetc (FILE* f);
|
||
char* __fastcall__ fgets (char* buf, size_t size, FILE* f);
|
||
FILE* __fastcall__ fopen (const char* name, const char* mode);
|
||
int fprintf (FILE* f, const char* format, ...);
|
||
int __fastcall__ fputc (int c, FILE* f);
|
||
int __fastcall__ fputs (const char* s, FILE* f);
|
||
size_t __fastcall__ fread (void* buf, size_t size, size_t count, FILE* f);
|
||
FILE* __fastcall__ freopen (const char* name, const char* mode, FILE* f);
|
||
size_t __fastcall__ fwrite (const void* buf, size_t size, size_t count, FILE* f);
|
||
int __fastcall__ fgetpos (FILE* f, fpos_t *pos);
|
||
int __fastcall__ fsetpos (FILE* f, const fpos_t* pos);
|
||
long __fastcall__ ftell (FILE* f);
|
||
int __fastcall__ fseek (FILE* f, long offset, int whence);
|
||
void __fastcall__ rewind (FILE *f);
|
||
int getchar (void);
|
||
char* __fastcall__ gets (char* s);
|
||
void __fastcall__ perror (const char* s);
|
||
int printf (const char* format, ...);
|
||
int __fastcall__ putchar (int c);
|
||
int __fastcall__ puts (const char* s);
|
||
int __fastcall__ remove (const char* name);
|
||
int __fastcall__ rename (const char* oldname, const char* newname);
|
||
int snprintf (char* buf, size_t size, const char* format, ...);
|
||
int sprintf (char* buf, const char* format, ...);
|
||
int __fastcall__ ungetc (int c, FILE* f);
|
||
int __fastcall__ vfprintf (FILE* f, const char* format, va_list ap);
|
||
int __fastcall__ vprintf (const char* format, va_list ap);
|
||
int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap);
|
||
int __fastcall__ vsprintf (char* buf, const char* format, va_list ap);
|
||
|
||
int scanf (const char* format, ...);
|
||
int fscanf (FILE* f, const char* format, ...);
|
||
int sscanf (const char* s, const char* format, ...);
|
||
int __fastcall__ vscanf (const char* format, va_list ap);
|
||
int __fastcall__ vsscanf (const char* s, const char* format, va_list ap);
|
||
int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap);
|
||
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */
|
||
int __fastcall__ fileno (FILE* f); /* Unix */
|
||
#endif
|
||
void __fastcall__ _poserror (const char* msg); /* cc65 */
|
||
|
||
/* Masking macros for some functions */
|
||
#define getc(f) fgetc (f) /* ANSI */
|
||
#define putc(c, f) fputc (c, f) /* ANSI */
|
||
|
||
|
||
|
||
/* End of stdio.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* iso646.h */
|
||
/* */
|
||
/* Alternative spellings */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ISO646_H
|
||
#define _ISO646_H
|
||
|
||
|
||
|
||
/* Operator tokens */
|
||
#define and &&
|
||
#define and_eq &=
|
||
#define bitand &
|
||
#define bitor |
|
||
#define compl ~
|
||
#define not !
|
||
#define not_eq !=
|
||
#define or ||
|
||
#define or_eq |=
|
||
#define xor ^
|
||
#define xor_eq ^=
|
||
|
||
|
||
|
||
/* End of iso646.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _6551.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __6551_H
|
||
#define __6551_H
|
||
|
||
|
||
|
||
/* Define a structure with the 6551 register offsets */
|
||
struct __6551 {
|
||
unsigned char data; /* Data register */
|
||
unsigned char status; /* Status register */
|
||
unsigned char cmd; /* Command register */
|
||
unsigned char ctrl; /* Control register */
|
||
};
|
||
|
||
|
||
|
||
/* End of _6551.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* c128.h */
|
||
/* */
|
||
/* C128 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2013, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _C128_H
|
||
#define _C128_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__C128__)
|
||
# error This module may only be used when compiling for the C128!
|
||
#endif
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 133
|
||
#define CH_F2 137
|
||
#define CH_F3 134
|
||
#define CH_F4 138
|
||
#define CH_F5 135
|
||
#define CH_F6 139
|
||
#define CH_F7 136
|
||
#define CH_F8 140
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
/* TGI color defines */
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||
#define TGI_COLOR_RED COLOR_RED
|
||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_ORANGE COLOR_ORANGE
|
||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||
#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED
|
||
#define TGI_COLOR_GRAY1 COLOR_GRAY1
|
||
#define TGI_COLOR_GRAY2 COLOR_GRAY2
|
||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||
#define TGI_COLOR_GRAY3 COLOR_GRAY3
|
||
|
||
/* Video mode defines */
|
||
#define VIDEOMODE_40x25 0x00
|
||
#define VIDEOMODE_80x25 0x80
|
||
#define VIDEOMODE_40COL VIDEOMODE_40x25
|
||
#define VIDEOMODE_80COL VIDEOMODE_80x25
|
||
|
||
|
||
|
||
/* Define hardware */
|
||
#include <_vic2.h>
|
||
#define VIC (*(struct __vic2*)0xD000)
|
||
|
||
#include <_sid.h>
|
||
#define SID (*(struct __sid*)0xD400)
|
||
|
||
#include <_vdc.h>
|
||
#define VDC (*(struct __vdc*)0xD600)
|
||
|
||
#include <_6526.h>
|
||
#define CIA1 (*(struct __6526*)0xDC00)
|
||
#define CIA2 (*(struct __6526*)0xDD00)
|
||
|
||
|
||
|
||
/* Define special memory areas */
|
||
#define COLOR_RAM ((unsigned char*)0xD800)
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void c128_georam_emd[];
|
||
extern void c128_ram_emd[];
|
||
extern void c128_ram2_emd[];
|
||
extern void c128_ramcart_emd[];
|
||
extern void c128_reu_emd[];
|
||
extern void c128_vdc_emd[];
|
||
extern void c128_ptvjoy_joy[];
|
||
extern void c128_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void c128_1351_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||
extern void c128_joy_mou[];
|
||
extern void c128_inkwell_mou[];
|
||
extern void c128_pot_mou[];
|
||
extern void c128_swlink_ser[];
|
||
extern void c128_vdc_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
extern void c128_vdc2_tgi[];
|
||
|
||
|
||
|
||
unsigned __fastcall__ videomode (unsigned Mode);
|
||
/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx
|
||
** constants.
|
||
*/
|
||
|
||
void toggle_videomode (void);
|
||
/* Toggle the video mode between 40 and 80 chars (calls SWAPPER).
|
||
** THIS FUNCTION IS DEPRECATED, please use videomode instead!
|
||
*/
|
||
|
||
void c64mode (void);
|
||
/* Switch the C128 into C64 mode. Note: This function will not return! */
|
||
|
||
void fast (void);
|
||
/* Switch the CPU into 2MHz mode. Note: This will disable video when in
|
||
** 40 column mode.
|
||
*/
|
||
|
||
void slow (void);
|
||
/* Switch the CPU into 1MHz mode. */
|
||
|
||
|
||
|
||
/* End of c128.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* conio.h */
|
||
/* */
|
||
/* Direct console I/O */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2007 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/*
|
||
** This is the direct console interface for cc65. I do not like the function
|
||
** names very much, but the first version started as a rewrite of Borland's
|
||
** conio, and, even if the interface has changed, the names did not.
|
||
**
|
||
** The interface does direct screen I/O, so it is fast enough for most
|
||
** programs. I did not implement text windows, since many applications do
|
||
** not need them and should not pay for the additional overhead. It should
|
||
** be easy to add text windows on a higher level if needed,
|
||
**
|
||
** Most routines do not check the parameters. This may be unfortunate but is
|
||
** also related to speed. The coordinates are always 0/0 based.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _CONIO_H
|
||
#define _CONIO_H
|
||
|
||
|
||
|
||
#if !defined(_STDARG_H)
|
||
# include <stdarg.h>
|
||
#endif
|
||
|
||
/* Include the correct machine-specific file */
|
||
#if defined(__APPLE2ENH__)
|
||
# include <apple2enh.h>
|
||
#elif defined(__APPLE2__)
|
||
# include <apple2.h>
|
||
#elif defined(__ATARI__)
|
||
# include <atari.h>
|
||
#elif defined(__ATMOS__)
|
||
# include <atmos.h>
|
||
#elif defined(__CBM__)
|
||
# include <cbm.h>
|
||
#elif defined(__GAMATE__)
|
||
# include <gamate.h>
|
||
#elif defined(__GEOS__)
|
||
# include <geos.h>
|
||
#elif defined(__LUNIX__)
|
||
# include <lunix.h>
|
||
#elif defined(__LYNX__)
|
||
# include <lynx.h>
|
||
#elif defined(__NES__)
|
||
# include <nes.h>
|
||
#elif defined(__OSIC1P__)
|
||
# include <osic1p.h>
|
||
#elif defined(__PCE__)
|
||
# include <pce.h>
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void clrscr (void);
|
||
/* Clear the whole screen and put the cursor into the top left corner */
|
||
|
||
unsigned char kbhit (void);
|
||
/* Return true if there's a key waiting, return false if not */
|
||
|
||
void __fastcall__ gotox (unsigned char x);
|
||
/* Set the cursor to the specified X position, leave the Y position untouched */
|
||
|
||
void __fastcall__ gotoy (unsigned char y);
|
||
/* Set the cursor to the specified Y position, leave the X position untouched */
|
||
|
||
void __fastcall__ gotoxy (unsigned char x, unsigned char y);
|
||
/* Set the cursor to the specified position */
|
||
|
||
unsigned char wherex (void);
|
||
/* Return the X position of the cursor */
|
||
|
||
unsigned char wherey (void);
|
||
/* Return the Y position of the cursor */
|
||
|
||
void __fastcall__ cputc (char c);
|
||
/* Output one character at the current cursor position */
|
||
|
||
void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
|
||
/* Same as "gotoxy (x, y); cputc (c);" */
|
||
|
||
void __fastcall__ cputs (const char* s);
|
||
/* Output a NUL-terminated string at the current cursor position */
|
||
|
||
void __fastcall__ cputsxy (unsigned char x, unsigned char y, const char* s);
|
||
/* Same as "gotoxy (x, y); puts (s);" */
|
||
|
||
int cprintf (const char* format, ...);
|
||
/* Like printf(), but uses direct screen output */
|
||
|
||
int __fastcall__ vcprintf (const char* format, va_list ap);
|
||
/* Like vprintf(), but uses direct screen output */
|
||
|
||
char cgetc (void);
|
||
/* Return a character from the keyboard. If there is no character available,
|
||
** the function waits until the user does press a key. If cursor is set to
|
||
** 1 (see below), a blinking cursor is displayed while waiting.
|
||
*/
|
||
|
||
int cscanf (const char* format, ...);
|
||
/* Like scanf(), but uses direct keyboard input */
|
||
|
||
int __fastcall__ vcscanf (const char* format, va_list ap);
|
||
/* Like vscanf(), but uses direct keyboard input */
|
||
|
||
unsigned char __fastcall__ cursor (unsigned char onoff);
|
||
/* If onoff is 1, a cursor is displayed when waiting for keyboard input. If
|
||
** onoff is 0, the cursor is hidden when waiting for keyboard input. The
|
||
** function returns the old cursor setting.
|
||
*/
|
||
|
||
unsigned char __fastcall__ revers (unsigned char onoff);
|
||
/* Enable/disable reverse character display. This may not be supported by
|
||
** the output device. Return the old setting.
|
||
*/
|
||
|
||
unsigned char __fastcall__ textcolor (unsigned char color);
|
||
/* Set the color for text output. The old color setting is returned. */
|
||
|
||
unsigned char __fastcall__ bgcolor (unsigned char color);
|
||
/* Set the color for the background. The old color setting is returned. */
|
||
|
||
unsigned char __fastcall__ bordercolor (unsigned char color);
|
||
/* Set the color for the border. The old color setting is returned. */
|
||
|
||
void __fastcall__ chline (unsigned char length);
|
||
/* Output a horizontal line with the given length starting at the current
|
||
** cursor position.
|
||
*/
|
||
|
||
void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||
/* Same as "gotoxy (x, y); chline (length);" */
|
||
|
||
void __fastcall__ cvline (unsigned char length);
|
||
/* Output a vertical line with the given length at the current cursor
|
||
** position.
|
||
*/
|
||
|
||
void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||
/* Same as "gotoxy (x, y); cvline (length);" */
|
||
|
||
void __fastcall__ cclear (unsigned char length);
|
||
/* Clear part of a line (write length spaces). */
|
||
|
||
void __fastcall__ cclearxy (unsigned char x, unsigned char y, unsigned char length);
|
||
/* Same as "gotoxy (x, y); cclear (length);" */
|
||
|
||
void __fastcall__ screensize (unsigned char* x, unsigned char* y);
|
||
/* Return the current screen size. */
|
||
|
||
void __fastcall__ cputhex8 (unsigned char val);
|
||
void __fastcall__ cputhex16 (unsigned val);
|
||
/* These shouldn't be here... */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Macros */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* On some platforms, functions are not available or are dummys. To suppress
|
||
** the call to these functions completely, the platform header files may
|
||
** define macros for these functions that start with an underline. If such a
|
||
** macro exists, a new macro is defined here, that expands to the one with the
|
||
** underline. The reason for this two stepped approach is that it is sometimes
|
||
** necessary to take the address of the function, which is not possible when
|
||
** using a macro. Since the function prototype is still present, #undefining
|
||
** the macro will give access to the actual function.
|
||
*/
|
||
|
||
#if defined(_textcolor)
|
||
# define textcolor(x) _textcolor(x)
|
||
#endif
|
||
#if defined(_bgcolor)
|
||
# define bgcolor(x) _bgcolor(x)
|
||
#endif
|
||
#if defined(_bordercolor)
|
||
# define bordercolor(x) _bordercolor(x)
|
||
#endif
|
||
|
||
|
||
|
||
/* End of conio.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* 6502.h */
|
||
/* */
|
||
/* 6502 specific declarations */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _6502_H
|
||
#define _6502_H
|
||
|
||
|
||
|
||
/* We need size_t */
|
||
#ifndef _HAVE_size_t
|
||
#define _HAVE_size_t
|
||
typedef unsigned size_t;
|
||
#endif
|
||
|
||
|
||
|
||
/* Possible returns of getcpu() */
|
||
#define CPU_6502 0
|
||
#define CPU_65C02 1
|
||
#define CPU_65816 2
|
||
#define CPU_4510 3
|
||
|
||
unsigned char getcpu (void);
|
||
/* Detect the CPU the program is running on */
|
||
|
||
|
||
|
||
/* Macros for CPU instructions */
|
||
#define BRK() __asm__ ("brk")
|
||
#define CLI() __asm__ ("cli")
|
||
#define SEI() __asm__ ("sei")
|
||
|
||
|
||
|
||
/* Struct that holds the registers for the sys function */
|
||
struct regs {
|
||
unsigned char a; /* A register value */
|
||
unsigned char x; /* X register value */
|
||
unsigned char y; /* Y register value */
|
||
unsigned char flags; /* Flags value */
|
||
unsigned pc; /* Program counter */
|
||
};
|
||
|
||
/* Defines for the flags in the regs structure */
|
||
#define F6502_N 0x80 /* N flag */
|
||
#define F6502_V 0x40 /* V flag */
|
||
#define F6502_B 0x10 /* B flag */
|
||
#define F6502_D 0x08 /* D flag */
|
||
#define F6502_I 0x04 /* I flag */
|
||
#define F6502_Z 0x02 /* Z flag */
|
||
#define F6502_C 0x01 /* C flag */
|
||
|
||
/* Function to call any machine language subroutine. All registers in the
|
||
** regs structure are passed into the routine and the results are passed
|
||
** out. The B flag is ignored on input. The called routine must end with
|
||
** an RTS.
|
||
*/
|
||
void __fastcall__ _sys (struct regs* r);
|
||
|
||
|
||
|
||
/* Set and reset the break vector. The given user function is called if
|
||
** a break occurs. The values of the registers may be read from the brk_...
|
||
** variables. The value in brk_pc will point to the address that contains
|
||
** the brk instruction.
|
||
** The set_brk function will install an exit handler that will reset the
|
||
** vector if the program ends.
|
||
*/
|
||
|
||
extern unsigned char brk_a; /* A register value */
|
||
extern unsigned char brk_x; /* X register value */
|
||
extern unsigned char brk_y; /* Y register value */
|
||
extern unsigned char brk_sr; /* Status register */
|
||
extern unsigned brk_pc; /* PC value */
|
||
|
||
typedef void (*brk_handler) (void);
|
||
/* Type of the break handler */
|
||
|
||
void __fastcall__ set_brk (brk_handler f);
|
||
/* Set the break vector to the given address */
|
||
|
||
void reset_brk (void);
|
||
/* Reset the break vector to the original value */
|
||
|
||
|
||
|
||
/* Possible returns for irq_handler() */
|
||
#define IRQ_NOT_HANDLED 0
|
||
#define IRQ_HANDLED 1
|
||
|
||
typedef unsigned char (*irq_handler) (void);
|
||
/* Type of the C level interrupt request handler */
|
||
|
||
void __fastcall__ set_irq (irq_handler f, void *stack_addr, size_t stack_size);
|
||
/* Set the C level interrupt request vector to the given address */
|
||
|
||
void reset_irq (void);
|
||
/* Reset the C level interrupt request vector */
|
||
|
||
|
||
|
||
/* End of 6502.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* mouse.h */
|
||
/* */
|
||
/* Mouse API */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003-2013, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _MOUSE_H
|
||
#define _MOUSE_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Error codes */
|
||
#define MOUSE_ERR_OK 0 /* No error */
|
||
#define MOUSE_ERR_NO_DRIVER 1 /* No driver available */
|
||
#define MOUSE_ERR_CANNOT_LOAD 2 /* Error loading driver */
|
||
#define MOUSE_ERR_INV_DRIVER 3 /* Invalid driver */
|
||
#define MOUSE_ERR_NO_DEVICE 4 /* Mouse hardware not found */
|
||
#define MOUSE_ERR_INV_IOCTL 5 /* Invalid ioctl code */
|
||
|
||
/* Mouse button masks */
|
||
#define MOUSE_BTN_LEFT 0x10
|
||
#define MOUSE_BTN_RIGHT 0x01
|
||
|
||
/* Structure containing the mouse coordinates */
|
||
struct mouse_pos {
|
||
int x;
|
||
int y;
|
||
};
|
||
|
||
/* Structure containing information about the mouse */
|
||
struct mouse_info {
|
||
struct mouse_pos pos; /* Mouse position */
|
||
unsigned char buttons; /* Mouse button mask */
|
||
};
|
||
|
||
/* Structure used for getbox/setbox */
|
||
struct mouse_box {
|
||
int minx;
|
||
int miny;
|
||
int maxx;
|
||
int maxy;
|
||
};
|
||
|
||
/* Structure containing mouse callback functions. These functions are declared
|
||
** in C notation here, but they cannot be C functions (at least not easily),
|
||
** since they may be called from within an interrupt.
|
||
*/
|
||
struct mouse_callbacks {
|
||
|
||
void (*hide) (void);
|
||
/* Hide the mouse cursor. */
|
||
|
||
void (*show) (void);
|
||
/* Show the mouse cursor. */
|
||
|
||
void (*prep) (void);
|
||
/* Prepare to move the mouse cursor. This function is called,
|
||
** even when the cursor is currently invisible.
|
||
*/
|
||
|
||
void (*draw) (void);
|
||
/* Draw the mouse cursor. This function is called,
|
||
** even when the cursor is currently invisible.
|
||
*/
|
||
|
||
void __fastcall__ (*movex) (int x);
|
||
/* Move the mouse cursor to the new X coordinate. This function is called,
|
||
** even when the cursor is currently invisible.
|
||
*/
|
||
|
||
void __fastcall__ (*movey) (int y);
|
||
/* Move the mouse cursor to the new Y coordinate. This function is called,
|
||
** even when the cursor is currently invisible.
|
||
*/
|
||
};
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Declarations */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The default mouse callbacks */
|
||
extern const struct mouse_callbacks mouse_def_callbacks;
|
||
|
||
#if defined(__CBM__)
|
||
|
||
/* The default mouse pointer shape used by the default mouse callbacks */
|
||
extern const unsigned char mouse_def_pointershape[63];
|
||
|
||
/* The default mouse pointer color used by the default mouse callbacks */
|
||
extern const unsigned char mouse_def_pointercolor;
|
||
|
||
#endif
|
||
|
||
/* The name of the standard mouse driver for a platform */
|
||
extern const char mouse_stddrv[];
|
||
|
||
/* The address of the static standard mouse driver for a platform */
|
||
extern const void mouse_static_stddrv[];
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c,
|
||
const char* driver);
|
||
/* Load and install a mouse driver, return an error code. */
|
||
|
||
unsigned char mouse_unload (void);
|
||
/* Uninstall, then unload the currently loaded driver. */
|
||
|
||
unsigned char __fastcall__ mouse_install (const struct mouse_callbacks* c,
|
||
void* driver);
|
||
/* Install an already loaded driver. Return an error code. */
|
||
|
||
unsigned char mouse_uninstall (void);
|
||
/* Uninstall the currently loaded driver. Return an error code. */
|
||
|
||
const char* __fastcall__ mouse_geterrormsg (unsigned char code);
|
||
/* Get an error message describing the error in code. */
|
||
|
||
void mouse_hide (void);
|
||
/* Hide the mouse. The function manages a counter and may be called more than
|
||
** once. For each call to mouse_hide there must be a call to mouse_show to make
|
||
** the mouse visible again.
|
||
*/
|
||
|
||
void mouse_show (void);
|
||
/* Show the mouse. See mouse_hide() for more information. */
|
||
|
||
void __fastcall__ mouse_setbox (const struct mouse_box* box);
|
||
/* Set the bounding box for the mouse pointer movement. The mouse X and Y
|
||
** coordinates will never go outside the given box.
|
||
** NOTE: The function does *not* check if the mouse is currently inside the
|
||
** given margins. The proper way to use this function therefore is:
|
||
**
|
||
** - Hide the mouse
|
||
** - Set the bounding box
|
||
** - Place the mouse at the desired position
|
||
** - Show the mouse again.
|
||
**
|
||
** NOTE2: When setting the box to something that is larger than the actual
|
||
** screen, the positioning of the mouse cursor can fail. If such margins
|
||
** are really what you want, you have to use your own cursor routines.
|
||
*/
|
||
|
||
void __fastcall__ mouse_getbox (struct mouse_box* box);
|
||
/* Get the current bounding box for the mouse pointer movement. */
|
||
|
||
void __fastcall__ mouse_move (int x, int y);
|
||
/* Set the mouse cursor to the given position. If a mouse cursor is defined
|
||
** and currently visible, the mouse cursor is also moved.
|
||
** NOTE: This function does not check if the given position is valid and
|
||
** inside the bounding box.
|
||
*/
|
||
|
||
unsigned char mouse_buttons (void);
|
||
/* Return a bit mask encoding the states of the mouse buttons. Use the
|
||
** MOUSE_BTN_XXX flags to decode a specific button.
|
||
*/
|
||
|
||
void __fastcall__ mouse_pos (struct mouse_pos* pos);
|
||
/* Return the current mouse position. */
|
||
|
||
void __fastcall__ mouse_info (struct mouse_info* info);
|
||
/* Return the state of the mouse buttons and the position of the mouse. */
|
||
|
||
unsigned char __fastcall__ mouse_ioctl (unsigned char code, void* data);
|
||
/* Call the driver-specific ioctl function. Return an error code.
|
||
** NON-PORTABLE!
|
||
*/
|
||
|
||
|
||
|
||
/* End of mouse.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* lynx.h */
|
||
/* */
|
||
/* Lynx system-specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003 Shawn Jefferson */
|
||
/* */
|
||
/* Adapted with many changes Ullrich von Bassewitz, 2004-10-09 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _LYNX_H
|
||
#define _LYNX_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__LYNX__)
|
||
# error This module may only be used when compiling for the Lynx game console!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_RED 0x01
|
||
#define COLOR_PINK 0x02
|
||
#define COLOR_LIGHTGREY 0x03
|
||
#define COLOR_GREY 0x04
|
||
#define COLOR_DARKGREY 0x05
|
||
#define COLOR_BROWN 0x06
|
||
#define COLOR_PEACH 0x07
|
||
#define COLOR_YELLOW 0x08
|
||
#define COLOR_LIGHTGREEN 0x09
|
||
#define COLOR_GREEN 0x0A
|
||
#define COLOR_DARKBROWN 0x0B
|
||
#define COLOR_VIOLET 0x0C
|
||
#define COLOR_BLUE 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_WHITE 0x0F
|
||
|
||
/* TGI color defines (default palette) */
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_RED COLOR_RED
|
||
#define TGI_COLOR_PINK COLOR_PINK
|
||
#define TGI_COLOR_LIGHTGREY COLOR_LIGHTGREY
|
||
#define TGI_COLOR_GREY COLOR_GREY
|
||
#define TGI_COLOR_DARKGREY COLOR_DARKGREY
|
||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||
#define TGI_COLOR_PEACH COLOR_PEACH
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_DARKBROWN COLOR_DARKBROWN
|
||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||
|
||
/* No support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void lynx_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void lynx_comlynx_ser[];
|
||
extern void lynx_160_102_16_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Sound support */
|
||
/*****************************************************************************/
|
||
|
||
void lynx_snd_init (void);
|
||
/* Initialize the sound driver */
|
||
|
||
void lynx_snd_pause (void);
|
||
/* Pause sound */
|
||
|
||
void lynx_snd_continue (void);
|
||
/* Continue sound after pause */
|
||
|
||
void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music);
|
||
/* Play tune on channel */
|
||
|
||
void lynx_snd_stop (void);
|
||
/* Stop sound on all channels */
|
||
|
||
void __fastcall__ lynx_snd_stop_channel (unsigned char channel);
|
||
/* Stop sound on all channels */
|
||
|
||
unsigned char lynx_snd_active(void);
|
||
/* Show which channels are active */
|
||
|
||
/*****************************************************************************/
|
||
/* Accessing the cart */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ lynx_load (int fileno);
|
||
/* Load a file into ram. The first entry is fileno=0. */
|
||
|
||
void __fastcall__ lynx_exec (int fileno);
|
||
/* Load a file into ram and execute it. */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Accessing the EEPROM */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned __fastcall__ lynx_eeprom_read (unsigned char cell);
|
||
/* Read a 16 bit word from the given address */
|
||
|
||
unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val);
|
||
/* Write the word at the given address */
|
||
|
||
void __fastcall__ lynx_eeprom_erase (unsigned char cell);
|
||
/* Clear the word at the given address */
|
||
|
||
unsigned __fastcall__ lynx_eeread (unsigned cell);
|
||
/* Read a 16 bit word from the given address 93C46 93C66 or 93C86*/
|
||
|
||
unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val);
|
||
/* Write the word at the given address 93C46 93C66 or 93C86*/
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* TGI extras */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define tgi_sprite(spr) tgi_ioctl(0, spr)
|
||
#define tgi_flip() tgi_ioctl(1, (void*)0)
|
||
#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol))
|
||
#define tgi_setframerate(rate) tgi_ioctl(3, (void*)(rate))
|
||
#define tgi_busy() tgi_ioctl(4, (void*)0)
|
||
#define tgi_updatedisplay() tgi_ioctl(4, (void*)1)
|
||
#define tgi_setcollisiondetection(active) tgi_ioctl(5, (void*)(active))
|
||
|
||
/* Define Hardware */
|
||
#include <_mikey.h>
|
||
#define MIKEY (*(struct __mikey *)0xFD00)
|
||
|
||
#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8]
|
||
#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL)
|
||
#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL)
|
||
#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART)
|
||
#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma
|
||
|
||
#include <_suzy.h>
|
||
#define SUZY (*(struct __suzy*)0xFC00)
|
||
|
||
|
||
/* End of lynx.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* atari.h */
|
||
/* */
|
||
/* Atari system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000-2006 Mark Keates <markk@dendrite.co.uk> */
|
||
/* Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* Christian Groessler <chris@groessler.org> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ATARI_H
|
||
#define _ATARI_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__ATARI__)
|
||
# error This module may only be used when compiling for the Atari!
|
||
#endif
|
||
|
||
|
||
|
||
/* Character codes */
|
||
#define CH_DELCHR 0xFE /* delete char under the cursor */
|
||
#define CH_ENTER 0x9B
|
||
#define CH_ESC 0x1B
|
||
#define CH_CURS_UP 28
|
||
#define CH_CURS_DOWN 29
|
||
#define CH_CURS_LEFT 30
|
||
#define CH_CURS_RIGHT 31
|
||
|
||
#define CH_TAB 0x7F /* tabulator */
|
||
#define CH_EOL 0x9B /* end-of-line marker */
|
||
#define CH_CLR 0x7D /* clear screen */
|
||
#define CH_BEL 0xFD /* bell */
|
||
#define CH_DEL 0x7E /* back space (delete char to the left) */
|
||
#define CH_RUBOUT 0x7E /* back space (old, deprecated) */
|
||
#define CH_DELLINE 0x9C /* delete line */
|
||
#define CH_INSLINE 0x9D /* insert line */
|
||
|
||
/* These are defined to be Atari + NumberKey */
|
||
#define CH_F1 177
|
||
#define CH_F2 178
|
||
#define CH_F3 179
|
||
#define CH_F4 180
|
||
#define CH_F5 181
|
||
#define CH_F6 182
|
||
#define CH_F7 183
|
||
#define CH_F8 184
|
||
#define CH_F9 185
|
||
#define CH_F10 176
|
||
|
||
#define CH_ULCORNER 0x11
|
||
#define CH_URCORNER 0x05
|
||
#define CH_LLCORNER 0x1A
|
||
#define CH_LRCORNER 0x03
|
||
#define CH_TTEE 0x17
|
||
#define CH_BTEE 0x18
|
||
#define CH_LTEE 0x01
|
||
#define CH_RTEE 0x04
|
||
#define CH_CROSS 0x13
|
||
#define CH_HLINE 0x12
|
||
#define CH_VLINE 0x7C
|
||
|
||
/* color defines */
|
||
|
||
/* make GTIA color value */
|
||
#define _gtia_mkcolor(hue,lum) (((hue) << 4) | ((lum) << 1))
|
||
|
||
/* luminance values go from 0 (black) to 7 (white) */
|
||
|
||
/* hue values */
|
||
#define HUE_GREY 0
|
||
#define HUE_GOLD 1
|
||
#define HUE_GOLDORANGE 2
|
||
#define HUE_REDORANGE 3
|
||
#define HUE_ORANGE 4
|
||
#define HUE_MAGENTA 5
|
||
#define HUE_PURPLE 6
|
||
#define HUE_BLUE 7
|
||
#define HUE_BLUE2 8
|
||
#define HUE_CYAN 9
|
||
#define HUE_BLUEGREEN 10
|
||
#define HUE_BLUEGREEN2 11
|
||
#define HUE_GREEN 12
|
||
#define HUE_YELLOWGREEN 13
|
||
#define HUE_YELLOW 14
|
||
#define HUE_YELLOWRED 15
|
||
|
||
/* Color defines, similar to c64 colors (untested) */
|
||
/* Note that the conio color implementation is monochrome (bgcolor and textcolor are only placeholders) */
|
||
/* Use the defines with the setcolor() or _atari_xxxcolor() functions */
|
||
#define COLOR_BLACK _gtia_mkcolor(HUE_GREY,0)
|
||
#define COLOR_WHITE _gtia_mkcolor(HUE_GREY,7)
|
||
#define COLOR_RED _gtia_mkcolor(HUE_REDORANGE,1)
|
||
#define COLOR_CYAN _gtia_mkcolor(HUE_CYAN,3)
|
||
#define COLOR_VIOLET _gtia_mkcolor(HUE_PURPLE,4)
|
||
#define COLOR_GREEN _gtia_mkcolor(HUE_GREEN,2)
|
||
#define COLOR_BLUE _gtia_mkcolor(HUE_BLUE,2)
|
||
#define COLOR_YELLOW _gtia_mkcolor(HUE_YELLOW,7)
|
||
#define COLOR_ORANGE _gtia_mkcolor(HUE_ORANGE,5)
|
||
#define COLOR_BROWN _gtia_mkcolor(HUE_YELLOW,2)
|
||
#define COLOR_LIGHTRED _gtia_mkcolor(HUE_REDORANGE,6)
|
||
#define COLOR_GRAY1 _gtia_mkcolor(HUE_GREY,2)
|
||
#define COLOR_GRAY2 _gtia_mkcolor(HUE_GREY,3)
|
||
#define COLOR_LIGHTGREEN _gtia_mkcolor(HUE_GREEN,6)
|
||
#define COLOR_LIGHTBLUE _gtia_mkcolor(HUE_BLUE,6)
|
||
#define COLOR_GRAY3 _gtia_mkcolor(HUE_GREY,5)
|
||
|
||
/* TGI color defines */
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||
#define TGI_COLOR_RED COLOR_RED
|
||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_ORANGE COLOR_ORANGE
|
||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||
#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED
|
||
#define TGI_COLOR_GRAY1 COLOR_GRAY1
|
||
#define TGI_COLOR_GRAY2 COLOR_GRAY2
|
||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||
#define TGI_COLOR_GRAY3 COLOR_GRAY3
|
||
|
||
/* color register functions */
|
||
extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminace);
|
||
extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value);
|
||
extern unsigned char __fastcall__ _getcolor (unsigned char color_reg);
|
||
|
||
/* other screen functions */
|
||
extern int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */
|
||
extern void __fastcall__ _scroll (signed char numlines);
|
||
/* numlines > 0 scrolls up */
|
||
/* numlines < 0 scrolls down */
|
||
|
||
/* misc. functions */
|
||
extern unsigned char get_ostype(void); /* get ROM version */
|
||
extern unsigned char get_tv(void); /* get TV system */
|
||
extern void _save_vecs(void); /* save system vectors */
|
||
extern void _rest_vecs(void); /* restore system vectors */
|
||
extern char *_getdefdev(void); /* get default floppy device */
|
||
extern unsigned char _is_cmdline_dos(void); /* does DOS support command lines */
|
||
|
||
/* global variables */
|
||
extern unsigned char _dos_type; /* the DOS flavour */
|
||
#ifndef __ATARIXL__
|
||
extern void atr130_emd[];
|
||
extern void atrstd_joy[]; /* referred to by joy_static_stddrv[] */
|
||
extern void atrmj8_joy[];
|
||
extern void atrjoy_mou[];
|
||
extern void atrst_mou[]; /* referred to by mouse_static_stddrv[] */
|
||
extern void atrami_mou[];
|
||
extern void atrtrk_mou[];
|
||
extern void atrtt_mou[];
|
||
extern void atrrdev_ser[];
|
||
extern void atr3_tgi[];
|
||
extern void atr4_tgi[];
|
||
extern void atr5_tgi[];
|
||
extern void atr6_tgi[];
|
||
extern void atr7_tgi[];
|
||
extern void atr8_tgi[]; /* referred to by tgi_static_stddrv[] */
|
||
extern void atr8p2_tgi[];
|
||
extern void atr9_tgi[];
|
||
extern void atr9p2_tgi[];
|
||
extern void atr10_tgi[];
|
||
extern void atr10p2_tgi[];
|
||
extern void atr11_tgi[];
|
||
extern void atr14_tgi[];
|
||
extern void atr15_tgi[];
|
||
extern void atr15p2_tgi[];
|
||
#else
|
||
extern void atrx130_emd[];
|
||
extern void atrxstd_joy[]; /* referred to by joy_static_stddrv[] */
|
||
extern void atrxmj8_joy[];
|
||
extern void atrxjoy_mou[];
|
||
extern void atrxst_mou[]; /* referred to by mouse_static_stddrv[] */
|
||
extern void atrxami_mou[];
|
||
extern void atrxtrk_mou[];
|
||
extern void atrxtt_mou[];
|
||
extern void atrxrdev_ser[];
|
||
extern void atrx3_tgi[];
|
||
extern void atrx4_tgi[];
|
||
extern void atrx5_tgi[];
|
||
extern void atrx6_tgi[];
|
||
extern void atrx7_tgi[];
|
||
extern void atrx8_tgi[]; /* referred to by tgi_static_stddrv[] */
|
||
extern void atrx8p2_tgi[];
|
||
extern void atrx9_tgi[];
|
||
extern void atrx9p2_tgi[];
|
||
extern void atrx10_tgi[];
|
||
extern void atrx10p2_tgi[];
|
||
extern void atrx11_tgi[];
|
||
extern void atrx14_tgi[];
|
||
extern void atrx15_tgi[];
|
||
extern void atrx15p2_tgi[];
|
||
#endif
|
||
|
||
/* provide old names for backwards compatibility */
|
||
#ifdef ATARI_COMPAT_PRE_2_11
|
||
#define setcolor _setcolor
|
||
#define setcolor_low _setcolor_low
|
||
#define getcolor _getcolor
|
||
#define graphics _graphics
|
||
#define scroll _scroll
|
||
#define save_vecs _save_vecs
|
||
#define rest_vecs _rest_vecs
|
||
#define getdefdev _getdefdev
|
||
#endif /* #ifdef ATARI_COMPAT_PRE_2_11 */
|
||
|
||
/* get_ostype return value defines (for explanation, see ostype.s) */
|
||
/* masks */
|
||
#define AT_OS_TYPE_MAIN 7
|
||
#define AT_OS_TYPE_MINOR (7 << 3)
|
||
/* AT_OS_TYPE_MAIN values */
|
||
#define AT_OS_UNKNOWN 0
|
||
#define AT_OS_400800 1
|
||
#define AT_OS_1200XL 2
|
||
#define AT_OS_XLXE 3
|
||
/* AS_OS_TYPE_MINOR values */
|
||
/* for 400/800 remember this are the ROM versions */
|
||
/* to check whether the hw is PAL or NTSC, use get_tv() */
|
||
#define AT_OS_400800PAL_A 1
|
||
#define AT_OS_400800PAL_B 2
|
||
#define AT_OS_400800NTSC_A 1
|
||
#define AT_OS_400800NTSC_B 2
|
||
#define AT_OS_1200_10 1
|
||
#define AT_OS_1200_11 2
|
||
#define AT_OS_XLXE_1 1
|
||
#define AT_OS_XLXE_2 2
|
||
#define AT_OS_XLXE_3 3
|
||
#define AT_OS_XLXE_4 4
|
||
|
||
/* get_tv return values */
|
||
#define AT_NTSC 0
|
||
#define AT_PAL 1
|
||
|
||
/* valid _dos_type values */
|
||
#define SPARTADOS 0
|
||
#define OSADOS 1
|
||
#define XDOS 2
|
||
#define ATARIDOS 3
|
||
#define MYDOS 4
|
||
#define NODOS 255
|
||
|
||
/* Define hardware */
|
||
#include <_gtia.h>
|
||
#define GTIA_READ (*(struct __gtia_read*)0xD000)
|
||
#define GTIA_WRITE (*(struct __gtia_write*)0xD000)
|
||
|
||
#include <_pbi.h>
|
||
|
||
#include <_pokey.h>
|
||
#define POKEY_READ (*(struct __pokey_read*)0xD200)
|
||
#define POKEY_WRITE (*(struct __pokey_write*)0xD200)
|
||
|
||
#include <_pia.h>
|
||
#define PIA (*(struct __pia*)0xD300)
|
||
|
||
#include <_antic.h>
|
||
#define ANTIC (*(struct __antic*)0xD400)
|
||
|
||
/* device control block */
|
||
struct __dcb {
|
||
unsigned char device; /* device id */
|
||
unsigned char unit; /* unit number */
|
||
unsigned char command; /* command */
|
||
unsigned char status; /* command type / status return */
|
||
void *buffer; /* pointer to buffer */
|
||
unsigned char timeout; /* device timeout in seconds */
|
||
unsigned char unused;
|
||
unsigned int xfersize; /* # of bytes to transfer */
|
||
unsigned char aux1; /* 1st command auxiliary byte */
|
||
unsigned char aux2; /* 2nd command auxiliary byte */
|
||
};
|
||
#define DCB (*(struct __dcb *)0x300)
|
||
|
||
/* I/O control block */
|
||
struct __iocb {
|
||
unsigned char handler; /* handler index number (0xff free) */
|
||
unsigned char drive; /* device number (drive) */
|
||
unsigned char command; /* command */
|
||
unsigned char status; /* status of last operation */
|
||
void *buffer; /* pointer to buffer */
|
||
void *put_byte; /* pointer to device's PUT BYTE routine */
|
||
unsigned int buflen; /* length of buffer */
|
||
unsigned char aux1; /* 1st auxiliary byte */
|
||
unsigned char aux2; /* 2nd auxiliary byte */
|
||
unsigned char aux3; /* 3rd auxiliary byte */
|
||
unsigned char aux4; /* 4th auxiliary byte */
|
||
unsigned char aux5; /* 5th auxiliary byte */
|
||
unsigned char spare; /* spare byte */
|
||
};
|
||
#define ZIOCB (*(struct __iocb *)0x20) /* zero page IOCB */
|
||
#define IOCB (*(struct __iocb *)0x340) /* system IOCB buffers */
|
||
|
||
/* IOCB Command Codes */
|
||
#define IOCB_OPEN 0x03 /* open */
|
||
#define IOCB_GETREC 0x05 /* get record */
|
||
#define IOCB_GETCHR 0x07 /* get character(s) */
|
||
#define IOCB_PUTREC 0x09 /* put record */
|
||
#define IOCB_PUTCHR 0x0B /* put character(s) */
|
||
#define IOCB_CLOSE 0x0C /* close */
|
||
#define IOCB_STATIS 0x0D /* status */
|
||
#define IOCB_SPECIL 0x0E /* special */
|
||
#define IOCB_DRAWLN 0x11 /* draw line */
|
||
#define IOCB_FILLIN 0x12 /* draw line with right fill */
|
||
#define IOCB_RENAME 0x20 /* rename disk file */
|
||
#define IOCB_DELETE 0x21 /* delete disk file */
|
||
#define IOCB_LOCKFL 0x23 /* lock file (set to read-only) */
|
||
#define IOCB_UNLOCK 0x24 /* unlock file */
|
||
#define IOCB_POINT 0x25 /* point sector */
|
||
#define IOCB_NOTE 0x26 /* note sector */
|
||
#define IOCB_GETFL 0x27 /* get file length */
|
||
#define IOCB_CHDIR_MYDOS 0x29 /* change directory (MyDOS) */
|
||
#define IOCB_MKDIR 0x2A /* make directory (MyDOS/SpartaDOS) */
|
||
#define IOCB_RMDIR 0x2B /* remove directory (SpartaDOS) */
|
||
#define IOCB_CHDIR_SPDOS 0x2C /* change directory (SpartaDOS) */
|
||
#define IOCB_GETCWD 0x30 /* get current directory (MyDOS/SpartaDOS) */
|
||
#define IOCB_FORMAT 0xFE /* format */
|
||
|
||
/* End of atari.h */
|
||
#endif /* #ifndef _ATARI_H */
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* atari_screen_charmap.h */
|
||
/* */
|
||
/* Atari system internal string mapping (ISO-8859-1 -> Internal/Screen-Code) */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2016 Christian Krueger */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
/* No include guard here! Multiple use in one file may be intentional. */
|
||
|
||
#pragma warn (remap-zero, push, off)
|
||
#pragma charmap (0x00, 0x40)
|
||
#pragma warn (remap-zero, pop)
|
||
|
||
#pragma charmap (0x01, 0x41)
|
||
#pragma charmap (0x02, 0x42)
|
||
#pragma charmap (0x03, 0x43)
|
||
#pragma charmap (0x04, 0x44)
|
||
#pragma charmap (0x05, 0x45)
|
||
#pragma charmap (0x06, 0x46)
|
||
#pragma charmap (0x07, 0xFD)
|
||
#pragma charmap (0x08, 0x48)
|
||
#pragma charmap (0x09, 0x7F)
|
||
#pragma charmap (0x0A, 0xDB)
|
||
#pragma charmap (0x0B, 0x4B)
|
||
#pragma charmap (0x0C, 0x7D)
|
||
#pragma charmap (0x0D, 0x4D)
|
||
#pragma charmap (0x0E, 0x4E)
|
||
#pragma charmap (0x0F, 0x4F)
|
||
|
||
#pragma charmap (0x10, 0x50)
|
||
#pragma charmap (0x11, 0x51)
|
||
#pragma charmap (0x12, 0x52)
|
||
#pragma charmap (0x13, 0x53)
|
||
#pragma charmap (0x14, 0x54)
|
||
#pragma charmap (0x15, 0x55)
|
||
#pragma charmap (0x16, 0x56)
|
||
#pragma charmap (0x17, 0x57)
|
||
#pragma charmap (0x18, 0x58)
|
||
#pragma charmap (0x19, 0x59)
|
||
#pragma charmap (0x1A, 0x5A)
|
||
#pragma charmap (0x1B, 0x5B)
|
||
#pragma charmap (0x1C, 0x5C)
|
||
#pragma charmap (0x1D, 0x5D)
|
||
#pragma charmap (0x1E, 0x5E)
|
||
#pragma charmap (0x1F, 0x5F)
|
||
|
||
#pragma warn (remap-zero, push, off)
|
||
#pragma charmap (0x20, 0x00)
|
||
#pragma warn (remap-zero, pop)
|
||
|
||
#pragma charmap (0x21, 0x01)
|
||
#pragma charmap (0x22, 0x02)
|
||
#pragma charmap (0x23, 0x03)
|
||
#pragma charmap (0x24, 0x04)
|
||
#pragma charmap (0x25, 0x05)
|
||
#pragma charmap (0x26, 0x06)
|
||
#pragma charmap (0x27, 0x07)
|
||
#pragma charmap (0x28, 0x08)
|
||
#pragma charmap (0x29, 0x09)
|
||
#pragma charmap (0x2A, 0x0A)
|
||
#pragma charmap (0x2B, 0x0B)
|
||
#pragma charmap (0x2C, 0x0C)
|
||
#pragma charmap (0x2D, 0x0D)
|
||
#pragma charmap (0x2E, 0x0E)
|
||
#pragma charmap (0x2F, 0x0F)
|
||
|
||
#pragma charmap (0x30, 0x10)
|
||
#pragma charmap (0x31, 0x11)
|
||
#pragma charmap (0x32, 0x12)
|
||
#pragma charmap (0x33, 0x13)
|
||
#pragma charmap (0x34, 0x14)
|
||
#pragma charmap (0x35, 0x15)
|
||
#pragma charmap (0x36, 0x16)
|
||
#pragma charmap (0x37, 0x17)
|
||
#pragma charmap (0x38, 0x18)
|
||
#pragma charmap (0x39, 0x19)
|
||
#pragma charmap (0x3A, 0x1A)
|
||
#pragma charmap (0x3B, 0x1B)
|
||
#pragma charmap (0x3C, 0x1C)
|
||
#pragma charmap (0x3D, 0x1D)
|
||
#pragma charmap (0x3E, 0x1E)
|
||
#pragma charmap (0x3F, 0x1F)
|
||
|
||
#pragma charmap (0x40, 0x20)
|
||
#pragma charmap (0x41, 0x21)
|
||
#pragma charmap (0x42, 0x22)
|
||
#pragma charmap (0x43, 0x23)
|
||
#pragma charmap (0x44, 0x24)
|
||
#pragma charmap (0x45, 0x25)
|
||
#pragma charmap (0x46, 0x26)
|
||
#pragma charmap (0x47, 0x27)
|
||
#pragma charmap (0x48, 0x28)
|
||
#pragma charmap (0x49, 0x29)
|
||
#pragma charmap (0x4A, 0x2A)
|
||
#pragma charmap (0x4B, 0x2B)
|
||
#pragma charmap (0x4C, 0x2C)
|
||
#pragma charmap (0x4D, 0x2D)
|
||
#pragma charmap (0x4E, 0x2E)
|
||
#pragma charmap (0x4F, 0x2F)
|
||
|
||
#pragma charmap (0x50, 0x30)
|
||
#pragma charmap (0x51, 0x31)
|
||
#pragma charmap (0x52, 0x32)
|
||
#pragma charmap (0x53, 0x33)
|
||
#pragma charmap (0x54, 0x34)
|
||
#pragma charmap (0x55, 0x35)
|
||
#pragma charmap (0x56, 0x36)
|
||
#pragma charmap (0x57, 0x37)
|
||
#pragma charmap (0x58, 0x38)
|
||
#pragma charmap (0x59, 0x39)
|
||
#pragma charmap (0x5A, 0x3A)
|
||
#pragma charmap (0x5B, 0x3B)
|
||
#pragma charmap (0x5C, 0x3C)
|
||
#pragma charmap (0x5D, 0x3D)
|
||
#pragma charmap (0x5E, 0x3E)
|
||
#pragma charmap (0x5F, 0x3F)
|
||
|
||
#pragma charmap (0x60, 0x60)
|
||
#pragma charmap (0x61, 0x61)
|
||
#pragma charmap (0x62, 0x62)
|
||
#pragma charmap (0x63, 0x63)
|
||
#pragma charmap (0x64, 0x64)
|
||
#pragma charmap (0x65, 0x65)
|
||
#pragma charmap (0x66, 0x66)
|
||
#pragma charmap (0x67, 0x67)
|
||
#pragma charmap (0x68, 0x68)
|
||
#pragma charmap (0x69, 0x69)
|
||
#pragma charmap (0x6A, 0x6A)
|
||
#pragma charmap (0x6B, 0x6B)
|
||
#pragma charmap (0x6C, 0x6C)
|
||
#pragma charmap (0x6D, 0x6D)
|
||
#pragma charmap (0x6E, 0x6E)
|
||
#pragma charmap (0x6F, 0x6F)
|
||
|
||
#pragma charmap (0x70, 0x70)
|
||
#pragma charmap (0x71, 0x71)
|
||
#pragma charmap (0x72, 0x72)
|
||
#pragma charmap (0x73, 0x73)
|
||
#pragma charmap (0x74, 0x74)
|
||
#pragma charmap (0x75, 0x75)
|
||
#pragma charmap (0x76, 0x76)
|
||
#pragma charmap (0x77, 0x77)
|
||
#pragma charmap (0x78, 0x78)
|
||
#pragma charmap (0x79, 0x79)
|
||
#pragma charmap (0x7A, 0x7A)
|
||
#pragma charmap (0x7B, 0x7B)
|
||
#pragma charmap (0x7C, 0x7C)
|
||
#pragma charmap (0x7D, 0x7D)
|
||
#pragma charmap (0x7E, 0x7E)
|
||
#pragma charmap (0x7F, 0x7F)
|
||
|
||
#pragma charmap (0x80, 0xC0)
|
||
#pragma charmap (0x81, 0xC1)
|
||
#pragma charmap (0x82, 0xC2)
|
||
#pragma charmap (0x83, 0xC3)
|
||
#pragma charmap (0x84, 0xC4)
|
||
#pragma charmap (0x85, 0xC5)
|
||
#pragma charmap (0x86, 0xC6)
|
||
#pragma charmap (0x87, 0xC7)
|
||
#pragma charmap (0x88, 0xC8)
|
||
#pragma charmap (0x89, 0xC9)
|
||
#pragma charmap (0x8A, 0xCA)
|
||
#pragma charmap (0x8B, 0xCB)
|
||
#pragma charmap (0x8C, 0xCC)
|
||
#pragma charmap (0x8D, 0xCD)
|
||
#pragma charmap (0x8E, 0xCE)
|
||
#pragma charmap (0x8F, 0xCF)
|
||
|
||
#pragma charmap (0x90, 0xD0)
|
||
#pragma charmap (0x91, 0xD1)
|
||
#pragma charmap (0x92, 0xD2)
|
||
#pragma charmap (0x93, 0xD3)
|
||
#pragma charmap (0x94, 0xD4)
|
||
#pragma charmap (0x95, 0xD5)
|
||
#pragma charmap (0x96, 0xD6)
|
||
#pragma charmap (0x97, 0xD7)
|
||
#pragma charmap (0x98, 0xD8)
|
||
#pragma charmap (0x99, 0xD9)
|
||
#pragma charmap (0x9A, 0xDA)
|
||
#pragma charmap (0x9B, 0xDB)
|
||
#pragma charmap (0x9C, 0xDC)
|
||
#pragma charmap (0x9D, 0xDD)
|
||
#pragma charmap (0x9E, 0xDE)
|
||
#pragma charmap (0x9F, 0xDF)
|
||
|
||
#pragma charmap (0xA0, 0x80)
|
||
#pragma charmap (0xA1, 0x81)
|
||
#pragma charmap (0xA2, 0x82)
|
||
#pragma charmap (0xA3, 0x83)
|
||
#pragma charmap (0xA4, 0x84)
|
||
#pragma charmap (0xA5, 0x85)
|
||
#pragma charmap (0xA6, 0x86)
|
||
#pragma charmap (0xA7, 0x87)
|
||
#pragma charmap (0xA8, 0x88)
|
||
#pragma charmap (0xA9, 0x89)
|
||
#pragma charmap (0xAA, 0x8A)
|
||
#pragma charmap (0xAB, 0x8B)
|
||
#pragma charmap (0xAC, 0x8C)
|
||
#pragma charmap (0xAD, 0x8D)
|
||
#pragma charmap (0xAE, 0x8E)
|
||
#pragma charmap (0xAF, 0x8F)
|
||
|
||
#pragma charmap (0xB0, 0x90)
|
||
#pragma charmap (0xB1, 0x91)
|
||
#pragma charmap (0xB2, 0x92)
|
||
#pragma charmap (0xB3, 0x93)
|
||
#pragma charmap (0xB4, 0x94)
|
||
#pragma charmap (0xB5, 0x95)
|
||
#pragma charmap (0xB6, 0x96)
|
||
#pragma charmap (0xB7, 0x97)
|
||
#pragma charmap (0xB8, 0x98)
|
||
#pragma charmap (0xB9, 0x99)
|
||
#pragma charmap (0xBA, 0x9A)
|
||
#pragma charmap (0xBB, 0x9B)
|
||
#pragma charmap (0xBC, 0x9C)
|
||
#pragma charmap (0xBD, 0x9D)
|
||
#pragma charmap (0xBE, 0x9E)
|
||
#pragma charmap (0xBF, 0x9F)
|
||
|
||
#pragma charmap (0xC0, 0xA0)
|
||
#pragma charmap (0xC1, 0xA1)
|
||
#pragma charmap (0xC2, 0xA2)
|
||
#pragma charmap (0xC3, 0xA3)
|
||
#pragma charmap (0xC4, 0xA4)
|
||
#pragma charmap (0xC5, 0xA5)
|
||
#pragma charmap (0xC6, 0xA6)
|
||
#pragma charmap (0xC7, 0xA7)
|
||
#pragma charmap (0xC8, 0xA8)
|
||
#pragma charmap (0xC9, 0xA9)
|
||
#pragma charmap (0xCA, 0xAA)
|
||
#pragma charmap (0xCB, 0xAB)
|
||
#pragma charmap (0xCC, 0xAC)
|
||
#pragma charmap (0xCD, 0xAD)
|
||
#pragma charmap (0xCE, 0xAE)
|
||
#pragma charmap (0xCF, 0xAF)
|
||
|
||
#pragma charmap (0xD0, 0xB0)
|
||
#pragma charmap (0xD1, 0xB1)
|
||
#pragma charmap (0xD2, 0xB2)
|
||
#pragma charmap (0xD3, 0xB3)
|
||
#pragma charmap (0xD4, 0xB4)
|
||
#pragma charmap (0xD5, 0xB5)
|
||
#pragma charmap (0xD6, 0xB6)
|
||
#pragma charmap (0xD7, 0xB7)
|
||
#pragma charmap (0xD8, 0xB8)
|
||
#pragma charmap (0xD9, 0xB9)
|
||
#pragma charmap (0xDA, 0xBA)
|
||
#pragma charmap (0xDB, 0xBB)
|
||
#pragma charmap (0xDC, 0xBC)
|
||
#pragma charmap (0xDD, 0xBD)
|
||
#pragma charmap (0xDE, 0xBE)
|
||
#pragma charmap (0xDF, 0xBF)
|
||
|
||
#pragma charmap (0xE0, 0xE0)
|
||
#pragma charmap (0xE1, 0xE1)
|
||
#pragma charmap (0xE2, 0xE2)
|
||
#pragma charmap (0xE3, 0xE3)
|
||
#pragma charmap (0xE4, 0xE4)
|
||
#pragma charmap (0xE5, 0xE5)
|
||
#pragma charmap (0xE6, 0xE6)
|
||
#pragma charmap (0xE7, 0xE7)
|
||
#pragma charmap (0xE8, 0xE8)
|
||
#pragma charmap (0xE9, 0xE9)
|
||
#pragma charmap (0xEA, 0xEA)
|
||
#pragma charmap (0xEB, 0xEB)
|
||
#pragma charmap (0xEC, 0xEC)
|
||
#pragma charmap (0xED, 0xED)
|
||
#pragma charmap (0xEE, 0xEE)
|
||
#pragma charmap (0xEF, 0xEF)
|
||
|
||
#pragma charmap (0xF0, 0xF0)
|
||
#pragma charmap (0xF1, 0xF1)
|
||
#pragma charmap (0xF2, 0xF2)
|
||
#pragma charmap (0xF3, 0xF3)
|
||
#pragma charmap (0xF4, 0xF4)
|
||
#pragma charmap (0xF5, 0xF5)
|
||
#pragma charmap (0xF6, 0xF6)
|
||
#pragma charmap (0xF7, 0xF7)
|
||
#pragma charmap (0xF8, 0xF8)
|
||
#pragma charmap (0xF9, 0xF9)
|
||
#pragma charmap (0xFA, 0xFA)
|
||
#pragma charmap (0xFB, 0xFB)
|
||
#pragma charmap (0xFC, 0xFC)
|
||
#pragma charmap (0xFD, 0xFD)
|
||
#pragma charmap (0xFE, 0xFE)
|
||
#pragma charmap (0xFF, 0xFF)
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stdlib.h */
|
||
/* */
|
||
/* General utilities */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STDLIB_H
|
||
#define _STDLIB_H
|
||
|
||
|
||
|
||
/* size_t is needed */
|
||
#ifndef _HAVE_size_t
|
||
typedef unsigned size_t;
|
||
#define _HAVE_size_t
|
||
#endif
|
||
|
||
/* Standard exit codes */
|
||
#define EXIT_SUCCESS 0
|
||
#define EXIT_FAILURE 1
|
||
|
||
/* Return type of the div function */
|
||
typedef struct {
|
||
int rem;
|
||
int quot;
|
||
} div_t;
|
||
|
||
/* Return type of the ldiv function (which currently doesn't exist) */
|
||
typedef struct {
|
||
long rem;
|
||
long quot;
|
||
} ldiv_t;
|
||
|
||
/* Memory management */
|
||
void* __fastcall__ malloc (size_t size);
|
||
void* __fastcall__ calloc (size_t count, size_t size);
|
||
void* __fastcall__ realloc (void* block, size_t size);
|
||
void __fastcall__ free (void* block);
|
||
|
||
/* Non standard memory management functions */
|
||
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size);
|
||
/* Allocate a block of memory with the given "size", which is aligned to a
|
||
** memory address that is a multiple of "alignment". "alignment" MUST NOT be
|
||
** zero, and MUST be a power of two; otherwise, this function will return
|
||
** EINVAL. The function returns ENOMEM if not enough memory is available
|
||
** to satisfy the request. "memptr" must point to a variable; that variable
|
||
** will return the address of the allocated memory. Use free() to release that
|
||
** allocated block.
|
||
*/
|
||
#endif
|
||
|
||
void __fastcall__ _heapadd (void* mem, size_t size);
|
||
/* Add a block to the heap */
|
||
|
||
size_t __fastcall__ _heapblocksize (const void* block);
|
||
/* Return the size of an allocated block */
|
||
|
||
size_t _heapmemavail (void);
|
||
/* Return the total free heap space */
|
||
|
||
size_t _heapmaxavail (void);
|
||
/* Return the size of the largest free block on the heap */
|
||
|
||
|
||
/* Random numbers */
|
||
#define RAND_MAX 0x7FFF
|
||
int rand (void);
|
||
void __fastcall__ srand (unsigned seed);
|
||
void _randomize (void); /* Non-standard */
|
||
|
||
/* Other standard stuff */
|
||
void abort (void) __attribute__ ((noreturn));
|
||
int __fastcall__ abs (int val);
|
||
long __fastcall__ labs (long val);
|
||
int __fastcall__ atoi (const char* s);
|
||
long __fastcall__ atol (const char* s);
|
||
int __fastcall__ atexit (void (*exitfunc) (void));
|
||
void* __fastcall__ bsearch (const void* key, const void* base, size_t n,
|
||
size_t size, int __fastcall__ (* cmp) (const void*, const void*));
|
||
div_t __fastcall__ div (int numer, int denom);
|
||
void __fastcall__ exit (int ret) __attribute__ ((noreturn));
|
||
char* __fastcall__ getenv (const char* name);
|
||
void __fastcall__ qsort (void* base, size_t count, size_t size,
|
||
int __fastcall__ (* compare) (const void*, const void*));
|
||
long __fastcall__ strtol (const char* nptr, char** endptr, int base);
|
||
unsigned long __fastcall__ strtoul (const char* nptr, char** endptr, int base);
|
||
int __fastcall__ system (const char* s);
|
||
|
||
/* Non-ANSI functions */
|
||
void __fastcall__ _swap (void* p, void* q, size_t size);
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
char* __fastcall__ itoa (int val, char* buf, int radix);
|
||
char* __fastcall__ utoa (unsigned val, char* buf, int radix);
|
||
char* __fastcall__ ltoa (long val, char* buf, int radix);
|
||
char* __fastcall__ ultoa (unsigned long val, char* buf, int radix);
|
||
int __fastcall__ putenv (char* s);
|
||
#endif
|
||
|
||
|
||
|
||
/* End of stdlib.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* pen.h */
|
||
/* */
|
||
/* Lightpen API */
|
||
/* */
|
||
/* */
|
||
/* This software is provided "as-is", without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated, but is not required. */
|
||
/* 2. Altered source versions must be marked plainly as such; and, must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _PEN_H
|
||
#define _PEN_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Declarations */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* A program optionally can set this pointer to a function that gives
|
||
** a calibration value to a driver. If this pointer isn't NULL,
|
||
** then a driver that wants a value can call that function.
|
||
** pen_adjuster must be set before the driver is installed.
|
||
*/
|
||
extern void __fastcall__ (*pen_adjuster) (unsigned char *pValue);
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ pen_calibrate (unsigned char *XOffset);
|
||
/* Ask the user to help to calibrate a lightpen. Changes the screen!
|
||
** A pointer to this function can be put into pen_adjuster.
|
||
*/
|
||
|
||
void __fastcall__ pen_adjust (const char *filename);
|
||
/* Get a lightpen calibration value from a file if it exists. Otherwise, call
|
||
** pen_calibrate() to create a value; then, write it into a file, so that it
|
||
** will be available at the next time that the lightpen is used.
|
||
** Might change the screen.
|
||
** pen_adjust() is optional; if you want to use its feature,
|
||
** then it must be called before a driver is installed.
|
||
** Note: This function merely saves the file-name pointer, and sets
|
||
** the pen_adjuster pointer. The file will be read only when a driver
|
||
** is installed, and only if that driver wants to be calibrated.
|
||
*/
|
||
|
||
|
||
|
||
/* End of pen.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stdbool.h */
|
||
/* */
|
||
/* C99 Boolean definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Greg King */
|
||
/* */
|
||
/* */
|
||
/* This software is provided "as-is," without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment, in the product's documentation, */
|
||
/* would be appreciated, but is not required. */
|
||
/* 2. Alterred source versions must be marked plainly as such, */
|
||
/* and must not be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or alterred */
|
||
/* from any source distribution. */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STDBOOL_H
|
||
#define _STDBOOL_H
|
||
|
||
|
||
|
||
#define bool _Bool
|
||
typedef unsigned char _Bool;
|
||
|
||
/* Standard test-results. */
|
||
#define false 0
|
||
#define true 1
|
||
|
||
/* All three names are macroes. */
|
||
#define __bool_true_false_are_defined 1
|
||
|
||
|
||
|
||
/* End of stdbool.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* cc65.h */
|
||
/* */
|
||
/* Target independent but cc65 specific utility functions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2009-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CC65_H
|
||
#define _CC65_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
long __fastcall__ cc65_idiv32by16r16 (long rhs, int lhs);
|
||
/* Divide a 32 bit signed value by a 16 bit signed value yielding a 16
|
||
** bit result and a 16 bit remainder. The former is returned in the lower 16
|
||
** bit of the result, the latter in the upper. If you don't need the
|
||
** remainder, just assign (or cast) to an int.
|
||
*/
|
||
|
||
unsigned long __fastcall__ cc65_udiv32by16r16 (unsigned long rhs, unsigned lhs);
|
||
/* Divide a 32 bit unsigned value by a 16 bit unsigned value yielding a 16
|
||
** bit result and a 16 bit remainder. The former is returned in the lower 16
|
||
** bit of the result, the latter in the upper. If you don't need the
|
||
** remainder, just assign (or cast) to an unsigned.
|
||
*/
|
||
|
||
int __fastcall__ cc65_imul8x8r16 (signed char lhs, signed char rhs);
|
||
/* Multiplicate two signed 8 bit to yield an signed 16 bit result */
|
||
|
||
long __fastcall__ cc65_imul16x16r32 (int lhs, int rhs);
|
||
/* Multiplicate two signed 16 bit to yield a signed 32 bit result */
|
||
|
||
unsigned __fastcall__ cc65_umul8x8r16 (unsigned char lhs, unsigned char rhs);
|
||
/* Multiplicate two unsigned 8 bit to yield an unsigned 16 bit result */
|
||
|
||
unsigned long __fastcall__ cc65_umul16x8r32 (unsigned lhs, unsigned char rhs);
|
||
/* Multiplicate an unsigned 16 bit by an unsigned 8 bit number yielding a 24
|
||
** bit unsigned result that is extended to 32 bits for easier handling from C.
|
||
*/
|
||
|
||
unsigned long __fastcall__ cc65_umul16x16r32 (unsigned lhs, unsigned rhs);
|
||
/* Multiplicate two unsigned 16 bit to yield an unsigned 32 bit result */
|
||
|
||
int __fastcall__ cc65_sin (unsigned x);
|
||
/* Return the sine of the argument, which must be in range 0..360. The result
|
||
** is in 8.8 fixed point format, which means that 1.0 = $100 and -1.0 = $FF00.
|
||
*/
|
||
|
||
int __fastcall__ cc65_cos (unsigned x);
|
||
/* Return the cosine of the argument, which must be in range 0..360. The result
|
||
** is in 8.8 fixed point format, which means that 1.0 = $100 and -1.0 = $FF00.
|
||
*/
|
||
|
||
unsigned char doesclrscrafterexit (void);
|
||
/* Indicates whether the screen automatically be cleared after program
|
||
** termination.
|
||
*/
|
||
|
||
|
||
|
||
/* End of cc65.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* signal.h */
|
||
/* */
|
||
/* Signal handling definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2005, Ullrich von Bassewitz */
|
||
/* R<>merstra<72>e 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _SIGNAL_H
|
||
#define _SIGNAL_H
|
||
|
||
|
||
|
||
/* sig_atomic_t */
|
||
typedef unsigned char sig_atomic_t;
|
||
|
||
/* Type of a signal handler */
|
||
typedef void __fastcall__ (*__sigfunc) (int);
|
||
|
||
/* Functions that implement SIG_IGN and SIG_DFL */
|
||
void __fastcall__ _sig_ign (int);
|
||
void __fastcall__ _sig_dfl (int);
|
||
|
||
/* Standard signal handling functions */
|
||
#define SIG_DFL _sig_dfl
|
||
#define SIG_IGN _sig_ign
|
||
#define SIG_ERR ((__sigfunc) 0x0000)
|
||
|
||
/* Signal numbers */
|
||
#define SIGABRT 0
|
||
#define SIGFPE 1
|
||
#define SIGILL 2
|
||
#define SIGINT 3
|
||
#define SIGSEGV 4
|
||
#define SIGTERM 5
|
||
|
||
/* Function declarations */
|
||
__sigfunc __fastcall__ signal (int sig, __sigfunc func);
|
||
int __fastcall__ raise (int sig);
|
||
|
||
|
||
|
||
/* End of signal.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _sid.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __SID_H
|
||
#define __SID_H
|
||
|
||
|
||
|
||
/* Define a structure with the sid register offsets */
|
||
struct __sid_voice {
|
||
unsigned freq; /* Frequency */
|
||
unsigned pw; /* Pulse width */
|
||
unsigned char ctrl; /* Control register */
|
||
unsigned char ad; /* Attack/decay */
|
||
unsigned char sr; /* Sustain/release */
|
||
};
|
||
struct __sid {
|
||
struct __sid_voice v1; /* Voice 1 */
|
||
struct __sid_voice v2; /* Voice 2 */
|
||
struct __sid_voice v3; /* Voice 3 */
|
||
unsigned flt_freq; /* Filter frequency */
|
||
unsigned char flt_ctrl; /* Filter control register */
|
||
unsigned char amp; /* Amplitude */
|
||
unsigned char ad1; /* A/D converter 1 */
|
||
unsigned char ad2; /* A/D converter 2 */
|
||
unsigned char noise; /* Noise generator */
|
||
unsigned char read3; /* Value of voice 3 */
|
||
};
|
||
|
||
|
||
|
||
/* End of _sid.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _vic2.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __VIC2_H
|
||
#define __VIC2_H
|
||
|
||
|
||
|
||
/* Define a structure with the vic register offsets. In cc65 mode, there
|
||
** are aliases for the field accessible as arrays.
|
||
*/
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
struct __vic2 {
|
||
union {
|
||
struct {
|
||
unsigned char spr0_x; /* Sprite 0, X coordinate */
|
||
unsigned char spr0_y; /* Sprite 0, Y coordinate */
|
||
unsigned char spr1_x; /* Sprite 1, X coordinate */
|
||
unsigned char spr1_y; /* Sprite 1, Y coordinate */
|
||
unsigned char spr2_x; /* Sprite 2, X coordinate */
|
||
unsigned char spr2_y; /* Sprite 2, Y coordinate */
|
||
unsigned char spr3_x; /* Sprite 3, X coordinate */
|
||
unsigned char spr3_y; /* Sprite 3, Y coordinate */
|
||
unsigned char spr4_x; /* Sprite 4, X coordinate */
|
||
unsigned char spr4_y; /* Sprite 4, Y coordinate */
|
||
unsigned char spr5_x; /* Sprite 5, X coordinate */
|
||
unsigned char spr5_y; /* Sprite 5, Y coordinate */
|
||
unsigned char spr6_x; /* Sprite 6, X coordinate */
|
||
unsigned char spr6_y; /* Sprite 6, Y coordinate */
|
||
unsigned char spr7_x; /* Sprite 7, X coordinate */
|
||
unsigned char spr7_y; /* Sprite 7, Y coordinate */
|
||
};
|
||
struct {
|
||
unsigned char x; /* X coordinate */
|
||
unsigned char y; /* Y coordinate */
|
||
} spr_pos[8];
|
||
};
|
||
unsigned char spr_hi_x; /* High bits of X coordinate */
|
||
unsigned char ctrl1; /* Control register 1 */
|
||
unsigned char rasterline; /* Current raster line */
|
||
union {
|
||
struct {
|
||
unsigned char strobe_x; /* Light pen, X position */
|
||
unsigned char strobe_y; /* Light pen, Y position */
|
||
};
|
||
struct {
|
||
unsigned char x; /* Light pen, X position */
|
||
unsigned char y; /* Light pen, Y position */
|
||
} strobe;
|
||
};
|
||
unsigned char spr_ena; /* Enable sprites */
|
||
unsigned char ctrl2; /* Control register 2 */
|
||
unsigned char spr_exp_y; /* Expand sprites in Y dir */
|
||
unsigned char addr; /* Address of chargen and video ram */
|
||
unsigned char irr; /* Interrupt request register */
|
||
unsigned char imr; /* Interrupt mask register */
|
||
unsigned char spr_bg_prio; /* Priority to background */
|
||
unsigned char spr_mcolor; /* Sprite multicolor bits */
|
||
unsigned char spr_exp_x; /* Expand sprites in X dir */
|
||
unsigned char spr_coll; /* Sprite/sprite collision reg */
|
||
unsigned char spr_bg_coll; /* Sprite/background collision reg */
|
||
unsigned char bordercolor; /* Border color */
|
||
union {
|
||
struct {
|
||
unsigned char bgcolor0; /* Background color 0 */
|
||
unsigned char bgcolor1; /* Background color 1 */
|
||
unsigned char bgcolor2; /* Background color 2 */
|
||
unsigned char bgcolor3; /* Background color 3 */
|
||
};
|
||
unsigned char bgcolor[4]; /* Background colors */
|
||
};
|
||
union {
|
||
struct {
|
||
unsigned char spr_mcolor0; /* Color 0 for multicolor sprites */
|
||
unsigned char spr_mcolor1; /* Color 1 for multicolor sprites */
|
||
};
|
||
/* spr_color is already used ... */
|
||
unsigned char spr_mcolors[2]; /* Color for multicolor sprites */
|
||
};
|
||
union {
|
||
struct {
|
||
unsigned char spr0_color; /* Color sprite 0 */
|
||
unsigned char spr1_color; /* Color sprite 1 */
|
||
unsigned char spr2_color; /* Color sprite 2 */
|
||
unsigned char spr3_color; /* Color sprite 3 */
|
||
unsigned char spr4_color; /* Color sprite 4 */
|
||
unsigned char spr5_color; /* Color sprite 5 */
|
||
unsigned char spr6_color; /* Color sprite 6 */
|
||
unsigned char spr7_color; /* Color sprite 7 */
|
||
};
|
||
unsigned char spr_color[8]; /* Colors for the sprites */
|
||
};
|
||
|
||
/* The following ones are only valid in the C128: */
|
||
unsigned char x_kbd; /* Additional keyboard lines */
|
||
unsigned char clock; /* Clock switch bit */
|
||
};
|
||
#else
|
||
struct __vic2 {
|
||
unsigned char spr0_x; /* Sprite 0, X coordinate */
|
||
unsigned char spr0_y; /* Sprite 0, Y coordinate */
|
||
unsigned char spr1_x; /* Sprite 1, X coordinate */
|
||
unsigned char spr1_y; /* Sprite 1, Y coordinate */
|
||
unsigned char spr2_x; /* Sprite 2, X coordinate */
|
||
unsigned char spr2_y; /* Sprite 2, Y coordinate */
|
||
unsigned char spr3_x; /* Sprite 3, X coordinate */
|
||
unsigned char spr3_y; /* Sprite 3, Y coordinate */
|
||
unsigned char spr4_x; /* Sprite 4, X coordinate */
|
||
unsigned char spr4_y; /* Sprite 4, Y coordinate */
|
||
unsigned char spr5_x; /* Sprite 5, X coordinate */
|
||
unsigned char spr5_y; /* Sprite 5, Y coordinate */
|
||
unsigned char spr6_x; /* Sprite 6, X coordinate */
|
||
unsigned char spr6_y; /* Sprite 6, Y coordinate */
|
||
unsigned char spr7_x; /* Sprite 7, X coordinate */
|
||
unsigned char spr7_y; /* Sprite 7, Y coordinate */
|
||
unsigned char spr_hi_x; /* High bits of X coordinate */
|
||
unsigned char ctrl1; /* Control register 1 */
|
||
unsigned char rasterline; /* Current raster line */
|
||
unsigned char strobe_x; /* Light pen, X position */
|
||
unsigned char strobe_y; /* Light pen, Y position */
|
||
unsigned char spr_ena; /* Enable sprites */
|
||
unsigned char ctrl2; /* Control register 2 */
|
||
unsigned char spr_exp_y; /* Expand sprites in Y dir */
|
||
unsigned char addr; /* Address of chargen and video ram */
|
||
unsigned char irr; /* Interrupt request register */
|
||
unsigned char imr; /* Interrupt mask register */
|
||
unsigned char spr_bg_prio; /* Priority to background */
|
||
unsigned char spr_mcolor; /* Sprite multicolor bits */
|
||
unsigned char spr_exp_x; /* Expand sprites in X dir */
|
||
unsigned char spr_coll; /* Sprite/sprite collision reg */
|
||
unsigned char spr_bg_coll; /* Sprite/background collision reg */
|
||
unsigned char bordercolor; /* Border color */
|
||
unsigned char bgcolor0; /* Background color 0 */
|
||
unsigned char bgcolor1; /* Background color 1 */
|
||
unsigned char bgcolor2; /* Background color 2 */
|
||
unsigned char bgcolor3; /* Background color 3 */
|
||
unsigned char spr_mcolor0; /* Color 0 for multicolor sprites */
|
||
unsigned char spr_mcolor1; /* Color 1 for multicolor sprites */
|
||
unsigned char spr0_color; /* Color sprite 0 */
|
||
unsigned char spr1_color; /* Color sprite 1 */
|
||
unsigned char spr2_color; /* Color sprite 2 */
|
||
unsigned char spr3_color; /* Color sprite 3 */
|
||
unsigned char spr4_color; /* Color sprite 4 */
|
||
unsigned char spr5_color; /* Color sprite 5 */
|
||
unsigned char spr6_color; /* Color sprite 6 */
|
||
unsigned char spr7_color; /* Color sprite 7 */
|
||
|
||
/* The following ones are only valid in the C128: */
|
||
unsigned char x_kbd; /* Additional keyboard lines */
|
||
unsigned char clock; /* Clock switch bit */
|
||
};
|
||
#endif
|
||
|
||
|
||
|
||
/* End of _vic2.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* unistd.h */
|
||
/* */
|
||
/* Unix compatibility header file for cc65 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _UNISTD_H
|
||
#define _UNISTD_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Predefined file handles */
|
||
#define STDIN_FILENO 0
|
||
#define STDOUT_FILENO 1
|
||
#define STDERR_FILENO 2
|
||
|
||
/* WE need size_t */
|
||
#ifndef _HAVE_size_t
|
||
#define _HAVE_size_t
|
||
typedef unsigned size_t;
|
||
#endif
|
||
|
||
/* We need off_t if sys/types is not included */
|
||
#ifndef _HAVE_off_t
|
||
#define _HAVE_off_t
|
||
typedef long int off_t;
|
||
#endif
|
||
|
||
/* Stuff for getopt */
|
||
extern char *optarg;
|
||
extern int optind, opterr, optopt;
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Files */
|
||
int __fastcall__ write (int fd, const void* buf, unsigned count);
|
||
int __fastcall__ read (int fd, void* buf, unsigned count);
|
||
off_t __fastcall__ lseek (int fd, off_t offset, int whence);
|
||
int __fastcall__ unlink (const char* name); /* Same as remove() */
|
||
|
||
/* Directories */
|
||
int __fastcall__ chdir (const char* name);
|
||
char* __fastcall__ getcwd (char* buf, size_t size);
|
||
int mkdir (const char* name, ...); /* May take a mode argument */
|
||
int __fastcall__ rmdir (const char* name);
|
||
|
||
/* Others */
|
||
unsigned __fastcall__ sleep (unsigned seconds);
|
||
int __fastcall__ getopt (int argc, char* const* argv, const char* optstring);
|
||
|
||
/* Non standard: */
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
int __fastcall__ exec (const char* progname, const char* cmdline);
|
||
#endif
|
||
|
||
|
||
|
||
/* End of unistd.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* ctype.h */
|
||
/* */
|
||
/* Character handling */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2013, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CTYPE_H
|
||
#define _CTYPE_H
|
||
|
||
|
||
/* The array containing character classification data */
|
||
extern unsigned char _ctype[256];
|
||
|
||
/* Bits used to specify character classes */
|
||
#define _CT_LOWER 0x01 /* 0 - Lower case char */
|
||
#define _CT_UPPER 0x02 /* 1 - Upper case char */
|
||
#define _CT_DIGIT 0x04 /* 2 - Numeric digit */
|
||
#define _CT_XDIGIT 0x08 /* 3 - Hex digit (both lower and upper) */
|
||
#define _CT_CNTRL 0x10 /* 4 - Control character */
|
||
#define _CT_SPACE 0x20 /* 5 - The space character itself */
|
||
#define _CT_OTHER_WS 0x40 /* 6 - Other whitespace ('\f', '\n', '\r', '\t', and '\v') */
|
||
#define _CT_SPACE_TAB 0x80 /* 7 - Space or tab character */
|
||
|
||
/* Bit combinations */
|
||
#define _CT_ALNUM (_CT_LOWER | _CT_UPPER | _CT_DIGIT)
|
||
#define _CT_ALPHA (_CT_LOWER | _CT_UPPER)
|
||
#define _CT_NOT_GRAPH (_CT_CNTRL | _CT_SPACE)
|
||
#define _CT_NOT_PRINT (_CT_CNTRL)
|
||
#define _CT_NOT_PUNCT (_CT_SPACE | _CT_CNTRL | _CT_DIGIT | _CT_UPPER | _CT_LOWER)
|
||
#define _CT_WS (_CT_SPACE | _CT_OTHER_WS)
|
||
|
||
/* Character classification functions */
|
||
int __fastcall__ isalnum (int c);
|
||
int __fastcall__ isalpha (int c);
|
||
int __fastcall__ iscntrl (int c);
|
||
int __fastcall__ isdigit (int c);
|
||
int __fastcall__ isgraph (int c);
|
||
int __fastcall__ islower (int c);
|
||
int __fastcall__ isprint (int c);
|
||
int __fastcall__ ispunct (int c);
|
||
int __fastcall__ isspace (int c);
|
||
int __fastcall__ isupper (int c);
|
||
int __fastcall__ isxdigit (int c);
|
||
#if __CC65_STD__ >= __CC65_STD_C99__
|
||
int __fastcall__ isblank (int c); /* New in C99 */
|
||
#endif
|
||
|
||
int __fastcall__ toupper (int c); /* Always external */
|
||
int __fastcall__ tolower (int c); /* Always external */
|
||
|
||
#if __CC65_STD__ >= __CC65_STD_CC65__
|
||
unsigned char __fastcall__ toascii (unsigned char c);
|
||
/* Convert a target-specific character to ASCII. */
|
||
#endif
|
||
|
||
|
||
|
||
/* When inlining-of-known-functions is enabled, overload most of the above
|
||
** functions by macroes. The function prototypes are available again after
|
||
** #undef'ing the macroes.
|
||
** Please note that the following macroes do NOT handle EOF correctly, as
|
||
** stated in the manual. If you need correct behaviour for EOF, don't
|
||
** use -Os, or #undefine the following macroes.
|
||
*/
|
||
#ifdef __OPT_s__
|
||
|
||
#define isalnum(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_ALNUM), \
|
||
__AX__)
|
||
|
||
#define isalpha(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_ALPHA), \
|
||
__AX__)
|
||
|
||
#if __CC65_STD__ >= __CC65_STD_C99__
|
||
#define isblank(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_SPACE_TAB), \
|
||
__AX__)
|
||
#endif
|
||
|
||
#define iscntrl(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_CNTRL), \
|
||
__AX__)
|
||
|
||
#define isdigit(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_DIGIT), \
|
||
__AX__)
|
||
|
||
#define isgraph(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_NOT_GRAPH), \
|
||
__asm__ ("cmp #1"), \
|
||
__asm__ ("lda #1"), \
|
||
__asm__ ("sbc #1"), \
|
||
__AX__)
|
||
|
||
#define islower(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_LOWER), \
|
||
__AX__)
|
||
|
||
#define isprint(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_NOT_PRINT), \
|
||
__asm__ ("eor #%b", _CT_NOT_PRINT), \
|
||
__AX__)
|
||
|
||
#define ispunct(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_NOT_PUNCT), \
|
||
__asm__ ("cmp #1"), \
|
||
__asm__ ("lda #1"), \
|
||
__asm__ ("sbc #1"), \
|
||
__AX__)
|
||
|
||
#define isspace(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_WS), \
|
||
__AX__)
|
||
|
||
#define isupper(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_UPPER), \
|
||
__AX__)
|
||
|
||
#define isxdigit(c) (__AX__ = (c), \
|
||
__asm__ ("tay"), \
|
||
__asm__ ("lda %v,y", _ctype), \
|
||
__asm__ ("and #%b", _CT_XDIGIT), \
|
||
__AX__)
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/* End of ctype.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _suzy.h */
|
||
/* */
|
||
/* Atari Lynx, Suzy chip register hardware structures */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
#ifndef __SUZY_H
|
||
#define __SUZY_H
|
||
|
||
/* Joypad $FCB0 */
|
||
#define JOYPAD_RIGHT 0x10
|
||
#define JOYPAD_LEFT 0x20
|
||
#define JOYPAD_DOWN 0x40
|
||
#define JOYPAD_UP 0x80
|
||
#define BUTTON_OPTION1 0x08
|
||
#define BUTTON_OPTION2 0x04
|
||
#define BUTTON_INNER 0x02
|
||
#define BUTTON_OUTER 0x01
|
||
|
||
/* Switches $FCB1 */
|
||
#define BUTTON_PAUSE 0x01
|
||
|
||
|
||
/* Hardware Math */
|
||
#define FACTOR_A *(unsigned int *) 0xFC54
|
||
#define FACTOR_B *(unsigned int *) 0xFC52
|
||
#define PRODUCT0 *(unsigned int *) 0xFC60
|
||
#define PRODUCT1 *(unsigned int *) 0xFC62
|
||
#define PRODUCT *(long *) 0xFC60
|
||
|
||
#define DIVIDEND0 *(unsigned int *) 0xFC60
|
||
#define DIVIDEND1 *(unsigned int *) 0xFC62
|
||
#define DIVIDEND *(long *) 0xFC60
|
||
#define DIVISOR *(unsigned int *) 0xFC56
|
||
#define QUOTIENT0 *(unsigned int *) 0xFC52
|
||
#define QUOTIENT1 *(unsigned int *) 0xFC54
|
||
#define QUOTIENT *(long *) 0xFC52
|
||
#define REMAINDER0 *(unsigned int *) 0xFC6C
|
||
#define REMAINDER1 *(unsigned int *) 0xFC6E
|
||
#define REMAINDER *(long *) 0xFC6C
|
||
|
||
|
||
/* Sprite control block (SCB) defines */
|
||
|
||
/* SPRCTL0 $FC80 */
|
||
#define BPP_4 0xC0
|
||
#define BPP_3 0x80
|
||
#define BPP_2 0x40
|
||
#define BPP_1 0x00
|
||
#define HFLIP 0x20
|
||
#define VFLIP 0x10
|
||
#define TYPE_SHADOW 0x07
|
||
#define TYPE_XOR 0x06
|
||
#define TYPE_NONCOLL 0x05
|
||
#define TYPE_NORMAL 0x04
|
||
#define TYPE_BOUNDARY 0x03
|
||
#define TYPE_BSHADOW 0x02
|
||
#define TYPE_BACKNONCOLL 0x01
|
||
#define TYPE_BACKGROUND 0x00
|
||
|
||
/* SPRCTL1 $FC81 */
|
||
#define LITERAL 0x80
|
||
#define PACKED 0x00
|
||
#define ALGO3 0x40
|
||
#define RENONE 0x00
|
||
#define REHV 0x10
|
||
#define REHVS 0x20
|
||
#define REHVST 0x30
|
||
#define REUSEPAL 0x08
|
||
#define SKIP 0x04
|
||
#define DRAWUP 0x02
|
||
#define DRAWLEFT 0x01
|
||
|
||
typedef struct SCB_REHVST_PAL { // SCB with all attributes
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
unsigned int stretch;
|
||
unsigned int tilt;
|
||
unsigned char penpal[8];
|
||
} SCB_REHVST_PAL;
|
||
|
||
typedef struct SCB_REHVST { // SCB without pallette
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
unsigned int stretch;
|
||
unsigned int tilt;
|
||
} SCB_REHVST;
|
||
|
||
typedef struct SCB_REHV { // SCB without stretch/tilt
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
} SCB_REHV;
|
||
|
||
typedef struct SCB_REHV_PAL { // SCB without str/tilt, w/ penpal
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
unsigned char penpal[8];
|
||
} SCB_REHV_PAL;
|
||
|
||
typedef struct SCB_REHVS { // SCB w/o tilt & penpal
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
unsigned int stretch;
|
||
} SCB_REHVS;
|
||
|
||
typedef struct SCB_REHVS_PAL { // SCB w/o tilt w/penpal
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned int hsize;
|
||
unsigned int vsize;
|
||
unsigned int stretch;
|
||
unsigned char penpal[8];
|
||
} SCB_REHVS_PAL;
|
||
|
||
typedef struct SCB_RENONE { // SCB w/o size/stretch/tilt/pal
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
} SCB_RENONE;
|
||
|
||
typedef struct SCB_RENONE_PAL { // SCB w/o size/str/tilt w/penpal
|
||
unsigned char sprctl0;
|
||
unsigned char sprctl1;
|
||
unsigned char sprcoll;
|
||
char *next;
|
||
unsigned char *data;
|
||
signed int hpos;
|
||
signed int vpos;
|
||
unsigned char penpal[8];
|
||
} SCB_RENONE_PAL;
|
||
|
||
typedef struct PENPAL_4 {
|
||
unsigned char penpal[8];
|
||
} PENPAL_4;
|
||
|
||
typedef struct PENPAL_3 {
|
||
unsigned char penpal[4];
|
||
} PENPAL_3;
|
||
|
||
typedef struct PENPAL_2 {
|
||
unsigned char penpal[2];
|
||
} PENPAL_2;
|
||
|
||
typedef struct PENPAL_1 {
|
||
unsigned char penpal[1];
|
||
} PENPAL_1;
|
||
|
||
/* Misc system defines */
|
||
|
||
/* SPRGO $FC91 */
|
||
#define EVER_ON 0x04
|
||
#define SPRITE_GO 0x01
|
||
|
||
/* SPRSYS (write) $FC92 */
|
||
#define SIGNMATH 0x80
|
||
#define ACCUMULATE 0x40
|
||
#define NO_COLLIDE 0x20
|
||
#define VSTRETCH 0x10
|
||
#define LEFTHAND 0x08
|
||
#define CLR_UNSAFE 0x04
|
||
#define SPRITESTOP 0x02
|
||
|
||
/* SPRSYS (read) $FC92 */
|
||
#define MATHWORKING 0x80
|
||
#define MATHWARNING 0x40
|
||
#define MATHCARRY 0x20
|
||
#define VSTRETCHING 0x10
|
||
#define LEFTHANDED 0x08
|
||
#define UNSAFE_ACCESS 0x04
|
||
#define SPRITETOSTOP 0x02
|
||
#define SPRITEWORKING 0x01
|
||
|
||
/* MAPCTL $FFF9 */
|
||
#define HIGHSPEED 0x80
|
||
#define VECTORSPACE 0x08
|
||
#define ROMSPACE 0x04
|
||
#define MIKEYSPACE 0x02
|
||
#define SUZYSPACE 0x01
|
||
|
||
|
||
/* Suzy Hardware Registers */
|
||
struct __suzy {
|
||
unsigned int tmpadr; // 0xFC00 Temporary address
|
||
unsigned int tiltacc; // 0xFC02 Tilt accumulator
|
||
unsigned int hoff; // 0xFC04 Offset to H edge of screen
|
||
unsigned int voff; // 0xFC06 Offset to V edge of screen
|
||
unsigned char *sprbase; // 0xFC08 Base address of sprite
|
||
unsigned char *colbase; // 0xFC0A Base address of collision buffer
|
||
unsigned char *vidadr; // 0xFC0C Current vid buffer address
|
||
unsigned char *coladr; // 0xFC0E Current col buffer address
|
||
unsigned char *scbnext; // 0xFC10 Address of next SCB
|
||
unsigned char *sprdline; // 0xFC12 start of sprite data line address
|
||
unsigned char *hposstrt; // 0xFC14 start hpos
|
||
unsigned char *vposstrt; // 0xFC16 start vpos
|
||
unsigned char *sprhsize; // 0xFC18 sprite h size
|
||
unsigned char *sprvsize; // 0xFC1A sprite v size
|
||
unsigned int stretchl; // 0xFC1C H size adder
|
||
unsigned int tilt; // 0xFC1E H pos adder
|
||
unsigned int sprdoff; // 0xFC20 offset to next sprite data line
|
||
unsigned int sprvpos; // 0xFC22 current vpos
|
||
unsigned int colloff; // 0xFC24 offset to collision depository
|
||
unsigned int vsizeacc; // 0xFC26 vertical size accumulator
|
||
unsigned int hsizeoff; // 0xFC28 horizontal size offset
|
||
unsigned int vsizeoff; // 0xFC2A vertical size offset
|
||
unsigned char *scbaddr; // 0xFC2C address of current SCB
|
||
unsigned char *procaddr; // 0xFC2E address of current spr data proc
|
||
unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused
|
||
unsigned char unused1[2]; // 0xFC50 - 0xFC51 do not use
|
||
unsigned char mathd; // 0xFC52
|
||
unsigned char mathc; // 0xFC53
|
||
unsigned char mathb; // 0xFC54
|
||
unsigned char matha; // 0xFC55
|
||
unsigned char mathp; // 0xFC56
|
||
unsigned char mathn; // 0xFC57
|
||
unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use
|
||
unsigned char mathh; // 0xFC60
|
||
unsigned char mathg; // 0xFC61
|
||
unsigned char mathf; // 0xFC62
|
||
unsigned char mathe; // 0xFC63
|
||
unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use
|
||
unsigned char mathm; // 0xFC6C
|
||
unsigned char mathl; // 0xFC6D
|
||
unsigned char mathk; // 0xFC6E
|
||
unsigned char mathj; // 0xFC6F
|
||
unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use
|
||
unsigned char sprctl0; // 0xFC80 sprite control bits 0
|
||
unsigned char sprctl1; // 0xFC81 sprite control bits 1
|
||
unsigned char sprcoll; // 0xFC82 sprite collision number
|
||
unsigned char sprinit; // 0xFC83 sprite initialization bits
|
||
unsigned char unused5[4]; // 0xFC84 - 0xFC87 unused
|
||
unsigned char suzyhrev; // 0xFC88 suzy hardware rev
|
||
unsigned char suzysrev; // 0xFC89 suzy software rev
|
||
unsigned char unused6[6]; // 0xFC8A - 0xFC8F unused
|
||
unsigned char suzybusen; // 0xFC90 suzy bus enable
|
||
unsigned char sprgo; // 0xFC91 sprite process start bit
|
||
unsigned char sprsys; // 0xFC92 sprite system control bits
|
||
unsigned char unused7[29]; // 0xFC93 - 0xFCAF unused
|
||
unsigned char joystick; // 0xFCB0 joystick and buttons
|
||
unsigned char switches; // 0xFCB1 other switches
|
||
unsigned char cart0; // 0xFCB2 cart0 r/w
|
||
unsigned char cart1; // 0xFCB3 cart1 r/w
|
||
unsigned char unused8[8]; // 0xFCB4 - 0xFCBF unused
|
||
unsigned char leds; // 0xFCC0 leds
|
||
unsigned char unused9; // 0xFCC1 unused
|
||
unsigned char parstat; // 0xFCC2 parallel port status
|
||
unsigned char pardata; // 0xFCC3 parallel port data
|
||
unsigned char howie; // 0xFCC4 howie (?)
|
||
// 0xFCC5 - 0xFCFF unused
|
||
};
|
||
|
||
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* zlib.h */
|
||
/* */
|
||
/* Decompression routines for the 'deflate' format */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000-2015 Piotr Fusik <fox@scene.pl> */
|
||
/* */
|
||
/* This file is based on the zlib.h from 'zlib' general purpose compression */
|
||
/* library, version 1.1.3, (C) 1995-1998 Jean-loup Gailly and Mark Adler. */
|
||
/* */
|
||
/* Jean-loup Gailly Mark Adler */
|
||
/* jloup@gzip.org madler@alumni.caltech.edu */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ZLIB_H
|
||
#define _ZLIB_H
|
||
|
||
#define Z_OK 0
|
||
#define Z_DATA_ERROR (-3)
|
||
/* Return codes for uncompress() */
|
||
|
||
#define Z_DEFLATED 8
|
||
/* The deflate compression method (the only one supported) */
|
||
|
||
#define Z_NULL 0
|
||
|
||
|
||
unsigned __fastcall__ inflatemem (char* dest, const char* source);
|
||
/*
|
||
Decompresses the source buffer into the destination buffer.
|
||
Returns the size of the uncompressed data (number of bytes written starting
|
||
from dest).
|
||
|
||
This function expects data in the DEFLATE format, described in RFC
|
||
(Request for Comments) 1951 in the file
|
||
ftp://ds.internic.net/rfc/rfc1951.txt.
|
||
|
||
This function does not exist in the original zlib. Its implementation
|
||
using original zlib might be following:
|
||
|
||
unsigned inflatemem (char* dest, const char* source)
|
||
{
|
||
z_stream stream;
|
||
|
||
stream.next_in = (Bytef*) source;
|
||
stream.avail_in = 65535;
|
||
|
||
stream.next_out = dest;
|
||
stream.avail_out = 65535;
|
||
|
||
stream.zalloc = (alloc_func) 0;
|
||
stream.zfree = (free_func) 0;
|
||
|
||
inflateInit2(&stream, -MAX_WBITS);
|
||
inflate(&stream, Z_FINISH);
|
||
inflateEnd(&stream);
|
||
|
||
return stream.total_out;
|
||
}
|
||
*/
|
||
|
||
|
||
int __fastcall__ uncompress (char* dest, unsigned* destLen,
|
||
const char* source, unsigned sourceLen);
|
||
/*
|
||
Original zlib description:
|
||
|
||
Decompresses the source buffer into the destination buffer. sourceLen is
|
||
the byte length of the source buffer. Upon entry, destLen is the total
|
||
size of the destination buffer, which must be large enough to hold the
|
||
entire uncompressed data. (The size of the uncompressed data must have
|
||
been saved previously by the compressor and transmitted to the decompressor
|
||
by some mechanism outside the scope of this compression library.)
|
||
Upon exit, destLen is the actual size of the compressed buffer.
|
||
This function can be used to decompress a whole file at once if the
|
||
input file is mmap'ed.
|
||
|
||
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
|
||
enough memory, Z_BUF_ERROR if there was not enough room in the output
|
||
buffer, or Z_DATA_ERROR if the input data was corrupted.
|
||
|
||
Implementation notes:
|
||
|
||
This function expects data in the ZLIB format, described in RFC 1950
|
||
in the file ftp://ds.internic.net/rfc/rfc1950.txt. The ZLIB format is
|
||
essentially the DEFLATE format plus a very small header and Adler-32
|
||
checksum.
|
||
|
||
Z_MEM_ERROR and Z_BUF_ERROR are never returned in this implementation.
|
||
*/
|
||
|
||
|
||
unsigned long __fastcall__ adler32 (unsigned long adler, const char* buf,
|
||
unsigned len);
|
||
|
||
/*
|
||
Original zlib description:
|
||
|
||
Update a running Adler-32 checksum with the bytes buf[0..len-1] and
|
||
return the updated checksum. If buf is NULL, this function returns
|
||
the required initial value for the checksum.
|
||
An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
|
||
much faster. Usage example:
|
||
|
||
unsigned long adler = adler32(0L, Z_NULL, 0);
|
||
|
||
while (read_buffer(buffer, length) != EOF) {
|
||
adler = adler32(adler, buffer, length);
|
||
}
|
||
if (adler != original_adler) error();
|
||
|
||
Implementation notes:
|
||
|
||
This function isn't actually much faster than crc32(), but it is smaller
|
||
and does not use any lookup tables.
|
||
*/
|
||
|
||
|
||
unsigned long __fastcall__ crc32 (unsigned long crc, const char* buf,
|
||
unsigned len);
|
||
/*
|
||
Original zlib description:
|
||
|
||
Update a running crc with the bytes buf[0..len-1] and return the updated
|
||
crc. If buf is NULL, this function returns the required initial value
|
||
for the crc. Pre- and post-conditioning (one's complement) is performed
|
||
within this function so it shouldn't be done by the application.
|
||
Usage example:
|
||
|
||
unsigned long crc = crc32(0L, Z_NULL, 0);
|
||
|
||
while (read_buffer(buffer, length) != EOF) {
|
||
crc = crc32(crc, buffer, length);
|
||
}
|
||
if (crc != original_crc) error();
|
||
|
||
Implementation notes:
|
||
|
||
This function uses statically allocated 1 KB lookup table. The table is
|
||
initialised before it is used for the first time (that is, if buffer is
|
||
NULL or length is zero, then the lookup table isn't initialised).
|
||
*/
|
||
|
||
|
||
/* end of zlib.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* dbg.h */
|
||
/* */
|
||
/* Debugger module interface */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/*
|
||
** This is the interface to the cc65 debugger. Since many of the functions
|
||
** used for the debugger are quite usable even in another context, they
|
||
** are declared here.
|
||
**
|
||
** To use the debugger, just call DbgInit in your application. Once it has
|
||
** been called, the debugger will catch any BRK opcode. Use the BREAK macro
|
||
** defined below to insert breakpoints into your code.
|
||
**
|
||
** There are currently a lot of things that cannot be debugged, graphical
|
||
** applications are an example. The debugger does not save your screen
|
||
** contents, so even your text screen gets destroyed. However, you can
|
||
** debug the C and runtime library, even if the debugger is using this
|
||
** stuff itself.
|
||
**
|
||
** Note: When using the debugger, there are some other identifiers with
|
||
** external linkage, that start with Dbg. Avoid those names if you use the
|
||
** module.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _DBG_H
|
||
#define _DBG_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Utility functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned __fastcall__ DbgDisAsm (unsigned Addr, char* Buf, unsigned char Len);
|
||
/* Disassemble one instruction at address addr into the given buffer.
|
||
** The resulting line has the format, "AAAA__BB_BB_BB___OPC_OPERAND",
|
||
** where AAAA is the hexadecimal representation of addr, BB are the
|
||
** bytes (in hex) that make the instruction, OPC is the mnemonic, and
|
||
** OPERAND is an operand for the instruction.
|
||
** The buffer is filled with spaces up to the given length and terminated as
|
||
** a usual C string. NOTE: Buf must be able to hold Len+1 characters.
|
||
** The function returns the length of the disassembled instruction, so,
|
||
** to disassemble the next instruction, add the return value to addr
|
||
** and call the function again.
|
||
*/
|
||
|
||
unsigned __fastcall__ DbgDisAsmLen (unsigned Addr);
|
||
/* Disassemble one instruction, but do only return the length, do not
|
||
** create a visible representation. This function is useful when
|
||
** disassembling backwards, it is much faster than DbgDisAsm.
|
||
*/
|
||
|
||
int __fastcall__ DbgIsRAM (unsigned Addr);
|
||
/* Return true if we can read and write the given address */
|
||
|
||
char* __cdecl__ DbgMemDump (unsigned Addr, char* Buf, unsigned char Len);
|
||
/* Create a line of a memory dump in the given buffer. The buffer contains
|
||
** the starting address (4 digits hex), then Len bytes in this format:
|
||
** "AAAA__XX_YY_ZZ_...". The passed char buffer must hold Len*3+5 bytes
|
||
** plus a terminator byte.
|
||
** The function does not work correctly if the created string is longer
|
||
** than 255 bytes.
|
||
** The return value is Buf.
|
||
*/
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* High level user interface */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ DbgInit (unsigned unused);
|
||
/* Initialize the debugger. Use 0 as parameter. The debugger will popup on
|
||
** next brk encountered.
|
||
*/
|
||
|
||
#define BREAK() __asm__ ("brk")
|
||
/* Use this to insert breakpoints into your code */
|
||
|
||
|
||
|
||
/* End of dbg.h */
|
||
#endif
|
||
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _gtia.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
#ifndef __GTIA_H
|
||
#define __GTIA_H
|
||
|
||
/* Define a structure with the gtia register offsets */
|
||
struct __gtia_write {
|
||
unsigned char hposp0; /* horizontal position player 0 */
|
||
unsigned char hposp1; /* horizontal position player 1 */
|
||
unsigned char hposp2; /* horizontal position player 2 */
|
||
unsigned char hposp3; /* horizontal position player 3 */
|
||
unsigned char hposm0; /* horizontal position missile 0 */
|
||
unsigned char hposm1; /* horizontal position missile 1 */
|
||
unsigned char hposm2; /* horizontal position missile 2 */
|
||
unsigned char hposm3; /* horizontal position missile 3 */
|
||
unsigned char sizep0; /* size of player 0 */
|
||
unsigned char sizep1; /* size of player 1 */
|
||
unsigned char sizep2; /* size of player 2 */
|
||
unsigned char sizep3; /* size of player 3 */
|
||
unsigned char sizem; /* size of missiles */
|
||
unsigned char grafp0; /* graphics shape player 0 */
|
||
unsigned char grafp1; /* graphics shape player 1 */
|
||
unsigned char grafp2; /* graphics shape player 2 */
|
||
unsigned char grafp3; /* graphics shape player 3 */
|
||
unsigned char grafm; /* graphics shape missiles */
|
||
unsigned char colpm0; /* color player and missile 0 */
|
||
unsigned char colpm1; /* color player and missile 1 */
|
||
unsigned char colpm2; /* color player and missile 2 */
|
||
unsigned char colpm3; /* color player and missile 3 */
|
||
unsigned char colpf0; /* color playfield 0 */
|
||
unsigned char colpf1; /* color playfield 1 */
|
||
unsigned char colpf2; /* color playfield 2 */
|
||
unsigned char colpf3; /* color playfield 3 */
|
||
unsigned char colbk; /* color background */
|
||
unsigned char prior; /* priority selection */
|
||
unsigned char vdelay; /* vertical delay */
|
||
unsigned char gractl; /* stick/paddle latch, p/m control */
|
||
unsigned char hitclr; /* clear p/m collision */
|
||
unsigned char consol; /* console buttons */
|
||
};
|
||
|
||
/* Define a structure with the gtia register offsets */
|
||
struct __gtia_read {
|
||
unsigned char m0pf; /* missile 0 to playfield collision */
|
||
unsigned char m1pf; /* missile 1 to playfield collision */
|
||
unsigned char m2pf; /* missile 2 to playfield collision */
|
||
unsigned char m3pf; /* missile 3 to playfield collision */
|
||
unsigned char p0pf; /* player 0 to playfield collision */
|
||
unsigned char p1pf; /* player 1 to playfield collision */
|
||
unsigned char p2pf; /* player 2 to playfield collision */
|
||
unsigned char p3pf; /* player 3 to playfield collision */
|
||
unsigned char m0pl; /* missile 0 to player collision */
|
||
unsigned char m1pl; /* missile 1 to player collision */
|
||
unsigned char m2pl; /* missile 2 to player collision */
|
||
unsigned char m3pl; /* missile 3 to player collision */
|
||
unsigned char p0pl; /* player 0 to player collision */
|
||
unsigned char p1pl; /* player 1 to player collision */
|
||
unsigned char p2pl; /* player 2 to player collision */
|
||
unsigned char p3pl; /* player 3 to player collision */
|
||
unsigned char trig0; /* joystick trigger 0 */
|
||
unsigned char trig1; /* joystick trigger 1 */
|
||
unsigned char trig2; /* joystick trigger 2 */
|
||
unsigned char trig3; /* joystick trigger 3 */
|
||
unsigned char pal; /* pal/ntsc flag */
|
||
};
|
||
|
||
/* End of _gtia.h */
|
||
#endif /* #ifndef __GTIA_H */
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* errno.h */
|
||
/* */
|
||
/* Error codes */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2010, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ERRNO_H
|
||
#define _ERRNO_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Operating system specific error code */
|
||
extern unsigned char _oserror;
|
||
|
||
extern int _errno;
|
||
/* System errors go here */
|
||
|
||
#define errno _errno
|
||
/* errno must be a macro */
|
||
|
||
|
||
|
||
/* Possible error codes */
|
||
#define ENOENT 1 /* No such file or directory */
|
||
#define ENOMEM 2 /* Out of memory */
|
||
#define EACCES 3 /* Permission denied */
|
||
#define ENODEV 4 /* No such device */
|
||
#define EMFILE 5 /* Too many open files */
|
||
#define EBUSY 6 /* Device or resource busy */
|
||
#define EINVAL 7 /* Invalid argument */
|
||
#define ENOSPC 8 /* No space left on device */
|
||
#define EEXIST 9 /* File exists */
|
||
#define EAGAIN 10 /* Try again */
|
||
#define EIO 11 /* I/O error */
|
||
#define EINTR 12 /* Interrupted system call */
|
||
#define ENOSYS 13 /* Function not implemented */
|
||
#define ESPIPE 14 /* Illegal seek */
|
||
#define ERANGE 15 /* Range error */
|
||
#define EBADF 16 /* Bad file number */
|
||
#define ENOEXEC 17 /* Exec format error */
|
||
#define EUNKNOWN 18 /* Unknown OS specific error */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
int __fastcall__ _osmaperrno (unsigned char oserror);
|
||
/* Map an operating system specific error code (for example from _oserror)
|
||
** into one of the E... codes above. It is user callable.
|
||
*/
|
||
|
||
unsigned char __fastcall__ _seterrno (unsigned char code);
|
||
/* Set errno to a specific error code and return zero. Used by the library */
|
||
|
||
int __fastcall__ _directerrno (unsigned char code);
|
||
/* Set errno to a specific error code, clear _oserror and return -1. Used
|
||
** by the library.
|
||
*/
|
||
|
||
int __fastcall__ _mappederrno (unsigned char code);
|
||
/* Set _oserror to the given platform specific error code. If it is a real
|
||
** error code (not zero) set errno to the corresponding system error code
|
||
** and return -1. Otherwise return zero.
|
||
** Used by the library.
|
||
*/
|
||
|
||
|
||
|
||
/* End of errno.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _ted.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __TED_H
|
||
#define __TED_H
|
||
|
||
|
||
|
||
/* Define a structure with the ted register offsets */
|
||
struct __ted {
|
||
unsigned char t1_lo; /* Timer #1 low */
|
||
unsigned char t1_hi; /* Timer #1 high */
|
||
unsigned char t2_lo; /* Timer #2 low */
|
||
unsigned char t2_hi; /* Timer #2 high */
|
||
unsigned char t3_lo; /* Timer #3 low */
|
||
unsigned char t3_hi; /* Timer #3 high */
|
||
unsigned char vscroll; /* Vertical scroll control */
|
||
unsigned char hscroll; /* Horizontal scroll control */
|
||
unsigned char kbdlatch; /* Keyboard latch */
|
||
unsigned char irr; /* Interrupt request register */
|
||
unsigned char imr; /* Interrupt mask register */
|
||
unsigned char irq_rasterline; /* Interrupt rasterline */
|
||
unsigned char cursor_hi; /* Cursor position high */
|
||
unsigned char cursor_lo; /* Cursor position low */
|
||
unsigned char snd1_freq_lo; /* Channel #1 frequency */
|
||
unsigned char snd2_freq_lo; /* Channel #2 frequency low */
|
||
unsigned char snd2_freq_hi; /* Channel #2 frequency high */
|
||
unsigned char snd_ctrl; /* Sound control */
|
||
unsigned char misc; /* Channel #1 frequency high and more */
|
||
unsigned char char_addr; /* Character data base address */
|
||
unsigned char video_addr; /* Video memory base address */
|
||
unsigned char bgcolor; /* Background color */
|
||
unsigned char color1; /* Color register #1 */
|
||
unsigned char color2; /* Color register #2 */
|
||
unsigned char color3; /* Color register #3 */
|
||
unsigned char bordercolor; /* Border color */
|
||
unsigned char bmap_reload_hi; /* Bitmap reload bits 8+9 */
|
||
unsigned char bmap_reload_lo; /* Bitmap reload bits 0-7 */
|
||
unsigned char rasterline_hi; /* Current rasterline bit 8 */
|
||
unsigned char rasterline_lo; /* Current rasterline bits 0-7 */
|
||
unsigned char rastercolumn; /* Current rastercolumn */
|
||
unsigned char cursor_blink; /* Cursor blink attribute */
|
||
unsigned char unused[30]; /* Unused */
|
||
unsigned char enable_rom; /* Write enables ROM */
|
||
unsigned char enable_ram; /* Write enables RAM */
|
||
};
|
||
|
||
|
||
|
||
/* End of _ted.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* ace.h */
|
||
/* */
|
||
/* ACE system-specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2015, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ACE_H
|
||
#define _ACE_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__ACE__)
|
||
# error This module may only be used when compiling for the ACE os!
|
||
#endif
|
||
|
||
|
||
|
||
#ifndef _STDDEF_H
|
||
#include <stddef.h>
|
||
#endif
|
||
|
||
|
||
|
||
struct aceDirentBuf {
|
||
unsigned long ad_size; /* Size in bytes */
|
||
unsigned char ad_date [8]; /* YY:YY:MM:DD:HH:MM:SS:TW */
|
||
char ad_type [4]; /* File type as ASCIIZ string */
|
||
unsigned char ad_flags; /* File flags */
|
||
unsigned char ad_usage; /* More flags */
|
||
unsigned char ad_namelen; /* Length of name */
|
||
char ad_name [17]; /* Name itself, ASCIIZ */
|
||
};
|
||
|
||
int __cdecl__ aceDirOpen (char* dir);
|
||
int __cdecl__ aceDirClose (int handle);
|
||
int __cdecl__ aceDirRead (int handle, struct aceDirentBuf* buf);
|
||
|
||
/* Type of an ACE key. Key in low byte, shift mask in high byte */
|
||
typedef unsigned int aceKey;
|
||
|
||
/* #defines for the shift mask returned by aceConGetKey */
|
||
#define aceSH_KEY 0x00FF /* Mask key itself */
|
||
#define aceSH_MASK 0xFF00 /* Mask shift mask */
|
||
#define aceSH_EXT 0x2000 /* Extended key */
|
||
#define aceSH_CAPS 0x1000 /* Caps lock key */
|
||
#define aceSH_ALT 0x0800 /* Alternate key */
|
||
#define aceSH_CTRL 0x0400 /* Ctrl key */
|
||
#define aceSH_CBM 0x0200 /* Commodore key */
|
||
#define aceSH_SHIFT 0x0100 /* Shift key */
|
||
|
||
/* #defines for the options in aceConSetOpt/aceConGetOpt */
|
||
#define aceOP_PUTMASK 1 /* Console put mask */
|
||
#define aceOP_CHARCOLOR 2 /* Character color */
|
||
#define aceOP_CHARATTR 3 /* Character attribute */
|
||
#define aceOP_FILLCOLOR 4 /* Fill color */
|
||
#define aceOP_FILLATTR 5 /* Fill attribute */
|
||
#define aceOP_CRSCOLOR 6 /* Cursor color */
|
||
#define aceOP_CRSWRAP 7 /* Force cursor wrap */
|
||
#define aceOP_SHSCROLL 8 /* Shift keys for scrolling */
|
||
#define aceOP_MOUSCALE 9 /* Mouse scaling */
|
||
#define aceOP_RPTDELAY 10 /* Key repeat delay */
|
||
#define aceOP_RPTRATE 11 /* Key repeat rate */
|
||
|
||
/* Console functions */
|
||
void __cdecl__ aceConWrite (char* buf, size_t count);
|
||
void __cdecl__ aceConPutLit (int c);
|
||
void __cdecl__ aceConPos (unsigned x, unsigned y);
|
||
void __cdecl__ aceConGetPos (unsigned* x, unsigned* y);
|
||
unsigned aceConGetX (void);
|
||
unsigned aceConGetY (void);
|
||
char __cdecl__* aceConInput (char* buf, unsigned initial);
|
||
int aceConStopKey (void);
|
||
aceKey aceConGetKey (void);
|
||
int __cdecl__ aceConKeyAvail (aceKey* key);
|
||
void __cdecl__ aceConKeyMat (char* matrix);
|
||
void __cdecl__ aceConSetOpt (unsigned char opt, unsigned char val);
|
||
int __cdecl__ aceConGetOpt (unsigned char opt);
|
||
|
||
/* Misc stuff */
|
||
int __cdecl__ aceMiscIoPeek (unsigned addr);
|
||
void __cdecl__ aceMiscIoPoke (unsigned addr, unsigned char val);
|
||
|
||
|
||
|
||
/* End of ace.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* joystick.h */
|
||
/* */
|
||
/* Read the joystick on systems that support it */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _JOYSTICK_H
|
||
#define _JOYSTICK_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Error codes */
|
||
#define JOY_ERR_OK 0 /* No error */
|
||
#define JOY_ERR_NO_DRIVER 1 /* No driver available */
|
||
#define JOY_ERR_CANNOT_LOAD 2 /* Error loading driver */
|
||
#define JOY_ERR_INV_DRIVER 3 /* Invalid driver */
|
||
#define JOY_ERR_NO_DEVICE 4 /* Device (hardware) not found */
|
||
|
||
/* Argument for the joy_read function */
|
||
#define JOY_1 0
|
||
#define JOY_2 1
|
||
|
||
/* The following codes are *indices* into the joy_masks array */
|
||
#define JOY_UP 0
|
||
#define JOY_DOWN 1
|
||
#define JOY_LEFT 2
|
||
#define JOY_RIGHT 3
|
||
#define JOY_FIRE 4
|
||
#define JOY_FIRE2 5 /* Second fire button if available */
|
||
|
||
/* Array of masks used to check the return value of joy_read for a state */
|
||
extern const unsigned char joy_masks[8];
|
||
|
||
/* Macros that evaluate the return code of joy_read */
|
||
#define JOY_BTN_UP(v) ((v) & joy_masks[JOY_UP])
|
||
#define JOY_BTN_DOWN(v) ((v) & joy_masks[JOY_DOWN])
|
||
#define JOY_BTN_LEFT(v) ((v) & joy_masks[JOY_LEFT])
|
||
#define JOY_BTN_RIGHT(v) ((v) & joy_masks[JOY_RIGHT])
|
||
#define JOY_BTN_FIRE(v) ((v) & joy_masks[JOY_FIRE])
|
||
#define JOY_BTN_FIRE2(v) ((v) & joy_masks[JOY_FIRE2])
|
||
|
||
/* The name of the standard joystick driver for a platform */
|
||
extern const char joy_stddrv[];
|
||
|
||
/* The address of the static standard joystick driver for a platform */
|
||
extern const void joy_static_stddrv[];
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char __fastcall__ joy_load_driver (const char* driver);
|
||
/* Load and install a joystick driver. Return an error code. */
|
||
|
||
unsigned char joy_unload (void);
|
||
/* Uninstall, then unload the currently loaded driver. */
|
||
|
||
unsigned char __fastcall__ joy_install (void* driver);
|
||
/* Install an already loaded driver. Return an error code. */
|
||
|
||
unsigned char joy_uninstall (void);
|
||
/* Uninstall the currently loaded driver and return an error code.
|
||
** Note: This call does not free allocated memory.
|
||
*/
|
||
|
||
unsigned char joy_count (void);
|
||
/* Return the number of joysticks supported by the driver */
|
||
|
||
unsigned char __fastcall__ joy_read (unsigned char joystick);
|
||
/* Read a particular joystick */
|
||
|
||
|
||
|
||
/* End of joystick.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* em.h */
|
||
/* */
|
||
/* API for extended memory access */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _EM_H
|
||
#define _EM_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Size of an extended memory page */
|
||
#define EM_PAGE_SIZE 256
|
||
|
||
/* Error codes */
|
||
#define EM_ERR_OK 0 /* No error */
|
||
#define EM_ERR_NO_DRIVER 1 /* No driver available */
|
||
#define EM_ERR_CANNOT_LOAD 2 /* Error loading driver */
|
||
#define EM_ERR_INV_DRIVER 3 /* Invalid driver */
|
||
#define EM_ERR_NO_DEVICE 4 /* Device (hardware) not found */
|
||
#define EM_ERR_INSTALLED 5 /* A driver is already installed */
|
||
|
||
/* Parameters for the em_copy_... functions. NOTE: The first seven bytes
|
||
** have the same order and alignment as needed for the Commodore REU, so
|
||
** don't change the order without changing the assembler file that defines
|
||
** the struct offsets and the code in the REU driver.
|
||
*/
|
||
struct em_copy {
|
||
void* buf; /* Memory buffer to copy from or to */
|
||
unsigned char offs; /* Offset into page */
|
||
unsigned page; /* Starting page to copy from or to */
|
||
unsigned count; /* Number of bytes to copy */
|
||
unsigned char unused; /* Make the size 8 bytes */
|
||
};
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char __fastcall__ em_load_driver (const char* driver);
|
||
/* Load and install an extended memory driver. Return an error code. */
|
||
|
||
unsigned char em_unload (void);
|
||
/* Uninstall, then unload the currently loaded driver. */
|
||
|
||
unsigned char __fastcall__ em_install (void* driver);
|
||
/* Install an already loaded driver. Return an error code. */
|
||
|
||
unsigned char em_uninstall (void);
|
||
/* Uninstall the currently loaded driver and return an error code.
|
||
** Note: This call does not free allocated memory.
|
||
*/
|
||
|
||
unsigned em_pagecount (void);
|
||
/* Return the total number of 256 byte pages available in extended memory. */
|
||
|
||
void* __fastcall__ em_map (unsigned page);
|
||
/* Unmap the current page from memory and map a new one. The function returns
|
||
** a pointer to the location of the page in memory. Note: Without calling
|
||
** em_commit, the old contents of the memory window may be lost!
|
||
*/
|
||
|
||
void* __fastcall__ em_use (unsigned page);
|
||
/* Tell the driver that the memory window is associated with a given page.
|
||
** This call is very similar to em_map. The difference is that the driver
|
||
** does not necessarily transfer the current contents of the extended
|
||
** memory into the returned window. If you're going to just write to the
|
||
** window and the current contents of the window are invalid or no longer
|
||
** use, this call may perform better than em_map.
|
||
*/
|
||
|
||
void em_commit (void);
|
||
/* Commit changes in the memory window to extended storage. If the contents
|
||
** of the memory window have been changed, these changes may be lost if
|
||
** em_map, em_copyfrom or em_copyto are called without calling em_commit
|
||
** first. Note: Not calling em_commit does not mean that the changes are
|
||
** discarded, it does just mean that some drivers will discard the changes.
|
||
*/
|
||
|
||
void __fastcall__ em_copyfrom (const struct em_copy* copy_data);
|
||
/* Copy from extended into linear memory. Note: This may invalidate the
|
||
** currently mapped page.
|
||
*/
|
||
|
||
void __fastcall__ em_copyto (const struct em_copy* copy_data);
|
||
/* Copy from linear into extended memory. Note: This may invalidate the
|
||
** currently mapped page.
|
||
*/
|
||
|
||
|
||
|
||
/* End of em.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* device.h */
|
||
/* */
|
||
/* Device handling */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2012 Oliver Schmidt, <ol.sc@web.de> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _DEVICE_H
|
||
#define _DEVICE_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define INVALID_DEVICE 255
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char getfirstdevice (void);
|
||
|
||
unsigned char __fastcall__ getnextdevice (unsigned char device);
|
||
|
||
unsigned char getcurrentdevice (void);
|
||
|
||
char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
|
||
|
||
|
||
|
||
/* End of device.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _vdc.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __VDC_H
|
||
#define __VDC_H
|
||
|
||
|
||
|
||
/* Define a structure with the vdc register offsets */
|
||
struct __vdc {
|
||
unsigned char ctrl; /* Control register */
|
||
unsigned char data; /* Data register */
|
||
};
|
||
|
||
|
||
|
||
/* End of _vdc.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* assert.h */
|
||
/* */
|
||
/* Diagnostics */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2015, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ASSERT_H
|
||
#define _ASSERT_H
|
||
|
||
|
||
|
||
#undef assert
|
||
#ifdef NDEBUG
|
||
# define assert(expr)
|
||
#else
|
||
extern void __fastcall__ _afailed (const char*, unsigned);
|
||
# define assert(expr) ((expr)? (void)0 : _afailed(__FILE__, __LINE__))
|
||
#endif
|
||
|
||
|
||
|
||
/* End of assert.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* setjmp.h */
|
||
/* */
|
||
/* Nonlocal jumps */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2009, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _SETJMP_H
|
||
#define _SETJMP_H
|
||
|
||
|
||
|
||
typedef char jmp_buf [5];
|
||
|
||
|
||
|
||
int __fastcall__ _setjmp (jmp_buf buf);
|
||
#define setjmp _setjmp /* ISO insists on a macro */
|
||
void __fastcall__ longjmp (jmp_buf buf, int retval) __attribute__((noreturn));
|
||
|
||
|
||
|
||
/* End of setjmp.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stdint.h */
|
||
/* */
|
||
/* Standard integer types */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Note: This file is not fully ISO 9899-1999 compliant because cc65 lacks
|
||
** a 64 bit data types. The declarations have been adjusted accordingly.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _STDINT_H
|
||
#define _STDINT_H
|
||
|
||
|
||
|
||
/* Exact-width integer types */
|
||
typedef signed char int8_t;
|
||
typedef int int16_t;
|
||
typedef long int32_t;
|
||
typedef unsigned char uint8_t;
|
||
typedef unsigned uint16_t;
|
||
typedef unsigned long uint32_t;
|
||
|
||
#define INT8_MIN ((int8_t) 0x80)
|
||
#define INT8_MAX ((int8_t) 0x7F)
|
||
#define INT16_MIN ((int16_t) 0x8000)
|
||
#define INT16_MAX ((int16_t) 0x7FFF)
|
||
#define INT32_MIN ((int32_t) 0x80000000)
|
||
#define INT32_MAX ((int32_t) 0x7FFFFFFF)
|
||
#define UINT8_MAX ((uint8_t) 0xFF)
|
||
#define UINT16_MAX ((uint16_t) 0xFFFF)
|
||
#define UINT32_MAX ((uint32_t) 0xFFFFFFFF)
|
||
|
||
/* Minimum-width integer types */
|
||
typedef signed char int_least8_t;
|
||
typedef int int_least16_t;
|
||
typedef long int_least32_t;
|
||
typedef unsigned char uint_least8_t;
|
||
typedef unsigned uint_least16_t;
|
||
typedef unsigned long uint_least32_t;
|
||
|
||
#define INT_LEAST8_MIN ((int_least8_t) 0x80)
|
||
#define INT_LEAST8_MAX ((int_least8_t) 0x7F)
|
||
#define INT_LEAST16_MIN ((int_least16_t) 0x8000)
|
||
#define INT_LEAST16_MAX ((int_least16_t) 0x7FFF)
|
||
#define INT_LEAST32_MIN ((int_least32_t) 0x80000000)
|
||
#define INT_LEAST32_MAX ((int_least32_t) 0x7FFFFFFF)
|
||
#define UINT_LEAST8_MAX ((uint_least8_t) 0xFF)
|
||
#define UINT_LEAST16_MAX ((uint_least16_t) 0xFFFF)
|
||
#define UINT_LEAST32_MAX ((uint_least32_t) 0xFFFFFFFF)
|
||
|
||
/* Fastest minimum-width integer types */
|
||
typedef signed char int_fast8_t;
|
||
typedef int int_fast16_t;
|
||
typedef long int_fast32_t;
|
||
typedef unsigned char uint_fast8_t;
|
||
typedef unsigned uint_fast16_t;
|
||
typedef unsigned long uint_fast32_t;
|
||
|
||
#define INT_FAST8_MIN ((int_fast8_t) 0x80)
|
||
#define INT_FAST8_MAX ((int_fast8_t) 0x7F)
|
||
#define INT_FAST16_MIN ((int_fast16_t) 0x8000)
|
||
#define INT_FAST16_MAX ((int_fast16_t) 0x7FFF)
|
||
#define INT_FAST32_MIN ((int_fast32_t) 0x80000000)
|
||
#define INT_FAST32_MAX ((int_fast32_t) 0x7FFFFFFF)
|
||
#define UINT_FAST8_MAX ((uint_fast8_t) 0xFF)
|
||
#define UINT_FAST16_MAX ((uint_fast16_t) 0xFFFF)
|
||
#define UINT_FAST32_MAX ((uint_fast32_t) 0xFFFFFFFF)
|
||
|
||
/* Integer types capable of holding object pointers */
|
||
typedef int intptr_t;
|
||
typedef unsigned uintptr_t;
|
||
|
||
#define INTPTR_MIN ((intptr_t)0x8000)
|
||
#define INTPTR_MAX ((intptr_t)0x7FFF)
|
||
#define UINTPTR_MAX ((uintptr_t) 0xFFFF)
|
||
|
||
/* Greatest width integer types */
|
||
typedef long intmax_t;
|
||
typedef unsigned long uintmax_t;
|
||
|
||
#define INTMAX_MIN ((intmax_t) 0x80000000)
|
||
#define INTMAX_MAX ((intmax_t) 0x7FFFFFFF)
|
||
#define UINTMAX_MAX ((uintmax_t) 0xFFFFFFFF)
|
||
|
||
/* Limits of other integer types */
|
||
#define PTRDIFF_MIN ((int) 0x8000)
|
||
#define PTRDIFF_MAX ((int) 0x7FFF)
|
||
|
||
#define SIG_ATOMIC_MIN ((unsigned char) 0x00)
|
||
#define SIG_ATOMIC_MAX ((unsigned char) 0xFF)
|
||
|
||
#define SIZE_MAX 0xFFFF
|
||
|
||
/* Macros for minimum width integer constants */
|
||
#define INT8_C(c) c
|
||
#define INT16_C(c) c
|
||
#define INT32_C(c) c##L
|
||
#define UINT8_C(c) c##U
|
||
#define UINT16_C(c) c##U
|
||
#define UINT32_C(c) c##UL
|
||
|
||
/* Macros for greatest width integer constants */
|
||
#define INTMAX_C(c) c##L
|
||
#define UINTMAX_C(c) c##UL
|
||
|
||
|
||
|
||
/* End of stdint.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* cbm264.h */
|
||
/* */
|
||
/* System specific definitions for the C16, C116 and Plus/4 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2003 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CBM264_H
|
||
#define _CBM264_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__C16__)
|
||
# error This module may only be used when compiling for the Plus/4 or C16!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 133
|
||
#define CH_F2 137
|
||
#define CH_F3 134
|
||
#define CH_F4 138
|
||
#define CH_F5 135
|
||
#define CH_F6 139
|
||
#define CH_F7 136
|
||
#define CH_F8 140
|
||
|
||
|
||
|
||
/* Color attributes */
|
||
#define CATTR_LUMA0 0x00
|
||
#define CATTR_LUMA1 0x10
|
||
#define CATTR_LUMA2 0x20
|
||
#define CATTR_LUMA3 0x30
|
||
#define CATTR_LUMA4 0x40
|
||
#define CATTR_LUMA5 0x50
|
||
#define CATTR_LUMA6 0x60
|
||
#define CATTR_LUMA7 0x70
|
||
#define CATTR_BLINK 0x80
|
||
|
||
/* Base colors */
|
||
#define BCOLOR_BLACK 0x00
|
||
#define BCOLOR_WHITE 0x01
|
||
#define BCOLOR_RED 0x02
|
||
#define BCOLOR_CYAN 0x03
|
||
#define BCOLOR_VIOLET 0x04
|
||
#define BCOLOR_PURPLE BCOLOR_VIOLET
|
||
#define BCOLOR_GREEN 0x05
|
||
#define BCOLOR_BLUE 0x06
|
||
#define BCOLOR_YELLOW 0x07
|
||
#define BCOLOR_ORANGE 0x08
|
||
#define BCOLOR_BROWN 0x09
|
||
#define BCOLOR_LEMON 0x0A /* What's that color? */
|
||
#define BCOLOR_LIGHTVIOLET 0x0B
|
||
#define BCOLOR_BLUEGREEN 0x0C
|
||
#define BCOLOR_LIGHTBLUE 0x0D
|
||
#define BCOLOR_DARKBLUE 0x0E
|
||
#define BCOLOR_LIGHTGREEN 0x0F
|
||
|
||
/* Now try to mix up a C64/C128 compatible palette */
|
||
#define COLOR_BLACK (BCOLOR_BLACK)
|
||
#define COLOR_WHITE (BCOLOR_WHITE | CATTR_LUMA7)
|
||
#define COLOR_RED (BCOLOR_RED | CATTR_LUMA4)
|
||
#define COLOR_CYAN (BCOLOR_CYAN | CATTR_LUMA7)
|
||
#define COLOR_VIOLET (BCOLOR_VIOLET | CATTR_LUMA7)
|
||
#define COLOR_PURPLE COLOR_VIOLET
|
||
#define COLOR_GREEN (BCOLOR_GREEN | CATTR_LUMA7)
|
||
#define COLOR_BLUE (BCOLOR_BLUE | CATTR_LUMA7)
|
||
#define COLOR_YELLOW (BCOLOR_YELLOW | CATTR_LUMA7)
|
||
#define COLOR_ORANGE (BCOLOR_ORANGE | CATTR_LUMA7)
|
||
#define COLOR_BROWN (BCOLOR_BROWN | CATTR_LUMA7)
|
||
#define COLOR_LIGHTRED (BCOLOR_RED | CATTR_LUMA7)
|
||
#define COLOR_GRAY1 (BCOLOR_WHITE | CATTR_LUMA1)
|
||
#define COLOR_GRAY2 (BCOLOR_WHITE | CATTR_LUMA3)
|
||
#define COLOR_LIGHTGREEN (BCOLOR_LIGHTGREEN | CATTR_LUMA7)
|
||
#define COLOR_LIGHTBLUE (BCOLOR_LIGHTBLUE | CATTR_LUMA7)
|
||
#define COLOR_GRAY3 (BCOLOR_WHITE | CATTR_LUMA5)
|
||
|
||
/* Define hardware */
|
||
#include <_ted.h>
|
||
#define TED (*(struct __ted*)0xFF00)
|
||
|
||
/* Define special memory areas */
|
||
#define COLOR_RAM ((unsigned char*)0x0800)
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* End of cbm264.h */
|
||
#endif
|
||
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* vic20.h */
|
||
/* */
|
||
/* vic20 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2004 Ullrich von Bassewitz */
|
||
/* R<>merstra<72>e 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _VIC20_H
|
||
#define _VIC20_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__VIC20__)
|
||
# error This module may only be used when compiling for the Vic20!
|
||
#endif
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 133
|
||
#define CH_F2 137
|
||
#define CH_F3 134
|
||
#define CH_F4 138
|
||
#define CH_F5 135
|
||
#define CH_F6 139
|
||
#define CH_F7 136
|
||
#define CH_F8 140
|
||
|
||
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
|
||
|
||
/* Define hardware */
|
||
#include <_vic.h>
|
||
#define VIC (*(struct __vic*)0x9000)
|
||
|
||
#include <_6522.h>
|
||
#define VIA1 (*(struct __6522*)0x9110)
|
||
#define VIA2 (*(struct __6522*)0x9120)
|
||
|
||
|
||
|
||
/* Define special memory areas */
|
||
#define COLOR_RAM ((unsigned char*)0x9600)
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void vic20_ptvjoy_joy[];
|
||
extern void vic20_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
|
||
|
||
|
||
/* End of vic20.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _mikey.h */
|
||
/* */
|
||
/* Atari Lynx, Mikey chip register hardware structures */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
#ifndef __MIKEY_H
|
||
#define __MIKEY_H
|
||
|
||
/* timer structure */
|
||
typedef struct _mikey_timer {
|
||
unsigned char reload;
|
||
unsigned char control;
|
||
unsigned char count;
|
||
unsigned char control2;
|
||
} _mikey_timer;
|
||
|
||
typedef struct _mikey_all_timers {
|
||
struct _mikey_timer timer[8];
|
||
} _mikey_all_timers;
|
||
|
||
/* audio channel structure */
|
||
typedef struct _mikey_audio {
|
||
unsigned char volume;
|
||
unsigned char feedback;
|
||
unsigned char dac;
|
||
unsigned char shiftlo;
|
||
unsigned char reload;
|
||
unsigned char control;
|
||
unsigned char count;
|
||
unsigned char other;
|
||
} _mikey_audio;
|
||
|
||
/* Define a structure with the mikey register offsets */
|
||
struct __mikey {
|
||
struct _mikey_timer timer0; // 0xFD00
|
||
struct _mikey_timer timer1; // 0xFD04
|
||
struct _mikey_timer timer2; // 0xFD08
|
||
struct _mikey_timer timer3; // 0xFD0C
|
||
struct _mikey_timer timer4; // 0xFD10
|
||
struct _mikey_timer timer5; // 0xFD14
|
||
struct _mikey_timer timer6; // 0xFD18
|
||
struct _mikey_timer timer7; // 0xFD1C
|
||
struct _mikey_audio channel_a; // 0xFD20
|
||
struct _mikey_audio channel_b; // 0xFD28
|
||
struct _mikey_audio channel_c; // 0xFD30
|
||
struct _mikey_audio channel_d; // 0xFD38
|
||
unsigned char attena; // 0xFD40 ?? not yet allocated?
|
||
unsigned char attenb; // 0xFD41 |
|
||
unsigned char attenc; // 0xFD42 |
|
||
unsigned char attend; // 0xFD43 |
|
||
unsigned char panning; // 0xFD44 |
|
||
unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used
|
||
unsigned char mstereo; // 0xFD50 stereo control bits
|
||
unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used
|
||
unsigned char intrst; // 0xFD80 interrupt poll 0
|
||
unsigned char intset; // 0xFD81 interrupt poll 1
|
||
unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used
|
||
unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit
|
||
unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit
|
||
unsigned char audin; // 0xFD86 audio in
|
||
unsigned char sysctl1; // 0xFD87 control bits
|
||
unsigned char mikeyrev; // 0xFD88 mikey hardware rev
|
||
unsigned char mikeysrev; // 0xFD89 mikey software rev
|
||
unsigned char iodir; // 0xFD8A parallel i/o data dir
|
||
unsigned char iodat; // 0xFD8B parallel data
|
||
unsigned char serctl; // 0xFD8C serial control register
|
||
unsigned char serdat; // 0xFD8D serial data
|
||
unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used
|
||
unsigned char sdoneack; // 0xFD90 suzy done acknowledge
|
||
unsigned char cpusleep; // 0xFD91 cpu bus request disable
|
||
unsigned char dispctl; // 0xFD92 video bus request enable, viddma
|
||
unsigned char pkbkup; // 0xFD93 magic 'P' count
|
||
unsigned char *scrbase; // 0xFD94 start address of video display
|
||
unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used
|
||
unsigned char mtest0; // 0xFD9C
|
||
unsigned char mtest1; // 0xFD9D
|
||
unsigned char mtest2; // 0xFD9E
|
||
unsigned char unused5; // 0xFD9F not used
|
||
unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes
|
||
// 0xFDC0 - 0xFDFF not used
|
||
};
|
||
|
||
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* locale.h */
|
||
/* */
|
||
/* Localization <locale.h> */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2005 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _LOCALE_H
|
||
#define _LOCALE_H
|
||
|
||
|
||
|
||
/* NULL pointer */
|
||
#ifndef _HAVE_NULL
|
||
#define NULL 0
|
||
#define _HAVE_NULL
|
||
#endif
|
||
|
||
/* Locale information constants */
|
||
#define LC_ALL 0
|
||
#define LC_COLLATE 1
|
||
#define LC_CTYPE 2
|
||
#define LC_MONETARY 3
|
||
#define LC_NUMERIC 4
|
||
#define LC_TIME 5
|
||
|
||
/* Struct containing locale settings */
|
||
struct lconv {
|
||
char* currency_symbol;
|
||
char* decimal_point;
|
||
char* grouping;
|
||
char* int_curr_symbol;
|
||
char* mon_decimal_point;
|
||
char* mon_grouping;
|
||
char* mon_thousands_sep;
|
||
char* negative_sign;
|
||
char* positive_sign;
|
||
char* thousands_sep;
|
||
char frac_digits;
|
||
char int_frac_digits;
|
||
char n_cs_precedes;
|
||
char n_sep_by_space;
|
||
char n_sign_posn;
|
||
char p_cs_precedes;
|
||
char p_sep_by_space;
|
||
char p_sign_posn;
|
||
};
|
||
|
||
/* Function prototypes */
|
||
struct lconv* localeconv (void);
|
||
char* __fastcall__ setlocale (int category, const char* locale);
|
||
|
||
|
||
|
||
/* End of locale.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _6522.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2004 Stefan Haubenthal <polluks@sdf.lonestar.org> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __VIA_H
|
||
#define __VIA_H
|
||
|
||
|
||
|
||
/* Define a structure with the 6522 register offsets.
|
||
** NOTE: The timer registers are not declared as 16 bit registers, because
|
||
** the order in which the two 8 bit halves are written is important, and
|
||
** the compiler doesn't guarantee any order when writing 16 bit values.
|
||
*/
|
||
struct __6522 {
|
||
unsigned char prb; /* Port register B */
|
||
unsigned char pra; /* Port register A */
|
||
unsigned char ddrb; /* Data direction register B */
|
||
unsigned char ddra; /* Data direction register A */
|
||
unsigned char t1_lo; /* Timer 1, low byte */
|
||
unsigned char t1_hi; /* Timer 1, high byte */
|
||
unsigned char t1l_lo; /* Timer 1 latch, low byte */
|
||
unsigned char t1l_hi; /* Timer 1 latch, high byte */
|
||
unsigned char t2_lo; /* Timer 2, low byte */
|
||
unsigned char t2_hi; /* Timer 2, high byte */
|
||
unsigned char sr; /* Shift register */
|
||
unsigned char acr; /* Auxiliary control register */
|
||
unsigned char pcr; /* Peripheral control register */
|
||
unsigned char ifr; /* Interrupt flag register */
|
||
unsigned char ier; /* Interrupt enable register */
|
||
unsigned char pra2; /* Port register A w/o handshake */
|
||
};
|
||
|
||
|
||
|
||
/* End of _6522.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _6545.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __6545_H
|
||
#define __6545_H
|
||
|
||
|
||
|
||
/* Define a structure with the 6545 register offsets */
|
||
struct __6545 {
|
||
unsigned char ctrl; /* Control register */
|
||
unsigned char data; /* Data register */
|
||
};
|
||
|
||
|
||
|
||
/* End of _6545.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* cbm_filetype.h */
|
||
/* */
|
||
/* Definitions for CBM file types */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CBM_FILETYPE_H
|
||
#define _CBM_FILETYPE_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__CBM__)
|
||
# error This module may be used only when compiling for CBM machines!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* CBM FILE TYPES. The definitions are used within standard headers, so we
|
||
** be careful with identifiers in the user name space.
|
||
** "Regular" files have a special bit set so it's easier to pick them out.
|
||
*/
|
||
#define _CBM_T_REG 0x10U /* Bit set for regular files */
|
||
#define _CBM_T_SEQ 0x10U
|
||
#define _CBM_T_PRG 0x11U
|
||
#define _CBM_T_USR 0x12U
|
||
#define _CBM_T_REL 0x13U
|
||
#define _CBM_T_VRP 0x14U /* Vorpal fast-loadable format */
|
||
#define _CBM_T_DEL 0x00U
|
||
#define _CBM_T_CBM 0x01U /* 1581 sub-partition */
|
||
#define _CBM_T_DIR 0x02U /* IDE64 and CMD sub-directory */
|
||
#define _CBM_T_LNK 0x03U /* IDE64 soft-link */
|
||
#define _CBM_T_OTHER 0x04U /* File-type not recognized */
|
||
#define _CBM_T_HEADER 0x05U /* Disk header / title */
|
||
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
/* Allow for names without leading underscores */
|
||
#define CBM_T_DEL _CBM_T_DEL
|
||
#define CBM_T_SEQ _CBM_T_SEQ
|
||
#define CBM_T_PRG _CBM_T_PRG
|
||
#define CBM_T_USR _CBM_T_USR
|
||
#define CBM_T_REL _CBM_T_REL
|
||
#define CBM_T_CBM _CBM_T_CBM
|
||
#define CBM_T_DIR _CBM_T_DIR
|
||
#define CBM_T_LNK _CBM_T_LNK
|
||
#define CBM_T_VRP _CBM_T_VRP
|
||
#define CBM_T_OTHER _CBM_T_OTHER
|
||
#define CBM_T_HEADER _CBM_T_HEADER
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char __fastcall__ _cbm_filetype (unsigned char c);
|
||
/* Map the start character for a file type to one of the file types above.
|
||
** Note: 'd' will always mapped to CBM_T_DEL. The calling function has to
|
||
** look at the following character to determine if the file type is actually
|
||
** CBM_T_DIR.
|
||
** This is a function used by the implementation. There is usually no need
|
||
** to call it from user code.
|
||
*/
|
||
|
||
|
||
|
||
/* End of cbm_filetype.h */
|
||
#endif
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* nes.h */
|
||
/* */
|
||
/* NES system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2003 Groepaz/Hitmen */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _NES_H
|
||
#define _NES_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__NES__)
|
||
# error This module may only be used when compiling for the NES!
|
||
#endif
|
||
|
||
|
||
|
||
/* Key and character defines */
|
||
#define CH_ENTER '\n'
|
||
#define CH_CURS_UP 0x01
|
||
#define CH_CURS_DOWN 0x02
|
||
#define CH_CURS_LEFT 0x03
|
||
#define CH_CURS_RIGHT 0x04
|
||
#define CH_ESC 8
|
||
#define CH_DEL 20
|
||
|
||
#define CH_CROSS 0x10
|
||
#define CH_RTEE 0x17
|
||
#define CH_LTEE 0x0f
|
||
#define CH_TTEE 0x16
|
||
#define CH_BTEE 0x15
|
||
#define CH_HLINE 0x0b
|
||
#define CH_VLINE 0x0e
|
||
#define CH_ULCORNER 0x14
|
||
#define CH_URCORNER 0x12
|
||
#define CH_LLCORNER 0x11
|
||
#define CH_LRCORNER 0x08
|
||
#define CH_PI 0x05
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
/* Return codes of get_tv */
|
||
#define TV_NTSC 0
|
||
#define TV_PAL 1
|
||
#define TV_OTHER 2
|
||
|
||
/* No support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
/* The joystick keys - all keys are supported */
|
||
#define KEY_A 0x01
|
||
#define KEY_B 0x02
|
||
#define KEY_SELECT 0x04
|
||
#define KEY_START 0x08
|
||
#define KEY_UP 0x10
|
||
#define KEY_DOWN 0x20
|
||
#define KEY_LEFT 0x40
|
||
#define KEY_RIGHT 0x80
|
||
|
||
/* Define hardware */
|
||
|
||
/* Picture Processing Unit */
|
||
struct __ppu {
|
||
unsigned char control;
|
||
unsigned char mask; /* color; show sprites, background */
|
||
signed char volatile const status;
|
||
struct {
|
||
unsigned char address;
|
||
unsigned char data;
|
||
} sprite;
|
||
unsigned char scroll;
|
||
struct {
|
||
unsigned char address;
|
||
unsigned char data;
|
||
} vram;
|
||
};
|
||
#define PPU (*(struct __ppu*)0x2000)
|
||
#define SPRITE_DMA (APU.sprite.dma)
|
||
|
||
/* Audio Processing Unit */
|
||
struct __apu {
|
||
struct {
|
||
unsigned char control; /* duty, counter halt, volume/envelope */
|
||
unsigned char ramp;
|
||
unsigned char period_low; /* timing */
|
||
unsigned char len_period_high; /* length, timing */
|
||
} pulse[2];
|
||
struct {
|
||
unsigned char counter; /* counter halt, linear counter */
|
||
unsigned char unused;
|
||
unsigned char period_low; /* timing */
|
||
unsigned char len_period_high; /* length, timing */
|
||
} triangle;
|
||
struct {
|
||
unsigned char control; /* counter halt, volume/envelope */
|
||
unsigned char unused;
|
||
unsigned char period; /* loop, timing */
|
||
unsigned char len; /* length */
|
||
} noise;
|
||
struct {
|
||
unsigned char control; /* IRQ, loop, rate */
|
||
unsigned char output; /* output value */
|
||
unsigned char address;
|
||
unsigned char length;
|
||
} delta_mod; /* delta pulse-code modulation */
|
||
struct {
|
||
unsigned char dma;
|
||
} sprite;
|
||
signed char volatile status;
|
||
unsigned char unused;
|
||
unsigned char fcontrol;
|
||
};
|
||
#define APU (*(struct __apu*)0x4000)
|
||
|
||
#define JOYPAD ((unsigned char volatile[2])0x4016)
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void nes_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void nes_64_56_2_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
|
||
|
||
|
||
void waitvblank (void);
|
||
/* Wait for the vertical blanking */
|
||
|
||
unsigned char get_tv (void);
|
||
/* Return the video mode the machine is using. */
|
||
|
||
|
||
|
||
/* End of nes.h */
|
||
#endif
|
||
/*
|
||
Supreme GEOS header file
|
||
includes all other headers
|
||
|
||
Maciej 'YTM/Elysium' Witkowiak, 27.10.1999
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _GEOS_H
|
||
#define _GEOS_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__GEOS__)
|
||
# error This module may only be used when compiling for GEOS!
|
||
#endif
|
||
|
||
|
||
|
||
#ifndef _GCONST_H
|
||
#include <geos/gconst.h>
|
||
#endif
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
#ifndef _GSYM_H
|
||
#include <geos/gsym.h>
|
||
#endif
|
||
|
||
#ifndef _GDISK_H
|
||
#include <geos/gdisk.h>
|
||
#endif
|
||
|
||
#ifndef _GFILE_H
|
||
#include <geos/gfile.h>
|
||
#endif
|
||
|
||
#ifndef _GPROCESS_H
|
||
#include <geos/gprocess.h>
|
||
#endif
|
||
|
||
#ifndef _GGRAPH_H
|
||
#include <geos/ggraph.h>
|
||
#endif
|
||
|
||
#ifndef _GMENU_H
|
||
#include <geos/gmenu.h>
|
||
#endif
|
||
|
||
#ifndef _GSPRITE_H
|
||
#include <geos/gsprite.h>
|
||
#endif
|
||
|
||
#ifndef _GMEMORY_H
|
||
#include <geos/gmemory.h>
|
||
#endif
|
||
|
||
#ifndef _GSYS_H
|
||
#include <geos/gsys.h>
|
||
#endif
|
||
|
||
#ifndef _GDLGBOX_H
|
||
#include <geos/gdlgbox.h>
|
||
#endif
|
||
|
||
|
||
#define CH_ULCORNER '+'
|
||
#define CH_URCORNER '+'
|
||
#define CH_LLCORNER '+'
|
||
#define CH_LRCORNER '+'
|
||
#define CH_TTEE '+'
|
||
#define CH_RTEE '+'
|
||
#define CH_BTEE '+'
|
||
#define CH_LTEE '+'
|
||
#define CH_CROSS '+'
|
||
|
||
#define CH_F1 KEY_F1
|
||
#define CH_F2 KEY_F2
|
||
#define CH_F3 KEY_F3
|
||
#define CH_F4 KEY_F4
|
||
#define CH_F5 KEY_F5
|
||
#define CH_F6 KEY_F6
|
||
#define CH_F7 KEY_F7
|
||
#define CH_F8 KEY_F8
|
||
|
||
#define CH_CURS_UP KEY_UP
|
||
#define CH_CURS_DOWN KEY_DOWN
|
||
#define CH_CURS_LEFT KEY_LEFT
|
||
#define CH_CURS_RIGHT KEY_RIGHT
|
||
#define CH_DEL KEY_DELETE
|
||
#define CH_INS KEY_INSERT
|
||
#define CH_ENTER KEY_ENTER
|
||
#define CH_STOP KEY_STOP
|
||
#define CH_ESC KEY_ESC
|
||
|
||
#define COLOR_BLACK BLACK
|
||
#define COLOR_WHITE WHITE
|
||
#define COLOR_RED RED
|
||
#define COLOR_CYAN CYAN
|
||
#define COLOR_VIOLET PURPLE
|
||
#define COLOR_PURPLE PURPLE
|
||
#define COLOR_GREEN GREEN
|
||
#define COLOR_BLUE BLUE
|
||
#define COLOR_YELLOW YELLOW
|
||
#define COLOR_ORANGE ORANGE
|
||
#define COLOR_BROWN BROWN
|
||
#define COLOR_LIGHTRED LTRED
|
||
#define COLOR_GRAY1 DKGREY
|
||
#define COLOR_GRAY2 MEDGREY
|
||
#define COLOR_LIGHTGREEN LTGREEN
|
||
#define COLOR_LIGHTBLUE LTBLUE
|
||
#define COLOR_GRAY3 LTGREY
|
||
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||
#define TGI_COLOR_RED COLOR_RED
|
||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||
#define TGI_COLOR_PURPLE COLOR_PURPLE
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_ORANGE COLOR_ORANGE
|
||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||
#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED
|
||
#define TGI_COLOR_GRAY1 COLOR_GRAY1
|
||
#define TGI_COLOR_GRAY2 COLOR_GRAY2
|
||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||
#define TGI_COLOR_GRAY3 COLOR_GRAY3
|
||
|
||
|
||
/* End of geos.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* dio.h */
|
||
/* */
|
||
/* Low-Level diskette I/O functions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2005 Christian Groessler <chris@groessler.org> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _DIO_H
|
||
#define _DIO_H
|
||
|
||
|
||
|
||
/* Please note: All functions in this file will set _oserror *and* return its
|
||
** value. The only exception is dio_open, which will return NULL, but _oserror
|
||
** will be set. All function will also set _oserror in case of successful
|
||
** execution, effectively clearing it.
|
||
*/
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
typedef struct __dhandle_t *dhandle_t;
|
||
|
||
typedef struct {
|
||
unsigned char head;
|
||
unsigned track;
|
||
unsigned sector;
|
||
} dio_phys_pos;
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned __fastcall__ dio_query_sectsize (dhandle_t handle);
|
||
/* returns sector size */
|
||
|
||
unsigned __fastcall__ dio_query_sectcount (dhandle_t handle);
|
||
/* returns sector count */
|
||
|
||
dhandle_t __fastcall__ dio_open (unsigned char device);
|
||
/* open device for subsequent dio access */
|
||
|
||
unsigned char __fastcall__ dio_close (dhandle_t handle);
|
||
/* close device, returns oserror (0 for success) */
|
||
|
||
unsigned char __fastcall__ dio_read (dhandle_t handle,
|
||
unsigned sect_num,
|
||
void *buffer);
|
||
/* read sector <sect_num> from device <handle> to memory at <buffer> */
|
||
/* the number of bytes transferred depends on the sector size */
|
||
/* returns oserror (0 for success) */
|
||
|
||
unsigned char __fastcall__ dio_write (dhandle_t handle,
|
||
unsigned sect_num,
|
||
const void *buffer);
|
||
/* write memory at <buffer> to sector <sect_num> on device <handle>, no verify */
|
||
/* the number of bytes transferred depends on the sector size */
|
||
/* returns oserror (0 for success) */
|
||
|
||
unsigned char __fastcall__ dio_write_verify (dhandle_t handle,
|
||
unsigned sect_num,
|
||
const void *buffer);
|
||
/* write memory at <buffer> to sector <sect_num> on device <handle>, verify after write */
|
||
/* the number of bytes transferred depends on the sector size */
|
||
/* returns oserror (0 for success) */
|
||
|
||
unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
|
||
const dio_phys_pos *physpos, /* input */
|
||
unsigned *sectnum); /* output */
|
||
/* convert physical sector address (head/track/sector) to logical sector number */
|
||
/* returns oserror (0 for success) */
|
||
|
||
unsigned char __fastcall__ dio_log_to_phys (dhandle_t handle,
|
||
const unsigned *sectnum, /* input */
|
||
dio_phys_pos *physpos); /* output */
|
||
/* convert logical sector number to physical sector address (head/track/sector) */
|
||
/* returns oserror (0 for success) */
|
||
|
||
#endif /* #ifndef _DIO_H */
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* o65.h */
|
||
/* */
|
||
/* Definitions for the o65 file format */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2009, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* This files exports structures and constants to handle the o65 relocatable
|
||
** file format as defined by Andre Fachat. See the original document under
|
||
**
|
||
** http://www.6502.org/users/andre/o65/fileformat.html
|
||
**
|
||
** for more information.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _O65_H
|
||
#define _O65_H
|
||
|
||
|
||
|
||
/* o65 size type. It is 2 bytes for the 6502 and 4 bytes for the 65816 */
|
||
typedef unsigned o65_size;
|
||
|
||
|
||
/* Structure that defines the o65 file header */
|
||
typedef struct o65_header o65_header;
|
||
struct o65_header {
|
||
char marker[2]; /* Non-C64 marker */
|
||
char magic[3]; /* o65 magic */
|
||
char version; /* Version number */
|
||
unsigned mode; /* Mode word */
|
||
o65_size tbase; /* Original text (code) segment address */
|
||
o65_size tlen; /* Size of text (code) segment */
|
||
o65_size dbase; /* Original data segment address */
|
||
o65_size dlen; /* Size of data segment */
|
||
o65_size bbase; /* Original bss segment address */
|
||
o65_size blen; /* Size of bss segment */
|
||
o65_size zbase; /* Original zp segment address */
|
||
o65_size zlen; /* Size of zp segment */
|
||
o65_size stack; /* Stacksize needed */
|
||
};
|
||
|
||
|
||
|
||
/* Marker, magic and version number */
|
||
#define O65_MARKER_0 0x01
|
||
#define O65_MARKER_1 0x00
|
||
#define O65_MAGIC_0 0x6F /* 'o' */
|
||
#define O65_MAGIC_1 0x36 /* '6' */
|
||
#define O65_MAGIC_2 0x35 /* '5' */
|
||
#define O65_VERSION 0x00
|
||
|
||
/* Defines for the mode word */
|
||
#define O65_CPU_65816 0x8000 /* Executable is for 65816 */
|
||
#define O65_CPU_6502 0x0000 /* Executable is for the 6502 */
|
||
#define O65_CPU_MASK 0x8000 /* Mask to extract CPU type */
|
||
|
||
#define O65_RELOC_PAGE 0x4000 /* Page wise relocation */
|
||
#define O65_RELOC_BYTE 0x0000 /* Byte wise relocation */
|
||
#define O65_RELOC_MASK 0x4000 /* Mask to extract relocation type */
|
||
|
||
#define O65_SIZE_32BIT 0x2000 /* All size words are 32bit */
|
||
#define O65_SIZE_16BIT 0x0000 /* All size words are 16bit */
|
||
#define O65_SIZE_MASK 0x2000 /* Mask to extract size */
|
||
|
||
#define O65_FTYPE_OBJ 0x1000 /* Object file */
|
||
#define O65_FTYPE_EXE 0x0000 /* Executable file */
|
||
#define O65_FTYPE_MASK 0x1000 /* Mask to extract type */
|
||
|
||
#define O65_ADDR_SIMPLE 0x0800 /* Simple addressing */
|
||
#define O65_ADDR_DEFAULT 0x0000 /* Default addressing */
|
||
#define O65_ADDR_MASK 0x0800 /* Mask to extract addressing */
|
||
|
||
#define O65_CHAIN 0x0400 /* Chained file, another one follows */
|
||
#define O65_CHAIN_MASK 0x0400 /* Mask to extract chain flag */
|
||
|
||
#define O65_BSSZERO 0x0200 /* BSS segment must be zeroed */
|
||
#define O65_BSSZERO_MASK 0x0200 /* Mask to extract bss zero flag */
|
||
|
||
/* The following is used if O65_CPU == 6502 */
|
||
#define O65_CPU2_6502 0x0000 /* Executable is for 6502 */
|
||
#define O65_CPU2_65C02 0x0010 /* Executable is for 65C02 */
|
||
#define O65_CPU2_65SC02 0x0020 /* Executable is for 65SC02 */
|
||
#define O65_CPU2_65CE02 0x0030 /* Executable is for 65CE02 */
|
||
#define O65_CPU2_6502X 0x0040 /* Executable is for NMOS 6502 */
|
||
#define O65_CPU2_65816_EMU 0x0050 /* Executable is for 65816 in emul mode */
|
||
#define O65_CPU2_MASK 0x00F0 /* Mask to extract CPU2 field */
|
||
|
||
#define O65_ALIGN_1 0x0000 /* Bytewise alignment */
|
||
#define O65_ALIGN_2 0x0001 /* Align words */
|
||
#define O65_ALIGN_4 0x0002 /* Align longwords */
|
||
#define O65_ALIGN_256 0x0003 /* Align pages (256 bytes) */
|
||
#define O65_ALIGN_MASK 0x0003 /* Mask to extract alignment */
|
||
|
||
/* The mode word as generated by the ld65 linker */
|
||
#define O65_MODE_CC65 (O65_CPU_6502 | \
|
||
O65_RELOC_BYTE | \
|
||
O65_SIZE_16BIT | \
|
||
O65_FTYPE_EXE | \
|
||
O65_ADDR_SIMPLE | \
|
||
O65_ALIGN_1)
|
||
|
||
/* The four o65 segment types. */
|
||
#define O65_SEGID_UNDEF 0x00
|
||
#define O65_SEGID_ABS 0x01
|
||
#define O65_SEGID_TEXT 0x02
|
||
#define O65_SEGID_DATA 0x03
|
||
#define O65_SEGID_BSS 0x04
|
||
#define O65_SEGID_ZP 0x05
|
||
#define O65_SEGID_MASK 0x07
|
||
|
||
/* Relocation type codes */
|
||
#define O65_RTYPE_WORD 0x80
|
||
#define O65_RTYPE_HIGH 0x40
|
||
#define O65_RTYPE_LOW 0x20
|
||
#define O65_RTYPE_SEGADDR 0xC0
|
||
#define O65_RTYPE_SEG 0xA0
|
||
#define O65_RTYPE_MASK 0xE0
|
||
|
||
/* Segment IDs */
|
||
#define O65_SEGID_UNDEF 0x00
|
||
#define O65_SEGID_ABS 0x01
|
||
#define O65_SEGID_TEXT 0x02
|
||
#define O65_SEGID_DATA 0x03
|
||
#define O65_SEGID_BSS 0x04
|
||
#define O65_SEGID_ZP 0x05
|
||
#define O65_SEGID_MASK 0x07
|
||
|
||
/* Option tags */
|
||
#define O65_OPT_FILENAME 0
|
||
#define O65_OPT_OS 1
|
||
#define O65_OPT_ASM 2
|
||
#define O65_OPT_AUTHOR 3
|
||
#define O65_OPT_TIMESTAMP 4
|
||
|
||
/* Operating system codes for O65_OPT_OS */
|
||
#define O65_OS_OSA65 1
|
||
#define O65_OS_LUNIX 2
|
||
#define O65_OS_CC65 3
|
||
#define O65_OS_OPENCBM 4
|
||
|
||
|
||
|
||
/* End of o65.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stdarg.h */
|
||
/* */
|
||
/* Variable arguments */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2004 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STDARG_H
|
||
#define _STDARG_H
|
||
|
||
|
||
|
||
typedef unsigned char* va_list;
|
||
|
||
#define va_start(ap, fix) ap = ((va_list)&(fix))
|
||
#define va_arg(ap,type) (*(type*)(ap -= ((sizeof (type) + 1) & ~1)))
|
||
#if __CC65_STD__ >= __CC65_STD_C99__
|
||
#define va_copy(dest, src) ((dest)=(src))
|
||
#endif
|
||
#define va_end(ap)
|
||
|
||
|
||
|
||
/* End of stdarg.h */
|
||
#endif
|
||
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* stddef.h */
|
||
/* */
|
||
/* Common definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2009, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STDDEF_H
|
||
#define _STDDEF_H
|
||
|
||
|
||
|
||
/* Standard data types */
|
||
#ifndef _HAVE_ptrdiff_t
|
||
#define _HAVE_ptrdiff_t
|
||
typedef int ptrdiff_t;
|
||
#endif
|
||
#ifndef _HAVE_wchar_t
|
||
#define _HAVE_wchar_t
|
||
typedef char wchar_t;
|
||
#endif
|
||
#ifndef _HAVE_size_t
|
||
#define _HAVE_size_t
|
||
typedef unsigned size_t;
|
||
#endif
|
||
|
||
/* NULL pointer */
|
||
#ifndef _HAVE_NULL
|
||
#define NULL 0
|
||
#define _HAVE_NULL
|
||
#endif
|
||
|
||
/* offsetof macro */
|
||
#define offsetof(type, member) (size_t) (&((type*) 0)->member)
|
||
|
||
|
||
|
||
/* End of stddef.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* dirent.h */
|
||
/* */
|
||
/* Directory entries for cc65 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _DIRENT_H
|
||
#define _DIRENT_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
typedef struct DIR DIR;
|
||
|
||
#if defined(__APPLE2__)
|
||
|
||
struct dirent {
|
||
char d_name[16];
|
||
unsigned d_ino;
|
||
unsigned d_blocks;
|
||
unsigned long d_size;
|
||
unsigned char d_type;
|
||
struct {
|
||
unsigned day :5;
|
||
unsigned mon :4;
|
||
unsigned year :7;
|
||
} d_cdate;
|
||
struct {
|
||
unsigned char min;
|
||
unsigned char hour;
|
||
} d_ctime;
|
||
unsigned char d_access;
|
||
unsigned d_auxtype;
|
||
struct {
|
||
unsigned day :5;
|
||
unsigned mon :4;
|
||
unsigned year :7;
|
||
} d_mdate;
|
||
struct {
|
||
unsigned char min;
|
||
unsigned char hour;
|
||
} d_mtime;
|
||
};
|
||
|
||
#define _DE_ISREG(t) ((t) != 0x0F)
|
||
#define _DE_ISDIR(t) ((t) == 0x0F)
|
||
#define _DE_ISLBL(t) (0)
|
||
#define _DE_ISLNK(t) (0)
|
||
|
||
#elif defined(__ATARI__)
|
||
|
||
struct dirent {
|
||
char d_name[13]; /* 8.3 + trailing 0 */
|
||
unsigned char d_type;
|
||
};
|
||
|
||
#define _DE_ISREG(t) ((t) != 0xC4)
|
||
#define _DE_ISDIR(t) ((t) == 0xC4)
|
||
#define _DE_ISLBL(t) (0)
|
||
#define _DE_ISLNK(t) (0)
|
||
|
||
#elif defined(__CBM__)
|
||
|
||
struct dirent {
|
||
char d_name[16+1];
|
||
unsigned int d_off;
|
||
unsigned int d_blocks;
|
||
unsigned char d_type; /* See _CBM_T_xxx defines */
|
||
|
||
/* bsd extensions */
|
||
unsigned char d_namlen;
|
||
};
|
||
|
||
/* File type specification macros. We need definitions of CBM file types. */
|
||
#include <cbm_filetype.h>
|
||
|
||
#define _DE_ISREG(t) (((t) & _CBM_T_REG) != 0)
|
||
#define _DE_ISDIR(t) ((t) == _CBM_T_DIR)
|
||
#define _DE_ISLBL(t) ((t) == _CBM_T_HDR)
|
||
#define _DE_ISLNK(t) ((t) == _CBM_T_LNK)
|
||
|
||
#elif defined(__LYNX__)
|
||
|
||
struct dirent {
|
||
unsigned char d_blocks;
|
||
unsigned int d_offset;
|
||
char d_type;
|
||
void *d_address;
|
||
unsigned int d_size;
|
||
};
|
||
|
||
extern struct dirent FileEntry;
|
||
#pragma zpsym ("FileEntry");
|
||
|
||
#define _DE_ISREG(t) (1)
|
||
#define _DE_ISDIR(t) (0)
|
||
#define _DE_ISLBL(t) (0)
|
||
#define _DE_ISLNK(t) (0)
|
||
|
||
#else
|
||
|
||
struct dirent {
|
||
char d_name[1];
|
||
};
|
||
|
||
#define _DE_ISREG(t) (1)
|
||
#define _DE_ISDIR(t) (0)
|
||
#define _DE_ISLBL(t) (0)
|
||
#define _DE_ISLNK(t) (0)
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
DIR* __fastcall__ opendir (const char* name);
|
||
|
||
struct dirent* __fastcall__ readdir (DIR* dir);
|
||
|
||
int __fastcall__ closedir (DIR* dir);
|
||
|
||
long __fastcall__ telldir (DIR* dir);
|
||
|
||
void __fastcall__ seekdir (DIR* dir, long offs);
|
||
|
||
void __fastcall__ rewinddir (DIR* dir);
|
||
|
||
|
||
|
||
/* End of dirent.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _pokey.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __POKEY_H
|
||
#define __POKEY_H
|
||
|
||
|
||
|
||
/* Define a structure with the pokey register offsets */
|
||
struct __pokey_write {
|
||
unsigned char audf1; /* audio channel #1 frequency */
|
||
unsigned char audc1; /* audio channel #1 control */
|
||
unsigned char audf2; /* audio channel #2 frequency */
|
||
unsigned char audc2; /* audio channel #2 control */
|
||
unsigned char audf3; /* audio channel #3 frequency */
|
||
unsigned char audc3; /* audio channel #3 control */
|
||
unsigned char audf4; /* audio channel #4 frequency */
|
||
unsigned char audc4; /* audio channel #4 control */
|
||
unsigned char audctl; /* audio control */
|
||
unsigned char stimer; /* start pokey timers */
|
||
unsigned char skrest; /* reset serial port status reg. */
|
||
unsigned char potgo; /* start paddle scan sequence */
|
||
unsigned char unuse1; /* unused */
|
||
unsigned char serout; /* serial port data output */
|
||
unsigned char irqen; /* interrupt request enable */
|
||
unsigned char skctl; /* serial port control */
|
||
};
|
||
struct __pokey_read {
|
||
unsigned char pot0; /* paddle 0 value */
|
||
unsigned char pot1; /* paddle 1 value */
|
||
unsigned char pot2; /* paddle 2 value */
|
||
unsigned char pot3; /* paddle 3 value */
|
||
unsigned char pot4; /* paddle 4 value */
|
||
unsigned char pot5; /* paddle 5 value */
|
||
unsigned char pot6; /* paddle 6 value */
|
||
unsigned char pot7; /* paddle 7 value */
|
||
unsigned char allpot; /* eight paddle port status */
|
||
unsigned char kbcode; /* keyboard code */
|
||
unsigned char random; /* random number generator */
|
||
unsigned char unuse2; /* unused */
|
||
unsigned char unuse3; /* unused */
|
||
unsigned char serin; /* serial port input */
|
||
unsigned char irqst; /* interrupt request status */
|
||
unsigned char skstat; /* serial port status */
|
||
};
|
||
|
||
/* End of _pokey.h */
|
||
#endif /* #ifndef __POKEY_H */
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* supervision.h */
|
||
/* */
|
||
/* Supervision specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* 2003 Peter Trauner (trap@utanet.at) */
|
||
/* */
|
||
/* */
|
||
/* This software is provided "as-is," without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment, in the product's documentation, */
|
||
/* would be appreciated, but is not required. */
|
||
/* 2. Alterred source versions must be marked plainly as such, */
|
||
/* and must not be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or alterred */
|
||
/* from any source distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _SUPERVISION_H
|
||
#define _SUPERVISION_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__SUPERVISION__)
|
||
# error This module may only be used when compiling for the Supervision!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
struct __sv_lcd {
|
||
unsigned char width;
|
||
unsigned char height;
|
||
unsigned char xpos;
|
||
unsigned char ypos;
|
||
};
|
||
#define SV_LCD ((struct __sv_lcd*)0x2000)
|
||
|
||
struct __sv_tone {
|
||
unsigned delay;
|
||
unsigned char control;
|
||
unsigned char timer;
|
||
};
|
||
#define SV_RIGHT ((struct __sv_tone*)0x2010)
|
||
#define SV_LEFT ((struct __sv_tone*)0x2014)
|
||
|
||
struct __sv_noise {
|
||
unsigned char volume; /* and frequency */
|
||
unsigned char timer;
|
||
unsigned char control;
|
||
};
|
||
#define SV_NOISE ((struct __sv_noise*)0x2028)
|
||
|
||
struct __io_port {
|
||
unsigned char in;
|
||
unsigned char out;
|
||
};
|
||
#define IO_PORT ((struct __io_port*)(0x2021)
|
||
|
||
struct __sv_dma {
|
||
unsigned start;
|
||
unsigned char size;
|
||
unsigned char control;
|
||
unsigned char on;
|
||
};
|
||
#define SV_DMA ((struct __sv_dma*)0x2018)
|
||
|
||
#define SV_CONTROL (*(unsigned char*)0x2020)
|
||
|
||
#define SV_BANK (*(unsigned char*)0x2026)
|
||
#define SV_BANK_COMBINE(nmi,irq_timer,irq_dma,lcd_on, timer_prescale, bank) \
|
||
((nmi)?1:0)|((irq_timer)?2:0)|((irq_dma)?4:0)|((lcd_on)?8:0) \
|
||
|((timer_prescale)?0x10:0)|((bank)<<5)
|
||
|
||
#define SV_VIDEO ((unsigned char*)0x4000)
|
||
#define SV_TIMER_COUNT (*(unsigned char*)0x2023)
|
||
|
||
|
||
|
||
/* Counters incremented asynchronously!
|
||
** If you want more complex, copy the crt0.s file from the libsrc/supervision
|
||
** directory and code them yourself (in assembler)
|
||
*/
|
||
extern unsigned char sv_nmi_counter;
|
||
extern unsigned char sv_timer_irq_counter;
|
||
extern unsigned char sv_timer_dma_counter;
|
||
|
||
|
||
|
||
/* End of supervision.h */
|
||
#endif
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* atmos.h */
|
||
/* */
|
||
/* Oric Atmos system-specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Debrune J<>rome, <jede@oric.org> */
|
||
/* (C) 2003-2013 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ATMOS_H
|
||
#define _ATMOS_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__ATMOS__)
|
||
# error This module may only be used when compiling for the Oric Atmos!
|
||
#endif
|
||
|
||
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_RED 0x01
|
||
#define COLOR_GREEN 0x02
|
||
#define COLOR_YELLOW 0x03
|
||
#define COLOR_BLUE 0x04
|
||
#define COLOR_MAGENTA 0x05
|
||
#define COLOR_CYAN 0x06
|
||
#define COLOR_WHITE 0x07
|
||
|
||
/* TGI color defines */
|
||
/* White and red are swapped, so that the pallete
|
||
** driver is compatible with black-and-white drivers.
|
||
*/
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_WHITE 1
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_MAGENTA COLOR_MAGENTA
|
||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||
#define TGI_COLOR_RED 7
|
||
|
||
|
||
|
||
/* Define hardware */
|
||
#include <_6522.h>
|
||
#define VIA (*(struct __6522*)0x300)
|
||
|
||
|
||
|
||
/* These are defined to be FUNCT + NumberKey */
|
||
#define CH_F1 0xB1
|
||
#define CH_F2 0xB2
|
||
#define CH_F3 0xB3
|
||
#define CH_F4 0xB4
|
||
#define CH_F5 0xB5
|
||
#define CH_F6 0xB6
|
||
#define CH_F7 0xB7
|
||
#define CH_F8 0xB8
|
||
#define CH_F9 0xB9
|
||
#define CH_F10 0xB0
|
||
|
||
|
||
|
||
/* Character codes */
|
||
#define CH_ULCORNER '+'
|
||
#define CH_URCORNER '+'
|
||
#define CH_LLCORNER '+'
|
||
#define CH_LRCORNER '+'
|
||
#define CH_TTEE '+'
|
||
#define CH_BTEE '+'
|
||
#define CH_LTEE '+'
|
||
#define CH_RTEE '+'
|
||
#define CH_CROSS '+'
|
||
#define CH_CURS_UP 11
|
||
#define CH_CURS_DOWN 10
|
||
#define CH_CURS_LEFT 8
|
||
#define CH_CURS_RIGHT 9
|
||
#define CH_DEL 127
|
||
#define CH_ENTER 13
|
||
#define CH_STOP 3
|
||
#define CH_LIRA 95
|
||
#define CH_ESC 27
|
||
|
||
|
||
|
||
/* No support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void atmos_pase_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void atmos_acia_ser[];
|
||
extern void atmos_228_200_3_tgi[];
|
||
extern void atmos_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ atmos_load(const char* name);
|
||
/* Load Atmos tape. */
|
||
|
||
void __fastcall__ atmos_save(const char* name, const void* start, const void* end);
|
||
/* Save Atmos tape. */
|
||
|
||
void atmos_explode (void);
|
||
/* Bomb sound effect */
|
||
|
||
void atmos_ping (void);
|
||
/* Bell or ricochet sound effect */
|
||
|
||
void atmos_shoot (void);
|
||
/* Pistol sound effect */
|
||
|
||
void atmos_tick (void);
|
||
/* High-pitch click */
|
||
|
||
void atmos_tock (void);
|
||
/* Low-pitch click */
|
||
|
||
void atmos_zap (void);
|
||
/* Raygun sound effect */
|
||
|
||
|
||
|
||
/* End of atmos.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* peekpoke.h */
|
||
/* */
|
||
/* PEEK and POKE macros for those who want to write BASIC code in C */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _PEEKPOKE_H
|
||
#define _PEEKPOKE_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Macros */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define POKE(addr,val) (*(unsigned char*) (addr) = (val))
|
||
#define POKEW(addr,val) (*(unsigned*) (addr) = (val))
|
||
#define PEEK(addr) (*(unsigned char*) (addr))
|
||
#define PEEKW(addr) (*(unsigned*) (addr))
|
||
|
||
|
||
|
||
/* End of peekpoke.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* apple2.h */
|
||
/* */
|
||
/* Apple ][ system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Kevin Ruland, <kevin@rodin.wustl.edu> */
|
||
/* (C) 2003 Ullrich von Bassewitz, <uz@cc65.org> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _APPLE2_H
|
||
#define _APPLE2_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__APPLE2__)
|
||
# error This module may only be used when compiling for the Apple ][!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
|
||
/* TGI color defines */
|
||
#define TGI_COLOR_BLACK 0x00
|
||
#define TGI_COLOR_GREEN 0x01
|
||
#define TGI_COLOR_VIOLET 0x02
|
||
#define TGI_COLOR_WHITE 0x03
|
||
#define TGI_COLOR_BLACK2 0x04
|
||
#define TGI_COLOR_ORANGE 0x05
|
||
#define TGI_COLOR_BLUE 0x06
|
||
#define TGI_COLOR_WHITE2 0x07
|
||
|
||
#define TGI_COLOR_MAGENTA TGI_COLOR_BLACK2
|
||
#define TGI_COLOR_DARKBLUE TGI_COLOR_WHITE2
|
||
#define TGI_COLOR_DARKGREEN 0x08
|
||
#define TGI_COLOR_GRAY 0x09
|
||
#define TGI_COLOR_CYAN 0x0A
|
||
#define TGI_COLOR_BROWN 0x0B
|
||
#define TGI_COLOR_GRAY2 0x0C
|
||
#define TGI_COLOR_PINK 0x0D
|
||
#define TGI_COLOR_YELLOW 0x0E
|
||
#define TGI_COLOR_AQUA 0x0F
|
||
|
||
/* Characters codes */
|
||
#define CH_ENTER 0x0D
|
||
#define CH_ESC 0x1B
|
||
#define CH_CURS_LEFT 0x08
|
||
#define CH_CURS_RIGHT 0x15
|
||
|
||
#define CH_ULCORNER '+'
|
||
#define CH_URCORNER '+'
|
||
#define CH_LLCORNER '+'
|
||
#define CH_LRCORNER '+'
|
||
#define CH_TTEE '+'
|
||
#define CH_BTEE '+'
|
||
#define CH_LTEE '+'
|
||
#define CH_RTEE '+'
|
||
#define CH_CROSS '+'
|
||
|
||
/* Return codes for get_ostype */
|
||
#define APPLE_UNKNOWN 0x00
|
||
#define APPLE_II 0x10 /* Apple ][ */
|
||
#define APPLE_IIPLUS 0x11 /* Apple ][+ */
|
||
#define APPLE_IIIEM 0x20 /* Apple /// (emulation) */
|
||
#define APPLE_IIE 0x30 /* Apple //e */
|
||
#define APPLE_IIEENH 0x31 /* Apple //e (enhanced) */
|
||
#define APPLE_IIECARD 0x40 /* Apple //e Option Card */
|
||
#define APPLE_IIC 0x50 /* Apple //c */
|
||
#define APPLE_IIC35 0x51 /* Apple //c (3.5 ROM) */
|
||
#define APPLE_IICEXP 0x53 /* Apple //c (Mem. Exp.) */
|
||
#define APPLE_IICREV 0x54 /* Apple //c (Rev. Mem. Exp.) */
|
||
#define APPLE_IICPLUS 0x55 /* Apple //c Plus */
|
||
#define APPLE_IIGS 0x80 /* Apple IIgs */
|
||
#define APPLE_IIGS1 0x81 /* Apple IIgs (ROM 1) */
|
||
#define APPLE_IIGS3 0x83 /* Apple IIgs (ROM 3) */
|
||
|
||
extern unsigned char _dos_type;
|
||
/* Valid _dos_type values:
|
||
**
|
||
** AppleDOS 3.3 - 0x00
|
||
** ProDOS 8 1.0.1 - 0x10
|
||
** ProDOS 8 1.0.2 - 0x10
|
||
** ProDOS 8 1.1.1 - 0x11
|
||
** ProDOS 8 1.2 - 0x12
|
||
** ProDOS 8 1.3 - 0x13
|
||
** ProDOS 8 1.4 - 0x14
|
||
** ProDOS 8 1.5 - 0x15
|
||
** ProDOS 8 1.6 - 0x16
|
||
** ProDOS 8 1.7 - 0x17
|
||
** ProDOS 8 1.8 - 0x18
|
||
** ProDOS 8 1.9 - 0x18 (!)
|
||
** ProDOS 8 2.0.1 - 0x21
|
||
** ProDOS 8 2.0.2 - 0x22
|
||
** ProDOS 8 2.0.3 - 0x23
|
||
*/
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The file stream implementation and the POSIX I/O functions will use the
|
||
** following variables to determine the file type, aux type and creation time
|
||
** stamp to use.
|
||
*/
|
||
extern unsigned char _filetype; /* Default: 6 */
|
||
extern unsigned int _auxtype; /* Default: 0 */
|
||
extern struct {
|
||
struct {
|
||
unsigned day :5;
|
||
unsigned mon :4;
|
||
unsigned year :7;
|
||
} createdate; /* Current date: 0 */
|
||
struct {
|
||
unsigned char min;
|
||
unsigned char hour;
|
||
} createtime; /* Current time: 0 */
|
||
} _datetime;
|
||
|
||
/* The addresses of the static drivers */
|
||
#if !defined(__APPLE2ENH__)
|
||
extern void a2_auxmem_emd[];
|
||
extern void a2_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void a2_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||
extern void a2_ssc_ser[];
|
||
extern void a2_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
extern void a2_lo_tgi[];
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char get_ostype (void);
|
||
/* Get the machine type. Returns one of the APPLE_xxx codes. */
|
||
|
||
void rebootafterexit (void);
|
||
/* Reboot machine after program termination has completed. */
|
||
|
||
#define ser_apple2_slot(num) ser_ioctl (0, (void*) (num))
|
||
/* Select a slot number from 1 to 7 prior to ser_open.
|
||
** The default slot number is 2.
|
||
*/
|
||
|
||
#define tgi_apple2_mix(onoff) tgi_ioctl (0, (void*) (onoff))
|
||
/* If onoff is 1, graphics/text mixed mode is enabled.
|
||
** If onoff is 0, graphics/text mixed mode is disabled.
|
||
*/
|
||
|
||
/* The following #defines will cause the matching functions calls in conio.h
|
||
** to be overlaid by macros with the same names, saving the function call
|
||
** overhead.
|
||
*/
|
||
#define _textcolor(color) COLOR_WHITE
|
||
#define _bgcolor(color) COLOR_BLACK
|
||
#define _bordercolor(color) COLOR_BLACK
|
||
|
||
|
||
|
||
/* End of apple2.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* inttypes.h */
|
||
/* */
|
||
/* Format conversion of integer types */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2011, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Note: This file is not fully ISO 9899-1999 compliant because cc65 lacks
|
||
** a 64 bit data types and is not able to return structs > 4 bytes. The
|
||
** declarations have been adjusted accordingly or left out.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _INTTYPES_H
|
||
#define _INTTYPES_H
|
||
|
||
|
||
|
||
/* inttypes.h must always include stdint.h */
|
||
#ifndef _STDINT_H
|
||
#include <stdint.h>
|
||
#endif
|
||
|
||
|
||
|
||
/* Standard functions */
|
||
intmax_t __fastcall__ imaxabs (intmax_t val);
|
||
intmax_t __fastcall__ strtoimax (const char* nptr, char** endptr, int base);
|
||
uintmax_t __fastcall__ strtoumax (const char* nptr, char** endptr, int base);
|
||
|
||
|
||
|
||
/* printf() macros for signed integers */
|
||
#define PRId8 "d"
|
||
#define PRId16 "d"
|
||
#define PRId32 "ld"
|
||
|
||
#define PRIdLEAST8 "d"
|
||
#define PRIdLEAST16 "d"
|
||
#define PRIdLEAST32 "ld"
|
||
|
||
#define PRIdFAST8 "d"
|
||
#define PRIdFAST16 "d"
|
||
#define PRIdFAST32 "ld"
|
||
|
||
#define PRIdMAX "ld"
|
||
#define PRIdPTR "d"
|
||
|
||
#define PRIi8 "i"
|
||
#define PRIi16 "i"
|
||
#define PRIi32 "li"
|
||
|
||
#define PRIiLEAST8 "i"
|
||
#define PRIiLEAST16 "i"
|
||
#define PRIiLEAST32 "li"
|
||
|
||
#define PRIiFAST8 "i"
|
||
#define PRIiFAST16 "i"
|
||
#define PRIiFAST32 "li"
|
||
|
||
#define PRIiMAX "li"
|
||
#define PRIiPTR "i"
|
||
|
||
/* fprintf() macros for unsigned integers */
|
||
#define PRIo8 "o"
|
||
#define PRIo16 "o"
|
||
#define PRIo32 "lo"
|
||
|
||
#define PRIoLEAST8 "o"
|
||
#define PRIoLEAST16 "o"
|
||
#define PRIoLEAST32 "lo"
|
||
|
||
#define PRIoFAST8 "o"
|
||
#define PRIoFAST16 "o"
|
||
#define PRIoFAST32 "lo"
|
||
|
||
#define PRIoMAX "lo"
|
||
#define PRIoPTR "o"
|
||
|
||
#define PRIu8 "u"
|
||
#define PRIu16 "u"
|
||
#define PRIu32 "lu"
|
||
|
||
#define PRIuLEAST8 "u"
|
||
#define PRIuLEAST16 "u"
|
||
#define PRIuLEAST32 "lu"
|
||
|
||
#define PRIuFAST8 "u"
|
||
#define PRIuFAST16 "u"
|
||
#define PRIuFAST32 "lu"
|
||
|
||
#define PRIuMAX "lu"
|
||
#define PRIuPTR "u"
|
||
|
||
#define PRIx8 "x"
|
||
#define PRIx16 "x"
|
||
#define PRIx32 "lx"
|
||
|
||
#define PRIxLEAST8 "x"
|
||
#define PRIxLEAST16 "x"
|
||
#define PRIxLEAST32 "lx"
|
||
|
||
#define PRIxFAST8 "x"
|
||
#define PRIxFAST16 "x"
|
||
#define PRIxFAST32 "lx"
|
||
|
||
#define PRIxMAX "lx"
|
||
#define PRIxPTR "x"
|
||
|
||
#define PRIX8 "X"
|
||
#define PRIX16 "X"
|
||
#define PRIX32 "lX"
|
||
|
||
#define PRIXLEAST8 "X"
|
||
#define PRIXLEAST16 "X"
|
||
#define PRIXLEAST32 "lX"
|
||
|
||
#define PRIXFAST8 "X"
|
||
#define PRIXFAST16 "X"
|
||
#define PRIXFAST32 "lX"
|
||
|
||
#define PRIXMAX "lX"
|
||
#define PRIXPTR "X"
|
||
|
||
/* fscanf() macros for signed integers */
|
||
#define SCNd8 "hd"
|
||
#define SCNd16 "d"
|
||
#define SCNd32 "ld"
|
||
|
||
#define SCNdLEAST8 "hd"
|
||
#define SCNdLEAST16 "d"
|
||
#define SCNdLEAST32 "ld"
|
||
|
||
#define SCNdFAST8 "hd"
|
||
#define SCNdFAST16 "d"
|
||
#define SCNdFAST32 "ld"
|
||
|
||
#define SCNdMAX "ld"
|
||
#define SCNdPTR "d"
|
||
|
||
#define SCNi8 "hi"
|
||
#define SCNi16 "i"
|
||
#define SCNi32 "li"
|
||
|
||
#define SCNiLEAST8 "hi"
|
||
#define SCNiLEAST16 "i"
|
||
#define SCNiLEAST32 "li"
|
||
|
||
#define SCNiFAST8 "hi"
|
||
#define SCNiFAST16 "i"
|
||
#define SCNiFAST32 "li"
|
||
|
||
#define SCNiMAX "li"
|
||
#define SCNiPTR "i"
|
||
|
||
/* fscanf() macros for unsigned integers */
|
||
#define SCNo8 "ho"
|
||
#define SCNo16 "o"
|
||
#define SCNo32 "lo"
|
||
|
||
#define SCNoLEAST8 "ho"
|
||
#define SCNoLEAST16 "o"
|
||
#define SCNoLEAST32 "lo"
|
||
|
||
#define SCNoFAST8 "ho"
|
||
#define SCNoFAST16 "o"
|
||
#define SCNoFAST32 "lo"
|
||
|
||
#define SCNoMAX "lo"
|
||
#define SCNoPTR "o"
|
||
|
||
#define SCNu8 "hu"
|
||
#define SCNu16 "u"
|
||
#define SCNu32 "lu"
|
||
|
||
#define SCNuLEAST8 "hu"
|
||
#define SCNuLEAST16 "u"
|
||
#define SCNuLEAST32 "lu"
|
||
|
||
#define SCNuFAST8 "hu"
|
||
#define SCNuFAST16 "u"
|
||
#define SCNuFAST32 "lu"
|
||
|
||
#define SCNuMAX "lu"
|
||
#define SCNuPTR "u"
|
||
|
||
#define SCNx8 "hx"
|
||
#define SCNx16 "x"
|
||
#define SCNx32 "lx"
|
||
|
||
#define SCNxLEAST8 "hx"
|
||
#define SCNxLEAST16 "x"
|
||
#define SCNxLEAST32 "lx"
|
||
|
||
#define SCNxFAST8 "hx"
|
||
#define SCNxFAST16 "x"
|
||
#define SCNxFAST32 "lx"
|
||
|
||
#define SCNxMAX "lx"
|
||
#define SCNxPTR "x"
|
||
|
||
|
||
|
||
/* End of inttypes.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* time.h */
|
||
/* */
|
||
/* Date and time */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2012 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TIME_H
|
||
#define _TIME_H
|
||
|
||
|
||
|
||
/* NULL pointer */
|
||
#ifndef _HAVE_NULL
|
||
#define NULL 0
|
||
#define _HAVE_NULL
|
||
#endif
|
||
|
||
/* size_t is needed */
|
||
#ifndef _HAVE_size_t
|
||
#define _HAVE_size_t
|
||
typedef unsigned size_t;
|
||
#endif
|
||
|
||
typedef unsigned long time_t;
|
||
typedef unsigned long clock_t;
|
||
|
||
/* Structure for broken down time */
|
||
struct tm {
|
||
int tm_sec;
|
||
int tm_min;
|
||
int tm_hour;
|
||
int tm_mday;
|
||
int tm_mon;
|
||
int tm_year;
|
||
int tm_wday;
|
||
int tm_yday;
|
||
int tm_isdst;
|
||
};
|
||
|
||
/* Timezone representation, default is UTC */
|
||
extern struct _timezone {
|
||
char daylight; /* True if daylight savings time active */
|
||
long timezone; /* Number of seconds behind UTC */
|
||
char tzname[5]; /* Name of timezone, e.g. CET */
|
||
char dstname[5]; /* Name when daylight true, e.g. CEST */
|
||
} _tz;
|
||
|
||
|
||
|
||
#if defined(__ATARI__)
|
||
/* The clock depends on the video standard, so read it at runtime */
|
||
unsigned _clocks_per_sec (void);
|
||
# define CLK_TCK _clocks_per_sec()
|
||
# define CLOCKS_PER_SEC _clocks_per_sec()
|
||
#elif defined(__ATARI5200__)
|
||
# define CLK_TCK 60 /* POSIX */
|
||
# define CLOCKS_PER_SEC 60 /* ANSI */
|
||
#elif defined(__ATMOS__)
|
||
# define CLK_TCK 100 /* POSIX */
|
||
# define CLOCKS_PER_SEC 100 /* ANSI */
|
||
#elif defined(__CBM__)
|
||
# if defined(__CBM510__) || defined(__CBM610__)
|
||
/* The 510/610 gets its clock from the AC current */
|
||
# define CLK_TCK 50 /* POSIX */
|
||
# define CLOCKS_PER_SEC 50 /* ANSI */
|
||
# else
|
||
# define CLK_TCK 60 /* POSIX */
|
||
# define CLOCKS_PER_SEC 60 /* ANSI */
|
||
# endif
|
||
#elif defined(__NES__)
|
||
# define CLK_TCK 50 /* POSIX */
|
||
# define CLOCKS_PER_SEC 50 /* ANSI */
|
||
#elif defined(__PCE__)
|
||
# define CLK_TCK 60 /* POSIX */
|
||
# define CLOCKS_PER_SEC 60 /* ANSI */
|
||
#elif defined(__GAMATE__)
|
||
# define CLK_TCK 135 /* POSIX */ /* FIXME */
|
||
# define CLOCKS_PER_SEC 135 /* ANSI */ /* FIXME */
|
||
#elif defined(__GEOS__)
|
||
# define CLK_TCK 1 /* POSIX */
|
||
# define CLOCKS_PER_SEC 1 /* ANSI */
|
||
#elif defined(__LYNX__)
|
||
/* The clock-rate depends on the video scan-rate;
|
||
** so, read it at run-time.
|
||
*/
|
||
extern clock_t _clk_tck (void);
|
||
# define CLK_TCK _clk_tck()
|
||
# define CLOCKS_PER_SEC _clk_tck()
|
||
#endif
|
||
|
||
|
||
|
||
time_t _systime (void);
|
||
/* Similar to time(), but:
|
||
** - Is not ISO C
|
||
** - Does not take the additional pointer
|
||
** - Does not set errno when returning -1
|
||
*/
|
||
|
||
/* ISO C function prototypes */
|
||
char* __fastcall__ asctime (const struct tm* timep);
|
||
clock_t clock (void);
|
||
char* __fastcall__ ctime (const time_t* timep);
|
||
struct tm* __fastcall__ gmtime (const time_t* timep);
|
||
struct tm* __fastcall__ localtime (const time_t* timep);
|
||
time_t __fastcall__ mktime (struct tm* timep);
|
||
size_t __fastcall__ strftime (char* buf, size_t bufsize, const char* format, const struct tm* tm);
|
||
time_t __fastcall__ time (time_t* t);
|
||
|
||
|
||
|
||
/* End of time.h */
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* modload.h */
|
||
/* */
|
||
/* o65 module loader interface for cc65 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Exports structures and functions to load relocatable o65 modules at
|
||
** runtime.
|
||
*/
|
||
|
||
|
||
|
||
#ifndef _MODLOAD_H
|
||
#define _MODLOAD_H
|
||
|
||
|
||
|
||
/* The following struct is passed to the module loader. It contains stuff,
|
||
** the loader needs to work, and another area where the loader will place
|
||
** informational data if it was successful. You will have to check the return
|
||
** code of mod_load before accessing any of these additional struct members.
|
||
*/
|
||
struct mod_ctrl {
|
||
/* Parameters passed into the loader routine. The member callerdata
|
||
** is an opaque 16 bit datatype that may be used by the caller to
|
||
** pass data through to the read routine. The read routine is used by the
|
||
** loader to load any required data. There are several calls where the
|
||
** read routine is passed a count of 1, so you may choose to make this
|
||
** a special case when implementing read(). The read() should return the
|
||
** number of bytes actually read. If the return value differs from the
|
||
** passed count, this is considered an error.
|
||
** NOTE: read() is designed so that the POSIX read() routine can be used
|
||
** for this vector, if you're loading from disk.
|
||
*/
|
||
int __fastcall__ (*read) (int callerdata, void* buffer, unsigned count);
|
||
int callerdata;
|
||
|
||
/* Parameters set by the loader routine */
|
||
void* module; /* Pointer to module data */
|
||
unsigned module_size; /* Total size of loaded module */
|
||
unsigned module_id; /* Module id */
|
||
};
|
||
|
||
|
||
|
||
unsigned char __fastcall__ mod_load (struct mod_ctrl* ctrl);
|
||
/* Load a module into memory and relocate it. The function will return an
|
||
** error code (see below). If MLOAD_OK is returned, the outgoing fields in
|
||
** the passed mod_ctrl struct contain information about the module just
|
||
** loaded.
|
||
*/
|
||
|
||
void __fastcall__ mod_free (void* module);
|
||
/* Free a loaded module. Note: The given pointer is the pointer to the
|
||
** module memory, not a pointer to a control structure.
|
||
*/
|
||
|
||
|
||
|
||
/* Errors */
|
||
#define MLOAD_OK 0 /* Module load successful */
|
||
#define MLOAD_ERR_READ 1 /* Read error */
|
||
#define MLOAD_ERR_HDR 2 /* Header error */
|
||
#define MLOAD_ERR_OS 3 /* Wrong OS */
|
||
#define MLOAD_ERR_FMT 4 /* Data format error */
|
||
#define MLOAD_ERR_MEM 5 /* Not enough memory */
|
||
|
||
|
||
|
||
/* End of modload.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* string.h */
|
||
/* */
|
||
/* String handling */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2014, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _STRING_H
|
||
#define _STRING_H
|
||
|
||
|
||
|
||
#include <stddef.h>
|
||
|
||
|
||
|
||
char* __fastcall__ strcat (char* dest, const char* src);
|
||
char* __fastcall__ strchr (const char* s, int c);
|
||
int __fastcall__ strcmp (const char* s1, const char* s2);
|
||
int __fastcall__ strcoll (const char* s1, const char* s2);
|
||
char* __fastcall__ strcpy (char* dest, const char* src);
|
||
size_t __fastcall__ strcspn (const char* s1, const char* s2);
|
||
char* __fastcall__ strerror (int errcode);
|
||
size_t __fastcall__ strlen (const char* s);
|
||
char* __fastcall__ strncat (char* s1, const char* s2, size_t count);
|
||
int __fastcall__ strncmp (const char* s1, const char* s2, size_t count);
|
||
char* __fastcall__ strncpy (char* dest, const char* src, size_t count);
|
||
char* __fastcall__ strrchr (const char* s, int c);
|
||
size_t __fastcall__ strspn (const char* s1, const char* s2);
|
||
char* __fastcall__ strstr (const char* str, const char* substr);
|
||
char* __fastcall__ strtok (char* s1, const char* s2);
|
||
size_t __fastcall__ strxfrm (char* s1, const char* s2, size_t count);
|
||
void* __fastcall__ memchr (const void* mem, int c, size_t count);
|
||
int __fastcall__ memcmp (const void* p1, const void* p2, size_t count);
|
||
void* __fastcall__ memcpy (void* dest, const void* src, size_t count);
|
||
void* __fastcall__ memmove (void* dest, const void* src, size_t count);
|
||
void* __fastcall__ memset (void* s, int c, size_t count);
|
||
|
||
/* The following is an internal function, the compiler will replace memset
|
||
** with it if the fill value is zero. Never use this one directly!
|
||
*/
|
||
void* __fastcall__ _bzero (void* ptr, size_t n);
|
||
|
||
/* Non standard: */
|
||
#if __CC65_STD__ == __CC65_STD_CC65__
|
||
void __fastcall__ bzero (void* ptr, size_t n); /* BSD */
|
||
char* __fastcall__ strdup (const char* s); /* SYSV/BSD */
|
||
int __fastcall__ stricmp (const char* s1, const char* s2); /* DOS/Windows */
|
||
int __fastcall__ strcasecmp (const char* s1, const char* s2); /* Same for Unix */
|
||
int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count); /* DOS/Windows */
|
||
int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count); /* Same for Unix */
|
||
char* __fastcall__ strlwr (char* s);
|
||
char* __fastcall__ strlower (char* s);
|
||
char* __fastcall__ strupr (char* s);
|
||
char* __fastcall__ strupper (char* s);
|
||
char* __fastcall__ strqtok (char* s1, const char* s2);
|
||
#endif
|
||
|
||
const char* __fastcall__ _stroserror (unsigned char errcode);
|
||
/* Map an operating system error number to an error message. */
|
||
|
||
|
||
|
||
/* End of string.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* pce.h */
|
||
/* */
|
||
/* PC-Engine system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2015 Groepaz/Hitmen */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
#ifndef _PCE_H
|
||
#define _PCE_H
|
||
|
||
/* Check for errors */
|
||
#if !defined(__PCE__)
|
||
# error This module may only be used when compiling for the PCE!
|
||
#endif
|
||
|
||
#define CH_HLINE 1
|
||
#define CH_VLINE 2
|
||
#define CH_CROSS 3
|
||
#define CH_ULCORNER 4
|
||
#define CH_URCORNER 5
|
||
#define CH_LLCORNER 6
|
||
#define CH_LRCORNER 7
|
||
#define CH_TTEE 8
|
||
#define CH_BTEE 9
|
||
#define CH_LTEE 10
|
||
#define CH_RTEE 11
|
||
|
||
#define CH_ENTER 13
|
||
#define CH_PI 18
|
||
|
||
/* Color defines (CBM compatible, for conio) */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
#define TV_NTSC 0
|
||
#define TV_PAL 1
|
||
#define TV_OTHER 2
|
||
|
||
/* No support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void pce_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
|
||
#define JOY_FIRE_B 5
|
||
#define JOY_SELECT 6
|
||
#define JOY_RUN 7
|
||
|
||
void waitvblank (void);
|
||
/* Wait for the vertical blanking */
|
||
|
||
/* NOTE: all PCE are NTSC */
|
||
#define get_tv() TV_NTSC
|
||
/* Return the video mode the machine is using. */
|
||
|
||
/* End of pce.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* osic1p.h */
|
||
/* */
|
||
/* Challenger 1P system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2015 Stephan Muehlstrasser */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
#ifndef _OSIC1P_H
|
||
#define _OSIC1P_H
|
||
|
||
/* Check for errors */
|
||
#if !defined(__OSIC1P__)
|
||
# error "This module may only be used when compiling for the Challenger 1P!"
|
||
#endif
|
||
|
||
/* The following #defines will cause the matching functions calls in conio.h
|
||
** to be overlaid by macros with the same names, saving the function call
|
||
** overhead.
|
||
*/
|
||
#define _textcolor(color) COLOR_WHITE
|
||
#define _bgcolor(color) COLOR_BLACK
|
||
#define _bordercolor(color) COLOR_BLACK
|
||
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* cbm610.h */
|
||
/* */
|
||
/* CBM610 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2009, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CBM610_H
|
||
#define _CBM610_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__CBM610__)
|
||
# error This module may only be used when compiling for the CBM 610!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 224
|
||
#define CH_F2 225
|
||
#define CH_F3 226
|
||
#define CH_F4 227
|
||
#define CH_F5 228
|
||
#define CH_F6 229
|
||
#define CH_F7 230
|
||
#define CH_F8 231
|
||
#define CH_F9 232
|
||
#define CH_F10 233
|
||
#define CH_F11 234
|
||
#define CH_F12 235
|
||
#define CH_F13 236
|
||
#define CH_F14 237
|
||
#define CH_F15 238
|
||
#define CH_F16 239
|
||
#define CH_F17 240
|
||
#define CH_F18 241
|
||
#define CH_F19 242
|
||
#define CH_F20 243
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
|
||
/* Define hardware */
|
||
#include <_6545.h>
|
||
#define CRTC (*(struct __6545)0xD800)
|
||
|
||
#include <_sid.h>
|
||
#define SID (*(struct __sid*)0xDA00)
|
||
|
||
#include <_6526.h>
|
||
#define CIA (*(struct __6526*)0xDC00)
|
||
|
||
#include <_6551.h>
|
||
#define ACIA (*(struct __6551*)0xDD00)
|
||
|
||
#include <_6525.h>
|
||
#define TPI1 (*(struct __6525*)0xDE00)
|
||
#define TPI2 (*(struct __6525*)0xDF00)
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void cbm610_ram_emd[];
|
||
extern void cbm610_std_ser[];
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Special routines to read/write bytes and words in the system bank */
|
||
unsigned char __fastcall__ peekbsys (unsigned addr);
|
||
unsigned __fastcall__ peekwsys (unsigned addr);
|
||
void __fastcall__ pokebsys (unsigned addr, unsigned char val);
|
||
void __fastcall__ pokewsys (unsigned addr, unsigned val);
|
||
|
||
#if defined(__OPT_i__) && (__OPT_i__ >= 600)
|
||
#define peekbsys(addr) \
|
||
__AX__ = (addr), \
|
||
__asm__ ("sta ptr1"), \
|
||
__asm__ ("stx ptr1+1"), \
|
||
__asm__ ("ldx $01"), \
|
||
__asm__ ("lda #$0F"), \
|
||
__asm__ ("sta $01"), \
|
||
__asm__ ("ldy #$00"), \
|
||
__asm__ ("lda (ptr1),y"), \
|
||
__asm__ ("stx $01"), \
|
||
__asm__ ("ldx #$00"), \
|
||
__AX__
|
||
#endif
|
||
|
||
|
||
|
||
/* The following #defines will cause the matching functions calls in conio.h
|
||
** to be overlaid by macros with the same names, saving the function call
|
||
** overhead.
|
||
*/
|
||
#define _textcolor(color) COLOR_WHITE
|
||
#define _bgcolor(color) COLOR_BLACK
|
||
#define _bordercolor(color) COLOR_BLACK
|
||
|
||
|
||
|
||
/* End of cbm610.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _vic.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef __VIC_H
|
||
#define __VIC_H
|
||
|
||
|
||
|
||
/* Define a structure with the vic register offsets */
|
||
struct __vic {
|
||
unsigned char leftborder;
|
||
unsigned char upperborder;
|
||
unsigned char charsperline; /* Characters per line */
|
||
unsigned char linecount; /* Number of lines */
|
||
unsigned char rasterline; /* Current raster line */
|
||
unsigned char addr; /* Address of chargen and video ram */
|
||
unsigned char strobe_x; /* Light pen, X position */
|
||
unsigned char strobe_y; /* Light pen, Y position */
|
||
unsigned char analog_x; /* Analog input X */
|
||
unsigned char analog_y; /* Analog input Y */
|
||
unsigned char voice1; /* Sound generator #1 */
|
||
unsigned char voice2; /* Sound generator #2 */
|
||
unsigned char voice3; /* Sound generator #3 */
|
||
unsigned char noise; /* Noise generator */
|
||
unsigned char volume_color; /* Bits 0..3: volume, 4..7: color */
|
||
unsigned char bg_border_color;/* Background and border color */
|
||
};
|
||
|
||
|
||
|
||
/* End of _vic.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* pet.h */
|
||
/* */
|
||
/* PET system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2005 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _PET_H
|
||
#define _PET_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__PET__)
|
||
# error This module may only be used when compiling for the CBM PET!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
|
||
/* Define hardware */
|
||
#include <_pia.h>
|
||
#define PIA1 (*(struct __pia*)0xE810)
|
||
#define PIA2 (*(struct __pia*)0xE820)
|
||
|
||
#include <_6522.h>
|
||
#define VIA (*(struct __6522*)0xE840)
|
||
|
||
/* All models from 40xx and above */
|
||
#include <_6545.h>
|
||
#define CRTC (*(struct __6545)0xE880)
|
||
|
||
/* SuperPET only */
|
||
#include <_6551.h>
|
||
#define ACIA (*(struct __6551*)0xEFF0)
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void pet_ptvjoy_joy[];
|
||
extern void pet_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The following #defines will cause the matching functions calls in conio.h
|
||
** to be overlaid by macros with the same names, saving the function call
|
||
** overhead.
|
||
*/
|
||
#define _textcolor(color) COLOR_WHITE
|
||
#define _bgcolor(color) COLOR_BLACK
|
||
#define _bordercolor(color) COLOR_BLACK
|
||
|
||
|
||
|
||
/* End of pet.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* gamate.h */
|
||
/* */
|
||
/* Gamate system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (w) 2015 Groepaz/Hitmen (groepaz@gmx.net) */
|
||
/* based on technical reference by PeT (mess@utanet.at) */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
#ifndef _GAMATE_H
|
||
#define _GAMATE_H
|
||
|
||
/* Check for errors */
|
||
#if !defined(__GAMATE__)
|
||
# error This module may only be used when compiling for the Gamate!
|
||
#endif
|
||
|
||
#define AUDIO_BASE 0x4000
|
||
|
||
/*
|
||
base clock cpu clock/32 ?
|
||
|
||
0/1: 1. channel(right): 12 bit frequency: right frequency 0 nothing, 1 high;
|
||
3 23khz; 4 17,3; 10 6,9; 15 4.6; $60 720hz; $eff 18,0; $fff 16,9 hz)
|
||
(delay clock/32)
|
||
2/3: 2. channel(left): 12 bit frequency
|
||
4/5: 3. channel(both): 12 bit frequency
|
||
6: 0..5 noise frequency 0 fast 1f slow (about 500us) 15.6ns--> clock/32 counts
|
||
7 control (hinibble right)
|
||
bit 0: right channel high (full cycle, else square pulse/tone)
|
||
bit 1: left channel high
|
||
bit 2: both channel high
|
||
bit 3: set right tone (else noise)
|
||
bit 4: set left channel normal
|
||
bit 5: set both normal
|
||
bits 30: 11 high, 10 square, 01 noise, 00 noise only when square high
|
||
noise means switches channel to ad converter based noise algorithmen
|
||
(white noise shift register 17bit wide, repeats after about 130000 cycles)
|
||
probably out=!bit16, bit0=bit16 xor bit13; runs through, so start value anything than 0
|
||
8: 1st volume: 0..3 square volume; bit 4 envelope (higher priority)
|
||
9: 2nd volume
|
||
10: 3rd volume
|
||
11/12: envelope delay time 0 fast, 0xffff slow/nearly no effect (2 22us, 4 56us)
|
||
frequency $800, envelope $10 2 times in pulse high time (4*16*16)
|
||
13: envelope control
|
||
0-3 one time falling
|
||
4-7 one time rising
|
||
8 falling
|
||
9 one time falling
|
||
a starts with down falling, rising; same falling time, but double/longer cycle
|
||
b one time falling, on
|
||
c rising
|
||
d one time rising, on
|
||
e rising, falling (double cycle before restart)
|
||
f one time rising
|
||
bit 0: once only
|
||
bit 1: full tone
|
||
bit 2: start rising (else falling)
|
||
bit 3:
|
||
*/
|
||
|
||
#define JOY_DATA 0x4400
|
||
|
||
#define JOY_DATA_UP 0x01
|
||
#define JOY_DATA_DOWN 0x02
|
||
#define JOY_DATA_LEFT 0x04
|
||
#define JOY_DATA_RIGHT 0x08
|
||
#define JOY_DATA_FIRE_A 0x10
|
||
#define JOY_DATA_FIRE_B 0x20
|
||
#define JOY_DATA_START 0x40
|
||
#define JOY_DATA_SELECT 0x80
|
||
|
||
/* LCD
|
||
|
||
resolution 160x152 in 4 greys/greens
|
||
2 256x256 sized bitplanes (2x 8kbyte ram)
|
||
*/
|
||
#define LCD_BASE 0x5000
|
||
|
||
#define LCD_MODE 0x5001
|
||
/*
|
||
bit 3..0 (from zeropage 15)
|
||
bit 0 set no normal screen display, seldom scrolling effects on screen;
|
||
bytes written to somewhat actual display refresh position!?
|
||
bytes read "random"
|
||
bit 1,2,3 no effect
|
||
bit 4 swaps plane intensity
|
||
bit 5 ? display effect
|
||
bit 6 on y auto increment (else auto x increment), reading
|
||
bit 7 ? lcd flickering
|
||
*/
|
||
#define LCD_MODE_INC_Y 0x40
|
||
|
||
#define LCD_XPOS 0x5002 /* smooth scrolling X */
|
||
#define LCD_YPOS 0x5003 /* smooth scrolling Y */
|
||
/*
|
||
smooth scrolling until $c8 with 200 limit
|
||
after 200 display if ((value & 0xf) < 8) display of (value & 0xf) - 8
|
||
chaos lines from value + current line from plane 2 only then lines starting
|
||
with zero (problematic 200 limit/overrun implementation!?)
|
||
*/
|
||
#define LCD_X 0x5004 /* x-addr */
|
||
/*
|
||
bit 5,6 no effect
|
||
bit 7 0 1st/1 2nd bitplane
|
||
*/
|
||
#define LCD_XPOS_PLANE1 0x00
|
||
#define LCD_XPOS_PLANE2 0x80
|
||
|
||
#define LCD_Y 0x5005 /* y-addr */
|
||
|
||
#define LCD_READ 0x5006 /* read from RAM (no auto inc?) */
|
||
#define LCD_DATA 0x5007 /* write to RAM */
|
||
|
||
/* BIOS zeropage usage */
|
||
|
||
/* locations 0x0a-0x0c, 0x0e-0x11 and 0xe8 are in use by the BIOS IRQ/NMI handlers */
|
||
#define ZP_NMI_4800 0x0a /* content of I/O reg 4800 gets copied here each NMI */
|
||
|
||
#define ZP_IRQ_COUNT 0x0b /* increments once per IRQ, used elsewhere in the
|
||
BIOS for synchronisation purposes */
|
||
#define ZP_IRQ_CTRL 0x0c /* if 0 then cartridge irq stubs will not get called */
|
||
|
||
/* each of the following 4 increments by 1 per IRQ - it is _not_ a 32bit
|
||
counter (see code at $ffa6 in BIOS)
|
||
these are not used elsewhere in the bios and can be (re)set as needed by
|
||
the user.
|
||
*/
|
||
#define ZP_IRQ_CNT1 0x0e
|
||
#define ZP_IRQ_CNT2 0x0f
|
||
#define ZP_IRQ_CNT3 0x10
|
||
#define ZP_IRQ_CNT4 0x11
|
||
|
||
#define ZP_NMI_FLAG 0xe8 /* set to 0xff each NMI */
|
||
|
||
/* constants for the conio implementation */
|
||
#define COLOR_BLACK 0x03
|
||
#define COLOR_WHITE 0x00
|
||
|
||
#define CH_HLINE 1
|
||
#define CH_VLINE 2
|
||
#define CH_CROSS 3
|
||
#define CH_ULCORNER 4
|
||
#define CH_URCORNER 5
|
||
#define CH_LLCORNER 6
|
||
#define CH_LRCORNER 7
|
||
#define CH_TTEE 8
|
||
#define CH_BTEE 9
|
||
|
||
#define CH_RTEE 11
|
||
#define CH_LTEE 12
|
||
|
||
#define CH_ENTER 13
|
||
#define CH_PI 18
|
||
|
||
#define TV_NTSC 0
|
||
#define TV_PAL 1
|
||
#define TV_OTHER 2
|
||
|
||
/* No support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void gamate_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
|
||
#define JOY_FIRE_B 5
|
||
#define JOY_START 6
|
||
#define JOY_SELECT 7
|
||
|
||
void waitvblank (void);
|
||
/* Wait for the vertical blanking */
|
||
|
||
/* NOTE: all Gamate are "NTSC" */
|
||
#define get_tv() TV_NTSC
|
||
/* Return the video mode the machine is using. */
|
||
|
||
/* End of gamate.h */
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* _antic.h */
|
||
/* */
|
||
/* Internal include file, do not use directly */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com> */
|
||
/* 24-Jan-2011: Christian Krueger: Added defines for Antic instruction set */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
#ifndef __ANTIC_H
|
||
#define __ANTIC_H
|
||
|
||
/* Define a structure with the antic register offsets */
|
||
struct __antic {
|
||
unsigned char dmactl; /* direct memory access control */
|
||
unsigned char chactl; /* character mode control */
|
||
unsigned char dlistl; /* display list pointer low-byte */
|
||
unsigned char dlisth; /* display list pointer high-byte */
|
||
unsigned char hscrol; /* horizontal scroll enable */
|
||
unsigned char vscrol; /* vertical scroll enable */
|
||
unsigned char unuse0; /* unused */
|
||
unsigned char pmbase; /* msb of p/m base address */
|
||
unsigned char unuse1; /* unused */
|
||
unsigned char chbase; /* character base address */
|
||
unsigned char wsync; /* wait for horizontal synchronization */
|
||
unsigned char vcount; /* vertical line counter */
|
||
unsigned char penh; /* light pen horizontal position */
|
||
unsigned char penv; /* light pen vertical position */
|
||
unsigned char nmien; /* non-maskable interrupt enable */
|
||
unsigned char nmires; /* nmi reset/status */
|
||
};
|
||
|
||
|
||
/* antic instruction set */
|
||
|
||
/* absolute instructions (non mode lines) */
|
||
#define DL_JMP 1
|
||
#define DL_JVB 65
|
||
|
||
#define DL_BLK1 0
|
||
#define DL_BLK2 16
|
||
#define DL_BLK3 32
|
||
#define DL_BLK4 48
|
||
#define DL_BLK5 64
|
||
#define DL_BLK6 80
|
||
#define DL_BLK7 96
|
||
#define DL_BLK8 112
|
||
|
||
/* absolute instructions (mode lines) */
|
||
#define DL_CHR40x8x1 2 /* monochrome, 40 character & 8 scanlines per mode line (GR. 0) */
|
||
#define DL_CHR40x10x1 3 /* monochrome, 40 character & 10 scanlines per mode line */
|
||
#define DL_CHR40x8x4 4 /* colour, 40 character & 8 scanlines per mode line (GR. 12) */
|
||
#define DL_CHR40x16x4 5 /* colour, 40 character & 16 scanlines per mode line (GR. 13) */
|
||
#define DL_CHR20x8x2 6 /* colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1) */
|
||
#define DL_CHR20x16x2 7 /* colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2) */
|
||
|
||
#define DL_MAP40x8x4 8 /* colour, 40 pixel & 8 scanlines per mode line (GR. 3) */
|
||
#define DL_MAP80x4x2 9 /* 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) */
|
||
#define DL_MAP80x4x4 10 /* colour, 80 pixel & 4 scanlines per mode line (GR.5) */
|
||
#define DL_MAP160x2x2 11 /* 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) */
|
||
#define DL_MAP160x1x2 12 /* 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) */
|
||
#define DL_MAP160x2x4 13 /* 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) */
|
||
#define DL_MAP160x1x4 14 /* 4 colours, 160 pixel & 1 scanline per mode line (GR.15) */
|
||
#define DL_MAP320x1x1 15 /* monochrome, 320 pixel & 1 scanline per mode line (GR.8) */
|
||
|
||
/* modifiers on mode lines */
|
||
#define DL_HSCROL 16
|
||
#define DL_VSCROL 32
|
||
#define DL_LMS 64
|
||
|
||
/* general modifier */
|
||
#define DL_DLI 128
|
||
|
||
/* End of _antic.h */
|
||
#endif /* #ifndef __ANTIC_H */
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* atari5200.h */
|
||
/* */
|
||
/* Atari 5200 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2014 Christian Groessler <chris@groessler.org> */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _ATARI5200_H
|
||
#define _ATARI5200_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__ATARI5200__)
|
||
# error This module may only be used when compiling for the Atari 5200!
|
||
#endif
|
||
|
||
/* no support for dynamically loadable drivers */
|
||
#define DYN_DRV 0
|
||
|
||
/* the addresses of the static drivers */
|
||
extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */
|
||
|
||
/* make GTIA color value */
|
||
#define _gtia_mkcolor(hue,lum) (((hue) << 4) | ((lum) << 1))
|
||
|
||
/* luminance values go from 0 (black) to 7 (white) */
|
||
|
||
/* hue values */
|
||
#define HUE_GREY 0
|
||
#define HUE_GOLD 1
|
||
#define HUE_GOLDORANGE 2
|
||
#define HUE_REDORANGE 3
|
||
#define HUE_ORANGE 4
|
||
#define HUE_MAGENTA 5
|
||
#define HUE_PURPLE 6
|
||
#define HUE_BLUE 7
|
||
#define HUE_BLUE2 8
|
||
#define HUE_CYAN 9
|
||
#define HUE_BLUEGREEN 10
|
||
#define HUE_BLUEGREEN2 11
|
||
#define HUE_GREEN 12
|
||
#define HUE_YELLOWGREEN 13
|
||
#define HUE_YELLOW 14
|
||
#define HUE_YELLOWRED 15
|
||
|
||
/* Color defines, similar to c64 colors (untested) */
|
||
#define COLOR_BLACK _gtia_mkcolor(HUE_GREY,0)
|
||
#define COLOR_WHITE _gtia_mkcolor(HUE_GREY,7)
|
||
#define COLOR_RED _gtia_mkcolor(HUE_REDORANGE,1)
|
||
#define COLOR_CYAN _gtia_mkcolor(HUE_CYAN,3)
|
||
#define COLOR_VIOLET _gtia_mkcolor(HUE_PURPLE,4)
|
||
#define COLOR_GREEN _gtia_mkcolor(HUE_GREEN,2)
|
||
#define COLOR_BLUE _gtia_mkcolor(HUE_BLUE,2)
|
||
#define COLOR_YELLOW _gtia_mkcolor(HUE_YELLOW,7)
|
||
#define COLOR_ORANGE _gtia_mkcolor(HUE_ORANGE,5)
|
||
#define COLOR_BROWN _gtia_mkcolor(HUE_YELLOW,2)
|
||
#define COLOR_LIGHTRED _gtia_mkcolor(HUE_REDORANGE,6)
|
||
#define COLOR_GRAY1 _gtia_mkcolor(HUE_GREY,2)
|
||
#define COLOR_GRAY2 _gtia_mkcolor(HUE_GREY,3)
|
||
#define COLOR_LIGHTGREEN _gtia_mkcolor(HUE_GREEN,6)
|
||
#define COLOR_LIGHTBLUE _gtia_mkcolor(HUE_BLUE,6)
|
||
#define COLOR_GRAY3 _gtia_mkcolor(HUE_GREY,5)
|
||
|
||
/* get_tv return values */
|
||
#define AT_NTSC 0
|
||
#define AT_PAL 1
|
||
|
||
/* Define hardware */
|
||
#include <_gtia.h>
|
||
#define GTIA_READ (*(struct __gtia_read*)0xC000)
|
||
#define GTIA_WRITE (*(struct __gtia_write*)0xC000)
|
||
|
||
#include <_pokey.h>
|
||
#define POKEY_READ (*(struct __pokey_read*)0xE800)
|
||
#define POKEY_WRITE (*(struct __pokey_write*)0xE800)
|
||
|
||
#include <_antic.h>
|
||
#define ANTIC (*(struct __antic*)0xD400)
|
||
|
||
/* End of atari5200.h */
|
||
#endif /* #ifndef _ATARI5200_H */
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* c16.h */
|
||
/* */
|
||
/* C16 system specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002 Ullrich von Bassewitz */
|
||
/* Wacholderweg 14 */
|
||
/* D-70597 Stuttgart */
|
||
/* EMail: uz@musoftware.de */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _C16_H
|
||
#define _C16_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__C16__)
|
||
# error This module may only be used when compiling for the C16!
|
||
#endif
|
||
|
||
|
||
|
||
/* Include the base header file for the 264 series. include file.
|
||
*/
|
||
#ifndef _CBM264_H
|
||
#include <cbm264.h>
|
||
#endif
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void c16_ram_emd[];
|
||
extern void c16_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
|
||
|
||
|
||
/* End of c16.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* c64.h */
|
||
/* */
|
||
/* C64 system-specific definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 1998-2013 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _C64_H
|
||
#define _C64_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__C64__)
|
||
# error This module may only be used when compiling for the C64!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 133
|
||
#define CH_F2 137
|
||
#define CH_F3 134
|
||
#define CH_F4 138
|
||
#define CH_F5 135
|
||
#define CH_F6 139
|
||
#define CH_F7 136
|
||
#define CH_F8 140
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_PURPLE COLOR_VIOLET
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
/* TGI color defines */
|
||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||
#define TGI_COLOR_RED COLOR_RED
|
||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||
#define TGI_COLOR_PURPLE COLOR_PURPLE
|
||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||
#define TGI_COLOR_ORANGE COLOR_ORANGE
|
||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||
#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED
|
||
#define TGI_COLOR_GRAY1 COLOR_GRAY1
|
||
#define TGI_COLOR_GRAY2 COLOR_GRAY2
|
||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||
#define TGI_COLOR_GRAY3 COLOR_GRAY3
|
||
|
||
/* Define hardware */
|
||
#include <_vic2.h>
|
||
#define VIC (*(struct __vic2*)0xD000)
|
||
|
||
#include <_sid.h>
|
||
#define SID (*(struct __sid*)0xD400)
|
||
|
||
#include <_6526.h>
|
||
#define CIA1 (*(struct __6526*)0xDC00)
|
||
#define CIA2 (*(struct __6526*)0xDD00)
|
||
|
||
/* Define special memory areas */
|
||
#define COLOR_RAM ((unsigned char*)0xD800)
|
||
|
||
/* Return codes for get_ostype */
|
||
#define C64_OS_US 0xAA /* US version */
|
||
#define C64_OS_PET64 0x64 /* PET 64 */
|
||
#define C64_OS_SX64 0x43 /* SX-64 */
|
||
#define C64_EU_NEW 0x03
|
||
#define C64_EU_OLD 0x00
|
||
#define C64_DTV 0xFF /* C64 DTV */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void c64_c256k_emd[];
|
||
extern void c64_dqbb_emd[];
|
||
extern void c64_georam_emd[];
|
||
extern void c64_isepic_emd[];
|
||
extern void c64_ram_emd[];
|
||
extern void c64_ramcart_emd[];
|
||
extern void c64_reu_emd[];
|
||
extern void c64_vdc_emd[];
|
||
extern void dtv_himem_emd[];
|
||
extern void c64_hitjoy_joy[];
|
||
extern void c64_numpad_joy[];
|
||
extern void c64_ptvjoy_joy[];
|
||
extern void c64_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void c64_1351_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||
extern void c64_joy_mou[];
|
||
extern void c64_inkwell_mou[];
|
||
extern void c64_pot_mou[];
|
||
extern void c64_swlink_ser[];
|
||
extern void c64_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
unsigned char get_ostype (void);
|
||
/* Get the ROM version. Returns one of the C64_OS_xxx codes. */
|
||
|
||
|
||
|
||
/* End of c64.h */
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* tgi.h */
|
||
/* */
|
||
/* Tiny graphics interface */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2013, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TGI_H
|
||
#define _TGI_H
|
||
|
||
|
||
|
||
#ifndef _TGI_ERROR_H
|
||
#include <tgi/tgi-error.h>
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Definitions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Font constants for use with tgi_settextstyle */
|
||
#define TGI_FONT_BITMAP 0
|
||
#define TGI_FONT_VECTOR 1
|
||
|
||
/* Direction constants for use with tgi_settextstyle */
|
||
#define TGI_TEXT_HORIZONTAL 0
|
||
#define TGI_TEXT_VERTICAL 1
|
||
|
||
/* The name of the standard tgi driver for a platform */
|
||
extern const char tgi_stddrv[];
|
||
|
||
/* The address of the static standard tgi driver for a platform */
|
||
extern const void tgi_static_stddrv[];
|
||
|
||
/* A vector font definition */
|
||
typedef struct tgi_vectorfont tgi_vectorfont;
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Functions */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ tgi_load_driver (const char* name);
|
||
/* Load and install the given driver. */
|
||
|
||
void tgi_unload (void);
|
||
/* Uninstall, then unload the currently loaded driver. Will call tgi_done if
|
||
** necessary.
|
||
*/
|
||
|
||
void __fastcall__ tgi_install (void* driver);
|
||
/* Install an already loaded driver. */
|
||
|
||
void tgi_uninstall (void);
|
||
/* Uninstall the currently loaded driver but do not unload it. Will call
|
||
** tgi_done if necessary.
|
||
*/
|
||
|
||
void tgi_init (void);
|
||
/* Initialize the already loaded graphics driver. */
|
||
|
||
void tgi_done (void);
|
||
/* End graphics mode, switch back to text mode. Will NOT uninstall or unload
|
||
** the driver!
|
||
*/
|
||
|
||
const tgi_vectorfont* __fastcall__ tgi_load_vectorfont (const char* name);
|
||
/* Load a vector font into memory and return it. In case of errors, NULL is
|
||
** returned and an error is set, which can be retrieved using tgi_geterror.
|
||
** To use the font, it has to be installed using tgi_install_vectorfont.
|
||
*/
|
||
|
||
void __fastcall__ tgi_install_vectorfont (const tgi_vectorfont* font);
|
||
/* Install a vector font for use. More than one vector font can be loaded,
|
||
** but only one can be active. This function is used to tell which one. Call
|
||
** with a NULL pointer to uninstall the currently installed font.
|
||
*/
|
||
|
||
void __fastcall__ tgi_free_vectorfont (const tgi_vectorfont* font);
|
||
/* Free a vector font that was previously loaded into memory. */
|
||
|
||
unsigned char tgi_geterror (void);
|
||
/* Return the error code for the last operation. This will also clear the
|
||
** error.
|
||
*/
|
||
|
||
const char* __fastcall__ tgi_geterrormsg (unsigned char code);
|
||
/* Get an error message describing the error in code. */
|
||
|
||
void tgi_clear (void);
|
||
/* Clear the drawpage. */
|
||
|
||
unsigned tgi_getpagecount (void);
|
||
/* Returns the number of screen pages available. */
|
||
|
||
void __fastcall__ tgi_setviewpage (unsigned char page);
|
||
/* Set the visible page. Will set an error if the page is not available. */
|
||
|
||
void __fastcall__ tgi_setdrawpage (unsigned char page);
|
||
/* Set the drawable page. Will set an error if the page is not available. */
|
||
|
||
unsigned char tgi_getcolorcount (void);
|
||
/* Get the number of available colors. */
|
||
|
||
unsigned char tgi_getmaxcolor (void);
|
||
/* Return the maximum supported color number (the number of colors would
|
||
** then be getmaxcolor()+1).
|
||
*/
|
||
|
||
void __fastcall__ tgi_setcolor (unsigned char color);
|
||
/* Set the current drawing color. */
|
||
|
||
unsigned char tgi_getcolor (void);
|
||
/* Return the current drawing color. */
|
||
|
||
void __fastcall__ tgi_setpalette (const unsigned char* palette);
|
||
/* Set the palette (not available with all drivers/hardware). palette is
|
||
** a pointer to as many entries as there are colors.
|
||
*/
|
||
|
||
const unsigned char* tgi_getpalette (void);
|
||
/* Return the current palette. */
|
||
|
||
const unsigned char* tgi_getdefpalette (void);
|
||
/* Return the default palette. */
|
||
|
||
unsigned tgi_getxres (void);
|
||
/* Return the resolution in X direction. */
|
||
|
||
unsigned tgi_getmaxx (void);
|
||
/* Return the maximum x coordinate. The resolution in x direction is
|
||
** getmaxx() + 1
|
||
*/
|
||
|
||
unsigned tgi_getyres (void);
|
||
/* Return the resolution in Y direction. */
|
||
|
||
unsigned tgi_getmaxy (void);
|
||
/* Return the maximum y coordinate. The resolution in y direction is
|
||
** getmaxy() + 1
|
||
*/
|
||
|
||
unsigned tgi_getaspectratio (void);
|
||
/* Returns the aspect ratio for the loaded driver. The aspect ratio is an
|
||
** 8.8 fixed point value.
|
||
*/
|
||
|
||
void __fastcall__ tgi_setaspectratio (unsigned aspectratio);
|
||
/* Set a new aspect ratio for the loaded driver. The aspect ratio is an
|
||
** 8.8 fixed point value.
|
||
*/
|
||
|
||
unsigned char __fastcall__ tgi_getpixel (int x, int y);
|
||
/* Get the color value of a pixel. */
|
||
|
||
void __fastcall__ tgi_setpixel (int x, int y);
|
||
/* Plot a pixel in the current drawing color. */
|
||
|
||
void __fastcall__ tgi_gotoxy (int x, int y);
|
||
/* Set the graphics cursor to the given position. */
|
||
|
||
void __fastcall__ tgi_line (int x1, int y1, int x2, int y2);
|
||
/* Draw a line in the current drawing color. The graphics cursor will
|
||
** be set to x2/y2 by this call.
|
||
*/
|
||
|
||
void __fastcall__ tgi_lineto (int x2, int y2);
|
||
/* Draw a line in the current drawing color from the graphics cursor to the
|
||
** new end point. The graphics cursor will be updated to x2/y2.
|
||
*/
|
||
|
||
void __fastcall__ tgi_circle (int x, int y, unsigned char radius);
|
||
/* Draw a circle in the current drawing color. */
|
||
|
||
void __fastcall__ tgi_ellipse (int x, int y, unsigned char rx, unsigned char ry);
|
||
/* Draw a full ellipse with center at x/y and radii rx/ry using the current
|
||
** drawing color.
|
||
*/
|
||
|
||
void __fastcall__ tgi_arc (int x, int y, unsigned char rx, unsigned char ry,
|
||
unsigned sa, unsigned ea);
|
||
/* Draw an ellipse arc with center at x/y and radii rx/ry using the current
|
||
** drawing color. The arc covers the angle between sa and ea (startangle and
|
||
** endangle), which must be in the range 0..360 (otherwise the function may
|
||
** bevave unextectedly).
|
||
*/
|
||
|
||
void __fastcall__ tgi_pieslice (int x, int y, unsigned char rx, unsigned char ry,
|
||
unsigned sa, unsigned ea);
|
||
/* Draw an ellipse pie slice with center at x/y and radii rx/ry using the
|
||
** current drawing color. The pie slice covers the angle between sa and ea
|
||
** (startangle and endangle), which must be in the range 0..360 (otherwise the
|
||
** function may behave unextectedly).
|
||
*/
|
||
|
||
void __fastcall__ tgi_bar (int x1, int y1, int x2, int y2);
|
||
/* Draw a bar (a filled rectangle) using the current color. */
|
||
|
||
void __fastcall__ tgi_settextdir (unsigned char dir);
|
||
/* Set the direction for text output. dir is one of the TGI_TEXT_XXX
|
||
** constants.
|
||
*/
|
||
|
||
void __fastcall__ tgi_settextscale (unsigned width, unsigned height);
|
||
/* Set the scaling for text output. The scaling factors for width and height
|
||
** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
|
||
*/
|
||
|
||
void __fastcall__ tgi_settextstyle (unsigned width, unsigned height,
|
||
unsigned char dir, unsigned char font);
|
||
/* Set the style for text output. The scaling factors for width and height
|
||
** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
|
||
** dir is one of the TGI_TEXT_XXX constants. font is one of the TGI_FONT_XXX
|
||
** constants.
|
||
*/
|
||
|
||
unsigned __fastcall__ tgi_gettextwidth (const char* s);
|
||
/* Calculate the width of the text in pixels according to the current text
|
||
** style.
|
||
*/
|
||
|
||
unsigned __fastcall__ tgi_gettextheight (const char* s);
|
||
/* Calculate the height of the text in pixels according to the current text
|
||
** style.
|
||
*/
|
||
|
||
void __fastcall__ tgi_outtext (const char* s);
|
||
/* Output text at the current graphics cursor position. The graphics cursor
|
||
** is moved to the end of the text.
|
||
*/
|
||
|
||
void __fastcall__ tgi_outtextxy (int x, int y, const char* s);
|
||
/* Output text at the given cursor position. The graphics cursor is moved to
|
||
** the end of the text.
|
||
*/
|
||
|
||
unsigned __fastcall__ tgi_ioctl (unsigned char code, void* data);
|
||
/* Call the driver specific control function. What this function does for
|
||
** a specific code depends on the driver. The driver will set an error
|
||
** for unknown codes or values.
|
||
*/
|
||
|
||
int __fastcall__ tgi_imulround (int rhs, int lhs);
|
||
/* Helper function for functions using sine/cosine: Multiply two values, one
|
||
** being an 8.8 fixed point one, and return the rounded and scaled result.
|
||
*/
|
||
|
||
|
||
|
||
/* End of tgi.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* cbm510.h */
|
||
/* */
|
||
/* System-specific definitions for the CBM5x0 / P500 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2001-2013, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _CBM510_H
|
||
#define _CBM510_H
|
||
|
||
|
||
|
||
/* Check for errors */
|
||
#if !defined(__CBM510__)
|
||
# error This module may only be used when compiling for the CBM 510!
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Additional key defines */
|
||
#define CH_F1 224
|
||
#define CH_F2 225
|
||
#define CH_F3 226
|
||
#define CH_F4 227
|
||
#define CH_F5 228
|
||
#define CH_F6 229
|
||
#define CH_F7 230
|
||
#define CH_F8 231
|
||
#define CH_F9 232
|
||
#define CH_F10 233
|
||
#define CH_F11 234
|
||
#define CH_F12 235
|
||
#define CH_F13 236
|
||
#define CH_F14 237
|
||
#define CH_F15 238
|
||
#define CH_F16 239
|
||
#define CH_F17 240
|
||
#define CH_F18 241
|
||
#define CH_F19 242
|
||
#define CH_F20 243
|
||
|
||
/* Color defines */
|
||
#define COLOR_BLACK 0x00
|
||
#define COLOR_WHITE 0x01
|
||
#define COLOR_RED 0x02
|
||
#define COLOR_CYAN 0x03
|
||
#define COLOR_VIOLET 0x04
|
||
#define COLOR_PURPLE COLOR_VIOLET
|
||
#define COLOR_GREEN 0x05
|
||
#define COLOR_BLUE 0x06
|
||
#define COLOR_YELLOW 0x07
|
||
#define COLOR_ORANGE 0x08
|
||
#define COLOR_BROWN 0x09
|
||
#define COLOR_LIGHTRED 0x0A
|
||
#define COLOR_GRAY1 0x0B
|
||
#define COLOR_GRAY2 0x0C
|
||
#define COLOR_LIGHTGREEN 0x0D
|
||
#define COLOR_LIGHTBLUE 0x0E
|
||
#define COLOR_GRAY3 0x0F
|
||
|
||
/* Define hardware */
|
||
#include <_vic2.h>
|
||
#define VIC (*(struct __vic2*)0xD800)
|
||
|
||
#include <_sid.h>
|
||
#define SID (*(struct __sid*)0xDA00)
|
||
|
||
#include <_6526.h>
|
||
#define CIA2 (*(struct __6526*)0xDC00)
|
||
|
||
#include <_6551.h>
|
||
#define ACIA (*(struct __6551*)0xDD00)
|
||
|
||
#include <_6525.h>
|
||
#define TPI1 (*(struct __6525*)0xDE00)
|
||
#define TPI2 (*(struct __6525*)0xDF00)
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Variables */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* The addresses of the static drivers */
|
||
extern void cbm510_inkwl_mou[];
|
||
extern void cbm510_joy_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||
extern void cbm510_ram_emd[];
|
||
extern void cbm510_std_joy[]; /* Referred to by joy_static_stddrv[] */
|
||
extern void cbm510_std_ser[];
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Special routines to read/write bytes and words in the system bank */
|
||
unsigned char __fastcall__ peekbsys (unsigned addr);
|
||
unsigned __fastcall__ peekwsys (unsigned addr);
|
||
void __fastcall__ pokebsys (unsigned addr, unsigned char val);
|
||
void __fastcall__ pokewsys (unsigned addr, unsigned val);
|
||
|
||
#if defined(__OPT_i__) && (__OPT_i__ >= 600)
|
||
#define peekbsys(addr) \
|
||
__AX__ = (addr), \
|
||
__asm__ ("sta ptr1"), \
|
||
__asm__ ("stx ptr1+1"), \
|
||
__asm__ ("ldx $01"), \
|
||
__asm__ ("lda #$0F"), \
|
||
__asm__ ("sta $01"), \
|
||
__asm__ ("ldy #$00"), \
|
||
__asm__ ("lda (ptr1),y"), \
|
||
__asm__ ("stx $01"), \
|
||
__asm__ ("ldx #$00"), \
|
||
__AX__
|
||
#endif
|
||
|
||
|
||
|
||
/* End of cbm510.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* atari_atascii_charmap.h */
|
||
/* */
|
||
/* Atari system standard string mapping (ISO-8859-1 -> AtASCII) */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2016 Christian Krueger */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
/* No include guard here! Multiple use in one file may be intentional. */
|
||
|
||
#pragma charmap (0x00, 0x00)
|
||
#pragma charmap (0x01, 0x01)
|
||
#pragma charmap (0x02, 0x02)
|
||
#pragma charmap (0x03, 0x03)
|
||
#pragma charmap (0x04, 0x04)
|
||
#pragma charmap (0x05, 0x05)
|
||
#pragma charmap (0x06, 0x06)
|
||
#pragma charmap (0x07, 0xFD)
|
||
#pragma charmap (0x08, 0x08)
|
||
#pragma charmap (0x09, 0x7F)
|
||
#pragma charmap (0x0A, 0x9B)
|
||
#pragma charmap (0x0B, 0x0B)
|
||
#pragma charmap (0x0C, 0x7D)
|
||
#pragma charmap (0x0D, 0x0D)
|
||
#pragma charmap (0x0E, 0x0E)
|
||
#pragma charmap (0x0F, 0x0F)
|
||
|
||
#pragma charmap (0x10, 0x10)
|
||
#pragma charmap (0x11, 0x11)
|
||
#pragma charmap (0x12, 0x12)
|
||
#pragma charmap (0x13, 0x13)
|
||
#pragma charmap (0x14, 0x14)
|
||
#pragma charmap (0x15, 0x15)
|
||
#pragma charmap (0x16, 0x16)
|
||
#pragma charmap (0x17, 0x17)
|
||
#pragma charmap (0x18, 0x18)
|
||
#pragma charmap (0x19, 0x19)
|
||
#pragma charmap (0x1A, 0x1A)
|
||
#pragma charmap (0x1B, 0x1B)
|
||
#pragma charmap (0x1C, 0x1C)
|
||
#pragma charmap (0x1D, 0x1D)
|
||
#pragma charmap (0x1E, 0x1E)
|
||
#pragma charmap (0x1F, 0x1F)
|
||
|
||
#pragma charmap (0x20, 0x20)
|
||
#pragma charmap (0x21, 0x21)
|
||
#pragma charmap (0x22, 0x22)
|
||
#pragma charmap (0x23, 0x23)
|
||
#pragma charmap (0x24, 0x24)
|
||
#pragma charmap (0x25, 0x25)
|
||
#pragma charmap (0x26, 0x26)
|
||
#pragma charmap (0x27, 0x27)
|
||
#pragma charmap (0x28, 0x28)
|
||
#pragma charmap (0x29, 0x29)
|
||
#pragma charmap (0x2A, 0x2A)
|
||
#pragma charmap (0x2B, 0x2B)
|
||
#pragma charmap (0x2C, 0x2C)
|
||
#pragma charmap (0x2D, 0x2D)
|
||
#pragma charmap (0x2E, 0x2E)
|
||
#pragma charmap (0x2F, 0x2F)
|
||
|
||
#pragma charmap (0x30, 0x30)
|
||
#pragma charmap (0x31, 0x31)
|
||
#pragma charmap (0x32, 0x32)
|
||
#pragma charmap (0x33, 0x33)
|
||
#pragma charmap (0x34, 0x34)
|
||
#pragma charmap (0x35, 0x35)
|
||
#pragma charmap (0x36, 0x36)
|
||
#pragma charmap (0x37, 0x37)
|
||
#pragma charmap (0x38, 0x38)
|
||
#pragma charmap (0x39, 0x39)
|
||
#pragma charmap (0x3A, 0x3A)
|
||
#pragma charmap (0x3B, 0x3B)
|
||
#pragma charmap (0x3C, 0x3C)
|
||
#pragma charmap (0x3D, 0x3D)
|
||
#pragma charmap (0x3E, 0x3E)
|
||
#pragma charmap (0x3F, 0x3F)
|
||
|
||
#pragma charmap (0x40, 0x40)
|
||
#pragma charmap (0x41, 0x41)
|
||
#pragma charmap (0x42, 0x42)
|
||
#pragma charmap (0x43, 0x43)
|
||
#pragma charmap (0x44, 0x44)
|
||
#pragma charmap (0x45, 0x45)
|
||
#pragma charmap (0x46, 0x46)
|
||
#pragma charmap (0x47, 0x47)
|
||
#pragma charmap (0x48, 0x48)
|
||
#pragma charmap (0x49, 0x49)
|
||
#pragma charmap (0x4A, 0x4A)
|
||
#pragma charmap (0x4B, 0x4B)
|
||
#pragma charmap (0x4C, 0x4C)
|
||
#pragma charmap (0x4D, 0x4D)
|
||
#pragma charmap (0x4E, 0x4E)
|
||
#pragma charmap (0x4F, 0x4F)
|
||
|
||
#pragma charmap (0x50, 0x50)
|
||
#pragma charmap (0x51, 0x51)
|
||
#pragma charmap (0x52, 0x52)
|
||
#pragma charmap (0x53, 0x53)
|
||
#pragma charmap (0x54, 0x54)
|
||
#pragma charmap (0x55, 0x55)
|
||
#pragma charmap (0x56, 0x56)
|
||
#pragma charmap (0x57, 0x57)
|
||
#pragma charmap (0x58, 0x58)
|
||
#pragma charmap (0x59, 0x59)
|
||
#pragma charmap (0x5A, 0x5A)
|
||
#pragma charmap (0x5B, 0x5B)
|
||
#pragma charmap (0x5C, 0x5C)
|
||
#pragma charmap (0x5D, 0x5D)
|
||
#pragma charmap (0x5E, 0x5E)
|
||
#pragma charmap (0x5F, 0x5F)
|
||
|
||
#pragma charmap (0x60, 0x60)
|
||
#pragma charmap (0x61, 0x61)
|
||
#pragma charmap (0x62, 0x62)
|
||
#pragma charmap (0x63, 0x63)
|
||
#pragma charmap (0x64, 0x64)
|
||
#pragma charmap (0x65, 0x65)
|
||
#pragma charmap (0x66, 0x66)
|
||
#pragma charmap (0x67, 0x67)
|
||
#pragma charmap (0x68, 0x68)
|
||
#pragma charmap (0x69, 0x69)
|
||
#pragma charmap (0x6A, 0x6A)
|
||
#pragma charmap (0x6B, 0x6B)
|
||
#pragma charmap (0x6C, 0x6C)
|
||
#pragma charmap (0x6D, 0x6D)
|
||
#pragma charmap (0x6E, 0x6E)
|
||
#pragma charmap (0x6F, 0x6F)
|
||
|
||
#pragma charmap (0x70, 0x70)
|
||
#pragma charmap (0x71, 0x71)
|
||
#pragma charmap (0x72, 0x72)
|
||
#pragma charmap (0x73, 0x73)
|
||
#pragma charmap (0x74, 0x74)
|
||
#pragma charmap (0x75, 0x75)
|
||
#pragma charmap (0x76, 0x76)
|
||
#pragma charmap (0x77, 0x77)
|
||
#pragma charmap (0x78, 0x78)
|
||
#pragma charmap (0x79, 0x79)
|
||
#pragma charmap (0x7A, 0x7A)
|
||
#pragma charmap (0x7B, 0x7B)
|
||
#pragma charmap (0x7C, 0x7C)
|
||
#pragma charmap (0x7D, 0x7D)
|
||
#pragma charmap (0x7E, 0x7E)
|
||
#pragma charmap (0x7F, 0x7F)
|
||
|
||
#pragma charmap (0x80, 0x80)
|
||
#pragma charmap (0x81, 0x81)
|
||
#pragma charmap (0x82, 0x82)
|
||
#pragma charmap (0x83, 0x83)
|
||
#pragma charmap (0x84, 0x84)
|
||
#pragma charmap (0x85, 0x85)
|
||
#pragma charmap (0x86, 0x86)
|
||
#pragma charmap (0x87, 0x87)
|
||
#pragma charmap (0x88, 0x88)
|
||
#pragma charmap (0x89, 0x89)
|
||
#pragma charmap (0x8A, 0x8A)
|
||
#pragma charmap (0x8B, 0x8B)
|
||
#pragma charmap (0x8C, 0x8C)
|
||
#pragma charmap (0x8D, 0x8D)
|
||
#pragma charmap (0x8E, 0x8E)
|
||
#pragma charmap (0x8F, 0x8F)
|
||
|
||
#pragma charmap (0x90, 0x90)
|
||
#pragma charmap (0x91, 0x91)
|
||
#pragma charmap (0x92, 0x92)
|
||
#pragma charmap (0x93, 0x93)
|
||
#pragma charmap (0x94, 0x94)
|
||
#pragma charmap (0x95, 0x95)
|
||
#pragma charmap (0x96, 0x96)
|
||
#pragma charmap (0x97, 0x97)
|
||
#pragma charmap (0x98, 0x98)
|
||
#pragma charmap (0x99, 0x99)
|
||
#pragma charmap (0x9A, 0x9A)
|
||
#pragma charmap (0x9B, 0x9B)
|
||
#pragma charmap (0x9C, 0x9C)
|
||
#pragma charmap (0x9D, 0x9D)
|
||
#pragma charmap (0x9E, 0x9E)
|
||
#pragma charmap (0x9F, 0x9F)
|
||
|
||
#pragma charmap (0xA0, 0xA0)
|
||
#pragma charmap (0xA1, 0xA1)
|
||
#pragma charmap (0xA2, 0xA2)
|
||
#pragma charmap (0xA3, 0xA3)
|
||
#pragma charmap (0xA4, 0xA4)
|
||
#pragma charmap (0xA5, 0xA5)
|
||
#pragma charmap (0xA6, 0xA6)
|
||
#pragma charmap (0xA7, 0xA7)
|
||
#pragma charmap (0xA8, 0xA8)
|
||
#pragma charmap (0xA9, 0xA9)
|
||
#pragma charmap (0xAA, 0xAA)
|
||
#pragma charmap (0xAB, 0xAB)
|
||
#pragma charmap (0xAC, 0xAC)
|
||
#pragma charmap (0xAD, 0xAD)
|
||
#pragma charmap (0xAE, 0xAE)
|
||
#pragma charmap (0xAF, 0xAF)
|
||
|
||
#pragma charmap (0xB0, 0xB0)
|
||
#pragma charmap (0xB1, 0xB1)
|
||
#pragma charmap (0xB2, 0xB2)
|
||
#pragma charmap (0xB3, 0xB3)
|
||
#pragma charmap (0xB4, 0xB4)
|
||
#pragma charmap (0xB5, 0xB5)
|
||
#pragma charmap (0xB6, 0xB6)
|
||
#pragma charmap (0xB7, 0xB7)
|
||
#pragma charmap (0xB8, 0xB8)
|
||
#pragma charmap (0xB9, 0xB9)
|
||
#pragma charmap (0xBA, 0xBA)
|
||
#pragma charmap (0xBB, 0xBB)
|
||
#pragma charmap (0xBC, 0xBC)
|
||
#pragma charmap (0xBD, 0xBD)
|
||
#pragma charmap (0xBE, 0xBE)
|
||
#pragma charmap (0xBF, 0xBF)
|
||
|
||
#pragma charmap (0xC0, 0xC0)
|
||
#pragma charmap (0xC1, 0xC1)
|
||
#pragma charmap (0xC2, 0xC2)
|
||
#pragma charmap (0xC3, 0xC3)
|
||
#pragma charmap (0xC4, 0xC4)
|
||
#pragma charmap (0xC5, 0xC5)
|
||
#pragma charmap (0xC6, 0xC6)
|
||
#pragma charmap (0xC7, 0xC7)
|
||
#pragma charmap (0xC8, 0xC8)
|
||
#pragma charmap (0xC9, 0xC9)
|
||
#pragma charmap (0xCA, 0xCA)
|
||
#pragma charmap (0xCB, 0xCB)
|
||
#pragma charmap (0xCC, 0xCC)
|
||
#pragma charmap (0xCD, 0xCD)
|
||
#pragma charmap (0xCE, 0xCE)
|
||
#pragma charmap (0xCF, 0xCF)
|
||
|
||
#pragma charmap (0xD0, 0xD0)
|
||
#pragma charmap (0xD1, 0xD1)
|
||
#pragma charmap (0xD2, 0xD2)
|
||
#pragma charmap (0xD3, 0xD3)
|
||
#pragma charmap (0xD4, 0xD4)
|
||
#pragma charmap (0xD5, 0xD5)
|
||
#pragma charmap (0xD6, 0xD6)
|
||
#pragma charmap (0xD7, 0xD7)
|
||
#pragma charmap (0xD8, 0xD8)
|
||
#pragma charmap (0xD9, 0xD9)
|
||
#pragma charmap (0xDA, 0xDA)
|
||
#pragma charmap (0xDB, 0xDB)
|
||
#pragma charmap (0xDC, 0xDC)
|
||
#pragma charmap (0xDD, 0xDD)
|
||
#pragma charmap (0xDE, 0xDE)
|
||
#pragma charmap (0xDF, 0xDF)
|
||
|
||
#pragma charmap (0xE0, 0xE0)
|
||
#pragma charmap (0xE1, 0xE1)
|
||
#pragma charmap (0xE2, 0xE2)
|
||
#pragma charmap (0xE3, 0xE3)
|
||
#pragma charmap (0xE4, 0xE4)
|
||
#pragma charmap (0xE5, 0xE5)
|
||
#pragma charmap (0xE6, 0xE6)
|
||
#pragma charmap (0xE7, 0xE7)
|
||
#pragma charmap (0xE8, 0xE8)
|
||
#pragma charmap (0xE9, 0xE9)
|
||
#pragma charmap (0xEA, 0xEA)
|
||
#pragma charmap (0xEB, 0xEB)
|
||
#pragma charmap (0xEC, 0xEC)
|
||
#pragma charmap (0xED, 0xED)
|
||
#pragma charmap (0xEE, 0xEE)
|
||
#pragma charmap (0xEF, 0xEF)
|
||
|
||
#pragma charmap (0xF0, 0xF0)
|
||
#pragma charmap (0xF1, 0xF1)
|
||
#pragma charmap (0xF2, 0xF2)
|
||
#pragma charmap (0xF3, 0xF3)
|
||
#pragma charmap (0xF4, 0xF4)
|
||
#pragma charmap (0xF5, 0xF5)
|
||
#pragma charmap (0xF6, 0xF6)
|
||
#pragma charmap (0xF7, 0xF7)
|
||
#pragma charmap (0xF8, 0xF8)
|
||
#pragma charmap (0xF9, 0xF9)
|
||
#pragma charmap (0xFA, 0xFA)
|
||
#pragma charmap (0xFB, 0xFB)
|
||
#pragma charmap (0xFC, 0xFC)
|
||
#pragma charmap (0xFD, 0xFD)
|
||
#pragma charmap (0xFE, 0xFE)
|
||
#pragma charmap (0xFF, 0xFF)
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* em-kernel.h */
|
||
/* */
|
||
/* Internally used EM functions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2003 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _EM_KERNEL_H
|
||
#define _EM_KERNEL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* A structure that describes the header of an extended memory driver loaded
|
||
** into memory.
|
||
*/
|
||
typedef struct {
|
||
|
||
/* Driver header */
|
||
char id[3]; /* Contains 0x65, 0x6d, 0x64 ("emd") */
|
||
unsigned char version; /* Interface version */
|
||
|
||
/* Jump vectors. Note that these are not C callable */
|
||
void* install; /* INSTALL routine */
|
||
void* deinstall; /* DEINSTALL routine */
|
||
void* pagecount; /* PAGECOUNT routine */
|
||
void* map; /* MAP routine */
|
||
void* use; /* USE routine */
|
||
void* mapclean; /* MAPCLEAN routine */
|
||
void* copyfrom; /* COPYFROM routine */
|
||
void* copyto; /* COPYTO routine */
|
||
|
||
} em_drv_header;
|
||
|
||
|
||
|
||
/* EM kernel variables */
|
||
extern em_drv_header* em_drv; /* Pointer to driver */
|
||
|
||
|
||
|
||
/* End of em-kernel.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* mouse-kernel.h */
|
||
/* */
|
||
/* Internally used mouse functions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003-2006, Ullrich von Bassewitz */
|
||
/* R<>merstra<72>e 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _MOUSE_KERNEL_H
|
||
#define _MOUSE_KERNEL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* Mouse kernel variables */
|
||
extern void* mouse_drv; /* Pointer to driver */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void mouse_clear_ptr (void);
|
||
/* Clear the mouse_drv pointer */
|
||
|
||
|
||
|
||
/* End of mouse-kernel.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* tgi-vectorfont.h */
|
||
/* */
|
||
/* TGI vector font definitions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2009, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TGI_VECTORFONT_H
|
||
#define _TGI_VECTORFONT_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define TGI_VF_FIRSTCHAR 0x20 /* First char in file */
|
||
#define TGI_VF_LASTCHAR 0x7E /* Last char in file */
|
||
#define TGI_VF_CCOUNT (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1)
|
||
|
||
#define TGI_VF_VERSION 0x00 /* File version number */
|
||
|
||
/* TCH file header */
|
||
typedef struct tgi_vectorfont_header tgi_vectorfont_header;
|
||
struct tgi_vectorfont_header {
|
||
unsigned char magic[3]; /* "TCH" */
|
||
unsigned char version; /* Version number */
|
||
unsigned size; /* Font data size */
|
||
};
|
||
|
||
/* Font data loaded directly from file */
|
||
struct tgi_vectorfont {
|
||
unsigned char top; /* Height of char */
|
||
unsigned char baseline; /* Character baseline */
|
||
unsigned char bottom; /* Descender */
|
||
unsigned char widths[TGI_VF_CCOUNT]; /* Char widths */
|
||
unsigned char* chars[TGI_VF_CCOUNT]; /* Pointer to character defs */
|
||
unsigned char vec_ops[1]; /* Actually dynamic */
|
||
};
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void __fastcall__ tgi_vectorchar (char C);
|
||
/* Draw one character of the vector font at the current graphics cursor
|
||
** position using the current font magnification.
|
||
*/
|
||
|
||
|
||
|
||
/* End of tgi-vectorfont.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* tgi-kernel.h */
|
||
/* */
|
||
/* TGI kernel interface */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TGI_KERNEL_H
|
||
#define _TGI_KERNEL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* TGI kernel variables */
|
||
extern void* tgi_drv; /* Pointer to driver */
|
||
extern unsigned char tgi_error; /* Last error code */
|
||
extern unsigned char tgi_gmode; /* Flag: Graphics mode active */
|
||
extern int tgi_curx; /* Current drawing cursor X */
|
||
extern int tgi_cury; /* Current drawing cursor Y */
|
||
extern unsigned char tgi_color; /* Current drawing color */
|
||
extern unsigned char tgi_font; /* Current font type */
|
||
extern unsigned tgi_xres; /* X resolution of the current mode */
|
||
extern unsigned tgi_yres; /* Y resolution of the current mode */
|
||
extern unsigned char tgi_colorcount; /* Number of available colors */
|
||
extern unsigned char tgi_pagecount; /* Number of available screens */
|
||
extern unsigned char tgi_fontwidth; /* System font width in pixels */
|
||
extern unsigned char tgi_fontheight; /* System font height in pixels */
|
||
extern unsigned tgi_aspectratio; /* Aspect ratio as fixed point 8.8 */
|
||
extern unsigned char tgi_flags; /* TGI driver flags */
|
||
extern unsigned tgi_textscalew[2]; /* Vector/bitmap font scale 8.8 */
|
||
extern unsigned tgi_textscaleh[2]; /* Vector/bitmap font scale 8.8 */
|
||
extern unsigned tgi_charwidth; /* Width of scaled bitmap font */
|
||
extern unsigned tgi_charheight; /* Height of scaled bitmap font */
|
||
|
||
|
||
|
||
/* End of tgi-kernel.h */
|
||
#endif
|
||
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* tgi-error.h */
|
||
/* */
|
||
/* TGI error codes */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2012, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TGI_ERROR_H
|
||
#define _TGI_ERROR_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#define TGI_ERR_OK 0 /* No error */
|
||
#define TGI_ERR_NO_DRIVER 1 /* No driver available */
|
||
#define TGI_ERR_CANNOT_LOAD 2 /* Error loading driver or font */
|
||
#define TGI_ERR_INV_DRIVER 3 /* Invalid driver */
|
||
#define TGI_ERR_INV_MODE 4 /* Mode not supported by driver */
|
||
#define TGI_ERR_INV_ARG 5 /* Invalid function argument */
|
||
#define TGI_ERR_INV_FUNC 6 /* Function not supported */
|
||
#define TGI_ERR_INV_FONT 7 /* Font file is invalid */
|
||
#define TGI_ERR_NO_RES 8 /* Out of resources */
|
||
#define TGI_ERR_INSTALLED 9 /* A driver is already installed */
|
||
|
||
|
||
|
||
/* End of tgi-error.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*
|
||
GEOS mouse and sprite functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GSPRITE_H
|
||
#define _GSPRITE_H
|
||
|
||
void StartMouseMode(void);
|
||
void ClearMouseMode(void);
|
||
void MouseUp(void);
|
||
void MouseOff(void);
|
||
char __fastcall__ IsMseInRegion(struct window *region);
|
||
|
||
void __fastcall__ DrawSprite(char spritenum, const char *spritepic);
|
||
void __fastcall__ PosSprite(char spritenum, struct pixel *position);
|
||
void __fastcall__ EnablSprite(char spritenum);
|
||
void __fastcall__ DisablSprite(char spritenum);
|
||
|
||
void __fastcall__ InitTextPrompt(char height);
|
||
void __fastcall__ PromptOn(struct pixel *position);
|
||
void PromptOff(void);
|
||
char GetNextChar(void);
|
||
|
||
/* keyboard constants */
|
||
#define KEY_F1 1
|
||
#define KEY_F2 2
|
||
#define KEY_F3 3
|
||
#define KEY_F4 4
|
||
#define KEY_F5 5
|
||
#define KEY_F6 6
|
||
#define KEY_NOSCRL 7
|
||
#define KEY_ENTER 13
|
||
#define KEY_F7 14
|
||
#define KEY_F8 15
|
||
#define KEY_HOME 18
|
||
#define KEY_CLEAR 19
|
||
#define KEY_LARROW 20
|
||
#define KEY_UPARROW 21
|
||
#define KEY_STOP 22
|
||
#define KEY_RUN 23
|
||
#define KEY_BPS 24
|
||
#define KEY_HELP 25
|
||
#define KEY_ALT 26
|
||
#define KEY_ESC 27
|
||
#define KEY_INSERT 28
|
||
#define KEY_INVALID 31
|
||
#define KEY_LEFT BACKSPACE
|
||
#ifdef __GEOS_CBM__
|
||
#define KEY_UP 16
|
||
#define KEY_DOWN 17
|
||
#define KEY_DELETE 29
|
||
#define KEY_RIGHT 30
|
||
#else
|
||
#define KEY_UP 11
|
||
#define KEY_DOWN 10
|
||
#define KEY_DELETE 127
|
||
#define KEY_RIGHT 21
|
||
#endif
|
||
|
||
/* values of faultData - pointer position vs. mouseWindow */
|
||
/* bit numbers */
|
||
#define OFFTOP_BIT 7
|
||
#define OFFBOTTOM_BIT 6
|
||
#define OFFLEFT_BIT 5
|
||
#define OFFRIGHT_BIT 4
|
||
#define OFFMENU_BIT 3
|
||
/* bit masks */
|
||
#define SET_OFFTOP 0x80
|
||
#define SET_OFFBOTTOM 0x40
|
||
#define SET_OFFLEFT 0x20
|
||
#define SET_OFFRIGHT 0x10
|
||
#define SET_OFFMENU 0x08
|
||
|
||
/* mouseOn */
|
||
/* bit numbers */
|
||
#define MOUSEON_BIT 7
|
||
#define MENUON_BIT 6
|
||
#define ICONSON_BIT 5
|
||
/* bit masks */
|
||
#define SET_MSE_ON 0x80
|
||
#define SET_MENUON 0x40
|
||
#define SET_ICONSON 0x20
|
||
|
||
/* pressFlag */
|
||
/* bit numbers */
|
||
#define KEYPRESS_BIT 7
|
||
#define INPUT_BIT 6
|
||
#define MOUSE_BIT 5
|
||
/* bit masks */
|
||
#define SET_KEYPRESS 0x80
|
||
#define SET_INPUTCHG 0x40
|
||
#define SET_MOUSE 0x20
|
||
|
||
#endif
|
||
/*
|
||
GEOS constants
|
||
|
||
reassembled by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
/* Here are constants which didn't fit into any other cathegory... */
|
||
|
||
#ifndef _GCONST_H
|
||
#define _GCONST_H
|
||
|
||
#define NULL 0
|
||
#define FALSE NULL
|
||
#define TRUE 0xff
|
||
#define MOUSE_SPRNUM 0
|
||
#define DISK_DRV_LGH 0x0d80
|
||
|
||
/* drivetypes */
|
||
#define DRV_NULL 0
|
||
#define DRV_1541 1
|
||
#define DRV_1571 2
|
||
#define DRV_1581 3
|
||
#define DRV_NETWORK 15
|
||
|
||
/* various disk constants */
|
||
#define REL_FILE_NUM 9
|
||
#define CMND_FILE_NUM 15
|
||
#define MAX_CMND_STR 32
|
||
#define DIR_1581_TRACK 40
|
||
#define DIR_ACC_CHAN 13
|
||
#define DIR_TRACK 18
|
||
#define N_TRACKS 35
|
||
#define DK_NM_ID_LEN 18
|
||
#define TRACK 9
|
||
#define SECTOR 12
|
||
#define TOTAL_BLOCKS 664
|
||
|
||
/* offset to something */
|
||
#define OFF_INDEX_PTR 1
|
||
|
||
/* values for CPU_DATA memory config - C64 */
|
||
#define IO_IN 0x35
|
||
#define KRNL_IO_IN 0x36
|
||
#define KRNL_BAS_IO_IN 0x37
|
||
|
||
/* values for MMU config - C128 */
|
||
#define CIOIN 0x7E
|
||
#define CRAM64K 0x7F
|
||
#define CKRNLBASIOIN 0x40
|
||
#define CKRNLIOIN 0x4E
|
||
|
||
/* alarmSetFlag */
|
||
#define ALARMMASK 4
|
||
|
||
#define CLR_SAVE 0x40
|
||
#define CONSTRAINED 0x40
|
||
#define UN_CONSTRAINED 0
|
||
#define FG_SAVE 0x80
|
||
|
||
#define FUTURE1 7
|
||
#define FUTURE2 8
|
||
#define FUTURE3 9
|
||
#define FUTURE4 10
|
||
#define USELAST 127
|
||
#define SHORTCUT 128
|
||
|
||
#endif
|
||
/*
|
||
GEOS graphic (non icon/menu/sprite) functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GGRAPH_H
|
||
#define _GGRAPH_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
void __fastcall__ SetPattern(char newpattern);
|
||
|
||
void __fastcall__ HorizontalLine(char pattern, char y, unsigned xstart, unsigned xend);
|
||
void __fastcall__ InvertLine(char y, unsigned xstart, unsigned xend);
|
||
void __fastcall__ RecoverLine(char y, unsigned xstart, unsigned xend);
|
||
void __fastcall__ VerticalLine(char pattern, char ystart, char yend, unsigned x);
|
||
|
||
void __fastcall__ InitDrawWindow(struct window *myRectangle);
|
||
void Rectangle(void);
|
||
void __fastcall__ FrameRectangle(char pattern);
|
||
void InvertRectangle(void);
|
||
void ImprintRectangle(void);
|
||
void RecoverRectangle(void);
|
||
|
||
void __fastcall__ DrawLine(char mode, struct window *topBotCoords);
|
||
|
||
void __fastcall__ DrawPoint(char mode, struct pixel *myPixel);
|
||
char __fastcall__ TestPoint(struct pixel *myPixel);
|
||
|
||
void __fastcall__ PutChar(char character, char y, unsigned x);
|
||
void __fastcall__ PutString(char *myString, char y, unsigned x);
|
||
void __fastcall__ PutDecimal(char style, unsigned value, char y, unsigned x);
|
||
|
||
char __fastcall__ GetCharWidth(char character);
|
||
void __fastcall__ LoadCharSet(struct fontdesc *myFont);
|
||
void UseSystemFont(void);
|
||
|
||
void __fastcall__ BitmapUp(struct iconpic *myIcon);
|
||
void __fastcall__ BitmapClip(char skipl, char skipr, unsigned skiptop,
|
||
struct iconpic *myIcon);
|
||
void __fastcall__ BitOtherClip(void *proc1, void *proc2, char skipl,
|
||
char skipr, unsigned skiptop,
|
||
struct iconpic *myIcon);
|
||
|
||
void __fastcall__ GraphicsString(char *myGfxString);
|
||
|
||
/* VIC colour constants */
|
||
#define BLACK 0
|
||
#define WHITE 1
|
||
#define RED 2
|
||
#define CYAN 3
|
||
#define PURPLE 4
|
||
#define GREEN 5
|
||
#define BLUE 6
|
||
#define YELLOW 7
|
||
#define ORANGE 8
|
||
#define BROWN 9
|
||
#define LTRED 10
|
||
#define DKGREY 11
|
||
#define GREY 12
|
||
#define MEDGREY 12
|
||
#define LTGREEN 13
|
||
#define LTBLUE 14
|
||
#define LTGREY 15
|
||
/* VIC memory banks - lowest 2 bits of cia2base+0 */
|
||
#define GRBANK0 3
|
||
#define GRBANK1 2
|
||
#define GRBANK2 1
|
||
#define GRBANK3 0
|
||
/* VIC screen sizes */
|
||
#define VIC_X_POS_OFF 24
|
||
#define VIC_Y_POS_OFF 50
|
||
#ifdef __GEOS_CBM__
|
||
#define SC_BYTE_WIDTH 40
|
||
#define SC_PIX_HEIGHT 200
|
||
#define SC_PIX_WIDTH 320
|
||
#define SC_SIZE 8000
|
||
#else
|
||
#define SC_BYTE_WIDTH 70
|
||
#define SC_PIX_HEIGHT 192
|
||
#define SC_PIX_WIDTH 560
|
||
#define SC_SIZE 13440
|
||
#endif
|
||
/* VDC screen constants */
|
||
#define SCREENBYTEWIDTH 80
|
||
#define SCREENPIXELWIDTH 640
|
||
/* control characters for use as numbers, not characters */
|
||
#define BACKSPACE 8
|
||
#define FORWARDSPACE 9
|
||
#define TAB 9
|
||
#define LF 10
|
||
#define HOME 11
|
||
#define PAGE_BREAK 12
|
||
#define UPLINE 12
|
||
#define CR 13
|
||
#define ULINEON 14
|
||
#define ULINEOFF 15
|
||
#define ESC_GRAPHICS 16
|
||
#define ESC_RULER 17
|
||
#define REV_ON 18
|
||
#define REV_OFF 19
|
||
#define GOTOX 20
|
||
#define GOTOY 21
|
||
#define GOTOXY 22
|
||
#define NEWCARDSET 23
|
||
#define BOLDON 24
|
||
#define ITALICON 25
|
||
#define OUTLINEON 26
|
||
#define PLAINTEXT 27
|
||
/* control characters for use in
|
||
strings: eg: str[10]=CBOLDON "Hello"; */
|
||
#define CCR "\015"
|
||
#define CULINEON "\016"
|
||
#define CULINEOFF "\017"
|
||
#define CREV_ON "\022"
|
||
#define CREV_OFF "\023"
|
||
#define CBOLDON "\030"
|
||
#define CITALICON "\031"
|
||
#define COUTLINEON "\032"
|
||
#define CPLAINTEXT "\033"
|
||
|
||
/*values of currentMode */
|
||
/* bitNumbers */
|
||
#define UNDERLINE_BIT 7
|
||
#define BOLD_BIT 6
|
||
#define REVERSE_BIT 5
|
||
#define ITALIC_BIT 4
|
||
#define OUTLINE_BIT 3
|
||
#define SUPERSCRIPT_BIT 2
|
||
#define SUBSCRIPT_BIT 1
|
||
/* bitMasks */
|
||
#define SET_UNDERLINE 0x80
|
||
#define SET_BOLD 0x40
|
||
#define SET_REVERSE 0x20
|
||
#define SET_ITALIC 0x10
|
||
#define SET_OUTLINE 0x08
|
||
#define SET_SUPERSCRIPT 0x04
|
||
#define SET_SUBSCRIPT 0x02
|
||
#define SET_PLAINTEXT 0
|
||
/* values of dispBufferOn */
|
||
#define ST_WRGS_FORE 0x20
|
||
#define ST_WR_BACK 0x40
|
||
#define ST_WR_FORE 0x80
|
||
/* PutDecimal parameters */
|
||
/* leading zeros? */
|
||
#define SET_NOSURPRESS 0
|
||
#define SET_SURPRESS 0x40
|
||
/* justification */
|
||
#define SET_RIGHTJUST 0
|
||
#define SET_LEFTJUST 0x80
|
||
/* C128 x-extension flags */
|
||
#define ADD1_W 0x2000
|
||
#define DOUBLE_B 0x80
|
||
#define DOUBLE_W 0x8000
|
||
/* DrawLine/DrawPoint mode values */
|
||
#define DRAW_ERASE 0x00
|
||
#define DRAW_DRAW 0x40
|
||
#define DRAW_COPY 0x80
|
||
|
||
typedef void graphicStr;
|
||
|
||
#define MOVEPENTO(x,y) (char)1, (unsigned)(x), (char)(y)
|
||
#define LINETO(x,y) (char)2, (unsigned)(x), (char)(y)
|
||
#define RECTANGLETO(x,y) (char)3, (unsigned)(x), (char)(y)
|
||
#define NEWPATTERN(p) (char)5, (char)(p)
|
||
#define FRAME_RECTO(x,y) (char)7, (unsigned)(x), (char)(y)
|
||
#define PEN_X_DELTA(x) (char)8, (unsigned)(x)
|
||
#define PEN_Y_DELTA(y) (char)9, (char)(y)
|
||
#define PEN_XY_DELTA(x,y) (char)10, (unsigned)(x), (char)(y)
|
||
#define GSTR_END (char)NULL
|
||
/* ESC_PUTSTRING can't be implemented - it needs text, not pointer to it
|
||
#define ESC_PUTSTRING(x,y,text) (char)6, (unsigned)(x), (char)(y), (text), (char)NULL
|
||
*/
|
||
|
||
#endif
|
||
/*
|
||
GEOS menu and icon functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GMENU_H
|
||
#define _GMENU_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
void __fastcall__ DoMenu(struct menu *myMenu);
|
||
void ReDoMenu(void);
|
||
void RecoverMenu(void);
|
||
void RecoverAllMenus(void);
|
||
void DoPreviousMenu(void);
|
||
void GotoFirstMenu(void);
|
||
|
||
void __fastcall__ DoIcons(struct icontab *myIconTab);
|
||
|
||
/* DoMenu - menutypes */
|
||
#define MENU_ACTION 0x00
|
||
#define DYN_SUB_MENU 0x40
|
||
#define SUB_MENU 0x80
|
||
#define HORIZONTAL 0x00
|
||
#define VERTICAL 0x80
|
||
/* menu string offsets */
|
||
#define OFF_MY_TOP 0
|
||
#define OFF_MY_BOT 1
|
||
#define OFF_MX_LEFT 2
|
||
#define OFF_MX_RIGHT 4
|
||
#define OFF_NUM_M_ITEMS 6
|
||
#define OFF_1ST_M_ITEM 7
|
||
/* icon string offsets */
|
||
#define OFF_NM_ICNS 0
|
||
#define OFF_IC_XMOUSE 1
|
||
#define OFF_IC_YMOUSE 3
|
||
#define OFF_PIC_ICON 0
|
||
#define OFF_X_ICON_POS 2
|
||
#define OFF_Y_ICON_POS 3
|
||
#define OFF_WDTH_ICON 4
|
||
#define OFF_HEIGHT_ICON 5
|
||
#define OFF_SRV_RT_ICON 6
|
||
#define OFF_NX_ICON 8
|
||
/* icons, menus status flags */
|
||
#define ST_FLASH 0x80
|
||
#define ST_INVERT 0x40
|
||
#define ST_LD_AT_ADDR 0x01
|
||
#define ST_LD_DATA 0x80
|
||
#define ST_PR_DATA 0x40
|
||
#define ST_WR_PR 0x40
|
||
|
||
#endif
|
||
/*
|
||
GEOS memory and string functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GMEMORY_H
|
||
#define _GMEMORY_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
void __fastcall__ CopyString(char *dest, const char *source);
|
||
char __fastcall__ CmpString(const char *dest, const char *source);
|
||
void __fastcall__ CopyFString(char len, char *dest, const char *source);
|
||
char __fastcall__ CmpFString(char len, char *dest, const char *source);
|
||
|
||
unsigned __fastcall__ CRC(const char *buffer, unsigned len);
|
||
void* __fastcall__ ClearRam(char *dest, unsigned len);
|
||
void* __fastcall__ FillRam(char *dest, char what, unsigned len);
|
||
|
||
void* __fastcall__ MoveData(char *dest, const char *source, unsigned len);
|
||
|
||
void __fastcall__ InitRam(char *myInitTab);
|
||
|
||
void __fastcall__ StashRAM(char REUBank, unsigned len, char *reuaddy, const char *cpuaddy);
|
||
void __fastcall__ FetchRAM(char REUBank, unsigned len, const char *reuaddy, char *cpuaddy);
|
||
void __fastcall__ SwapRAM(char REUBank, unsigned len, char *reuaddy, char *cpuaddy);
|
||
char __fastcall__ VerifyRAM(char REUBank, unsigned len, const char *reuaddy, const char *cpuaddy);
|
||
|
||
#endif
|
||
/*
|
||
GEOS processes (~multitasking) functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GPROCESS_H
|
||
#define _GPROCESS_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
void __fastcall__ InitProcesses(char number, struct process *proctab);
|
||
void __fastcall__ RestartProcess(char number);
|
||
void __fastcall__ EnableProcess(char number);
|
||
void __fastcall__ BlockProcess(char number);
|
||
void __fastcall__ UnblockProcess(char number);
|
||
void __fastcall__ FreezeProcess(char number);
|
||
void __fastcall__ UnfreezeProcess(char number);
|
||
|
||
void __fastcall__ Sleep(unsigned jiffies);
|
||
|
||
#endif
|
||
/*
|
||
GEOS dialog box functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GDLGBOX_H
|
||
#define _GDLGBOX_H
|
||
|
||
char __fastcall__ DoDlgBox(const char *dboxstring);
|
||
char RstrFrmDialogue(void);
|
||
|
||
/* These are custom, predefined dialog boxes, I'm sure you'll find them usable
|
||
Most of them show 2 lines of text */
|
||
|
||
char __fastcall__ DlgBoxYesNo(const char *line1, const char *line2);
|
||
char __fastcall__ DlgBoxOkCancel(const char *line1, const char *line2);
|
||
void __fastcall__ DlgBoxOk(const char *line1, const char *line2);
|
||
char __fastcall__ DlgBoxGetString(char *myString, char strLength,
|
||
const char *line1, const char *line2);
|
||
char __fastcall__ DlgBoxFileSelect(const char *classtxt, char ftype,
|
||
char *fname);
|
||
|
||
/* This is a more general dialog box, works like printf in a window */
|
||
char MessageBox(char mode, const char *format, ...);
|
||
|
||
/* mode argument for MessageBox() */
|
||
enum {
|
||
MB_EMPTY=0,
|
||
MB_OK,
|
||
MB_OKCANCEL,
|
||
MB_YESNO,
|
||
MB_LAST };
|
||
|
||
/* Now the command string type */
|
||
|
||
typedef void dlgBoxStr;
|
||
|
||
/* and command string commands - macros */
|
||
|
||
#define DB_DEFPOS(pattern) (char)(DEF_DB_POS | (pattern))
|
||
#define DB_SETPOS(pattern,top,bot,left,right) \
|
||
(char)(SET_DB_POS | (pattern)), (char)(top), (char)(bot), \
|
||
(unsigned)(left), (unsigned)(right)
|
||
#define DB_ICON(i,x,y) (char)(i), (char)(x), (char)(y)
|
||
#define DB_TXTSTR(x,y,text) (char)DBTXTSTR, (char)(x), (char)(y), (text)
|
||
#define DB_VARSTR(x,y,ptr) (char)DBVARSTR, (char)(x), (char)(y), (char)(ptr)
|
||
#define DB_GETSTR(x,y,ptr,length) (char)DBGETSTRING, (char)(x), (char)(y), (char)(ptr), (char)(length)
|
||
#define DB_SYSOPV(ptr) (char)DBSYSOPV, (unsigned)(ptr)
|
||
#define DB_GRPHSTR(ptr) (char)DBGRPHSTR, (unsigned)(ptr)
|
||
#define DB_GETFILES(x,y) (char)DBGETFILES, (char)(x), (char)(y)
|
||
#define DB_OPVEC(ptr) (char)DBOPVEC, (unsigned)(ptr)
|
||
#define DB_USRICON(x,y,ptr) (char)DBUSRICON, (char)(x), (char)(y), (unsigned)(ptr)
|
||
#define DB_USRROUT(ptr) (char)DB_USR_ROUT, (unsigned)(ptr)
|
||
#define DB_END (char)NULL
|
||
|
||
/*
|
||
part of constants below is used internally, but some are useful for macros above
|
||
*/
|
||
|
||
/* icons for DB_ICON */
|
||
#define OK 1
|
||
#define CANCEL 2
|
||
#define YES 3
|
||
#define NO 4
|
||
#define OPEN 5
|
||
#define DISK 6
|
||
/* commands - internally used by command macros */
|
||
#define DBTXTSTR 11
|
||
#define DBVARSTR 12
|
||
#define DBGETSTRING 13
|
||
#define DBSYSOPV 14
|
||
#define DBGRPHSTR 15
|
||
#define DBGETFILES 16
|
||
#define DBOPVEC 17
|
||
#define DBUSRICON 18
|
||
#define DB_USR_ROUT 19
|
||
/* icons tabulation in standard window */
|
||
#define DBI_X_0 1
|
||
#define DBI_X_1 9
|
||
#define DBI_X_2 17
|
||
#define DBI_Y_0 8
|
||
#define DBI_Y_1 40
|
||
#define DBI_Y_2 72
|
||
/* standard window size defaults */
|
||
#define SET_DB_POS 0
|
||
#define DEF_DB_POS 0x80
|
||
#define DEF_DB_TOP 32
|
||
#define DEF_DB_BOT 127
|
||
#define DEF_DB_LEFT 64
|
||
#define DEF_DB_RIGHT 255
|
||
/* text tabulation in standard window */
|
||
#define TXT_LN_1_Y 16
|
||
#define TXT_LN_2_Y 32
|
||
#define TXT_LN_3_Y 48
|
||
#define TXT_LN_4_Y 64
|
||
#define TXT_LN_5_Y 80
|
||
#define TXT_LN_X 16
|
||
/* system icons size */
|
||
#define SYSDBI_HEIGHT 16
|
||
#define SYSDBI_WIDTH 6
|
||
/* dialogbox string offsets */
|
||
#define OFF_DB_FORM 0
|
||
#define OFF_DB_TOP 1
|
||
#define OFF_DB_BOT 2
|
||
#define OFF_DB_LEFT 3
|
||
#define OFF_DB_RIGHT 5
|
||
#define OFF_DB_1STCMD 7
|
||
|
||
#endif
|
||
/*
|
||
GEOS system addresses and locations
|
||
|
||
reassembled by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GSYM_H
|
||
#define _GSYM_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
#define r0 (*(unsigned*)(R_BASE + 0x00))
|
||
#define r0L (*(char*)(R_BASE + 0x00))
|
||
#define r0H (*(char*)(R_BASE + 0x01))
|
||
#define r1 (*(unsigned*)(R_BASE + 0x02))
|
||
#define r1L (*(char*)(R_BASE + 0x02))
|
||
#define r1H (*(char*)(R_BASE + 0x03))
|
||
#define drawWindow (*(struct window*)(R_BASE + 0x04))
|
||
#define r2 (*(unsigned*)(R_BASE + 0x04))
|
||
#define r2L (*(char*)(R_BASE + 0x04))
|
||
#define r2H (*(char*)(R_BASE + 0x05))
|
||
#define r3 (*(unsigned*)(R_BASE + 0x06))
|
||
#define r3L (*(char*)(R_BASE + 0x06))
|
||
#define r3H (*(char*)(R_BASE + 0x07))
|
||
#define r4 (*(unsigned*)(R_BASE + 0x08))
|
||
#define r4L (*(char*)(R_BASE + 0x08))
|
||
#define r4H (*(char*)(R_BASE + 0x09))
|
||
#define r5 (*(unsigned*)(R_BASE + 0x0a))
|
||
#define r5L (*(char*)(R_BASE + 0x0a))
|
||
#define r5H (*(char*)(R_BASE + 0x0b))
|
||
#define r6 (*(unsigned*)(R_BASE + 0x0c))
|
||
#define r6L (*(char*)(R_BASE + 0x0c))
|
||
#define r6H (*(char*)(R_BASE + 0x0d))
|
||
#define r7 (*(unsigned*)(R_BASE + 0x0e))
|
||
#define r7L (*(char*)(R_BASE + 0x0e))
|
||
#define r7H (*(char*)(R_BASE + 0x0f))
|
||
#define r8 (*(unsigned*)(R_BASE + 0x10))
|
||
#define r8L (*(char*)(R_BASE + 0x10))
|
||
#define r8H (*(char*)(R_BASE + 0x11))
|
||
#define r9 (*(unsigned*)(R_BASE + 0x12))
|
||
#define r9L (*(char*)(R_BASE + 0x12))
|
||
#define r9H (*(char*)(R_BASE + 0x13))
|
||
#define r10 (*(unsigned*)(R_BASE + 0x14))
|
||
#define r10L (*(char*)(R_BASE + 0x14))
|
||
#define r10H (*(char*)(R_BASE + 0x15))
|
||
#define r11 (*(unsigned*)(R_BASE + 0x16))
|
||
#define r11L (*(char*)(R_BASE + 0x16))
|
||
#define r11H (*(char*)(R_BASE + 0x17))
|
||
#define r12 (*(unsigned*)(R_BASE + 0x18))
|
||
#define r12L (*(char*)(R_BASE + 0x18))
|
||
#define r12H (*(char*)(R_BASE + 0x19))
|
||
#define r13 (*(unsigned*)(R_BASE + 0x1a))
|
||
#define r13L (*(char*)(R_BASE + 0x1a))
|
||
#define r13H (*(char*)(R_BASE + 0x1b))
|
||
#define r14 (*(unsigned*)(R_BASE + 0x1c))
|
||
#define r14L (*(char*)(R_BASE + 0x1c))
|
||
#define r14H (*(char*)(R_BASE + 0x1d))
|
||
#define r15 (*(unsigned*)(R_BASE + 0x1e))
|
||
#define r15L (*(char*)(R_BASE + 0x1e))
|
||
#define r15H (*(char*)(R_BASE + 0x1f))
|
||
|
||
#ifdef __GEOS_CBM__
|
||
|
||
#define nameBuf char[17]
|
||
#define blockBuf char[256]
|
||
|
||
#define CPU_DDR (*(char*)0x00)
|
||
#define CPU_DATA (*(char*)0x01)
|
||
|
||
#define R_BASE 0x02
|
||
|
||
#define curPattern (*(unsigned*)0x22)
|
||
#define string (*(unsigned*)0x24)
|
||
#define curFontDesc (*(struct fontdesc*)0x26)
|
||
#define currentMode (*(char*)0x2e)
|
||
#define dispBufferOn (*(char*)0x2f)
|
||
#define mouseOn (*(char*)0x30)
|
||
#define msePicPtr (*(unsigned*)0x31)
|
||
#define curWindow (*(struct window*)0x33)
|
||
#define pressFlag (*(char*)0x39)
|
||
#define mousePos (*(struct pixel*)0x3a)
|
||
#define returnAddress (*(unsigned*)0x3d)
|
||
#define graphMode (*(char*)0x3f)
|
||
#define STATUS (*(char*)0x90)
|
||
#define curDevice (*(char*)0xba)
|
||
|
||
#define irqvec (*(void_func*)0x0314)
|
||
#define bkvec (*(void_func*)0x0316)
|
||
#define nmivec (*(void_func*)0x0318)
|
||
|
||
#define APP_RAM ((char*)0x0400)
|
||
#define BACK_SCR_BASE ((char*)0x6000)
|
||
#define PRINTBASE ((char*)0x7900)
|
||
#define OS_VARS ((char*)0x8000)
|
||
|
||
#define diskBlkBuf ((blockBuf)0x8000)
|
||
#define fileHeader (*(struct fileheader*)0x8100)
|
||
#define curDirHead ((blockBuf)0x8200)
|
||
#define fileTrScTab ((struct tr_se[128])0x8300)
|
||
#define dirEntryBuf (*(struct filehandle*)0x8400)
|
||
|
||
#define DrACurDkNm ((nameBuf)0x841e)
|
||
#define DrBCurDkNm ((nameBuf)0x8430)
|
||
#define dataFileName ((nameBuf)0x8442)
|
||
#define dataDiskName ((nameBuf)0x8453)
|
||
#define PrntFileName ((nameBuf)0x8465)
|
||
#define PrntDiskName ((nameBuf)0x8476)
|
||
|
||
#define curDrive (*(char*)0x8489)
|
||
#define diskOpenFlg (*(char*)0x848a)
|
||
#define isGEOS (*(char*)0x848b)
|
||
#define interleave (*(char*)0x848c)
|
||
#define NUMDRV (*(char*)0x848d)
|
||
|
||
#define driveType ((char[4])0x848e)
|
||
#define turboFlags ((char[4])0x8492)
|
||
|
||
#define VLIRInfo (*(struct VLIR_info*)0x8496)
|
||
|
||
#define appMain (*(void_func*)0x849b)
|
||
#define intTopVector (*(void_func*)0x849d)
|
||
#define intBotVector (*(void_func*)0x849f)
|
||
#define mouseVector (*(void_func*)0x84a1)
|
||
#define keyVector (*(void_func*)0x84a3)
|
||
#define inputVector (*(void_func*)0x84a5)
|
||
#define mouseFaultVec (*(void_func*)0x84a7)
|
||
#define otherPressVec (*(void_func*)0x84a9)
|
||
#define StringFaultVec (*(void_func*)0x84ab)
|
||
#define alarmTmtVector (*(void_func*)0x84ad)
|
||
#define BRKVector (*(void_func*)0x84af)
|
||
#define RecoverVector (*(void_func*)0x84b1)
|
||
|
||
#define selectionFlash (*(char*)0x84b3)
|
||
#define alphaFlag (*(char*)0x84b4)
|
||
#define iconSelFlg (*(char*)0x84b5)
|
||
#define faultData (*(char*)0x84b6)
|
||
#define menuNumber (*(char*)0x84b7)
|
||
#define mouseWindow (*(struct window*)0x84b8)
|
||
#define stringXY (*(struct pixel*)0x84be)
|
||
#define mousePicData (*(char*)0x84c1)
|
||
|
||
#define maxMouseSpeed (*(char*)0x8501)
|
||
#define minMouseSpeed (*(char*)0x8502)
|
||
#define mouseAccel (*(char*)0x8503)
|
||
#define keyData (*(char*)0x8504)
|
||
#define mouseData (*(char*)0x8505)
|
||
#define inputData (*(char*)0x8506)
|
||
#define mouseSpeed (*(char*)0x8507)
|
||
#define random (*(char*)0x850a)
|
||
#define saveFontTab (*(struct fontdesc*)0x850c)
|
||
|
||
#define dblClickCount (*(char*)0x8515)
|
||
#define system_date (*(struct s_date*)0x8516)
|
||
#define alarmSetFlag (*(char*)0x851c)
|
||
#define sysDBData (*(char*)0x851d)
|
||
#define screencolors (*(char*)0x851e)
|
||
#define dlgBoxRamBuf (*(char*)0x851f)
|
||
|
||
#define savedmoby2 (*(char*)0x88bb)
|
||
#define scr80polar (*(char*)0x88bc)
|
||
#define scr80colors (*(char*)0x88bd)
|
||
#define vdcClrMode (*(char*)0x88be)
|
||
#define driveData ((char[4])0x88bf)
|
||
#define ramExpSize (*(char*)0x88c3)
|
||
#define sysRAMFlg (*(char*)0x88c4)
|
||
#define firstBoot (*(char*)0x88c5)
|
||
#define curType (*(char*)0x88c6)
|
||
#define ramBase (*(char*)0x88c7)
|
||
#define inputDevName ((nameBuf)0x88cb)
|
||
#define DrCCurDkNm ((nameBuf)0x88dc)
|
||
#define DrDCurDkNm ((nameBuf)0x88ee)
|
||
#define dir2Head ((blockBuf)0x8900)
|
||
#define SPRITE_PICS ((char*)0x8a00)
|
||
#define sprpic ((char[8][64])0x8a00)
|
||
#define COLOR_MATRIX ((char[1000])0x8c00)
|
||
#define objPointer ((char[8])0x8ff8)
|
||
|
||
#define DISK_BASE ((char*)0x9000)
|
||
#define SCREEN_BASE ((char*)0xa000)
|
||
#define OS_ROM ((char*)0xc000)
|
||
#define OS_JUMPTAB ((char*)0xc100)
|
||
#define EXP_BASE ((char*)0xdf00)
|
||
#define MOUSE_BASE_128 ((char*)0xfd00)
|
||
#define MOUSE_JMP_128 ((char*)0xfd00)
|
||
#define END_MOUSE_128 ((char*)0xfe80)
|
||
#define MOUSE_BASE ((char*)0xfe80)
|
||
#define MOUSE_JMP ((char*)0xfe80)
|
||
|
||
#define config (*(char*)0xff00)
|
||
#define END_MOUSE ((char*)0xfffa)
|
||
|
||
#define NMI_VECTOR (*(void_func*)0xfffa)
|
||
#define RESET_VECTOR (*(void_func*)0xfffc)
|
||
#define IRQ_VECTOR (*(void_func*)0xfffe)
|
||
|
||
#define vicbase ((char*)0xd000)
|
||
#define sidbase ((char*)0xd400)
|
||
#define mmu ((char*)0xd500)
|
||
#define VDC ((char*)0xd600)
|
||
#define ctab ((char*)0xd800)
|
||
#define cia1base ((char*)0xdc00)
|
||
#define cia2base ((char*)0xdd00)
|
||
|
||
#define mob0xpos (*(char*)0xd000)
|
||
#define mob0ypos (*(char*)0xd001)
|
||
#define mob1xpos (*(char*)0xd002)
|
||
#define mob1ypos (*(char*)0xd003)
|
||
#define mob2xpos (*(char*)0xd004)
|
||
#define mob2ypos (*(char*)0xd005)
|
||
#define mob3xpos (*(char*)0xd006)
|
||
#define mob3ypos (*(char*)0xd007)
|
||
#define mob4xpos (*(char*)0xd008)
|
||
#define mob4ypos (*(char*)0xd009)
|
||
#define mob5xpos (*(char*)0xd00a)
|
||
#define mob5ypos (*(char*)0xd00b)
|
||
#define mob6xpos (*(char*)0xd00c)
|
||
#define mob6ypos (*(char*)0xd00d)
|
||
#define mob7xpos (*(char*)0xd00e)
|
||
#define mob7ypos (*(char*)0xd00f)
|
||
#define msbxpos (*(char*)0xd010)
|
||
#define grcntrl1 (*(char*)0xd011)
|
||
#define rasreg (*(char*)0xd012)
|
||
#define lpxpos (*(char*)0xd013)
|
||
#define lpypos (*(char*)0xd014)
|
||
#define mobenble (*(char*)0xd015)
|
||
#define grcntrl2 (*(char*)0xd016)
|
||
#define grmemptr (*(char*)0xd018)
|
||
#define grirq (*(char*)0xd019)
|
||
#define grirqen (*(char*)0xd01a)
|
||
#define moby2 (*(char*)0xd017)
|
||
#define mobprior (*(char*)0xd01b)
|
||
#define mobmcm (*(char*)0xd01c)
|
||
#define mobx2 (*(char*)0xd01d)
|
||
#define mobmobcol (*(char*)0xd01e)
|
||
#define mobbakcol (*(char*)0xd01f)
|
||
#define extclr (*(char*)0xd020)
|
||
#define bakclr0 (*(char*)0xd021)
|
||
#define bakclr1 (*(char*)0xd022)
|
||
#define bakclr2 (*(char*)0xd023)
|
||
#define bakclr3 (*(char*)0xd024)
|
||
#define mcmclr0 (*(char*)0xd025)
|
||
#define mcmclr1 (*(char*)0xd026)
|
||
#define mob0clr (*(char*)0xd027)
|
||
#define mob1clr (*(char*)0xd028)
|
||
#define mob2clr (*(char*)0xd029)
|
||
#define mob3clr (*(char*)0xd02a)
|
||
#define mob4clr (*(char*)0xd02b)
|
||
#define mob5clr (*(char*)0xd02c)
|
||
#define mob6clr (*(char*)0xd02d)
|
||
#define mob7clr (*(char*)0xd02e)
|
||
#define keyreg (*(char*)0xd02f)
|
||
#define clkreg (*(char*)0xd030)
|
||
|
||
#define vdcreg (*(char*)0xd600)
|
||
#define vdcdata (*(char*)0xd601)
|
||
|
||
#else /* #ifdef __GEOS_CBM__ */
|
||
|
||
#define nameBuf char[16]
|
||
#define blockBuf char[512]
|
||
|
||
#define R_BASE 0x00
|
||
|
||
#define curPattern (*(unsigned*)0x022c)
|
||
#define string (*(unsigned*)0x53)
|
||
#define curFontDesc (*(struct fontdesc*)0x0218)
|
||
#define currentMode (*(char*)0x021c)
|
||
#define dispBufferOn (*(char*)0x021d)
|
||
#define mouseOn (*(char*)0x5d)
|
||
#define curWindow (*(struct window*)0x021e)
|
||
#define pressFlag (*(char*)0x08fe)
|
||
#define mousePos (*(struct pixel*)0x0241)
|
||
#define returnAddress (*(unsigned*)0x64)
|
||
|
||
#define diskBlkBuf ((blockBuf)0xf659)
|
||
#define fileHeader (*(struct fileheader*)0xf859)
|
||
#define curDirHead ((char[39])0xfa80)
|
||
#define dirEntryBuf (*(struct filehandle*)0xfa59)
|
||
|
||
#define DrACurDkNm ((nameBuf)0xfaa7)
|
||
#define DrBCurDkNm ((nameBuf)0xfab7)
|
||
#define dataFileName ((nameBuf)0x02a4)
|
||
#define dataDiskName ((nameBuf)0x02b4)
|
||
#define PrntFileName ((nameBuf)0x08ac)
|
||
|
||
#define curDrive (*(char*)0xf60d)
|
||
#define diskOpenFlg (*(char*)0xf617)
|
||
#define NUMDRV (*(char*)0xf60e)
|
||
|
||
#define driveType ((char[4])0xfaf3)
|
||
|
||
#define VLIRInfo (*(struct VLIR_info*)0xf618)
|
||
|
||
#define appMain (*(void_func*)0x0200)
|
||
#define intTopVector (*(void_func*)0x0202)
|
||
#define intBotVector (*(void_func*)0x0204)
|
||
#define mouseVector (*(void_func*)0x0206)
|
||
#define keyVector (*(void_func*)0x0208)
|
||
#define inputVector (*(void_func*)0x020a)
|
||
#define mouseFaultVec (*(void_func*)0x020c)
|
||
#define otherPressVec (*(void_func*)0x020e)
|
||
#define StringFaultVec (*(void_func*)0x0210)
|
||
#define alarmTmtVector (*(void_func*)0x0212)
|
||
#define BRKVector (*(void_func*)0x0214)
|
||
#define RecoverVector (*(void_func*)0x0216)
|
||
|
||
#define selectionFlash (*(char*)0x0224)
|
||
#define alphaFlag (*(char*)0x0225)
|
||
#define iconSelFlg (*(char*)0x0226)
|
||
#define faultData (*(char*)0x0227)
|
||
#define menuNumber (*(char*)0x0228)
|
||
#define mouseWindow (*(struct window*)0x57)
|
||
#define stringXY (*(struct pixel*)0x022e)
|
||
|
||
#define maxMouseSpeed (*(char*)0x027d)
|
||
#define minMouseSpeed (*(char*)0x027e)
|
||
#define mouseAccel (*(char*)0x027f)
|
||
#define keyData (*(char*)0x0245)
|
||
#define mouseData (*(char*)0x0246)
|
||
#define inputData (*(char*)0x0247)
|
||
#define random (*(char*)0x024c)
|
||
#define saveFontTab (*(struct fontdesc*)0x024e)
|
||
|
||
#define dblClickCount (*(char*)0x0258)
|
||
#define system_date (*(struct s_date*)0xf200)
|
||
#define sysDBData (*(char*)0x0259)
|
||
#define dlgBoxRamBuf (*(char*)0xf381)
|
||
|
||
#define firstBoot (*(char*)0x0281)
|
||
#define inputDevName ((nameBuf)0x08cc)
|
||
#define DrCCurDkNm ((nameBuf)0xfac7)
|
||
#define DrDCurDkNm ((nameBuf)0xfad7)
|
||
|
||
#define mobenble (*(char*)0x0818)
|
||
#define moby2 (*(char*)0x081a)
|
||
#define mobx2 (*(char*)0x0819)
|
||
|
||
#endif /* #ifdef __GEOS_CBM__ */
|
||
|
||
#endif
|
||
/*
|
||
GEOS filesystem functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GFILE_H
|
||
#define _GFILE_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
struct filehandle *Get1stDirEntry(void);
|
||
struct filehandle *GetNxtDirEntry(void);
|
||
|
||
char __fastcall__ FindFTypes(char *buffer, char ftype, char fmaxnum, const char *classtxt);
|
||
|
||
char __fastcall__ GetFile(char flag, const char *fname,
|
||
const char *loadaddr, const char *datadname, const char *datafname);
|
||
char __fastcall__ FindFile(const char *fname);
|
||
char __fastcall__ ReadFile(struct tr_se *myTrSe, char *buffer, unsigned flength);
|
||
char __fastcall__ SaveFile(char skip, struct fileheader *myHeader);
|
||
char __fastcall__ FreeFile(struct tr_se myTable[]);
|
||
char __fastcall__ DeleteFile(const char *fname);
|
||
char __fastcall__ RenameFile(const char *source, const char *target);
|
||
|
||
char ReadByte(void);
|
||
|
||
char __fastcall__ FollowChain(struct tr_se *startTrSe, char *buffer);
|
||
char __fastcall__ GetFHdrInfo(struct filehandle *myFile);
|
||
|
||
char __fastcall__ OpenRecordFile(const char *fname);
|
||
char CloseRecordFile(void);
|
||
char NextRecord(void);
|
||
char PreviousRecord(void);
|
||
char __fastcall__ PointRecord(char);
|
||
char DeleteRecord(void);
|
||
char InsertRecord(void);
|
||
char AppendRecord(void);
|
||
char __fastcall__ ReadRecord(char *buffer, unsigned flength);
|
||
char __fastcall__ WriteRecord(const char *buffer, unsigned flength);
|
||
char UpdateRecordFile(void);
|
||
|
||
/* GEOS filetypes */
|
||
#define NOT_GEOS 0
|
||
#define BASIC 1
|
||
#define ASSEMBLY 2
|
||
#define DATA 3
|
||
#define SYSTEM 4
|
||
#define DESK_ACC 5
|
||
#define APPLICATION 6
|
||
#define APPL_DATA 7
|
||
#define FONT 8
|
||
#define PRINTER 9
|
||
#define INPUT_DEVICE 10
|
||
#define DISK_DEVICE 11
|
||
#define SYSTEM_BOOT 12
|
||
#define TEMPORARY 13
|
||
#define AUTO_EXEC 14
|
||
#define INPUT_128 15
|
||
#define NUMFILETYPES 16
|
||
/* supported structures */
|
||
#define SEQUENTIAL 0
|
||
#define VLIR 1
|
||
/* DOS filetypes */
|
||
#define DEL 0
|
||
#define SEQ 1
|
||
#define PRG 2
|
||
#define USR 3
|
||
#define REL 4
|
||
#define CBM 5
|
||
|
||
#endif
|
||
/*
|
||
GEOS functions from disk driver
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GDISK_H
|
||
#define _GDISK_H
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#include <geos/gstruct.h>
|
||
#endif
|
||
|
||
char __fastcall__ ReadBuff(struct tr_se *myTrSe);
|
||
char __fastcall__ WriteBuff(struct tr_se *myTrSe);
|
||
|
||
char __fastcall__ GetBlock(struct tr_se *myTrSe, char *buffer);
|
||
char __fastcall__ PutBlock(struct tr_se *myTrSe, const char *buffer);
|
||
char __fastcall__ ReadBlock(struct tr_se *myTrSe, char *buffer);
|
||
char __fastcall__ WriteBlock(struct tr_se *myTrSe, const char *buffer);
|
||
char __fastcall__ VerWriteBlock(struct tr_se *myTrSe, const char *buffer);
|
||
|
||
unsigned CalcBlksFree(void);
|
||
char ChkDkGEOS(void);
|
||
char SetGEOSDisk(void);
|
||
char NewDisk(void);
|
||
char OpenDisk(void);
|
||
|
||
char __fastcall__ FindBAMBit(struct tr_se *myTrSe);
|
||
char __fastcall__ BlkAlloc(struct tr_se output[], unsigned length);
|
||
char __fastcall__ NxtBlkAlloc(struct tr_se *startTrSe,
|
||
struct tr_se output[], unsigned length);
|
||
char __fastcall__ FreeBlock(struct tr_se *myTrSe);
|
||
struct tr_se __fastcall__ SetNextFree(struct tr_se *myTrSe);
|
||
// above needs (unsigned) casts on both sides of '='
|
||
|
||
char GetDirHead(void);
|
||
char PutDirHead(void);
|
||
void __fastcall__ GetPtrCurDkNm(char *name);
|
||
|
||
void EnterTurbo(void);
|
||
void ExitTurbo(void);
|
||
void PurgeTurbo(void);
|
||
|
||
char __fastcall__ ChangeDiskDevice(char newdev);
|
||
|
||
/* disk header offsets i.e. index curDirHead with these */
|
||
#define OFF_TO_BAM 4
|
||
#define OFF_DISK_NAME 144
|
||
#define OFF_GS_DTYPE 189
|
||
#define OFF_OP_TR_SC 171
|
||
#define OFF_GS_ID 173
|
||
/* disk errors reported in _oserror */
|
||
#define ANY_FAULT 0xf0
|
||
#define G_EOF 0
|
||
#define NO_BLOCKS 1
|
||
#define INV_TRACK 2
|
||
#define INSUFF_SPACE 3
|
||
#define FULL_DIRECTORY 4
|
||
#define FILE_NOT_FOUND 5
|
||
#define BAD_BAM 6
|
||
#define UNOPENED_VLIR 7
|
||
#define INV_RECORD 8
|
||
#define OUT_OF_RECORDS 9
|
||
#define STRUCT_MISMAT 10
|
||
#define BFR_OVERFLOW 11
|
||
#define CANCEL_ERR 12
|
||
#define DEV_NOT_FOUND 13
|
||
#define INCOMPATIBLE 14
|
||
#define HDR_NOT_THERE 0x20
|
||
#define NO_SYNC 0x21
|
||
#define DBLK_NOT_THERE 0x22
|
||
#define DAT_CHKSUM_ERR 0x23
|
||
#define WR_VER_ERR 0x25
|
||
#define WR_PR_ON 0x26
|
||
#define HDR_CHKSUM_ERR 0x27
|
||
#define DSK_ID_MISMAT 0x29
|
||
#define BYTE_DEC_ERR 0x2e
|
||
#define DOS_MISMATCH 0x73
|
||
|
||
#endif
|
||
/*
|
||
GEOS structs
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
/*
|
||
apart from initializing data, structures below can be used to
|
||
speed up access to data and let cc65 to generate better code
|
||
e.g. if you have menu defined as TopMenu and you want to change the number of
|
||
menu items use:
|
||
((struct menu*)&TopMenu)->number=newNumber;
|
||
This will be translated into single lda/sta pair
|
||
*/
|
||
|
||
#ifndef _GSTRUCT_H
|
||
#define _GSTRUCT_H
|
||
|
||
typedef void (*void_func) (void);
|
||
|
||
struct s_date { /* system date & time */
|
||
char s_year;
|
||
char s_month;
|
||
char s_day;
|
||
char s_hour;
|
||
char s_minutes;
|
||
char s_seconds;
|
||
};
|
||
|
||
struct tr_se { /* track and sector */
|
||
char track;
|
||
char sector;
|
||
};
|
||
|
||
struct fileheader { /* header block (like fileHeader) */
|
||
struct tr_se n_block;
|
||
char icon_desc[3];
|
||
char icon_pic[63];
|
||
char dostype;
|
||
char type;
|
||
char structure;
|
||
unsigned load_address;
|
||
unsigned end_address;
|
||
unsigned exec_address;
|
||
char class_name[19];
|
||
char column_flag;
|
||
char author[63];
|
||
char note[96];
|
||
};
|
||
|
||
#ifdef __GEOS_CBM__
|
||
|
||
struct f_date { /* date in filedesctiptor */
|
||
char f_year;
|
||
char f_month;
|
||
char f_day;
|
||
char f_hour;
|
||
char f_minute;
|
||
};
|
||
|
||
struct filehandle { /* filehandle in directory sectors */
|
||
char dostype; /* or in dirEntryBuf */
|
||
struct tr_se n_block;
|
||
char name[16];
|
||
struct tr_se header;
|
||
char structure;
|
||
char type;
|
||
struct f_date date;
|
||
unsigned size;
|
||
};
|
||
|
||
#else /* #ifdef __GEOS_CBM__ */
|
||
|
||
struct f_date { /* date in filedesctiptor */
|
||
unsigned f_day:5;
|
||
unsigned f_month:4;
|
||
unsigned f_year:7;
|
||
char f_minute;
|
||
char f_hour;
|
||
};
|
||
|
||
struct filehandle { /* filehandle in directory sectors */
|
||
unsigned name_len:4; /* or in dirEntryBuf */
|
||
unsigned structure:4;
|
||
char name[15];
|
||
char type;
|
||
struct tr_se n_block;
|
||
unsigned size;
|
||
char byte_size[3];
|
||
struct f_date date;
|
||
char version;
|
||
char min_version;
|
||
char access;
|
||
struct tr_se header;
|
||
struct f_date mod_date;
|
||
struct tr_se dir_head;
|
||
};
|
||
|
||
#endif /* #ifdef __GEOS_CBM__ */
|
||
|
||
struct pixel { /* describes point */
|
||
unsigned x;
|
||
char y;
|
||
};
|
||
|
||
struct fontdesc { /* describes font */
|
||
char baseline;
|
||
char width;
|
||
char height;
|
||
char *index_tbl;
|
||
char *data_ptr;
|
||
};
|
||
|
||
struct window { /* describes screen region */
|
||
char top;
|
||
char bot;
|
||
unsigned left;
|
||
unsigned right;
|
||
};
|
||
|
||
struct VLIR_info { /* VLIR information */
|
||
char curRecord; /* currently only used in VLIR */
|
||
char usedRecords; /* as system info (curRecord is mainly of your interest */
|
||
char fileWritten;
|
||
unsigned fileSize;
|
||
};
|
||
|
||
struct process { /* process info, declare table of that type */
|
||
unsigned pointer; /* (like: struct process proctab[2]=... */
|
||
unsigned jiffies; /* last entry HAVE TO BE {0,0} */
|
||
};
|
||
|
||
struct iconpic { /* icon/encoded bitmap description */
|
||
char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */
|
||
char x; /* position in cards (*8 pixels) */
|
||
char y;
|
||
char width; /* in cards */
|
||
char heigth; /* in lines (pixels) */
|
||
};
|
||
|
||
struct icondef { /* icon definition for DoIcons */
|
||
char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */
|
||
char x; /* position in cards (*8 pixels) */
|
||
char y;
|
||
char width; /* of icon (in cards) */
|
||
char heigth; /* of icon in lines (pixels) */
|
||
unsigned proc_ptr; /* pointer to function handling that icon */
|
||
};
|
||
|
||
struct icontab {
|
||
char number; /* number of declared icons */
|
||
struct pixel mousepos; /* position of mouse after DoIcons */
|
||
struct icondef tab[]; /* table of size declared by icontab.number */
|
||
};
|
||
|
||
struct menuitem {
|
||
char *name;
|
||
char type;
|
||
void *rest; /* may be ptr to function, or ptr to struct menu (submenu) */
|
||
};
|
||
|
||
struct menu {
|
||
struct window size;
|
||
char number;
|
||
struct menuitem items[];
|
||
};
|
||
|
||
struct inittab { /* use struct inittab mytab[n] for initram */
|
||
unsigned ptr; /* ptr to 1st byte */
|
||
char number; /* number of following bytes */
|
||
char values[]; /* actual string of bytes */
|
||
};
|
||
|
||
#endif
|
||
/*
|
||
GEOS system functions
|
||
|
||
by Maciej 'YTM/Elysium' Witkowiak
|
||
*/
|
||
|
||
#ifndef _GSYS_H
|
||
#define _GSYS_H
|
||
|
||
void FirstInit(void);
|
||
void InitForIO(void);
|
||
void DoneWithIO(void);
|
||
void MainLoop(void);
|
||
void EnterDeskTop(void);
|
||
void ToBASIC(void);
|
||
void Panic(void);
|
||
|
||
void __fastcall__ CallRoutine(void *myRoutine);
|
||
|
||
unsigned GetSerialNumber(void);
|
||
char GetRandom(void);
|
||
|
||
void __fastcall__ SetDevice(char newdev);
|
||
|
||
char get_ostype(void);
|
||
|
||
/* possible return values of get_ostype, machine and version flags will
|
||
be combined with OR */
|
||
/* machine flags */
|
||
#define GEOS64 0x00
|
||
#define GEOS4 0x04 /* plus4 geos is not or'ed with version */
|
||
#define GEOS128 0x80
|
||
/* version flags */
|
||
#define GEOS_V10 0x10
|
||
#define GEOS_V11 0x11
|
||
#define GEOS_V12 0x12 /* ??? not sure */
|
||
#define GEOS_V20 0x20
|
||
#define WHEELS 0x40 /* only Wheels? */
|
||
|
||
char get_tv(void);
|
||
|
||
/* possible return values of get_tv, these flags will be combined
|
||
note that columns state can be changed during runtime and get_tv
|
||
always returns the current state */
|
||
#define COLUMNS40 0x00
|
||
#define COLUMNS80 0x01
|
||
#define TV_PAL 0x00
|
||
#define TV_NTSC 0x80
|
||
|
||
#endif
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* utsname.h */
|
||
/* */
|
||
/* Return system information */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003 Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _UTSNAME_H
|
||
#define _UTSNAME_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/*
|
||
** Suggested field contents:
|
||
**
|
||
** sysname
|
||
** Should contain the name of the underlying operating system, or "cc65"
|
||
** if the program runs on the bare machine.
|
||
**
|
||
** nodename
|
||
** Is empty or may be defined by the implementor.
|
||
**
|
||
** release
|
||
** Contains the operating system release or the major/minor cc65 version
|
||
** if sysname contains "cc65".
|
||
**
|
||
** version
|
||
** Contains the operating system version or the cc65 patch version if
|
||
** sysname contains "cc65".
|
||
**
|
||
** machine
|
||
** Contains the complete name of the machine, like "Commodore 64",
|
||
** "Oric Atmos" or similar.
|
||
**
|
||
** Beware: The library sources written in assembler have knowledge about this
|
||
** struct!
|
||
*/
|
||
struct utsname {
|
||
char sysname[17];
|
||
char nodename[9];
|
||
char release[9];
|
||
char version[9];
|
||
char machine[25];
|
||
};
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
int __fastcall__ uname (struct utsname* buf);
|
||
/* Return system information */
|
||
|
||
|
||
|
||
/* End of utsname.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* types.h */
|
||
/* */
|
||
/* Primitive system data types for cc65 */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2003 Ullrich von Bassewitz */
|
||
/* R<>merstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _TYPES_H
|
||
#define _TYPES_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* off_t is also defined in unistd.h */
|
||
#ifndef _HAVE_off_t
|
||
#define _HAVE_off_t
|
||
typedef long int off_t;
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* End of types.h */
|
||
#endif
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* */
|
||
/* joy-kernel.h */
|
||
/* */
|
||
/* Internally used joystick functions */
|
||
/* */
|
||
/* */
|
||
/* */
|
||
/* (C) 2002-2006, Ullrich von Bassewitz */
|
||
/* Roemerstrasse 52 */
|
||
/* D-70794 Filderstadt */
|
||
/* EMail: uz@cc65.org */
|
||
/* */
|
||
/* */
|
||
/* This software is provided 'as-is', without any expressed or implied */
|
||
/* warranty. In no event will the authors be held liable for any damages */
|
||
/* arising from the use of this software. */
|
||
/* */
|
||
/* Permission is granted to anyone to use this software for any purpose, */
|
||
/* including commercial applications, and to alter it and redistribute it */
|
||
/* freely, subject to the following restrictions: */
|
||
/* */
|
||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||
/* claim that you wrote the original software. If you use this software */
|
||
/* in a product, an acknowledgment in the product documentation would be */
|
||
/* appreciated but is not required. */
|
||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
/* be misrepresented as being the original software. */
|
||
/* 3. This notice may not be removed or altered from any source */
|
||
/* distribution. */
|
||
/* */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
#ifndef _JOY_KERNEL_H
|
||
#define _JOY_KERNEL_H
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Data */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
/* A structure that describes the header of a joystick driver loaded into
|
||
** memory.
|
||
*/
|
||
typedef struct {
|
||
|
||
/* Driver header */
|
||
char id[3]; /* Contains 0x6a, 0x6f, 0x79 ("joy") */
|
||
unsigned char version; /* Interface version */
|
||
|
||
/* Bitmasks for the joystick states. See joystick.h for indices */
|
||
unsigned char masks[8];
|
||
|
||
/* Jump vectors. Note that these are not C callable */
|
||
void* install; /* INSTALL routine */
|
||
void* uninstall; /* UNINSTALL routine */
|
||
void* count; /* COUNT routine */
|
||
void* read; /* READ routine */
|
||
void* irq; /* IRQ routine */
|
||
|
||
} joy_drv_header;
|
||
|
||
|
||
|
||
/* JOY kernel variables */
|
||
extern joy_drv_header* joy_drv; /* Pointer to driver */
|
||
|
||
|
||
|
||
/*****************************************************************************/
|
||
/* Code */
|
||
/*****************************************************************************/
|
||
|
||
|
||
|
||
void joy_clear_ptr (void);
|
||
/* Clear the joy_drv pointer */
|
||
|
||
|
||
|
||
/* End of joy-kernel.h */
|
||
#endif
|
||
|
||
|
||
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* time.inc */
|
||
;/* */
|
||
;/* Date and time */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2009 Ullrich von Bassewitz */
|
||
;/* Roemerstrasse 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Struct tm - must match the struct defined in time.h
|
||
|
||
.struct tm
|
||
tm_sec .word
|
||
tm_min .word
|
||
tm_hour .word
|
||
tm_mday .word
|
||
tm_mon .word
|
||
tm_year .word
|
||
tm_wday .word
|
||
tm_yday .word
|
||
tm_isdst .word
|
||
.endstruct
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Exported functions
|
||
|
||
.global __systime
|
||
.global _mktime
|
||
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Atari System Equates
|
||
; by Freddy Offenga, Christian Groessler, and Christian Krueger
|
||
;
|
||
; References:
|
||
; - Atari 400/800 OS rev.B source code, Atari 1979
|
||
; - Atari OS manual - XL addendum
|
||
; - Atari XL/XE rev.2 source code, Atari 1984
|
||
; - Mapping the Atari - revised edition, Ian Chadwick 1985
|
||
;
|
||
; ##old## old OS rev.B label - moved or deleted
|
||
; ##1200xl## new label introduced in 1200XL OS (rev.10/11)
|
||
; ##rev2## new label introduced in XL/XE OS rev.2
|
||
;-------------------------------------------------------------------------
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Configuration Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
MAXDEV = 33 ;offset to last possible entry of HATABS
|
||
IOCBSZ = 16 ;length of IOCB
|
||
|
||
SEIOCB = 0*IOCBSZ ;##rev2## screen editor IOCB index
|
||
MAXIOC = 8*IOCBSZ ;first invalid IOCB index
|
||
|
||
DSCTSZ = 128 ;##rev2## disk sector size
|
||
|
||
LEDGE = 2 ;left edge
|
||
REDGE = 39 ;right edge
|
||
|
||
INIML = $0700 ;##rev2## initial MEMLO
|
||
|
||
ICSORG = $CC00 ;##rev2## international character set origin
|
||
DCSORG = $E000 ;##rev2## domestic character set origin
|
||
|
||
; IOCB Command Code Equates
|
||
|
||
OPEN = $03 ;open
|
||
GETREC = $05 ;get record
|
||
GETCHR = $07 ;get character(s)
|
||
PUTREC = $09 ;put record
|
||
PUTCHR = $0B ;put character(s)
|
||
CLOSE = $0C ;close
|
||
STATIS = $0D ;status
|
||
SPECIL = $0E ;special
|
||
|
||
; DOS IOCB command codes
|
||
|
||
RENAME = $20 ;rename disk file
|
||
DELETE = $21 ;delete disk file
|
||
LOCKFL = $23 ;lock file (set to read-only)
|
||
UNLOCK = $24 ;unlock file
|
||
POINT = $25 ;point sector
|
||
NOTE = $26 ;note sector
|
||
GETFL = $27 ;get file length
|
||
CHDIR_MYDOS = $29 ;change directory (MyDOS)
|
||
MKDIR = $2A ;make directory (MyDOS/SpartaDOS)
|
||
RMDIR = $2B ;remove directory (SpartaDOS)
|
||
CHDIR_SPDOS = $2C ;change directory (SpartaDOS)
|
||
FORMAT = $FE ;format
|
||
|
||
GETCWD = $30 ;get current directory (MyDOS/SpartaDOS)
|
||
|
||
; Special Entry Command Equates
|
||
; DOS Commands
|
||
; Command line table, Index values for (DOSVEC),Y -- COMTAB
|
||
; Compatible with OS/A+, DOS XL and SpartaDOS
|
||
|
||
COMTAB = 0 ;DOS entry jump vector
|
||
ZCRNAME = 3 ;file name crunch routine jump vector
|
||
BUFOFF = 10 ;next parameter buffer offset
|
||
COMFNAM = 33 ;destination buffer for crunch routine
|
||
LBUF = 63 ;command line input buffer
|
||
|
||
; Screen IOCB Commands
|
||
|
||
DRAWLN = $11 ;draw line
|
||
FILLIN = $12 ;draw line with right fill
|
||
|
||
; ICAX1 Auxiliary Byte 1 Equates
|
||
|
||
APPEND = $01 ;open write append (D:)
|
||
DIRECT = $02 ;open for directory access (D:)
|
||
OPNIN = $04 ;open for input (all devices)
|
||
OPNOT = $08 ;open for output (all devices)
|
||
MXDMOD = $10 ;open for mixed mode (E:, S:)
|
||
INSCLR = $20 ;open for input without clearing screen
|
||
|
||
; Device Code Equates
|
||
|
||
CASSET = 'C' ;cassette
|
||
DISK = 'D' ;disk
|
||
SCREDT = 'E' ;screen editor
|
||
KBD = 'K' ;keyboard
|
||
PRINTR = 'P' ;printer
|
||
DISPLY = 'S' ;screen display
|
||
|
||
; SIO Command Code Equates
|
||
|
||
SIO_FORMAT = $21 ;format disk (default density)
|
||
SIO_FORMATS = $22 ;1050: format medium density
|
||
SIO_CONFIG = $44 ;configure drive
|
||
SIO_CONFIGSF = $4B ;slow/fast configure drive??
|
||
SIO_RDPERCOM = $4E ;read PERCOM block (XF551)
|
||
SIO_WRPERCOM = $4F ;write PERCOM block (XF551)
|
||
SIO_WRITE = $50 ;write sector
|
||
SIO_READ = $52 ;read sector
|
||
SIO_STAT = $53 ;get status information
|
||
SIO_VERIFY = $56 ;verify sector
|
||
SIO_WRITEV = $57 ;write sector with verify
|
||
SIO_WRITETRK = $60 ;write track (Speedy)
|
||
SIO_READTRK = $62 ;read track (Speedy)
|
||
|
||
; SIO Status Code (DSTATS)
|
||
; Input: data direction
|
||
; Bit #7 - W (write operation)
|
||
; #6 - R (read operation)
|
||
; Output: status code
|
||
; $01 (001) -- OPERATION COMPLETE (NO ERRORS)
|
||
; $8A (138) -- DEVICE TIMEOUT (DOESN'T RESPOND)
|
||
; $8B (139) -- DEVICE NAK
|
||
; $8C (140) -- SERIAL BUS INPUT FRAMING ERROR
|
||
; $8E (142) -- SERIAL BUS DATA FRAME OVERRUN ERROR
|
||
; $8F (143) -- SERIAL BUS DATA FRAME CHECKSUM ERROR
|
||
; $90 (144) -- DEVICE DONE ERROR
|
||
|
||
; Character and Key Code Equates
|
||
|
||
CLS = $7D ;##rev2## clear screen
|
||
EOL = $9B ;end of line (RETURN)
|
||
|
||
HELP = $11 ;##1200xl## key code for HELP
|
||
CNTLF1 = $83 ;##1200xl## key code for CTRL-F1
|
||
CNTLF2 = $84 ;##1200xl## key code for CTRL-F2
|
||
CNTLF3 = $93 ;##1200xl## key code for CTRL-F3
|
||
CNTLF4 = $94 ;##1200xl## key code for CTRL-F4
|
||
CNTL1 = $9F ;##1200xl## key code for CTRL-1
|
||
|
||
; Status Code Equates
|
||
|
||
SUCCES = 1 ;($01) succesful operation
|
||
|
||
BRKABT = 128 ;($80) BREAK key abort
|
||
PRVOPN = 129 ;($81) IOCB already open error
|
||
NONDEV = 130 ;($82) nonexistent device error
|
||
WRONLY = 131 ;($83) IOCB opened for write only error
|
||
NVALID = 132 ;($84) invalid command error
|
||
NOTOPN = 133 ;($85) device/file not open error
|
||
BADIOC = 134 ;($86) invalid IOCB index error
|
||
RDONLY = 135 ;($87) IOCB opened for read only error
|
||
EOFERR = 136 ;($88) end of file error
|
||
TRNRCD = 137 ;($89) truncated record error
|
||
TIMOUT = 138 ;($8A) peripheral device timeout error
|
||
DNACK = 139 ;($8B) device does not acknowledge command
|
||
FRMERR = 140 ;($8C) serial bus framing error
|
||
CRSROR = 141 ;($8D) cursor overrange error
|
||
OVRRUN = 142 ;($8E) serial bus data overrun error
|
||
CHKERR = 143 ;($8F) serial bus checksum error
|
||
DERROR = 144 ;($90) device done (operation incomplete)
|
||
BADMOD = 145 ;($91) bad screen mode number error
|
||
FNCNOT = 146 ;($92) function not implemented in handler
|
||
SCRMEM = 147 ;($93) insufficient memory for screen mode
|
||
|
||
DSKFMT = 148 ;($94) SpartaDOS: unrecognized disk format
|
||
INCVER = 149 ;($95) SpartaDOS: disk was made with incompat. version
|
||
DIRNFD = 150 ;($96) SpartaDOS: directory not found
|
||
FEXIST = 151 ;($97) SpartaDOS: file exists
|
||
NOTBIN = 152 ;($98) SpartaDOS: file not binary
|
||
LSYMND = 154 ;($9A) SDX: loader symbol not defined
|
||
BADPRM = 156 ;($9C) SDX: bad parameter
|
||
OUTOFM = 158 ;($9E) SDX: out of memory
|
||
INVDEV = 160 ;($A0) invalid device number
|
||
TMOF = 161 ;($A1) too many open files
|
||
DSKFLL = 162 ;($A2) disk full
|
||
FATLIO = 163 ;($A3) fatal I/O error
|
||
FNMSMT = 164 ;($A4) internal file number mismatch
|
||
INVFNM = 165 ;($A5) invalid file name
|
||
PDLERR = 166 ;($A6) point data length error
|
||
EPERM = 167 ;($A7) permission denied
|
||
DINVCM = 168 ;($A8) command invalid for disk
|
||
DIRFLL = 169 ;($A9) directory full
|
||
FNTFND = 170 ;($AA) file not found
|
||
PNTINV = 171 ;($AB) point invalid
|
||
BADDSK = 173 ;($AD) bad disk
|
||
INCFMT = 176 ;($B0) DOS 3: incompatible file system
|
||
XNTBIN = 180 ;($B4) XDOS: file not binary
|
||
|
||
; DCB Device Bus Equates
|
||
|
||
DISKID = $31 ;##rev2## disk bus ID
|
||
PDEVN = $40 ;##rev2## printer bus ID
|
||
CASET = $60 ;##rev2## cassette bus ID
|
||
|
||
; Bus Command Equates
|
||
|
||
FOMAT = '!' ;##rev2## format command
|
||
PUTSEC = 'P' ;##rev2## put sector command
|
||
READ = 'R' ;##rev2## read command
|
||
STATC = 'S' ;##rev2## status command
|
||
WRITE = 'W' ;##rev2## write command
|
||
|
||
; Command Auxiliary Byte Equates
|
||
|
||
DOUBLE = 'D' ;##rev2## print 20 characters double width
|
||
NORMAL = 'N' ;##rev2## print 40 characters normally
|
||
PLOT = 'P' ;##rev2## plot
|
||
SIDWAY = 'S' ;##rev2## print 16 characters sideways
|
||
|
||
; Bus Response Equates
|
||
|
||
ACK = 'A' ;##rev2## device acknowledged
|
||
COMPLT = 'C' ;##rev2## device succesfully completed operation
|
||
ERROR = 'E' ;##rev2## device incurred error
|
||
NACK = 'N' ;##rev2## device did not understand
|
||
|
||
; Floating Point Miscellaneous Equates
|
||
|
||
FPREC = 6 ;precision
|
||
|
||
FMPREC = FPREC-1 ;##rev2## length of mantissa
|
||
|
||
; Cassette Record Type Equates
|
||
|
||
HDR = $FB ;##rev2## header
|
||
DTA = $FC ;##rev2## data record
|
||
DT1 = $FA ;##rev2## last data record
|
||
EOT = $FE ;##rev2## end of tape (file)
|
||
|
||
TONE1 = 2 ;##rev2## record
|
||
TONE2 = 1 ;##rev2## playback
|
||
|
||
; Cassette Timing Equates
|
||
|
||
WLEADN = 1152 ;##rev2## NTSC 19.2 second WRITE file leader
|
||
RLEADN = 576 ;##rev2## NTSC 9.6 second READ file leader
|
||
WIRGLN = 180 ;##rev2## NTSC 3.0 second WRITE IRG
|
||
RIRGLN = 120 ;##rev2## NTSC 2.0 second READ IRG
|
||
WSIRGN = 15 ;##rev2## NTSC 0.25 second WRITE short IRG
|
||
RSIRGN = 10 ;##rev2## NTSC 0.16 second READ short IRG
|
||
BEEPNN = 30 ;##rev2## NTSC 0.5 second beep duration
|
||
BEEPFN = 10 ;##rev2## NTSC 0.16 seconrd beep duration
|
||
|
||
WLEADP = 960 ;##rev2## PAL 19.2 second WRITE file leader
|
||
RLEADP = 480 ;##rev2## PAL 9.6 second READ file leader
|
||
WIRGLP = 150 ;##rev2## PAL 3.0 second WRITE IRG
|
||
RIRGLP = 100 ;##rev2## PAL 2.0 second READ IRG
|
||
WSIRGP = 13 ;##rev2## PAL 0.25 second WRITE short IRG
|
||
RSIRGP = 8 ;##rev2## PAL 0.16 second READ short IRG
|
||
BEEPNP = 25 ;##rev2## PAL 0.5 second beep duration
|
||
BEEPFP = 8 ;##rev2## PAL 0.16 seconrd beep duration
|
||
|
||
WIRGHI = 0 ;##rev2## high WRITE IRG
|
||
RIRGHI = 0 ;##rev2## high READ IRG
|
||
|
||
; Power-up Validation Byte Value Equates
|
||
|
||
PUPVL1 = $5C ;##rev2## power-up validation value 1
|
||
PUPVL2 = $93 ;##rev2## power-up validation value 2
|
||
PUPVL3 = $25 ;##rev2## power-up validation value 3
|
||
|
||
; Relocating Loader Miscellaneous Equates
|
||
|
||
DATAER = 156 ;##rev2## end of record appears before END
|
||
MEMERR = 157 ;##rev2## memory insufficient for load error
|
||
|
||
; Miscellaneous Equates
|
||
|
||
IOCFRE = $FF ;IOCB free indication
|
||
|
||
B19200 = $0028 ;##rev2## 19200 baud POKEY counter value
|
||
B00600 = $05CC ;##rev2## 600 baud POKEY counter value
|
||
|
||
HITONE = $05 ;##rev2## FSK high freq. POKEY counter value
|
||
LOTONE = $07 ;##rev2## FSK low freq. POKEY counter value
|
||
|
||
NCOMLO = $34 ;##rev2## PIA lower NOT COMMAND line command
|
||
NCOMHI = $3C ;##rev2## PIA raise NOT COMMAND line command
|
||
|
||
MOTRGO = $34 ;##rev2## PIA cassette motor ON command
|
||
MOTRST = $3C ;##rev2## PIA cassette motor OFF command
|
||
|
||
NODAT = $00 ;##rev2## SIO immediate operation
|
||
GETDAT = $40 ;##rev2## SIO read data frame
|
||
PUTDAT = $80 ;##rev2## SIO write data frame
|
||
|
||
CRETRI = 13 ;##rev2## number of command frame retries
|
||
DRETRI = 1 ;##rev2## number of device retries
|
||
CTIM = 2 ;##rev2## command frame ACK timeout
|
||
|
||
NBUFSZ = 40 ;##rev2## print normal buffer size
|
||
DBUFSZ = 20 ;##rev2## print double buffer size
|
||
SBUFSZ = 29 ;##rev2## print sideways buffer size
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Page Zero Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
LINZBS = $00 ;LINBUG RAM (WILL BE REPLACED BY MONITOR RAM)
|
||
LNFLG = $00 ;##1200xl## 1-byte LNBUG flag (0 = not LNBUG)
|
||
NGFLAG = $01 ;##1200xl## 1-byte memory status (0 = failure)
|
||
|
||
; Not Cleared
|
||
|
||
CASINI = $02 ;CASSETTE INIT LOCATION
|
||
RAMLO = $04 ;RAM POINTER FOR MEMORY TEST
|
||
TRAMSZ = $06 ;TEMPORARY REGISTER FOR RAM SIZE
|
||
;TSTDAT = $07 ;##old## RAM TEST DATA REGISTER
|
||
CMCMD = $07 ;##rev2## 1-byte command communications
|
||
|
||
; Cleared upon Coldstart only
|
||
|
||
WARMST = $08 ;WARM START FLAG
|
||
BOOTQ = $09 ;SUCCESSFUL BOOT FLAG
|
||
DOSVEC = $0A ;DISK SOFTWARE START VECTOR
|
||
DOSINI = $0C ;DISK SOFTWARE INIT ADDRESS
|
||
APPMHI = $0E ;APPLICATIONS MEMORY HI LIMIT
|
||
|
||
; Cleared upon Coldstart or Warmstart
|
||
|
||
INTZBS = $10 ;INTERRUPT HANDLER
|
||
|
||
POKMSK = $10 ;SYSTEM MASK FOR POKEY IRQ ENABLE (shadow of IRQEN)
|
||
BRKKEY = $11 ;BREAK KEY FLAG
|
||
RTCLOK = $12 ;REAL TIME CLOCK (IN 16 MSEC UNITS>
|
||
BUFADR = $15 ;INDIRECT BUFFER ADDRESS REGISTER
|
||
ICCOMT = $17 ;COMMAND FOR VECTOR
|
||
DSKFMS = $18 ;DISK FILE MANAGER POINTER
|
||
DSKUTL = $1A ;DISK UTILITIES POINTER
|
||
ABUFPT = $1C ;##1200xl## 4-byte ACMI buffer pointer area
|
||
|
||
;PTIMOT = $1C ;##old## PRINTER TIME OUT REGISTER
|
||
;PBPNT = $1D ;##old## PRINT BUFFER POINTER
|
||
;PBUFSZ = $1E ;##old## PRINT BUFFER SIZE
|
||
;PTEMP = $1F ;##old## TEMPORARY REGISTER
|
||
|
||
ZIOCB = $20 ;ZERO PAGE I/O CONTROL BLOCK
|
||
IOCBAS = $20 ;16-byte page zero IOCB
|
||
ICHIDZ = $20 ;HANDLER INDEX NUMBER (FF = IOCB FREE)
|
||
ICDNOZ = $21 ;DEVICE NUMBER (DRIVE NUMBER)
|
||
ICCOMZ = $22 ;COMMAND CODE
|
||
ICSTAZ = $23 ;STATUS OF LAST IOCB ACTION
|
||
ICBALZ = $24 ;BUFFER ADDRESS LOW BYTE
|
||
ICBAHZ = $25 ;1-byte high buffer address
|
||
ICPTLZ = $26 ;PUT BYTE ROUTINE ADDRESS -1
|
||
ICPTHZ = $27 ;1-byte high PUT-BYTE routine address
|
||
ICBLLZ = $28 ;BUFFER LENGTH LOW BYTE
|
||
ICBLHZ = $29 ;1-byte high buffer length
|
||
ICAX1Z = $2A ;AUXILIARY INFORMATION FIRST BYTE
|
||
ICAX2Z = $2B ;1-byte second auxiliary information
|
||
ICSPRZ = $2C ;4-byte spares
|
||
|
||
ENTVEC = $2C ;##rev2## 2-byte (not used)
|
||
ICIDNO = $2E ;IOCB NUMBER X 16
|
||
CIOCHR = $2F ;CHARACTER BYTE FOR CURRENT OPERATION
|
||
|
||
STATUS = $30 ;INTERNAL STATUS STORAGE
|
||
CHKSUM = $31 ;CHECKSUM (SINGLE BYTE SUM WITH CARRY)
|
||
BUFRLO = $32 ;POINTER TO DATA BUFFER (LO BYTE)
|
||
BUFRHI = $33 ;POINTER TO DATA BUFFER (HI BYTE)
|
||
BFENLO = $34 ;NEXT BYTE PAST END OF THE DATA BUFFER LO
|
||
BFENHI = $35 ;NEXT BYTE PAST END OF THE DATA BUFFER HI
|
||
;CRETRY = $36 ;##old## NUMBER OF COMMAND FRAME RETRIES
|
||
;DRETRY = $37 ;##old## NUMBER OF DEVICE RETRIES
|
||
LTEMP = $36 ;##1200xl## 2-byte loader temporary
|
||
BUFRFL = $38 ;DATA BUFFER FULL FLAG
|
||
RECVDN = $39 ;RECEIVE DONE FLAG
|
||
XMTDON = $3A ;TRANSMISSION DONE FLAG
|
||
CHKSNT = $3B ;CHECKSUM SENT FLAG
|
||
NOCKSM = $3C ;NO CHECKSUM FOLLOWS DATA FLAG
|
||
BPTR = $3D ;1-byte cassette buffer pointer
|
||
FTYPE = $3E ;1-byte cassette IRG type
|
||
FEOF = $3F ;1-byte cassette EOF flag (0 = quiet)
|
||
FREQ = $40 ;1-byte cassette beep counter
|
||
SOUNDR = $41 ;NOISY I/0 FLAG. (ZERO IS QUIET)
|
||
|
||
CRITIC = $42 ;DEFINES CRITICAL SECTION (CRITICAL IF NON-Z)
|
||
|
||
FMSZPG = $43 ;DISK FILE MANAGER SYSTEM ZERO PAGE
|
||
|
||
;CKEY = $4A ;##old## FLAG SET WHEN GAME START PRESSED
|
||
ZCHAIN = $4A ;##1200xl## 2-byte handler linkage chain pointer
|
||
;CASSBT = $4B ;##old## CASSETTE BOOT FLAG
|
||
DSTAT = $4C ;DISPLAY STATUS
|
||
ATRACT = $4D ;ATRACT FLAG
|
||
DRKMSK = $4E ;DARK ATRACT MASK
|
||
COLRSH = $4F ;ATRACT COLOR SHIFTER (EOR'ED WITH PLAYFIELD
|
||
|
||
|
||
TMPCHR = $50 ;1-byte temporary character
|
||
HOLD1 = $51 ;1-byte temporary
|
||
LMARGN = $52 ;left margin (normally 2, cc65 C startup code sets it to 0)
|
||
RMARGN = $53 ;right margin (normally 39 if no XEP80 is used)
|
||
ROWCRS = $54 ;1-byte cursor row
|
||
COLCRS = $55 ;2-byte cursor column
|
||
DINDEX = $57 ;1-byte display mode
|
||
SAVMSC = $58 ;2-byte saved memory scan counter
|
||
OLDROW = $5A ;1-byte prior row
|
||
OLDCOL = $5B ;2-byte prior column
|
||
OLDCHR = $5D ;DATA UNDER CURSOR
|
||
OLDADR = $5E ;2-byte saved cursor memory address
|
||
FKDEF = $60 ;##1200xl## 2-byte function key definition table
|
||
;NEWROW = $60 ;##old## POINT DRAW GOES TO
|
||
;NEWCOL = $61 ;##old##
|
||
PALNTS = $62 ;##1200xl## 1-byte PAL/NTSC indicator (0 = NTSC)
|
||
LOGCOL = $63 ;POINTS AT COLUMN IN LOGICAL LINE
|
||
ADRESS = $64 ;2-byte temporary address
|
||
|
||
MLTTMP = $66 ;1-byte temporary
|
||
OPNTMP = $66 ;FIRST BYTE IS USED IN OPEN AS TEMP
|
||
TOADR = $66 ;##rev2## 2-byte destination address
|
||
|
||
SAVADR = $68 ;2-byte saved address
|
||
FRMADR = $68 ;##rev2## 2-byte source address
|
||
|
||
RAMTOP = $6A ;RAM SIZE DEFINED BY POWER ON LOGIC
|
||
BUFCNT = $6B ;BUFFER COUNT
|
||
BUFSTR = $6C ;EDITOR GETCH POINTER
|
||
BITMSK = $6E ;BIT MASK
|
||
SHFAMT = $6F ;1-byte shift amount for pixel justifucation
|
||
ROWAC = $70 ;2-byte draw working row
|
||
COLAC = $72 ;2-byte draw working column
|
||
ENDPT = $74 ;2-byte end point
|
||
DELTAR = $76 ;1-byte row difference
|
||
DELTAC = $77 ;2-byte column difference
|
||
KEYDEF = $79 ;##1200xl## 2-byte key definition table address
|
||
;ROWINC = $79 ;##old##
|
||
;COLINC = $7A ;##old##
|
||
SWPFLG = $7B ;NON-0 1F TXT AND REGULAR RAM IS SWAPPED
|
||
HOLDCH = $7C ;CH IS MOVED HERE IN KGETCH BEFORE CNTL & SH
|
||
INSDAT = $7D ;1-byte temporary
|
||
COUNTR = $7E ;2-byte draw iteration count
|
||
|
||
; Floating Point Package Page Zero Address Equates
|
||
|
||
FR0 = $D4 ;6-byte register 0
|
||
FR0M = $D5 ;##rev2## 5-byte register 0 mantissa
|
||
QTEMP = $D9 ;##rev2## 1-byte temporary
|
||
|
||
FRE = $DA ;6-byte (internal) register E
|
||
|
||
FR1 = $E0 ;FP REG1
|
||
FR1M = $E1 ;##rev2## 5-byte register 1 mantissa
|
||
|
||
FR2 = $E6 ;6-byte (internal) register 2
|
||
|
||
FRX = $EC ;1-byte temporary
|
||
|
||
EEXP = $ED ;VALUE OF E
|
||
|
||
FRSIGN = $EE ;##rev2## 1-byte floating point sign
|
||
NSIGN = $EE ;SIGN OF #
|
||
|
||
PLYCNT = $EF ;##rev2## 1-byte polynomial degree
|
||
ESIGN = $EF ;SIGN OF EXPONENT
|
||
|
||
SGNFLG = $F0 ;##rev2## 1-byte sign flag
|
||
FCHRFLG = $F0 ;1ST CHAR FLAG
|
||
|
||
XFMFLG = $F1 ;##rev2## 1-byte transform flag
|
||
DIGRT = $F1 ;# OF DIGITS RIGHT OF DECIMAL
|
||
|
||
CIX = $F2 ;CURRENT INPUT INDEX
|
||
INBUFF = $F3 ;POINTS TO USER'S LINE INPUT BUFFER
|
||
|
||
ZTEMP1 = $F5 ;2-byte temporary
|
||
ZTEMP4 = $F7 ;2-byte temporary
|
||
ZTEMP3 = $F9 ;2-byte temporary
|
||
|
||
;DEGFLG = $FB ;##old## same as RADFLG
|
||
;RADFLG = $FB ;##old## 0=RADIANS, 6=DEGREES
|
||
|
||
FLPTR = $FC ;2-byte floating point number pointer
|
||
FPTR2 = $FE ;2-byte floating point number pointer
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Page Two Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
INTABS = $0200 ;INTERRUPT RAM
|
||
|
||
VDSLST = $0200 ;DISPLAY LIST NMI VECTOR
|
||
VPRCED = $0202 ;PROCEED LINE IRQ VECTOR
|
||
VINTER = $0204 ;INTERRUPT LINE IRQ VECTOR
|
||
VBREAK = $0206 ;SOFTWARE BREAK (00) INSTRUCTION IRQ VECTOR
|
||
VKEYBD = $0208 ;POKEY KEYBOARD IRQ VECTOR
|
||
VSERIN = $020A ;POKEY SERIAL INPUT READY IRQ
|
||
VSEROR = $020C ;POKEY SERIAL OUTPUT READY IRQ
|
||
VSEROC = $020E ;POKEY SERIAL OUTPUT COMPLETE IRQ
|
||
VTIMR1 = $0210 ;POKEY TIMER 1 IRQ
|
||
VTIMR2 = $0212 ;POKEY TIMER 2 IRQ
|
||
VTIMR4 = $0214 ;POKEY TIMER 4 IRQ
|
||
VIMIRQ = $0216 ;IMMEDIATE IRQ VECTOR
|
||
CDTMV1 = $0218 ;COUNT DOWN TIMER 1
|
||
CDTMV2 = $021A ;COUNT DOWN TIMER 2
|
||
CDTMV3 = $021C ;COUNT DOWN TIMER 3
|
||
CDTMV4 = $021E ;COUNT DOWN TIMER 4
|
||
CDTMV5 = $0220 ;COUNT DOWN TIMER 5
|
||
VVBLKI = $0222 ;IMMEDIATE VERTICAL BLANK NMI VECTOR
|
||
VVBLKD = $0224 ;DEFERRED VERTICAL BLANK NMI VECTOR
|
||
CDTMA1 = $0226 ;COUNT DOWN TIMER 1 JSR ADDRESS
|
||
CDTMA2 = $0228 ;COUNT DOWN TIMER 2 JSR ADDRESS
|
||
CDTMF3 = $022A ;COUNT DOWN TIMER 3 FLAG
|
||
SRTIMR = $022B ;SOFTWARE REPEAT TIMER
|
||
CDTMF4 = $022C ;COUNT DOWN TIMER 4 FLAG
|
||
INTEMP = $022D ;IAN'S TEMP
|
||
CDTMF5 = $022E ;COUNT DOWN TIMER FLAG 5
|
||
SDMCTL = $022F ;SAVE DMACTL REGISTER
|
||
SDLSTL = $0230 ;SAVE DISPLAY LIST LOW BYTE
|
||
SDLSTH = $0231 ;SAVE DISPLAY LIST HI BYTE
|
||
SSKCTL = $0232 ;SKCTL REGISTER RAM
|
||
LCOUNT = $0233 ;##1200xl## 1-byte relocating loader record
|
||
LPENH = $0234 ;LIGHT PEN HORIZONTAL VALUE
|
||
LPENV = $0235 ;LIGHT PEN VERTICAL VALUE
|
||
BRKKY = $0236 ;BREAK KEY VECTOR
|
||
;RELADR = $0238 ;##1200xl## 2-byte relocatable loader address
|
||
VPIRQ = $0238 ;##rev2## 2-byte parallel device IRQ vector
|
||
CDEVIC = $023A ;COMMAND FRAME BUFFER - DEVICE
|
||
CCOMND = $023B ;COMMAND
|
||
CAUX1 = $023C ;COMMAND AUX BYTE 1
|
||
CAUX2 = $023D ;COMMAND AUX BYTE 2
|
||
|
||
TEMP = $023E ;TEMPORARY RAM CELL
|
||
|
||
ERRFLG = $023F ;ERROR FLAG - ANY DEVICE ERROR EXCEPT TIME OUT
|
||
|
||
DFLAGS = $0240 ;DISK FLAGS FROM SECTOR ONE
|
||
DBSECT = $0241 ;NUMBER OF DISK BOOT SECTORS
|
||
BOOTAD = $0242 ;ADDRESS WHERE DISK BOOT LOADER WILL BE PUT
|
||
COLDST = $0244 ;COLDSTART FLAG (1=IN MIDDLE OF COLDSTART>
|
||
RECLEN = $0245 ;##1200xl## 1-byte relocating loader record length
|
||
DSKTIM = $0246 ;DISK TIME OUT REGISTER
|
||
;LINBUF = $0247 ;##old## CHAR LINE BUFFER
|
||
PDVMSK = $0247 ;##rev2## 1-byte parallel device selection mask
|
||
SHPDVS = $0248 ;##rev2## 1-byte PDVS (parallel device select)
|
||
PDIMSK = $0249 ;##rev2## 1-byte parallel device IRQ selection
|
||
RELADR = $024A ;##rev2## 2-byte relocating loader relative adr.
|
||
PPTMPA = $024C ;##rev2## 1-byte parallel device handler temporary
|
||
PPTMPX = $024D ;##rev2## 1-byte parallel device handler temporary
|
||
|
||
CHSALT = $026B ;##1200xl## 1-byte character set alternate
|
||
VSFLAG = $026C ;##1200xl## 1-byte fine vertical scroll count
|
||
KEYDIS = $026D ;##1200xl## 1-byte keyboard disable
|
||
FINE = $026E ;##1200xl## 1-byte fine scrolling mode
|
||
GPRIOR = $026F ;GLOBAL PRIORITY CELL
|
||
|
||
PADDL0 = $0270 ;1-byte potentiometer 0
|
||
PADDL1 = $0271 ;1-byte potentiometer 1
|
||
PADDL2 = $0272 ;1-byte potentiometer 2
|
||
PADDL3 = $0273 ;1-byte potentiometer 3
|
||
PADDL4 = $0274 ;1-byte potentiometer 4
|
||
PADDL5 = $0275 ;1-byte potentiometer 5
|
||
PADDL6 = $0276 ;1-byte potentiometer 6
|
||
PADDL7 = $0277 ;1-byte potentiometer 7
|
||
|
||
STICK0 = $0278 ;1-byte joystick 0
|
||
STICK1 = $0279 ;1-byte joystick 1
|
||
STICK2 = $027A ;1-byte joystick 2
|
||
STICK3 = $027B ;1-byte joystick 3
|
||
|
||
PTRIG0 = $027C ;1-byte paddle trigger 0
|
||
PTRIG1 = $027D ;1-byte paddle trigger 1
|
||
PTRIG2 = $027E ;1-byte paddle trigger 2
|
||
PTRIG3 = $027F ;1-byte paddle trigger 3
|
||
PTRIG4 = $0280 ;1-byte paddle trigger 4
|
||
PTRIG5 = $0281 ;1-byte paddle trigger 5
|
||
PTRIG6 = $0281 ;1-byte paddle trigger 6
|
||
PTRIG7 = $0283 ;1-byte paddle trigger 7
|
||
|
||
STRIG0 = $0284 ;1-byte joystick trigger 0
|
||
STRIG1 = $0285 ;1-byte joystick trigger 1
|
||
STRIG2 = $0286 ;1-byte joystick trigger 2
|
||
STRIG3 = $0287 ;1-byte joystick trigger 3
|
||
|
||
;CSTAT = $0288 ;##old## cassette status register
|
||
HIBYTE = $0288 ;##1200xl## 1-byte relocating loader high byte
|
||
WMODE = $0289 ;1-byte cassette WRITE mode
|
||
BLIM = $028A ;1-byte cassette buffer limit
|
||
IMASK = $028B ;##rev2## (not used)
|
||
JVECK = $028C ;2-byte jump vector or temporary
|
||
NEWADR = $028E ;##1200xl## 2-byte relocating address
|
||
TXTROW = $0290 ;TEXT ROWCRS
|
||
TXTCOL = $0291 ;TEXT COLCRS
|
||
TINDEX = $0293 ;TEXT INDEX
|
||
TXTMSC = $0294 ;FOOLS CONVRT INTO NEW MSC
|
||
TXTOLD = $0296 ;OLDROW & OLDCOL FOR TEXT (AND THEN SOME)
|
||
;TMPX1 = $029C ;##old## 1-byte temporary register
|
||
CRETRY = $029C ;##1200xl## 1-byte number of command frame retries
|
||
HOLD3 = $029D ;1-byte temporary
|
||
SUBTMP = $029E ;1-byte temporary
|
||
HOLD2 = $029F ;1-byte (not used)
|
||
DMASK = $02A0 ;1-byte display (pixel location) mask
|
||
TMPLBT = $02A1 ;1-byte (not used)
|
||
ESCFLG = $02A2 ;ESCAPE FLAG
|
||
TABMAP = $02A3 ;15-byte (120 bit) tab stop bit map
|
||
LOGMAP = $02B2 ;LOGICAL LINE START BIT MAP
|
||
INVFLG = $02B6 ;INVERSE VIDEO FLAG (TOGGLED BY ATARI KEY)
|
||
FILFLG = $02B7 ;RIGHT FILL FLAG FOR DRAW
|
||
TMPROW = $02B8 ;1-byte temporary row
|
||
TMPCOL = $02B9 ;2-byte temporary column
|
||
SCRFLG = $02BB ;SET IF SCROLL OCCURS
|
||
HOLD4 = $02BC ;TEMP CELL USED IN DRAW ONLY
|
||
;HOLD5 = $02BD ;##old## DITTO
|
||
DRETRY = $02BD ;##1200xl## 1-byte number of device retries
|
||
SHFLOK = $02BE ;1-byte shift/control lock flags
|
||
BOTSCR = $02BF ;BOTTOM OF SCREEN 24 NORM 4 SPLIT
|
||
|
||
PCOLR0 = $02C0 ;1-byte player-missile 0 color/luminance
|
||
PCOLR1 = $02C1 ;1-byte player-missile 1 color/luminance
|
||
PCOLR2 = $02C2 ;1-byte player-missile 2 color/luminance
|
||
PCOLR3 = $02C3 ;1-byte player-missile 3 color/luminance
|
||
|
||
COLOR0 = $02C4 ;1-byte playfield 0 color/luminance
|
||
COLOR1 = $02C5 ;1-byte playfield 1 color/luminance
|
||
COLOR2 = $02C6 ;1-byte playfield 2 color/luminance
|
||
COLOR3 = $02C7 ;1-byte playfield 3 color/luminance
|
||
|
||
COLOR4 = $02C8 ;1-byte background color/luminance
|
||
|
||
PARMBL = $02C9 ;##rev2## 6-byte relocating loader parameter
|
||
RUNADR = $02C9 ;##1200xl## 2-byte run address
|
||
HIUSED = $02CB ;##1200xl## 2-byte highest non-zero page address
|
||
ZHIUSE = $02CD ;##1200xl## 2-byte highest zero page address
|
||
|
||
OLDPAR = $02CF ;##rev2## 6-byte relocating loader parameter
|
||
GBYTEA = $02CF ;##1200xl## 2-byte GET-BYTE routine address
|
||
LOADAD = $02D1 ;##1200xl## 2-byte non-zero page load address
|
||
ZLOADA = $02D3 ;##1200xl## 2-byte zero page load address
|
||
|
||
DSCTLN = $02D5 ;##1200xl## 2-byte disk sector length
|
||
ACMISR = $02D7 ;##1200xl## 2-byte ACMI interrupt service routine
|
||
KRPDEL = $02D9 ;##1200xl## 1-byte auto-repeat delay
|
||
KEYREP = $02DA ;##1200xl## 1-byte auto-repeat rate
|
||
NOCLIK = $02DB ;##1200xl## 1-byte key click disable
|
||
HELPFG = $02DC ;##1200xl## 1-byte HELP key flag (0 = no HELP)
|
||
DMASAV = $02DD ;##1200xl## 1-byte SDMCTL save/restore
|
||
PBPNT = $02DE ;##1200xl## 1-byte printer buffer pointer
|
||
PBUFSZ = $02DF ;##1200xl## 1-byte printer buffer size
|
||
|
||
GLBABS = $02E0 ;4-byte global variables for non-DOS users
|
||
RUNAD = $02E0 ;##map## 2-byte binary file run address
|
||
INITAD = $02E2 ;##map## 2-byte binary file initialization address
|
||
|
||
RAMSIZ = $02E4 ;RAM SIZE (HI BYTE ONLY)
|
||
MEMTOP = $02E5 ;TOP OF AVAILABLE USER MEMORY
|
||
MEMLO = $02E7 ;BOTTOM OF AVAILABLE USER MEMORY
|
||
HNDLOD = $02E9 ;##1200xl## 1-byte user load flag
|
||
DVSTAT = $02EA ;STATUS BUFFER
|
||
CBAUDL = $02EE ;1-byte low cassette baud rate
|
||
CBAUDH = $02EF ;1-byte high cassette baud rate
|
||
CRSINH = $02F0 ;CURSOR INHIBIT (00 = CURSOR ON)
|
||
KEYDEL = $02F1 ;KEY DELAY
|
||
CH1 = $02F2 ;1-byte prior keyboard character
|
||
CHACT = $02F3 ;CHACTL REGISTER RAM
|
||
CHBAS = $02F4 ;CHBAS REGISTER RAM
|
||
|
||
NEWROW = $02F5 ;##1200xl## 1-byte draw destination row
|
||
NEWCOL = $02F6 ;##1200xl## 2-byte draw destination column
|
||
ROWINC = $02F8 ;##1200xl## 1-byte draw row increment
|
||
COLINC = $02F9 ;##1200xl## 1-byte draw column increment
|
||
|
||
CHAR = $02FA ;1-byte internal character
|
||
ATACHR = $02FB ;ATASCII CHARACTER
|
||
CH = $02FC ;GLOBAL VARIABLE FOR KEYBOARD
|
||
FILDAT = $02FD ;RIGHT FILL DATA <DRAW>
|
||
DSPFLG = $02FE ;DISPLAY FLAG DISPLAY CNTLS IF NON-ZERO
|
||
SSFLAG = $02FF ;START/STOP FLAG FOR PAGING (CNTL 1). CLEARE
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Page Three Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
DCB = $0300 ;DEVICE CONTROL BLOCK
|
||
DDEVIC = $0300 ;PERIPHERAL UNIT 1 BUS I.D. NUMBER
|
||
DUNIT = $0301 ;UNIT NUMBER
|
||
DCOMND = $0302 ;BUS COMMAND
|
||
DSTATS = $0303 ;COMMAND TYPE/STATUS RETURN
|
||
DBUFLO = $0304 ;1-byte low data buffer address
|
||
DBUFHI = $0305 ;1-byte high data buffer address
|
||
DTIMLO = $0306 ;DEVICE TIME OUT IN 1 SECOND UNITS
|
||
DUNUSE = $0307 ;UNUSED BYTE
|
||
DBYTLO = $0308 ;1-byte low number of bytes to transfer
|
||
DBYTHI = $0309 ;1-byte high number of bytes to transfer
|
||
DAUX1 = $030A ;1-byte first command auxiliary
|
||
DAUX2 = $030B ;1-byte second command auxiliary
|
||
|
||
TIMER1 = $030C ;INITIAL TIMER VALUE
|
||
;ADDCOR = $030E ;##old## ADDITION CORRECTION
|
||
JMPERS = $030E ;##1200xl## 1-byte jumper options
|
||
CASFLG = $030F ;CASSETTE MODE WHEN SET
|
||
TIMER2 = $0310 ;2-byte final baud rate timer value
|
||
TEMP1 = $0312 ;TEMPORARY STORAGE REGISTER
|
||
;TEMP2 = $0314 ;##old## TEMPORARY STORAGE REGISTER
|
||
TEMP2 = $0313 ;##1200xl## 1-byte temporary
|
||
PTIMOT = $0314 ;##1200xl## 1-byte printer timeout
|
||
TEMP3 = $0315 ;TEMPORARY STORAGE REGISTER
|
||
SAVIO = $0316 ;SAVE SERIAL IN DATA PORT
|
||
TIMFLG = $0317 ;TIME OUT FLAG FOR BAUD RATE CORRECTION
|
||
STACKP = $0318 ;SIO STACK POINTER SAVE CELL
|
||
TSTAT = $0319 ;TEMPORARY STATUS HOLDER
|
||
|
||
HATABS = $031A ;35-byte handler address table (was 38 bytes)
|
||
PUPBT1 = $033D ;##1200xl## 1-byte power-up validation byte 1
|
||
PUPBT2 = $033E ;##1200xl## 1-byte power-up validation byte 2
|
||
PUPBT3 = $033F ;##1200xl## 1-byte power-up validation byte 3
|
||
|
||
IOCB = $0340 ;I/O CONTROL BLOCKS
|
||
ICHID = $0340 ;HANDLER INDEX NUMBER (FF=IOCB FREE)
|
||
ICDNO = $0341 ;DEVICE NUMBER (DRIVE NUMBER)
|
||
ICCOM = $0342 ;COMMAND CODE
|
||
ICSTA = $0343 ;STATUS OF LAST IOCB ACTION
|
||
ICBAL = $0344 ;1-byte low buffer address
|
||
ICBAH = $0345 ;1-byte high buffer address
|
||
ICPTL = $0346 ;1-byte low PUT-BYTE routine address - 1
|
||
ICPTH = $0347 ;1-byte high PUT-BYTE routine address - 1
|
||
ICBLL = $0348 ;1-byte low buffer length
|
||
ICBLH = $0349 ;1-byte high buffer length
|
||
ICAX1 = $034A ;1-byte first auxiliary information
|
||
ICAX2 = $034B ;1-byte second auxiliary information
|
||
ICAX3 = $034C ;1-byte third auxiliary information
|
||
ICAX4 = $034D ;1-byte fourth auxiliary information
|
||
ICAX5 = $034E ;1-byte fifth auxiliary information
|
||
ICSPR = $034F ;SPARE BYTE
|
||
|
||
PRNBUF = $03C0 ;PRINTER BUFFER
|
||
SUPERF = $03E8 ;##1200xl## 1-byte editor super function flag
|
||
CKEY = $03E9 ;##1200xl## 1-byte cassette boot request flag
|
||
CASSBT = $03EA ;##1200xl## 1-byte cassette boot flag
|
||
CARTCK = $03EB ;##1200xl## 1-byte cartridge equivalence check
|
||
DERRF = $03EC ;##rev2## 1-byte screen OPEN error flag
|
||
|
||
; Remainder of Page Three Not Cleared upon Reset
|
||
|
||
ACMVAR = $03ED ;##1200xl## 11 bytes reserved for ACMI
|
||
BASICF = $03F8 ;##rev2## 1-byte BASIC switch flag
|
||
MINTLK = $03F9 ;##1200xl## 1-byte ACMI module interlock
|
||
GINTLK = $03FA ;##1200xl## 1-byte cartridge interlock
|
||
CHLINK = $03FB ;##1200xl## 2-byte loaded handler chain link
|
||
CASBUF = $03FD ;CASSETTE BUFFER
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Page Four/Five Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
; USER AREA STARTS HERE AND GOES TO END OF PAGE FIVE
|
||
USAREA = $0480 ;128 bytes reserved for application
|
||
|
||
LBPR1 = $057E ;LBUFF PREFIX 1
|
||
LBPR2 = $057F ;LBUFF PREFIX 2
|
||
LBUFF = $0580 ;128-byte line buffer
|
||
|
||
PLYARG = $05E0 ;6-byte floating point polynomial argument
|
||
FPSCR = $05E6 ;6-byte floating point temporary
|
||
FPSCR1 = $05EC ;6-byte floating point temporary
|
||
|
||
;LBFEND = $05FF ;##old## END OF LBUFF
|
||
|
||
|
||
DOS = $0700
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Cartridge Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
CARTCS = $BFFA ;##rev2## 2-byte cartridge coldstart address
|
||
CART = $BFFC ;##rev2## 1-byte cartridge present indicator
|
||
;0=Cart Exists
|
||
CARTFG = $BFFD ;##rev2## 1-byte cartridge flags
|
||
;D7 0=Not a Diagnostic Cart
|
||
; 1=Is a Diagnostic cart and control is
|
||
; given to cart before any OS is init.
|
||
;D2 0=Init but Do not Start Cart
|
||
; 1=Init and Start Cart
|
||
;D0 0=Do not boot disk
|
||
; 1=Boot Disk
|
||
CARTAD = $BFFE ;##rev2## 2-byte cartridge start vector
|
||
|
||
;-------------------------------------------------------------------------
|
||
; CTIA/GTIA Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
GTIA = $D000 ;CTIA/GTIA area
|
||
.include "atari_gtia.inc"
|
||
|
||
;-------------------------------------------------------------------------
|
||
; PBI Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
PBI = $D100 ;##rev2## parallel bus interface area
|
||
|
||
; Read Addresses
|
||
|
||
PDVI = $D1FF ;##rev2## parallel device IRQ status
|
||
|
||
; Write Addresses
|
||
|
||
PDVS = $D1FF ;##rev2## parallel device select
|
||
|
||
;-------------------------------------------------------------------------
|
||
; POKEY Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
POKEY = $D200 ;POKEY area
|
||
.include "atari_pokey.inc"
|
||
|
||
;-------------------------------------------------------------------------
|
||
; ANTIC Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
ANTIC = $D400 ;ANTIC area
|
||
.include "atari_antic.inc"
|
||
|
||
; PBI RAM Address Equates
|
||
|
||
PBIRAM = $D600 ;##rev2## parallel bus interface RAM area
|
||
|
||
; Parallel Device Address Equates
|
||
|
||
PDID1 = $D803 ;##rev2## parallel device ID 1
|
||
PDIDV = $D805 ;##rev2## parallel device I/O vector
|
||
PDIRQV = $D808 ;##rev2## parallel device IRQ vector
|
||
PDID2 = $D80B ;##rev2## parallel device ID 2
|
||
PDVV = $D80D ;##rev2## parallel device vector table
|
||
|
||
;-------------------------------------------------------------------------
|
||
; PIA Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
PIA = $D300 ;PIA area
|
||
|
||
PORTA = $D300 ;port A direction register or jacks one/two
|
||
PORTB = $D301 ;port B direction register or memory management
|
||
|
||
PACTL = $D302 ;port A control
|
||
PBCTL = $D303 ;port B control
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Floating Point Package Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
AFP = $D800 ;convert ASCII to floating point
|
||
FASC = $D8E6 ;convert floating point to ASCII
|
||
IFP = $D9AA ;convert integer to floating point
|
||
FPI = $D9D2 ;convert floating point to integer
|
||
ZFR0 = $DA44 ;zero FR0
|
||
ZF1 = $DA46 ;zero floating point number
|
||
FSUB = $DA60 ;subtract floating point numbers
|
||
FADD = $DA66 ;add floating point numbers
|
||
FMUL = $DADB ;multiply floating point numbers
|
||
FDIV = $DB28 ;divide floating point numbers
|
||
PLYEVL = $DD40 ;evaluate floating point polynomial
|
||
FLD0R = $DD89 ;load floating point number
|
||
FLD0P = $DD8D ;load floating point number
|
||
FLD1R = $DD98 ;load floating point number
|
||
PLD1P = $DD9C ;load floating point number
|
||
FST0R = $DDA7 ;store floating point number
|
||
FST0P = $DDAB ;store floating point number
|
||
FMOVE = $DDB6 ;move floating point number
|
||
LOG = $DECD ;calculate floating point logarithm
|
||
LOG10 = $DED1 ;calculate floating point base 10 logarithm
|
||
EXP = $DDC0 ;calculate floating point exponential
|
||
EXP10 = $DDCC ;calculate floating point base 10 exponential
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Device Handler Vector Table Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
EDITRV = $E400 ;editor handler vector table
|
||
SCRENV = $E410 ;screen handler vector table
|
||
KEYBDV = $E420 ;keyboard handler vector table
|
||
PRINTV = $E430 ;printer handler vector table
|
||
CASETV = $E440 ;cassette handler vector table
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Jump Vector Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
DISKIV = $E450 ;vector to initialize DIO
|
||
DSKINV = $E453 ;vector to DIO
|
||
.ifdef __ATARIXL__
|
||
.ifndef SHRAM_HANDLERS
|
||
.import CIO_handler, SIO_handler, SETVBV_handler
|
||
.endif
|
||
.define CIOV CIO_handler
|
||
.define SIOV SIO_handler
|
||
.define SETVBV SETVBV_handler
|
||
CIOV_org = $E456 ;vector to CIO
|
||
SIOV_org = $E459 ;vector to SIO
|
||
SETVBV_org = $E45C ;vector to set VBLANK parameters
|
||
.else
|
||
CIOV = $E456 ;vector to CIO
|
||
SIOV = $E459 ;vector to SIO
|
||
SETVBV = $E45C ;vector to set VBLANK parameters
|
||
; aliases in order not to have to sprinkle common code with .ifdefs
|
||
CIOV_org = CIOV
|
||
SIOV_org = SIOV
|
||
SETVBV_org = SETVBV
|
||
.endif
|
||
SYSVBV = $E45F ;vector to process immediate VBLANK
|
||
XITVBV = $E462 ;vector to process deferred VBLANK
|
||
SIOINV = $E465 ;vector to initialize SIO
|
||
SENDEV = $E468 ;vector to enable SEND
|
||
INTINV = $E46B ;vector to initialize interrupt handler
|
||
CIOINV = $E46E ;vector to initialize CIO
|
||
BLKBDV = $E471 ;vector to power-up display
|
||
WARMSV = $E474 ;vector to warmstart
|
||
COLDSV = $E477 ;vector to coldstart
|
||
RBLOKV = $E47A ;vector to read cassette block
|
||
CSOPIV = $E47D ;vector to open cassette for input
|
||
VCTABL = $E480 ;RAM vector initial value table
|
||
PUPDIV = $E480 ;##rev2## vector to power-up display
|
||
SLFTSV = $E483 ;##rev2## vector to self-test
|
||
PHENTV = $E486 ;##rev2## vector to enter peripheral handler
|
||
PHUNLV = $E489 ;##rev2## vector to unlink peripheral handler
|
||
PHINIV = $E48C ;##rev2## vector to initialize peripheral handler
|
||
GPDVV = $E48F ;##rev2## generic parallel device handler vector
|
||
|
||
; NOTE: OS rom self-test labels are not included in this file
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Some misc. stuff from the 400/800 rev.B source
|
||
;-------------------------------------------------------------------------
|
||
|
||
; THE FOLLOWING ARE IN BASIC CARTRIDGE:
|
||
SIN = $BD81 ;FR0 <- SIN (FR0) DEGFLG (0=RAD,6=DEG) CARRY
|
||
COS = $BD73 ;FR0 <- COS (FR0) CARRY
|
||
ATAN = $BE43 ;FR0 <- ATAN(FR0) CARRY
|
||
SQR = $BEB1 ;FR0 <- ROOT(FR0) CARRY
|
||
|
||
RADON = 0 ;INDICATES RADIANS
|
||
DEGON = 6 ;INDICATES DEGREES
|
||
|
||
ASCZER = '0' ;ASCII ZERO
|
||
COLON = $3A ;ASCII COLON
|
||
CR = $9B ;SYSTEM EOL (CARRIAGE RETURN)
|
||
|
||
;-------------------------------------------------------------------------
|
||
; 6502
|
||
;-------------------------------------------------------------------------
|
||
|
||
NMIVEC = $FFFA
|
||
RESVEC = $FFFC
|
||
IRQVEC = $FFFE
|
||
|
||
;-------------------------------------------------------------------------
|
||
; BASIC
|
||
;-------------------------------------------------------------------------
|
||
|
||
LOMEM = $80 ;2-byte low memory pointer
|
||
VNTP = $82 ;2-byte variable name table address
|
||
VNTD = $84 ;2-byte variable name table end + 1
|
||
VVTP = $86 ;2-byte variable value table
|
||
STMTAB = $88 ;2-byte statement table address
|
||
STMCUR = $8A ;2-byte current statement pointer
|
||
STARP = $8C ;2-byte string and array table pointer
|
||
RUNSTK = $8E ;2-byte runtime stack address
|
||
BMEMTOP = $90 ;2-byte top of memory pointer
|
||
STOPLN = $BA ;2-byte stopped line number
|
||
ERRSAVE = $C3 ;1-byte error code
|
||
PTABW = $C9 ;1-byte tab width
|
||
|
||
;-------------------------------------------------------------------------
|
||
; ATASCII CHARACTER DEFS
|
||
;-------------------------------------------------------------------------
|
||
|
||
ATCLR = $7D ;CLEAR SCREEN CHARACTER
|
||
ATRUB = $7E ;BACK SPACE (RUBOUT)
|
||
ATTAB = $7F ;TAB
|
||
ATEOL = $9B ;END-OF-LINE
|
||
ATDELL = $9C ;delete line
|
||
ATINSL = $9D ;insert line
|
||
ATCTAB = $9E ;clear TAB
|
||
ATSTAB = $9F ;set TAB
|
||
ATBEL = $FD ;CONSOLE BELL
|
||
ATDEL = $FE ;delete char.
|
||
ATINS = $FF ;insert char.
|
||
ATURW = $1C ;UP-ARROW
|
||
ATDRW = $1D ;DOWN-ARROW
|
||
ATLRW = $1E ;LEFT-ARROW
|
||
ATRRW = $1F ;RIGHT-ARROW
|
||
ATESC = $1B ;ESCAPE
|
||
|
||
;-------------------------------------------------------------------------
|
||
; OFFSETS INTO SECTSIZETAB (DIO functions)
|
||
;-------------------------------------------------------------------------
|
||
|
||
sst_flag = 0 ; length 1
|
||
sst_sectsize = 1 ; 2
|
||
sst_driveno = 3 ; 1 (drive #)
|
||
sst_size = 4 ; size of one entry
|
||
; if changed, adapt diopncls.s
|
||
|
||
;-------------------------------------------------------------------------
|
||
; OFFSETS INTO dio_phys_pos
|
||
;-------------------------------------------------------------------------
|
||
|
||
diopp_head = 0 ; head
|
||
diopp_track = 1 ; track / cylinder
|
||
diopp_sector = 3 ; sector
|
||
diopp_size = 5 ; size of structure
|
||
|
||
;-------------------------------------------------------------------------
|
||
; VALUES for dos_type
|
||
;-------------------------------------------------------------------------
|
||
|
||
SPARTADOS = 0
|
||
OSADOS = 1 ; OS/A+
|
||
XDOS = 2
|
||
ATARIDOS = 3
|
||
MYDOS = 4
|
||
NODOS = 255
|
||
; The DOSes with dos_type below or equal MAX_DOS_WITH_CMDLINE do support
|
||
; command line arguments.
|
||
MAX_DOS_WITH_CMDLINE = XDOS
|
||
|
||
;-------------------------------------------------------------------------
|
||
; XDOS defines (version 2.4, taken from xdos24.pdf)
|
||
;-------------------------------------------------------------------------
|
||
|
||
XOPT = $070B ; XDOS options
|
||
XCAR = $070C ; XDOS cartridge address (+ $70D)
|
||
XPAT = $086F ; XDOS bugfix and patch number
|
||
XVER = $0870 ; XDOS version number
|
||
XFILE = $087D ; XDOS filename buffer
|
||
XLINE = $0880 ; XDOS DUP input line
|
||
XGLIN = $0871 ; get line
|
||
XSKIP = $0874 ; skip parameter
|
||
.ifdef __ATARIXL__
|
||
.ifndef SHRAM_HANDLERS
|
||
.import XMOVE_handler
|
||
.endif
|
||
.define XMOVE XMOVE_handler
|
||
XMOVE_org = $0877 ; move filename
|
||
.else
|
||
XMOVE = $0877 ; move filename
|
||
.endif
|
||
XGNUM = $087A ; get number
|
||
|
||
;-------------------------------------------------------------------------
|
||
; End of atari.inc
|
||
;-------------------------------------------------------------------------
|
||
;
|
||
; PET generic definitions.
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page, Commodore stuff
|
||
|
||
VARTAB := $2A ; Pointer to start of BASIC variables
|
||
MEMSIZE := $34 ; Size of memory installed
|
||
TXTPTR := $77 ; Pointer into BASIC source code
|
||
TIME := $8D ; 60HZ clock
|
||
KEY_COUNT := $9E ; Number of keys in input buffer
|
||
RVS := $9F ; Reverse flag
|
||
CURS_FLAG := $A7 ; 1 = cursor off
|
||
CURS_BLINK := $A8 ; Blink counter
|
||
CURS_CHAR := $A9 ; Character under the cursor
|
||
CURS_STATE := $AA ; Cursor blink state
|
||
SCREEN_PTR := $C4 ; Pointer to current char in text screen
|
||
CURS_X := $C6 ; Cursor column
|
||
FNLEN := $D1 ; Length of filename
|
||
LFN := $D2 ; Current Logical File Number
|
||
SECADR := $D3 ; Secondary address
|
||
DEVNUM := $D4 ; Device number
|
||
SCR_LINELEN := $D5 ; Screen line length
|
||
CURS_Y := $D8 ; Cursor row
|
||
FNADR := $DA ; Pointer to file name
|
||
|
||
BASIC_BUF := $200 ; Location of command-line
|
||
BASIC_BUF_LEN = 81 ; Maximum length of command-line
|
||
|
||
KEY_BUF := $26F ; Keyboard buffer
|
||
|
||
;----------------------------------------------------------------------------
|
||
; PET ROM type detection
|
||
|
||
PET_DETECT := $FFFB
|
||
PET_2000 = $CA
|
||
PET_3000 = $FC
|
||
PET_4000 = $FD
|
||
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Vector and other locations
|
||
|
||
IRQVec := $0090
|
||
BRKVec := $0092
|
||
NMIVec := $0094
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: 6522 VIA2
|
||
|
||
VIA := $E840
|
||
VIA_PRB := $E840
|
||
VIA_PRA := $E841
|
||
VIA_DDRB := $E842
|
||
VIA_DDRA := $E843
|
||
|
||
|
||
;
|
||
; _heap.inc
|
||
;
|
||
; (c) Copyright 2003, Ullrich von Bassewitz (uz@cc65.org)
|
||
;
|
||
|
||
; Assembler include file that makes the constants and structures in _heap.h
|
||
; available for asm code.
|
||
|
||
; Struct freeblock
|
||
; NOTE: For performance reasons, the asm code often uses increment/decrement
|
||
; operators to access other offsets, so just changing offsets here will
|
||
; probably not work.
|
||
.struct freeblock
|
||
size .word
|
||
next .addr
|
||
prev .addr
|
||
.endstruct
|
||
|
||
; Struct usedblock
|
||
; See notes above
|
||
.struct usedblock
|
||
size .word
|
||
start .addr
|
||
.endstruct
|
||
|
||
HEAP_MIN_BLOCKSIZE = .sizeof (freeblock) ; Minimum size of an allocated block
|
||
HEAP_ADMIN_SPACE = .sizeof (usedblock) ; Additional space for used bock
|
||
|
||
; Variables
|
||
.global __heaporg
|
||
.global __heapptr
|
||
.global __heapend
|
||
.global __heapfirst
|
||
.global __heaplast
|
||
;
|
||
; Oric Atmos definitions
|
||
; BASIC 1.1 addresses
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Constants
|
||
|
||
SCREEN_XSIZE = 40 ; screen columns
|
||
SCREEN_YSIZE = 28 ; screen rows
|
||
|
||
FUNCTKEY = $A5
|
||
|
||
FNAME_LEN = 16 ; maximum length of file-name
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page
|
||
|
||
SCRPTR := $12
|
||
BASIC_BUF := $35
|
||
CHARGOT := $E8
|
||
TXTPTR := $E9
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Low memory
|
||
|
||
MODEKEY := $0209
|
||
CAPSLOCK := $020C ; $7F = not locked, $FF = locked
|
||
PATTERN := $0213
|
||
IRQVec := $0245 ; "fast" interrupt vector
|
||
JOINFLAG := $025A ; 0 = don't joiu, $4A = join BASIC programs
|
||
VERIFYFLAG := $025B ; 0 = load, 1 = verify
|
||
CURS_Y := $0268
|
||
CURS_X := $0269
|
||
STATUS := $026A
|
||
BACKGRND := $026B
|
||
FOREGRND := $026C
|
||
TIMER3 := $0276
|
||
CFILE_NAME := $027F
|
||
CFOUND_NAME := $0293
|
||
FILESTART := $02A9
|
||
FILEEND := $02AB
|
||
AUTORUN := $02AD ; $00 = only load, $C7 = autorun
|
||
LANGFLAG := $02AE ; $00 = BASIC, $80 = machine code
|
||
LOADERR := $02B1
|
||
KEYBUF := $02DF
|
||
PARMERR := $02E0
|
||
PARAM1 := $02E1 ; & $02E2
|
||
PARAM2 := $02E3 ; & $02E4
|
||
PARAM3 := $02E5 ; & $02E6
|
||
BANGVEC := $02F5
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O locations
|
||
|
||
; 6522
|
||
.struct VIA ; Versatile Interface Adapter
|
||
.res $0300
|
||
PRB .byte ; Port Register B
|
||
PRA .byte ; Port Register A
|
||
DDRB .byte ; Data Direction Register B
|
||
DDRA .byte ; Data Direction Register A
|
||
T1 .word ; Timer 1
|
||
T1L .word ; Timer 1 Latch
|
||
T2 .word ; Timer 2
|
||
SR .byte ; Shift Register
|
||
ACR .byte ; Auxiliary Control Register
|
||
PCR .byte ; Peripheral Control Register
|
||
IFR .byte ; Interrupt Flags Register
|
||
IER .byte ; Interrupt Enable Register
|
||
PRA2 .byte ; Port Register A without handshaking
|
||
.endstruct
|
||
|
||
; 6551
|
||
.struct ACIA ; Asynchronous Communications Interface Adapter
|
||
.res $031C
|
||
DATA .byte
|
||
STATUS .byte
|
||
CMD .byte ; Command register
|
||
CTRL .byte ; Control register
|
||
.endstruct
|
||
|
||
SCREEN := $BB80
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; ROM entries
|
||
|
||
GETLINE := $C592
|
||
TEXT := $EC21
|
||
HIRES := $EC33
|
||
CURSET := $F0C8
|
||
CURMOV := $F0FD
|
||
DRAW := $F110
|
||
CHAR := $F12D
|
||
POINT := $F1C8
|
||
PAPER := $F204
|
||
INK := $F210
|
||
PRINT := $F77C
|
||
|
||
; Sound Effects
|
||
PING := $FA9F
|
||
SHOOT := $FAB5
|
||
EXPLODE := $FACB
|
||
ZAP := $FAE1
|
||
TICK := $FB14
|
||
TOCK := $FB2A
|
||
;
|
||
; PCE definitions. By Groepaz/Hitmem.
|
||
;
|
||
|
||
; FIXME: screen dimensions my change according to selected video mode
|
||
screenrows = (224/8)
|
||
charsperline = 61
|
||
|
||
CH_HLINE = 1
|
||
CH_VLINE = 2
|
||
|
||
; huc6270 - Video Display Controller (VDC)
|
||
|
||
VDC_MAWR = 0 ; Memory Address Write Register
|
||
VDC_MARR = 1 ; Memory Address Read Register
|
||
VDC_VWR = 2 ; VRAM Write Register (write only)
|
||
VDC_VRR = 2 ; VRAM Read Register (read only)
|
||
VDC_UNK03 = 3 ; (unknown)
|
||
VDC_UNK04 = 4 ; (unknown)
|
||
VDC_CR = 5 ; Control Register
|
||
VDC_RCR = 6 ; Raster Counter Register
|
||
VDC_BXR = 7 ; Background X-Scroll Register
|
||
VDC_BYR = 8 ; Background Y-Scroll Register
|
||
VDC_MWR = 9 ; Memory-access Width Register
|
||
VDC_HSR = 10 ; Horizontal Sync Register
|
||
VDC_HDR = 11 ; Horizontal Display Register
|
||
VDC_VPR = 12 ; Vertical synchronous register
|
||
VDC_VDW = 13 ; Vertical display register
|
||
VDC_VCR = 14 ; Vertical display END position register
|
||
VDC_DCR = 15 ; (DMA) Control Register
|
||
VDC_SOUR = 16 ; (DMA) Source Register
|
||
VDC_DESR = 17 ; (DMA) Destination Register
|
||
VDC_LENR = 18 ; (DMA) Length Register
|
||
VDC_SATB = 19 ; Sprite Attribute Table
|
||
|
||
; VDC port
|
||
; Note: absolute addressing mode must be used when writing to this port
|
||
|
||
VDC_CTRL = $0000
|
||
VDC_DATA_LO = $0002
|
||
VDC_DATA_HI = $0003
|
||
|
||
; huc6260 - Video Color Encoder (vce)
|
||
|
||
; The DAC has a palette of 512 colours.
|
||
; bitmap of the palette data is this: 0000000gggrrrbbb.
|
||
; You can read and write the DAC-registers.
|
||
|
||
VCE = $0400 ; base
|
||
|
||
VCE_CTRL = $0400 ; write$00 to reset
|
||
VCE_ADDR_LO = $0402 ; LSB of byte offset into palette
|
||
VCE_ADDR_HI = $0403 ; MSB of byte offset into palette
|
||
VCE_DATA_LO = $0404 ; LSB of 16-bit palette data
|
||
VCE_DATA_HI = $0405 ; MSB of 16-bit palette data
|
||
|
||
; programmable sound generator (PSG)
|
||
|
||
PSG = $0800 ; base
|
||
|
||
PSG_CHAN_SELECT = $0800
|
||
PSG_GLOBAL_PAN = $0801
|
||
PSG_FREQ_LO = $0802
|
||
PSG_FREQ_HI = $0803
|
||
PSG_CHAN_CTRL = $0804
|
||
PSG_CHAN_PAN = $0805
|
||
PSG_CHAN_DATA = $0806
|
||
PSG_NOISE = $0807
|
||
PSG_LFO_FREQ = $0808
|
||
PSG_LFO_CTRL = $0809
|
||
|
||
; timer
|
||
|
||
TIMER = $0c00 ; base
|
||
|
||
TIMER_COUNT = $0c00
|
||
TIMER_CTRL = $0c01
|
||
|
||
JOY_CTRL = $1000
|
||
|
||
IRQ_MASK = $1402
|
||
IRQ_STATUS = $1403
|
||
|
||
CDR_MEM_DISABLE = $1803
|
||
CDR_MEM_ENABLE = $1807
|
||
|
||
; Write VDC register
|
||
.macro VREG arg1,arg2
|
||
st0 #arg1
|
||
st1 #<(arg2)
|
||
st2 #>(arg2)
|
||
.endmacro
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* tgi-error.inc */
|
||
;* */
|
||
;* TGI error codes */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2002-2012, Ullrich von Bassewitz */
|
||
;* Roemerstrasse 52 */
|
||
;* D-70794 Filderstadt */
|
||
;* EMail: uz@cc65.org */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
; Error constants
|
||
.enum
|
||
TGI_ERR_OK ; No error
|
||
TGI_ERR_NO_DRIVER ; No driver available
|
||
TGI_ERR_CANNOT_LOAD ; Error loading driver or font
|
||
TGI_ERR_INV_DRIVER ; Invalid driver
|
||
TGI_ERR_INV_MODE ; Mode not supported by driver
|
||
TGI_ERR_INV_ARG ; Invalid function argument
|
||
TGI_ERR_INV_FUNC ; Function not supported
|
||
TGI_ERR_INV_FONT ; Font file is invalid
|
||
TGI_ERR_NO_RES ; Out of resources (memory, handles, ...)
|
||
TGI_ERR_UNKNOWN ; Unknown error
|
||
TGI_ERR_INSTALLED ; A driver is already installed
|
||
|
||
TGI_ERR_COUNT ; Special: Number of error messages
|
||
.endenum
|
||
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* em-error.inc */
|
||
;/* */
|
||
;/* EM error codes */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2002-2012, Ullrich von Bassewitz */
|
||
;/* Roemerstrasse 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
; Error constants
|
||
.enum
|
||
EM_ERR_OK ; No error
|
||
EM_ERR_NO_DRIVER ; No driver available
|
||
EM_ERR_CANNOT_LOAD ; Error loading driver
|
||
EM_ERR_INV_DRIVER ; Invalid driver
|
||
EM_ERR_NO_DEVICE ; Device (hardware) not found
|
||
EM_ERR_INSTALLED ; A driver is already installed
|
||
|
||
EM_ERR_COUNT ; Special: Number of error messages
|
||
.endenum
|
||
|
||
|
||
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* em-kernel.inc */
|
||
;/* */
|
||
;/* EM kernel interface */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2002-2003 Ullrich von Bassewitz */
|
||
;/* R<>merstrasse 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The driver header
|
||
|
||
.struct EMD_HDR
|
||
ID .byte 3 ; Contains 0x65, 0x6d, 0x64 ("emd")
|
||
VERSION .byte 1 ; Interface version
|
||
LIBREF .addr ; Library reference
|
||
JUMPTAB .struct
|
||
INSTALL .addr ; INSTALL routine
|
||
UNINSTALL .addr ; UNINSTALL routine
|
||
PAGECOUNT .addr ; PAGECOUNT routine
|
||
MAP .addr ; MAP routine
|
||
USE .addr ; USE routine
|
||
MAPCLEAN .addr ; MAPCLEAN routine
|
||
COPYFROM .addr ; COPYFROM routine
|
||
COPYTO .addr ; COPYTO routine
|
||
.endstruct
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The EMD API version, stored in EMD_HDR::VERSION
|
||
|
||
EMD_API_VERSION = $02
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The asm equivalent to the C em_copy structure
|
||
|
||
.struct EM_COPY
|
||
BUF .addr ; Memory buffer to copy from or to
|
||
OFFS .byte ; Offset into page
|
||
PAGE .word ; Starting page to copy from or to
|
||
COUNT .word ; Number of bytes to copy
|
||
UNUSED .byte ; Make the size 8 bytes
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Variables
|
||
|
||
.global _em_drv ; Pointer to driver
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver entry points
|
||
|
||
.global emd_install
|
||
.global emd_uninstall
|
||
.global emd_pagecount
|
||
.global emd_map
|
||
.global emd_use
|
||
.global emd_commit
|
||
.global emd_copyfrom
|
||
.global emd_copyto
|
||
|
||
;------------------------------------------------------------------------------
|
||
; ASM functions
|
||
|
||
.global em_clear_ptr
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _em_load_driver
|
||
.global _em_unload
|
||
.global _em_install
|
||
.global _em_uninstall
|
||
.global _em_pagecount
|
||
.global _em_map
|
||
.global _em_use
|
||
.global _em_commit
|
||
.global _em_copyfrom
|
||
.global _em_copyto
|
||
|
||
;
|
||
; zeropage.inc
|
||
;
|
||
; (C) Copyright 2002-2012, Ullrich von Bassewitz (uz@cc65.org)
|
||
;
|
||
|
||
; Assembler include file that imports the runtime zero page locations used
|
||
; by the compiler, ready for usage in asm code.
|
||
|
||
|
||
.globalzp sp, sreg, regsave
|
||
.globalzp ptr1, ptr2, ptr3, ptr4
|
||
.globalzp tmp1, tmp2, tmp3, tmp4
|
||
.globalzp regbank
|
||
|
||
; The size of the register bank
|
||
regbanksize = 6
|
||
|
||
; The total amount of zero page space used
|
||
zpspace = 26
|
||
|
||
; The amount of space that needs to be saved by an interrupt handler that
|
||
; calls C code (does not include the register bank, which is saved by the
|
||
; generated C code if required).
|
||
zpsavespace = zpspace - regbanksize
|
||
|
||
; Lynx system hardware includes
|
||
; Shawn Jefferson
|
||
; June 18th, 2004
|
||
;
|
||
; Reference:
|
||
; Bastian Schick's Lynx Documentation
|
||
; http://www.geocities.ws/SiliconValley/Byte/4242/lynx/
|
||
;
|
||
|
||
; ***
|
||
; *** Suzy Addresses
|
||
; ***
|
||
|
||
; Sprite Control Block
|
||
|
||
TMPADRL = $FC00
|
||
TMPADRH = $FC01
|
||
TILTACUML = $FC02
|
||
TILTACUMH = $FC03
|
||
HOFFL = $FC04
|
||
HOFFH = $FC05
|
||
VOFFL = $FC06
|
||
VOFFH = $FC07
|
||
VIDBASL = $FC08
|
||
VIDBASH = $FC09
|
||
COLLBASL = $FC0A
|
||
COLLBASH = $FC0B
|
||
VIDADRL = $FC0C
|
||
VIDADRH = $FC0D
|
||
COLLADRL = $FC0E
|
||
COLLADRH = $FC0F
|
||
SCBNEXTL = $FC10
|
||
SCBNEXTH = $FC11
|
||
SPRDLINEL = $FC12
|
||
SPRDLINEH = $FC13
|
||
HPOSSTRTL = $FC14
|
||
HPOSSTRTH = $FC15
|
||
VPOSSTRTL = $FC16
|
||
VPOSSTRTH = $FC17
|
||
SPRHSIZL = $FC18
|
||
SPRHSIZH = $FC19
|
||
SPRVSIZL = $FC1A
|
||
SPRVSIZH = $FC1B
|
||
STRETCHL = $FC1C
|
||
STRETCHH = $FC1D
|
||
TILTL = $FC1E
|
||
TILTH = $FC1F
|
||
SPRDOFFL = $FC20
|
||
SPRDOFFH = $FC21
|
||
SPRVPOSL = $FC22
|
||
SPRVPOSH = $FC23
|
||
COLLOFFL = $FC24
|
||
COLLOFFH = $FC25
|
||
VSIZACUML = $FC26
|
||
VSIZACUMH = $FC27
|
||
HSIZOFFL = $FC28
|
||
HSIZOFFH = $FC29
|
||
VSIZOFFL = $FC2A
|
||
VSIZOFFH = $FC2B
|
||
SCBADRL = $FC2C
|
||
SCBADRH = $FC2D
|
||
PROCADRL = $FC2E
|
||
PROCADRH = $FC2F
|
||
|
||
; Suzy Math
|
||
|
||
MATHD = $FC52
|
||
MATHC = $FC53
|
||
MATHB = $FC54
|
||
MATHA = $FC55
|
||
MATHP = $FC56
|
||
MATHN = $FC57
|
||
MATHH = $FC60
|
||
MATHG = $FC61
|
||
MATHF = $FC62
|
||
MATHE = $FC63
|
||
MATHM = $FC6C
|
||
MATHL = $FC6D
|
||
MATHK = $FC6E
|
||
MATHJ = $FC6F
|
||
|
||
; Suzy Misc
|
||
|
||
SPRCTL0 = $FC80
|
||
SPRCTL1 = $FC81
|
||
SPRCOLL = $FC82
|
||
SPRINIT = $FC83
|
||
SUZYHREV = $FC88
|
||
SUZYSREV = $FC89
|
||
SUZYBUSEN = $FC90
|
||
SPRGO = $FC91
|
||
SPRSYS = $FC92
|
||
JOYSTICK = $FCB0
|
||
SWITCHES = $FCB1
|
||
RCART0 = $FCB2
|
||
RCART1 = $FCB3
|
||
LEDS = $FCC0
|
||
PARSTATUS = $FCC2
|
||
PARDATA = $FCC3
|
||
HOWIE = $FCC4
|
||
|
||
|
||
; ***
|
||
; *** Mikey Addresses
|
||
; ***
|
||
|
||
; Mikey Timers
|
||
|
||
TIMER0 = $FD00
|
||
TIMER1 = $FD04
|
||
TIMER2 = $FD08
|
||
TIMER3 = $FD0C
|
||
TIMER4 = $FD10
|
||
TIMER5 = $FD14
|
||
TIMER6 = $FD18
|
||
TIMER7 = $FD1C
|
||
HTIMER = $FD00 ; horizontal line timer (timer 0)
|
||
VTIMER = $FD08 ; vertical blank timer (timer 2)
|
||
STIMER = $FD1C ; sound timer (timer 7)
|
||
|
||
HTIMBKUP = $FD00 ; horizontal line timer (timer 0)
|
||
HTIMCTLA = $FD01
|
||
HTIMCNT = $FD02
|
||
HTIMCTLB = $FD03
|
||
VTIMBKUP = $FD08 ; vertical blank timer (timer 2)
|
||
VTIMCTLA = $FD09
|
||
VTIMCNT = $FD0A
|
||
VTIMCTLB = $FD0B
|
||
BAUDBKUP = $FD10 ; serial timer (timer 4)
|
||
STIMBKUP = $FD1C ; sound timer (timer 7)
|
||
STIMCTLA = $FD1D
|
||
STIMCNT = $FD1E
|
||
STIMCTLB = $FD1F
|
||
|
||
TIM0BKUP = $FD00
|
||
TIM0CTLA = $FD01
|
||
TIM0CNT = $FD02
|
||
TIM0CTLB = $FD03
|
||
TIM1BKUP = $FD04
|
||
TIM1CTLA = $FD05
|
||
TIM1CNT = $FD06
|
||
TIM1CTLB = $FD07
|
||
TIM2BKUP = $FD08
|
||
TIM2CTLA = $FD09
|
||
TIM2CNT = $FD0A
|
||
TIM2CTLB = $FD0B
|
||
TIM3BKUP = $FD0C
|
||
TIM3CTLA = $FD0D
|
||
TIM3CNT = $FD0E
|
||
TIM3CTLB = $FD0F
|
||
TIM4BKUP = $FD10
|
||
TIM4CTLA = $FD11
|
||
TIM4CNT = $FD12
|
||
TIM4CTLB = $FD13
|
||
TIM5BKUP = $FD14
|
||
TIM5CTLA = $FD15
|
||
TIM5CNT = $FD16
|
||
TIM5CTLB = $FD17
|
||
TIM6BKUP = $FD18
|
||
TIM6CTLA = $FD19
|
||
TIM6CNT = $FD1A
|
||
TIM6CTLB = $FD1B
|
||
TIM7BKUP = $FD1C
|
||
TIM7CTLA = $FD1D
|
||
TIM7CNT = $FD1E
|
||
TIM7CTLB = $FD1F
|
||
|
||
; Mikey Audio
|
||
|
||
AUDIO0 = $FD20 ; audio channel 0
|
||
AUDIO1 = $FD28 ; audio channel 1
|
||
AUDIO2 = $FD30 ; audio channel 2
|
||
AUDIO3 = $FD38 ; audio channel 3
|
||
|
||
AUD0VOL = $FD20
|
||
AUD0FEED = $FD21
|
||
AUD0OUT = $FD22
|
||
AUD0SHIFT = $FD23
|
||
AUD0BKUP = $FD24
|
||
AUD0CTLA = $FD25
|
||
AUD0CNT = $FD26
|
||
AUD0CTLB = $FD27
|
||
AUD1VOL = $FD28
|
||
AUD1FEED = $FD29
|
||
AUD1OUT = $FD2A
|
||
AUD1SHIFT = $FD2B
|
||
AUD1BKUP = $FD2C
|
||
AUD1CTLA = $FD2D
|
||
AUD1CNT = $FD2E
|
||
AUD1CTLB = $FD2F
|
||
AUD2VOL = $FD30
|
||
AUD2FEED = $FD31
|
||
AUD2OUT = $FD32
|
||
AUD2SHIFT = $FD33
|
||
AUD2BKUP = $FD34
|
||
AUD2CTLA = $FD35
|
||
AUD2CNT = $FD36
|
||
AUD2CTLB = $FD37
|
||
AUD3VOL = $FD38
|
||
AUD3FEED = $FD39
|
||
AUD3OUT = $FD3A
|
||
AUD3SHIFT = $FD3B
|
||
AUD3BKUP = $FD3C
|
||
AUD3CTLA = $FD3D
|
||
AUD3CNT = $FD3E
|
||
AUD3CTLB = $FD3F
|
||
MSTEREO = $FD50
|
||
|
||
; Mikey Misc
|
||
|
||
; Interrupt bits in INTRST and INTSET
|
||
TIMER0_INTERRUPT = $01
|
||
TIMER1_INTERRUPT = $02
|
||
TIMER2_INTERRUPT = $04
|
||
TIMER3_INTERRUPT = $08
|
||
TIMER4_INTERRUPT = $10
|
||
TIMER5_INTERRUPT = $20
|
||
TIMER6_INTERRUPT = $40
|
||
TIMER7_INTERRUPT = $80
|
||
|
||
HBL_INTERRUPT = TIMER0_INTERRUPT
|
||
VBL_INTERRUPT = TIMER2_INTERRUPT
|
||
SERIAL_INTERRUPT = TIMER4_INTERRUPT
|
||
SND_INTERRUPT = TIMER7_INTERRUPT
|
||
|
||
INTRST = $FD80
|
||
INTSET = $FD81
|
||
MAGRDY0 = $FD84
|
||
MAGRDY1 = $FD85
|
||
AUDIN = $FD86
|
||
SYSCTL1 = $FD87
|
||
MIKEYHREV = $FD88
|
||
MIKEYSREV = $FD89
|
||
IODIR = $FD8A
|
||
IODAT = $FD8B
|
||
TxIntEnable = %10000000
|
||
RxIntEnable = %01000000
|
||
TxParEnable = %00010000
|
||
ResetErr = %00001000
|
||
TxOpenColl = %00000100
|
||
TxBreak = %00000010
|
||
ParEven = %00000001
|
||
TxReady = %10000000
|
||
RxReady = %01000000
|
||
TxEmpty = %00100000
|
||
RxParityErr = %00010000
|
||
RxOverrun = %00001000
|
||
RxFrameErr = %00000100
|
||
RxBreak = %00000010
|
||
ParityBit = %00000001
|
||
SERCTL = $FD8C
|
||
SERDAT = $FD8D
|
||
SDONEACK = $FD90
|
||
CPUSLEEP = $FD91
|
||
DISPCTL = $FD92
|
||
PBKUP = $FD93
|
||
DISPADRL = $FD94
|
||
DISPADRH = $FD95
|
||
MTEST0 = $FD9C
|
||
MTEST1 = $FD9D
|
||
MTEST2 = $FD9E
|
||
PALETTE = $FDA0 ; hardware rgb palette
|
||
GCOLMAP = $FDA0 ; hardware rgb palette (green)
|
||
RBCOLMAP = $FDB0 ; hardware rgb palette (red-blue)
|
||
|
||
|
||
; ***
|
||
; *** Misc Hardware + 6502 vectors
|
||
; ***
|
||
|
||
MAPCTL = $FFF9
|
||
VECTORS = $FFFB
|
||
INTVECTL = $FFFE
|
||
INTVECTH = $FFFF
|
||
RSTVECTL = $FFFC
|
||
RSTVECTH = $FFFD
|
||
NMIVECTL = $FFFA
|
||
NMIVECTH = $FFFB
|
||
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* tgi-kernel.inc */
|
||
;* */
|
||
;* TGI kernel interface */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2002-2012, Ullrich von Bassewitz */
|
||
;* Roemerstrasse 52 */
|
||
;* D-70794 Filderstadt */
|
||
;* EMail: uz@cc65.org */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The driver header
|
||
|
||
.struct TGI_HDR
|
||
ID .byte 3 ; Contains 0x74, 0x67, 0x69 ("tgi")
|
||
VERSION .byte 1 ; Interface version
|
||
LIBREF .addr ; Library reference
|
||
VARS .struct
|
||
XRES .word 1 ; X resolution
|
||
YRES .word 1 ; Y resolution
|
||
COLORCOUNT .byte 1 ; Number of available colors
|
||
PAGECOUNT .byte 1 ; Number of screens available
|
||
FONTWIDTH .byte 1 ; System font width in pixel
|
||
FONTHEIGHT .byte 1 ; System font height in pixel
|
||
ASPECTRATIO .word 1 ; Fixed point 8.8 format
|
||
FLAGS .byte 1 ; TGI driver flags
|
||
.endstruct
|
||
JUMPTAB .struct
|
||
INSTALL .addr ; INSTALL routine
|
||
UNINSTALL .addr ; UNINSTALL routine
|
||
INIT .addr ; INIT routine
|
||
DONE .addr ; DONE routine
|
||
GETERROR .addr ; GETERROR routine
|
||
CONTROL .addr ; CONTROL routine
|
||
CLEAR .addr ; CLEAR routine
|
||
SETVIEWPAGE .addr ; SETVIEWPAGE routine
|
||
SETDRAWPAGE .addr ; SETDRAWPAGE routine
|
||
SETCOLOR .addr ; SETCOLOR routine
|
||
SETPALETTE .addr ; SETPALETTE routine
|
||
GETPALETTE .addr ; GETPALETTE routine
|
||
GETDEFPALETTE .addr ; GETDEFPALETTE routine
|
||
SETPIXEL .addr ; SETPIXEL routine
|
||
GETPIXEL .addr ; GETPIXEL routine
|
||
LINE .addr ; LINE routine
|
||
BAR .addr ; BAR routine
|
||
TEXTSTYLE .addr ; TEXTSTYLE routine
|
||
OUTTEXT .addr ; OUTTEXT routine
|
||
IRQ .addr ; IRQ routine
|
||
.endstruct
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The TGI API version, stored at TGI_HDR_VERSION
|
||
|
||
TGI_API_VERSION = $05
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Bitmapped tgi driver flags, stored in TGI_HDR::VARS::FLAGS.
|
||
; Beware: Some of the bits are tested using the BIT instruction, so do not
|
||
; change the values without checking the code!
|
||
|
||
TGI_BM_FONT_FINESCALE = $80 ; Bitmap fonts are fine grained scalable
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Text constants
|
||
|
||
TGI_FONT_BITMAP = 0
|
||
TGI_FONT_VECTOR = 1
|
||
|
||
TGI_TEXT_HORIZONTAL = 0
|
||
TGI_TEXT_VERTICAL = 1
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Results of tgi_outcode
|
||
|
||
TGI_CLIP_NONE = $00
|
||
TGI_CLIP_LEFT = $01
|
||
TGI_CLIP_RIGHT = $02
|
||
TGI_CLIP_BOTTOM = $04
|
||
TGI_CLIP_TOP = $08
|
||
|
||
;------------------------------------------------------------------------------
|
||
; ASM accessible color constants
|
||
|
||
.global tgi_color_black:zp ; Target-specific value for black
|
||
.global tgi_color_white:zp ; Target-specific value for white
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C accessible variables
|
||
|
||
.global _tgi_drv ; Pointer to driver
|
||
.global _tgi_error ; Last error code
|
||
.global _tgi_gmode ; Flag: graphics mode active
|
||
.global _tgi_curx ; Current drawing cursor X
|
||
.global _tgi_cury ; Current drawing cursor Y
|
||
.global _tgi_color ; Current drawing color
|
||
.global _tgi_font ; Which font to use
|
||
.global _tgi_textdir ; Current text direction
|
||
.global _tgi_vectorfont ; Pointer to vector font
|
||
.global _tgi_textscalew ; Text magnification for the width
|
||
.global _tgi_textscaleh ; Text magnification for the height
|
||
.global _tgi_charwidth ; Width of scaled system font char
|
||
.global _tgi_charheight ; Height of scaled system font char
|
||
.global _tgi_xres ; X resolution of the current mode
|
||
.global _tgi_yres ; Y resolution of the current mode
|
||
.global _tgi_xmax ; Maximum X coordinate
|
||
.global _tgi_ymax ; Maximum Y coordinate
|
||
.global _tgi_colorcount ; Number of available colors
|
||
.global _tgi_pagecount ; Number of available screen pages
|
||
.global _tgi_fontwidth ; System font width
|
||
.global _tgi_fontheight ; System font height
|
||
.global _tgi_aspectratio ; Aspect ratio, fixed point 8.8
|
||
.global _tgi_flags ; TGI driver flags
|
||
|
||
;------------------------------------------------------------------------------
|
||
; ASM accessible variables
|
||
|
||
.global tgi_clip_x1 ; Coordinate for line clipper
|
||
.global tgi_clip_y1 ; Coordinate for line clipper
|
||
.global tgi_clip_x2 ; Coordinate for line clipper
|
||
.global tgi_clip_y2 ; Coordinate for line clipper
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver entry points
|
||
|
||
.global tgi_install
|
||
.global tgi_uninstall
|
||
.global tgi_init
|
||
.global tgi_done
|
||
.global tgi_geterror
|
||
.global tgi_control
|
||
.global tgi_clear
|
||
.global tgi_setviewpage
|
||
.global tgi_setdrawpage
|
||
.global tgi_setcolor
|
||
.global tgi_setpalette
|
||
.global tgi_getpalette
|
||
.global tgi_getdefpalette
|
||
.global tgi_setpixel
|
||
.global tgi_getpixel
|
||
.global tgi_line
|
||
.global tgi_bar
|
||
.global tgi_textstyle
|
||
.global tgi_outtext
|
||
|
||
;------------------------------------------------------------------------------
|
||
; ASM functions
|
||
|
||
.global tgi_clear_ptr
|
||
.global tgi_clippedline
|
||
.global tgi_curtoxy
|
||
.global tgi_getset
|
||
.global tgi_imulround
|
||
.global tgi_inv_arg
|
||
.global tgi_inv_drv
|
||
.global tgi_linepop
|
||
.global tgi_outcode
|
||
.global tgi_popxy
|
||
.global tgi_popxy2
|
||
.global tgi_set_ptr
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _tgi_arc
|
||
.global _tgi_bar
|
||
.global _tgi_circle
|
||
.global _tgi_clear
|
||
.global _tgi_done
|
||
.global _tgi_ellipse
|
||
.global _tgi_getaspectratio
|
||
.global _tgi_getcolor
|
||
.global _tgi_getcolorcount
|
||
.global _tgi_getdefpalette
|
||
.global _tgi_geterror
|
||
.global _tgi_geterrormsg
|
||
.global _tgi_getmaxcolor
|
||
.global _tgi_getmaxx
|
||
.global _tgi_getmaxy
|
||
.global _tgi_getpagecount
|
||
.global _tgi_getpalette
|
||
.global _tgi_getpixel
|
||
.global _tgi_gettextheight
|
||
.global _tgi_gettextwidth
|
||
.global _tgi_getxres
|
||
.global _tgi_getyres
|
||
.global _tgi_gotoxy
|
||
.global _tgi_imulround
|
||
.global _tgi_init
|
||
.global _tgi_install
|
||
.global _tgi_install_vectorfont
|
||
.global _tgi_ioctl
|
||
.global _tgi_line
|
||
.global _tgi_lineto
|
||
.global _tgi_load_driver
|
||
.global _tgi_outtext
|
||
.global _tgi_outtextxy
|
||
.global _tgi_pieslice
|
||
.global _tgi_setaspectratio
|
||
.global _tgi_setcolor
|
||
.global _tgi_setdrawpage
|
||
.global _tgi_setpalette
|
||
.global _tgi_setpixel
|
||
.global _tgi_settextdir
|
||
.global _tgi_settextscale
|
||
.global _tgi_settextstyle
|
||
.global _tgi_setviewpage
|
||
.global _tgi_uninstall
|
||
.global _tgi_unload
|
||
;
|
||
; get_tv.inc
|
||
;
|
||
; Ullrich von Bassewitz, 2004-10-15
|
||
;
|
||
; Defines for the get_tv function.
|
||
|
||
|
||
|
||
; Error codes returned by all functions
|
||
.enum TV
|
||
NTSC
|
||
PAL
|
||
OTHER
|
||
.endenum
|
||
|
||
|
||
; get_tv function
|
||
|
||
.global _get_tv
|
||
|
||
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* modload.inc */
|
||
;* */
|
||
;* o65 module loader interface for cc65 */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2002 Ullrich von Bassewitz */
|
||
;* Wacholderweg 14 */
|
||
;* D-70597 Stuttgart */
|
||
;* EMail: uz@musoftware.de */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
; Exports structures and functions to load relocatable o65 modules at
|
||
; runtime.
|
||
|
||
|
||
|
||
; Offsets for the mod_ctrl struct. This struct is passed to the module loader.
|
||
; It contains stuff, the loader needs to work, and another area where the
|
||
; loader will place informational data if it was successful. You will have to
|
||
; check the return code of mod_load before accessing any of these additional
|
||
; struct members.
|
||
.struct MOD_CTRL
|
||
READ .addr
|
||
CALLERDATA .word
|
||
MODULE .addr ; Pointer to module data
|
||
MODULE_SIZE .word ; Total size of loaded module
|
||
MODULE_ID .word
|
||
.endstruct
|
||
|
||
; unsigned char mod_load (struct mod_ctrl* ctrl);
|
||
; /* Load a module into memory and relocate it. The function will return an
|
||
; * error code (see below). If MLOAD_OK is returned, the outgoing fields in
|
||
; * the passed mod_ctrl struct contain information about the module just
|
||
; * loaded.
|
||
; */
|
||
.global _mod_load
|
||
|
||
; void mod_free (void* module);
|
||
; /* Free a loaded module. Note: The given pointer is the pointer to the
|
||
; * module memory, not a pointer to a control structure.
|
||
; */
|
||
.global _mod_free
|
||
|
||
; Errors
|
||
.enum
|
||
MLOAD_OK ; Module load successful
|
||
MLOAD_ERR_READ ; Read error
|
||
MLOAD_ERR_HDR ; Header error
|
||
MLOAD_ERR_OS ; Wrong OS
|
||
MLOAD_ERR_FMT ; Data format error
|
||
MLOAD_ERR_MEM ; Not enough memory
|
||
.endenum
|
||
|
||
|
||
;
|
||
; Definitions for the character type tables
|
||
;
|
||
; Ullrich von Bassewitz, 08.09.2001
|
||
;
|
||
|
||
; Make the __ctype table an exported/imported symbol
|
||
|
||
.global __ctype
|
||
|
||
; Define bitmapped constants for the table entries
|
||
|
||
CT_NONE = $00 ; Nothing special
|
||
CT_LOWER = $01 ; 0 - Lower case char
|
||
CT_UPPER = $02 ; 1 - Upper case char
|
||
CT_DIGIT = $04 ; 2 - Numeric digit
|
||
CT_XDIGIT = $08 ; 3 - Hex digit (both, lower and upper)
|
||
CT_CTRL = $10 ; 4 - Control character
|
||
CT_SPACE = $20 ; 5 - The space character itself
|
||
CT_OTHER_WS = $40 ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v')
|
||
CT_SPACE_TAB = $80 ; 7 - Space or tab character
|
||
|
||
; Combined stuff
|
||
CT_ALNUM = (CT_LOWER | CT_UPPER | CT_DIGIT)
|
||
CT_ALPHA = (CT_LOWER | CT_UPPER)
|
||
CT_CTRL_SPACE = (CT_CTRL | CT_SPACE)
|
||
CT_NOT_PUNCT = (CT_SPACE | CT_CTRL | CT_DIGIT | CT_UPPER | CT_LOWER)
|
||
|
||
|
||
.macro jeq Target
|
||
.if .match(Target, 0)
|
||
bne *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
beq Target
|
||
.else
|
||
bne *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jne Target
|
||
.if .match(Target, 0)
|
||
beq *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bne Target
|
||
.else
|
||
beq *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jmi Target
|
||
.if .match(Target, 0)
|
||
bpl *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bmi Target
|
||
.else
|
||
bpl *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jpl Target
|
||
.if .match(Target, 0)
|
||
bmi *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bpl Target
|
||
.else
|
||
bmi *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jcs Target
|
||
.if .match(Target, 0)
|
||
bcc *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bcs Target
|
||
.else
|
||
bcc *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jcc Target
|
||
.if .match(Target, 0)
|
||
bcs *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bcc Target
|
||
.else
|
||
bcs *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jvs Target
|
||
.if .match(Target, 0)
|
||
bvc *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bvs Target
|
||
.else
|
||
bvc *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
.macro jvc Target
|
||
.if .match(Target, 0)
|
||
bvs *+5
|
||
jmp Target
|
||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||
bvc Target
|
||
.else
|
||
bvs *+5
|
||
jmp Target
|
||
.endif
|
||
.endmacro
|
||
;
|
||
; _file.inc
|
||
;
|
||
; (C) Copyright 2002 Ullrich von Bassewitz (uz@cc65.org)
|
||
;
|
||
|
||
; Assembler include file that makes the constants and structures in _file.h
|
||
; available for asm code.
|
||
|
||
; Struct _FILE
|
||
.struct _FILE
|
||
f_fd .byte
|
||
f_flags .byte
|
||
f_pushback .byte
|
||
.endstruct
|
||
|
||
; Flags field
|
||
_FCLOSED = $00
|
||
_FOPEN = $01
|
||
_FEOF = $02
|
||
_FERROR = $04
|
||
_FPUSHBACK = $08
|
||
|
||
; File table
|
||
.global __filetab
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; CTIA/GTIA Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
; Read/Write Addresses
|
||
|
||
CONSOL = GTIA + $1F ;console switches and speaker control
|
||
|
||
; Read Addresses
|
||
|
||
M0PF = GTIA + $00 ;missile 0 and playfield collision
|
||
M1PF = GTIA + $01 ;missile 1 and playfield collision
|
||
M2PF = GTIA + $02 ;missile 2 and playfield collision
|
||
M3PF = GTIA + $03 ;missile 3 and playfield collision
|
||
|
||
P0PF = GTIA + $04 ;player 0 and playfield collision
|
||
P1PF = GTIA + $05 ;player 1 and playfield collision
|
||
P2PF = GTIA + $06 ;player 2 and playfield collision
|
||
P3PF = GTIA + $07 ;player 3 and playfield collision
|
||
|
||
M0PL = GTIA + $08 ;missile 0 and player collision
|
||
M1PL = GTIA + $09 ;missile 1 and player collision
|
||
M2PL = GTIA + $0A ;missile 2 and player collision
|
||
M3PL = GTIA + $0B ;missile 3 and player collision
|
||
|
||
P0PL = GTIA + $0C ;player 0 and player collision
|
||
P1PL = GTIA + $0D ;player 1 and player collision
|
||
P2PL = GTIA + $0E ;player 2 and player collision
|
||
P3PL = GTIA + $0F ;player 3 and player collision
|
||
|
||
TRIG0 = GTIA + $10 ;joystick trigger 0
|
||
TRIG1 = GTIA + $11 ;joystick trigger 1
|
||
|
||
TRIG2 = GTIA + $12 ;cartridge interlock
|
||
TRIG3 = GTIA + $13 ;ACMI module interlock
|
||
|
||
PAL = GTIA + $14 ;##rev2## PAL/NTSC indicator
|
||
|
||
; Write Addresses
|
||
|
||
HPOSP0 = GTIA + $00 ;player 0 horizontal position
|
||
HPOSP1 = GTIA + $01 ;player 1 horizontal position
|
||
HPOSP2 = GTIA + $02 ;player 2 horizontal position
|
||
HPOSP3 = GTIA + $03 ;player 3 horizontal position
|
||
|
||
HPOSM0 = GTIA + $04 ;missile 0 horizontal position
|
||
HPOSM1 = GTIA + $05 ;missile 1 horizontal position
|
||
HPOSM2 = GTIA + $06 ;missile 2 horizontal position
|
||
HPOSM3 = GTIA + $07 ;missile 3 horizontal position
|
||
|
||
SIZEP0 = GTIA + $08 ;player 0 size
|
||
SIZEP1 = GTIA + $09 ;player 1 size
|
||
SIZEP2 = GTIA + $0A ;player 2 size
|
||
SIZEP3 = GTIA + $0B ;player 3 size
|
||
|
||
SIZEM = GTIA + $0C ;missile sizes
|
||
|
||
GRAFP0 = GTIA + $0D ;player 0 graphics
|
||
GRAFP1 = GTIA + $0E ;player 1 graphics
|
||
GRAFP2 = GTIA + $0F ;player 2 graphics
|
||
GRAFP3 = GTIA + $10 ;player 3 graphics
|
||
|
||
GRAFM = GTIA + $11 ;missile graphics
|
||
|
||
COLPM0 = GTIA + $12 ;player-missile 0 color/luminance
|
||
COLPM1 = GTIA + $13 ;player-missile 1 color/luminance
|
||
COLPM2 = GTIA + $14 ;player-missile 2 color/luminance
|
||
COLPM3 = GTIA + $15 ;player-missile 3 color/luminance
|
||
|
||
COLPF0 = GTIA + $16 ;playfield 0 color/luminance
|
||
COLPF1 = GTIA + $17 ;playfield 1 color/luminance
|
||
COLPF2 = GTIA + $18 ;playfield 2 color/luminance
|
||
COLPF3 = GTIA + $19 ;playfield 3 color/luminance
|
||
|
||
COLBK = GTIA + $1A ;background color/luminance
|
||
|
||
PRIOR = GTIA + $1B ;priority select
|
||
VDELAY = GTIA + $1C ;vertical delay
|
||
GRACTL = GTIA + $1D ;graphic control
|
||
HITCLR = GTIA + $1E ;collision clear
|
||
|
||
|
||
; add - Add without carry
|
||
.macro add Arg1, Arg2
|
||
clc
|
||
.if .paramcount = 2
|
||
adc Arg1, Arg2
|
||
.else
|
||
adc Arg1
|
||
.endif
|
||
.endmacro
|
||
|
||
; sub - subtract without borrow
|
||
.macro sub Arg1, Arg2
|
||
sec
|
||
.if .paramcount = 2
|
||
sbc Arg1, Arg2
|
||
.else
|
||
sbc Arg1
|
||
.endif
|
||
.endmacro
|
||
|
||
; bge - jump if unsigned greater or equal
|
||
.macro bge Arg
|
||
bcs Arg
|
||
.endmacro
|
||
|
||
; blt - Jump if unsigned less
|
||
.macro blt Arg
|
||
bcc Arg
|
||
.endmacro
|
||
|
||
; bgt - jump if unsigned greater
|
||
.macro bgt Arg
|
||
.local L
|
||
beq L
|
||
bcs Arg
|
||
L:
|
||
.endmacro
|
||
|
||
; ble - jump if unsigned less or equal
|
||
.macro ble Arg
|
||
beq Arg
|
||
bcc Arg
|
||
.endmacro
|
||
|
||
; bnz - jump if not zero
|
||
.macro bnz Arg
|
||
bne Arg
|
||
.endmacro
|
||
|
||
; bze - jump if zero
|
||
.macro bze Arg
|
||
beq Arg
|
||
.endmacro
|
||
|
||
;-------------------------------------------------------------------------
|
||
; ANTIC Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
; Read Addresses
|
||
|
||
VCOUNT = ANTIC + $0B ;vertical line counter
|
||
PENH = ANTIC + $0C ;light pen horizontal position
|
||
PENV = ANTIC + $0D ;light pen vertical position
|
||
NMIST = ANTIC + $0F ;NMI interrupt status
|
||
|
||
; Write Addresses
|
||
|
||
DMACTL = ANTIC + $00 ;DMA control
|
||
CHACTL = ANTIC + $01 ;character control
|
||
DLISTL = ANTIC + $02 ;low display list address
|
||
DLISTH = ANTIC + $03 ;high display list address
|
||
HSCROL = ANTIC + $04 ;horizontal scroll
|
||
VSCROL = ANTIC + $05 ;vertical scroll
|
||
PMBASE = ANTIC + $07 ;player-missile base address
|
||
CHBASE = ANTIC + $09 ;character base address
|
||
WSYNC = ANTIC + $0A ;wait for HBLANK synchronization
|
||
NMIEN = ANTIC + $0E ;NMI enable
|
||
NMIRES = ANTIC + $0F ;NMI interrupt reset
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Antic opcodes
|
||
;-------------------------------------------------------------------------
|
||
|
||
; usage example:
|
||
;
|
||
; ScreenDL:
|
||
; .byte DL_BLK8
|
||
; .byte DL_BLK8
|
||
; .byte DL_CHR40x8x1 + DL_LMS + DL_DLI
|
||
; .word ScreenAlignment
|
||
; .byte DL_BLK1 + DL_DLI
|
||
; .byte DL_MAP320x1x1 + DL_LMS
|
||
; .word Screen
|
||
;
|
||
; .repeat 99
|
||
; .byte DL_MAP320x1x1
|
||
; .endrepeat
|
||
; .byte DL_MAP320x1x1 + DL_LMS
|
||
; .word Screen + 40 * 100 ; 100 lines a 40 byte, 'Screen' has to be aligned correctly!
|
||
; .repeat 92
|
||
; .byte DL_MAP320x1x1
|
||
; .endrepeat
|
||
;
|
||
; .byte DL_JVB
|
||
|
||
; absolute instructions (non mode lines)
|
||
|
||
DL_JMP = 1
|
||
DL_JVB = 65
|
||
|
||
DL_BLK1 = 0
|
||
DL_BLK2 = 16
|
||
DL_BLK3 = 32
|
||
DL_BLK4 = 48
|
||
DL_BLK5 = 64
|
||
DL_BLK6 = 80
|
||
DL_BLK7 = 96
|
||
DL_BLK8 = 112
|
||
|
||
; absolute instructions (mode lines)
|
||
|
||
DL_CHR40x8x1 = 2 ; monochrome, 40 character & 8 scanlines per mode line (GR. 0)
|
||
DL_CHR40x10x1 = 3 ; monochrome, 40 character & 10 scanlines per mode line
|
||
DL_CHR40x8x4 = 4 ; colour, 40 character & 8 scanlines per mode line (GR. 12)
|
||
DL_CHR40x16x4 = 5 ; colour, 40 character & 16 scanlines per mode line (GR. 13)
|
||
DL_CHR20x8x2 = 6 ; colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1)
|
||
DL_CHR20x16x2 = 7 ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2)
|
||
|
||
DL_MAP40x8x4 = 8 ; colour, 40 pixel & 8 scanlines per mode line (GR. 3)
|
||
DL_MAP80x4x2 = 9 ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4)
|
||
DL_MAP80x4x4 = 10 ; colour, 80 pixel & 4 scanlines per mode line (GR.5)
|
||
DL_MAP160x2x2 = 11 ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6)
|
||
DL_MAP160x1x2 = 12 ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14)
|
||
DL_MAP160x2x4 = 13 ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7)
|
||
DL_MAP160x1x4 = 14 ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15)
|
||
DL_MAP320x1x1 = 15 ; monochrome, 320 pixel & 1 scanline per mode line (GR.8)
|
||
|
||
; modifiers on mode lines...
|
||
|
||
DL_HSCROL = 16
|
||
DL_VSCROL = 32
|
||
DL_LMS = 64
|
||
|
||
; general modifier...
|
||
|
||
DL_DLI = 128
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* signal.inc */
|
||
;/* */
|
||
;/* Signal handling definitions */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2002 Ullrich von Bassewitz */
|
||
;/* Wacholderweg 14 */
|
||
;/* D-70597 Stuttgart */
|
||
;/* EMail: uz@musoftware.de */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
; Standard signal handling functions
|
||
SIG_ERR = $0000
|
||
|
||
; Signal numbers
|
||
SIGABRT = 0
|
||
SIGFPE = 1
|
||
SIGILL = 2
|
||
SIGINT = 3
|
||
SIGSEGV = 4
|
||
SIGTERM = 5
|
||
SIGCOUNT = 6 ; Number of signals
|
||
|
||
; Table with signal handlers (asm code only)
|
||
.global sigtable
|
||
|
||
; Function declarations
|
||
.global __sig_ign
|
||
.global __sig_dfl
|
||
.global _signal
|
||
.global _raise
|
||
|
||
|
||
;
|
||
; C128 generic definitions. Stolen from Elite128
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page, Commodore stuff
|
||
|
||
TXTPTR := $3D ; Pointer into BASIC source code
|
||
TIME := $A0 ; 60HZ clock
|
||
FNAM_LEN := $B7 ; Length of filename
|
||
SECADR := $B9 ; Secondary address
|
||
DEVNUM := $BA ; Device number
|
||
FNAM := $BB ; Address of filename
|
||
FNAM_BANK := $C7 ; Bank for filename
|
||
KEY_COUNT := $D0 ; Number of keys in input buffer
|
||
FKEY_COUNT := $D1 ; Characters for function key
|
||
MODE := $D7 ; 40/80 column mode flag
|
||
CURS_X := $EC ; Cursor column
|
||
CURS_Y := $EB ; Cursor row
|
||
SCREEN_PTR := $E0 ; Pointer to current char in text screen
|
||
CRAM_PTR := $E2 ; Pointer to current char in color RAM
|
||
|
||
CHARCOLOR := $F1
|
||
RVS := $F3 ; Reverse output flag
|
||
SCROLL := $F8 ; Disable scrolling flag
|
||
|
||
BASIC_BUF := $200 ; Location of command-line
|
||
BASIC_BUF_LEN = 162 ; Maximum length of command-line
|
||
|
||
FETCH := $2A2 ; Fetch subroutine in RAM
|
||
FETVEC := $2AA ; Vector patch location for FETCH
|
||
STASH := $2AF ; Stash routine in RAM
|
||
STAVEC := $2B9 ; Vector patch location for STASH
|
||
IRQInd := $2FD ; JMP $0000 -- used as indirect IRQ vector
|
||
PALFLAG := $A03 ; $FF=PAL, $00=NTSC
|
||
INIT_STATUS := $A04 ; Flags: Reset/Restore initiation status
|
||
FKEY_LEN := $1000 ; Function key lengths
|
||
FKEY_TEXT := $100A ; Function key texts
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Kernal routines
|
||
|
||
; Direct entries
|
||
CURS_SET := $CD57
|
||
CURS_ON := $CD6F
|
||
CURS_OFF := $CD9F
|
||
CLRSCR := $C142
|
||
KBDREAD := $C006
|
||
NEWLINE := $C363
|
||
PRINT := $C322
|
||
NMIEXIT := $FF33
|
||
INDFET := $FF74
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Vectors
|
||
|
||
IRQVec := $0314
|
||
BRKVec := $0316
|
||
NMIVec := $0318
|
||
KeyStoreVec := $033C
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: VIC
|
||
|
||
VIC := $D000
|
||
VIC_SPR0_X := $D000
|
||
VIC_SPR0_Y := $D001
|
||
VIC_SPR1_X := $D002
|
||
VIC_SPR1_Y := $D003
|
||
VIC_SPR2_X := $D004
|
||
VIC_SPR2_Y := $D005
|
||
VIC_SPR3_X := $D006
|
||
VIC_SPR3_Y := $D007
|
||
VIC_SPR4_X := $D008
|
||
VIC_SPR4_Y := $D009
|
||
VIC_SPR5_X := $D00A
|
||
VIC_SPR5_Y := $D00B
|
||
VIC_SPR6_X := $D00C
|
||
VIC_SPR6_Y := $D00D
|
||
VIC_SPR7_X := $D00E
|
||
VIC_SPR7_Y := $D00F
|
||
VIC_SPR_HI_X := $D010
|
||
VIC_SPR_ENA := $D015
|
||
VIC_SPR_EXP_Y := $D017
|
||
VIC_SPR_EXP_X := $D01D
|
||
VIC_SPR_MCOLOR := $D01C
|
||
VIC_SPR_BG_PRIO := $D01B
|
||
|
||
VIC_SPR_MCOLOR0 := $D025
|
||
VIC_SPR_MCOLOR1 := $D026
|
||
|
||
VIC_SPR0_COLOR := $D027
|
||
VIC_SPR1_COLOR := $D028
|
||
VIC_SPR2_COLOR := $D029
|
||
VIC_SPR3_COLOR := $D02A
|
||
VIC_SPR4_COLOR := $D02B
|
||
VIC_SPR5_COLOR := $D02C
|
||
VIC_SPR6_COLOR := $D02D
|
||
VIC_SPR7_COLOR := $D02E
|
||
|
||
VIC_CTRL1 := $D011
|
||
VIC_CTRL2 := $D016
|
||
|
||
VIC_HLINE := $D012
|
||
|
||
VIC_LPEN_X := $D013
|
||
VIC_LPEN_Y := $D014
|
||
|
||
VIC_VIDEO_ADR := $D018
|
||
|
||
VIC_IRR := $D019 ; Interrupt request register
|
||
VIC_IMR := $D01A ; Interrupt mask register
|
||
|
||
VIC_BORDERCOLOR := $D020
|
||
VIC_BG_COLOR0 := $D021
|
||
VIC_BG_COLOR1 := $D022
|
||
VIC_BG_COLOR2 := $D023
|
||
VIC_BG_COLOR3 := $D024
|
||
|
||
; 128 stuff:
|
||
VIC_KBD_128 := $D02F ; Extended kbd bits (visible in 64 mode)
|
||
VIC_CLK_128 := $D030 ; Clock rate register (visible in 64 mode)
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: SID
|
||
|
||
SID := $D400
|
||
SID_S1Lo := $D400
|
||
SID_S1Hi := $D401
|
||
SID_PB1Lo := $D402
|
||
SID_PB1Hi := $D403
|
||
SID_Ctl1 := $D404
|
||
SID_AD1 := $D405
|
||
SID_SUR1 := $D406
|
||
|
||
SID_S2Lo := $D407
|
||
SID_S2Hi := $D408
|
||
SID_PB2Lo := $D409
|
||
SID_PB2Hi := $D40A
|
||
SID_Ctl2 := $D40B
|
||
SID_AD2 := $D40C
|
||
SID_SUR2 := $D40D
|
||
|
||
SID_S3Lo := $D40E
|
||
SID_S3Hi := $D40F
|
||
SID_PB3Lo := $D410
|
||
SID_PB3Hi := $D411
|
||
SID_Ctl3 := $D412
|
||
SID_AD3 := $D413
|
||
SID_SUR3 := $D414
|
||
|
||
SID_FltLo := $D415
|
||
SID_FltHi := $D416
|
||
SID_FltCtl := $D417
|
||
SID_Amp := $D418
|
||
SID_ADConv1 := $D419
|
||
SID_ADConv2 := $D41A
|
||
SID_Noise := $D41B
|
||
SID_Read3 := $D41C
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: VDC (128 only)
|
||
|
||
VDC_INDEX := $D600
|
||
VDC_DATA := $D601
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: CIAs
|
||
|
||
CIA1 := $DC00
|
||
CIA1_PRA := $DC00
|
||
CIA1_PRB := $DC01
|
||
CIA1_DDRA := $DC02
|
||
CIA1_DDRB := $DC03
|
||
CIA1_TOD10 := $DC08
|
||
CIA1_TODSEC := $DC09
|
||
CIA1_TODMIN := $DC0A
|
||
CIA1_TODHR := $DC0B
|
||
CIA1_ICR := $DC0D
|
||
CIA1_CRA := $DC0E
|
||
CIA1_CRB := $DC0F
|
||
|
||
CIA2 := $DD00
|
||
CIA2_PRA := $DD00
|
||
CIA2_PRB := $DD01
|
||
CIA2_DDRA := $DD02
|
||
CIA2_DDRB := $DD03
|
||
CIA2_TOD10 := $DD08
|
||
CIA2_TODSEC := $DD09
|
||
CIA2_TODMIN := $DD0A
|
||
CIA2_TODHR := $DD0B
|
||
CIA2_ICR := $DD0D
|
||
CIA2_CRA := $DD0E
|
||
CIA2_CRB := $DD0F
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: MMU
|
||
|
||
MMU_CR := $FF00
|
||
MMU_CFG_CC65 := %00001110 ; Bank 0 with kernal ROM
|
||
MMU_CFG_RAM0 := %00111111 ; Bank 0 full RAM
|
||
MMU_CFG_RAM1 := %01111111 ; Bank 1 full RAM
|
||
MMU_CFG_RAM2 := %10111111 ; Bank 2 full RAM
|
||
MMU_CFG_RAM3 := %11111111 ; Bank 3 full RAM
|
||
MMU_CFG_IFROM := %01010111 ; Bank 1 with Internal Function RAM/ROM
|
||
MMU_CFG_EFROM := %01101011 ; Bank 1 with External Function RAM/ROM
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Super CPU
|
||
|
||
SCPU_VIC_Bank1 := $D075
|
||
SCPU_Slow := $D07A
|
||
SCPU_Fast := $D07B
|
||
SCPU_EnableRegs := $D07E
|
||
SCPU_DisableRegs:= $D07F
|
||
SCPU_Detect := $D0BC
|
||
;
|
||
; NES definitions. By Groepaz/Hitmem.
|
||
;
|
||
|
||
|
||
;; FIXME: optimize zeropage usage
|
||
|
||
SCREEN_PTR = $62 ;2
|
||
CRAM_PTR = $64 ;2
|
||
CHARCOLOR = $66
|
||
BGCOLOR = $67
|
||
RVS = $68
|
||
CURS_X = $69
|
||
CURS_Y = $6a
|
||
|
||
tickcount = $6b ;2
|
||
|
||
VBLANK_FLAG = $70
|
||
|
||
ringbuff = $0200
|
||
ringwrite = $71
|
||
ringread = $72
|
||
ringcount = $73
|
||
|
||
ppuhi = $74
|
||
ppulo = $75
|
||
ppuval = $76
|
||
|
||
screenrows = (30-1)
|
||
charsperline = 32
|
||
xsize = charsperline
|
||
|
||
;; PPU defines
|
||
|
||
PPU_CTRL1 = $2000
|
||
PPU_CTRL2 = $2001
|
||
PPU_STATUS = $2002
|
||
PPU_SPR_ADDR = $2003
|
||
PPU_SPR_IO = $2004
|
||
PPU_VRAM_ADDR1 = $2005
|
||
PPU_VRAM_ADDR2 = $2006
|
||
PPU_VRAM_IO = $2007
|
||
|
||
;; APU defines
|
||
|
||
APU_PULSE1CTRL = $4000 ; Pulse #1 Control Register (W)
|
||
APU_PULSE1RAMP = $4001 ; Pulse #1 Ramp Control Register (W)
|
||
APU_PULSE1FTUNE = $4002 ; Pulse #1 Fine Tune (FT) Register (W)
|
||
APU_PULSE1CTUNE = $4003 ; Pulse #1 Coarse Tune (CT) Register (W)
|
||
APU_PULSE2CTRL = $4004 ; Pulse #2 Control Register (W)
|
||
APU_PULSE2RAMP = $4005 ; Pulse #2 Ramp Control Register (W)
|
||
APU_PULSE2FTUNE = $4006 ; Pulse #2 Fine Tune Register (W)
|
||
APU_PULSE2STUNE = $4007 ; Pulse #2 Coarse Tune Register (W)
|
||
APU_TRICTRL1 = $4008 ; Triangle Control Register #1 (W)
|
||
APU_TRICTRL2 = $4009 ; Triangle Control Register #2 (?)
|
||
APU_TRIFREQ1 = $400A ; Triangle Frequency Register #1 (W)
|
||
APU_TRIFREQ2 = $400B ; Triangle Frequency Register #2 (W)
|
||
APU_NOISECTRL = $400C ; Noise Control Register #1 (W)
|
||
;;APU_ = $400D ; Unused (???)
|
||
APU_NOISEFREQ1 = $400E ; Noise Frequency Register #1 (W)
|
||
APU_NOISEFREQ2 = $400F ; Noise Frequency Register #2 (W)
|
||
APU_MODCTRL = $4010 ; Delta Modulation Control Register (W)
|
||
APU_MODDA = $4011 ; Delta Modulation D/A Register (W)
|
||
APU_MODADDR = $4012 ; Delta Modulation Address Register (W)
|
||
APU_MODLEN = $4013 ; Delta Modulation Data Length Register (W)
|
||
APU_SPR_DMA = $4014 ; Sprite DMA Register (W)
|
||
APU_CHANCTRL = $4015 ; Sound/Vertical Clock Signal Register (R)
|
||
APU_PAD1 = $4016 ; Joypad #1 (RW)
|
||
APU_PAD2 = $4017 ; Joypad #2/SOFTCLK (RW)
|
||
|
||
|
||
CH_HLINE = 11
|
||
CH_VLINE = 14
|
||
CH_ULCORNER = 176
|
||
CH_URCORNER = 174
|
||
CH_LLCORNER = 173
|
||
CH_LRCORNER = 189
|
||
CH_TTEE = 178
|
||
CH_RTEE = 179
|
||
CH_BTEE = 177
|
||
CH_LTEE = 171
|
||
CH_CROSS = 123
|
||
CH_CURS_UP = 145
|
||
CH_CURS_DOWN = 17
|
||
CH_CURS_LEFT = 157
|
||
CH_CURS_RIGHT = 29
|
||
CH_PI = 126
|
||
CH_DEL = 20
|
||
CH_INS = 148
|
||
CH_ENTER = 10
|
||
CH_STOP = 3
|
||
CH_ESC = 27
|
||
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* joy-error.inc */
|
||
;/* */
|
||
;/* Joystick error codes */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2002 Ullrich von Bassewitz */
|
||
;/* Wacholderweg 14 */
|
||
;/* D-70597 Stuttgart */
|
||
;/* EMail: uz@musoftware.de */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
; Error codes
|
||
JOY_ERR_OK = 0 ; No error
|
||
JOY_ERR_NO_DRIVER = 1 ; No driver available
|
||
JOY_ERR_CANNOT_LOAD = 2 ; Error loading driver
|
||
JOY_ERR_INV_DRIVER = 3 ; Invalid driver
|
||
JOY_ERR_NO_DEVICE = 4 ; Device (hardware) not found
|
||
|
||
|
||
|
||
;****************************************************************************
|
||
;* *
|
||
;* ser-kernel.inc *
|
||
;* *
|
||
;* Serial communication API *
|
||
;* *
|
||
;* *
|
||
;* *
|
||
;*(C) 2003-2006, Ullrich von Bassewitz *
|
||
;* R<>merstrasse 52 *
|
||
;* D-70794 Filderstadt *
|
||
;*EMail: uz@cc65.org *
|
||
;* *
|
||
;* *
|
||
;*This software is provided 'as-is', without any expressed or implied *
|
||
;*warranty. In no event will the authors be held liable for any damages *
|
||
;*arising from the use of this software. *
|
||
;* *
|
||
;*Permission is granted to anyone to use this software for any purpose, *
|
||
;*including commercial applications, and to alter it and redistribute it *
|
||
;*freely, subject to the following restrictions: *
|
||
;* *
|
||
;*1. The origin of this software must not be misrepresented; you must not *
|
||
;* claim that you wrote the original software. If you use this software *
|
||
;* in a product, an acknowledgment in the product documentation would be *
|
||
;* appreciated but is not required. *
|
||
;*2. Altered source versions must be plainly marked as such, and must not *
|
||
;* be misrepresented as being the original software. *
|
||
;*3. This notice may not be removed or altered from any source *
|
||
;* distribution. *
|
||
;* *
|
||
;****************************************************************************
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The driver header
|
||
|
||
.struct SER_HDR
|
||
ID .byte 3 ; Contains 0x73, 0x65, 0x72 ("ser")
|
||
VERSION .byte 1 ; Interface version
|
||
LIBREF .addr ; Library reference
|
||
JUMPTAB .struct
|
||
INSTALL .addr ; INSTALL routine
|
||
UNINSTALL .addr ; UNINSTALL routine
|
||
OPEN .addr ; OPEN routine
|
||
CLOSE .addr ; CLOSE routine
|
||
GET .addr ; GET routine
|
||
PUT .addr ; PUT routine
|
||
STATUS .addr ; STATUS routine
|
||
IOCTL .addr ; IOCTL routine
|
||
IRQ .addr ; IRQ routine
|
||
.endstruct
|
||
.endstruct
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The SER API version, stored SER_HDR::VERSION
|
||
|
||
SER_API_VERSION = $02
|
||
|
||
;------------------------------------------------------------------------------
|
||
; ser_params
|
||
|
||
.struct SER_PARAMS
|
||
BAUDRATE .byte ; Baudrate
|
||
DATABITS .byte ; Number of data bits
|
||
STOPBITS .byte ; Number of stop bits
|
||
PARITY .byte ; Parity setting
|
||
HANDSHAKE .byte ; Type of handshake to use
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Serial parameters
|
||
|
||
; Baudrate
|
||
SER_BAUD_45_5 = $00
|
||
SER_BAUD_50 = $01
|
||
SER_BAUD_75 = $02
|
||
SER_BAUD_110 = $03
|
||
SER_BAUD_134_5 = $04
|
||
SER_BAUD_150 = $05
|
||
SER_BAUD_300 = $06
|
||
SER_BAUD_600 = $07
|
||
SER_BAUD_1200 = $08
|
||
SER_BAUD_1800 = $09
|
||
SER_BAUD_2400 = $0A
|
||
SER_BAUD_3600 = $0B
|
||
SER_BAUD_4800 = $0C
|
||
SER_BAUD_7200 = $0D
|
||
SER_BAUD_9600 = $0E
|
||
SER_BAUD_19200 = $0F
|
||
SER_BAUD_38400 = $10
|
||
SER_BAUD_57600 = $11
|
||
SER_BAUD_115200 = $12
|
||
SER_BAUD_230400 = $13
|
||
SER_BAUD_31250 = $14
|
||
SER_BAUD_62500 = $15
|
||
SER_BAUD_56_875 = $16
|
||
|
||
; Data bit settings
|
||
SER_BITS_5 = $00
|
||
SER_BITS_6 = $01
|
||
SER_BITS_7 = $02
|
||
SER_BITS_8 = $03
|
||
|
||
; Stop bit settings
|
||
SER_STOP_1 = $00
|
||
SER_STOP_2 = $01
|
||
|
||
; Parity
|
||
SER_PAR_NONE = $00
|
||
SER_PAR_ODD = $01
|
||
SER_PAR_EVEN = $02
|
||
SER_PAR_MARK = $03
|
||
SER_PAR_SPACE = $04
|
||
|
||
; Handshake
|
||
SER_HS_NONE = $00 ; No handshake
|
||
SER_HS_HW = $01 ; Hardware (RTS/CTS) handshake
|
||
SER_HS_SW = $02 ; Software handshake
|
||
|
||
; Bit masks to mask out things from the status returned by ser_status
|
||
SER_STATUS_PE = $01 ; Parity error
|
||
SER_STATUS_FE = $02 ; Framing error
|
||
SER_STATUS_OE = $04 ; Overrun error
|
||
SER_STATUS_DCD = $20 ; NOT data carrier detect
|
||
SER_STATUS_DSR = $40 ; NOT data set ready
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Variables
|
||
|
||
.global _ser_drv ; Pointer to driver
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver entry points
|
||
|
||
.global ser_install
|
||
.global ser_uninstall
|
||
.global ser_open
|
||
.global ser_close
|
||
.global ser_get
|
||
.global ser_put
|
||
.global ser_status
|
||
.global ser_ioctl
|
||
.global ser_irq
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _ser_load_driver
|
||
.global _ser_unload
|
||
.global _ser_install
|
||
.global _ser_uninstall
|
||
.global _ser_open
|
||
.global _ser_close
|
||
.global _ser_get
|
||
.global _ser_put
|
||
.global _ser_status
|
||
.global _ser_ioctl
|
||
|
||
.global _ser_clear_ptr
|
||
|
||
;
|
||
; C64 generic definitions. Stolen from Elite128
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page, Commodore stuff
|
||
|
||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||
TXTPTR := $7A ; Pointer into BASIC source code
|
||
TIME := $A0 ; 60 HZ clock
|
||
FNAM_LEN := $B7 ; Length of filename
|
||
SECADR := $B9 ; Secondary address
|
||
DEVNUM := $BA ; Device number
|
||
FNAM := $BB ; Pointer to filename
|
||
KEY_COUNT := $C6 ; Number of keys in input buffer
|
||
RVS := $C7 ; Reverse flag
|
||
CURS_FLAG := $CC ; 1 = cursor off
|
||
CURS_BLINK := $CD ; Blink counter
|
||
CURS_CHAR := $CE ; Character under the cursor
|
||
CURS_STATE := $CF ; Cursor blink state
|
||
SCREEN_PTR := $D1 ; Pointer to current char in text screen
|
||
CURS_X := $D3 ; Cursor column
|
||
CURS_Y := $D6 ; Cursor row
|
||
CRAM_PTR := $F3 ; Pointer to current char in color RAM
|
||
FREKZP := $FB ; Five unused bytes
|
||
|
||
BASIC_BUF := $200 ; Location of command-line
|
||
BASIC_BUF_LEN = 89 ; Maximum length of command-line
|
||
|
||
CHARCOLOR := $286
|
||
CURS_COLOR := $287 ; Color under the cursor
|
||
PALFLAG := $2A6 ; $01 = PAL, $00 = NTSC
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Kernal routines
|
||
|
||
; Direct entries
|
||
CLRSCR := $E544
|
||
KBDREAD := $E5B4
|
||
NMIEXIT := $FEBC
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Vector and other locations
|
||
|
||
IRQVec := $0314
|
||
BRKVec := $0316
|
||
NMIVec := $0318
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Screen size
|
||
|
||
XSIZE = 40
|
||
YSIZE = 25
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: VIC
|
||
|
||
VIC := $D000
|
||
VIC_SPR0_X := $D000
|
||
VIC_SPR0_Y := $D001
|
||
VIC_SPR1_X := $D002
|
||
VIC_SPR1_Y := $D003
|
||
VIC_SPR2_X := $D004
|
||
VIC_SPR2_Y := $D005
|
||
VIC_SPR3_X := $D006
|
||
VIC_SPR3_Y := $D007
|
||
VIC_SPR4_X := $D008
|
||
VIC_SPR4_Y := $D009
|
||
VIC_SPR5_X := $D00A
|
||
VIC_SPR5_Y := $D00B
|
||
VIC_SPR6_X := $D00C
|
||
VIC_SPR6_Y := $D00D
|
||
VIC_SPR7_X := $D00E
|
||
VIC_SPR7_Y := $D00F
|
||
VIC_SPR_HI_X := $D010
|
||
VIC_SPR_ENA := $D015
|
||
VIC_SPR_EXP_Y := $D017
|
||
VIC_SPR_EXP_X := $D01D
|
||
VIC_SPR_MCOLOR := $D01C
|
||
VIC_SPR_BG_PRIO := $D01B
|
||
|
||
VIC_SPR_MCOLOR0 := $D025
|
||
VIC_SPR_MCOLOR1 := $D026
|
||
|
||
VIC_SPR0_COLOR := $D027
|
||
VIC_SPR1_COLOR := $D028
|
||
VIC_SPR2_COLOR := $D029
|
||
VIC_SPR3_COLOR := $D02A
|
||
VIC_SPR4_COLOR := $D02B
|
||
VIC_SPR5_COLOR := $D02C
|
||
VIC_SPR6_COLOR := $D02D
|
||
VIC_SPR7_COLOR := $D02E
|
||
|
||
VIC_CTRL1 := $D011
|
||
VIC_CTRL2 := $D016
|
||
|
||
VIC_HLINE := $D012
|
||
|
||
VIC_LPEN_X := $D013
|
||
VIC_LPEN_Y := $D014
|
||
|
||
VIC_VIDEO_ADR := $D018
|
||
|
||
VIC_IRR := $D019 ; Interrupt request register
|
||
VIC_IMR := $D01A ; Interrupt mask register
|
||
|
||
VIC_BORDERCOLOR := $D020
|
||
VIC_BG_COLOR0 := $D021
|
||
VIC_BG_COLOR1 := $D022
|
||
VIC_BG_COLOR2 := $D023
|
||
VIC_BG_COLOR3 := $D024
|
||
|
||
; 128 stuff:
|
||
VIC_KBD_128 := $D02F ; Extended kbd bits (visible in 64 mode)
|
||
VIC_CLK_128 := $D030 ; Clock rate register (visible in 64 mode)
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: SID
|
||
|
||
SID := $D400
|
||
SID_S1Lo := $D400
|
||
SID_S1Hi := $D401
|
||
SID_PB1Lo := $D402
|
||
SID_PB1Hi := $D403
|
||
SID_Ctl1 := $D404
|
||
SID_AD1 := $D405
|
||
SID_SUR1 := $D406
|
||
|
||
SID_S2Lo := $D407
|
||
SID_S2Hi := $D408
|
||
SID_PB2Lo := $D409
|
||
SID_PB2Hi := $D40A
|
||
SID_Ctl2 := $D40B
|
||
SID_AD2 := $D40C
|
||
SID_SUR2 := $D40D
|
||
|
||
SID_S3Lo := $D40E
|
||
SID_S3Hi := $D40F
|
||
SID_PB3Lo := $D410
|
||
SID_PB3Hi := $D411
|
||
SID_Ctl3 := $D412
|
||
SID_AD3 := $D413
|
||
SID_SUR3 := $D414
|
||
|
||
SID_FltLo := $D415
|
||
SID_FltHi := $D416
|
||
SID_FltCtl := $D417
|
||
SID_Amp := $D418
|
||
SID_ADConv1 := $D419
|
||
SID_ADConv2 := $D41A
|
||
SID_Noise := $D41B
|
||
SID_Read3 := $D41C
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: VDC (128 only)
|
||
|
||
VDC_INDEX := $D600
|
||
VDC_DATA := $D601
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: CIAs
|
||
|
||
CIA1 := $DC00
|
||
CIA1_PRA := $DC00
|
||
CIA1_PRB := $DC01
|
||
CIA1_DDRA := $DC02
|
||
CIA1_DDRB := $DC03
|
||
CIA1_TOD10 := $DC08
|
||
CIA1_TODSEC := $DC09
|
||
CIA1_TODMIN := $DC0A
|
||
CIA1_TODHR := $DC0B
|
||
CIA1_ICR := $DC0D
|
||
CIA1_CRA := $DC0E
|
||
CIA1_CRB := $DC0F
|
||
|
||
CIA2 := $DD00
|
||
CIA2_PRA := $DD00
|
||
CIA2_PRB := $DD01
|
||
CIA2_DDRA := $DD02
|
||
CIA2_DDRB := $DD03
|
||
CIA2_TOD10 := $DD08
|
||
CIA2_TODSEC := $DD09
|
||
CIA2_TODMIN := $DD0A
|
||
CIA2_TODHR := $DD0B
|
||
CIA2_ICR := $DD0D
|
||
CIA2_CRA := $DD0E
|
||
CIA2_CRB := $DD0F
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Super CPU
|
||
|
||
SCPU_VIC_Bank1 := $D075
|
||
SCPU_Slow := $D07A
|
||
SCPU_Fast := $D07B
|
||
SCPU_EnableRegs := $D07E
|
||
SCPU_DisableRegs:= $D07F
|
||
SCPU_Detect := $D0BC
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Processor Port at $01
|
||
|
||
LORAM = $01 ; Enable the basic rom
|
||
HIRAM = $02 ; Enable the kernal rom
|
||
IOEN = $04 ; Enable I/O
|
||
CASSDATA = $08 ; Cassette data
|
||
CASSPLAY = $10 ; Cassette: Play
|
||
CASSMOT = $20 ; Cassette motor on
|
||
TP_FAST = $80 ; Switch Rossmoeller TurboProcess to fast mode
|
||
|
||
RAMONLY = $F8 ; (~(LORAM | HIRAM | IOEN)) & $FF
|
||
; Convert characters to screen codes
|
||
|
||
; Helper macro that converts and outputs one character
|
||
.macro _scrcode char
|
||
.if (char < 256)
|
||
.byte (char + 128)
|
||
.else
|
||
.error "scrcode: Character constant out of range"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
|
||
; Bail out if next argument is empty
|
||
.if .blank (arg1)
|
||
.exitmacro
|
||
.endif
|
||
|
||
; Check for a string
|
||
.if .match ({arg1}, "")
|
||
|
||
; Walk over all string chars
|
||
.repeat .strlen (arg1), i
|
||
_scrcode {.strat (arg1, i)}
|
||
.endrepeat
|
||
|
||
; Check for a number
|
||
.elseif .match (.left (1, {arg1}), 0)
|
||
|
||
; Just output the number
|
||
_scrcode arg1
|
||
|
||
; Check for a character
|
||
.elseif .match (.left (1, {arg1}), 'a')
|
||
|
||
; Just output the character
|
||
_scrcode arg1
|
||
|
||
; Anything else is an error
|
||
.else
|
||
|
||
.error "scrcode: invalid argument type"
|
||
|
||
.endif
|
||
|
||
; Call the macro recursively with the remaining args
|
||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
.endmacro
|
||
; Convert characters to screen codes
|
||
|
||
; Helper macro that converts and outputs one character
|
||
.macro _scrcode char
|
||
.if (char >= 0) .and (char <= 31)
|
||
.byte (char + 64)
|
||
.elseif (char >= 32) .and (char <= 95)
|
||
.byte (char - 32)
|
||
.elseif (char >= 96) .and (char <= 127)
|
||
.byte char
|
||
.elseif (char >= 128) .and (char <= 159)
|
||
.byte (char + 64)
|
||
.elseif (char >= 160) .and (char <= 223)
|
||
.byte (char - 32)
|
||
.elseif (char >= 224) .and (char <= 255)
|
||
.byte char
|
||
.else
|
||
.error "scrcode: Character constant out of range"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
|
||
; Bail out if next argument is empty
|
||
.if .blank (arg1)
|
||
.exitmacro
|
||
.endif
|
||
|
||
; Check for a string
|
||
.if .match ({arg1}, "")
|
||
|
||
; Walk over all string chars
|
||
.repeat .strlen (arg1), i
|
||
_scrcode {.strat (arg1, i)}
|
||
.endrepeat
|
||
|
||
; Check for a number
|
||
.elseif .match (.left (1, {arg1}), 0)
|
||
|
||
; Just output the number
|
||
_scrcode arg1
|
||
|
||
; Check for a character
|
||
.elseif .match (.left (1, {arg1}), 'a')
|
||
|
||
; Just output the character
|
||
_scrcode arg1
|
||
|
||
; Anything else is an error
|
||
.else
|
||
|
||
.error "scrcode: invalid argument type"
|
||
|
||
.endif
|
||
|
||
; Call the macro recursively with the remaining args
|
||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
.endmacro
|
||
|
||
;****************************************************************************
|
||
;* *
|
||
;* ser-error.inc *
|
||
;* *
|
||
;* Serial communication API *
|
||
;* *
|
||
;* *
|
||
;* *
|
||
;* (C) 2003-2012, Ullrich von Bassewitz *
|
||
;* Roemerstrasse 52 *
|
||
;* D-70794 Filderstadt *
|
||
;* EMail: uz@cc65.org *
|
||
;* *
|
||
;* *
|
||
;*This software is provided 'as-is', without any expressed or implied *
|
||
;*warranty. In no event will the authors be held liable for any damages *
|
||
;*arising from the use of this software. *
|
||
;* *
|
||
;*Permission is granted to anyone to use this software for any purpose, *
|
||
;*including commercial applications, and to alter it and redistribute it *
|
||
;*freely, subject to the following restrictions: *
|
||
;* *
|
||
;*1. The origin of this software must not be misrepresented; you must not *
|
||
;* claim that you wrote the original software. If you use this software *
|
||
;* in a product, an acknowledgment in the product documentation would be *
|
||
;* appreciated but is not required. *
|
||
;*2. Altered source versions must be plainly marked as such, and must not *
|
||
;* be misrepresented as being the original software. *
|
||
;*3. This notice may not be removed or altered from any source *
|
||
;* distribution. *
|
||
;* *
|
||
;****************************************************************************
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Error codes
|
||
|
||
.enum
|
||
SER_ERR_OK ; Not an error - relax
|
||
SER_ERR_NO_DRIVER ; No driver available
|
||
SER_ERR_CANNOT_LOAD ; Error loading driver
|
||
SER_ERR_INV_DRIVER ; Invalid driver
|
||
SER_ERR_NO_DEVICE ; Device (hardware) not found
|
||
SER_ERR_BAUD_UNAVAIL ; Baud rate not available
|
||
SER_ERR_NO_DATA ; Nothing to read
|
||
SER_ERR_OVERFLOW ; No room in send buffer
|
||
SER_ERR_INIT_FAILED ; Initialization failed
|
||
SER_ERR_INV_IOCTL ; IOCTL not supported
|
||
SER_ERR_INSTALLED ; A driver is already installed
|
||
SER_ERR_NOT_OPEN ; Driver not open
|
||
|
||
SER_ERR_COUNT ; Special: Number of error codes
|
||
.endenum
|
||
|
||
;
|
||
; Definitions for CBM file types. From cbm.h
|
||
;
|
||
; Ullrich von Bassewitz, 2012-06-03
|
||
;
|
||
|
||
; Define bitmapped constants for the table entries
|
||
|
||
.enum
|
||
CBM_T_REG = $10 ; Bit set for regular files
|
||
CBM_T_SEQ = $10 ; Sequential file
|
||
CBM_T_PRG = $11 ; Program file
|
||
CBM_T_USR = $12 ; User file
|
||
CBM_T_REL = $13 ; Relative file
|
||
CBM_T_VRP = $14 ; Vorpal fast-loadable format
|
||
CBM_T_DEL = $00 ; Deleted file
|
||
CBM_T_CBM = $01 ; 1581 sub-partition
|
||
CBM_T_DIR = $02 ; IDE64 and CMD sub-directory
|
||
CBM_T_LNK = $03 ; IDE64 soft-link
|
||
CBM_T_OTHER = $04 ; File-type not recognized
|
||
CBM_T_HEADER = $05 ; Disk header / title
|
||
.endenum
|
||
|
||
|
||
; The following function maps the start character for a file type to
|
||
; one of the file types above. Note: 'd' will always mapped to CBM_T_DEL.
|
||
; The calling function has to look at the following character to determine
|
||
; if the file type is actually CBM_T_DIR.
|
||
;
|
||
; unsigned char __fastcall__ _cbm_filetype (unsigned char c);
|
||
|
||
.global __cbm_filetype
|
||
|
||
|
||
;
|
||
; Ullrich von Bassewitz, 05.06.1999
|
||
;
|
||
|
||
; Predefined file handles
|
||
STDIN_FILENO = 0
|
||
STDOUT_FILENO = 1
|
||
STDERR_FILENO = 2
|
||
|
||
; File mode constants, must match the values in the C headers
|
||
O_RDONLY = $01
|
||
O_WRONLY = $02
|
||
O_RDWR = $03
|
||
O_CREAT = $10
|
||
O_TRUNC = $20
|
||
O_APPEND = $40
|
||
O_EXCL = $80
|
||
|
||
|
||
|
||
|
||
;
|
||
; Zero page variables and I/O definitions for the CBM 610
|
||
;
|
||
; Taken from a kernal disassembly done by myself in 1987.
|
||
;
|
||
; 1998-09-28, Ullrich von Bassewitz
|
||
; 2014-04-02, Greg King
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zeropage stuff
|
||
|
||
ExecReg := $00 ; Controls execution memory bank
|
||
IndReg := $01 ; Controls indirect indexed load-store bank
|
||
|
||
TXTPTR := $85 ; Far pointer into BASIC source code
|
||
FNAM := $90 ; Far pointer to LOAD/SAVE file-name
|
||
FNAM_LEN := $9D ; Holds length of file-name
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Screen size
|
||
|
||
XSIZE = 80
|
||
YSIZE = 25
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O definitions
|
||
|
||
|
||
; I/O $d800: CRTC 6545
|
||
|
||
.struct CRTC
|
||
ADDR .byte
|
||
DATA .byte
|
||
.endstruct
|
||
|
||
|
||
; I/O $db00: CIA 6526, Inter Process Communication
|
||
;
|
||
; IPCcia = $db00
|
||
|
||
.struct CIA
|
||
PRA .byte
|
||
PRB .byte
|
||
DDRA .byte
|
||
DDRB .byte
|
||
.union
|
||
.struct
|
||
TALO .byte
|
||
TAHI .byte
|
||
.endstruct
|
||
TA .word
|
||
.endunion
|
||
.union
|
||
.struct
|
||
TBLO .byte
|
||
TBHI .byte
|
||
.endstruct
|
||
TB .word
|
||
.endunion
|
||
TOD10 .byte
|
||
TODSEC .byte
|
||
TODMIN .byte
|
||
TODHR .byte
|
||
SDR .byte
|
||
ICR .byte
|
||
CRA .byte
|
||
CRB .byte
|
||
.endstruct
|
||
|
||
|
||
; I/O $dc00: CIA 6526
|
||
;
|
||
; cia = $dc00
|
||
|
||
|
||
; I/O $dd00: ACIA 6551
|
||
;
|
||
; acia = $dd00
|
||
|
||
.struct ACIA
|
||
DATA .byte
|
||
STATUS .byte
|
||
CMD .byte
|
||
CTRL .BYTE
|
||
.endstruct
|
||
|
||
|
||
; I/O $de00: Triport #1 6525
|
||
;
|
||
; tpi1 = $de00
|
||
|
||
.struct TPI
|
||
PRA .byte
|
||
PRB .byte
|
||
.union
|
||
PRC .byte
|
||
INT .byte
|
||
.endunion
|
||
DDRA .byte
|
||
DDRB .byte
|
||
.union
|
||
DDRC .byte
|
||
IMR .byte
|
||
.endunion
|
||
CR .byte
|
||
AIR .byte
|
||
.endstruct
|
||
|
||
|
||
; I/O $df00: Triport #2 6525
|
||
|
||
; tpi2 = $df00
|
||
|
||
|
||
;-----------------------------------------------------------------------------
|
||
|
||
BASIC_BUF := $FA5E ; Bank 1 location of command-line
|
||
BASIC_BUF_LEN = 162 ; Maximum length of command-line
|
||
;-------------------------------------------------------------------------
|
||
; POKEY Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
; Read Addresses
|
||
|
||
POT0 = POKEY + $00 ;potentiometer 0
|
||
POT1 = POKEY + $01 ;potentiometer 1
|
||
POT2 = POKEY + $02 ;potentiometer 2
|
||
POT3 = POKEY + $03 ;potentiometer 3
|
||
POT4 = POKEY + $04 ;potentiometer 4
|
||
POT5 = POKEY + $05 ;potentiometer 5
|
||
POT6 = POKEY + $06 ;potentiometer 6
|
||
POT7 = POKEY + $07 ;potentiometer 7
|
||
|
||
ALLPOT = POKEY + $08 ;potentiometer port status
|
||
KBCODE = POKEY + $09 ;keyboard code
|
||
RANDOM = POKEY + $0A ;random number generator
|
||
SERIN = POKEY + $0D ;serial port input
|
||
IRQST = POKEY + $0E ;IRQ interrupt status
|
||
SKSTAT = POKEY + $0F ;serial port and keyboard status
|
||
|
||
; Write Addresses
|
||
|
||
AUDF1 = POKEY + $00 ;channel 1 audio frequency
|
||
AUDC1 = POKEY + $01 ;channel 1 audio control
|
||
|
||
AUDF2 = POKEY + $02 ;channel 2 audio frequency
|
||
AUDC2 = POKEY + $03 ;channel 2 audio control
|
||
|
||
AUDF3 = POKEY + $04 ;channel 3 audio frequency
|
||
AUDC3 = POKEY + $05 ;channel 3 audio control
|
||
|
||
AUDF4 = POKEY + $06 ;channel 4 audio frequency
|
||
AUDC4 = POKEY + $07 ;channel 4 audio control
|
||
|
||
AUDCTL = POKEY + $08 ;audio control
|
||
STIMER = POKEY + $09 ;start timers
|
||
SKRES = POKEY + $0A ;reset SKSTAT status
|
||
POTGO = POKEY + $0B ;start potentiometer scan sequence
|
||
SEROUT = POKEY + $0D ;serial port output
|
||
IRQEN = POKEY + $0E ;IRQ interrupt enable
|
||
SKCTL = POKEY + $0F ;serial port and keyboard control
|
||
|
||
;
|
||
; Ullrich von Bassewitz, 16.05.2000
|
||
;
|
||
|
||
; Variables and functions
|
||
|
||
.global __errno, __oserror
|
||
.global __osmaperrno
|
||
.global __seterrno
|
||
.global __directerrno, __mappederrno
|
||
|
||
; Error codes, must match the values in the C headers
|
||
.enum
|
||
EOK ; No error
|
||
ENOENT ; No such file or directory
|
||
ENOMEM ; Out of memory
|
||
EACCES ; Permission denied
|
||
ENODEV ; No such device
|
||
EMFILE ; Too many open files
|
||
EBUSY ; Device or resource busy
|
||
EINVAL ; Invalid argument
|
||
ENOSPC ; No space left on device
|
||
EEXIST ; File exists
|
||
EAGAIN ; Try again
|
||
EIO ; I/O error
|
||
EINTR ; Interrupted system call
|
||
ENOSYS ; Function not implemented
|
||
ESPIPE ; Illegal seek
|
||
ERANGE ; Range error
|
||
EBADF ; Bad file number
|
||
ENOEXEC ; Exec format error
|
||
EUNKNOWN ; Unknown OS specific error - must be last!
|
||
|
||
EMAX = EUNKNOWN ; Highest error code
|
||
.endenum
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Atari 5200 System Equates
|
||
; by Christian Groessler <chris@groessler.org>
|
||
; taken from EQUATES.INC from Atari Inc.
|
||
;-------------------------------------------------------------------------
|
||
|
||
;-------------------------------------------------------------------------
|
||
; ATASCII CHARACTER DEFS
|
||
;-------------------------------------------------------------------------
|
||
|
||
ATEOL = $9B ;END-OF-LINE, used by CONIO
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Zero Page
|
||
;-------------------------------------------------------------------------
|
||
|
||
POKMSK = $00 ;Mask for Pokey IRQ enable
|
||
RTCLOK = $01 ;60 hz. clock
|
||
JUMP = $01
|
||
CRITIC = $03 ;Critical section
|
||
ATRACT = $04 ;Attract Mode
|
||
|
||
SDLSTL = $05 ;DLISTL Shadow
|
||
SDLSTH = $06 ;DLISTH "
|
||
SDMCTL = $07 ;DMACTL "
|
||
|
||
PCOLR0 = $08 ;COLPM0 Shadow
|
||
PCOLR1 = $09 ;COLPM1 "
|
||
PCOLR2 = $0A ;COLPM2 "
|
||
PCOLR3 = $0B ;COLPM3 "
|
||
|
||
COLOR0 = $0C ;COLPF0 Shadow
|
||
COLOR1 = $0D ;COLPF1 "
|
||
COLOR2 = $0E ;COLPF2 "
|
||
COLOR3 = $0F ;COLPF3 "
|
||
COLOR4 = $10 ;COLBK "
|
||
|
||
PADDL0 = $11 ;POT0 Shadow
|
||
PADDL1 = $12 ;POT1 "
|
||
PADDL2 = $13 ;POT2 "
|
||
PADDL3 = $14 ;POT3 "
|
||
PADDL4 = $15 ;POT4 "
|
||
PADDL5 = $16 ;POT5 "
|
||
PADDL6 = $17 ;POT6 "
|
||
PADDL7 = $18 ;POT7 "
|
||
|
||
; cc65 runtime zero page variables
|
||
|
||
ROWCRS_5200 = $19
|
||
COLCRS_5200 = $1A
|
||
SAVMSC = $1B ; pointer to screen memory (conio)
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Page #2
|
||
;-------------------------------------------------------------------------
|
||
|
||
;Interrupt Vectors
|
||
|
||
VIMIRQ = $0200 ;Immediate IRQ
|
||
;Preset $FC03 (SYSIRQ)
|
||
VVBLKI = $0202 ;Vblank immediate
|
||
;Preset $FCB8 (SYSVBL)
|
||
VVBLKD = $0204 ;Vblank deferred
|
||
;Preset $FCB2 (XITVBL)
|
||
VDSLST = $0206 ;Display List
|
||
;Preset $FEA1 (OSDLI)
|
||
VKYBDI = $0208 ;Keyboard immediate
|
||
;Preset $FD02 (SYSKBD)
|
||
VKYBDF = $020A ;Deferred Keyboard
|
||
;Preset $FCB2 (XITVBL)
|
||
VTRIGR = $020C ;Soft Trigger
|
||
VBRKOP = $020E ;BRK Opcode
|
||
VSERIN = $0210 ;Serial in Ready
|
||
VSEROR = $0212 ;Serial Out Ready
|
||
VSEROC = $0214 ;Serial Output complete
|
||
VTIMR1 = $0216 ;Pokey Timer 1
|
||
VTIMR2 = $0218 ;Pokey Timer 2
|
||
VTIMR4 = $021A ;Pokey Timer 4
|
||
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; CTIA/GTIA Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
GTIA = $C000 ;CTIA/GTIA area
|
||
.include "atari_gtia.inc"
|
||
|
||
;-------------------------------------------------------------------------
|
||
; ANTIC Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
ANTIC = $D400 ;ANTIC area
|
||
.include "atari_antic.inc"
|
||
|
||
;-------------------------------------------------------------------------
|
||
; POKEY Address Equates
|
||
;-------------------------------------------------------------------------
|
||
|
||
POKEY = $E800 ;POKEY area
|
||
.include "atari_pokey.inc"
|
||
|
||
|
||
;-------------------------------------------------------------------------
|
||
; Cartridge Parameters
|
||
;-------------------------------------------------------------------------
|
||
|
||
CARTNM = $BFE8 ;Cartridge Name Area
|
||
COPYD = $BFFC ;Copyright Decade in Cart
|
||
COPYR = $BFFD ;Copyright Year in Cart
|
||
; $FF=Diagnostic Cart
|
||
GOCART = $BFFE ;Cartridge Start Vector
|
||
|
||
|
||
CHRORG = $F800 ;Character Generator Base
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* stdio.inc */
|
||
;* */
|
||
;* Mirror definitions for stdio.h */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2003-2005, Ullrich von Bassewitz */
|
||
;* R<>merstrasse 52 */
|
||
;* D-70794 Filderstadt */
|
||
;* EMail: uz@cc65.org */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Constants
|
||
|
||
_IOFBF = 0
|
||
_IOLBF = 1
|
||
_IONBF = 2
|
||
BUFSIZ = 256
|
||
EOF = -1
|
||
.if .defined(__APPLE2__)
|
||
FILENAME_MAX = 64+1
|
||
.elseif .defined(__ATARI__)
|
||
FILENAME_MAX = 12+1
|
||
.elseif .defined(__LUNIX__)
|
||
FILENAME_MAX = 80+1
|
||
.else
|
||
FILENAME_MAX = 16+1
|
||
.endif
|
||
L_tmpnam = FILENAME_MAX
|
||
SEEK_CUR = 0
|
||
SEEK_END = 1
|
||
SEEK_SET = 2
|
||
TMP_MAX = 256
|
||
|
||
; Maximum number of open files (size of the file table)
|
||
FOPEN_MAX = 8
|
||
|
||
;----------------------------------------------------------------------------
|
||
; External variables
|
||
|
||
.global _stdin
|
||
.global _stdout
|
||
.global _stderr
|
||
|
||
|
||
|
||
;
|
||
; Zero page variables and I/O definitions for the CBM 510
|
||
;
|
||
; Taken from a kernal disassembly done by myself in 2000/2001.
|
||
;
|
||
; 2001-09-13, Ullrich von Bassewitz
|
||
; 2014-04-02, Greg King
|
||
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Zeropage stuff
|
||
|
||
ExecReg := $00 ; Controls execution memory bank
|
||
IndReg := $01 ; Controls indirect indexed load-store bank
|
||
|
||
TXTPTR := $85 ; Far pointer into BASIC source code
|
||
FNAM := $90 ; Far pointer to LOAD/SAVE file-name
|
||
FNAM_LEN := $9D ; Holds length of file-name
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Screen size
|
||
|
||
XSIZE = 40
|
||
YSIZE = 25
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; I/O Definitions
|
||
; Note: These numbers aren't addresses. They are offsets from the start of
|
||
; each chip's register set. They are used in the indirect indexed addressing
|
||
; mode.
|
||
|
||
; I/O $d800: VIC-II
|
||
|
||
VIC_SPR0_X = $00
|
||
VIC_SPR0_Y = $01
|
||
VIC_SPR1_X = $02
|
||
VIC_SPR1_Y = $03
|
||
VIC_SPR2_X = $04
|
||
VIC_SPR2_Y = $05
|
||
VIC_SPR3_X = $06
|
||
VIC_SPR3_Y = $07
|
||
VIC_SPR4_X = $08
|
||
VIC_SPR4_Y = $09
|
||
VIC_SPR5_X = $0A
|
||
VIC_SPR5_Y = $0B
|
||
VIC_SPR6_X = $0C
|
||
VIC_SPR6_Y = $0D
|
||
VIC_SPR7_X = $0E
|
||
VIC_SPR7_Y = $0F
|
||
VIC_SPR_HI_X = $10
|
||
VIC_SPR_ENA = $15
|
||
VIC_SPR_EXP_Y = $17
|
||
VIC_SPR_EXP_X = $1D
|
||
VIC_SPR_MCOLOR = $1C
|
||
VIC_SPR_BG_PRIO = $1B
|
||
|
||
VIC_SPR_MCOLOR0 = $25
|
||
VIC_SPR_MCOLOR1 = $26
|
||
|
||
VIC_SPR0_COLOR = $27
|
||
VIC_SPR1_COLOR = $28
|
||
VIC_SPR2_COLOR = $29
|
||
VIC_SPR3_COLOR = $2A
|
||
VIC_SPR4_COLOR = $2B
|
||
VIC_SPR5_COLOR = $2C
|
||
VIC_SPR6_COLOR = $2D
|
||
VIC_SPR7_COLOR = $2E
|
||
|
||
VIC_CTRL1 = $11
|
||
VIC_CTRL2 = $16
|
||
|
||
VIC_HLINE = $12
|
||
|
||
VIC_LPEN_X = $13
|
||
VIC_LPEN_Y = $14
|
||
|
||
VIC_VIDEO_ADR = $18
|
||
|
||
VIC_IRR = $19 ; Interrupt request register
|
||
VIC_IMR = $1A ; Interrupt mask register
|
||
|
||
VIC_BORDERCOLOR = $20
|
||
VIC_BG_COLOR0 = $21
|
||
VIC_BG_COLOR1 = $22
|
||
VIC_BG_COLOR2 = $23
|
||
VIC_BG_COLOR3 = $24
|
||
|
||
|
||
; I/O $da00: SID 6581
|
||
|
||
SID_S1Lo = $00
|
||
SID_S1Hi = $01
|
||
SID_PB1Lo = $02
|
||
SID_PB1Hi = $03
|
||
SID_Ctl1 = $04
|
||
SID_AD1 = $05
|
||
SID_SUR1 = $06
|
||
|
||
SID_S2Lo = $07
|
||
SID_S2Hi = $08
|
||
SID_PB2Lo = $09
|
||
SID_PB2Hi = $0A
|
||
SID_Ctl2 = $0B
|
||
SID_AD2 = $0C
|
||
SID_SUR2 = $0D
|
||
|
||
SID_S3Lo = $0E
|
||
SID_S3Hi = $0F
|
||
SID_PB3Lo = $10
|
||
SID_PB3Hi = $11
|
||
SID_Ctl3 = $12
|
||
SID_AD3 = $13
|
||
SID_SUR3 = $14
|
||
|
||
SID_FltLo = $15
|
||
SID_FltHi = $16
|
||
SID_FltCtl = $17
|
||
SID_Amp = $18
|
||
SID_ADConv1 = $19
|
||
SID_ADConv2 = $1A
|
||
SID_Noise = $1B
|
||
SID_Read3 = $1C
|
||
|
||
|
||
; I/O $db00: CIA 6526, Inter Process Communication
|
||
; I/O $dc00: CIA 6526
|
||
|
||
.struct CIA
|
||
PRA .byte
|
||
PRB .byte
|
||
DDRA .byte
|
||
DDRB .byte
|
||
.union
|
||
.struct
|
||
TALO .byte
|
||
TAHI .byte
|
||
.endstruct
|
||
TA .word
|
||
.endunion
|
||
.union
|
||
.struct
|
||
TBLO .byte
|
||
TBHI .byte
|
||
.endstruct
|
||
TB .word
|
||
.endunion
|
||
TOD10 .byte
|
||
TODSEC .byte
|
||
TODMIN .byte
|
||
TODHR .byte
|
||
SDR .byte
|
||
ICR .byte
|
||
CRA .byte
|
||
CRB .byte
|
||
.endstruct
|
||
|
||
|
||
; I/O $dd00: ACIA 6551
|
||
|
||
.struct ACIA
|
||
DATA .byte
|
||
STATUS .byte
|
||
CMD .byte
|
||
CTRL .BYTE
|
||
.endstruct
|
||
|
||
|
||
; I/O $de00: Triport #1 6525
|
||
; I/O $df00: Triport #2 6525
|
||
|
||
.struct TPI
|
||
PRA .byte
|
||
PRB .byte
|
||
.union
|
||
PRC .byte
|
||
INT .byte
|
||
.endunion
|
||
DDRA .byte
|
||
DDRB .byte
|
||
.union
|
||
DDRC .byte
|
||
IMR .byte
|
||
.endunion
|
||
CR .byte
|
||
AIR .byte
|
||
.endstruct
|
||
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Our video memory address
|
||
|
||
COLOR_RAM := $D400 ; System bank
|
||
|
||
|
||
;-----------------------------------------------------------------------------
|
||
|
||
BASIC_BUF := $FB5E ; Bank 0 location of command-line
|
||
BASIC_BUF_LEN = 162 ; Maximum length of command-line
|
||
;-------------------------------------------------------------------------------
|
||
; gamate.inc
|
||
;
|
||
; Gamate system specific definitions
|
||
;
|
||
; (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)
|
||
; based on technical reference by PeT (mess@utanet.at)
|
||
;-------------------------------------------------------------------------------
|
||
|
||
; look at gamate.h for comments, they are not duplicated here
|
||
|
||
AUDIO_BASE = $4000
|
||
|
||
JOY_DATA = $4400
|
||
|
||
JOY_DATA_UP = $01
|
||
JOY_DATA_DOWN = $02
|
||
JOY_DATA_LEFT = $04
|
||
JOY_DATA_RIGHT = $08
|
||
JOY_DATA_FIRE_A = $10
|
||
JOY_DATA_FIRE_B = $20
|
||
JOY_DATA_START = $40
|
||
JOY_DATA_SELECT = $80
|
||
|
||
LCD_WIDTH = 160
|
||
LCD_HEIGHT = 152
|
||
|
||
LCD_BASE = $5000
|
||
LCD_MODE = $5001
|
||
LCD_XPOS = $5002
|
||
LCD_YPOS = $5003
|
||
LCD_X = $5004
|
||
LCD_Y = $5005
|
||
LCD_READ = $5006
|
||
LCD_DATA = $5007
|
||
|
||
LCD_MODE_INC_X = $00
|
||
LCD_MODE_INC_Y = $40
|
||
LCD_XPOS_PLANE1 = $00
|
||
LCD_XPOS_PLANE2 = $80
|
||
|
||
; constants for the conio implementation
|
||
charsperline = (LCD_WIDTH / 8)
|
||
screenrows = (LCD_HEIGHT / 8)
|
||
|
||
CH_HLINE = 1
|
||
CH_VLINE = 2
|
||
|
||
COLOR_WHITE = 0
|
||
COLOR_GREY2 = 1
|
||
COLOR_GREY1 = 2
|
||
COLOR_BLACK = 3
|
||
|
||
; bios zp usage:
|
||
ZP_NMI_4800 = $0a
|
||
ZP_IRQ_COUNT = $0b
|
||
ZP_IRQ_CTRL = $0c
|
||
|
||
ZP_IRQ_CNT1 = $0e
|
||
ZP_IRQ_CNT2 = $0f
|
||
ZP_IRQ_CNT3 = $10
|
||
ZP_IRQ_CNT4 = $11
|
||
|
||
ZP_NMI_FLAG = $e8
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* tgi-vectorfont.inc */
|
||
;* */
|
||
;* TGI vector font definitions */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2009, Ullrich von Bassewitz */
|
||
;* Roemerstrasse 52 */
|
||
;* D-70794 Filderstadt */
|
||
;* EMail: uz@cc65.org */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Vectorfont constants
|
||
|
||
TGI_VF_VERSION = $00 ; File version number
|
||
TGI_VF_FIRSTCHAR = $20 ; First char in file
|
||
TGI_VF_LASTCHAR = $7E ; Last char in file
|
||
TGI_VF_CCOUNT = (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1)
|
||
|
||
;------------------------------------------------------------------------------
|
||
; TCH file header and font data structures
|
||
|
||
; TCH file header
|
||
.struct TGI_VF_HDR
|
||
MAGIC .byte 3 ; "TCH"
|
||
VERSION .byte 1 ; Version number
|
||
SIZE .word 1 ; Font data size
|
||
.endstruct
|
||
|
||
; Font data loaded directly from file
|
||
.struct TGI_VECTORFONT
|
||
TOP .byte ; Height of char
|
||
BOTTOM .byte ; Descender
|
||
HEIGHT .byte ; Maximum char height
|
||
WIDTHS .byte ::TGI_VF_CCOUNT ; Char widths
|
||
CHARS .word ::TGI_VF_CCOUNT ; Pointer to character defs
|
||
OPS .byte ; Actually dynamic
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _tgi_vectorchar
|
||
|
||
|
||
|
||
.ifndef DYN_DRV
|
||
DYN_DRV = 1
|
||
.endif
|
||
|
||
.macro module_header module_label
|
||
.if DYN_DRV
|
||
.segment "HEADER"
|
||
.else
|
||
.data
|
||
.export module_label
|
||
module_label:
|
||
.endif
|
||
.endmacro
|
||
;*****************************************************************************/
|
||
;* */
|
||
;* o65.inc */
|
||
;* */
|
||
;* Definitions for the o65 file format */
|
||
;* */
|
||
;* */
|
||
;* */
|
||
;* (C) 2002-2009, Ullrich von Bassewitz */
|
||
;* Roemerstrasse 52 */
|
||
;* D-70794 Filderstadt */
|
||
;* EMail: uz@cc65.org */
|
||
;* */
|
||
;* */
|
||
;* This software is provided 'as-is', without any expressed or implied */
|
||
;* warranty. In no event will the authors be held liable for any damages */
|
||
;* arising from the use of this software. */
|
||
;* */
|
||
;* Permission is granted to anyone to use this software for any purpose, */
|
||
;* including commercial applications, and to alter it and redistribute it */
|
||
;* freely, subject to the following restrictions: */
|
||
;* */
|
||
;* 1. The origin of this software must not be misrepresented; you must not */
|
||
;* claim that you wrote the original software. If you use this software */
|
||
;* in a product, an acknowledgment in the product documentation would be */
|
||
;* appreciated but is not required. */
|
||
;* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;* be misrepresented as being the original software. */
|
||
;* 3. This notice may not be removed or altered from any source */
|
||
;* distribution. */
|
||
;* */
|
||
;*****************************************************************************/
|
||
|
||
|
||
|
||
; This files exports structures and constants to handle the o65 relocatable
|
||
; file format as defined by Andre Fachat.
|
||
|
||
|
||
|
||
; The o65 header structure (6502 format)
|
||
.struct O65_HDR
|
||
MARKER .byte 2 ; Non-C64 marker: $01 $00
|
||
MAGIC .byte 3 ; o65 magic: "o65"
|
||
VERSION .byte 1 ; Version number
|
||
MODE .word ; Mode word
|
||
TBASE .word ; Original text (code) segment address
|
||
TLEN .word ; Size of text (code) segment
|
||
DBASE .word ; Original data segment address
|
||
DLEN .word ; Size of data segment
|
||
BBASE .word ; Original bss segment address
|
||
BLEN .word ; Size of bss segment
|
||
ZBASE .word ; Original zp segment address
|
||
ZLEN .word ; Size of zp segment
|
||
STACK .word ; Stacksize needed
|
||
.endstruct
|
||
|
||
; Marker, magic and version number
|
||
O65_MARKER_0 = $01
|
||
O65_MARKER_1 = $00
|
||
O65_MAGIC_0 = $6F ; 'o'
|
||
O65_MAGIC_1 = $36 ; '6'
|
||
O65_MAGIC_2 = $35 ; '5'
|
||
O65_VERSION = $00
|
||
|
||
; Defines for the mode word
|
||
O65_CPU_65816 = $8000 ; Executable is for 65816
|
||
O65_CPU_6502 = $0000 ; Executable is for the 6502
|
||
O65_CPU_MASK = $8000 ; Mask to extract CPU type
|
||
|
||
O65_RELOC_PAGE = $4000 ; Page wise relocation
|
||
O65_RELOC_BYTE = $0000 ; Byte wise relocation
|
||
O65_RELOC_MASK = $4000 ; Mask to extract relocation type
|
||
|
||
O65_SIZE_32BIT = $2000 ; All size words are 32bit
|
||
O65_SIZE_16BIT = $0000 ; All size words are 16bit
|
||
O65_SIZE_MASK = $2000 ; Mask to extract size
|
||
|
||
O65_FTYPE_OBJ = $1000 ; Object file
|
||
O65_FTYPE_EXE = $0000 ; Executable file
|
||
O65_FTYPE_MASK = $1000 ; Mask to extract type
|
||
|
||
O65_ADDR_SIMPLE = $0800 ; Simple addressing
|
||
O65_ADDR_DEFAULT = $0000 ; Default addressing
|
||
O65_ADDR_MASK = $0800 ; Mask to extract addressing
|
||
|
||
O65_CHAIN = $0400 ; Chained file, another one follows
|
||
O65_CHAIN_MASK = $0400 ; Mask to extract chain flag
|
||
|
||
O65_BSSZERO = $0200 ; BSS segment must be zeroed
|
||
O65_BSSZERO_MASK = $0200 ; Mask to extract bss zero flag
|
||
|
||
; The following is used if O65_CPU == 6502
|
||
O65_CPU2_6502 = $0000 ; Executable is for 6502
|
||
O65_CPU2_65C02 = $0010 ; Executable is for 65C02
|
||
O65_CPU2_65SC02 = $0020 ; Executable is for 65SC02
|
||
O65_CPU2_65CE02 = $0030 ; Executable is for 65CE02
|
||
O65_CPU2_6502X = $0040 ; Executable is for NMOS 6502
|
||
O65_CPU2_65816_EMU = $0050 ; Executable is for 65816 in emul mode
|
||
O65_CPU2_MASK = $00F0 ; Mask to extract CPU2 field
|
||
|
||
O65_ALIGN_1 = $0000 ; Bytewise alignment
|
||
O65_ALIGN_2 = $0001 ; Align words
|
||
O65_ALIGN_4 = $0002 ; Align longwords
|
||
O65_ALIGN_256 = $0003 ; Align pages (256 bytes)
|
||
O65_ALIGN_MASK = $0003 ; Mask to extract alignment
|
||
|
||
; The mode word as generated by the ld65 linker
|
||
O65_MODE_CC65 = O65_CPU_6502 | O65_RELOC_BYTE | O65_SIZE_16BIT | O65_FTYPE_EXE | O65_ADDR_SIMPLE | O65_ALIGN_1
|
||
|
||
; Relocation type codes
|
||
O65_RTYPE_WORD = $80
|
||
O65_RTYPE_HIGH = $40
|
||
O65_RTYPE_LOW = $20
|
||
O65_RTYPE_SEGADDR = $C0
|
||
O65_RTYPE_SEG = $A0
|
||
O65_RTYPE_MASK = $E0
|
||
|
||
; Segment IDs
|
||
O65_SEGID_UNDEF = $00
|
||
O65_SEGID_ABS = $01
|
||
O65_SEGID_TEXT = $02
|
||
O65_SEGID_DATA = $03
|
||
O65_SEGID_BSS = $04
|
||
O65_SEGID_ZP = $05
|
||
O65_SEGID_MASK = $07
|
||
|
||
; Option tags
|
||
O65_OPT_FILENAME = 0
|
||
O65_OPT_OS = 1
|
||
O65_OPT_ASM = 2
|
||
O65_OPT_AUTHOR = 3
|
||
O65_OPT_TIMESTAMP = 4
|
||
|
||
; Operating system codes for O65_OPT_OS
|
||
O65_OS_OSA65 = 1
|
||
O65_OS_LUNIX = 2
|
||
O65_OS_CC65 = 3
|
||
O65_OS_OPENCBM = 4
|
||
|
||
; Load errors
|
||
O65_LOAD_OK = 0 ; Module load successful
|
||
O65_LOAD_ERR_READ = 1 ; Read error
|
||
O65_LOAD_ERR_HDR = 2 ; Header error
|
||
O65_LOAD_ERR_OS = 3 ; Wrong OS
|
||
O65_LOAD_ERR_FMT = 4 ; Data format error
|
||
O65_LOAD_ERR_MEM = 5 ; Not enough memory
|
||
|
||
|
||
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* joy-kernel.inc */
|
||
;/* */
|
||
;/* Internally used joystick functions */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2002-2006, Ullrich von Bassewitz */
|
||
;/* R<>merstra<72>e 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver header stuff
|
||
|
||
.struct JOY_HDR
|
||
ID .byte 3 ; $6A, $6F, $79 ("joy")
|
||
VERSION .byte 1 ; Interface version
|
||
LIBREF .addr ; Library reference
|
||
MASKS .byte 8 ; Joystick state mask array
|
||
JUMPTAB .struct
|
||
INSTALL .addr ; INSTALL routine
|
||
UNINSTALL .addr ; UNINSTALL routine
|
||
COUNT .addr ; COUNT routine
|
||
READ .addr ; READ routine
|
||
IRQ .addr ; IRQ routine
|
||
.endstruct
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The JOY API version, stored in JOY_HDR::VERSION
|
||
|
||
JOY_API_VERSION = $03
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Variables
|
||
|
||
.global _joy_drv ; Pointer to driver
|
||
.global _joy_masks
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver entry points
|
||
|
||
.global joy_install
|
||
.global joy_uninstall
|
||
.global joy_count
|
||
.global joy_read
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _joy_load_driver
|
||
.global _joy_unload
|
||
.global _joy_install
|
||
.global _joy_uninstall
|
||
.global _joy_count
|
||
.global _joy_read
|
||
|
||
.global _joy_clear_ptr
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* utsname.inc */
|
||
;/* */
|
||
;/* Return system information */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2003 Ullrich von Bassewitz */
|
||
;/* R<>merstrasse 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
; Struct utsname
|
||
.struct utsname
|
||
sysname .byte 17
|
||
nodename .byte 9
|
||
release .byte 9
|
||
version .byte 9
|
||
machine .byte 25
|
||
.endstruct
|
||
|
||
|
||
|
||
; smc.mac
|
||
; ca65 Macro-Pack for Self Modifying Code (SMC)
|
||
;
|
||
; (c) Christian Krüger, latest change: 17-Jul-2016
|
||
;
|
||
; This software is provided 'as-is', without any expressed or implied
|
||
; warranty. In no event will the authors be held liable for any damages
|
||
; arising from the use of this software.
|
||
;
|
||
; Permission is granted to anyone to use this software for any purpose,
|
||
; including commercial applications, and to alter it and redistribute it
|
||
; freely, subject to the following restrictions:
|
||
;
|
||
; 1. The origin of this software must not be misrepresented; you must not
|
||
; claim that you wrote the original software. If you use this software
|
||
; in a product, an acknowledgment in the product documentation would be
|
||
; appreciated but is not required.
|
||
; 2. Altered source versions must be plainly marked as such, and must not
|
||
; be misrepresented as being the original software.
|
||
; 3. This notice may not be removed or altered from any source
|
||
; distribution.
|
||
;
|
||
|
||
.define _SMCDesignator .mid(0, .tcount(label) - 1, label) .ident(.concat(.string(.right(1, label)), "_SMC"))
|
||
.define _SMCAlias .mid(0, .tcount(alias) - 1, alias) .ident(.concat(.string(.right(1, alias)), "_SMC"))
|
||
.define SMC_AbsAdr $FADE
|
||
.define SMC_ZpAdr $00
|
||
.define SMC_Opcode nop
|
||
.define SMC_Value $42
|
||
|
||
.macro SMC_OperateOnValue opcode, label
|
||
opcode _SMCDesignator+1
|
||
.endmacro
|
||
|
||
.macro SMC_OperateOnLowByte opcode, label
|
||
SMC_OperateOnValue opcode, label
|
||
.endmacro
|
||
|
||
.macro SMC_OperateOnHighByte opcode, label
|
||
opcode _SMCDesignator + 2
|
||
.endmacro
|
||
|
||
.macro SMC_Import alias
|
||
.import _SMCAlias
|
||
.endmacro
|
||
|
||
.macro SMC_Export alias, label
|
||
.export _SMCAlias := _SMCDesignator
|
||
.endmacro
|
||
|
||
.macro SMC label, statement
|
||
_SMCDesignator: statement
|
||
.endmacro
|
||
|
||
.macro SMC_TransferOpcode label, opcode, register
|
||
.if .paramcount = 2 .or .match ({register}, a) .or .match ({register}, )
|
||
lda #opcode
|
||
sta _SMCDesignator
|
||
.elseif .match ({register}, x)
|
||
ldx #opcode
|
||
stx _SMCDesignator
|
||
.elseif .match ({register}, y)
|
||
ldy #opcode
|
||
sty _SMCDesignator
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_TransferOpcode'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_LoadOpcode label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
lda _SMCDesignator
|
||
.elseif .match ({register}, x)
|
||
ldx _SMCDesignator
|
||
.elseif .match ({register}, y)
|
||
ldy _SMCDesignator
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_LoadOpcode'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_StoreOpcode label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
sta _SMCDesignator
|
||
.elseif .match ({register}, x)
|
||
stx _SMCDesignator
|
||
.elseif .match ({register}, y)
|
||
sty _SMCDesignator
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_StoreOpcode'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_ChangeBranch label, destination, register
|
||
.if .paramcount = 2 .or .match ({register}, a) .or .match ({register}, )
|
||
lda #(<(destination - _SMCDesignator -2))
|
||
sta _SMCDesignator+1
|
||
.elseif .match ({register}, x)
|
||
ldx #(<(destination - _SMCDesignator - 2))
|
||
stx _SMCDesignator+1
|
||
.elseif .match ({register}, y)
|
||
ldy #(<(destination - _SMCDesignator - 2))
|
||
sty _SMCDesignator+1
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_ChangeBranch'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_TransferValue label, value, register
|
||
.if .paramcount = 2 .or .match ({register}, a) .or .match ({register}, )
|
||
lda value
|
||
sta _SMCDesignator+1
|
||
.elseif .match ({register}, x)
|
||
ldx value
|
||
stx _SMCDesignator+1
|
||
.elseif .match ({register}, y)
|
||
ldy value
|
||
sty _SMCDesignator+1
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_TransferValue'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_LoadValue label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
lda _SMCDesignator+1
|
||
.elseif .match ({register}, x)
|
||
ldx _SMCDesignator+1
|
||
.elseif .match ({register}, y)
|
||
ldy _SMCDesignator+1
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_LoadValue'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_StoreValue label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
sta _SMCDesignator+1
|
||
.elseif .match ({register}, x)
|
||
stx _SMCDesignator+1
|
||
.elseif .match ({register}, y)
|
||
sty _SMCDesignator+1
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_StoreValue'"
|
||
.endif
|
||
.endmacro
|
||
|
||
|
||
.macro SMC_TransferLowByte label, value, register
|
||
SMC_TransferValue label, value, register
|
||
.endmacro
|
||
|
||
.macro SMC_LoadLowByte label, register
|
||
SMC_LoadValue label, register
|
||
.endmacro
|
||
|
||
.macro SMC_StoreLowByte label, register
|
||
SMC_StoreValue label, register
|
||
.endmacro
|
||
|
||
.macro SMC_TransferHighByte label, value, register
|
||
.if .paramcount = 2 .or .match ({register}, a) .or .match ({register}, )
|
||
lda value
|
||
sta _SMCDesignator+2
|
||
.elseif .match ({register}, x)
|
||
ldx value
|
||
stx _SMCDesignator+2
|
||
.elseif .match ({register}, y)
|
||
ldy value
|
||
sty _SMCDesignator+2
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_TransferHighByte'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_LoadHighByte label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
lda _SMCDesignator+2
|
||
.elseif .match ({register}, x)
|
||
ldx _SMCDesignator+2
|
||
.elseif .match ({register}, y)
|
||
ldy _SMCDesignator+2
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_LoadHighByte'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_StoreHighByte label, register
|
||
.if .paramcount = 1 .or .match ({register}, a) .or .match ({register}, )
|
||
sta _SMCDesignator+2
|
||
.elseif .match ({register}, x)
|
||
stx _SMCDesignator+2
|
||
.elseif .match ({register}, y)
|
||
sty _SMCDesignator+2
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_StoreHighByte'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_TransferAddressSingle label, address, register
|
||
.if .paramcount = 2 .or .match ((register), a) .or .match ({register}, )
|
||
.if (.match (.left (1, {address}), #))
|
||
; immediate mode
|
||
lda #<(.right (.tcount ({address})-1, {address}))
|
||
sta _SMCDesignator+1
|
||
lda #>(.right (.tcount ({address})-1, {address}))
|
||
sta _SMCDesignator+2
|
||
.else
|
||
; assume absolute or zero page
|
||
lda address
|
||
sta _SMCDesignator+1
|
||
lda 1+(address)
|
||
sta _SMCDesignator+2
|
||
.endif
|
||
.elseif .match ((register), x)
|
||
.if (.match (.left (1, {address}), #))
|
||
; immediate mode
|
||
ldx #<(.right (.tcount ({address})-1, {address}))
|
||
stx _SMCDesignator+1
|
||
ldx #>(.right (.tcount ({address})-1, {address}))
|
||
stx _SMCDesignator+2
|
||
.else
|
||
; assume absolute or zero page
|
||
ldx address
|
||
stx _SMCDesignator+1
|
||
ldx 1+(address)
|
||
stx _SMCDesignator+2
|
||
.endif
|
||
.elseif .match ((register), y)
|
||
.if (.match (.left (1, {address}), #))
|
||
; immediate mode
|
||
ldy #<(.right (.tcount ({address})-1, {address}))
|
||
sty _SMCDesignator+1
|
||
ldy #>(.right (.tcount ({address})-1, {address}))
|
||
sty _SMCDesignator+2
|
||
.else
|
||
; assume absolute or zero page
|
||
ldy address
|
||
sty _SMCDesignator+1
|
||
ldy 1+(address)
|
||
sty _SMCDesignator+2
|
||
.endif
|
||
.else
|
||
.error "Invalid usage of macro 'SMC_TransferAddressSingle'"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_TransferAddress label, address
|
||
.if (.match (.left (1, {address}), #))
|
||
; immediate mode
|
||
lda #<(.right (.tcount ({address})-1, {address}))
|
||
sta _SMCDesignator+1
|
||
ldx #>(.right (.tcount ({address})-1, {address}))
|
||
stx _SMCDesignator+2
|
||
.else
|
||
; assume absolute or zero page
|
||
lda {address}
|
||
sta _SMCDesignator+1
|
||
ldx 1+{address}
|
||
stx _SMCDesignator)+2
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro SMC_StoreAddress label
|
||
sta _SMCDesignator+1
|
||
stx _SMCDesignator+2
|
||
.endmacro
|
||
;
|
||
; C16 generic definitions.
|
||
;
|
||
; The C16 and Plus/4 are identical, so just include the Plus/4 include file.
|
||
|
||
|
||
.include "plus4.inc"
|
||
|
||
|
||
; CPU bitmask constants
|
||
CPU_ISET_NONE = $0001
|
||
CPU_ISET_6502 = $0002
|
||
CPU_ISET_6502X = $0004
|
||
CPU_ISET_65SC02 = $0008
|
||
CPU_ISET_65C02 = $0010
|
||
CPU_ISET_65816 = $0020
|
||
CPU_ISET_SWEET16 = $0040
|
||
CPU_ISET_HUC6280 = $0080
|
||
;CPU_ISET_M740 = $0100 not actually implemented
|
||
CPU_ISET_4510 = $0200
|
||
|
||
; CPU capabilities
|
||
CPU_NONE = CPU_ISET_NONE
|
||
CPU_6502 = CPU_ISET_6502
|
||
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
||
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
||
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
||
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
||
CPU_SWEET16 = CPU_ISET_SWEET16
|
||
CPU_HUC6280 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280
|
||
CPU_4510 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_4510
|
||
; Convert characters to screen codes
|
||
|
||
; Helper macro that converts and outputs one character
|
||
.macro _scrcode char
|
||
.if (char < 256)
|
||
.byte <(.strat ("h@dbdlhh", char >> 5) << 4) ^ char
|
||
.else
|
||
.error "scrcode: Character constant out of range"
|
||
.endif
|
||
.endmacro
|
||
|
||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
|
||
; Bail out if next argument is empty
|
||
.if .blank ({arg1})
|
||
.exitmacro
|
||
.endif
|
||
|
||
; Check for a string
|
||
.if .match ({arg1}, "")
|
||
|
||
; Walk over all string chars
|
||
.repeat .strlen (arg1), i
|
||
_scrcode {.strat (arg1, i)}
|
||
.endrepeat
|
||
|
||
; Check for a number
|
||
.elseif .match (.left (1, {arg1}), 0)
|
||
|
||
; Just output the number
|
||
_scrcode arg1
|
||
|
||
; Check for a character
|
||
.elseif .match (.left (1, {arg1}), 'a')
|
||
|
||
; Just output the character
|
||
_scrcode arg1
|
||
|
||
; Anything else is an error
|
||
.else
|
||
|
||
.error "scrcode: invalid argument type"
|
||
|
||
.endif
|
||
|
||
; Call the macro recursively with the remaining args
|
||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||
.endmacro
|
||
|
||
|
||
; opcodes.inc
|
||
; ca65 6502 - opcode definitions, mainly for self modifying code
|
||
;
|
||
; Christian Kr<4B>ger, latest change: 18-Sep-2010
|
||
;
|
||
; This software is provided 'as-is', without any expressed or implied
|
||
; warranty. In no event will the authors be held liable for any damages
|
||
; arising from the use of this software.
|
||
;
|
||
; Permission is granted to anyone to use this software for any purpose,
|
||
; including commercial applications, and to alter it and redistribute it
|
||
; freely, subject to the following restrictions:
|
||
;
|
||
; 1. The origin of this software must not be misrepresented; you must not
|
||
; claim that you wrote the original software. If you use this software
|
||
; in a product, an acknowledgment in the product documentation would be
|
||
; appreciated but is not required.
|
||
; 2. Altered source versions must be plainly marked as such, and must not
|
||
; be misrepresented as being the original software.
|
||
; 3. This notice may not be removed or altered from any source
|
||
; distribution.
|
||
;
|
||
|
||
; Opcode-Table
|
||
; ------------
|
||
; Post fix explanation:
|
||
; imm = #$00
|
||
; zp = $00
|
||
; zpx = $00,X
|
||
; zpy = $00,Y
|
||
; izp = ($00)
|
||
; izx = ($00,X)
|
||
; izy = ($00),Y
|
||
; abs = $0000
|
||
; abx = $0000,X
|
||
; aby = $0000,Y
|
||
; ind = ($0000)
|
||
; iax = ($0000,X)
|
||
; rel = $0000 (PC-relative) (supressed here)
|
||
|
||
.macpack cpu
|
||
|
||
OPC_BRK = $00
|
||
OPC_ORA_izx = $01
|
||
OPC_ORA_zp = $05
|
||
OPC_ASL_zp = $06
|
||
OPC_PHP = $08
|
||
OPC_ORA_imm = $09
|
||
OPC_ASL = $0A
|
||
OPC_ORA_abs = $0D
|
||
OPC_ASL_abs = $0E
|
||
|
||
OPC_BPL = $10
|
||
OPC_ORA_izy = $11
|
||
OPC_ORA_zpx = $15
|
||
OPC_ASL_zpx = $16
|
||
OPC_CLC = $18
|
||
OPC_ORA_aby = $19
|
||
OPC_ORA_abx = $1D
|
||
OPC_ASL_abx = $1E
|
||
|
||
OPC_JSR_abs = $20
|
||
OPC_AND_izx = $21
|
||
OPC_BIT_zp = $24
|
||
OPC_AND_zp = $25
|
||
OPC_ROL_zp = $26
|
||
OPC_PLP = $28
|
||
OPC_AND_imm = $29
|
||
OPC_ROL = $2A
|
||
OPC_BIT_abs = $2C
|
||
OPC_AND_abs = $2D
|
||
OPC_ROL_abs = $2E
|
||
|
||
OPC_BMI = $30
|
||
OPC_AND_izy = $31
|
||
OPC_AND_zpx = $35
|
||
OPC_ROL_zpx = $36
|
||
OPC_SEC = $38
|
||
OPC_AND_aby = $39
|
||
OPC_AND_abx = $3D
|
||
OPC_ROL_abx = $3E
|
||
|
||
|
||
OPC_RTI = $40
|
||
OPC_EOR_izx = $41
|
||
OPC_EOR_zp = $45
|
||
OPC_LSR_zp = $46
|
||
OPC_PHA = $48
|
||
OPC_EOR_imm = $49
|
||
OPC_LSR = $4A
|
||
OPC_JMP_abs = $4C
|
||
OPC_EOR_abs = $4D
|
||
OPC_LSR_abs = $4E
|
||
|
||
OPC_BVC = $50
|
||
OPC_EOR_izy = $51
|
||
OPC_EOR_zpx = $55
|
||
OPC_LSR_zpx = $56
|
||
OPC_CLI = $58
|
||
OPC_EOR_aby = $59
|
||
OPC_EOR_abx = $5D
|
||
OPC_LSR_abx = $5E
|
||
|
||
OPC_RTS = $60
|
||
OPC_ADC_izx = $61
|
||
OPC_ADC_zp = $65
|
||
OPC_ROR_zp = $66
|
||
OPC_PLA = $68
|
||
OPC_ADC_imm = $69
|
||
OPC_ROR = $6A
|
||
OPC_JMP_ind = $6C
|
||
OPC_ADC_abs = $6D
|
||
OPC_ROR_abs = $6E
|
||
|
||
OPC_BVS = $70
|
||
OPC_ADC_izy = $71
|
||
OPC_ADC_zpx = $75
|
||
OPC_ROR_zpx = $76
|
||
OPC_SEI = $78
|
||
OPC_ADC_aby = $79
|
||
OPC_ADC_abx = $7D
|
||
OPC_ROR_abx = $7E
|
||
|
||
OPC_STA_izx = $81
|
||
OPC_STY_zp = $84
|
||
OPC_STA_zp = $85
|
||
OPC_STX_zp = $86
|
||
OPC_DEY = $88
|
||
OPC_TXA = $8A
|
||
OPC_STY_abs = $8C
|
||
OPC_STA_abs = $8D
|
||
OPC_STX_abs = $8E
|
||
|
||
OPC_BCC = $90
|
||
OPC_STA_izy = $91
|
||
OPC_STY_zpx = $94
|
||
OPC_STA_zpx = $95
|
||
OPC_STX_zpy = $96
|
||
OPC_TYA = $98
|
||
OPC_STA_aby = $99
|
||
OPC_TXS = $9A
|
||
OPC_STA_abx = $9D
|
||
|
||
OPC_LDY_imm = $A0
|
||
OPC_LDA_izx = $A1
|
||
OPC_LDX_imm = $A2
|
||
OPC_LDY_zp = $A4
|
||
OPC_LDA_zp = $A5
|
||
OPC_LDX_zp = $A6
|
||
OPC_TAY = $A8
|
||
OPC_LDA_imm = $A9
|
||
OPC_TAX = $AA
|
||
OPC_LDY_abs = $AC
|
||
OPC_LDA_abs = $AD
|
||
OPC_LDX_abs = $AE
|
||
|
||
OPC_BCS = $B0
|
||
OPC_LDA_izy = $B1
|
||
OPC_LDY_zpx = $B4
|
||
OPC_LDA_zpx = $B5
|
||
OPC_LDX_zpy = $B6
|
||
OPC_CLV = $B8
|
||
OPC_LDA_aby = $B9
|
||
OPC_TSX = $BA
|
||
OPC_LDY_abx = $BC
|
||
OPC_LDA_abx = $BD
|
||
OPC_LDX_aby = $BE
|
||
|
||
OPC_CPY_imm = $C0
|
||
OPC_CMP_izx = $C1
|
||
OPC_CPY_zp = $C4
|
||
OPC_CMP_zp = $C5
|
||
OPC_DEC_zp = $C6
|
||
OPC_INY = $C8
|
||
OPC_CMP_imm = $C9
|
||
OPC_DEX = $CA
|
||
OPC_CPY_abs = $CC
|
||
OPC_CMP_abs = $CD
|
||
OPC_DEC_abs = $CE
|
||
|
||
OPC_BNE = $D0
|
||
OPC_CMP_izy = $D1
|
||
OPC_CMP_zpx = $D5
|
||
OPC_DEC_zpx = $D6
|
||
OPC_CLD = $D8
|
||
OPC_CMP_aby = $D9
|
||
OPC_CMP_abx = $DD
|
||
OPC_DEC_abx = $DE
|
||
|
||
OPC_CPX_imm = $E0
|
||
OPC_SBC_izx = $E1
|
||
OPC_CPX_zp = $E4
|
||
OPC_SBC_zp = $E5
|
||
OPC_INC_zp = $E6
|
||
OPC_INX = $E8
|
||
OPC_SBC_imm = $E9
|
||
OPC_NOP = $EA
|
||
OPC_CPX_abs = $EC
|
||
OPC_SBC_abs = $ED
|
||
OPC_INC_abs = $EE
|
||
|
||
|
||
OPC_BEQ = $F0
|
||
OPC_SBC_izy = $F1
|
||
OPC_SBC_zpx = $F5
|
||
OPC_INC_zpx = $F6
|
||
OPC_SED = $F8
|
||
OPC_SBC_aby = $F9
|
||
OPC_SBC_abx = $FD
|
||
OPC_INC_abx = $FE
|
||
|
||
|
||
.if (.cpu .bitand ::CPU_ISET_65SC02)
|
||
|
||
; OPC_NOP = $02 ; doublet
|
||
; OPC_NOP = $03 ; doublet
|
||
OPC_TSB_zp = $04
|
||
; OPC_NOP = $0B ; doublet
|
||
OPC_TSB_abs = $0C
|
||
|
||
OPC_ORA_izp = $12
|
||
; OPC_NOP = $13 ; doublet
|
||
OPC_TRB_zp = $14
|
||
OPC_INC = $1A
|
||
; OPC_NOP = $1B ; doublet
|
||
OPC_TRB_abs = $1C
|
||
|
||
; OPC_NOP = $22 ; doublet
|
||
; OPC_NOP = $23 ; doublet
|
||
; OPC_NOP = $2B ; doublet
|
||
|
||
OPC_AND_izp = $32
|
||
; OPC_NOP = $33 ; doublet
|
||
OPC_BIT_zpx = $34
|
||
OPC_DEC = $3A
|
||
; OPC_NOP = $3B ; doublet
|
||
OPC_BIT_abx = $3C
|
||
|
||
; OPC_NOP = $42 ; doublet
|
||
; OPC_NOP = $43 ; doublet
|
||
; OPC_NOP = $44 ; doublet
|
||
; OPC_NOP = $4B ; doublet
|
||
|
||
OPC_EOR_izp = $52
|
||
; OPC_NOP = $53 ; doublet
|
||
; OPC_NOP = $54 ; doublet
|
||
; OPC_NOP = $5A ; doublet
|
||
; OPC_NOP = $5B ; doublet
|
||
OPC_EOR_abx = $5C
|
||
|
||
; OPC_NOP = $62 ; doublet
|
||
; OPC_NOP = $63 ; doublet
|
||
OPC_STZ_zp = $64
|
||
; OPC_NOP = $6B ; doublet
|
||
|
||
OPC_ADC_izp = $72
|
||
; OPC_NOP = $73 ; doublet
|
||
OPC_STZ_zpx = $74
|
||
OPC_PLY = $7A
|
||
; OPC_NOP = $7B ; doublet
|
||
OPC_JMP_iax = $7C
|
||
|
||
OPC_BRA = $80
|
||
; OPC_NOP = $82 ; doublet
|
||
; OPC_NOP = $83 ; doublet
|
||
OPC_BIT_imm = $89
|
||
; OPC_NOP = $8B ; doublet
|
||
|
||
OPC_STA_izp = $92
|
||
; OPC_NOP = $93 ; doublet
|
||
; OPC_NOP = $9B ; doublet
|
||
OPC_STZ_abs = $9C
|
||
OPC_STZ_abx = $9E
|
||
|
||
; OPC_NOP = $A3 ; doublet
|
||
; OPC_NOP = $AB ; doublet
|
||
|
||
OPC_LDA_izp = $B2
|
||
; OPC_NOP = $B3 ; doublet
|
||
; OPC_NOP = $BB ; doublet
|
||
|
||
; OPC_NOP = $C2 ; doublet
|
||
; OPC_NOP = $C3 ; doublet
|
||
; OPC_NOP = $CB ; doublet
|
||
|
||
OPC_CMP_izp = $D2
|
||
; OPC_NOP = $D3 ; doublet
|
||
; OPC_NOP = $D4 ; doublet
|
||
OPC_PHX = $DA
|
||
; OPC_NOP = $DB ; doublet
|
||
; OPC_NOP = $DC ; doublet
|
||
|
||
; OPC_NOP = $E2 ; doublet
|
||
; OPC_NOP = $E3 ; doublet
|
||
; OPC_NOP = $EB ; doublet
|
||
|
||
OPC_SBC_izp = $F2
|
||
; OPC_NOP = $F3 ; doublet
|
||
; OPC_NOP = $F4 ; doublet
|
||
OPC_PLX = $FA
|
||
; OPC_NOP = $FB ; doublet
|
||
; OPC_NOP = $FC ; doublet
|
||
|
||
|
||
.if (.cpu .bitand ::CPU_ISET_65C02)
|
||
|
||
; bit instructions for 65C02
|
||
|
||
OPC_RMB0 = $07
|
||
OPC_RMB1 = $17
|
||
OPC_RMB2 = $27
|
||
OPC_RMB3 = $37
|
||
OPC_RMB4 = $47
|
||
OPC_RMB5 = $57
|
||
OPC_RMB6 = $67
|
||
OPC_RMB7 = $77
|
||
|
||
OPC_SMB0 = $87
|
||
OPC_SMB1 = $97
|
||
OPC_SMB2 = $A7
|
||
OPC_SMB3 = $B7
|
||
OPC_SMB4 = $C7
|
||
OPC_SMB5 = $D7
|
||
OPC_SMB6 = $E7
|
||
OPC_SMB7 = $F7
|
||
|
||
OPC_BBR0 = $0F
|
||
OPC_BBR1 = $1F
|
||
OPC_BBR2 = $2F
|
||
OPC_BBR3 = $3F
|
||
OPC_BBR4 = $4F
|
||
OPC_BBR5 = $5F
|
||
OPC_BBR6 = $6F
|
||
OPC_BBR7 = $7F
|
||
|
||
OPC_BBS0 = $8F
|
||
OPC_BBS1 = $9F
|
||
OPC_BBS2 = $AF
|
||
OPC_BBS3 = $BF
|
||
OPC_BBS4 = $CF
|
||
OPC_BBS5 = $DF
|
||
OPC_BBS6 = $EF
|
||
OPC_BBS7 = $FF
|
||
|
||
.else
|
||
|
||
; no bit instructions for 65SC02
|
||
|
||
; OPC_NOP = $07 ; doublet
|
||
; OPC_NOP = $17 ; doublet
|
||
; OPC_NOP = $27 ; doublet
|
||
; OPC_NOP = $37 ; doublet
|
||
; OPC_NOP = $47 ; doublet
|
||
; OPC_NOP = $57 ; doublet
|
||
; OPC_NOP = $67 ; doublet
|
||
; OPC_NOP = $77 ; doublet
|
||
; OPC_NOP = $87 ; doublet
|
||
; OPC_NOP = $97 ; doublet
|
||
; OPC_NOP = $A7 ; doublet
|
||
; OPC_NOP = $B7 ; doublet
|
||
; OPC_NOP = $C7 ; doublet
|
||
; OPC_NOP = $D7 ; doublet
|
||
; OPC_NOP = $E7 ; doublet
|
||
; OPC_NOP = $F7 ; doublet
|
||
; OPC_NOP = $0F ; doublet
|
||
; OPC_NOP = $1F ; doublet
|
||
; OPC_NOP = $2F ; doublet
|
||
; OPC_NOP = $3F ; doublet
|
||
; OPC_NOP = $4F ; doublet
|
||
; OPC_NOP = $5F ; doublet
|
||
; OPC_NOP = $6F ; doublet
|
||
; OPC_NOP = $7F ; doublet
|
||
; OPC_NOP = $8F ; doublet
|
||
; OPC_NOP = $9F ; doublet
|
||
; OPC_NOP = $AF ; doublet
|
||
; OPC_NOP = $BF ; doublet
|
||
; OPC_NOP = $CF ; doublet
|
||
; OPC_NOP = $DF ; doublet
|
||
; OPC_NOP = $EF ; doublet
|
||
; OPC_NOP = $FF ; doublet
|
||
|
||
.endif
|
||
|
||
.elseif (.cpu .bitand ::CPU_ISET_6502X)
|
||
|
||
; stable, undocumented opcodes
|
||
|
||
; OPC_KIL = $02 ; unstable
|
||
OPC_SLO_izx = $03
|
||
OPC_NOP_zp = $04
|
||
OPC_SLO_zp = $07
|
||
OPC_ANC_imm = $0B
|
||
OPC_NOP_abs = $0C
|
||
OPC_SLO_abs = $0F
|
||
|
||
; OPC_KIL = $12 ; unstable
|
||
OPC_SLO_izy = $13
|
||
OPC_NOP_zpx = $14
|
||
OPC_SLO_zpx = $17
|
||
;OPC_NOP = $1A
|
||
OPC_SLO_aby = $1B
|
||
OPC_NOP_abx = $1C
|
||
OPC_SLO_abx = $1F
|
||
|
||
; OPC_KIL = $22 ; unstable
|
||
OPC_RLA_izx = $23
|
||
OPC_RLA_zp = $27
|
||
OPC_ANC_imm = $2B
|
||
OPC_RLA_abs = $2F
|
||
|
||
; OPC_KIL = $32 ; unstable
|
||
OPC_RLA_izy = $33
|
||
OPC_NOP_zpx = $34
|
||
OPC_RLA_zpx = $37
|
||
; OPC_NOP = $3A ; doublet
|
||
OPC_RLA_aby = $3B
|
||
OPC_NOP_abx = $3C
|
||
OPC_RLA_abx = $3F
|
||
|
||
; OPC_KIL = $42 ; unstable
|
||
OPC_SRE_izx = $43
|
||
OPC_NOP_zp = $44
|
||
OPC_SRE_zp = $47
|
||
OPC_ALR_imm = $4B
|
||
OPC_SRE_abs = $4F
|
||
|
||
; OPC_KIL = $52 ; unstable
|
||
OPC_SRE_izy = $53
|
||
OPC_NOP_zpx = $54
|
||
OPC_SRE_zpx = $57
|
||
; OPC_NOP = $5A ; doublet
|
||
OPC_SRE_aby = $5B
|
||
OPC_NOP_abx = $5C
|
||
OPC_SRE_abx = $5F
|
||
|
||
; OPC_KIL = $62
|
||
OPC_RRA_izx = $63
|
||
OPC_NOP_zp = $64
|
||
OPC_RRA_zp = $67
|
||
OPC_ARR_imm = $6B
|
||
OPC_RRA_abs = $6F
|
||
|
||
; OPC_KIL = $72
|
||
OPC_RRA_izy = $73
|
||
OPC_NOP_zpx = $74
|
||
OPC_RRA_zpx = $77
|
||
; OPC_NOP = $7A ; doublet
|
||
OPC_RRA_aby = $7B
|
||
OPC_NOP_abx = $7C
|
||
OPC_RRA_abx = $7F
|
||
|
||
OPC_NOP_imm = $80
|
||
; OPC_NOP_imm = $82 ; doublet
|
||
OPC_SAX_izx = $83
|
||
OPC_SAX_zp = $87
|
||
; OPC_NOP_imm = $89 ; doublet
|
||
; OPC_XAA = $8B ; unstable
|
||
OPC_SAX_abs = $8F
|
||
|
||
; OPC_KIL = $92 ; unstable
|
||
; OPC_AHX_izy = $93 ; unstable
|
||
OPC_SAX_zpy = $97
|
||
; OPC_TAS_aby = $9B ; unstable
|
||
; OPC_SHY_abx = $9C ; unstable
|
||
; OPC_SHX_aby = $9E ; unstable
|
||
; OPC_AHX_aby = $9F ; unstable
|
||
|
||
OPC_LAX_izx = $A3
|
||
OPC_LAX_zp = $A7
|
||
; OPC_LAX_imm = $AB ; unstable
|
||
OPC_LAX_abs = $AF
|
||
|
||
; OPC_KIL = $B2 ; unstable
|
||
OPC_LAX_izy = $B3
|
||
OPC_LAX_zpy = $B7
|
||
OPC_LAS_aby = $BB
|
||
OPC_LAX_aby = $BF
|
||
|
||
; OPC_NOP_imm = $C2 ; doublet
|
||
OPC_DCP_izx = $C3
|
||
OPC_DCP_zp = $C7
|
||
OPC_AXS_imm = $CB
|
||
OPC_DCP_abs = $CF
|
||
|
||
; OPC_KIL = $D2 ; unstable
|
||
OPC_DCP_izy = $D3
|
||
OPC_NOP_zpx = $D4
|
||
OPC_DCP_zpx = $D7
|
||
OPC_NOP_DA = $DA
|
||
OPC_DCP_aby = $DB
|
||
OPC_NOP_abx = $DC
|
||
OPC_DCP_abx = $DF
|
||
|
||
; OPC_NOP_imm = $E2 ; doublet
|
||
OPC_ISC_izx = $E3
|
||
OPC_ISC_zp = $E7
|
||
; OPC_SBC_imm = $EB ; doublet
|
||
OPC_ISC_abs = $EF
|
||
|
||
; OPC_KIL = $F2 ; unstable
|
||
OPC_ISC_izy = $F3
|
||
OPC_NOP_zpx = $F4
|
||
OPC_ISC_zpx = $F7
|
||
OPC_NOP_FA = $FA
|
||
OPC_ISC_aby = $FB
|
||
OPC_NOP_abx = $FC
|
||
OPC_ISC_abx = $FF
|
||
|
||
.endif
|
||
;
|
||
; Vic20 generic definitions. Stolen mostly from c64.inc - Steve Schmidtke
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page, Commodore stuff
|
||
|
||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||
TXTPTR := $7A ; Pointer into BASIC source code
|
||
TIME := $A0 ; 60HZ clock
|
||
FNAM_LEN := $B7 ; Length of filename
|
||
SECADR := $B9 ; Secondary address
|
||
DEVNUM := $BA ; Device number
|
||
FNAM := $BB ; Pointer to filename
|
||
KEY_COUNT := $C6 ; Number of keys in input buffer
|
||
RVS := $C7 ; Reverse flag
|
||
CURS_FLAG := $CC ; 1 = cursor off
|
||
CURS_BLINK := $CD ; Blink counter
|
||
CURS_CHAR := $CE ; Character under the cursor
|
||
CURS_STATE := $CF ; Cursor blink state
|
||
SCREEN_PTR := $D1 ; Pointer to current char in text screen
|
||
CURS_X := $D3 ; Cursor column
|
||
CURS_Y := $D6 ; Cursor row
|
||
CRAM_PTR := $F3 ; Pointer to current char in color RAM
|
||
|
||
BASIC_BUF := $200 ; Location of command-line
|
||
BASIC_BUF_LEN = 89 ; Maximum length of command-line
|
||
|
||
CHARCOLOR := $286
|
||
CURS_COLOR := $287 ; Color under the cursor
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Screen size
|
||
|
||
XSIZE = 22
|
||
YSIZE = 23
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Kernal routines
|
||
|
||
; Direct entries
|
||
CLRSCR := $E55F
|
||
KBDREAD := $E5CF
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Vector and other locations
|
||
|
||
IRQVec := $0314
|
||
BRKVec := $0316
|
||
NMIVec := $0318
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: 6560 VIC
|
||
|
||
VIC := $9000
|
||
VIC_LINES := $9003 ; Screen lines, bit 7 is bit 0 from VIC_HLINE
|
||
VIC_HLINE := $9004 ; Rasterline, bits 1-8
|
||
VIC_COLOR := $900F ; Border and background color
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: 6522 VIA1
|
||
|
||
VIA1 := $9110
|
||
VIA1_JOY := $9111
|
||
VIA1_DDRB := $9112
|
||
VIA1_DDRA := $9113
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O: 6522 VIA2
|
||
|
||
VIA2 := $9120
|
||
VIA2_JOY := $9120
|
||
VIA2_DDRB := $9122
|
||
VIA2_DDRA := $9123
|
||
|
||
;
|
||
; Plus/4 generic definitions.
|
||
;
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page, Commodore stuff
|
||
|
||
TMPPTR := $22 ; Temporary ptr used by BASIC
|
||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||
TXTPTR := $3B ; Pointer into BASIC source code
|
||
TIME := $A3 ; 60HZ clock
|
||
FNAM_LEN := $AB ; Length of filename
|
||
LFN := $AC ; Logical file number
|
||
SECADR := $AD ; Secondary address
|
||
DEVNUM := $AE ; Device number
|
||
FNAM := $AF ; Pointer to filename for OPEN
|
||
KEY_COUNT := $EF ; Number of keys in input buffer
|
||
RVS := $C2 ; Reverse flag
|
||
CURS_X := $CA ; Cursor column
|
||
CURS_Y := $CD ; Cursor row
|
||
SCREEN_PTR := $C8 ; Pointer to current char in text screen
|
||
CRAM_PTR := $EA ; Pointer to current char in color RAM
|
||
|
||
BASIC_BUF := $200 ; Location of command-line
|
||
BASIC_BUF_LEN = 89 ; Maximum length of command-line
|
||
|
||
FNBUF := $25E ; Buffer for filename
|
||
FETCH := $494 ; lda (zp),y from RAM
|
||
CHARCOLOR := $53B
|
||
FKEY_COUNT := $55D ; Characters for function key
|
||
FKEY_SPACE := $55F ; Function key definitions
|
||
FKEY_ORIG := $F3D2 ; Original definitions
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Kernal routines
|
||
|
||
; Direct entries
|
||
CLRSCR := $D88B
|
||
KBDREAD := $D8C1
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Vector and other locations
|
||
|
||
IRQVec := $0314
|
||
BRKVec := $0316
|
||
NMIVec := $0318
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Screen size
|
||
|
||
XSIZE = 40
|
||
YSIZE = 25
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; I/O
|
||
|
||
TED_T1LO := $FF00
|
||
TED_T1HI := $FF01
|
||
TED_T2LO := $FF02
|
||
TED_T2HI := $FF03
|
||
TED_T3LO := $FF04
|
||
TED_T4HI := $FF05
|
||
TED_MULTI1 := $FF07
|
||
TED_KBD := $FF08
|
||
TED_CURSHI := $FF0C
|
||
TED_CURSLO := $FF0D
|
||
TED_V1FRQLO := $FF0E
|
||
TED_V2FRQLO := $FF0F
|
||
TED_V2FRQHI := $FF10
|
||
TED_BGCOLOR := $FF15
|
||
TED_COLOR1 := $FF16
|
||
TED_COLOR2 := $FF17
|
||
TED_COLOR3 := $FF18
|
||
TED_BORDERCOLOR := $FF19
|
||
TED_VLINEHI := $FF1C
|
||
TED_VLINELO := $FF1D
|
||
TED_HPOS := $FF1E
|
||
TED_ROMSEL := $FF3E
|
||
TED_RAMSEL := $FF3F
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; RAM/ROM selection addresses
|
||
|
||
ENABLE_ROM := TED_ROMSEL
|
||
ENABLE_RAM := TED_RAMSEL
|
||
|
||
|
||
; supervision symbols
|
||
|
||
; supervision 65c02s
|
||
; in cc65 up to 2.9.1 65c02 means 65sc02
|
||
|
||
lcd_addr = $4000
|
||
LCD_LINESIZE = $30
|
||
LCD_WIDTH = 160
|
||
LCD_HEIGHT = 160
|
||
; 2 bit per pixel, packed
|
||
|
||
lcd_width = $2000
|
||
lcd_height = $2001
|
||
lcd_xpos = $2002 ; in pixel, bit 0+1 not used
|
||
lcd_ypos = $2003 ; weird
|
||
|
||
sv_port_r = $2021
|
||
sv_port_w = $2022
|
||
|
||
sv_timer_count = $2023
|
||
; read for quitting
|
||
sv_timer_quit = $2024
|
||
|
||
; bit 0 timer, bit 1 dma
|
||
sv_irq_source = $2027
|
||
SV_IRQ_REQUEST_TIMER = 1
|
||
SV_IRQ_REQUEST_DMA = 2
|
||
|
||
; bit 5,6,7 select bank at 0x8000
|
||
sv_bank = $2026
|
||
SV_NMI_ENABLE_ON = 1
|
||
SV_IRQ_ENABLE_TIMER = 2
|
||
SV_IRQ_ENABLE_DMA = 4
|
||
SV_LCD_ON = 8
|
||
SV_TIMER_MODE_240Hz = $10 ; else 15360
|
||
|
||
|
||
; low activ/pressed
|
||
sv_control = $2020
|
||
SV_RIGHT = 1
|
||
SV_LEFT = 2
|
||
SV_DOWN = 4
|
||
SV_UP = 8
|
||
SV_BUTTONB = $10
|
||
SV_BUTTONA = $20
|
||
SV_SELECT = $40
|
||
SV_START = $80
|
||
|
||
; frequency=125000/counter
|
||
sv_audio_right_counter = $2010 ;word
|
||
sv_audio_left_counter = $2014
|
||
SV_AUDIO_ON =$40
|
||
;bits 0..3 volume
|
||
; bit 4 ?
|
||
; bit 5 ?
|
||
sv_audio_right_control = $2012
|
||
sv_audio_left_control = $2016
|
||
; write activates tone for x/60 sec (0 means 256)
|
||
sv_audio_right_timer = $2013
|
||
sv_audio_left_timer = $2017
|
||
|
||
|
||
;read for irq quitting
|
||
sv_dma_quit = $2025
|
||
sv_dma_on = $201c
|
||
; bit 7 true start, false stop
|
||
sv_dma_start = $2018 ; word
|
||
sv_dma_size = $201a ; *32 samples
|
||
sv_dma_control = $201b
|
||
; bit 0,1 speed: 0 15360, 11 15360/4
|
||
; bit 2,3 volume: 0 silent, 11 loud
|
||
|
||
sv_noise_volume = $2028 ; and frequency
|
||
sv_noise_timer = $2029
|
||
sv_noise_control = $202a
|
||
;/*****************************************************************************/
|
||
;/* */
|
||
;/* mouse-kernel.inc */
|
||
;/* */
|
||
;/* Mouse API */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* (C) 2003-2009, Ullrich von Bassewitz */
|
||
;/* Roemerstrasse 52 */
|
||
;/* D-70794 Filderstadt */
|
||
;/* EMail: uz@cc65.org */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* */
|
||
;/* This software is provided 'as-is', without any expressed or implied */
|
||
;/* warranty. In no event will the authors be held liable for any damages */
|
||
;/* arising from the use of this software. */
|
||
;/* */
|
||
;/* Permission is granted to anyone to use this software for any purpose, */
|
||
;/* including commercial applications, and to alter it and redistribute it */
|
||
;/* freely, subject to the following restrictions: */
|
||
;/* */
|
||
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||
;/* claim that you wrote the original software. If you use this software */
|
||
;/* in a product, an acknowledgment in the product documentation would be */
|
||
;/* appreciated but is not required. */
|
||
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||
;/* be misrepresented as being the original software. */
|
||
;/* 3. This notice may not be removed or altered from any source */
|
||
;/* distribution. */
|
||
;/* */
|
||
;/*****************************************************************************/
|
||
|
||
|
||
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Error codes
|
||
|
||
.enum
|
||
MOUSE_ERR_OK ; No error
|
||
MOUSE_ERR_NO_DRIVER ; No driver available
|
||
MOUSE_ERR_CANNOT_LOAD ; Error loading driver
|
||
MOUSE_ERR_INV_DRIVER ; Invalid driver
|
||
MOUSE_ERR_NO_DEVICE ; Mouse hardware not found
|
||
MOUSE_ERR_INV_IOCTL ; Invalid ioctl code
|
||
|
||
MOUSE_ERR_COUNT ; Special: Number of error codes
|
||
.endenum
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The driver header
|
||
|
||
.struct MOUSE_HDR
|
||
ID .byte 3 ; Contains 0x6D, 0x6F, 0x75 ("mou")
|
||
VERSION .byte 1 ; Interface version
|
||
LIBREF .addr ; Library reference
|
||
JUMPTAB .struct
|
||
INSTALL .addr
|
||
UNINSTALL .addr
|
||
HIDE .addr
|
||
SHOW .addr
|
||
SETBOX .addr
|
||
GETBOX .addr
|
||
MOVE .addr
|
||
BUTTONS .addr
|
||
POS .addr
|
||
INFO .addr
|
||
IOCTL .addr
|
||
IRQ .addr
|
||
.endstruct
|
||
FLAGS .byte ; Mouse driver flags
|
||
CALLBACKS .struct ; Jump instructions
|
||
.byte ; JMP opcode
|
||
CHIDE .addr ; Jump address
|
||
.byte
|
||
CSHOW .addr
|
||
.byte
|
||
CPREP .addr
|
||
.byte
|
||
CDRAW .addr
|
||
.byte
|
||
CMOVEX .addr
|
||
.byte
|
||
CMOVEY .addr
|
||
.endstruct
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The mouse callback structure
|
||
|
||
.struct MOUSE_CALLBACKS
|
||
HIDE .addr ; Hide the mouse cursor
|
||
SHOW .addr ; Show the mouse cursor
|
||
PREP .addr ; Prepare to move the mouse cursor
|
||
DRAW .addr ; Draw the mouse cursor
|
||
MOVEX .addr ; Move the mouse cursor to X coord
|
||
MOVEY .addr ; Move the mouse cursor to Y coord
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; The mouse API version, stored in MOUSE_HDR::VERSION
|
||
|
||
MOUSE_API_VERSION = $05
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Bitmapped mouse driver flags, stored in MOUSE_HDR::FLAGS.
|
||
; Note: If neither of MOUSE_FLAG_XXX_IRQ is set, no interrupts are supplied
|
||
; to the driver. If one of the bits is set, the interrupt vector MUST be
|
||
; valid.
|
||
; Beware: Some of the bits are tested using the BIT instruction, so do not
|
||
; change the values without checking the code!
|
||
|
||
MOUSE_FLAG_EARLY_IRQ = $40 ; Enable IRQ *before* calling INSTALL
|
||
MOUSE_FLAG_LATE_IRQ = $80 ; Enable IRQ *after* calling INSTALL
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Mouse button definitions
|
||
|
||
MOUSE_BTN_LEFT = $10
|
||
MOUSE_BTN_RIGHT = $01
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Structures used to return data from the mouse driver
|
||
|
||
.struct MOUSE_POS
|
||
XCOORD .word
|
||
YCOORD .word
|
||
.endstruct
|
||
|
||
.struct MOUSE_INFO
|
||
POS .tag MOUSE_POS
|
||
BUTTONS .byte
|
||
.endstruct
|
||
|
||
.struct MOUSE_BOX
|
||
MINX .word
|
||
MINY .word
|
||
MAXX .word
|
||
MAXY .word
|
||
.endstruct
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Variables
|
||
|
||
.global _mouse_drv ; Pointer to driver
|
||
.global _mouse_hidden ; Counter, 0 = mouse is visible
|
||
|
||
;------------------------------------------------------------------------------
|
||
; C callable functions
|
||
|
||
.global _mouse_load_driver
|
||
.global _mouse_unload
|
||
.global _mouse_install
|
||
.global _mouse_uninstall
|
||
.global _mouse_geterrormsg
|
||
.global _mouse_hide
|
||
.global _mouse_show
|
||
.global _mouse_setbox
|
||
.global _mouse_getbox
|
||
.global _mouse_move
|
||
.global _mouse_buttons
|
||
.global _mouse_pos
|
||
.global _mouse_info
|
||
.global _mouse_ioctl
|
||
|
||
.global _mouse_clear_ptr
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Driver entry points (asm callable)
|
||
|
||
.global mouse_install
|
||
.global mouse_uninstall
|
||
.global mouse_hide
|
||
.global mouse_show
|
||
.global mouse_setbox
|
||
.global mouse_getbox
|
||
.global mouse_move
|
||
.global mouse_buttons
|
||
.global mouse_pos
|
||
.global mouse_info
|
||
.global mouse_ioctl
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Zero page stuff
|
||
|
||
WNDLFT := $20 ; Text window left
|
||
WNDWDTH := $21 ; Text window width
|
||
WNDTOP := $22 ; Text window top
|
||
WNDBTM := $23 ; Text window bottom+1
|
||
CH := $24 ; Cursor horizontal position
|
||
CV := $25 ; Cursor vertical position
|
||
BASL := $28 ; Text base address low
|
||
BASH := $29 ; Text base address high
|
||
INVFLG := $32 ; Normal/inverse(/flash)
|
||
PROMPT := $33 ; Used by GETLN
|
||
RNDL := $4E ; Random counter low
|
||
RNDH := $4F ; Random counter high
|
||
HIMEM := $73 ; Highest available memory address+1
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Vectors
|
||
|
||
DOSWARM := $03D0 ; DOS warmstart vector
|
||
BRKVec := $03F0 ; Break vector
|
||
SOFTEV := $03F2 ; Vector for warm start
|
||
PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Hardware
|
||
|
||
; Keyboard input
|
||
KBD := $C000 ; Read keyboard
|
||
KBDSTRB := $C010 ; Clear keyboard strobe
|
||
|
||
; 80 column video switches
|
||
CLR80COL:= $C000 ; Disable 80 column store
|
||
SET80COL:= $C001 ; Enable 80 column store
|
||
RD80COL := $C018 ; >127 if 80 column store enabled
|
||
RD80VID := $C01F ; >127 if 80 column video enabled
|
||
|
||
; Character set switches
|
||
CLRALTCHAR := $C00E ; Normal Apple II char set
|
||
SETALTCHAR := $C00F ; Norm/inv LC, no flash
|
||
ALTCHARSET := $C01E ; >127 if alt charset switched in
|
||
|
||
; Language card switches
|
||
RDLCBNK2:= $C011 ; >127 if LC bank 2 in use
|
||
RDLCRAM := $C012 ; >127 if LC is read enabled
|
||
ROMIN := $C081 ; Swap in D000-FFFF ROM
|
||
LCBANK2 := $C083 ; Swap in LC bank 2
|
||
LCBANK1 := $C08B ; Swap in LC bank 1
|
||
|
||
; Video mode switches
|
||
TXTCLR := $C050 ; Display graphics
|
||
TXTSET := $C051 ; Display text
|
||
MIXCLR := $C052 ; Disable 4 lines of text
|
||
MIXSET := $C053 ; Enable 4 lines of text
|
||
LOWSCR := $C054 ; Page 1
|
||
HISCR := $C055 ; Page 2
|
||
LORES := $C056 ; Lores graphics
|
||
HIRES := $C057 ; Hires graphics
|
||
|
||
; Game controller
|
||
BUTN0 := $C061 ; Open-Apple Key
|
||
BUTN1 := $C062 ; Closed-Apple Key
|
||
SYMBOLS {
|
||
__EXEHDR__: type = import;
|
||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||
}
|
||
MEMORY {
|
||
ZP: file = "", start = $0000, size = $001A;
|
||
HEADER: file = %O, start = $0000, size = $0001;
|
||
MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__;
|
||
}
|
||
SEGMENTS {
|
||
ZEROPAGE: load = ZP, type = zp;
|
||
EXEHDR: load = HEADER, type = ro;
|
||
STARTUP: load = MAIN, type = ro;
|
||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||
ONCE: load = MAIN, type = ro, optional = yes;
|
||
CODE: load = MAIN, type = ro;
|
||
RODATA: load = MAIN, type = ro;
|
||
DATA: load = MAIN, type = rw;
|
||
BSS: load = MAIN, type = bss, define = yes;
|
||
}
|
||
FEATURES {
|
||
CONDES: type = constructor,
|
||
label = __CONSTRUCTOR_TABLE__,
|
||
count = __CONSTRUCTOR_COUNT__,
|
||
segment = ONCE;
|
||
CONDES: type = destructor,
|
||
label = __DESTRUCTOR_TABLE__,
|
||
count = __DESTRUCTOR_COUNT__,
|
||
segment = RODATA;
|
||
CONDES: type = interruptor,
|
||
label = __INTERRUPTOR_TABLE__,
|
||
count = __INTERRUPTOR_COUNT__,
|
||
segment = RODATA,
|
||
import = __CALLIRQ__;
|
||
}
|
||
naUz
|