This is mem.h in view mode; [Download] [Up]
/*
* mem.h - Memory interface.
*
* Written by
* André Fachat (fachat@physik.tu-chemnitz.de)
* Ettore Perazzoli (ettore@comm2000.it)
*
* This file is part of VICE, the Versatile Commodore Emulator.
* See README for copyright notice.
*
* 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., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*
*/
#ifndef _MEM_H_
#define _MEM_H_
#include "types.h"
typedef BYTE REGPARM1 read_func_t(ADDRESS addr);
typedef read_func_t *read_func_ptr_t;
typedef void REGPARM2 store_func_t(ADDRESS addr, BYTE value);
typedef store_func_t *store_func_ptr_t;
extern read_func_ptr_t *_mem_read_tab_ptr;
extern store_func_ptr_t *_mem_write_tab_ptr;
extern BYTE **_mem_read_base_tab_ptr;
extern BYTE ram[];
extern int ram_size;
extern BYTE chargen_rom[];
extern int rom_loaded; /* FIXME: ugly! */
extern void initialize_memory(void);
extern void mem_powerup(void);
extern int mem_load(void);
extern void mem_attach_cartridge(int type, BYTE * rawcart);
extern void mem_detach_cartridge(int type);
extern void mem_freeze_cartridge(int type);
extern void mem_get_basic_text(ADDRESS * start, ADDRESS * end);
extern void mem_set_basic_text(ADDRESS start, ADDRESS end);
extern void mem_set_tape_sense(int value);
extern void mem_toggle_watchpoints(int flag);
extern int mem_rom_trap_allowed(ADDRESS addr);
extern read_func_t read_rom, read_zero;
extern store_func_t store_rom, store_zero;
extern read_func_t mem_read;
extern store_func_t mem_store;
/* ------------------------------------------------------------------------- */
/* Banked memory access functions for the monitor */
extern const char **mem_bank_list(void);
extern int mem_bank_from_name(const char *name);
extern BYTE mem_bank_read(int bank, ADDRESS addr);
extern BYTE mem_bank_peek(int bank, ADDRESS addr);
extern void mem_bank_write(int bank, ADDRESS addr, BYTE byte);
/* ------------------------------------------------------------------------- */
/* Memory access macros. */
/* We don't want "normal" modules to use them: they should use the
higher-level function instead. The CPU code does need them for speed,
though. */
#ifdef _MAINCPU_C
#define STORE(addr, value) \
(*_mem_write_tab_ptr[(addr) >> 8])((ADDRESS)(addr), (BYTE)(value))
#define LOAD(addr) \
(*_mem_read_tab_ptr[(addr) >> 8])((ADDRESS)(addr))
#define STORE_ZERO(addr, value) \
store_zero((ADDRESS)(addr), (BYTE)(value))
#define LOAD_ZERO(addr) \
ram[(addr) & 0xff]
#define LOAD_ADDR(addr) \
((LOAD((addr) + 1) << 8) | LOAD(addr))
#define LOAD_ZERO_ADDR(addr) \
((LOAD_ZERO((addr) + 1) << 8) | LOAD_ZERO(addr))
inline static BYTE *mem_read_base(int addr)
{
BYTE *p = _mem_read_base_tab_ptr[addr >> 8];
if (p == 0)
return p;
return p - (addr & 0xff00);
}
#endif
#endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.