X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fatari.h;h=e06967ff97edff06b090e0962c987137d2727812;hb=refs%2Fpull%2F843%2Fhead;hp=3c0898c2f8839a02b1cafce549d7a5ff67fcbf81;hpb=98c47d187728980b61363f3b34c5008d1d2f78e6;p=cc65 diff --git a/include/atari.h b/include/atari.h index 3c0898c2f..e06967ff9 100644 --- a/include/atari.h +++ b/include/atari.h @@ -6,9 +6,10 @@ /* */ /* */ /* */ -/* (C) 2000-2006 Mark Keates */ +/* (C) 2000-2019 Mark Keates */ /* Freddy Offenga */ /* Christian Groessler */ +/* Bill Kendrick */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -38,13 +39,16 @@ /* Check for errors */ -#if !defined(__ATARI__) && !defined(__ATARIXL__) +#if !defined(__ATARI__) # error This module may only be used when compiling for the Atari! #endif -/* Character codes */ +/*****************************************************************************/ +/* Character codes */ +/*****************************************************************************/ + #define CH_DELCHR 0xFE /* delete char under the cursor */ #define CH_ENTER 0x9B #define CH_ESC 0x1B @@ -86,74 +90,178 @@ #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) - -/* color register functions */ + +/*****************************************************************************/ +/* Masks for joy_read */ +/*****************************************************************************/ + +#define JOY_UP_MASK 0x01 +#define JOY_DOWN_MASK 0x02 +#define JOY_LEFT_MASK 0x04 +#define JOY_RIGHT_MASK 0x08 +#define JOY_BTN_1_MASK 0x10 + +#define JOY_FIRE_MASK JOY_BTN_1_MASK +#define JOY_FIRE(v) ((v) & JOY_FIRE_MASK) + + +/*****************************************************************************/ +/* Keyboard values returned by kbcode / CH */ +/*****************************************************************************/ + +#define KEY_NONE ((unsigned char) 0xFF) + +#define KEY_0 ((unsigned char) 0x32) +#define KEY_1 ((unsigned char) 0x1F) +#define KEY_2 ((unsigned char) 0x1E) +#define KEY_3 ((unsigned char) 0x1A) +#define KEY_4 ((unsigned char) 0x18) +#define KEY_5 ((unsigned char) 0x1D) +#define KEY_6 ((unsigned char) 0x1B) +#define KEY_7 ((unsigned char) 0x33) +#define KEY_8 ((unsigned char) 0x35) +#define KEY_9 ((unsigned char) 0x30) + +#define KEY_A ((unsigned char) 0x3F) +#define KEY_B ((unsigned char) 0x15) +#define KEY_C ((unsigned char) 0x12) +#define KEY_D ((unsigned char) 0x3A) +#define KEY_E ((unsigned char) 0x2A) +#define KEY_F ((unsigned char) 0x38) +#define KEY_G ((unsigned char) 0x3D) +#define KEY_H ((unsigned char) 0x39) +#define KEY_I ((unsigned char) 0x0D) +#define KEY_J ((unsigned char) 0x01) +#define KEY_K ((unsigned char) 0x05) +#define KEY_L ((unsigned char) 0x00) +#define KEY_M ((unsigned char) 0x25) +#define KEY_N ((unsigned char) 0x23) +#define KEY_O ((unsigned char) 0x08) +#define KEY_P ((unsigned char) 0x0A) +#define KEY_Q ((unsigned char) 0x2F) +#define KEY_R ((unsigned char) 0x28) +#define KEY_S ((unsigned char) 0x3E) +#define KEY_T ((unsigned char) 0x2D) +#define KEY_U ((unsigned char) 0x0B) +#define KEY_V ((unsigned char) 0x10) +#define KEY_W ((unsigned char) 0x2E) +#define KEY_X ((unsigned char) 0x16) +#define KEY_Y ((unsigned char) 0x2B) +#define KEY_Z ((unsigned char) 0x17) + +#define KEY_COMMA ((unsigned char) 0x20) +#define KEY_PERIOD ((unsigned char) 0x22) +#define KEY_SLASH ((unsigned char) 0x26) +#define KEY_SEMICOLON ((unsigned char) 0x02) +#define KEY_PLUS ((unsigned char) 0x06) +#define KEY_ASTERISK ((unsigned char) 0x07) +#define KEY_DASH ((unsigned char) 0x0E) +#define KEY_EQUALS ((unsigned char) 0x0F) +#define KEY_LESSTHAN ((unsigned char) 0x36) +#define KEY_GREATERTHAN ((unsigned char) 0x37) + +#define KEY_ESC ((unsigned char) 0x1C) +#define KEY_TAB ((unsigned char) 0x2C) +#define KEY_SPACE ((unsigned char) 0x21) +#define KEY_RETURN ((unsigned char) 0x0C) +#define KEY_DELETE ((unsigned char) 0x34) +#define KEY_CAPS ((unsigned char) 0x3C) +#define KEY_INVERSE ((unsigned char) 0x27) +#define KEY_HELP ((unsigned char) 0x11) + +/* Function keys only exist on the 1200XL model. */ +#define KEY_F1 ((unsigned char) 0x03) +#define KEY_F2 ((unsigned char) 0x04) +#define KEY_F3 ((unsigned char) 0x13) +#define KEY_F4 ((unsigned char) 0x14) + +/* N.B. Cannot read Ctrl key alone */ +#define KEY_CTRL ((unsigned char) 0x80) + +/* N.B. Cannot read Shift key alone via KBCODE; +** instead, check "Shfit key press" bit of SKSTAT register. +** Also, no way to tell left Shift from right Shift. +*/ +#define KEY_SHIFT ((unsigned char) 0x40) + + +/* Composed keys +** (Other combinations are possible, including Shift+Ctrl+key, +** though not all such combinations are available.) +*/ + +#define KEY_EXCLAMATIONMARK (KEY_1 | KEY_SHIFT) +#define KEY_QUOTE (KEY_2 | KEY_SHIFT) +#define KEY_HASH (KEY_3 | KEY_SHIFT) +#define KEY_DOLLAR (KEY_4 | KEY_SHIFT) +#define KEY_PERCENT (KEY_5 | KEY_SHIFT) +#define KEY_AMPERSAND (KEY_6 | KEY_SHIFT) +#define KEY_APOSTROPHE (KEY_7 | KEY_SHIFT) +#define KEY_AT (KEY_8 | KEY_SHIFT) +#define KEY_OPENINGPARAN (KEY_9 | KEY_SHIFT) +#define KEY_CLOSINGPARAN (KEY_0 | KEY_SHIFT) +#define KEY_UNDERLINE (KEY_DASH | KEY_SHIFT) +#define KEY_BAR (KEY_EQUALS | KEY_SHIFT) +#define KEY_COLON (KEY_SEMICOLON | KEY_SHIFT) +#define KEY_BACKSLASH (KEY_PLUS | KEY_SHIFT) +#define KEY_CIRCUMFLEX (KEY_ASTERISK | KEY_SHIFT) +#define KEY_OPENINGBRACKET (KEY_COMMA | KEY_SHIFT) +#define KEY_CLOSINGBRACKET (KEY_PERIOD | KEY_SHIFT) +#define KEY_QUESTIONMARK (KEY_SLASH | KEY_SHIFT) +#define KEY_CLEAR (KEY_LESSTHAN | KEY_SHIFT) +#define KEY_INSERT (KEY_GREATERTHAN | KEY_SHIFT) + +#define KEY_UP (KEY_UNDERLINE | KEY_CTRL) +#define KEY_DOWN (KEY_EQUALS | KEY_CTRL) +#define KEY_LEFT (KEY_PLUS | KEY_CTRL) +#define KEY_RIGHT (KEY_ASTERISK | KEY_CTRL) + + +/*****************************************************************************/ +/* 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 */ +/*****************************************************************************/ +/* 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 */ -/* global variables */ +/*****************************************************************************/ +/* 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 atrm8_joy[]; +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[]; @@ -169,20 +277,38 @@ 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 + + +/*****************************************************************************/ +/* get_ostype return value defines (for explanation, see ostype.s) */ +/*****************************************************************************/ -/* 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) @@ -205,19 +331,33 @@ extern void atr15p2_tgi[]; #define AT_OS_XLXE_3 3 #define AT_OS_XLXE_4 4 -/* get_tv return values */ + +/*****************************************************************************/ +/* get_tv return values */ +/*****************************************************************************/ + #define AT_NTSC 0 #define AT_PAL 1 -/* valid _dos_type values */ -#define ATARIDOS 0 -#define SPARTADOS 1 -#define OSADOS 2 -#define MYDOS 3 + +/*****************************************************************************/ +/* valid _dos_type values */ +/*****************************************************************************/ + +#define SPARTADOS 0 +#define REALDOS 1 +#define BWDOS 2 +#define OSADOS 3 #define XDOS 4 +#define ATARIDOS 5 +#define MYDOS 6 #define NODOS 255 -/* Define hardware */ + +/*****************************************************************************/ +/* Define hardware and where they're mapped in memory */ +/*****************************************************************************/ + #include <_gtia.h> #define GTIA_READ (*(struct __gtia_read*)0xD000) #define GTIA_WRITE (*(struct __gtia_write*)0xD000) @@ -234,7 +374,68 @@ extern void atr15p2_tgi[]; #include <_antic.h> #define ANTIC (*(struct __antic*)0xD400) -/* device control block */ + +/*****************************************************************************/ +/* Shadow registers for hardware registers */ +/*****************************************************************************/ + +/* GTIA */ +#define STRIG0 (*(unsigned char*)0x284) /* TRIG0 */ +#define STRIG1 (*(unsigned char*)0x285) /* TRIG1 */ +#define STRIG2 (*(unsigned char*)0x286) /* TRIG2 */ +#define STRIG3 (*(unsigned char*)0x287) /* TRIG3 */ +#define PCOLR0 (*(unsigned char*)0x2C0) /* COLPM0 */ +#define PCOLR1 (*(unsigned char*)0x2C1) /* COLPM1 */ +#define PCOLR2 (*(unsigned char*)0x2C2) /* COLPM2 */ +#define PCOLR3 (*(unsigned char*)0x2C3) /* COLPM3 */ +#define COLOR0 (*(unsigned char*)0x2C4) /* COLPF0 */ +#define COLOR1 (*(unsigned char*)0x2C5) /* COLPF1 */ +#define COLOR2 (*(unsigned char*)0x2C6) /* COLPF2 */ +#define COLOR3 (*(unsigned char*)0x2C7) /* COLPF3 */ +#define COLOR4 (*(unsigned char*)0x2C8) /* COLPBK */ +#define GPRIOR (*(unsigned char*)0x264) /* PRIOR */ + +/* ANTIC */ +#define SDMCTL (*(unsigned char*)0x22F) /* DMACTL */ +#define CHACT (*(unsigned char*)0x2F3) /* CHACTL */ +#define SDLSTL (*(unsigned char*)0x230) /* DLISTL */ +#define SDLSTH (*(unsigned char*)0x231) /* DLISTH */ +#define SDLST (*(unsigned int*)0x230) /* DLISTL/H together */ +#define CHBAS (*(unsigned char*)0x2F4) /* CHBASE */ +#define LPENH (*(unsigned char*)0x233) /* PENH */ +#define LPENV (*(unsigned char*)0x234) /* PENV */ + +/* POKEY */ +#define PADDL0 (*(unsigned char*)0x270) /* POT0 */ +#define PADDL1 (*(unsigned char*)0x271) /* POT1 */ +#define PADDL2 (*(unsigned char*)0x272) /* POT2 */ +#define PADDL3 (*(unsigned char*)0x273) /* POT3 */ +#define PADDL4 (*(unsigned char*)0x274) /* POT4 */ +#define PADDL5 (*(unsigned char*)0x275) /* POT5 */ +#define PADDL6 (*(unsigned char*)0x276) /* POT6 */ +#define PADDL7 (*(unsigned char*)0x277) /* POT7 */ +#define CH (*(unsigned char*)0x2FC) /* KBCODE */ +#define POKMSK (*(unsigned char*)0x10) /* IRQEN */ + +/* PIA */ +#define STICK0 (*(unsigned char*)0x278) /* PORTA for controller port 1 */ +#define STICK1 (*(unsigned char*)0x279) /* PORTA for controller port 2 */ +#define STICK2 (*(unsigned char*)0x27A) /* PORTB for controller port 3 */ +#define STICK3 (*(unsigned char*)0x27B) /* PORTB for controller port 4 */ +#define PTRIG0 (*(unsigned char*)0x27C) /* PORTA for controller port 1, paddle 1 */ +#define PTRIG1 (*(unsigned char*)0x27D) /* PORTA for controller port 1, paddle 2 */ +#define PTRIG2 (*(unsigned char*)0x27E) /* PORTA for controller port 1, paddle 3 */ +#define PTRIG3 (*(unsigned char*)0x27F) /* PORTA for controller port 1, paddle 4 */ +#define PTRIG4 (*(unsigned char*)0x280) /* PORTA for controller port 2, paddle 5 */ +#define PTRIG5 (*(unsigned char*)0x281) /* PORTA for controller port 2, paddle 6 */ +#define PTRIG6 (*(unsigned char*)0x282) /* PORTA for controller port 2, paddle 7 */ +#define PTRIG7 (*(unsigned char*)0x283) /* PORTA for controller port 2, paddle 8 */ + + +/*****************************************************************************/ +/* Device control block */ +/*****************************************************************************/ + struct __dcb { unsigned char device; /* device id */ unsigned char unit; /* unit number */ @@ -249,7 +450,11 @@ struct __dcb { }; #define DCB (*(struct __dcb *)0x300) -/* I/O control block */ + +/*****************************************************************************/ +/* I/O control block */ +/*****************************************************************************/ + struct __iocb { unsigned char handler; /* handler index number (0xff free) */ unsigned char drive; /* device number (drive) */ @@ -268,5 +473,31 @@ struct __iocb { #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 */ +#endif