1
0
mirror of https://git.code.sf.net/p/fuse-emulator/fuse synced 2026-01-27 01:41:34 +03:00
Files
fuse/peripherals/scld.h
Fredrick Meunier ba77c2ab67 Move memory.[ch] to memory_pages.[ch]
To avoid clashes with any similarly named system files (thanks,
BogDan Vatra and Sergio Baldoví).
2016-12-10 20:27:03 +11:00

146 lines
4.8 KiB
C

/* scld.h: Routines for handling the Timex SCLD
Copyright (c) 2002-2004 Fredrick Meunier, Witold Filipczyk
Copyright (c) 2015 Fredrick Meunier
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author contact information:
E-mail: fredm@spamcop.net
*/
#ifndef FUSE_SCLD_H
#define FUSE_SCLD_H
#ifndef FUSE_MEMORY_H
#include "memory_pages.h"
#endif /* #ifndef FUSE_MEMORY_H */
#define STANDARD 0x00 /* standard Spectrum */
#define ALTDFILE 0x01 /* the same in nature as above, but using second
display file */
#define EXTCOLOUR 0x02 /* extended colours (data taken from first screen,
attributes 1x8 taken from second display. */
#define EXTCOLALTD 0x03 /* similar to above, but data is taken from second
screen */
#define HIRESATTR 0x04 /* hires mode, data in odd columns is taken from
first screen in standard way, data in even
columns is made from attributes data (8x8) */
#define HIRESATTRALTD 0x05 /* similar to above, but data taken from second
display */
#define HIRES 0x06 /* true hires mode, odd columns from first screen,
even columns from second screen. columns
numbered from 1. */
#define HIRESDOUBLECOL 0x07 /* data taken only from second screen, columns are
doubled */
#define HIRESCOLMASK 0x38
#define WHITEBLACK 0x00
#define YELLOWBLUE 0x01
#define CYANRED 0x02
#define GREENMAGENTA 0x03
#define MAGENTAGREEN 0x04
#define REDCYAN 0x05
#define BLUEYELLOW 0x06
#define BLACKWHITE 0x07
#define ALTDFILE_OFFSET 0x2000
#ifdef WORDS_BIGENDIAN
typedef struct
{
unsigned altmembank : 1; /* ALTMEMBANK : 0 = cartridge, 1 = exrom */
unsigned intdisable : 1; /* INTDISABLE */
unsigned b5 : 1; /* */
unsigned b4 : 1; /* */
unsigned b3 : 1; /* */
unsigned hires : 1; /* SCLD HIRES mode */
unsigned b1 : 1; /* */
unsigned altdfile : 1; /* SCLD use ALTDFILE */
} scld_names;
typedef struct
{
unsigned b7 : 1; /* */
unsigned b6 : 1; /* */
unsigned hirescol : 3; /* HIRESCOLMASK */
unsigned scrnmode : 3; /* SCRNMODEMASK */
} scld_masks;
#else /* #ifdef WORDS_BIGENDIAN */
typedef struct
{
unsigned altdfile : 1; /* SCLD use ALTDFILE */
unsigned b1 : 1; /* */
unsigned hires : 1; /* SCLD HIRES mode */
unsigned b3 : 1; /* */
unsigned b4 : 1; /* */
unsigned b5 : 1; /* */
unsigned intdisable : 1; /* INTDISABLE */
unsigned altmembank : 1; /* ALTMEMBANK : 0 = cartridge, 1 = exrom */
} scld_names;
typedef struct
{
unsigned scrnmode : 3; /* SCRNMODEMASK */
unsigned hirescol : 3; /* HIRESCOLMASK */
unsigned b6 : 1; /* */
unsigned b7 : 1; /* */
} scld_masks;
#endif /* #ifdef WORDS_BIGENDIAN */
typedef union
{
libspectrum_byte byte;
scld_masks mask;
scld_names name;
} scld;
extern scld scld_last_dec; /* The last byte sent to Timex DEC port */
extern libspectrum_byte scld_last_hsr; /* Last byte sent to Timex HSR port */
/* Home map has pointers to the related entries in the RAM array so that the
dck loading code can locate the associated pages when extracting data from
its files */
extern memory_page * timex_home[MEMORY_PAGES_IN_64K];
extern memory_page timex_exrom[MEMORY_PAGES_IN_64K];
extern memory_page timex_dock[MEMORY_PAGES_IN_64K];
void scld_register_startup( void );
void scld_dec_write( libspectrum_word port, libspectrum_byte b );
void scld_hsr_write( libspectrum_word port, libspectrum_byte b );
void scld_memory_map( void );
/* Initialise the memory map to point to the home bank */
void scld_memory_map_home( void );
libspectrum_byte hires_get_attr( void );
libspectrum_byte hires_convert_dec( libspectrum_byte attr );
void scld_home_map_16k( libspectrum_word address, memory_page source[],
int page_num );
/* Set contention for SCLD, contended in home, Dock and Exrom in the 0x4000 -
0x7FFF range */
void scld_set_exrom_dock_contention( void );
#endif /* #ifndef FUSE_SCLD_H */