ARCADE1UP SF2JAMMAその2

Street Fighter Control Deckの電源スイッチを利用したくなりました。電源のGNDをPIN35につないで、JAMMAのGND(1)をPIN36につなげばOKでした。

結線図

SF2

JAMMA

       SF2        JAMMA    GP25B13A-R1B
                  5V(3)       5V
                  -5V(5)      -5V
                  12V(6)      12V
PIN 1  P2 Up      P2 Up(V)
PIN 2  P2 Down    P2 Down(W)
PIN 3  P2 Left    P2 Left(X)
PIN 4 P2 Right   P2 Right(Y)
PIN 5 P2 A       P2 Button 1(Z)
PIN 6 P2 D       P2 Button 4(c)
PIN 7 P2 B       P2 Button 2(a)
PIN 8  P2 E       P2 Button 5(d)
PIN 9  P2 C       P2 Button 3(b)
PIN10  P2 F       P2 Button 6(e)
PIN11  P2 Start   P2 Start(U)
PIN12  P1 Start   P1 Start(17)
PIN13  NC         NC                          
PIN14  GND        GND(f)
PIN15  NC         NC
PIN16  NC         NC
PIN17  NC         NC
PIN18  NC         NC
PIN19 P1 Up      P1 Up(18)
PIN20 P1 Down    P1 Down(19)
PIN21 P1 Left    P1 Left(20)
PIN22 P1 Right   P1 Right(21)
PIN23 P1 A       P1 Button 1(22)
PIN24  P1 D       P1 Button 4(25)
PIN25  P1 B       P1 Button 2(23)
PIN26  P1 E       P1 Button 5(26)
PIN27  P1 C       P1 Button 3(24)
PIN28  P1 F       P1 Button 6(27)
PIN29  GND        NC
PIN30  GND        NC
PIN31  GND        NC
PIN32  GND        NC
PIN33  NC         NC
PIN34  NC         NC
PIN35  Power      NC      GND
PIN36  Power      GND(1)  NC
PIN37  VOL_A      NC
PIN38  VOL_B      Coin A(16)
PIN39  Speaker    Sperker(10)
PIN40  Speaker    Sperker(L)

ARCADE1UP SF2JAMMA

ARCADE1UPでJAMMA基板を遊びたい。

https://arcade1up.com/collections/parts/products/street-fighter-control-deck

ACアダプタ

https://www.mouser.jp/datasheet/2/260/GP25B-SPEC-1291644.pdf

  • GP25B13A-R1B $28.96

ヤフオク

  • 56ピンJAMMAコネクタ

秋月電子通商

  • 2×20(40P)両端コネクタ付IDCリボンケーブル(フラットケーブル) 200円
  • 基板取付用DINソケット(メス) 5P 60円
  • 耐熱電子ワイヤー 2m×7色 外径1.55mm(UL3265 AWG20) 650円

aitendo

  • IDCソケット(40P) [FM01] 40円

結線図

SF2

JAMMA

       SF2        JAMMA    GP25B13A-R1B
                  GND(1)      GND
                  5V(3)       5V
                  -5V(5)      -5V
                  12V(6)      12V
PIN 1  P2 Up      P2 Up(V)
PIN 2  P2 Down    P2 Down(W)
PIN 3  P2 Left    P2 Left(X)
PIN 4 P2 Right   P2 Right(Y)
PIN 5 P2 A       P2 Button 1(Z)
PIN 6 P2 D       P2 Button 4(c)
PIN 7 P2 B       P2 Button 2(a)
PIN 8  P2 E       P2 Button 5(d)
PIN 9  P2 C       P2 Button 3(b)
PIN10  P2 F       P2 Button 6(e)
PIN11  P2 Start   P2 Start(U)
PIN12  P1 Start   P1 Start(17)
PIN13  NC         NC                          
PIN14  GND        GND(f)
PIN15  NC         NC
PIN16  NC         NC
PIN17  NC         NC
PIN18  NC         NC
PIN19 P1 Up      P1 Up(18)
PIN20 P1 Down    P1 Down(19)
PIN21 P1 Left    P1 Left(20)
PIN22 P1 Right   P1 Right(21)
PIN23 P1 A       P1 Button 1(22)
PIN24  P1 D       P1 Button 4(25)
PIN25  P1 B       P1 Button 2(23)
PIN26  P1 E       P1 Button 5(26)
PIN27  P1 C       P1 Button 3(24)
PIN28  P1 F       P1 Button 6(27)
PIN29  GND        NC
PIN30  GND        NC
PIN31  GND        NC
PIN32  GND        NC
PIN33  NC         NC
PIN34  NC         NC
PIN35  Power      NC
PIN36  Power      NC
PIN37  VOL_A      NC
PIN38  VOL_B      Coin A(16)
PIN39  Speaker    Sperker(10)
PIN40  Speaker    Sperker(L)

学研TV BOYエミュレータをつくる その4

SBC6303ルーズキットを利用してROM(F000-FFFF)をダンプしてみました。カートリッジの3(EXTAL)に直接クリスタルオシレーターをつないで、P20/P21/P22をGNDにつないで、残りの端子はSBC6303にそのまま結線。そのままだとアドレス(F800-FFFF)が被るため、LILBUGの27C256のCEをGNDにつないで異なるアドレス(9800-9FFF)で実行しました。

f:id:tanam:20200718002137p:plain

f:id:tanam:20200718002149p:plain

f:id:tanam:20200718002159p:plain

f:id:tanam:20200718002208p:plain

f:id:tanam:20200718002219p:plain

f:id:tanam:20200718002231p:plain


これからエミュレータで対応していきます。

学研TV BOYエミュレータをつくる その3

Cコンパイラ開発顛末記 小窓次郎 | 組み込み業界独り言からCコンパイラ(C3PO)をダウンロードして、TVボーイでMC6847を表示するプログラムを開発して行きます。

f:id:tanam:20200606161047p:plain

VRAM($1000-$17FF)、ROM($F000-$FFFF)の想定で書いていきます。

hello.c
int memset(p, x, y)
char	*p;
char	x;
int	y;
{
	int i;
	for (i=0; i<y; i++,p++) {
		*p=x;
	}
	return 0;
}

int main()
{
	char *p;
	char *q;
	p="HELLO WORLD";
	q=0x2000;
	*q=0x20;
	memset(0x1000, ' ', 0x800);
	for (q=0x1000; *p != 0; q++, p++) {
		*q = *p;
	}
	return 0;
}

MS-DOSで開発します。

>msdos C3PO.EXE HELLO
>notepad hello.src

hello.srcを編集してhello.txtで保存します。DOS用8ビットCPUクロスアセンブラでSレコード形式を作成します。

>msdos X6801.EXE hello

6801 Cross Assembler Version 3.12
   Copyright(C) Arcpit Co.,LTD.1990. All rights reserved.

Object Filename [HELLO.S] :
Source Listting [NUL.LST] :
Cross Reference [NUL.CRF] :
Symbol Table [NUL.MAP] :
^L                                     2020- 6- 7 6801 Assembler  Page    1
                                                      File:HELLO.TXT

    1                   ;       INCLUDE 630X.LIB
    2                   ;
    3                   ;***** C3PO for 6301/3 version 3.06c MSDOS ***** Nishiy
    4                   ; *** Copyright (c) S.Nishiyama Mar 14 1992
    5                   ;***          1 int memset(p, x, y)
    6                   ;***          2 char    *p;
    7                   ;***          3 char    x;
    8                   ;***          4 int     y;
    9                   ;***          5 {
   10                   ;***          6         int i;
   11                   ;***          7         for (i=0; i<y; i++,p++) {
   12                   ;       CSEG
   13                   ;       GLOBAL  _memset
   14 F000                         ORG      $F000
   15 00FF              STACK      EQU      $FF
   16 F000 8E00FF       START      LDS      #STACK
   17 F003 2035                    BRA      _main
   18 F005              _memset:
   19 F005 3C                      PSHX
   20 F006 30                      TSX
   21 F007 37                      PSHB
   22 F008 36                      PSHA
   23 F009 34                      DES
   24 F00A 34                      DES
   25 F00B 4F                      CLRA
   26 F00C 5F                      CLRB
   27 F00D 30                      TSX
   28 F00E ED00                    STD      0,X
   29 F010              L3:
   30 F010 EC08                    LDD      8,X
   31 F012 A300                    SUBD     0,X
   32 F014 2F19                    BLE      L2
   33                   ;***          8                 *p=x;
   34 F016 4F                      CLRA
   35 F017 E605                    LDAB     5,X
   36 F019 EE02                    LDX      2,X
   37 F01B E700                    STAB     0,X
   38 F01D 30                      TSX
   39                   ;***          9         }
   40                   ;***         10         return 0;
   41 F01E              L4:
   42 F01E EC00                    LDD      0,X
   43 F020 C30001                  ADDD     #1
   44 F023 ED00                    STD      0,X
   45 F025 EC02                    LDD      2,X
   46 F027 C30001                  ADDD     #1
   47 F02A ED02                    STD      2,X
   48 F02C 7EF010                  JMP      L3
   49 F02F              L2:
   50 F02F 4F                      CLRA
   51 F030 5F                      CLRB
   52                   ;***         11 }
   53 F031 7EF034                  JMP      L1
   54 F034              L1:
   55 F034 31                      INS
   56 F035 31                      INS
   57 F036 31                      INS
   58 F037 31                      INS
^L                                     2020- 6- 7 6801 Assembler  Page    2
                                                      File:HELLO.TXT

   59 F038 38                      PULX
   60 F039 39                      RTS
   61                   ;** Local value mapping information
   62                   ;** i   EQU     0
   63                   ;** y   EQU     8
   64                   ;** x   EQU     5
   65                   ;** p   EQU     2
   66                   ;* Function 
   67                   ;* Executive step count 8
   68                   ;* Used stack size ===6 Byte===
^L                                     2020- 6- 7 6801 Assembler  Page    3
                                                      File:HELLO.TXT

   70                   ;***         12
   71                   ;***         13 int main()
   72                   ;***         14 {
   73                   ;***         15         char *p;
   74                   ;***         16         char *q;
   75                   ;***         17         p="HELLO WORLD";
   76                   ;       GLOBAL  _main
   77 F03A              _main:
   78 F03A 3C                      PSHX
   79 F03B 30                      TSX
   80 F03C 34                      DES
   81 F03D 34                      DES
   82 F03E 34                      DES
   83 F03F 34                      DES
   84 F040 3C                      PSHX
   85 F041 30                      TSX
   86 F042 CCF093                  LDD      #S0
   87 F045 ED04                    STD      4,X
   88                   ;***         18         q=0x2000;
   89 F047 CC2000                  LDD      #8192
   90 F04A ED02                    STD      2,X
   91                   ;***         19         *q=0x20;
   92 F04C EE02                    LDX      2,X
   93 F04E C620                    LDAB     #$20
   94 F050 E700                    STAB     0,X
   95 F052 30                      TSX
   96                   ;***         20         memset(0x1000, ' ', 0x800);
   97 F053 CC0800                  LDD      #2048
   98 F056 37                      PSHB
   99 F057 36                      PSHA
  100 F058 CE0020                  LDX      #32
  101 F05B 05                      ASLD
  102 F05C BDF005                  JSR      _memset
  103 F05F 31                      INS
  104 F060 31                      INS
  105 F061 30                      TSX
  106                   ;***         21         for (q=0x1000; *p != 0; q++, p+
  107 F062 CC1000                  LDD      #4096
  108 F065 ED02                    STD      2,X
  109 F067              L7:
  110 F067 EE04                    LDX      4,X
  111 F069 4F                      CLRA
  112 F06A E600                    LDAB     0,X
  113 F06C 30                      TSX
  114 F06D 271B                    BEQ      L6
  115                   ;***         22                 *q = *p;
  116 F06F EE04                    LDX      4,X
  117 F071 E600                    LDAB     0,X
  118 F073 30                      TSX
  119 F074 EE02                    LDX      2,X
  120 F076 E700                    STAB     0,X
  121 F078 30                      TSX
  122                   ;***         23         }
  123                   ;***         24         return 0;
  124 F079              L8:
  125 F079 EC02                    LDD      2,X
  126 F07B C30001                  ADDD     #1
  127 F07E ED02                    STD      2,X
^L                                     2020- 6- 7 6801 Assembler  Page    4
                                                      File:HELLO.TXT

  128 F080 EC04                    LDD      4,X
  129 F082 C30001                  ADDD     #1
  130 F085 ED04                    STD      4,X
  131 F087 7EF067                  JMP      L7
  132 F08A 20FE         L6:        BRA      L6
  133                   ;***         25 }
  134 F08C 7EF08F                  JMP      L5
  135 F08F              L5:
  136 F08F 38                      PULX
  137 F090 35                      TXS
  138 F091 38                      PULX
  139 F092 39                      RTS
  140                   ;** Local value mapping information
  141                   ;** q   EQU     2
  142                   ;** p   EQU     4
  143                   ;* Function 
144 ;* Executive step count 12 145 ;* Used stack size ===14 Byte=== ^L 2020- 6- 7 6801 Assembler Page 5 File:HELLO.TXT 147 ;*** 26 148 F093 S0: 149 F093 48454C4C4F20 FCB 72,69,76,76,79,32,87,79 574F 150 F09B 524C4400 FCB 82,76,68,0 151 ;* Direct page size 0 152 ;* Global segment size 0 153 ;* Character size 12 154 ;* Executive step count 20 155 ;* Error count 0 156 FFFE ORG $FFFE 157 FFFE F000 FDB START 158 0000 END ^L 2020- 6- 7 6801 Assembler Page 6 File:HELLO.TXT SYMBOL TABLE: L1 F034 L2 F02F L3 F010 L4 F01E L5 F08F L6 F08A L7 F067 L8 F079 S0 F093 STACK 00FF START F000 _main F03A _memset F005 ^L 2020- 6- 7 6801 Assembler Page 7 File:HELLO.TXT 0 Error(s) detected. LINES : 158 LABELS : 13 LAST PROGRAM ADDRESS : $FFFD LAST DATA ADDRESS : $0000

SRecord 1.64でhello.sをhello.binに変換します。

>srec_cat hello.S -offset -0xF000 -o hello.bin -binary

学研TV BOYエミュレータをつくる その2

世にも珍しいVCSじゃない方のTV BOYエミュレータです。

www.youtube.com

ソースコード差分は以下になります。

vm.h

// GAKKEN TV BOY
#ifdef _TVBOY
#include "tvboy/tvboy.h"
#endif

tvboy.h

/*
	GAKKEN TV BOY Emulator 'yaTVBOY'

	Author : tanam
	Date   : 2020.06.13

	[ virtual machine ]
*/

#ifndef _TVBOY_H_
#define _TVBOY_H_

#define DEVICE_NAME		"GAKKEN TV BOY"
#define CONFIG_NAME		"tvboy"

// device informations for virtual machine
#define FRAMES_PER_SEC		60
#define LINES_PER_FRAME		262
#define CPU_CLOCKS		3579545 / 4
#define SCREEN_WIDTH		256
#define SCREEN_HEIGHT		192

#define HAS_MC6801
#define MC6847_VRAM_INV		0x40

// device informations for win32
#define USE_CART		1
#define USE_SOUND_VOLUME	2
#define USE_DEBUGGER
#define USE_STATE

#include "../../common.h"
#include "../../fileio.h"
#include "../vm_template.h"

#ifdef USE_SOUND_VOLUME
static const _TCHAR *sound_device_caption[] = {
	_T("PCM"),
};
#endif

class EMU;
class DEVICE;
class EVENT;

class MC6847;
class MC6800;
class PCM1BIT;

class MEMORY;

class VM : public VM_TEMPLATE
{
protected:
//	EMU* emu;
	
	// devices
	EVENT* event;
	
	MC6847* vdp;
	MC6800* cpu;
	PCM1BIT* pcm;

	MEMORY* memory;
	
public:
	// ----------------------------------------
	// initialize
	// ----------------------------------------
	
	VM(EMU* parent_emu);
	~VM();
	
	// ----------------------------------------
	// for emulation class
	// ----------------------------------------
	
	// drive virtual machine
	void reset();
	void run();
	double get_frame_rate()
	{
		return FRAMES_PER_SEC;
	}
	
#ifdef USE_DEBUGGER
	// debugger
	DEVICE *get_cpu(int index);
#endif
	
	// draw screen
	void draw_screen();
	
	// sound generation
	void initialize_sound(int rate, int samples);
	uint16_t* create_sound(int* extra_frames);
	int get_sound_buffer_ptr();
#ifdef USE_SOUND_VOLUME
	void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
#endif
	
	// user interface
	void open_cart(int drv, const _TCHAR* file_path);
	void close_cart(int drv);
	bool is_cart_inserted(int drv);

	// notify key
	void key_down(int code, bool repeat);
	void key_up(int code);

	bool is_frame_skippable();
	
	void update_config();
	bool process_state(FILEIO* state_fio, bool loading);
	
	// ----------------------------------------
	// for each device
	// ----------------------------------------
	
	// devices
	DEVICE* get_device(int id);
//	DEVICE* dummy;
//	DEVICE* first_device;
//	DEVICE* last_device;
};

#endif

tvboy.cpp

/*
	GAKKEN TV BOY Emulator 'yaTVBOY'

	Author : tanam
	Date   : 2020.06.13

	[ virtual machine ]
*/

#include "tvboy.h"
#include "../../emu.h"
#include "../device.h"
#include "../event.h"

#include "../mc6847.h"
#include "../mc6800.h"
#include "../pcm1bit.h"

#ifdef USE_DEBUGGER
#include "../debugger.h"
#endif

#include "memory.h"

// ----------------------------------------------------------------------------
// initialize
// ----------------------------------------------------------------------------

VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
{
	// create devices
	first_device = last_device = NULL;
	dummy = new DEVICE(this, emu);	// must be 1st device
	event = new EVENT(this, emu);	// must be 2nd device
	
	vdp = new MC6847(this, emu);
	cpu = new MC6800(this, emu);
	
	memory = new MEMORY(this, emu);
	memory->set_context_cpu(cpu);
	memory->set_context_vdp(vdp);

	pcm = new PCM1BIT(this, emu);

	cpu->set_context_port1(pcm, SIG_PCM1BIT_SIGNAL, 0x20, 0);
	cpu->set_context_port1(pcm, SIG_PCM1BIT_SIGNAL, 0x40, 0);
	cpu->set_context_port1(memory, SIG_MEMORY_PORT_1, 0x0F, 0);

	// set contexts
	event->set_context_cpu(cpu);
	event->set_context_sound(pcm);
	
	vdp->set_vram_ptr(memory->get_vram(), 0x800);
	vdp->set_context_cpu(cpu);
		
	// cpu bus
	cpu->set_context_mem(memory);
#ifdef USE_DEBUGGER
	cpu->set_context_debugger(new DEBUGGER(this, emu));
#endif
	pcm = new PCM1BIT(this, emu);

	// initialize all devices
	for(DEVICE* device = first_device; device; device = device->next_device) {
		device->initialize();
	}
}

VM::~VM()
{
	// delete all devices
	for(DEVICE* device = first_device; device;) {
		DEVICE *next_device = device->next_device;
		device->release();
		delete device;
		device = next_device;
	}
}

DEVICE* VM::get_device(int id)
{
	for(DEVICE* device = first_device; device; device = device->next_device) {
		if(device->this_device_id == id) {
			return device;
		}
	}
	return NULL;
}

// ----------------------------------------------------------------------------
// drive virtual machine
// ----------------------------------------------------------------------------

void VM::reset()
{
	// reset all devices
	for(DEVICE* device = first_device; device; device = device->next_device) {
		device->reset();
	}
}

void VM::run()
{
	event->drive();
}

// ----------------------------------------------------------------------------
// debugger
// ----------------------------------------------------------------------------

#ifdef USE_DEBUGGER
DEVICE *VM::get_cpu(int index)
{
	if(index == 0) {
		return cpu;
	}
	return NULL;
}
#endif

// ----------------------------------------------------------------------------
// draw screen
// ----------------------------------------------------------------------------

void VM::draw_screen()
{
	vdp->draw_screen();
}

// ----------------------------------------------------------------------------
// notify key
// ----------------------------------------------------------------------------

void VM::key_down(int code, bool repeat)
{
	memory->key_down(code);
}

void VM::key_up(int code)
{
	memory->key_up(code);
}

// ----------------------------------------------------------------------------
// soud manager
// ----------------------------------------------------------------------------

void VM::initialize_sound(int rate, int samples)
{
	// init sound manager
	event->initialize_sound(rate, samples);
	pcm->initialize_sound(rate, 8000);
}

uint16_t* VM::create_sound(int* extra_frames)
{
	return event->create_sound(extra_frames);
}

int VM::get_sound_buffer_ptr()
{
	return event->get_sound_buffer_ptr();
}

#ifdef USE_SOUND_VOLUME
void VM::set_sound_device_volume(int ch, int decibel_l, int decibel_r)
{
	if(ch == 0) {
		pcm->set_volume(0, decibel_l, decibel_r);
	}
}
#endif

// ----------------------------------------------------------------------------
// user interface
// ----------------------------------------------------------------------------

void VM::open_cart(int drv, const _TCHAR* file_path)
{
	if(drv == 0) {
		memory->open_cart(file_path);
		reset();
	}
}

void VM::close_cart(int drv)
{
	if(drv == 0) {
		memory->close_cart();
		reset();
	}
}

bool VM::is_cart_inserted(int drv)
{
	if(drv == 0) {
		return memory->is_cart_inserted();
	} else {
		return false;
	}
}

bool VM::is_frame_skippable()
{
	return event->is_frame_skippable();
}

void VM::update_config()
{
	for(DEVICE* device = first_device; device; device = device->next_device) {
		device->update_config();
	}
}

#define STATE_VERSION	3

bool VM::process_state(FILEIO* state_fio, bool loading)
{
	if(!state_fio->StateCheckUint32(STATE_VERSION)) {
		return false;
	}
	for(DEVICE* device = first_device; device; device = device->next_device) {
		const char *name = typeid(*device).name() + 6; // skip "class "
		int len = strlen(name);
		
		if(!state_fio->StateCheckInt32(len)) {
			return false;
		}
		if(!state_fio->StateCheckBuffer(name, len, 1)) {
			return false;
		}
		if(!device->process_state(state_fio, loading)) {
			return false;
		}
	}
	return true;
}

memory.h

/*
	GAKKEN TV BOY Emulator 'yaTVBOY'

	Author : tanam
	Date   : 2020.06.13

	[ memory ]
*/

#ifndef _MEMORY_H_
#define _MEMORY_H_

#include "../vm.h"
#include "../../emu.h"
#include "../device.h"
#include "../mc6800.h"
#include "../mc6847.h"

#define SIG_MEMORY_PORT_1	0

class MEMORY : public DEVICE
{
private:
	MC6800 *d_cpu;
	MC6847 *d_vdp;

	uint8_t rom[0x1000];
	uint8_t ram[0x1000];
	uint8_t vram[0x1000];
	
	uint8_t wdmy[0x400];
	uint8_t rdmy[0x400];
	uint8_t* wbank[64];
	uint8_t* rbank[64];

	int shot1;
	int shot2;
	int up;
	int down;
	int left;
	int right;
	bool event;
	bool inserted;
	
public:
	MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
	{
		set_device_name(_T("Memory Bus"));
	}
	~MEMORY() {}
	
	// common functions
	void initialize();
	void reset();
	void write_data8(uint32_t addr, uint32_t data);
	uint32_t read_data8(uint32_t addr);
	void write_signal(int id, uint32_t data, uint32_t mask);
	void event_callback(int event_id, int err);
	bool process_state(FILEIO* state_fio, bool loading);
	// unique functions
	void key_down(int code);
	void key_up(int code);
	void set_context_cpu(MC6800* device)
	{
		d_cpu = device;
	}
	void set_context_vdp(MC6847* device)
	{
		d_vdp = device;
	}
	void open_cart(const _TCHAR* file_path);
	void close_cart();
	bool is_cart_inserted()
	{
		return inserted;
	}
	uint8_t* get_vram()
	{
		return vram;
	}
};

#endif

memory.cpp

/*
	GAKKEN TV BOY Emulator 'yaTVBOY'

	Author : tanam
	Date   : 2020.06.13

	[ memory ]
*/

#include "memory.h"

#define SET_BANK(s, e, w, r) { \
	int sb = (s) >> 10, eb = (e) >> 10; \
	for(int i = sb; i <= eb; i++) { \
		if((w) == wdmy) { \
			wbank[i] = wdmy; \
		} else { \
			wbank[i] = (w) + 0x400 * (i - sb); \
		} \
		if((r) == rdmy) { \
			rbank[i] = rdmy; \
		} else { \
			rbank[i] = (r) + 0x400 * (i - sb); \
		} \
	} \
}

void MEMORY::initialize()
{
	memset(rom, 0xff, sizeof(rom));
	memset(rdmy, 0xff, sizeof(rdmy));	
	// set memory map
	SET_BANK(0x0000, 0x0fff, ram,  ram );
	SET_BANK(0x1000, 0x1fff, vram, vram);
	SET_BANK(0x2000, 0xefff, wdmy, rdmy);
	SET_BANK(0xf000, 0xffff, wdmy, rom );
	// register event
	register_event_by_clock(this, 0, 256, true, NULL);
	event = false;
	inserted = false;
}

void MEMORY::reset()
{
	memset(ram, 0, sizeof(ram));
	for (int i=0; i<sizeof(vram); i++) {
		vram[i]=rand() % 256;
	}
	d_vdp->write_signal(SIG_MC6847_AS,     0x00, 0x08);
	d_vdp->write_signal(SIG_MC6847_AG,     0x10, 0x10);
	d_vdp->write_signal(SIG_MC6847_CSS,    0x20, 0x20);
	d_vdp->write_signal(SIG_MC6847_GM,     0x00, 0x02);
	d_vdp->write_signal(SIG_MC6847_GM,     0x01, 0x01);
	d_vdp->write_signal(SIG_MC6847_INTEXT, 0x00, 0x04);
	shot1 = shot2 = up = down = left = right = 0;
}

void MEMORY::write_data8(uint32_t addr, uint32_t data)
{
	addr &= 0xffff;
	if(addr >= 0x80 && addr < 0x100) {
		d_cpu->ram[addr-0x80]=data;
	}
    if(addr == 0x2000) {
		d_vdp->write_signal(SIG_MC6847_AS,     data, 0x08);
		d_vdp->write_signal(SIG_MC6847_AG,     data, 0x10);
		d_vdp->write_signal(SIG_MC6847_CSS,    data, 0x20);
		d_vdp->write_signal(SIG_MC6847_GM,     data << 1, 0x02);
		d_vdp->write_signal(SIG_MC6847_GM,     data >> 1, 0x01);
		d_vdp->write_signal(SIG_MC6847_INTEXT, data, 0x04);
		return;
	}
	wbank[addr >> 10][addr & 0x3ff] = data;
}

uint32_t MEMORY::read_data8(uint32_t addr)
{
	addr &= 0xffff;
	if(addr >= 0x80 && addr < 0x100) {
		return d_cpu->ram[addr-0x80];
	}
	return rbank[addr >> 10][addr & 0x3ff];
}

void MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
{
	d_cpu->write_signal(SIG_MC6801_PORT_2, 0x1E, 0x1E);
	if (shot2==1 && d_cpu->port[0].wreg==1) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x04);
	}
	if (down==1 && d_cpu->port[0].wreg==2) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x04);
	}
	if (shot1==1 && d_cpu->port[0].wreg==1) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x02);
	}
	if (up==1 && d_cpu->port[0].wreg==2) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x02);
	}
	if (left==1 && d_cpu->port[0].wreg==2) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x08);
	}
	if (right==1 && d_cpu->port[0].wreg==2) {
		d_cpu->write_signal(SIG_MC6801_PORT_2, 0x00, 0x10);
	}
}

void MEMORY::event_callback(int event_id, int err)
{
	if (event)	{
		d_cpu->write_signal(SIG_CPU_IRQ, 1, 1);
		event = false;
	} else {
		d_cpu->write_signal(SIG_CPU_IRQ, 0, 1);
		event = true;
	}
}

void MEMORY::key_down(int code)
{
	if (code==0x20) {
		shot1 =1;
	}
	if (code==0x11) {
		shot2 =1;
	}
	if (code==0x25) {
		left =1;
	}
	if (code==0x26) {
		up =1;
	}
	if (code==0x27) {
		right =1;
	}
	if (code==0x28) {
		down =1;
	}
}

void MEMORY::key_up(int code)
{
	if (code==0x20) {
		shot1 =0;
	}
	if (code==0x11) {
		shot2 =0;
	}
	if (code==0x25) {
		left =0;
	}
	if (code==0x26) {
		up =0;
	}
	if (code==0x27) {
		right =0;
	}
	if (code==0x28) {
		down =0;
	}
}

void MEMORY::open_cart(const _TCHAR* file_path)
{
	FILEIO* fio = new FILEIO();
	if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
		fio->Fread(rom, sizeof(rom), 1);
		fio->Fclose();
		inserted = true;
	}
	delete fio;
}

void MEMORY::close_cart()
{
	memset(rom, 0xff, sizeof(rom));
	inserted = false;
}

#define STATE_VERSION	1

bool MEMORY::process_state(FILEIO* state_fio, bool loading)
{
	if(!state_fio->StateCheckUint32(STATE_VERSION)) {
		return false;
	}
	if(!state_fio->StateCheckInt32(this_device_id)) {
		return false;
	}
	state_fio->StateArray(ram, sizeof(ram), 1);
	state_fio->StateArray(vram, sizeof(vram), 1);
	return true;
}

mc6800.h

/*
	Skelton for retropc emulator

	Origin : MAME 0.142
	Author : Takeda.Toshiya
	Date   : 2011.04.23-

	[ MC6800 ]
*/

#ifndef _MC6800_H_ 
#define _MC6800_H_

#include "vm.h"
#include "../emu.h"
#include "device.h"

#if defined(HAS_MC6801) || defined(HAS_HD6301)
#define SIG_MC6801_PORT_1	0
#define SIG_MC6801_PORT_2	1
#define SIG_MC6801_PORT_3	2
#define SIG_MC6801_PORT_4	3
#define SIG_MC6801_PORT_3_SC1	4
#define SIG_MC6801_PORT_3_SC2	5
#define SIG_MC6801_SIO_RECV	6

class FIFO;
#endif

#ifdef USE_DEBUGGER
class DEBUGGER;
#endif

class MC6800 : public DEVICE
{
private:
	DEVICE *d_mem;
#ifdef USE_DEBUGGER
	DEBUGGER *d_debugger;
	DEVICE *d_mem_stored;
#endif
	
	pair32_t pc;
	uint16_t prevpc;
	pair32_t sp;
	pair32_t ix;
	pair32_t acc_d;
	pair32_t ea;
	
	uint8_t cc;
	int wai_state;
	int int_state;
	
#ifdef USE_DEBUGGER
	uint64_t total_icount;
	uint64_t prev_total_icount;
#endif
	int icount;
	bool one_more_insn;
	
	uint32_t RM(uint32_t Addr);
	void WM(uint32_t Addr, uint32_t Value);
	uint32_t RM16(uint32_t Addr);
	void WM16(uint32_t Addr, pair32_t *p);
	
#if defined(HAS_MC6801) || defined(HAS_HD6301)
	// data
//	struct {
//		uint8_t wreg;
//		uint8_t rreg;
//		uint8_t ddr;
//		uint8_t latched_data;
//		bool latched;
		// output signals
//		outputs_t outputs;
//		bool first_write;
//	} port[4];
	
	uint8_t p3csr;
	bool p3csr_is3_flag_read;
	bool sc1_state;
	bool sc2_state;
	
	// timer
	pair32_t counter;
	pair32_t output_compare;
	pair32_t timer_over;
	uint8_t tcsr;
	uint8_t pending_tcsr;
	uint16_t input_capture;
#ifdef HAS_HD6301
	uint16_t latch09;
#endif
	uint32_t timer_next;
	
	// serial i/o
	outputs_t outputs_sio;
	FIFO *recv_buffer;
	uint8_t trcsr, rdr, tdr;
	bool trcsr_read_tdre, trcsr_read_orfe, trcsr_read_rdrf;
	uint8_t rmcr;
	int sio_counter;
	
	// memory controller
	uint8_t ram_ctrl;
//	uint8_t ram[128];
	
	uint32_t mc6801_io_r(uint32_t offset);
	void mc6801_io_w(uint32_t offset, uint32_t data);
#endif
	void increment_counter(int amount);
	
	void run_one_opecode();
	void enter_interrupt(uint16_t irq_vector);
	void insn(uint8_t code);
	
	void aba();
	void abx();
	void adca_di();
	void adca_ex();
	void adca_im();
	void adca_ix();
	void adcb_di();
	void adcb_ex();
	void adcb_im();
	void adcb_ix();
	void adda_di();
	void adda_ex();
	void adda_im();
	void adda_ix();
	void addb_di();
	void addb_ex();
	void addb_im();
	void addb_ix();
	void addd_di();
	void addd_ex();
	void addd_im();
	void addd_ix();
	void adx_ex();
	void adx_im();
	void aim_di();
	void aim_ix();
	void nim_ix();
	void anda_di();
	void anda_ex();
	void anda_im();
	void anda_ix();
	void andb_di();
	void andb_ex();
	void andb_im();
	void andb_ix();
	void asl_ex();
	void asl_ix();
	void asla();
	void aslb();
	void asld();
	void asr_ex();
	void asr_ix();
	void asra();
	void asrb();
	void bcc();
	void bcs();
	void beq();
	void bge();
	void bgt();
	void bhi();
	void bita_di();
	void bita_ex();
	void bita_im();
	void bita_ix();
	void bitb_di();
	void bitb_ex();
	void bitb_im();
	void bitb_ix();
	void ble();
	void bls();
	void blt();
	void bmi();
	void bne();
	void bpl();
	void bra();
	void brn();
	void bsr();
	void bvc();
	void bvs();
	void cba();
	void clc();
	void cli();
	void clr_ex();
	void clr_ix();
	void clra();
	void clrb();
	void clv();
	void cmpa_di();
	void cmpa_ex();
	void cmpa_im();
	void cmpa_ix();
	void cmpb_di();
	void cmpb_ex();
	void cmpb_im();
	void cmpb_ix();
	void cmpx_di();
	void cmpx_ex();
	void cmpx_im();
	void cmpx_ix();
	void com_ex();
	void com_ix();
	void coma();
	void comb();
	void daa();
	void dec_ex();
	void dec_ix();
	void deca();
	void decb();
	void des();
	void dex();
	void eim_di();
	void eim_ix();
	void xim_ix();
	void eora_di();
	void eora_ex();
	void eora_im();
	void eora_ix();
	void eorb_di();
	void eorb_ex();
	void eorb_im();
	void eorb_ix();
	void illegal();
	void inc_ex();
	void inc_ix();
	void inca();
	void incb();
	void ins();
	void inx();
	void jmp_ex();
	void jmp_ix();
	void jsr_di();
	void jsr_ex();
	void jsr_ix();
	void lda_di();
	void lda_ex();
	void lda_im();
	void lda_ix();
	void ldb_di();
	void ldb_ex();
	void ldb_im();
	void ldb_ix();
	void ldd_di();
	void ldd_ex();
	void ldd_im();
	void ldd_ix();
	void lds_di();
	void lds_ex();
	void lds_im();
	void lds_ix();
	void ldx_di();
	void ldx_ex();
	void ldx_im();
	void ldx_ix();
	void lsr_ex();
	void lsr_ix();
	void lsra();
	void lsrb();
	void lsrd();
	void mul();
	void neg_ex();
	void neg_ix();
	void nega();
	void negb();
	void nop();
	void oim_di();
	void oim_ix();
	void oim_ix_mb8861();
	void ora_di();
	void ora_ex();
	void ora_im();
	void ora_ix();
	void orb_di();
	void orb_ex();
	void orb_im();
	void orb_ix();
	void psha();
	void pshb();
	void pshx();
	void pula();
	void pulb();
	void pulx();
	void rol_ex();
	void rol_ix();
	void rola();
	void rolb();
	void ror_ex();
	void ror_ix();
	void rora();
	void rorb();
	void rti();
	void rts();
	void sba();
	void sbca_di();
	void sbca_ex();
	void sbca_im();
	void sbca_ix();
	void sbcb_di();
	void sbcb_ex();
	void sbcb_im();
	void sbcb_ix();
	void sec();
	void sei();
	void sev();
	void slp();
	void sta_di();
	void sta_ex();
	void sta_im();
	void sta_ix();
	void stb_di();
	void stb_ex();
	void stb_im();
	void stb_ix();
	void std_di();
	void std_ex();
	void std_im();
	void std_ix();
	void sts_di();
	void sts_ex();
	void sts_im();
	void sts_ix();
	void stx_di();
	void stx_ex();
	void stx_im();
	void stx_ix();
	void suba_di();
	void suba_ex();
	void suba_im();
	void suba_ix();
	void subb_di();
	void subb_ex();
	void subb_im();
	void subb_ix();
	void subd_di();
	void subd_ex();
	void subd_im();
	void subd_ix();
	void swi();
	void tab();
	void tap();
	void tba();
	void tim_di();
	void tim_ix();
	void tmm_ix();
	void tpa();
	void tst_ex();
	void tst_ix();
	void tsta();
	void tstb();
	void tsx();
	void txs();
	void undoc1();
	void undoc2();
	void wai();
	void xgdx();
	void cpx_di();
	void cpx_ex();
	void cpx_im();
	void cpx_ix();
	
public:
	MC6800(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
	{
#ifdef USE_DEBUGGER
		total_icount = prev_total_icount = 0;
#endif
#if defined(HAS_MC6801) || defined(HAS_HD6301)
		for(int i = 0; i < 4; i++) {
			initialize_output_signals(&port[i].outputs);
			port[i].wreg = port[i].rreg = 0;//0xff;
		}
		initialize_output_signals(&outputs_sio);
#endif
#if defined(HAS_MC6801)
		set_device_name(_T("MC6801 MPU"));
#elif defined(HAS_HD6301)
		set_device_name(_T("HD6301 MPU"));
#else
		set_device_name(_T("MC6800 MPU"));
#endif
	}
	~MC6800() {}
	
	// common functions
	uint8_t ram[128];
	struct {
		uint8_t wreg;
		uint8_t rreg;
		uint8_t ddr;
		uint8_t latched_data;
		bool latched;
		outputs_t outputs;
		bool first_write;
	} port[4];

	void initialize();
#if defined(HAS_MC6801) || defined(HAS_HD6301)
	void release();
#endif
	void reset();
	int run(int clock);
	void write_signal(int id, uint32_t data, uint32_t mask);
	uint32_t get_pc()
	{
		return prevpc;
	}
	uint32_t get_next_pc()
	{
		return pc.w.l;
	}
#ifdef USE_DEBUGGER
	bool is_cpu()
	{
		return true;
	}
	bool is_debugger_available()
	{
		return true;
	}
	void *get_debugger()
	{
		return d_debugger;
	}
	uint32_t get_debug_prog_addr_mask()
	{
		return 0xffff;
	}
	uint32_t get_debug_data_addr_mask()
	{
		return 0xffff;
	}
	void write_debug_data8(uint32_t addr, uint32_t data);
	uint32_t read_debug_data8(uint32_t addr);
	// implement 16bit/32bit functions because this cpu is big endian
	void write_debug_data16(uint32_t addr, uint32_t data);
	uint32_t read_debug_data16(uint32_t addr);
	void write_debug_data32(uint32_t addr, uint32_t data);
	uint32_t read_debug_data32(uint32_t addr);
	bool write_debug_reg(const _TCHAR *reg, uint32_t data);
	bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
	int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
#endif
	bool process_state(FILEIO* state_fio, bool loading);
	
	// unique functions
	void set_context_mem(DEVICE* device)
	{
		d_mem = device;
	}
#ifdef USE_DEBUGGER
	void set_context_debugger(DEBUGGER* device)
	{
		d_debugger = device;
	}
#endif
#if defined(HAS_MC6801) || defined(HAS_HD6301)
	void set_context_port1(DEVICE* device, int id, uint32_t mask, int shift)
	{
		register_output_signal(&port[0].outputs, device, id, mask, shift);
	}
	void set_context_port2(DEVICE* device, int id, uint32_t mask, int shift)
	{
		register_output_signal(&port[1].outputs, device, id, mask, shift);
	}
	void set_context_port3(DEVICE* device, int id, uint32_t mask, int shift)
	{
		register_output_signal(&port[2].outputs, device, id, mask, shift);
	}
	void set_context_port4(DEVICE* device, int id, uint32_t mask, int shift)
	{
		register_output_signal(&port[2].outputs, device, id, mask, shift);
	}
	void set_context_sio(DEVICE* device, int id)
	{
		register_output_signal(&outputs_sio, device, id, 0xff);
	}
#endif
};

#endif

SBC6303用にMC6847アダプタをつくる

SBC6303にMC6847(1000-17FF/4000-57FF)をつないでビデオ出力したい。 https://vintagechips.wordpress.com/2018/04/26/sbc6303%E3%83%AB%E3%83%BC%E3%82%BA%E3%82%AD%E3%83%83%E3%83%88/

Address  A15 A14 A13 A12 A11| /CS /CE O14 O13 O12 O11 RAM
>0000    0   0   0   0   0  |  1  1   -   -   -   -
>0800    0   0   0   0   1  |  1  1   -   -   -   -
>1000    0   0   0   1   0  |  1  0   0   0   0   0  >00000
>1800    0   0   0   1   1  |  1  0   0   0   0   1  >00800
>2000    0   0   1   0   0  |  0  1   -   -   -   -
>2800    0   0   1   0   1  |  1  1   -   -   -   -
>3000    0   0   1   1   0  |  1  1   -   -   -   -
>3800    0   0   1   1   1  |  1  1   -   -   -   -
>4000    0   1   0   0   0  |  1  0   0   0   0   0  >00000
>4800    0   1   0   0   1  |  1  0   0   0   0   1  >00800
>5000    0   1   0   1   0  |  1  0   0   0   1   0  >01000
>5800    0   1   0   1   1  |  1  0   0   0   1   1  >01800
>6000    0   1   1   0   0  |  1  1   -   -   -   -
>6800    0   1   1   0   1  |  1  1   -   -   -   -
>7000    0   1   1   1   0  |  1  1   -   -   -   -
>7800    0   1   1   1   1  |  1  1   -   -   -   -
>8000    1   0   0   0   0  |  1  1   -   -   -   -
>8800    1   0   0   0   1  |  1  1   -   -   -   -
>9000    1   0   0   1   0  |  1  1   -   -   -   -
>9800    1   0   0   1   1  |  1  1   -   -   -   -
>A000    1   0   1   0   0  |  1  1   -   -   -   -
>A800    1   0   1   0   1  |  1  1   -   -   -   -
>B000    1   0   1   1   0  |  1  1   -   -   -   -
>B800    1   0   1   1   1  |  1  1   -   -   -   -
>C000    1   1   0   0   0  |  1  1   -   -   -   -
>C800    1   1   0   0   1  |  1  1   -   -   -   -
>D000    1   1   0   1   0  |  1  1   -   -   -   -
>D800    1   1   0   1   1  |  1  1   -   -   -   -
>E000    1   1   1   0   0  |  1  1   -   -   -   -
>E800    1   1   1   0   1  |  1  1   -   -   -   -
>F000    1   1   1   1   0  |  1  1   -   -   -   -
>F800    1   1   1   1   1  |  1  1   -   -   -   -
;
; TITLE SBC6303 VDG ADAPTER
; PATTERN A REVISION 1.1
; AUTHOR TANAM1972
; COMPANY PARALLEL COMPUTER INC
; DATE 6/13/20

CHIP TVBOY GAL22V10D

NC NC NC NC A8 A9 A10 A11 A12 A13 A14 GND
A15 NC NC NC I11 I12 I13 I14 CE CS NC VCC

EQUATIONS

I11 = A11

I12 = A14 * A12

I13 = GND

I14 = GND

CE = A15 + A13 + /A14 * /A12

CS = A15 + A14 + /A13 + A12 + A11

回路図

       SBC6303 24HC245        HM62256 MC6847 74LS174  GAL22V10D
PIN 1  /RD     DIR1
PIN 2  /WR                     /WE
PIN 3  D0      D0      IO0     IO0    IO0     D0
PIN 4 D1      D1      IO1     IO1    IO1     D1
PIN 5 D2      D2      IO2     IO2    IO2     D2
PIN 6 D3      D3      IO3     IO3    IO3     D3
PIN 7 D4      D4      IO4     IO4    IO4     D4
PIN 8  D5      D5      IO5     IO5    IO5     D5
PIN 9  D6      D6      IO6     IO6    IO6/INV
PIN10  D7      D7      IO7     IO7    IO7/AS
PIN11  A0      A0      O0      O0     O0
PIN12  A1      A1      O1      O1     O1
PIN13  A2      A2      O2      O2     O2                                
PIN14  A3      A3      O3      O3     O3
PIN15  A4      A4      O4      O4     O4
PIN16  A5      A5      O5      O5     O5
PIN17  A6      A6      O6      O6     O6
PIN18  A7      A7      O7      O7     O7
PIN19 A8      A8      O8      O8     O8
PIN20 A9      A9      O9      O9     O9
PIN21 A10     A10     O10     O10    O10
PIN22 A11     I11     O11     O11    O11            A11     I11
PIN23 A12     I12     O12     O12    O12            A12     I12
PIN24  A13     A13     O13     O13                   A13     I13
PIN25  A14     A14     O14     O14                   A14     I14
PIN26  A15                                           A15
PIN27  RW
PIN28  E
PIN29  /IRQ                          /HS
PIN30  /RES
PIN31  P10
PIN32  P11
PIN33  P12
PIN34  P13
PIN35  P14
PIN36  P15
PIN37  P16
PIN38  P17
PIN39  VCC    DIR23           VCC    VCC     VCC    VCC
PIN40  GND              GND/CE/OE    GND  GND/MR    GND
                                     GM2     Q0
                                     AG      Q1
                                     CSS     Q2
                                     GM1     Q3
                                     GM0     Q4
                                 INT/EXT     Q5
              G123                   /MS                    CE
                                             CP             CS
                                     CHB
                                     B
                                     A
                                     Y
                                    /FS
                                    /RP

学研TVボーイ RAM+ROMカートリッジをつくる その2

学研TVボーイを分解して部品を調べました。

  • HD6801V0P(CPU)
  • MC6847(VDG)
  • MC1372(RF)
  • HM6116(RAM)
  • 74LS373(LATCH)
  • 74LS367(BUF)
  • 74LS245(BUF)
  • 74LS174(FF)
  • 74LS138(ADDR)
  • 74LS00(NAND)

SBC6303をモード0(P20/P21/P22=L/L/L)で動かして、LILBUGを外部ROM(E800-EFFF)で実行して、HD6801V0Pの内部ROM(F000-FFFF)を見えるようにしてみました。

https://vintagechips.wordpress.com/2018/04/26/sbc6303%E3%83%AB%E3%83%BC%E3%82%BA%E3%82%AD%E3%83%83%E3%83%88/

D E800 FFFF

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
E800 7E EC 7E 7E EC 79 7E E8 73 7E E8 8A 7E EB 07 7E  ................
E810 EB 0E 7E EA DB 7E EA D8 7E EB 12 7E EA DD 7E E8  ....[..X.....]..
E820 F6 7E ED 5F 04 42 EB 98 04 43 EC 0F 04 44 ED 86  ..._.B...C...D..
E830 04 47 EC 11 04 4C EE 9A 04 4D EA 5B 04 4F EA B4  .G...L...M.[.O.4
E840 04 50 EE 72 04 52 EB 1E 05 48 49 E8 E9 05 48 59  .P...R...HI...HY
E850 E8 F1 04 54 EC 46 04 56 EE AB FE E8 C8 E8 91 E8  ...T.F.V.+..H...
E860 D1 E8 D2 E8 A8 E8 D1 E8 D1 ED EC E8 D1 EE AF EE  Q.R.(.Q.Q...Q./.
E870 C3 EE BA 37 C6 02 8D 67 24 FA 84 7F 27 F6 81 7F  C.:7F...$...'...
E880 27 F2 D6 F6 26 02 8D 02 33 39 37 C6 08 8D 50 33  '.V.&...397F..P3
E890 39 96 11 48 25 03 48 24 03 96 12 0D 39 37 D6 11  9..H%.H$....97V.
E8A0 C5 20 27 FA 97 13 33 39 8D F3 D6 F6 26 02 D6 D5  E '...39..V.&.VU
E8B0 81 0D 27 08 81 10 27 EF C4 03 20 02 54 54 5A 2B  ..'...'.D. .TTZ+
E8C0 E6 36 4F 8D D8 32 20 F6 CC 00 05 8D 1F 86 0A 97  .6O.X2 .L.......
E8D0 11 39 CE EF 86 BD EB 07 CE 41 1B 09 26 FD 39 3C  .9N..=..NA..&.9<
E8E0 DE FC 3A EE 00 AD 00 38 39 CC 4F 06 97 D5 D7 10  ^.:..-.89LO..UW.
E8F0 39 CC 00 05 20 F6 8E 00 CF CE E8 5B DF FC CE EF  9L.. ...ON.[_.N.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
E900 C8 DF FE CE E8 24 DF FA CE E0 00 DF F8 8E 00 BB  H_.N.$_.N`._...;
E910 9F E4 8E 00 CF CE 00 E6 6F 00 08 8C 00 F8 26 F8  ....ON........&.
E920 5F 8D BC C6 06 8D B8 CE EF 90 BD EB 0E 86 D0 97  _.<F..8N..=...P.
E930 E3 BD EC EA 27 0A 8C E8 03 26 17 7C 00 08 20 12  .=..'....&.... .
E940 DE F8 6F 02 6F 03 CC 01 22 A7 01 E7 00 CC A6 00  ^.....L."'...L&.
E950 ED 00 8E 00 CF 7F 00 F6 BD EB 12 86 21 BD E8 09  ....O...=...!=..
E960 BD EA 09 2B ED 27 0A BD E9 FC 2B E6 CE EA 5F 20  =..+.'.=..+.N._ 
E970 74 CE EC 41 81 2E 27 6D CE EA A8 81 2F 27 66 9F  .N.A..'.N.(./'..
E980 D1 7F 00 D0 8D 65 27 13 7C 00 D0 36 30 8C 00 80  Q..P..'...P60...
E990 27 2B BD EA 09 2B 2C 26 24 20 E9 97 D6 DE FA DF  '+=..+,&$ ..V^._
E9A0 D3 DE D3 3C E6 00 3A DF D3 C0 03 D1 D0 27 16 38  S^S<..:_S@.QP'.8
E9B0 C1 FC 26 05 CE E8 24 DF D3 C1 FB 26 E4 CE EF 8E  A.&.N.$_SA.&.N..
E9C0 BD EB 0E 20 8D DE D1 DF D9 38 08 A6 00 3C DE D9  =.. .^Q_Y8.&.<^Y
E9D0 A1 00 27 03 38 20 CA 09 DF D9 5A 26 EC 38 08 9E  !.'.8 J._YZ&.8..
E9E0 D1 EE 00 96 D6 AD 00 2B D4 20 D8 81 2C 27 0A 81  Q...V-.+T X.,'..
E9F0 20 27 06 81 0D 27 02 81 2D 39 8D 11 2F 0A C1 04   '...'..-9../.A.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
EA00 2F 3A 7D 00 DC 27 35 53 39 C6 F0 20 01 5F CE 00  /:..\'5S9F. ._N.
EA10 00 DF D9 DF DB CE 00 D9 8D 25 2B 17 C6 04 68 01  ._Y_[N.Y.%+.F...
EA20 69 00 24 03 7C 00 DC 5A 26 F4 AA 01 A7 01 7C 00  ..$...\Z&.*.'...
EA30 DB 20 E5 81 18 26 03 C6 FF 39 DE D9 D6 DB 39 BD  [ ...&.F.9^YV[9=
EA40 E8 06 81 30 2B F1 81 39 2F 0D 5D 2B EA 81 41 2B  ...0+..9/.]+..A+
EA50 E6 81 46 2E E2 80 07 84 0F 5F 39 8D 9D 2F 52 DE  ..F......_9../R^
EA60 D9 81 2F 27 04 81 20 26 48 8D 76 DF D7 3C 5F 8D  Y./'.. &H.._W<_.
EA70 9C 38 2B 3F 27 07 D6 DA BD EA F7 2B 36 81 0D 27  .8+?'.VZ=..+6..'
EA80 32 81 2C 26 03 08 20 E3 81 20 26 03 08 20 DA 81  2.,&.. .. &.. Z.
EA90 0A 26 06 08 BD EB 16 20 0D 81 5E 26 03 09 20 04  .&..=.. ..^&.. .
EAA0 81 2F 26 0D 8D 6C DF D7 CE 00 D7 8D 2B DE D7 20  ./&..._WN.W.+^W 
EAB0 B8 86 FF 39 BD EE 57 DC D9 83 00 01 93 D7 C1 7F  8..9=.W\Y....WA.
EAC0 22 05 4D 27 06 20 EA 81 FF 26 E6 D7 DB 8D 43 CE  ".M'. ...&.W[.CN
EAD0 00 DB 8D 07 8D 3C 20 D0 8D 07 08 8D 04 86 20 20  .[...< P......  
EAE0 3A A6 00 36 8D 03 32 20 04 44 44 44 44 84 0F 8B  :&.6..2 .DDDD...
EAF0 90 19 89 40 19 20 24 E7 00 E1 00 27 B6 CE EF 9B  ...@. $....'6N..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
EB00 8D 0C 20 AD 8D 15 08 A6 00 81 04 26 F7 39 8D 02  .. -...&...&.9..
EB10 20 F5 86 0A 8D 05 86 0D 8D 01 4F 7E E8 09 8D 66   .........O.....
EB20 8D F0 CE 00 DD 5F 3C CE EF B5 3A A6 00 8D 62 A6  ..N.]_<N.5:&...&
EB30 01 38 7D 00 D0 27 0B 4D 27 03 8D A5 08 8D 9C 08  .8..P'.M'..%....
EB40 20 04 37 8D 08 33 CB 02 C1 0C 26 DA 39 36 3C BD   .7..3K.A.&Z96<=
EB50 EA 0D 38 33 2B 1B 27 1D BD E9 EB 26 14 5D 27 09  ..83+.'.=..&.]'.
EB60 36 DC D9 ED 00 32 08 20 04 D6 DA E7 00 81 0D 26  6\Y..2. .VZ....&
EB70 13 38 33 4F 39 81 20 26 F8 5D 26 05 BD EA DB 20  .83O9. &.]&.=.[ 
EB80 03 BD EA D8 08 39 8D 8A 7C 00 D0 8D 95 7F 00 D0  .=.X.9....P....P
EB90 39 8D 02 86 2D 7E E8 09 81 0D 27 2D 81 2D 27 4C  9...-.....'-.-'L
EBA0 BD E9 FA 2B 44 26 06 81 2D 27 41 20 3C 81 0D 26  =..+D&..-'A <..&
EBB0 38 8D 26 27 14 CE 00 E6 EC 00 27 09 08 08 8C 00  8.&'.N....'.....
EBC0 EE 26 F5 20 24 DC D9 ED 00 BD EB 12 CE 00 E6 C6  .&. $\Y..=..N..F
EBD0 04 BD EA D8 08 5A 26 F9 39 CE 00 E6 DC D9 A3 00  .=.X.Z&.9N..\Y#.
EBE0 27 09 08 08 8C 00 EE 26 F3 86 FF 39 BD E9 FA 2B  '......&...9=..+
EBF0 F8 81 0D 26 F4 5D 26 0D CE 00 E5 C6 0C 08 6F 00  ...&.]&.N..F....

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
EC00 5A 26 FA 20 C4 8D D2 26 E0 ED 00 6F 08 20 BA 97  Z&. D.R&`.... :.
EC10 F7 81 0D 27 0E BD E9 FA 2F CF 81 0D 26 CB 7F 00  ...'.=../O..&K..
EC20 F5 DF DD BD EB 12 96 F7 27 0E 7F 00 F7 DE E4 CC  ._]=....'....^.L
EC30 EC 58 09 ED 00 09 DF E4 96 F5 26 03 BD ED 36 20  .X...._...&.=.6 
EC40 15 CE 00 01 20 09 81 0D 27 F7 BD EA 0D 2F 9A DF  .N.. ...'.=../._
EC50 F3 27 96 7C 00 F5 20 62 36 07 97 E3 32 9F E4 8E  .'.... .6...2...
EC60 00 CF DD E1 DF DF CE EC 58 DF DD BD ED 15 7E ED  .O].__N.X_]=....
EC70 7A C6 18 DE 09 3A DF 0B 39 7C 00 08 8D F3 30 8E  .F.^.:_.9.....0.
EC80 00 CF 8D 79 BD ED 15 DE F3 26 0A 7F 00 F5 BD ED  .O..=..^.&....=.
EC90 36 2B 24 20 25 09 DF F3 26 03 7F 00 F5 CE 00 00  6+$ %._.&....N..
ECA0 BD ED D7 27 F1 CE EF B1 BD EB 0E DE D9 BD EA DB  =.W'.N.1=..^Y=.[
ECB0 BD EB 88 96 F5 26 03 7E E9 52 9E E4 DE DD 3C DE  =....&...R..^]<^
ECC0 DF 3C DC E1 36 37 96 E3 36 96 F5 27 1C DE DD DF  _<\.67..6..'.^]_
ECD0 D9 8D 17 27 0D 86 02 97 01 D6 08 C4 FE D7 08 8D  Y..'.....V.D.W..
ECE0 90 3B CC 05 01 DE F8 ED 02 3B CE FF F0 96 03 84  .;L..^...;N.....
ECF0 E0 81 20 27 02 DE FE EE 0C 8C E8 00 39 A6 00 97  `. '.^......9&..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
ED00 E3 EC 01 97 E2 D7 E1 EC 03 DD DF EC 05 DD DD C6  .....W...]_..]]F
ED10 06 3A DF E4 39 96 F2 27 1C CE 00 E6 C6 08 3C 3C  .:_.9..'.N..F.<<
ED20 3A A6 00 38 EE 00 27 02 A7 00 38 08 08 5A C1 04  :&.8..'.'.8..ZA.
ED30 26 EC 7F 00 F2 39 96 F2 26 70 CE 00 E6 C6 08 3C  &....9..&.N..F.<
ED40 EE 00 27 10 A6 00 37 C6 3F BD EA F7 33 38 2B 0E  ..'.&.7F?=..38+.
ED50 3C 3A A7 00 38 08 08 5A C1 04 26 E3 D7 F2 39 30  <:'.8..ZA.&.W.90
ED60 8E 00 CF 8D 98 DE DD 09 DF DD DF D9 96 F2 27 0A  ..O..^]._]_Y..'.
ED70 8D A3 BD EB D9 26 03 4C 20 04 4F 5F DD F3 97 F5  .#=.Y&.L .O_]...
ED80 BD EB 86 7E E9 52 DE D7 3C 81 0D 27 0A 8D 5A 2F  =....R^W<..'..Z/
ED90 16 DF D7 81 0D 26 16 DC D7 C4 F0 83 00 10 DD D7  ._W..&.\WD....]W
EDA0 C3 00 20 DD D9 20 1A 38 DF D7 86 FF 39 8D 3A 2F  C. ]Y .8_W..9.:/
EDB0 F6 DC D7 C4 F0 D7 D8 93 D9 22 EC 96 DA 84 F0 97  .\WD.WX.Y"..Z...
EDC0 DA C6 0C BD EE 54 CE 00 D7 C6 0E BD E8 DF 38 DF  ZF.=.TN.WF.=._8_
EDD0 D7 C6 10 8D 7F 4F 39 36 C6 02 8D 78 84 7F 81 17  WF...O96F.......
EDE0 26 03 BD E8 06 81 18 32 39 7E E9 FA 30 EE 02 EC  &.=....29...0...
EDF0 00 DD D7 EC 02 DD D9 BD EB 12 CE EF C1 BD EB 0E  .]W..]Y=..N.A=..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
EE00 4F 36 BD EA ED BD EA DD BD EA DD 32 4C 81 10 26  O6=..=.]=.]2L..&
EE10 F0 8D C4 27 D3 BD EB 12 CE 00 D7 BD EA D8 DE D7  ..D'S=..N.W=.X^W
EE20 C6 10 BD EA DB 08 5A 26 F9 BD EA DD C6 10 DE D7  F.=.[.Z&.=.]F.^W
EE30 A6 00 84 7F 81 20 2D 04 81 61 2D 02 86 2E BD E8  &.... -...-...=.
EE40 09 08 5A 26 EB DC D9 93 D7 27 9D DF D7 7D 00 D8  ..Z&.\Y.W'._W..X
EE50 26 BF 20 A3 7E E8 DF 81 0D 27 13 8D 8C 2F 0F DF  &? #.._..'.../._
EE60 D7 81 0D 27 09 BD ED E9 2F 04 81 0D 27 03 86 FF  W..'.=../...'...
EE70 38 39 7F 00 D6 8D E0 BD EB 12 86 10 97 F6 C6 12  89..V.`=......F.
EE80 8D D2 CE 00 D6 C6 14 8D CB 36 C6 16 8D C6 BD ED  .RN.VF..K6F..F=.
EE90 D7 BD ED D7 7F 00 F6 32 4D 39 C6 01 D7 D6 CE 00  W=.W...2M9F.WVN.
EEA0 00 DF D9 81 0D 27 D0 8D BC 20 CC C6 FF 20 ED 86  ._Y..'P.< LF. ..
EEB0 11 7D 00 D6 26 01 4C 7E E8 09 CE EF 8B BD EB 07  ...V&.L...N..=..
EEC0 7E E8 D8 30 EE 02 A6 00 97 D6 27 59 EC 03 DD D7  ..X0..&..V'Y..]W
EED0 BD E8 06 81 53 26 F9 BD E8 06 81 39 27 32 81 31  =...S&.=...9'2.1
EEE0 26 F1 7F 00 D0 8D 2A C0 02 D7 DB 8D 24 37 8D 21  &...P.*@.W[.$7.!
EEF0 32 D3 D7 37 36 38 8D 19 7A 00 DB 27 0E 7D 00 D6  2SW768....['...V

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
EF00 2B 02 E7 00 E1 00 26 06 08 20 EB 4C 27 C2 86 FF  +.....&.. .L'B..
EF10 39 5F BD EA 3F C6 10 3D 37 5F BD EA 3F 33 1B 16  9_=.?F.=7_=.?3..
EF20 9B D0 97 D0 39 EC 01 DD D7 EC 03 DD D9 C6 19 4F  .P.P9..]W..]YF.O
EF30 BD E8 09 5A 26 F9 DC D9 D0 D8 92 D7 26 04 C1 18  =..Z&.\YPX.W&.A.
EF40 25 02 C6 17 CB 04 D7 D6 C0 03 D7 DB CE EF A2 BD  %.F.K.WV@.W[N."=
EF50 EB 0E 5F CE 00 D6 8D 29 CE 00 D7 8D 24 08 8D 21  .._N.V.)N.W.$..!
EF60 DE D7 8D 1D 08 7A 00 DB 26 F8 DF D7 53 37 30 8D  ^W.....[&._WS70.
EF70 10 33 DE D7 09 9C D9 26 BD CE EF A5 BD EB 0E 4F  .3^W..Y&=N.%=..O
EF80 39 EB 00 7E EA E1 04 10 3A 10 39 14 13 04 3F 04  9.......:.9...?.
EF90 4C 49 4C 42 55 47 20 31 2E 30 04 4E 4F 20 43 48  LILBUG 1.0.NO CH
EFA0 47 04 53 31 04 53 39 30 33 30 30 30 30 46 43 0D  G.S1.S9030000FC.
EFB0 04 4F 50 2D 04 50 01 58 01 41 00 42 00 43 00 53  .OP-.P.X.A.B.C.S
EFC0 01 20 20 20 20 20 20 04 EC E1 EC E1 EC E1 EC E1  .      .........
EFD0 EC E1 E8 21 E8 03 FF FF FF FF FF FF FF FF FF FF  ...!............
EFE0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
EFF0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F000 86 63 97 00 CE 00 03 6F 00 09 26 FB 86 FF 97 05  ....N.....&.....
F010 CE 00 80 6F 7F 09 26 FB 8E 00 FF 0E 7F 20 00 BD  N.....&...... .=
F020 F7 E1 CE FD FF BD F6 30 86 30 97 E7 BD F7 EF 24  ..N..=.0.0..=..$
F030 FB 7F 20 00 BD F7 E1 CE FE 23 BD F6 30 86 A0 97  .. .=..N.#=.0. .
F040 E7 7F 00 E3 CE 10 A5 86 20 BD F7 AA CE 10 65 86  ....N.%. =.*N...
F050 7E BD F7 AA BD F7 EF 25 37 86 02 97 02 96 03 85  .=.*=..%7.......
F060 04 26 0B 96 D2 26 03 4F 20 28 86 0A 20 01 4F 97  .&..R&.O (.. .O.
F070 D2 86 01 97 02 96 03 85 02 27 C6 85 04 26 D5 86  R........'F..&U.
F080 01 97 E3 CE 10 65 86 20 BD F7 AA CE 10 A5 20 BF  ...N... =.*N.% ?
F090 86 01 97 E4 CE 00 50 6F 7F 09 26 FB 96 E3 27 08  ....N.P...&...'.
F0A0 86 01 97 E3 C6 03 D7 BE C6 02 D7 BD BD F9 36 96  ....F.W>F.W==.6.
F0B0 E4 26 06 CE FE EF BD FB 13 CE FD D0 A6 00 81 F3  .&.N..=..N.P&...
F0C0 27 38 08 81 CF 27 0D DF E8 CE 00 00 3A A7 00 5C  '8..O'._.N..:'.\
F0D0 DE E8 20 E8 E6 00 08 20 E3 86 20 97 E7 BD F7 EF  ^. .... .. ..=..
F0E0 24 FB D6 AD 96 E3 81 02 26 02 D6 AE 4F C1 04 26  $.V-....&.V.OA.&
F0F0 02 86 01 97 AF BD F9 36 20 BF D6 CD 96 E3 81 02  ..../=.6 ?VM....

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F100 26 02 D6 CE C1 01 22 04 27 05 20 06 7F 00 93 7F  &.VNA.".'. .....
F110 00 92 7F 00 E2 D6 A0 CE FB A2 BD F6 7C CE FF 22  .....V N."=..N."
F120 BD FB 13 D6 CD 96 E3 81 02 26 02 D6 CE 86 12 C1  =..VM....&.VN..A
F130 02 23 13 C4 03 C1 02 27 0D 86 0F C1 03 27 07 86  .#.D.A.'...A.'..
F140 0C 5D 27 02 86 08 97 E5 7C 00 E6 96 E0 27 F9 7A  .]'.........`'..
F150 00 E0 96 90 85 01 26 2B 96 E4 26 2F 86 02 97 02  .`....&+..&/....
F160 86 08 95 03 26 0F 96 D2 26 13 7C 00 D2 96 D3 26  ....&..R&...R.S&
F170 09 86 01 20 06 7F 00 D2 20 03 4F 97 D3 96 D3 26  ... ...R .O.S.S&
F180 C7 20 3C BD F7 EF 24 03 7E F0 1C 86 02 97 02 96  G <=..$.........
F190 03 85 04 26 0F 96 90 85 01 27 03 7E F0 67 86 0A  ...&.....'......
F1A0 97 D2 20 12 84 02 81 02 26 0C 86 01 97 02 96 03  .R .....&.......
F1B0 84 1E 81 1E 27 03 7E F0 31 96 90 85 01 26 89 BD  ....'...1....&.=
F1C0 F8 EB 96 E2 4C 97 E2 81 0A 27 0F 81 03 23 11 81  ....L....'...#..
F1D0 04 27 10 81 05 27 0F 7E F5 97 7F 00 E2 7E F1 E9  .'...'..........
F1E0 7E F3 7D 7E F3 C4 7E F4 87 7A 00 80 26 60 86 0A  .....D......&`..
F1F0 97 80 CE 00 09 A6 90 85 01 27 27 09 26 F7 CE 00  ..N..&...''.&.N.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F200 0D 96 E3 81 02 26 03 CE 00 0E 6C C0 A6 A0 4C A7  .....&.N...@& L'
F210 A0 81 05 26 0A 6F A0 A6 B0 81 02 22 02 6C B0 7E   ..&.. &0.."..0.
F220 F0 D9 DE E1 96 E4 26 2E 86 01 97 02 C6 01 96 03  .Y^...&.....F...
F230 85 02 27 29 C6 04 85 04 27 23 C6 08 85 08 27 1D  ..')F...'#F...'.
F240 C6 02 85 10 27 17 96 A0 84 0F 97 A0 20 03 7E F1  F...'.. ...  ...
F250 48 BD F6 E3 20 16 BD F8 01 24 F3 20 0D D7 A0 BD  H=.. .=..$. .W =
F260 F6 E3 BD F6 FD BD F7 32 24 E7 DE E1 BD F6 B9 DE  ..=..=.2$.^.=.9^
F270 E1 BD F6 F0 D6 A0 58 58 58 58 DA A0 D7 A0 CE FB  .=..V XXXXZ W N.
F280 A2 BD F6 7C BD FA D9 25 C5 86 31 B7 20 00 CE FF  "=..=.Y%E.17 .N.
F290 31 BD FB 13 86 11 B7 20 00 7F 00 E2 CE FD BE BD  1=....7 ....N.>=
F2A0 F6 8B CE FF 36 BD FB 13 96 BE 26 04 96 BD 27 21  ..N.6=...>&..='!
F2B0 96 E3 81 02 26 0D 96 BD 27 11 86 01 97 E3 7A 00  ....&..='.......
F2C0 BD 20 0B 96 BE 27 F7 86 02 97 E3 7A 00 BE 7E F0  = ..>'.......>..
F2D0 D9 CE FF 3D BD FB 13 20 3F 96 E4 26 2A C6 80 CE  YN.==.. ?..&*F.N
F2E0 00 0F 8D 26 A1 D0 22 0A 26 15 09 8C 00 0A 26 F2  ...&!P".&.....&.
F2F0 20 0D CE 00 0F 8D 13 A7 D0 09 8C 00 0A 26 F6 C1   .N....'P....&.A

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F300 90 27 04 C6 90 20 D8 7E F9 A7 3A A6 00 DF E8 37  .'.F. X..':&._.7
F310 D8 E9 D7 E9 33 DE E8 39 7F 20 00 BD F7 E1 CE FE  X.W.3^.9. .=..N.
F320 51 BD F6 30 CE 11 73 CC 00 DF 8D 33 CE 11 C7 CC  Q=.0N..L._.3N.GL
F330 00 8F 8D 2B 96 E3 27 1C CE 11 D5 CC 00 9F 8D 1F  ...+..'.N.UL....
F340 CE 11 D1 86 32 BD F7 AA 08 86 10 BD F7 AA 08 86  N.Q.2=.*...=.*..
F350 3A BD F7 AA 86 A0 97 E7 86 01 97 90 7E F1 48 3C  :=.*. ........H<
F360 DD E8 DE E8 86 30 AB 00 DF E8 38 BD F7 AA 08 3C  ].^..0+._.8=.*.<
F370 DE E8 09 86 0F 94 E9 81 0B 26 E9 38 39 DE E1 A6  ^........&.89^.&
F380 90 85 01 26 37 6A 80 26 33 96 E5 A7 80 BD F8 01  ...&7..&3..'.=..
F390 24 2A 96 AF 26 29 D6 AA 58 58 58 58 DB AA D7 AA  $*./&)V*XXXX[*W*
F3A0 DE E1 BD F6 B9 DE E1 BD F6 F0 E6 A0 CE FC 32 BD  ^.=.9^.=... N.2=
F3B0 F6 80 DE E1 E6 A0 CE FC 7A BD F6 7C 7E F1 48 BD  ..^.. N..=....H=
F3C0 F6 50 20 D8 96 94 85 01 26 F2 7A 00 84 27 05 7A  .P X....&....'..
F3D0 00 84 26 E8 C6 10 D7 84 85 02 27 39 CE FF 83 BD  ..&.F.W...'9N..=
F3E0 FB 13 96 94 85 08 26 55 8A 08 97 94 DE E1 BD F6  ......&U....^.=.
F3F0 E3 96 94 85 04 27 57 CE FB 88 D6 AA 54 54 54 54  .....'WN..V*TTTT

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F400 3A A6 00 97 AA BD F6 50 D1 AA 26 04 86 0A 97 94  :&..*=.PQ*&.....
F410 BD F6 F0 20 4C 7A 00 CF 26 31 86 01 97 CF C6 03  =.. L..O&1...OF.
F420 D4 E6 CE FB 80 3A A6 00 E6 04 97 CA D7 BA BD FA  T.N..:&....JW:=.
F430 DE 24 18 86 10 97 AA 86 02 97 94 20 29 84 F7 97  ^$....*.... )...
F440 94 DE E1 BD F6 B9 CE FD AC 20 23 7E F1 48 96 E6  .^.=.9N., #..H..
F450 85 0F 27 27 BD F6 FD BD F7 56 24 1F BD FA DE 24  ..''=..=.V$.=.^$
F460 1E DE E1 BD F6 B9 DE E1 BD F6 F0 CE FD 9A BD F6  .^.=.9^.=..N..=.
F470 8B D6 A4 CE FD 0A BD F6 7C 20 D0 86 0E 97 94 DE  .V$N..=.. P....^
F480 E1 BD F6 E3 7E F3 F7 96 95 85 01 27 28 7D 00 E4  .=.........'(...
F490 26 25 D6 A0 C4 0F D7 A0 58 58 58 58 DA A0 D7 A0  &%V D.W XXXXZ W 
F4A0 C6 02 D7 02 D6 03 C5 02 27 45 C5 04 27 15 86 01  F.W.V.E.'EE.'...
F4B0 97 95 7E F1 48 20 56 DE E1 6A 80 26 F5 86 50 A7  ....H V^...&..P'
F4C0 80 20 34 85 02 26 EB D6 A0 C4 0F CE FB 88 3A E6  . 4..&.V D.N..:.
F4D0 00 DA A0 D7 A0 C6 08 D7 AB 4F 97 E2 DE E1 BD F6  .Z W F.W+O..^.=.
F4E0 B9 D6 A0 CE FB A2 BD F6 7C 86 05 97 E2 96 95 85  9V N."=.........
F4F0 02 26 BF 86 02 97 95 CE FF 5C BD FB 13 CE 00 00  .&?....N.\=..N..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F500 BD F6 E3 BD F8 B2 BD F8 77 25 0F 20 A5 BD F8 39  =..=.2=..%. %=.9
F510 25 08 7A 00 AB 27 9B BD F5 61 BD FA B1 25 93 86  %...+'.=..=.1%..
F520 01 A7 90 DF E1 BD F6 B9 CE FF 63 BD FB 13 CE FD  .'._.=.9N..=..N.
F530 BE BD F6 8B CE FF 68 BD FB 13 DE E1 BD F6 B9 CE  >=..N..=..^.=.9N
F540 FF 7D BD FB 13 96 E2 81 04 26 07 86 02 CE 00 8D  ..=......&...N..
F550 20 05 86 05 CE 00 8C BD F9 80 86 01 97 95 7E F1   ...N..=........
F560 48 BD F6 E3 96 AA 85 50 27 2C 85 A0 27 28 88 50  H=...*.P',. '(.P
F570 97 AA BD F8 3E 25 17 BD F6 E3 96 AA 88 A0 97 AA  .*=.>%.=...*. .*
F580 BD F8 3E 25 09 A6 A0 88 F0 A7 A0 BD F8 39 DE E1  =.>%.& ..' =.9^.
F590 A6 90 84 FE A7 90 39 DE E1 A6 90 85 01 27 54 6A  &...'.9^.&...'T.
F5A0 80 26 35 86 80 A7 80 09 09 09 09 09 A6 90 85 01  .&5..'......&...
F5B0 26 26 8C 00 04 26 24 85 02 27 1D 86 20 97 89 86  &&...&$..'.. ...
F5C0 08 97 AC BD F6 E3 CE FF 80 BD FB 13 BD F8 B2 86  ..,=..N..=..=.2.
F5D0 03 A7 D0 BD F8 77 25 35 7E F1 48 86 08 8C 00 03  .'P=..%5..H.....
F5E0 26 04 97 DA 20 DD 8C 00 02 26 04 97 D5 20 D4 97  &..Z ]...&..U T.
F5F0 D4 20 D0 6A D0 26 E1 86 03 A7 D0 BD F8 39 25 0D  T P.P&...'P=.9%.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F600 8C 00 09 26 10 7A 00 AC 27 CE BD F5 61 BD FA 86  ...&...,'N=..=..
F610 25 C6 7E F2 89 8C 00 08 26 05 7A 00 DA 20 E9 8C  %F......&...Z ..
F620 00 07 26 05 7A 00 D5 20 DF 7A 00 D4 20 DA 32 32  ..&...U _..T Z22
F630 08 DF E8 EE 00 3C DE E8 08 08 A6 00 81 CF 27 EE  ._...<^...&..O'.
F640 DF E8 38 81 F3 27 08 A7 00 08 3C DE E8 20 EA 39  _.8..'.'..<^. .9
F650 96 CA 8B 04 91 C0 25 16 80 08 91 C0 22 14 5F 96  .J...@%....@"._.
F660 BA 8B 01 91 B0 25 0F 80 02 91 B0 22 0C 39 C6 40  :...0%....0".9F@
F670 20 ED C6 10 20 E9 CB 20 39 CB 80 39 54 54 54 54   .F. .K 9K.9TTTT
F680 C4 0F 3C CE FB 95 3A E6 00 38 3A DF E8 DE E1 BD  D.<N..:..8:_.^.=
F690 F6 D5 BD F7 B5 39 86 01 D6 E6 C5 01 27 07 CB 40  .U=.59..V.E.'.K@
F6A0 25 07 48 20 F9 96 AA 84 0F 97 AA 39 44 4D 26 02  %.H ..*...*9DM&.
F6B0 86 08 44 4D 26 02 86 08 39 BD F6 D5 86 05 36 4F  ..DM&...9=.U..6O
F6C0 BD F7 AA 08 BD F7 AA 08 BD F7 AA 32 4A 27 05 C6  =.*.=.*.=.*2J'.F
F6D0 1E 3A 20 EA 39 E6 C0 86 01 05 05 05 05 EB B0 37  .: .9.@.......07
F6E0 36 38 39 A6 A0 97 AA A6 B0 97 BA A6 C0 97 CA 39  689& .*&0.:&@.J9
F6F0 96 AA A7 A0 96 BA A7 B0 96 CA A7 C0 39 D6 CA 96  .*' .:'0.J'@9VJ.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F700 AA 85 11 27 04 C0 04 D7 CA 85 22 27 03 7C 00 BA  *..'.@.WJ."'...:
F710 85 44 27 04 CB 04 D7 CA 85 88 27 03 7A 00 BA 39  .D'.K.WJ..'...:9
F720 C6 80 D5 02 26 FC E6 00 39 C6 80 D5 02 26 FC AA  F.U.&...9F.U.&.*
F730 00 39 96 AF 26 20 96 BA 81 01 27 1A 8B E6 25 16  .9./& .:..'...%.
F740 8B 06 25 04 8B 02 20 F6 96 CA 8B 90 25 08 8B 18  ..%... ..J..%...
F750 25 1A 8B 08 20 F6 96 BA 81 00 27 10 81 1D 27 0C  %... ..:..'...'.
F760 96 CA 81 10 23 06 81 74 22 02 0D 39 0C 39 96 AF  .J..#..."..9.9./
F770 26 20 96 BA 81 01 27 1A 8B E6 25 16 8B 04 25 04  & .:..'...%...%.
F780 8B 04 20 F6 96 CA 8B 90 25 08 8B 10 25 1A 8B 10  .. ..J..%...%...
F790 20 F6 96 BA 81 00 27 10 81 1F 27 0C 96 CA 81 10   ..:..'...'..J..
F7A0 27 06 81 7E 27 02 0D 39 0C 39 C6 80 D5 02 26 FC  '...'..9.9F.U.&.
F7B0 A7 00 39 DD E8 3C DE E8 A6 00 81 CF 27 16 81 F3  '.9].<^.&..O'...
F7C0 27 1D DF E8 38 BD F7 29 BD F7 AA C6 20 3A 3C DE  '._.8=.)=.*F :<^
F7D0 E8 08 20 E4 DF E8 32 33 83 00 9F 37 36 20 F0 38  .. ._.23...76 .8
F7E0 39 C6 20 CE 17 FF E7 00 09 8C 0F FF 26 F8 39 96  9F N........&.9.
F7F0 08 85 40 27 0A 86 FF 97 0B 7A 00 E7 0D 27 01 0C  ..@'.........'..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F800 39 BD F6 E3 BD F6 96 C6 09 37 C1 05 25 09 96 AA  9=..=..F.7A.%..*
F810 BD F6 AC A5 A0 26 10 BD F6 FD BD F7 32 24 08 BD  =.,% &.=..=.2$.=
F820 FA DE 24 03 0D 33 39 DE E1 BD F6 E7 96 AA BD F6  .^$..39^.=...*=.
F830 B2 97 AA 33 5A 26 D2 0C 39 DE E1 BD F6 E3 E6 90  2.*3Z&R.9^.=....
F840 96 AA 85 80 27 09 C5 04 27 10 7A 00 BA 20 0B 85  .*..'.E.'...: ..
F850 20 27 09 C5 04 26 03 7C 00 BA C8 04 E7 90 D6 CA   '.E.&...:H...VJ
F860 85 40 27 04 CB 02 20 06 85 10 27 04 C0 02 D7 CA  .@'.K. ...'.@.WJ
F870 BD F6 D5 4F BD F7 AA DE E1 BD F7 6E 24 2B BD F6  =.UO=.*^.=..$+=.
F880 F0 E6 90 96 E2 81 05 26 04 86 F0 20 02 86 A0 C5  .......&... .. E
F890 04 26 04 44 44 44 44 36 BD F6 D5 32 BD F7 AA 0D  .&.DDDD6=.U2=.*.
F8A0 DE E1 A6 90 84 FE A7 90 39 A6 90 8A 01 88 04 0C  ^.&...'.9&......
F8B0 20 F4 DE E1 96 AA 85 20 26 12 C6 FB E4 90 E7 90   .^..*. &.F.....
F8C0 D6 BA C0 01 85 80 26 0E CB 02 20 0A C6 04 EA 90  V:@...&.K. .F...
F8D0 E7 90 D6 BA CB 03 D7 BA D6 CA C0 02 85 10 26 08  ..V:K.W:VJ@...&.
F8E0 CB 0C 85 40 26 02 C0 06 D7 CA 39 96 AF 26 46 CE  K..@&.@.WJ9./&FN
F8F0 FB 5C D6 BB 3A E6 00 37 CE FB 68 D6 CB 3A E6 00  .\V;:..7N..VK:..

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F900 86 01 05 05 05 05 37 36 38 33 3A BD F7 20 5D 26  ......7683:=. ]&
F910 0D 86 A5 D6 CB C5 02 26 02 86 5A BD F7 AA 96 BB  ..%VKE.&..Z=.*.;
F920 4C 81 0C 27 03 97 BB 39 7F 00 BB 96 CB 4C 81 18  L..'..;9..;.KL..
F930 26 01 4F 97 CB 39 86 11 B7 20 00 5F BD F7 E3 CE  &.O.K9..7 ._=..N
F940 11 00 86 AA BD F7 AA 08 8C 11 21 26 05 CE 17 DF  ...*=.*...!&.N._
F950 20 F2 8C 18 00 26 ED CE 11 3F BD F7 AA 08 BD F7   ....&.N.?=.*.=.
F960 AA C6 1F 3A 8C 17 DF 26 F1 96 AF 26 37 7F 00 CB  *F.:.._&../&7..K
F970 7F 00 BB BD F8 EB 96 CB 26 F9 96 BB 26 F5 20 24  ..;=...K&..;&. $
F980 D6 E3 C1 02 26 03 C6 10 3A AB 00 81 09 23 13 80  V.A.&.F.:+...#..
F990 0A A7 00 08 86 01 8C 00 A0 27 09 8C 00 90 27 04  .'...... '....'.
F9A0 20 E7 A7 00 7E F2 D9 86 AA CE 10 C3 D6 BD 27 0A   .'...Y.*N.CV='.
F9B0 37 BD F7 AA 33 08 08 5A 20 F4 8C 10 CF 22 07 CE  7=.*3..Z ...O".N
F9C0 10 D9 D6 BE 20 E8 96 E3 27 36 81 02 26 20 CE 10  .YV> ...'6..& N.
F9D0 00 CC FE 8F BD F7 B3 CE 10 01 CC FE D7 BD F7 B3  .L..=.3N..L.W=.3
F9E0 CE 10 16 CC FE E3 BD F7 B3 CE 10 17 20 1E CE 10  N..L..=.3N.. .N.
F9F0 16 CC FE 95 BD F7 B3 CE 10 17 CC FE D7 BD F7 B3  .L..=.3N..L.W=.3

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
FA00 CE 10 00 CC FE DD BD F7 B3 CE 10 01 CC FE E9 BD  N..L.]=.3N..L..=
FA10 F7 B3 CE 10 0B CC FE CB BD F7 B3 CE 10 0C CC FE  .3N..L.K=.3N..L.
FA20 D1 BD F7 B3 CE 10 0D CC FE C5 BD F7 B3 CE 10 03  Q=.3N..L.E=.3N..
FA30 C6 8F 3C D7 BF CE 00 00 3A E6 00 CE FE 7D 3A E6  F.<W?N..:..N..:.
FA40 00 CE FE 89 3A A6 00 DF E8 81 F3 27 0D 38 BD F7  .N..:&._...'.8=.
FA50 AA C6 20 3A 3C DE E8 08 20 EB 32 33 C0 9F 37 36  *F :<^.. .23@.76
FA60 38 C1 08 27 1A C1 13 27 0B C1 1E 27 06 3C D6 BF  8A.'.A.'.A.'.<V?
FA70 5A 20 C0 39 96 E3 27 FB CE 10 19 C6 9F 20 B3 CE  Z @9..'.N..F. 3N
FA80 10 0E C6 DF 20 AC CE 00 09 A6 90 85 01 26 1A 96  ..F_ ,N..&...&..
FA90 C0 A1 C0 22 14 8B 0A A1 C0 23 0E 96 B0 A1 B0 22  @!@"...!@#..0!0"
FAA0 08 8B 03 A1 B0 23 02 0C 39 09 8C 00 05 26 DA 0D  ...!0#..9....&Z.
FAB0 39 CE 00 04 A6 90 85 01 26 1A A6 C0 91 C5 22 14  9N..&...&.&@.E".
FAC0 8B 0A 91 C5 23 0E A6 B0 91 B5 22 08 8B 03 91 B5  ...E#.&0.5"....5
FAD0 23 02 0C 39 09 26 DD 0D 39 DE E1 BD F6 E3 CE 00  #..9.&].9^.=..N.
FAE0 00 9C E1 27 26 A6 90 85 01 26 20 A6 C0 8B 0A 91  ...'&&...& &@...
FAF0 CA 23 18 80 12 91 CA 22 12 A6 B0 8B 03 91 BA 23  J#....J".&0...:#

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
FB00 0A 80 05 25 04 91 BA 22 02 0C 39 08 8C 00 05 26  ...%..:"..9....&
FB10 D0 0D 39 0F A6 00 97 D0 81 FF 27 35 08 A6 00 97  P.9.&..P..'5.&..
FB20 D1 08 96 D0 27 17 4A 26 FD 96 90 85 02 26 13 86  Q..P'.J&.....&..
FB30 02 97 90 86 63 97 02 21 18 21 16 20 E5 86 A5 4A  .......!.!. ..%J
FB40 26 FD 86 00 97 90 86 23 97 02 7A 00 D1 26 D3 20  &......#....Q&S 
FB50 C3 0E 39 96 E0 8B 10 25 02 97 E0 3B 06 07 08 09  C.9.`..%..`;....
FB60 0E 0F 10 11 16 17 18 19 20 22 24 26 28 2A 2C 2E  ........ "$&(*,.
FB70 40 42 44 46 48 4A 4C 4E 60 62 64 66 68 6A 6C 6E  @BDFHJLN`.......
FB80 14 14 72 72 02 1B 02 1B 30 30 60 20 C0 30 40 30  ........00` @0@0
FB90 90 10 30 30 80 00 00 12 48 24 00 5A 00 36 6C 00  ..00....H$.Z.6..
FBA0 00 7E 00 03 3F 03 3C CF 28 FF C3 FF 00 CF 00 C0  ....?.<O(.C..O.@
FBB0 FC C0 3C F3 3C 03 03 03 3C CF 3C FF C3 FF 3C CF  .@<.<...<O<.C..B.F.J.N.S_
FF10 58 59 5E 54 63 4F 69 4A 6F 46 75 41 7D 00 68 3D  XY^T.O.J.F.A...=
FF20 84 FF 00 68 3D 84 00 68 3D 84 00 68 3D 84 00 68  ....=...=...=...
FF30 FF FA 46 EB 4A FF 00 D2 00 D2 00 D2 FF 4F 1A 00  ..F.J..R.R.R.O..
FF40 68 54 19 00 68 5F 16 00 68 6C 14 00 68 7A 11 00  .T..._..........
FF50 68 81 10 00 68 92 0F 00 68 A4 0D FF 3D 21 46 1D  .........$..=!F.
FF60 4F 1A FF C5 2C AF 31 FF 5F 16 54 19 5F 16 54 19  O..E,/1._.T._.T.
FF70 5F 16 54 19 5F 16 54 19 5F 16 54 19 FF 00 1A FF  _.T._.T._.T.....
FF80 81 10 FF FA 02 FF FF FF FF FF FF FF FF FF FF FF  ................
FF90 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFA0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFB0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFC0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFD0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFE0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
FFF0 FB 5B FB 5B FB 5B FB 5B FB 53 FB 5B FB 5B F0 00  .[.[.[.[.S.[.[..
!