add nofrendo to TEECOMPUTER
This commit is contained in:
parent
c576104ae5
commit
62f7cf40b2
96 changed files with 40051 additions and 0 deletions
8264
MCUME_teensy41/bin/TEECOMPUTER/TFT/teensynofrendo.ino.hex
Normal file
8264
MCUME_teensy41/bin/TEECOMPUTER/TFT/teensynofrendo.ino.hex
Normal file
File diff suppressed because it is too large
Load diff
8263
MCUME_teensy41/bin/TEECOMPUTER/VGA/teensynofrendo.ino.hex
Normal file
8263
MCUME_teensy41/bin/TEECOMPUTER/VGA/teensynofrendo.ino.hex
Normal file
File diff suppressed because it is too large
Load diff
361
MCUME_teensy41/teensynofrendo/AudioPlaySystem.cpp
Normal file
361
MCUME_teensy41/teensynofrendo/AudioPlaySystem.cpp
Normal file
|
|
@ -0,0 +1,361 @@
|
|||
#include "emuapi.h"
|
||||
|
||||
#ifdef HAS_SND
|
||||
|
||||
#include "AudioPlaySystem.h"
|
||||
#include <Arduino.h>
|
||||
#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT
|
||||
#define CLOCKFREQ 985248
|
||||
|
||||
#ifndef CUSTOM_SND
|
||||
PROGMEM static const short square[]={
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
32767,32767,32767,32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,
|
||||
};
|
||||
|
||||
PROGMEM const short noise[] {
|
||||
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,
|
||||
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767,
|
||||
-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,
|
||||
-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767,
|
||||
-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767,
|
||||
-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767,
|
||||
32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767,
|
||||
32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767,
|
||||
32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
|
||||
32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767,
|
||||
};
|
||||
|
||||
#define NOISEBSIZE 0x100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned int spos;
|
||||
unsigned int sinc;
|
||||
unsigned int vol;
|
||||
} Channel;
|
||||
|
||||
static Channel chan[6] = {
|
||||
{0,0,0},
|
||||
{0,0,0},
|
||||
{0,0,0},
|
||||
{0,0,0},
|
||||
{0,0,0},
|
||||
{0,0,0} };
|
||||
|
||||
#endif
|
||||
|
||||
volatile bool playing = false;
|
||||
|
||||
|
||||
static void snd_Reset(void)
|
||||
{
|
||||
#ifndef CUSTOM_SND
|
||||
chan[0].vol = 0;
|
||||
chan[1].vol = 0;
|
||||
chan[2].vol = 0;
|
||||
chan[3].vol = 0;
|
||||
chan[4].vol = 0;
|
||||
chan[5].vol = 0;
|
||||
chan[0].sinc = 0;
|
||||
chan[1].sinc = 0;
|
||||
chan[2].sinc = 0;
|
||||
chan[3].sinc = 0;
|
||||
chan[4].sinc = 0;
|
||||
chan[5].sinc = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef CUSTOM_SND
|
||||
//extern "C" {
|
||||
void SND_Process(void *sndbuffer, int sndn);
|
||||
//}
|
||||
#endif
|
||||
|
||||
|
||||
FASTRUN void AudioPlaySystem::snd_Mixer(short * stream, int len )
|
||||
{
|
||||
if (playing)
|
||||
{
|
||||
#ifdef CUSTOM_SND
|
||||
SND_Process((void*)stream, len);
|
||||
#else
|
||||
int i;
|
||||
long s;
|
||||
len = len >> 1;
|
||||
short v0=chan[0].vol;
|
||||
short v1=chan[1].vol;
|
||||
short v2=chan[2].vol;
|
||||
short v3=chan[3].vol;
|
||||
short v4=chan[4].vol;
|
||||
short v5=chan[5].vol;
|
||||
for (i=0;i<len;i++)
|
||||
{
|
||||
s =((v0*square[(chan[0].spos>>8)&0x3f])>>11);
|
||||
s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11);
|
||||
s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11);
|
||||
s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11);
|
||||
s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11);
|
||||
s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11);
|
||||
*stream++ = (short)(s);
|
||||
*stream++ = (short)(s);
|
||||
chan[0].spos += chan[0].sinc;
|
||||
chan[1].spos += chan[1].sinc;
|
||||
chan[2].spos += chan[2].sinc;
|
||||
chan[3].spos += chan[3].sinc;
|
||||
chan[4].spos += chan[4].sinc;
|
||||
chan[5].spos += chan[5].sinc;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlaySystem::begin(void)
|
||||
{
|
||||
this->reset();
|
||||
}
|
||||
|
||||
void AudioPlaySystem::start(void)
|
||||
{
|
||||
playing = true;
|
||||
}
|
||||
|
||||
void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) {
|
||||
}
|
||||
|
||||
void AudioPlaySystem::reset(void)
|
||||
{
|
||||
snd_Reset();
|
||||
}
|
||||
|
||||
void AudioPlaySystem::stop(void)
|
||||
{
|
||||
//__disable_irq();
|
||||
playing = false;
|
||||
//__enable_irq();
|
||||
}
|
||||
|
||||
bool AudioPlaySystem::isPlaying(void)
|
||||
{
|
||||
return playing;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AudioPlaySystem::sound(int C, int F, int V) {
|
||||
#ifndef CUSTOM_SND
|
||||
if (C < 6) {
|
||||
chan[C].vol = V;
|
||||
chan[C].sinc = F>>1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void AudioPlaySystem::step(void) {
|
||||
}
|
||||
|
||||
|
||||
#ifndef HAS_T4_VGA
|
||||
/*******************************************************************
|
||||
Experimental I2S interrupt based sound driver for PCM51xx !!!
|
||||
*******************************************************************/
|
||||
|
||||
FLASHMEM static void set_audioClock(int nfact, int32_t nmult, uint32_t ndiv, bool force) // sets PLL4
|
||||
{
|
||||
if (!force && (CCM_ANALOG_PLL_AUDIO & CCM_ANALOG_PLL_AUDIO_ENABLE)) return;
|
||||
|
||||
CCM_ANALOG_PLL_AUDIO = CCM_ANALOG_PLL_AUDIO_BYPASS | CCM_ANALOG_PLL_AUDIO_ENABLE
|
||||
| CCM_ANALOG_PLL_AUDIO_POST_DIV_SELECT(2) // 2: 1/4; 1: 1/2; 0: 1/1
|
||||
| CCM_ANALOG_PLL_AUDIO_DIV_SELECT(nfact);
|
||||
|
||||
CCM_ANALOG_PLL_AUDIO_NUM = nmult & CCM_ANALOG_PLL_AUDIO_NUM_MASK;
|
||||
CCM_ANALOG_PLL_AUDIO_DENOM = ndiv & CCM_ANALOG_PLL_AUDIO_DENOM_MASK;
|
||||
|
||||
CCM_ANALOG_PLL_AUDIO &= ~CCM_ANALOG_PLL_AUDIO_POWERDOWN;//Switch on PLL
|
||||
while (!(CCM_ANALOG_PLL_AUDIO & CCM_ANALOG_PLL_AUDIO_LOCK)) {}; //Wait for pll-lock
|
||||
|
||||
const int div_post_pll = 1; // other values: 2,4
|
||||
CCM_ANALOG_MISC2 &= ~(CCM_ANALOG_MISC2_DIV_MSB | CCM_ANALOG_MISC2_DIV_LSB);
|
||||
if(div_post_pll>1) CCM_ANALOG_MISC2 |= CCM_ANALOG_MISC2_DIV_LSB;
|
||||
if(div_post_pll>3) CCM_ANALOG_MISC2 |= CCM_ANALOG_MISC2_DIV_MSB;
|
||||
|
||||
CCM_ANALOG_PLL_AUDIO &= ~CCM_ANALOG_PLL_AUDIO_BYPASS;//Disable Bypass
|
||||
}
|
||||
|
||||
#define AUDIO_SAMPLE_RATE_EXACT 11025.0 //44117.64706 //11025.0 //22050.0 //44117.64706 //31778.0
|
||||
|
||||
FLASHMEM static void config_sai1()
|
||||
{
|
||||
CCM_CCGR5 |= CCM_CCGR5_SAI1(CCM_CCGR_ON);
|
||||
double fs = AUDIO_SAMPLE_RATE_EXACT;
|
||||
// PLL between 27*24 = 648MHz und 54*24=1296MHz
|
||||
int n1 = 4; //SAI prescaler 4 => (n1*n2) = multiple of 4
|
||||
int n2 = 1 + (24000000 * 27) / (fs * 256 * n1);
|
||||
double C = (fs * 256 * n1 * n2) / 24000000;
|
||||
int c0 = C;
|
||||
int c2 = 10000;
|
||||
int c1 = C * c2 - (c0 * c2);
|
||||
|
||||
set_audioClock(c0, c1, c2, true);
|
||||
// clear SAI1_CLK register locations
|
||||
CCM_CSCMR1 = (CCM_CSCMR1 & ~(CCM_CSCMR1_SAI1_CLK_SEL_MASK))
|
||||
| CCM_CSCMR1_SAI1_CLK_SEL(2); // &0x03 // (0,1,2): PLL3PFD0, PLL5, PLL4
|
||||
|
||||
n1 = n1 / 2; //Double Speed for TDM
|
||||
|
||||
CCM_CS1CDR = (CCM_CS1CDR & ~(CCM_CS1CDR_SAI1_CLK_PRED_MASK | CCM_CS1CDR_SAI1_CLK_PODF_MASK))
|
||||
| CCM_CS1CDR_SAI1_CLK_PRED(n1 - 1) // &0x07
|
||||
| CCM_CS1CDR_SAI1_CLK_PODF(n2 - 1); // &0x3f
|
||||
|
||||
IOMUXC_GPR_GPR1 = (IOMUXC_GPR_GPR1 & ~(IOMUXC_GPR_GPR1_SAI1_MCLK1_SEL_MASK))
|
||||
| (IOMUXC_GPR_GPR1_SAI1_MCLK_DIR | IOMUXC_GPR_GPR1_SAI1_MCLK1_SEL(0)); //Select MCLK
|
||||
|
||||
|
||||
// configure transmitter
|
||||
int rsync = 0;
|
||||
int tsync = 1;
|
||||
|
||||
I2S1_TMR = 0;
|
||||
I2S1_TCR1 = I2S_TCR1_RFW(1);
|
||||
I2S1_TCR2 = I2S_TCR2_SYNC(tsync) | I2S_TCR2_BCP // sync=0; tx is async;
|
||||
| (I2S_TCR2_BCD | I2S_TCR2_DIV((1)) | I2S_TCR2_MSEL(1));
|
||||
I2S1_TCR3 = I2S_TCR3_TCE;
|
||||
I2S1_TCR4 = I2S_TCR4_FRSZ((2-1)) | I2S_TCR4_SYWD((32-1)) | I2S_TCR4_MF
|
||||
| I2S_TCR4_FSD | I2S_TCR4_FSE | I2S_TCR4_FSP;
|
||||
I2S1_TCR5 = I2S_TCR5_WNW((32-1)) | I2S_TCR5_W0W((32-1)) | I2S_TCR5_FBT((32-1));
|
||||
|
||||
|
||||
I2S1_RMR = 0;
|
||||
I2S1_RCR1 = I2S_RCR1_RFW(1);
|
||||
I2S1_RCR2 = I2S_RCR2_SYNC(rsync) | I2S_RCR2_BCP // sync=0; rx is async;
|
||||
| (I2S_RCR2_BCD | I2S_RCR2_DIV((1)) | I2S_RCR2_MSEL(1));
|
||||
I2S1_RCR3 = I2S_RCR3_RCE;
|
||||
I2S1_RCR4 = I2S_RCR4_FRSZ((2-1)) | I2S_RCR4_SYWD((32-1)) | I2S_RCR4_MF
|
||||
| I2S_RCR4_FSE | I2S_RCR4_FSP | I2S_RCR4_FSD;
|
||||
I2S1_RCR5 = I2S_RCR5_WNW((32-1)) | I2S_RCR5_W0W((32-1)) | I2S_RCR5_FBT((32-1));
|
||||
|
||||
//CORE_PIN23_CONFIG = 3; // MCLK
|
||||
CORE_PIN21_CONFIG = 3; // RX_BCLK
|
||||
CORE_PIN20_CONFIG = 3; // RX_SYNC
|
||||
CORE_PIN7_CONFIG = 3; // TX_DATA0
|
||||
I2S1_RCSR |= I2S_RCSR_RE | I2S_RCSR_BCE;
|
||||
I2S1_TCSR = I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE ;//<-- not using DMA */;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//DMAMEM __attribute__((aligned(32))) static uint32_t i2s_tx[1024];
|
||||
|
||||
static bool fillfirsthalf = true;
|
||||
static uint16_t cnt = 0;
|
||||
static uint16_t sampleBufferSize = 0;
|
||||
|
||||
static void (*fillsamples)(short * stream, int len) = nullptr;
|
||||
|
||||
static uint32_t * i2s_tx_buffer __attribute__((aligned(32)));
|
||||
static uint16_t * i2s_tx_buffer16;
|
||||
static uint16_t * txreg = (uint16_t *)((uint32_t)&I2S1_TDR0 + 2);
|
||||
|
||||
|
||||
FASTRUN void AudioPlaySystem::AUDIO_isr() {
|
||||
|
||||
*txreg = i2s_tx_buffer16[cnt];
|
||||
cnt = cnt + 1;
|
||||
cnt = cnt & (sampleBufferSize*2-1);
|
||||
|
||||
if (cnt == 0) {
|
||||
fillfirsthalf = false;
|
||||
NVIC_SET_PENDING(IRQ_SOFTWARE);
|
||||
}
|
||||
else if (cnt == sampleBufferSize) {
|
||||
fillfirsthalf = true;
|
||||
NVIC_SET_PENDING(IRQ_SOFTWARE);
|
||||
}
|
||||
/*
|
||||
I2S1_TDR0 = i2s_tx_buffer[cnt];
|
||||
cnt = cnt + 1;
|
||||
cnt = cnt & (sampleBufferSize-1);
|
||||
if (cnt == 0) {
|
||||
fillfirsthalf = false;
|
||||
NVIC_SET_PENDING(IRQ_SOFTWARE);
|
||||
}
|
||||
else if (cnt == sampleBufferSize/2) {
|
||||
fillfirsthalf = true;
|
||||
NVIC_SET_PENDING(IRQ_SOFTWARE);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
FASTRUN void AudioPlaySystem::SOFTWARE_isr() {
|
||||
//Serial.println("x");
|
||||
if (fillfirsthalf) {
|
||||
fillsamples((short *)i2s_tx_buffer, sampleBufferSize);
|
||||
arm_dcache_flush_delete((void*)i2s_tx_buffer, (sampleBufferSize/2)*sizeof(uint32_t));
|
||||
}
|
||||
else {
|
||||
fillsamples((short *)&i2s_tx_buffer[sampleBufferSize/2], sampleBufferSize);
|
||||
arm_dcache_flush_delete((void*)&i2s_tx_buffer[sampleBufferSize/2], (sampleBufferSize/2)*sizeof(uint32_t));
|
||||
}
|
||||
}
|
||||
|
||||
// display VGA image
|
||||
FLASHMEM void AudioPlaySystem::begin_audio(int samplesize, void (*callback)(short * stream, int len))
|
||||
{
|
||||
fillsamples = callback;
|
||||
i2s_tx_buffer = (uint32_t*)malloc(samplesize*sizeof(uint32_t)); //&i2s_tx[0];
|
||||
|
||||
if (i2s_tx_buffer == NULL) {
|
||||
Serial.println("could not allocate audio samples");
|
||||
return;
|
||||
}
|
||||
memset((void*)i2s_tx_buffer,0, samplesize*sizeof(uint32_t));
|
||||
arm_dcache_flush_delete((void*)i2s_tx_buffer, samplesize*sizeof(uint32_t));
|
||||
i2s_tx_buffer16 = (uint16_t*)i2s_tx_buffer;
|
||||
|
||||
sampleBufferSize = samplesize;
|
||||
|
||||
config_sai1();
|
||||
attachInterruptVector(IRQ_SAI1, AUDIO_isr);
|
||||
NVIC_ENABLE_IRQ(IRQ_SAI1);
|
||||
NVIC_SET_PRIORITY(IRQ_QTIMER3, 0); // 0 highest priority, 255 = lowest priority
|
||||
NVIC_SET_PRIORITY(IRQ_SAI1, 127);
|
||||
attachInterruptVector(IRQ_SOFTWARE, SOFTWARE_isr);
|
||||
NVIC_SET_PRIORITY(IRQ_SOFTWARE, 208);
|
||||
NVIC_ENABLE_IRQ(IRQ_SOFTWARE);
|
||||
|
||||
I2S1_TCSR |= 1<<8; // start generating TX FIFO interrupts
|
||||
|
||||
Serial.print("Audio sample buffer = ");
|
||||
Serial.println(samplesize);
|
||||
}
|
||||
|
||||
FLASHMEM void AudioPlaySystem::end_audio()
|
||||
{
|
||||
if (i2s_tx_buffer != NULL) {
|
||||
free(i2s_tx_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
34
MCUME_teensy41/teensynofrendo/AudioPlaySystem.h
Normal file
34
MCUME_teensy41/teensynofrendo/AudioPlaySystem.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef audioplaysystem_h_
|
||||
#define audioplaysystem_h_
|
||||
|
||||
#ifdef HAS_SND
|
||||
|
||||
#include "platform_config.h"
|
||||
|
||||
class AudioPlaySystem
|
||||
{
|
||||
public:
|
||||
AudioPlaySystem(void) { };
|
||||
void begin(void);
|
||||
void setSampleParameters(float clockfreq, float samplerate);
|
||||
void reset(void);
|
||||
void start(void);
|
||||
void stop(void);
|
||||
bool isPlaying(void);
|
||||
void sound(int C, int F, int V);
|
||||
void buzz(int size, int val);
|
||||
void step(void);
|
||||
static void snd_Mixer(short * stream, int len );
|
||||
#ifndef HAS_T4_VGA
|
||||
void begin_audio(int samplesize, void (*callback)(short * stream, int len));
|
||||
void end_audio();
|
||||
static void AUDIO_isr(void);
|
||||
static void SOFTWARE_isr(void);
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
150
MCUME_teensy41/teensynofrendo/bitmap.c
Normal file
150
MCUME_teensy41/teensynofrendo/bitmap.c
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** bitmap.c
|
||||
**
|
||||
** Bitmap object manipulation routines
|
||||
** $Id: bitmap.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
// JMH this file had to be adapted for the ESP
|
||||
|
||||
#include "emuapi.h"
|
||||
|
||||
void bmp_clear(const bitmap_t *bitmap, uint8 color)
|
||||
{
|
||||
memset(bitmap->data, color, bitmap->pitch * bitmap->height);
|
||||
}
|
||||
|
||||
static bitmap_t *_make_bitmap(uint8 *data_addr, bool hw, int width,
|
||||
int height, int pitch, int overdraw)
|
||||
{
|
||||
bitmap_t *bitmap;
|
||||
int i;
|
||||
|
||||
/* quick safety check */
|
||||
if (NULL == data_addr)
|
||||
return NULL;
|
||||
|
||||
/* Make sure to add in space for line pointers */
|
||||
bitmap = emu_Malloc(sizeof(bitmap_t) + (sizeof(uint8 *) * height));
|
||||
if (NULL == bitmap)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
bitmap->hardware = hw;
|
||||
bitmap->height = height;
|
||||
bitmap->width = width;
|
||||
bitmap->data = data_addr;
|
||||
bitmap->pitch = pitch + (overdraw * 2);
|
||||
|
||||
/* Set up line pointers */
|
||||
/* we want to make some 32-bit aligned adjustment
|
||||
** if we haven't been given a hardware bitmap
|
||||
*/
|
||||
//printf("setting up bitmap %d\n",(int)bitmap);
|
||||
for (i = 0; i < height; i++) {
|
||||
bitmap->line[i] = emu_LineBuffer(i);
|
||||
}
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
static char fb[1];
|
||||
/* Allocate and initialize a bitmap structure */
|
||||
bitmap_t *bmp_create(int width, int height, int overdraw)
|
||||
{
|
||||
// uint8 *addr;
|
||||
// int pitch;
|
||||
//
|
||||
// pitch = width + (overdraw * 2); /* left and right */
|
||||
// addr = malloc((pitch * height) + 3); /* add max 32-bit aligned adjustment */
|
||||
// if (NULL == addr)
|
||||
// return NULL;
|
||||
//printf("bmp_create\n");
|
||||
return _make_bitmap((uint8*)fb, false, width, height, width, overdraw);
|
||||
}
|
||||
|
||||
|
||||
/* allocate and initialize a hardware bitmap */
|
||||
bitmap_t *bmp_createhw(uint8 *addr, int width, int height, int pitch)
|
||||
{
|
||||
return _make_bitmap(addr, true, width, height, pitch, 0); /* zero overdraw */
|
||||
}
|
||||
|
||||
/* Deallocate space for a bitmap structure */
|
||||
void bmp_destroy(bitmap_t **bitmap)
|
||||
{
|
||||
if (*bitmap)
|
||||
{
|
||||
free(*bitmap);
|
||||
*bitmap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** $Log: bitmap.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.16 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.15 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.14 2000/09/18 02:06:48 matt
|
||||
** -pedantic is your friend
|
||||
**
|
||||
** Revision 1.13 2000/08/13 13:16:30 matt
|
||||
** bugfix for alignment adjustment
|
||||
**
|
||||
** Revision 1.12 2000/07/24 04:31:43 matt
|
||||
** pitch/data area on non-hw bitmaps get padded to 32-bit boundaries
|
||||
**
|
||||
** Revision 1.11 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.10 2000/07/09 14:43:01 matt
|
||||
** pitch is now configurable for bmp_createhw()
|
||||
**
|
||||
** Revision 1.9 2000/07/06 17:55:57 matt
|
||||
** two big bugs fixed
|
||||
**
|
||||
** Revision 1.8 2000/07/06 17:38:11 matt
|
||||
** replaced missing string.h include
|
||||
**
|
||||
** Revision 1.7 2000/07/06 16:46:57 matt
|
||||
** added bmp_clear() routine
|
||||
**
|
||||
** Revision 1.6 2000/06/26 04:56:24 matt
|
||||
** minor cleanup
|
||||
**
|
||||
** Revision 1.5 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
93
MCUME_teensy41/teensynofrendo/bitmap.h
Normal file
93
MCUME_teensy41/teensynofrendo/bitmap.h
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** bitmap.h
|
||||
**
|
||||
** Bitmap object defines / prototypes
|
||||
** $Id: bitmap.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _BITMAP_H_
|
||||
#define _BITMAP_H_
|
||||
|
||||
#include "noftypes.h"
|
||||
|
||||
/* a bitmap rectangle */
|
||||
typedef struct rect_s
|
||||
{
|
||||
int16 x, y;
|
||||
uint16 w, h;
|
||||
} rect_t;
|
||||
|
||||
typedef struct rgb_s
|
||||
{
|
||||
int r, g, b;
|
||||
} rgb_t;
|
||||
|
||||
typedef struct bitmap_s
|
||||
{
|
||||
int width, height, pitch;
|
||||
bool hardware; /* is data a hardware region? */
|
||||
uint8 *data; /* protected */
|
||||
uint8 *line[ZERO_LENGTH]; /* will hold line pointers */
|
||||
} bitmap_t;
|
||||
|
||||
extern void bmp_clear(const bitmap_t *bitmap, uint8 color);
|
||||
extern bitmap_t *bmp_create(int width, int height, int overdraw);
|
||||
extern bitmap_t *bmp_createhw(uint8 *addr, int width, int height, int pitch);
|
||||
extern void bmp_destroy(bitmap_t **bitmap);
|
||||
|
||||
#endif /* _BITMAP_H_ */
|
||||
|
||||
/*
|
||||
** $Log: bitmap.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.12 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.11 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.10 2000/09/18 02:06:48 matt
|
||||
** -pedantic is your friend
|
||||
**
|
||||
** Revision 1.9 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.8 2000/07/24 04:31:43 matt
|
||||
** pitch/data area on non-hw bitmaps get padded to 32-bit boundaries
|
||||
**
|
||||
** Revision 1.7 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.6 2000/07/09 14:43:01 matt
|
||||
** pitch is now configurable for bmp_createhw()
|
||||
**
|
||||
** Revision 1.5 2000/07/06 16:46:57 matt
|
||||
** added bmp_clear() routine
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
75
MCUME_teensy41/teensynofrendo/config.c
Normal file
75
MCUME_teensy41/teensynofrendo/config.c
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
/* Nofrendo Configuration Braindead Sample Implementation
|
||||
**
|
||||
** $Id: config.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "log.h"
|
||||
#include "osd.h"
|
||||
#include "nofconfig.h"
|
||||
#include "version.h"
|
||||
|
||||
|
||||
/* interface */
|
||||
config_t config =
|
||||
{
|
||||
CONFIG_FILE
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: config.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.14 2000/11/05 06:23:10 matt
|
||||
** realloc was incompatible with memguard
|
||||
**
|
||||
** Revision 1.13 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.12 2000/09/20 01:13:28 matt
|
||||
** damn tabs
|
||||
**
|
||||
** Revision 1.11 2000/08/04 12:41:04 neil
|
||||
** current not a bug
|
||||
**
|
||||
** Revision 1.10 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.9 2000/07/24 04:30:42 matt
|
||||
** slight cleanup
|
||||
**
|
||||
** Revision 1.8 2000/07/23 15:16:08 matt
|
||||
** changed strcasecmp to stricmp
|
||||
**
|
||||
** Revision 1.7 2000/07/19 15:58:55 neil
|
||||
** config file now configurable (ha)
|
||||
**
|
||||
** Revision 1.6 2000/07/18 03:28:32 matt
|
||||
** help me! I'm a complete mess!
|
||||
**
|
||||
** Revision 1.5 2000/07/12 11:03:08 neil
|
||||
** Always write a config, even if no defaults are changed
|
||||
**
|
||||
** Revision 1.4 2000/07/11 15:09:30 matt
|
||||
** suppressed all warnings
|
||||
**
|
||||
** Revision 1.3 2000/07/11 14:59:27 matt
|
||||
** minor cosmetics.. =)
|
||||
**
|
||||
** Revision 1.2 2000/07/11 13:35:38 bsittler
|
||||
** Changed the config API, implemented config file "nofrendo.cfg". The
|
||||
** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood.
|
||||
**
|
||||
** Revision 1.1 2000/07/11 09:21:10 bsittler
|
||||
** This is a skeletal configuration system.
|
||||
**
|
||||
*/
|
||||
1731
MCUME_teensy41/teensynofrendo/emuapi.cpp
Normal file
1731
MCUME_teensy41/teensynofrendo/emuapi.cpp
Normal file
File diff suppressed because it is too large
Load diff
214
MCUME_teensy41/teensynofrendo/emuapi.h
Normal file
214
MCUME_teensy41/teensynofrendo/emuapi.h
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
#ifndef EMUAPI_H
|
||||
#define EMUAPI_H
|
||||
|
||||
#include "platform_config.h"
|
||||
|
||||
#define CUSTOM_SND 1
|
||||
//#define TIMER_REND 1
|
||||
|
||||
#define EXTRA_HEAP 0x10
|
||||
|
||||
// Title: < >
|
||||
#define TITLE " NES Emulator"
|
||||
#define ROMSDIR "nes"
|
||||
|
||||
#define emu_Init(ROM) {nes_Start(ROM); nes_Init(); }
|
||||
#define emu_Step(x) { nes_Step(); }
|
||||
#define emu_Input(x) { nes_Input(x); }
|
||||
|
||||
#define MAX_FILENAME_PATH 64
|
||||
#define NB_FILE_HANDLER 4
|
||||
#define PALETTE_SIZE 256
|
||||
#define VID_FRAME_SKIP 0x0
|
||||
#define TFT_VBUFFER_YCROP 0
|
||||
#define SINGLELINE_RENDERING 1
|
||||
|
||||
#define R32(rgb) ((rgb>>16)&0xff)
|
||||
#define G32(rgb) ((rgb>>8)&0xff)
|
||||
#define B32(rgb) (rgb & 0xff)
|
||||
|
||||
#define ACTION_NONE 0
|
||||
#define ACTION_MAXKBDVAL 16
|
||||
#define ACTION_EXITKBD 128
|
||||
#define ACTION_RUN1 129
|
||||
#define ACTION_RUN2 130
|
||||
#define ACTION_RUN3 131
|
||||
|
||||
#ifdef KEYMAP_PRESENT
|
||||
|
||||
#define keylables_map0_0 (char *)"qwertyuiop\x1a"
|
||||
#define keylables_map0_1 (char *)" asdfghjkl\x19"
|
||||
#define keylables_map0_2 (char *)" zxcvbnm,.;/"
|
||||
#define keylables_map0_3 (char *)" +\x10-"
|
||||
const unsigned short key_map0[] = {
|
||||
'q','w','e','r','t','y','u','i','o','p',157, //lowecase
|
||||
0,'a','s','d','f','g','h','j','k','l',0x0D,
|
||||
0,'z','x','c','v','b','n','m',',','.',';','/',
|
||||
145,157,29,17,
|
||||
0,'+',' ','-'
|
||||
};
|
||||
|
||||
#define keylables_map1_0 (char *)"QWERTYUIOP@"
|
||||
#define keylables_map1_1 (char *)" ASDFGHJKL\x19"
|
||||
#define keylables_map1_2 (char *)" ZXCVBNM<>:?"
|
||||
#define keylables_map1_3 (char *)" =\x10_"
|
||||
const unsigned short key_map1[] = {
|
||||
'Q','W','E','R','T','Y','U','I','O','P','@', //shift uppercase
|
||||
0,'A','S','D','F','G','H','J','K','L',0x0D,
|
||||
0,'Z','X','C','V','B','N','M','<','>',':','?',
|
||||
145,157,29,17,
|
||||
0,'=',' ','_'
|
||||
};
|
||||
|
||||
#define keylables_map2_0 (char *)"!\"#$%^&*()@"
|
||||
#define keylables_map2_1 (char *)" |\\[]{} "
|
||||
#define keylables_map2_2 (char *)" <>:?"
|
||||
#define keylables_map2_3 (char *)" =\x10_"
|
||||
const unsigned short key_map2[] = {
|
||||
'!','"','#','$','%','^','&','*','(',')','@', // shiftothers
|
||||
0, '|','\\','[',']','{','}','\'',0,0,0,
|
||||
0, 0,0,0,0,0,0,0,'<','>',':','?',
|
||||
0,0,0,0,
|
||||
0,'=',' ','_'
|
||||
};
|
||||
|
||||
#define keylables_map3_0 (char *)"1234567890 "
|
||||
#define keylables_map3_1 (char *)" "
|
||||
#define keylables_map3_2 (char *)" "
|
||||
#define keylables_map3_3 (char *)" "
|
||||
|
||||
const unsigned short key_map3[] = {
|
||||
'1','2','3','4','5','6','7','8','9','0',0, // digit keys
|
||||
0, 0,0,0,0,0,0,0,0,0,0,
|
||||
0, 0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,
|
||||
0,0,' ',0
|
||||
};
|
||||
|
||||
#define keylables_map4_0 (char *)"\x11\x12\x13\x14\x15\x16\x17\x18 "
|
||||
#define keylables_map4_1 (char *)" "
|
||||
#define keylables_map4_2 (char *)" "
|
||||
#define keylables_map4_3 (char *)" "
|
||||
|
||||
const unsigned short key_map4[] = {
|
||||
133,134,135,136,137,138,139,140,0,0,0, // function keys
|
||||
0, 0,0,0,0,0,0,0,0,0,0,
|
||||
0, 0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,
|
||||
0,0,' ',0
|
||||
};
|
||||
|
||||
#define keylables_map5_0 (char *)" "
|
||||
#define keylables_map5_1 (char *)" "
|
||||
#define keylables_map5_2 (char *)" "
|
||||
#define keylables_map5_3 (char *)" "
|
||||
|
||||
const unsigned short key_map5[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0, // extra keys
|
||||
0, 0,0,0,0,0,0,0,0,0,0,
|
||||
0, 0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,
|
||||
0,0,' ',0
|
||||
};
|
||||
|
||||
const unsigned short matkeys[] = {
|
||||
0x004,0x008,0x108,0x104,0x208,0x204,0x308,0x304,0x408,0x404,0x410, // row 1
|
||||
0x502,0x002,0x020,0x102,0x120,0x202,0x220,0x302,0x320,0x402,0x420, // row 2
|
||||
0x508,0x001,0x040,0x101,0x140,0x201,0x240,0x210,0x340,0x301,0x401,0x440, // row 3
|
||||
0x504,0x520,0x540,0x501, // UP LEFT RIGHT DOWN
|
||||
0x510,0x010,0x110,0x310, // row 4
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define MASK_JOY2_RIGHT 0x0001
|
||||
#define MASK_JOY2_LEFT 0x0002
|
||||
#define MASK_JOY2_UP 0x0004
|
||||
#define MASK_JOY2_DOWN 0x0008
|
||||
#define MASK_JOY2_BTN 0x0010
|
||||
#define MASK_KEY_USER1 0x0020
|
||||
#define MASK_KEY_USER2 0x0040
|
||||
#define MASK_KEY_USER3 0x0080
|
||||
#define MASK_JOY1_RIGHT 0x0100
|
||||
#define MASK_JOY1_LEFT 0x0200
|
||||
#define MASK_JOY1_UP 0x0400
|
||||
#define MASK_JOY1_DOWN 0x0800
|
||||
#define MASK_JOY1_BTN 0x1000
|
||||
#define MASK_KEY_USER4 0x2000
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void emu_init(void);
|
||||
extern void emu_start(void);
|
||||
extern void emu_printf(const char * text);
|
||||
extern void emu_printi(int val);
|
||||
extern void emu_printh(int val);
|
||||
extern void * emu_Malloc(unsigned int size);
|
||||
extern void * emu_MallocI(unsigned int size);
|
||||
extern void emu_Free(void * pt);
|
||||
|
||||
extern int emu_FileOpen(const char * filepath, const char * mode);
|
||||
extern int emu_FileRead(void * buf, int size, int handler);
|
||||
extern int emu_FileGetc(int handler);
|
||||
extern int emu_FileSeek(int handler, int seek, int origin);
|
||||
extern int emu_FileTell(int handler);
|
||||
extern void emu_FileClose(int handler);
|
||||
|
||||
extern unsigned int emu_FileSize(const char * filepath);
|
||||
extern unsigned int emu_LoadFile(const char * filepath, void * buf, int size);
|
||||
extern unsigned int emu_LoadFileSeek(const char * filepath, void * buf, int size, int seek);
|
||||
|
||||
extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index);
|
||||
extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride);
|
||||
extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line);
|
||||
extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line);
|
||||
extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line);
|
||||
extern void emu_CopyLine(int width, int height, int ysrc, int ydst);
|
||||
extern void emu_DrawVsync(void);
|
||||
extern int emu_FrameSkip(void);
|
||||
extern void * emu_LineBuffer(int line);
|
||||
extern void emu_tweakVideo(int shiftdelta, int numdelta, int denomdelta);
|
||||
|
||||
extern bool menuActive(void);
|
||||
extern char * menuSelection(void);
|
||||
extern char * menuSecondSelection(void);
|
||||
extern void toggleMenu(bool on);
|
||||
extern int handleMenu(unsigned short bClick);
|
||||
|
||||
extern int handleOSKB(void);
|
||||
extern void toggleOSKB(bool forceon);
|
||||
|
||||
extern void emu_InitJoysticks(void);
|
||||
extern int emu_SwapJoysticks(int statusOnly);
|
||||
extern unsigned short emu_DebounceLocalKeys(void);
|
||||
extern int emu_ReadKeys(void);
|
||||
extern int emu_GetPad(void);
|
||||
extern int emu_GetMouse(int *x, int *y, int *buts);
|
||||
extern int emu_MouseDetected(void);
|
||||
extern int emu_KeyboardDetected(void);
|
||||
extern int emu_ReadAnalogJoyX(int min, int max);
|
||||
extern int emu_ReadAnalogJoyY(int min, int max);
|
||||
extern int emu_ReadI2CKeyboard(void);
|
||||
extern unsigned char emu_ReadI2CKeyboard2(int row);
|
||||
extern void emu_KeyboardOnUp(int keymodifer, int key);
|
||||
extern void emu_KeyboardOnDown(int keymodifer, int key);
|
||||
extern void emu_MidiOnDataReceived(unsigned char data);
|
||||
|
||||
extern void emu_sndPlaySound(int chan, int volume, int freq);
|
||||
extern void emu_sndPlayBuzz(int size, int val);
|
||||
extern void emu_sndInit();
|
||||
extern void emu_resetus(void);
|
||||
extern int emu_us(void);
|
||||
|
||||
extern int emu_setKeymap(int index);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
324
MCUME_teensy41/teensynofrendo/event.c
Normal file
324
MCUME_teensy41/teensynofrendo/event.c
Normal file
|
|
@ -0,0 +1,324 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** event.c
|
||||
**
|
||||
** OS-independent event handling
|
||||
** $Id: event.c,v 1.3 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "noftypes.h"
|
||||
#include "event.h"
|
||||
#include "nesinput.h"
|
||||
|
||||
|
||||
|
||||
/* pointer to our current system's event handler table */
|
||||
static event_t *system_events = NULL;
|
||||
|
||||
/* standard keyboard input */
|
||||
static nesinput_t kb_input = { INP_JOYPAD0, 0 };
|
||||
static nesinput_t kb_alt_input = { INP_JOYPAD1, 0 };
|
||||
|
||||
|
||||
|
||||
static void func_event_joypad1_a(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_A);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_b(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_B);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_start(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_START);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_select(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_SELECT);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_up(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_UP);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_down(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_DOWN);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_left(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_LEFT);
|
||||
}
|
||||
|
||||
static void func_event_joypad1_right(int code)
|
||||
{
|
||||
input_event(&kb_input, code, INP_PAD_RIGHT);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_a(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_A);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_b(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_B);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_start(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_START);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_select(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_SELECT);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_up(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_UP);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_down(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_DOWN);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_left(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_LEFT);
|
||||
}
|
||||
|
||||
static void func_event_joypad2_right(int code)
|
||||
{
|
||||
input_event(&kb_alt_input, code, INP_PAD_RIGHT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* NES events */
|
||||
static const event_t nes_events[] =
|
||||
{
|
||||
NULL, /* 0 */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* saves */
|
||||
NULL,
|
||||
NULL, /* 10 */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL, /* 20 */
|
||||
/* GUI */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* sound */
|
||||
NULL,
|
||||
NULL, /* 30 */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* picture */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL, /* 40 */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* joypad 1 */
|
||||
func_event_joypad1_a,
|
||||
func_event_joypad1_b,
|
||||
func_event_joypad1_start,
|
||||
func_event_joypad1_select,
|
||||
func_event_joypad1_up,
|
||||
func_event_joypad1_down,
|
||||
func_event_joypad1_left, /* 50 */
|
||||
func_event_joypad1_right,
|
||||
/* joypad 2 */
|
||||
func_event_joypad2_a,
|
||||
func_event_joypad2_b,
|
||||
func_event_joypad2_start,
|
||||
func_event_joypad2_select,
|
||||
func_event_joypad2_up,
|
||||
func_event_joypad2_down,
|
||||
func_event_joypad2_left,
|
||||
func_event_joypad2_right,
|
||||
/* NSF control */
|
||||
NULL, /* 60 */
|
||||
NULL,
|
||||
NULL,
|
||||
/* OS-specific */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL, /* 70 */
|
||||
NULL,
|
||||
/* last */
|
||||
NULL
|
||||
};
|
||||
static event_t *event_system_table[NUM_SUPPORTED_SYSTEMS] =
|
||||
{
|
||||
NULL, /* unknown */
|
||||
NULL, /* autodetect */
|
||||
nes_events, /* nes */
|
||||
};
|
||||
|
||||
|
||||
|
||||
void event_init(void)
|
||||
{
|
||||
input_register(&kb_input);
|
||||
input_register(&kb_alt_input);
|
||||
}
|
||||
|
||||
/* set up the event system for a certain console/system type */
|
||||
void event_set_system(system_t type)
|
||||
{
|
||||
ASSERT(type < NUM_SUPPORTED_SYSTEMS);
|
||||
|
||||
system_events = event_system_table[type];
|
||||
}
|
||||
|
||||
void event_set(int index, event_t handler)
|
||||
{
|
||||
/* now, event_set is used to set osd-specific events. We should assume
|
||||
** (for now, at least) that these events should be used across all
|
||||
** emulated systems, so let's loop through all system event handler
|
||||
** tables and add this event...
|
||||
*/
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_SUPPORTED_SYSTEMS; i++)
|
||||
{
|
||||
if(event_system_table[i])
|
||||
{
|
||||
event_system_table[i][index] = handler;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
event_t event_get(int index)
|
||||
{
|
||||
return system_events[index];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** $Log: event.c,v $
|
||||
** Revision 1.3 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.2 2001/04/27 11:10:08 neil
|
||||
** compile
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.18 2000/11/25 20:26:05 matt
|
||||
** removed fds "system"
|
||||
**
|
||||
** Revision 1.17 2000/11/09 14:05:42 matt
|
||||
** state load fixed, state save mostly fixed
|
||||
**
|
||||
** Revision 1.16 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.15 2000/11/01 17:33:26 neil
|
||||
** little crash bugs fixed
|
||||
**
|
||||
** Revision 1.14 2000/11/01 14:15:35 matt
|
||||
** multi-system event system, or whatever
|
||||
**
|
||||
** Revision 1.13 2000/10/27 12:59:48 matt
|
||||
** api change for ppu palette functions
|
||||
**
|
||||
** Revision 1.12 2000/10/26 22:48:05 matt
|
||||
** no need for extern
|
||||
**
|
||||
** Revision 1.11 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.10 2000/10/23 17:50:46 matt
|
||||
** adding fds support
|
||||
**
|
||||
** Revision 1.9 2000/10/23 15:52:04 matt
|
||||
** better system handling
|
||||
**
|
||||
** Revision 1.8 2000/10/22 15:01:51 matt
|
||||
** prevented palette changing in VS unisystem games
|
||||
**
|
||||
** Revision 1.7 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.6 2000/08/16 02:58:34 matt
|
||||
** random cleanups
|
||||
**
|
||||
** Revision 1.5 2000/07/27 01:15:33 matt
|
||||
** name changes
|
||||
**
|
||||
** Revision 1.4 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.3 2000/07/23 15:17:19 matt
|
||||
** non-osd calls moved from osd.c to gui.c
|
||||
**
|
||||
** Revision 1.2 2000/07/21 12:07:40 neil
|
||||
** added room in event_array for all osd events
|
||||
**
|
||||
** Revision 1.1 2000/07/21 04:26:38 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
154
MCUME_teensy41/teensynofrendo/event.h
Executable file
154
MCUME_teensy41/teensynofrendo/event.h
Executable file
|
|
@ -0,0 +1,154 @@
|
|||
/* vim: set tabstop=3 expandtab:
|
||||
**
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** event.h
|
||||
**
|
||||
** OS-independent event handling
|
||||
** $Id: event.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _EVENT_H_
|
||||
#define _EVENT_H_
|
||||
|
||||
#include "nofrendo.h"
|
||||
|
||||
enum
|
||||
{
|
||||
event_none = 0,
|
||||
event_quit,
|
||||
event_insert,
|
||||
event_eject,
|
||||
event_togglepause,
|
||||
event_soft_reset,
|
||||
event_hard_reset,
|
||||
event_snapshot,
|
||||
event_toggle_frameskip,
|
||||
/* saves */
|
||||
event_state_save,
|
||||
event_state_load,
|
||||
event_state_slot_0,
|
||||
event_state_slot_1,
|
||||
event_state_slot_2,
|
||||
event_state_slot_3,
|
||||
event_state_slot_4,
|
||||
event_state_slot_5,
|
||||
event_state_slot_6,
|
||||
event_state_slot_7,
|
||||
event_state_slot_8,
|
||||
event_state_slot_9,
|
||||
/* GUI */
|
||||
event_gui_toggle_oam,
|
||||
event_gui_toggle_wave,
|
||||
event_gui_toggle_pattern,
|
||||
event_gui_pattern_color_up,
|
||||
event_gui_pattern_color_down,
|
||||
event_gui_toggle_fps,
|
||||
event_gui_display_info,
|
||||
event_gui_toggle,
|
||||
/* sound */
|
||||
event_toggle_channel_0,
|
||||
event_toggle_channel_1,
|
||||
event_toggle_channel_2,
|
||||
event_toggle_channel_3,
|
||||
event_toggle_channel_4,
|
||||
event_toggle_channel_5,
|
||||
event_set_filter_0,
|
||||
event_set_filter_1,
|
||||
event_set_filter_2,
|
||||
/* picture */
|
||||
event_toggle_sprites,
|
||||
event_palette_hue_up,
|
||||
event_palette_hue_down,
|
||||
event_palette_tint_up,
|
||||
event_palette_tint_down,
|
||||
event_palette_set_default,
|
||||
event_palette_set_shady,
|
||||
/* joypad 1 */
|
||||
event_joypad1_a,
|
||||
event_joypad1_b,
|
||||
event_joypad1_start,
|
||||
event_joypad1_select,
|
||||
event_joypad1_up,
|
||||
event_joypad1_down,
|
||||
event_joypad1_left,
|
||||
event_joypad1_right,
|
||||
/* joypad 2 */
|
||||
event_joypad2_a,
|
||||
event_joypad2_b,
|
||||
event_joypad2_start,
|
||||
event_joypad2_select,
|
||||
event_joypad2_up,
|
||||
event_joypad2_down,
|
||||
event_joypad2_left,
|
||||
event_joypad2_right,
|
||||
/* NSF control */
|
||||
event_songup,
|
||||
event_songdown,
|
||||
event_startsong,
|
||||
/* OS specific */
|
||||
event_osd_1,
|
||||
event_osd_2,
|
||||
event_osd_3,
|
||||
event_osd_4,
|
||||
event_osd_5,
|
||||
event_osd_6,
|
||||
event_osd_7,
|
||||
event_osd_8,
|
||||
event_osd_9,
|
||||
/* last */
|
||||
event_last
|
||||
};
|
||||
|
||||
typedef void (*event_t)(int code);
|
||||
|
||||
extern void event_init(void);
|
||||
extern void event_set(int index, event_t handler);
|
||||
extern event_t event_get(int index);
|
||||
extern void event_set_system(system_t type);
|
||||
|
||||
#endif /* !_EVENT_H_ */
|
||||
|
||||
/*
|
||||
** $Log: event.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.6 2000/11/01 14:15:35 matt
|
||||
** multi-system event system, or whatever
|
||||
**
|
||||
** Revision 1.5 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.4 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.2 2000/07/21 04:27:40 matt
|
||||
** don't mind me...
|
||||
**
|
||||
** Revision 1.1 2000/07/21 04:26:38 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
148
MCUME_teensy41/teensynofrendo/font8x8.h
Normal file
148
MCUME_teensy41/teensynofrendo/font8x8.h
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
|
||||
// Font: c64_lower.64c
|
||||
|
||||
PROGMEM const unsigned char font8x8[128][8] =
|
||||
{
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F
|
||||
|
||||
{ 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, // Space // 0x10
|
||||
{ 0x00, 0x27, 0x31, 0x27, 0x21, 0x71, 0x00, 0x00 }, // F1 // 0x11
|
||||
{ 0x00, 0x77, 0x41, 0x77, 0x11, 0x71, 0x00, 0x00 }, // F2
|
||||
{ 0x00, 0x77, 0x41, 0x77, 0x41, 0x71, 0x00, 0x00 }, // F3
|
||||
{ 0x00, 0x17, 0x51, 0x77, 0x41, 0x41, 0x00, 0x00 }, // F4
|
||||
{ 0x00, 0x77, 0x11, 0x77, 0x41, 0x71, 0x00, 0x00 }, // F5
|
||||
{ 0x00, 0x77, 0x11, 0x77, 0x51, 0x71, 0x00, 0x00 }, // F6
|
||||
{ 0x00, 0x77, 0x41, 0x47, 0x41, 0x41, 0x00, 0x00 }, // F7
|
||||
{ 0x00, 0x77, 0x51, 0x77, 0x51, 0x71, 0x00, 0x00 }, // F8 // 0x18
|
||||
{ 0x00, 0x00, 0x20, 0x24, 0x3e, 0x04, 0x00, 0x00 }, // Return // 0x19
|
||||
{ 0x00, 0x59, 0x4b, 0x5b, 0x4b, 0xd9, 0x00, 0x00 }, // Del // 0x1A
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019
|
||||
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space)
|
||||
{ 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!)
|
||||
{ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (")
|
||||
{ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#)
|
||||
{ 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($)
|
||||
{ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%)
|
||||
{ 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&)
|
||||
{ 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (')
|
||||
{ 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (()
|
||||
{ 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ())
|
||||
{ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*)
|
||||
{ 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+)
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,)
|
||||
{ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-)
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.)
|
||||
{ 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/)
|
||||
{ 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0)
|
||||
{ 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1)
|
||||
{ 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2)
|
||||
{ 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3)
|
||||
{ 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4)
|
||||
{ 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5)
|
||||
{ 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6)
|
||||
{ 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7)
|
||||
{ 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8)
|
||||
{ 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9)
|
||||
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:)
|
||||
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//)
|
||||
{ 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<)
|
||||
{ 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=)
|
||||
{ 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>)
|
||||
{ 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?)
|
||||
{ 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@)
|
||||
{ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A)
|
||||
{ 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B)
|
||||
{ 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C)
|
||||
{ 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D)
|
||||
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E)
|
||||
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F)
|
||||
{ 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G)
|
||||
{ 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H)
|
||||
{ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I)
|
||||
{ 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J)
|
||||
{ 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K)
|
||||
{ 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L)
|
||||
{ 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M)
|
||||
{ 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N)
|
||||
{ 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O)
|
||||
{ 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P)
|
||||
{ 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q)
|
||||
{ 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R)
|
||||
{ 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S)
|
||||
{ 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T)
|
||||
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U)
|
||||
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V)
|
||||
{ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W)
|
||||
{ 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X)
|
||||
{ 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y)
|
||||
{ 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z)
|
||||
{ 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([)
|
||||
{ 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\)
|
||||
{ 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (])
|
||||
{ 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^)
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_)
|
||||
{ 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`)
|
||||
{ 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a)
|
||||
{ 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b)
|
||||
{ 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c)
|
||||
{ 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d)
|
||||
{ 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e)
|
||||
{ 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f)
|
||||
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g)
|
||||
{ 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h)
|
||||
{ 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i)
|
||||
{ 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j)
|
||||
{ 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k)
|
||||
{ 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l)
|
||||
{ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m)
|
||||
{ 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n)
|
||||
{ 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o)
|
||||
{ 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p)
|
||||
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q)
|
||||
{ 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r)
|
||||
{ 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s)
|
||||
{ 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t)
|
||||
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u)
|
||||
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v)
|
||||
{ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w)
|
||||
{ 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x)
|
||||
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y)
|
||||
{ 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z)
|
||||
{ 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({)
|
||||
{ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|)
|
||||
{ 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (})
|
||||
{ 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~)
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
|
||||
};
|
||||
|
||||
|
||||
124
MCUME_teensy41/teensynofrendo/iopins.h
Normal file
124
MCUME_teensy41/teensynofrendo/iopins.h
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
#ifndef IOPINS_H
|
||||
#define IOPINS_H
|
||||
|
||||
#include "platform_config.h"
|
||||
|
||||
#ifdef TEECOMPUTER
|
||||
|
||||
// Teecomputer layout
|
||||
|
||||
// VGA
|
||||
// R 3 2K
|
||||
// R 4 1K
|
||||
// R 33 500
|
||||
// G 11 2K
|
||||
// G 13 1K
|
||||
// G 2 500
|
||||
// B 10 820
|
||||
// B 12 390
|
||||
// HSYNC 15 82
|
||||
// VSYNC 8 82
|
||||
|
||||
// Display
|
||||
#define TFT_SCLK 27
|
||||
#define TFT_MOSI 26
|
||||
#define TFT_MISO 255
|
||||
#define TFT_TOUCH_CS 255
|
||||
#define TFT_TOUCH_INT 255
|
||||
#define TFT_DC 23
|
||||
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
|
||||
#define TFT_RST 255 // 255 for ILI/ST if connected to 3.3V or 24 if really needed
|
||||
|
||||
|
||||
// SD
|
||||
#define SD_CS BUILTIN_SDCARD
|
||||
|
||||
// Audio
|
||||
#define AUDIO_I2S_DIN 7
|
||||
#define AUDIO_I2S_BCK 21
|
||||
#define AUDIO_I2S_LCK 20
|
||||
|
||||
// Keyboard matrix
|
||||
#define KLED 14
|
||||
//Cols (out)
|
||||
//pico 1,2,3,4,5,14
|
||||
//teen 16,6,24,25,28,31
|
||||
#define KCOLOUT1 16
|
||||
#define KCOLOUT2 6
|
||||
#define KCOLOUT3 24
|
||||
#define KCOLOUT4 25
|
||||
#define KCOLOUT5 28
|
||||
#define KCOLOUT6 31
|
||||
//Rows (in)
|
||||
//pico 9,8,6,15,7,22
|
||||
//teen 19,18,17,5,29,30,32 //5,6,16,17,18,19
|
||||
#define KROWIN1 19
|
||||
#define KROWIN2 18
|
||||
#define KROWIN3 17
|
||||
#define KROWIN4 5
|
||||
#define KROWIN5 29
|
||||
#define KROWIN6 30
|
||||
#define KROWIN7 32
|
||||
|
||||
#define PIN_KEY_USER1 41
|
||||
#define PIN_KEY_USER2 40
|
||||
|
||||
// Second joystick (external)
|
||||
#define PIN_JOY1_BTN 34
|
||||
#define PIN_JOY1_1 35 // UP
|
||||
#define PIN_JOY1_2 36 // DOWN
|
||||
#define PIN_JOY1_3 38 // RIGHT
|
||||
#define PIN_JOY1_4 37 // LEFT
|
||||
|
||||
#else
|
||||
|
||||
// Original Layout
|
||||
#define TFT_SCLK 13
|
||||
#define TFT_MOSI 11
|
||||
#define TFT_MISO 12
|
||||
#define TFT_TOUCH_CS 255
|
||||
#define TFT_TOUCH_INT 255
|
||||
#define TFT_DC 9
|
||||
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
|
||||
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
|
||||
|
||||
// SD
|
||||
#define SD_CS BUILTIN_SDCARD
|
||||
|
||||
// I2C keyboard
|
||||
#define I2C_SCL_IO 19
|
||||
#define I2C_SDA_IO 18
|
||||
|
||||
// Analog joystick (primary) for JOY2 and 5 extra buttons
|
||||
#ifdef HAS_T4_VGA
|
||||
#define PIN_JOY2_A1X A3
|
||||
#define PIN_JOY2_A2Y A2
|
||||
#define PIN_JOY2_BTN 14
|
||||
#define PIN_KEY_USER1 22
|
||||
#define PIN_KEY_USER2 23
|
||||
|
||||
// Second joystick
|
||||
#define PIN_JOY1_BTN 34
|
||||
#define PIN_JOY1_1 35 // UP
|
||||
#define PIN_JOY1_2 36 // DOWN
|
||||
#define PIN_JOY1_3 38 // RIGHT
|
||||
#define PIN_JOY1_4 37 // LEFT
|
||||
|
||||
#else
|
||||
#define PIN_JOY2_A1X A1
|
||||
#define PIN_JOY2_A2Y A2
|
||||
#define PIN_JOY2_BTN 17
|
||||
#define PIN_KEY_USER1 3 //34
|
||||
#define PIN_KEY_USER2 4 //35
|
||||
|
||||
// Second joystick
|
||||
#define PIN_JOY1_BTN 2
|
||||
#define PIN_JOY1_1 14 // UP
|
||||
#define PIN_JOY1_2 7 // DOWN
|
||||
#define PIN_JOY1_3 6 // RIGHT
|
||||
#define PIN_JOY1_4 5 // LEFT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
20
MCUME_teensy41/teensynofrendo/keyboard_osd.h
Normal file
20
MCUME_teensy41/teensynofrendo/keyboard_osd.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
#ifndef keyboard_osd_h_
|
||||
#define keyboard_osd_h_
|
||||
|
||||
extern bool virtualkeyboardIsActive(void);
|
||||
extern void drawVirtualkeyboard(void);
|
||||
extern void toggleVirtualkeyboard(bool keepOn);
|
||||
extern void handleVirtualkeyboard(void);
|
||||
|
||||
extern bool callibrationActive(void);
|
||||
extern int handleCallibration(uint16_t bClick);
|
||||
|
||||
extern bool menuActive(void);
|
||||
extern char * menuSelection(void);
|
||||
extern void toggleMenu(bool on);
|
||||
extern int handleMenu(uint16_t bClick);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
397
MCUME_teensy41/teensynofrendo/libsnss.h
Executable file
397
MCUME_teensy41/teensynofrendo/libsnss.h
Executable file
|
|
@ -0,0 +1,397 @@
|
|||
/**************************************************************************/
|
||||
/*
|
||||
libsnss.h
|
||||
|
||||
(C) 2000 The SNSS Group
|
||||
See README.TXT file for license and terms of use.
|
||||
|
||||
$Id: libsnss.h,v 1.1 2001/04/27 12:54:40 neil Exp $
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef _LIBSNSS_H_
|
||||
#define _LIBSNSS_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/**************************************************************************/
|
||||
/* endian customization */
|
||||
/**************************************************************************/
|
||||
/*
|
||||
Endian-ness quick reference:
|
||||
the number is:
|
||||
$12345678
|
||||
the little-endian representation (e.g.: 6502, Intel x86) is:
|
||||
78 56 34 12
|
||||
the big-endian representation (e.g.: Motorola 68000) is:
|
||||
12 34 56 78
|
||||
the SNSS file format uses big-endian representation
|
||||
*/
|
||||
|
||||
/* comment/uncomment depending on your processor architecture */
|
||||
/* commenting this out implies BIG ENDIAN */
|
||||
#define USE_LITTLE_ENDIAN
|
||||
|
||||
/**************************************************************************/
|
||||
/* SNSS constants */
|
||||
/**************************************************************************/
|
||||
|
||||
typedef enum _SNSS_OPEN_MODES
|
||||
{
|
||||
SNSS_OPEN_READ,
|
||||
SNSS_OPEN_WRITE
|
||||
} SNSS_OPEN_MODE;
|
||||
|
||||
/* block types */
|
||||
typedef enum _SNSS_BLOCK_TYPES
|
||||
{
|
||||
SNSS_BASR,
|
||||
SNSS_VRAM,
|
||||
SNSS_SRAM,
|
||||
SNSS_MPRD,
|
||||
SNSS_CNTR,
|
||||
SNSS_SOUN,
|
||||
SNSS_UNKNOWN_BLOCK
|
||||
} SNSS_BLOCK_TYPE;
|
||||
|
||||
/* function return types */
|
||||
typedef enum _SNSS_RETURN_CODES
|
||||
{
|
||||
SNSS_OK,
|
||||
SNSS_BAD_FILE_TAG,
|
||||
SNSS_OPEN_FAILED,
|
||||
SNSS_CLOSE_FAILED,
|
||||
SNSS_READ_FAILED,
|
||||
SNSS_WRITE_FAILED,
|
||||
SNSS_OUT_OF_MEMORY,
|
||||
SNSS_UNSUPPORTED_BLOCK
|
||||
} SNSS_RETURN_CODE;
|
||||
|
||||
|
||||
#define TAG_LENGTH 4
|
||||
#define SNSS_BLOCK_VERSION 1
|
||||
|
||||
/**************************************************************************/
|
||||
/* SNSS data structures */
|
||||
/**************************************************************************/
|
||||
|
||||
struct mapper1Data
|
||||
{
|
||||
unsigned char registers[4];
|
||||
unsigned char latch;
|
||||
unsigned char numberOfBits;
|
||||
};
|
||||
|
||||
struct mapper4Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqLatchCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
unsigned char last8000Write;
|
||||
};
|
||||
|
||||
struct mapper5Data
|
||||
{
|
||||
unsigned char dummy; /* needed for some compilers; remove if any members are added */
|
||||
};
|
||||
|
||||
struct mapper6Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqLatchCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
unsigned char last43FEWrite;
|
||||
unsigned char last4500Write;
|
||||
};
|
||||
|
||||
struct mapper9Data
|
||||
{
|
||||
unsigned char latch[2];
|
||||
unsigned char lastB000Write;
|
||||
unsigned char lastC000Write;
|
||||
unsigned char lastD000Write;
|
||||
unsigned char lastE000Write;
|
||||
};
|
||||
|
||||
struct mapper10Data
|
||||
{
|
||||
unsigned char latch[2];
|
||||
unsigned char lastB000Write;
|
||||
unsigned char lastC000Write;
|
||||
unsigned char lastD000Write;
|
||||
unsigned char lastE000Write;
|
||||
};
|
||||
|
||||
struct mapper16Data
|
||||
{
|
||||
unsigned char irqCounterLowByte;
|
||||
unsigned char irqCounterHighByte;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper17Data
|
||||
{
|
||||
unsigned char irqCounterLowByte;
|
||||
unsigned char irqCounterHighByte;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper18Data
|
||||
{
|
||||
unsigned char irqCounterLowByte;
|
||||
unsigned char irqCounterHighByte;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper19Data
|
||||
{
|
||||
unsigned char irqCounterLowByte;
|
||||
unsigned char irqCounterHighByte;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper21Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper24Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper40Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper69Data
|
||||
{
|
||||
unsigned char irqCounterLowByte;
|
||||
unsigned char irqCounterHighByte;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper90Data
|
||||
{
|
||||
unsigned char irqCounter;
|
||||
unsigned char irqLatchCounter;
|
||||
unsigned char irqCounterEnabled;
|
||||
};
|
||||
|
||||
struct mapper224Data
|
||||
{
|
||||
unsigned char chrRamWriteable;
|
||||
};
|
||||
|
||||
struct mapper225Data
|
||||
{
|
||||
unsigned char prgSize;
|
||||
unsigned char registers[4];
|
||||
};
|
||||
|
||||
struct mapper226Data
|
||||
{
|
||||
unsigned char chrRamWriteable;
|
||||
};
|
||||
|
||||
struct mapper228Data
|
||||
{
|
||||
unsigned char prgChipSelected;
|
||||
};
|
||||
|
||||
struct mapper230Data
|
||||
{
|
||||
unsigned char numberOfResets;
|
||||
};
|
||||
|
||||
typedef struct _SnssFileHeader
|
||||
{
|
||||
char tag[TAG_LENGTH + 1];
|
||||
unsigned int numberOfBlocks;
|
||||
} SnssFileHeader;
|
||||
|
||||
/* this block appears before every block in the SNSS file */
|
||||
typedef struct _SnssBlockHeader
|
||||
{
|
||||
char tag[TAG_LENGTH + 1];
|
||||
unsigned int blockVersion;
|
||||
unsigned int blockLength;
|
||||
} SnssBlockHeader;
|
||||
|
||||
#define BASE_BLOCK_LENGTH 0x1931
|
||||
typedef struct _SnssBaseBlock
|
||||
{
|
||||
unsigned char regA;
|
||||
unsigned char regX;
|
||||
unsigned char regY;
|
||||
unsigned char regFlags;
|
||||
unsigned char regStack;
|
||||
unsigned short regPc;
|
||||
unsigned char reg2000;
|
||||
unsigned char reg2001;
|
||||
unsigned char cpuRam[0x800];
|
||||
unsigned char spriteRam[0x100];
|
||||
unsigned char ppuRam[0x1000];
|
||||
unsigned char palette[0x20];
|
||||
unsigned char mirrorState[4];
|
||||
unsigned short vramAddress;
|
||||
unsigned char spriteRamAddress;
|
||||
unsigned char tileXOffset;
|
||||
} SnssBaseBlock;
|
||||
|
||||
#define VRAM_8K 0x2000
|
||||
#define VRAM_16K 0x4000
|
||||
typedef struct _SnssVramBlock
|
||||
{
|
||||
unsigned short vramSize;
|
||||
unsigned char vram[VRAM_16K];
|
||||
} SnssVramBlock;
|
||||
|
||||
#define SRAM_1K 0x0400
|
||||
#define SRAM_2K 0x0800
|
||||
#define SRAM_3K 0x0C00
|
||||
#define SRAM_4K 0x1000
|
||||
#define SRAM_5K 0x1400
|
||||
#define SRAM_6K 0x1800
|
||||
#define SRAM_7K 0x1C00
|
||||
#define SRAM_8K 0x2000
|
||||
typedef struct _SnssSramBlock
|
||||
{
|
||||
unsigned short sramSize;
|
||||
unsigned char sramEnabled;
|
||||
unsigned char sram[SRAM_8K];
|
||||
} SnssSramBlock;
|
||||
|
||||
#define MAPPER_BLOCK_LENGTH 0x98
|
||||
typedef struct _SnssMapperBlock
|
||||
{
|
||||
unsigned short prgPages[4];
|
||||
unsigned short chrPages[8];
|
||||
|
||||
union _extraData
|
||||
{
|
||||
unsigned char mapperData[128];
|
||||
struct mapper1Data mapper1;
|
||||
struct mapper4Data mapper4;
|
||||
struct mapper5Data mapper5;
|
||||
struct mapper6Data mapper6;
|
||||
struct mapper9Data mapper9;
|
||||
struct mapper10Data mapper10;
|
||||
struct mapper16Data mapper16;
|
||||
struct mapper17Data mapper17;
|
||||
struct mapper18Data mapper18;
|
||||
struct mapper19Data mapper19;
|
||||
struct mapper21Data mapper21;
|
||||
struct mapper24Data mapper24;
|
||||
struct mapper40Data mapper40;
|
||||
struct mapper69Data mapper69;
|
||||
struct mapper90Data mapper90;
|
||||
struct mapper224Data mapper224;
|
||||
struct mapper225Data mapper225;
|
||||
struct mapper226Data mapper226;
|
||||
struct mapper228Data mapper228;
|
||||
struct mapper230Data mapper230;
|
||||
} extraData;
|
||||
} SnssMapperBlock;
|
||||
|
||||
typedef struct _SnssControllersBlock
|
||||
{
|
||||
unsigned char dummy; /* needed for some compilers; remove if any members are added */
|
||||
} SnssControllersBlock;
|
||||
|
||||
#define SOUND_BLOCK_LENGTH 0x16
|
||||
typedef struct _SnssSoundBlock
|
||||
{
|
||||
unsigned char soundRegisters[0x16];
|
||||
} SnssSoundBlock;
|
||||
|
||||
/**************************************************************************/
|
||||
/* SNSS file manipulation functions */
|
||||
/**************************************************************************/
|
||||
|
||||
typedef struct _SNSS_FILE
|
||||
{
|
||||
FILE *fp;
|
||||
SNSS_OPEN_MODE mode;
|
||||
SnssFileHeader headerBlock;
|
||||
SnssBaseBlock baseBlock;
|
||||
SnssVramBlock vramBlock;
|
||||
SnssSramBlock sramBlock;
|
||||
SnssMapperBlock mapperBlock;
|
||||
SnssControllersBlock contBlock;
|
||||
SnssSoundBlock soundBlock;
|
||||
} SNSS_FILE;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* general file manipulation routines */
|
||||
SNSS_RETURN_CODE SNSS_OpenFile (SNSS_FILE **snssFile, const char *filename,
|
||||
SNSS_OPEN_MODE mode);
|
||||
SNSS_RETURN_CODE SNSS_CloseFile (SNSS_FILE **snssFile);
|
||||
|
||||
/* block traversal */
|
||||
SNSS_RETURN_CODE SNSS_GetNextBlockType (SNSS_BLOCK_TYPE *blockType,
|
||||
SNSS_FILE *snssFile);
|
||||
SNSS_RETURN_CODE SNSS_SkipNextBlock (SNSS_FILE *snssFile);
|
||||
|
||||
/* functions to read/write SNSS blocks */
|
||||
SNSS_RETURN_CODE SNSS_ReadBlock (SNSS_FILE *snssFile, SNSS_BLOCK_TYPE blockType);
|
||||
SNSS_RETURN_CODE SNSS_WriteBlock (SNSS_FILE *snssFile, SNSS_BLOCK_TYPE blockType);
|
||||
|
||||
/* support functions */
|
||||
const char *SNSS_GetErrorString (SNSS_RETURN_CODE code);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _LIBSNSS_H_ */
|
||||
|
||||
/*
|
||||
** $Log: libsnss.h,v $
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/09 14:07:41 matt
|
||||
** minor update
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:01 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.9 2000/09/18 02:06:48 matt
|
||||
** -pedantic is your friend
|
||||
**
|
||||
** Revision 1.8 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.7 2000/07/15 23:49:14 matt
|
||||
** fixed some typos in the mapper-specific data
|
||||
**
|
||||
** Revision 1.6 2000/07/09 15:37:21 matt
|
||||
** all block read/write calls now pass through a common handler
|
||||
**
|
||||
** Revision 1.5 2000/07/09 03:39:06 matt
|
||||
** minor modifications
|
||||
**
|
||||
** Revision 1.4 2000/07/08 16:01:39 matt
|
||||
** added bald's changes, made error checking more robust
|
||||
**
|
||||
** Revision 1.3 2000/07/05 22:46:52 matt
|
||||
** cleaned up header
|
||||
**
|
||||
** Revision 1.2 2000/07/04 04:46:06 matt
|
||||
** simplified handling of SNSS states
|
||||
**
|
||||
** Revision 1.1 2000/06/29 14:13:28 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
121
MCUME_teensy41/teensynofrendo/log.c
Executable file
121
MCUME_teensy41/teensynofrendo/log.c
Executable file
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** log.c
|
||||
**
|
||||
** Error logging functions
|
||||
** $Id: log.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include "noftypes.h"
|
||||
#include "log.h"
|
||||
|
||||
|
||||
//static FILE *errorlog = NULL;
|
||||
static int (*log_func)(const char *string) = NULL;
|
||||
|
||||
|
||||
int log_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void log_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
int log_print(const char *string)
|
||||
{
|
||||
UNUSED(string);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int log_printf(const char *format, ... )
|
||||
{
|
||||
UNUSED(format);
|
||||
|
||||
return 0; /* should be number of chars written */
|
||||
}
|
||||
|
||||
void log_chain_logfunc(int (*func)(const char *string))
|
||||
{
|
||||
log_func = func;
|
||||
}
|
||||
|
||||
void log_assert(int expr, int line, const char *file, char *msg)
|
||||
{
|
||||
if (expr)
|
||||
return;
|
||||
|
||||
if (NULL != msg)
|
||||
log_printf("ASSERT: line %d of %s, %s\n", line, file, msg);
|
||||
else
|
||||
log_printf("ASSERT: line %d of %s\n", line, file);
|
||||
|
||||
//asm("break.n 1");
|
||||
// exit(-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** $Log: log.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.14 2000/11/13 00:56:17 matt
|
||||
** doesn't look as nasty now
|
||||
**
|
||||
** Revision 1.13 2000/11/06 02:15:07 matt
|
||||
** more robust logging routines
|
||||
**
|
||||
** Revision 1.12 2000/10/15 13:28:12 matt
|
||||
** need stdlib.h for exit()
|
||||
**
|
||||
** Revision 1.11 2000/10/10 13:13:13 matt
|
||||
** dumb bug in log_chain_logfunc
|
||||
**
|
||||
** Revision 1.10 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.9 2000/08/28 01:47:10 matt
|
||||
** quelled fricking compiler complaints
|
||||
**
|
||||
** Revision 1.8 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.7 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.6 2000/07/06 17:20:52 matt
|
||||
** block manager space itself wasn't being freed - d'oh!
|
||||
**
|
||||
** Revision 1.5 2000/06/26 04:55:33 matt
|
||||
** minor change
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
57
MCUME_teensy41/teensynofrendo/log.h
Executable file
57
MCUME_teensy41/teensynofrendo/log.h
Executable file
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** log.h
|
||||
**
|
||||
** Error logging header file
|
||||
** $Id: log.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _LOG_H_
|
||||
#define _LOG_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
extern int log_init(void);
|
||||
extern void log_shutdown(void);
|
||||
extern int log_print(const char *string);
|
||||
extern int log_printf(const char *format, ...);
|
||||
extern void log_chain_logfunc(int (*logfunc)(const char *string));
|
||||
extern void log_assert(int expr, int line, const char *file, char *msg);
|
||||
|
||||
#endif /* _LOG_H_ */
|
||||
|
||||
/*
|
||||
** $Log: log.h,v $
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.7 2000/11/06 02:15:07 matt
|
||||
** more robust logging routines
|
||||
**
|
||||
** Revision 1.6 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.5 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
125
MCUME_teensy41/teensynofrendo/logo.h
Normal file
125
MCUME_teensy41/teensynofrendo/logo.h
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
const uint16_t logo[] PROGMEM = {
|
||||
0x0140,0x007c,0x632c,0xbdd7,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xa514,0x2104,
|
||||
0xbdf7,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdefb,0x9cd3,
|
||||
0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xd69a,0xbdf7,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0xce59,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce59,0xce79,0xd69a,0xad75,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0xb596,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xce79,0xce79,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0x8410,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x8410,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xce79,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd6ba,0xa514,0x0000,0x10a2,0x10a2,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x10a2,0x0841,0x2124,0x9492,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x8c71,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x10a2,0x0000,0x18c3,0xbdd7,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd6ba,0x7bef,0x0000,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x8c51,0x9cf3,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b4d,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x630c,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1800,0x1800,0x0000,0x0000,0x0000,0x0000,0x1800,0x1800,0x0800,0x1000,0x1800,0x1800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x2965,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x2965,0x2965,0x3186,0x2945,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x5000,0x8041,0x7061,0x0020,0x0000,0x0000,0x2800,0x7020,0x8061,0x4041,0x6820,0x8841,0x8061,0x1020,0x0000,0x0800,0x0000,0x0000,0x1000,0x1000,0x0800,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1000,0x0000,0x8020,0xa061,0x7082,0x0000,0x0800,0x0800,0x1000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2124,0x8410,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x7bef,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x9000,0xd000,0xd061,0x90c3,0x0000,0x0000,0x4800,0xc800,0xd861,0x7882,0x9800,0xd800,0xc082,0x2061,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x7020,0x8861,0x3861,0x0000,0x0800,0x1000,0x0000,0x0000,0x0000,0x0800,0x1000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x1000,0x0000,0x0000,0x0000,0xb000,0xe000,0xa0a2,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x7bcf,0xa514,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xa514,0x73ae,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xc000,0xc8a2,0x68a2,0x0000,0x4800,0xc000,0xd041,0x7882,0x0000,0x3000,0x2820,0x0800,0x0800,0x0820,0x0020,0x2800,0x5820,0x5841,0x2041,0x0000,0x4800,0x8020,0xc800,0xd820,0xa0a2,0x6841,0x1820,0x0000,0x0000,0x5820,0x5021,0x0020,0x0000,0x1000,0x0800,0x0020,0x0000,0x3800,0x6020,0x5041,0x0020,0x0000,0x0800,0x0000,0x3000,0x6020,0x5020,0xa800,0xd000,0x98a2,0x0000,0x0000,0x3800,0x6020,0x5820,0x0020,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x10a2,0x8c71,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd800,0xa882,0x7800,0xc8c3,0x1061,0x4000,0xc000,0xd041,0x7882,0x8800,0xc041,0xa882,0x3041,0xa820,0xc061,0x9881,0x8000,0xb820,0xd021,0xc0a2,0x4882,0x5800,0x9800,0xc000,0xc800,0xa841,0x8041,0x0020,0x7800,0xb820,0x8020,0x9021,0xb0a2,0x5082,0x4000,0xb820,0xb861,0x9061,0x8800,0xc020,0xd041,0xb0c3,0x2861,0x0000,0x9000,0xc020,0x9841,0x7020,0xb800,0xd000,0x98a2,0x0000,0xa000,0xc020,0x8821,0x9840,0xb882,0x70a2,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0xa800,0xb0e3,0x0841,0xc000,0xd041,0x7082,0xa800,0xe000,0xc082,0x3061,0xc000,0xd800,0xa861,0x0000,0x3800,0xb800,0xd820,0x98c3,0x0000,0x0000,0xb800,0xd820,0x7082,0x0000,0x5800,0xd000,0xc861,0x4861,0x7000,0xd800,0xc0c3,0x5861,0xc800,0xd820,0x8861,0x0000,0x5800,0xc800,0xd861,0x70a2,0x6800,0xd800,0xc861,0x0841,0x0000,0xb000,0xd800,0x90a2,0x7800,0xe000,0xa861,0x0000,0x3000,0xc800,0xc8a2,0x4082,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x528a,0x630c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x630c,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0x3000,0xc061,0xa082,0xc000,0xd041,0x7882,0x9800,0xd000,0xb882,0x3061,0xb800,0xd020,0x88a2,0x0000,0x0000,0xb000,0xd000,0xa082,0x0000,0x3000,0xb800,0xd820,0x80a2,0x0000,0x8800,0xd000,0xb841,0x9841,0x9000,0x8800,0x9020,0x6041,0xc000,0xd061,0x6882,0x0000,0x4000,0xc000,0xd041,0x7082,0x9800,0xd800,0xb882,0x1041,0x0000,0xa800,0xd800,0x90a2,0x9800,0xd800,0x9882,0x0020,0x3800,0xb800,0xd040,0x78a2,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0x9cf3,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0x0000,0x6000,0xd000,0xc800,0xd041,0x7882,0xa000,0xd800,0xc082,0x3061,0xb800,0xd020,0x90a2,0x0000,0x1800,0xb000,0xd800,0xa0a2,0x0000,0x2800,0xb800,0xd820,0x78a2,0x0000,0x7000,0xd800,0xb8a2,0x0020,0x0000,0x9820,0x9882,0x5020,0xc800,0xd061,0x7082,0x0000,0x4000,0xc000,0xd041,0x6882,0x8800,0xd800,0xc082,0x0061,0x0000,0xa800,0xd800,0x90a2,0x8000,0xe000,0xa0a2,0x0020,0x2800,0xc000,0xd041,0x5861,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x8c51,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdedb,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd800,0xb882,0x0040,0x1800,0x0000,0x8800,0xd000,0xd041,0x7882,0xa000,0xd800,0xc082,0x3861,0xb800,0xd820,0x90a2,0x0000,0x1000,0xb000,0xd800,0xa0a2,0x0000,0x3000,0xb800,0xd820,0x80a2,0x0000,0x0000,0x9800,0xc882,0x7082,0x8800,0xd000,0x9041,0x4800,0xc800,0xd061,0x7882,0x0000,0x4800,0xc800,0xd841,0x7882,0x0000,0xb000,0xd061,0x88a2,0x6000,0xc000,0xd800,0x98a2,0x0000,0xa800,0xc082,0x6882,0x9000,0xc800,0x8820,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce59,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xce79,0xce59,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x5000,0x8000,0x6820,0x0000,0x0800,0x0000,0x1000,0x7000,0x8000,0x4820,0x5800,0x8000,0x7020,0x2000,0x6800,0x8000,0x5820,0x0000,0x0800,0x6800,0x8000,0x6020,0x0000,0x1800,0x6800,0x8000,0x4820,0x0000,0x0000,0x0000,0x5000,0x7820,0x7800,0x4800,0x0000,0x3000,0x7000,0x7800,0x4020,0x0000,0x2800,0x7000,0x8000,0x4820,0x0000,0x1000,0x6800,0x8020,0x7000,0x7000,0x7800,0x6020,0x0000,0x0000,0x5800,0x8020,0x7800,0x3800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xbdd7,0xa514,0x9492,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c51,0x8c51,0x9cf3,0xbdd7,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xd69a,0xce59,0x9492,0x528a,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x2965,0x73ae,0xb596,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1800,0x1000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0800,0x1800,0x1000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x1000,0x1800,0x1000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0800,0x1000,0x1000,0x0800,0x0000,0x0000,0x1000,0x1000,0x0800,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x1000,0x1000,0x1000,0x1000,0x1000,0x0800,0x0000,0x0000,0x0800,0x1000,0x1000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce59,0x9492,0x0000,0x0000,0x2965,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x4a49,0x8c51,0x8c71,0x2104,0x7bef,0xc618,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xce59,0x9cd3,0x0000,0x0000,0x10a2,0x2945,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x3186,0x3186,0x31a6,0x8430,0xc638,0x8410,0x39c7,0xb5b6,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xbdd7,0x5aeb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a49,0xad75,0x9492,0x18e3,0xad55,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8410,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad75,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x5aeb,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a69,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x4a49,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2124,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0841,0x39e7,0x39c7,0x2104,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x18c3,0x4a69,0x4228,0x3186,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x18e3,0x528a,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x528a,0x1082,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x10a2,0x52aa,0x528a,0x4208,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39e7,0x9492,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x8c51,0x31a6,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x4a69,0x5aeb,0x4a49,0x31a6,0x2104,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x8410,0xa514,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0xa514,0x7bef,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x18e3,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2124,0x5aeb,0x52aa,0x39e7,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x2124,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0020,0x0000,0x2965,0x4a69,0x4228,0x3186,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cf3,0x8c31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x1082,0x738e,0x7bef,0x7bcf,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x73ae,0xad75,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x0841,0x2124,0x2104,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd69a,0xb596,0x738e,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd2,0x9cd3,0x94f3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94d3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cf3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f4,0x94f3,0x9cf3,0x9cf3,0x94f3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cd3,0x94f3,0x9cf3,0x9cf3,0x9cf3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x94d3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xa534,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd69a,0xce79,0xce59,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xce59,0xd69a,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0x94b2,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x94d3,0xa430,0xb2eb,0xb2eb,0xb2eb,0xb2aa,0xa430,0xa451,0xb2eb,0xb2eb,0xb2cb,0xb28a,0xa410,0xab8e,0xa471,0x94f3,0x9cd3,0x9cd3,0x94d3,0xabcf,0xb2cb,0xb2eb,0xb2aa,0xb2cb,0x9c92,0xabcf,0xb28a,0xb2cb,0xb2aa,0xb2eb,0x9c31,0xaaeb,0xb2aa,0xbaeb,0xb2aa,0xb2cb,0xa492,0x94d3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xabcf,0xb2cb,0xb2eb,0xb2cb,0xb2eb,0xa430,0xaaeb,0xb2aa,0xbaeb,0xb2aa,0xb2cb,0xa471,0xab8e,0xb2cb,0xb2eb,0xb2eb,0xac30,0x9c51,0xbaab,0xb2eb,0xb2eb,0xb2eb,0xac30,0xa3ef,0xb269,0xb2eb,0xbaeb,0xb28a,0xab8e,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x632c,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xd6ba,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x94d3,0xb104,0xba08,0xab6d,0xab2c,0xabaf,0x9492,0xb986,0xba49,0xab6d,0xa3cf,0xa3ef,0x9c51,0xb924,0xac10,0x94f3,0x9cb2,0x9cf3,0x9471,0xc000,0xb2eb,0xa36d,0xa3ef,0xa430,0x9c30,0xc061,0xabae,0x9c10,0xa3ef,0xa3f0,0x9c71,0x9c30,0x9bae,0xc000,0xab8e,0x9c10,0x9c92,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cf3,0x9471,0xc000,0xb2eb,0xab4d,0xab2c,0xa3ef,0x9c92,0x9c30,0x9bae,0xc000,0xb36d,0x9c51,0xa36d,0xc061,0xab4c,0xab6d,0xaa8a,0xc208,0xab0c,0xc081,0xab4d,0xab6d,0xaaaa,0xc186,0xa451,0x9c30,0xaa49,0xc1c7,0x9c10,0xa431,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xc638,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8430,0x18e3,0x9cd3,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xce59,0xce79,0xce79,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9c10,0xab0c,0xab2c,0xab2c,0xbaaa,0xabf0,0xb186,0xba8a,0xab2c,0xa4b2,0x9555,0x8cf3,0xb965,0xac71,0x9534,0x94f3,0x9534,0x9451,0xc000,0xb2ec,0xab6d,0x9cf3,0x9575,0x9430,0xc124,0x9d14,0x9534,0x9534,0x9534,0x94f3,0x9d14,0x94b2,0xb945,0xa492,0x9534,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94d3,0x9bcf,0xab0c,0xab2c,0xab0c,0xbaaa,0xa492,0x9534,0x94b2,0xb925,0xac71,0x8d55,0xa38d,0xc0a2,0xb2eb,0xb2eb,0xb269,0xc228,0xab0c,0xc124,0xb2eb,0xaacb,0xb945,0xbacb,0x9cf3,0x9554,0xa34c,0xbacb,0x9534,0x94f3,0x9cd3,0x9cd2,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce59,0xce59,0xce59,0xbdf7,0x9cf3,0x8410,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x8410,0x8c51,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0xa514,0x94b2,0x0000,0x5aeb,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x738e,0x73ae,0x94b2,0xbdd7,0xce59,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x94d3,0xa3ae,0xb2ab,0xb2ca,0xaacb,0xb800,0xabae,0xa2ca,0xb9e7,0xaacb,0xb2cb,0xb2cb,0xa410,0xb1c7,0xba69,0xb30c,0xb2eb,0xb2ec,0xa3ef,0xb1e7,0xb269,0xaacb,0xb2cb,0xb30c,0x9c50,0xb1c7,0xba8a,0xb2eb,0xb2cb,0xb2eb,0xa492,0x9cf3,0x9471,0xb882,0xa451,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb2,0xab4d,0xb2aa,0xb2cb,0xaa8a,0xc000,0xa451,0x94f3,0x9471,0xb861,0xac51,0x9514,0xa36d,0xb9e8,0x94d3,0x94f3,0x9451,0xb9e7,0xaaeb,0xba28,0x94d3,0x94d3,0x9bcf,0xb9a6,0x9cb2,0x9514,0xa2ec,0xba6a,0x94f3,0x9cb2,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xd69a,0xce79,0x9cd3,0x4228,0x2965,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xa514,0x528a,0x31a6,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x39e7,0x4a49,0x2945,0x73ae,0xb5b6,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9c10,0xa3ef,0xa3ef,0xa3ef,0xa430,0x94f3,0x94b2,0x9c10,0xa3ef,0xa3ef,0xa3cf,0xa471,0x9c51,0xa3ef,0xa3ef,0xa3ef,0xa3cf,0x9c71,0x9492,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9cb2,0x9492,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9cb2,0x9cd3,0x9cb3,0x9c50,0x9cb2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb2,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9c71,0x9cd3,0x9cd3,0x94b3,0x9c30,0x9cb2,0x9cd3,0x9c92,0x9c51,0x9cd3,0x9cd3,0x9cb2,0x9c51,0x9c71,0x9c51,0x9cd3,0x9cd3,0x9cd3,0x9c30,0x9cb3,0x94d3,0x9c71,0x9c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce59,0xce79,0xce59,0x94b2,0x0000,0x0000,0x2124,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x7bcf,0x6b6d,0x4228,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x5aeb,0xa514,0x9492,0x0861,0x8c71,0xce59,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x9cf3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f4,0x9cd3,0x9cd2,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x94f4,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x9cd3,0x9cd3,0x9cf3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xa514,0x2104,0x0000,0x10a2,0x18e3,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2104,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2945,0x31a6,0x9cd3,0xc638,0x5acb,0x630c,0xc618,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb3,0x9cd3,0x9cb3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xad75,0x738e,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x8430,0xa514,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0xa514,0x8410,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x18e3,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x52aa,0x9cf3,0x6b4d,0x4a49,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4a49,0x94b2,0xa514,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa4f4,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9d14,0xa513,0x9cf4,0x9cf3,0x9cf3,0x9d14,0x9d13,0x9cf3,0x9cf3,0xa514,0x9cf3,0xa513,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0xa514,0x9492,0x4208,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x2965,0x2104,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x3186,0x5aeb,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x2945,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x39e7,0x31a6,0x2945,0x2104,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x18c3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0x4a49,0x39e7,0x31a6,0x2945,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x39e7,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x39e7,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x3186,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x3186,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a49,0x528a,0x4228,0x39e7,0x31a6,0x2945,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x2965,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4a49,0xb596,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xbdd7,0x52aa,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x9cd3,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xc638,0x8c51,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x39c7,0x4208,0x2945,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x52aa,0x5acb,0x528a,0x4a49,0x39e7,0x3186,0x2124,0x18c3,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x4228,0x31a6,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xad55,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdedb,0xc618,0x0861,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0x6b6d,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x4a49,0x4a69,0x39c7,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x630c,0x5aeb,0x52aa,0x528a,0x4228,0x39e7,0x3186,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0x528a,0x4208,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39e7,0x7bcf,0x8410,0x7bef,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x7bef,0x8410,0x7bef,0x4208,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x94b2,0xd69a,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0020,0x0000,0x4a69,0x5acb,0x4228,0x31a6,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x630c,0x632c,0x5aeb,0x52aa,0x4a69,0x4228,0x39c7,0x2965,0x18e3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x5aeb,0x4a69,0x39e7,0x2945,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4228,0xb5b6,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xdedb,0xce79,0x630c,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xd679,0xd679,0xce59,0xc638,0xbdf8,0xbdf7,0xbe17,0xc638,0xce79,0xd69a,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xd679,0xce79,0xc638,0xbe18,0xbdf7,0xbdf7,0xc638,0xce59,0xd69a,0xd679,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0020,0x0000,0x39c7,0x630c,0x4a69,0x39e7,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0x6b6d,0x630c,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2124,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x5acb,0x5acb,0x4228,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x8c51,0xc638,0xc638,0xb5b6,0xad55,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad55,0xb596,0xdedb,0xb5b6,0x0000,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xb5f7,0x9534,0x8430,0x7b4d,0x7acb,0x72aa,0x6aeb,0x634d,0x7410,0x9d14,0xc618,0xd69a,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xc638,0xa575,0x8c72,0x7bae,0x7b0c,0x72aa,0x6acb,0x632c,0x6bcf,0x8cb2,0xbdd7,0xce79,0xce7a,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x4a69,0x5acb,0x4228,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x738e,0x6b4d,0x630c,0x5acb,0x528a,0x4228,0x39c7,0x2945,0x18e3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3186,0x5aeb,0x4a69,0x39c7,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xd69a,0xb5b6,0x9492,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8410,0x8c51,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xc618,0x94d3,0x8aeb,0xb8e3,0xe000,0xf020,0xf124,0xf1c7,0xf249,0xe2aa,0xbacb,0x8269,0x42cb,0x94d3,0xce38,0xd67a,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xa575,0x83ae,0xa9a6,0xd800,0xf000,0xf0c3,0xf1a6,0xf228,0xea8a,0xcacb,0x9a8a,0x4a69,0x7410,0xbdd7,0xd679,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x4228,0x31a6,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0x738e,0x6b6d,0x632c,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x4a49,0x39e7,0x2965,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xd69a,0xb5b6,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0x94b2,0x7bcf,0x8410,0xc618,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xb596,0x7b4d,0xa800,0xe800,0xf800,0xf082,0xe8a2,0xd8a2,0xd0c3,0xd904,0xd9c7,0xf2cb,0xfbcf,0xdc10,0x728a,0x532c,0xbdb6,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x8c51,0x9145,0xd000,0xf800,0xf061,0xe8a2,0xe0a2,0xd8c3,0xd104,0xd986,0xea69,0xfb8e,0xec30,0xa34d,0x3a28,0x9cf3,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x52aa,0x73ae,0x632c,0x630c,0x5acb,0x4a69,0x4208,0x31a6,0x2945,0x18c3,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdedb,0xd69a,0xc638,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xad55,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xa534,0x71e7,0xb800,0xf020,0xf861,0xe820,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa800,0xb820,0xeb0c,0xfcd3,0xb3ef,0x3208,0xb575,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce79,0xce79,0xbdd7,0x7b6d,0x9000,0xe000,0xf882,0xe841,0xd820,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xb000,0xda48,0xfc71,0xdcb2,0x49c7,0x8c71,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x632c,0x6b6d,0x630c,0x5acb,0x528a,0x4228,0x39c7,0x2965,0x2104,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cd3,0x632c,0x528a,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd699,0xce59,0xce79,0xce59,0xce79,0xce59,0xa534,0x5145,0xb800,0xf8a2,0xf820,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb820,0xb041,0xa800,0x9800,0xc145,0xfcf3,0xc492,0x29e7,0xb5b6,0xce79,0xce59,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce79,0xce79,0xce79,0xbdd7,0x630b,0x9000,0xe882,0xf861,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc000,0xb820,0xb040,0xa820,0x9800,0xb000,0xfc0f,0xed55,0x5208,0x9492,0xce79,0xce59,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0x632c,0x6b4d,0x5aeb,0x528a,0x4a49,0x39e7,0x3186,0x2124,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a69,0x8410,0x52aa,0x630c,0xbdf7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce79,0xce79,0xce79,0xad75,0x41c7,0xa800,0xf8e3,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa882,0x9800,0xb000,0xfd34,0xb451,0x4aca,0xc638,0xce79,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce79,0xc618,0x738e,0x7000,0xe8c3,0xf881,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa861,0xa041,0xa000,0xf410,0xed75,0x31c7,0xad55,0xd69a,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b6d,0x10a2,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0020,0x0000,0x18c3,0x528a,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2124,0x18c3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x2104,0x31a6,0x39e7,0x8430,0xc638,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce59,0xce59,0xce79,0xc5f8,0x632c,0x7800,0xf0e3,0xf8a2,0xf881,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xb000,0xa800,0xa882,0x9800,0xb904,0xfd96,0x7b4d,0x8451,0xd679,0xce59,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce59,0x9492,0x3800,0xd882,0xf8c3,0xf882,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb000,0xa800,0xa820,0xa082,0xa000,0xfcd3,0xc4d3,0x428a,0xc638,0xce79,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xc618,0x8430,0x39c7,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x2965,0x4208,0x4228,0x4208,0x31a6,0x2945,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0841,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x7bcf,0xad75,0xce59,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xb596,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9492,0x94b2,0xa514,0xc618,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xbdf7,0xa534,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9492,0x9cd3,0xb596,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd699,0xce59,0xce59,0xce59,0x94b2,0x2800,0xd082,0xf904,0xf8c3,0xf8a2,0xf881,0xf820,0xf800,0xf800,0xe800,0xe800,0xe000,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xa0c3,0x9000,0xdb6d,0xe555,0x3228,0xbdd7,0xce79,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce79,0xb596,0x3a08,0xa000,0xf924,0xf8e3,0xf8a2,0xf882,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xa861,0x9800,0xc104,0xfd96,0x730c,0x94b2,0xd69a,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce59,0xb596,0x7bef,0x5acb,0x4a49,0x4228,0x4228,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x39e7,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x18c3,0x18c3,0x1082,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x4a49,0x2945,0x31a6,0x4228,0x4208,0x4208,0x4208,0x4208,0x4228,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4228,0x5acb,0x8c51,0xad55,0xb5b6,0xc638,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x8430,0x4208,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x3186,0x4a49,0x528a,0x630c,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad55,0x630c,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x39e7,0x528a,0x528a,0x8430,0xc638,0xce79,0xce59,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd67a,0xce59,0xce79,0xbdd7,0x52cb,0x8000,0xf944,0xf944,0xf904,0xf8c3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb000,0xa800,0xa800,0x9841,0xa000,0xf534,0x93ae,0x8471,0xd69a,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce38,0x8c51,0x3800,0xe104,0xf945,0xf904,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xa800,0xa0a2,0x9000,0xec10,0xccf3,0x4acb,0xce39,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xad75,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xa534,0xad55,0x8c71,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x7bef,0x5aeb,0x528a,0x9cf3,0xad55,0xa534,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xbdd7,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce59,0xce79,0xbdf7,0x6b6d,0x0000,0x0000,0x18c3,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2124,0x39c7,0x6b6d,0x7bcf,0x4a49,0xad75,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0x9cf3,0x2965,0x0000,0x0841,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2124,0x2965,0x528a,0x7bef,0x5aeb,0x7bcf,0xc638,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce59,0xa514,0x10c3,0xc061,0xf986,0xf965,0xf924,0xf903,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xf000,0xf000,0xe800,0xd800,0xd000,0xc800,0xb800,0xb000,0xa800,0xa082,0x9000,0xe3cf,0xccd2,0x530c,0xce59,0xce79,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xbdd7,0x52cb,0x8000,0xf986,0xf965,0xf924,0xf904,0xf8c3,0xf882,0xf861,0xf800,0xf800,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb000,0xa800,0xa841,0x9000,0xc1e7,0xf555,0x4a69,0xb596,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x73ae,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xad75,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x9492,0x7bef,0x3186,0xad75,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0x6b6d,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x1082,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0x8430,0x630c,0xc638,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xad55,0x3186,0x0000,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x9492,0x5acb,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xc638,0x8c30,0x3000,0xe144,0xf9c7,0xf986,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf000,0xf000,0xe800,0xd800,0xd000,0xc000,0xb800,0xb000,0xa841,0x9800,0xc228,0xecf3,0x528a,0xbdd7,0xce99,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xad55,0x2145,0xb082,0xf9c7,0xf986,0xf965,0xf924,0xf903,0xf8a3,0xf882,0xf820,0xf800,0xf800,0xf000,0xf000,0xe800,0xe000,0xd000,0xc800,0xb800,0xb000,0xa800,0x9820,0xa800,0xf4d3,0x936d,0x94b2,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4a49,0xc618,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa514,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xd69a,0xce79,0x39e7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xce79,0xa534,0x2104,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x8c71,0x5aeb,0xa534,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x738e,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x630c,0x8430,0x6b4d,0xce59,0xce79,0xce59,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce59,0xc618,0x738e,0x5000,0xf1a6,0xf9e7,0xf9a6,0xf986,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xf800,0xf000,0xf000,0xe000,0xd800,0xc800,0xc000,0xb800,0xa820,0xa000,0xb0c3,0xf4b2,0x62aa,0xad75,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0x9cd3,0x1000,0xc925,0xfa08,0xf9c6,0xf986,0xf945,0xf924,0xf8e3,0xf8a2,0xf861,0xf800,0xf800,0xf800,0xf800,0xf000,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xa061,0x9800,0xf410,0xbbcf,0x7410,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b6d,0xb5b6,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc638,0xce79,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xce79,0xce59,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0x73ae,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xce59,0x8430,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b4d,0x6b6d,0x8c71,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xb596,0x4a49,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0x8410,0x5aeb,0xbdf7,0xce79,0xce59,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce79,0xbdd7,0x5b0c,0x6800,0xf1e7,0xfa28,0xf9c7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf841,0xf800,0xf800,0xf800,0xf800,0xf000,0xe800,0xd800,0xd000,0xc000,0xb800,0xb000,0xa020,0xa800,0xec71,0x72aa,0xa534,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc638,0x8c71,0x2000,0xd986,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xb800,0xb000,0xa861,0x9800,0xf38e,0xc3ef,0x6bcf,0xd679,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x18e3,0xa514,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd69a,0xa534,0x0841,0x39e7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x0861,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xc638,0x7bef,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x52aa,0x5aeb,0x8c71,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xad75,0x39c7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x6b6d,0x5aeb,0xbdf7,0xce79,0xce59,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce79,0xbdd7,0x5aeb,0x6800,0xf228,0xfa49,0xfa07,0xf9c7,0xf986,0xf945,0xf904,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xc000,0xb800,0xa800,0xb000,0xec10,0x7a8a,0xa534,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc638,0x8c51,0x2000,0xd9a6,0xfa69,0xfa08,0xf9e7,0xf986,0xf945,0xf904,0xf8c3,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb041,0xa000,0xf36d,0xc3ae,0x6bcf,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xd69a,0xce59,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xc638,0x8c51,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0x4a69,0xa514,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xb596,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x52aa,0x6b6d,0xc638,0xce79,0xce59,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce79,0xbdf7,0x632c,0x5800,0xf208,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8c3,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xb800,0xebcf,0x7269,0xad75,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc639,0x9471,0x1000,0xc9a6,0xfa8a,0xfa28,0xfa08,0xf9c7,0xf986,0xf924,0xf8e3,0xf882,0xf841,0xf820,0xf800,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xb041,0xa800,0xf34d,0xc32c,0x7410,0xd679,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x10a2,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x1082,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18e3,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce59,0xa534,0x39c7,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x18c3,0x3186,0x632c,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x1082,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x2945,0x39e7,0x9cd3,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce59,0xc618,0x73ae,0x3800,0xe1e7,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf986,0xf945,0xf904,0xf8a2,0xf841,0xf820,0xf820,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc800,0xc020,0xb000,0xc925,0xf36d,0x628a,0xbdd7,0xd67a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0x9cd3,0x0000,0xb945,0xfa8a,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c2,0xf861,0xf841,0xf820,0xf800,0xf800,0xf000,0xe000,0xd800,0xd000,0xc800,0xc000,0xb820,0xb000,0xf34c,0xaaaa,0x8cb2,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2965,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xc618,0x8430,0x0000,0x0000,0x0861,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0000,0x0000,0x52aa,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad55,0x52aa,0x0000,0x0000,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0020,0x0000,0x18c3,0x8410,0xc618,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xc638,0x8c71,0x0000,0xc165,0xfaaa,0xfa69,0xfa49,0xfa08,0xf9c7,0xf986,0xf924,0xf8e3,0xf882,0xf861,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xc020,0xb800,0xe1e7,0xdacb,0x634d,0xc638,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xad55,0x31e7,0x9000,0xfa8a,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf986,0xf945,0xf8e3,0xf8a2,0xf861,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xc8a2,0xfb0c,0x7249,0xad75,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x10a2,0x4228,0x39e7,0x2945,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0x8c51,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x73ae,0xad75,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xc638,0xad55,0x632c,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x94b2,0xc618,0xce79,0xce59,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce9a,0xce59,0xce59,0xa534,0x29a6,0x8800,0xfa69,0xfa8a,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c3,0xf882,0xf861,0xf841,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc820,0xc000,0xf269,0xaa08,0x8492,0xd679,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xbdd7,0x6b4d,0x4000,0xea28,0xfaaa,0xfa69,0xfa49,0xfa08,0xf9c7,0xf985,0xf924,0xf8e3,0xf8a2,0xf861,0xf841,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc820,0xc000,0xe9a6,0xe269,0x634c,0xc638,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x18c3,0x52aa,0x4a49,0x39c7,0x2124,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xad75,0x94b2,0x8430,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8430,0x94b2,0xb596,0xc638,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xa514,0x8c51,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8c51,0xa514,0xbdf7,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce79,0xbdd7,0x736d,0x2000,0xd9c7,0xfaaa,0xfa69,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xe800,0xe000,0xd800,0xd800,0xc800,0xd8e3,0xf208,0x6a8a,0xb5d7,0xd679,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xc638,0x94b2,0x0041,0xa924,0xfa8a,0xfa6a,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe000,0xe000,0xd800,0xc800,0xd000,0xfa08,0xa1a6,0x8cd3,0xd679,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0861,0x52aa,0x52aa,0x4208,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce59,0xce79,0xce58,0x9cf3,0x2945,0x8000,0xfa49,0xfa8a,0xfa49,0xfa28,0xfa08,0xf9c7,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xf965,0xb924,0x7c92,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce59,0xb5b6,0x62eb,0x3800,0xe208,0xfaaa,0xfa49,0xfa49,0xfa08,0xf9c7,0xf986,0xf945,0xf903,0xf8c3,0xf882,0xf841,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xf124,0xe104,0x632c,0xbe18,0xce79,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0020,0x0000,0x4208,0x630c,0x4a69,0x39c7,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd67a,0xce59,0xce59,0xce79,0xbdf7,0x83ef,0x0000,0xa8e4,0xfa69,0xfa89,0xfa48,0xfa08,0xf9e7,0xf9a6,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf000,0xe800,0xe000,0xd820,0xf8c3,0xe000,0x6b6d,0xbe18,0xce79,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce39,0x9cf3,0x3165,0x7000,0xf228,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf882,0xf841,0xf800,0xf800,0xf000,0xe000,0xd800,0xf0c2,0xf800,0x89e7,0xa555,0xd679,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x4a69,0x52aa,0x4208,0x2965,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce9a,0xce59,0xce79,0xce79,0xce59,0xb5b6,0x6b2c,0x0000,0xb104,0xfa49,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf800,0xf800,0xf000,0xe841,0xf882,0xe800,0x82cb,0xadb6,0xd679,0xce59,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xc618,0x8c51,0x1000,0x7800,0xea08,0xfa69,0xfa28,0xfa07,0xf9c7,0xf986,0xf945,0xf903,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe820,0xf082,0xf800,0xa945,0x8cd3,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x39e7,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xb596,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x6b2c,0x0000,0x9000,0xe9c7,0xfa28,0xfa08,0xf9c7,0xf986,0xf945,0xf904,0xf8c3,0xf881,0xf840,0xf841,0xf882,0xe800,0xd000,0x830c,0xad96,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xbdf7,0x8c30,0x18a2,0x6000,0xd1a6,0xfa28,0xfa08,0xf9e7,0xf9a6,0xf965,0xf924,0xf8c3,0xf882,0xf841,0xf820,0xf882,0xf020,0xe000,0x99e7,0x8cd3,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xbdf7,0x8430,0x8410,0xc638,0xc638,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xb596,0x83cf,0x1904,0x4800,0xa8a2,0xe186,0xf9c7,0xf9a6,0xf986,0xf945,0xf904,0xf8e3,0xf082,0xe000,0xc000,0x9986,0x8410,0xb5d7,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xbdf7,0x94b2,0x4a49,0x0000,0x9000,0xd165,0xf1a7,0xf9a7,0xf986,0xf945,0xf924,0xf8e3,0xf8a2,0xe800,0xc800,0xa800,0x834d,0xa555,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3186,0x9492,0x7bef,0x2945,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd69a,0xad75,0x9492,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xa4f3,0x6b4d,0x10e3,0x3800,0x7000,0x9800,0xa800,0xb000,0xa800,0x9800,0x8000,0x79a6,0x83cf,0xa575,0xc638,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xc638,0xad75,0x83ef,0x31e7,0x1000,0x6000,0x9000,0xa800,0xb000,0xb000,0xa000,0x8800,0x7882,0x832c,0x9cf3,0xbe17,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x73ae,0x630c,0x4228,0xad75,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xc638,0xd6ba,0xd6ba,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce59,0xbdd7,0xce79,0xc618,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xad34,0x8c51,0x6b6d,0x52cb,0x4a8a,0x4a8a,0x5b0c,0x7bcf,0x9cd3,0xb5b7,0xc659,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xc618,0xb596,0x94b2,0x73ae,0x5b0c,0x4a8a,0x4a89,0x52cb,0x6b6d,0x8c71,0xad75,0xc618,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xad75,0x52aa,0x0861,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0020,0x0861,0x31a6,0x73ae,0xbdd7,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x738e,0xb5b6,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xdedb,0xa534,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xc5f7,0xbdf7,0xbdf7,0xc638,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xc618,0xbdf7,0xbdf7,0xc618,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xbdf7,0x7bcf,0x31a6,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a49,0x7bef,0xad55,0xc638,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x7bef,0xa534,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xbdd7,0xad55,0x39c7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce59,0xb596,0x8410,0x6b4d,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x6b4d,0x9492,0xb5b6,0xbdf7,0xc638,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x3186,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0xad75,0xd6ba,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xce79,0x39e7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x8410,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x8c51,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce59,0xc618,0xbdd7,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x5acb,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x8c71,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0xa534,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xb5b6,0x10a2,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39c7,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x6b6d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x630c,0x6b6d,0x6b4d,0x6b6d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x6b4d,0x18e3,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x632c,0xce59,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0x632c,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x6b6d,0xad55,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0x7bcf,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x10a2,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0882,0x0082,0x0082,0x0082,0x0082,0x0082,0x00a2,0x0082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0082,0x0082,0x0082,0x0082,0x0082,0x0082,0x00a2,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x9020,0xb841,0xb841,0xb841,0xb841,0xb841,0xb861,0x90a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x3800,0xa000,0xb841,0xb841,0xb841,0xb841,0xb861,0x98a2,0x2841,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0841,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0000,0x0841,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b6d,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x632c,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb800,0xc820,0x8800,0x8800,0x8800,0x8800,0x9800,0xd061,0x90c3,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xa800,0xd000,0x9000,0x8800,0x8800,0x8800,0x9000,0xd040,0xa8c3,0x0020,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x8c71,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb000,0xb0a2,0x0041,0x0020,0x0020,0x0020,0x2000,0xc000,0xa882,0x0020,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc000,0xa8a2,0x0041,0x0020,0x0020,0x0020,0x0020,0xb000,0xc082,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb000,0xd020,0xc041,0xc820,0xc841,0xc041,0xc800,0xd021,0x6862,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xc820,0xc041,0xc040,0xc040,0xc041,0xc020,0xd000,0xb882,0x1041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb000,0xb841,0x6800,0x7000,0x7000,0x6800,0x7000,0xc820,0x98c3,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xb841,0x7000,0x7800,0x7800,0x7800,0x7000,0xb800,0xb882,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xb8a2,0x3061,0x4820,0x4841,0x4041,0x6000,0xd000,0xa881,0x0000,0x1800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc000,0xb0a2,0x0020,0x0000,0x0000,0x0000,0x0000,0xb000,0xc0a2,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce59,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xa000,0xc800,0xc820,0xc820,0xc820,0xc820,0xc800,0xb000,0x4000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb000,0xa082,0x0000,0x1800,0x1800,0x1800,0x0000,0xa800,0xb061,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd6ba,0x8c51,0x0000,0x2124,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x0020,0x2104,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0861,0x0861,0x1082,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1061,0x0062,0x3082,0x5061,0x5061,0x5061,0x5061,0x5061,0x4861,0x0061,0x0061,0x1061,0x0862,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1061,0x0061,0x3861,0x3061,0x0062,0x1061,0x0861,0x1061,0x0061,0x3061,0x3861,0x0061,0x1062,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x10a2,0x1082,0x0000,0xad75,0xd69a,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce59,0xd69a,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xce59,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce59,0xd6ba,0xbdf7,0x73ae,0x5aeb,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x632c,0xa514,0xad75,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad75,0x9cf3,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x62ec,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630b,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5b0c,0x630c,0x62ec,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5b0c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x632c,0x9cd3,0xce59,0xce79,0xce59,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xd6ba,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0xce59,0xce79,0xce59,0xd69a,0xc618,
|
||||
0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xc618,
|
||||
0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0xbdd7,
|
||||
0x8c71,0xce59,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0x738e,
|
||||
0x0000,0x632c,0x8c51,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c51,0x5acb,0x0000};
|
||||
63
MCUME_teensy41/teensynofrendo/map000.c
Normal file
63
MCUME_teensy41/teensynofrendo/map000.c
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map0.c
|
||||
**
|
||||
** mapper 0 interface
|
||||
** $Id: map000.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
const mapintf_t map0_intf =
|
||||
{
|
||||
0, /* mapper number */
|
||||
"None", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
NULL, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map000.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
242
MCUME_teensy41/teensynofrendo/map001.c
Normal file
242
MCUME_teensy41/teensynofrendo/map001.c
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map1.c
|
||||
**
|
||||
** mapper 1 interface
|
||||
** $Id: map001.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* TODO: WRAM enable ala Mark Knibbs:
|
||||
==================================
|
||||
The SNROM board uses 8K CHR-RAM. The CHR-RAM is paged (i.e. it can be split
|
||||
into two 4Kbyte pages).
|
||||
|
||||
The CRA16 line of the MMC1 is connected to the /CS1 pin of the WRAM. THIS MEANS
|
||||
THAT THE WRAM CAN BE ENABLED OR DISABLED ACCORDING TO THE STATE OF THE CRA16
|
||||
LINE. The CRA16 line corresponds to bit 4 of MMC1 registers 1 & 2.
|
||||
|
||||
The WRAM is enabled when the CRA16 line is low, and disabled when CRA16 is
|
||||
high. This has implications when CHR page size is 4K, if the two page numbers
|
||||
set have different CRA16 states (e.g. reg 1 bit 4 = 0, reg 2 bit 4 = 1). Then
|
||||
the WRAM will be enabled and disabled depending on what CHR address is being
|
||||
accessed.
|
||||
|
||||
When CHR page size is 8K, bit 4 of MMC1 register 1 (and not register 2, because
|
||||
page size is 8K) controls whether the WRAM is enabled or not. It must be low
|
||||
to be enabled. When the WRAM is disabled, reading from and writing to it will
|
||||
not be possible.
|
||||
*/
|
||||
|
||||
/* TODO: roll this into something... */
|
||||
static int bitcount = 0;
|
||||
static uint8 latch = 0;
|
||||
static uint8 regs[4];
|
||||
static int bank_select;
|
||||
static uint8 lastreg;
|
||||
|
||||
static void map1_write(uint32 address, uint8 value)
|
||||
{
|
||||
int regnum = (address >> 13) - 4;
|
||||
|
||||
if (value & 0x80)
|
||||
{
|
||||
regs[0] |= 0x0C;
|
||||
bitcount = 0;
|
||||
latch = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (lastreg != regnum)
|
||||
{
|
||||
bitcount = 0;
|
||||
latch = 0;
|
||||
lastreg = regnum;
|
||||
}
|
||||
//lastreg = regnum;
|
||||
|
||||
latch |= ((value & 1) << bitcount++);
|
||||
|
||||
/* 5 bit registers */
|
||||
if (5 != bitcount)
|
||||
return;
|
||||
|
||||
regs[regnum] = latch;
|
||||
value = latch;
|
||||
bitcount = 0;
|
||||
latch = 0;
|
||||
|
||||
switch (regnum)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (0 == (value & 2))
|
||||
{
|
||||
int mirror = value & 1;
|
||||
ppu_mirror(mirror, mirror, mirror, mirror);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1);
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (regs[0] & 0x10)
|
||||
mmc_bankvrom(4, 0x0000, value);
|
||||
else
|
||||
mmc_bankvrom(8, 0x0000, value >> 1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (regs[0] & 0x10)
|
||||
mmc_bankvrom(4, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (mmc_getinfo()->rom_banks == 0x20)
|
||||
{
|
||||
bank_select = (regs[1] & 0x10) ? 0 : 0x10;
|
||||
}
|
||||
else if (mmc_getinfo()->rom_banks == 0x40)
|
||||
{
|
||||
if (regs[0] & 0x10)
|
||||
bank_select = (regs[1] & 0x10) | ((regs[2] & 0x10) << 1);
|
||||
else
|
||||
bank_select = (regs[1] & 0x10) << 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
bank_select = 0;
|
||||
}
|
||||
|
||||
if (0 == (regs[0] & 0x08))
|
||||
mmc_bankrom(32, 0x8000, ((regs[3] >> 1) + (bank_select >> 1)));
|
||||
else if (regs[0] & 0x04)
|
||||
mmc_bankrom(16, 0x8000, ((regs[3] & 0xF) + bank_select));
|
||||
else
|
||||
mmc_bankrom(16, 0xC000, ((regs[3] & 0xF) + bank_select));
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map1_init(void)
|
||||
{
|
||||
bitcount = 0;
|
||||
latch = 0;
|
||||
|
||||
memset(regs, 0, sizeof(regs));
|
||||
|
||||
if (mmc_getinfo()->rom_banks == 0x20)
|
||||
mmc_bankrom(16, 0xC000, 0x0F);
|
||||
|
||||
map1_write(0x8000, 0x80);
|
||||
}
|
||||
|
||||
static void map1_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper1.registers[0] = regs[0];
|
||||
state->extraData.mapper1.registers[1] = regs[1];
|
||||
state->extraData.mapper1.registers[2] = regs[2];
|
||||
state->extraData.mapper1.registers[3] = regs[3];
|
||||
state->extraData.mapper1.latch = latch;
|
||||
state->extraData.mapper1.numberOfBits = bitcount;
|
||||
}
|
||||
|
||||
|
||||
static void map1_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
regs[1] = state->extraData.mapper1.registers[0];
|
||||
regs[1] = state->extraData.mapper1.registers[1];
|
||||
regs[2] = state->extraData.mapper1.registers[2];
|
||||
regs[3] = state->extraData.mapper1.registers[3];
|
||||
latch = state->extraData.mapper1.latch;
|
||||
bitcount = state->extraData.mapper1.numberOfBits;
|
||||
}
|
||||
|
||||
static map_memwrite map1_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map1_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map1_intf =
|
||||
{
|
||||
1, /* mapper number */
|
||||
"MMC1", /* mapper name */
|
||||
map1_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
map1_getstate, /* get state (snss) */
|
||||
map1_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map1_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map001.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.8 2000/10/22 19:46:50 matt
|
||||
** mirroring bugfix
|
||||
**
|
||||
** Revision 1.7 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.6 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
86
MCUME_teensy41/teensynofrendo/map002.c
Normal file
86
MCUME_teensy41/teensynofrendo/map002.c
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map2.c
|
||||
**
|
||||
** mapper 2 interface
|
||||
** $Id: map002.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 2: UNROM */
|
||||
static void map2_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(16, 0x8000, value);
|
||||
}
|
||||
|
||||
static const map_memwrite map2_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map2_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map2_intf =
|
||||
{
|
||||
2, /* mapper number */
|
||||
"UNROM", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map2_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map002.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
85
MCUME_teensy41/teensynofrendo/map003.c
Normal file
85
MCUME_teensy41/teensynofrendo/map003.c
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map3.c
|
||||
**
|
||||
** mapper 3 interface
|
||||
** $Id: map003.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 3: CNROM */
|
||||
static void map3_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankvrom(8, 0x0000, value);
|
||||
}
|
||||
|
||||
static const map_memwrite map3_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map3_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map3_intf =
|
||||
{
|
||||
3, /* mapper number */
|
||||
"CNROM", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map3_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map003.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
269
MCUME_teensy41/teensynofrendo/map004.c
Normal file
269
MCUME_teensy41/teensynofrendo/map004.c
Normal file
|
|
@ -0,0 +1,269 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map4.c
|
||||
**
|
||||
** mapper 4 interface
|
||||
** $Id: map004.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, latch;
|
||||
bool enabled, reset;
|
||||
} irq;
|
||||
|
||||
static uint8 reg;
|
||||
static uint8 command;
|
||||
static uint16 vrombase;
|
||||
|
||||
/* mapper 4: MMC3 */
|
||||
static void map4_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address & 0xE001)
|
||||
{
|
||||
case 0x8000:
|
||||
command = value;
|
||||
vrombase = (command & 0x80) ? 0x1000 : 0x0000;
|
||||
|
||||
if (reg != (value & 0x40))
|
||||
{
|
||||
if (value & 0x40)
|
||||
mmc_bankrom(8, 0x8000, (mmc_getinfo()->rom_banks * 2) - 2);
|
||||
else
|
||||
mmc_bankrom(8, 0xC000, (mmc_getinfo()->rom_banks * 2) - 2);
|
||||
}
|
||||
reg = value & 0x40;
|
||||
break;
|
||||
|
||||
case 0x8001:
|
||||
switch (command & 0x07)
|
||||
{
|
||||
case 0:
|
||||
value &= 0xFE;
|
||||
mmc_bankvrom(1, vrombase ^ 0x0000, value);
|
||||
mmc_bankvrom(1, vrombase ^ 0x0400, value + 1);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
value &= 0xFE;
|
||||
mmc_bankvrom(1, vrombase ^ 0x0800, value);
|
||||
mmc_bankvrom(1, vrombase ^ 0x0C00, value + 1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
mmc_bankvrom(1, vrombase ^ 0x1000, value);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
mmc_bankvrom(1, vrombase ^ 0x1400, value);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
mmc_bankvrom(1, vrombase ^ 0x1800, value);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
mmc_bankvrom(1, vrombase ^ 0x1C00, value);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
mmc_bankrom(8, (command & 0x40) ? 0xC000 : 0x8000, value);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xA000:
|
||||
/* four screen mirroring crap */
|
||||
if (0 == (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN))
|
||||
{
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xA001:
|
||||
/* Save RAM enable / disable */
|
||||
/* Messes up Startropics I/II if implemented -- bah */
|
||||
break;
|
||||
|
||||
case 0xC000:
|
||||
irq.latch = value;
|
||||
// if (irq.reset)
|
||||
// irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
case 0xC001:
|
||||
irq.reset = true;
|
||||
irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
case 0xE000:
|
||||
irq.enabled = false;
|
||||
// if (irq.reset)
|
||||
// irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
case 0xE001:
|
||||
irq.enabled = true;
|
||||
// if (irq.reset)
|
||||
// irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (true == irq.reset)
|
||||
irq.counter = irq.latch;
|
||||
}
|
||||
|
||||
static void map4_hblank(int vblank)
|
||||
{
|
||||
if (vblank)
|
||||
return;
|
||||
|
||||
if (ppu_enabled())
|
||||
{
|
||||
if (irq.counter >= 0)
|
||||
{
|
||||
irq.reset = false;
|
||||
irq.counter--;
|
||||
|
||||
if (irq.counter < 0)
|
||||
{
|
||||
if (irq.enabled)
|
||||
{
|
||||
irq.reset = true;
|
||||
nes_irq();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map4_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper4.irqCounter = irq.counter;
|
||||
state->extraData.mapper4.irqLatchCounter = irq.latch;
|
||||
state->extraData.mapper4.irqCounterEnabled = irq.enabled;
|
||||
state->extraData.mapper4.last8000Write = command;
|
||||
}
|
||||
|
||||
static void map4_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = state->extraData.mapper4.irqCounter;
|
||||
irq.latch = state->extraData.mapper4.irqLatchCounter;
|
||||
irq.enabled = state->extraData.mapper4.irqCounterEnabled;
|
||||
command = state->extraData.mapper4.last8000Write;
|
||||
}
|
||||
|
||||
static void map4_init(void)
|
||||
{
|
||||
irq.counter = irq.latch = 0;
|
||||
irq.enabled = irq.reset = false;
|
||||
reg = command = 0;
|
||||
vrombase = 0x0000;
|
||||
}
|
||||
|
||||
static const map_memwrite map4_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map4_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map4_intf =
|
||||
{
|
||||
4, /* mapper number */
|
||||
"MMC3", /* mapper name */
|
||||
map4_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map4_hblank, /* hblank callback */
|
||||
map4_getstate, /* get state (snss) */
|
||||
map4_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map4_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map004.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/26 15:40:49 matt
|
||||
** hey, it actually works now
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.12 2000/10/23 15:53:27 matt
|
||||
** suppressed warnings
|
||||
**
|
||||
** Revision 1.11 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.10 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.9 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.8 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.7 2000/10/08 18:05:44 matt
|
||||
** kept old version around, just in case....
|
||||
**
|
||||
** Revision 1.6 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.5 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.4 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.3 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.2 2000/07/05 05:04:39 matt
|
||||
** minor modifications
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
326
MCUME_teensy41/teensynofrendo/map005.c
Executable file
326
MCUME_teensy41/teensynofrendo/map005.c
Executable file
|
|
@ -0,0 +1,326 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map5.c
|
||||
**
|
||||
** mapper 5 interface
|
||||
** $Id: map005.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
#include "mmc5_snd.h"
|
||||
|
||||
/* TODO: there's lots of info about this mapper now;
|
||||
** let's implement it correctly/completely
|
||||
*/
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, enabled;
|
||||
int reset, latch;
|
||||
} irq;
|
||||
|
||||
/* MMC5 - Castlevania III, etc */
|
||||
static void map5_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.counter == nes_getcontextptr()->scanline)
|
||||
{
|
||||
if (true == irq.enabled)
|
||||
{
|
||||
nes_irq();
|
||||
irq.reset = true;
|
||||
}
|
||||
//else
|
||||
// irq.reset = false;
|
||||
irq.counter = irq.latch;
|
||||
}
|
||||
}
|
||||
|
||||
static void map5_write(uint32 address, uint8 value)
|
||||
{
|
||||
static int page_size = 8;
|
||||
|
||||
/* ex-ram memory-- bleh! */
|
||||
if (address >= 0x5C00 && address <= 0x5FFF)
|
||||
return;
|
||||
|
||||
switch (address)
|
||||
{
|
||||
case 0x5100:
|
||||
/* PRG page size setting */
|
||||
/* 0:32k 1:16k 2,3:8k */
|
||||
switch (value & 3)
|
||||
{
|
||||
case 0:
|
||||
page_size = 32;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
page_size = 16;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 3:
|
||||
page_size = 8;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x5101:
|
||||
/* CHR page size setting */
|
||||
/* 0:8k 1:4k 2:2k 3:1k */
|
||||
break;
|
||||
|
||||
case 0x5104:
|
||||
/* GFX mode setting */
|
||||
/*
|
||||
00:split mode
|
||||
01:split & exgraffix
|
||||
10:ex-ram
|
||||
11:exram + write protect
|
||||
*/
|
||||
break;
|
||||
|
||||
case 0x5105:
|
||||
/* TODO: exram needs to fill in nametables 2-3 */
|
||||
ppu_mirror(value & 3, (value >> 2) & 3, (value >> 4) & 3, value >> 6);
|
||||
break;
|
||||
|
||||
case 0x5106:
|
||||
case 0x5107:
|
||||
/* ex-ram fill mode stuff */
|
||||
break;
|
||||
|
||||
case 0x5113:
|
||||
/* ram page for $6000-7FFF? bit 2*/
|
||||
break;
|
||||
|
||||
case 0x5114:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
//if (page_size == 8)
|
||||
// mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x5115:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
mmc_bankrom(8, 0xA000, value + 1);
|
||||
//if (page_size == 8)
|
||||
// mmc_bankrom(8, 0xA000, value);
|
||||
//else if (page_size == 16)
|
||||
// mmc_bankrom(16, 0x8000, value >> 1);
|
||||
//mmc_bankrom(16, 0x8000, value & 0xFE);
|
||||
break;
|
||||
|
||||
case 0x5116:
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
//if (page_size == 8)
|
||||
// mmc_bankrom(8, 0xC000, value);
|
||||
break;
|
||||
|
||||
case 0x5117:
|
||||
//if (page_size == 8)
|
||||
// mmc_bankrom(8, 0xE000, value);
|
||||
//else if (page_size == 16)
|
||||
// mmc_bankrom(16, 0xC000, value >> 1);
|
||||
//mmc_bankrom(16, 0xC000, value & 0xFE);
|
||||
//else if (page_size == 32)
|
||||
// mmc_bankrom(32, 0x8000, value >> 2);
|
||||
//mmc_bankrom(32, 0x8000, value & 0xFC);
|
||||
break;
|
||||
|
||||
case 0x5120:
|
||||
mmc_bankvrom(1, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 0x5121:
|
||||
mmc_bankvrom(1, 0x0400, value);
|
||||
break;
|
||||
|
||||
case 0x5122:
|
||||
mmc_bankvrom(1, 0x0800, value);
|
||||
break;
|
||||
|
||||
case 0x5123:
|
||||
mmc_bankvrom(1, 0x0C00, value);
|
||||
break;
|
||||
|
||||
case 0x5124:
|
||||
case 0x5125:
|
||||
case 0x5126:
|
||||
case 0x5127:
|
||||
/* more VROM shit? */
|
||||
break;
|
||||
|
||||
case 0x5128:
|
||||
mmc_bankvrom(1, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 0x5129:
|
||||
mmc_bankvrom(1, 0x1400, value);
|
||||
break;
|
||||
|
||||
case 0x512A:
|
||||
mmc_bankvrom(1, 0x1800, value);
|
||||
break;
|
||||
|
||||
case 0x512B:
|
||||
mmc_bankvrom(1, 0x1C00, value);
|
||||
break;
|
||||
|
||||
case 0x5203:
|
||||
irq.counter = value;
|
||||
irq.latch = value;
|
||||
// irq.reset = false;
|
||||
break;
|
||||
|
||||
case 0x5204:
|
||||
irq.enabled = (value & 0x80) ? true : false;
|
||||
// irq.reset = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("unknown mmc5 write: $%02X to $%04X\n", value, address);
|
||||
#endif /* NOFRENDO_DEBUG */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static uint8 map5_read(uint32 address)
|
||||
{
|
||||
/* Castlevania 3 IRQ counter */
|
||||
if (address == 0x5204)
|
||||
{
|
||||
/* if reset == 1, we've hit scanline */
|
||||
return (irq.reset ? 0x40 : 0x00);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("invalid MMC5 read: $%04X", address);
|
||||
#endif
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
static void map5_init(void)
|
||||
{
|
||||
mmc_bankrom(8, 0x8000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xA000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xC000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xE000, MMC_LASTBANK);
|
||||
|
||||
irq.counter = irq.enabled = 0;
|
||||
irq.reset = irq.latch = 0;
|
||||
}
|
||||
|
||||
/* incomplete SNSS definition */
|
||||
static void map5_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper5.dummy = 0;
|
||||
}
|
||||
|
||||
static void map5_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
UNUSED(state);
|
||||
}
|
||||
|
||||
static map_memwrite map5_memwrite[] =
|
||||
{
|
||||
/* $5000 - $5015 handled by sound */
|
||||
{ 0x5016, 0x5FFF, map5_write },
|
||||
{ 0x8000, 0xFFFF, map5_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static map_memread map5_memread[] =
|
||||
{
|
||||
{ 0x5204, 0x5204, map5_read },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
mapintf_t map5_intf =
|
||||
{
|
||||
5, /* mapper number */
|
||||
"MMC5", /* mapper name */
|
||||
map5_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map5_hblank, /* hblank callback */
|
||||
map5_getstate, /* get state (snss) */
|
||||
map5_setstate, /* set state (snss) */
|
||||
map5_memread, /* memory read structure */
|
||||
map5_memwrite, /* memory write structure */
|
||||
&mmc5_ext /* external sound device */
|
||||
};
|
||||
/*
|
||||
** $Log: map005.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/25 20:32:33 matt
|
||||
** scanline interface change
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.11 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.10 2000/10/21 19:33:37 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.9 2000/10/17 03:23:16 matt
|
||||
** added mmc5 sound interface
|
||||
**
|
||||
** Revision 1.8 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.7 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.6 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.5 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.4 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.3 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.2 2000/07/05 05:04:51 matt
|
||||
** fixed h-blank callback
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
99
MCUME_teensy41/teensynofrendo/map007.c
Normal file
99
MCUME_teensy41/teensynofrendo/map007.c
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map7.c
|
||||
**
|
||||
** mapper 7 interface
|
||||
** $Id: map007.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "log.h"
|
||||
|
||||
/* mapper 7: AOROM */
|
||||
static void map7_write(uint32 address, uint8 value)
|
||||
{
|
||||
int mirror;
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(32, 0x8000, value);
|
||||
mirror = (value & 0x10) >> 4;
|
||||
ppu_mirror(mirror, mirror, mirror, mirror);
|
||||
}
|
||||
|
||||
static void map7_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, 0);
|
||||
}
|
||||
|
||||
static const map_memwrite map7_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map7_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map7_intf =
|
||||
{
|
||||
7, /* mapper number */
|
||||
"AOROM", /* mapper name */
|
||||
map7_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map7_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map007.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
94
MCUME_teensy41/teensynofrendo/map008.c
Normal file
94
MCUME_teensy41/teensynofrendo/map008.c
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map8.c
|
||||
**
|
||||
** mapper 8 interface
|
||||
** $Id: map008.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 8: FFE F3xxx -- what the hell uses this? */
|
||||
static void map8_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(16, 0x8000, value >> 3);
|
||||
mmc_bankvrom(8, 0x0000, value & 7);
|
||||
}
|
||||
|
||||
static void map8_init(void)
|
||||
{
|
||||
mmc_bankrom(16, 0x8000, 0);
|
||||
mmc_bankrom(16, 0xC000, 1);
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
}
|
||||
|
||||
static const map_memwrite map8_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map8_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map8_intf =
|
||||
{
|
||||
8, /* mapper number */
|
||||
"FFE F3xxx", /* mapper name */
|
||||
map8_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map8_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map008.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:32 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:47 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
199
MCUME_teensy41/teensynofrendo/map009.c
Normal file
199
MCUME_teensy41/teensynofrendo/map009.c
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map9.c
|
||||
**
|
||||
** mapper 9 interface
|
||||
** $Id: map009.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "libsnss.h"
|
||||
|
||||
static uint8 latch[2];
|
||||
static uint8 regs[4];
|
||||
|
||||
/* Used when tile $FD/$FE is accessed */
|
||||
static void mmc9_latchfunc(uint32 address, uint8 value)
|
||||
{
|
||||
if (0xFD == value || 0xFE == value)
|
||||
{
|
||||
int reg;
|
||||
|
||||
if (address)
|
||||
{
|
||||
latch[1] = value;
|
||||
reg = 2 + (value - 0xFD);
|
||||
}
|
||||
else
|
||||
{
|
||||
latch[0] = value;
|
||||
reg = value - 0xFD;
|
||||
}
|
||||
|
||||
mmc_bankvrom(4, address, regs[reg]);
|
||||
}
|
||||
}
|
||||
|
||||
/* mapper 9: MMC2 */
|
||||
/* MMC2: Punch-Out! */
|
||||
static void map9_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch ((address & 0xF000) >> 12)
|
||||
{
|
||||
case 0xA:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0xB:
|
||||
regs[0] = value;
|
||||
if (0xFD == latch[0])
|
||||
mmc_bankvrom(4, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 0xC:
|
||||
regs[1] = value;
|
||||
if (0xFE == latch[0])
|
||||
mmc_bankvrom(4, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 0xD:
|
||||
regs[2] = value;
|
||||
if (0xFD == latch[1])
|
||||
mmc_bankvrom(4, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 0xE:
|
||||
regs[3] = value;
|
||||
if (0xFE == latch[1])
|
||||
mmc_bankvrom(4, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 0xF:
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map9_init(void)
|
||||
{
|
||||
memset(regs, 0, sizeof(regs));
|
||||
|
||||
mmc_bankrom(8, 0x8000, 0);
|
||||
mmc_bankrom(8, 0xA000, (mmc_getinfo()->rom_banks * 2) - 3);
|
||||
mmc_bankrom(8, 0xC000, (mmc_getinfo()->rom_banks * 2) - 2);
|
||||
mmc_bankrom(8, 0xE000, (mmc_getinfo()->rom_banks * 2) - 1);
|
||||
|
||||
latch[0] = 0xFE;
|
||||
latch[1] = 0xFE;
|
||||
|
||||
ppu_setlatchfunc(mmc9_latchfunc);
|
||||
}
|
||||
|
||||
static void map9_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper9.latch[0] = latch[0];
|
||||
state->extraData.mapper9.latch[1] = latch[1];
|
||||
state->extraData.mapper9.lastB000Write = regs[0];
|
||||
state->extraData.mapper9.lastC000Write = regs[1];
|
||||
state->extraData.mapper9.lastD000Write = regs[2];
|
||||
state->extraData.mapper9.lastE000Write = regs[3];
|
||||
}
|
||||
|
||||
static void map9_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
latch[0] = state->extraData.mapper9.latch[0];
|
||||
latch[1] = state->extraData.mapper9.latch[1];
|
||||
regs[0] = state->extraData.mapper9.lastB000Write;
|
||||
regs[1] = state->extraData.mapper9.lastC000Write;
|
||||
regs[2] = state->extraData.mapper9.lastD000Write;
|
||||
regs[3] = state->extraData.mapper9.lastE000Write;
|
||||
}
|
||||
|
||||
static map_memwrite map9_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map9_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map9_intf =
|
||||
{
|
||||
9, /* mapper number */
|
||||
"MMC2", /* mapper name */
|
||||
map9_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
map9_getstate, /* get state (snss) */
|
||||
map9_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map9_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map009.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.9 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.8 2000/10/22 15:03:14 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.7 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.6 2000/07/17 05:11:35 matt
|
||||
** minor update from making PPU code less filthy
|
||||
**
|
||||
** Revision 1.5 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.4 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.3 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.2 2000/07/05 22:50:33 matt
|
||||
** fixed punchout -- works 100% now
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
94
MCUME_teensy41/teensynofrendo/map011.c
Normal file
94
MCUME_teensy41/teensynofrendo/map011.c
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map11.c
|
||||
**
|
||||
** mapper 11 interface
|
||||
** $Id: map011.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
|
||||
/* mapper 11: Color Dreams, Wisdom Tree */
|
||||
static void map11_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(32, 0x8000, value & 0x0F);
|
||||
mmc_bankvrom(8, 0x0000, value >> 4);
|
||||
}
|
||||
|
||||
static void map11_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, 0);
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
}
|
||||
|
||||
static const map_memwrite map11_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map11_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map11_intf =
|
||||
{
|
||||
11, /* mapper number */
|
||||
"Color Dreams", /* mapper name */
|
||||
map11_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map11_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map011.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
144
MCUME_teensy41/teensynofrendo/map015.c
Normal file
144
MCUME_teensy41/teensynofrendo/map015.c
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map15.c
|
||||
**
|
||||
** mapper 15 interface
|
||||
** $Id: map015.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* mapper 15: Contra 100-in-1 */
|
||||
static void map15_write(uint32 address, uint8 value)
|
||||
{
|
||||
int bank = value & 0x3F;
|
||||
uint8 swap = (value & 0x80) >> 7;
|
||||
|
||||
switch (address & 0x3)
|
||||
{
|
||||
case 0:
|
||||
mmc_bankrom(8, 0x8000, (bank << 1) + swap);
|
||||
mmc_bankrom(8, 0xA000, (bank << 1) + (swap ^ 1));
|
||||
mmc_bankrom(8, 0xC000, ((bank + 1) << 1) + swap);
|
||||
mmc_bankrom(8, 0xE000, ((bank + 1) << 1) + (swap ^ 1));
|
||||
|
||||
if (value & 0x40)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
mmc_bankrom(8, 0xC000, (bank << 1) + swap);
|
||||
mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (swap)
|
||||
{
|
||||
mmc_bankrom(8, 0x8000, (bank << 1) + 1);
|
||||
mmc_bankrom(8, 0xA000, (bank << 1) + 1);
|
||||
mmc_bankrom(8, 0xC000, (bank << 1) + 1);
|
||||
mmc_bankrom(8, 0xE000, (bank << 1) + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
mmc_bankrom(8, 0x8000, (bank << 1));
|
||||
mmc_bankrom(8, 0xA000, (bank << 1));
|
||||
mmc_bankrom(8, 0xC000, (bank << 1));
|
||||
mmc_bankrom(8, 0xE000, (bank << 1));
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
mmc_bankrom(8, 0xC000, (bank << 1) + swap);
|
||||
mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1));
|
||||
|
||||
if (value & 0x40)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map15_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, 0);
|
||||
}
|
||||
|
||||
static const map_memwrite map15_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map15_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map15_intf =
|
||||
{
|
||||
15, /* mapper number */
|
||||
"Contra 100-in-1", /* mapper name */
|
||||
map15_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map15_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map015.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
192
MCUME_teensy41/teensynofrendo/map016.c
Executable file
192
MCUME_teensy41/teensynofrendo/map016.c
Executable file
|
|
@ -0,0 +1,192 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map16.c
|
||||
**
|
||||
** mapper 16 interface
|
||||
** $Id: map016.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "nes.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter;
|
||||
bool enabled;
|
||||
} irq;
|
||||
|
||||
/* mapper 16: Bandai */
|
||||
|
||||
static void map16_init(void)
|
||||
{
|
||||
mmc_bankrom(16, 0x8000, 0);
|
||||
mmc_bankrom(16, 0xC000, MMC_LASTBANK);
|
||||
irq.counter = 0;
|
||||
irq.enabled = false;
|
||||
}
|
||||
|
||||
static void map16_write(uint32 address, uint8 value)
|
||||
{
|
||||
int reg = address & 0xF;
|
||||
|
||||
if (reg < 8)
|
||||
{
|
||||
mmc_bankvrom(1, reg << 10, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (address & 0x000F)
|
||||
{
|
||||
case 0x8:
|
||||
mmc_bankrom(16, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x9:
|
||||
switch (value & 3)
|
||||
{
|
||||
case 0:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xA:
|
||||
irq.enabled = (value & 1) ? true : false;
|
||||
break;
|
||||
|
||||
case 0xB:
|
||||
irq.counter = (irq.counter & 0xFF00) | value;
|
||||
break;
|
||||
|
||||
case 0xC:
|
||||
irq.counter = (value << 8) | (irq.counter & 0xFF);
|
||||
break;
|
||||
|
||||
case 0xD:
|
||||
/* eeprom I/O port? */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map16_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.enabled)
|
||||
{
|
||||
if (irq.counter)
|
||||
{
|
||||
if (0 == --irq.counter)
|
||||
nes_irq();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map16_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper16.irqCounterLowByte = irq.counter & 0xFF;
|
||||
state->extraData.mapper16.irqCounterHighByte = irq.counter >> 8;
|
||||
state->extraData.mapper16.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map16_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = (state->extraData.mapper16.irqCounterHighByte << 8)
|
||||
| state->extraData.mapper16.irqCounterLowByte;
|
||||
irq.enabled = state->extraData.mapper16.irqCounterEnabled;
|
||||
}
|
||||
|
||||
static const map_memwrite map16_memwrite[] =
|
||||
{
|
||||
{ 0x6000, 0x600D, map16_write },
|
||||
{ 0x7FF0, 0x7FFD, map16_write },
|
||||
{ 0x8000, 0x800D, map16_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map16_intf =
|
||||
{
|
||||
16, /* mapper number */
|
||||
"Bandai", /* mapper name */
|
||||
map16_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map16_hblank, /* hblank callback */
|
||||
map16_getstate, /* get state (snss) */
|
||||
map16_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map16_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map016.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.8 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.7 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.6 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.5 2000/10/10 13:58:16 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.4 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/15 23:52:20 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.2 2000/07/11 05:03:49 matt
|
||||
** value masking isn't necessary for the banking routines
|
||||
**
|
||||
** Revision 1.1 2000/07/11 03:14:18 melanson
|
||||
** Initial commit for mappers 16, 34, and 231
|
||||
**
|
||||
**
|
||||
*/
|
||||
215
MCUME_teensy41/teensynofrendo/map018.c
Executable file
215
MCUME_teensy41/teensynofrendo/map018.c
Executable file
|
|
@ -0,0 +1,215 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map18.c
|
||||
**
|
||||
** mapper 18 interface
|
||||
** $Id: map018.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* mapper 18: Jaleco SS8806 */
|
||||
#define VRC_PBANK(bank, value, high) \
|
||||
do { \
|
||||
if ((high)) \
|
||||
highprgnybbles[(bank)] = (value) & 0x0F; \
|
||||
else \
|
||||
lowprgnybbles[(bank)] = (value) & 0x0F; \
|
||||
mmc_bankrom(8, 0x8000 + ((bank) << 13), (highprgnybbles[(bank)] << 4)+lowprgnybbles[(bank)]); \
|
||||
} while (0)
|
||||
|
||||
#define VRC_VBANK(bank, value, high) \
|
||||
{ \
|
||||
if ((high)) \
|
||||
highnybbles[(bank)] = (value) & 0x0F; \
|
||||
else \
|
||||
lownybbles[(bank)] = (value) & 0x0F; \
|
||||
mmc_bankvrom(1, (bank) << 10, (highnybbles[(bank)] << 4)+lownybbles[(bank)]); \
|
||||
}
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, enabled;
|
||||
uint8 nybbles[4];
|
||||
int clockticks;
|
||||
} irq;
|
||||
|
||||
static void map18_init(void)
|
||||
{
|
||||
irq.counter = irq.enabled = 0;
|
||||
}
|
||||
|
||||
static uint8 lownybbles[8];
|
||||
static uint8 highnybbles[8];
|
||||
static uint8 lowprgnybbles[3];
|
||||
static uint8 highprgnybbles[3];
|
||||
|
||||
|
||||
static void map18_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x8000: VRC_PBANK(0, value, 0); break;
|
||||
case 0x8001: VRC_PBANK(0, value, 1); break;
|
||||
case 0x8002: VRC_PBANK(1, value, 0); break;
|
||||
case 0x8003: VRC_PBANK(1, value, 1); break;
|
||||
case 0x9000: VRC_PBANK(2, value, 0); break;
|
||||
case 0x9001: VRC_PBANK(2, value, 1); break;
|
||||
case 0xA000: VRC_VBANK(0, value, 0); break;
|
||||
case 0xA001: VRC_VBANK(0, value, 1); break;
|
||||
case 0xA002: VRC_VBANK(1, value, 0); break;
|
||||
case 0xA003: VRC_VBANK(1, value, 1); break;
|
||||
case 0xB000: VRC_VBANK(2, value, 0); break;
|
||||
case 0xB001: VRC_VBANK(2, value, 1); break;
|
||||
case 0xB002: VRC_VBANK(3, value, 0); break;
|
||||
case 0xB003: VRC_VBANK(3, value, 1); break;
|
||||
case 0xC000: VRC_VBANK(4, value, 0); break;
|
||||
case 0xC001: VRC_VBANK(4, value, 1); break;
|
||||
case 0xC002: VRC_VBANK(5, value, 0); break;
|
||||
case 0xC003: VRC_VBANK(5, value, 1); break;
|
||||
case 0xD000: VRC_VBANK(6, value, 0); break;
|
||||
case 0xD001: VRC_VBANK(6, value, 1); break;
|
||||
case 0xD002: VRC_VBANK(7, value, 0); break;
|
||||
case 0xD003: VRC_VBANK(7, value, 1); break;
|
||||
case 0xE000:
|
||||
irq.nybbles[0]=value&0x0F;
|
||||
irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) |
|
||||
(irq.nybbles[2]<<8) | (irq.nybbles[3]<<12);
|
||||
irq.counter=(uint8)(irq.clockticks/114);
|
||||
if(irq.counter>15) irq.counter-=16;
|
||||
break;
|
||||
case 0xE001:
|
||||
irq.nybbles[1]=value&0x0F;
|
||||
irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) |
|
||||
(irq.nybbles[2]<<8) | (irq.nybbles[3]<<12);
|
||||
irq.counter=(uint8)(irq.clockticks/114);
|
||||
if(irq.counter>15) irq.counter-=16;
|
||||
break;
|
||||
case 0xE002:
|
||||
irq.nybbles[2]=value&0x0F;
|
||||
irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) |
|
||||
(irq.nybbles[2]<<8) | (irq.nybbles[3]<<12);
|
||||
irq.counter=(uint8)(irq.clockticks/114);
|
||||
if(irq.counter>15) irq.counter-=16;
|
||||
break;
|
||||
case 0xE003:
|
||||
irq.nybbles[3]=value&0x0F;
|
||||
irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) |
|
||||
(irq.nybbles[2]<<8) | (irq.nybbles[3]<<12);
|
||||
irq.counter=(uint8)(irq.clockticks/114);
|
||||
if(irq.counter>15) irq.counter-=16;
|
||||
break;
|
||||
case 0xF000:
|
||||
if(value&0x01) irq.enabled=true;
|
||||
break;
|
||||
case 0xF001:
|
||||
irq.enabled=value&0x01;
|
||||
break;
|
||||
case 0xF002:
|
||||
switch(value&0x03)
|
||||
{
|
||||
case 0: ppu_mirror(0, 0, 1, 1); break;
|
||||
case 1: ppu_mirror(0, 1, 0, 1); break;
|
||||
case 2: ppu_mirror(1,1,1,1);break;
|
||||
case 3: ppu_mirror(1,1,1,1);break; // should this be zero?
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static const map_memwrite map18_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map18_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static void map18_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper18.irqCounterLowByte = irq.counter & 0xFF;
|
||||
state->extraData.mapper18.irqCounterHighByte = irq.counter >> 8;
|
||||
state->extraData.mapper18.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map18_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = (state->extraData.mapper18.irqCounterHighByte << 8)
|
||||
| state->extraData.mapper18.irqCounterLowByte;
|
||||
irq.enabled = state->extraData.mapper18.irqCounterEnabled;
|
||||
}
|
||||
|
||||
const mapintf_t map18_intf =
|
||||
{
|
||||
18, /* mapper number */
|
||||
"Jaleco SS8806", /* mapper name */
|
||||
map18_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
map18_getstate, /* get state (snss) */
|
||||
map18_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map18_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map018.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.8 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.7 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.6 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.5 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.4 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:42 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
170
MCUME_teensy41/teensynofrendo/map019.c
Executable file
170
MCUME_teensy41/teensynofrendo/map019.c
Executable file
|
|
@ -0,0 +1,170 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map19.c
|
||||
**
|
||||
** mapper 19 interface
|
||||
** $Id: map019.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* TODO: shouldn't there be an h-blank IRQ handler??? */
|
||||
|
||||
/* Special mirroring macro for mapper 19 */
|
||||
#define N_BANK1(table, value) \
|
||||
{ \
|
||||
if ((value) < 0xE0) \
|
||||
ppu_setpage(1, (table) + 8, &mmc_getinfo()->vrom[((value) % (mmc_getinfo()->vrom_banks * 8)) << 10] - (0x2000 + ((table) << 10))); \
|
||||
else \
|
||||
ppu_setpage(1, (table) + 8, &mmc_getinfo()->vram[((value) & 7) << 10] - (0x2000 + ((table) << 10))); \
|
||||
ppu_mirrorhipages(); \
|
||||
}
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, enabled;
|
||||
} irq;
|
||||
|
||||
static void map19_init(void)
|
||||
{
|
||||
irq.counter = irq.enabled = 0;
|
||||
}
|
||||
|
||||
/* mapper 19: Namcot 106 */
|
||||
static void map19_write(uint32 address, uint8 value)
|
||||
{
|
||||
int reg = address >> 11;
|
||||
switch (reg)
|
||||
{
|
||||
case 0xA:
|
||||
irq.counter &= ~0xFF;
|
||||
irq.counter |= value;
|
||||
break;
|
||||
|
||||
case 0xB:
|
||||
irq.counter = ((value & 0x7F) << 8) | (irq.counter & 0xFF);
|
||||
irq.enabled = (value & 0x80) ? true : false;
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
case 0x12:
|
||||
case 0x13:
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
case 0x16:
|
||||
case 0x17:
|
||||
mmc_bankvrom(1, (reg & 7) << 10, value);
|
||||
break;
|
||||
|
||||
case 0x18:
|
||||
case 0x19:
|
||||
case 0x1A:
|
||||
case 0x1B:
|
||||
N_BANK1(reg & 3, value);
|
||||
break;
|
||||
|
||||
case 0x1C:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x1D:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 0x1E:
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map19_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper19.irqCounterLowByte = irq.counter & 0xFF;
|
||||
state->extraData.mapper19.irqCounterHighByte = irq.counter >> 8;
|
||||
state->extraData.mapper19.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map19_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = (state->extraData.mapper19.irqCounterHighByte << 8)
|
||||
| state->extraData.mapper19.irqCounterLowByte;
|
||||
irq.enabled = state->extraData.mapper19.irqCounterEnabled;
|
||||
}
|
||||
|
||||
static const map_memwrite map19_memwrite[] =
|
||||
{
|
||||
{ 0x5000, 0x5FFF, map19_write },
|
||||
{ 0x8000, 0xFFFF, map19_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map19_intf =
|
||||
{
|
||||
19, /* mapper number */
|
||||
"Namcot 106", /* mapper name */
|
||||
map19_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
map19_getstate, /* get state (snss) */
|
||||
map19_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map19_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map019.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.3 2000/07/15 23:52:20 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
235
MCUME_teensy41/teensynofrendo/map024.c
Executable file
235
MCUME_teensy41/teensynofrendo/map024.c
Executable file
|
|
@ -0,0 +1,235 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map24.c
|
||||
**
|
||||
** mapper 24 interface
|
||||
** $Id: map024.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
#include "vrcvisnd.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, enabled;
|
||||
int latch, wait_state;
|
||||
} irq;
|
||||
|
||||
static void map24_init(void)
|
||||
{
|
||||
irq.counter = irq.enabled = 0;
|
||||
irq.latch = irq.wait_state = 0;
|
||||
}
|
||||
|
||||
static void map24_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.enabled)
|
||||
{
|
||||
if (256 == ++irq.counter)
|
||||
{
|
||||
irq.counter = irq.latch;
|
||||
nes_irq();
|
||||
//irq.enabled = false;
|
||||
irq.enabled = irq.wait_state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map24_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address & 0xF003)
|
||||
{
|
||||
case 0x8000:
|
||||
mmc_bankrom(16, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x9003:
|
||||
/* ??? */
|
||||
break;
|
||||
|
||||
case 0xB003:
|
||||
switch (value & 0x0C)
|
||||
{
|
||||
case 0x00:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 0x08:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
|
||||
case 0x0C:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 0xC000:
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
break;
|
||||
|
||||
case 0xD000:
|
||||
mmc_bankvrom(1, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 0xD001:
|
||||
mmc_bankvrom(1, 0x0400, value);
|
||||
break;
|
||||
|
||||
case 0xD002:
|
||||
mmc_bankvrom(1, 0x0800, value);
|
||||
break;
|
||||
|
||||
case 0xD003:
|
||||
mmc_bankvrom(1, 0x0C00, value);
|
||||
break;
|
||||
|
||||
case 0xE000:
|
||||
mmc_bankvrom(1, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 0xE001:
|
||||
mmc_bankvrom(1, 0x1400, value);
|
||||
break;
|
||||
|
||||
case 0xE002:
|
||||
mmc_bankvrom(1, 0x1800, value);
|
||||
break;
|
||||
|
||||
case 0xE003:
|
||||
mmc_bankvrom(1, 0x1C00, value);
|
||||
break;
|
||||
|
||||
case 0xF000:
|
||||
irq.latch = value;
|
||||
break;
|
||||
|
||||
case 0xF001:
|
||||
irq.enabled = (value >> 1) & 0x01;
|
||||
irq.wait_state = value & 0x01;
|
||||
if (irq.enabled)
|
||||
irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
case 0xF002:
|
||||
irq.enabled = irq.wait_state;
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("invalid VRC6 write: $%02X to $%04X", value, address);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map24_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper24.irqCounter = irq.counter;
|
||||
state->extraData.mapper24.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map24_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = state->extraData.mapper24.irqCounter;
|
||||
irq.enabled = state->extraData.mapper24.irqCounterEnabled;
|
||||
}
|
||||
|
||||
static const map_memwrite map24_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xF002, map24_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
mapintf_t const map24_intf =
|
||||
{
|
||||
24, /* mapper number */
|
||||
"Konami VRC6", /* mapper name */
|
||||
map24_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map24_hblank, /* hblank callback */
|
||||
map24_getstate, /* get state (snss) */
|
||||
map24_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map24_memwrite, /* memory write structure */
|
||||
&vrcvi_ext /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map024.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.11 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.10 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.9 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.8 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.7 2000/10/09 12:00:53 matt
|
||||
** removed old code
|
||||
**
|
||||
** Revision 1.6 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.5 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.4 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/04 23:11:45 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
121
MCUME_teensy41/teensynofrendo/map032.c
Executable file
121
MCUME_teensy41/teensynofrendo/map032.c
Executable file
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map32.c
|
||||
**
|
||||
** mapper 32 interface
|
||||
** $Id: map032.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
static int select_c000 = 0;
|
||||
|
||||
/* mapper 32: Irem G-101 */
|
||||
static void map32_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address >> 12)
|
||||
{
|
||||
case 0x08:
|
||||
if (select_c000)
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
else
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x09:
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
|
||||
select_c000 = (value & 0x02);
|
||||
break;
|
||||
|
||||
case 0x0A:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 0x0B:
|
||||
{
|
||||
int loc = (address & 0x07) << 10;
|
||||
mmc_bankvrom(1, loc, value);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map32_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map32_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map32_intf =
|
||||
{
|
||||
32, /* mapper number */
|
||||
"Irem G-101", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map32_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map032.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
145
MCUME_teensy41/teensynofrendo/map033.c
Executable file
145
MCUME_teensy41/teensynofrendo/map033.c
Executable file
|
|
@ -0,0 +1,145 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map33.c
|
||||
**
|
||||
** mapper 33 interface
|
||||
** $Id: map033.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* mapper 33: Taito TC0190*/
|
||||
static void map33_write(uint32 address, uint8 value)
|
||||
{
|
||||
int page = (address >> 13) & 3;
|
||||
int reg = address & 3;
|
||||
|
||||
switch (page)
|
||||
{
|
||||
case 0: /* $800X */
|
||||
switch (reg)
|
||||
{
|
||||
case 0:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
mmc_bankvrom(2, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
mmc_bankvrom(2, 0x0800, value);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: /* $A00X */
|
||||
{
|
||||
int loc = 0x1000 + (reg << 10);
|
||||
mmc_bankvrom(1, loc, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: /* $C00X */
|
||||
case 3: /* $E00X */
|
||||
switch (reg)
|
||||
{
|
||||
case 0:
|
||||
/* irqs maybe ? */
|
||||
//break;
|
||||
|
||||
case 1:
|
||||
/* this doesn't seem to work just right */
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static const map_memwrite map33_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map33_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map33_intf =
|
||||
{
|
||||
33, /* mapper number */
|
||||
"Taito TC0190", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map33_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map033.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.7 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.6 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
100
MCUME_teensy41/teensynofrendo/map034.c
Executable file
100
MCUME_teensy41/teensynofrendo/map034.c
Executable file
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map34.c
|
||||
**
|
||||
** mapper 34 interface
|
||||
** $Id: map034.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
static void map34_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, MMC_LASTBANK);
|
||||
}
|
||||
|
||||
static void map34_write(uint32 address, uint8 value)
|
||||
{
|
||||
if ((address & 0x8000) || (0x7FFD == address))
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, value);
|
||||
}
|
||||
else if (0x7FFE == address)
|
||||
{
|
||||
mmc_bankvrom(4, 0x0000, value);
|
||||
}
|
||||
else if (0x7FFF == address)
|
||||
{
|
||||
mmc_bankvrom(4, 0x1000, value);
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map34_memwrite[] =
|
||||
{
|
||||
{ 0x7FFD, 0xFFFF, map34_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map34_intf =
|
||||
{
|
||||
34, /* mapper number */
|
||||
"Nina-1", /* mapper name */
|
||||
map34_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map34_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map034.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/11 05:03:49 matt
|
||||
** value masking isn't necessary for the banking routines
|
||||
**
|
||||
** Revision 1.2 2000/07/11 03:35:08 bsittler
|
||||
** Fixes to make mikes new mappers compile.
|
||||
**
|
||||
** Revision 1.1 2000/07/11 03:14:18 melanson
|
||||
** Initial commit for mappers 16, 34, and 231
|
||||
**
|
||||
**
|
||||
*/
|
||||
163
MCUME_teensy41/teensynofrendo/map040.c
Executable file
163
MCUME_teensy41/teensynofrendo/map040.c
Executable file
|
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map40.c
|
||||
**
|
||||
** mapper 40 interface
|
||||
** $Id: map040.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
#define MAP40_IRQ_PERIOD (4096 / 113.666666)
|
||||
|
||||
static struct
|
||||
{
|
||||
int enabled, counter;
|
||||
} irq;
|
||||
|
||||
/* mapper 40: SMB 2j (hack) */
|
||||
static void map40_init(void)
|
||||
{
|
||||
mmc_bankrom(8, 0x6000, 6);
|
||||
mmc_bankrom(8, 0x8000, 4);
|
||||
mmc_bankrom(8, 0xA000, 5);
|
||||
mmc_bankrom(8, 0xE000, 7);
|
||||
|
||||
irq.enabled = false;
|
||||
irq.counter = (int) MAP40_IRQ_PERIOD;
|
||||
}
|
||||
|
||||
static void map40_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.enabled && irq.counter)
|
||||
{
|
||||
irq.counter--;
|
||||
if (0 == irq.counter)
|
||||
{
|
||||
nes_irq();
|
||||
irq.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map40_write(uint32 address, uint8 value)
|
||||
{
|
||||
int range = (address >> 13) - 4;
|
||||
|
||||
switch (range)
|
||||
{
|
||||
case 0: /* 0x8000-0x9FFF */
|
||||
irq.enabled = false;
|
||||
irq.counter = (int) MAP40_IRQ_PERIOD;
|
||||
break;
|
||||
|
||||
case 1: /* 0xA000-0xBFFF */
|
||||
irq.enabled = true;
|
||||
break;
|
||||
|
||||
case 3: /* 0xE000-0xFFFF */
|
||||
mmc_bankrom(8, 0xC000, value & 7);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map40_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper40.irqCounter = irq.counter;
|
||||
state->extraData.mapper40.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map40_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = state->extraData.mapper40.irqCounter;
|
||||
irq.enabled = state->extraData.mapper40.irqCounterEnabled;
|
||||
}
|
||||
|
||||
static const map_memwrite map40_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map40_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map40_intf =
|
||||
{
|
||||
40, /* mapper number */
|
||||
"SMB 2j (pirate)", /* mapper name */
|
||||
map40_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map40_hblank, /* hblank callback */
|
||||
map40_getstate, /* get state (snss) */
|
||||
map40_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map40_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map040.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.9 2000/10/23 15:53:27 matt
|
||||
** suppressed warnings
|
||||
**
|
||||
** Revision 1.8 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.7 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.6 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.5 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.4 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.3 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
167
MCUME_teensy41/teensynofrendo/map041.c
Executable file
167
MCUME_teensy41/teensynofrendo/map041.c
Executable file
|
|
@ -0,0 +1,167 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map041.c
|
||||
**
|
||||
** Mapper #41 (Caltron 6 in 1)
|
||||
** Implementation by Firebug
|
||||
** Mapper information courtesy of Kevin Horton
|
||||
** $Id: map041.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
static uint8 register_low;
|
||||
static uint8 register_high;
|
||||
|
||||
/*****************************************************/
|
||||
/* Set 8K CHR bank from the combined register values */
|
||||
/*****************************************************/
|
||||
static void map41_set_chr (void)
|
||||
{
|
||||
/* Set the CHR bank from the appropriate register bits */
|
||||
mmc_bankvrom (8, 0x0000, ((register_low >> 1) & 0x0C) | (register_high));
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/******************************/
|
||||
/* Mapper #41: Caltron 6 in 1 */
|
||||
/******************************/
|
||||
static void map41_init (void)
|
||||
{
|
||||
/* Both registers set to zero at power on */
|
||||
/* TODO: Registers should also be cleared on a soft reset */
|
||||
register_low = 0x00;
|
||||
register_high = 0x00;
|
||||
mmc_bankrom (32, 0x8000, 0x00);
|
||||
map41_set_chr ();
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #41 write handler ($6000-$67FF) */
|
||||
/******************************************/
|
||||
static void map41_low_write (uint32 address, uint8 value)
|
||||
{
|
||||
/* Within this range the value written is irrelevant */
|
||||
UNUSED (value);
|
||||
|
||||
/* $6000-$67FF: A5 = mirroring (1=horizontal, 0=vertical) */
|
||||
/* A4-A3 = high two bits of 8K CHR bank */
|
||||
/* A2 = register 1 enable (0=disabled, 1=enabled) */
|
||||
/* A2-A0 = 32K PRG bank */
|
||||
register_low = (uint8) (address & 0x3F);
|
||||
mmc_bankrom (32, 0x8000, register_low & 0x07);
|
||||
map41_set_chr ();
|
||||
if (register_low & 0x20) ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #41 write handler ($8000-$FFFF) */
|
||||
/******************************************/
|
||||
static void map41_high_write (uint32 address, uint8 value)
|
||||
{
|
||||
/* Address doesn't matter within this range */
|
||||
UNUSED (address);
|
||||
|
||||
/* $8000-$FFFF: D1-D0 = low two bits of 8K CHR bank */
|
||||
if (register_low & 0x04)
|
||||
{
|
||||
register_high = value & 0x03;
|
||||
map41_set_chr ();
|
||||
}
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************/
|
||||
/* Shove extra mapper information into a SNSS block */
|
||||
/****************************************************/
|
||||
static void map41_setstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Store SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************/
|
||||
/* Pull extra mapper information out of a SNSS block */
|
||||
/*****************************************************/
|
||||
static void map41_getstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Retrieve SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map41_memwrite [] =
|
||||
{
|
||||
{ 0x6000, 0x67FF, map41_low_write },
|
||||
{ 0x8000, 0xFFFF, map41_high_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map41_intf =
|
||||
{
|
||||
41, /* Mapper number */
|
||||
"Caltron 6 in 1", /* Mapper name */
|
||||
map41_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
NULL, /* HBlank callback */
|
||||
map41_getstate, /* Get state (SNSS) */
|
||||
map41_setstate, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map41_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map041.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/30 00:33:15 firebug
|
||||
** initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
188
MCUME_teensy41/teensynofrendo/map042.c
Executable file
188
MCUME_teensy41/teensynofrendo/map042.c
Executable file
|
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map042.c
|
||||
**
|
||||
** Mapper #42 (Baby Mario bootleg)
|
||||
** Implementation by Firebug
|
||||
** Mapper information courtesy of Kevin Horton
|
||||
** $Id: map042.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
bool enabled;
|
||||
uint32 counter;
|
||||
} irq;
|
||||
|
||||
/********************************/
|
||||
/* Mapper #42 IRQ reset routine */
|
||||
/********************************/
|
||||
static void map42_irq_reset (void)
|
||||
{
|
||||
/* Turn off IRQs */
|
||||
irq.enabled = false;
|
||||
irq.counter = 0x0000;
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/********************************************/
|
||||
/* Mapper #42: Baby Mario bootleg cartridge */
|
||||
/********************************************/
|
||||
static void map42_init (void)
|
||||
{
|
||||
/* Set the hardwired pages */
|
||||
mmc_bankrom (8, 0x8000, 0x0C);
|
||||
mmc_bankrom (8, 0xA000, 0x0D);
|
||||
mmc_bankrom (8, 0xC000, 0x0E);
|
||||
mmc_bankrom (8, 0xE000, 0x0F);
|
||||
|
||||
/* Reset the IRQ counter */
|
||||
map42_irq_reset ();
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
/* Mapper #42 callback for IRQ handling */
|
||||
/****************************************/
|
||||
static void map42_hblank (int vblank)
|
||||
{
|
||||
/* Counter is M2 based so it doesn't matter whether */
|
||||
/* the PPU is in its VBlank period or not */
|
||||
UNUSED(vblank);
|
||||
|
||||
/* Increment the counter if it is enabled and check for strike */
|
||||
if (irq.enabled)
|
||||
{
|
||||
/* Is there a constant for cycles per scanline? */
|
||||
/* If so, someone ought to substitute it here */
|
||||
irq.counter = irq.counter + 114;
|
||||
|
||||
/* IRQ is triggered after 24576 M2 cycles */
|
||||
if (irq.counter >= 0x6000)
|
||||
{
|
||||
/* Trigger the IRQ */
|
||||
nes_irq ();
|
||||
|
||||
/* Reset the counter */
|
||||
map42_irq_reset ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #42 write handler ($E000-$FFFF) */
|
||||
/******************************************/
|
||||
static void map42_write (uint32 address, uint8 value)
|
||||
{
|
||||
switch (address & 0x03)
|
||||
{
|
||||
/* Register 0: Select ROM page at $6000-$7FFF */
|
||||
case 0x00: mmc_bankrom (8, 0x6000, value & 0x0F);
|
||||
break;
|
||||
|
||||
/* Register 1: mirroring */
|
||||
case 0x01: if (value & 0x08) ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
else ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
/* Register 2: IRQ */
|
||||
case 0x02: if (value & 0x02) irq.enabled = true;
|
||||
else map42_irq_reset ();
|
||||
break;
|
||||
|
||||
/* Register 3: unused */
|
||||
default: break;
|
||||
}
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************/
|
||||
/* Shove extra mapper information into a SNSS block */
|
||||
/****************************************************/
|
||||
static void map42_setstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Store SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************/
|
||||
/* Pull extra mapper information out of a SNSS block */
|
||||
/*****************************************************/
|
||||
static void map42_getstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Retrieve SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map42_memwrite [] =
|
||||
{
|
||||
{ 0xE000, 0xFFFF, map42_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map42_intf =
|
||||
{
|
||||
42, /* Mapper number */
|
||||
"Baby Mario (bootleg)", /* Mapper name */
|
||||
map42_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
map42_hblank, /* HBlank callback */
|
||||
map42_getstate, /* Get state (SNSS) */
|
||||
map42_setstate, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map42_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map042.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/27 19:23:30 firebug
|
||||
** initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
152
MCUME_teensy41/teensynofrendo/map046.c
Executable file
152
MCUME_teensy41/teensynofrendo/map046.c
Executable file
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map046.c
|
||||
**
|
||||
** Mapper #46 (Pelican Game Station)
|
||||
** Implementation by Firebug
|
||||
** Mapper information courtesy of Kevin Horton
|
||||
** $Id: map046.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
static uint8 prg_low_bank;
|
||||
static uint8 chr_low_bank;
|
||||
static uint8 prg_high_bank;
|
||||
static uint8 chr_high_bank;
|
||||
|
||||
/*************************************************/
|
||||
/* Set banks from the combined register values */
|
||||
/*************************************************/
|
||||
static void map46_set_banks (void)
|
||||
{
|
||||
/* Set the PRG and CHR pages */
|
||||
mmc_bankrom (32, 0x8000, (prg_high_bank << 1) | (prg_low_bank));
|
||||
mmc_bankvrom (8, 0x0000, (chr_high_bank << 3) | (chr_low_bank));
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
/* Mapper #46: Pelican Game Station (aka Rumble Station) */
|
||||
/*********************************************************/
|
||||
static void map46_init (void)
|
||||
{
|
||||
/* High bank switch register is set to zero on reset */
|
||||
prg_high_bank = 0x00;
|
||||
chr_high_bank = 0x00;
|
||||
map46_set_banks ();
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #46 write handler ($6000-$FFFF) */
|
||||
/******************************************/
|
||||
static void map46_write (uint32 address, uint8 value)
|
||||
{
|
||||
/* $8000-$FFFF: D6-D4 = lower three bits of CHR bank */
|
||||
/* D0 = low bit of PRG bank */
|
||||
/* $6000-$7FFF: D7-D4 = high four bits of CHR bank */
|
||||
/* D3-D0 = high four bits of PRG bank */
|
||||
if (address & 0x8000)
|
||||
{
|
||||
prg_low_bank = value & 0x01;
|
||||
chr_low_bank = (value >> 4) & 0x07;
|
||||
map46_set_banks ();
|
||||
}
|
||||
else
|
||||
{
|
||||
prg_high_bank = value & 0x0F;
|
||||
chr_high_bank = (value >> 4) & 0x0F;
|
||||
map46_set_banks ();
|
||||
}
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************/
|
||||
/* Shove extra mapper information into a SNSS block */
|
||||
/****************************************************/
|
||||
static void map46_setstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Store SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************/
|
||||
/* Pull extra mapper information out of a SNSS block */
|
||||
/*****************************************************/
|
||||
static void map46_getstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Retrieve SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map46_memwrite [] =
|
||||
{
|
||||
{ 0x6000, 0xFFFF, map46_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map46_intf =
|
||||
{
|
||||
46, /* Mapper number */
|
||||
"Pelican Game Station", /* Mapper name */
|
||||
map46_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
NULL, /* HBlank callback */
|
||||
map46_getstate, /* Get state (SNSS) */
|
||||
map46_setstate, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map46_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map046.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/27 19:23:05 firebug
|
||||
** initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
192
MCUME_teensy41/teensynofrendo/map050.c
Executable file
192
MCUME_teensy41/teensynofrendo/map050.c
Executable file
|
|
@ -0,0 +1,192 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map050.c
|
||||
**
|
||||
** Mapper #50 (SMB2j - 3rd discovered variation)
|
||||
** Implementation by Firebug
|
||||
** Mapper information courtesy of Kevin Horton
|
||||
** $Id: map050.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
bool enabled;
|
||||
uint32 counter;
|
||||
} irq;
|
||||
|
||||
/********************************/
|
||||
/* Mapper #50 IRQ reset routine */
|
||||
/********************************/
|
||||
static void map50_irq_reset (void)
|
||||
{
|
||||
/* Turn off IRQs */
|
||||
irq.enabled = false;
|
||||
irq.counter = 0x0000;
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/**************************************************************/
|
||||
/* Mapper #50: 3rd discovered variation of SMB2j cart bootleg */
|
||||
/**************************************************************/
|
||||
static void map50_init (void)
|
||||
{
|
||||
/* Set the hardwired pages */
|
||||
mmc_bankrom (8, 0x6000, 0x0F);
|
||||
mmc_bankrom (8, 0x8000, 0x08);
|
||||
mmc_bankrom (8, 0xA000, 0x09);
|
||||
mmc_bankrom (8, 0xE000, 0x0B);
|
||||
|
||||
/* Reset the IRQ counter */
|
||||
map50_irq_reset ();
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
/* Mapper #50 callback for IRQ handling */
|
||||
/****************************************/
|
||||
static void map50_hblank (int vblank)
|
||||
{
|
||||
/* Counter is M2 based so it doesn't matter whether */
|
||||
/* the PPU is in its VBlank period or not */
|
||||
UNUSED(vblank);
|
||||
|
||||
/* Increment the counter if it is enabled and check for strike */
|
||||
if (irq.enabled)
|
||||
{
|
||||
/* Is there a constant for cycles per scanline? */
|
||||
/* If so, someone ought to substitute it here */
|
||||
irq.counter = irq.counter + 114;
|
||||
|
||||
/* IRQ line is hooked to Q12 of the counter */
|
||||
if (irq.counter & 0x1000)
|
||||
{
|
||||
/* Trigger the IRQ */
|
||||
nes_irq ();
|
||||
|
||||
/* Reset the counter */
|
||||
map50_irq_reset ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #50 write handler ($4000-$5FFF) */
|
||||
/******************************************/
|
||||
static void map50_write (uint32 address, uint8 value)
|
||||
{
|
||||
uint8 selectable_bank;
|
||||
|
||||
/* For address to be decoded, A5 must be high and A6 low */
|
||||
if ((address & 0x60) != 0x20) return;
|
||||
|
||||
/* A8 low = $C000-$DFFF page selection */
|
||||
/* A8 high = IRQ timer toggle */
|
||||
if (address & 0x100)
|
||||
{
|
||||
/* IRQ settings */
|
||||
if (value & 0x01) irq.enabled = true;
|
||||
else map50_irq_reset ();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Stupid data line swapping */
|
||||
selectable_bank = 0x00;
|
||||
if (value & 0x08) selectable_bank |= 0x08;
|
||||
if (value & 0x04) selectable_bank |= 0x02;
|
||||
if (value & 0x02) selectable_bank |= 0x01;
|
||||
if (value & 0x01) selectable_bank |= 0x04;
|
||||
mmc_bankrom (8, 0xC000, selectable_bank);
|
||||
}
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************/
|
||||
/* Shove extra mapper information into a SNSS block */
|
||||
/****************************************************/
|
||||
static void map50_setstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Store SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************/
|
||||
/* Pull extra mapper information out of a SNSS block */
|
||||
/*****************************************************/
|
||||
static void map50_getstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Retrieve SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map50_memwrite [] =
|
||||
{
|
||||
{ 0x4000, 0x5FFF, map50_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map50_intf =
|
||||
{
|
||||
50, /* Mapper number */
|
||||
"SMB2j (3rd discovered variant)", /* Mapper name */
|
||||
map50_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
map50_hblank, /* HBlank callback */
|
||||
map50_getstate, /* Get state (SNSS) */
|
||||
map50_setstate, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map50_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map050.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/27 19:22:13 firebug
|
||||
** initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
234
MCUME_teensy41/teensynofrendo/map064.c
Executable file
234
MCUME_teensy41/teensynofrendo/map064.c
Executable file
|
|
@ -0,0 +1,234 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map64.c
|
||||
**
|
||||
** mapper 64 interface
|
||||
** $Id: map064.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, latch;
|
||||
bool enabled, reset;
|
||||
} irq;
|
||||
|
||||
static uint8 command = 0;
|
||||
static uint16 vrombase = 0x0000;
|
||||
|
||||
static void map64_hblank(int vblank)
|
||||
{
|
||||
if (vblank)
|
||||
return;
|
||||
|
||||
irq.reset = false;
|
||||
|
||||
if (ppu_enabled())
|
||||
{
|
||||
if (0 == irq.counter--)
|
||||
{
|
||||
irq.counter = irq.latch;
|
||||
|
||||
if (true == irq.enabled)
|
||||
nes_irq();
|
||||
|
||||
irq.reset = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* mapper 64: Tengen RAMBO-1 */
|
||||
static void map64_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address & 0xE001)
|
||||
{
|
||||
case 0x8000:
|
||||
command = value;
|
||||
vrombase = (value & 0x80) ? 0x1000 : 0x0000;
|
||||
break;
|
||||
|
||||
case 0x8001:
|
||||
switch (command & 0xF)
|
||||
{
|
||||
case 0:
|
||||
mmc_bankvrom(1, 0x0000 ^ vrombase, value);
|
||||
mmc_bankvrom(1, 0x0400 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
mmc_bankvrom(1, 0x0800 ^ vrombase, value);
|
||||
mmc_bankvrom(1, 0x0C00 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
mmc_bankvrom(1, 0x1000 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
mmc_bankvrom(1, 0x1400 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
mmc_bankvrom(1, 0x1800 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
mmc_bankvrom(1, 0x1C00 ^ vrombase, value);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
mmc_bankrom(8, (command & 0x40) ? 0xA000 : 0x8000, value);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
mmc_bankrom(8, (command & 0x40) ? 0xC000 : 0xA000, value);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
mmc_bankvrom(1, 0x0400, value);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
mmc_bankvrom(1, 0x0C00, value);
|
||||
break;
|
||||
|
||||
case 15:
|
||||
mmc_bankrom(8, (command & 0x40) ? 0x8000 : 0xC000, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("mapper 64: unknown command #%d", command & 0xF);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xA000:
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 0, 1, 1);
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1);
|
||||
break;
|
||||
|
||||
case 0xC000:
|
||||
//irq.counter = value;
|
||||
irq.latch = value;
|
||||
break;
|
||||
|
||||
case 0xC001:
|
||||
//irq.latch = value;
|
||||
irq.reset = true;
|
||||
break;
|
||||
|
||||
case 0xE000:
|
||||
//irq.counter = irq.latch;
|
||||
irq.enabled = false;
|
||||
break;
|
||||
|
||||
case 0xE001:
|
||||
irq.enabled = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("mapper 64: Wrote $%02X to $%04X", value, address);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
if (true == irq.reset)
|
||||
irq.counter = irq.latch;
|
||||
}
|
||||
|
||||
static void map64_init(void)
|
||||
{
|
||||
mmc_bankrom(8, 0x8000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xA000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xC000, MMC_LASTBANK);
|
||||
mmc_bankrom(8, 0xE000, MMC_LASTBANK);
|
||||
|
||||
irq.counter = irq.latch = 0;
|
||||
irq.reset = irq.enabled = false;
|
||||
}
|
||||
|
||||
static const map_memwrite map64_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map64_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map64_intf =
|
||||
{
|
||||
64, /* mapper number */
|
||||
"Tengen RAMBO-1", /* mapper name */
|
||||
map64_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map64_hblank, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map64_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map064.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.8 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.7 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.6 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.5 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.4 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
144
MCUME_teensy41/teensynofrendo/map065.c
Executable file
144
MCUME_teensy41/teensynofrendo/map065.c
Executable file
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map65.c
|
||||
**
|
||||
** mapper 65 interface
|
||||
** $Id: map065.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter;
|
||||
bool enabled;
|
||||
int cycles;
|
||||
uint8 low, high;
|
||||
} irq;
|
||||
|
||||
static void map65_init(void)
|
||||
{
|
||||
irq.counter = 0;
|
||||
irq.enabled = false;
|
||||
irq.low = irq.high = 0;
|
||||
irq.cycles = 0;
|
||||
}
|
||||
|
||||
/* TODO: shouldn't there be some kind of HBlank callback??? */
|
||||
|
||||
/* mapper 65: Irem H-3001*/
|
||||
static void map65_write(uint32 address, uint8 value)
|
||||
{
|
||||
int range = address & 0xF000;
|
||||
int reg = address & 7;
|
||||
|
||||
switch (range)
|
||||
{
|
||||
case 0x8000:
|
||||
case 0xA000:
|
||||
case 0xC000:
|
||||
mmc_bankrom(8, range, value);
|
||||
break;
|
||||
|
||||
case 0xB000:
|
||||
mmc_bankvrom(1, reg << 10, value);
|
||||
break;
|
||||
|
||||
case 0x9000:
|
||||
switch (reg)
|
||||
{
|
||||
case 4:
|
||||
irq.enabled = (value & 0x01) ? false : true;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
irq.high = value;
|
||||
irq.cycles = (irq.high << 8) | irq.low;
|
||||
irq.counter = (uint8)(irq.cycles / 128);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
irq.low = value;
|
||||
irq.cycles = (irq.high << 8) | irq.low;
|
||||
irq.counter = (uint8)(irq.cycles / 128);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map65_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map65_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map65_intf =
|
||||
{
|
||||
65, /* mapper number */
|
||||
"Irem H-3001", /* mapper name */
|
||||
map65_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map65_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map065.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
94
MCUME_teensy41/teensynofrendo/map066.c
Executable file
94
MCUME_teensy41/teensynofrendo/map066.c
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map66.c
|
||||
**
|
||||
** mapper 66 interface
|
||||
** $Id: map066.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 66: GNROM */
|
||||
static void map66_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(32, 0x8000, (value >> 4) & 3);
|
||||
mmc_bankvrom(8, 0x0000, value & 3);
|
||||
}
|
||||
|
||||
static void map66_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, 0);
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
}
|
||||
|
||||
|
||||
static const map_memwrite map66_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map66_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map66_intf =
|
||||
{
|
||||
66, /* mapper number */
|
||||
"GNROM", /* mapper name */
|
||||
map66_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map66_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map066.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
115
MCUME_teensy41/teensynofrendo/map070.c
Executable file
115
MCUME_teensy41/teensynofrendo/map070.c
Executable file
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map70.c
|
||||
**
|
||||
** mapper 70 interface
|
||||
** $Id: map070.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* mapper 70: Arkanoid II, Kamen Rider Club, etc. */
|
||||
/* ($8000-$FFFF) D6-D4 = switch $8000-$BFFF */
|
||||
/* ($8000-$FFFF) D3-D0 = switch PPU $0000-$1FFF */
|
||||
/* ($8000-$FFFF) D7 = switch mirroring */
|
||||
static void map70_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(16, 0x8000, (value >> 4) & 0x07);
|
||||
mmc_bankvrom(8, 0x0000, value & 0x0F);
|
||||
|
||||
/* Argh! FanWen used the 4-screen bit to determine
|
||||
** whether the game uses D7 to switch between
|
||||
** horizontal and vertical mirroring, or between
|
||||
** one-screen mirroring from $2000 or $2400.
|
||||
*/
|
||||
if (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN)
|
||||
{
|
||||
if (value & 0x80)
|
||||
ppu_mirror(0, 0, 1, 1); /* horiz */
|
||||
else
|
||||
ppu_mirror(0, 1, 0, 1); /* vert */
|
||||
}
|
||||
else
|
||||
{
|
||||
int mirror = (value & 0x80) >> 7;
|
||||
ppu_mirror(mirror, mirror, mirror, mirror);
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map70_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map70_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map70_intf =
|
||||
{
|
||||
70, /* mapper number */
|
||||
"Mapper 70", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map70_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map070.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.7 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.6 2000/10/22 15:03:13 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
173
MCUME_teensy41/teensynofrendo/map073.c
Executable file
173
MCUME_teensy41/teensynofrendo/map073.c
Executable file
|
|
@ -0,0 +1,173 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map073.c
|
||||
**
|
||||
** Mapper #73 (Konami VRC3)
|
||||
** Implementation by Firebug
|
||||
** $Id: map073.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
bool enabled;
|
||||
uint32 counter;
|
||||
} irq;
|
||||
|
||||
/**************************/
|
||||
/* Mapper #73: Salamander */
|
||||
/**************************/
|
||||
static void map73_init (void)
|
||||
{
|
||||
/* Turn off IRQs */
|
||||
irq.enabled = false;
|
||||
irq.counter = 0x0000;
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
/* Mapper #73 callback for IRQ handling */
|
||||
/****************************************/
|
||||
static void map73_hblank (int vblank)
|
||||
{
|
||||
/* Counter is M2 based so it doesn't matter whether */
|
||||
/* the PPU is in its VBlank period or not */
|
||||
UNUSED (vblank);
|
||||
|
||||
/* Increment the counter if it is enabled and check for strike */
|
||||
if (irq.enabled)
|
||||
{
|
||||
/* Is there a constant for cycles per scanline? */
|
||||
/* If so, someone ought to substitute it here */
|
||||
irq.counter = irq.counter + 114;
|
||||
|
||||
/* Counter triggered on overflow into Q16 */
|
||||
if (irq.counter & 0x10000)
|
||||
{
|
||||
/* Clip to sixteen-bit word */
|
||||
irq.counter &= 0xFFFF;
|
||||
|
||||
/* Trigger the IRQ */
|
||||
nes_irq ();
|
||||
|
||||
/* Shut off IRQ counter */
|
||||
irq.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #73 write handler ($8000-$FFFF) */
|
||||
/******************************************/
|
||||
static void map73_write (uint32 address, uint8 value)
|
||||
{
|
||||
switch (address & 0xF000)
|
||||
{
|
||||
case 0x8000: irq.counter &= 0xFFF0;
|
||||
irq.counter |= (uint32) (value);
|
||||
break;
|
||||
case 0x9000: irq.counter &= 0xFF0F;
|
||||
irq.counter |= (uint32) (value << 4);
|
||||
break;
|
||||
case 0xA000: irq.counter &= 0xF0FF;
|
||||
irq.counter |= (uint32) (value << 8);
|
||||
break;
|
||||
case 0xB000: irq.counter &= 0x0FFF;
|
||||
irq.counter |= (uint32) (value << 12);
|
||||
break;
|
||||
case 0xC000: if (value & 0x02) irq.enabled = true;
|
||||
else irq.enabled = false;
|
||||
break;
|
||||
case 0xF000: mmc_bankrom (16, 0x8000, value);
|
||||
default: break;
|
||||
}
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************/
|
||||
/* Shove extra mapper information into a SNSS block */
|
||||
/****************************************************/
|
||||
static void map73_setstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Store SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************/
|
||||
/* Pull extra mapper information out of a SNSS block */
|
||||
/*****************************************************/
|
||||
static void map73_getstate (SnssMapperBlock *state)
|
||||
{
|
||||
/* TODO: Retrieve SNSS information */
|
||||
UNUSED (state);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map73_memwrite [] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map73_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map73_intf =
|
||||
{
|
||||
73, /* Mapper number */
|
||||
"Konami VRC3", /* Mapper name */
|
||||
map73_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
map73_hblank, /* HBlank callback */
|
||||
map73_getstate, /* Get state (SNSS) */
|
||||
map73_setstate, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map73_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map073.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/30 06:35:05 firebug
|
||||
** Initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
131
MCUME_teensy41/teensynofrendo/map075.c
Executable file
131
MCUME_teensy41/teensynofrendo/map075.c
Executable file
|
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map75.c
|
||||
**
|
||||
** mapper 75 interface
|
||||
** $Id: map075.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
|
||||
static uint8 latch[2];
|
||||
static uint8 hibits;
|
||||
|
||||
/* mapper 75: Konami VRC1 */
|
||||
static void map75_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch ((address & 0xF000) >> 12)
|
||||
{
|
||||
case 0x8:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x9:
|
||||
hibits = (value & 0x06);
|
||||
|
||||
mmc_bankvrom(4, 0x0000, ((hibits & 0x02) << 3) | latch[0]);
|
||||
mmc_bankvrom(4, 0x1000, ((hibits & 0x04) << 2) | latch[1]);
|
||||
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 1, 0, 1); /* vert */
|
||||
else
|
||||
ppu_mirror(0, 0, 1, 1); /* horiz */
|
||||
|
||||
break;
|
||||
|
||||
case 0xA:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 0xC:
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
break;
|
||||
|
||||
case 0xE:
|
||||
latch[0] = (value & 0x0F);
|
||||
mmc_bankvrom(4, 0x0000, ((hibits & 0x02) << 3) | latch[0]);
|
||||
break;
|
||||
|
||||
case 0xF:
|
||||
latch[1] = (value & 0x0F);
|
||||
mmc_bankvrom(4, 0x1000, ((hibits & 0x04) << 2) | latch[1]);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map75_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map75_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map75_intf =
|
||||
{
|
||||
75, /* mapper number */
|
||||
"Konami VRC1", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map75_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map075.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/22 15:03:14 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
111
MCUME_teensy41/teensynofrendo/map078.c
Executable file
111
MCUME_teensy41/teensynofrendo/map078.c
Executable file
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map78.c
|
||||
**
|
||||
** mapper 78 interface
|
||||
** $Id: map078.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* mapper 78: Holy Diver, Cosmo Carrier */
|
||||
/* ($8000-$FFFF) D2-D0 = switch $8000-$BFFF */
|
||||
/* ($8000-$FFFF) D7-D4 = switch PPU $0000-$1FFF */
|
||||
/* ($8000-$FFFF) D3 = switch mirroring */
|
||||
static void map78_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
mmc_bankrom(16, 0x8000, value & 7);
|
||||
mmc_bankvrom(8, 0x0000, (value >> 4) & 0x0F);
|
||||
|
||||
/* Ugh! Same abuse of the 4-screen bit as with Mapper #70 */
|
||||
if (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN)
|
||||
{
|
||||
if (value & 0x08)
|
||||
ppu_mirror(0, 1, 0, 1); /* vert */
|
||||
else
|
||||
ppu_mirror(0, 0, 1, 1); /* horiz */
|
||||
}
|
||||
else
|
||||
{
|
||||
int mirror = (value >> 3) & 1;
|
||||
ppu_mirror(mirror, mirror, mirror, mirror);
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map78_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map78_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map78_intf =
|
||||
{
|
||||
78, /* mapper number */
|
||||
"Mapper 78", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map78_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map078.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.7 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.6 2000/10/22 15:03:14 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
92
MCUME_teensy41/teensynofrendo/map079.c
Executable file
92
MCUME_teensy41/teensynofrendo/map079.c
Executable file
|
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map78.c
|
||||
**
|
||||
** mapper 78 interface
|
||||
** $Id: map079.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
|
||||
/* mapper 79: NINA-03/06 */
|
||||
static void map79_write(uint32 address, uint8 value)
|
||||
{
|
||||
if ((address & 0x5100) == 0x4100)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, (value >> 3) & 1);
|
||||
mmc_bankvrom(8, 0x0000, value & 7);
|
||||
}
|
||||
}
|
||||
|
||||
static void map79_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, 0);
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
}
|
||||
|
||||
static const map_memwrite map79_memwrite[] =
|
||||
{
|
||||
{ 0x4100, 0x5FFF, map79_write }, /* ????? incorrect range ??? */
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map79_intf =
|
||||
{
|
||||
79, /* mapper number */
|
||||
"NINA-03/06", /* mapper name */
|
||||
map79_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map79_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map079.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.4 2000/10/22 19:17:47 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.3 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
232
MCUME_teensy41/teensynofrendo/map085.c
Executable file
232
MCUME_teensy41/teensynofrendo/map085.c
Executable file
|
|
@ -0,0 +1,232 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map85.c
|
||||
**
|
||||
** mapper 85 interface
|
||||
** $Id: map085.c,v 1.3 2001/05/06 01:42:03 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, latch;
|
||||
int wait_state;
|
||||
bool enabled;
|
||||
} irq;
|
||||
|
||||
/* mapper 85: Konami VRC7 */
|
||||
static void map85_write(uint32 address, uint8 value)
|
||||
{
|
||||
uint8 bank = address >> 12;
|
||||
uint8 reg = (address & 0x10) | ((address & 0x08) << 1);
|
||||
|
||||
switch (bank)
|
||||
{
|
||||
case 0x08:
|
||||
if (0x10 == reg)
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
else
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0x09:
|
||||
/* 0x10 & 0x30 should be trapped by sound emulation */
|
||||
mmc_bankrom(8, 0xC000, value);
|
||||
break;
|
||||
|
||||
case 0x0A:
|
||||
if (0x10 == reg)
|
||||
mmc_bankvrom(1, 0x0400, value);
|
||||
else
|
||||
mmc_bankvrom(1, 0x0000, value);
|
||||
break;
|
||||
|
||||
case 0x0B:
|
||||
if (0x10 == reg)
|
||||
mmc_bankvrom(1, 0x0C00, value);
|
||||
else
|
||||
mmc_bankvrom(1, 0x0800, value);
|
||||
break;
|
||||
|
||||
case 0x0C:
|
||||
if (0x10 == reg)
|
||||
mmc_bankvrom(1, 0x1400, value);
|
||||
else
|
||||
mmc_bankvrom(1, 0x1000, value);
|
||||
break;
|
||||
|
||||
case 0x0D:
|
||||
if (0x10 == reg)
|
||||
mmc_bankvrom(1, 0x1C00, value);
|
||||
else
|
||||
mmc_bankvrom(1, 0x1800, value);
|
||||
break;
|
||||
|
||||
case 0x0E:
|
||||
if (0x10 == reg)
|
||||
{
|
||||
irq.latch = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (value & 3)
|
||||
{
|
||||
case 0:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x0F:
|
||||
if (0x10 == reg)
|
||||
{
|
||||
irq.enabled = irq.wait_state;
|
||||
}
|
||||
else
|
||||
{
|
||||
irq.wait_state = value & 0x01;
|
||||
irq.enabled = (value & 0x02) ? true : false;
|
||||
if (true == irq.enabled)
|
||||
irq.counter = irq.latch;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("unhandled vrc7 write: $%02X to $%04X\n", value, address);
|
||||
#endif /* NOFRENDO_DEBUG */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map85_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.enabled)
|
||||
{
|
||||
if (++irq.counter > 0xFF)
|
||||
{
|
||||
irq.counter = irq.latch;
|
||||
nes_irq();
|
||||
|
||||
//return;
|
||||
}
|
||||
//irq.counter++;
|
||||
}
|
||||
}
|
||||
|
||||
static const map_memwrite map85_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map85_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static void map85_init(void)
|
||||
{
|
||||
mmc_bankrom(16, 0x8000, 0);
|
||||
mmc_bankrom(16, 0xC000, MMC_LASTBANK);
|
||||
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
|
||||
irq.counter = irq.latch = 0;
|
||||
irq.wait_state = 0;
|
||||
irq.enabled = false;
|
||||
}
|
||||
|
||||
const mapintf_t map85_intf =
|
||||
{
|
||||
85, /* mapper number */
|
||||
"Konami VRC7", /* mapper name */
|
||||
map85_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map85_hblank, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map85_memwrite, /* memory write structure */
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map085.c,v $
|
||||
** Revision 1.3 2001/05/06 01:42:03 neil
|
||||
** boooo
|
||||
**
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.10 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.9 2000/10/22 15:03:14 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.8 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.7 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.6 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.5 2000/07/23 14:37:21 matt
|
||||
** added a break statement
|
||||
**
|
||||
** Revision 1.4 2000/07/15 23:52:19 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.3 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.2 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.1 2000/07/06 02:47:47 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
85
MCUME_teensy41/teensynofrendo/map087.c
Executable file
85
MCUME_teensy41/teensynofrendo/map087.c
Executable file
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map087.c
|
||||
**
|
||||
** Mapper #87 (16K VROM switch)
|
||||
** Implementation by Firebug
|
||||
** $Id: map087.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
/******************************************/
|
||||
/* Mapper #87 write handler ($6000-$7FFF) */
|
||||
/******************************************/
|
||||
static void map87_write (uint32 address, uint8 value)
|
||||
{
|
||||
/* Within range, address written to is irrelevant */
|
||||
UNUSED (address);
|
||||
|
||||
/* Very simple: 8K CHR page is selected by D1 */
|
||||
if (value & 0x02) mmc_bankvrom (8, 0x0000, 0x01);
|
||||
else mmc_bankvrom (8, 0x0000, 0x00);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map87_memwrite [] =
|
||||
{
|
||||
{ 0x6000, 0x7FFF, map87_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map87_intf =
|
||||
{
|
||||
87, /* Mapper number */
|
||||
"16K VROM switch", /* Mapper name */
|
||||
NULL, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
NULL, /* HBlank callback */
|
||||
NULL, /* Get state (SNSS) */
|
||||
NULL, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map87_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map087.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/30 06:34:44 firebug
|
||||
** Initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
77
MCUME_teensy41/teensynofrendo/map093.c
Executable file
77
MCUME_teensy41/teensynofrendo/map093.c
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map93.c
|
||||
**
|
||||
** mapper 93 interface
|
||||
** $Id: map093.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
static void map93_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
/* ($8000-$FFFF) D7-D4 = switch $8000-$BFFF D0: mirror */
|
||||
mmc_bankrom(16, 0x8000, value >> 4);
|
||||
|
||||
if (value & 1)
|
||||
ppu_mirror(0, 1, 0, 1); /* vert */
|
||||
else
|
||||
ppu_mirror(0, 0, 1, 1); /* horiz */
|
||||
}
|
||||
|
||||
static const map_memwrite map93_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map93_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map93_intf =
|
||||
{
|
||||
93, /* mapper number */
|
||||
"Mapper 93", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map93_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map093.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/12/11 12:33:48 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
87
MCUME_teensy41/teensynofrendo/map094.c
Executable file
87
MCUME_teensy41/teensynofrendo/map094.c
Executable file
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map94.c
|
||||
**
|
||||
** mapper 94 interface
|
||||
** $Id: map094.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 94: Senjou no Ookami */
|
||||
static void map94_write(uint32 address, uint8 value)
|
||||
{
|
||||
UNUSED(address);
|
||||
|
||||
/* ($8000-$FFFF) D7-D2 = switch $8000-$BFFF */
|
||||
mmc_bankrom(16, 0x8000, value >> 2);
|
||||
}
|
||||
|
||||
static const map_memwrite map94_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map94_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map94_intf =
|
||||
{
|
||||
94, /* mapper number */
|
||||
"Mapper 94", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map94_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map094.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.5 2000/10/22 19:17:47 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.4 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.3 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
90
MCUME_teensy41/teensynofrendo/map099.c
Executable file
90
MCUME_teensy41/teensynofrendo/map099.c
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map99.c
|
||||
**
|
||||
** mapper 99 interface
|
||||
** $Id: map099.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
|
||||
/* Switch VROM for VS games */
|
||||
static void map99_vromswitch(uint8 value)
|
||||
{
|
||||
int bank = (value & 0x04) >> 2;
|
||||
mmc_bankvrom(8, 0x0000, bank);
|
||||
}
|
||||
|
||||
/* mapper 99: VS. System */
|
||||
static const void map99_init(void)
|
||||
{
|
||||
ppu_mirror(0, 1, 2, 3);
|
||||
ppu_setvromswitch(map99_vromswitch);
|
||||
}
|
||||
|
||||
const mapintf_t map99_intf =
|
||||
{
|
||||
99, /* mapper number */
|
||||
"VS. System", /* mapper name */
|
||||
map99_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
NULL, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map099.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/22 19:17:47 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.5 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.4 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/05 05:05:18 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
140
MCUME_teensy41/teensynofrendo/map160.c
Executable file
140
MCUME_teensy41/teensynofrendo/map160.c
Executable file
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map160.c
|
||||
**
|
||||
** mapper 160 interface
|
||||
** $Id: map160.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "nes.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
bool enabled, expired;
|
||||
int counter;
|
||||
int latch_c005, latch_c003;
|
||||
} irq;
|
||||
|
||||
static void map160_write(uint32 address, uint8 value)
|
||||
{
|
||||
if (address >= 0x8000 && address <= 0x8003)
|
||||
{
|
||||
mmc_bankrom(8, 0x8000 + 0x2000 * (address & 3), value);
|
||||
}
|
||||
else if (address >= 0x9000 && address <= 0x9007)
|
||||
{
|
||||
mmc_bankvrom(1, 0x400 * (address & 7), value);
|
||||
}
|
||||
else if (0xC002 == address)
|
||||
{
|
||||
irq.enabled = false;
|
||||
irq.latch_c005 = irq.latch_c003;
|
||||
}
|
||||
else if (0xC003 == address)
|
||||
{
|
||||
if (false == irq.expired)
|
||||
{
|
||||
irq.counter = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
irq.expired = false;
|
||||
irq.enabled = true;
|
||||
irq.counter = irq.latch_c005;
|
||||
}
|
||||
}
|
||||
else if (0xC005 == address)
|
||||
{
|
||||
irq.latch_c005 = value;
|
||||
irq.counter = value;
|
||||
}
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
else
|
||||
{
|
||||
log_printf("mapper 160: untrapped write $%02X to $%04X\n", value, address);
|
||||
}
|
||||
#endif /* NOFRENDO_DEBUG */
|
||||
}
|
||||
|
||||
static void map160_hblank(int vblank)
|
||||
{
|
||||
if (!vblank)
|
||||
{
|
||||
if (ppu_enabled() && irq.enabled)
|
||||
{
|
||||
if (0 == irq.counter && false == irq.expired)
|
||||
{
|
||||
irq.expired = true;
|
||||
nes_irq();
|
||||
}
|
||||
else
|
||||
{
|
||||
irq.counter--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void map160_init(void)
|
||||
{
|
||||
irq.enabled = false;
|
||||
irq.expired = false;
|
||||
irq.counter = 0;
|
||||
irq.latch_c003 = irq.latch_c005 = 0;
|
||||
}
|
||||
|
||||
static const map_memwrite map160_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map160_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map160_intf =
|
||||
{
|
||||
160, /* mapper number */
|
||||
"Aladdin (pirate)", /* mapper name */
|
||||
map160_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
map160_hblank, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map160_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map160.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/27 04:24:46 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
114
MCUME_teensy41/teensynofrendo/map229.c
Executable file
114
MCUME_teensy41/teensynofrendo/map229.c
Executable file
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map229.c
|
||||
**
|
||||
** Mapper #229 (31 in 1)
|
||||
** Implementation by Firebug
|
||||
** Mapper information courtesy of Mark Knibbs
|
||||
** $Id: map229.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
**
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
|
||||
/************************/
|
||||
/* Mapper #229: 31 in 1 */
|
||||
/************************/
|
||||
static void map229_init (void)
|
||||
{
|
||||
/* On reset, PRG is set to first 32K and CHR to first 8K */
|
||||
mmc_bankrom (32, 0x8000, 0x00);
|
||||
mmc_bankvrom (8, 0x0000, 0x00);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
/*******************************************/
|
||||
/* Mapper #229 write handler ($8000-$FFFF) */
|
||||
/*******************************************/
|
||||
static void map229_write (uint32 address, uint8 value)
|
||||
{
|
||||
/* Value written is irrelevant */
|
||||
UNUSED (value);
|
||||
|
||||
/* A4-A0 sets 8K CHR page */
|
||||
mmc_bankvrom (8, 0x0000, (uint8) (address & 0x1F));
|
||||
|
||||
/* If A4-A1 are all low then select the first 32K, */
|
||||
/* otherwise select a 16K bank at both $8000 and $C000 */
|
||||
if ((address & 0x1E) == 0x00)
|
||||
{
|
||||
mmc_bankrom (32, 0x8000, 0x00);
|
||||
}
|
||||
else
|
||||
{
|
||||
mmc_bankrom (16, 0x8000, (uint8) (address & 0x1F));
|
||||
mmc_bankrom (16, 0xC000, (uint8) (address & 0x1F));
|
||||
}
|
||||
|
||||
/* A5: mirroring (low = vertical, high = horizontal) */
|
||||
if (address & 0x20) ppu_mirror(0, 0, 1, 1);
|
||||
else ppu_mirror(0, 1, 0, 1);
|
||||
|
||||
/* Done */
|
||||
return;
|
||||
}
|
||||
|
||||
static const map_memwrite map229_memwrite [] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map229_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map229_intf =
|
||||
{
|
||||
229, /* Mapper number */
|
||||
"31 in 1 (bootleg)", /* Mapper name */
|
||||
map229_init, /* Initialization routine */
|
||||
NULL, /* VBlank callback */
|
||||
NULL, /* HBlank callback */
|
||||
NULL, /* Get state (SNSS) */
|
||||
NULL, /* Set state (SNSS) */
|
||||
NULL, /* Memory read structure */
|
||||
map229_memwrite, /* Memory write structure */
|
||||
NULL /* External sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map229.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1 2001/04/27 10:57:41 neil
|
||||
** wheee
|
||||
**
|
||||
** Revision 1.1 2000/12/30 06:34:31 firebug
|
||||
** Initial revision
|
||||
**
|
||||
**
|
||||
*/
|
||||
95
MCUME_teensy41/teensynofrendo/map231.c
Executable file
95
MCUME_teensy41/teensynofrendo/map231.c
Executable file
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map231.c
|
||||
**
|
||||
** mapper 231 interface
|
||||
** $Id: map231.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper 231: NINA-07, used in Wally Bear and the NO! Gang */
|
||||
|
||||
static void map231_init(void)
|
||||
{
|
||||
mmc_bankrom(32, 0x8000, MMC_LASTBANK);
|
||||
}
|
||||
|
||||
static void map231_write(uint32 address, uint8 value)
|
||||
{
|
||||
int bank, vbank;
|
||||
UNUSED(address);
|
||||
|
||||
bank = ((value & 0x80) >> 5) | (value & 0x03);
|
||||
vbank = (value >> 4) & 0x07;
|
||||
|
||||
mmc_bankrom(32, 0x8000, bank);
|
||||
mmc_bankvrom(8, 0x0000, vbank);
|
||||
}
|
||||
|
||||
static const map_memwrite map231_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map231_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const mapintf_t map231_intf =
|
||||
{
|
||||
231, /* mapper number */
|
||||
"NINA-07", /* mapper name */
|
||||
map231_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map231_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: map231.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.4 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.3 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.2 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.1 2000/07/11 03:14:18 melanson
|
||||
** Initial commit for mappers 16, 34, and 231
|
||||
**
|
||||
**
|
||||
*/
|
||||
452
MCUME_teensy41/teensynofrendo/mapvrc.c
Executable file
452
MCUME_teensy41/teensynofrendo/mapvrc.c
Executable file
|
|
@ -0,0 +1,452 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** map_vrc.c
|
||||
**
|
||||
** VRC mapper interface
|
||||
** $Id: mapvrc.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
|
||||
#define VRC_VBANK(bank, value, high) \
|
||||
{ \
|
||||
if ((high)) \
|
||||
highnybbles[(bank)] = (value) & 0x0F; \
|
||||
else \
|
||||
lownybbles[(bank)] = (value) & 0x0F; \
|
||||
mmc_bankvrom(1, (bank) << 10, (highnybbles[(bank)] << 4)+lownybbles[(bank)]); \
|
||||
}
|
||||
|
||||
static struct
|
||||
{
|
||||
int counter, enabled;
|
||||
int latch, wait_state;
|
||||
} irq;
|
||||
|
||||
static int select_c000 = 0;
|
||||
static uint8 lownybbles[8];
|
||||
static uint8 highnybbles[8];
|
||||
|
||||
static void vrc_init(void)
|
||||
{
|
||||
irq.counter = irq.enabled = 0;
|
||||
irq.latch = irq.wait_state = 0;
|
||||
}
|
||||
|
||||
static void map21_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x8000:
|
||||
if (select_c000)
|
||||
mmc_bankrom(8, 0xC000,value);
|
||||
else
|
||||
mmc_bankrom(8, 0x8000,value);
|
||||
break;
|
||||
|
||||
case 0x9000:
|
||||
switch (value & 3)
|
||||
{
|
||||
case 0:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x9002: select_c000=(value&0x02)>>1; break;
|
||||
case 0xA000: mmc_bankrom(8, 0xA000,value); break;
|
||||
|
||||
case 0xB000: VRC_VBANK(0,value,0); break;
|
||||
case 0xB002:
|
||||
case 0xB040: VRC_VBANK(0,value,1); break;
|
||||
case 0xB001:
|
||||
case 0xB004:
|
||||
case 0xB080: VRC_VBANK(1,value,0); break;
|
||||
case 0xB003:
|
||||
case 0xB006:
|
||||
case 0xB0C0: VRC_VBANK(1,value,1); break;
|
||||
case 0xC000: VRC_VBANK(2,value,0); break;
|
||||
case 0xC002:
|
||||
case 0xC040: VRC_VBANK(2,value,1); break;
|
||||
case 0xC001:
|
||||
case 0xC004:
|
||||
case 0xC080: VRC_VBANK(3,value,0); break;
|
||||
case 0xC003:
|
||||
case 0xC006:
|
||||
case 0xC0C0: VRC_VBANK(3,value,1); break;
|
||||
case 0xD000: VRC_VBANK(4,value,0); break;
|
||||
case 0xD002:
|
||||
case 0xD040: VRC_VBANK(4,value,1); break;
|
||||
case 0xD001:
|
||||
case 0xD004:
|
||||
case 0xD080: VRC_VBANK(5,value,0); break;
|
||||
case 0xD003:
|
||||
case 0xD006:
|
||||
case 0xD0C0: VRC_VBANK(5,value,1); break;
|
||||
case 0xE000: VRC_VBANK(6,value,0); break;
|
||||
case 0xE002:
|
||||
case 0xE040: VRC_VBANK(6,value,1); break;
|
||||
case 0xE001:
|
||||
case 0xE004:
|
||||
case 0xE080: VRC_VBANK(7,value,0); break;
|
||||
case 0xE003:
|
||||
case 0xE006:
|
||||
case 0xE0C0: VRC_VBANK(7,value,1); break;
|
||||
|
||||
case 0xF000:
|
||||
irq.latch &= 0xF0;
|
||||
irq.latch |= (value & 0x0F);
|
||||
break;
|
||||
case 0xF002:
|
||||
case 0xF040:
|
||||
irq.latch &= 0x0F;
|
||||
irq.latch |= ((value & 0x0F) << 4);
|
||||
break;
|
||||
case 0xF004:
|
||||
case 0xF001:
|
||||
case 0xF080:
|
||||
irq.enabled = (value >> 1) & 0x01;
|
||||
irq.wait_state = value & 0x01;
|
||||
irq.counter = irq.latch;
|
||||
break;
|
||||
case 0xF006:
|
||||
case 0xF003:
|
||||
case 0xF0C0:
|
||||
irq.enabled = irq.wait_state;
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("wrote $%02X to $%04X", value, address);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map22_write(uint32 address, uint8 value)
|
||||
{
|
||||
int reg = address >> 12;
|
||||
|
||||
switch (reg)
|
||||
{
|
||||
case 0x8:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0xA:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 0x9:
|
||||
switch (value & 3)
|
||||
{
|
||||
case 0:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xB:
|
||||
case 0xC:
|
||||
case 0xD:
|
||||
case 0xE:
|
||||
{
|
||||
int loc = (((reg - 0xB) << 1) + (address & 1)) << 10;
|
||||
mmc_bankvrom(1, loc, value >> 1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void map23_write(uint32 address, uint8 value)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x8000:
|
||||
case 0x8FFF:
|
||||
mmc_bankrom(8, 0x8000, value);
|
||||
break;
|
||||
|
||||
case 0xA000:
|
||||
case 0xAFFF:
|
||||
mmc_bankrom(8, 0xA000, value);
|
||||
break;
|
||||
|
||||
case 0x9000:
|
||||
case 0x9004:
|
||||
case 0x9008:
|
||||
switch(value & 3)
|
||||
{
|
||||
case 0:
|
||||
ppu_mirror(0, 1, 0, 1); /* vertical */
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ppu_mirror(0, 0, 1, 1); /* horizontal */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ppu_mirror(0, 0, 0, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ppu_mirror(1, 1, 1, 1);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xB000: VRC_VBANK(0,value,0); break;
|
||||
case 0xB001:
|
||||
case 0xB004: VRC_VBANK(0,value,1); break;
|
||||
case 0xB002:
|
||||
case 0xB008: VRC_VBANK(1,value,0); break;
|
||||
case 0xB003:
|
||||
case 0xB00C: VRC_VBANK(1,value,1); break;
|
||||
case 0xC000: VRC_VBANK(2,value,0); break;
|
||||
case 0xC001:
|
||||
case 0xC004: VRC_VBANK(2,value,1); break;
|
||||
case 0xC002:
|
||||
case 0xC008: VRC_VBANK(3,value,0); break;
|
||||
case 0xC003:
|
||||
case 0xC00C: VRC_VBANK(3,value,1); break;
|
||||
case 0xD000: VRC_VBANK(4,value,0); break;
|
||||
case 0xD001:
|
||||
case 0xD004: VRC_VBANK(4,value,1); break;
|
||||
case 0xD002:
|
||||
case 0xD008: VRC_VBANK(5,value,0); break;
|
||||
case 0xD003:
|
||||
case 0xD00C: VRC_VBANK(5,value,1); break;
|
||||
case 0xE000: VRC_VBANK(6,value,0); break;
|
||||
case 0xE001:
|
||||
case 0xE004: VRC_VBANK(6,value,1); break;
|
||||
case 0xE002:
|
||||
case 0xE008: VRC_VBANK(7,value,0); break;
|
||||
case 0xE003:
|
||||
case 0xE00C: VRC_VBANK(7,value,1); break;
|
||||
|
||||
case 0xF000:
|
||||
irq.latch &= 0xF0;
|
||||
irq.latch |= (value & 0x0F);
|
||||
break;
|
||||
|
||||
case 0xF004:
|
||||
irq.latch &= 0x0F;
|
||||
irq.latch |= ((value & 0x0F) << 4);
|
||||
break;
|
||||
|
||||
case 0xF008:
|
||||
irq.enabled = (value >> 1) & 0x01;
|
||||
irq.wait_state = value & 0x01;
|
||||
irq.counter = irq.latch;
|
||||
break;
|
||||
|
||||
case 0xF00C:
|
||||
irq.enabled = irq.wait_state;
|
||||
break;
|
||||
|
||||
default:
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
log_printf("wrote $%02X to $%04X",value,address);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void vrc_hblank(int vblank)
|
||||
{
|
||||
UNUSED(vblank);
|
||||
|
||||
if (irq.enabled)
|
||||
{
|
||||
if (256 == ++irq.counter)
|
||||
{
|
||||
irq.counter = irq.latch;
|
||||
nes_irq();
|
||||
//irq.enabled = false;
|
||||
irq.enabled = irq.wait_state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static map_memwrite map21_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map21_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static map_memwrite map22_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map22_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static map_memwrite map23_memwrite[] =
|
||||
{
|
||||
{ 0x8000, 0xFFFF, map23_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static void map21_getstate(SnssMapperBlock *state)
|
||||
{
|
||||
state->extraData.mapper21.irqCounter = irq.counter;
|
||||
state->extraData.mapper21.irqCounterEnabled = irq.enabled;
|
||||
}
|
||||
|
||||
static void map21_setstate(SnssMapperBlock *state)
|
||||
{
|
||||
irq.counter = state->extraData.mapper21.irqCounter;
|
||||
irq.enabled = state->extraData.mapper21.irqCounterEnabled;
|
||||
}
|
||||
|
||||
const mapintf_t map21_intf =
|
||||
{
|
||||
21, /* mapper number */
|
||||
"Konami VRC4 A", /* mapper name */
|
||||
vrc_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
vrc_hblank, /* hblank callback */
|
||||
map21_getstate, /* get state (snss) */
|
||||
map21_setstate, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map21_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
const mapintf_t map22_intf =
|
||||
{
|
||||
22, /* mapper number */
|
||||
"Konami VRC2 A", /* mapper name */
|
||||
vrc_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
NULL, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map22_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
const mapintf_t map23_intf =
|
||||
{
|
||||
23, /* mapper number */
|
||||
"Konami VRC2 B", /* mapper name */
|
||||
vrc_init, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
vrc_hblank, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map23_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
const mapintf_t map25_intf =
|
||||
{
|
||||
25, /* mapper number */
|
||||
"Konami VRC4 B", /* mapper name */
|
||||
NULL, /* init routine */
|
||||
NULL, /* vblank callback */
|
||||
vrc_hblank, /* hblank callback */
|
||||
NULL, /* get state (snss) */
|
||||
NULL, /* set state (snss) */
|
||||
NULL, /* memory read structure */
|
||||
map21_memwrite, /* memory write structure */
|
||||
NULL /* external sound device */
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: mapvrc.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:33 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.10 2000/10/22 19:17:46 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.9 2000/10/22 15:03:14 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.8 2000/10/21 19:33:38 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.7 2000/10/10 13:58:17 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.6 2000/08/16 02:50:11 matt
|
||||
** random mapper cleanups
|
||||
**
|
||||
** Revision 1.5 2000/07/15 23:52:20 matt
|
||||
** rounded out a bunch more mapper interfaces
|
||||
**
|
||||
** Revision 1.4 2000/07/10 13:51:25 matt
|
||||
** using generic nes_irq() routine now
|
||||
**
|
||||
** Revision 1.3 2000/07/10 05:29:03 matt
|
||||
** cleaned up some mirroring issues
|
||||
**
|
||||
** Revision 1.2 2000/07/06 02:48:43 matt
|
||||
** clearly labelled structure members
|
||||
**
|
||||
** Revision 1.1 2000/07/06 01:01:56 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
447
MCUME_teensy41/teensynofrendo/mmc5_snd.c
Executable file
447
MCUME_teensy41/teensynofrendo/mmc5_snd.c
Executable file
|
|
@ -0,0 +1,447 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** mmc5_snd.c
|
||||
**
|
||||
** Nintendo MMC5 sound emulation
|
||||
** $Id: mmc5_snd.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "mmc5_snd.h"
|
||||
#include "nes_apu.h"
|
||||
|
||||
/* TODO: encapsulate apu/mmc5 rectangle */
|
||||
|
||||
#define APU_OVERSAMPLE
|
||||
#define APU_VOLUME_DECAY(x) ((x) -= ((x) >> 7))
|
||||
|
||||
/* look up table madness */
|
||||
static int32 decay_lut[16];
|
||||
static int vbl_lut[32];
|
||||
|
||||
/* various sound constants for sound emulation */
|
||||
/* vblank length table used for rectangles, triangle, noise */
|
||||
static const uint8 vbl_length[32] =
|
||||
{
|
||||
5, 127, 10, 1, 19, 2, 40, 3, 80, 4, 30, 5, 7, 6, 13, 7,
|
||||
6, 8, 12, 9, 24, 10, 48, 11, 96, 12, 36, 13, 8, 14, 16, 15
|
||||
};
|
||||
|
||||
/* ratios of pos/neg pulse for rectangle waves
|
||||
** 2/16 = 12.5%, 4/16 = 25%, 8/16 = 50%, 12/16 = 75%
|
||||
** (4-bit adder in rectangles, hence the 16)
|
||||
*/
|
||||
static const int duty_lut[4] =
|
||||
{
|
||||
2, 4, 8, 12
|
||||
};
|
||||
|
||||
|
||||
#define MMC5_WRA0 0x5000
|
||||
#define MMC5_WRA1 0x5001
|
||||
#define MMC5_WRA2 0x5002
|
||||
#define MMC5_WRA3 0x5003
|
||||
#define MMC5_WRB0 0x5004
|
||||
#define MMC5_WRB1 0x5005
|
||||
#define MMC5_WRB2 0x5006
|
||||
#define MMC5_WRB3 0x5007
|
||||
#define MMC5_SMASK 0x5015
|
||||
|
||||
typedef struct mmc5rectangle_s
|
||||
{
|
||||
uint8 regs[4];
|
||||
|
||||
bool enabled;
|
||||
|
||||
float accum;
|
||||
int32 freq;
|
||||
int32 output_vol;
|
||||
bool fixed_envelope;
|
||||
bool holdnote;
|
||||
uint8 volume;
|
||||
|
||||
int32 env_phase;
|
||||
int32 env_delay;
|
||||
uint8 env_vol;
|
||||
|
||||
int vbl_length;
|
||||
uint8 adder;
|
||||
int duty_flip;
|
||||
} mmc5rectangle_t;
|
||||
|
||||
typedef struct mmc5dac_s
|
||||
{
|
||||
int32 output;
|
||||
bool enabled;
|
||||
} mmc5dac_t;
|
||||
|
||||
|
||||
static struct
|
||||
{
|
||||
float incsize;
|
||||
uint8 mul[2];
|
||||
mmc5rectangle_t rect[2];
|
||||
mmc5dac_t dac;
|
||||
} mmc5;
|
||||
|
||||
|
||||
#define MMC5_RECTANGLE_OUTPUT chan->output_vol
|
||||
static int32 mmc5_rectangle(mmc5rectangle_t *chan)
|
||||
{
|
||||
int32 output;
|
||||
|
||||
#ifdef APU_OVERSAMPLE
|
||||
int num_times;
|
||||
int32 total;
|
||||
#endif /* APU_OVERSAMPLE */
|
||||
|
||||
/* reg0: 0-3=volume, 4=envelope, 5=hold, 6-7=duty cycle
|
||||
** reg1: 0-2=sweep shifts, 3=sweep inc/dec, 4-6=sweep length, 7=sweep on
|
||||
** reg2: 8 bits of freq
|
||||
** reg3: 0-2=high freq, 7-4=vbl length counter
|
||||
*/
|
||||
|
||||
APU_VOLUME_DECAY(chan->output_vol);
|
||||
|
||||
if (false == chan->enabled || 0 == chan->vbl_length)
|
||||
return MMC5_RECTANGLE_OUTPUT;
|
||||
|
||||
/* vbl length counter */
|
||||
if (false == chan->holdnote)
|
||||
chan->vbl_length--;
|
||||
|
||||
/* envelope decay at a rate of (env_delay + 1) / 240 secs */
|
||||
chan->env_phase -= 4; /* 240/60 */
|
||||
while (chan->env_phase < 0)
|
||||
{
|
||||
chan->env_phase += chan->env_delay;
|
||||
|
||||
if (chan->holdnote)
|
||||
chan->env_vol = (chan->env_vol + 1) & 0x0F;
|
||||
else if (chan->env_vol < 0x0F)
|
||||
chan->env_vol++;
|
||||
}
|
||||
|
||||
if (chan->freq < 4)
|
||||
return MMC5_RECTANGLE_OUTPUT;
|
||||
|
||||
chan->accum -= mmc5.incsize; /* # of cycles per sample */
|
||||
if (chan->accum >= 0)
|
||||
return MMC5_RECTANGLE_OUTPUT;
|
||||
|
||||
#ifdef APU_OVERSAMPLE
|
||||
num_times = total = 0;
|
||||
|
||||
if (chan->fixed_envelope)
|
||||
output = chan->volume << 8; /* fixed volume */
|
||||
else
|
||||
output = (chan->env_vol ^ 0x0F) << 8;
|
||||
#endif
|
||||
|
||||
while (chan->accum < 0)
|
||||
{
|
||||
chan->accum += chan->freq;
|
||||
chan->adder = (chan->adder + 1) & 0x0F;
|
||||
|
||||
#ifdef APU_OVERSAMPLE
|
||||
if (chan->adder < chan->duty_flip)
|
||||
total += output;
|
||||
else
|
||||
total -= output;
|
||||
|
||||
num_times++;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef APU_OVERSAMPLE
|
||||
chan->output_vol = total / num_times;
|
||||
#else
|
||||
if (chan->fixed_envelope)
|
||||
output = chan->volume << 8; /* fixed volume */
|
||||
else
|
||||
output = (chan->env_vol ^ 0x0F) << 8;
|
||||
|
||||
if (0 == chan->adder)
|
||||
chan->output_vol = output;
|
||||
else if (chan->adder == chan->duty_flip)
|
||||
chan->output_vol = -output;
|
||||
#endif
|
||||
|
||||
return MMC5_RECTANGLE_OUTPUT;
|
||||
}
|
||||
|
||||
static uint8 mmc5_read(uint32 address)
|
||||
{
|
||||
uint32 retval;
|
||||
|
||||
retval = (uint32) (mmc5.mul[0] * mmc5.mul[1]);
|
||||
|
||||
switch (address)
|
||||
{
|
||||
case 0x5205:
|
||||
return (uint8) retval;
|
||||
|
||||
case 0x5206:
|
||||
return (uint8) (retval >> 8);
|
||||
|
||||
default:
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
/* mix vrcvi sound channels together */
|
||||
static int32 mmc5_process(void)
|
||||
{
|
||||
int32 accum;
|
||||
|
||||
accum = mmc5_rectangle(&mmc5.rect[0]);
|
||||
accum += mmc5_rectangle(&mmc5.rect[1]);
|
||||
if (mmc5.dac.enabled)
|
||||
accum += mmc5.dac.output;
|
||||
|
||||
return accum;
|
||||
}
|
||||
|
||||
/* write to registers */
|
||||
static void mmc5_write(uint32 address, uint8 value)
|
||||
{
|
||||
int chan;
|
||||
|
||||
switch (address)
|
||||
{
|
||||
/* rectangles */
|
||||
case MMC5_WRA0:
|
||||
case MMC5_WRB0:
|
||||
chan = (address & 4) ? 1 : 0;
|
||||
mmc5.rect[chan].regs[0] = value;
|
||||
|
||||
mmc5.rect[chan].volume = value & 0x0F;
|
||||
mmc5.rect[chan].env_delay = decay_lut[value & 0x0F];
|
||||
mmc5.rect[chan].holdnote = (value & 0x20) ? true : false;
|
||||
mmc5.rect[chan].fixed_envelope = (value & 0x10) ? true : false;
|
||||
mmc5.rect[chan].duty_flip = duty_lut[value >> 6];
|
||||
break;
|
||||
|
||||
case MMC5_WRA1:
|
||||
case MMC5_WRB1:
|
||||
break;
|
||||
|
||||
case MMC5_WRA2:
|
||||
case MMC5_WRB2:
|
||||
chan = (address & 4) ? 1 : 0;
|
||||
mmc5.rect[chan].regs[2] = value;
|
||||
if (mmc5.rect[chan].enabled)
|
||||
mmc5.rect[chan].freq = (((mmc5.rect[chan].regs[3] & 7) << 8) + value) + 1;
|
||||
break;
|
||||
|
||||
case MMC5_WRA3:
|
||||
case MMC5_WRB3:
|
||||
chan = (address & 4) ? 1 : 0;
|
||||
mmc5.rect[chan].regs[3] = value;
|
||||
|
||||
if (mmc5.rect[chan].enabled)
|
||||
{
|
||||
mmc5.rect[chan].vbl_length = vbl_lut[value >> 3];
|
||||
mmc5.rect[chan].env_vol = 0;
|
||||
mmc5.rect[chan].freq = (((value & 7) << 8) + mmc5.rect[chan].regs[2]) + 1;
|
||||
mmc5.rect[chan].adder = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case MMC5_SMASK:
|
||||
if (value & 0x01)
|
||||
{
|
||||
mmc5.rect[0].enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mmc5.rect[0].enabled = false;
|
||||
mmc5.rect[0].vbl_length = 0;
|
||||
}
|
||||
|
||||
if (value & 0x02)
|
||||
{
|
||||
mmc5.rect[1].enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mmc5.rect[1].enabled = false;
|
||||
mmc5.rect[1].vbl_length = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 0x5010:
|
||||
if (value & 0x01)
|
||||
mmc5.dac.enabled = true;
|
||||
else
|
||||
mmc5.dac.enabled = false;
|
||||
break;
|
||||
|
||||
case 0x5011:
|
||||
mmc5.dac.output = (value ^ 0x80) << 8;
|
||||
break;
|
||||
|
||||
case 0x5205:
|
||||
mmc5.mul[0] = value;
|
||||
break;
|
||||
|
||||
case 0x5206:
|
||||
mmc5.mul[1] = value;
|
||||
break;
|
||||
|
||||
case 0x5114:
|
||||
case 0x5115:
|
||||
/* ???? */
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* reset state of vrcvi sound channels */
|
||||
static void mmc5_reset(void)
|
||||
{
|
||||
int i;
|
||||
apu_t apu;
|
||||
|
||||
|
||||
/* get the phase period from the apu */
|
||||
apu_getcontext(&apu);
|
||||
mmc5.incsize = apu.cycle_rate;
|
||||
|
||||
for (i = 0x5000; i < 0x5008; i++)
|
||||
mmc5_write(i, 0);
|
||||
|
||||
mmc5_write(0x5010, 0);
|
||||
mmc5_write(0x5011, 0);
|
||||
}
|
||||
|
||||
static int mmc5_init(void)
|
||||
{
|
||||
int i, num_samples;
|
||||
apu_t apu;
|
||||
|
||||
apu_getcontext(&apu);
|
||||
num_samples = apu.num_samples;
|
||||
|
||||
/* lut used for enveloping and frequency sweeps */
|
||||
for (i = 0; i < 16; i++)
|
||||
decay_lut[i] = num_samples * (i + 1);
|
||||
|
||||
/* used for note length, based on vblanks and size of audio buffer */
|
||||
for (i = 0; i < 32; i++)
|
||||
vbl_lut[i] = vbl_length[i] * num_samples;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const apu_memread mmc5_memread[] =
|
||||
{
|
||||
{ 0x5205, 0x5206, mmc5_read },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
static const apu_memwrite mmc5_memwrite[] =
|
||||
{
|
||||
{ 0x5000, 0x5015, mmc5_write },
|
||||
{ 0x5114, 0x5115, mmc5_write },
|
||||
{ 0x5205, 0x5206, mmc5_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
const apuext_t mmc5_ext =
|
||||
{
|
||||
mmc5_init,
|
||||
NULL, /* no shutdown */
|
||||
mmc5_reset,
|
||||
mmc5_process,
|
||||
mmc5_memread,
|
||||
mmc5_memwrite
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: mmc5_snd.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/13 00:57:08 matt
|
||||
** doesn't look as nasty now
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:59 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.16 2000/10/17 11:56:42 matt
|
||||
** selectable apu base frequency
|
||||
**
|
||||
** Revision 1.15 2000/10/10 14:04:29 matt
|
||||
** make way for bjarne
|
||||
**
|
||||
** Revision 1.14 2000/10/10 13:58:18 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.13 2000/10/08 17:50:18 matt
|
||||
** appears $5114/$5115 do something
|
||||
**
|
||||
** Revision 1.12 2000/10/03 11:56:20 matt
|
||||
** better support for optional sound ext routines
|
||||
**
|
||||
** Revision 1.11 2000/09/27 12:26:03 matt
|
||||
** changed sound accumulators back to floats
|
||||
**
|
||||
** Revision 1.10 2000/09/15 13:38:40 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.9 2000/09/15 04:58:07 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.8 2000/07/30 04:32:59 matt
|
||||
** no more apu_getcyclerate hack
|
||||
**
|
||||
** Revision 1.7 2000/07/17 01:52:31 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.6 2000/07/04 04:51:41 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.5 2000/07/03 02:18:53 matt
|
||||
** much better external module exporting
|
||||
**
|
||||
** Revision 1.4 2000/06/28 22:03:51 matt
|
||||
** fixed stupid oversight
|
||||
**
|
||||
** Revision 1.3 2000/06/20 20:46:58 matt
|
||||
** minor cleanups
|
||||
**
|
||||
** Revision 1.2 2000/06/20 04:06:16 matt
|
||||
** migrated external sound definition to apu module
|
||||
**
|
||||
** Revision 1.1 2000/06/20 00:06:47 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
70
MCUME_teensy41/teensynofrendo/mmc5_snd.h
Normal file
70
MCUME_teensy41/teensynofrendo/mmc5_snd.h
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** mmc5_snd.h
|
||||
**
|
||||
** Nintendo MMC5 sound emulation header
|
||||
** $Id: mmc5_snd.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _MMC5_SND_H_
|
||||
#define _MMC5_SND_H_
|
||||
|
||||
#include "nes_apu.h"
|
||||
|
||||
extern const apuext_t mmc5_ext;
|
||||
|
||||
#endif /* !_MMC5_SND_H_ */
|
||||
|
||||
/*
|
||||
** $Log: mmc5_snd.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/13 00:57:08 matt
|
||||
** doesn't look as nasty now
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:59 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/10/10 13:58:18 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.5 2000/09/27 12:26:03 matt
|
||||
** changed sound accumulators back to floats
|
||||
**
|
||||
** Revision 1.4 2000/09/15 13:38:40 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.3 2000/07/17 01:52:31 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.2 2000/06/20 04:06:16 matt
|
||||
** migrated external sound definition to apu module
|
||||
**
|
||||
** Revision 1.1 2000/06/20 00:06:47 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
122
MCUME_teensy41/teensynofrendo/mmclist.c
Executable file
122
MCUME_teensy41/teensynofrendo/mmclist.c
Executable file
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** mmclist.c
|
||||
**
|
||||
** list of all mapper interfaces
|
||||
** $Id: mmclist.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_mmc.h"
|
||||
|
||||
/* mapper interfaces */
|
||||
extern mapintf_t map0_intf;
|
||||
extern mapintf_t map1_intf;
|
||||
extern mapintf_t map2_intf;
|
||||
extern mapintf_t map3_intf;
|
||||
extern mapintf_t map4_intf;
|
||||
extern mapintf_t map5_intf;
|
||||
extern mapintf_t map7_intf;
|
||||
extern mapintf_t map8_intf;
|
||||
extern mapintf_t map9_intf;
|
||||
extern mapintf_t map11_intf;
|
||||
extern mapintf_t map15_intf;
|
||||
extern mapintf_t map16_intf;
|
||||
extern mapintf_t map18_intf;
|
||||
extern mapintf_t map19_intf;
|
||||
extern mapintf_t map21_intf;
|
||||
extern mapintf_t map22_intf;
|
||||
extern mapintf_t map23_intf;
|
||||
extern mapintf_t map24_intf;
|
||||
extern mapintf_t map25_intf;
|
||||
extern mapintf_t map32_intf;
|
||||
extern mapintf_t map33_intf;
|
||||
extern mapintf_t map34_intf;
|
||||
extern mapintf_t map40_intf;
|
||||
extern mapintf_t map64_intf;
|
||||
extern mapintf_t map65_intf;
|
||||
extern mapintf_t map66_intf;
|
||||
extern mapintf_t map70_intf;
|
||||
extern mapintf_t map75_intf;
|
||||
extern mapintf_t map78_intf;
|
||||
extern mapintf_t map79_intf;
|
||||
extern mapintf_t map85_intf;
|
||||
extern mapintf_t map94_intf;
|
||||
extern mapintf_t map99_intf;
|
||||
extern mapintf_t map231_intf;
|
||||
|
||||
/* implemented mapper interfaces */
|
||||
const mapintf_t *mappers[] =
|
||||
{
|
||||
&map0_intf,
|
||||
&map1_intf,
|
||||
&map2_intf,
|
||||
&map3_intf,
|
||||
&map4_intf,
|
||||
&map5_intf,
|
||||
&map7_intf,
|
||||
&map8_intf,
|
||||
&map9_intf,
|
||||
&map11_intf,
|
||||
&map15_intf,
|
||||
&map16_intf,
|
||||
&map18_intf,
|
||||
&map19_intf,
|
||||
&map21_intf,
|
||||
&map22_intf,
|
||||
&map23_intf,
|
||||
&map24_intf,
|
||||
&map25_intf,
|
||||
&map32_intf,
|
||||
&map33_intf,
|
||||
&map34_intf,
|
||||
&map40_intf,
|
||||
&map64_intf,
|
||||
&map65_intf,
|
||||
&map66_intf,
|
||||
&map70_intf,
|
||||
&map75_intf,
|
||||
&map78_intf,
|
||||
&map79_intf,
|
||||
&map85_intf,
|
||||
&map94_intf,
|
||||
&map99_intf,
|
||||
&map231_intf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: mmclist.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.2 2000/10/10 13:05:30 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.1 2000/07/31 04:27:39 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
49
MCUME_teensy41/teensynofrendo/mmclist.h
Executable file
49
MCUME_teensy41/teensynofrendo/mmclist.h
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** mmclist.h
|
||||
**
|
||||
** list of all mapper interfaces
|
||||
** $Id: mmclist.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _MMCLIST_H_
|
||||
#define _MMCLIST_H_
|
||||
|
||||
#include "nes_mmc.h"
|
||||
|
||||
extern mapintf_t *mappers[];
|
||||
|
||||
#endif /* !_MMCLIST_H_ */
|
||||
|
||||
/*
|
||||
** $Log: mmclist.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.1 2000/07/31 04:27:40 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
762
MCUME_teensy41/teensynofrendo/nes.c
Normal file
762
MCUME_teensy41/teensynofrendo/nes.c
Normal file
|
|
@ -0,0 +1,762 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes.c
|
||||
**
|
||||
** NES hardware related routines
|
||||
** $Id: nes.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "noftypes.h"
|
||||
#include "nes6502.h"
|
||||
#include "log.h"
|
||||
#include "osd.h"
|
||||
#include "nes.h"
|
||||
#include "nes_apu.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "nes_rom.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "vid_drv.h"
|
||||
#include "nofrendo.h"
|
||||
|
||||
|
||||
#define NES_CLOCK_DIVIDER 12
|
||||
//#define NES_MASTER_CLOCK 21477272.727272727272
|
||||
#define NES_MASTER_CLOCK (236250000 / 11)
|
||||
#define NES_SCANLINE_CYCLES (1364.0 / NES_CLOCK_DIVIDER)
|
||||
#define NES_FIQ_PERIOD (NES_MASTER_CLOCK / NES_CLOCK_DIVIDER / 60)
|
||||
|
||||
#define NES_RAMSIZE 0x800
|
||||
|
||||
#define NES_SKIP_LIMIT (NES_REFRESH_RATE / 5) /* 12 or 10, depending on PAL/NTSC */
|
||||
|
||||
static nes_t nes;
|
||||
|
||||
/* find out if a file is ours */
|
||||
int nes_isourfile(const char *filename)
|
||||
{
|
||||
return rom_checkmagic(filename);
|
||||
}
|
||||
|
||||
/* TODO: just asking for problems -- please remove */
|
||||
nes_t *nes_getcontextptr(void)
|
||||
{
|
||||
return &nes;
|
||||
}
|
||||
|
||||
void nes_getcontext(nes_t *machine)
|
||||
{
|
||||
apu_getcontext(nes.apu);
|
||||
ppu_getcontext(nes.ppu);
|
||||
nes6502_getcontext(nes.cpu);
|
||||
mmc_getcontext(nes.mmc);
|
||||
|
||||
*machine = nes;
|
||||
}
|
||||
|
||||
void nes_setcontext(nes_t *machine)
|
||||
{
|
||||
ASSERT(machine);
|
||||
|
||||
apu_setcontext(machine->apu);
|
||||
ppu_setcontext(machine->ppu);
|
||||
nes6502_setcontext(machine->cpu);
|
||||
mmc_setcontext(machine->mmc);
|
||||
|
||||
nes = *machine;
|
||||
}
|
||||
|
||||
static uint8 ram_read(uint32 address)
|
||||
{
|
||||
return nes.cpu->mem_page[0][address & (NES_RAMSIZE - 1)];
|
||||
}
|
||||
|
||||
static void ram_write(uint32 address, uint8 value)
|
||||
{
|
||||
nes.cpu->mem_page[0][address & (NES_RAMSIZE - 1)] = value;
|
||||
}
|
||||
|
||||
static void write_protect(uint32 address, uint8 value)
|
||||
{
|
||||
/* don't allow write to go through */
|
||||
UNUSED(address);
|
||||
UNUSED(value);
|
||||
}
|
||||
|
||||
static uint8 read_protect(uint32 address)
|
||||
{
|
||||
/* don't allow read to go through */
|
||||
UNUSED(address);
|
||||
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
#define LAST_MEMORY_HANDLER { -1, -1, NULL }
|
||||
/* read/write handlers for standard NES */
|
||||
static const nes6502_memread default_readhandler[] =
|
||||
{
|
||||
{ 0x0800, 0x1FFF, ram_read },
|
||||
{ 0x2000, 0x3FFF, ppu_read },
|
||||
{ 0x4000, 0x4015, apu_read },
|
||||
{ 0x4016, 0x4017, ppu_readhigh },
|
||||
LAST_MEMORY_HANDLER
|
||||
};
|
||||
|
||||
static const nes6502_memwrite default_writehandler[] =
|
||||
{
|
||||
{ 0x0800, 0x1FFF, ram_write },
|
||||
{ 0x2000, 0x3FFF, ppu_write },
|
||||
{ 0x4000, 0x4013, apu_write },
|
||||
{ 0x4015, 0x4015, apu_write },
|
||||
{ 0x4014, 0x4017, ppu_writehigh },
|
||||
LAST_MEMORY_HANDLER
|
||||
};
|
||||
|
||||
/* this big nasty boy sets up the address handlers that the CPU uses */
|
||||
static void build_address_handlers(nes_t *machine)
|
||||
{
|
||||
int count, num_handlers = 0;
|
||||
mapintf_t *intf;
|
||||
|
||||
ASSERT(machine);
|
||||
intf = machine->mmc->intf;
|
||||
|
||||
memset(machine->readhandler, 0, sizeof(machine->readhandler));
|
||||
memset(machine->writehandler, 0, sizeof(machine->writehandler));
|
||||
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == default_readhandler[count].read_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->readhandler[num_handlers], &default_readhandler[count],
|
||||
sizeof(nes6502_memread));
|
||||
}
|
||||
|
||||
if (intf->sound_ext)
|
||||
{
|
||||
if (NULL != intf->sound_ext->mem_read)
|
||||
{
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == intf->sound_ext->mem_read[count].read_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->readhandler[num_handlers], &intf->sound_ext->mem_read[count],
|
||||
sizeof(nes6502_memread));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL != intf->mem_read)
|
||||
{
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == intf->mem_read[count].read_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->readhandler[num_handlers], &intf->mem_read[count],
|
||||
sizeof(nes6502_memread));
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: poof! numbers */
|
||||
machine->readhandler[num_handlers].min_range = 0x4018;
|
||||
machine->readhandler[num_handlers].max_range = 0x5FFF;
|
||||
machine->readhandler[num_handlers].read_func = read_protect;
|
||||
num_handlers++;
|
||||
machine->readhandler[num_handlers].min_range = -1;
|
||||
machine->readhandler[num_handlers].max_range = -1;
|
||||
machine->readhandler[num_handlers].read_func = NULL;
|
||||
num_handlers++;
|
||||
ASSERT(num_handlers <= MAX_MEM_HANDLERS);
|
||||
|
||||
num_handlers = 0;
|
||||
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == default_writehandler[count].write_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->writehandler[num_handlers], &default_writehandler[count],
|
||||
sizeof(nes6502_memwrite));
|
||||
}
|
||||
|
||||
if (intf->sound_ext)
|
||||
{
|
||||
if (NULL != intf->sound_ext->mem_write)
|
||||
{
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == intf->sound_ext->mem_write[count].write_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->writehandler[num_handlers], &intf->sound_ext->mem_write[count],
|
||||
sizeof(nes6502_memwrite));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL != intf->mem_write)
|
||||
{
|
||||
for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++)
|
||||
{
|
||||
if (NULL == intf->mem_write[count].write_func)
|
||||
break;
|
||||
|
||||
memcpy(&machine->writehandler[num_handlers], &intf->mem_write[count],
|
||||
sizeof(nes6502_memwrite));
|
||||
}
|
||||
}
|
||||
|
||||
/* catch-all for bad writes */
|
||||
/* TODO: poof! numbers */
|
||||
machine->writehandler[num_handlers].min_range = 0x4018;
|
||||
machine->writehandler[num_handlers].max_range = 0x5FFF;
|
||||
machine->writehandler[num_handlers].write_func = write_protect;
|
||||
num_handlers++;
|
||||
machine->writehandler[num_handlers].min_range = 0x8000;
|
||||
machine->writehandler[num_handlers].max_range = 0xFFFF;
|
||||
machine->writehandler[num_handlers].write_func = write_protect;
|
||||
num_handlers++;
|
||||
machine->writehandler[num_handlers].min_range = -1;
|
||||
machine->writehandler[num_handlers].max_range = -1;
|
||||
machine->writehandler[num_handlers].write_func = NULL;
|
||||
num_handlers++;
|
||||
ASSERT(num_handlers <= MAX_MEM_HANDLERS);
|
||||
}
|
||||
|
||||
/* raise an IRQ */
|
||||
void nes_irq(void)
|
||||
{
|
||||
nes6502_irq();
|
||||
}
|
||||
|
||||
static uint8 nes_clearfiq(void)
|
||||
{
|
||||
if (nes.fiq_occurred)
|
||||
{
|
||||
nes.fiq_occurred = false;
|
||||
return 0x40;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nes_setfiq(uint8 value)
|
||||
{
|
||||
nes.fiq_state = value;
|
||||
nes.fiq_cycles = (int) NES_FIQ_PERIOD;
|
||||
}
|
||||
|
||||
static void nes_checkfiq(int cycles)
|
||||
{
|
||||
nes.fiq_cycles -= cycles;
|
||||
if (nes.fiq_cycles <= 0)
|
||||
{
|
||||
nes.fiq_cycles += (int) NES_FIQ_PERIOD;
|
||||
if (0 == (nes.fiq_state & 0xC0))
|
||||
{
|
||||
nes.fiq_occurred = true;
|
||||
nes6502_irq();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nes_nmi(void)
|
||||
{
|
||||
nes6502_nmi();
|
||||
}
|
||||
|
||||
static void nes_renderframe(bool draw_flag)
|
||||
{
|
||||
int elapsed_cycles;
|
||||
mapintf_t *mapintf = nes.mmc->intf;
|
||||
int in_vblank = 0;
|
||||
|
||||
while (262 != nes.scanline)
|
||||
{
|
||||
// ppu_scanline(nes.vidbuf, nes.scanline, draw_flag);
|
||||
ppu_scanline(vid_getbuffer(), nes.scanline, draw_flag);
|
||||
|
||||
if (241 == nes.scanline)
|
||||
{
|
||||
/* 7-9 cycle delay between when VINT flag goes up and NMI is taken */
|
||||
elapsed_cycles = nes6502_execute(7);
|
||||
nes.scanline_cycles -= elapsed_cycles;
|
||||
nes_checkfiq(elapsed_cycles);
|
||||
|
||||
ppu_checknmi();
|
||||
|
||||
if (mapintf->vblank)
|
||||
mapintf->vblank();
|
||||
in_vblank = 1;
|
||||
}
|
||||
|
||||
if (mapintf->hblank)
|
||||
mapintf->hblank(in_vblank);
|
||||
|
||||
nes.scanline_cycles += (float) NES_SCANLINE_CYCLES;
|
||||
elapsed_cycles = nes6502_execute((int) nes.scanline_cycles);
|
||||
nes.scanline_cycles -= (float) elapsed_cycles;
|
||||
nes_checkfiq(elapsed_cycles);
|
||||
|
||||
ppu_endscanline(nes.scanline);
|
||||
nes.scanline++;
|
||||
}
|
||||
|
||||
nes.scanline = 0;
|
||||
}
|
||||
|
||||
static void system_video(bool draw)
|
||||
{
|
||||
|
||||
#ifdef NOLOOP
|
||||
#else
|
||||
#endif
|
||||
/* blit to screen */
|
||||
vid_flush();
|
||||
|
||||
/* grab input */
|
||||
osd_getinput();
|
||||
}
|
||||
|
||||
/* main emulation loop */
|
||||
static int last_ticks, frames_to_render;
|
||||
void nes_emulate(void)
|
||||
{
|
||||
osd_setsound(nes.apu->process);
|
||||
|
||||
last_ticks = nofrendo_ticks;
|
||||
frames_to_render = 0;
|
||||
nes.scanline_cycles = 0;
|
||||
nes.fiq_cycles = (int) NES_FIQ_PERIOD;
|
||||
#ifdef NOLOOP
|
||||
#else
|
||||
while (false == nes.poweroff)
|
||||
{
|
||||
if (nofrendo_ticks != last_ticks)
|
||||
{
|
||||
int tick_diff = nofrendo_ticks - last_ticks;
|
||||
|
||||
frames_to_render += tick_diff;
|
||||
last_ticks = nofrendo_ticks;
|
||||
}
|
||||
|
||||
if (true == nes.pause)
|
||||
{
|
||||
/* TODO: dim the screen, and pause/silence the apu */
|
||||
system_video(true);
|
||||
frames_to_render = 0;
|
||||
}
|
||||
else if (frames_to_render > 1)
|
||||
{
|
||||
frames_to_render--;
|
||||
nes_renderframe(false);
|
||||
system_video(false);
|
||||
}
|
||||
else if ((1 == frames_to_render && true == nes.autoframeskip)
|
||||
|| false == nes.autoframeskip)
|
||||
{
|
||||
frames_to_render = 0;
|
||||
nes_renderframe(true);
|
||||
system_video(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//ADD ON
|
||||
#ifdef NOLOOP
|
||||
void nes_step(int skip)
|
||||
{
|
||||
if (skip) {
|
||||
nes_renderframe(false);
|
||||
system_video(false);
|
||||
}
|
||||
else {
|
||||
nes_renderframe(true);
|
||||
system_video(true);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static void mem_trash(uint8 *buffer, int length)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < length; i++)
|
||||
buffer[i] = (uint8) rand();
|
||||
}
|
||||
|
||||
/* Reset NES hardware */
|
||||
void nes_reset(int reset_type)
|
||||
{
|
||||
if (HARD_RESET == reset_type)
|
||||
{
|
||||
memset(nes.cpu->mem_page[0], 0, NES_RAMSIZE);
|
||||
if (nes.rominfo->vram)
|
||||
mem_trash(nes.rominfo->vram, 0x2000 * nes.rominfo->vram_banks);
|
||||
}
|
||||
|
||||
apu_reset();
|
||||
ppu_reset(reset_type);
|
||||
mmc_reset();
|
||||
nes6502_reset();
|
||||
|
||||
nes.scanline = 241;
|
||||
}
|
||||
|
||||
void nes_destroy(nes_t **machine)
|
||||
{
|
||||
if (*machine)
|
||||
{
|
||||
rom_free(&(*machine)->rominfo);
|
||||
mmc_destroy(&(*machine)->mmc);
|
||||
ppu_destroy(&(*machine)->ppu);
|
||||
apu_destroy(&(*machine)->apu);
|
||||
// bmp_destroy(&(*machine)->vidbuf);
|
||||
if ((*machine)->cpu)
|
||||
{
|
||||
if ((*machine)->cpu->mem_page[0])
|
||||
free((*machine)->cpu->mem_page[0]);
|
||||
free((*machine)->cpu);
|
||||
}
|
||||
|
||||
free(*machine);
|
||||
*machine = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void nes_poweroff(void)
|
||||
{
|
||||
nes.poweroff = true;
|
||||
}
|
||||
|
||||
void nes_togglepause(void)
|
||||
{
|
||||
nes.pause ^= true;
|
||||
}
|
||||
|
||||
/* insert a cart into the NES */
|
||||
int nes_insertcart(const char *filename, nes_t *machine)
|
||||
{
|
||||
nes6502_setcontext(machine->cpu);
|
||||
/* rom file */
|
||||
machine->rominfo = rom_load(filename);
|
||||
if (NULL == machine->rominfo)
|
||||
goto _fail;
|
||||
/* map cart's SRAM to CPU $6000-$7FFF */
|
||||
if (machine->rominfo->sram)
|
||||
{
|
||||
machine->cpu->mem_page[6] = machine->rominfo->sram;
|
||||
machine->cpu->mem_page[7] = machine->rominfo->sram + 0x1000;
|
||||
}
|
||||
/* mapper */
|
||||
machine->mmc = mmc_create(machine->rominfo);
|
||||
if (NULL == machine->mmc)
|
||||
goto _fail;
|
||||
|
||||
/* if there's VRAM, let the PPU know */
|
||||
if (NULL != machine->rominfo->vram)
|
||||
machine->ppu->vram_present = true;
|
||||
apu_setext(machine->apu, machine->mmc->intf->sound_ext);
|
||||
build_address_handlers(machine);
|
||||
nes_setcontext(machine);
|
||||
nes_reset(HARD_RESET);
|
||||
|
||||
return 0;
|
||||
|
||||
_fail:
|
||||
nes_destroy(&machine);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* Initialize NES CPU, hardware, etc. */
|
||||
nes_t *nes_create(void)
|
||||
{
|
||||
nes_t *machine;
|
||||
sndinfo_t osd_sound;
|
||||
int i;
|
||||
|
||||
machine = malloc(sizeof(nes_t));
|
||||
if (NULL == machine)
|
||||
return NULL;
|
||||
|
||||
memset(machine, 0, sizeof(nes_t));
|
||||
|
||||
/* bitmap */
|
||||
/* 8 pixel overdraw */
|
||||
// machine->vidbuf = bmp_create(NES_SCREEN_WIDTH, NES_SCREEN_HEIGHT, 8);
|
||||
// if (NULL == machine->vidbuf)
|
||||
// goto _fail;
|
||||
|
||||
machine->autoframeskip = true;
|
||||
|
||||
/* cpu */
|
||||
machine->cpu = malloc(sizeof(nes6502_context));
|
||||
if (NULL == machine->cpu)
|
||||
goto _fail;
|
||||
|
||||
memset(machine->cpu, 0, sizeof(nes6502_context));
|
||||
|
||||
/* allocate 2kB RAM */
|
||||
machine->cpu->mem_page[0] = malloc(NES_RAMSIZE);
|
||||
if (NULL == machine->cpu->mem_page[0])
|
||||
goto _fail;
|
||||
|
||||
/* point all pages at NULL for now */
|
||||
for (i = 1; i < NES6502_NUMBANKS; i++)
|
||||
machine->cpu->mem_page[i] = NULL;
|
||||
|
||||
machine->cpu->read_handler = machine->readhandler;
|
||||
machine->cpu->write_handler = machine->writehandler;
|
||||
|
||||
/* apu */
|
||||
osd_getsoundinfo(&osd_sound);
|
||||
machine->apu = apu_create(0, osd_sound.sample_rate, NES_REFRESH_RATE, osd_sound.bps);
|
||||
|
||||
if (NULL == machine->apu)
|
||||
goto _fail;
|
||||
|
||||
/* set the IRQ routines */
|
||||
machine->apu->irq_callback = nes_irq;
|
||||
machine->apu->irqclear_callback = nes_clearfiq;
|
||||
|
||||
/* ppu */
|
||||
machine->ppu = ppu_create();
|
||||
if (NULL == machine->ppu)
|
||||
goto _fail;
|
||||
|
||||
machine->poweroff = false;
|
||||
machine->pause = false;
|
||||
|
||||
return machine;
|
||||
|
||||
_fail:
|
||||
nes_destroy(&machine);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
** $Log: nes.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.18 2000/11/29 12:58:23 matt
|
||||
** timing/fiq fixes
|
||||
**
|
||||
** Revision 1.17 2000/11/27 19:36:15 matt
|
||||
** more timing fixes
|
||||
**
|
||||
** Revision 1.16 2000/11/26 16:13:13 matt
|
||||
** slight fix (?) to nes_fiq
|
||||
**
|
||||
** Revision 1.15 2000/11/26 15:51:13 matt
|
||||
** frame IRQ emulation
|
||||
**
|
||||
** Revision 1.14 2000/11/25 20:30:39 matt
|
||||
** scanline emulation simplifications/timing fixes
|
||||
**
|
||||
** Revision 1.13 2000/11/25 01:53:42 matt
|
||||
** bool stinks sometimes
|
||||
**
|
||||
** Revision 1.12 2000/11/21 13:28:40 matt
|
||||
** take care to zero allocated mem
|
||||
**
|
||||
** Revision 1.11 2000/11/20 13:23:32 matt
|
||||
** nofrendo.c now handles timer
|
||||
**
|
||||
** Revision 1.10 2000/11/09 14:07:27 matt
|
||||
** state load fixed, state save mostly fixed
|
||||
**
|
||||
** Revision 1.9 2000/11/05 22:19:37 matt
|
||||
** pause buglet fixed
|
||||
**
|
||||
** Revision 1.8 2000/11/05 06:27:09 matt
|
||||
** thinlib spawns changes
|
||||
**
|
||||
** Revision 1.7 2000/10/29 14:36:45 matt
|
||||
** nes_clearframeirq is static
|
||||
**
|
||||
** Revision 1.6 2000/10/28 15:20:41 matt
|
||||
** irq callbacks in nes_apu
|
||||
**
|
||||
** Revision 1.5 2000/10/27 12:55:58 matt
|
||||
** nes6502 now uses 4kB banks across the boards
|
||||
**
|
||||
** Revision 1.4 2000/10/25 13:44:02 matt
|
||||
** no more silly define names
|
||||
**
|
||||
** Revision 1.3 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.2 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.50 2000/10/23 17:51:09 matt
|
||||
** adding fds support
|
||||
**
|
||||
** Revision 1.49 2000/10/23 15:53:08 matt
|
||||
** better system handling
|
||||
**
|
||||
** Revision 1.48 2000/10/22 20:02:29 matt
|
||||
** autoframeskip bugfix
|
||||
**
|
||||
** Revision 1.47 2000/10/22 19:16:15 matt
|
||||
** more sane timer ISR / autoframeskip
|
||||
**
|
||||
** Revision 1.46 2000/10/21 19:26:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.45 2000/10/17 12:00:56 matt
|
||||
** selectable apu base frequency
|
||||
**
|
||||
** Revision 1.44 2000/10/10 13:58:14 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.43 2000/10/10 13:05:30 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.42 2000/10/08 17:53:37 matt
|
||||
** minor accuracy changes
|
||||
**
|
||||
** Revision 1.41 2000/09/18 02:09:12 matt
|
||||
** -pedantic is your friend
|
||||
**
|
||||
** Revision 1.40 2000/09/15 13:38:39 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.39 2000/09/15 04:58:07 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.38 2000/09/08 11:57:29 matt
|
||||
** no more nes_fiq
|
||||
**
|
||||
** Revision 1.37 2000/08/31 02:39:01 matt
|
||||
** moved dos stuff in here (temp)
|
||||
**
|
||||
** Revision 1.36 2000/08/16 02:51:55 matt
|
||||
** random cleanups
|
||||
**
|
||||
** Revision 1.35 2000/08/11 02:43:50 matt
|
||||
** moved frame irq stuff out of APU into here
|
||||
**
|
||||
** Revision 1.34 2000/08/11 01:42:43 matt
|
||||
** change to OSD sound info interface
|
||||
**
|
||||
** Revision 1.33 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.32 2000/07/30 04:32:32 matt
|
||||
** emulation of the NES frame IRQ
|
||||
**
|
||||
** Revision 1.31 2000/07/27 04:07:14 matt
|
||||
** cleaned up the neighborhood lawns
|
||||
**
|
||||
** Revision 1.30 2000/07/27 03:59:52 neil
|
||||
** pausing tweaks, during fullscreen toggles
|
||||
**
|
||||
** Revision 1.29 2000/07/27 03:19:22 matt
|
||||
** just a little cleaner, that's all
|
||||
**
|
||||
** Revision 1.28 2000/07/27 02:55:23 matt
|
||||
** nes_emulate went through detox
|
||||
**
|
||||
** Revision 1.27 2000/07/27 02:49:18 matt
|
||||
** cleaner flow in nes_emulate
|
||||
**
|
||||
** Revision 1.26 2000/07/27 01:17:09 matt
|
||||
** nes_insertrom -> nes_insertcart
|
||||
**
|
||||
** Revision 1.25 2000/07/26 21:36:14 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.24 2000/07/25 02:25:53 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.23 2000/07/24 04:32:40 matt
|
||||
** autoframeskip bugfix
|
||||
**
|
||||
** Revision 1.22 2000/07/23 15:13:48 matt
|
||||
** apu API change, autoframeskip part of nes_t struct
|
||||
**
|
||||
** Revision 1.21 2000/07/21 02:44:41 matt
|
||||
** merged osd_getinput and osd_gethostinput
|
||||
**
|
||||
** Revision 1.20 2000/07/17 05:12:55 matt
|
||||
** nes_ppu.c is no longer a scary place to be-- cleaner & faster
|
||||
**
|
||||
** Revision 1.19 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.18 2000/07/15 23:51:23 matt
|
||||
** hack for certain filthy NES titles
|
||||
**
|
||||
** Revision 1.17 2000/07/11 04:31:54 matt
|
||||
** less magic number nastiness for screen dimensions
|
||||
**
|
||||
** Revision 1.16 2000/07/11 02:38:25 matt
|
||||
** encapsulated memory address handlers into nes/nsf
|
||||
**
|
||||
** Revision 1.15 2000/07/10 13:50:49 matt
|
||||
** added function nes_irq()
|
||||
**
|
||||
** Revision 1.14 2000/07/10 05:27:55 matt
|
||||
** cleaned up mapper-specific callbacks
|
||||
**
|
||||
** Revision 1.13 2000/07/09 03:43:26 matt
|
||||
** minor changes to gui handling
|
||||
**
|
||||
** Revision 1.12 2000/07/06 16:42:23 matt
|
||||
** updated for new video driver
|
||||
**
|
||||
** Revision 1.11 2000/07/05 19:57:36 neil
|
||||
** __GNUC -> __DJGPP in nes.c
|
||||
**
|
||||
** Revision 1.10 2000/07/05 12:23:03 matt
|
||||
** removed unnecessary references
|
||||
**
|
||||
** Revision 1.9 2000/07/04 23:12:34 matt
|
||||
** memory protection handlers
|
||||
**
|
||||
** Revision 1.8 2000/07/04 04:58:29 matt
|
||||
** dynamic memory range handlers
|
||||
**
|
||||
** Revision 1.7 2000/06/26 04:58:51 matt
|
||||
** minor bugfix
|
||||
**
|
||||
** Revision 1.6 2000/06/20 20:42:12 matt
|
||||
** fixed some NULL pointer problems
|
||||
**
|
||||
** Revision 1.5 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
221
MCUME_teensy41/teensynofrendo/nes.h
Executable file
221
MCUME_teensy41/teensynofrendo/nes.h
Executable file
|
|
@ -0,0 +1,221 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes.h
|
||||
**
|
||||
** NES hardware related definitions / prototypes
|
||||
** $Id: nes.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NES_H_
|
||||
#define _NES_H_
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nes_apu.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "nes_rom.h"
|
||||
#include "nes6502.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
/* Visible (NTSC) screen height */
|
||||
#ifndef NES_VISIBLE_HEIGHT
|
||||
#define NES_VISIBLE_HEIGHT 224
|
||||
#endif /* !NES_VISIBLE_HEIGHT */
|
||||
#define NES_SCREEN_WIDTH 256
|
||||
#define NES_SCREEN_HEIGHT 240
|
||||
|
||||
/* NTSC = 60Hz, PAL = 50Hz */
|
||||
#ifdef PAL
|
||||
#define NES_REFRESH_RATE 50
|
||||
#else /* !PAL */
|
||||
#define NES_REFRESH_RATE 60
|
||||
#endif /* !PAL */
|
||||
|
||||
#define MAX_MEM_HANDLERS 32
|
||||
|
||||
enum
|
||||
{
|
||||
SOFT_RESET,
|
||||
HARD_RESET
|
||||
};
|
||||
|
||||
|
||||
typedef struct nes_s
|
||||
{
|
||||
/* hardware things */
|
||||
nes6502_context *cpu;
|
||||
nes6502_memread readhandler[MAX_MEM_HANDLERS];
|
||||
nes6502_memwrite writehandler[MAX_MEM_HANDLERS];
|
||||
|
||||
ppu_t *ppu;
|
||||
apu_t *apu;
|
||||
mmc_t *mmc;
|
||||
rominfo_t *rominfo;
|
||||
|
||||
/* video buffer */
|
||||
/* For the ESP32, it costs too much memory to render to a separate buffer and blit that to the main buffer.
|
||||
Instead, the code has been modified to directly grab the primary buffer from the video subsystem and render
|
||||
there, saving us about 64K of memory. */
|
||||
// bitmap_t *vidbuf;
|
||||
|
||||
bool fiq_occurred;
|
||||
uint8 fiq_state;
|
||||
int fiq_cycles;
|
||||
|
||||
int scanline;
|
||||
|
||||
/* Timing stuff */
|
||||
float scanline_cycles;
|
||||
bool autoframeskip;
|
||||
|
||||
/* control */
|
||||
bool poweroff;
|
||||
bool pause;
|
||||
|
||||
} nes_t;
|
||||
|
||||
|
||||
extern int nes_isourfile(const char *filename);
|
||||
|
||||
/* temp hack */
|
||||
extern nes_t *nes_getcontextptr(void);
|
||||
|
||||
/* Function prototypes */
|
||||
extern void nes_getcontext(nes_t *machine);
|
||||
extern void nes_setcontext(nes_t *machine);
|
||||
|
||||
extern nes_t *nes_create(void);
|
||||
extern void nes_destroy(nes_t **machine);
|
||||
extern int nes_insertcart(const char *filename, nes_t *machine);
|
||||
|
||||
extern void nes_setfiq(uint8 state);
|
||||
extern void nes_nmi(void);
|
||||
extern void nes_irq(void);
|
||||
extern void nes_emulate(void);
|
||||
|
||||
extern void nes_reset(int reset_type);
|
||||
|
||||
extern void nes_poweroff(void);
|
||||
extern void nes_togglepause(void);
|
||||
|
||||
#endif /* _NES_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.8 2000/11/26 15:51:13 matt
|
||||
** frame IRQ emulation
|
||||
**
|
||||
** Revision 1.7 2000/11/25 20:30:39 matt
|
||||
** scanline emulation simplifications/timing fixes
|
||||
**
|
||||
** Revision 1.6 2000/11/25 01:52:17 matt
|
||||
** bool stinks sometimes
|
||||
**
|
||||
** Revision 1.5 2000/11/09 14:07:28 matt
|
||||
** state load fixed, state save mostly fixed
|
||||
**
|
||||
** Revision 1.4 2000/10/29 14:36:45 matt
|
||||
** nes_clearframeirq is static
|
||||
**
|
||||
** Revision 1.3 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.2 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.26 2000/10/23 17:51:10 matt
|
||||
** adding fds support
|
||||
**
|
||||
** Revision 1.25 2000/10/23 15:53:08 matt
|
||||
** better system handling
|
||||
**
|
||||
** Revision 1.24 2000/10/22 19:16:15 matt
|
||||
** more sane timer ISR / autoframeskip
|
||||
**
|
||||
** Revision 1.23 2000/10/21 19:26:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.22 2000/10/10 13:58:15 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.21 2000/10/08 17:53:36 matt
|
||||
** minor accuracy changes
|
||||
**
|
||||
** Revision 1.20 2000/09/15 04:58:07 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.19 2000/09/08 11:57:29 matt
|
||||
** no more nes_fiq
|
||||
**
|
||||
** Revision 1.18 2000/08/11 02:43:50 matt
|
||||
** moved frame irq stuff out of APU into here
|
||||
**
|
||||
** Revision 1.17 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.16 2000/07/30 04:32:32 matt
|
||||
** emulation of the NES frame IRQ
|
||||
**
|
||||
** Revision 1.15 2000/07/27 01:17:09 matt
|
||||
** nes_insertrom -> nes_insertcart
|
||||
**
|
||||
** Revision 1.14 2000/07/26 21:36:16 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.13 2000/07/25 02:25:53 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.12 2000/07/23 15:13:13 matt
|
||||
** autoframeskip is now a member variable of nes_t
|
||||
**
|
||||
** Revision 1.11 2000/07/17 05:12:55 matt
|
||||
** nes_ppu.c is no longer a scary place to be-- cleaner & faster
|
||||
**
|
||||
** Revision 1.10 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.9 2000/07/16 09:48:58 neil
|
||||
** Make visible height compile-time configurable in the Makefile
|
||||
**
|
||||
** Revision 1.8 2000/07/11 04:31:55 matt
|
||||
** less magic number nastiness for screen dimensions
|
||||
**
|
||||
** Revision 1.7 2000/07/11 02:40:36 matt
|
||||
** forgot to remove framecounter
|
||||
**
|
||||
** Revision 1.6 2000/07/11 02:38:25 matt
|
||||
** encapsulated memory address handlers into nes/nsf
|
||||
**
|
||||
** Revision 1.5 2000/07/10 13:50:50 matt
|
||||
** added function nes_irq()
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
2573
MCUME_teensy41/teensynofrendo/nes6502.c
Normal file
2573
MCUME_teensy41/teensynofrendo/nes6502.c
Normal file
File diff suppressed because it is too large
Load diff
175
MCUME_teensy41/teensynofrendo/nes6502.h
Executable file
175
MCUME_teensy41/teensynofrendo/nes6502.h
Executable file
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes6502.h
|
||||
**
|
||||
** NES custom 6502 CPU definitions / prototypes
|
||||
** $Id: nes6502.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
/* NOTE: 16-bit addresses avoided like the plague: use 32-bit values
|
||||
** wherever humanly possible
|
||||
*/
|
||||
#ifndef _NES6502_H_
|
||||
#define _NES6502_H_
|
||||
|
||||
#include "noftypes.h"
|
||||
|
||||
/* Define this to enable decimal mode in ADC / SBC (not needed in NES) */
|
||||
/*#define NES6502_DECIMAL*/
|
||||
|
||||
#define NES6502_NUMBANKS 16
|
||||
#define NES6502_BANKSHIFT 12
|
||||
#define NES6502_BANKSIZE (0x10000 / NES6502_NUMBANKS)
|
||||
#define NES6502_BANKMASK (NES6502_BANKSIZE - 1)
|
||||
|
||||
/* P (flag) register bitmasks */
|
||||
#define N_FLAG 0x80
|
||||
#define V_FLAG 0x40
|
||||
#define R_FLAG 0x20 /* Reserved, always 1 */
|
||||
#define B_FLAG 0x10
|
||||
#define D_FLAG 0x08
|
||||
#define I_FLAG 0x04
|
||||
#define Z_FLAG 0x02
|
||||
#define C_FLAG 0x01
|
||||
|
||||
/* Vector addresses */
|
||||
#define NMI_VECTOR 0xFFFA
|
||||
#define RESET_VECTOR 0xFFFC
|
||||
#define IRQ_VECTOR 0xFFFE
|
||||
|
||||
/* cycle counts for interrupts */
|
||||
#define INT_CYCLES 7
|
||||
#define RESET_CYCLES 6
|
||||
|
||||
#define NMI_MASK 0x01
|
||||
#define IRQ_MASK 0x02
|
||||
|
||||
/* Stack is located on 6502 page 1 */
|
||||
#define STACK_OFFSET 0x0100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
uint8 (*read_func)(uint32 address);
|
||||
} nes6502_memread;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
void (*write_func)(uint32 address, uint8 value);
|
||||
} nes6502_memwrite;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8 *mem_page[NES6502_NUMBANKS]; /* memory page pointers */
|
||||
|
||||
nes6502_memread *read_handler;
|
||||
nes6502_memwrite *write_handler;
|
||||
|
||||
uint32 pc_reg;
|
||||
uint8 a_reg, p_reg;
|
||||
uint8 x_reg, y_reg;
|
||||
uint8 s_reg;
|
||||
|
||||
uint8 jammed; /* is processor jammed? */
|
||||
|
||||
uint8 int_pending, int_latency;
|
||||
|
||||
int32 total_cycles, burn_cycles;
|
||||
} nes6502_context;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Functions which govern the 6502's execution */
|
||||
extern void nes6502_reset(void);
|
||||
extern int nes6502_execute(int total_cycles);
|
||||
extern void nes6502_nmi(void);
|
||||
extern void nes6502_irq(void);
|
||||
extern uint8 nes6502_getbyte(uint32 address);
|
||||
extern uint32 nes6502_getcycles(bool reset_flag);
|
||||
extern void nes6502_burn(int cycles);
|
||||
extern void nes6502_release(void);
|
||||
|
||||
/* Context get/set */
|
||||
extern void nes6502_setcontext(nes6502_context *cpu);
|
||||
extern void nes6502_getcontext(nes6502_context *cpu);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _NES6502_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes6502.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:39 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.17 2000/11/13 00:57:39 matt
|
||||
** trying to add 1-instruction interrupt latency... and failing.
|
||||
**
|
||||
** Revision 1.16 2000/10/27 12:53:36 matt
|
||||
** banks are always 4kB now
|
||||
**
|
||||
** Revision 1.15 2000/10/10 13:58:14 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.14 2000/09/15 03:42:32 matt
|
||||
** nes6502_release to release current timeslice
|
||||
**
|
||||
** Revision 1.13 2000/09/11 03:55:32 matt
|
||||
** cosmetics
|
||||
**
|
||||
** Revision 1.12 2000/09/08 11:54:48 matt
|
||||
** optimize
|
||||
**
|
||||
** Revision 1.11 2000/09/07 21:58:18 matt
|
||||
** api change for nes6502_burn, optimized core
|
||||
**
|
||||
** Revision 1.10 2000/09/07 01:34:55 matt
|
||||
** nes6502_init deprecated, moved flag regs to separate vars
|
||||
**
|
||||
** Revision 1.9 2000/08/28 12:53:44 matt
|
||||
** fixes for disassembler
|
||||
**
|
||||
** Revision 1.8 2000/08/28 01:46:15 matt
|
||||
** moved some of them defines around, cleaned up jamming code
|
||||
**
|
||||
** Revision 1.7 2000/08/16 04:56:37 matt
|
||||
** accurate CPU jamming, added dead page emulation
|
||||
**
|
||||
** Revision 1.6 2000/07/30 04:32:00 matt
|
||||
** now emulates the NES frame IRQ
|
||||
**
|
||||
** Revision 1.5 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
1195
MCUME_teensy41/teensynofrendo/nes_apu.c
Executable file
1195
MCUME_teensy41/teensynofrendo/nes_apu.c
Executable file
File diff suppressed because it is too large
Load diff
349
MCUME_teensy41/teensynofrendo/nes_apu.h
Executable file
349
MCUME_teensy41/teensynofrendo/nes_apu.h
Executable file
|
|
@ -0,0 +1,349 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_apu.h
|
||||
**
|
||||
** NES APU emulation header file
|
||||
** $Id: nes_apu.h,v 1.1 2001/04/27 12:54:40 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NES_APU_H_
|
||||
#define _NES_APU_H_
|
||||
|
||||
|
||||
/* define this for realtime generated noise */
|
||||
#define REALTIME_NOISE
|
||||
|
||||
#define APU_WRA0 0x4000
|
||||
#define APU_WRA1 0x4001
|
||||
#define APU_WRA2 0x4002
|
||||
#define APU_WRA3 0x4003
|
||||
#define APU_WRB0 0x4004
|
||||
#define APU_WRB1 0x4005
|
||||
#define APU_WRB2 0x4006
|
||||
#define APU_WRB3 0x4007
|
||||
#define APU_WRC0 0x4008
|
||||
#define APU_WRC2 0x400A
|
||||
#define APU_WRC3 0x400B
|
||||
#define APU_WRD0 0x400C
|
||||
#define APU_WRD2 0x400E
|
||||
#define APU_WRD3 0x400F
|
||||
#define APU_WRE0 0x4010
|
||||
#define APU_WRE1 0x4011
|
||||
#define APU_WRE2 0x4012
|
||||
#define APU_WRE3 0x4013
|
||||
|
||||
#define APU_SMASK 0x4015
|
||||
|
||||
/* length of generated noise */
|
||||
#define APU_NOISE_32K 0x7FFF
|
||||
#define APU_NOISE_93 93
|
||||
|
||||
#define APU_BASEFREQ 1789772.7272727272727272
|
||||
|
||||
|
||||
/* channel structures */
|
||||
/* As much data as possible is precalculated,
|
||||
** to keep the sample processing as lean as possible
|
||||
*/
|
||||
|
||||
typedef struct rectangle_s
|
||||
{
|
||||
uint8 regs[4];
|
||||
|
||||
bool enabled;
|
||||
|
||||
float accum;
|
||||
int32 freq;
|
||||
int32 output_vol;
|
||||
bool fixed_envelope;
|
||||
bool holdnote;
|
||||
uint8 volume;
|
||||
|
||||
int32 sweep_phase;
|
||||
int32 sweep_delay;
|
||||
bool sweep_on;
|
||||
uint8 sweep_shifts;
|
||||
uint8 sweep_length;
|
||||
bool sweep_inc;
|
||||
|
||||
/* this may not be necessary in the future */
|
||||
int32 freq_limit;
|
||||
int32 env_phase;
|
||||
int32 env_delay;
|
||||
uint8 env_vol;
|
||||
|
||||
int vbl_length;
|
||||
uint8 adder;
|
||||
int duty_flip;
|
||||
} rectangle_t;
|
||||
|
||||
typedef struct triangle_s
|
||||
{
|
||||
uint8 regs[3];
|
||||
|
||||
bool enabled;
|
||||
|
||||
float accum;
|
||||
int32 freq;
|
||||
int32 output_vol;
|
||||
|
||||
uint8 adder;
|
||||
|
||||
bool holdnote;
|
||||
bool counter_started;
|
||||
/* quasi-hack */
|
||||
int write_latency;
|
||||
|
||||
int vbl_length;
|
||||
int linear_length;
|
||||
} triangle_t;
|
||||
|
||||
|
||||
typedef struct noise_s
|
||||
{
|
||||
uint8 regs[3];
|
||||
|
||||
bool enabled;
|
||||
|
||||
float accum;
|
||||
int32 freq;
|
||||
int32 output_vol;
|
||||
|
||||
int32 env_phase;
|
||||
int32 env_delay;
|
||||
uint8 env_vol;
|
||||
bool fixed_envelope;
|
||||
bool holdnote;
|
||||
|
||||
uint8 volume;
|
||||
|
||||
int vbl_length;
|
||||
|
||||
#ifdef REALTIME_NOISE
|
||||
uint8 xor_tap;
|
||||
#else
|
||||
bool short_sample;
|
||||
int cur_pos;
|
||||
#endif /* REALTIME_NOISE */
|
||||
} noise_t;
|
||||
|
||||
typedef struct dmc_s
|
||||
{
|
||||
uint8 regs[4];
|
||||
|
||||
/* bodge for timestamp queue */
|
||||
bool enabled;
|
||||
|
||||
float accum;
|
||||
int32 freq;
|
||||
int32 output_vol;
|
||||
|
||||
uint32 address;
|
||||
uint32 cached_addr;
|
||||
int dma_length;
|
||||
int cached_dmalength;
|
||||
uint8 cur_byte;
|
||||
|
||||
bool looping;
|
||||
bool irq_gen;
|
||||
bool irq_occurred;
|
||||
|
||||
} dmc_t;
|
||||
|
||||
enum
|
||||
{
|
||||
APU_FILTER_NONE,
|
||||
APU_FILTER_LOWPASS,
|
||||
APU_FILTER_WEIGHTED
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
uint8 (*read_func)(uint32 address);
|
||||
} apu_memread;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
void (*write_func)(uint32 address, uint8 value);
|
||||
} apu_memwrite;
|
||||
|
||||
/* external sound chip stuff */
|
||||
typedef struct apuext_s
|
||||
{
|
||||
int (*init)(void);
|
||||
void (*shutdown)(void);
|
||||
void (*reset)(void);
|
||||
int32 (*process)(void);
|
||||
apu_memread *mem_read;
|
||||
apu_memwrite *mem_write;
|
||||
} apuext_t;
|
||||
|
||||
|
||||
typedef struct apu_s
|
||||
{
|
||||
rectangle_t rectangle[2];
|
||||
triangle_t triangle;
|
||||
noise_t noise;
|
||||
dmc_t dmc;
|
||||
uint8 enable_reg;
|
||||
|
||||
void *buffer; /* pointer to output buffer */
|
||||
int num_samples;
|
||||
|
||||
uint8 mix_enable;
|
||||
int filter_type;
|
||||
|
||||
double base_freq;
|
||||
float cycle_rate;
|
||||
|
||||
int sample_rate;
|
||||
int sample_bits;
|
||||
int refresh_rate;
|
||||
|
||||
void (*process)(void *buffer, int num_samples);
|
||||
void (*irq_callback)(void);
|
||||
uint8 (*irqclear_callback)(void);
|
||||
|
||||
/* external sound chip */
|
||||
apuext_t *ext;
|
||||
} apu_t;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Function prototypes */
|
||||
extern void apu_setcontext(apu_t *src_apu);
|
||||
extern void apu_getcontext(apu_t *dest_apu);
|
||||
|
||||
extern void apu_setparams(double base_freq, int sample_rate, int refresh_rate, int sample_bits);
|
||||
extern apu_t *apu_create(double base_freq, int sample_rate, int refresh_rate, int sample_bits);
|
||||
extern void apu_destroy(apu_t **apu);
|
||||
|
||||
extern void apu_process(void *buffer, int num_samples);
|
||||
extern void apu_reset(void);
|
||||
|
||||
extern void apu_setext(apu_t *apu, apuext_t *ext);
|
||||
extern void apu_setfilter(int filter_type);
|
||||
extern void apu_setchan(int chan, bool enabled);
|
||||
|
||||
extern uint8 apu_read(uint32 address);
|
||||
extern void apu_write(uint32 address, uint8 value);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _NES_APU_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes_apu.h,v $
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.3 2000/12/08 02:36:14 matt
|
||||
** bye bye apu queue (for now)
|
||||
**
|
||||
** Revision 1.2 2000/10/28 15:20:59 matt
|
||||
** irq callbacks in nes_apu
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:19:59 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.28 2000/10/17 11:56:42 matt
|
||||
** selectable apu base frequency
|
||||
**
|
||||
** Revision 1.27 2000/10/10 13:58:18 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.26 2000/09/28 23:20:58 matt
|
||||
** bye bye, fixed point
|
||||
**
|
||||
** Revision 1.25 2000/09/27 12:26:03 matt
|
||||
** changed sound accumulators back to floats
|
||||
**
|
||||
** Revision 1.24 2000/09/18 02:12:55 matt
|
||||
** more optimizations
|
||||
**
|
||||
** Revision 1.23 2000/09/15 13:38:40 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.22 2000/09/15 04:58:07 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.21 2000/08/11 02:27:21 matt
|
||||
** general cleanups, plus apu_setparams routine
|
||||
**
|
||||
** Revision 1.20 2000/07/30 04:32:59 matt
|
||||
** no more apu_getcyclerate hack
|
||||
**
|
||||
** Revision 1.19 2000/07/27 02:49:50 matt
|
||||
** eccentricity in sweeping hardware now emulated correctly
|
||||
**
|
||||
** Revision 1.18 2000/07/25 02:25:15 matt
|
||||
** safer apu_destroy
|
||||
**
|
||||
** Revision 1.17 2000/07/23 15:10:54 matt
|
||||
** hacks for win32
|
||||
**
|
||||
** Revision 1.16 2000/07/23 00:48:15 neil
|
||||
** Win32 SDL
|
||||
**
|
||||
** Revision 1.15 2000/07/17 01:52:31 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.14 2000/07/11 02:39:26 matt
|
||||
** added setcontext() routine
|
||||
**
|
||||
** Revision 1.13 2000/07/10 05:29:34 matt
|
||||
** moved joypad/oam dma from apu to ppu
|
||||
**
|
||||
** Revision 1.12 2000/07/04 04:54:48 matt
|
||||
** minor changes that helped with MAME
|
||||
**
|
||||
** Revision 1.11 2000/07/03 02:18:53 matt
|
||||
** much better external module exporting
|
||||
**
|
||||
** Revision 1.10 2000/06/26 05:00:37 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.9 2000/06/23 03:29:28 matt
|
||||
** cleaned up external sound inteface
|
||||
**
|
||||
** Revision 1.8 2000/06/20 04:06:16 matt
|
||||
** migrated external sound definition to apu module
|
||||
**
|
||||
** Revision 1.7 2000/06/20 00:07:35 matt
|
||||
** added convenience members to apu_t struct
|
||||
**
|
||||
** Revision 1.6 2000/06/09 16:49:02 matt
|
||||
** removed all floating point from sound generation
|
||||
**
|
||||
** Revision 1.5 2000/06/09 15:12:28 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
302
MCUME_teensy41/teensynofrendo/nes_emu.cpp
Normal file
302
MCUME_teensy41/teensynofrendo/nes_emu.cpp
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
#include "emuapi.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//Nes stuff wants to define this as well...
|
||||
//#undef false
|
||||
//#undef true
|
||||
//#undef bool
|
||||
|
||||
extern "C" {
|
||||
#include "noftypes.h"
|
||||
#include "nes.h"
|
||||
#include "nofrendo.h"
|
||||
#include "osd.h"
|
||||
#include "nesinput.h"
|
||||
#include "event.h"
|
||||
#include "nofconfig.h"
|
||||
}
|
||||
|
||||
#define DEFAULT_WIDTH 256
|
||||
#define DEFAULT_HEIGHT NES_VISIBLE_HEIGHT
|
||||
|
||||
char configfilename[]="na";
|
||||
char romname[64];
|
||||
char* romdata=NULL;
|
||||
|
||||
|
||||
static int ik; // joypad key
|
||||
static int pik=0;
|
||||
|
||||
static int ihk; // I2C keyboard key
|
||||
static int iusbhk;// USB keyboard key
|
||||
|
||||
void emu_KeyboardOnDown(int keymodifer, int key) {
|
||||
}
|
||||
|
||||
void emu_KeyboardOnUp(int keymodifer, int key) {
|
||||
}
|
||||
|
||||
void nes_Input(int key) {
|
||||
ik = emu_GetPad();
|
||||
ihk = emu_ReadI2CKeyboard();
|
||||
}
|
||||
|
||||
void nes_Init(void)
|
||||
{
|
||||
#if HAS_SND
|
||||
emu_sndInit();
|
||||
#endif
|
||||
nofrendo_main(0, NULL);
|
||||
}
|
||||
|
||||
void nes_Step(void)
|
||||
{
|
||||
nes_step(emu_FrameSkip());
|
||||
//delay(20);
|
||||
emu_DrawVsync();
|
||||
}
|
||||
|
||||
void nes_Start(char * filename)
|
||||
{
|
||||
strcpy(romname,filename);
|
||||
int romsize = emu_FileSize(filename);
|
||||
romdata = (char*)emu_Malloc(romsize);
|
||||
if (romdata)
|
||||
{
|
||||
int f=emu_FileOpen(filename,"r+b");
|
||||
if (f) {
|
||||
if (emu_FileRead((char*)romdata, romsize, f) != romsize ) {
|
||||
romdata = NULL;
|
||||
}
|
||||
emu_FileClose(f);
|
||||
} else {
|
||||
romdata = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* This is os-specific part of main() */
|
||||
int osd_main(int argc, char *argv[])
|
||||
{
|
||||
config.filename = configfilename;
|
||||
|
||||
return main_loop(romname, system_autodetect);
|
||||
}
|
||||
|
||||
/* File system interface */
|
||||
void osd_fullname(char *fullname, const char *shortname)
|
||||
{
|
||||
strncpy(fullname, shortname, 64);
|
||||
}
|
||||
|
||||
/* This gives filenames for storage of saves */
|
||||
char *osd_newextension(char *string, char *ext)
|
||||
{
|
||||
return string;
|
||||
}
|
||||
|
||||
/* This gives filenames for storage of PCX snapshots */
|
||||
int osd_makesnapname(char *filename, int len)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if HAS_SND
|
||||
static void (*audio_callback)(void *buffer, int length) = NULL;
|
||||
|
||||
void SND_Process( void * stream, int len )
|
||||
{
|
||||
if (audio_callback != NULL) {
|
||||
audio_callback(stream,len);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void osd_setsound(void (*playfunc)(void *buffer, int length))
|
||||
{
|
||||
//Indicates we should call playfunc() to get more data.
|
||||
#if HAS_SND
|
||||
audio_callback = playfunc;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void osd_stopsound(void)
|
||||
{
|
||||
#if HAS_SND
|
||||
audio_callback = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static int osd_init_sound(void)
|
||||
{
|
||||
#if HAS_SND
|
||||
audio_callback = NULL;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void osd_getsoundinfo(sndinfo_t *info)
|
||||
{
|
||||
info->sample_rate = (22050*20000)/16666; // fix for 60Hz
|
||||
info->bps = 16;
|
||||
}
|
||||
|
||||
|
||||
void osd_getinput(void)
|
||||
{
|
||||
const int ev[16]={
|
||||
event_joypad1_select,0,0,event_joypad1_start,event_joypad1_up,event_joypad1_right,event_joypad1_down,event_joypad1_left,
|
||||
0,0,0,0,event_soft_reset,event_joypad1_a,event_joypad1_b,event_hard_reset
|
||||
};
|
||||
|
||||
int j = ik;
|
||||
int hk = ihk;
|
||||
int b=0xffff;
|
||||
|
||||
if ( (j & MASK_KEY_USER2) || (hk == 'a') ) // A
|
||||
b &= ~0x2000;
|
||||
if ( (j & MASK_KEY_USER3) || (hk == 'q') ) // SELECT
|
||||
b &= ~0x0001;
|
||||
if ( (j & MASK_KEY_USER1) || (hk == 'w') ) // START
|
||||
b &= ~0x0008;
|
||||
if (j & MASK_JOY2_UP)
|
||||
b &= ~0x0010;
|
||||
if (j & MASK_JOY2_LEFT)
|
||||
b &= ~0x0020;
|
||||
if (j & MASK_JOY2_DOWN)
|
||||
b &= ~0x0040;
|
||||
if (j & MASK_JOY2_RIGHT)
|
||||
b &= ~0x0080;
|
||||
if (j & MASK_JOY2_BTN) // B
|
||||
b &= ~0x4000;
|
||||
|
||||
|
||||
static int oldb=0xffff;
|
||||
|
||||
int chg=b^oldb;
|
||||
int x;
|
||||
oldb=b;
|
||||
event_t evh;
|
||||
for (x=0; x<16; x++) {
|
||||
if (chg&1) {
|
||||
evh=event_get(ev[x]);
|
||||
if (evh) evh((b&1)?INP_STATE_BREAK:INP_STATE_MAKE);
|
||||
}
|
||||
chg>>=1;
|
||||
b>>=1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void osd_getmouse(int *x, int *y, int *button)
|
||||
{
|
||||
}
|
||||
|
||||
/* this is at the bottom, to eliminate warnings */
|
||||
void osd_shutdown()
|
||||
{
|
||||
}
|
||||
|
||||
int osd_init()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Video
|
||||
*/
|
||||
static int init(int width, int height)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static int set_mode(int width, int height)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bitmap_t *myBitmap=NULL;
|
||||
static void set_palette(rgb_t *pal)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < PALETTE_SIZE; i++)
|
||||
{
|
||||
emu_SetPaletteEntry(pal[i].r, pal[i].g, pal[i].b,i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* clear all frames to a particular color */
|
||||
static void clear(uint8 color)
|
||||
{
|
||||
}
|
||||
|
||||
/* acquire the directbuffer for writing */
|
||||
static char fb[1]; //dummy
|
||||
static bitmap_t *lock_write(void)
|
||||
{
|
||||
if (myBitmap == NULL)
|
||||
myBitmap = bmp_createhw((uint8*)fb, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_WIDTH*2);
|
||||
|
||||
return myBitmap;
|
||||
}
|
||||
|
||||
/* release the resource */
|
||||
static void free_write(int num_dirties, rect_t *dirty_rects)
|
||||
{
|
||||
//bmp_destroy(&myBitmap);
|
||||
}
|
||||
|
||||
|
||||
static void custom_blit(bitmap_t *bmp, int num_dirties, rect_t *dirty_rects) {
|
||||
}
|
||||
|
||||
static viddriver_t sdlDriver =
|
||||
{
|
||||
"Simple DirectMedia Layer", /* name */
|
||||
init, /* init */
|
||||
shutdown, /* shutdown */
|
||||
set_mode, /* set_mode */
|
||||
set_palette, /* set_palette */
|
||||
clear, /* clear */
|
||||
lock_write, /* lock_write */
|
||||
free_write, /* free_write */
|
||||
custom_blit, /* custom_blit */
|
||||
false /* invalidate flag */
|
||||
};
|
||||
|
||||
void osd_getvideoinfo(vidinfo_t *info)
|
||||
{
|
||||
info->default_width = DEFAULT_WIDTH;
|
||||
info->default_height = DEFAULT_HEIGHT;
|
||||
info->driver = &sdlDriver;
|
||||
}
|
||||
|
||||
void osd_togglefullscreen(int code)
|
||||
{
|
||||
}
|
||||
|
||||
//Seemingly, this will be called only once. Should call func with a freq of frequency,
|
||||
int osd_installtimer(int frequency, void *func, int funcsize, void *counter, int countersize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern "C" char *osd_getromdata();
|
||||
|
||||
char *osd_getromdata() {
|
||||
|
||||
return (char*)romdata;
|
||||
}
|
||||
4
MCUME_teensy41/teensynofrendo/nes_emu.h
Normal file
4
MCUME_teensy41/teensynofrendo/nes_emu.h
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
extern void nes_Init(void);
|
||||
extern void nes_Step(void);
|
||||
extern void nes_Start(char * filename);
|
||||
extern void nes_Input(int key);
|
||||
353
MCUME_teensy41/teensynofrendo/nes_mmc.c
Executable file
353
MCUME_teensy41/teensynofrendo/nes_mmc.c
Executable file
|
|
@ -0,0 +1,353 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_mmc.c
|
||||
**
|
||||
** NES Memory Management Controller (mapper) emulation
|
||||
** $Id: nes_mmc.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "nes6502.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "libsnss.h"
|
||||
#include "log.h"
|
||||
#include "mmclist.h"
|
||||
#include "nes_rom.h"
|
||||
|
||||
#define MMC_8KROM (mmc.cart->rom_banks * 2)
|
||||
#define MMC_16KROM (mmc.cart->rom_banks)
|
||||
#define MMC_32KROM (mmc.cart->rom_banks / 2)
|
||||
#define MMC_8KVROM (mmc.cart->vrom_banks)
|
||||
#define MMC_4KVROM (mmc.cart->vrom_banks * 2)
|
||||
#define MMC_2KVROM (mmc.cart->vrom_banks * 4)
|
||||
#define MMC_1KVROM (mmc.cart->vrom_banks * 8)
|
||||
|
||||
#define MMC_LAST8KROM (MMC_8KROM - 1)
|
||||
#define MMC_LAST16KROM (MMC_16KROM - 1)
|
||||
#define MMC_LAST32KROM (MMC_32KROM - 1)
|
||||
#define MMC_LAST8KVROM (MMC_8KVROM - 1)
|
||||
#define MMC_LAST4KVROM (MMC_4KVROM - 1)
|
||||
#define MMC_LAST2KVROM (MMC_2KVROM - 1)
|
||||
#define MMC_LAST1KVROM (MMC_1KVROM - 1)
|
||||
|
||||
static mmc_t mmc;
|
||||
|
||||
rominfo_t *mmc_getinfo(void)
|
||||
{
|
||||
return mmc.cart;
|
||||
}
|
||||
|
||||
void mmc_setcontext(mmc_t *src_mmc)
|
||||
{
|
||||
ASSERT(src_mmc);
|
||||
|
||||
mmc = *src_mmc;
|
||||
}
|
||||
|
||||
void mmc_getcontext(mmc_t *dest_mmc)
|
||||
{
|
||||
*dest_mmc = mmc;
|
||||
}
|
||||
|
||||
/* VROM bankswitching */
|
||||
void mmc_bankvrom(int size, uint32 address, int bank)
|
||||
{
|
||||
if (0 == mmc.cart->vrom_banks)
|
||||
return;
|
||||
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST1KVROM;
|
||||
ppu_setpage(1, address >> 10, &mmc.cart->vrom[(bank % MMC_1KVROM) << 10] - address);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST2KVROM;
|
||||
ppu_setpage(2, address >> 10, &mmc.cart->vrom[(bank % MMC_2KVROM) << 11] - address);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST4KVROM;
|
||||
ppu_setpage(4, address >> 10, &mmc.cart->vrom[(bank % MMC_4KVROM) << 12] - address);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST8KVROM;
|
||||
ppu_setpage(8, 0, &mmc.cart->vrom[(bank % MMC_8KVROM) << 13]);
|
||||
break;
|
||||
|
||||
default:
|
||||
log_printf("invalid VROM bank size %d\n", size);
|
||||
}
|
||||
}
|
||||
|
||||
/* ROM bankswitching */
|
||||
void mmc_bankrom(int size, uint32 address, int bank)
|
||||
{
|
||||
nes6502_context mmc_cpu;
|
||||
|
||||
nes6502_getcontext(&mmc_cpu);
|
||||
|
||||
switch (size)
|
||||
{
|
||||
case 8:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST8KROM;
|
||||
{
|
||||
int page = address >> NES6502_BANKSHIFT;
|
||||
mmc_cpu.mem_page[page] = &mmc.cart->rom[(bank % MMC_8KROM) << 13];
|
||||
mmc_cpu.mem_page[page + 1] = mmc_cpu.mem_page[page] + 0x1000;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 16:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST16KROM;
|
||||
{
|
||||
int page = address >> NES6502_BANKSHIFT;
|
||||
mmc_cpu.mem_page[page] = &mmc.cart->rom[(bank % MMC_16KROM) << 14];
|
||||
mmc_cpu.mem_page[page + 1] = mmc_cpu.mem_page[page] + 0x1000;
|
||||
mmc_cpu.mem_page[page + 2] = mmc_cpu.mem_page[page] + 0x2000;
|
||||
mmc_cpu.mem_page[page + 3] = mmc_cpu.mem_page[page] + 0x3000;
|
||||
}
|
||||
break;
|
||||
|
||||
case 32:
|
||||
if (bank == MMC_LASTBANK)
|
||||
bank = MMC_LAST32KROM;
|
||||
|
||||
mmc_cpu.mem_page[8] = &mmc.cart->rom[(bank % MMC_32KROM) << 15];
|
||||
mmc_cpu.mem_page[9] = mmc_cpu.mem_page[8] + 0x1000;
|
||||
mmc_cpu.mem_page[10] = mmc_cpu.mem_page[8] + 0x2000;
|
||||
mmc_cpu.mem_page[11] = mmc_cpu.mem_page[8] + 0x3000;
|
||||
mmc_cpu.mem_page[12] = mmc_cpu.mem_page[8] + 0x4000;
|
||||
mmc_cpu.mem_page[13] = mmc_cpu.mem_page[8] + 0x5000;
|
||||
mmc_cpu.mem_page[14] = mmc_cpu.mem_page[8] + 0x6000;
|
||||
mmc_cpu.mem_page[15] = mmc_cpu.mem_page[8] + 0x7000;
|
||||
break;
|
||||
|
||||
default:
|
||||
log_printf("invalid ROM bank size %d\n", size);
|
||||
break;
|
||||
}
|
||||
|
||||
nes6502_setcontext(&mmc_cpu);
|
||||
}
|
||||
|
||||
/* Check to see if this mapper is supported */
|
||||
bool mmc_peek(int map_num)
|
||||
{
|
||||
mapintf_t **map_ptr = mappers;
|
||||
|
||||
while (NULL != *map_ptr)
|
||||
{
|
||||
if ((*map_ptr)->number == map_num)
|
||||
return true;
|
||||
map_ptr++;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void mmc_setpages(void)
|
||||
{
|
||||
log_printf("setting up mapper %d\n", mmc.intf->number);
|
||||
|
||||
/* Switch ROM into CPU space, set VROM/VRAM (done for ALL ROMs) */
|
||||
mmc_bankrom(16, 0x8000, 0);
|
||||
mmc_bankrom(16, 0xC000, MMC_LASTBANK);
|
||||
mmc_bankvrom(8, 0x0000, 0);
|
||||
|
||||
if (mmc.cart->flags & ROM_FLAG_FOURSCREEN)
|
||||
{
|
||||
ppu_mirror(0, 1, 2, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MIRROR_VERT == mmc.cart->mirror)
|
||||
ppu_mirror(0, 1, 0, 1);
|
||||
else
|
||||
ppu_mirror(0, 0, 1, 1);
|
||||
}
|
||||
|
||||
/* if we have no VROM, switch in VRAM */
|
||||
/* TODO: fix this hack implementation */
|
||||
if (0 == mmc.cart->vrom_banks)
|
||||
{
|
||||
ASSERT(mmc.cart->vram);
|
||||
|
||||
ppu_setpage(8, 0, mmc.cart->vram);
|
||||
ppu_mirrorhipages();
|
||||
}
|
||||
}
|
||||
|
||||
/* Mapper initialization routine */
|
||||
void mmc_reset(void)
|
||||
{
|
||||
mmc_setpages();
|
||||
|
||||
ppu_setlatchfunc(NULL);
|
||||
ppu_setvromswitch(NULL);
|
||||
|
||||
if (mmc.intf->init)
|
||||
mmc.intf->init();
|
||||
|
||||
log_printf("reset memory mapper\n");
|
||||
}
|
||||
|
||||
|
||||
void mmc_destroy(mmc_t **nes_mmc)
|
||||
{
|
||||
if (*nes_mmc)
|
||||
free(*nes_mmc);
|
||||
}
|
||||
|
||||
mmc_t *mmc_create(rominfo_t *rominfo)
|
||||
{
|
||||
mmc_t *temp;
|
||||
mapintf_t **map_ptr;
|
||||
|
||||
for (map_ptr = mappers; (*map_ptr)->number != rominfo->mapper_number; map_ptr++)
|
||||
{
|
||||
if (NULL == *map_ptr)
|
||||
return NULL; /* Should *never* happen */
|
||||
}
|
||||
|
||||
temp = malloc(sizeof(mmc_t));
|
||||
if (NULL == temp)
|
||||
return NULL;
|
||||
|
||||
memset(temp, 0, sizeof(mmc_t));
|
||||
|
||||
temp->intf = *map_ptr;
|
||||
temp->cart = rominfo;
|
||||
|
||||
mmc_setcontext(temp);
|
||||
|
||||
log_printf("created memory mapper: %s\n", (*map_ptr)->name);
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** $Log: nes_mmc.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.4 2000/11/21 13:28:40 matt
|
||||
** take care to zero allocated mem
|
||||
**
|
||||
** Revision 1.3 2000/10/27 12:55:58 matt
|
||||
** nes6502 now uses 4kB banks across the boards
|
||||
**
|
||||
** Revision 1.2 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.28 2000/10/22 19:17:24 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.27 2000/10/22 15:02:32 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.26 2000/10/21 19:38:56 matt
|
||||
** that two year old crap code *was* flushed
|
||||
**
|
||||
** Revision 1.25 2000/10/21 19:26:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.24 2000/10/17 03:22:57 matt
|
||||
** cleaning up rom module
|
||||
**
|
||||
** Revision 1.23 2000/10/10 13:58:15 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.22 2000/08/16 02:51:55 matt
|
||||
** random cleanups
|
||||
**
|
||||
** Revision 1.21 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.20 2000/07/25 02:25:53 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.19 2000/07/23 15:11:45 matt
|
||||
** removed unused variables
|
||||
**
|
||||
** Revision 1.18 2000/07/15 23:50:03 matt
|
||||
** migrated state get/set from nes_mmc.c to state.c
|
||||
**
|
||||
** Revision 1.17 2000/07/11 03:15:09 melanson
|
||||
** Added support for mappers 16, 34, and 231
|
||||
**
|
||||
** Revision 1.16 2000/07/10 05:27:41 matt
|
||||
** cleaned up mapper-specific callbacks
|
||||
**
|
||||
** Revision 1.15 2000/07/10 03:02:49 matt
|
||||
** minor change on loading state
|
||||
**
|
||||
** Revision 1.14 2000/07/06 17:38:49 matt
|
||||
** replaced missing string.h include
|
||||
**
|
||||
** Revision 1.13 2000/07/06 02:47:11 matt
|
||||
** mapper addition madness
|
||||
**
|
||||
** Revision 1.12 2000/07/05 05:04:15 matt
|
||||
** added more mappers
|
||||
**
|
||||
** Revision 1.11 2000/07/04 23:12:58 matt
|
||||
** brand spankin' new mapper interface implemented
|
||||
**
|
||||
** Revision 1.10 2000/07/04 04:56:36 matt
|
||||
** modifications for new SNSS
|
||||
**
|
||||
** Revision 1.9 2000/06/29 14:17:18 matt
|
||||
** uses snsslib now
|
||||
**
|
||||
** Revision 1.8 2000/06/29 03:09:24 matt
|
||||
** modified to support new snss code
|
||||
**
|
||||
** Revision 1.7 2000/06/26 04:57:54 matt
|
||||
** bugfix - irqs/mmcstate not cleared on reset
|
||||
**
|
||||
** Revision 1.6 2000/06/23 11:01:10 matt
|
||||
** updated for new external sound interface
|
||||
**
|
||||
** Revision 1.5 2000/06/20 04:04:57 matt
|
||||
** hacked to use new external soundchip struct
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
146
MCUME_teensy41/teensynofrendo/nes_mmc.h
Executable file
146
MCUME_teensy41/teensynofrendo/nes_mmc.h
Executable file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_mmc.h
|
||||
**
|
||||
** NES Memory Management Controller (mapper) defines / prototypes
|
||||
** $Id: nes_mmc.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NES_MMC_H_
|
||||
#define _NES_MMC_H_
|
||||
|
||||
#include "libsnss.h"
|
||||
#include "nes_apu.h"
|
||||
|
||||
#define MMC_LASTBANK -1
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
uint8 (*read_func)(uint32 address);
|
||||
} map_memread;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_range, max_range;
|
||||
void (*write_func)(uint32 address, uint8 value);
|
||||
} map_memwrite;
|
||||
|
||||
|
||||
typedef struct mapintf_s
|
||||
{
|
||||
int number;
|
||||
char *name;
|
||||
void (*init)(void);
|
||||
void (*vblank)(void);
|
||||
void (*hblank)(int vblank);
|
||||
void (*get_state)(SnssMapperBlock *state);
|
||||
void (*set_state)(SnssMapperBlock *state);
|
||||
map_memread *mem_read;
|
||||
map_memwrite *mem_write;
|
||||
apuext_t *sound_ext;
|
||||
} mapintf_t;
|
||||
|
||||
|
||||
#include "nes_rom.h"
|
||||
typedef struct mmc_s
|
||||
{
|
||||
mapintf_t *intf;
|
||||
rominfo_t *cart; /* link it back to the cart */
|
||||
} mmc_t;
|
||||
|
||||
extern rominfo_t *mmc_getinfo(void);
|
||||
|
||||
extern void mmc_bankvrom(int size, uint32 address, int bank);
|
||||
extern void mmc_bankrom(int size, uint32 address, int bank);
|
||||
|
||||
/* Prototypes */
|
||||
extern mmc_t *mmc_create(rominfo_t *rominfo);
|
||||
extern void mmc_destroy(mmc_t **nes_mmc);
|
||||
|
||||
extern void mmc_getcontext(mmc_t *dest_mmc);
|
||||
extern void mmc_setcontext(mmc_t *src_mmc);
|
||||
|
||||
extern bool mmc_peek(int map_num);
|
||||
|
||||
extern void mmc_reset(void);
|
||||
|
||||
#endif /* _NES_MMC_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes_mmc.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.18 2000/10/22 19:17:24 matt
|
||||
** mapper cleanups galore
|
||||
**
|
||||
** Revision 1.17 2000/10/21 19:26:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.16 2000/10/17 03:22:58 matt
|
||||
** cleaning up rom module
|
||||
**
|
||||
** Revision 1.15 2000/10/10 13:58:15 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.14 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.13 2000/07/25 02:25:53 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.12 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.11 2000/07/15 23:50:03 matt
|
||||
** migrated state get/set from nes_mmc.c to state.c
|
||||
**
|
||||
** Revision 1.10 2000/07/11 02:38:01 matt
|
||||
** added setcontext() routine
|
||||
**
|
||||
** Revision 1.9 2000/07/10 05:27:41 matt
|
||||
** cleaned up mapper-specific callbacks
|
||||
**
|
||||
** Revision 1.8 2000/07/04 23:12:58 matt
|
||||
** brand spankin' new mapper interface implemented
|
||||
**
|
||||
** Revision 1.7 2000/07/04 04:56:36 matt
|
||||
** modifications for new SNSS
|
||||
**
|
||||
** Revision 1.6 2000/06/29 14:17:18 matt
|
||||
** uses snsslib now
|
||||
**
|
||||
** Revision 1.5 2000/06/29 03:09:24 matt
|
||||
** modified to support new snss code
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
185
MCUME_teensy41/teensynofrendo/nes_pal.c
Normal file
185
MCUME_teensy41/teensynofrendo/nes_pal.c
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_pal.c
|
||||
**
|
||||
** NES RGB palette
|
||||
** $Id: nes_pal.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include "noftypes.h"
|
||||
#include "bitmap.h"
|
||||
#include "nes_pal.h"
|
||||
|
||||
#ifndef PI
|
||||
#define PI 3.1415926535897932384626433832795
|
||||
#endif
|
||||
|
||||
/* my NES palette, converted to RGB */
|
||||
const rgb_t shady_palette[] =
|
||||
{
|
||||
{0x80,0x80,0x80}, {0x00,0x00,0xBB}, {0x37,0x00,0xBF}, {0x84,0x00,0xA6},
|
||||
{0xBB,0x00,0x6A}, {0xB7,0x00,0x1E}, {0xB3,0x00,0x00}, {0x91,0x26,0x00},
|
||||
{0x7B,0x2B,0x00}, {0x00,0x3E,0x00}, {0x00,0x48,0x0D}, {0x00,0x3C,0x22},
|
||||
{0x00,0x2F,0x66}, {0x00,0x00,0x00}, {0x05,0x05,0x05}, {0x05,0x05,0x05},
|
||||
|
||||
{0xC8,0xC8,0xC8}, {0x00,0x59,0xFF}, {0x44,0x3C,0xFF}, {0xB7,0x33,0xCC},
|
||||
{0xFF,0x33,0xAA}, {0xFF,0x37,0x5E}, {0xFF,0x37,0x1A}, {0xD5,0x4B,0x00},
|
||||
{0xC4,0x62,0x00}, {0x3C,0x7B,0x00}, {0x1E,0x84,0x15}, {0x00,0x95,0x66},
|
||||
{0x00,0x84,0xC4}, {0x11,0x11,0x11}, {0x09,0x09,0x09}, {0x09,0x09,0x09},
|
||||
|
||||
{0xFF,0xFF,0xFF}, {0x00,0x95,0xFF}, {0x6F,0x84,0xFF}, {0xD5,0x6F,0xFF},
|
||||
{0xFF,0x77,0xCC}, {0xFF,0x6F,0x99}, {0xFF,0x7B,0x59}, {0xFF,0x91,0x5F},
|
||||
{0xFF,0xA2,0x33}, {0xA6,0xBF,0x00}, {0x51,0xD9,0x6A}, {0x4D,0xD5,0xAE},
|
||||
{0x00,0xD9,0xFF}, {0x66,0x66,0x66}, {0x0D,0x0D,0x0D}, {0x0D,0x0D,0x0D},
|
||||
|
||||
{0xFF,0xFF,0xFF}, {0x84,0xBF,0xFF}, {0xBB,0xBB,0xFF}, {0xD0,0xBB,0xFF},
|
||||
{0xFF,0xBF,0xEA}, {0xFF,0xBF,0xCC}, {0xFF,0xC4,0xB7}, {0xFF,0xCC,0xAE},
|
||||
{0xFF,0xD9,0xA2}, {0xCC,0xE1,0x99}, {0xAE,0xEE,0xB7}, {0xAA,0xF7,0xEE},
|
||||
{0xB3,0xEE,0xFF}, {0xDD,0xDD,0xDD}, {0x11,0x11,0x11}, {0x11,0x11,0x11}
|
||||
};
|
||||
|
||||
/* dynamic palette building routines,
|
||||
** care of Kevin Horton (khorton@iquest.net)
|
||||
*/
|
||||
|
||||
/* our global palette */
|
||||
rgb_t nes_palette[64];
|
||||
|
||||
|
||||
static float hue = 334.0f;
|
||||
static float tint = 0.4f;
|
||||
|
||||
|
||||
static const float brightness[4][4] =
|
||||
{
|
||||
{ 0.50f, 0.75f, 1.00f, 1.00f },
|
||||
{ 0.29f, 0.45f, 0.73f, 0.90f },
|
||||
{ 0.00f, 0.24f, 0.47f, 0.77f },
|
||||
{ 0.02f, 0.04f, 0.05f, 0.07f }
|
||||
};
|
||||
|
||||
static const int col_angles[16] =
|
||||
{
|
||||
0, 240, 210, 180, 150, 120, 90, 60, 30, 0, 330, 300, 270, 0, 0, 0
|
||||
};
|
||||
|
||||
void pal_generate(void)
|
||||
{
|
||||
int x, z;
|
||||
float s, y, theta;
|
||||
int r, g, b;
|
||||
|
||||
for (x = 0; x < 4; x++)
|
||||
{
|
||||
for (z = 0; z < 16; z++)
|
||||
{
|
||||
switch (z)
|
||||
{
|
||||
case 0:
|
||||
/* is color $x0? If so, get luma */
|
||||
s = 0;
|
||||
y = brightness[0][x];
|
||||
break;
|
||||
|
||||
case 13:
|
||||
/* is color $xD? If so, get luma */
|
||||
s = 0;
|
||||
y = brightness[2][x];
|
||||
break;
|
||||
|
||||
case 14:
|
||||
case 15:
|
||||
/* is color $xE/F? If so, set to black */
|
||||
s = 0;
|
||||
y = brightness[3][x];
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
s = tint; /* grab tint */
|
||||
y = brightness[1][x]; /* grab default luminance */
|
||||
break;
|
||||
}
|
||||
|
||||
theta = (float) (PI * ((col_angles[z] + hue) / 180.0));
|
||||
|
||||
r = (int) (256.0 * (y + s * sin(theta)));
|
||||
g = (int) (256.0 * (y - ((27 / 53.0) * s * sin(theta)) + ((10 / 53.0) * s * cos(theta))));
|
||||
b = (int) (256.0 * (y - (s * cos(theta))));
|
||||
|
||||
if (r > 255)
|
||||
r = 255;
|
||||
else if (r < 0)
|
||||
r = 0;
|
||||
|
||||
if (g > 255)
|
||||
g = 255;
|
||||
else if (g < 0)
|
||||
g = 0;
|
||||
|
||||
if (b > 255)
|
||||
b = 255;
|
||||
else if (b < 0)
|
||||
b = 0;
|
||||
|
||||
nes_palette[(x << 4) + z].r = r;
|
||||
nes_palette[(x << 4) + z].g = g;
|
||||
nes_palette[(x << 4) + z].b = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** $Log: nes_pal.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.3 2000/11/06 02:17:18 matt
|
||||
** no more double->float warnings
|
||||
**
|
||||
** Revision 1.2 2000/11/05 16:35:41 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.9 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.8 2000/07/10 13:49:31 matt
|
||||
** renamed my palette and extern'ed it
|
||||
**
|
||||
** Revision 1.7 2000/06/26 04:59:13 matt
|
||||
** selectable tint/hue hack (just for the time being)
|
||||
**
|
||||
** Revision 1.6 2000/06/21 21:48:19 matt
|
||||
** changed range multiplier from 255.0 to 256.0
|
||||
**
|
||||
** Revision 1.5 2000/06/20 20:42:47 matt
|
||||
** accuracy changes
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
65
MCUME_teensy41/teensynofrendo/nes_pal.h
Normal file
65
MCUME_teensy41/teensynofrendo/nes_pal.h
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_pal.h
|
||||
**
|
||||
** NES palette definition
|
||||
** $Id: nes_pal.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NESPAL_H_
|
||||
#define _NESPAL_H_
|
||||
|
||||
extern rgb_t nes_palette[];
|
||||
extern const rgb_t shady_palette[];
|
||||
|
||||
extern void pal_generate(void);
|
||||
|
||||
/* TODO: these are temporary hacks */
|
||||
extern void pal_dechue(void);
|
||||
extern void pal_inchue(void);
|
||||
extern void pal_dectint(void);
|
||||
extern void pal_inctint(void);
|
||||
|
||||
#endif /* _NESPAL_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes_pal.h,v $
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.8 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.7 2000/07/21 04:20:35 matt
|
||||
** added some nasty externs
|
||||
**
|
||||
** Revision 1.6 2000/07/10 13:49:32 matt
|
||||
** renamed my palette and extern'ed it
|
||||
**
|
||||
** Revision 1.5 2000/07/05 17:14:34 neil
|
||||
** Linux: Act Two, Scene One
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
1340
MCUME_teensy41/teensynofrendo/nes_ppu.c
Normal file
1340
MCUME_teensy41/teensynofrendo/nes_ppu.c
Normal file
File diff suppressed because it is too large
Load diff
241
MCUME_teensy41/teensynofrendo/nes_ppu.h
Executable file
241
MCUME_teensy41/teensynofrendo/nes_ppu.h
Executable file
|
|
@ -0,0 +1,241 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_ppu.h
|
||||
**
|
||||
** NES Picture Processing Unit (PPU) emulation header file
|
||||
** $Id: nes_ppu.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NES_PPU_H_
|
||||
#define _NES_PPU_H_
|
||||
|
||||
#include "bitmap.h"
|
||||
|
||||
/* PPU register defines */
|
||||
#define PPU_CTRL0 0x2000
|
||||
#define PPU_CTRL1 0x2001
|
||||
#define PPU_STAT 0x2002
|
||||
#define PPU_OAMADDR 0x2003
|
||||
#define PPU_OAMDATA 0x2004
|
||||
#define PPU_SCROLL 0x2005
|
||||
#define PPU_VADDR 0x2006
|
||||
#define PPU_VDATA 0x2007
|
||||
|
||||
#define PPU_OAMDMA 0x4014
|
||||
#define PPU_JOY0 0x4016
|
||||
#define PPU_JOY1 0x4017
|
||||
|
||||
/* $2000 */
|
||||
#define PPU_CTRL0F_NMI 0x80
|
||||
#define PPU_CTRL0F_OBJ16 0x20
|
||||
#define PPU_CTRL0F_BGADDR 0x10
|
||||
#define PPU_CTRL0F_OBJADDR 0x08
|
||||
#define PPU_CTRL0F_ADDRINC 0x04
|
||||
#define PPU_CTRL0F_NAMETAB 0x03
|
||||
|
||||
/* $2001 */
|
||||
#define PPU_CTRL1F_OBJON 0x10
|
||||
#define PPU_CTRL1F_BGON 0x08
|
||||
#define PPU_CTRL1F_OBJMASK 0x04
|
||||
#define PPU_CTRL1F_BGMASK 0x02
|
||||
|
||||
/* $2002 */
|
||||
#define PPU_STATF_VBLANK 0x80
|
||||
#define PPU_STATF_STRIKE 0x40
|
||||
#define PPU_STATF_MAXSPRITE 0x20
|
||||
|
||||
/* Sprite attribute byte bitmasks */
|
||||
#define OAMF_VFLIP 0x80
|
||||
#define OAMF_HFLIP 0x40
|
||||
#define OAMF_BEHIND 0x20
|
||||
|
||||
/* Maximum number of sprites per horizontal scanline */
|
||||
#define PPU_MAXSPRITE 8
|
||||
|
||||
/* some mappers do *dumb* things */
|
||||
typedef void (*ppulatchfunc_t)(uint32 address, uint8 value);
|
||||
typedef void (*ppuvromswitch_t)(uint8 value);
|
||||
|
||||
typedef struct ppu_s
|
||||
{
|
||||
/* big nasty memory chunks */
|
||||
uint8 nametab[0x1000];
|
||||
uint8 oam[256];
|
||||
uint8 palette[32];
|
||||
uint8 *page[16];
|
||||
|
||||
/* hardware registers */
|
||||
uint8 ctrl0, ctrl1, stat, oam_addr;
|
||||
uint32 vaddr, vaddr_latch;
|
||||
int tile_xofs, flipflop;
|
||||
int vaddr_inc;
|
||||
uint32 tile_nametab;
|
||||
|
||||
uint8 obj_height;
|
||||
uint32 obj_base, bg_base;
|
||||
|
||||
bool bg_on, obj_on;
|
||||
bool obj_mask, bg_mask;
|
||||
|
||||
uint8 latch, vdata_latch;
|
||||
uint8 strobe;
|
||||
|
||||
bool strikeflag;
|
||||
uint32 strike_cycle;
|
||||
|
||||
/* callbacks for naughty mappers */
|
||||
ppulatchfunc_t latchfunc;
|
||||
ppuvromswitch_t vromswitch;
|
||||
|
||||
/* copy of our current palette */
|
||||
rgb_t curpal[256];
|
||||
|
||||
bool vram_accessible;
|
||||
|
||||
bool vram_present;
|
||||
bool drawsprites;
|
||||
} ppu_t;
|
||||
|
||||
|
||||
/* TODO: should use this pointers */
|
||||
extern void ppu_setlatchfunc(ppulatchfunc_t func);
|
||||
extern void ppu_setvromswitch(ppuvromswitch_t func);
|
||||
|
||||
extern void ppu_getcontext(ppu_t *dest_ppu);
|
||||
extern void ppu_setcontext(ppu_t *src_ppu);
|
||||
|
||||
/* Mirroring */
|
||||
/* TODO: this is only used bloody once */
|
||||
extern void ppu_mirrorhipages(void);
|
||||
|
||||
extern void ppu_mirror(int nt1, int nt2, int nt3, int nt4);
|
||||
|
||||
extern void ppu_setpage(int size, int page_num, uint8 *location);
|
||||
extern uint8 *ppu_getpage(int page);
|
||||
|
||||
|
||||
/* control */
|
||||
extern void ppu_reset(int reset_type);
|
||||
extern bool ppu_enabled(void);
|
||||
extern void ppu_scanline(bitmap_t *bmp, int scanline, bool draw_flag);
|
||||
extern void ppu_endscanline(int scanline);
|
||||
extern void ppu_checknmi();
|
||||
|
||||
extern ppu_t *ppu_create(void);
|
||||
extern void ppu_destroy(ppu_t **ppu);
|
||||
|
||||
/* IO */
|
||||
extern uint8 ppu_read(uint32 address);
|
||||
extern void ppu_write(uint32 address, uint8 value);
|
||||
extern uint8 ppu_readhigh(uint32 address);
|
||||
extern void ppu_writehigh(uint32 address, uint8 value);
|
||||
|
||||
/* rendering */
|
||||
extern void ppu_setpal(ppu_t *src_ppu, rgb_t *pal);
|
||||
extern void ppu_setdefaultpal(ppu_t *src_ppu);
|
||||
|
||||
/* bleh */
|
||||
extern void ppu_dumppattern(bitmap_t *bmp, int table_num, int x_loc, int y_loc, int col);
|
||||
extern void ppu_dumpoam(bitmap_t *bmp, int x_loc, int y_loc);
|
||||
extern void ppu_displaysprites(bool display);
|
||||
|
||||
#endif /* _NES_PPU_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes_ppu.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.8 2000/11/29 12:58:23 matt
|
||||
** timing/fiq fixes
|
||||
**
|
||||
** Revision 1.7 2000/11/27 19:36:16 matt
|
||||
** more timing fixes
|
||||
**
|
||||
** Revision 1.6 2000/11/26 15:51:13 matt
|
||||
** frame IRQ emulation
|
||||
**
|
||||
** Revision 1.5 2000/11/25 20:30:39 matt
|
||||
** scanline emulation simplifications/timing fixes
|
||||
**
|
||||
** Revision 1.4 2000/11/19 13:40:19 matt
|
||||
** more accurate ppu behavior
|
||||
**
|
||||
** Revision 1.3 2000/11/05 16:35:41 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.2 2000/10/27 12:55:03 matt
|
||||
** palette generating functions now take *this pointers
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.19 2000/10/22 15:02:32 matt
|
||||
** simplified mirroring
|
||||
**
|
||||
** Revision 1.18 2000/10/21 21:36:04 matt
|
||||
** ppu cleanups / fixes
|
||||
**
|
||||
** Revision 1.17 2000/10/21 19:26:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.16 2000/10/10 13:58:15 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.15 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.14 2000/07/30 04:32:33 matt
|
||||
** emulation of the NES frame IRQ
|
||||
**
|
||||
** Revision 1.13 2000/07/25 02:25:53 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.12 2000/07/17 05:12:56 matt
|
||||
** nes_ppu.c is no longer a scary place to be-- cleaner & faster
|
||||
**
|
||||
** Revision 1.11 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.10 2000/07/10 05:28:30 matt
|
||||
** moved joypad/oam dma from apu to ppu
|
||||
**
|
||||
** Revision 1.9 2000/07/10 03:03:16 matt
|
||||
** added ppu_getcontext() routine
|
||||
**
|
||||
** Revision 1.8 2000/07/06 16:42:40 matt
|
||||
** better palette setting interface
|
||||
**
|
||||
** Revision 1.7 2000/07/04 23:13:26 matt
|
||||
** added an irq line drawing debug feature hack
|
||||
**
|
||||
** Revision 1.6 2000/06/26 04:58:08 matt
|
||||
** accuracy changes
|
||||
**
|
||||
** Revision 1.5 2000/06/20 00:04:35 matt
|
||||
** removed STATQUIRK macro
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
110
MCUME_teensy41/teensynofrendo/nes_rom.h
Executable file
110
MCUME_teensy41/teensynofrendo/nes_rom.h
Executable file
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_rom.h
|
||||
**
|
||||
** NES ROM loading/saving related defines / prototypes
|
||||
** $Id: nes_rom.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NES_ROM_H_
|
||||
#define _NES_ROM_H_
|
||||
|
||||
#include <unistd.h>
|
||||
#include "osd.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MIRROR_HORIZ = 0,
|
||||
MIRROR_VERT = 1
|
||||
} mirror_t;
|
||||
|
||||
#define ROM_FLAG_BATTERY 0x01
|
||||
#define ROM_FLAG_TRAINER 0x02
|
||||
#define ROM_FLAG_FOURSCREEN 0x04
|
||||
#define ROM_FLAG_VERSUS 0x08
|
||||
|
||||
typedef struct rominfo_s
|
||||
{
|
||||
/* pointers to ROM and VROM */
|
||||
uint8 *rom, *vrom;
|
||||
|
||||
/* pointers to SRAM and VRAM */
|
||||
uint8 *sram, *vram;
|
||||
|
||||
/* number of banks */
|
||||
int rom_banks, vrom_banks;
|
||||
int sram_banks, vram_banks;
|
||||
|
||||
int mapper_number;
|
||||
mirror_t mirror;
|
||||
|
||||
uint8 flags;
|
||||
|
||||
char filename[PATH_MAX + 1];
|
||||
} rominfo_t;
|
||||
|
||||
|
||||
extern int rom_checkmagic(const char *filename);
|
||||
extern rominfo_t *rom_load(const char *filename);
|
||||
extern void rom_free(rominfo_t **rominfo);
|
||||
extern char *rom_getinfo(rominfo_t *rominfo);
|
||||
|
||||
|
||||
#endif /* _NES_ROM_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nes_rom.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.11 2000/10/22 15:01:29 matt
|
||||
** irrelevant mirroring modes removed
|
||||
**
|
||||
** Revision 1.10 2000/10/17 03:22:38 matt
|
||||
** cleaning up rom module
|
||||
**
|
||||
** Revision 1.9 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.8 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.7 2000/07/25 02:20:58 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.6 2000/07/19 15:59:39 neil
|
||||
** PATH_MAX, strncpy, snprintf, and strncat are our friends
|
||||
**
|
||||
** Revision 1.5 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
411
MCUME_teensy41/teensynofrendo/nes_rom_light.c
Normal file
411
MCUME_teensy41/teensynofrendo/nes_rom_light.c
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nes_rom.c
|
||||
**
|
||||
** NES ROM loading/saving related functions
|
||||
** $Id: nes_rom.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
/* TODO: make this a generic ROM loading routine */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "nes_rom.h"
|
||||
#include "nes_mmc.h"
|
||||
#include "nes_ppu.h"
|
||||
#include "nes.h"
|
||||
#include "log.h"
|
||||
#include "osd.h"
|
||||
|
||||
extern char *osd_getromdata();
|
||||
|
||||
/* Max length for displayed filename */
|
||||
#define ROM_DISP_MAXLEN 20
|
||||
|
||||
|
||||
#define ROM_FOURSCREEN 0x08
|
||||
#define ROM_TRAINER 0x04
|
||||
#define ROM_BATTERY 0x02
|
||||
#define ROM_MIRRORTYPE 0x01
|
||||
#define ROM_INES_MAGIC "NES\x1A"
|
||||
|
||||
//ToDo: packed - JD
|
||||
typedef struct inesheader_s
|
||||
{
|
||||
uint8 ines_magic[4] ;
|
||||
uint8 rom_banks ;
|
||||
uint8 vrom_banks ;
|
||||
uint8 rom_type ;
|
||||
uint8 mapper_hinybble ;
|
||||
uint8 reserved[8] ;
|
||||
} inesheader_t;
|
||||
|
||||
|
||||
#define TRAINER_OFFSET 0x1000
|
||||
#define TRAINER_LENGTH 0x200
|
||||
#define VRAM_LENGTH 0x2000
|
||||
|
||||
#define ROM_BANK_LENGTH 0x4000
|
||||
#define VROM_BANK_LENGTH 0x2000
|
||||
|
||||
#define SRAM_BANK_LENGTH 0x0400
|
||||
#define VRAM_BANK_LENGTH 0x2000
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static int rom_loadrom(unsigned char **rom, rominfo_t *rominfo)
|
||||
{
|
||||
ASSERT(rom);
|
||||
ASSERT(rominfo);
|
||||
/* Allocate ROM space, and load it up! */
|
||||
rominfo->rom=*rom;
|
||||
*rom+=ROM_BANK_LENGTH*rominfo->rom_banks;
|
||||
|
||||
/* If there's VROM, allocate and stuff it in */
|
||||
if (rominfo->vrom_banks)
|
||||
{
|
||||
rominfo->vrom=*rom;
|
||||
*rom+=VROM_BANK_LENGTH*rominfo->vrom_banks;
|
||||
}
|
||||
else
|
||||
{
|
||||
rominfo->vram = emu_Malloc(VRAM_LENGTH);
|
||||
if (NULL == rominfo->vram)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
memset(rominfo->vram, 0, VRAM_LENGTH);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int *rom_findrom(const char *filename, rominfo_t *rominfo)
|
||||
{
|
||||
int fp;
|
||||
|
||||
ASSERT(rominfo);
|
||||
|
||||
if (NULL == filename)
|
||||
return NULL;
|
||||
|
||||
/* Make a copy of the name so we can extend it */
|
||||
osd_fullname(rominfo->filename, filename);
|
||||
|
||||
fp = emu_FileOpen(rominfo->filename);
|
||||
if (!fp)
|
||||
{
|
||||
/* Didn't find the file? Maybe the .NES extension was omitted */
|
||||
if (NULL == strrchr(rominfo->filename, '.'))
|
||||
strncat(rominfo->filename, ".nes", PATH_MAX - strlen(rominfo->filename));
|
||||
|
||||
/* this will either return NULL or a valid file pointer */
|
||||
fp = emu_FileOpen(rominfo->filename);
|
||||
}
|
||||
|
||||
return fp;
|
||||
}
|
||||
|
||||
/* Add ROM name to a list with dirty headers */
|
||||
static int rom_adddirty(char *filename)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* return 0 if this *is* an iNES file */
|
||||
int rom_checkmagic(const char *filename)
|
||||
{
|
||||
inesheader_t head;
|
||||
rominfo_t rominfo;
|
||||
int fp;
|
||||
|
||||
fp = rom_findrom(filename, &rominfo);
|
||||
if (0 == fp)
|
||||
return -1;
|
||||
|
||||
emu_FileRead(&head, 1*sizeof(head));
|
||||
|
||||
emu_FileClose();
|
||||
|
||||
if (0 == memcmp(head.ines_magic, ROM_INES_MAGIC, 4))
|
||||
/* not an iNES file */
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int rom_getheader(unsigned char **rom, rominfo_t *rominfo)
|
||||
{
|
||||
#define RESERVED_LENGTH 8
|
||||
inesheader_t head;
|
||||
uint8 reserved[RESERVED_LENGTH];
|
||||
bool header_dirty;
|
||||
|
||||
ASSERT(rom);
|
||||
ASSERT(*rom);
|
||||
ASSERT(rominfo);
|
||||
|
||||
/* Read in the header */
|
||||
// _fread(&head, 1, sizeof(head), fp);
|
||||
log_printf("Head: %p (%x %x %x %x)\n", *rom, (*rom)[0], (*rom)[1], (*rom)[2], (*rom)[3]);
|
||||
memcpy(&head, *rom, sizeof(head));
|
||||
*rom+=sizeof(head);
|
||||
|
||||
if (memcmp(head.ines_magic, ROM_INES_MAGIC, 4))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
rominfo->rom_banks = head.rom_banks;
|
||||
rominfo->vrom_banks = head.vrom_banks;
|
||||
/* iNES assumptions */
|
||||
rominfo->sram_banks = 8; /* 1kB banks, so 8KB */
|
||||
rominfo->vram_banks = 1; /* 8kB banks, so 8KB */
|
||||
rominfo->mirror = (head.rom_type & ROM_MIRRORTYPE) ? MIRROR_VERT : MIRROR_HORIZ;
|
||||
rominfo->flags = 0;
|
||||
if (head.rom_type & ROM_BATTERY)
|
||||
rominfo->flags |= ROM_FLAG_BATTERY;
|
||||
if (head.rom_type & ROM_TRAINER)
|
||||
rominfo->flags |= ROM_FLAG_TRAINER;
|
||||
if (head.rom_type & ROM_FOURSCREEN)
|
||||
rominfo->flags |= ROM_FLAG_FOURSCREEN;
|
||||
/* TODO: fourscreen a mirroring type? */
|
||||
rominfo->mapper_number = head.rom_type >> 4;
|
||||
|
||||
/* Do a compare - see if we've got a clean extended header */
|
||||
memset(reserved, 0, RESERVED_LENGTH);
|
||||
if (0 == memcmp(head.reserved, reserved, RESERVED_LENGTH))
|
||||
{
|
||||
/* We were clean */
|
||||
header_dirty = false;
|
||||
rominfo->mapper_number |= (head.mapper_hinybble & 0xF0);
|
||||
}
|
||||
else
|
||||
{
|
||||
header_dirty = true;
|
||||
|
||||
/* @!?#@! DiskDude. */
|
||||
if (('D' == head.mapper_hinybble) && (0 == memcmp(head.reserved, "iskDude!", 8)))
|
||||
log_printf("`DiskDude!' found in ROM header, ignoring high mapper nybble\n");
|
||||
else
|
||||
{
|
||||
log_printf("ROM header dirty, possible problem\n");
|
||||
rominfo->mapper_number |= (head.mapper_hinybble & 0xF0);
|
||||
}
|
||||
|
||||
rom_adddirty(rominfo->filename);
|
||||
}
|
||||
|
||||
/* TODO: this is an ugly hack, but necessary, I guess */
|
||||
/* Check for VS unisystem mapper */
|
||||
if (99 == rominfo->mapper_number)
|
||||
rominfo->flags |= ROM_FLAG_VERSUS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Build the info string for ROM display */
|
||||
char *rom_getinfo(rominfo_t *rominfo)
|
||||
{
|
||||
static char info[PATH_MAX + 1];
|
||||
char romname[PATH_MAX + 1], temp[PATH_MAX + 1];
|
||||
|
||||
/* Look to see if we were given a path along with filename */
|
||||
/* TODO: strip extensions */
|
||||
if (strrchr(rominfo->filename, PATH_SEP))
|
||||
strncpy(romname, strrchr(rominfo->filename, PATH_SEP) + 1, PATH_MAX);
|
||||
else
|
||||
strncpy(romname, rominfo->filename, PATH_MAX);
|
||||
|
||||
/* If our filename is too long, truncate our displayed filename */
|
||||
if (strlen(romname) > ROM_DISP_MAXLEN)
|
||||
{
|
||||
strncpy(info, romname, ROM_DISP_MAXLEN - 3);
|
||||
strcpy(info + (ROM_DISP_MAXLEN - 3), "...");
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(info, romname);
|
||||
}
|
||||
|
||||
sprintf(temp, " [%d] %dk/%dk %c", rominfo->mapper_number,
|
||||
rominfo->rom_banks * 16, rominfo->vrom_banks * 8,
|
||||
(rominfo->mirror == MIRROR_VERT) ? 'V' : 'H');
|
||||
|
||||
/* Stick it on there! */
|
||||
strncat(info, temp, PATH_MAX - strlen(info));
|
||||
|
||||
if (rominfo->flags & ROM_FLAG_BATTERY)
|
||||
strncat(info, "B", PATH_MAX - strlen(info));
|
||||
if (rominfo->flags & ROM_FLAG_TRAINER)
|
||||
strncat(info, "T", PATH_MAX - strlen(info));
|
||||
if (rominfo->flags & ROM_FLAG_FOURSCREEN)
|
||||
strncat(info, "4", PATH_MAX - strlen(info));
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/* Load a ROM image into memory */
|
||||
rominfo_t *rom_load(const char *filename)
|
||||
{
|
||||
unsigned char *rom=(unsigned char*)osd_getromdata();
|
||||
rominfo_t *rominfo;
|
||||
|
||||
rominfo = emu_Malloc(sizeof(rominfo_t));
|
||||
if (NULL == rominfo)
|
||||
return NULL;
|
||||
|
||||
memset(rominfo, 0, sizeof(rominfo_t));
|
||||
|
||||
/* Get the header and stick it into rominfo struct */
|
||||
if (rom_getheader(&rom, rominfo))
|
||||
goto _fail;
|
||||
|
||||
/* Make sure we really support the mapper */
|
||||
if (false == mmc_peek(rominfo->mapper_number))
|
||||
{
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
if (rom_loadrom(&rom, rominfo))
|
||||
goto _fail;
|
||||
|
||||
return rominfo;
|
||||
|
||||
_fail:
|
||||
rom_free(&rominfo);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Free a ROM */
|
||||
void rom_free(rominfo_t **rominfo)
|
||||
{
|
||||
if (NULL == *rominfo)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Restore palette if we loaded in a VS jobber */
|
||||
if ((*rominfo)->flags & ROM_FLAG_VERSUS)
|
||||
{
|
||||
/* TODO: bad idea calling nes_getcontextptr... */
|
||||
ppu_setdefaultpal(nes_getcontextptr()->ppu);
|
||||
log_printf("Default NES palette restored\n");
|
||||
}
|
||||
|
||||
|
||||
if ((*rominfo)->sram)
|
||||
free((*rominfo)->sram);
|
||||
if ((*rominfo)->rom)
|
||||
free((*rominfo)->rom);
|
||||
if ((*rominfo)->vrom)
|
||||
free((*rominfo)->vrom);
|
||||
if ((*rominfo)->vram)
|
||||
free((*rominfo)->vram);
|
||||
|
||||
free(*rominfo);
|
||||
}
|
||||
|
||||
/*
|
||||
** $Log: nes_rom.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.8 2000/11/21 13:28:40 matt
|
||||
** take care to zero allocated mem
|
||||
**
|
||||
** Revision 1.7 2000/11/09 14:07:28 matt
|
||||
** state load fixed, state save mostly fixed
|
||||
**
|
||||
** Revision 1.6 2000/10/28 14:24:54 matt
|
||||
** where did I put that underscore?
|
||||
**
|
||||
** Revision 1.5 2000/10/27 12:56:35 matt
|
||||
** api change for ppu palette functions
|
||||
**
|
||||
** Revision 1.4 2000/10/26 22:51:44 matt
|
||||
** correct NULL filename handling
|
||||
**
|
||||
** Revision 1.3 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.2 2000/10/25 00:23:16 matt
|
||||
** makefiles updated for new directory structure
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.19 2000/10/21 14:35:58 matt
|
||||
** typo
|
||||
**
|
||||
** Revision 1.18 2000/10/17 03:22:37 matt
|
||||
** cleaning up rom module
|
||||
**
|
||||
** Revision 1.17 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.16 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.15 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.14 2000/07/30 04:31:26 matt
|
||||
** automagic loading of the nofrendo intro
|
||||
**
|
||||
** Revision 1.13 2000/07/25 02:20:58 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.12 2000/07/20 01:53:27 matt
|
||||
** snprintf() ain't no standard function, eh?
|
||||
**
|
||||
** Revision 1.11 2000/07/19 16:06:54 neil
|
||||
** little error fixed (tempinfo vs rominfo->info)
|
||||
**
|
||||
** Revision 1.10 2000/07/19 15:59:39 neil
|
||||
** PATH_MAX, strncpy, snprintf, and strncat are our friends
|
||||
**
|
||||
** Revision 1.9 2000/07/17 01:52:27 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.8 2000/07/06 16:47:50 matt
|
||||
** new ppu palette setting calls
|
||||
**
|
||||
** Revision 1.7 2000/07/05 23:21:54 neil
|
||||
** fclose(fp) should not be done if fp == NULL
|
||||
**
|
||||
** Revision 1.6 2000/07/04 04:45:14 matt
|
||||
** changed include
|
||||
**
|
||||
** Revision 1.5 2000/06/26 04:56:10 matt
|
||||
** minor cleanup
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
212
MCUME_teensy41/teensynofrendo/nesinput.c
Executable file
212
MCUME_teensy41/teensynofrendo/nesinput.c
Executable file
|
|
@ -0,0 +1,212 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nesinput.c
|
||||
**
|
||||
** Event handling system routines
|
||||
** $Id: nesinput.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "nesinput.h"
|
||||
#include "log.h"
|
||||
|
||||
/* TODO: make a linked list of inputs sources, so they
|
||||
** can be removed if need be
|
||||
*/
|
||||
|
||||
static nesinput_t *nes_input[MAX_CONTROLLERS];
|
||||
static int active_entries = 0;
|
||||
|
||||
/* read counters */
|
||||
static int pad0_readcount, pad1_readcount, ppad_readcount, ark_readcount;
|
||||
|
||||
|
||||
static int retrieve_type(int type)
|
||||
{
|
||||
int i, value = 0;
|
||||
|
||||
for (i = 0; i < active_entries; i++)
|
||||
{
|
||||
ASSERT(nes_input[i]);
|
||||
|
||||
if (type == nes_input[i]->type)
|
||||
value |= nes_input[i]->data;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
static uint8 get_pad0(void)
|
||||
{
|
||||
uint8 value;
|
||||
|
||||
value = (uint8) retrieve_type(INP_JOYPAD0);
|
||||
|
||||
/* mask out left/right simultaneous keypresses */
|
||||
if ((value & INP_PAD_UP) && (value & INP_PAD_DOWN))
|
||||
value &= ~(INP_PAD_UP | INP_PAD_DOWN);
|
||||
|
||||
if ((value & INP_PAD_LEFT) && (value & INP_PAD_RIGHT))
|
||||
value &= ~(INP_PAD_LEFT | INP_PAD_RIGHT);
|
||||
|
||||
/* return (0x40 | value) due to bus conflicts */
|
||||
return (0x40 | ((value >> pad0_readcount++) & 1));
|
||||
}
|
||||
|
||||
static uint8 get_pad1(void)
|
||||
{
|
||||
uint8 value;
|
||||
|
||||
value = (uint8) retrieve_type(INP_JOYPAD1);
|
||||
|
||||
/* mask out left/right simultaneous keypresses */
|
||||
if ((value & INP_PAD_UP) && (value & INP_PAD_DOWN))
|
||||
value &= ~(INP_PAD_UP | INP_PAD_DOWN);
|
||||
|
||||
if ((value & INP_PAD_LEFT) && (value & INP_PAD_RIGHT))
|
||||
value &= ~(INP_PAD_LEFT | INP_PAD_RIGHT);
|
||||
|
||||
/* return (0x40 | value) due to bus conflicts */
|
||||
return (0x40 | ((value >> pad1_readcount++) & 1));
|
||||
}
|
||||
|
||||
static uint8 get_zapper(void)
|
||||
{
|
||||
return (uint8) (retrieve_type(INP_ZAPPER));
|
||||
}
|
||||
|
||||
static uint8 get_powerpad(void)
|
||||
{
|
||||
int value;
|
||||
uint8 ret_val = 0;
|
||||
|
||||
value = retrieve_type(INP_POWERPAD);
|
||||
|
||||
if (((value >> 8) >> ppad_readcount) & 1)
|
||||
ret_val |= 0x10;
|
||||
if (((value & 0xFF) >> ppad_readcount) & 1)
|
||||
ret_val |= 0x08;
|
||||
|
||||
ppad_readcount++;
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
static uint8 get_vsdips0(void)
|
||||
{
|
||||
return (retrieve_type(INP_VSDIPSW0));
|
||||
}
|
||||
|
||||
static uint8 get_vsdips1(void)
|
||||
{
|
||||
return (retrieve_type(INP_VSDIPSW1));
|
||||
}
|
||||
|
||||
static uint8 get_arkanoid(void)
|
||||
{
|
||||
uint8 value = retrieve_type(INP_ARKANOID);
|
||||
|
||||
if ((value >> (7 - ark_readcount++)) & 1)
|
||||
return 0x02;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* return input state for all types indicated (can be ORed together) */
|
||||
uint8 input_get(int types)
|
||||
{
|
||||
uint8 value = 0;
|
||||
|
||||
if (types & INP_JOYPAD0)
|
||||
value |= get_pad0();
|
||||
if (types & INP_JOYPAD1)
|
||||
value |= get_pad1();
|
||||
if (types & INP_ZAPPER)
|
||||
value |= get_zapper();
|
||||
if (types & INP_POWERPAD)
|
||||
value |= get_powerpad();
|
||||
if (types & INP_VSDIPSW0)
|
||||
value |= get_vsdips0();
|
||||
if (types & INP_VSDIPSW1)
|
||||
value |= get_vsdips1();
|
||||
if (types & INP_ARKANOID)
|
||||
value |= get_arkanoid();
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/* register an input type */
|
||||
void input_register(nesinput_t *input)
|
||||
{
|
||||
if (NULL == input)
|
||||
return;
|
||||
|
||||
nes_input[active_entries] = input;
|
||||
active_entries++;
|
||||
}
|
||||
|
||||
void input_event(nesinput_t *input, int state, int value)
|
||||
{
|
||||
ASSERT(input);
|
||||
|
||||
if (state == INP_STATE_MAKE)
|
||||
input->data |= value; /* OR it in */
|
||||
else /* break state */
|
||||
input->data &= ~value; /* mask it out */
|
||||
}
|
||||
|
||||
void input_strobe(void)
|
||||
{
|
||||
pad0_readcount = 0;
|
||||
pad1_readcount = 0;
|
||||
ppad_readcount = 0;
|
||||
ark_readcount = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** $Log: nesinput.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.9 2000/09/10 23:25:03 matt
|
||||
** minor changes
|
||||
**
|
||||
** Revision 1.8 2000/07/31 04:27:59 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.7 2000/07/23 15:11:45 matt
|
||||
** removed unused variables
|
||||
**
|
||||
** Revision 1.6 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.5 2000/07/04 04:56:50 matt
|
||||
** include changes
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
104
MCUME_teensy41/teensynofrendo/nesinput.h
Executable file
104
MCUME_teensy41/teensynofrendo/nesinput.h
Executable file
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nesinput.h
|
||||
**
|
||||
** Platform independent input definitions
|
||||
** $Id: nesinput.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NESINPUT_H_
|
||||
#define _NESINPUT_H_
|
||||
|
||||
/* NES control pad bitmasks */
|
||||
#define INP_PAD_A 0x01
|
||||
#define INP_PAD_B 0x02
|
||||
#define INP_PAD_SELECT 0x04
|
||||
#define INP_PAD_START 0x08
|
||||
#define INP_PAD_UP 0x10
|
||||
#define INP_PAD_DOWN 0x20
|
||||
#define INP_PAD_LEFT 0x40
|
||||
#define INP_PAD_RIGHT 0x80
|
||||
|
||||
#define INP_ZAPPER_HIT 0x00
|
||||
#define INP_ZAPPER_MISS 0x08
|
||||
#define INP_ZAPPER_TRIG 0x10
|
||||
|
||||
#define INP_JOYPAD0 0x0001
|
||||
#define INP_JOYPAD1 0x0002
|
||||
#define INP_ZAPPER 0x0004
|
||||
#define INP_POWERPAD 0x0008
|
||||
#define INP_ARKANOID 0x0010
|
||||
#define INP_VSDIPSW0 0x0020
|
||||
#define INP_VSDIPSW1 0x0040
|
||||
|
||||
/* upper byte is what's returned in D4, lower is D3 */
|
||||
#define INP_PPAD_1 0x0002
|
||||
#define INP_PPAD_2 0x0001
|
||||
#define INP_PPAD_3 0x0200
|
||||
#define INP_PPAD_4 0x0100
|
||||
#define INP_PPAD_5 0x0004
|
||||
#define INP_PPAD_6 0x0010
|
||||
#define INP_PPAD_7 0x0080
|
||||
#define INP_PPAD_8 0x0800
|
||||
#define INP_PPAD_9 0x0008
|
||||
#define INP_PPAD_10 0x0020
|
||||
#define INP_PPAD_11 0x0040
|
||||
#define INP_PPAD_12 0x0400
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
INP_STATE_BREAK,
|
||||
INP_STATE_MAKE
|
||||
};
|
||||
|
||||
typedef struct nesinput_s
|
||||
{
|
||||
int type;
|
||||
int data;
|
||||
} nesinput_t;
|
||||
|
||||
#define MAX_CONTROLLERS 32
|
||||
|
||||
extern uint8 input_get(int type);
|
||||
extern void input_register(nesinput_t *input);
|
||||
extern void input_event(nesinput_t *input, int state, int value);
|
||||
extern void input_strobe(void);
|
||||
|
||||
#endif /* _NESINPUT_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nesinput.h,v $
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:28 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.6 2000/09/10 23:25:02 matt
|
||||
** minor changes
|
||||
**
|
||||
** Revision 1.5 2000/07/17 01:52:29 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:26 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
49
MCUME_teensy41/teensynofrendo/nofconfig.h
Executable file
49
MCUME_teensy41/teensynofrendo/nofconfig.h
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
/* Nofrendo Configuration API
|
||||
**
|
||||
** This file is in the public domain.
|
||||
**
|
||||
** $Id: nofconfig.h,v 1.1 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _CONFIG_H_
|
||||
#define _CONFIG_H_
|
||||
|
||||
#ifndef CONFIG_FILE
|
||||
#define CONFIG_FILE "nofrendo.cfg"
|
||||
#endif
|
||||
|
||||
typedef struct config_s
|
||||
{
|
||||
char *filename;
|
||||
} config_t;
|
||||
|
||||
extern config_t config;
|
||||
|
||||
#endif /* !_CONFIG_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nofconfig.h,v $
|
||||
** Revision 1.1 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.5 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.4 2000/07/19 15:58:55 neil
|
||||
** config file now configurable (ha)
|
||||
**
|
||||
** Revision 1.3 2000/07/11 14:59:27 matt
|
||||
** minor cosmetics.. =)
|
||||
**
|
||||
** Revision 1.2 2000/07/11 13:35:38 bsittler
|
||||
** Changed the config API, implemented config file "nofrendo.cfg". The
|
||||
** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood.
|
||||
**
|
||||
** Revision 1.1 2000/07/11 07:46:11 neil
|
||||
** Initial commit
|
||||
**
|
||||
**
|
||||
*/
|
||||
394
MCUME_teensy41/teensynofrendo/nofrendo.c
Normal file
394
MCUME_teensy41/teensynofrendo/nofrendo.c
Normal file
|
|
@ -0,0 +1,394 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nofrendo.c
|
||||
**
|
||||
** Entry point of program
|
||||
** Note: all architectures should call these functions
|
||||
** $Id: nofrendo.c,v 1.3 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "noftypes.h"
|
||||
#include "nofrendo.h"
|
||||
#include "event.h"
|
||||
#include "nofconfig.h"
|
||||
#include "log.h"
|
||||
#include "osd.h"
|
||||
#include "vid_drv.h"
|
||||
|
||||
/* emulated system includes */
|
||||
#include "nes.h"
|
||||
|
||||
/* our global machine structure */
|
||||
static struct
|
||||
{
|
||||
char *filename, *nextfilename;
|
||||
system_t type, nexttype;
|
||||
|
||||
union
|
||||
{
|
||||
nes_t *nes;
|
||||
} machine;
|
||||
|
||||
int refresh_rate;
|
||||
|
||||
bool quit;
|
||||
} console;
|
||||
|
||||
/* our happy little timer ISR */
|
||||
volatile int nofrendo_ticks = 0;
|
||||
static void timer_isr(void)
|
||||
{
|
||||
nofrendo_ticks++;
|
||||
}
|
||||
|
||||
static void timer_isr_end(void) {} /* code marker for djgpp */
|
||||
|
||||
static void shutdown_everything(void)
|
||||
{
|
||||
if (console.filename)
|
||||
{
|
||||
free(console.filename);
|
||||
console.filename = NULL;
|
||||
}
|
||||
if (console.nextfilename)
|
||||
{
|
||||
free(console.nextfilename);
|
||||
console.nextfilename = NULL;
|
||||
}
|
||||
|
||||
//config.close(); JMH
|
||||
osd_shutdown();
|
||||
vid_shutdown();
|
||||
log_shutdown();
|
||||
}
|
||||
|
||||
/* End the current context */
|
||||
void main_eject(void)
|
||||
{
|
||||
switch (console.type)
|
||||
{
|
||||
case system_nes:
|
||||
nes_poweroff();
|
||||
nes_destroy(&(console.machine.nes));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (NULL != console.filename)
|
||||
{
|
||||
free(console.filename);
|
||||
console.filename = NULL;
|
||||
}
|
||||
console.type = system_unknown;
|
||||
}
|
||||
|
||||
/* Act on the user's quit requests */
|
||||
void main_quit(void)
|
||||
{
|
||||
console.quit = true;
|
||||
|
||||
main_eject();
|
||||
|
||||
/* if there's a pending filename / system, clear */
|
||||
if (NULL != console.nextfilename)
|
||||
{
|
||||
free(console.nextfilename);
|
||||
console.nextfilename = NULL;
|
||||
}
|
||||
console.nexttype = system_unknown;
|
||||
}
|
||||
|
||||
/* brute force system autodetection */
|
||||
static system_t detect_systemtype(const char *filename)
|
||||
{
|
||||
if (NULL == filename)
|
||||
return system_unknown;
|
||||
|
||||
if (0 == nes_isourfile(filename))
|
||||
return system_nes;
|
||||
|
||||
/* can't figure out what this thing is */
|
||||
return system_unknown;
|
||||
}
|
||||
|
||||
static int install_timer(int hertz)
|
||||
{
|
||||
return osd_installtimer(hertz, (void *) timer_isr,
|
||||
(int) timer_isr_end - (int) timer_isr,
|
||||
(void *) &nofrendo_ticks,
|
||||
sizeof(nofrendo_ticks));
|
||||
}
|
||||
|
||||
/* This assumes there is no current context */
|
||||
static int internal_insert(const char *filename, system_t type)
|
||||
{
|
||||
/* autodetect system type? */
|
||||
if (system_autodetect == type)
|
||||
type = detect_systemtype(filename);
|
||||
|
||||
console.filename = strdup(filename);
|
||||
console.type = type;
|
||||
|
||||
/* set up the event system for this system type */
|
||||
event_set_system(type);
|
||||
|
||||
switch (console.type)
|
||||
{
|
||||
case system_nes:
|
||||
console.machine.nes = nes_create();
|
||||
if (NULL == console.machine.nes)
|
||||
{
|
||||
log_printf("Failed to create NES instance.\n");
|
||||
return -1;
|
||||
}
|
||||
if (nes_insertcart(console.filename, console.machine.nes))
|
||||
return -1;
|
||||
vid_setmode(NES_SCREEN_WIDTH, NES_VISIBLE_HEIGHT);
|
||||
if (install_timer(NES_REFRESH_RATE))
|
||||
return -1;
|
||||
|
||||
nes_emulate();
|
||||
break;
|
||||
|
||||
case system_unknown:
|
||||
default:
|
||||
log_printf("system type unknown, playing nofrendo NES intro.\n");
|
||||
if (NULL != console.filename)
|
||||
free(console.filename);
|
||||
|
||||
/* oooh, recursion */
|
||||
return internal_insert(filename, system_nes);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This tells main_loop to load this next image */
|
||||
void main_insert(const char *filename, system_t type)
|
||||
{
|
||||
console.nextfilename = strdup(filename);
|
||||
console.nexttype = type;
|
||||
|
||||
main_eject();
|
||||
}
|
||||
|
||||
int nofrendo_main(int argc, char *argv[])
|
||||
{
|
||||
/* initialize our system structure */
|
||||
console.filename = NULL;
|
||||
console.nextfilename = NULL;
|
||||
console.type = system_unknown;
|
||||
console.nexttype = system_unknown;
|
||||
console.refresh_rate = 0;
|
||||
console.quit = false;
|
||||
|
||||
if (log_init())
|
||||
return -1;
|
||||
|
||||
event_init();
|
||||
|
||||
return osd_main(argc, argv);
|
||||
}
|
||||
|
||||
/* This is the final leg of main() */
|
||||
int main_loop(const char *filename, system_t type)
|
||||
{
|
||||
vidinfo_t video;
|
||||
|
||||
/* register shutdown, in case of assertions, etc. */
|
||||
// atexit(shutdown_everything);
|
||||
|
||||
//if (config.open()) // JMH
|
||||
// return -1;
|
||||
|
||||
if (osd_init())
|
||||
return -1;
|
||||
|
||||
osd_getvideoinfo(&video);
|
||||
if (vid_init(video.default_width, video.default_height, video.driver))
|
||||
return -1;
|
||||
//log printf("vid_init done\n");
|
||||
|
||||
console.nextfilename = strdup(filename);
|
||||
console.nexttype = type;
|
||||
|
||||
// while (false == console.quit)
|
||||
// {
|
||||
//emu_printf("internal_insert in loop\n");
|
||||
if (internal_insert(console.nextfilename, console.nexttype))
|
||||
return 1;
|
||||
// }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** $Log: nofrendo.c,v $
|
||||
** Revision 1.3 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.2 2001/04/27 11:10:08 neil
|
||||
** compile
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.48 2000/11/27 12:47:08 matt
|
||||
** free them strings
|
||||
**
|
||||
** Revision 1.47 2000/11/25 20:26:05 matt
|
||||
** removed fds "system"
|
||||
**
|
||||
** Revision 1.46 2000/11/25 01:51:53 matt
|
||||
** bool stinks sometimes
|
||||
**
|
||||
** Revision 1.45 2000/11/20 13:22:12 matt
|
||||
** standardized timer ISR, added nofrendo_ticks
|
||||
**
|
||||
** Revision 1.44 2000/11/05 22:53:13 matt
|
||||
** only one video driver per system, please
|
||||
**
|
||||
** Revision 1.43 2000/11/01 14:15:35 matt
|
||||
** multi-system event system, or whatever
|
||||
**
|
||||
** Revision 1.42 2000/10/28 15:16:24 matt
|
||||
** removed nsf_init
|
||||
**
|
||||
** Revision 1.41 2000/10/27 12:58:44 matt
|
||||
** gui_init can now fail
|
||||
**
|
||||
** Revision 1.40 2000/10/26 22:48:57 matt
|
||||
** prelim NSF support
|
||||
**
|
||||
** Revision 1.39 2000/10/25 13:42:02 matt
|
||||
** strdup - giddyap!
|
||||
**
|
||||
** Revision 1.38 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.37 2000/10/23 17:50:47 matt
|
||||
** adding fds support
|
||||
**
|
||||
** Revision 1.36 2000/10/23 15:52:04 matt
|
||||
** better system handling
|
||||
**
|
||||
** Revision 1.35 2000/10/21 19:25:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.34 2000/10/10 13:58:13 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.33 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.32 2000/09/15 04:58:06 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.31 2000/09/10 23:19:14 matt
|
||||
** i'm a sloppy coder
|
||||
**
|
||||
** Revision 1.30 2000/09/07 01:30:57 matt
|
||||
** nes6502_init deprecated
|
||||
**
|
||||
** Revision 1.29 2000/08/16 03:17:49 matt
|
||||
** bpb
|
||||
**
|
||||
** Revision 1.28 2000/08/16 02:58:19 matt
|
||||
** changed video interface a wee bit
|
||||
**
|
||||
** Revision 1.27 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.26 2000/07/30 04:31:26 matt
|
||||
** automagic loading of the nofrendo intro
|
||||
**
|
||||
** Revision 1.25 2000/07/27 01:16:36 matt
|
||||
** sorted out the video problems
|
||||
**
|
||||
** Revision 1.24 2000/07/26 21:54:53 neil
|
||||
** eject has to clear the nextfilename and nextsystem
|
||||
**
|
||||
** Revision 1.23 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.22 2000/07/25 02:21:36 matt
|
||||
** safer xxx_destroy calls
|
||||
**
|
||||
** Revision 1.21 2000/07/23 16:46:47 matt
|
||||
** fixed crash in win32 by reodering shutdown calls
|
||||
**
|
||||
** Revision 1.20 2000/07/23 15:18:23 matt
|
||||
** removed unistd.h from includes
|
||||
**
|
||||
** Revision 1.19 2000/07/23 00:48:15 neil
|
||||
** Win32 SDL
|
||||
**
|
||||
** Revision 1.18 2000/07/21 13:42:06 neil
|
||||
** get_options removed, as it should be handled by osd_main
|
||||
**
|
||||
** Revision 1.17 2000/07/21 04:53:48 matt
|
||||
** moved palette calls out of nofrendo.c and into ppu_create
|
||||
**
|
||||
** Revision 1.16 2000/07/21 02:40:43 neil
|
||||
** more main fixes
|
||||
**
|
||||
** Revision 1.15 2000/07/21 02:09:07 neil
|
||||
** new main structure?
|
||||
**
|
||||
** Revision 1.14 2000/07/20 17:05:12 neil
|
||||
** Moved osd_init before setup_video
|
||||
**
|
||||
** Revision 1.13 2000/07/11 15:01:05 matt
|
||||
** moved config.close() into registered atexit() routine
|
||||
**
|
||||
** Revision 1.12 2000/07/11 13:35:38 bsittler
|
||||
** Changed the config API, implemented config file "nofrendo.cfg". The
|
||||
** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood.
|
||||
**
|
||||
** Revision 1.11 2000/07/11 04:32:21 matt
|
||||
** less magic number nastiness for screen dimensions
|
||||
**
|
||||
** Revision 1.10 2000/07/10 03:04:15 matt
|
||||
** removed scanlines, backbuffer from custom blit
|
||||
**
|
||||
** Revision 1.9 2000/07/07 04:39:54 matt
|
||||
** removed garbage dpp shite
|
||||
**
|
||||
** Revision 1.8 2000/07/06 16:48:25 matt
|
||||
** new video driver
|
||||
**
|
||||
** Revision 1.7 2000/07/05 17:26:16 neil
|
||||
** Moved the externs in nofrendo.c to osd.h
|
||||
**
|
||||
** Revision 1.6 2000/06/26 04:55:44 matt
|
||||
** cleaned up main()
|
||||
**
|
||||
** Revision 1.5 2000/06/20 20:41:21 matt
|
||||
** moved <stdlib.h> include to top (duh)
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
98
MCUME_teensy41/teensynofrendo/nofrendo.h
Executable file
98
MCUME_teensy41/teensynofrendo/nofrendo.h
Executable file
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** nofrendo.h (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
** (c) 2000 Neil Stevens (multivac@fcmail.com)
|
||||
**
|
||||
** Note: all architectures should call these functions
|
||||
**
|
||||
** $Id: nofrendo.h,v 1.2 2001/04/27 11:10:08 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NOFRENDO_H_
|
||||
#define _NOFRENDO_H_
|
||||
|
||||
#define NOLOOP 1
|
||||
|
||||
typedef enum
|
||||
{
|
||||
system_unknown,
|
||||
system_autodetect,
|
||||
system_nes,
|
||||
NUM_SUPPORTED_SYSTEMS
|
||||
} system_t;
|
||||
|
||||
int nofrendo_main(int argc, char *argv[]);
|
||||
|
||||
|
||||
extern volatile int nofrendo_ticks; /* system timer ticks */
|
||||
|
||||
/* osd_main should end with a call to main_loop().
|
||||
** Pass filename = NULL if you want to start with the demo rom
|
||||
*/
|
||||
extern int main_loop(const char *filename, system_t type);
|
||||
|
||||
/* These should not be called directly. Use the event interface */
|
||||
extern void main_insert(const char *filename, system_t type);
|
||||
extern void main_eject(void);
|
||||
extern void main_quit(void);
|
||||
|
||||
#ifdef NOLOOP
|
||||
extern void nes_step(int skip);
|
||||
#endif
|
||||
|
||||
#endif /* !_NOFRENDO_H_ */
|
||||
|
||||
/*
|
||||
** $Log: nofrendo.h,v $
|
||||
** Revision 1.2 2001/04/27 11:10:08 neil
|
||||
** compile
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.9 2000/11/25 20:26:05 matt
|
||||
** removed fds "system"
|
||||
**
|
||||
** Revision 1.8 2000/11/20 13:22:12 matt
|
||||
** standardized timer ISR, added nofrendo_ticks
|
||||
**
|
||||
** Revision 1.7 2000/11/01 14:15:35 matt
|
||||
** multi-system event system, or whatever
|
||||
**
|
||||
** Revision 1.6 2000/10/25 13:42:02 matt
|
||||
** strdup - giddyap!
|
||||
**
|
||||
** Revision 1.5 2000/10/25 01:23:08 matt
|
||||
** basic system autodetection
|
||||
**
|
||||
** Revision 1.4 2000/10/23 15:52:04 matt
|
||||
** better system handling
|
||||
**
|
||||
** Revision 1.3 2000/07/31 04:28:46 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.2 2000/07/27 01:16:36 matt
|
||||
** sorted out the video problems
|
||||
**
|
||||
** Revision 1.1 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
**
|
||||
*/
|
||||
121
MCUME_teensy41/teensynofrendo/noftypes.h
Normal file
121
MCUME_teensy41/teensynofrendo/noftypes.h
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** types.h
|
||||
**
|
||||
** Data type definitions
|
||||
** $Id: noftypes.h,v 1.1 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _TYPES_H_
|
||||
#define _TYPES_H_
|
||||
|
||||
|
||||
|
||||
/* Define this if running on little-endian (x86) systems */
|
||||
#define HOST_LITTLE_ENDIAN
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define INLINE static inline
|
||||
#define ZERO_LENGTH 0
|
||||
#elif defined(WIN32)
|
||||
#define INLINE static __inline
|
||||
#define ZERO_LENGTH 0
|
||||
#else /* crapintosh? */
|
||||
#define INLINE static
|
||||
#define ZERO_LENGTH 1
|
||||
#endif
|
||||
|
||||
/* quell stupid compiler warnings */
|
||||
#define UNUSED(x) ((x) = (x))
|
||||
|
||||
typedef signed char int8;
|
||||
typedef signed short int16;
|
||||
typedef signed int int32;
|
||||
typedef unsigned char uint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned int uint32;
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef enum
|
||||
{
|
||||
false = 0,
|
||||
true = 1
|
||||
} bool;
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
#endif /* !__cplusplus */
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#ifdef NOFRENDO_DEBUG
|
||||
|
||||
#define ASSERT(expr) log_assert((int) (expr), __LINE__, __FILE__, NULL)
|
||||
#define ASSERT_MSG(msg) log_assert(false, __LINE__, __FILE__, (msg))
|
||||
|
||||
#else /* !NOFRENDO_DEBUG */
|
||||
|
||||
#define ASSERT(expr)
|
||||
#define ASSERT_MSG(msg)
|
||||
|
||||
#endif /* !NOFRENDO_DEBUG */
|
||||
|
||||
#endif /* _TYPES_H_ */
|
||||
|
||||
/*
|
||||
** $Log: noftypes.h,v $
|
||||
** Revision 1.1 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.15 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.14 2000/10/17 03:22:16 matt
|
||||
** safe UNUSED
|
||||
**
|
||||
** Revision 1.13 2000/10/10 13:58:14 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.12 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.11 2000/08/11 01:44:05 matt
|
||||
** cosmeses
|
||||
**
|
||||
** Revision 1.10 2000/07/31 04:28:47 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.9 2000/07/24 04:30:17 matt
|
||||
** ASSERTs should have been calling log_shutdown
|
||||
**
|
||||
** Revision 1.8 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.7 2000/07/04 04:46:44 matt
|
||||
** moved INLINE define from osd.h
|
||||
**
|
||||
** Revision 1.6 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
188
MCUME_teensy41/teensynofrendo/osd.h
Executable file
188
MCUME_teensy41/teensynofrendo/osd.h
Executable file
|
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** osd.h
|
||||
**
|
||||
** O/S dependent routine defintions (must be customized)
|
||||
** $Id: osd.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _OSD_H_
|
||||
#define _OSD_H_
|
||||
|
||||
#include <limits.h>
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 512
|
||||
#endif /* PATH_MAX */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define __PACKED__ __attribute__ ((packed))
|
||||
|
||||
#ifdef __DJGPP__
|
||||
#define PATH_SEP '\\'
|
||||
#else /* !__DJGPP__ */
|
||||
#define PATH_SEP '/'
|
||||
#endif /* !__DJGPP__ */
|
||||
|
||||
#elif defined(WIN32)
|
||||
#define __PACKED__
|
||||
#define PATH_SEP '\\'
|
||||
#else /* !defined(WIN32) && !__GNUC__ */
|
||||
#define __PACKED__
|
||||
#define PATH_SEP ':'
|
||||
#endif /* !defined(WIN32) && !__GNUC__ */
|
||||
|
||||
#if !defined(WIN32) && !defined(__DJGPP__)
|
||||
#define stricmp strcasecmp
|
||||
#endif /* !WIN32 && !__DJGPP__ */
|
||||
|
||||
|
||||
extern void osd_setsound(void (*playfunc)(void *buffer, int size));
|
||||
|
||||
|
||||
#ifndef NSF_PLAYER
|
||||
#include "noftypes.h"
|
||||
#include "vid_drv.h"
|
||||
|
||||
typedef struct vidinfo_s
|
||||
{
|
||||
int default_width, default_height;
|
||||
viddriver_t *driver;
|
||||
} vidinfo_t;
|
||||
|
||||
typedef struct sndinfo_s
|
||||
{
|
||||
int sample_rate;
|
||||
int bps;
|
||||
} sndinfo_t;
|
||||
|
||||
/* get info */
|
||||
extern void osd_getvideoinfo(vidinfo_t *info);
|
||||
extern void osd_getsoundinfo(sndinfo_t *info);
|
||||
|
||||
/* init / shutdown */
|
||||
extern int osd_init(void);
|
||||
extern void osd_shutdown(void);
|
||||
extern int osd_main(int argc, char *argv[]);
|
||||
|
||||
extern int osd_installtimer(int frequency, void *func, int funcsize,
|
||||
void *counter, int countersize);
|
||||
|
||||
/* filename manipulation */
|
||||
extern void osd_fullname(char *fullname, const char *shortname);
|
||||
extern char *osd_newextension(char *string, char *ext);
|
||||
|
||||
/* input */
|
||||
extern void osd_getinput(void);
|
||||
extern void osd_getmouse(int *x, int *y, int *button);
|
||||
|
||||
/* build a filename for a snapshot, return -ve for error */
|
||||
extern int osd_makesnapname(char *filename, int len);
|
||||
|
||||
#endif /* !NSF_PLAYER */
|
||||
|
||||
#endif /* _OSD_H_ */
|
||||
|
||||
/*
|
||||
** $Log: osd.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.30 2000/11/05 22:53:13 matt
|
||||
** only one video driver per system, please
|
||||
**
|
||||
** Revision 1.29 2000/11/05 06:23:41 matt
|
||||
** thinlib spawns changes
|
||||
**
|
||||
** Revision 1.28 2000/10/22 19:15:39 matt
|
||||
** more sane timer ISR / autoframeskip
|
||||
**
|
||||
** Revision 1.27 2000/10/21 19:25:59 matt
|
||||
** many more cleanups
|
||||
**
|
||||
** Revision 1.26 2000/10/10 13:03:53 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.25 2000/10/02 15:01:12 matt
|
||||
** frag size has been removed
|
||||
**
|
||||
** Revision 1.24 2000/08/31 02:40:18 matt
|
||||
** fixed some crap
|
||||
**
|
||||
** Revision 1.23 2000/08/16 02:57:14 matt
|
||||
** changed video interface a wee bit
|
||||
**
|
||||
** Revision 1.22 2000/08/11 01:46:30 matt
|
||||
** new OSD sound information interface
|
||||
**
|
||||
** Revision 1.21 2000/08/04 15:01:32 neil
|
||||
** BeOS cleanups
|
||||
**
|
||||
** Revision 1.20 2000/08/04 14:36:14 neil
|
||||
** BeOS is working.. kinda
|
||||
**
|
||||
** Revision 1.19 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.18 2000/07/23 16:21:35 neil
|
||||
** neither stricmp nor strcasecmp works everywhere
|
||||
**
|
||||
** Revision 1.17 2000/07/23 15:17:40 matt
|
||||
** osd_getfragsize
|
||||
**
|
||||
** Revision 1.16 2000/07/21 13:37:20 neil
|
||||
** snap filenames are OS-dependent
|
||||
**
|
||||
** Revision 1.15 2000/07/21 04:58:37 matt
|
||||
** new osd_main structure
|
||||
**
|
||||
** Revision 1.14 2000/07/21 04:26:15 matt
|
||||
** added some nasty externs
|
||||
**
|
||||
** Revision 1.13 2000/07/21 02:42:45 matt
|
||||
** merged osd_getinput and osd_gethostinput
|
||||
**
|
||||
** Revision 1.12 2000/07/19 13:10:35 neil
|
||||
** PATH_MAX
|
||||
**
|
||||
** Revision 1.11 2000/07/10 03:04:15 matt
|
||||
** removed scanlines, backbuffer from custom blit
|
||||
**
|
||||
** Revision 1.10 2000/07/06 16:48:25 matt
|
||||
** new video driver
|
||||
**
|
||||
** Revision 1.9 2000/07/05 17:26:16 neil
|
||||
** Moved the externs in nofrendo.c to osd.h
|
||||
**
|
||||
** Revision 1.8 2000/07/04 23:07:06 matt
|
||||
** djgpp path separator bugfix
|
||||
**
|
||||
** Revision 1.7 2000/07/04 04:45:33 matt
|
||||
** moved INLINE define into types.h
|
||||
**
|
||||
** Revision 1.6 2000/06/29 16:06:18 neil
|
||||
** Wrapped DOS-specific headers in an ifdef
|
||||
**
|
||||
** Revision 1.5 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
39
MCUME_teensy41/teensynofrendo/platform_config.h
Normal file
39
MCUME_teensy41/teensynofrendo/platform_config.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef _PLATFORM_CONFIG_H_
|
||||
#define _PLATFORM_CONFIG_H_
|
||||
|
||||
#define TEECOMPUTER 1
|
||||
|
||||
#ifdef TEECOMPUTER
|
||||
//#define ILI9341 1
|
||||
//#define ST7789 1
|
||||
//#define TFTSPI1 1
|
||||
#define HAS_T4_VGA 1
|
||||
#define HAS_SND 1
|
||||
#define HAS_USBKEY 1
|
||||
#define INVX 1
|
||||
#else
|
||||
|
||||
#define HAS_T4_VGA 1
|
||||
//#define INVX 1
|
||||
#define INVY 1
|
||||
#define HAS_SND 1
|
||||
#define HAS_USBKEY 1
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
//#define ILI9341 1
|
||||
//#define ST7789 1
|
||||
//#define SWAP_JOYSTICK 1
|
||||
//#define LOHRES 1
|
||||
//#define ROTATE_SCREEN 1
|
||||
//#define EXTERNAL_SD 1
|
||||
|
||||
|
||||
//#define USE_SDFAT 1
|
||||
//#define SD_FAT_TYPE 1
|
||||
//#define USE_SDFS 1
|
||||
//#define SDFSDEV "1:"
|
||||
|
||||
|
||||
#endif
|
||||
205
MCUME_teensy41/teensynofrendo/teensynofrendo.ino
Normal file
205
MCUME_teensy41/teensynofrendo/teensynofrendo.ino
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
extern "C" {
|
||||
#include "iopins.h"
|
||||
#include "emuapi.h"
|
||||
}
|
||||
#include "keyboard_osd.h"
|
||||
|
||||
#include "nes_emu.h"
|
||||
|
||||
#ifdef HAS_T4_VGA
|
||||
#include "vga_t_dma.h"
|
||||
TFT_T_DMA tft;
|
||||
#else
|
||||
#include "tft_t_dma.h"
|
||||
TFT_T_DMA tft = TFT_T_DMA(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO, TFT_TOUCH_CS, TFT_TOUCH_INT);
|
||||
#endif
|
||||
|
||||
bool vgaMode = false;
|
||||
|
||||
static unsigned char palette8[PALETTE_SIZE];
|
||||
static unsigned short palette16[PALETTE_SIZE];
|
||||
static IntervalTimer myTimer;
|
||||
volatile boolean vbl=true;
|
||||
static int skip=0;
|
||||
static elapsedMicros tius;
|
||||
|
||||
static void vblCount() {
|
||||
if (vbl) {
|
||||
vbl = false;
|
||||
} else {
|
||||
vbl = true;
|
||||
}
|
||||
}
|
||||
|
||||
void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index)
|
||||
{
|
||||
if (index<PALETTE_SIZE) {
|
||||
//Serial.println("%d: %d %d %d\n", index, r,g,b);
|
||||
palette8[index] = RGBVAL8(r,g,b);
|
||||
palette16[index] = RGBVAL16(r,g,b);
|
||||
}
|
||||
}
|
||||
|
||||
void emu_DrawVsync(void)
|
||||
{
|
||||
volatile boolean vb=vbl;
|
||||
skip += 1;
|
||||
skip &= VID_FRAME_SKIP;
|
||||
if (!vgaMode) {
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.waitSync();
|
||||
#else
|
||||
while (vbl==vb) {};
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void emu_DrawLine(unsigned char * VBuf, int width, int height, int line)
|
||||
{
|
||||
if (!vgaMode) {
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.writeLine(width,1,line, VBuf, palette8);
|
||||
#else
|
||||
tft.writeLine(width,1,line, VBuf, palette16);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line)
|
||||
{
|
||||
if (!vgaMode) {
|
||||
if (skip==0) {
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.writeLine(width,height,line, VBuf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line)
|
||||
{
|
||||
if (!vgaMode) {
|
||||
if (skip==0) {
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.writeLine16(width,height,line, VBuf);
|
||||
#else
|
||||
tft.writeLine(width,height,line, VBuf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride)
|
||||
{
|
||||
if (!vgaMode) {
|
||||
if (skip==0) {
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.writeScreen(width,height-TFT_VBUFFER_YCROP,stride, VBuf+(TFT_VBUFFER_YCROP/2)*stride, palette8);
|
||||
#else
|
||||
tft.writeScreen(width,height-TFT_VBUFFER_YCROP,stride, VBuf+(TFT_VBUFFER_YCROP/2)*stride, palette16);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int emu_FrameSkip(void)
|
||||
{
|
||||
return skip;
|
||||
}
|
||||
|
||||
void * emu_LineBuffer(int line)
|
||||
{
|
||||
if (!vgaMode) {
|
||||
return (void*)tft.getLineBuffer(line);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ****************************************************
|
||||
// the setup() method runs once, when the sketch starts
|
||||
// ****************************************************
|
||||
void setup() {
|
||||
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.begin(VGA_MODE_320x240);
|
||||
// NVIC_SET_PRIORITY(IRQ_QTIMER3, 0);
|
||||
#else
|
||||
tft.begin();
|
||||
#endif
|
||||
|
||||
emu_init();
|
||||
}
|
||||
|
||||
|
||||
// ****************************************************
|
||||
// the loop() method runs continuously
|
||||
// ****************************************************
|
||||
void loop(void)
|
||||
{
|
||||
if (menuActive()) {
|
||||
uint16_t bClick = emu_DebounceLocalKeys();
|
||||
int action = handleMenu(bClick);
|
||||
char * filename = menuSelection();
|
||||
if (action == ACTION_RUN1) {
|
||||
toggleMenu(false);
|
||||
vgaMode = false;
|
||||
emu_start();
|
||||
emu_Init(filename);
|
||||
tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) );
|
||||
tft.startDMA();
|
||||
myTimer.begin(vblCount, 20000); //to run every 20ms
|
||||
}
|
||||
delay(20);
|
||||
}
|
||||
else {
|
||||
uint16_t bClick = emu_DebounceLocalKeys();
|
||||
emu_Input(bClick);
|
||||
emu_Step();
|
||||
delay(10);
|
||||
//uint16_t bClick = emu_DebounceLocalKeys();
|
||||
//if (bClick & MASK_KEY_USER1) {
|
||||
// emu_Input(bClick);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAS_SND
|
||||
|
||||
#include "AudioPlaySystem.h"
|
||||
|
||||
AudioPlaySystem mymixer;
|
||||
|
||||
|
||||
void emu_sndInit() {
|
||||
Serial.println("sound init");
|
||||
#ifdef HAS_T4_VGA
|
||||
tft.begin_audio(256, mymixer.snd_Mixer);
|
||||
#else
|
||||
mymixer.begin_audio(256, mymixer.snd_Mixer);
|
||||
#endif
|
||||
// sgtl5000_1.enable();
|
||||
// sgtl5000_1.volume(0.6);
|
||||
mymixer.start();
|
||||
}
|
||||
|
||||
void emu_sndPlaySound(int chan, int volume, int freq)
|
||||
{
|
||||
if (chan < 6) {
|
||||
mymixer.sound(chan, freq, volume);
|
||||
}
|
||||
/*
|
||||
Serial.print(chan);
|
||||
Serial.print(":" );
|
||||
Serial.print(volume);
|
||||
Serial.print(":" );
|
||||
Serial.println(freq);
|
||||
*/
|
||||
}
|
||||
|
||||
void emu_sndPlayBuzz(int size, int val) {
|
||||
mymixer.buzz(size,val);
|
||||
//Serial.print((val==1)?1:0);
|
||||
//Serial.print(":");
|
||||
//Serial.println(size);
|
||||
}
|
||||
#endif
|
||||
1243
MCUME_teensy41/teensynofrendo/tft_t_dma.cpp
Normal file
1243
MCUME_teensy41/teensynofrendo/tft_t_dma.cpp
Normal file
File diff suppressed because it is too large
Load diff
232
MCUME_teensy41/teensynofrendo/tft_t_dma.h
Normal file
232
MCUME_teensy41/teensynofrendo/tft_t_dma.h
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
/*
|
||||
Based on C64 ILI9341 dma driver from Frank Bösing, 2017
|
||||
*/
|
||||
|
||||
#ifndef _TFT_T_DMAH_
|
||||
#define _TFT_T_DMAH_
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <Arduino.h>
|
||||
#include <SPI.h>
|
||||
#include <DMAChannel.h>
|
||||
#endif
|
||||
|
||||
#include "tft_t_dma_config.h"
|
||||
|
||||
#define RGBVAL32(r,g,b) ( (r<<16) | (g<<8) | b )
|
||||
#define RGBVAL16(r,g,b) ( (((r>>3)&0x1f)<<11) | (((g>>2)&0x3f)<<5) | (((b>>3)&0x1f)<<0) )
|
||||
#define RGBVAL8(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
|
||||
#define R16(rgb) ((rgb>>8)&0xf8)
|
||||
#define G16(rgb) ((rgb>>3)&0xfc)
|
||||
#define B16(rgb) ((rgb<<3)&0xf8)
|
||||
|
||||
#define PAL_COLOR_MASK 0xff
|
||||
|
||||
#ifdef LOHRES
|
||||
#define TFT_WIDTH 240
|
||||
#define TFT_REALWIDTH 240
|
||||
#else
|
||||
#define TFT_WIDTH 256
|
||||
#define TFT_REALWIDTH 320
|
||||
#endif
|
||||
#define TFT_HEIGHT 240
|
||||
#define TFT_REALHEIGHT 240
|
||||
|
||||
//#define WIDTH 272
|
||||
//#define HEIGHT 228
|
||||
|
||||
#define LINES_PER_BLOCK 64
|
||||
#define NR_OF_BLOCK 4
|
||||
#define SCREEN_DMA_NUM_SETTINGS NR_OF_BLOCK
|
||||
|
||||
|
||||
#ifdef ILI9341
|
||||
|
||||
#define ILI9341_NOP 0x00
|
||||
#define ILI9341_SWRESET 0x01
|
||||
#define ILI9341_RDDID 0x04
|
||||
#define ILI9341_RDDST 0x09
|
||||
|
||||
#define ILI9341_SLPIN 0x10
|
||||
#define ILI9341_SLPOUT 0x11
|
||||
#define ILI9341_PTLON 0x12
|
||||
#define ILI9341_NORON 0x13
|
||||
|
||||
#define ILI9341_RDMODE 0x0A
|
||||
#define ILI9341_RDMADCTL 0x0B
|
||||
#define ILI9341_RDPIXFMT 0x0C
|
||||
#define ILI9341_RDIMGFMT 0x0D
|
||||
#define ILI9341_RDSELFDIAG 0x0F
|
||||
|
||||
#define ILI9341_INVOFF 0x20
|
||||
#define ILI9341_INVON 0x21
|
||||
#define ILI9341_GAMMASET 0x26
|
||||
#define ILI9341_DISPOFF 0x28
|
||||
#define ILI9341_DISPON 0x29
|
||||
|
||||
#define ILI9341_CASET 0x2A
|
||||
#define ILI9341_PASET 0x2B
|
||||
#define ILI9341_RAMWR 0x2C
|
||||
#define ILI9341_RAMRD 0x2E
|
||||
|
||||
#define ILI9341_PTLAR 0x30
|
||||
#define ILI9341_MADCTL 0x36
|
||||
#define ILI9341_VSCRSADD 0x37
|
||||
#define ILI9341_PIXFMT 0x3A
|
||||
|
||||
#define ILI9341_FRMCTR1 0xB1
|
||||
#define ILI9341_FRMCTR2 0xB2
|
||||
#define ILI9341_FRMCTR3 0xB3
|
||||
#define ILI9341_INVCTR 0xB4
|
||||
#define ILI9341_DFUNCTR 0xB6
|
||||
|
||||
#define ILI9341_PWCTR1 0xC0
|
||||
#define ILI9341_PWCTR2 0xC1
|
||||
#define ILI9341_PWCTR3 0xC2
|
||||
#define ILI9341_PWCTR4 0xC3
|
||||
#define ILI9341_PWCTR5 0xC4
|
||||
#define ILI9341_VMCTR1 0xC5
|
||||
#define ILI9341_VMCTR2 0xC7
|
||||
|
||||
#define ILI9341_RDID1 0xDA
|
||||
#define ILI9341_RDID2 0xDB
|
||||
#define ILI9341_RDID3 0xDC
|
||||
#define ILI9341_RDID4 0xDD
|
||||
|
||||
#define ILI9341_GMCTRP1 0xE0
|
||||
#define ILI9341_GMCTRN1 0xE1
|
||||
|
||||
#define ILI9341_MADCTL_MY 0x80
|
||||
#define ILI9341_MADCTL_MX 0x40
|
||||
#define ILI9341_MADCTL_MV 0x20
|
||||
#define ILI9341_MADCTL_ML 0x10
|
||||
#define ILI9341_MADCTL_RGB 0x00
|
||||
#define ILI9341_MADCTL_BGR 0x08
|
||||
#define ILI9341_MADCTL_MH 0x04
|
||||
|
||||
#define TFT_CASET ILI9341_CASET
|
||||
#define TFT_PASET ILI9341_PASET
|
||||
#define TFT_RAMWR ILI9341_RAMWR
|
||||
#define TFT_MADCTL ILI9341_MADCTL
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ST7789
|
||||
|
||||
#define ST7735_NOP 0x00
|
||||
#define ST7735_SWRESET 0x01
|
||||
#define ST7735_RDDID 0x04
|
||||
#define ST7735_RDDST 0x09
|
||||
|
||||
#define ST7735_SLPIN 0x10
|
||||
#define ST7735_SLPOUT 0x11
|
||||
#define ST7735_PTLON 0x12
|
||||
#define ST7735_NORON 0x13
|
||||
|
||||
#define ST7735_INVOFF 0x20
|
||||
#define ST7735_INVON 0x21
|
||||
#define ST7735_DISPOFF 0x28
|
||||
#define ST7735_DISPON 0x29
|
||||
#define ST7735_CASET 0x2A
|
||||
#define ST7735_RASET 0x2B
|
||||
#define ST7735_RAMWR 0x2C
|
||||
#define ST7735_RAMRD 0x2E
|
||||
|
||||
#define ST7735_PTLAR 0x30
|
||||
#define ST7735_COLMOD 0x3A
|
||||
#define ST7735_MADCTL 0x36
|
||||
|
||||
#define ST7735_FRMCTR1 0xB1
|
||||
#define ST7735_FRMCTR2 0xB2
|
||||
#define ST7735_FRMCTR3 0xB3
|
||||
#define ST7735_INVCTR 0xB4
|
||||
#define ST7735_DISSET5 0xB6
|
||||
|
||||
#define ST7735_PWCTR1 0xC0
|
||||
#define ST7735_PWCTR2 0xC1
|
||||
#define ST7735_PWCTR3 0xC2
|
||||
#define ST7735_PWCTR4 0xC3
|
||||
#define ST7735_PWCTR5 0xC4
|
||||
#define ST7735_VMCTR1 0xC5
|
||||
|
||||
#define ST7735_RDID1 0xDA
|
||||
#define ST7735_RDID2 0xDB
|
||||
#define ST7735_RDID3 0xDC
|
||||
#define ST7735_RDID4 0xDD
|
||||
|
||||
#define ST7735_PWCTR6 0xFC
|
||||
|
||||
#define ST7735_GMCTRP1 0xE0
|
||||
#define ST7735_GMCTRN1 0xE1
|
||||
|
||||
#define ST77XX_MADCTL_MY 0x80
|
||||
#define ST77XX_MADCTL_MX 0x40
|
||||
#define ST77XX_MADCTL_MV 0x20
|
||||
#define ST77XX_MADCTL_ML 0x10
|
||||
#define ST77XX_MADCTL_RGB 0x00
|
||||
#define ST77XX_MADCTL_BGR 0x08
|
||||
#define ST77XX_MADCTL_MH 0x04
|
||||
|
||||
#define TFT_CASET ST7735_CASET
|
||||
#define TFT_PASET ST7735_RASET
|
||||
#define TFT_RAMWR ST7735_RAMWR
|
||||
#define TFT_MADCTL ST7735_MADCTL
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
class TFT_T_DMA
|
||||
{
|
||||
public:
|
||||
TFT_T_DMA(uint8_t _CS, uint8_t _DC, uint8_t _RST = 255, uint8_t _MOSI=11, uint8_t _SCLK=13, uint8_t _MISO=12, uint8_t touch_cs=38, uint8_t touch_irq=37);
|
||||
|
||||
void setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);
|
||||
void begin(void);
|
||||
void flipscreen(bool flip);
|
||||
boolean isflipped(void);
|
||||
void startDMA(void);
|
||||
void stopDMA();
|
||||
int get_frame_buffer_size(int *width, int *height);
|
||||
|
||||
// Touch screen functions
|
||||
#define TOUCH_ENABLED() ((_touch_cs != 255) && (_touch_irq != 255))
|
||||
bool isTouching(void) { return ((!TOUCH_ENABLED())?false:(digitalRead(_touch_irq) == LOW)); }
|
||||
void readRaw(uint16_t * oX, uint16_t * oY, uint16_t * oZ);
|
||||
void readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ);
|
||||
void callibrateTouch(uint16_t xMin,uint16_t yMin,uint16_t xMax,uint16_t yMax);
|
||||
|
||||
// NoDMA functions
|
||||
void writeScreenNoDma(const uint16_t *pcolors);
|
||||
void fillScreenNoDma(uint16_t color);
|
||||
void drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
|
||||
void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
|
||||
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap);
|
||||
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
|
||||
|
||||
// DMA functions
|
||||
uint16_t * getLineBuffer(int j);
|
||||
void writeScreen(int width, int height, int stride, uint8_t *buffer, uint16_t *palette16);
|
||||
void writeLine(int width, int height, int stride, uint8_t *buffer, uint16_t *palette16);
|
||||
void writeLine(int width, int height, int y, uint16_t *buf);
|
||||
void fillScreen(uint16_t color);
|
||||
void drawText(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
|
||||
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
|
||||
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap);
|
||||
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
|
||||
|
||||
protected:
|
||||
uint8_t _rst, _cs, _dc;
|
||||
uint8_t _miso, _mosi, _sclk;
|
||||
uint8_t _touch_irq=255, _touch_cs=255;
|
||||
bool flipped=false;
|
||||
|
||||
void wait(void);
|
||||
void enableTouchIrq();
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
14
MCUME_teensy41/teensynofrendo/tft_t_dma_config.h
Normal file
14
MCUME_teensy41/teensynofrendo/tft_t_dma_config.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#include "platform_config.h"
|
||||
|
||||
//#define ST7789 1
|
||||
//#define ILI9341 1
|
||||
|
||||
#define TFT_LINEARINT 1
|
||||
#define LINEARINT_HACK 1
|
||||
|
||||
//#define FLIP_SCREEN 1
|
||||
//#define TFT_DEBUG 1
|
||||
#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
|
||||
//#define TFT_STATICFB 1
|
||||
#endif
|
||||
|
||||
65
MCUME_teensy41/teensynofrendo/version.h
Executable file
65
MCUME_teensy41/teensynofrendo/version.h
Executable file
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** version.h
|
||||
**
|
||||
** Program name / version definitions
|
||||
** $Id: version.h,v 1.2 2001/05/05 16:50:49 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _VERSION_H_
|
||||
#define _VERSION_H_
|
||||
|
||||
#ifdef NSF_PLAYER
|
||||
#define APP_STRING "Nosefart"
|
||||
#else
|
||||
#define APP_STRING "Nofrendo"
|
||||
#endif /* NSF_PLAYER */
|
||||
|
||||
#define APP_VERSION "2.0"
|
||||
|
||||
#endif /* _VERSION_H_ */
|
||||
|
||||
/*
|
||||
** $Log: version.h,v $
|
||||
** Revision 1.2 2001/05/05 16:50:49 neil
|
||||
** preparing for distribution
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.9 2000/07/31 04:28:47 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.8 2000/07/17 01:52:28 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.7 2000/07/04 04:46:55 matt
|
||||
** updated version number
|
||||
**
|
||||
** Revision 1.6 2000/06/20 00:03:39 matt
|
||||
** updated for 1.91
|
||||
**
|
||||
** Revision 1.5 2000/06/09 17:01:56 matt
|
||||
** changed version to 1.90
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:25 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
53
MCUME_teensy41/teensynofrendo/vga_t_dma.h
Normal file
53
MCUME_teensy41/teensynofrendo/vga_t_dma.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
Wrapping class to extend VGA_T4 to TFT_T_DMA
|
||||
*/
|
||||
|
||||
#ifndef _VGA_T_DMAH_
|
||||
#define _VGA_T_DMAH_
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <VGA_t4.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define RGBVAL16(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
|
||||
#define RGBVAL8(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
|
||||
|
||||
|
||||
|
||||
|
||||
#define TFT_WIDTH 320
|
||||
#define TFT_REALWIDTH 320
|
||||
|
||||
#define TFT_HEIGHT 240
|
||||
#define TFT_REALHEIGHT 240
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
class TFT_T_DMA: public VGA_T4
|
||||
{
|
||||
public:
|
||||
// Fake touch screen functions
|
||||
bool isTouching(void) { return false; }
|
||||
void readRaw(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { }
|
||||
void readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { };
|
||||
void callibrateTouch(uint16_t xMin,uint16_t yMin,uint16_t xMax,uint16_t yMax) { }
|
||||
|
||||
// fake DMA functions
|
||||
void startDMA(void) { };
|
||||
void stopDMA(void) { };
|
||||
|
||||
// fake no DMA functions
|
||||
void writeScreenNoDma(const vga_pixel *pcolors) { writeScreen(pcolors); }
|
||||
void fillScreenNoDma(vga_pixel color) { clear(color); }
|
||||
void drawTextNoDma(int16_t x, int16_t y, const char * text, vga_pixel fgcolor, vga_pixel bgcolor, bool doublesize) { drawText(x,y,text,fgcolor,bgcolor,doublesize); }
|
||||
void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, vga_pixel color) { drawRect(x, y, w, h, color); }
|
||||
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) { drawSprite(x, y, bitmap); }
|
||||
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh) { drawSprite(x, y, bitmap, croparx, cropary, croparw, croparh); }
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
559
MCUME_teensy41/teensynofrendo/vid_drv.c
Normal file
559
MCUME_teensy41/teensynofrendo/vid_drv.c
Normal file
|
|
@ -0,0 +1,559 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** vid_drv.c
|
||||
**
|
||||
** Video driver
|
||||
** $Id: vid_drv.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "noftypes.h"
|
||||
#include "log.h"
|
||||
#include "bitmap.h"
|
||||
#include "vid_drv.h"
|
||||
#include "osd.h"
|
||||
|
||||
/* hardware surface */
|
||||
static bitmap_t *screen = NULL;
|
||||
|
||||
/* primary / backbuffer surfaces */
|
||||
static bitmap_t *primary_buffer = NULL; //, *back_buffer = NULL;
|
||||
|
||||
static viddriver_t *driver = NULL;
|
||||
|
||||
/* fast automagic loop unrolling */
|
||||
#define DUFFS_DEVICE(transfer, count) \
|
||||
{ \
|
||||
register int n = (count + 7) / 8; \
|
||||
switch (count % 8) \
|
||||
{ \
|
||||
case 0: do { { transfer; } \
|
||||
case 7: { transfer; } \
|
||||
case 6: { transfer; } \
|
||||
case 5: { transfer; } \
|
||||
case 4: { transfer; } \
|
||||
case 3: { transfer; } \
|
||||
case 2: { transfer; } \
|
||||
case 1: { transfer; } \
|
||||
} while (--n > 0); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* some system dependent replacement routines (for speed) */
|
||||
INLINE int vid_memcmp(const void *p1, const void *p2, int len)
|
||||
{
|
||||
/* check for 32-bit aligned data */
|
||||
if (0 == (((uint32) p1 & 3) | ((uint32) p2 & 3)))
|
||||
{
|
||||
uint32 *dw1 = (uint32 *) p1;
|
||||
uint32 *dw2 = (uint32 *) p2;
|
||||
|
||||
len >>= 2;
|
||||
|
||||
DUFFS_DEVICE(if (*dw1++ != *dw2++) return -1, len);
|
||||
}
|
||||
else
|
||||
/* fall back to 8-bit compares */
|
||||
{
|
||||
uint8 *b1 = (uint8 *) p1;
|
||||
uint8 *b2 = (uint8 *) p2;
|
||||
|
||||
DUFFS_DEVICE(if (*b1++ != *b2++) return -1, len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* super-dooper assembly memcpy (thanks, SDL!) */
|
||||
#if defined(__GNUC__) && defined(i386)
|
||||
#define vid_memcpy(dest, src, len) \
|
||||
{ \
|
||||
int u0, u1, u2; \
|
||||
__asm__ __volatile__ ( \
|
||||
" cld \n" \
|
||||
" rep \n" \
|
||||
" movsl \n" \
|
||||
" testb $2,%b4 \n" \
|
||||
" je 1f \n" \
|
||||
" movsw \n" \
|
||||
"1: \n" \
|
||||
" testb $1,%b4 \n" \
|
||||
" je 2f \n" \
|
||||
" movsb \n" \
|
||||
"2: \n" \
|
||||
: "=&c" (u0), "=&D" (u1), "=&S" (u2) \
|
||||
: "0" ((len)/4), "q" (len), "1" (dest), "2" (src) \
|
||||
: "memory"); \
|
||||
}
|
||||
#else /* !(defined(__GNUC__) && defined(i386)) */
|
||||
INLINE void vid_memcpy(void *dest, const void *src, int len)
|
||||
{
|
||||
uint32 *s = (uint32 *) src;
|
||||
uint32 *d = (uint32 *) dest;
|
||||
|
||||
ASSERT(0 == ((len & 3) | ((uint32) src & 3) | ((uint32) dest & 3)));
|
||||
len >>= 2;
|
||||
|
||||
DUFFS_DEVICE(*d++ = *s++, len);
|
||||
}
|
||||
#endif /* !(defined(__GNUC__) && defined(i386)) */
|
||||
|
||||
|
||||
extern bitmap_t *lock_write(void);
|
||||
/* TODO: any way to remove this filth (GUI needs it)? */
|
||||
bitmap_t *vid_getbuffer(void)
|
||||
{
|
||||
return primary_buffer;
|
||||
}
|
||||
|
||||
void vid_setpalette(rgb_t *p)
|
||||
{
|
||||
ASSERT(driver);
|
||||
ASSERT(p);
|
||||
|
||||
driver->set_palette(p);
|
||||
}
|
||||
|
||||
/* blits a bitmap onto primary buffer */
|
||||
void vid_blit(bitmap_t *bitmap, int src_x, int src_y, int dest_x, int dest_y,
|
||||
int width, int height)
|
||||
{
|
||||
int bitmap_pitch, primary_pitch;
|
||||
uint8 *dest_ptr, *src_ptr;
|
||||
|
||||
ASSERT(bitmap);
|
||||
|
||||
/* clip to source */
|
||||
if (src_y >= bitmap->height)
|
||||
return;
|
||||
if (src_y + height > bitmap->height)
|
||||
height = bitmap->height - src_y;
|
||||
|
||||
if (src_x >= bitmap->width)
|
||||
return;
|
||||
if (src_x + width > bitmap->width)
|
||||
width = bitmap->width - src_x;
|
||||
|
||||
/* clip to dest */
|
||||
if (dest_y + height <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (dest_y < 0)
|
||||
{
|
||||
height += dest_y;
|
||||
src_y -= dest_y;
|
||||
dest_y = 0;
|
||||
}
|
||||
|
||||
if (dest_y >= primary_buffer->height)
|
||||
return;
|
||||
if (dest_y + height > primary_buffer->height)
|
||||
height = primary_buffer->height - dest_y;
|
||||
|
||||
if (dest_x + width <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (dest_x < 0)
|
||||
{
|
||||
width += dest_x;
|
||||
src_x -= dest_x;
|
||||
dest_x = 0;
|
||||
}
|
||||
|
||||
if (dest_x >= primary_buffer->width)
|
||||
return;
|
||||
if (dest_x + width > primary_buffer->width)
|
||||
width = primary_buffer->width - dest_x;
|
||||
|
||||
src_ptr = bitmap->line[src_y] + src_x;
|
||||
dest_ptr = primary_buffer->line[dest_y] + dest_x;
|
||||
|
||||
/* Avoid doing unnecessary indexed lookups */
|
||||
bitmap_pitch = bitmap->pitch;
|
||||
primary_pitch = primary_buffer->pitch;
|
||||
|
||||
/* do the copy */
|
||||
while (height--)
|
||||
{
|
||||
vid_memcpy(dest_ptr, src_ptr, width);
|
||||
src_ptr += bitmap_pitch;
|
||||
dest_ptr += primary_pitch;
|
||||
}
|
||||
}
|
||||
|
||||
static void vid_blitscreen(int num_dirties, rect_t *dirty_rects)
|
||||
{
|
||||
int src_x, src_y, dest_x, dest_y;
|
||||
int blit_width, blit_height;
|
||||
|
||||
screen = driver->lock_write();
|
||||
|
||||
/* center in y direction */
|
||||
if (primary_buffer->height <= screen->height)
|
||||
{
|
||||
src_y = 0;
|
||||
blit_height = primary_buffer->height;
|
||||
dest_y = (screen->height - blit_height) >> 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
src_y = (primary_buffer->height - screen->height) >> 1;
|
||||
blit_height = screen->height;
|
||||
dest_y = 0;
|
||||
}
|
||||
|
||||
/* and in x */
|
||||
if (primary_buffer->width <= screen->width)
|
||||
{
|
||||
src_x = 0;
|
||||
blit_width = primary_buffer->width;
|
||||
dest_x = (screen->width - blit_width) >> 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
src_x = (primary_buffer->width - screen->width) >> 1;
|
||||
blit_width = screen->width;
|
||||
dest_x = 0;
|
||||
}
|
||||
|
||||
/* should we just copy the entire screen? */
|
||||
if (-1 == num_dirties)
|
||||
{
|
||||
uint8 *dest, *src;
|
||||
|
||||
src = primary_buffer->line[src_y] + src_x;
|
||||
dest = screen->line[dest_y] + dest_x;
|
||||
|
||||
while (blit_height--)
|
||||
{
|
||||
vid_memcpy(dest, src, primary_buffer->width);
|
||||
src += primary_buffer->pitch;
|
||||
dest += screen->pitch;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* we need to blit just a bunch of dirties */
|
||||
int i, j, height;
|
||||
rect_t *rects = dirty_rects;
|
||||
|
||||
for (i = 0; i < num_dirties && blit_height; i++)
|
||||
{
|
||||
height = rects->h;
|
||||
if (blit_height < height)
|
||||
height = blit_height;
|
||||
|
||||
j = 0;
|
||||
DUFFS_DEVICE(
|
||||
{
|
||||
vid_memcpy(screen->line[dest_y + rects->y + j] + rects->x + dest_x,
|
||||
primary_buffer->line[src_y + rects->y + j] + rects->x + src_x,
|
||||
rects->w);
|
||||
j++;
|
||||
blit_height--;
|
||||
}, height);
|
||||
|
||||
rects++;
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->free_write)
|
||||
driver->free_write(num_dirties, dirty_rects);
|
||||
}
|
||||
|
||||
/* TODO: this code is sickly */
|
||||
|
||||
#define CHUNK_WIDTH 256
|
||||
#define CHUNK_HEIGHT 16
|
||||
#define MAX_DIRTIES ((256 / CHUNK_WIDTH) * (240 / CHUNK_HEIGHT))
|
||||
#define DIRTY_CUTOFF ((3 * MAX_DIRTIES) / 4)
|
||||
|
||||
#if 0
|
||||
INLINE int calc_dirties(rect_t *list)
|
||||
{
|
||||
bool dirty;
|
||||
int num_dirties = 0;
|
||||
int i = 0, j, line_offset = 0;
|
||||
int iterations = primary_buffer->height / CHUNK_HEIGHT;
|
||||
|
||||
for (i = 0; i < iterations; i++)
|
||||
{
|
||||
dirty = false;
|
||||
|
||||
j = line_offset;
|
||||
DUFFS_DEVICE(
|
||||
{
|
||||
if (vid_memcmp(back_buffer->line[j], primary_buffer->line[j],
|
||||
CHUNK_WIDTH))
|
||||
{
|
||||
dirty = true;
|
||||
break;
|
||||
}
|
||||
|
||||
j++;
|
||||
}, CHUNK_HEIGHT);
|
||||
|
||||
if (true == dirty)
|
||||
{
|
||||
list->h = CHUNK_HEIGHT;
|
||||
list->w = CHUNK_WIDTH;
|
||||
list->x = 0;
|
||||
list->y = line_offset;
|
||||
list++;
|
||||
|
||||
/* totally arbitrary at this point */
|
||||
if (++num_dirties > DIRTY_CUTOFF)
|
||||
return -1;
|
||||
}
|
||||
|
||||
line_offset += CHUNK_HEIGHT;
|
||||
}
|
||||
|
||||
return num_dirties;
|
||||
}
|
||||
#endif
|
||||
|
||||
void vid_flush(void)
|
||||
{
|
||||
bitmap_t *temp;
|
||||
int num_dirties;
|
||||
rect_t dirty_rects[MAX_DIRTIES];
|
||||
|
||||
ASSERT(driver);
|
||||
|
||||
if (true == driver->invalidate)
|
||||
{
|
||||
driver->invalidate = false;
|
||||
num_dirties = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//num_dirties = calc_dirties(dirty_rects);
|
||||
num_dirties = -1;
|
||||
}
|
||||
|
||||
if (driver->custom_blit)
|
||||
driver->custom_blit(primary_buffer, num_dirties, dirty_rects);
|
||||
else
|
||||
vid_blitscreen(num_dirties, dirty_rects);
|
||||
|
||||
/* Swap pointers to the main/back buffers */
|
||||
// temp = back_buffer;
|
||||
// back_buffer = primary_buffer;
|
||||
// primary_buffer = temp;
|
||||
}
|
||||
|
||||
/* emulated machine tells us which resolution it wants */
|
||||
int vid_setmode(int width, int height)
|
||||
{
|
||||
if (NULL != primary_buffer)
|
||||
bmp_destroy(&primary_buffer);
|
||||
// if (NULL != back_buffer)
|
||||
// bmp_destroy(&back_buffer);
|
||||
primary_buffer = bmp_create(width, height, 0); /* no overdraw */
|
||||
if (NULL == primary_buffer)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vid_findmode(int width, int height, viddriver_t *osd_driver)
|
||||
{
|
||||
if (osd_driver->init(width, height))
|
||||
{
|
||||
driver = NULL;
|
||||
return -1; /* mode not available! */
|
||||
}
|
||||
|
||||
/* we got our driver */
|
||||
driver = osd_driver;
|
||||
|
||||
/* re-assert dimensions, clear the surface */
|
||||
screen = driver->lock_write();
|
||||
|
||||
/* release surface */
|
||||
if (driver->free_write)
|
||||
driver->free_write(-1, NULL);
|
||||
|
||||
log_printf("video driver: %s at %dx%d\n", driver->name,
|
||||
screen->width, screen->height);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This is the interface to the drivers, used in nofrendo.c */
|
||||
int vid_init(int width, int height, viddriver_t *osd_driver)
|
||||
{
|
||||
if (vid_findmode(width, height, osd_driver))
|
||||
{
|
||||
log_printf("video initialization failed for %s at %dx%d\n",
|
||||
osd_driver->name, width, height);
|
||||
return -1;
|
||||
}
|
||||
log_printf("vid_init done\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vid_shutdown(void)
|
||||
{
|
||||
if (NULL == driver)
|
||||
return;
|
||||
|
||||
if (NULL != primary_buffer)
|
||||
bmp_destroy(&primary_buffer);
|
||||
#if 0
|
||||
if (NULL != back_buffer)
|
||||
bmp_destroy(&back_buffer);
|
||||
#endif
|
||||
|
||||
if (driver && driver->shutdown)
|
||||
driver->shutdown();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** $Log: vid_drv.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.40 2000/11/25 20:26:42 matt
|
||||
** not much
|
||||
**
|
||||
** Revision 1.39 2000/11/16 14:27:27 matt
|
||||
** even more crash-proofness
|
||||
**
|
||||
** Revision 1.38 2000/11/16 14:11:18 neil
|
||||
** Better *not* to crash in case of catastrophic failure in the driver
|
||||
**
|
||||
** Revision 1.37 2000/11/13 00:55:16 matt
|
||||
** no dirties seems to be faster (!?!?)
|
||||
**
|
||||
** Revision 1.36 2000/11/06 05:16:18 matt
|
||||
** minor clipping bug
|
||||
**
|
||||
** Revision 1.35 2000/11/06 02:16:26 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.34 2000/11/05 22:53:13 matt
|
||||
** only one video driver per system, please
|
||||
**
|
||||
** Revision 1.33 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.32 2000/11/05 06:23:41 matt
|
||||
** thinlib spawns changes
|
||||
**
|
||||
** Revision 1.31 2000/10/10 13:58:14 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.30 2000/10/10 13:03:53 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.29 2000/10/08 17:58:23 matt
|
||||
** lock_read() should not allow us to clear the bitmap
|
||||
**
|
||||
** Revision 1.28 2000/09/18 02:06:48 matt
|
||||
** -pedantic is your friend
|
||||
**
|
||||
** Revision 1.27 2000/08/16 02:53:05 matt
|
||||
** changed init() interface a wee bit
|
||||
**
|
||||
** Revision 1.26 2000/08/14 02:45:59 matt
|
||||
** fixed nasty bug in vid_blitscreen
|
||||
**
|
||||
** Revision 1.24 2000/08/11 01:44:37 matt
|
||||
** clipping bugfix
|
||||
**
|
||||
** Revision 1.23 2000/07/31 04:28:47 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.22 2000/07/28 07:25:49 neil
|
||||
** Video driver has an invalidate flag, telling vid_drv not to calculate dirties for the next frame
|
||||
**
|
||||
** Revision 1.21 2000/07/28 03:51:45 matt
|
||||
** lock_read used instead of lock_write in some places
|
||||
**
|
||||
** Revision 1.20 2000/07/28 01:24:05 matt
|
||||
** dirty rectangle support
|
||||
**
|
||||
** Revision 1.19 2000/07/27 23:49:52 matt
|
||||
** no more getmode
|
||||
**
|
||||
** Revision 1.18 2000/07/27 04:30:37 matt
|
||||
** change to get_mode api
|
||||
**
|
||||
** Revision 1.17 2000/07/27 04:05:58 matt
|
||||
** changed place where name goes
|
||||
**
|
||||
** Revision 1.16 2000/07/27 01:16:22 matt
|
||||
** api changes for new main and dirty rects
|
||||
**
|
||||
** Revision 1.15 2000/07/26 21:36:13 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.14 2000/07/24 04:33:57 matt
|
||||
** skeleton of dirty rectangle code in place
|
||||
**
|
||||
** Revision 1.13 2000/07/23 14:35:39 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.12 2000/07/18 19:41:26 neil
|
||||
** use screen->pitch in blitscreen, not screen_width
|
||||
**
|
||||
** Revision 1.11 2000/07/11 04:30:16 matt
|
||||
** overdraw unnecessary!
|
||||
**
|
||||
** Revision 1.10 2000/07/10 19:07:57 matt
|
||||
** added custom clear() member call to video driver
|
||||
**
|
||||
** Revision 1.9 2000/07/10 03:06:49 matt
|
||||
** my dependency file is broken... *snif*
|
||||
**
|
||||
** Revision 1.8 2000/07/10 03:04:15 matt
|
||||
** removed scanlines, backbuffer from custom blit
|
||||
**
|
||||
** Revision 1.7 2000/07/10 01:03:20 neil
|
||||
** New video scheme allows for custom blitters to be determined by the driver at runtime
|
||||
**
|
||||
** Revision 1.6 2000/07/09 03:34:46 matt
|
||||
** temporary cleanup
|
||||
**
|
||||
** Revision 1.5 2000/07/08 23:48:29 neil
|
||||
** Another assumption GGI kills: pitch == width for hardware bitmaps
|
||||
**
|
||||
** Revision 1.4 2000/07/07 20:18:03 matt
|
||||
** added overdraw, fixed some bugs in blitters
|
||||
**
|
||||
** Revision 1.3 2000/07/07 18:33:55 neil
|
||||
** no need to lock for reading just to get the dimensions
|
||||
**
|
||||
** Revision 1.2 2000/07/07 18:11:37 neil
|
||||
** Generalizing the video driver
|
||||
**
|
||||
** Revision 1.1 2000/07/06 16:48:47 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
145
MCUME_teensy41/teensynofrendo/vid_drv.h
Executable file
145
MCUME_teensy41/teensynofrendo/vid_drv.h
Executable file
|
|
@ -0,0 +1,145 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** vid_drv.h
|
||||
**
|
||||
** Video driver
|
||||
** $Id: vid_drv.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _VID_DRV_H_
|
||||
#define _VID_DRV_H_
|
||||
|
||||
#include "bitmap.h"
|
||||
|
||||
typedef struct viddriver_s
|
||||
{
|
||||
/* name of driver */
|
||||
const char *name;
|
||||
/* init function - return 0 on success, nonzero on failure */
|
||||
int (*init)(int width, int height);
|
||||
/* clean up after driver (can be NULL) */
|
||||
void (*shutdown)(void);
|
||||
/* set a video mode - return 0 on success, nonzero on failure */
|
||||
int (*set_mode)(int width, int height);
|
||||
/* set up a palette */
|
||||
void (*set_palette)(rgb_t *palette);
|
||||
/* custom bitmap clear (can be NULL) */
|
||||
void (*clear)(uint8 color);
|
||||
/* lock surface for writing (required) */
|
||||
bitmap_t *(*lock_write)(void);
|
||||
/* free a locked surface (can be NULL) */
|
||||
void (*free_write)(int num_dirties, rect_t *dirty_rects);
|
||||
/* custom blitter - num_dirties == -1 if full blit required */
|
||||
void (*custom_blit)(bitmap_t *primary, int num_dirties,
|
||||
rect_t *dirty_rects);
|
||||
/* immediately invalidate the buffer, i.e. full redraw */
|
||||
bool invalidate;
|
||||
} viddriver_t;
|
||||
|
||||
/* TODO: filth */
|
||||
extern bitmap_t *vid_getbuffer(void);
|
||||
|
||||
extern int vid_init(int width, int height, viddriver_t *osd_driver);
|
||||
extern void vid_shutdown(void);
|
||||
|
||||
extern int vid_setmode(int width, int height);
|
||||
extern void vid_setpalette(rgb_t *pal);
|
||||
|
||||
extern void vid_blit(bitmap_t *bitmap, int src_x, int src_y, int dest_x,
|
||||
int dest_y, int blit_width, int blit_height);
|
||||
extern void vid_flush(void);
|
||||
|
||||
#endif /* _VID_DRV_H_ */
|
||||
|
||||
/*
|
||||
** $Log: vid_drv.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.22 2000/11/05 22:53:13 matt
|
||||
** only one video driver per system, please
|
||||
**
|
||||
** Revision 1.21 2000/11/05 16:37:18 matt
|
||||
** rolled rgb.h into bitmap.h
|
||||
**
|
||||
** Revision 1.20 2000/11/05 06:23:41 matt
|
||||
** thinlib spawns changes
|
||||
**
|
||||
** Revision 1.19 2000/10/10 13:58:14 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.18 2000/10/10 13:03:54 matt
|
||||
** Mr. Clean makes a guest appearance
|
||||
**
|
||||
** Revision 1.17 2000/08/16 02:53:04 matt
|
||||
** changed init() interface a wee bit
|
||||
**
|
||||
** Revision 1.16 2000/07/31 04:28:47 matt
|
||||
** one million cleanups
|
||||
**
|
||||
** Revision 1.15 2000/07/28 07:25:49 neil
|
||||
** Video driver has an invalidate flag, telling vid_drv not to calculate dirties for the next frame
|
||||
**
|
||||
** Revision 1.14 2000/07/27 23:49:52 matt
|
||||
** no more getmode
|
||||
**
|
||||
** Revision 1.13 2000/07/27 04:30:37 matt
|
||||
** change to get_mode api
|
||||
**
|
||||
** Revision 1.12 2000/07/27 04:08:04 matt
|
||||
** char * -> const char *
|
||||
**
|
||||
** Revision 1.11 2000/07/27 04:05:58 matt
|
||||
** changed place where name goes
|
||||
**
|
||||
** Revision 1.10 2000/07/27 01:16:22 matt
|
||||
** api changes for new main and dirty rects
|
||||
**
|
||||
** Revision 1.9 2000/07/26 21:36:14 neil
|
||||
** Big honkin' change -- see the mailing list
|
||||
**
|
||||
** Revision 1.8 2000/07/24 04:33:57 matt
|
||||
** skeleton of dirty rectangle code in place
|
||||
**
|
||||
** Revision 1.7 2000/07/10 19:07:57 matt
|
||||
** added custom clear() member call to video driver
|
||||
**
|
||||
** Revision 1.6 2000/07/10 03:04:15 matt
|
||||
** removed scanlines, backbuffer from custom blit
|
||||
**
|
||||
** Revision 1.5 2000/07/10 01:03:20 neil
|
||||
** New video scheme allows for custom blitters to be determined by the driver at runtime
|
||||
**
|
||||
** Revision 1.4 2000/07/09 03:34:47 matt
|
||||
** temporary cleanup
|
||||
**
|
||||
** Revision 1.3 2000/07/07 20:17:35 matt
|
||||
** better custom blitting support
|
||||
**
|
||||
** Revision 1.2 2000/07/07 18:11:38 neil
|
||||
** Generalizing the video driver
|
||||
**
|
||||
** Revision 1.1 2000/07/06 16:48:47 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
278
MCUME_teensy41/teensynofrendo/vrcvisnd.c
Executable file
278
MCUME_teensy41/teensynofrendo/vrcvisnd.c
Executable file
|
|
@ -0,0 +1,278 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** vrcvisnd.c
|
||||
**
|
||||
** VRCVI sound hardware emulation
|
||||
** $Id: vrcvisnd.c,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#include "noftypes.h"
|
||||
#include "vrcvisnd.h"
|
||||
#include "nes_apu.h"
|
||||
|
||||
typedef struct vrcvirectangle_s
|
||||
{
|
||||
bool enabled;
|
||||
|
||||
uint8 reg[3];
|
||||
|
||||
float accum;
|
||||
uint8 adder;
|
||||
|
||||
int32 freq;
|
||||
int32 volume;
|
||||
uint8 duty_flip;
|
||||
} vrcvirectangle_t;
|
||||
|
||||
typedef struct vrcvisawtooth_s
|
||||
{
|
||||
bool enabled;
|
||||
|
||||
uint8 reg[3];
|
||||
|
||||
float accum;
|
||||
uint8 adder;
|
||||
uint8 output_acc;
|
||||
|
||||
int32 freq;
|
||||
uint8 volume;
|
||||
} vrcvisawtooth_t;
|
||||
|
||||
typedef struct vrcvisnd_s
|
||||
{
|
||||
vrcvirectangle_t rectangle[2];
|
||||
vrcvisawtooth_t saw;
|
||||
float incsize;
|
||||
} vrcvisnd_t;
|
||||
|
||||
|
||||
static vrcvisnd_t vrcvi;
|
||||
|
||||
/* VRCVI rectangle wave generation */
|
||||
static int32 vrcvi_rectangle(vrcvirectangle_t *chan)
|
||||
{
|
||||
/* reg0: 0-3=volume, 4-6=duty cycle
|
||||
** reg1: 8 bits of freq
|
||||
** reg2: 0-3=high freq, 7=enable
|
||||
*/
|
||||
|
||||
chan->accum -= vrcvi.incsize; /* # of clocks per wave cycle */
|
||||
while (chan->accum < 0)
|
||||
{
|
||||
chan->accum += chan->freq;
|
||||
chan->adder = (chan->adder + 1) & 0x0F;
|
||||
}
|
||||
|
||||
/* return if not enabled */
|
||||
if (false == chan->enabled)
|
||||
return 0;
|
||||
|
||||
if (chan->adder < chan->duty_flip)
|
||||
return -(chan->volume);
|
||||
else
|
||||
return chan->volume;
|
||||
}
|
||||
|
||||
/* VRCVI sawtooth wave generation */
|
||||
static int32 vrcvi_sawtooth(vrcvisawtooth_t *chan)
|
||||
{
|
||||
/* reg0: 0-5=phase accumulator bits
|
||||
** reg1: 8 bits of freq
|
||||
** reg2: 0-3=high freq, 7=enable
|
||||
*/
|
||||
|
||||
chan->accum -= vrcvi.incsize; /* # of clocks per wav cycle */
|
||||
while (chan->accum < 0)
|
||||
{
|
||||
chan->accum += chan->freq;
|
||||
chan->output_acc += chan->volume;
|
||||
|
||||
chan->adder++;
|
||||
if (7 == chan->adder)
|
||||
{
|
||||
chan->adder = 0;
|
||||
chan->output_acc = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* return if not enabled */
|
||||
if (false == chan->enabled)
|
||||
return 0;
|
||||
|
||||
return (chan->output_acc >> 3) << 9;
|
||||
}
|
||||
|
||||
/* mix vrcvi sound channels together */
|
||||
static int32 vrcvi_process(void)
|
||||
{
|
||||
int32 output;
|
||||
|
||||
output = vrcvi_rectangle(&vrcvi.rectangle[0]);
|
||||
output += vrcvi_rectangle(&vrcvi.rectangle[1]);
|
||||
output += vrcvi_sawtooth(&vrcvi.saw);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
/* write to registers */
|
||||
static void vrcvi_write(uint32 address, uint8 value)
|
||||
{
|
||||
int chan = (address >> 12) - 9;
|
||||
|
||||
switch (address & 0xB003)
|
||||
{
|
||||
case 0x9000:
|
||||
case 0xA000:
|
||||
vrcvi.rectangle[chan].reg[0] = value;
|
||||
vrcvi.rectangle[chan].volume = (value & 0x0F) << 8;
|
||||
vrcvi.rectangle[chan].duty_flip = (value >> 4) + 1;
|
||||
break;
|
||||
|
||||
case 0x9001:
|
||||
case 0xA001:
|
||||
vrcvi.rectangle[chan].reg[1] = value;
|
||||
vrcvi.rectangle[chan].freq = ((vrcvi.rectangle[chan].reg[2] & 0x0F) << 8) + value + 1;
|
||||
break;
|
||||
|
||||
case 0x9002:
|
||||
case 0xA002:
|
||||
vrcvi.rectangle[chan].reg[2] = value;
|
||||
vrcvi.rectangle[chan].freq = ((value & 0x0F) << 8) + vrcvi.rectangle[chan].reg[1] + 1;
|
||||
vrcvi.rectangle[chan].enabled = (value & 0x80) ? true : false;
|
||||
break;
|
||||
|
||||
case 0xB000:
|
||||
vrcvi.saw.reg[0] = value;
|
||||
vrcvi.saw.volume = value & 0x3F;
|
||||
break;
|
||||
|
||||
case 0xB001:
|
||||
vrcvi.saw.reg[1] = value;
|
||||
vrcvi.saw.freq = (((vrcvi.saw.reg[2] & 0x0F) << 8) + value + 1) << 1;
|
||||
break;
|
||||
|
||||
case 0xB002:
|
||||
vrcvi.saw.reg[2] = value;
|
||||
vrcvi.saw.freq = (((value & 0x0F) << 8) + vrcvi.saw.reg[1] + 1) << 1;
|
||||
vrcvi.saw.enabled = (value & 0x80) ? true : false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* reset state of vrcvi sound channels */
|
||||
static void vrcvi_reset(void)
|
||||
{
|
||||
int i;
|
||||
apu_t apu;
|
||||
|
||||
/* get the phase period from the apu */
|
||||
apu_getcontext(&apu);
|
||||
vrcvi.incsize = apu.cycle_rate;
|
||||
|
||||
/* preload regs */
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
vrcvi_write(0x9000 + i, 0);
|
||||
vrcvi_write(0xA000 + i, 0);
|
||||
vrcvi_write(0xB000 + i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static apu_memwrite vrcvi_memwrite[] =
|
||||
{
|
||||
{ 0x9000, 0x9002, vrcvi_write }, /* vrc6 */
|
||||
{ 0xA000, 0xA002, vrcvi_write },
|
||||
{ 0xB000, 0xB002, vrcvi_write },
|
||||
{ -1, -1, NULL }
|
||||
};
|
||||
|
||||
apuext_t vrcvi_ext =
|
||||
{
|
||||
NULL, /* no init */
|
||||
NULL, /* no shutdown */
|
||||
vrcvi_reset,
|
||||
vrcvi_process,
|
||||
NULL, /* no reads */
|
||||
vrcvi_memwrite
|
||||
};
|
||||
|
||||
/*
|
||||
** $Log: vrcvisnd.c,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.2 2000/11/05 22:21:00 matt
|
||||
** help me!
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:00 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.17 2000/10/10 13:58:18 matt
|
||||
** stroustrup squeezing his way in the door
|
||||
**
|
||||
** Revision 1.16 2000/10/03 11:56:20 matt
|
||||
** better support for optional sound ext routines
|
||||
**
|
||||
** Revision 1.15 2000/09/27 12:26:03 matt
|
||||
** changed sound accumulators back to floats
|
||||
**
|
||||
** Revision 1.14 2000/09/15 13:38:40 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.13 2000/09/15 04:58:07 matt
|
||||
** simplifying and optimizing APU core
|
||||
**
|
||||
** Revision 1.12 2000/07/30 04:32:59 matt
|
||||
** no more apu_getcyclerate hack
|
||||
**
|
||||
** Revision 1.11 2000/07/17 01:52:31 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.10 2000/07/06 11:42:41 matt
|
||||
** forgot to remove FDS register range
|
||||
**
|
||||
** Revision 1.9 2000/07/04 04:51:41 matt
|
||||
** cleanups
|
||||
**
|
||||
** Revision 1.8 2000/07/03 02:18:53 matt
|
||||
** much better external module exporting
|
||||
**
|
||||
** Revision 1.7 2000/06/20 04:06:16 matt
|
||||
** migrated external sound definition to apu module
|
||||
**
|
||||
** Revision 1.6 2000/06/20 00:08:58 matt
|
||||
** changed to driver based API
|
||||
**
|
||||
** Revision 1.5 2000/06/09 16:49:02 matt
|
||||
** removed all floating point from sound generation
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:28 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
70
MCUME_teensy41/teensynofrendo/vrcvisnd.h
Executable file
70
MCUME_teensy41/teensynofrendo/vrcvisnd.h
Executable file
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)
|
||||
**
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or
|
||||
** modify it under the terms of version 2 of the GNU Library General
|
||||
** Public License as published by the Free Software Foundation.
|
||||
**
|
||||
** 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
|
||||
** Library General Public License for more details. To obtain a
|
||||
** copy of the GNU Library General Public License, write to the Free
|
||||
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Any permitted reproduction of these routines, in whole or in part,
|
||||
** must bear this legend.
|
||||
**
|
||||
**
|
||||
** vrcvisnd.h
|
||||
**
|
||||
** VRCVI (Konami MMC) sound hardware emulation header
|
||||
** $Id: vrcvisnd.h,v 1.2 2001/04/27 14:37:11 neil Exp $
|
||||
*/
|
||||
|
||||
#ifndef _VRCVISND_H_
|
||||
#define _VRCVISND_H_
|
||||
|
||||
#include "nes_apu.h"
|
||||
|
||||
extern apuext_t vrcvi_ext;
|
||||
|
||||
#endif /* _VRCVISND_H_ */
|
||||
|
||||
/*
|
||||
** $Log: vrcvisnd.h,v $
|
||||
** Revision 1.2 2001/04/27 14:37:11 neil
|
||||
** wheeee
|
||||
**
|
||||
** Revision 1.1 2001/04/27 12:54:40 neil
|
||||
** blah
|
||||
**
|
||||
** Revision 1.1.1.1 2001/04/27 07:03:54 neil
|
||||
** initial
|
||||
**
|
||||
** Revision 1.1 2000/10/24 12:20:00 matt
|
||||
** changed directory structure
|
||||
**
|
||||
** Revision 1.10 2000/09/27 12:26:03 matt
|
||||
** changed sound accumulators back to floats
|
||||
**
|
||||
** Revision 1.9 2000/09/15 13:38:40 matt
|
||||
** changes for optimized apu core
|
||||
**
|
||||
** Revision 1.8 2000/07/17 01:52:31 matt
|
||||
** made sure last line of all source files is a newline
|
||||
**
|
||||
** Revision 1.7 2000/06/20 04:06:16 matt
|
||||
** migrated external sound definition to apu module
|
||||
**
|
||||
** Revision 1.6 2000/06/20 00:08:58 matt
|
||||
** changed to driver based API
|
||||
**
|
||||
** Revision 1.5 2000/06/09 16:49:02 matt
|
||||
** removed all floating point from sound generation
|
||||
**
|
||||
** Revision 1.4 2000/06/09 15:12:28 matt
|
||||
** initial revision
|
||||
**
|
||||
*/
|
||||
Loading…
Reference in a new issue