www.pudn.com > virtual_gameboy-0.8.8.zip > GB.H


/** VGB: portable GameBoy emulator ***************************/ 
/**                                                         **/ 
/**                           GB.h                          **/ 
/**                                                         **/ 
/** This file contains definitions for the GameBoy hardware **/ 
/** emulation.                                              **/ 
/**                                                         **/ 
/** Copyright (C) Marat Fayzullin 1995                      **/ 
/**               Marcel de Kogel 1996                      **/ 
/**     You are not allowed to distribute this software     **/ 
/**     commercially. Please, notify me, if you make any    **/    
/**     changes to this file.                               **/ 
/*************************************************************/ 
 
#include "Z80.h"            /* CPU emulation declarations    */ 
 
/* #define UNIX  */         /* Compile iNES for for Unix/X   */ 
/* #define MSDOS */         /* Compile iNES for MSDOS/VGA    */ 
/* #define MITSHM */        /* Use MIT SHM extensions for X  */ 
 
#ifndef UNIX 
#undef MITSHM 
#endif 
 
#define NORAM     0x00      /* Byte to be returned from      */ 
                            /* non-existing pages and ports  */ 
#define MAXCHEAT  256       /* Maximal number of GG cheats   */ 
 
#define VBL_IFLAG 0x01 
#define LCD_IFLAG 0x02 
#define TIM_IFLAG 0x04 
#define SIO_IFLAG 0x08 
#define EXT_IFLAG 0x10 
  
#define JOYPAD  RAM[0xFF00] /* Joystick: 1.1.P15.P14.P13.P12.P11.P10      */ 
#define SIODATA RAM[0xFF01] /* Serial IO data buffer                      */ 
#define SIOCONT RAM[0xFF02] /* Serial IO control register                 */ 
#define DIVREG  RAM[0xFF04] /* Divider register (???)                     */ 
#define TIMECNT RAM[0xFF05] /* Timer counter. Gen. int. when it overflows */ 
#define TIMEMOD RAM[0xFF06] /* New value of TimeCount after it overflows  */ 
#define TIMEFRQ RAM[0xFF07] /* Timer frequency and start/stop switch      */ 
#define IFLAGS  RAM[0xFF0F] /* Interrupt flags: 0.0.0.JST.SIO.TIM.LCD.VBL */ 
#define ISWITCH RAM[0xFFFF] /* Switches to enable/disable interrupts      */ 
#define LCDCONT RAM[0xFF40] /* LCD control register                       */ 
#define LCDSTAT RAM[0xFF41] /* LCD status register                        */ 
#define SCROLLY RAM[0xFF42] /* Starting Y position of the background      */ 
#define SCROLLX RAM[0xFF43] /* Starting X position of the background      */ 
#define CURLINE RAM[0xFF44] /* Current screen line being scanned          */ 
#define CMPLINE RAM[0xFF45] /* Gen. int. when scan reaches this line      */ 
#define BGRDPAL RAM[0xFF47] /* Background palette                         */ 
#define SPR0PAL RAM[0xFF48] /* Sprite palette #0                          */ 
#define SPR1PAL RAM[0xFF49] /* Sprite palette #1                          */ 
#define WNDPOSY RAM[0xFF4A] /* Window Y position                          */ 
#define WNDPOSX RAM[0xFF4B] /* Window X position                          */ 
 
 
extern byte Verbose;          /* Verboseness level                        */ 
  
extern byte *RAM;             /* Pointer to Z80 address space (64kB)      */ 
  
extern byte UPeriod;          /* Number of VBlanks per screen update      */ 
extern int  VPeriod;          /* Number of Z80 cycles between VBlanks     */ 
 
extern byte LineDelay;        /* When 1, CMPLINE interrupts are delayed   */ 
extern byte CheckCRC;         /* When 1, check cartridge CRC on loading   */ 
extern byte AutoA,AutoB;      /* When 1, autofire emulation for A,B       */ 
 
extern char *SndName;         /* Name for the soundtrack log file         */ 
 
extern int CheatCount;        /* Current number of cheats in the list     */ 
 
extern byte BPal[4];          /* Background palette                       */ 
extern byte SPal0[4],SPal1[4];/* Sprite palettes                          */ 
 
extern byte *ChrGen;          /* Character generator                      */ 
extern byte *BgdTab,*WndTab;  /* Background and window character tables   */ 
 
extern byte IMask;            /* A mask to reset a bit in IFLAGS          */ 
 
extern int IFreq;             /* VBlank interrupt frequency in Hertz      */ 
 
/****************************************************************/ 
/*** Initialize and start GameBoy emulation. This function    ***/ 
/*** returns 0 in the case of failure.                        ***/ 
/****************************************************************/ 
int StartGB(char *CartName); 
 
/****************************************************************/ 
/*** Free resources allocated by StartGB().                   ***/ 
/****************************************************************/ 
void TrashGB(void); 
 
/****************************************************************/ 
/*** Reset GameBoy                                            ***/ 
/****************************************************************/ 
void ResetGB(void); 
 
/****************************************************************/ 
/*** Add a cheat to the cheat list [call before StartGB()].   ***/ 
/****************************************************************/ 
int AddCheat(char *Cheat); 
 
/****************************************************************/ 
/*** Allocate resources needed by the machine-dependent code. ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
int InitMachine(void); 
  
/****************************************************************/ 
/*** Deallocate all resources taken by InitMachine().         ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
void TrashMachine(void); 
 
/****************************************************************/ 
/*** Refresh screen.                                          ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
void RefreshScreen(void); 
 
/****************************************************************/ 
/*** Refresh line Y [0-143].                                  ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
void RefreshLine(byte Y); 
 
/****************************************************************/ 
/*** Get joystick state: START.SELECT.B.A.D.U.L.R.            ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
byte Joystick(void); 
 
/****************************************************************/ 
/*** Write value into sound chip register (Reg #0 at FF10h).  ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
void Sound(byte R,byte V); 
 
/****************************************************************/ 
/*** Send a byte onto the serial line. Returns 1 on success,  ***/ 
/*** 0 otherwise.                                             ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
byte SIOSend(byte V); 
 
/****************************************************************/ 
/*** Receive a byte from the serial line. Returns 1 on        ***/ 
/*** success, 0 otherwise.                                    ***/ 
/************************************** TO BE WRITTEN BY USER ***/ 
byte SIOReceive(byte *V);