URL
https://opencores.org/ocsvn/openarty/openarty/trunk
Subversion Repositories openarty
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 33 to Rev 34
- ↔ Reverse comparison
Rev 33 → Rev 34
/openarty/trunk/bench/cpp/Makefile
37,18 → 37,23
## |
|
CXX := g++ |
FLAGS := -Wall -Og -g |
OBJDIR := obj-pc |
RTLD := ../../rtl |
VERILATOR_ROOT ?= $(shell bash -c 'verilator -V|grep VERILATOR_ROOT | head -1 | sed -e " s/^.*=\s*//"') |
VROOT := $(VERILATOR_ROOT) |
GFXFLAGS:= `pkg-config gtkmm-3.0 --cflags` |
GFXLIBS := `pkg-config gtkmm-3.0 --cflags --libs` |
FLAGS := -Wall -Og -g |
INCS := -I$(RTLD)/obj_dir/ -I$(RTLD) -I$(VROOT)/include |
SOURCES := eqspiflashsim.cpp eqspiflash_tb.cpp enetctrlsim.cpp \ |
SOURCES := fastmaster_tb.cpp eqspiflashsim.cpp eqspiflash_tb.cpp \ |
oledsim.cpp enetctrlsim.cpp \ |
memsim.cpp sdspisim.cpp uartsim.cpp ddrsdramsim.cpp |
HEADERS := ddrsdramsim.h enetctrlsim.h eqspiflashsim.h memsim.h \ |
oledsim.h pipecmdr.h port.h sdspisim.h testb.h uartsim.h |
VOBJDR := $(RTLD)/obj_dir |
VLIB := $(VROOT)/include/verilated.cpp |
SIMSRCS := enetctrlsim.cpp eqspiflashsim.cpp \ |
memsim.cpp sdspisim.cpp uartsim.cpp |
memsim.cpp sdspisim.cpp uartsim.cpp oledsim.cpp |
SIMOBJ := $(subst .cpp,.o,$(SIMSRCS)) |
SIMOBJS:= $(addprefix $(OBJDIR)/,$(SIMOBJ)) |
all: $(OBJDIR)/ busmaster_tb eqspiflash_tb enetctrl_tb |
57,8 → 62,26
@bash -c "if [ ! -e $(OBJDIR) ]; then mkdir -p $(OBJDIR); fi" |
|
$(OBJDIR)/%.o: %.cpp |
$(CXX) $(FLAGS) -c $^ -o $@ |
$(CXX) $(FLAGS) -c $< -o $@ |
|
.PHONY: oledsim.o |
oledsim.o: $(OBJDIR)/oledsim.o |
$(OBJDIR)/oledsim.o: oledsim.cpp |
$(CXX) $(FLAGS) $(GFXFLAGS) -c $< -o $@ |
|
# While busmaster_tb.o isnt really dependent upon fastmaster_tb.o, this |
# makes certain that all of the dependencies of fastmaster_tb are captured |
# in busmaster. Hence, if fastmaster_tb is remade/rebuilt because one of |
# its dependencies change, so too is busmaster_tb. |
# |
$(OBJDIR)/busmaster_tb.o: fastmaster_tb.cpp |
$(CXX) $(FLAGS) $(GFXFLAGS) $(INCS) -c $< -o $@ |
|
$(OBJDIR)/fastmaster_tb.o: fastmaster_tb.cpp |
$(CXX) -DFASTCLK $(FLAGS) $(GFXFLAGS) $(INCS) -c $< -o $@ |
|
|
|
eqspiflash_tb: eqspiflash_tb.cpp $(OBJDIR)/eqspiflashsim.o $(VOBJDR)/Veqspiflash__ALL.a |
$(CXX) $(FLAGS) $(INCS) $^ $(VOBJDR)/Veqspiflash__ALL.a $(VLIB) -o $@ |
|
65,15 → 88,37
enetctrl_tb: enetctrl_tb.cpp $(OBJDIR)/enetctrlsim.o $(VOBJDR)/Venetctrl__ALL.a |
$(CXX) $(FLAGS) $(INCS) $^ $(VOBJDR)/Venetctrl__ALL.a $(VLIB) -o $@ |
|
fastmaster_tb:fastmaster_tb.cpp $(SIMOBJS) $(VOBJDR)/Vfastmaster__ALL.a |
$(CXX) -DFASTCLK $(FLAGS) $(INCS) $^ $(VOBJDR)/Vfastmaster__ALL.a $(VLIB) -o $@ |
busmaster_tb:fastmaster_tb.cpp $(SIMOBJS) $(VOBJDR)/Vbusmaster__ALL.a |
$(CXX) $(FLAGS) $(INCS) $^ $(VOBJDR)/Vbusmaster__ALL.a $(VLIB) -o $@ |
fastmaster_tb: $(OBJDIR)/fastmaster_tb.o $(SIMOBJS) $(VOBJDR)/Vfastmaster__ALL.a |
$(CXX) $(GFXLIBS) $^ $(VOBJDR)/Vfastmaster__ALL.a $(VLIB) -o $@ |
busmaster_tb: $(OBJDIR)/busmaster_tb.o $(SIMOBJS) $(VOBJDR)/Vbusmaster__ALL.a |
$(CXX) $(GFXLIBS) $(INCS) $^ $(VOBJDR)/Vbusmaster__ALL.a $(VLIB) $(GFXLIBS) -o $@ |
|
define build-depends |
@echo "Building dependency file(s)" |
@$(CXX) $(GFXFLAGS) $(INCS) -MM $(SOURCES) > $(OBJDIR)/xdepends.txt |
@sed -e 's/^.*.o: /$(OBJDIR)\/&/' < $(OBJDIR)/xdepends.txt \ |
| sed -e 's/fastmaster_tb.o/busmaster_tb.o/g' \ |
> $(OBJDIR)/depends.txt |
@rm $(OBJDIR)/xdepends.txt |
endef |
|
tags: $(SOURCES) $(HEADERS) |
@echo "Generating tags" |
@ctags $(SOURCES) $(HEADERS) |
|
.PHONY: clean |
clean: |
rm -rf $(OBJDIR)/ |
rm -f ./eqspiflash_tb |
rm -f ./enetctrl_tb |
rm -f ./fastmaster_tb |
rm -f ./busmaster_tb |
|
.PHONY: depends |
depends: |
$(build-depends) |
|
$(OBJDIR)/depends.txt: $(OBJDIR)/ $(SOURCES) $(HEADERS) |
$(build-depends) |
|
-include $(OBJDIR)/depends.txt |
/openarty/trunk/bench/cpp/fastmaster_tb.cpp
63,6 → 63,9
#include "uartsim.h" |
#include "enetctrlsim.h" |
#include "memsim.h" |
// #ifdef OLEDSIM |
#include "oledsim.h" |
// #endif |
|
#include "port.h" |
|
77,11 → 80,16
ENETCTRLSIM *m_mid; |
UARTSIM m_uart; |
MEMSIM m_ram; |
#ifdef OLEDSIM_H |
OLEDWIN m_oled; |
#endif |
|
unsigned m_last_led, m_last_pic, m_last_tx_state, m_net_ticks; |
time_t m_start_time; |
bool m_last_writeout, m_cpu_started; |
int m_last_bus_owner, m_busy; |
unsigned long m_gps_err, m_gps_step, m_gps_newstep; |
unsigned m_gps_stepc; |
|
TESTBENCH(void) : PIPECMDR(FPGAPORT), |
m_uart(FPGAPORT+1), m_ram(1<<26) |
89,6 → 97,9
m_start_time = time(NULL); |
m_mid = new ENETCTRLSIM; |
m_cpu_started =false; |
#ifdef OLEDSIM_H |
Glib::signal_idle().connect(sigc::mem_fun((*this),&TESTBENCH::on_tick)); |
#endif |
} |
|
void setsdcard(const char *fn) { |
97,6 → 108,11
printf("LOADING SDCARD FROM: \'%s\'\n", fn); |
} |
|
bool on_tick(void) { |
tick(); |
return true; // Keep going 'til the kingdom comes |
} |
|
void tick(void) { |
if ((m_tickcount & ((1<<28)-1))==0) { |
double ticks_per_second = m_tickcount; |
109,6 → 125,12
} |
|
// Set up the bus before any clock tick |
#ifdef OLEDSIM_H |
m_oled(m_core->o_oled_pmoden, m_core->o_oled_reset_n, |
m_core->o_oled_vccen, m_core->o_oled_cs_n, |
m_core->o_oled_sck, m_core->o_oled_dcn, |
m_core->o_oled_mosi); |
#endif |
m_core->i_qspi_dat = m_flash(m_core->o_qspi_cs_n, |
m_core->o_qspi_sck, m_core->o_qspi_dat); |
|
159,6 → 181,8
#ifdef DEBUGGING_OUTPUT |
bool writeout = false; |
|
/* |
// Ethernet triggers |
if (m_core->o_net_tx_en) |
writeout = true; |
if (m_core->v__DOT__netctrl__DOT__n_rx_busy) |
167,12 → 191,66
writeout = true; |
if (m_core->v__DOT__netctrl__DOT__w_rxwr) |
writeout = true; |
*/ |
|
/* |
// GPS Clock triggers |
if (m_core->v__DOT__ppsck__DOT__tick) |
writeout = true; |
if (m_core->v__DOT__gps_step != m_gps_step) { |
writeout = true; |
// printf("STEP"); |
} if (m_core->v__DOT__gps_err != m_gps_err) { |
writeout = true; |
// printf("ERR"); |
} if (m_core->v__DOT__ppsck__DOT__step_correction != m_gps_stepc) { |
writeout = true; |
// printf("DSTP"); |
} if (m_core->v__DOT__ppsck__DOT__getnewstep__DOT__genblk2__DOT__genblk1__DOT__r_out != m_gps_newstep) |
writeout = true; |
*/ |
m_gps_step = m_core->v__DOT__gps_step; |
m_gps_err = m_core->v__DOT__gps_err; |
m_gps_stepc= m_core->v__DOT__ppsck__DOT__step_correction; |
m_gps_newstep=m_core->v__DOT__ppsck__DOT__getnewstep__DOT__genblk2__DOT__genblk1__DOT__r_out; |
|
if (m_core->o_oled_cs_n == 0) |
writeout = true; |
if (m_core->o_oled_sck == 0) |
writeout = true; |
if (m_core->v__DOT__rgbctrl__DOT__dev_wr) |
writeout = true; |
if (m_core->v__DOT__rgbctrl__DOT__r_busy) |
writeout = true; |
if (m_core->v__DOT__rgbctrl__DOT__dev_busy) |
writeout = true; |
|
|
/* |
if (m_core->v__DOT__ppsck__DOT__err_tick) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__sub_tick) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__shift_tick) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__fltr_tick) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__config_tick) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__mpy_sync) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__mpy_sync_two) |
writeout = true; |
if (m_core->v__DOT__ppsck__DOT__delay_step_clk) |
writeout = true; |
*/ |
|
// if (m_core->v__DOT__wbu_cyc) |
// writeout = true; |
// if (m_core->v__DOT__dwb_cyc) |
// writeout = true; |
|
// Write out if the CPU is active at all |
if (m_core->v__DOT__zippy__DOT__genblk11__DOT__thecpu__DOT__master_ce) |
writeout = true; |
if (m_core->v__DOT__zippy__DOT__genblk11__DOT__thecpu__DOT__dbgv) |
396,6 → 474,8
} |
*/ |
|
/* |
// Network debugging |
printf("ETH[TX:%s%s%x%s]", |
(m_core->i_net_tx_clk)?"CK":" ", |
(m_core->o_net_tx_en)?" ":"(", |
463,6 → 543,8
(m_core->v__DOT__netctrl__DOT__rxmaci__DOT__r_p)&0x0ff, |
m_core->v__DOT__netctrl__DOT__w_rxmacd, |
(m_core->v__DOT__netctrl__DOT__w_rxmac)?"!":" "); |
*/ |
|
/* |
// Flash debugging support |
printf("%s/%s %s %s[%s%s%s%s%s] %s@%08x[%08x/%08x] -- SPI %s%s[%x/%x](%d,%d)", |
532,6 → 614,68
*/ |
|
|
/* |
// Debugging the GPS tracking circuit |
printf("COUNT %016lx STEP %016lx+%08x->%016lx ERR %016lx %s", |
m_core->v__DOT__gps_now, |
m_core->v__DOT__gps_step, |
m_core->v__DOT__ppsck__DOT__step_correction, |
m_core->v__DOT__ppsck__DOT__getnewstep__DOT__genblk2__DOT__genblk1__DOT__r_out, |
m_core->v__DOT__gps_err, |
(m_core->v__DOT__ppsck__DOT__tick)?"TICK":" "); |
*/ |
|
|
// Debug the OLED |
|
{ const char *pwr; int pwrk; |
if (m_core->o_oled_pmoden) { |
if (!m_core->o_oled_reset_n) |
pwr = "RST"; |
else if (m_core->o_oled_vccen) |
pwr = "ON "; |
else |
pwr = "VIO"; |
} else if (m_core->o_oled_vccen) { |
pwr = "ERR"; |
} else |
pwr = "OFF"; |
pwrk = (m_core->o_oled_reset_n)?4:0; |
pwrk|= (m_core->o_oled_vccen)?2:0; |
pwrk|= (m_core->o_oled_pmoden); |
// First the top-level ports |
printf(" OLED[%s/%d,%s%s%s-%d]", |
pwr, pwrk, |
(!m_core->o_oled_cs_n)?"CS":" ", |
(m_core->o_oled_sck)?"CK":" ", |
(m_core->o_oled_dcn)?"/D":"/C", |
(m_core->o_oled_mosi)); |
} |
// Now the low-level internals |
printf("LL["); |
switch(m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__state){ |
case 0: printf("I,"); break; |
case 1: printf("S,"); break; |
case 2: printf("B,"); break; |
case 3: printf("R,"); break; |
case 4: printf("!,"); break; |
case 5: printf(".,"); break; |
default: printf("U%d", |
m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__state); |
} |
printf("%2d,%s%2d,%08x]", |
m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__spi_len, |
(m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__pre_last_counter)?"P":" ", |
|
m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__counter, |
m_core->v__DOT__rgbctrl__DOT__lwlvl__DOT__r_word); |
printf("[%s%s%s/%2d/%d]", |
(m_core->v__DOT__rgbctrl__DOT__dev_wr)?"W":" ", |
(m_core->v__DOT__rgbctrl__DOT__r_busy)?"BSY":" ", |
(m_core->v__DOT__rgbctrl__DOT__dev_busy)?"D-BSY":" ", |
m_core->v__DOT__rgbctrl__DOT__r_len, |
m_core->v__DOT__rgbctrl__DOT__dev_len); |
|
printf("\n"); fflush(stdout); |
} m_last_writeout = writeout; |
#endif |
547,6 → 691,9
} |
|
int main(int argc, char **argv) { |
#ifdef OLEDSIM_H |
Gtk::Main main_instance(argc, argv); |
#endif |
Verilated::commandArgs(argc, argv); |
tb = new TESTBENCH; |
|
558,8 → 705,12
else |
tb->setsdcard("/dev/zero"); |
|
#ifdef OLEDSIM_H |
Gtk::Main::run(tb->m_oled); |
#else |
while(1) |
tb->tick(); |
#endif |
|
exit(0); |
} |
/openarty/trunk/bench/cpp/oledsim.cpp
0,0 → 1,531
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: oledsim.cpp |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: The goal of this module is very specifically to simulate the |
// PModOLEDrgb using a GTKMM controlled window. I'm doing this on |
// an Linux computer with X-Windows, although one GTKMM selling point is |
// that it should work in Windows as well. I won't vouch for that, as I |
// haven't tested under windows. |
// |
// Either way, this controller only implements *some* of the OLED commands. |
// There were just too many commands for me to be able to write them in the |
// short order that I needed to get a test up and running. Therefore, this |
// simulator will validate all commands and assure you they are valid |
// commands, but it will only respond to some. For specifics, see the |
// do_command() section below. |
// |
// You may notice a lot of assert() calls within this code. This is half |
// the purpose of the code: to verify that interactions, when the take |
// place, are valid. The sad problem and effect of this is simply that |
// when bugs are present, the error/warning messages are not that complete. |
// If you find yourself dealing with such an error, please feel free to |
// explain the assert better before asserting, and then send your |
// contributions back to me so that others can benefit from your work. |
// (Don't you love the GPL?) |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2015-2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
#include "oledsim.h" |
|
const int OLEDSIM::OLED_HEIGHT = 64, OLEDSIM::OLED_WIDTH = 96; |
|
const int MICROSECOND = 81, |
tMINRESET = 3 * MICROSECOND, // 3 uS |
tCYCLE = 13, // 150 * NANOSECOND, clock cycle time |
tAS = 4, // 40 * NANOSECOND, address setup time |
tAH = 4, // 40 * NANOSECOND, address hold time |
tCSS = 7, // 75 * NANOSECOND, chip select setup |
tCSH = 5, // 60 * NANOSECOND, chip select hold |
tCLKL = 7, // 75 * NANOSECOND, time the clock must be low |
tCLKH = 7; // 75 * NANOSECOND, time the clock must be high |
|
void OLEDSIM::on_realize() { |
Gtk::DrawingArea::on_realize(); |
|
// We'll be doing all of our drawing on an off-screen bit map. Here, |
// let's allocate that pixel map ... |
m_pix = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, |
OLED_WIDTH, OLED_HEIGHT); |
|
// and a graphics context to be used when drawing to it. |
m_gc = Cairo::Context::create(m_pix); |
|
// We'll start the pixel map filled with all black, as this is what |
// my device looks like when I'm not doing anything with it. |
m_gc->set_source_rgb(0.0,0.0,0.0); // Black |
m_gc->rectangle(0, 0, OLED_WIDTH, OLED_HEIGHT); |
m_gc->fill(); |
} |
|
void OLEDSIM::get_preferred_width_vfunc(int &min, int &nw) const { |
// GTKMM wants to know how big we want our window to be. |
// Let's request a window twice as big as we need, but insist that |
// it never be smaller than one pixel output per one pixel input. |
// |
min = OLED_WIDTH; |
nw = OLED_WIDTH * 2; |
} |
|
void OLEDSIM::get_preferred_height_vfunc(int &min, int &nw) const { |
// |
// Same thing as above, but this time for height, not width. |
// |
min = OLED_HEIGHT; |
nw = OLED_HEIGHT * 2; |
} |
|
void OLEDSIM::get_preferred_width_for_height_vfunc(int h, int &min, int &nw) const { |
min = OLED_WIDTH; |
int k = (h+(OLED_HEIGHT/2))/OLED_HEIGHT; |
if (k <= 0) |
k = 1; |
nw = OLED_WIDTH * k; |
} |
|
void OLEDSIM::get_preferred_height_for_width_vfunc(int w, int &min, int &nw) const { |
min = OLED_HEIGHT; |
int k = (w+(OLED_WIDTH/2))/OLED_WIDTH; |
if (k <= 0) |
k = 1; |
nw = OLED_HEIGHT * k; |
} |
|
/* |
* This is our simulation function. This is the function that gets called at |
* every tick of our controller within Verilator. At each tick (and not twice |
* per tick), the outputs are gathered and sent our way. Here, we just decode |
* the power and reset outputs, and send everything else to handle_io(). |
*/ |
void OLEDSIM::operator()(const int iopwr, const int rstn, const int dpwr, |
const int csn, const int sck, const int dcn, const int mosi) { |
if (!iopwr) { |
if (m_state != OLED_OFF) { |
m_state = OLED_OFF; |
clear_to(0.0); |
queue_draw_area(0,0,get_width(), get_height()); |
} |
assert(!dpwr); |
} else if (!rstn) { |
if (m_state != OLED_RESET) { |
m_state = OLED_RESET; |
m_locked = true; |
clear_to(0.1); |
m_reset_clocks = 0; |
queue_draw_area(0,0,get_width(), get_height()); |
} if (m_reset_clocks < tMINRESET) |
m_reset_clocks++; |
assert(csn); |
assert(sck); |
} else if (dpwr) { |
if (m_state != OLED_POWERED) { |
m_state = OLED_POWERED; |
queue_draw_area(0,0,get_width(), get_height()); |
if (!csn) { |
printf("OLED-ERR: CSN=%d, SCK=%d, DCN=%d, MOSI=%d, from %d,%d,%d\n", |
csn, sck, dcn, mosi, |
m_last_csn, m_last_sck, m_last_dcn); |
} |
assert(csn); // Can't power up with SPI active. |
} |
|
handle_io(csn, sck, dcn, mosi); |
} else { |
if (m_state != OLED_VIO) { |
m_state = OLED_VIO; |
queue_draw_area(0,0,OLED_WIDTH, OLED_HEIGHT); |
} |
handle_io(csn, sck, dcn, mosi); |
} |
} |
|
/* handle_io() |
* |
* We only enter this function if the I/O is powered up and the device is out |
* of reset. The device may (or may not) be on. Our purpose here is to decode |
* the SPI commands into a byte sequence, kept in m_data with a length given by |
* m_idx. Once a command has completed, we call do_command() to actually |
* process the values received, the arguments, etc. and do something with them. |
* |
*/ |
void OLEDSIM::handle_io(const int csn, const int sck, const int dcn, const int mosi) { |
if ((csn != m_last_csn)||(sck != m_last_sck)||(dcn != m_last_dcn)) |
printf("OLED: HANDLE-IO(%d,%d,%d,%d) @[%d]%d\n", |
csn, sck, dcn, mosi, m_idx, m_bitpos); |
if (csn) { |
// CSN is high when the chip isn't selected. |
if (!m_last_csn) { |
// If the chip was just selected, it then means that our |
// command just completed. Let's process it here. |
printf("OLED: Ending a command\n"); |
assert(m_idx > 0); |
assert((m_bitpos&7)==0); |
do_command(m_last_dcn, m_idx, m_data); |
|
m_bitpos = 0; |
m_idx = 0; |
for(int i=0; i<8; i++) |
m_data[i] = 0; |
assert(m_last_sck); |
} if (!sck) |
printf("OLED: CSN = %d, SCK = %d, DCN = %d, MOSI = %d, from %d, %d, %d\n", |
csn, sck, dcn, mosi, |
m_last_csn, m_last_sck, m_last_dcn); |
assert(sck); |
m_bitpos = 0; |
m_idx = 0; |
} else { |
if (m_last_csn) { |
assert((sck)&&(m_last_sck)); |
assert(m_last_sck); |
printf("OLED: Starting a command\n"); |
} |
|
/* |
if (m_last_dcn != dcn) { |
m_address_counts = 0; |
} m_address_counts++; |
*/ |
|
if ((sck)&&(!m_last_sck)) { |
m_bitpos++; |
m_data[m_idx] = (m_data[m_idx]<<1)|mosi; |
printf("OLED: Accepted bit: m_data[%d] = %02x\n", |
m_idx, m_data[m_idx]); |
if (m_bitpos >= 8) { |
m_idx++; |
m_bitpos &= 7; |
} |
assert(m_idx < 3+4+4); |
// assert(m_address_count > tCSS); |
} else if ((!sck)&&(m_last_sck)) { |
} |
} |
|
m_last_csn = csn; |
m_last_sck = sck; |
m_last_dcn = dcn; |
} |
|
void OLEDSIM::do_command(const int dcn, const int len, char *data) { |
assert(len > 0); |
assert(len <= 11); |
|
printf("OLED: RECEIVED CMD(%02x) ", data[0]&0x0ff); |
if (len > 1) { |
printf(" - "); |
for(int i=1; i<len-1; i++) |
printf("%02x:", data[i]&0x0ff); |
printf("%02x", data[len-1]&0x0ff); |
printf("\n"); |
} |
|
if (dcn) { |
// Do something with the pixmap |
double dr, dg, db; |
|
if (m_format == OLED_65kCLR) { |
int r, g, b; |
assert(len == 2); |
r = (data[0]>>3)&0x01f; |
g = ((data[0]<<3)&0x038)|((data[1]>>5)&0x07); |
b = ((data[1] )&0x01f); |
|
dr = r / 31.0; |
dg = g / 63.0; |
db = b / 31.0; |
} else { |
printf("OLED: UNSUPPORTED COLOR FORMAT!\n"); |
dr = dg = db = 0.0; |
} set_gddram(m_col, m_row, dr, dg, db); |
if (!m_vaddr_inc) { |
m_col++; |
if (m_col > m_col_end) { |
m_col = m_col_start; |
m_row++; |
if (m_row > m_row_end) |
m_row = m_row_start; |
} |
} else { |
m_row++; |
if (m_row > m_row_end) { |
m_row = m_row_start; |
m_col++; |
if (m_col > m_col_end) |
m_col = m_col_start; |
} |
} |
} else if (m_locked) { |
if ((len == 2)&&((data[0]&0x0ff) == 0x0fd)&&(data[1] == 0x12)) { |
m_locked = false; |
printf("OLED: COMMANDS UNLOCKED\n"); |
} else { |
printf("OLED: COMMAND IGNORED, IC LOCKED\n"); |
} |
} else { |
// Command word |
switch((data[0])&0x0ff) { |
case 0x15: // Setup column start and end address |
assert(len == 3); |
assert((data[1]&0x0ff) <= 95); |
assert((data[2]&0x0ff) <= 95); |
m_col_start = data[1]&0x0ff; |
m_col_end = data[2]&0x0ff; |
assert(m_col_end >= m_col_start); |
m_col = m_col_start; |
break; |
case 0x75: // Setup row start and end address |
assert(len == 3); |
assert((data[1]&0x0ff) <= 63); |
assert((data[2]&0x0ff) <= 63); |
assert(m_row_end >= m_row_start); |
m_row_start = data[1]&0x0ff; |
m_row_end = data[2]&0x0ff; |
break; |
case 0x81: // Set constrast for all color "A" segment |
assert(len == 2); |
break; |
case 0x82: // Set constrast for all color "B" segment |
assert(len == 2); |
break; |
case 0x83: // Set constrast for all color "C" segment |
assert(len == 2); |
break; |
case 0x87: // Set master current attenuation factor |
assert(len == 2); |
break; |
case 0x8a: // Set second pre-charge speed, color A |
assert(len == 2); |
break; |
case 0x8b: // Set second pre-charge speed, color B |
assert(len == 2); |
break; |
case 0x8c: // Set second pre-charge speed, color C |
assert(len == 2); |
break; |
case 0xa0: // Set driver remap and color depth |
assert(len == 2); |
m_vaddr_inc = (data[1]&1)?true:false; |
// m_fliplr = (data[1]&2)?true:false; |
if ((data[1] & 0x0c0)==0) |
m_format = OLED_256CLR; |
else if ((data[1] & 0x0c0)==0x40) |
m_format = OLED_65kCLR; |
// else if ((data[1] & 0x0c0)==0x80) |
// m_format = OLED_65kCLRTWO; |
|
break; |
case 0xa1: // Set display start line register by row |
assert(len == 2); |
break; |
case 0xa2: // Set vertical offset by com |
assert(len == 2); |
break; |
case 0xa4: // Set display mode |
case 0xa5: // Fallthrough |
case 0xa6: // Fallthrough |
case 0xa7: // Fallthrough |
assert(len == 1); |
break; |
case 0xa8: // Set multiplex ratio |
assert(len == 2); |
break; |
case 0xab: // Dim Mode setting |
assert(len == 6); |
break; |
case 0xad: |
assert(len == 2); |
assert((data[1]&0x0fe)==0x08e); |
break; |
case 0xac: |
case 0xae: |
case 0xaf: |
assert(len == 1); |
break; |
case 0xb0: // Power save mode |
assert((len == 2)&&((data[1] == 0x1a)||(data[1] == 0x0b))); |
break; |
case 0xb1: // Phase 1 and 2 period adjustment |
assert(len == 2); |
break; |
case 0xb3: // Displaky clock divider/oscillator frequency |
assert(len == 2); |
break; |
case 0xb8: // Set gray scale table |
assert(0 && "Gray scale table not implemented"); |
break; |
case 0xb9: // Enable Linear Gray Scale table |
assert(len == 1); |
break; |
case 0xbb: // Set pre-charge level |
assert(len == 2); |
break; |
case 0xbc: // NOP |
case 0xbd: // NOP |
assert(len == 1); |
case 0xbe: // Set V_COMH |
assert(len == 2); |
break; |
case 0xe3: // NOP |
assert(len == 1); |
break; |
case 0xfd: // Set command lock |
assert(len == 2); |
if (data[1] == 0x16) { |
m_locked = true; |
printf("OLED: COMMANDS NOW LOCKED\n"); |
} |
break; |
case 0x21: // Draw Line |
assert(len == 8); |
break; |
case 0x22: // Draw Rectangle |
assert(len == 11); |
break; |
case 0x23: // Copy |
assert(len == 7); |
break; |
case 0x24: // Dim Window |
assert(len == 5); |
break; |
case 0x25: // Clear Window |
assert(len == 5); |
break; |
case 0x26: // Fill Enable/Disable |
assert(len == 2); |
// if (data[0]&1) |
// m_drect_fills = 1; |
assert((data[1] & 0x10)==0); |
break; |
case 0x27: // Continuous horizontal and vertical scrolling setup |
assert(len == 6); |
break; |
case 0x2e: // Deactivate scrolling |
assert(len == 1); |
// m_scrolling = false; |
break; |
case 0x2f: // Activate scrolling |
assert(len == 1); |
// m_scrolling = true; |
break; |
default: |
printf("OLED: UNKNOWN COMMAND, data[0] = %02x\n", data[0] & 0x0ff); |
assert(0); |
break; |
} |
} |
} |
|
/* |
* set_gddram() |
* |
* Set graphics display DRAM. |
* |
* Here is the heart of drawing on the device, or at least pixel level drawing. |
* The device allows other types of drawing, such as filling rectangles and |
* such. Here, we just handle the setting of pixels. |
* |
* You'll note that updates to the drawing area are only queued if the device |
* is in powered mode. |
* |
* At some point, I may wish to implement scrolling. If/when that happens, |
* the GDDRAM will not be affected, but the area that needs to be redrawn will |
* be. Hence this routine will need to be adjusted at that time. |
*/ |
void OLEDSIM::set_gddram(const int col, const int row, |
const double dr, const double dg, const double db) { |
// Set our color to that given by the rgb (double) parameters. |
m_gc->set_source_rgb(dr, dg, db); |
|
printf("OLED: Setting pixel[%2d,%2d]\n", col, row); |
int drow; // dcol; |
drow = row + m_display_start_row; |
if (drow >= OLED_HEIGHT) |
drow -= OLED_HEIGHT; |
m_gc->rectangle(col, row, 1, 1); |
m_gc->fill(); |
|
if (m_state == OLED_POWERED) { |
// Need to adjust the invalidated area if scrolling is taking |
// place. |
double kw, kh; |
kw = get_width()/(double)OLED_WIDTH; |
kh = get_height()/(double)OLED_HEIGHT; |
queue_draw_area(col*kw, row*kh, (int)(kw+0.5), (int)(kh+0.5)); |
} |
} |
|
/* |
* clear_to() |
* |
* Clears the simulated device to a known grayscale value. Examples are |
* 0.0 for black, or 0.1 for a gray that is nearly black. Note that this |
* call does *not* invalidate our window. Perhaps it should, but for now that |
* is the responsibility of whatever function calls this function. |
*/ |
void OLEDSIM::clear_to(double v) { |
// How do we apply this to our pixmap? |
m_gc->set_source_rgb(v, v, v); |
m_gc->rectangle(0, 0, OLED_WIDTH, OLED_HEIGHT); |
m_gc->fill(); |
} |
|
bool OLEDSIM::on_draw(CONTEXT &gc) { |
gc->save(); |
if (m_state == OLED_POWERED) { |
// Scrolling will be implemented here |
gc->set_source(m_pix, 0, 0); |
gc->scale(get_width()/(double)OLED_WIDTH, |
get_height()/(double)OLED_HEIGHT); |
gc->paint(); |
} else { |
if ((m_state == OLED_VIO)||(m_state == OLED_RESET)) |
gc->set_source_rgb(0.1,0.1,0.1); // DARK gray |
else |
gc->set_source_rgb(0.0,0.0,0.0); // Black |
// gc->rectangle(0, 0, OLED_WIDTH, OLED_HEIGHT); |
gc->rectangle(0, 0, get_width(), get_height()); |
gc->fill(); |
} gc->restore(); |
|
return true; |
} |
|
OLEDWIN::OLEDWIN(void) { |
m_sim = new OLEDSIM(); |
m_sim->set_size_request(OLEDSIM::OLED_WIDTH, OLEDSIM::OLED_HEIGHT); |
set_border_width(0); |
add(*m_sim); |
show_all(); |
Gtk::Window::set_title(Glib::ustring("OLED Simulator")); |
} |
|
/openarty/trunk/bench/cpp/oledsim.h
0,0 → 1,128
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: oledsim.h |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: To simulate the interaction between the OLED board and my |
// logic. This simulator tries to read from the SPI generated |
// by the logic, verify that the SPI interaction is valid, and then |
// draws the OLED memory to the screen so you can see how the OLED |
// would work ... even without having an OLED connected. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2015-2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
#ifndef OLEDSIM_H |
#define OLEDSIM_H |
|
#include <gtkmm.h> |
#include <assert.h> |
|
#define OLED_OFF 1 |
#define OLED_RESET 2 |
#define OLED_VIO 3 |
#define OLED_POWERED 4 |
#define OLED_65kCLR 0 |
#define OLED_256CLR 1 |
|
class OLEDSIM : public Gtk::DrawingArea { |
public: |
typedef Cairo::RefPtr<Cairo::Context> CAIROGC; |
typedef const Cairo::RefPtr<Cairo::Context> CONTEXT; |
typedef Cairo::RefPtr<Cairo::ImageSurface> CAIROIMG; |
|
private: |
CAIROIMG m_pix; |
CAIROGC m_gc; |
|
int m_state, m_reset_clocks; // , m_address_counts; |
|
int m_last_csn, m_last_sck, m_last_dcn; |
|
int m_idx, m_bitpos; |
char m_data[16]; |
|
bool m_vaddr_inc, m_locked; |
int m_format; |
int m_col_start, m_col_end, m_col; |
int m_row_start, m_row_end, m_row, m_display_start_row; |
|
|
void do_command(const int dcn, const int len, char *data); |
void handle_io(const int, const int, const int, const int); |
void clear_to(const double v); |
void set_gddram(const int, const int, const double, const double, const double); |
public: |
static const int OLED_HEIGHT, OLED_WIDTH; |
|
OLEDSIM(void) : Gtk::DrawingArea() { |
|
set_has_window(true); |
Widget::set_can_focus(false); |
set_size_request(OLED_WIDTH, OLED_HEIGHT); |
|
m_state = OLED_OFF; |
m_locked = true; |
m_last_csn = 1; |
m_last_sck = 1; |
m_last_dcn = 1; |
m_format = OLED_65kCLR; |
m_display_start_row = 0; |
m_vaddr_inc = false; |
m_col = 0; m_row = 0; |
m_col_start = 0; m_row_start = 0; |
m_col_end = 95; m_row_end = 63; |
} |
|
void get_preferred_width_vfunc(int &min, int &nw) const; |
void get_preferred_height_vfunc(int &min, int &nw) const; |
void get_preferred_height_for_width_vfunc(int w, int &min, int &nw) const; |
void get_preferred_width_for_height_vfunc(int h, int &min, int &nw) const; |
|
virtual void on_realize(); |
virtual bool on_draw(CONTEXT &gc); |
void operator()(const int iopwr, const int rstn, const int dpwr, |
const int csn, const int sck, const int dcn, const int mosi); |
}; |
|
class OLEDWIN : public Gtk::Window { |
private: |
OLEDSIM *m_sim; |
|
public: |
OLEDWIN(void); |
~OLEDWIN(void) { delete m_sim; } |
void operator()(int iopwr, int rstn, int dpwr, |
int sck, int csn, int dcn, int mosi) { |
(*m_sim)(iopwr, rstn, dpwr, sck, csn, dcn, mosi); |
} |
}; |
|
#endif |
/openarty/trunk/bench/cpp/sdspisim.cpp
378,9 → 378,10
} m_block_buf[0] = 0x0fe; |
m_blklen = 512; // (1<<m_csd[5]); |
if (m_dev) |
fread(&m_block_buf[1], m_blklen, 1, m_dev); |
m_blklen = fread(&m_block_buf[1], m_blklen, 1, m_dev); |
else |
memset(&m_block_buf[1], 0, m_blklen); |
m_blklen = (m_blklen != 512) ? 512 : m_blklen; |
add_block_crc(m_blklen, m_block_buf); |
|
m_blkdly = 60; |
/openarty/trunk/bench/cpp/sdspisim.h
42,6 → 42,8
#ifndef SDSPISIM_H |
#define SDSPISIM_H |
|
#include <stdio.h> |
|
typedef enum eRESET_STATES { |
SDSPI_POWERUP_RESET, |
SDSPI_CMD0_IDLE, |
/openarty/trunk/rtl/bigadd.v
36,31 → 36,55
// |
// |
module bigadd(i_clk, i_sync, i_a, i_b, o_r, o_sync); |
parameter NCLOCKS = 1; |
input i_clk, i_sync; |
input [63:0] i_a, i_b; |
output reg [63:0] o_r; |
output reg o_sync; |
output wire [63:0] o_r; |
output wire o_sync; |
|
reg r_sync, r_pps; |
reg [31:0] r_hi_a, r_hi_b, r_low; |
generate |
if (NCLOCKS == 0) |
begin |
assign o_sync= i_sync; |
assign o_r = i_a + i_b; |
end else if (NCLOCKS == 1) |
begin |
reg r_sync; |
reg [63:0] r_out; |
always @(posedge i_clk) |
r_sync <= i_sync; |
always @(posedge i_clk) |
r_out <= i_a+i_b; |
|
initial r_sync = 1'b0; |
always @(posedge i_clk) |
r_sync <= i_sync; |
assign o_sync = r_sync; |
assign o_r = r_out; |
end else // if (NCLOCKS == 2) |
begin |
reg r_sync, r_pps; |
reg [31:0] r_hi, r_low; |
|
always @(posedge i_clk) |
{ r_pps, r_low } <= i_a[31:0] + i_b[31:0]; |
always @(posedge i_clk) |
r_hi_a <= i_a[63:32]; |
always @(posedge i_clk) |
r_hi_b <= i_b[63:32]; |
reg f_sync; |
reg [63:0] f_r; |
|
initial o_sync = 1'b0; |
always @(posedge i_clk) |
o_sync <= r_sync; |
always @(posedge i_clk) |
o_r[31:0] <= r_low; |
always @(posedge i_clk) |
o_r[63:32] <= r_hi_a + r_hi_b + { 31'h00, r_pps }; |
initial r_sync = 1'b0; |
always @(posedge i_clk) |
r_sync <= i_sync; |
|
always @(posedge i_clk) |
{ r_pps, r_low } <= i_a[31:0] + i_b[31:0]; |
always @(posedge i_clk) |
r_hi <= i_a[63:32] + i_b[63:32]; |
|
initial f_sync = 1'b0; |
always @(posedge i_clk) |
f_sync <= r_sync; |
always @(posedge i_clk) |
f_r[31:0] <= r_low; |
always @(posedge i_clk) |
f_r[63:32] <= r_hi + { 31'h00, r_pps }; |
|
assign o_sync = f_sync; |
assign o_r = f_r; |
end endgenerate |
|
endmodule |
/openarty/trunk/rtl/bigsmpy.v
4,8 → 4,16
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: |
// Purpose: To multiply two 32-bit numbers into a 64-bit number. We try |
// to use the hardware multiply to do this, but just what kind of |
// hardware multiply is actually available ... can be used to determine |
// how many clocks to take. |
// |
// If you look at the algorithm below, it's actually a series of a couple |
// of independent algorithms dependent upon the parameter NCLOCKS. If your |
// timing through here becomes a problem, set NCLOCKS to a higher number |
// and see if that doesn't help things. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
36,7 → 44,7
// |
// |
module bigsmpy(i_clk, i_sync, i_sgn, i_a, i_b, o_r, o_sync); |
parameter CLOCKS = 1; |
parameter NCLOCKS = 1; |
input i_clk, i_sync, i_sgn; |
input [31:0] i_a, i_b; |
output reg [63:0] o_r; |
43,7 → 51,7
output reg o_sync; |
|
generate |
if (CLOCKS == 1) |
if (NCLOCKS == 1) |
begin |
wire signed [31:0] w_sa, w_sb; |
wire [31:0] w_ua, w_ub; |
62,15 → 70,18
o_r <= w_ua * w_ub; |
end |
|
end else if (CLOCKS == 2) |
end else if (NCLOCKS == 2) |
begin |
reg r_sync; |
reg signed [31:0] r_sa, r_sb; |
wire [31:0] w_ua, w_ub; |
|
initial r_sync = 1'b0; |
always @(posedge i_clk) |
begin |
r_sa = i_a; |
r_sb = i_b; |
r_sync <=i_sync; |
r_sa <= i_a; |
r_sb <= i_b; |
end |
|
assign w_ua = r_sa; |
78,7 → 89,7
|
always @(posedge i_clk) |
begin |
o_sync <= i_sync; |
o_sync <= r_sync; |
if (i_sgn) |
o_r <= r_sa * r_sb; |
else |
86,7 → 97,7
end |
|
|
end else if (CLOCKS == 5) |
end else if (NCLOCKS == 5) |
begin |
// |
// A pipeline, shift register, to track our |
/openarty/trunk/rtl/bigsub.v
4,8 → 4,15
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: |
// Purpose: To subtract two 64-bit numbers, while maintaining |
// synchronization to whatever purpose these numbers had |
// originally. For this reason, there is an i_sync input and an o_sync |
// output. If i_sync is true with a particular set of data, o_sync will |
// then be true when that data is placed on the output. |
// |
// If we needed to slow this down even more, I suppose we could register |
// the inputs before we used them ... |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
36,31 → 43,60
// |
// |
module bigsub(i_clk, i_sync, i_a, i_b, o_r, o_sync); |
parameter NCLOCKS = 1; |
input i_clk, i_sync; |
input [63:0] i_a, i_b; |
output reg [63:0] o_r; |
output reg o_sync; |
output wire [63:0] o_r; |
output wire o_sync; |
|
reg r_sync, r_pps; |
reg [31:0] r_hi_a, r_hi_b, r_low; |
generate |
if (NCLOCKS == 0) |
begin |
assign o_sync= i_sync; |
assign o_r = i_a - i_b; |
end else if (NCLOCKS == 1) |
begin |
reg r_sync; |
reg [63:0] r_out; |
always @(posedge i_clk) |
r_sync <= i_sync; |
always @(posedge i_clk) |
r_out <= i_a - i_b; |
|
initial r_sync = 1'b0; |
always @(posedge i_clk) |
r_sync <= i_sync; |
assign o_sync = r_sync; |
assign o_r = r_out; |
end else // if (NCLOCKS == 2) |
begin |
reg r_sync, r_pps; |
reg [31:0] r_hi, r_low; |
|
always @(posedge i_clk) |
{ r_pps, r_low } <= i_a[31:0] + ({1'b1,~i_b[31:0]}) + 1'b1; |
always @(posedge i_clk) |
r_hi_a <= i_a[63:32]; |
always @(posedge i_clk) |
r_hi_b <= ~i_b[63:32]; |
reg [63:0] f_r; |
reg f_sync; |
|
initial o_sync = 1'b0; |
always @(posedge i_clk) |
o_sync <= r_sync; |
always @(posedge i_clk) |
o_r[31:0] <= r_low; |
always @(posedge i_clk) |
o_r[63:32] <= r_hi_a + r_hi_b + { 31'h00, r_pps }; |
wire [63:0] i_b_n; |
assign i_b_n = ~i_b; |
|
initial r_sync = 1'b0; |
always @(posedge i_clk) |
r_sync <= i_sync; |
|
always @(posedge i_clk) |
{ r_pps, r_low } <= i_a[31:0] + i_b_n[31:0] + 1'b1; |
always @(posedge i_clk) |
r_hi <= i_a[63:32] + i_b_n[63:32]; |
|
initial f_sync = 1'b0; |
always @(posedge i_clk) |
f_sync <= r_sync; |
always @(posedge i_clk) |
f_r[31:0] <= r_low; |
always @(posedge i_clk) |
f_r[63:32] <= r_hi + { 31'h00, r_pps }; |
|
assign o_sync = f_sync; |
assign o_r = f_r; |
|
end endgenerate |
|
endmodule |
|
/openarty/trunk/rtl/builddate.v
38,4 → 38,4
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
`define DATESTAMP 32'h20161018 |
`define DATESTAMP 32'h20161024 |
/openarty/trunk/rtl/busmaster.v
50,6 → 50,9
`define FLASH_ACCESS |
`define SDRAM_ACCESS |
`define GPS_CLOCK |
`ifdef VERILATOR |
`define GPSTB |
`endif |
// UART_ACCESS and GPS_UART have both been placed within fastio |
// `define UART_ACCESS |
// `define GPS_UART |
656,8 → 659,8
wire [3:0] w_led; |
wire rtc_ppd; |
fastio #( |
.AUXUART_SETUP(30'hd705), // 115200 Baud, 8N1, from 81.25M |
.GPSUART_SETUP(30'hd8464), // 9600 Baud, 8N1 |
.AUXUART_SETUP(30'd705), // 115200 Baud, 8N1, from 81.25M |
.GPSUART_SETUP(30'd8464), // 9600 Baud, 8N1 |
.EXTRACLOCK(0) |
) runio(i_clk, i_sw, i_btn, |
w_led, o_clr_led0, o_clr_led1, o_clr_led2, o_clr_led3, |
665,7 → 668,7
wb_cyc, (io_sel)&&(wb_stb), wb_we, wb_addr[4:0], |
wb_data, io_ack, io_stall, io_data, |
rtc_ppd, |
bus_err_addr, master_ints, w_interrupt, |
bus_err_addr, gps_now[63:32], gps_step[47:16], master_ints, w_interrupt, |
board_ints); |
assign { gpio_int, auxrx_int, auxtx_int, gpsrx_int, sw_int, btn_int } = board_ints; |
|
/openarty/trunk/rtl/enetctrl.v
49,7 → 49,8
o_wb_ack, o_wb_stall, o_wb_data, |
o_mdclk, o_mdio, i_mdio, o_mdwe, |
o_debug); |
parameter CLKBITS=3; // = 3 for 200MHz source clock, 2 for 100 MHz |
parameter CLKBITS=3, // = 3 for 200MHz source clock, 2 for 100 MHz |
PHYADDR = 5'h01; |
input i_clk, i_rst; |
input i_wb_cyc, i_wb_stb, i_wb_we; |
input [4:0] i_wb_addr; |
63,9 → 64,7
// |
output wire [31:0] o_debug; |
// |
parameter PHYADDR = 5'h01; |
|
|
reg read_pending, write_pending; |
reg [4:0] r_addr; |
reg [15:0] read_reg, write_reg, r_data; |
/openarty/trunk/rtl/fastio.v
43,15 → 43,18
o_clr_led0, o_clr_led1, o_clr_led2, o_clr_led3, |
// Board level PMod I/O |
i_aux_rx, o_aux_tx, o_aux_cts, i_gps_rx, o_gps_tx, |
// i_gpio, o_gpio, |
`ifdef USE_GPIO |
i_gpio, o_gpio, |
`endif |
// Wishbone control |
i_wb_cyc, i_wb_stb, i_wb_we, i_wb_addr, |
i_wb_data, o_wb_ack, o_wb_stall, o_wb_data, |
// Cross-board I/O |
i_rtc_ppd, i_buserr, i_other_ints, o_bus_int, o_board_ints); |
i_rtc_ppd, i_buserr, i_gps_now, i_gps_step, i_other_ints, o_bus_int, o_board_ints); |
parameter AUXUART_SETUP = 30'd1736, // 115200 baud from 200MHz clk |
GPSUART_SETUP = 30'd20833, // 9600 baud from 200MHz clk |
EXTRACLOCK = 1; // Do we need an extra clock to process? |
EXTRACLOCK = 1, // Do we need an extra clock to process? |
NGPI=0, NGPO=0; // Number of GPIO in and out wires |
input i_clk; |
// Board level I/O |
input [3:0] i_sw; |
71,9 → 74,11
input i_gps_rx; |
output wire o_gps_tx; |
// |
`ifdef USE_GPIO |
// GPIO |
// input [(NGPI-1):0] i_gpio; |
// output reg [(NGPO-1):0] o_gpio; |
input [(NGPI-1):0] i_gpio; |
output reg [(NGPO-1):0] o_gpio; |
`endif |
// |
// Wishbone inputs |
input i_wb_cyc, i_wb_stb, i_wb_we; |
87,6 → 92,8
input i_rtc_ppd; |
// Address of the last bus error |
input [31:0] i_buserr; |
// The current time, as produced by the GPS tracking processor |
input [31:0] i_gps_now, i_gps_step; |
// |
// Interrupts -- both the output bus interrupt, as well as those |
// internally generated interrupts which may be used elsewhere |
151,7 → 158,10
reg [31:0] pwr_counter; |
initial pwr_counter = 32'h00; |
always @(posedge i_clk) |
pwr_counter <= pwr_counter+32'h001; |
if (pwr_counter[31]) |
pwr_counter[30:0] <= pwr_counter[30:0] + 31'h001; |
else |
pwr_counter[31:0] <= pwr_counter[31:0] + 31'h001; |
|
// |
// BTNSW |
207,7 → 217,15
// when any of the inputs changes. (Sorry, which input isn't (yet) |
// selectable.) |
// |
wire [31:0] gpio_data; |
`ifdef USE_GPIO |
wbgpio #(NIN, NOUT) |
gpioi(i_clk, w_wb_cyc, (w_wb_stb)&&(w_wb_addr == 5'hd), 1'b1, |
w_wb_data, gpio_data, i_gpio, o_gpio, gpio_int); |
`else |
assign gpio_data = 32'h00; |
assign gpio_int = 1'b0; |
`endif |
|
// |
// AUX (UART) SETUP |
416,7 → 434,7
end |
always @(posedge i_clk) |
if(((i_wb_stb)&&(~i_wb_we)&&(i_wb_addr == 5'h10))||(gpsrx_stb)) |
r_gpsrx_data[8] <= gpsrx_stb; |
r_gpsrx_data[8] <= !gpsrx_stb; |
assign gpsrx_data = { 20'h00, r_gpsrx_data }; |
assign gpsrx_int = r_gpsrx_data[8]; |
|
459,11 → 477,13
5'h0a: o_wb_data <= w_clr_led2; |
5'h0b: o_wb_data <= w_clr_led3; |
5'h0c: o_wb_data <= date_data; |
// 5'h0d: o_wb_data <= gpio_data; |
5'h0d: o_wb_data <= gpio_data; |
5'h0e: o_wb_data <= auxrx_data; |
5'h0f: o_wb_data <= auxtx_data; |
5'h10: o_wb_data <= gpsrx_data; |
5'h11: o_wb_data <= gpstx_data; |
5'h12: o_wb_data <= i_gps_now; |
5'h13: o_wb_data <= i_gps_step; |
// 5'hf: UART_SETUP |
// 4'h6: GPIO |
// ?? : GPS-UARTRX |
/openarty/trunk/rtl/gpsclock.v
98,6 → 98,10
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
// `define DEBUG |
// |
module gpsclock(i_clk, i_rst, i_pps, o_pps, o_led, |
i_wb_cyc_stb, i_wb_we, i_wb_addr, i_wb_data, |
o_wb_ack, o_wb_stall, o_wb_data, |
149,7 → 153,8
// our data is valid during those handful. |
// |
// Timing |
reg err_tick, mpy_aux, mpy_sync_two, delay_step_clk; |
reg err_tick, shift_tick, config_tick, mpy_aux, mpy_sync_two, |
delay_step_clk, step_carry_tick; |
wire sub_tick, fltr_tick; |
|
// |
162,7 → 167,10
// an earlier clock. |
// |
// Tracking |
reg [(RW-1):0] count_correction, pre_count_correction; |
reg config_filter_errors; |
reg [(RW-1):0] pre_count_correction, r_count_correction, |
r_filtered_err; |
wire [(RW-1):0] count_correction; |
reg [(HRW-1):0] step_correction; |
reg [(HRW-1):0] delayed_step_correction, delayed_step; |
reg signed [(HRW-1):0] mpy_input; |
178,8 → 186,12
// |
// |
// |
// DEFAULT_STEP = 64'h0000_0034_dc73_67da, // 2^64 / 100 MHz |
// 28'h34d_c736 << 8, and hence we have 32'h834d_c736 |
// DEFAULT_STEP = 64'h0000_0034_dc73_67da, // 2^64 / 81.25 MHz |
// = 28'hd371cd9 << (20-10), and hence we have 32'had37_1cd9 |
// Other useful values: |
// 32'had6bf94d // 80MHz |
// 32'haabcc771 // 100MHz |
// 32'hbd669d0e // 160.5MHz |
initial r_def_step = DEFAULT_STEP; |
always @(posedge i_clk) |
pre_step <= { 16'h00, |
191,6 → 203,8
reg wb_write; |
reg [1:0] r_wb_addr; |
reg [31:0] r_wb_data; |
reg [7:0] lost_ticks; |
initial lost_ticks = 0; |
always @(posedge i_clk) |
wb_write <= (i_wb_cyc_stb)&&(i_wb_we); |
always @(posedge i_clk) |
200,13 → 214,20
assign wb_data = r_wb_data; |
assign wb_addr = r_wb_addr; |
|
initial config_filter_errors = 1'b1; |
initial r_alpha = 6'h2; |
initial r_beta = 32'h14bda12f; |
initial r_gamma = 32'h1f533ae8; |
initial new_config = 1'b0; |
always @(posedge i_clk) |
if (wb_write) |
begin |
new_config = 1'b1; |
new_config <= 1'b1; |
case(wb_addr) |
2'b00: r_alpha <= wb_data[5:0]; |
2'b00: begin |
r_alpha <= wb_data[5:0]; |
config_filter_errors <= (wb_data[5:0] != 6'h0); |
end |
2'b01: r_beta <= wb_data; |
2'b10: r_gamma <= wb_data; |
2'b11: r_def_step <= wb_data; |
214,10 → 235,10
// r_defstep <= i_wb_data; |
endcase |
end else |
new_config = 1'b0; |
new_config <= 1'b0; |
always @(posedge i_clk) |
case (i_wb_addr) |
2'b00: o_wb_data <= { 26'h00, r_alpha }; |
2'b00: o_wb_data <= { lost_ticks, 18'h00, r_alpha }; |
2'b01: o_wb_data <= r_beta; |
2'b10: o_wb_data <= r_gamma; |
2'b11: o_wb_data <= r_def_step; |
241,7 → 262,7
// |
// |
always @(posedge i_clk) |
begin |
begin // This will delay our resulting time by a known 2 clock ticks |
pps_d <= i_pps; |
ck_pps <= pps_d; |
lst_pps <= ck_pps; |
248,25 → 269,41
end |
|
// Provide a touch of debounce protection ... equal to about |
// one quarter of a second. |
reg [(RW-3):0] tick_enable_counter; |
wire [(RW-1):0] w_tick_enable_sum; |
wire w_tick_enable, w_tick_enable_unused; |
bigadd enabler(i_clk, 1'b0, o_step, { 2'b0, tick_enable_counter }, |
w_tick_enable_sum, w_tick_enable_unused); |
// one quarter of a second. This is a coarse predictor, however, |
// since it uses only the top 32-bits of the step. |
// |
// Here's the idea: on any tick, we start a 32-bit counter, stepping |
// unevenly by o_step[61:30] at each tick. Once the counter crosses |
// zero, we stop counting and we enable the clock tick. Since the |
// counter should overflow 4x per second (assuming our clock rate is |
// less than 16GHz), we should be good to go. Oh, and we also round |
// our step up by one ... to guarantee that we always end earlier than |
// designed, rather than ever later. |
// |
wire w_tick_enable; |
reg [31:0] tick_enable_counter; |
reg tick_enable_carry; |
initial tick_enable_carry = 0; |
initial tick_enable_counter = 0; |
always @(posedge i_clk) |
begin |
if (tick) |
tick_enable_counter <= 0; |
else if (|w_tick_enable_sum[(RW-1):(RW-2)]) |
tick_enable_counter <= {(RW-2){1'b1}}; |
if ((ck_pps)&&(~lst_pps)) |
{ tick_enable_carry, tick_enable_counter } <= 0; |
else if (tick_enable_carry) |
tick_enable_counter <= 32'hffff_ffff; |
else |
tick_enable_counter <= w_tick_enable_sum[(RW-3):0]; |
{tick_enable_carry, tick_enable_counter} |
<= o_step[(RW-3):(RW-34)] |
+ tick_enable_counter + 1'b1; |
end |
assign w_tick_enable = tick_enable_counter[(RW-3)]; |
assign w_tick_enable = tick_enable_carry; |
|
assign tick= (ck_pps)&&(~lst_pps)&&(w_tick_enable); |
always @(posedge i_clk) |
if (wb_write) |
lost_ticks <= 8'h00; |
else if ((ck_pps)&&(~lst_pps)&&(!w_tick_enable)) |
lost_ticks <= lost_ticks+1'b1; |
assign o_dbg[0] = tick; |
assign o_dbg[1] = w_tick_enable; |
|
277,17 → 314,53
// of the second if we are in tracking mode. The 'o_pps' signal is |
// generated from the carry/overflow of the o_count addition. |
// |
// The output of this loop, both o_pps and o_count, is the current |
// subsecond time as determined by this clock. |
// |
// |
reg cnt_carry; |
reg [31:0] p_count; |
initial o_count = 0; |
initial o_pps = 1'b0; |
always @(posedge i_clk) |
`ifndef USE_THE_OLD_CODE |
begin |
// Very simple: we add the count correction, which is given by |
// a pre-determined sum of the step and any error, to our |
// "count" at every clock tick. If this ever overflows, the |
// overflow or carry is our PPS signal. Unlike the last time |
// we built this logic, here we acknowledge that the count |
// correction can never be negative. As a result, we have no |
// o_pps suppression. |
{ cnt_carry, p_count } <= p_count[31:0] + r_count_correction[31:0]; |
{ o_pps, o_count[63:32] } <= o_count[63:32] |
+ r_count_correction[63:32] |
+ { 31'h00, cnt_carry }; |
if (r_count_correction[(RW-1)]) |
o_pps <= 1'b0; |
// Delay the bottom bits of o_count by one clock, so that they |
// now match up with the top bits. |
o_count[31:0] <= p_count; |
end |
`else |
if ((o_tracking)&&(tick)) |
begin |
{ cnt_carry, p_count } <= p_count[31:0] + count_correction[31:0]; |
// Save the carry to be applied at the next clock, so |
// that we never have to do more than a 32-bit add. |
// (well, okay, a 33-bit add ...) |
// |
// The count_correction value here is really our step, |
// plus a value determined from our filter loop. |
{ cnt_carry, p_count } |
<= p_count[31:0] + count_correction[31:0]; |
// |
// On the second clock, we add the high order bits |
// together, and possibly get a carry. We use this |
// carry as our o_pps output. |
if (~count_correction[(RW-1)]) |
begin |
// Here, we need to correct by jumping forward. |
// |
// Note that we don't create an o_pps just |
// because the gps_pps states that there should |
// be one. Instead, we hold to the normal |
294,14 → 367,19
// means of business. At the tick, however, |
// we add both the step and the correction to |
// the current count. |
{ o_pps, o_count[63:32] } <= o_count[63:32] +count_correction[63:32]+ { 31'h00, cnt_carry }; |
{ o_pps, o_count[63:32] } <= o_count[63:32] |
+ count_correction[63:32] |
+ { 31'h00, cnt_carry }; |
end else begin |
// If the count correction is negative, it means |
// we need to go backwards. In this case, |
// there shouldn't be any o_pps, least we get |
// two of them. |
// two of them. So ... we skip an output PPS, |
// knowing the correct PPS is coming next. |
o_pps <= 1'b0; |
o_count[63:32] <= o_count[63:32] + count_correction[63:32]; |
o_count[63:32] <= o_count[63:32] |
+ count_correction[63:32] |
+ { 31'h00, cnt_carry }; |
end |
end else begin |
// The difference between count_correction and |
310,15 → 388,44
// correction. Likewise, even if we are, we only |
// want to use it on the ticks. |
{ cnt_carry, p_count } <= p_count + o_step[31:0]; |
{ o_pps, o_count[63:32] } <= o_count[63:32] + o_step[63:32]; |
{ o_pps, o_count[63:32] } <= o_count[63:32] |
+ o_step[63:32] |
+ { 31'h00, cnt_carry}; |
end |
|
// Here we delay the bottom bits of o_count by one clock, so that they |
// now match up with the top bits. |
always @(posedge i_clk) |
o_count[31:0] <= p_count; |
`endif |
|
|
|
// |
// The step |
// |
// The counter above is only as good as the step size given to it. |
// Here, we work with that step size, and apply a correction based |
// upon the last tick. The idea in the step correction is that we |
// wish to add this step correction to our step amount. We have one |
// clock tick (i.e. one second) from when we make our error measurement |
// until we must apply the correction. |
// |
// The correction, calculated far below, will be placed into the value |
// |
// step_correction |
// |
// We just need to figure out what the new step will be here, given |
// that correction. |
// |
reg [(HRW):0] step_correction_plus_carry; |
always @(posedge i_clk) |
step_correction_plus_carry = step_correction + { 31'h00, delayed_carry }; |
if (step_carry_tick) |
step_correction_plus_carry |
<= { step_correction[(HRW-1)],step_correction } |
+ { 32'h00, delayed_carry }; |
|
|
wire w_step_correct_unused; |
wire [(RW-1):0] new_step; |
bigadd getnewstep(i_clk, 1'b0, o_step, |
328,17 → 435,23
|
reg delayed_carry; |
initial delayed_carry = 0; |
initial o_step = 64'h002af31dc461; |
|
wire [31:0] initial_default_step = DEFAULT_STEP; |
// initial o_step = 64'h002af31dc461; // 100MHz |
initial o_step = { 16'h00, (({ initial_default_step[27:0], 20'h00 }) |
>> initial_default_step[31:28])}; |
always @(posedge i_clk) |
if ((i_rst)||(dly_config)) |
o_step <= pre_step; |
`ifndef DEBUG |
else if ((o_tracking) && (tick)) |
o_step <= new_step; |
o_step <= new_step; |
`endif |
|
initial delayed_step = 0; |
always @(posedge i_clk) |
if ((i_rst)||(dly_config)) |
delayed_step <= 0; |
{ delayed_carry, delayed_step } <= 0; |
else if (delay_step_clk) |
{ delayed_carry, delayed_step } <= delayed_step |
+ delayed_step_correction; |
360,15 → 473,44
// and is near zero, the o_err is then the negation of this when the |
// tick does show up. |
// |
|
// Note that our measured error, o_err, will be valid one tick *after* |
// the top of the second tick (tick). |
// |
// ONE_SECOND in this equation is set to 2^64, or zero during |
// implementation. This makes the 64-bit subtract ... doable. |
initial o_err = 0; |
always @(posedge i_clk) |
if (tick) |
o_err <= ONE_SECOND - o_count; |
|
// Because o_err is delayed one clock from the tick, we create a strobe |
// capturing when the error is valid. |
initial err_tick = 1'b0; |
always @(posedge i_clk) |
err_tick <= tick; |
|
// |
// We are now going to filter this error, via: |
// |
// filtered_err <= o_err>>r_alpha + (1-1>>r_alpha)*filtered_err |
// |
// This implements a very simple recursive averager. |
// |
// You may not recognize it below, though, since we have simplified the |
// equation into: |
// |
// filtered_err <= filtered_err + (o_err - filtered_err)>>r_alpha |
// |
|
// On some architectures, adding and subtracting 64'bit number cannot |
// be done in a single clock tick. On these architectures, we may |
// take a couple clocks. Here, the "bigsub" module captures what it |
// takes to subtract 64-bit numbers. |
// |
// Either way, here we subtract our error from our filtered_err. This |
// is the first step of the recursive average--figuring out what value |
// we are going to apply to the recursive average. |
bigsub suberri(i_clk, err_tick, o_err, |
filtered_err, filter_sub_count, sub_tick); |
|
378,67 → 520,148
// Why is because Verilator decides that these values are unsigned, |
// and so despite being told that they are signed values, verilator |
// doesn't sign extend them upon shifting. Put together, |
// { shift_hi[low-bits], shift_lo[low-bits] } make up a full RW |
// { shift_hi[low-bits], shift_lo[low-bits] } make up a full RW (i.e.64) |
// bit correction factor. |
reg signed [(RW-1):0] shift_hi, shift_lo; |
always @(posedge i_clk) |
begin |
shift_hi <= { {(HRW){filter_sub_count[(RW-1)]}}, |
shift_tick<= sub_tick; |
|
// Because we do our add (below) on *every* clock tick, we must |
// make certain that the value we add to it is only non-zero |
// on one clock tick. Hence, we wait for sub_tick to be true, |
// set the value, and otherwise keep it clear. |
if (sub_tick) |
begin |
shift_hi <= { {(HRW){filter_sub_count[(RW-1)]}}, |
filter_sub_count[(RW-1):HRW] }>>r_alpha; |
shift_lo <= filter_sub_count[(RW-1):0]>>r_alpha; |
shift_lo <= filter_sub_count[(RW-1):0]>>r_alpha; |
end else begin |
shift_hi <= 0; |
shift_lo <= 0; |
end |
end |
|
bigadd adderr(i_clk, sub_tick, filtered_err, |
// You may notice, it's now been several clocks since the top of the |
// second. Still, filtered_err hasn't changed. It only changes once |
// a second based upon the results of these computations. Here we take |
// another clock (or two) to figure out the next step in our algorithm. |
bigadd adderr(i_clk, shift_tick, r_filtered_err, |
{ shift_hi[(HRW-1):0], shift_lo[(HRW-1):0] }, |
filtered_err, fltr_tick); |
/* |
|
always @(posedge i_clk) |
if ((o_tracking)&&(sub_tick)) |
filtered_err<= filtered_err |
+ { shift_hi[(HRW-1):0], shift_lo[(HRW-1):0] }; |
*/ |
if (fltr_tick) |
r_filtered_err <= filtered_err; |
else if ((dly_config)||(!o_tracking)) |
r_filtered_err <= 0; |
|
reg [(RW-1):0] r_mpy_err; |
always @(posedge i_clk) |
if (fltr_tick) |
if (err_tick) |
r_mpy_err <= (config_filter_errors) ? r_filtered_err : o_err; |
always @(posedge i_clk) |
config_tick <= err_tick; |
|
// Okay, so we've gone from our original tick to the err_tick, the |
// sub_tick, the shift_tick, and now the fltr_tick. |
// |
// We want to multiply our filtered error by one of two constants. |
// Here, we set up those constants. We use the fltr_tick as a strobe, |
// but also to select one particular constant. When the multiply comes |
// back, and the strobe is true, we'll know that the constant going |
// in with the strobe on (r_beta) corresponds to the product coming out, |
// and that the second product we need will be on the next clock. |
always @(posedge i_clk) |
if (err_tick) |
mpy_input <= r_beta; |
else |
mpy_input <= r_gamma; |
always @(posedge i_clk) |
mpy_aux <= fltr_tick; |
mpy_aux <= err_tick; |
|
// |
// The multiply |
// |
// Remember, we take our filtered error and multiply it by a constant |
// to determine our step correction and another constant to determine |
// our count correction? We'll ... here's that multiply. |
// |
wire mpy_sync; |
wire [(RW-1):0] mpy_out; |
initial mpy_sync_two = 1'b0; |
// Sign extend all inputs to RW bits |
wire signed [(RW-1):0] w_mpy_input, w_mpy_err; |
assign w_mpy_input = { {(RW-DW){mpy_input[(DW-1)]}}, mpy_input[(DW-1):0]}; |
assign w_mpy_err = { {(RW-NPW){filtered_err[(RW-1)]}}, filtered_err[(RW-1):(RW-NPW)]}; |
bigsmpy mpyi(i_clk, mpy_aux, 1'b1, w_mpy_input[31:0], w_mpy_err[31:0], |
mpy_out, mpy_sync); |
assign w_mpy_input = { {(RW-DW){mpy_input[(DW-1)]}}, |
mpy_input[(DW-1):0]}; |
assign w_mpy_err = { {(RW-NPW){r_mpy_err[(RW-1)]}}, |
r_mpy_err[(RW-1):(RW-NPW)]}; |
// |
// Here's our big multiply. |
// |
bigsmpy #(.NCLOCKS(1)) |
mpyi(i_clk, mpy_aux, 1'b1, w_mpy_input[31:0], w_mpy_err[31:0], |
w_mpy_out, mpy_sync); |
|
// We use this to grab the second product from the multiply. This |
// second product is true the clock after mpy_sync is high, so we |
// just do a simple delay to get this strobe logic. |
always @(posedge i_clk) |
mpy_sync_two <= mpy_sync; |
assign w_mpy_out = mpy_out; |
|
|
// The post-multiply |
// |
// Remember, the mpy_sync line coming out of the multiply will be true |
// when the product of the error and i_beta comes out. |
// |
initial pre_count_correction = 0; |
initial step_correction = 0; |
initial delayed_step_correction = 0; |
always @(posedge i_clk) |
if (mpy_sync) |
if (mpy_sync) // i_beta product |
pre_count_correction <= w_mpy_out; |
else if (mpy_sync_two) begin |
always @(posedge i_clk) |
if (mpy_sync_two) begin // i_gamma product |
step_correction <= w_mpy_out[(RW-1):HRW]; |
delayed_step_correction <= w_mpy_out[(HRW-1):0]; |
end |
|
`ifdef DEBUG |
assign count_correction = o_step; |
`else |
// The correction for the number of counts in our counter is given |
// by pre_count_correction. When we add this to the counter, we'll |
// need to add the step to it as well. To help timing out with 64-bit |
// math, let's do that step+correction math here, so that we can later |
// do |
// counts = counts + count_correction |
// instead of |
// counts = counts + step + pre_count_correction |
// saves us one addition--especially since we have the clock to do this. |
wire count_correction_strobe; |
bigadd ccounts(i_clk, mpy_sync_two, o_step, pre_count_correction, |
count_correction, count_correction_strobe); |
|
// Our original plan was to apply this correction at the top of the |
// second. The problem is that our loop filter math depends upon this |
// correction being applied before the top of the second error gets |
// measured. Hence, we'll apply it at some time mid-second, not |
// long after the error is measured (w/in 16 clocks or so), and never |
// notice the difference until the top of the next second where it |
// now appears to have properly taken place. |
always @(posedge i_clk) |
count_correction <= pre_count_correction + o_step; |
if (count_correction_strobe) |
r_count_correction <= count_correction; |
else |
r_count_correction <= o_step; |
`endif |
|
initial delay_step_clk = 1'b0; |
always @(posedge i_clk) |
delay_step_clk <= mpy_sync_two; |
initial step_carry_tick = 1'b0; |
always @(posedge i_clk) |
step_carry_tick <= delay_step_clk; |
|
// |
// |
496,7 → 719,9
count_valid_ticks <= 3'h0; |
initial o_tracking = 1'b0; |
always @(posedge i_clk) |
if ((tick)&&(&count_valid_ticks)) |
if (dly_config) // Break the tracking loop on a config change |
o_tracking <= 1'b0; |
else if ((tick)&&(&count_valid_ticks)) |
o_tracking <= 1'b1; |
else if ((tick)||(count_valid_ticks == 0)) |
o_tracking <= 1'b0; |
/openarty/trunk/rtl/gpsclock_tb.v
66,6 → 66,8
// |
// |
// |
initial r_jump = 0; |
initial r_maxcount = 32'd81200000; |
always @(posedge i_clk) |
if ((i_wb_cyc_stb)&&(i_wb_we)) |
begin |
/openarty/trunk/rtl/lloled.v
4,8 → 4,27
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: |
// Purpose: This is a low-level SPI output (not input) controller |
// designed to command interactions between an upper level |
// controller and a PModOLEDrgb. As a result, this is a one-bit |
// (traditional, not quad) SPI controller, it has no MISO input bits, |
// and it also controls a DCN bits (output data at active high, vs |
// output control at active low). |
// |
// This particular implementation was taken from a low-level QSPI |
// controller. For those who wish to compare, the low-level QSPI |
// controller is very similar to the low-level EQSPI controller that is |
// also a part of the OpenArty project. |
// |
// Interfacing with the controller works as follows: If the controller |
// is idle, set the values you wish to send and strobe the i_wr bit. |
// Once the last bit has been committed to the interface, but before it |
// closes the connection by setting CS_N high, it will check the i_wr bit |
// again. If that bit is high, the busy bit will be dropped for one |
// cycle, new data will be accepted, and the controller will continue |
// with the new(er) data as though it was still part of the last |
// transmission (without lowering cs_n). |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
39,6 → 58,7
`define OLED_READY 3'h3 |
`define OLED_STOP 3'h4 |
`define OLED_STOP_B 3'h5 |
`define OLED_STOP_C 3'h6 |
|
// Modes |
`define OLED_MOD_SPI 2'b00 |
157,8 → 177,8
o_mosi <= r_word[31]; |
end else if (~last_counter) |
begin |
o_busy <= (pre_last_counter)&&(o_sck) |
&&((state != `OLED_READY)||(~i_wr)); |
o_busy <= (!pre_last_counter)||(!o_sck) |
||(state != `OLED_READY)||(~i_wr); |
end else if (~o_sck) |
begin |
o_sck <= 1'b1; |
205,12 → 225,22
o_sck <= 1'b1; // Stop the clock |
o_busy <= 1'b1; // Still busy till port is clear |
state <= `OLED_STOP_B; |
end else // if (state == `OLED_STOP_B) |
end else if (state == `OLED_STOP_B) |
begin |
o_cs_n <= 1'b1; // Deselect CS |
o_sck <= 1'b1; |
// Do I need this???? |
// spi_len <= 3; // Minimum CS high time before next cmd |
state <= `OLED_STOP_C; |
o_mosi <= 1'b1; |
o_busy <= 1'b1; |
end else // if (state == `OLED_STOP_C) |
begin |
// Keep us in idle for at least a full clock period. |
o_cs_n <= 1'b1; // Deselect CS |
o_sck <= 1'b1; |
// Do I need this???? |
// spi_len <= 3; // Minimum CS high time before next cmd |
state <= `OLED_IDLE; |
o_mosi <= 1'b1; |
o_busy <= 1'b1; |
/openarty/trunk/rtl/wboled.v
4,8 → 4,113
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: |
// Purpose: To provide a *very* simplified controller for a PMod OLEDrgb. |
// This controller implements four registers (described below), |
// although it might feel like only two in practice. As with all of our |
// other wishbone work, all transactions are 32-bits--even though, as an |
// example, the data word for the device is only ever 16-bits long. |
// |
// The device control, outlined below, is also colored by two facts: |
// 1. There is no means to read from the device. Sure, the chip on the |
// PMod has a full read/write bus, but it hasn't been entirely |
// wired to the PMod pins. This was probably done so that the |
// interface could handle the paucity of pins available, but for |
// whatever reason, there's no way to read from the device. |
// 2. The device is controlled by a SPI port, but with an extra wire that |
// determines whether or not you are writing to the control or the |
// data port on the device. Hence the four wire SPI protocol has |
// lost the MISO wire and gained a Data / Control (N) (or dcn) |
// wire. |
// 3. As implemented, the device also has two power control wires and a |
// reset wire. The reset wire is negative logic. Without setting |
// the PMOD-Enable wire high, the board has no power. The |
// VCCEN pin is not to be set high without PMOD-Enable high. |
// Finally, setting reset low (with PMod-Enable high), places the |
// device into a reset condition. |
// |
// The design of the controller, as with the design of other controllers |
// we have built, is focused around the design principles: |
// 1. Use the bottom 23 bits of a word for the command, if possible. |
// Such commands can be loaded into registers with simple LDI |
// instructions. Even better, restrict any status results from the |
// device to 18 bits, so that instructions that use immediates |
// such as TEST #,Rx, can use these immediates. |
// 2. Protect against inadvertant changes to the power port. For this, |
// we insist that a minimum of two bits be high to change the |
// power port bits, and that just reading from the port and |
// writing back with a changed power bit is not sufficient to |
// change the power. |
// 3. Permit atomic changes to the individual power control bits, |
// by outlining which exact bits change upon any write, and |
// permitting only the bits specified to change. |
// 4. Don't stall the bus. So, if a command comes in and the |
// device is busy, we'll ignore the command. It is up to the |
// user to make certain the device isn't fed faster than it is |
// able. (Perhaps the user wishes to add a FIFO?) |
// 5. Finally, build this so that either a FIFO or DMA could control it. |
// |
// Registers: |
// 0. Control -- There are several types of control commands to/from |
// the device, all separated and determined by how many bytes are |
// to be sent to the device for the said command. Commands written |
// to the control port of the device are initiated by writes |
// to this register. |
// |
// - Writes of all { 24'h00, data[7:0] } send the single byte |
// data[7:0] to the device. |
// - Writes of { 16'h01, data[15:0] } send two bytes, |
// data[15:0], to the device. |
// - Writes of { 4'h2, 4'hx, data[23:0] } send three bytes, |
// data[23:0], to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send four bytes, |
// data[23:0], then r_a[31:24] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send five bytes, |
// data[23:0], then r_a[31:16] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send six bytes, |
// data[23:0], then r_a[31:8] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send seven bytes, |
// data[23:0], then r_a[31:0] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send eight bytes, |
// data[23:0], r_a[31:16], then r_b[31:24] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send nine bytes, |
// data[23:0], r_a[31:16], then r_b[31:16] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send ten bytes, |
// data[23:0], r_a[31:16], then r_b[31:8] to the device. |
// - Writes of { 4'h3, 4'hx, data[23:0] } send eleven bytes, |
// data[23:0], r_a[31:16], then r_b[31:0] to the device. |
// |
// 1. A This register is used, just like the B register below, for |
// setting up commands that send multiple bytes to the device. |
// Be aware that the high order bits/bytes will be sent first. |
// This is one of the few registers that may be read with meaning. |
// Once the word is written, however, the register is cleared. |
// |
// 2. B This is the same as the A register, save on writes the A |
// register will be written first before any bits from the B |
// register. As with the A register, this value is cleared upon |
// any write--regardless of whether its value is used in the |
// write. |
// |
// 3. Data --- This is both the data and the power control register. |
// |
// To write data to the graphics data RAM within the device, |
// simply write a 16'bit word: { 16'h00, data[15:0] } to this |
// port. |
// |
// To change the three power bits, {reset, vccen, pmoden}, |
// you must also set a 1'b1 in the corresponding bit position from |
// bit 16-18. Hence a: |
// |
// 32'h010001 sets the pmod enable bit, whereas 32'h010000 clears |
// it. |
// 32'h020002 sets the vcc bit, whereas 32'h010000 clears it. |
// |
// Multiple of the power bits can be changed at once. Each |
// respective bit is only changed if it's change enable bit is |
// also high. |
// |
// |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
39,7 → 144,8
o_ack, o_stall, o_data, |
o_sck, o_cs_n, o_mosi, o_dbit, |
o_pwr, o_int); |
parameter CBITS=4; // 2^4*2@6.25ns -> 200ns/clock > 150ns min |
parameter CBITS=8, // 2^4*2@6.25ns -> 200ns/clock > 150ns min |
EXTRA_BUS_CLOCK = 0; |
input i_clk, i_cyc, i_stb, i_we; |
input [1:0] i_addr; |
input [31:0] i_data; |
58,42 → 164,60
lwlvl(i_clk, dev_wr, dev_dbit, dev_word, dev_len, dev_busy, |
o_sck, o_cs_n, o_mosi, o_dbit); |
|
`define EXTRA_WB_DELAY |
`ifdef EXTRA_WB_DELAY |
reg r_wb_stb, r_wb_we; |
reg [31:0] r_wb_data; |
reg [1:0] r_wb_addr; |
always @(posedge i_clk) |
r_wb_stb <= i_stb; |
always @(posedge i_clk) |
r_wb_we <= i_we; |
always @(posedge i_clk) |
r_wb_data <= i_data; |
always @(posedge i_clk) |
r_wb_addr <= i_addr; |
`else |
wire r_wb_stb, r_wb_we; |
wire r_wb_data; |
wire [1:0] r_wb_addr; |
wire wb_stb, wb_we; |
wire [31:0] wb_data; |
wire [1:0] wb_addr; |
|
assign r_wb_stb = i_stb; |
assign r_wb_we = i_we; |
assign r_wb_data = i_data; |
assign r_wb_addr = i_addr; |
`endif |
// I've thought about bumping this from a clock at <= 100MHz up to a |
// clock near 200MHz. Doing so requires an extra clock to come off |
// the bus--the bus fanout is just too wide otherwise. However, |
// if you don't need to ... why take the extra clock cycle? Hence |
// this little snippet of code allows the rest of the controller |
// to work at 200MHz or 100MHz as need be. |
generate |
if (EXTRA_BUS_CLOCK != 0) |
begin |
reg r_wb_stb, r_wb_we; |
reg [31:0] r_wb_data; |
reg [1:0] r_wb_addr; |
always @(posedge i_clk) |
r_wb_stb <= i_stb; |
always @(posedge i_clk) |
r_wb_we <= i_we; |
always @(posedge i_clk) |
r_wb_data <= i_data; |
always @(posedge i_clk) |
r_wb_addr <= i_addr; |
|
assign wb_stb = r_wb_stb; |
assign wb_we = r_wb_we; |
assign wb_data = r_wb_data; |
assign wb_addr = r_wb_addr; |
end else begin |
assign wb_stb = i_stb; |
assign wb_we = i_we; |
assign wb_data = i_data; |
assign wb_addr = i_addr; |
end endgenerate |
|
|
|
reg r_busy; |
reg [3:0] r_len; |
|
|
// |
// Handle registers A & B. These are set either upon a write, or |
// cleared (set to zero) upon any command to the control register. |
// |
reg [31:0] r_a, r_b; |
always @(posedge i_clk) |
if ((r_wb_stb)&&(r_wb_we)) |
if ((wb_stb)&&(wb_we)) |
begin |
if (r_wb_addr[1:0]==2'b01) |
r_a <= r_wb_data; |
if (r_wb_addr[1:0]==2'b10) |
r_b <= r_wb_data; |
if (wb_addr[1:0]==2'b01) |
r_a <= wb_data; |
if (wb_addr[1:0]==2'b10) |
r_b <= wb_data; |
end else if (r_cstb) |
begin |
r_a <= 32'h00; |
100,45 → 224,78
r_b <= 32'h00; |
end |
|
// |
// Handle reads from our device. These really aren't all that |
// interesting, but ... we can do them anyway. We attempt to provide |
// some sort of useful value here. For example, upon reading r_a or |
// r_b, you can read the current value(s) of those register(s). |
always @(posedge i_clk) |
begin |
case (r_wb_addr) |
2'b00: o_data <= { 13'h00, o_pwr, 8'h00, r_len, 3'h0, r_busy }; |
case (wb_addr) |
2'b00: o_data <= { 13'h00, o_pwr, 8'h00, r_len, 1'b0, o_dbit, !o_cs_n, r_busy }; |
2'b01: o_data <= r_a; |
2'b10: o_data <= r_b; |
2'b11: o_data <= { 13'h00, o_pwr, 8'h00, r_len, 3'h0, r_busy }; |
2'b11: o_data <= { 16'h00, 13'h0, o_pwr }; |
endcase |
end |
|
initial o_ack = 1'b0; |
always @(posedge i_clk) |
o_ack <= r_wb_stb; |
o_ack <= wb_stb; |
assign o_stall = 1'b0; |
|
reg r_cstb, r_dstb, r_pstb; |
reg [23:0] r_data; |
reg r_cstb, r_dstb, r_pstb, r_pre_busy; |
reg [18:0] r_data; |
initial r_cstb = 1'b0; |
initial r_dstb = 1'b0; |
initial r_pstb = 1'b0; |
initial r_pre_busy = 1'b0; // Used to clear the interrupt a touch earlier |
|
// The control strobe. This will be true if we need to command a |
// control interaction. |
always @(posedge i_clk) |
r_cstb <= (r_wb_stb)&&(r_wb_addr[1:0]==2'b00); |
r_cstb <= (wb_stb)&&(wb_we)&&(wb_addr[1:0]==2'b00); |
|
// The data strobe, true if we need to command a data interaction. |
always @(posedge i_clk) |
r_dstb <= (r_wb_stb)&&(r_wb_addr[1:0]==2'b11)&&(r_wb_data[22:20]==3'h0); |
r_dstb <= (wb_stb)&&(wb_we)&&(wb_addr[1:0]==2'b11)&&(wb_data[18:16]==3'h0); |
|
// The power strobe. True if we are about to adjust the power and/or |
// reset bits. |
always @(posedge i_clk) // Power strobe, change power settings |
r_pstb <= (wb_stb)&&(wb_we)&&(wb_addr[1:0]==2'b11)&&(wb_data[18:16]!=3'h0); |
|
// Pre-busy: true if either r_cstb or r_dstb is true, and true on the |
// same clock they are true. This is to support our interrupt, by |
// clearing the interrupt one clock earlier--lest the DMA decide to send |
// two words our way instead of one. |
always @(posedge i_clk) |
r_pstb <= (r_wb_stb)&&(r_wb_addr[1:0]==2'b11)&&(r_wb_data[22:20]!=3'h0); |
r_pre_busy <= (wb_stb)&&(wb_we)&& |
((wb_addr[1:0]==2'b11)||(wb_addr[1:0]==2'b00)); |
|
// But ... to use these strobe values, we are now one more clock |
// removed from the bus. We need something that matches this, so let's |
// delay our bus data one more clock 'til the time when we actually use |
// it. |
always @(posedge i_clk) |
r_data <= r_wb_data[23:0]; |
r_data <= wb_data[18:0]; |
|
initial o_pwr = 3'h0; |
always @(posedge i_clk) |
if (r_pstb) |
o_pwr <= ((o_pwr)&(~r_data[22:20])) |
|((r_wb_data[18:16])&(r_data[22:20])); |
o_pwr <= ((o_pwr)&(~r_data[18:16])) |
|((r_data[2:0])&(r_data[18:16])); |
|
// Sadly, because our commands can have a whole slew of different |
// lengths, and because these lengths can be ... difficult to |
// decipher from the command (especially the first two lengths), |
// this quick case statement is needed to decode the amount of bytes |
// that will be sent. |
reg [3:0] b_len; |
always @(posedge i_clk) |
casez(r_wb_data[31:28]) |
4'b000?: b_len <= (r_wb_data[16])? 4'h1:4'h2; |
casez(wb_data[31:28]) |
4'b0000: b_len <= (wb_data[16])? 4'h2:4'h1; |
4'b0001: b_len <= 4'h2; |
4'b0010: b_len <= 4'h3; |
4'b0011: b_len <= 4'h4; |
4'b0100: b_len <= 4'h5; |
151,38 → 308,84
default: b_len <= 4'h0; |
endcase |
|
reg [87:0] r_sreg; |
// |
// On the next clock, we're going to set our data register to |
// whatever's in register A, and B, and ... something of the data |
// written to the control register. Because this must all be |
// written on the most-significant bits of a word, we pause a moment |
// here to move the control word that was writen to our bus up |
// by an amount given by the length of our message. That way, you |
// can write to the bottom bits of the register, and yet still end |
// up in the top several bits of the following register. |
// |
reg [23:0] c_data; |
always @(posedge i_clk) |
if (wb_data[31:29] != 3'h0) |
c_data <= wb_data[23:0]; |
else if (wb_data[16]) |
c_data <= { wb_data[15:0], 8'h00 }; |
else |
c_data <= { wb_data[7:0], 16'h00 }; |
|
// |
// Finally, after massaging the incoming data off our bus, we finally |
// get to controlling the lower level controller and sending the |
// data to the device itself. |
// |
// The basic idea is this: we use r_busy to know if we are in the |
// middle of an operation, or whether or not we will be responsive to |
// the bus. r_sreg holds the data we wish to send, and r_len the |
// number of bytes within r_sreg that remain to be sent. The controller |
// will accept up to 32-bits at a time, so once we issue a command |
// (dev_wr & !dev_busy), we transition to either the next command. |
// Once all the data has been sent, and the device is now idle, we |
// clear r_busy and therefore become responsive to the bus again. |
// |
// |
reg [87:0] r_sreg; // Composed of 24-bits, 32-bits, and 32-bits |
initial r_busy = 1'b0; |
initial dev_wr = 1'b1; |
always @(posedge i_clk) |
if ((~r_busy)&&(r_cstb)) |
begin |
dev_wr <= 1'b0; |
dev_dbit <= 1'b0; |
r_sreg <= { r_data[23:0], r_a, r_b }; |
r_len <= b_len; |
r_busy <= (b_len != 4'h0); |
if (b_len == 4'h1) |
r_sreg[87:72] <= { r_data[7:0], r_data[7:0] }; |
else if (b_len == 4'h2) |
r_sreg[87:72] <= r_data[15:0]; |
else |
r_sreg[87:72] <= r_data[23:8]; |
end else if ((~dev_busy)&&(r_dstb)) |
begin |
dev_wr <= 1'b0; |
dev_dbit <= 1'b1; |
r_sreg <= { r_data[15:0], 72'h00 }; |
r_len <= 4'h2; |
r_busy <= 1'b1; |
end else if ((r_busy)&&(~dev_busy)) |
begin |
dev_word <= r_sreg[87:56]; |
r_sreg <= { r_sreg[55:0], 32'h00 }; |
dev_len <= (r_len > 4'h4)? 2'b11:(r_len[1:0]+2'b11); |
r_len <= (r_len > 4'h4) ? (r_len-4'h4):0; |
end else if (r_busy) |
r_busy <= (r_len != 4'h0); |
dev_wr <= 1'b0; |
if ((~r_busy)&&(r_cstb)) |
begin |
dev_dbit <= 1'b0; |
r_sreg <= { c_data[23:0], r_a, r_b }; |
r_len <= b_len; |
r_busy <= (b_len != 4'h0); |
end else if ((~r_busy)&&(r_dstb)) |
begin |
dev_dbit <= 1'b1; |
r_sreg <= { r_data[15:0], 72'h00 }; |
r_len <= 4'h2; |
r_busy <= 1'b1; |
end else if ((r_busy)&&(!dev_busy)) |
begin |
// Issue the command to write up to 32-bits at a time |
dev_wr <= (r_len != 4'h0); |
dev_word <= r_sreg[87:56]; |
r_sreg <= { r_sreg[55:0], 32'h00 }; |
dev_len <= (r_len > 4'h4)? 2'b11:(r_len[1:0]+2'b11); |
if (dev_wr) |
r_len <= (r_len > 4'h4) ? (r_len-4'h4):0; |
r_busy <= (dev_wr)||(r_len != 4'h0)&&(!dev_wr); |
end else if (r_busy) // & dev_busy |
begin |
dev_wr <= (r_len != 4'h0); |
dev_len <= (r_len > 4'h4)? 2'b11:(r_len[1:0]+2'b11); |
end |
end |
|
assign o_int = (~r_busy); |
// |
// Here, we pick a self-clearing interrupt input. This will set the |
// interrupt any time we are idle, and will automatically clear itself |
// any time we become busy. This should be sufficient to allow the |
// DMA controller to send things to the card. |
// |
// Of course ... if you are not running in any sort of interrupt mode, |
// you *could* just ignore this line and poll the busy bit instead. |
// |
assign o_int = (~r_busy)&&(!r_pre_busy); |
|
endmodule |
/openarty/trunk/sw/board/Makefile
31,14 → 31,52
## |
## |
.PHONY: all |
all: exstartup |
all: exstartup oledtest gpsdump |
OBJDIR := obj-zip |
CC := zip-gcc |
OBJDUMP := zip-objdump |
SOURCES := exstartup.c bootloader.c gpsdump.c oledtest.c |
HEADERS := artyboard.h zipsys.h |
# |
# For source analysis, the following macros are defined: |
|
# |
|
%.o: $(OBJDIR)/%.o |
$(OBJDIR)/%.o: %.c |
$(CC) -c -fno-builtin $< -o $@ |
%.txt: % |
$(OBJDUMP) -S -D $^ > $@ |
|
exstartup: exstartup.c artyboard.h zipsys.h arty.ld |
zip-gcc -O3 -T arty.ld -fno-builtin -Wl,-Map=exstartup.map exstartup.c -o exstartup |
$(CC) -O3 -T arty.ld -fno-builtin -Wl,-Map=exstartup.map exstartup.c -o exstartup |
gpsdump: $(OBJDIR)/gpsdump.o $(OBJDIR)/bootloader.o arty.ld |
$(CC) -O3 -T arty.ld -fno-builtin -Wl,-Map=gpsdump.map $(OBJDIR)/gpsdump.o $(OBJDIR)/bootloader.o -o $@ |
oledtest: $(OBJDIR)/oledtest.o $(OBJDIR)/bootloader.o $(OBJDIR)/splash.o $(OBJDIR)/mug.o arty.ld |
$(CC) -O3 -T arty.ld -fno-builtin -Wl,-Map=gpsdump.map $(OBJDIR)/oledtest.o $(OBJDIR)/bootloader.o $(OBJDIR)/splash.o $(OBJDIR)/mug.o -o $@ |
|
exstartup.txt: exstartup |
zip-objdump -S -D exstartup > exstartup.txt |
$(OBJDUMP) -S -D $^ > $@ |
|
clean: |
rm -f exstartup exstartup.map exstartup.txt |
rm -rf $(OBJDIR)/ |
|
define build-depends |
@echo "Building dependency file(s)" |
@$(CC) $(CFLAGS) -MM $(SOURCES) > $(OBJDIR)/xdepends.txt |
@sed -e 's/^.*.o: /$(OBJDIR)\/&/' < $(OBJDIR)/xdepends.txt > $(OBJDIR)/depends.txt |
@rm $(OBJDIR)/xdepends.txt |
endef |
|
tags: $(SOURCES) $(HEADERS) |
@echo "Generating tags" |
@ctags $(SOURCES) $(HEADERS) |
|
$(OBJDIR)/depends.txt: $(OBJDIR)/ |
$(build-depends) |
|
$(OBJDIR)/: |
@bash -c "if [ ! -e $(OBJDIR) ]; then mkdir -p $(OBJDIR)/; fi" |
|
-include $(OBJDIR)/depends.txt |
/openarty/trunk/sw/board/artyboard.h
41,7 → 41,6
#ifndef ARTYBOARD_H |
#define ARTYBOARD_H |
|
|
// BUS Interrupts |
#define BUS_BUTTON 0x0001 |
#define BUS_SWITCH 0x0002 |
92,6 → 91,7
#define ENET_NOHWCRC 0x008000 |
#define ENET_NOHWMAC 0x010000 |
#define ENET_RESET 0x020000 |
#define ENET_NOHWIPCHK 0x040000 |
#define ENET_TXCMD(LEN) ((LEN)|ENET_TXBIT) |
#define ENET_TXCLR 0x038000 |
#define ENET_TXCANCEL 0x000000 |
162,7 → 162,8
#define BKRAM (void *)0x0008000 |
#define FLASH (void *)0x0400000 |
#define SDRAM (void *)0x4000000 |
#define CLOCKFREQHZ 80000000 |
#define CLOCKFREQHZ 81250000 |
#define CLOCKFREQ_HZ CLOCKFREQHZ |
#define RAMWORDS 0x800000 |
|
#endif |
/openarty/trunk/sw/board/bootloader.c
0,0 → 1,191
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: bootloader.c |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: To start a program from flash, loading its various components |
// into on-chip block RAM, or off-chip DDR3 SDRAM, as indicated |
// by the symbols/pointers within the program itself. As you will notice |
// by the names of the symbols, it is assumed that a kernel will be placed |
// into block RAM. |
// |
// This particular implementation depends upon the following symbols |
// being defined: |
// |
// void entry(void) |
// The location where your program will start from, once fully |
// loaded. |
// |
// _top_of_stack: |
// A pointer to a location in memory which we can use for a stack. |
// The bootloader doesn't use much of this memory, although it does |
// use it. It then resets the stack to this location and calls |
// your program. |
// |
// _top_of_heap: |
// While not used by this program, this is assumed to be defined |
// by the linker as the lowest memory address in a space that can |
// be used by a malloc/free restore capability. |
// |
// _flash: |
// The address of the beginning of physical FLASH device. This is |
// not the first usable address on that device, as that is often |
// reserved for the first two FPGA configurations. |
// |
// _blkram: |
// The first address of the block RAM memory within the FPGA. |
// |
// _sdram: |
// The address of the beginning of physical SDRAM. |
// |
// _kernel_image_start: |
// The address of that location within FLASH where the sections |
// needing to be moved begin at. |
// |
// _kernel_image_end: |
// The last address within block RAM that needs to be filled in. |
// |
// _sdram_image_start: |
// This address is more confusing. This is equal to one past the |
// last used block RAM address, or the last used flash address if |
// no block RAM is used. It is used for determining whether or not |
// block RAM was used at all. |
// |
// _sdram_image_end: |
// This is one past the last address in SDRAM that needs to be |
// set with valid data. |
// |
// _bss_image_end: |
// This is the last address of memory that must be cleared upon |
// startup, for which the program is assuming that it is zero. |
// While it may not be necessary to clear the BSS memory, since |
// BSS memory is always zero on power up, this bootloader does so |
// anyway--since we might be starting from a reset instead of power |
// up. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2015-2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
#include "artyboard.h" |
#include "zipsys.h" |
|
asm("\t.section\t.start\n" |
"\t.global\t_start\n" |
"_start:\n" |
"\tLDI\t_top_of_stack,SP\n" |
"\tMOV\t_after_bootloader(PC),R0\n" |
"\tBRA\tbootloader\n" |
"_after_bootloader:\n" |
"\tLDI\t_top_of_stack,SP\n" |
"\tOR\t0x4000,CC\n" // Clear the data cache |
"\tMOV\t_kernel_exit(PC),R0\n" |
"\tBRA\tentry\n" |
"_kernel_exit:\n" |
"\tHALT\n" |
"\tBRA\t_kernel_exit\n" |
"\t.section\t.text"); |
|
extern int _sdram_image_end, _sdram_image_start, _sdram, |
_blkram, _flash, _bss_image_end, |
_kernel_image_start, _kernel_image_end; |
|
extern void bootloader(void) __attribute__ ((section (".boot"))); |
|
// #define USE_DMA |
void bootloader(void) { |
int zero = 0; |
|
#ifdef USE_DMA |
zip->dma.ctrl= DMACLEAR; |
zip->dma.rd = _kernel_image_start; |
if (_kernel_image_end != _sdram_image_start) { |
zip->dma.len = _kernel_image_end - _blkram; |
zip->dma.wr = _blkram; |
zip->dma.ctrl= DMACCOPY; |
|
zip->pic = SYSINT_DMAC; |
while((zip->pic & SYSINT_DMAC)==0) |
; |
} |
|
zip->dma.len = &_sdram_image_end - _sdram; |
zip->dma.wr = _sdram; |
zip->dma.ctrl= DMACCOPY; |
|
zip->pic = SYSINT_DMAC; |
while((zip->pic & SYSINT_DMAC)==0) |
; |
|
if (_bss_image_end != _sdram_image_end) { |
zip->dma.len = _bss_image_end - _sdram_image_end; |
zip->dma.rd = &zero; |
// zip->dma.wr // Keeps the same value |
zip->dma.ctrl = DMACCOPY; |
|
zip->pic = SYSINT_DMAC; |
while((zip->pic & SYSINT_DMAC)==0) |
; |
} |
#else |
int *rdp = &_kernel_image_start, *wrp = &_blkram; |
|
// |
// Load any part of the image into block RAM, but *only* if there's a |
// block RAM section in the image. Based upon our LD script, the |
// block RAM should be filled from _blkram to _kernel_image_end. |
// It starts at _kernel_image_start --- our last valid address within |
// the flash address region. |
// |
if (&_kernel_image_end != &_sdram_image_start) { |
for(int i=0; i< &_kernel_image_end - &_blkram; i++) |
*wrp++ = *rdp++; |
} |
|
// |
// Now, we move on to the SDRAM image. We'll here load into SDRAM |
// memory up to the end of the SDRAM image, _sdram_image_end. |
// As with the last pointer, this one is also created for us by the |
// linker. |
// |
wrp = &_sdram; |
for(int i=0; i< &_sdram_image_end - &_sdram; i++) |
*wrp++ = *rdp++; |
|
// |
// Finally, we load BSS. This is the segment that only needs to be |
// cleared to zero. It is available for global variables, but some |
// initialization is expected within it. We start writing where |
// the valid SDRAM context, i.e. the non-zero contents, end. |
// |
for(int i=0; i<&_bss_image_end - &_sdram_image_end; i++) |
*wrp++ = 0; |
#endif |
} |
|
/openarty/trunk/sw/board/gpsdump.c
0,0 → 1,47
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: gpsdump.c |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: To dump the GPS UART to the auxiliary UART. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2015-2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
#include "artyboard.h" |
|
void entry(void) { |
while(1) { |
int ch; |
ch = sys->io_gps_rx; |
if ((ch&-256)==0) |
sys->io_uart_tx = ch; |
} |
} |
/openarty/trunk/sw/board/mug.c
0,0 → 1,815
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: mug.c |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: To encode and capture the image mug in a fashion that |
// may be referenced from a C file and encoded directly into |
// memory. |
// |
// WARNING! THIS FILE IS COMPUTER GENERATED. DO NOT TRY TO EDIT IT |
// |
// If you need to change this file, please adjust the image, or |
// genoimage.cpp and rebuild this file instead. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
int mug[6144] = { |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdedd, |
0x8c54, 0x5acd, 0x39e9, 0x2966, 0x2105, 0x18e4, 0x10a3, 0x10a2, |
0x1082, 0x1082, 0x1082, 0x1082, 0x0862, 0x0862, 0x1062, 0x1062, |
0x1062, 0x1082, 0x1062, 0x39c6, 0x9cf3, 0xb5d6, 0xb5b5, 0xadb5, |
0xb5b5, 0xadb5, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad95, 0xad75, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, 0xad74, 0xad74, |
0xad75, 0xad75, 0xad75, 0xad74, 0xad75, 0xad75, 0xad74, 0xad75, |
0xad74, 0xad75, 0xad75, 0xad95, 0xad95, 0xad95, 0xad95, 0xb5b5, |
0xb5d6, 0xb5f6, 0xbe17, 0xc638, 0xce78, 0xd6b9, 0xdf3b, 0xefbd, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79f, 0xa537, |
0x632e, 0x39e9, 0x2966, 0x2104, 0x18c4, 0x10a3, 0x1082, 0x1082, |
0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x1062, 0x1082, 0x1082, 0x73ae, 0xad75, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad95, 0xad95, 0xad95, |
0xad75, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, 0xad75, 0xad74, |
0xad74, 0xad75, 0xad75, 0xad74, 0xad75, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad75, 0xad74, 0xad75, 0xad95, 0xad95, |
0xad95, 0xb5b5, 0xb5d6, 0xbdf6, 0xbe17, 0xc658, 0xce99, 0xdefa, |
0xef7c, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce5c, 0x7bd1, |
0x4a6b, 0x2967, 0x2105, 0x18c4, 0x10a3, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x1082, 0x0861, 0x39c7, 0x9cf3, 0xb5b6, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, |
0xad75, 0xad75, 0xad74, 0xad75, 0xad75, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xa574, 0xad74, 0xa574, 0xad74, 0xad74, 0xad75, |
0xad95, 0xad95, 0xb5b5, 0xb5b6, 0xb5d6, 0xbdf6, 0xbe37, 0xce78, |
0xd6da, 0xe75c, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef5e, 0x9495, 0x528c, |
0x39a8, 0x2125, 0x18c4, 0x10a3, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1062, 0x0862, 0x0862, 0x0862, 0x0861, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0882, 0x10a2, 0x8430, 0xb595, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, 0xad75, |
0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad74, 0xad74, |
0xad74, 0xad74, 0xa574, 0xad74, 0xa574, 0xa574, 0xad74, 0xad74, |
0xad74, 0xad75, 0xad95, 0xad95, 0xadb5, 0xb5b6, 0xb5f6, 0xbe17, |
0xc658, 0xd6b9, 0xe75b, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb599, 0x630e, 0x39e9, |
0x2946, 0x2104, 0x18c3, 0x1082, 0x1082, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1062, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x1082, 0x0861, 0x5aca, 0xa554, 0xb595, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, |
0xad75, 0xad75, 0xad75, 0xad75, 0xad74, 0xad75, 0xad74, 0xad74, |
0xad74, 0xad74, 0xa574, 0xad74, 0xa574, 0xa574, 0xa554, 0xa574, |
0xa574, 0xad74, 0xad74, 0xad75, 0xad95, 0xad95, 0xb5b5, 0xb5d6, |
0xbdf7, 0xc638, 0xceb9, 0xe73b, 0xf7de, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xe71e, 0x7bf2, 0x4a4a, 0x2966, |
0x2104, 0x18c3, 0x10a3, 0x1082, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x2104, 0x94d2, 0xb5b5, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad75, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad75, 0xad75, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xa574, 0xa574, 0xa574, |
0xa574, 0xa574, 0xa574, 0xad74, 0xad74, 0xad75, 0xad95, 0xb5b5, |
0xb5d6, 0xbdf6, 0xc637, 0xce99, 0xdf3b, 0xf7de, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xad38, 0x5acd, 0x31a7, 0x2125, |
0x18c4, 0x10a3, 0x1082, 0x1082, 0x0862, 0x1082, 0x0862, 0x1062, |
0x1062, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x0861, 0x73ae, 0xad75, |
0xad95, 0xb595, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xadb5, 0xad95, |
0x94d2, 0x8c50, 0x9491, 0x9cb1, 0xa4d2, 0xa554, 0xad95, 0xad75, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad75, 0xad75, 0xad75, 0xad75, |
0xad74, 0xa554, 0xa554, 0xa574, 0xad74, 0xad74, 0xad74, 0xad95, |
0xad95, 0xb5b6, 0xbdf6, 0xc637, 0xce99, 0xdf3b, 0xf7de, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xe73e, 0x7bd2, 0x4209, 0x2946, 0x18e4, |
0x10a3, 0x10a2, 0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x1062, 0x1062, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x0862, 0x4228, 0xa534, |
0xb5b6, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xb5b6, 0xad75, 0x8c70, 0x6b2b, |
0x6aca, 0x7aca, 0x82eb, 0x8b0b, 0x8b4b, 0x838c, 0x8bee, 0xa533, |
0xad95, 0xad74, 0xad74, 0xa533, 0x9d12, 0x94b1, 0x8c70, 0x8c90, |
0x94d2, 0xad74, 0xad95, 0xad75, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad75, 0xad95, 0xb5b5, 0xb5d6, 0xbe37, 0xce99, 0xe75b, 0xffde, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xb5b9, 0x5aad, 0x3187, 0x2104, 0x18c3, |
0x10a2, 0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x1062, 0x1062, 0x1062, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, 0x10a2, 0x18e3, 0x9cf3, |
0xadb6, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xb5b5, 0x9d13, 0x7bee, 0x6aeb, 0x6248, 0x59e6, |
0x61c6, 0x69c7, 0x69c7, 0x6a07, 0x7248, 0x7289, 0x6a68, 0x732b, |
0x73ad, 0x630b, 0x5aca, 0x5289, 0x4a68, 0x4207, 0x39c6, 0x39c6, |
0x41e7, 0x5289, 0x738c, 0x8450, 0x9cf2, 0xa554, 0xad95, 0xad95, |
0xad74, 0xad75, 0xad95, 0xb5b5, 0xb5d6, 0xc637, 0xce99, 0xe75c, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xf77f, 0x8433, 0x4209, 0x2925, 0x18c3, 0x10a3, |
0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x0862, 0x1082, |
0x1082, 0x1082, 0x1082, 0x10a2, 0x10a2, 0x10a2, 0x1082, 0x6b6d, |
0xad75, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xb5b6, 0xa554, 0x73ad, 0x5a68, 0x5a07, 0x61e7, 0x61c7, 0x69c7, |
0x69e7, 0x61c6, 0x61a6, 0x61e7, 0x6a07, 0x6a28, 0x61e7, 0x4985, |
0x3985, 0x3144, 0x2924, 0x2924, 0x2103, 0x20e3, 0x20e3, 0x18c2, |
0x18c2, 0x20e3, 0x2924, 0x3185, 0x39c6, 0x4a27, 0x6b4b, 0x8c70, |
0xa533, 0xad95, 0xad75, 0xad95, 0xb5b5, 0xb5f6, 0xc637, 0xd6b9, |
0xef9d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xd67c, 0x630e, 0x3187, 0x20e4, 0x10a3, 0x1082, |
0x1082, 0x0862, 0x0862, 0x0862, 0x0861, 0x0861, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, 0x10a2, 0x1082, 0x2945, |
0xa534, 0xadb6, 0xad95, 0xad95, 0xb595, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xadb5, 0xad75, |
0x842f, 0x5289, 0x51e7, 0x59e6, 0x6a07, 0x69e7, 0x7228, 0x7a69, |
0x7a89, 0x7248, 0x6a07, 0x6a07, 0x6207, 0x59e7, 0x4965, 0x3103, |
0x2924, 0x2903, 0x2903, 0x2903, 0x2103, 0x2103, 0x2103, 0x20e3, |
0x20e3, 0x20e3, 0x20e3, 0x20c3, 0x18c2, 0x18c2, 0x2923, 0x31a5, |
0x5288, 0x844f, 0xad74, 0xad95, 0xad95, 0xb5b5, 0xb5f6, 0xc638, |
0xd6fa, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xa516, 0x4a4a, 0x2125, 0x18c3, 0x10a2, 0x1082, |
0x1062, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, 0x1082, |
0x632c, 0xad95, 0xad96, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0x738d, |
0x3965, 0x49a5, 0x6207, 0x6227, 0x59c6, 0x51a6, 0x59c6, 0x6208, |
0x6a48, 0x6a28, 0x59c6, 0x49a5, 0x4165, 0x3965, 0x3124, 0x2903, |
0x2923, 0x2903, 0x20e3, 0x2924, 0x20c2, 0x20e3, 0x2103, 0x2103, |
0x2903, 0x20e3, 0x20e3, 0x20e3, 0x20e3, 0x20e3, 0x2103, 0x2103, |
0x2924, 0x39a5, 0x62ea, 0x94b1, 0xad74, 0xad95, 0xb5b5, 0xbdf6, |
0xc678, 0xdf3b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xf79f, 0x7bf1, 0x31a7, 0x2104, 0x10a3, 0x1082, 0x1062, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, 0x10a2, |
0x18e3, 0x8430, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, 0xb5b6, |
0xb595, 0xb5b6, 0xad95, 0xad75, 0xa554, 0x9cf2, 0x7bce, 0x39c6, |
0x2904, 0x4185, 0x4185, 0x3965, 0x3144, 0x3124, 0x3944, 0x4165, |
0x4165, 0x4165, 0x3965, 0x4185, 0x4185, 0x4185, 0x4185, 0x3965, |
0x3985, 0x3985, 0x39a6, 0x3144, 0x2924, 0x2903, 0x20e3, 0x20e3, |
0x2903, 0x2924, 0x2904, 0x2103, 0x20e3, 0x2103, 0x20e3, 0x20c3, |
0x20e3, 0x2103, 0x2944, 0x41e6, 0x736c, 0xa533, 0xad95, 0xb5b6, |
0xbe17, 0xce99, 0xef7c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xdedc, 0x5aed, 0x2946, 0x18c3, 0x10a2, 0x1082, 0x0862, |
0x0862, 0x0861, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, |
0x10a2, 0x2124, 0x8c71, 0xb5b6, 0xb5b5, 0xb5b6, 0xa554, 0x9cf3, |
0x7bee, 0x738d, 0x630b, 0x5289, 0x4a48, 0x4a28, 0x41e7, 0x3985, |
0x3165, 0x3965, 0x3165, 0x3144, 0x3144, 0x3145, 0x4185, 0x4185, |
0x49a5, 0x49a6, 0x49c6, 0x51c6, 0x51c6, 0x51e6, 0x51c6, 0x51e6, |
0x51e6, 0x41a5, 0x41c6, 0x4185, 0x49a6, 0x4985, 0x3944, 0x3124, |
0x3124, 0x3944, 0x3965, 0x3965, 0x3144, 0x3144, 0x2103, 0x18a2, |
0x1082, 0x18a2, 0x20c2, 0x20e3, 0x2924, 0x5268, 0x94b1, 0xad95, |
0xb5d6, 0xbe37, 0xd6da, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xb598, 0x422a, 0x2104, 0x10a3, 0x1082, 0x1082, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x10a2, 0x2945, 0x7bce, 0x9d13, 0x7bce, 0x5268, 0x4227, |
0x3185, 0x3165, 0x3165, 0x3144, 0x3144, 0x3165, 0x3985, 0x39a6, |
0x3985, 0x3145, 0x3124, 0x3965, 0x3985, 0x41a5, 0x49c6, 0x51e6, |
0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, |
0x49c6, 0x39a5, 0x49a6, 0x51c6, 0x51c6, 0x51c6, 0x51a6, 0x51a5, |
0x4985, 0x4985, 0x4985, 0x4985, 0x4985, 0x4165, 0x3945, 0x3124, |
0x20e3, 0x10a2, 0x18a2, 0x18a2, 0x18a2, 0x20c2, 0x39a5, 0x8c70, |
0xad95, 0xb5d6, 0xc658, 0xe75b, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0x9474, 0x3188, 0x18c4, 0x10a2, 0x1082, 0x0862, 0x0862, |
0x0862, 0x0861, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0861, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x10a2, 0x18e3, 0x2945, 0x3165, 0x2944, 0x2944, |
0x2924, 0x2944, 0x3145, 0x3144, 0x3144, 0x3144, 0x3165, 0x3985, |
0x3985, 0x3965, 0x3965, 0x4185, 0x49c6, 0x51c6, 0x51e6, 0x59e6, |
0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51c6, 0x59c6, 0x59e6, 0x6207, |
0x51c6, 0x20e3, 0x49a6, 0x51a6, 0x59c6, 0x59e6, 0x59c6, 0x59c6, |
0x59a6, 0x59a6, 0x51a6, 0x5185, 0x5185, 0x4985, 0x4985, 0x4165, |
0x3965, 0x2904, 0x18a2, 0x1082, 0x1082, 0x18a2, 0x18a2, 0x39c5, |
0x94d1, 0xb5b5, 0xbdf6, 0xd6b9, 0xf7be, 0xffff, 0xffff, 0xffff, |
0xf7bf, 0x738f, 0x2945, 0x10a3, 0x1082, 0x0862, 0x0862, 0x0861, |
0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x10a2, 0x2104, 0x3186, |
0x3a08, 0x4a8a, 0x5aeb, 0x4a69, 0x39a6, 0x2904, 0x2103, 0x2904, |
0x2904, 0x2904, 0x2924, 0x2924, 0x2924, 0x3144, 0x3965, 0x4186, |
0x49a6, 0x49a6, 0x49a6, 0x51c6, 0x59e6, 0x59e6, 0x59e6, 0x59e6, |
0x59e6, 0x61e6, 0x61e6, 0x59c6, 0x59c6, 0x59c6, 0x51c6, 0x51e6, |
0x49c6, 0x3985, 0x49a6, 0x51c6, 0x51a6, 0x51a6, 0x59c6, 0x59c6, |
0x59c6, 0x59a6, 0x59a6, 0x59a5, 0x5185, 0x5185, 0x5185, 0x5185, |
0x4985, 0x4165, 0x2904, 0x18a2, 0x1082, 0x1082, 0x1082, 0x18a2, |
0x5288, 0x9cf2, 0xb5b5, 0xc637, 0xdf3b, 0xffff, 0xffff, 0xffff, |
0xe73d, 0x5acc, 0x2104, 0x10a2, 0x0862, 0x0862, 0x0861, 0x0861, |
0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x2124, 0x4229, 0x5aec, 0x5b0c, 0x632c, |
0x73ae, 0x73ce, 0x52aa, 0x3165, 0x2103, 0x2924, 0x2924, 0x20e3, |
0x2103, 0x2904, 0x3124, 0x3144, 0x3965, 0x41a6, 0x49a6, 0x51c6, |
0x5a07, 0x5a07, 0x5a07, 0x5a07, 0x6227, 0x6207, 0x5a06, 0x6206, |
0x6207, 0x61e7, 0x6207, 0x61e6, 0x5185, 0x4185, 0x51c6, 0x51c6, |
0x49a6, 0x49a6, 0x51e6, 0x49a5, 0x51c6, 0x59c6, 0x59c6, 0x59a6, |
0x61c6, 0x61c6, 0x61c6, 0x59a6, 0x59a6, 0x59a5, 0x5985, 0x51a6, |
0x51a6, 0x5186, 0x4165, 0x20e3, 0x1082, 0x1081, 0x1081, 0x1082, |
0x18c2, 0x62ea, 0xa554, 0xbdf6, 0xceb9, 0xf7de, 0xffff, 0xffff, |
0xce7a, 0x422a, 0x18c3, 0x1082, 0x0862, 0x0861, 0x0861, 0x0861, |
0x0861, 0x0861, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, |
0x2124, 0x4229, 0x5b0c, 0x634d, 0x634d, 0x632c, 0x73af, 0x8c71, |
0x8c92, 0x630c, 0x3165, 0x2104, 0x20e3, 0x20e3, 0x2945, 0x2924, |
0x3145, 0x3144, 0x3145, 0x3945, 0x3965, 0x4186, 0x51e7, 0x5a07, |
0x59e7, 0x6207, 0x6247, 0x6247, 0x6227, 0x6207, 0x6207, 0x6207, |
0x6a27, 0x6a27, 0x6a27, 0x61e6, 0x49a6, 0x4986, 0x4165, 0x3944, |
0x3945, 0x4165, 0x4965, 0x4986, 0x51c6, 0x61e6, 0x61e6, 0x61c6, |
0x61c6, 0x61e6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x59a6, 0x59a5, |
0x59a6, 0x51a6, 0x49a6, 0x3944, 0x20c2, 0x1082, 0x1082, 0x18a2, |
0x18a2, 0x20e3, 0x8c4f, 0xad95, 0xc637, 0xe75c, 0xffff, 0xffff, |
0xb598, 0x39c8, 0x10a3, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x18c3, 0x2125, 0x31c7, 0x4a8a, 0x6b8e, |
0x7c10, 0x73cf, 0x6b6e, 0x632c, 0x6b8e, 0x8c92, 0x9d14, 0x9d14, |
0x6b4d, 0x2965, 0x2104, 0x20e3, 0x2924, 0x20e3, 0x20e3, 0x2924, |
0x2904, 0x3145, 0x3124, 0x3965, 0x3985, 0x49c6, 0x51c6, 0x5207, |
0x51e6, 0x5a06, 0x5a06, 0x5a06, 0x6206, 0x6207, 0x6a27, 0x6a27, |
0x7248, 0x7228, 0x7228, 0x59c7, 0x51c6, 0x5185, 0x4985, 0x3944, |
0x3944, 0x4165, 0x4985, 0x49a6, 0x49a6, 0x59c6, 0x61e6, 0x61c6, |
0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x59a6, |
0x59a5, 0x59a5, 0x51a6, 0x4985, 0x2903, 0x18a2, 0x1061, 0x1082, |
0x18a2, 0x18a2, 0x39e6, 0x94d2, 0xb5d6, 0xd6b9, 0xffff, 0xffff, |
0xa515, 0x3186, 0x10a2, 0x1062, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x1082, 0x1062, 0x1082, 0x1082, 0x1082, 0x10a3, 0x2945, |
0x4229, 0x632d, 0x8431, 0x8c72, 0x7c30, 0x7c10, 0x7c10, 0x7c30, |
0x73ef, 0x6b8e, 0x6b6d, 0x8430, 0x9cf3, 0xa554, 0x9d34, 0x7bef, |
0x39c7, 0x20e3, 0x2103, 0x2924, 0x2904, 0x2904, 0x2924, 0x20e3, |
0x2903, 0x2904, 0x3124, 0x2904, 0x3124, 0x3985, 0x41a5, 0x4185, |
0x4164, 0x4164, 0x4985, 0x51c6, 0x59e6, 0x6a27, 0x7248, 0x7248, |
0x7268, 0x7a48, 0x7248, 0x6a89, 0x61e7, 0x51a6, 0x51a5, 0x4165, |
0x3124, 0x4165, 0x51a6, 0x51c6, 0x49c6, 0x6207, 0x6a07, 0x69e6, |
0x61e6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, 0x61c6, |
0x59a6, 0x59a5, 0x59a6, 0x51a6, 0x3965, 0x20e3, 0x1082, 0x1082, |
0x1082, 0x1082, 0x18a2, 0x73cd, 0xad95, 0xc658, 0xf7bd, 0xffff, |
0x9493, 0x2946, 0x10a2, 0x1082, 0x0862, 0x0862, 0x1082, 0x1082, |
0x1082, 0x10a3, 0x18c3, 0x3186, 0x528a, 0x73cf, 0x94d3, 0xa555, |
0xa535, 0x9d14, 0x8451, 0x73ef, 0x73cf, 0x7bef, 0x7c30, 0x7c10, |
0x73ae, 0x73ae, 0x8c91, 0x9d14, 0xa555, 0xa575, 0x94b2, 0x528a, |
0x3165, 0x2104, 0x2104, 0x2104, 0x2104, 0x2904, 0x2904, 0x2924, |
0x2924, 0x20e3, 0x3124, 0x3144, 0x3965, 0x3945, 0x3985, 0x3144, |
0x3944, 0x3945, 0x4185, 0x49a5, 0x51c6, 0x6a27, 0x7268, 0x7a89, |
0x7a89, 0x7a89, 0x7a48, 0x6a8a, 0x6a28, 0x59a6, 0x51a6, 0x51a6, |
0x3945, 0x4165, 0x51a6, 0x6207, 0x5a69, 0x6207, 0x6a27, 0x6a07, |
0x6a07, 0x61e6, 0x61c6, 0x61a6, 0x69e7, 0x69e7, 0x69e6, 0x69c6, |
0x61c6, 0x61a6, 0x59a5, 0x5986, 0x4985, 0x3124, 0x18a2, 0x1061, |
0x1082, 0x10a2, 0x1081, 0x632b, 0xad74, 0xbdf6, 0xe73b, 0xffff, |
0x8432, 0x2125, 0x10a2, 0x1082, 0x1082, 0x10a3, 0x18e3, 0x3186, |
0x528b, 0x7bf0, 0x94d3, 0x94f3, 0x9cf3, 0xa555, 0x9d54, 0x9d34, |
0x94d3, 0x8430, 0x73ef, 0x7bef, 0x7c10, 0x8430, 0x8430, 0x7c10, |
0x7bef, 0x8c92, 0x9d13, 0xa534, 0xad75, 0xa534, 0x738e, 0x39a6, |
0x2104, 0x20e3, 0x2924, 0x2924, 0x2924, 0x2104, 0x2904, 0x2924, |
0x2924, 0x2924, 0x2924, 0x3145, 0x3965, 0x3965, 0x3944, 0x3965, |
0x3144, 0x3144, 0x3124, 0x3944, 0x49a5, 0x61e6, 0x7268, 0x7aa9, |
0x82ca, 0x8289, 0x7a48, 0x834d, 0x7269, 0x61e7, 0x51a6, 0x51c6, |
0x3104, 0x3124, 0x59c7, 0x6a68, 0x6b2c, 0x59e7, 0x7248, 0x7227, |
0x6a07, 0x61e6, 0x61c6, 0x61a6, 0x69e6, 0x7207, 0x69e7, 0x69c6, |
0x69c6, 0x61a6, 0x59a5, 0x59a6, 0x5186, 0x3945, 0x20c3, 0x1882, |
0x1082, 0x1082, 0x1081, 0x5268, 0x9d13, 0xb5b5, 0xd6b9, 0xffff, |
0x8432, 0x3187, 0x2145, 0x39e8, 0x52ab, 0x6baf, 0x94d3, 0xa575, |
0xad96, 0xa555, 0x9d14, 0x94f3, 0x9d34, 0xa575, 0x9cf3, 0x8c70, |
0x7c0f, 0x8430, 0x7c30, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, |
0x8cb2, 0x9d13, 0x9d13, 0xa555, 0xad96, 0x94b2, 0x4208, 0x2945, |
0x2104, 0x20e3, 0x20e3, 0x2924, 0x2924, 0x20e3, 0x20e3, 0x2104, |
0x2945, 0x3166, 0x2925, 0x20e3, 0x2924, 0x3145, 0x4185, 0x3965, |
0x2924, 0x3124, 0x3124, 0x3124, 0x4185, 0x6227, 0x7268, 0x7a89, |
0x82cb, 0x82aa, 0x7a48, 0x8b6d, 0x7289, 0x6a07, 0x59c6, 0x59c7, |
0x3965, 0x2903, 0x51a6, 0x6228, 0x49e7, 0x51c6, 0x7a89, 0x7248, |
0x7228, 0x6a07, 0x61c6, 0x61c6, 0x69e6, 0x7227, 0x7207, 0x6a07, |
0x69c6, 0x61a6, 0x61a6, 0x59a6, 0x51a6, 0x4185, 0x28e3, 0x1082, |
0x1061, 0x1082, 0x10a2, 0x20e3, 0x842f, 0xad95, 0xc658, 0xffde, |
0xdf1c, 0xc659, 0xa576, 0x9d34, 0x9d55, 0xad96, 0xadb6, 0xad96, |
0x9d14, 0x9d14, 0x9d34, 0x9d14, 0xa555, 0xa534, 0x94b2, 0x94b1, |
0x8c92, 0x8430, 0x8450, 0x8c71, 0x8c92, 0x94d2, 0x94d2, 0x94d3, |
0x9d14, 0x9d13, 0x9d34, 0xad95, 0xad95, 0x6b6d, 0x3186, 0x2945, |
0x2104, 0x2104, 0x2104, 0x2924, 0x2945, 0x2925, 0x2124, 0x3186, |
0x3186, 0x31a6, 0x39c7, 0x3165, 0x3965, 0x3965, 0x4165, 0x4185, |
0x4185, 0x3944, 0x3144, 0x3144, 0x3944, 0x6207, 0x7268, 0x7a68, |
0x82aa, 0x82aa, 0x7a48, 0x8b4c, 0x7289, 0x6a28, 0x61e7, 0x51a6, |
0x4986, 0x3985, 0x49a6, 0x59e7, 0x4185, 0x49a6, 0x7aa9, 0x7a89, |
0x7268, 0x6a07, 0x69c6, 0x69c6, 0x69e7, 0x7228, 0x7228, 0x7207, |
0x69c6, 0x61c6, 0x61a6, 0x61a6, 0x59a6, 0x49a6, 0x3104, 0x18a2, |
0x1062, 0x1061, 0x1082, 0x1082, 0x6b4c, 0xa554, 0xbdf6, 0xef9d, |
0xffff, 0xef9e, 0xbe59, 0xadd7, 0xadb6, 0xad96, 0xad96, 0x9d54, |
0x9d14, 0x9d34, 0xa555, 0xad75, 0xa555, 0x9cf4, 0x9cf4, 0x94d3, |
0x94d3, 0x94d3, 0x94d3, 0x94d3, 0x9cf3, 0x9d14, 0xa555, 0xad75, |
0xa534, 0x9cf3, 0xa555, 0xadb6, 0x9d14, 0x5269, 0x2924, 0x2104, |
0x2104, 0x2104, 0x2924, 0x31a6, 0x31a7, 0x39c7, 0x3186, 0x3186, |
0x39c7, 0x3166, 0x3165, 0x49c6, 0x5a07, 0x6227, 0x6207, 0x6a48, |
0x61e7, 0x4165, 0x3965, 0x3144, 0x3944, 0x6207, 0x7a68, 0x7aa9, |
0x82a9, 0x82aa, 0x7a89, 0x7aa9, 0x6248, 0x7268, 0x69e7, 0x59a6, |
0x4945, 0x3945, 0x51a6, 0x51c6, 0x3945, 0x51a6, 0x82eb, 0x7aaa, |
0x7a68, 0x7227, 0x69e6, 0x69e6, 0x7207, 0x7248, 0x7248, 0x7227, |
0x69e7, 0x61c6, 0x61a6, 0x61a6, 0x59a6, 0x51a6, 0x3124, 0x18a2, |
0x1061, 0x1882, 0x1082, 0x1081, 0x5288, 0xa533, 0xb5b5, 0xe75c, |
0xffff, 0xef7d, 0xbe18, 0xa595, 0xa555, 0x9d54, 0x9d54, 0x9d34, |
0x9d34, 0x9d55, 0xa575, 0xa575, 0x9cf4, 0x94f3, 0x94f3, 0x94f4, |
0xa555, 0x9cf4, 0xad76, 0x9cf3, 0x94b2, 0xa534, 0xa575, 0xa534, |
0x9d13, 0x9cf3, 0xad75, 0xb5d6, 0x8410, 0x39a6, 0x2904, 0x20e3, |
0x2924, 0x2924, 0x2945, 0x31a6, 0x31a7, 0x4208, 0x4228, 0x39c7, |
0x3165, 0x3144, 0x3945, 0x51e6, 0x6227, 0x6a27, 0x6207, 0x6a27, |
0x59a6, 0x3945, 0x3944, 0x3103, 0x3924, 0x59c6, 0x7228, 0x7a68, |
0x7a89, 0x7268, 0x7268, 0x6a07, 0x51c6, 0x6a28, 0x6a27, 0x59c6, |
0x5186, 0x4965, 0x51c6, 0x51c6, 0x4165, 0x6228, 0x8b0b, 0x82aa, |
0x7a68, 0x7207, 0x69e7, 0x6a07, 0x7207, 0x7228, 0x7248, 0x7228, |
0x6a07, 0x69c6, 0x61a6, 0x61a6, 0x59a6, 0x51c6, 0x3965, 0x20c2, |
0x1882, 0x1082, 0x1082, 0x10a2, 0x39a5, 0x9d13, 0xad95, 0xdf1b, |
0xffff, 0xd71b, 0xa596, 0x9d34, 0x9514, 0x9513, 0x9d14, 0x9d54, |
0xa575, 0xa555, 0x9d34, 0x94f3, 0x9d14, 0x94d3, 0x8cb2, 0xa575, |
0x9d35, 0x9d14, 0xadb6, 0xa555, 0x9cf4, 0x94b2, 0x94b2, 0x9d14, |
0x9d14, 0x9cf3, 0xad75, 0xad95, 0x630c, 0x3145, 0x2924, 0x2104, |
0x18c3, 0x18c3, 0x2965, 0x39e7, 0x4a29, 0x4a49, 0x4208, 0x3186, |
0x3144, 0x3965, 0x4165, 0x49a5, 0x6207, 0x6227, 0x6207, 0x5986, |
0x4986, 0x49e7, 0x3944, 0x3103, 0x3103, 0x5185, 0x69e7, 0x61e7, |
0x61c6, 0x59a6, 0x5185, 0x59a6, 0x5185, 0x51a6, 0x59e6, 0x59c6, |
0x51c6, 0x51a6, 0x51a6, 0x49a6, 0x49a6, 0x7289, 0x830b, 0x82a9, |
0x7a48, 0x6a07, 0x69e7, 0x6a07, 0x7207, 0x7228, 0x7248, 0x7228, |
0x6a07, 0x69c6, 0x61a6, 0x61a6, 0x59a6, 0x51a6, 0x3965, 0x20c2, |
0x1882, 0x1081, 0x1082, 0x1082, 0x3165, 0x9cf2, 0xad74, 0xd6da, |
0xffff, 0xce99, 0x9d34, 0x94f3, 0x94f3, 0x9d34, 0xa575, 0xad96, |
0xa555, 0x9514, 0x9514, 0x94f4, 0x8c92, 0x8c92, 0xa555, 0xa576, |
0x9d14, 0x9d34, 0xadb6, 0xa576, 0x9d14, 0x73ae, 0x4208, 0x634d, |
0x9cf3, 0x9d14, 0xad75, 0x94b2, 0x5249, 0x3145, 0x2945, 0x2104, |
0x18c3, 0x18c3, 0x3186, 0x39e7, 0x4a28, 0x5289, 0x4a28, 0x3165, |
0x2904, 0x3104, 0x4165, 0x51c6, 0x51e6, 0x6207, 0x61e7, 0x5966, |
0x49a6, 0x5227, 0x3965, 0x3103, 0x30e3, 0x3924, 0x5186, 0x59a6, |
0x61e7, 0x61e6, 0x5185, 0x5185, 0x51a6, 0x4965, 0x4165, 0x41a6, |
0x3985, 0x4185, 0x4986, 0x49a6, 0x6a48, 0x82ca, 0x82eb, 0x82a9, |
0x7a69, 0x7207, 0x69e7, 0x6a07, 0x7227, 0x7228, 0x7228, 0x7227, |
0x6a07, 0x69e6, 0x61c6, 0x61a6, 0x59a6, 0x51c6, 0x4165, 0x20c2, |
0x1061, 0x1061, 0x1082, 0x1082, 0x39a6, 0x9cf2, 0xad74, 0xce99, |
0xdf3d, 0x8cd3, 0x6b8e, 0x7c0f, 0x8c91, 0x94d2, 0x8c92, 0x8431, |
0x7c51, 0x8452, 0x7c31, 0x7c10, 0x7bf0, 0x94b3, 0xa555, 0xa575, |
0xa555, 0xa555, 0xad96, 0x9d34, 0x6b6d, 0x2944, 0x10a2, 0x1905, |
0x632d, 0x9cf3, 0xad55, 0x7b6d, 0x49c7, 0x3165, 0x2945, 0x2104, |
0x2104, 0x2965, 0x39c7, 0x4208, 0x4207, 0x41e7, 0x41c7, 0x3965, |
0x2924, 0x2903, 0x3104, 0x3944, 0x4185, 0x6207, 0x69e7, 0x5986, |
0x49a6, 0x5207, 0x4165, 0x3124, 0x3103, 0x30e3, 0x4145, 0x51a6, |
0x61e7, 0x6a07, 0x61c6, 0x59a6, 0x59a6, 0x5986, 0x5185, 0x4985, |
0x4165, 0x4986, 0x3944, 0x6a48, 0x7aaa, 0x82eb, 0x8aeb, 0x8289, |
0x7a69, 0x7207, 0x6a07, 0x7207, 0x7227, 0x7227, 0x7227, 0x7227, |
0x6a07, 0x69e6, 0x61c6, 0x61a6, 0x59a6, 0x59c6, 0x4165, 0x20c2, |
0x1061, 0x1061, 0x1082, 0x1082, 0x39c6, 0x9cf2, 0xa574, 0xce99, |
0x7cf8, 0x320a, 0x2147, 0x3a08, 0x4229, 0x31c8, 0x31c8, 0x31c8, |
0x31e9, 0x31e9, 0x4209, 0x4a6b, 0x4a8c, 0x52ed, 0x632d, 0x73cf, |
0x7c31, 0x8451, 0x7c30, 0x5b0b, 0x2125, 0x1082, 0x18a3, 0x1083, |
0x2125, 0x7bcf, 0x8c50, 0x6aaa, 0x41a6, 0x3165, 0x2924, 0x2104, |
0x2104, 0x3186, 0x4228, 0x4a28, 0x39c6, 0x3986, 0x3965, 0x3965, |
0x3945, 0x3124, 0x3103, 0x3103, 0x4165, 0x59e7, 0x71e8, 0x61a7, |
0x59e7, 0x5247, 0x3124, 0x28e3, 0x20a2, 0x28c3, 0x4145, 0x51a6, |
0x59e7, 0x6a07, 0x7207, 0x69c6, 0x69c7, 0x69c7, 0x61c6, 0x69c6, |
0x7207, 0x7207, 0x59e6, 0x7289, 0x82ca, 0x82eb, 0x82ca, 0x7a89, |
0x7a68, 0x7228, 0x6a07, 0x7227, 0x7227, 0x7228, 0x7228, 0x7227, |
0x6a07, 0x69e6, 0x61c6, 0x61a6, 0x59a5, 0x59a6, 0x4165, 0x20c2, |
0x1061, 0x1061, 0x10a2, 0x1082, 0x41e7, 0x9d13, 0xa554, 0xce99, |
0x9558, 0x320a, 0x1927, 0x1948, 0x2148, 0x39e8, 0x2167, 0x1947, |
0x2126, 0x1906, 0x2967, 0x2988, 0x2189, 0x2168, 0x1906, 0x10c4, |
0x18e5, 0x31a8, 0x2125, 0x10a3, 0x10a3, 0x10a3, 0x18c3, 0x10c3, |
0x18c4, 0x6b4d, 0x7b4c, 0x6228, 0x3986, 0x2945, 0x2924, 0x18c3, |
0x18e3, 0x2965, 0x39c7, 0x39e7, 0x39a6, 0x3165, 0x3144, 0x3145, |
0x3965, 0x3124, 0x3124, 0x3124, 0x3945, 0x59e7, 0x7a29, 0x69e8, |
0x6aa9, 0x62a9, 0x3104, 0x2904, 0x28e3, 0x3924, 0x4985, 0x51a6, |
0x6a07, 0x7a89, 0x7a48, 0x71e7, 0x71e7, 0x69c7, 0x69e7, 0x69e7, |
0x7227, 0x7227, 0x6207, 0x6a48, 0x7a89, 0x82ca, 0x82ca, 0x7aa9, |
0x7a89, 0x7228, 0x6a07, 0x7227, 0x7227, 0x7228, 0x7228, 0x7227, |
0x6a07, 0x61c6, 0x61a6, 0x59a5, 0x5985, 0x51a5, 0x3944, 0x1882, |
0x1061, 0x1082, 0x1082, 0x1081, 0x4228, 0xa533, 0xad74, 0xce99, |
0x9557, 0x3a09, 0x2145, 0x1105, 0x3186, 0x5246, 0x3186, 0x2167, |
0x1905, 0x18e5, 0x10e6, 0x1926, 0x2966, 0x10c4, 0x10a4, 0x1083, |
0x10c4, 0x1906, 0x18e4, 0x2125, 0x1906, 0x1906, 0x2125, 0x1905, |
0x18c4, 0x6b4d, 0x7b0c, 0x59e7, 0x4186, 0x2924, 0x20e3, 0x18a2, |
0x18c3, 0x2104, 0x2965, 0x39a6, 0x3186, 0x3145, 0x3965, 0x3965, |
0x3945, 0x3124, 0x3145, 0x3124, 0x3944, 0x59e7, 0x7a6a, 0x7229, |
0x72eb, 0x730b, 0x4165, 0x3945, 0x3124, 0x49a6, 0x51c7, 0x59e7, |
0x7269, 0x8b0b, 0x8289, 0x7207, 0x69e7, 0x69c6, 0x61c6, 0x61a6, |
0x59c6, 0x59c6, 0x4165, 0x51c6, 0x6a48, 0x7269, 0x830b, 0x82eb, |
0x7a89, 0x7228, 0x7207, 0x6a07, 0x6a07, 0x7227, 0x7227, 0x7207, |
0x6a07, 0x61c6, 0x61a6, 0x5985, 0x5185, 0x5185, 0x3124, 0x1882, |
0x1061, 0x1082, 0x1082, 0x1082, 0x630b, 0xa533, 0xad74, 0xd6da, |
0x6c98, 0x1969, 0x2125, 0x10e5, 0x2966, 0x2147, 0x2967, 0x2146, |
0x18e4, 0x18c4, 0x10c4, 0x2104, 0x3164, 0x10a4, 0x10c4, 0x18e4, |
0x1905, 0x1906, 0x2146, 0x18e5, 0x10e5, 0x2146, 0x2967, 0x2147, |
0x2106, 0x630c, 0x72cb, 0x59e7, 0x49a6, 0x3145, 0x2104, 0x18c3, |
0x18c3, 0x2104, 0x2945, 0x3165, 0x3145, 0x3965, 0x4186, 0x3965, |
0x3124, 0x3124, 0x3124, 0x2903, 0x3945, 0x59e7, 0x7a6a, 0x6a08, |
0x72aa, 0x6aea, 0x5186, 0x4145, 0x3124, 0x4185, 0x49a6, 0x51c6, |
0x6a28, 0x7a89, 0x7228, 0x69e7, 0x61c6, 0x59a6, 0x5165, 0x4965, |
0x3965, 0x3965, 0x3944, 0x4185, 0x59e7, 0x5a07, 0x7aca, 0x8b0b, |
0x82aa, 0x7a68, 0x7227, 0x69e6, 0x69e7, 0x7207, 0x7207, 0x69e7, |
0x69e6, 0x61a6, 0x61a6, 0x5985, 0x5185, 0x4965, 0x28e3, 0x1061, |
0x1061, 0x1082, 0x1081, 0x2124, 0x8c50, 0xa554, 0xad95, 0xdf1b, |
0x6c15, 0x1949, 0x10c5, 0x10c4, 0x08c5, 0x10e5, 0x10c5, 0x10c5, |
0x0883, 0x10c3, 0x10c4, 0x10e6, 0x10c6, 0x10c6, 0x10c5, 0x1905, |
0x31a8, 0x4a6b, 0x73cf, 0x5aec, 0x3186, 0x20e3, 0x1906, 0x2966, |
0x3187, 0x6b6e, 0x7b0c, 0x6208, 0x41a6, 0x3145, 0x2904, 0x20e3, |
0x18c3, 0x20e4, 0x2124, 0x2945, 0x3186, 0x3986, 0x41a6, 0x3124, |
0x2904, 0x3945, 0x3124, 0x28e3, 0x3124, 0x59e7, 0x7a49, 0x6a08, |
0x6a89, 0x6aca, 0x4145, 0x3104, 0x28e3, 0x28e3, 0x3944, 0x4985, |
0x51a6, 0x61e7, 0x69e7, 0x59a6, 0x5185, 0x4965, 0x4124, 0x4985, |
0x4185, 0x4986, 0x49a6, 0x49a6, 0x49a6, 0x51a6, 0x6228, 0x82eb, |
0x7a89, 0x7a68, 0x7227, 0x69c6, 0x69c6, 0x69e6, 0x69e7, 0x69e7, |
0x69c6, 0x61a5, 0x59a5, 0x5185, 0x4985, 0x3944, 0x20a2, 0x1061, |
0x1061, 0x1082, 0x1082, 0x4a48, 0x9d12, 0xa554, 0xb5b5, 0xe75c, |
0x94f6, 0x31c9, 0x1905, 0x10a4, 0x18e4, 0x3164, 0x2923, 0x1905, |
0x10a4, 0x10a4, 0x10a4, 0x10c5, 0x2125, 0x2988, 0x4a8b, 0x6b6e, |
0x7c10, 0x94b3, 0xad96, 0xa534, 0x7bef, 0x39e7, 0x10a3, 0x2925, |
0x4209, 0x6baf, 0x83ef, 0x6a69, 0x4186, 0x2924, 0x20e3, 0x18c3, |
0x20e3, 0x20e4, 0x2924, 0x3165, 0x3165, 0x3986, 0x3965, 0x3145, |
0x3944, 0x3945, 0x28e3, 0x28e3, 0x3124, 0x51a6, 0x7208, 0x69c7, |
0x5a07, 0x6288, 0x4165, 0x3124, 0x28e3, 0x20c2, 0x30e3, 0x4965, |
0x51a6, 0x59c6, 0x59c6, 0x4965, 0x4965, 0x4145, 0x4985, 0x59e7, |
0x59c6, 0x5186, 0x4985, 0x59c6, 0x51c6, 0x4986, 0x4986, 0x7289, |
0x7aa9, 0x7248, 0x6a07, 0x61c6, 0x61c6, 0x69c6, 0x69c6, 0x69c6, |
0x61a6, 0x5985, 0x5185, 0x5165, 0x4965, 0x3104, 0x1882, 0x1061, |
0x1061, 0x1082, 0x18a2, 0x73ad, 0xa554, 0xad74, 0xbdf6, 0xef9d, |
0x9dda, 0x3a2b, 0x2125, 0x10c4, 0x2104, 0x3145, 0x2945, 0x2125, |
0x18c3, 0x10c4, 0x39e8, 0x52aa, 0x73ae, 0x8430, 0x9d34, 0xb5d6, |
0xb5d6, 0xadb6, 0xad95, 0xa555, 0x9d34, 0x7c10, 0x2986, 0x0883, |
0x3a0a, 0x8431, 0x9cf3, 0x730c, 0x3986, 0x3145, 0x2945, 0x2104, |
0x2104, 0x2965, 0x31a6, 0x3165, 0x3145, 0x3985, 0x3986, 0x3945, |
0x3945, 0x3945, 0x2903, 0x28e3, 0x3124, 0x51a6, 0x69e7, 0x6186, |
0x51a6, 0x5a48, 0x49a5, 0x3924, 0x28e3, 0x20a2, 0x28e3, 0x4945, |
0x5186, 0x51a6, 0x5185, 0x5185, 0x59a6, 0x4985, 0x6a48, 0x6207, |
0x51a6, 0x4145, 0x4165, 0x51a6, 0x5a07, 0x5207, 0x4165, 0x6227, |
0x7a89, 0x7248, 0x6a07, 0x61c6, 0x61a6, 0x61a6, 0x69c6, 0x61c6, |
0x59a5, 0x5185, 0x5165, 0x4965, 0x4145, 0x28e3, 0x1061, 0x0841, |
0x1062, 0x1082, 0x31a6, 0x94b1, 0xa554, 0xad95, 0xc657, 0xffde, |
0x857b, 0x2a2e, 0x1906, 0x10c4, 0x10c4, 0x10c4, 0x10a4, 0x10a3, |
0x31a7, 0x634d, 0x8c92, 0x9d13, 0xa575, 0xad95, 0xa575, 0xa575, |
0xa575, 0xa555, 0xa555, 0xa554, 0xa534, 0xa534, 0x6b6d, 0x424a, |
0x73ef, 0x9d13, 0xa534, 0x8c30, 0x4a28, 0x3165, 0x3165, 0x2924, |
0x2104, 0x3186, 0x39e7, 0x41e7, 0x39a6, 0x39a6, 0x3986, 0x3145, |
0x3945, 0x3124, 0x3104, 0x3103, 0x3964, 0x59c6, 0x61e7, 0x5986, |
0x4966, 0x49c6, 0x3965, 0x30e3, 0x20c2, 0x20a2, 0x3903, 0x5186, |
0x59c6, 0x59c6, 0x6207, 0x7228, 0x61e7, 0x5a07, 0x7269, 0x6a48, |
0x51a6, 0x4965, 0x3965, 0x4165, 0x6207, 0x5a48, 0x4986, 0x5a07, |
0x7248, 0x7227, 0x6a07, 0x61c6, 0x61a6, 0x61a5, 0x61a6, 0x59a5, |
0x5985, 0x5185, 0x4965, 0x4965, 0x3124, 0x18a2, 0x1061, 0x1061, |
0x1082, 0x18a2, 0x6b6c, 0xa533, 0xad74, 0xb5d5, 0xd6b9, 0xffff, |
0xadb9, 0x426c, 0x1905, 0x10a3, 0x10a3, 0x10a3, 0x2986, 0x5aec, |
0x8431, 0x9d34, 0xa575, 0x9d34, 0x9d14, 0x9d14, 0x9d34, 0x9d34, |
0x9d34, 0x9d14, 0x9d13, 0x94f3, 0x94d3, 0x9cf3, 0x94b2, 0x94b2, |
0x9d14, 0xa534, 0x9d14, 0xa554, 0x738e, 0x39a6, 0x3165, 0x2924, |
0x20e3, 0x2945, 0x41e7, 0x4228, 0x4207, 0x4207, 0x39c6, 0x3145, |
0x3965, 0x3104, 0x3124, 0x3944, 0x49a5, 0x51c6, 0x59c6, 0x5165, |
0x4945, 0x4165, 0x3965, 0x28e3, 0x20c2, 0x28e3, 0x4144, 0x61a6, |
0x7227, 0x7a69, 0x82aa, 0x7a69, 0x61e7, 0x6228, 0x6a48, 0x6a28, |
0x51c6, 0x49c6, 0x2924, 0x4165, 0x6207, 0x51e7, 0x51c6, 0x6207, |
0x7228, 0x6a07, 0x61e6, 0x61c6, 0x61a6, 0x59a5, 0x59a5, 0x59a5, |
0x5185, 0x5185, 0x4965, 0x4145, 0x28e3, 0x18a2, 0x1081, 0x18a2, |
0x1082, 0x3185, 0x8c91, 0xa554, 0xad95, 0xbe16, 0xe75b, 0xffff, |
0xc67c, 0x424b, 0x10c4, 0x1083, 0x3a09, 0x6b8e, 0x8c72, 0x9d34, |
0xa555, 0x9d34, 0x9d14, 0x9d14, 0x9d14, 0x94d3, 0x9513, 0x9d34, |
0x9d14, 0x9d13, 0x94d2, 0x8c92, 0x8c91, 0x8c92, 0x94b2, 0x9cf3, |
0x9cf3, 0x9d13, 0x9d13, 0xa554, 0x9cf3, 0x5269, 0x3186, 0x2944, |
0x2924, 0x2124, 0x3186, 0x4228, 0x4a69, 0x4a49, 0x39c6, 0x3165, |
0x3144, 0x2904, 0x2903, 0x3944, 0x51c6, 0x59e6, 0x61e7, 0x59c6, |
0x59a6, 0x4965, 0x3124, 0x3144, 0x2903, 0x28e3, 0x5185, 0x6a07, |
0x7248, 0x82aa, 0x82aa, 0x7a89, 0x6207, 0x6228, 0x6a27, 0x61e7, |
0x51a6, 0x49a6, 0x20c2, 0x3945, 0x59e7, 0x51a6, 0x51c6, 0x6207, |
0x6a07, 0x69e7, 0x61c6, 0x59a6, 0x61a6, 0x59a5, 0x59a5, 0x5185, |
0x4985, 0x4965, 0x4145, 0x2903, 0x18c2, 0x18a2, 0x1082, 0x1082, |
0x2103, 0x6b6d, 0xa533, 0xad74, 0xb5b5, 0xc657, 0xf7bd, 0xffff, |
0xd73f, 0x5330, 0x634e, 0x8451, 0x94f4, 0xa596, 0xa596, 0xad96, |
0xa595, 0x9d55, 0x9d14, 0x9513, 0x9d34, 0x9d14, 0x9513, 0x9d34, |
0x9d13, 0x9cf3, 0x94d2, 0x8c92, 0x8c71, 0x8c71, 0x8c92, 0x94d3, |
0x9cf3, 0x9d13, 0x9cf3, 0x9d14, 0xa534, 0x73ae, 0x41e7, 0x3166, |
0x2945, 0x20e3, 0x2104, 0x3186, 0x39c7, 0x4a28, 0x39c7, 0x3186, |
0x2904, 0x20c3, 0x20e3, 0x3124, 0x4985, 0x59c6, 0x6227, 0x6207, |
0x6207, 0x59c6, 0x3944, 0x3144, 0x2903, 0x3103, 0x51c6, 0x7248, |
0x7268, 0x82aa, 0x82aa, 0x8289, 0x7228, 0x5a07, 0x61e7, 0x59a6, |
0x5185, 0x4165, 0x3144, 0x4144, 0x51a6, 0x51a6, 0x51a6, 0x59c6, |
0x61e7, 0x61c6, 0x59c6, 0x59a5, 0x59a5, 0x5985, 0x5185, 0x4965, |
0x4965, 0x4165, 0x2903, 0x18c2, 0x18c2, 0x18c2, 0x1082, 0x1061, |
0x4207, 0x94b2, 0xad74, 0xad95, 0xb5f6, 0xd6d9, 0xffff, 0xffff, |
0xf7df, 0xdefc, 0xe75d, 0xcedb, 0xb5f7, 0xa595, 0xa555, 0xa575, |
0xa596, 0xa575, 0x9d34, 0x9513, 0x9d34, 0xa555, 0x9d34, 0x9cf3, |
0x9cf2, 0x9cf3, 0x9d13, 0x9cf3, 0x8c92, 0x8451, 0x8451, 0x8c92, |
0x94d2, 0x9cf3, 0x9d13, 0x9d34, 0x9d14, 0x94b2, 0x5269, 0x3165, |
0x2945, 0x2124, 0x20e3, 0x2104, 0x2124, 0x3186, 0x3186, 0x2945, |
0x2104, 0x18c3, 0x18c3, 0x20e3, 0x3124, 0x3964, 0x4185, 0x4185, |
0x4185, 0x4185, 0x3964, 0x2903, 0x28e3, 0x3103, 0x49a6, 0x6a27, |
0x7268, 0x8289, 0x82aa, 0x7a69, 0x7a48, 0x51c6, 0x61e6, 0x5185, |
0x4965, 0x4145, 0x3124, 0x4144, 0x4985, 0x51a6, 0x51a6, 0x59c6, |
0x59c6, 0x59c6, 0x59a6, 0x59a5, 0x59a5, 0x5185, 0x4985, 0x4965, |
0x4165, 0x3124, 0x20c3, 0x18c2, 0x18c2, 0x18a2, 0x1081, 0x20e3, |
0x73ae, 0xa554, 0xad74, 0xb5b5, 0xc637, 0xef7c, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xef9e, 0xbe38, 0xa575, 0x9d34, 0x9d34, |
0x9d55, 0xa555, 0x9d34, 0x9d13, 0x9d14, 0x9d34, 0x9d13, 0x94b1, |
0x8c70, 0x8c91, 0x9d14, 0x9d34, 0x9cf3, 0x8c92, 0x8430, 0x8430, |
0x8c71, 0x94b2, 0x94d3, 0x9d13, 0x9d13, 0x9cf3, 0x7c10, 0x3186, |
0x2945, 0x2924, 0x20e3, 0x18e3, 0x18e3, 0x2124, 0x3165, 0x2925, |
0x2104, 0x20e3, 0x2104, 0x20e3, 0x20e3, 0x2903, 0x3124, 0x3144, |
0x3144, 0x3144, 0x3124, 0x2903, 0x28e3, 0x3924, 0x51c6, 0x6a07, |
0x7248, 0x7a69, 0x7a69, 0x7a48, 0x7a48, 0x51a6, 0x61c6, 0x59a6, |
0x4965, 0x3944, 0x3124, 0x3944, 0x4165, 0x4986, 0x49a5, 0x51c6, |
0x51c6, 0x51a6, 0x59a6, 0x59a6, 0x51a5, 0x4985, 0x4965, 0x3965, |
0x2924, 0x20c3, 0x18a2, 0x18a2, 0x18c2, 0x18a2, 0x18a2, 0x630b, |
0x9d13, 0xad74, 0xb595, 0xbdf6, 0xd6b9, 0xf7de, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xd71c, 0xb5f7, 0xa575, 0x9d34, |
0x9d34, 0x9d34, 0x9d13, 0x94f3, 0x9d13, 0x9d13, 0x94d3, 0x94b2, |
0x94b1, 0x94d2, 0x9d14, 0x9d13, 0x9d13, 0x9cf3, 0x8c92, 0x7c10, |
0x7c10, 0x8451, 0x9492, 0x94d3, 0x9cf3, 0x9cf3, 0x94b2, 0x632c, |
0x2945, 0x2924, 0x2104, 0x20e3, 0x18e3, 0x18c3, 0x2924, 0x2104, |
0x20e3, 0x18c3, 0x18c3, 0x18c3, 0x18c3, 0x20c3, 0x28e3, 0x3144, |
0x3945, 0x3124, 0x2904, 0x3124, 0x3124, 0x4185, 0x59e6, 0x6a06, |
0x7227, 0x7228, 0x7248, 0x7228, 0x7208, 0x51a6, 0x51c7, 0x5185, |
0x4165, 0x3924, 0x3924, 0x3944, 0x4165, 0x49a6, 0x49c6, 0x51c6, |
0x51a6, 0x51a6, 0x51a5, 0x51a5, 0x4985, 0x4165, 0x3944, 0x2924, |
0x20e3, 0x18a2, 0x10a2, 0x18a2, 0x18a2, 0x2944, 0x630b, 0x9cd2, |
0xad74, 0xad94, 0xb5d5, 0xc637, 0xe75b, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xefbe, 0xceba, 0xadd7, 0xa575, |
0x9d34, 0x9d13, 0x94f3, 0x94f3, 0x9d13, 0x9d13, 0x94b2, 0x8cb2, |
0x94d2, 0x94f3, 0x9d13, 0x9d13, 0x9d14, 0x9d13, 0x94d3, 0x8c71, |
0x7c10, 0x7c10, 0x8450, 0x8c71, 0x94b2, 0x94d3, 0x94b2, 0x8451, |
0x5acb, 0x2924, 0x2124, 0x18e3, 0x18c3, 0x18c2, 0x18c3, 0x2103, |
0x18c3, 0x20c3, 0x20e3, 0x2904, 0x20e3, 0x2903, 0x2924, 0x3124, |
0x3944, 0x3944, 0x3944, 0x3964, 0x4165, 0x51a5, 0x59e6, 0x61e6, |
0x6a07, 0x6a07, 0x6a07, 0x69e7, 0x61c6, 0x61c6, 0x51c6, 0x49a6, |
0x4985, 0x4165, 0x4165, 0x4185, 0x51e7, 0x49c6, 0x51a6, 0x49a5, |
0x51a6, 0x51a5, 0x4985, 0x4165, 0x3944, 0x2904, 0x2103, 0x20e3, |
0x20e3, 0x18c2, 0x18a2, 0x20e3, 0x31a6, 0x73ae, 0xa513, 0xad54, |
0xad74, 0xb5b5, 0xbe16, 0xd6b9, 0xf7de, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd71c, 0xb617, 0xa575, |
0x9d34, 0x94f3, 0x94d3, 0x94d3, 0x94f3, 0x94f3, 0x94d3, 0x94d2, |
0x94d2, 0x94b2, 0x94b2, 0x94b2, 0x94d3, 0x94f3, 0x94f3, 0x94d2, |
0x8451, 0x7bef, 0x7c10, 0x7c10, 0x8410, 0x8451, 0x8c71, 0x8c71, |
0x7c0f, 0x5269, 0x2945, 0x18e3, 0x18c3, 0x18c3, 0x18a2, 0x20e3, |
0x18a2, 0x18c3, 0x20e3, 0x20e3, 0x20c3, 0x2904, 0x3144, 0x3944, |
0x3944, 0x4165, 0x4185, 0x4165, 0x49a5, 0x51c6, 0x51c6, 0x51c6, |
0x59c6, 0x59c6, 0x59c6, 0x59c6, 0x59c6, 0x59c6, 0x59c6, 0x49a6, |
0x49a6, 0x49c6, 0x49c6, 0x41a6, 0x41a6, 0x49c6, 0x49a5, 0x49a5, |
0x49a6, 0x4185, 0x3124, 0x2903, 0x20e3, 0x20e3, 0x20e3, 0x20e3, |
0x20c2, 0x20e3, 0x39c6, 0x738d, 0x8c91, 0xa513, 0xad74, 0xad74, |
0xad95, 0xbdf6, 0xc678, 0xe75b, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd6db, 0xadb6, 0x9cf3, |
0x8cb2, 0x8451, 0x8450, 0x8430, 0x7c10, 0x7c10, 0x7c10, 0x7c30, |
0x7c10, 0x7c10, 0x7c30, 0x8431, 0x8451, 0x8491, 0x8c92, 0x8c92, |
0x8c92, 0x7c10, 0x73cf, 0x7bef, 0x7bef, 0x7bef, 0x7c10, 0x7bef, |
0x7bef, 0x73ae, 0x6b4d, 0x4208, 0x2104, 0x18c3, 0x18c2, 0x18c3, |
0x18a2, 0x18c2, 0x18c3, 0x20c3, 0x2924, 0x3165, 0x3965, 0x3965, |
0x3965, 0x4185, 0x4185, 0x49a5, 0x51c6, 0x51c6, 0x51c6, 0x51c6, |
0x51c6, 0x51c6, 0x51c6, 0x51c6, 0x51c6, 0x51c6, 0x51c6, 0x51a6, |
0x51e6, 0x5a07, 0x5207, 0x3144, 0x3965, 0x4185, 0x4185, 0x4185, |
0x3124, 0x2903, 0x2903, 0x2903, 0x2924, 0x3165, 0x3985, 0x39c6, |
0x5aaa, 0x840f, 0x9cd2, 0xa533, 0xa554, 0xad54, 0xad74, 0xad95, |
0xb5d6, 0xc637, 0xd6fa, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd6fb, 0xadb6, 0x94f3, |
0x8c92, 0x8471, 0x7c51, 0x7c31, 0x7c31, 0x7c31, 0x8451, 0x8451, |
0x8472, 0x8cb2, 0x8cd3, 0x94f3, 0x9514, 0x9d14, 0x9514, 0x94d3, |
0x8451, 0x7bef, 0x6b8e, 0x634d, 0x632d, 0x630c, 0x5b0c, 0x630c, |
0x5acb, 0x4228, 0x3165, 0x528a, 0x5289, 0x2924, 0x20e3, 0x2103, |
0x20e3, 0x20e3, 0x20e3, 0x20e3, 0x2924, 0x3124, 0x3145, 0x3965, |
0x3985, 0x4185, 0x4165, 0x4165, 0x4185, 0x49a6, 0x49a5, 0x51c6, |
0x51c6, 0x51c6, 0x49c6, 0x49a6, 0x49c6, 0x49c6, 0x49c6, 0x49c6, |
0x49c6, 0x49e6, 0x49e6, 0x3985, 0x3985, 0x3985, 0x2924, 0x2903, |
0x2924, 0x3144, 0x4a28, 0x6b6d, 0x8c71, 0x94b2, 0x9cd2, 0x9cf3, |
0xa513, 0xa554, 0xa554, 0xad54, 0xad54, 0xad74, 0xad95, 0xb5b5, |
0xbe17, 0xce98, 0xef9c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xefdf, 0xcedb, |
0xb618, 0xadb6, 0x9d55, 0x9d34, 0x9514, 0x94f3, 0x8c92, 0x8471, |
0x7c30, 0x73cf, 0x6bae, 0x6b6d, 0x632c, 0x5aeb, 0x52aa, 0x52aa, |
0x52aa, 0x4229, 0x31c7, 0x31a6, 0x2945, 0x18e3, 0x18c3, 0x18c3, |
0x18c3, 0x1082, 0x4a69, 0x9cf3, 0x9cd2, 0x8430, 0x632c, 0x4a69, |
0x39a6, 0x2924, 0x20e3, 0x2103, 0x2924, 0x2924, 0x2904, 0x2924, |
0x3144, 0x3124, 0x3165, 0x3965, 0x3965, 0x3964, 0x3964, 0x4185, |
0x4185, 0x4185, 0x41a6, 0x41a6, 0x41a6, 0x49c6, 0x41a6, 0x4185, |
0x3985, 0x3965, 0x3965, 0x3965, 0x3985, 0x4a08, 0x5269, 0x5289, |
0x632c, 0x840f, 0xa513, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, |
0xa554, 0xa554, 0xa554, 0xad54, 0xad74, 0xad95, 0xb5b5, 0xbdf6, |
0xce78, 0xe73b, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffde, 0xf7be, 0xd69a, 0xb596, 0x9cd3, 0x8451, 0x6b8e, |
0x52cb, 0x4228, 0x31c6, 0x2945, 0x18e4, 0x10a3, 0x10a3, 0x10a3, |
0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x1082, 0x10a2, 0x10a2, 0x10a2, |
0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x1082, 0x1082, 0x1082, |
0x2104, 0x738e, 0xa534, 0xad74, 0xad74, 0xad54, 0xa554, 0x9d13, |
0x9491, 0x73ae, 0x4a48, 0x4207, 0x39c6, 0x39a6, 0x3985, 0x3165, |
0x3165, 0x3145, 0x3124, 0x3144, 0x3144, 0x3124, 0x3144, 0x3144, |
0x3144, 0x3145, 0x3965, 0x3965, 0x4165, 0x4165, 0x4165, 0x4965, |
0x5186, 0x59c7, 0x61e7, 0x59e7, 0x840f, 0xa534, 0xa534, 0xa534, |
0xa554, 0xa554, 0xad54, 0xad54, 0xa554, 0xa554, 0xa554, 0xa554, |
0xa554, 0xa554, 0xad54, 0xad74, 0xad95, 0xb5b5, 0xbdf6, 0xc657, |
0xdefa, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xa536, 0x52ab, 0x3186, 0x2104, 0x18c3, |
0x10a3, 0x1082, 0x1082, 0x1082, 0x1082, 0x0862, 0x0862, 0x0862, |
0x0862, 0x0862, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x1062, 0x4228, |
0x9cd3, 0xa554, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xa554, 0xa534, 0x9cd2, 0x94b2, 0x94b1, 0x8450, 0x840f, 0x7bce, |
0x6b4c, 0x62eb, 0x5acb, 0x5aeb, 0x630b, 0x632c, 0x5aca, 0x4a08, |
0x49c6, 0x59c6, 0x61c7, 0x59c6, 0x59a6, 0x59a6, 0x69c7, 0x7208, |
0x7a49, 0x7a69, 0x7aeb, 0x9cb2, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xa554, 0xad54, 0xad54, 0xad54, 0xa554, 0xa554, 0xa554, |
0xa554, 0xad54, 0xad74, 0xad95, 0xb5b5, 0xb5d6, 0xc637, 0xd6b9, |
0xef9d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xce7b, 0x6b4f, 0x39c8, 0x2125, 0x18e4, |
0x18a3, 0x10a2, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x1082, 0x1082, |
0x0862, 0x0862, 0x1062, 0x1082, 0x1082, 0x1082, 0x2965, 0x94d2, |
0xad74, 0xad54, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad54, 0xa554, 0xad54, 0xa554, 0xad54, |
0xad54, 0xad54, 0xa554, 0xa554, 0xa554, 0xa554, 0xad54, 0xa554, |
0xa513, 0x9cf3, 0x94b2, 0x8c30, 0x7b8d, 0x732c, 0x832c, 0x8b6d, |
0x8bae, 0x9c92, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xa554, 0xa554, 0xad54, 0xa554, 0xa554, 0xad54, 0xad54, |
0xad74, 0xad74, 0xad95, 0xb5b5, 0xbdd6, 0xc637, 0xce99, 0xe75c, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xf7bf, 0x9494, 0x4a6b, 0x3187, 0x2105, |
0x18c3, 0x10a3, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x1062, 0x1082, 0x1082, 0x1082, 0x1082, 0x7bce, 0xa554, |
0xad54, 0xa554, 0xad54, 0xad74, 0xad74, 0xad54, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xa554, 0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad74, |
0xad74, 0xad95, 0xb5b5, 0xbdd6, 0xc637, 0xce99, 0xe73b, 0xfffe, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xc63b, 0x6b4f, 0x4209, 0x2946, |
0x20e4, 0x18c3, 0x10a3, 0x10a2, 0x1082, 0x1082, 0x1082, 0x0862, |
0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x1062, 0x1062, 0x1082, 0x1082, 0x0861, 0x4208, 0x9cf2, 0xa574, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad74, 0xad54, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad54, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xa554, 0xa554, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad74, 0xad74, 0xad75, |
0xb595, 0xb5b5, 0xbdf6, 0xc637, 0xce99, 0xe73b, 0xf7de, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xef7f, 0x9494, 0x528b, 0x31a7, |
0x2125, 0x18e4, 0x18c3, 0x10a3, 0x1082, 0x1082, 0x1082, 0x0862, |
0x1062, 0x0862, 0x0862, 0x0862, 0x0861, 0x0861, 0x0862, 0x0862, |
0x0862, 0x1062, 0x1082, 0x1082, 0x0861, 0x6b8d, 0xa534, 0xa554, |
0xa554, 0xa554, 0xa554, 0xad54, 0xad54, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad54, |
0xad74, 0xad74, 0xad54, 0xad54, 0xad54, 0xad54, 0xad74, 0xad54, |
0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xa554, |
0xa554, 0xad54, 0xad74, 0xad54, 0xad74, 0xad74, 0xad95, 0xb595, |
0xb5d6, 0xbdf6, 0xc637, 0xce99, 0xe73b, 0xf7de, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce5b, 0x7390, 0x422a, |
0x2986, 0x2105, 0x18c4, 0x10a3, 0x10a2, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x0862, 0x0861, 0x0861, 0x0861, 0x0862, 0x0862, |
0x0862, 0x1062, 0x1082, 0x1082, 0x2104, 0x8c91, 0xad74, 0xa554, |
0xa554, 0xa554, 0xa554, 0xad54, 0xa554, 0xad54, 0xad54, 0xad54, |
0xa554, 0xad74, 0xad54, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad54, 0xad74, |
0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad74, 0xad74, 0xad74, 0xad75, 0xad95, 0xb5b5, 0xb5d6, |
0xbdf7, 0xc658, 0xd6b9, 0xe73b, 0xf7de, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7bf, 0xa517, 0x630d, |
0x41e9, 0x2966, 0x2104, 0x18c3, 0x18a3, 0x10a2, 0x1082, 0x1082, |
0x1082, 0x0862, 0x0862, 0x0862, 0x0861, 0x0862, 0x0862, 0x0862, |
0x1062, 0x1062, 0x1082, 0x0861, 0x528a, 0x9cf3, 0xa554, 0xa554, |
0xa554, 0xa554, 0xa554, 0xa554, 0xad54, 0xa554, 0xad54, 0xad54, |
0xad54, 0xad54, 0xa554, 0xad54, 0xad54, 0xad74, 0xad54, 0xad54, |
0xad74, 0xad54, 0xad74, 0xad54, 0xad54, 0xad74, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad54, 0xa554, 0xad54, 0xa554, 0xad54, 0xa554, |
0xad54, 0xa554, 0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad74, 0xad74, 0xad75, 0xad95, 0xb595, 0xb5b5, 0xbdd6, 0xbe17, |
0xc658, 0xd6b9, 0xe73b, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdedd, 0x8433, |
0x528c, 0x39c8, 0x2946, 0x2104, 0x18c4, 0x18a3, 0x10a3, 0x1082, |
0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x0862, 0x1082, 0x1082, 0x1082, 0x73ce, 0xa554, 0xa554, 0xa554, |
0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xad54, 0xad54, |
0xad54, 0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xa554, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad54, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad74, 0xad74, |
0xad75, 0xad95, 0xad95, 0xb5b5, 0xb5d6, 0xbdf6, 0xc637, 0xce78, |
0xd6da, 0xe75c, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbdda, |
0x73b0, 0x4a6b, 0x39c8, 0x2945, 0x2104, 0x18c4, 0x18c3, 0x1082, |
0x1082, 0x1082, 0x1082, 0x0862, 0x0862, 0x0862, 0x0862, 0x0862, |
0x1062, 0x1082, 0x1082, 0x2965, 0x8c91, 0xad74, 0xa554, 0xa554, |
0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xa554, 0xa554, |
0xad54, 0xad54, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xa554, 0xa554, 0xa554, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad54, 0xad74, 0xad74, 0xad74, 0xad75, 0xad95, |
0xad95, 0xb5b5, 0xb5d6, 0xbdd6, 0xbe17, 0xc658, 0xce99, 0xdefa, |
0xef7c, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79f, |
0xa557, 0x6b4f, 0x4a4a, 0x31a7, 0x2945, 0x2104, 0x18c3, 0x10a3, |
0x10a2, 0x1082, 0x1082, 0x1082, 0x1082, 0x1062, 0x1062, 0x1062, |
0x1082, 0x1082, 0x0862, 0x5b0b, 0xa533, 0xad74, 0xa574, 0xa554, |
0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xa554, 0xad54, |
0xa554, 0xa554, 0xa554, 0xad54, 0xa554, 0xa554, 0xa554, 0xad54, |
0xa554, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad74, 0xad74, 0xad74, 0xad75, 0xad95, 0xad95, 0xb595, |
0xb5b6, 0xbdd6, 0xbdf7, 0xc637, 0xce78, 0xd6b9, 0xe73b, 0xf79d, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xdefd, 0x94b5, 0x632e, 0x4229, 0x31a7, 0x2125, 0x2104, 0x18c4, |
0x18a3, 0x10a3, 0x10a2, 0x1082, 0x1082, 0x1082, 0x1082, 0x1082, |
0x1082, 0x1082, 0x18e3, 0x8450, 0xb5b5, 0xad95, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad54, 0xad74, 0xad74, 0xad54, 0xad54, |
0xa554, 0xad54, 0xad54, 0xad54, 0xad54, 0xa554, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, 0xad54, |
0xad54, 0xad54, 0xad74, 0xad74, 0xad54, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad75, 0xad95, 0xad95, 0xb595, 0xb5b5, 0xb5b6, 0xb5d6, |
0xbdf6, 0xc617, 0xc658, 0xce99, 0xdefa, 0xe75c, 0xf7de, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xd6bd, 0x8c74, 0x630d, 0x4209, 0x3187, 0x2945, 0x2104, |
0x18e4, 0x18c3, 0x18a3, 0x10a3, 0x1082, 0x1082, 0x10a2, 0x10a2, |
0x10a2, 0x1082, 0x4a49, 0xa533, 0xb5d6, 0xb5b5, 0xad95, 0xad95, |
0xad95, 0xad75, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xa554, 0xad54, 0xad54, 0xad74, 0xa554, 0xa554, 0xad54, |
0xad54, 0xad54, 0xad54, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad75, 0xad75, |
0xad95, 0xad95, 0xb595, 0xb5b5, 0xb5b6, 0xbdd6, 0xbdf6, 0xc617, |
0xc658, 0xce99, 0xd6da, 0xe73b, 0xef9d, 0xfffe, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xc63b, 0x8413, 0x52ac, 0x4209, 0x3187, 0x2966, |
0x2125, 0x20e4, 0x18c4, 0x18c3, 0x18a3, 0x10a3, 0x10a3, 0x10a3, |
0x10a3, 0x10a2, 0x7bef, 0xbe17, 0xbe16, 0xb5f6, 0xb5d6, 0xb5b5, |
0xb5b5, 0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad74, 0xad75, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, |
0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad74, 0xad75, 0xad75, |
0xad75, 0xad75, 0xad75, 0xad95, 0xad95, 0xad95, 0xad95, 0xb5b5, |
0xb5b5, 0xb5b6, 0xb5d6, 0xbdf6, 0xbdf7, 0xc637, 0xc658, 0xce98, |
0xd6d9, 0xdf1b, 0xef7c, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xef7f, 0xb5b9, 0x7c12, 0x5aed, 0x422a, 0x31a7, |
0x2966, 0x2125, 0x2104, 0x18e4, 0x18e4, 0x18c3, 0x18c3, 0x18c3, |
0x10a2, 0x31a6, 0xad74, 0xd6d9, 0xc678, 0xc637, 0xbe17, 0xbe16, |
0xb5f6, 0xb5d6, 0xb5d6, 0xb5b5, 0xb5b5, 0xb5b5, 0xad95, 0xad95, |
0xad95, 0xad95, 0xad95, 0xad95, 0xad75, 0xad95, 0xad95, 0xad75, |
0xad75, 0xad75, 0xad75, 0xad95, 0xad95, 0xad95, 0xad95, 0xad95, |
0xad95, 0xad95, 0xb595, 0xb5b5, 0xb5b5, 0xb5b6, 0xb5d6, 0xb5d6, |
0xbdf6, 0xbdf7, 0xc617, 0xc637, 0xce58, 0xce99, 0xd6da, 0xdf1b, |
0xef7c, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff |
}; |
|
/openarty/trunk/sw/board/oledtest.c
0,0 → 1,289
#include "artyboard.h" |
#include "zipsys.h" |
|
void idle_task(void) { |
while(1) |
zip_idle(); |
} |
|
extern int splash[], mug[]; |
|
#define OLED_PMODEN 0x0010001 |
#define OLED_PMODEN_OFF 0x0010000 |
#define OLED_IOPWR OLED_PMODEN |
#define OLED_VCCEN 0x0020002 |
#define OLED_VCC_DISABLE 0x0020000 |
#define OLED_RESET 0x0040000 |
#define OLED_RESET_CLR 0x0040004 |
#define OLED_PWRRESET (OLED_PMODEN|OLED_RESET) // 5 |
#define OLED_FULLPOWER (OLED_PMODEN|OLED_VCCEN|OLED_RESET_CLR) // 3->7 |
#define OLED_POWER_DOWN (OLED_PMODEN_OFF|OLED_VCC_DISABLE) |
#define OLED_BUSY 1 |
#define OLED_DISPLAYON 0x0af |
|
|
#define MICROSECOND (CLOCKFREQ_HZ/1000000) |
|
#define OLED_DISPLAY_OFF |
|
const int init_sequence[] = { |
// Unlock commands |
0x01fd12, |
// Display off |
0x0ae, |
// Set remap and data format |
0x01a072, |
// Set the start line |
0x01a100, |
// Set the display offset |
0x01a200, |
// Normal display mode |
0x0000a4, |
// Set multiplex ratio |
0x01a83f, |
// Set master configuration: |
// Use External VCC |
0x01ad8e, |
// Disable power save mode |
0x01b00b, |
// Set phase length |
0x01b131, |
// Set clock divide |
0x01b3f0, |
// Set Second Pre-change Speed For ColorA |
0x018a64, |
// 5l) Set Set Second Pre-charge Speed of Color B |
0x018b78, |
// 5m) Set Second Pre-charge Speed of Color C |
0x018c64, |
// 5n) Set Pre-Charge Voltage |
0x01bb3a, |
// 50) Set VCOMH Deselect Level |
0x01be3e, |
// 5p) Set Master Current |
0x018706, |
// 5q) Set Contrast for Color A |
0x018191, |
// 5r) Set Contrast for Color B |
0x018250, |
// 5s) Set Contrast for Color C |
0x01837D, |
// disable scrolling |
0x02e }; |
|
void timer_delay(int counts) { |
// Clear the PIC. We want to exit from here on timer counts alone |
zip->pic = CLEARPIC; |
|
if (counts > 10) { |
// Set our timer to count down the given number of counts |
zip->tma = counts; |
zip->pic = EINT(SYSINT_TMA); |
zip_rtu(); |
zip->pic = CLEARPIC; |
} // else anything less has likely already passed |
} |
|
void oled_clear(void); |
|
void oled_init(void) { |
int i; |
|
for(i=0; i<sizeof(init_sequence); i++) { |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_ctrl = init_sequence[i]; |
} |
|
// 5u) Clear Screen |
oled_clear(); |
|
zip->tma = (CLOCKFREQ_HZ/200); |
zip->pic = EINT(SYSINT_TMA); |
zip_rtu(); |
zip->pic = CLEARPIC; |
|
|
// Turn on VCC and wait 100ms |
sys->io_oled.o_data = OLED_VCCEN; |
// Wait 100 ms |
timer_delay(CLOCKFREQ_HZ/10); |
|
// Send Display On command |
sys->io_oled.o_ctrl = 0xaf; |
} |
|
void oled_clear(void) { |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_a = 0x5f3f0000; |
sys->io_oled.o_ctrl = 0x40250000; |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
} |
|
void oled_fill(int c, int r, int w, int h, int pix) { |
int ctrl; // We'll send this value out the control/command port |
|
if (c > 95) c = 95; |
if (c < 0) c = 0; |
if (r > 63) r = 63; |
if (r < 0) r = 0; |
if (w < 0) w = 0; |
if (h < 0) h = 0; |
if (c+w > 95) w = 95-c; |
if (r+h > 63) h = 63-r; |
|
// Enable a rectangle to fill |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_ctrl = 0x12601; |
|
// Now, let's build the actual copy command |
ctrl = 0xa0220000 | ((c&0x07f)<<8) | (r&0x03f); |
sys->io_oled.o_a = (((c+w)&0x07f)<<24) | (((r+h)&0x03f)<<16); |
sys->io_oled.o_a|= ((pix >> 11) & 0x01f)<< 9; |
sys->io_oled.o_a|= ((pix >> 5) & 0x03f) ; |
sys->io_oled.o_b = ((pix >> 11) & 0x01f)<<17; |
sys->io_oled.o_b|= ((pix >> 5) & 0x03f)<< 8; |
sys->io_oled.o_b|= ((pix ) & 0x01f)<< 1; |
|
// Make certain we had finished with the port (should've ...) |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
|
// and send our new command |
sys->io_oled.o_ctrl = ctrl; |
|
// To be nice to whatever routine follows, we'll wait 'til the port |
// is clear again. |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
} |
|
void entry(void) { |
unsigned user_regs[16]; |
for(int i=0; i<15; i++) |
user_regs[i] = 0; |
user_regs[15] = (unsigned int)idle_task; |
zip_restore_context(user_regs); |
|
// Clear the PIC. We'll come back and use it later. |
zip->pic = CLEARPIC; |
|
if (0) { // Wait till we've had power for at least a quarter second |
int pwrcount = sys->io_pwrcount; |
do { |
pwrcount = sys->io_pwrcount; |
} while((pwrcount>0)&&(pwrcount < CLOCKFREQ_HZ/4)); |
} else { |
int pwrcount = sys->io_pwrcount; |
if ((pwrcount > 0)&&(pwrcount < CLOCKFREQ_HZ/4)) { |
pwrcount = CLOCKFREQ_HZ/4 - pwrcount; |
timer_delay(pwrcount); |
} |
} |
|
|
// If the OLED is already powered, such as might be the case if |
// we rebooted but the board was still hot, shut it down |
if (sys->io_oled.o_data & 0x07) { |
sys->io_oled.o_data = OLED_VCC_DISABLE; |
// Wait 100 ms |
timer_delay(CLOCKFREQ_HZ/10); |
// Shutdown the entire devices power |
sys->io_oled.o_data = OLED_POWER_DOWN; |
// Wait 100 ms |
timer_delay(CLOCKFREQ_HZ/10); |
|
// Now let's try to restart it |
} |
|
// 1. Power up the OLED by applying power to VCC |
// This means we need to apply power to both the VCCEN line as well |
// as the PMODEN line. We'll also set the reset line low, so the |
// device starts in a reset condition. |
sys->io_oled.o_data = OLED_PMODEN|OLED_RESET_CLR; |
timer_delay(4*MICROSECOND); |
sys->io_oled.o_data = OLED_RESET; |
timer_delay(4*MICROSECOND); |
|
// 2. Send the Display OFF command |
// This isn't necessary, since we already pulled RESET low. |
// |
// sys->io_oled.o_ctrl = OLED_DISPLAY_OFF; |
// |
|
// However, we must hold the reset line low for at least 3us, as per |
// the spec. We may also need to wait another 2us after that. Let's |
// hold reset low for 4us here. |
timer_delay(4*MICROSECOND); |
|
// Clear the reset condition. |
sys->io_oled.o_data = OLED_RESET_CLR; |
// Wait another 4us. |
timer_delay(4*MICROSECOND); |
|
// 3. Initialize the display to the default settings |
// This just took place during the reset cycle we just completed. |
// |
oled_init(); |
|
// 4. Clear screen |
// sys->io_oled.o_ctrl = OLED_CLEAR_SCREEN; |
|
// Wait for the command to complete |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
|
// 5. Apply power to VCCEN |
sys->io_oled.o_data = OLED_FULLPOWER; |
|
// 6. Delay 100ms |
timer_delay(CLOCKFREQ_HZ/10); |
|
while(1) { |
// 7. Send Display On command |
// sys->io_oled.o_ctrl = OLED_CLEAR_SCREEN; // ?? What command is this? |
sys->io_ledctrl = 0x0ff; |
|
sys->io_oled.o_ctrl = OLED_DISPLAYON; |
|
oled_clear(); |
|
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_ctrl = 0x2015005f; |
|
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_ctrl = 0x2075003f; |
|
sys->io_ledctrl = 0x0fe; |
// Now ... finally ... we can send our image. |
for(int i=0; i<6144; i++) { |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_data = splash[i]; |
} |
sys->io_ledctrl = 0x0fc; |
timer_delay(CLOCKFREQ_HZ*5); |
timer_delay(CLOCKFREQ_HZ*5); |
timer_delay(CLOCKFREQ_HZ*5); |
timer_delay(CLOCKFREQ_HZ*5); |
timer_delay(CLOCKFREQ_HZ*5); |
|
|
for(int i=0; i<6144; i++) { |
while(sys->io_oled.o_ctrl & OLED_BUSY) |
; |
sys->io_oled.o_data = mug[i]; |
} |
|
sys->io_ledctrl = 0x0f0; |
timer_delay(CLOCKFREQ_HZ*5); |
} |
|
zip_halt(); |
} |
|
/openarty/trunk/sw/board/splash.c
0,0 → 1,815
//////////////////////////////////////////////////////////////////////////////// |
// |
// Filename: splash.c |
// |
// Project: OpenArty, an entirely open SoC based upon the Arty platform |
// |
// Purpose: To encode and capture the image splash in a fashion that |
// may be referenced from a C file and encoded directly into |
// memory. |
// |
// WARNING! THIS FILE IS COMPUTER GENERATED. DO NOT TRY TO EDIT IT |
// |
// If you need to change this file, please adjust the image, or |
// genoimage.cpp and rebuild this file instead. |
// |
// Creator: Dan Gisselquist, Ph.D. |
// Gisselquist Technology, LLC |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// Copyright (C) 2016, Gisselquist Technology, LLC |
// |
// This program is free software (firmware): you can redistribute it and/or |
// modify it under the terms of the GNU General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or (at |
// your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, but WITHOUT |
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with this program. (It's in the $(ROOT)/doc directory, run make with no |
// target there if the PDF file isn't present.) If not, see |
// <http://www.gnu.org/licenses/> for a copy. |
// |
// License: GPL, v3, as defined and found on www.gnu.org, |
// http://www.gnu.org/licenses/gpl.html |
// |
// |
//////////////////////////////////////////////////////////////////////////////// |
// |
// |
int splash[6144] = { |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x73ae, 0xffff, 0xffff, |
0xffff, 0xffff, 0xce79, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0xce79, 0xffff, 0xffff, 0xffff, 0xffff, 0x73ae, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0xce79, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xffff, 0xffff, |
0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0x4228, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xffff, 0xffff, |
0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0x4228, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xffff, 0xffff, |
0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0x4228, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xffff, 0xffff, |
0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0x4228, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x3186, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x9cd3, 0xffff, 0xffff, |
0xffff, 0xffff, 0xdefb, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x632c, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0x9cd3, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0xdefb, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, |
0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, |
0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x1082, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xdefb, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, |
0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, 0xbdd7, |
0x8c51, 0x8c51, 0x8c51, 0x8c51, 0x8c51, 0xdefb, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x8c51, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x9cd3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x9cd3, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c51, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x632c, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x9cd3, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x632c, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cd3, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x632c, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cd3, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x632c, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cd3, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0x632c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x9cd3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xce79, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0x632c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, |
0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0x632c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0x632c, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x632c, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x632c, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x3186, 0xef7d, 0xffff, 0xffff, 0xffff, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xbdd7, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0xbdd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x8c51, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0x73ae, 0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0xdefb, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x73ae, 0x73ae, 0x73ae, |
0x73ae, 0x73ae, 0xdefb, 0xffff, 0xbddd, 0x2117, 0x4239, 0xef7f, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x1097, 0x0016, 0x0016, 0x633a, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xad5c, 0x0016, 0x0016, 0x0016, 0x0016, |
0xef7f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0x633a, 0x0016, 0x0016, 0x0016, 0x0016, |
0xad5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0x633a, 0x0016, 0x2117, 0xce7e, 0xffff, |
0xffff, 0xffff, 0xffff, 0x2117, 0x0016, 0x2117, 0x0016, 0x0016, |
0x73ba, 0xffff, 0xffff, 0xffff, 0xffff, 0x9cdc, 0x0016, 0x0016, |
0x9cdc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0x73ba, 0x0016, 0x0016, 0x0016, 0x4239, 0xffff, |
0xffff, 0xffff, 0xef7f, 0x0016, 0x0016, 0x73ba, 0x2117, 0x0016, |
0x4239, 0xffff, 0xffff, 0xffff, 0xdefe, 0x0016, 0x0016, 0x0016, |
0x0016, 0xce7e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xdefe, 0x1097, 0x0016, 0x0016, 0x0016, 0x0016, 0xce7e, |
0xffff, 0xffff, 0xad5c, 0x0016, 0x0016, 0xad5c, 0x52b9, 0x0016, |
0x0016, 0xffff, 0xffff, 0xffff, 0x73ba, 0x0016, 0x0016, 0x0016, |
0x0016, 0x4239, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0x633a, 0x0016, 0x0016, 0x73ba, 0x0016, 0x0016, 0x73ba, |
0xffff, 0xffff, 0x73ba, 0x0016, 0x0016, 0xdefe, 0x8c5b, 0x0016, |
0x0016, 0xce7e, 0xffff, 0xffff, 0x2117, 0x0016, 0x2117, 0x633a, |
0x0016, 0x0016, 0xbddd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x633a, 0xdefe, |
0xdefe, 0x0016, 0x0016, 0x2117, 0xffff, 0x2117, 0x0016, 0x3198, |
0xffff, 0xffff, 0x4239, 0x0016, 0x1097, 0xffff, 0xbddd, 0x0016, |
0x0016, 0x9cdc, 0xffff, 0xdefe, 0x0016, 0x0016, 0x73ba, 0xdefe, |
0x0016, 0x0016, 0x4239, 0xffff, 0xad5c, 0x3198, 0x0016, 0x4239, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, |
0x2117, 0x0016, 0x0016, 0xad5c, 0xffff, 0x73ba, 0x0016, 0x0016, |
0xdefe, 0xffff, 0x1097, 0x0016, 0x4239, 0xffff, 0xffff, 0x0016, |
0x0016, 0x73ba, 0xffff, 0x8c5b, 0x0016, 0x0016, 0xbddd, 0xffff, |
0x633a, 0x0016, 0x0016, 0x2117, 0x0016, 0x0016, 0x0016, 0x4239, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0x73ba, 0x73ba, 0x73ba, 0x73ba, |
0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, |
0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, |
0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, |
0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, |
0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x73ba, 0x4239, 0x0016, 0x0016, |
0x0016, 0x0016, 0x633a, 0xffff, 0xffff, 0xad5c, 0x0016, 0x0016, |
0x9cdc, 0xdefe, 0x0016, 0x0016, 0x73ba, 0xffff, 0xffff, 0x3198, |
0x0016, 0x4239, 0xffff, 0x52b9, 0x0016, 0x1097, 0xffff, 0xffff, |
0xef7f, 0x1097, 0x0016, 0x0016, 0x0016, 0x0016, 0x633a, 0x9cdc, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xad5c, 0x4239, |
0x4239, 0x73ba, 0xffff, 0xffff, 0xffff, 0xef7f, 0x0016, 0x0016, |
0x633a, 0xad5c, 0x0016, 0x0016, 0xad5c, 0xffff, 0xffff, 0x633a, |
0x0016, 0x0016, 0xffff, 0x1097, 0x0016, 0x52b9, 0xffff, 0xffff, |
0xffff, 0xce7e, 0x52b9, 0x4239, 0x633a, 0xdefe, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4239, 0x0016, |
0x1097, 0x73ba, 0x0016, 0x0016, 0xef7f, 0xffff, 0xffff, 0x8c5b, |
0x0016, 0x0016, 0x73ba, 0x0016, 0x0016, 0x8c5b, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x8c5b, 0x0016, |
0x0016, 0x1097, 0x0016, 0x2117, 0xffff, 0xffff, 0xffff, 0xce7e, |
0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0xdefe, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xce7e, 0x0016, |
0x0016, 0x0016, 0x0016, 0x73ba, 0xffff, 0xffff, 0xffff, 0xffff, |
0x2117, 0x0016, 0x0016, 0x0016, 0x2117, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3198, |
0x0016, 0x0016, 0x0016, 0xce7e, 0xffff, 0xffff, 0xffff, 0xffff, |
0x73ba, 0x0016, 0x0016, 0x0016, 0x73ba, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbddd, |
0x0016, 0x0016, 0x633a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xef7f, 0x1097, 0x0016, 0x3198, 0xef7f, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xdefe, 0xbddd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xef7f, 0xbddd, 0xef7f, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, |
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff |
}; |
|
/openarty/trunk/sw/board/zipsys.h
122,6 → 122,7
|
#define EINT(A) (0x80000000|(A<<16)) |
#define DINT(A) (0x80000000|(A<<16)) |
#define CLEARPIC 0x7fff7fff |
|
static ZIPSYS *const zip = (ZIPSYS *)(ZIPSYS_ADDR); |
|
/openarty/trunk/sw/host/Makefile
39,7 → 39,7
.PHONY: all |
PROGRAMS := wbregs netuart wbsettime dumpflash wbprogram netsetup manping zipload zipstate zipdbg |
SCOPES := eqspiscope etxscope erxscope cpuscope |
all: $(PROGRAMS) $(SCOPES) |
all: $(PROGRAMS) $(SCOPES) gps |
CXX := g++ |
OBJDIR := obj-pc |
BUSOBJS := $(OBJDIR)/ttybus.o $(OBJDIR)/llcomms.o $(OBJDIR)/regdefs.o |
58,6 → 58,10
$(OBJDIR)/%.o: %.cpp |
$(CXX) -g -c $< -o $@ |
|
.PHONY: gps |
gps: $(BUSOBJS) $(OBJDIR)/scopecls.o |
@bash -c "if [[ -e gps/Makefile ]]; then cd gps; make --no-print-directory; fi" |
|
$(OBJDIR)/hsnetuart.o: netuart.cpp |
$(CXX) -g -c -DHIGH_SPEED $< -o $@ |
|
73,6 → 77,9
$(CXX) -g $^ -o $@ |
hsnetuart: $(OBJDIR)/hsnetuart.o |
$(CXX) -g $^ -o $@ |
# |
# Some simple programs that just depend upon the ability to talk to the FPGA, |
# and little more. |
wbsettime: $(OBJDIR)/wbsettime.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
mtest: $(OBJDIR)/mtest.o $(BUSOBJS) |
87,10 → 94,10
$(CXX) -g $^ -o $@ |
dumpflash: $(OBJDIR)/dumpflash.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
eqspiscope: $(OBJDIR)/eqspiscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
sdramscope: $(OBJDIR)/sdramscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
|
# |
# Programs that depend upon not just the bus objects, but the flash driver |
# as well. |
wbprogram: $(OBJDIR)/wbprogram.o $(OBJDIR)/flashdrvr.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
zipload: $(OBJDIR)/zipload.o $(OBJDIR)/flashdrvr.o $(BUSOBJS) |
98,6 → 105,12
|
|
## SCOPES |
# These depend upon the scopecls.o, the bus objects, as well as their |
# main file(s). |
eqspiscope: $(OBJDIR)/eqspiscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
sdramscope: $(OBJDIR)/sdramscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
cfgscope: $(OBJDIR)/cfgscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
cpuscope: $(OBJDIR)/cpuscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
111,6 → 124,11
wbuscope: $(OBJDIR)/wbuscope.o $(OBJDIR)/scopecls.o $(BUSOBJS) |
$(CXX) -g $^ -o $@ |
|
# |
# The ZipDebugger is a bit more difficult to build, as it wants to be able |
# to disassemble opcodes given to it. Hence, it depends upon the zparser.cpp, |
# zopcodes.cpp, and twoc.cpp files from the ZipCPU build directory. |
# |
DBGRAW := zparser.cpp zopcodes.cpp twoc.cpp |
DBGSRCS := $(addprefix $(ZIPD)/,$(DBGRAW)) |
DBGOBJS := $(addprefix $(OBJDIR)/,$(subst .cpp,.o,$(DBGRAW))) |
/openarty/trunk/sw/host/cpuscope.cpp
67,7 → 67,7
class CPUSCOPE : public SCOPE { |
public: |
CPUSCOPE(FPGA *fpga, unsigned addr, bool vecread) |
: SCOPE(fpga, addr, false, false) {}; |
: SCOPE(fpga, addr, false, vecread) {}; |
~CPUSCOPE(void) {} |
virtual void decode(DEVBUS::BUSW val) const { |
if (val & 0x80000000) |