Version 1.97: See Changelog for details

This commit is contained in:
Michel Pollet 2024-11-23 16:53:42 +00:00
parent d6d4eba5c2
commit 53b0ae38fc
No known key found for this signature in database
69 changed files with 76142 additions and 97135 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
.bash_history
.bash_history*
build-*
.vscode
compile_commands.json

View File

@ -3,6 +3,47 @@
</p>
# MII Version Changelog
## 1.97
* Video Texture was using 4 times the memory it should have. Oops. Funny case of
two bugs cancelling each others. Fixed.
* Added a barrel distortion to the video rendering, to make it look more like a CRT.
Full Retrocomputing experience!
<div align="center">
<img src="docs/screen/v197mousecalc.png" alt="VersionCalc">
</div>
<center><i>Curvy Corners FTW!</i>
</center>
* After a rework of the OpenGL code, the emulator uses
even less CPU than before. It hovers around 10% of one core on my CPU while
playing the demos in Total Replay, and 6% when playing Lode Runner.
* Audio volume is saved in preferences.
* Added support for international ROMS. Include the UK/US and FR/US, there is
a new menu item to toggle the ROM bank between US and the alternate one.
* You can currently pass the rom you want using the command line:
+ mii --list-roms will list the available ROMs (all of them, not just the video
ones)
+ mii --video-rom <rom> will set the video ROM to the one you want, for example,
--video-rom iiee_video_fr
+ When a suitable ROM is loaded, the Video submenu "Int. Font Switch" will be
enabled.
+ You can also use the command prompt/telnet mode 'video rom' command to switch
the ROM on the fly.
<div align="center">
<img src="docs/screen/v197epistole.png" alt="Epistole">
</div>
<center><i>French Video ROM</i>
</center>
* Added support for fullscreen. Toggle with: *control-shift-ESC*.
The IIe video is resized, so when you hide the menus (Control-F1), you get the full immersive experience!
+ Also made 'right click' anywhere will show the UI, even in fullscreen,
so you can access the menus to turn it off if you forget the key combo.
+ mii -fs or --fullscreen will start the emulator in fullscreen mode.
+ mii --no-ui or --hide-ui will hide the UI at startup.
* Fixed "Pasting" of text which was borken for a while. Note that you need 'xclip' on your system (*apt install xclip*) for it to work.
* Fixed a small problem in HGR mode where the rightmost column could be the wrong color.
## 1.96
Bug fix release
* Mouse driver was revised completely. Now works in all program that I could try,

View File

@ -9,7 +9,7 @@
CC = gcc
SHELL = /bin/bash
# This is where (g)make looks for the source files for implicit rules
VPATH := src src/format src/drivers contrib
VPATH := src src/format src/drivers src/roms contrib
VPATH += ui_gl
CPPFLAGS += -Isrc -Isrc/format -Isrc/roms -Isrc/drivers
@ -56,7 +56,7 @@ OBJ := $(O)/obj
all : $(BIN)/mii_emu_gl
MII_SRC := $(wildcard src/*.c src/format/*.c \
src/drivers/*.c contrib/*.c)
src/drivers/*.c contrib/*.c src/roms/*.c)
UI_SRC := $(wildcard ui_gl/*.c)
SRC := $(MII_SRC) $(UI_SRC)
@ -72,7 +72,7 @@ ui_gl/mii_icon64.h : contrib/mii-icon-64.png
ui_gl/mii_mui_apple_logo.h : docs/Apple_logo_rainbow_version2_28x28.png
tcc -run libmui/utils/png2raw.c -n mii_mui_apple_logo -o $@ $<
$(BIN)/mii_emu_gl : $(ALL_OBJ) | mui mish
$(BIN)/mii_emu_gl : $(ALL_OBJ) | mish mui
$(BIN)/mii_emu_gl : $(LIB)/libmish.a
$(BIN)/mii_emu_gl : $(LIB)/libmui.a
@ -85,7 +85,8 @@ $(LIB)/libmish.a : ${wildcard libmish/src/*} | $(LIB) $(OBJ) $(BIN)
LDLIBS += $(LIB)/libmui.a
mui : $(LIB)/libmui.a
$(LIB)/libmui.a : ${wildcard libmui/src/*} | $(LIB) $(OBJ) $(BIN)
$(LIB)/libmui.a : ${wildcard libmui/src/*.[ch]} \
${wildcard libmui/src/*/*.[ch]} | $(LIB) $(OBJ) $(BIN)
mkdir -p $(OBJ)/libmui && \
make -j -C libmui BUILD_DIR="../" CC="$(CC)" \
V="$(V)" OPTIMIZE="$(OPTIMIZE)" static
@ -94,68 +95,7 @@ $(LIB)/libmui.a : ${wildcard libmui/src/*} | $(LIB) $(OBJ) $(BIN)
test/asm/%.bin : test/asm/%.asm | $(BIN)/mii_asm
$(BIN)/mii_asm -v -o $@ $<
# ROMS: This bits convert the binary roms with the product number in the name
# to a C header file that can be included in the project. I used to use
# incbin.h for this, but there were issues with some of the linker used, for
# example, webassembly, so we now use xxd to generate the .h file.
# You'd NEED the xxd tool if you want to re-generate these files, but well,
# they've been constant for over 40 years, my guess is that they ain't going
# anywhere.
#
# The reason these roms are used like this here is that I always found that it
# was a massive pain to have to deal with the roms in *any* apple II (or Mac)
# emulator. You had to find the roms, put them in the right place, name them
# correctly, and then, if you wanted to use a different version, you had to
# rename them, and so on. Dreadful.
# I think it prevents a lot of people learning about the Apple II, because it's
# just too much hassle to get started. So, I've included the roms in the source
# code, and they are compiled in the binary. For the user. Not for convenience,
# Not for 'stealing' from apple, but for the user. For the user to have a
# seamless experience. To be able to just run the emulator, and have it work.
# And be amazed *at the brand*.
#
# Now, I understand that strictly speaking these are copyrighted material, but
# they are so old, and so widely available, and are used here for educational
# purposes, and with the upmost respect for all the original authors, and for
# what 'the brand' represented for us at the time. With that in mind, I think
# that there shouldn't be an issue. But if you, Mr&Mrs Apple Lawyer think
# otherwise, please let me know, I'll remove them. Reluctantly. I'll cry&scream!
.PHONY : roms
define rom_to_h
$(1) :
@if [ ! -f $$@ ]; then \
echo "ROM file $$@ not found, relying on the exiting .h"; \
touch $$@; \
fi
src/roms/$(2).h : $(1)
@if [ ! -s "$$<" ]; then \
touch $$@; \
else { echo "#pragma once"; \
xxd -n $$(shell basename $$<|sed 's/_[0-9].*//') -i $$< |\
sed 's/unsigned/static const unsigned/' ; \
}>$$@ ; \
echo "ROM $$@ Generated"; \
fi
$(OBJ)/mii.o : src/roms/$(2).h
roms: src/roms/$(2).h
endef
# 38063e08c778503fc03ecebb979769e9 contrib/mii_rom_iiee_3420349b.bin
$(eval $(call rom_to_h,contrib/mii_rom_iiee_3420349b.bin,mii_rom_iiee))
# 9123fff3442c0e688cc6816be88dd4ab contrib/mii_rom_iiee_video_3420265a.bin
$(eval $(call rom_to_h,contrib/mii_rom_iiee_video_3420265a.bin,mii_rom_iiee_video))
# e0d67bb1aabe2030547b4cbdf3905b60 contrib/mii_rom_iic_3420033a.bin
$(eval $(call rom_to_h,contrib/mii_rom_iic_3420033a.bin,mii_rom_iic))
# 67c0d61ab0911183faf05270f881a97e contrib/mii_rom_ssc_3410065a.bin
$(eval $(call rom_to_h,contrib/mii_rom_ssc_3410065a.bin,mii_rom_ssc))
# 9123fff3442c0e688cc6816be88dd4ab contrib/mii_rom_iic_video_3410265a.bin
$(eval $(call rom_to_h,contrib/mii_rom_iic_video_3410265a.bin,mii_rom_iic_video))
# This is the ROM file for the EEPROM card, with some games too...
$(eval $(call rom_to_h,disks/GamesWithFirmware.po,mii_rom_epromcard))
# And the smartport driver
$(eval $(call rom_to_h,test/asm/mii_smartport_driver.bin,mii_rom_smartport))
include src/roms/Makefile.inc
clean :
rm -rf $(O); make -C libmui clean; make -C libmish clean

View File

@ -53,13 +53,20 @@ I wanted something:
* No dependencies (X11) OpenGL rendering
* Built-in debugger (using telnet access)
* Super cool looking UI!
* Unique, and accurate view of the spinning floppies!
<div align="center">
<img src="docs/screen/v18new_display.gif" alt="New Floppy display">
</div>
<center><i>Poor quality gif, It is a LOT smoother at 60fps in the program!</i>
</center>
## How to I compile it and run it?
<center>
<img src="docs/screen/screen_green.png" alt="Phosphorescent Green">
<i>Good old green monitor style. Theres Amber too.</i>
</center>
## How to I compile it and run it?
* You need a C compiler, make, and a few libraries:
* libasound2-dev [ optional, for audio ]
* libgl-dev
@ -88,28 +95,33 @@ You can also use the command line to specify them, and other options.
Usage: ./build-x86_64-linux-gnu/bin/mii_emu_gl [options]
Options:
-h, --help This help
-v, --verbose Verbose output
-m, --mute Mute the speaker
-vol, --volume <volume> Set speaker volume (0.0 to 10.0)
--audio-off, --no-audio, --silent Disable audio output
-speed, --speed <speed> Set the CPU speed in MHz
-s, --slot <slot>:<driver> Specify a slot and driver
Slot id is 1..7
-d, --drive <slot>:<drive>:<filename> Specify a drive
Slot id is 1..7, drive is 1..2
Alternate syntax: <slot>:<drive> <filename>
-L, --list-drivers List available drivers
-def, --default Set default drives:
Slot 4: mouse
Slot 6: disk2
Slot 7: smartport
-nsc[=0|1] Enable/Disable No Slot Clock:
0: disable
1: enable [Enabled by default]
-titan[=0|1] Enable/Disable Titan Accelerator IIe:
0: disable [default]
1: enable [Start at 3.58MHz]
-h, --help This help
-v, --verbose Verbose output
-fs, --full-screen Start in full screen mode
--hide-ui, --no-ui Hide the UI
--list-drivers List available drivers, exit
--list-roms List available ROMs, exit
--video-rom <name> Load a video ROM
-m, --mute Start with audio muted
-vol, --volume <volume> Set speaker volume (0.0 to 10.0)
--audio-off, --no-audio, --silent Disable audio output
-speed, --speed <speed> Set the CPU speed in MHz
-s, --slot <slot>:<driver> Specify a slot and driver
Slot id is 1..7
-d, --drive <slot>:<drive>:<filename> Load a drive
Slot id is 1..7, drive is 1..2
Alternate syntax: <slot>:<drive> <filename>
-def, --default Use a set of default cards:
Slot 4: mouse
Slot 6: disk2
Slot 7: smartport
-nsc[=0|1] Enable/Disable No Slot Clock:
0: disable
1: enable [Enabled by default]
-titan[=0|1] Enable/Disable Titan Accelerator IIe:
0: disable [default]
1: enable [Start at 3.58MHz]
And the available drivers:
$ ./build-x86_64-linux-gnu/bin/mii_emu -L
@ -169,7 +181,7 @@ There are just a few keys that are mapped for anything useful. List is not exaus
* ~~Port it to Raspbery Pi~~. This was reported to work on a raspi 5.
* Make a tool to 'flatten' overlay files back into the primary image.
* Make a UI for the debugger, instead of telnet.
* A mockinbird sound card emulation [In Progress].
* A mockingbird sound card emulation [In Progress].
<div align="center">
<img src="docs/screen/screen_total.png" alt="Total Replay">

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

View File

@ -22,7 +22,7 @@ OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 0
CreationTime: 830956166
ModificationTime: 1724911886
ModificationTime: 1731266171
PfmFamily: 81
TTFWeight: 400
TTFWidth: 5
@ -800,10 +800,10 @@ NameList: AGL For New Fonts
DisplaySize: -96
AntiAlias: 1
FitToEm: 1
WinInfo: 207 23 12
WinInfo: 342 19 8
BeginPrivate: 0
EndPrivate
BeginChars: 491 473
BeginChars: 492 474
StartChar: .notdef
Encoding: 409 -1 0
@ -857,7 +857,7 @@ EndChar
StartChar: .null
Encoding: 5 8 1
AltUni2: 00001d.ffffffff.0 002400.ffffffff.0 00001d.ffffffff.0 002400.ffffffff.0
AltUni2: 002400.ffffffff.0 00001d.ffffffff.0 002400.ffffffff.0 00001d.ffffffff.0
Width: 0
GlyphClass: 1
Flags: W
@ -2429,7 +2429,7 @@ EndChar
StartChar: hyphen
Encoding: 36 45 16
AltUni2: 0000ad.ffffffff.0 002010.ffffffff.0 0000ad.ffffffff.0 002010.ffffffff.0
AltUni2: 002010.ffffffff.0 0000ad.ffffffff.0 002010.ffffffff.0 0000ad.ffffffff.0
Width: 1190
GlyphClass: 1
Flags: W
@ -4614,27 +4614,27 @@ EndTTInstrs
LayerCount: 2
Fore
SplineSet
1108 41 m 1,0,1
1073 18 1073 18 981 -3.5 c 128,-1,2
889 -25 889 -25 768 -25 c 0,3,4
463 -25 463 -25 270.5 163.5 c 128,-1,5
78 352 78 352 78 717 c 2,6,-1
78 778 l 2,7,8
78 1118 78 1118 273.5 1324 c 128,-1,9
469 1530 469 1530 764 1530 c 0,10,11
891 1530 891 1530 976 1515.5 c 128,-1,12
1061 1501 1061 1501 1108 1477 c 1,13,-1
1108 1237 l 1,14,15
1065 1260 1065 1260 991.5 1278 c 128,-1,16
918 1296 918 1296 819 1296 c 0,17,18
635 1296 635 1296 531.5 1153 c 128,-1,19
428 1010 428 1010 428 758 c 2,20,-1
428 737 l 2,21,22
428 467 428 467 524.5 338 c 128,-1,23
621 209 621 209 788 209 c 0,24,25
901 209 901 209 981 231.5 c 128,-1,26
1061 254 1061 254 1108 274 c 1,27,-1
1108 41 l 1,0,1
1108 41 m 5,0,1
1073 18 1073 18 981 -3.5 c 132,-1,2
889 -25 889 -25 768 -25 c 4,3,4
463 -25 463 -25 270.5 163.5 c 132,-1,5
78 352 78 352 78 717 c 6,6,-1
78 778 l 6,7,8
78 1118 78 1118 273.5 1324 c 132,-1,9
469 1530 469 1530 764 1530 c 4,10,11
891 1530 891 1530 976 1515.5 c 132,-1,12
1061 1501 1061 1501 1108 1477 c 5,13,-1
1108 1237 l 5,14,15
1065 1260 1065 1260 991.5 1278 c 132,-1,16
918 1296 918 1296 819 1296 c 4,17,18
635 1296 635 1296 531.5 1153 c 132,-1,19
428 1010 428 1010 428 758 c 6,20,-1
428 737 l 6,21,22
428 467 428 467 524.5 338 c 132,-1,23
621 209 621 209 788 209 c 4,24,25
901 209 901 209 981 231.5 c 132,-1,26
1061 254 1061 254 1108 274 c 5,27,-1
1108 41 l 5,0,1
EndSplineSet
Validated: 1
EndChar
@ -4775,19 +4775,19 @@ EndTTInstrs
LayerCount: 2
Fore
SplineSet
1106 0 m 1,0,-1
147 0 l 1,1,-1
147 1509 l 1,2,-1
1065 1509 l 1,3,-1
1065 1284 l 1,4,-1
487 1284 l 1,5,-1
487 879 l 1,6,-1
936 879 l 1,7,-1
936 651 l 1,8,-1
487 651 l 1,9,-1
487 225 l 1,10,-1
1106 225 l 1,11,-1
1106 0 l 1,0,-1
1106 0 m 5,0,-1
147 0 l 5,1,-1
147 1509 l 5,2,-1
1065 1509 l 5,3,-1
1065 1284 l 5,4,-1
487 1284 l 5,5,-1
487 879 l 5,6,-1
936 879 l 5,7,-1
936 651 l 5,8,-1
487 651 l 5,9,-1
487 225 l 5,10,-1
1106 225 l 5,11,-1
1106 0 l 5,0,-1
EndSplineSet
Validated: 1
EndChar
@ -6429,33 +6429,33 @@ EndTTInstrs
LayerCount: 2
Fore
SplineSet
1092 449 m 0,0,1
1092 209 1092 209 932 94.5 c 128,-1,2
772 -20 772 -20 487 -20 c 0,3,4
324 -20 324 -20 212 -1 c 128,-1,5
100 18 100 18 27 47 c 1,6,-1
27 307 l 1,7,8
84 272 84 272 206 242.5 c 128,-1,9
328 213 328 213 446 213 c 0,10,11
612 213 612 213 674.5 257 c 128,-1,12
737 301 737 301 737 403 c 0,13,14
737 469 737 469 692 520 c 128,-1,15
647 571 647 571 436 655 c 0,16,17
268 723 268 723 176 828.5 c 128,-1,18
84 934 84 934 84 1116 c 0,19,20
84 1290 84 1290 232.5 1410 c 128,-1,21
381 1530 381 1530 643 1530 c 0,22,23
770 1530 770 1530 871.5 1509.5 c 128,-1,24
973 1489 973 1489 1014 1473 c 1,25,-1
1014 1243 l 1,26,27
928 1264 928 1264 843 1280 c 128,-1,28
758 1296 758 1296 662 1296 c 0,29,30
526 1296 526 1296 466 1254 c 128,-1,31
406 1212 406 1212 406 1149 c 0,32,33
406 1069 406 1069 451 1028 c 128,-1,34
496 987 496 987 715 907 c 0,35,36
919 833 919 833 1005.5 719.5 c 128,-1,37
1092 606 1092 606 1092 449 c 0,0,1
1092 449 m 4,0,1
1092 209 1092 209 932 94.5 c 132,-1,2
772 -20 772 -20 487 -20 c 4,3,4
324 -20 324 -20 212 -1 c 132,-1,5
100 18 100 18 27 47 c 5,6,-1
27 307 l 5,7,8
84 272 84 272 206 242.5 c 132,-1,9
328 213 328 213 446 213 c 4,10,11
612 213 612 213 674.5 257 c 132,-1,12
737 301 737 301 737 403 c 4,13,14
737 469 737 469 692 520 c 132,-1,15
647 571 647 571 436 655 c 4,16,17
268 723 268 723 176 828.5 c 132,-1,18
84 934 84 934 84 1116 c 4,19,20
84 1290 84 1290 232.5 1410 c 132,-1,21
381 1530 381 1530 643 1530 c 4,22,23
770 1530 770 1530 871.5 1509.5 c 132,-1,24
973 1489 973 1489 1014 1473 c 5,25,-1
1014 1243 l 5,26,27
928 1264 928 1264 843 1280 c 132,-1,28
758 1296 758 1296 662 1296 c 4,29,30
526 1296 526 1296 466 1254 c 132,-1,31
406 1212 406 1212 406 1149 c 4,32,33
406 1069 406 1069 451 1028 c 132,-1,34
496 987 496 987 715 907 c 4,35,36
919 833 919 833 1005.5 719.5 c 132,-1,37
1092 606 1092 606 1092 449 c 4,0,1
EndSplineSet
Validated: 1
EndChar
@ -31800,5 +31800,102 @@ SplineSet
0 1448 l 1,4,-1
EndSplineSet
EndChar
StartChar: uni2611
Encoding: 491 9745 473
Width: 2220
Flags: WO
LayerCount: 2
Fore
SplineSet
1793.25 396.75 m 1,0,1
1781 385.25 1781 385.25 1748.79980469 374.5 c 128,-1,2
1716.59960938 363.75 1716.59960938 363.75 1674.25 363.75 c 0,3,4
1567.5 363.75 1567.5 363.75 1500.125 458 c 128,-1,5
1432.75 552.25 1432.75 552.25 1432.75 734.75 c 2,6,-1
1432.75 765.25 l 2,7,8
1432.75 935.25 1432.75 935.25 1501.17480469 1038.25 c 128,-1,9
1569.59960938 1141.25 1569.59960938 1141.25 1672.84960938 1141.25 c 0,10,11
1717.29980469 1141.25 1717.29980469 1141.25 1747.04980469 1134 c 128,-1,12
1776.79980469 1126.75 1776.79980469 1126.75 1793.25 1114.75 c 1,13,-1
1793.25 994.75 l 1,14,15
1778.20019531 1006.25 1778.20019531 1006.25 1752.47460938 1015.25 c 128,-1,16
1726.75 1024.25 1726.75 1024.25 1692.09960938 1024.25 c 0,17,18
1627.70019531 1024.25 1627.70019531 1024.25 1591.47460938 952.75 c 128,-1,19
1555.25 881.25 1555.25 881.25 1555.25 755.25 c 2,20,-1
1555.25 744.75 l 2,21,22
1555.25 609.75 1555.25 609.75 1589.02539062 545.25 c 128,-1,23
1622.79980469 480.75 1622.79980469 480.75 1681.25 480.75 c 0,24,25
1720.79980469 480.75 1720.79980469 480.75 1748.79980469 492 c 128,-1,26
1776.79980469 503.25 1776.79980469 503.25 1793.25 513.25 c 1,27,-1
1793.25 396.75 l 1,0,1
1325.875 602 m 0,28,29
1325.875 482 1325.875 482 1269.875 424.75 c 128,-1,30
1213.875 367.5 1213.875 367.5 1114.125 367.5 c 0,31,32
1057.07519531 367.5 1057.07519531 367.5 1017.875 377 c 128,-1,33
978.674804688 386.5 978.674804688 386.5 953.125 401 c 1,34,-1
953.125 531 l 1,35,36
973.075195312 513.5 973.075195312 513.5 1015.77539062 498.75 c 128,-1,37
1058.47460938 484 1058.47460938 484 1099.77539062 484 c 0,38,39
1157.875 484 1157.875 484 1179.75 506 c 128,-1,40
1201.625 528 1201.625 528 1201.625 579 c 0,41,42
1201.625 612 1201.625 612 1185.875 637.5 c 128,-1,43
1170.125 663 1170.125 663 1096.27539062 705 c 0,44,45
1037.47460938 739 1037.47460938 739 1005.27539062 791.75 c 128,-1,46
973.075195312 844.5 973.075195312 844.5 973.075195312 935.5 c 0,47,48
973.075195312 1022.5 973.075195312 1022.5 1025.04980469 1082.5 c 128,-1,49
1077.02539062 1142.5 1077.02539062 1142.5 1168.72460938 1142.5 c 0,50,51
1213.17480469 1142.5 1213.17480469 1142.5 1248.70019531 1132.25 c 128,-1,52
1284.22460938 1122 1284.22460938 1122 1298.57519531 1114 c 1,53,-1
1298.57519531 999 l 1,54,55
1268.47460938 1009.5 1268.47460938 1009.5 1238.72460938 1017.5 c 128,-1,56
1208.97460938 1025.5 1208.97460938 1025.5 1175.375 1025.5 c 0,57,58
1127.77539062 1025.5 1127.77539062 1025.5 1106.77539062 1004.5 c 128,-1,59
1085.77539062 983.5 1085.77539062 983.5 1085.77539062 952 c 0,60,61
1085.77539062 912 1085.77539062 912 1101.52539062 891.5 c 128,-1,62
1117.27539062 871 1117.27539062 871 1193.92480469 831 c 0,63,64
1265.32519531 794 1265.32519531 794 1295.59960938 737.25 c 128,-1,65
1325.875 680.5 1325.875 680.5 1325.875 602 c 0,28,29
803.325195312 377.25 m 1,66,-1
467.674804688 377.25 l 1,67,-1
467.674804688 1131.75 l 1,68,-1
788.974609375 1131.75 l 1,69,-1
788.974609375 1019.25 l 1,70,-1
586.674804688 1019.25 l 1,71,-1
586.674804688 816.75 l 1,72,-1
743.825195312 816.75 l 1,73,-1
743.825195312 702.75 l 1,74,-1
586.674804688 702.75 l 1,75,-1
586.674804688 489.75 l 1,76,-1
803.325195312 489.75 l 1,77,-1
803.325195312 377.25 l 1,66,-1
1694 1536 m 1,78,-1
2048 1536 l 1,79,-1
2048 0 l 1,80,-1
1694 0 l 1,81,-1
1493 0 l 1,82,-1
727 0 l 1,83,-1
524 0 l 1,84,-1
172 0 l 1,85,-1
172 1536 l 1,86,-1
524 1536 l 1,87,-1
727 1536 l 1,88,-1
1493 1536 l 1,89,-1
1694 1536 l 1,78,-1
1384 1364 m 1,90,-1
834 1364 l 1,91,-1
633 1364 l 1,92,-1
342 1364 l 1,93,-1
342 172 l 1,94,-1
633 172 l 1,95,-1
834 172 l 1,96,-1
1384 172 l 1,97,-1
1587 172 l 1,98,-1
1878 172 l 1,99,-1
1878 1364 l 1,100,-1
1587 1364 l 1,101,-1
1384 1364 l 1,90,-1
EndSplineSet
EndChar
EndChars
EndSplineFont

Binary file not shown.

View File

@ -78,6 +78,7 @@ C_ARRAY_DECL C_ARRAY_INLINE \
if (size == 0) { if (a->e) free(a->e); a->e = NULL; } \
else a->e = (__name##_element_t*)realloc(a->e, \
size * sizeof(__name##_element_t));\
if (a->count > size) a->count = size;\
a->size = size; \
}\
C_ARRAY_DECL C_ARRAY_INLINE \

File diff suppressed because it is too large Load Diff

View File

@ -116,6 +116,27 @@ mui_draw(
}
}
void
mui_resize(
mui_t * ui,
mui_drawable_t *dr,
c2_pt_t size)
{
if (size.x == ui->screen_size.x && size.y == ui->screen_size.y)
return;
ui->screen_size = size;
mui_drawable_set_clip(dr, NULL);
// printf("%s: resizing to %dx%d\n", __func__, size.x, size.y);
mui_drawable_resize(dr, size);
c2_rect_t whole = C2_RECT_WH(0, 0, size.x, size.y);
pixman_region32_reset(&ui->inval, (pixman_box32_t*)&whole);
// get and resize the menu bar to the proper width
mui_window_t * mbar = mui_menubar_get(ui);
if (mbar) {
mui_window_resize(mbar, C2_PT(size.x, c2_rect_height(&mbar->frame)));
}
}
bool
mui_handle_event(
mui_t *ui,

View File

@ -81,6 +81,11 @@ mui_draw(
mui_drawable_t *dr,
uint16_t all);
void
mui_resize(
mui_t * ui,
mui_drawable_t *dr,
c2_pt_t size);
void
mui_run(
mui_t * ui);

View File

@ -163,7 +163,10 @@ mui_drawable_clip_pop(
pixman_region32_t *
mui_drawable_clip_get(
mui_drawable_t * dr);
void
mui_drawable_resize(
mui_drawable_t * dr,
c2_pt_t size);
/*
* Your typical ARGB color. Note that the components are NOT

View File

@ -154,5 +154,5 @@ typedef enum mui_modifier_e {
#define MUI_GLYPH_F10 ""
#define MUI_GLYPH_F11 ""
#define MUI_GLYPH_F12 ""
#define MUI_GLYPH_ESC "☑"

View File

@ -23,10 +23,16 @@
enum {
MUI_WDEF_INIT = 0, // param is NULL
MUI_WDEF_DISPOSE, // param is NULL
// used before controls are drawn
MUI_WDEF_DRAW, // param is mui_drawable_t*
// used after controls are drawn
MUI_WDEF_DRAW_POST, // param is mui_drawable_t*
MUI_WDEF_EVENT, // param is mui_event_t*
MUI_WDEF_SELECT, // param is NULL
MUI_WDEF_DESELECT, // param is NULL
// called when the window is resized, param is a c2_rect_t with the new rectangle
// it CAN be edited by the callback to change the new size, if appopriate
MUI_WDEF_RESIZE, // param is a c2_rect_t with the new rectangle
};
typedef bool (*mui_wdef_p)(
struct mui_window_t * win,
@ -157,7 +163,10 @@ mui_window_isfront(
mui_window_t *
mui_window_front(
struct mui_t *ui);
void
mui_window_resize(
mui_window_t * win,
c2_pt_t size);
// move win to the front (of its layer), return true if it was moved
bool
mui_window_select(

View File

@ -16,7 +16,7 @@
IMPLEMENT_C_ARRAY(mui_clip_stack);
// create a new mui_draware of size w x h, bpp depth.
// create a new mui_drawable of size w x h, bpp depth.
// optionally allocate the pixels if pixels is NULL
mui_drawable_t *
mui_drawable_init(
@ -68,9 +68,7 @@ mui_drawable_clear(
if (dr->pixman)
pixman_image_unref(dr->pixman);
dr->pixman = NULL;
for (uint i = 0; i < dr->clip.count; i++)
pixman_region32_fini(&dr->clip.e[i]);
mui_clip_stack_clear(&dr->clip);
mui_drawable_set_clip(dr, NULL);
if (dr->pix.pixels && dr->dispose_pixels)
free(dr->pix.pixels);
static const mui_pixmap_t zero = {};
@ -91,6 +89,25 @@ mui_drawable_dispose(
free(dr);
}
void
mui_drawable_resize(
mui_drawable_t * dr,
c2_pt_t size)
{
if (!dr)
return;
if (size.x == dr->pix.size.x && size.y == dr->pix.size.y)
return;
mui_pixmap_t save = dr->pix;
dr->dispose_pixels = 0;
mui_drawable_clear(dr);
save.size = size;
save.row_bytes = (uint32_t)((size.x * (save.bpp / 8)) + 3) & ~3;
// printf("resizing to %dx%d, row_bytes %d\n", size.x, size.y, save.row_bytes);
save.pixels = realloc(save.pixels, save.row_bytes * size.y);
dr->pix = save;
}
static struct cg_ctx_t *
_cg_updated_clip(
mui_drawable_t * dr)

View File

@ -287,6 +287,29 @@ mui_window_dispose(
_mui_window_free(win);
}
void
mui_window_resize(
mui_window_t * win,
c2_pt_t size)
{
if (!win)
return;
c2_rect_t frame = win->frame;
c2_rect_t old_frame = frame;
frame.r = frame.l + size.x;
frame.b = frame.t + size.y;
if (win->wdef)
win->wdef(win, MUI_WDEF_RESIZE, &frame);
if (c2_rect_equal(&frame, &old_frame))
return;
mui_window_inval(win, NULL);
win->frame = frame;
mui_font_t * main = mui_font_find(win->ui, "main");
c2_rect_t parts[MUI_WINDOW_PART_COUNT];
mui_window_update_rects(win, main, parts);
mui_window_inval(win, NULL);
}
void
mui_window_draw(
mui_window_t *win,
@ -309,6 +332,8 @@ mui_window_draw(
mui_control_draw(win, c, dr);
}
cg_restore(cg);
if (win->wdef)
win->wdef(win, MUI_WDEF_DRAW_POST, dr);
mui_drawable_clip_pop(dr);
}
@ -382,7 +407,7 @@ mui_window_handle_mouse(
mui_window_select(win);
if (mui_window_front(win->ui) != win)
c = NULL;
if (!c) {
if (!c && !c2_rect_contains_pt(&win->content, &event->mouse.where)) {
/* find where we clicked in the window */
mui_window_ref(&win->ui->event_capture, win,
FCC('E', 'V', 'C', 'P'));

View File

@ -172,7 +172,7 @@ _init(
// mii_mui_load_1mbrom(g->ui, &g_machine_conf.slot[0].conf.rom1mb);
// mii_mui_load_2dsk(g->ui, &g_machine_conf.slot[0].conf.disk2, MII_2DSK_DISKII);
// mii_mui_about(g->ui);
// mii_mui_configure_ssc(g->ui, &g_machine_conf.slot[0].conf.ssc);
mii_mui_configure_ssc(g->ui, &g_machine_conf.slot[0].conf.ssc);
#if 0
mui_alert(ui, C2_PT(0,0),
@ -188,7 +188,7 @@ _init(
"hdv,po,2mg",
getenv("HOME"), 0);
#endif
#if 1
#if 0
mui_stdfile_put(ui,
C2_PT(0, 0),
"Save file as:",

View File

@ -14,7 +14,6 @@
#include "mii.h"
#include "mii_bank.h"
#include "mii_rom_disk2.h"
#include "mii_woz.h"
#include "mii_disk2.h"
@ -144,9 +143,10 @@ _mii_disk2_init(
c->mii = mii;
printf("%s loading in slot %d\n", __func__, slot->id + 1);
uint16_t addr = 0xc100 + (slot->id * 0x100);
mii_rom_t * rom = mii_rom_get("disk2_p5");
mii_bank_write(
&mii->bank[MII_BANK_CARD_ROM],
addr, mii_rom_disk2, 256);
addr, rom->rom, 256);
c->sig = mii_alloc_signal(&mii->sig_pool, 0, SIG_COUNT, sig_names);
for (int i = 0; i < SIG_COUNT; i++)

View File

@ -21,7 +21,6 @@
#include "mii.h"
#include "mii_bank.h"
#include "mii_rom_epromcard.h"
typedef struct mii_card_ee_t {
mii_dd_t drive[1];
@ -52,7 +51,8 @@ _mii_ee_init(
mii_dd_register_drives(&mii->dd, c->drive, 1);
#if 1
c->file = (uint8_t*)GamesWithFirmware_po;
mii_rom_t *rom = mii_rom_get("epromcard");
c->file = (uint8_t*)rom->rom;
#else
const char *fname = "disks/GamesWithFirmware.po";
@ -119,7 +119,8 @@ _mii_ee_command(
return -1;
}
mii_dd_drive_load(&c->drive[0], file);
c->file = file ? file->map : (uint8_t*)GamesWithFirmware_po;
mii_rom_t *rom = mii_rom_get("epromcard");
c->file = file ? file->map : (uint8_t*)rom->rom;
res = 0;
} break;
}

View File

@ -24,7 +24,6 @@
#include "mii_bank.h"
#include "mii_dd.h"
#include "mii_slot.h"
#include "mii_rom_smartport.h"
#define MII_SM_DRIVE_COUNT 2
@ -281,9 +280,10 @@ _mii_sm_init(
// printf("%s loading in slot %d\n", __func__, slot->id + 1);
uint16_t addr = 0xc100 + (slot->id * 0x100);
mii_rom_t *rom = mii_rom_get("smartport");
mii_bank_write(
&mii->bank[MII_BANK_CARD_ROM],
addr, mii_smartport_driver_bin, 256);
addr, rom->rom, 256);
uint8_t trap_hd = mii_register_trap(mii, _mii_hd_callback);
uint8_t trap_sm = mii_register_trap(mii, _mii_sm_callback);

View File

@ -43,8 +43,6 @@ make && A2_TTY=/dev/tntX ./surl-server
#include "fifo_declare.h"
#include "bsd_queue.h"
#include "mii_rom_ssc.h"
#include <termios.h>
#include <pty.h>
#include <fcntl.h>
@ -69,6 +67,7 @@ static const int _mii_ssc_to_baud[16] = {
[8] = B1200, [9] = B1800, [10] = B2400,
[12] = B4800, [14] = B9600, [15] = B19200,
};
// Minus ones are the ones that haven't got a tty speed, so are invalid
static const unsigned int _mii_ssc_to_baud_rate[16] = {
[0] = 1152000, [1] = 50, [2] = 75, [3] = 110,
[4] = 134, [5] = 150, [6] = 300, [7] = 600,
@ -159,6 +158,7 @@ typedef struct mii_card_ssc_t {
STAILQ_ENTRY(mii_card_ssc_t) started;
struct mii_slot_t * slot;
struct mii_bank_t * rom;
mii_rom_t * rom_ssc;
mii_t * mii;
uint8_t irq_num; // MII IRQ line
uint8_t slot_offset;
@ -395,7 +395,7 @@ _mii_ssc_select(
_mii_ssc_thread_start(c);
}
}
mii_bank_write(c->rom, 0xc800, mii_rom_ssc, 2048);
mii_bank_write(c->rom, 0xc800, c->rom_ssc->rom, 2048);
c->slot->aux_rom_selected = true;
return false;
}
@ -487,7 +487,8 @@ _mii_scc_set_conf(
}
}
c->conf = *conf;
strcpy(c->tty_path, conf->device);
strncpy(c->tty_path, conf->device, sizeof(c->tty_path) - 1);
c->tty_path[sizeof(c->tty_path) - 1] = 0;
if (c->tty_fd < 0) {
int new_fd = -1;
if (conf->is_pty) {
@ -569,7 +570,8 @@ _mii_ssc_init(
uint16_t addr = 0xc100 + (slot->id * 0x100);
c->rom = &mii->bank[MII_BANK_CARD_ROM];
mii_bank_write(c->rom, addr, mii_rom_ssc + 7*256, 256);
c->rom_ssc = mii_rom_get("ssc");
mii_bank_write(c->rom, addr, c->rom_ssc->rom + 7*256, 256);
/*
* install a callback that will be called for every access to the
* ROM area, we need this to re-install the secondary part of the ROM

View File

@ -11,8 +11,6 @@
#include <string.h>
#include <ctype.h>
#include "mii_rom_iiee.h"
#include "mii_rom_iic.h"
#include "mii.h"
#include "mii_bank.h"
#include "mii_video.h"
@ -89,6 +87,7 @@ static const mii_bank_t _mii_banks_init[MII_BANK_COUNT] = {
.base = 0xc000,
.size = 0x40, // 64 pages, 16KB
.ro = 1,
.no_alloc = 1,
},
[MII_BANK_CARD_ROM] = {
.name = "CARD ROM",
@ -123,7 +122,8 @@ mii_dump_trace_state(
static const char *s_flags = "CZIDBRVN";
for (int i = 0; i < 8; i++)
printf("%c", MII_GET_P_BIT(cpu, i) ? s_flags[i] : tolower(s_flags[i]));
// if (s.sync) {
// if (s.sync)
{
uint8_t op[16];
for (int i = 0; i < 4; i++) {
mii_mem_access(mii, mii->cpu.PC + i, op + i, false, false);
@ -139,7 +139,8 @@ mii_dump_trace_state(
printf(" ; taken");
}
printf("\n");
// } else
}
// else
// printf("\n");
}
@ -462,14 +463,13 @@ mii_access_soft_switches(
switch (addr) {
case 0xc020 ... 0xc02f:
res = true;
if (mii->bank[MII_BANK_ROM].mem == mii_rom_iic) {
if (mii->bank[MII_BANK_ROM].mem == mii->rom->rom) {
printf("BANKING IIC SECOND ROM\n");
mii->bank[MII_BANK_ROM].mem =
(uint8_t*)&mii_rom_iic[16 * 1024];
mii->bank[MII_BANK_ROM].mem = (uint8_t*)
mii->rom->rom + (16 * 1024);
} else {
printf("BANKING IIC FIRST ROM\n");
mii->bank[MII_BANK_ROM].mem =
(uint8_t*)&mii_rom_iic[0];
mii->bank[MII_BANK_ROM].mem = (uint8_t*)mii->rom->rom;
}
return res;
break;
@ -518,7 +518,16 @@ mii_access_soft_switches(
SW_SETSTATE(mii, SWSLOTC3ROM, addr & 1);
mii_bank_poke(sw, SWSLOTC3ROM, (addr & 1) << 7);
break;
case SWRAMWORKS_BANK:
case SWRAMWORKS_BANK: // 0xc073
/*
* From the reading, it seems only Proterm ever assumes these
* are the same. For all other software, everyone only ever use
* $c073 as a bank register. Only added these for completeness,
* and they don't seem to break anything so...
*/
case SWRAMWORKS_ALT1:
case SWRAMWORKS_ALT5:
case SWRAMWORKS_ALT7:
mii_bank_poke(sw, SWRAMWORKS_BANK, *byte);
mii_bank_update_ramworks(mii, *byte);
break;
@ -667,7 +676,7 @@ mii_init(
for (int i = 0; i < MII_BANK_COUNT; i++)
mii->bank[i] = _mii_banks_init[i];
mii->bank[MII_BANK_ROM].mem = (uint8_t*)&mii_rom_iiee[0];
// mii->bank[MII_BANK_ROM].mem = (uint8_t*)&mii_rom_iiee[0];
for (int i = 0; i < MII_BANK_COUNT; i++)
mii_bank_init(&mii->bank[i]);
uint8_t *mem = realloc(mii->bank[MII_BANK_MAIN].mem, 0x10000);
@ -702,10 +711,10 @@ mii_prepare(
mii_t *mii,
uint32_t flags )
{
if (mii->emu == MII_EMU_IIC) {
printf("IIC Mode engaged\n");
mii->bank[MII_BANK_ROM].mem = (uint8_t*)&mii_rom_iic[0];
}
// if (mii->emu == MII_EMU_IIC) {
// printf("IIC Mode engaged\n");
// mii->bank[MII_BANK_ROM].mem = (uint8_t*)&mii_rom_iic[0];
// }
// int banks = (flags >> MII_INIT_RAMWORKS_BIT) & 0xf;
// hard code it for now, doesn't seem to have any detrimental effect
@ -754,10 +763,12 @@ mii_reset(
bool cold)
{
// printf("%s cold %d\n", __func__, cold);
mii->rom = mii_rom_get("iiee");
if (mii->emu == MII_EMU_IIC) {
printf("IIC Mode engaged\n");
mii->bank[MII_BANK_ROM].mem = (uint8_t*)&mii_rom_iic[0];
mii->rom = mii_rom_get("iic");
}
mii->bank[MII_BANK_ROM].mem = (uint8_t*)mii->rom->rom;
mii->state = MII_RUNNING;
mii->cpu_state.reset = 1;
mii_bank_t * main = &mii->bank[MII_BANK_MAIN];
@ -776,6 +787,7 @@ mii_reset(
mii_bank_poke(sw, SWINTCXROM, 0);
uint8_t z[2] = {0x55,0x55};
mii_bank_write(main, 0x3f2, z, 2);
// mii_bank_write(main, 0x3fe, z, 2); // also reset IRQ vectors
}
mii->mem_dirty = 1;
mii_page_table_update(mii);
@ -1123,7 +1135,7 @@ mii_cpu_next(
// then put a temporary breakpoint to the next PC.
// all of that if this is not a relative branch of course, in
// which case we use a normal 'step' behaviour
uint8_t op;
uint8_t op = 0;
mii_mem_access(mii, mii->cpu.PC, &op, false, false);
printf("NEXT opcode %04x:%02x\n", mii->cpu.PC, op);
if (op == 0x20) { // JSR here?

View File

@ -20,6 +20,7 @@
#include "mii_mouse.h"
#include "mii_analog.h"
#include "mii_vcd.h"
#include "mii_rom.h"
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
@ -54,7 +55,7 @@ enum {
* emulator code when a disk access is needed.
*/
typedef void (*mii_trap_handler_cb)(
mii_t * mii,
struct mii_t * mii,
uint8_t trap);
typedef struct mii_trap_t {
uint16_t map;
@ -95,7 +96,7 @@ typedef struct mii_trace_t {
} mii_trace_t;
typedef uint64_t (*mii_timer_p)(
mii_t * mii,
struct mii_t * mii,
void * param );
#define MII_SPEED_NTSC 1.0227271429 // 14.31818 MHz / 14
@ -209,6 +210,7 @@ typedef struct mii_t {
/*
* These are all the state of the various subsystems.
*/
mii_rom_t * rom;
mii_video_t video;
mii_speaker_t speaker;
mii_mouse_t mouse;
@ -223,7 +225,10 @@ enum {
MII_INIT_SILENT = (1 << 2), // No audio, ever
MII_INIT_MOCKINGBOARD = (1 << 3), // Install mockingboard
// number of 256KB banks added to the ramworks
MII_INIT_RAMWORKS_BIT = 4, // bit 4 in flags. Can be up to 12
// MII_INIT_RAMWORKS_BIT = 4, // bit 4 in flags. Can be up to 12
MII_INIT_FULLSCREEN = (1 << 8),
MII_INIT_HIDE_UI = (1 << 9),
MII_INIT_DEFAULT = MII_INIT_NSC,
};

View File

@ -27,7 +27,7 @@ mii_analog_init(
void
mii_analog_access(
mii_t *mii,
struct mii_t *mii,
mii_analog_t * analog,
uint16_t addr,
uint8_t * byte,

View File

@ -23,6 +23,11 @@ _mii_usage(
printf("Options:\n");
printf(" -h, --help\tThis help\n");
printf(" -v, --verbose\tVerbose output\n");
printf(" -fs, --full-screen\tStart in full screen mode\n");
printf(" -hide, --hide-ui, --no-ui\tHide the UI\n");
printf(" --list-drivers\tList available drivers, exit\n");
printf(" --list-roms\tList available ROMs, exit\n");
printf(" --video-rom <name>\tLoad a video ROM\n");
printf(" -m, --mute\tMute the speaker\n");
printf(" -vol, --volume <volume>\tSet speaker volume (0.0 to 10.0)\n");
printf(" --audio-off, --no-audio, --silent\tDisable audio output\n");
@ -32,7 +37,6 @@ _mii_usage(
printf(" -d, --drive <slot>:<drive>:<filename>\tLoad a drive\n");
printf("\t\tSlot id is 1..7, drive is 1..2\n");
printf("\t\tAlternate syntax: <slot>:<drive> <filename>\n");
printf(" -L, --list-drivers\tList available drivers, exit\n");
printf(" -def, --default\tUse a set of default cards:\n");
printf("\t\tSlot 4: mouse\n");
printf("\t\tSlot 6: disk2\n");
@ -64,6 +68,11 @@ mii_argv_parse(
} else if (!strcmp(arg, "-v") || !strcmp(arg, "--verbose")) {
// mii->verbose++;
// continue;
} else if (!strcmp(arg, "-fs") || !strcmp(arg, "--full-screen")) {
*ioFlags |= MII_INIT_FULLSCREEN;
} else if (!strcmp(arg, "-hide") || !strcmp(arg, "--hide-ui") ||
!strcmp(arg, "--no-ui")) {
*ioFlags |= MII_INIT_HIDE_UI;
} else if ((!strcmp(arg, "-s") || !strcmp(arg, "--slot")) && i < argc-1) {
// for mat for slot is 1..8:<name> where name is the driver name
const char *p = argv[++i];
@ -139,6 +148,28 @@ mii_argv_parse(
drv = drv->next;
}
exit(0);
} else if (!strcmp(arg, "--list-roms")) {
mii_rom_t * rom = mii_rom_get(NULL);
while (rom) {
printf("rom: %-20s %-12s %7d %s\n", rom->name, rom->class,
rom->len, rom->description);
rom = SLIST_NEXT(rom, self);
}
exit(0);
} else if (!strcmp(arg, "--video-rom") && i < argc-1) {
const char *name = argv[++i];
mii_rom_t *rom = mii_rom_get_class(NULL, "video");
while (rom) {
if (!strcmp(rom->name, name)) {
mii->video.rom = rom;
break;
}
rom = SLIST_NEXT(rom, self);
}
if (!rom) {
printf("mii: video rom %s not found\n", name);
return 1;
}
} else if (!strcmp(arg, "-m") || !strcmp(arg, "--mute")) {
mii->audio.muted = true;
} else if (!strcmp(arg, "--audio-off") ||

View File

@ -31,6 +31,7 @@ void
mii_bank_dispose(
mii_bank_t *bank)
{
// printf("%s %s\n", __func__, bank->name);
if (bank->alloc)
free(bank->mem);
bank->mem = NULL;

View File

@ -18,6 +18,7 @@
#include "mii_sw.h"
#include "mii_65c02_ops.h"
#include "mii_65c02_disasm.h"
#include "mii_rom.h"
void
mii_hexdump(
@ -55,11 +56,12 @@ static const char * apple2_charset =
"PQRSTUVWXYZ[\\]^_"
" !\"#$%&'()*+,-./"
"0123456789:;<=>?"
"................"
"................"
"@ABCDEFGHIJKLMNO"
"PQRSTUVWXYZ[\\]^_"
"`abcdefghijklmno"
"pqrstuvwxyz{|}~";
void
_mii_mish_text(
void * param,
@ -69,16 +71,23 @@ _mii_mish_text(
// load 0x400, calculate the 24 line addresses from the code in video
// and show the 40 or 80 chars, depending on col80
mii_t * mii = param;
mii_bank_t * main = &mii->bank[MII_BANK_MAIN];
mii_bank_t * aux = &mii->bank[MII_BANK_AUX_BASE];
uint16_t a = 0x400;
int page2 = mii_read_one(mii, SWPAGE2);
// int col80 = mii_read_one(mii, SW80COL);
bool page2 = SW_GETSTATE(mii, SW80STORE) ? 0 : SW_GETSTATE(mii, SWPAGE2);
int col80 = SW_GETSTATE(mii, SW80COL);
for (int li = 0; li < 24; li++) {
int i = li;
a = (0x400 + (0x400 * page2));
a += ((i & 0x07) << 7) | ((i >> 3) << 5) | ((i >> 3) << 3);
printf("%04x: ", a);
for (int ci = 0; ci < 40; ci++) {
uint8_t c = (mii_read_one(mii, a++) & 0x3f);
for (int x = 0; x < 40 + (40 * col80); x++) {
uint8_t c = 0;
if (col80)
c = mii_bank_peek(x & 1 ? main : aux, a + (x >> 1));
else
c = mii_bank_peek(main, a + x);
c = c & 0x7f;
printf("%c", apple2_charset[c]);
}
printf("\n");
@ -205,6 +214,25 @@ show_state:
}
return;
}
if (!strcmp(argv[1], "roms")) {
mii_rom_t * rom = mii_rom_get(NULL);
while (rom) {
printf("rom: %-20s %-12s %7d %s\n", rom->name, rom->class,
rom->len, rom->description);
rom = SLIST_NEXT(rom, self);
}
return;
}
if (!strcmp(argv[1], "irq")) {
uint16_t irq = mii->irq.map;
printf("mii: %d IRQs\n", __builtin_popcount(irq));
for (int i = 0; i < 16; i++) {
if (irq & (1 << i))
printf("%2d: %-10s %6d\n", i,
mii->irq.irq[i].name, mii->irq.irq[i].count);
}
return;
}
printf("mii: unknown command %s\n", argv[1]);
}
@ -546,6 +574,7 @@ _mii_mish_bsave(
fseek(f, 0, SEEK_SET);
if (addr + size > 0x10000) {
printf("bsave: size too big\n");
fclose(f);
return;
}
mii_bank_t * bank = &mii->bank[MII_BANK_MAIN];
@ -572,7 +601,10 @@ MISH_CMD_HELP(mii,
" peek <addr> : peek a value in memory (respect SW)",
" speed <speed> : set speed in MHz",
" stop : stop the cpu",
" quit|exit : quit the emulator"
" quit|exit : quit the emulator",
" timers : list active timers",
" roms : list loaded roms",
" irq : list active IRQs"
);
MII_MISH(mii, _mii_mish_cmd);

78
src/mii_rom.c Normal file
View File

@ -0,0 +1,78 @@
/*
* mii_rom.c
*
* Copyright (C) 2023 Michel Pollet <buserror@gmail.com>
*
* SPDX-License-Identifier: MIT
*/
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "mii_rom.h"
typedef SLIST_HEAD(mii_rom_queue_t, mii_rom_t) mii_rom_queue_t;
static mii_rom_queue_t mii_rom_queue = SLIST_HEAD_INITIALIZER(mii_rom_queue);
void
mii_rom_register(
struct mii_rom_t *rom)
{
// insert in the queue, but keep it sorted by class, then name
mii_rom_t *r, *prev = NULL;
SLIST_FOREACH(r, &mii_rom_queue, self) {
int class = strcmp(rom->class, r->class);
if (class < 0 || (class == 0 && strcmp(rom->name, r->name) < 0))
break;
prev = r;
}
if (prev == NULL) {
SLIST_INSERT_HEAD(&mii_rom_queue, rom, self);
} else {
SLIST_INSERT_AFTER(prev, rom, self);
}
}
mii_rom_t *
mii_rom_get(
const char *name)
{
mii_rom_t *rom;
// this one is for debug only, so we can pass NULL to get the first one
if (!name)
return SLIST_FIRST(&mii_rom_queue);
SLIST_FOREACH(rom, &mii_rom_queue, self) {
if (strcmp(rom->name, name) == 0)
return rom;
}
fprintf(stderr, "%s: ROM %s not found\n", __func__, name);
return NULL;
}
mii_rom_t *
mii_rom_get_class(
mii_rom_t * prev,
const char *class)
{
mii_rom_t *rom;
// if prev is NULL, we want the first that matches that class
if (!prev) {
SLIST_FOREACH(rom, &mii_rom_queue, self) {
if (strcmp(rom->class, class) == 0)
return rom;
}
fprintf(stderr, "%s: ROM class %s not found\n", __func__, class);
return NULL;
}
// else we want the next one that matches that class.
// list is sorted by class, so we can just check the next one
rom = SLIST_NEXT(prev, self);
if (rom && strcmp(rom->class, class) == 0)
return rom;
return NULL;
}

48
src/mii_rom.h Normal file
View File

@ -0,0 +1,48 @@
/*
* mii_rom.h
*
* Copyright (C) 2023 Michel Pollet <buserror@gmail.com>
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
/*
* ROM and rom queue declaration. The ROM queue is just a single list of ROM
* that auto-add themselves to the list. There is a small utility function to
* locate a rom by name, or by class.
*/
#include <stdint.h>
#include "bsd_queue.h"
typedef struct mii_rom_t {
SLIST_ENTRY(mii_rom_t) self;
char * name;
char * class;
char * description;
const uint8_t * rom;
uint32_t len;
} mii_rom_t;
void
mii_rom_register(
struct mii_rom_t *rom);
mii_rom_t *
mii_rom_get(
const char *name);
mii_rom_t *
mii_rom_get_class(
mii_rom_t * prev,
const char *class);
#define MII_ROM(_d) \
__attribute__((constructor,used)) \
static void _mii_rom_register_##_d() { \
mii_rom_register(&_d); \
}

View File

@ -9,46 +9,40 @@
#include <stdint.h>
typedef struct mii_slot_drv_t mii_slot_drv_t;
typedef struct mii_slot_t {
uint8_t aux_rom_selected: 1, id;
void * drv_priv; // for driver use
const mii_slot_drv_t * drv;
const struct mii_slot_drv_t * drv;
} mii_slot_t;
typedef struct mii_t mii_t;
/*
* That won't handle secondary ROM banks, we'll do that if we ever need it
*/
typedef struct mii_slot_drv_t {
struct mii_slot_drv_t *next; // in global driver queue
uint32_t enable_flag; // if there is a MII_INIT_xxx flag
const char * name;
const char * desc;
int (*probe)(
mii_t * mii,
struct mii_t * mii,
uint32_t flags);
int (*init)(
mii_t * mii,
struct mii_t * mii,
struct mii_slot_t *slot);
/* optional */
void (*dispose)(
mii_t * mii,
struct mii_t * mii,
struct mii_slot_t *slot);
/* optional */
void (*reset)(
mii_t * mii,
struct mii_t * mii,
struct mii_slot_t *slot);
// access to the slot's soft switches.
uint8_t (*access)(
mii_t * mii,
struct mii_t * mii,
struct mii_slot_t *slot,
uint16_t addr, uint8_t data, bool write);
// arbitrary command for load/save etc /* optional */
int (*command)(
mii_t * mii,
struct mii_t * mii,
struct mii_slot_t *slot,
uint32_t cmd,
void * param);
@ -57,18 +51,18 @@ typedef struct mii_slot_drv_t {
// get driver installed in slot_id
mii_slot_drv_t *
mii_slot_drv_get(
mii_t *mii,
struct mii_t *mii,
uint8_t slot_id);
// install driver 'driver_name' in slot_id slot
int
mii_slot_drv_register(
mii_t *mii,
struct mii_t *mii,
uint8_t slot_id,
const char *driver_name);
// find a driver 'name' in the global list
mii_slot_drv_t *
mii_slot_drv_find(
mii_t *mii,
struct mii_t *mii,
const char * name);
enum {
@ -85,7 +79,7 @@ enum {
// send a command to a slot/driver. Return >=0 if ok, -1 if error
int
mii_slot_command(
mii_t *mii,
struct mii_t *mii,
uint8_t slot_id,
uint8_t cmd,
void * param);

View File

@ -72,7 +72,7 @@ _mii_speaker_pad(
continue;
} else
break;
case MII_AUDIO_STARTING:
case MII_AUDIO_STARTING: {
// we are starting, so we need to pad the start of the frame
// with a small attack to soften the beeps
// printf("%s started avail W:%5d\n",
@ -83,7 +83,7 @@ _mii_speaker_pad(
i == MII_SPEAKER_RAMP_ON, false);
s->source.state = MII_AUDIO_PLAYING;
s->last_fill_cycle = now;
break;
} break;
case MII_AUDIO_PLAYING: {
uint64_t last_click = (now - s->last_click_cycle) /
s->source.sink->clk_per_sample;

View File

@ -56,6 +56,10 @@ enum {
SWAN3 = 0xc05e, // AN3 status
SWAN3_REGISTER = 0xc05f, // AN3 register for video mode
SWRAMWORKS_BANK = 0xc073,
// https://retrocomputing.stackexchange.com/questions/13449/apple-iie-auxiliary-ram-bank-select-register-address-c073-or-c07x
SWRAMWORKS_ALT1 = 0xc071,
SWRAMWORKS_ALT5 = 0xc075,
SWRAMWORKS_ALT7 = 0xc077,
SWRDDHIRES = 0xc07f,
};

View File

@ -14,8 +14,6 @@
#include "mii.h"
#include "mii_bank.h"
#include "mii_rom_iiee_video.h"
#include "mii_rom_iic_video.h"
#include "mii_sw.h"
#include "minipt.h"
@ -326,7 +324,7 @@ _mii_line_render_dhires_mono(
a = _mii_line_to_video_addr(a, video->line);
video->line_addr = a;
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
(video->line * MII_VIDEO_WIDTH * 2);
const uint32_t clut[2] = {
video->clut.mono[0],
@ -369,7 +367,7 @@ _mii_line_render_dhires_color(
a = _mii_line_to_video_addr(a, video->line);
video->line_addr = a;
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
(video->line * MII_VIDEO_WIDTH * 2);
uint8_t bits[71] = { 0 };
@ -412,14 +410,15 @@ _mii_line_render_hires(
a = _mii_line_to_video_addr(a, video->line);
video->line_addr = a;
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
(video->line * MII_VIDEO_WIDTH * 2);
uint8_t *src = main->mem;
uint8_t b0 = 0;
uint8_t b1 = src[a + 0];
uint32_t lastcol = 0;
for (int x = 0; x < 40; x++) {
uint8_t b2 = src[a + x + 1];
// last columns are clear, don't wrap around
uint8_t b2 = x == 39 ? 0 : src[a + x + 1];
// last 2 pixels, current 7 pixels, next 2 pixels
uint16_t run = ((b0 & 0x60) >> ( 5 )) |
((b1 & 0x7f) << ( 2 )) |
@ -486,17 +485,18 @@ _mii_line_render_text(
int i = video->line >> 3;
a += ((i & 0x07) << 7) | ((i >> 3) << 5) | ((i >> 3) << 3);
video->line_addr = a;
// const uint8_t *rom_base = mii->emu == MII_EMU_IIEE ?
// mii_rom_iiee_video : mii_rom_iic_video;
// TODO custom fonts
const uint8_t *rom_base = mii_rom_iiee_video;
const uint8_t *rom_base = video->rom->rom;
// International ROMS are 8K, the rom_bank variable allows switching between
// the default (0) US ROM and the International ROM
rom_base += video->rom->len > (4*1024) && video->rom_bank ? (4*1024) : 0;
bool col80 = SWW_GETSTATE(sw, SW80COL);
bool altset = SWW_GETSTATE(sw, SWALTCHARSET);
int flash = video->frame_count & MII_VIDEO_FLASH_FRAME_MASK ?
-0x40 : 0x40;
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
(video->line * MII_VIDEO_WIDTH * 2);
for (int x = 0; x < 40 + (40 * col80); x++) {
uint8_t c = 0;
@ -537,7 +537,7 @@ _mii_line_render_lores(
bool col80 = SWW_GETSTATE(sw, SW80COL);
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
(video->line * MII_VIDEO_WIDTH * 2);
mii_video_clut_t * clut = &video->clut;
mii_video_clut_t * clut_low = &video->clut_low;
uint32_t lastcolor = 0;
@ -727,8 +727,8 @@ mii_video_timer_cb(
line_drawing(video, sw_state, main, aux);
uint32_t * screen = video->pixels +
(video->line * MII_VRAM_WIDTH * 2);
uint32_t * l2 = screen + MII_VRAM_WIDTH;
(video->line * MII_VIDEO_WIDTH * 2);
uint32_t * l2 = screen + MII_VIDEO_WIDTH;
#if defined(__AVX2__)
const __m256i mask = _mm256_set1_epi32(C_SCANLINE_MASK);
@ -970,6 +970,9 @@ void
mii_video_init(
mii_t *mii)
{
mii_video_t * video = &mii->video;
video->rom = mii_rom_get(
mii->emu == MII_EMU_IIC ? "iic_video" : "iiee_video");
mii->video.timer_id = mii_timer_register(mii,
mii_video_timer_cb, NULL, MII_VIDEO_H_CYCLES, __func__);
// start the DHRES in color
@ -1193,7 +1196,15 @@ _mii_mish_video(
mii_t * mii = param;
mii_video_t * video = &mii->video;
if (!argv[1] || !strcmp(argv[1], "list")) {
if (!argv[1]) {
printf("VIDEO mode %d\n", video->color_mode);
printf(" ROM %s (%s)\n", video->rom->name, video->rom->description);
printf(" ROM bank %s\n", video->rom_bank ? "ON" : "OFF");
printf(" AN3 mode %d\n", video->an3_mode);
printf(" Monochrome %s\n", video->monochrome ? "ON" : "OFF");
return;
}
if (!strcmp(argv[1], "clut")) {
for (int i = 0; i < 16; i++) {
printf("%01x: %08x %08x %08x\n", i,
video->clut.lores[0][i],
@ -1227,6 +1238,37 @@ _mii_mish_video(
mii_video_full_refresh(mii);
return;
}
if (!strcmp(argv[1], "rom")) {
const char * name = argv[2];
mii_rom_t * rom = mii_rom_get_class(NULL, "video");
while (rom && rom->name) {
if (name && !strcmp(rom->name, name)) {
printf("ROM set to %s (%s)\n", rom->name, rom->description);
mii->video.rom = rom;
mii_video_full_refresh(mii);
return;
} else if (!name) {
printf("ROM %s (%s)\n", rom->name, rom->description);
}
rom = SLIST_NEXT(rom, self);
}
fprintf(stderr, "ROM %s not found\n", name);
return;
}
if (!strcmp(argv[1], "bank")) {
// toggle video_bank and display wether it will do anything with this ROM
if (video->rom->len > (4*1024)) {
video->rom_bank = !video->rom_bank;
printf("ROM %s alternative bank %s\n",
video->rom->name,
video->rom_bank ? "ON" : "OFF");
mii_video_full_refresh(mii);
} else {
printf("Video rom %s doesn't have alternative charsets\n",
video->rom->name);
}
return;
}
#ifdef TRACE
if (!strcmp(argv[1], "trace")) {
_trace = 1;
@ -1236,6 +1278,16 @@ _mii_mish_video(
}
#endif
fprintf(stderr, "Unknown video command %s\n", argv[1]);
// print usage
fprintf(stderr, "video: test patterns generator\n");
fprintf(stderr, " <default>: dump color tables\n");
fprintf(stderr, " list: dump color tables\n");
fprintf(stderr, " color: set color mode\n");
fprintf(stderr, " mono: set mono mode\n");
fprintf(stderr, " dirty: force full refresh\n");
fprintf(stderr, " rom <name>: set video rom\n");
fprintf(stderr, " bank: toggle video rom bank\n");
}
#include "mish.h"
@ -1244,7 +1296,9 @@ MISH_CMD_NAMES(video, "video");
MISH_CMD_HELP(video,
"video: test patterns generator",
" <default>: dump color tables",
" list: dump color tables",
" rom [<name>]: set (or list) video roms",
" bank: toggle video rom bank (if rom is > 4k)",
" clut: dump color tables",
" color: set color mode",
" mono: set mono mode",
" dirty: force full refresh"

View File

@ -10,26 +10,18 @@
#include <stdint.h>
#include <stdbool.h>
#include "mii_rom.h"
/*
* When 1, this will draw a heat map of the dirty lines alongside the video
* This is useful to see if the video rendering is efficient.
* This has no real use apart from debugging the video rendering.
* When 1, this will draw a heat map of the dirty lines alongside the video This
* is useful to see if the video rendering is efficient. This has no real use
* apart from debugging the video rendering.
*/
#define MII_VIDEO_DEBUG_HEAPMAP 0
// TODO move VRAM stuff to somewhere else
#define MII_VIDEO_WIDTH (280 * 2)
#define MII_VIDEO_HEIGHT (192 * 2)
// in case padding is needed, these can be changed
#if 0 // Loads of padding to align to power of 2 sizes
#define MII_VRAM_WIDTH (1024 * 4)
#define MII_VRAM_HEIGHT 512
#else
#define MII_VRAM_WIDTH (MII_VIDEO_WIDTH * 4)
#define MII_VRAM_HEIGHT MII_VIDEO_HEIGHT
#endif
struct mii_t;
struct mii_video_t;
@ -52,7 +44,7 @@ typedef struct mii_video_cb_t {
typedef uint32_t mii_color_t;
/*
* Color Lookup Table fro all the modes. They default to the color
* Color LookUp Table for all the modes. They default to the color
* version defined in mii_video.c, then get derived from that for
* the green and amber modes.
*/
@ -69,6 +61,8 @@ typedef union mii_video_clut_t {
typedef struct mii_video_t {
void * state; // protothread state in mii_video.c
mii_rom_t * rom; // video ROM
uint8_t rom_bank; // video ROM bank (for roms that have them)
uint8_t timer_id; // timer id for the video thread
uint8_t line; // current line for cycle timer
uint8_t an3_mode; // current mode
@ -83,7 +77,12 @@ typedef struct mii_video_t {
// function pointer to the line drawing function
mii_video_cb_t line_cb;
uint8_t frame_dirty;
uint32_t frame_seed; // changed when pixels have changed for this frame
// increments when pixels have changed for this frame
uint32_t frame_seed;
/*
* Each bits is a dirty line to redraw. Set by memory accesses, cleared
* by the video thread when the line is updated (converted to pixels)
*/
uint64_t lines_dirty[192 / 64]; // 192 lines / 64 bits
#if MII_VIDEO_DEBUG_HEAPMAP
@ -91,7 +90,7 @@ typedef struct mii_video_t {
__attribute__((aligned(32))) ; // line dirty heat map
#endif
// alignment is required for vector extensions
uint32_t pixels[MII_VRAM_WIDTH * MII_VRAM_HEIGHT]
uint32_t pixels[MII_VIDEO_WIDTH * MII_VIDEO_HEIGHT]
__attribute__((aligned(32)));
} mii_video_t;
@ -103,21 +102,23 @@ mii_access_video(
bool write);
void
mii_video_init(
mii_t *mii);
struct mii_t *mii);
void
mii_video_set_mode(
mii_t *mii,
struct mii_t *mii,
uint8_t mode);
/* out of bounds write check. This allow SmartPort DMA drive to
* pass down the range it writes buffers to, so the video gets
* a chance to check if the addresses are in RAM, in case the
* Prodos call is loading an image into VRAM proper */
/*
* Out of bounds write check. This allow SmartPort DMA drive to pass down the
* range it writes buffers to, so the video gets a chance to check if the
* addresses are in RAM, in case the Prodos call is loading an image into VRAM
* proper (Smartport driver "DMA" does that)
*/
void
mii_video_OOB_write_check(
mii_t *mii,
struct mii_t *mii,
uint16_t addr,
uint16_t size);
uint8_t
mii_video_get_vapor(
mii_t *mii);
struct mii_t *mii);

82
src/roms/Makefile.inc Normal file
View File

@ -0,0 +1,82 @@
# ROMS: This bits convert the binary roms with the product number in the name
# to a C header file that can be included in the project. I used to use
# incbin.h for this, but there were issues with some of the linker used, for
# example, webassembly, so we now use xxd to generate the .h file.
# You'd NEED the xxd tool if you want to re-generate these files, but well,
# they've been constant for over 40 years, my guess is that they ain't going
# anywhere.
#
# The reason these roms are used like this here is that I always found that it
# was a massive pain to have to deal with the roms in *any* apple II (or Mac)
# emulator. You had to find the roms, put them in the right place, name them
# correctly, and then, if you wanted to use a different version, you had to
# rename them, and so on. Dreadful.
# I think it prevents a lot of people learning about the Apple II, because it's
# just too much hassle to get started. So, I've included the roms in the source
# code, and they are compiled in the binary. For the user. Not for convenience,
# Not for 'stealing' from apple, but for the user. For the user to have a
# seamless experience. To be able to just run the emulator, and have it work.
# And be amazed *at the brand*.
#
# Now, I understand that strictly speaking these are copyrighted material, but
# they are so old, and so widely available, and are used here for educational
# purposes, and with the upmost respect for all the original authors, and for
# what 'the brand' represented for us at the time. With that in mind, I think
# that there shouldn't be an issue. But if you, Mr&Mrs Apple Lawyer think
# otherwise, please let me know, I'll remove them. Reluctantly. I'll cry&scream!
.PHONY : roms
define rom_to_c
$(1) :
@if [ ! -f $$@ ]; then \
echo "ROM file $$@ not found, relying on the exiting .h"; \
touch $$@; \
fi
src/roms/mii_rom_$(2).c : $(1) utils/convert-rom-tcc.c
if [ ! -s "$$<" ]; then \
touch $$@; \
else { \
tcc -run utils/convert-rom-tcc.c -o "$$@" -i "$$<" \
-n $(2) -c $(3) -d $(4); \
echo "ROM $$@ Generated"; \
} fi
roms:: src/roms/mii_rom_$(2).c
endef
# 38063e08c778503fc03ecebb979769e9 contrib/mii_rom_iiee_3420349b.bin
$(eval $(call rom_to_c,contrib/mii_rom_iiee_3420349b.bin,iiee,main,\
"Apple IIe ROM"))
# 9123fff3442c0e688cc6816be88dd4ab contrib/mii_rom_iiee_video_3420265a.bin
$(eval $(call rom_to_c,contrib/mii_rom_iiee_video_3420265a.bin,iiee_video,video,\
"Apple IIe Video ROM"))
# e0d67bb1aabe2030547b4cbdf3905b60 contrib/mii_rom_iic_3420033a.bin
$(eval $(call rom_to_c,contrib/mii_rom_iic_3420033a.bin,iic,main,\
"Apple IIc ROM"))
# 67c0d61ab0911183faf05270f881a97e contrib/mii_rom_ssc_3410065a.bin
$(eval $(call rom_to_c,contrib/mii_rom_ssc_3410065a.bin,ssc,ssc,\
"Super Serial Card ROM"))
# 9123fff3442c0e688cc6816be88dd4ab contrib/mii_rom_iic_video_3410265a.bin
$(eval $(call rom_to_c,contrib/mii_rom_iic_video_3410265a.bin,iic_video,video,\
"Apple IIc Video ROM"))
# 2020aa1413ff77fe29353f3ee72dc295 contrib/mii_rom_disk2_p5_3410037.bin
$(eval $(call rom_to_c,contrib/mii_rom_disk2_p5_3410037.bin,disk2_p5,disk2_p5,\
"Disk II Card ROM"))
# The original of this file online is 16KB and is marked as IIe/IIc. The first
# 8KB are empty (0xff) so I trimmed that off.
# a7d723b93d09f776a433fee4d31e1d0d contrib/mii_rom_iiee_video_fr_342274a.bin
$(eval $(call rom_to_c,contrib/mii_rom_iiee_video_fr_342274a.bin,iiee_video_fr,video,\
"Apple IIe Video ROM FR"))
# 45a0fe6d800273ec9cef4fc23da7f25f contrib/mii_rom_iiee_video_uk_3420273a.bin
$(eval $(call rom_to_c,contrib/mii_rom_iiee_video_uk_3420273a.bin,iiee_video_uk,video,\
"Apple IIe Video ROM UK"))
# This is the ROM file for the EEPROM card, with some games too...
$(eval $(call rom_to_c,disks/GamesWithFirmware.po,epromcard,epromcard,\
"EEPROM Card ROM"))
# And the smartport driver
$(eval $(call rom_to_c,test/asm/mii_smartport_driver.bin,smartport,smartport,\
"Smartport Driver ROM"))

View File

@ -1,26 +0,0 @@
#pragma once
static const unsigned char mii_rom_disk2[] = {
0xa2, 0x20, 0xa0, 0x00, 0xa2, 0x03, 0x86, 0x3c, 0x8a, 0x0a, 0x24, 0x3c,
0xf0, 0x10, 0x05, 0x3c, 0x49, 0xff, 0x29, 0x7e, 0xb0, 0x08, 0x4a, 0xd0,
0xfb, 0x98, 0x9d, 0x56, 0x03, 0xc8, 0xe8, 0x10, 0xe5, 0x20, 0x58, 0xff,
0xba, 0xbd, 0x00, 0x01, 0x0a, 0x0a, 0x0a, 0x0a, 0x85, 0x2b, 0xaa, 0xbd,
0x8e, 0xc0, 0xbd, 0x8c, 0xc0, 0xbd, 0x8a, 0xc0, 0xbd, 0x89, 0xc0, 0xa0,
0x50, 0xbd, 0x80, 0xc0, 0x98, 0x29, 0x03, 0x0a, 0x05, 0x2b, 0xaa, 0xbd,
0x81, 0xc0, 0xa9, 0x56, 0x20, 0xa8, 0xfc, 0x88, 0x10, 0xeb, 0x85, 0x26,
0x85, 0x3d, 0x85, 0x41, 0xa9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xbd, 0x8c,
0xc0, 0x10, 0xfb, 0x49, 0xd5, 0xd0, 0xf7, 0xbd, 0x8c, 0xc0, 0x10, 0xfb,
0xc9, 0xaa, 0xd0, 0xf3, 0xea, 0xbd, 0x8c, 0xc0, 0x10, 0xfb, 0xc9, 0x96,
0xf0, 0x09, 0x28, 0x90, 0xdf, 0x49, 0xad, 0xf0, 0x25, 0xd0, 0xd9, 0xa0,
0x03, 0x85, 0x40, 0xbd, 0x8c, 0xc0, 0x10, 0xfb, 0x2a, 0x85, 0x3c, 0xbd,
0x8c, 0xc0, 0x10, 0xfb, 0x25, 0x3c, 0x88, 0xd0, 0xec, 0x28, 0xc5, 0x3d,
0xd0, 0xbe, 0xa5, 0x40, 0xc5, 0x41, 0xd0, 0xb8, 0xb0, 0xb7, 0xa0, 0x56,
0x84, 0x3c, 0xbc, 0x8c, 0xc0, 0x10, 0xfb, 0x59, 0xd6, 0x02, 0xa4, 0x3c,
0x88, 0x99, 0x00, 0x03, 0xd0, 0xee, 0x84, 0x3c, 0xbc, 0x8c, 0xc0, 0x10,
0xfb, 0x59, 0xd6, 0x02, 0xa4, 0x3c, 0x91, 0x26, 0xc8, 0xd0, 0xef, 0xbc,
0x8c, 0xc0, 0x10, 0xfb, 0x59, 0xd6, 0x02, 0xd0, 0x87, 0xa0, 0x00, 0xa2,
0x56, 0xca, 0x30, 0xfb, 0xb1, 0x26, 0x5e, 0x00, 0x03, 0x2a, 0x5e, 0x00,
0x03, 0x2a, 0x91, 0x26, 0xc8, 0xd0, 0xee, 0xe6, 0x27, 0xe6, 0x3d, 0xa5,
0x3d, 0xcd, 0x00, 0x08, 0xa6, 0x2b, 0x90, 0xdb, 0x4c, 0x01, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00
};
static const unsigned int mii_rom_disk2_len = 256;

View File

@ -0,0 +1,30 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_disk2_p5[] = {
0xa2,0x20,0xa0,0x00,0xa2,0x03,0x86,0x3c,0x8a,0x0a,0x24,0x3c,0xf0,0x10,0x05,0x3c,
0x49,0xff,0x29,0x7e,0xb0,0x08,0x4a,0xd0,0xfb,0x98,0x9d,0x56,0x03,0xc8,0xe8,0x10,
0xe5,0x20,0x58,0xff,0xba,0xbd,0x00,0x01,0x0a,0x0a,0x0a,0x0a,0x85,0x2b,0xaa,0xbd,
0x8e,0xc0,0xbd,0x8c,0xc0,0xbd,0x8a,0xc0,0xbd,0x89,0xc0,0xa0,0x50,0xbd,0x80,0xc0,
0x98,0x29,0x03,0x0a,0x05,0x2b,0xaa,0xbd,0x81,0xc0,0xa9,0x56,0x20,0xa8,0xfc,0x88,
0x10,0xeb,0x85,0x26,0x85,0x3d,0x85,0x41,0xa9,0x08,0x85,0x27,0x18,0x08,0xbd,0x8c,
0xc0,0x10,0xfb,0x49,0xd5,0xd0,0xf7,0xbd,0x8c,0xc0,0x10,0xfb,0xc9,0xaa,0xd0,0xf3,
0xea,0xbd,0x8c,0xc0,0x10,0xfb,0xc9,0x96,0xf0,0x09,0x28,0x90,0xdf,0x49,0xad,0xf0,
0x25,0xd0,0xd9,0xa0,0x03,0x85,0x40,0xbd,0x8c,0xc0,0x10,0xfb,0x2a,0x85,0x3c,0xbd,
0x8c,0xc0,0x10,0xfb,0x25,0x3c,0x88,0xd0,0xec,0x28,0xc5,0x3d,0xd0,0xbe,0xa5,0x40,
0xc5,0x41,0xd0,0xb8,0xb0,0xb7,0xa0,0x56,0x84,0x3c,0xbc,0x8c,0xc0,0x10,0xfb,0x59,
0xd6,0x02,0xa4,0x3c,0x88,0x99,0x00,0x03,0xd0,0xee,0x84,0x3c,0xbc,0x8c,0xc0,0x10,
0xfb,0x59,0xd6,0x02,0xa4,0x3c,0x91,0x26,0xc8,0xd0,0xef,0xbc,0x8c,0xc0,0x10,0xfb,
0x59,0xd6,0x02,0xd0,0x87,0xa0,0x00,0xa2,0x56,0xca,0x30,0xfb,0xb1,0x26,0x5e,0x00,
0x03,0x2a,0x5e,0x00,0x03,0x2a,0x91,0x26,0xc8,0xd0,0xee,0xe6,0x27,0xe6,0x3d,0xa5,
0x3d,0xcd,0x00,0x08,0xa6,0x2b,0x90,0xdb,0x4c,0x01,0x08,0x00,0x00,0x00,0x00,0x00,
};
static mii_rom_t disk2_p5_rom = {
.name = "disk2_p5",
.class = "disk2_p5",
.description = "Disk II Card ROM",
.rom = mii_rom_disk2_p5,
.len = 256,
};
MII_ROM(disk2_p5_rom);

65550
src/roms/mii_rom_epromcard.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2062
src/roms/mii_rom_iic.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,270 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_iic_video[] = {
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xc1,0xeb,0xc1,0xeb,0xeb,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
};
static mii_rom_t iic_video_rom = {
.name = "iic_video",
.class = "video",
.description = "Apple IIc Video ROM",
.rom = mii_rom_iic_video,
.len = 4096,
};
MII_ROM(iic_video_rom);

View File

@ -1,346 +0,0 @@
#pragma once
static const unsigned char mii_rom_iic_video[] = {
0x1c, 0x22, 0x2a, 0x3a, 0x1a, 0x02, 0x3c, 0x00, 0x08, 0x14, 0x22, 0x22,
0x3e, 0x22, 0x22, 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x22, 0x22, 0x1e, 0x00,
0x1c, 0x22, 0x02, 0x02, 0x02, 0x22, 0x1c, 0x00, 0x1e, 0x22, 0x22, 0x22,
0x22, 0x22, 0x1e, 0x00, 0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x3e, 0x00,
0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x00, 0x3c, 0x02, 0x02, 0x02,
0x32, 0x22, 0x3c, 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22, 0x00,
0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x20, 0x20, 0x20, 0x20,
0x20, 0x22, 0x1c, 0x00, 0x22, 0x12, 0x0a, 0x06, 0x0a, 0x12, 0x22, 0x00,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x3e, 0x00, 0x22, 0x36, 0x2a, 0x2a,
0x22, 0x22, 0x22, 0x00, 0x22, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x22, 0x00,
0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x1e, 0x22, 0x22, 0x1e,
0x02, 0x02, 0x02, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x12, 0x2c, 0x00,
0x1e, 0x22, 0x22, 0x1e, 0x0a, 0x12, 0x22, 0x00, 0x1c, 0x22, 0x02, 0x1c,
0x20, 0x22, 0x1c, 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x22, 0x22, 0x22, 0x22,
0x22, 0x14, 0x08, 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22, 0x00,
0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00, 0x22, 0x22, 0x14, 0x08,
0x08, 0x08, 0x08, 0x00, 0x3e, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3e, 0x00,
0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e, 0x00, 0x00, 0x02, 0x04, 0x08,
0x10, 0x20, 0x00, 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00,
0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x14, 0x14, 0x14, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14, 0x00,
0x08, 0x3c, 0x0a, 0x1c, 0x28, 0x1e, 0x08, 0x00, 0x06, 0x26, 0x10, 0x08,
0x04, 0x32, 0x30, 0x00, 0x04, 0x0a, 0x0a, 0x04, 0x2a, 0x12, 0x2c, 0x00,
0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x02,
0x02, 0x04, 0x08, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00,
0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08, 0x00, 0x00, 0x08, 0x08, 0x3e,
0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x00,
0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00,
0x1c, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x1c, 0x00, 0x08, 0x0c, 0x08, 0x08,
0x08, 0x08, 0x1c, 0x00, 0x1c, 0x22, 0x20, 0x18, 0x04, 0x02, 0x3e, 0x00,
0x3e, 0x20, 0x10, 0x18, 0x20, 0x22, 0x1c, 0x00, 0x10, 0x18, 0x14, 0x12,
0x3e, 0x10, 0x10, 0x00, 0x3e, 0x02, 0x1e, 0x20, 0x20, 0x22, 0x1c, 0x00,
0x38, 0x04, 0x02, 0x1e, 0x22, 0x22, 0x1c, 0x00, 0x3e, 0x20, 0x10, 0x08,
0x04, 0x04, 0x04, 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c, 0x00,
0x1c, 0x22, 0x22, 0x3c, 0x20, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x08, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x04, 0x00,
0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x3e, 0x00,
0x3e, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00,
0x1c, 0x22, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00, 0xef, 0xf7, 0xc9, 0x80,
0xc0, 0xc0, 0x81, 0xc9, 0xef, 0xf7, 0xc9, 0xbe, 0xde, 0xde, 0xb5, 0xc9,
0xff, 0xff, 0xfd, 0xf9, 0xf1, 0xe1, 0xc9, 0xbd, 0x80, 0xdd, 0xeb, 0xf7,
0xf7, 0xeb, 0xd5, 0x80, 0xff, 0xbf, 0xdf, 0xee, 0xf5, 0xfb, 0xfb, 0xff,
0x80, 0xc0, 0xa0, 0x93, 0x8a, 0x84, 0x84, 0x80, 0x8f, 0x9f, 0x81, 0xce,
0x86, 0xcf, 0xc0, 0xfd, 0xff, 0xe7, 0xf8, 0xff, 0xf8, 0xf3, 0xf7, 0x8f,
0xf7, 0xfb, 0xfd, 0x80, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xd5, 0xf7, 0xf7, 0xf7, 0xf7, 0xb6, 0xd5, 0xe3, 0xf7,
0xf7, 0xe3, 0xd5, 0xb6, 0xf7, 0xf7, 0xf7, 0xf7, 0x80, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xbf, 0xbb, 0xb9, 0x80, 0xf9, 0xfb,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xec, 0xe7, 0xe3, 0x81,
0xe3, 0xe7, 0xef, 0x90, 0x9b, 0xf3, 0xe3, 0xc0, 0xe3, 0xf3, 0xfb, 0x84,
0xbf, 0xb7, 0xf7, 0x80, 0xc1, 0xe3, 0xb7, 0xbf, 0xbf, 0xb7, 0xe3, 0xc1,
0x80, 0xf7, 0xb7, 0xbf, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x80, 0xf7, 0xef, 0xdf, 0x80,
0xdf, 0xef, 0xf7, 0xff, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa,
0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xff, 0xc1, 0xbe, 0xfe,
0xfe, 0xfe, 0x80, 0xff, 0xff, 0xff, 0xc0, 0xbf, 0xbf, 0xbf, 0x80, 0xff,
0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xf7, 0xe3, 0xc1, 0x80,
0xc1, 0xe3, 0xf7, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
0xeb, 0xeb, 0x88, 0xff, 0x88, 0xeb, 0xeb, 0xff, 0x80, 0xbf, 0xbf, 0xb3,
0xb3, 0xbf, 0xbf, 0x80, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20,
0x3c, 0x22, 0x3c, 0x00, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x00,
0x00, 0x00, 0x3c, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x20, 0x20, 0x3c, 0x22,
0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x02, 0x3c, 0x00,
0x18, 0x24, 0x04, 0x1e, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x22,
0x22, 0x3c, 0x20, 0x1c, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00,
0x08, 0x00, 0x0c, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x10, 0x00, 0x18, 0x10,
0x10, 0x10, 0x12, 0x0c, 0x02, 0x02, 0x22, 0x12, 0x0e, 0x12, 0x22, 0x00,
0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x36, 0x2a,
0x2a, 0x2a, 0x22, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00,
0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x22,
0x22, 0x1e, 0x02, 0x02, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20,
0x00, 0x00, 0x3a, 0x06, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x02,
0x1c, 0x20, 0x1e, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x04, 0x24, 0x18, 0x00,
0x00, 0x00, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x22,
0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x00,
0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x22, 0x22,
0x22, 0x3c, 0x20, 0x1c, 0x00, 0x00, 0x3e, 0x10, 0x08, 0x04, 0x3e, 0x00,
0x38, 0x0c, 0x0c, 0x06, 0x0c, 0x0c, 0x38, 0x00, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00,
0x2c, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x14, 0x2a,
0x14, 0x2a, 0x00, 0x00, 0xe3, 0xdd, 0xd5, 0xc5, 0xe5, 0xfd, 0xc3, 0xff,
0xf7, 0xeb, 0xdd, 0xdd, 0xc1, 0xdd, 0xdd, 0xff, 0xe1, 0xdd, 0xdd, 0xe1,
0xdd, 0xdd, 0xe1, 0xff, 0xe3, 0xdd, 0xfd, 0xfd, 0xfd, 0xdd, 0xe3, 0xff,
0xe1, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1,
0xfd, 0xfd, 0xc1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff,
0xc3, 0xfd, 0xfd, 0xfd, 0xcd, 0xdd, 0xc3, 0xff, 0xdd, 0xdd, 0xdd, 0xc1,
0xdd, 0xdd, 0xdd, 0xff, 0xe3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdd, 0xe3, 0xff, 0xdd, 0xed, 0xf5, 0xf9,
0xf5, 0xed, 0xdd, 0xff, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xc1, 0xff,
0xdd, 0xc9, 0xd5, 0xd5, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xd9, 0xd5,
0xcd, 0xdd, 0xdd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xe1, 0xdd, 0xdd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd,
0xd5, 0xed, 0xd3, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xf5, 0xed, 0xdd, 0xff,
0xe3, 0xdd, 0xfd, 0xe3, 0xdf, 0xdd, 0xe3, 0xff, 0xc1, 0xf7, 0xf7, 0xf7,
0xf7, 0xf7, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xeb, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xd5,
0xd5, 0xc9, 0xdd, 0xff, 0xdd, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xdd, 0xff,
0xdd, 0xdd, 0xeb, 0xf7, 0xf7, 0xf7, 0xf7, 0xff, 0xc1, 0xdf, 0xef, 0xf7,
0xfb, 0xfd, 0xc1, 0xff, 0xc1, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xc1, 0xff,
0xff, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff, 0xff, 0xc1, 0xcf, 0xcf, 0xcf,
0xcf, 0xcf, 0xc1, 0xff, 0xff, 0xff, 0xf7, 0xeb, 0xdd, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xff, 0xf7, 0xff,
0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xc1, 0xeb,
0xc1, 0xeb, 0xeb, 0xff, 0xf7, 0xc3, 0xf5, 0xe3, 0xd7, 0xe1, 0xf7, 0xff,
0xf9, 0xd9, 0xef, 0xf7, 0xfb, 0xcd, 0xcf, 0xff, 0xfb, 0xf5, 0xf5, 0xfb,
0xd5, 0xed, 0xd3, 0xff, 0xf7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0xfb, 0xfd, 0xfd, 0xfd, 0xfb, 0xf7, 0xff, 0xf7, 0xef, 0xdf, 0xdf,
0xdf, 0xef, 0xf7, 0xff, 0xf7, 0xd5, 0xe3, 0xf7, 0xe3, 0xd5, 0xf7, 0xff,
0xff, 0xf7, 0xf7, 0xc1, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdf, 0xef, 0xf7,
0xfb, 0xfd, 0xff, 0xff, 0xe3, 0xdd, 0xcd, 0xd5, 0xd9, 0xdd, 0xe3, 0xff,
0xf7, 0xf3, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff, 0xe3, 0xdd, 0xdf, 0xe7,
0xfb, 0xfd, 0xc1, 0xff, 0xc1, 0xdf, 0xef, 0xe7, 0xdf, 0xdd, 0xe3, 0xff,
0xef, 0xe7, 0xeb, 0xed, 0xc1, 0xef, 0xef, 0xff, 0xc1, 0xfd, 0xe1, 0xdf,
0xdf, 0xdd, 0xe3, 0xff, 0xc7, 0xfb, 0xfd, 0xe1, 0xdd, 0xdd, 0xe3, 0xff,
0xc1, 0xdf, 0xef, 0xf7, 0xfb, 0xfb, 0xfb, 0xff, 0xe3, 0xdd, 0xdd, 0xe3,
0xdd, 0xdd, 0xe3, 0xff, 0xe3, 0xdd, 0xdd, 0xc3, 0xdf, 0xef, 0xf1, 0xff,
0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
0xf7, 0xf7, 0xfb, 0xff, 0xef, 0xf7, 0xfb, 0xfd, 0xfb, 0xf7, 0xef, 0xff,
0xff, 0xff, 0xc1, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xef, 0xdf,
0xef, 0xf7, 0xfb, 0xff, 0xe3, 0xdd, 0xef, 0xf7, 0xf7, 0xff, 0xf7, 0xff,
0xe3, 0xdd, 0xd5, 0xc5, 0xe5, 0xfd, 0xc3, 0xff, 0xf7, 0xeb, 0xdd, 0xdd,
0xc1, 0xdd, 0xdd, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xdd, 0xdd, 0xe1, 0xff,
0xe3, 0xdd, 0xfd, 0xfd, 0xfd, 0xdd, 0xe3, 0xff, 0xe1, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xe1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xc1, 0xff,
0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff, 0xc3, 0xfd, 0xfd, 0xfd,
0xcd, 0xdd, 0xc3, 0xff, 0xdd, 0xdd, 0xdd, 0xc1, 0xdd, 0xdd, 0xdd, 0xff,
0xe3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff, 0xdf, 0xdf, 0xdf, 0xdf,
0xdf, 0xdd, 0xe3, 0xff, 0xdd, 0xed, 0xf5, 0xf9, 0xf5, 0xed, 0xdd, 0xff,
0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xc1, 0xff, 0xdd, 0xc9, 0xd5, 0xd5,
0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xd9, 0xd5, 0xcd, 0xdd, 0xdd, 0xff,
0xe3, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff, 0xe1, 0xdd, 0xdd, 0xe1,
0xfd, 0xfd, 0xfd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xd5, 0xed, 0xd3, 0xff,
0xe1, 0xdd, 0xdd, 0xe1, 0xf5, 0xed, 0xdd, 0xff, 0xe3, 0xdd, 0xfd, 0xe3,
0xdf, 0xdd, 0xe3, 0xff, 0xc1, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xff,
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xeb, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xd5, 0xd5, 0xc9, 0xdd, 0xff,
0xdd, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xeb, 0xf7,
0xf7, 0xf7, 0xf7, 0xff, 0xc1, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xc1, 0xff,
0xc1, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xc1, 0xff, 0xff, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xff, 0xff, 0xc1, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc1, 0xff,
0xff, 0xff, 0xf7, 0xeb, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0xfb, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xe3, 0xdf, 0xc3, 0xdd, 0xc3, 0xff, 0xfd, 0xfd, 0xe1, 0xdd,
0xdd, 0xdd, 0xe1, 0xff, 0xff, 0xff, 0xc3, 0xfd, 0xfd, 0xfd, 0xc3, 0xff,
0xdf, 0xdf, 0xc3, 0xdd, 0xdd, 0xdd, 0xc3, 0xff, 0xff, 0xff, 0xe3, 0xdd,
0xc1, 0xfd, 0xc3, 0xff, 0xe7, 0xdb, 0xfb, 0xe1, 0xfb, 0xfb, 0xfb, 0xff,
0xff, 0xff, 0xe3, 0xdd, 0xdd, 0xc3, 0xdf, 0xe3, 0xfd, 0xfd, 0xe1, 0xdd,
0xdd, 0xdd, 0xdd, 0xff, 0xf7, 0xff, 0xf3, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xef, 0xff, 0xe7, 0xef, 0xef, 0xef, 0xed, 0xf3, 0xfd, 0xfd, 0xdd, 0xed,
0xf1, 0xed, 0xdd, 0xff, 0xf3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xff, 0xff, 0xc9, 0xd5, 0xd5, 0xd5, 0xdd, 0xff, 0xff, 0xff, 0xe1, 0xdd,
0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xff, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xfd, 0xfd, 0xff, 0xff, 0xc3, 0xdd,
0xdd, 0xc3, 0xdf, 0xdf, 0xff, 0xff, 0xc5, 0xf9, 0xfd, 0xfd, 0xfd, 0xff,
0xff, 0xff, 0xc3, 0xfd, 0xe3, 0xdf, 0xe1, 0xff, 0xfb, 0xfb, 0xe1, 0xfb,
0xfb, 0xdb, 0xe7, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xcd, 0xd3, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xeb, 0xf7, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xd5, 0xd5, 0xc9, 0xff, 0xff, 0xff, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xc3, 0xdf, 0xe3, 0xff, 0xff, 0xc1, 0xef,
0xf7, 0xfb, 0xc1, 0xff, 0xc7, 0xf3, 0xf3, 0xf9, 0xf3, 0xf3, 0xc7, 0xff,
0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf1, 0xe7, 0xe7, 0xcf,
0xe7, 0xe7, 0xf1, 0xff, 0xd3, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xd5, 0xeb, 0xd5, 0xeb, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xee, 0xbb, 0xfe, 0xfe, 0xff, 0xff,
0xfd, 0xfd, 0xdd, 0x77, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xfc, 0xcc, 0x33,
0xfc, 0xfc, 0xff, 0xff, 0xfb, 0xfb, 0xbb, 0xee, 0xfb, 0xfb, 0xff, 0xff,
0xfa, 0xfa, 0xaa, 0xaa, 0xfa, 0xfa, 0xff, 0xff, 0xf9, 0xf9, 0x99, 0x66,
0xf9, 0xf9, 0xff, 0xff, 0xf8, 0xf8, 0x88, 0x22, 0xf8, 0xf8, 0xff, 0xff,
0xf7, 0xf7, 0x77, 0xdd, 0xf7, 0xf7, 0xff, 0xff, 0xf6, 0xf6, 0x66, 0x99,
0xf6, 0xf6, 0xff, 0xff, 0xf5, 0xf5, 0x55, 0x55, 0xf5, 0xf5, 0xff, 0xff,
0xf4, 0xf4, 0x44, 0x11, 0xf4, 0xf4, 0xff, 0xff, 0xf3, 0xf3, 0x33, 0xcc,
0xf3, 0xf3, 0xff, 0xff, 0xf2, 0xf2, 0x22, 0x88, 0xf2, 0xf2, 0xff, 0xff,
0xf1, 0xf1, 0x11, 0x44, 0xf1, 0xf1, 0xff, 0xff, 0xf0, 0xf0, 0x00, 0x00,
0xf0, 0xf0, 0xff, 0xff, 0xef, 0xef, 0xff, 0xff, 0xef, 0xef, 0xee, 0xbb,
0xee, 0xee, 0xee, 0xbb, 0xee, 0xee, 0xee, 0xbb, 0xed, 0xed, 0xdd, 0x77,
0xed, 0xed, 0xee, 0xbb, 0xec, 0xec, 0xcc, 0x33, 0xec, 0xec, 0xee, 0xbb,
0xeb, 0xeb, 0xbb, 0xee, 0xeb, 0xeb, 0xee, 0xbb, 0xea, 0xea, 0xaa, 0xaa,
0xea, 0xea, 0xee, 0xbb, 0xe9, 0xe9, 0x99, 0x66, 0xe9, 0xe9, 0xee, 0xbb,
0xe8, 0xe8, 0x88, 0x22, 0xe8, 0xe8, 0xee, 0xbb, 0xe7, 0xe7, 0x77, 0xdd,
0xe7, 0xe7, 0xee, 0xbb, 0xe6, 0xe6, 0x66, 0x99, 0xe6, 0xe6, 0xee, 0xbb,
0xe5, 0xe5, 0x55, 0x55, 0xe5, 0xe5, 0xee, 0xbb, 0xe4, 0xe4, 0x44, 0x11,
0xe4, 0xe4, 0xee, 0xbb, 0xe3, 0xe3, 0x33, 0xcc, 0xe3, 0xe3, 0xee, 0xbb,
0xe2, 0xe2, 0x22, 0x88, 0xe2, 0xe2, 0xee, 0xbb, 0xe1, 0xe1, 0x11, 0x44,
0xe1, 0xe1, 0xee, 0xbb, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0xe0, 0xee, 0xbb,
0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xdf, 0xdd, 0x77, 0xde, 0xde, 0xee, 0xbb,
0xde, 0xde, 0xdd, 0x77, 0xdd, 0xdd, 0xdd, 0x77, 0xdd, 0xdd, 0xdd, 0x77,
0xdc, 0xdc, 0xcc, 0x33, 0xdc, 0xdc, 0xdd, 0x77, 0xdb, 0xdb, 0xbb, 0xee,
0xdb, 0xdb, 0xdd, 0x77, 0xda, 0xda, 0xaa, 0xaa, 0xda, 0xda, 0xdd, 0x77,
0xd9, 0xd9, 0x99, 0x66, 0xd9, 0xd9, 0xdd, 0x77, 0xd8, 0xd8, 0x88, 0x22,
0xd8, 0xd8, 0xdd, 0x77, 0xd7, 0xd7, 0x77, 0xdd, 0xd7, 0xd7, 0xdd, 0x77,
0xd6, 0xd6, 0x66, 0x99, 0xd6, 0xd6, 0xdd, 0x77, 0xd5, 0xd5, 0x55, 0x55,
0xd5, 0xd5, 0xdd, 0x77, 0xd4, 0xd4, 0x44, 0x11, 0xd4, 0xd4, 0xdd, 0x77,
0xd3, 0xd3, 0x33, 0xcc, 0xd3, 0xd3, 0xdd, 0x77, 0xd2, 0xd2, 0x22, 0x88,
0xd2, 0xd2, 0xdd, 0x77, 0xd1, 0xd1, 0x11, 0x44, 0xd1, 0xd1, 0xdd, 0x77,
0xd0, 0xd0, 0x00, 0x00, 0xd0, 0xd0, 0xdd, 0x77, 0xcf, 0xcf, 0xff, 0xff,
0xcf, 0xcf, 0xcc, 0x33, 0xce, 0xce, 0xee, 0xbb, 0xce, 0xce, 0xcc, 0x33,
0xcd, 0xcd, 0xdd, 0x77, 0xcd, 0xcd, 0xcc, 0x33, 0xcc, 0xcc, 0xcc, 0x33,
0xcc, 0xcc, 0xcc, 0x33, 0xcb, 0xcb, 0xbb, 0xee, 0xcb, 0xcb, 0xcc, 0x33,
0xca, 0xca, 0xaa, 0xaa, 0xca, 0xca, 0xcc, 0x33, 0xc9, 0xc9, 0x99, 0x66,
0xc9, 0xc9, 0xcc, 0x33, 0xc8, 0xc8, 0x88, 0x22, 0xc8, 0xc8, 0xcc, 0x33,
0xc7, 0xc7, 0x77, 0xdd, 0xc7, 0xc7, 0xcc, 0x33, 0xc6, 0xc6, 0x66, 0x99,
0xc6, 0xc6, 0xcc, 0x33, 0xc5, 0xc5, 0x55, 0x55, 0xc5, 0xc5, 0xcc, 0x33,
0xc4, 0xc4, 0x44, 0x11, 0xc4, 0xc4, 0xcc, 0x33, 0xc3, 0xc3, 0x33, 0xcc,
0xc3, 0xc3, 0xcc, 0x33, 0xc2, 0xc2, 0x22, 0x88, 0xc2, 0xc2, 0xcc, 0x33,
0xc1, 0xc1, 0x11, 0x44, 0xc1, 0xc1, 0xcc, 0x33, 0xc0, 0xc0, 0x00, 0x00,
0xc0, 0xc0, 0xcc, 0x33, 0xbf, 0xbf, 0xff, 0xff, 0xbf, 0xbf, 0xbb, 0xee,
0xbe, 0xbe, 0xee, 0xbb, 0xbe, 0xbe, 0xbb, 0xee, 0xbd, 0xbd, 0xdd, 0x77,
0xbd, 0xbd, 0xbb, 0xee, 0xbc, 0xbc, 0xcc, 0x33, 0xbc, 0xbc, 0xbb, 0xee,
0xbb, 0xbb, 0xbb, 0xee, 0xbb, 0xbb, 0xbb, 0xee, 0xba, 0xba, 0xaa, 0xaa,
0xba, 0xba, 0xbb, 0xee, 0xb9, 0xb9, 0x99, 0x66, 0xb9, 0xb9, 0xbb, 0xee,
0xb8, 0xb8, 0x88, 0x22, 0xb8, 0xb8, 0xbb, 0xee, 0xb7, 0xb7, 0x77, 0xdd,
0xb7, 0xb7, 0xbb, 0xee, 0xb6, 0xb6, 0x66, 0x99, 0xb6, 0xb6, 0xbb, 0xee,
0xb5, 0xb5, 0x55, 0x55, 0xb5, 0xb5, 0xbb, 0xee, 0xb4, 0xb4, 0x44, 0x11,
0xb4, 0xb4, 0xbb, 0xee, 0xb3, 0xb3, 0x33, 0xcc, 0xb3, 0xb3, 0xbb, 0xee,
0xb2, 0xb2, 0x22, 0x88, 0xb2, 0xb2, 0xbb, 0xee, 0xb1, 0xb1, 0x11, 0x44,
0xb1, 0xb1, 0xbb, 0xee, 0xb0, 0xb0, 0x00, 0x00, 0xb0, 0xb0, 0xbb, 0xee,
0xaf, 0xaf, 0xff, 0xff, 0xaf, 0xaf, 0xaa, 0xaa, 0xae, 0xae, 0xee, 0xbb,
0xae, 0xae, 0xaa, 0xaa, 0xad, 0xad, 0xdd, 0x77, 0xad, 0xad, 0xaa, 0xaa,
0xac, 0xac, 0xcc, 0x33, 0xac, 0xac, 0xaa, 0xaa, 0xab, 0xab, 0xbb, 0xee,
0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xa9, 0xa9, 0x99, 0x66, 0xa9, 0xa9, 0xaa, 0xaa, 0xa8, 0xa8, 0x88, 0x22,
0xa8, 0xa8, 0xaa, 0xaa, 0xa7, 0xa7, 0x77, 0xdd, 0xa7, 0xa7, 0xaa, 0xaa,
0xa6, 0xa6, 0x66, 0x99, 0xa6, 0xa6, 0xaa, 0xaa, 0xa5, 0xa5, 0x55, 0x55,
0xa5, 0xa5, 0xaa, 0xaa, 0xa4, 0xa4, 0x44, 0x11, 0xa4, 0xa4, 0xaa, 0xaa,
0xa3, 0xa3, 0x33, 0xcc, 0xa3, 0xa3, 0xaa, 0xaa, 0xa2, 0xa2, 0x22, 0x88,
0xa2, 0xa2, 0xaa, 0xaa, 0xa1, 0xa1, 0x11, 0x44, 0xa1, 0xa1, 0xaa, 0xaa,
0xa0, 0xa0, 0x00, 0x00, 0xa0, 0xa0, 0xaa, 0xaa, 0x9f, 0x9f, 0xff, 0xff,
0x9f, 0x9f, 0x99, 0x66, 0x9e, 0x9e, 0xee, 0xbb, 0x9e, 0x9e, 0x99, 0x66,
0x9d, 0x9d, 0xdd, 0x77, 0x9d, 0x9d, 0x99, 0x66, 0x9c, 0x9c, 0xcc, 0x33,
0x9c, 0x9c, 0x99, 0x66, 0x9b, 0x9b, 0xbb, 0xee, 0x9b, 0x9b, 0x99, 0x66,
0x9a, 0x9a, 0xaa, 0xaa, 0x9a, 0x9a, 0x99, 0x66, 0x99, 0x99, 0x99, 0x66,
0x99, 0x99, 0x99, 0x66, 0x98, 0x98, 0x88, 0x22, 0x98, 0x98, 0x99, 0x66,
0x97, 0x97, 0x77, 0xdd, 0x97, 0x97, 0x99, 0x66, 0x96, 0x96, 0x66, 0x99,
0x96, 0x96, 0x99, 0x66, 0x95, 0x95, 0x55, 0x55, 0x95, 0x95, 0x99, 0x66,
0x94, 0x94, 0x44, 0x11, 0x94, 0x94, 0x99, 0x66, 0x93, 0x93, 0x33, 0xcc,
0x93, 0x93, 0x99, 0x66, 0x92, 0x92, 0x22, 0x88, 0x92, 0x92, 0x99, 0x66,
0x91, 0x91, 0x11, 0x44, 0x91, 0x91, 0x99, 0x66, 0x90, 0x90, 0x00, 0x00,
0x90, 0x90, 0x99, 0x66, 0x8f, 0x8f, 0xff, 0xff, 0x8f, 0x8f, 0x88, 0x22,
0x8e, 0x8e, 0xee, 0xbb, 0x8e, 0x8e, 0x88, 0x22, 0x8d, 0x8d, 0xdd, 0x77,
0x8d, 0x8d, 0x88, 0x22, 0x8c, 0x8c, 0xcc, 0x33, 0x8c, 0x8c, 0x88, 0x22,
0x8b, 0x8b, 0xbb, 0xee, 0x8b, 0x8b, 0x88, 0x22, 0x8a, 0x8a, 0xaa, 0xaa,
0x8a, 0x8a, 0x88, 0x22, 0x89, 0x89, 0x99, 0x66, 0x89, 0x89, 0x88, 0x22,
0x88, 0x88, 0x88, 0x22, 0x88, 0x88, 0x88, 0x22, 0x87, 0x87, 0x77, 0xdd,
0x87, 0x87, 0x88, 0x22, 0x86, 0x86, 0x66, 0x99, 0x86, 0x86, 0x88, 0x22,
0x85, 0x85, 0x55, 0x55, 0x85, 0x85, 0x88, 0x22, 0x84, 0x84, 0x44, 0x11,
0x84, 0x84, 0x88, 0x22, 0x83, 0x83, 0x33, 0xcc, 0x83, 0x83, 0x88, 0x22,
0x82, 0x82, 0x22, 0x88, 0x82, 0x82, 0x88, 0x22, 0x81, 0x81, 0x11, 0x44,
0x81, 0x81, 0x88, 0x22, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x88, 0x22,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xdd, 0xfe, 0xfe, 0xee, 0xbb,
0xfe, 0xfe, 0x77, 0xdd, 0xfd, 0xfd, 0xdd, 0x77, 0xfd, 0xfd, 0x77, 0xdd,
0xfc, 0xfc, 0xcc, 0x33, 0xfc, 0xfc, 0x77, 0xdd, 0xfb, 0xfb, 0xbb, 0xee,
0xfb, 0xfb, 0x77, 0xdd, 0xfa, 0xfa, 0xaa, 0xaa, 0xfa, 0xfa, 0x77, 0xdd,
0xf9, 0xf9, 0x99, 0x66, 0xf9, 0xf9, 0x77, 0xdd, 0xf8, 0xf8, 0x88, 0x22,
0xf8, 0xf8, 0x77, 0xdd, 0xf7, 0xf7, 0x77, 0xdd, 0xf7, 0xf7, 0x77, 0xdd,
0xf6, 0xf6, 0x66, 0x99, 0xf6, 0xf6, 0x77, 0xdd, 0xf5, 0xf5, 0x55, 0x55,
0xf5, 0xf5, 0x77, 0xdd, 0xf4, 0xf4, 0x44, 0x11, 0xf4, 0xf4, 0x77, 0xdd,
0xf3, 0xf3, 0x33, 0xcc, 0xf3, 0xf3, 0x77, 0xdd, 0xf2, 0xf2, 0x22, 0x88,
0xf2, 0xf2, 0x77, 0xdd, 0xf1, 0xf1, 0x11, 0x44, 0xf1, 0xf1, 0x77, 0xdd,
0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x77, 0xdd, 0xef, 0xef, 0xff, 0xff,
0xef, 0xef, 0x66, 0x99, 0xee, 0xee, 0xee, 0xbb, 0xee, 0xee, 0x66, 0x99,
0xed, 0xed, 0xdd, 0x77, 0xed, 0xed, 0x66, 0x99, 0xec, 0xec, 0xcc, 0x33,
0xec, 0xec, 0x66, 0x99, 0xeb, 0xeb, 0xbb, 0xee, 0xeb, 0xeb, 0x66, 0x99,
0xea, 0xea, 0xaa, 0xaa, 0xea, 0xea, 0x66, 0x99, 0xe9, 0xe9, 0x99, 0x66,
0xe9, 0xe9, 0x66, 0x99, 0xe8, 0xe8, 0x88, 0x22, 0xe8, 0xe8, 0x66, 0x99,
0xe7, 0xe7, 0x77, 0xdd, 0xe7, 0xe7, 0x66, 0x99, 0xe6, 0xe6, 0x66, 0x99,
0xe6, 0xe6, 0x66, 0x99, 0xe5, 0xe5, 0x55, 0x55, 0xe5, 0xe5, 0x66, 0x99,
0xe4, 0xe4, 0x44, 0x11, 0xe4, 0xe4, 0x66, 0x99, 0xe3, 0xe3, 0x33, 0xcc,
0xe3, 0xe3, 0x66, 0x99, 0xe2, 0xe2, 0x22, 0x88, 0xe2, 0xe2, 0x66, 0x99,
0xe1, 0xe1, 0x11, 0x44, 0xe1, 0xe1, 0x66, 0x99, 0xe0, 0xe0, 0x00, 0x00,
0xe0, 0xe0, 0x66, 0x99, 0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xdf, 0x55, 0x55,
0xde, 0xde, 0xee, 0xbb, 0xde, 0xde, 0x55, 0x55, 0xdd, 0xdd, 0xdd, 0x77,
0xdd, 0xdd, 0x55, 0x55, 0xdc, 0xdc, 0xcc, 0x33, 0xdc, 0xdc, 0x55, 0x55,
0xdb, 0xdb, 0xbb, 0xee, 0xdb, 0xdb, 0x55, 0x55, 0xda, 0xda, 0xaa, 0xaa,
0xda, 0xda, 0x55, 0x55, 0xd9, 0xd9, 0x99, 0x66, 0xd9, 0xd9, 0x55, 0x55,
0xd8, 0xd8, 0x88, 0x22, 0xd8, 0xd8, 0x55, 0x55, 0xd7, 0xd7, 0x77, 0xdd,
0xd7, 0xd7, 0x55, 0x55, 0xd6, 0xd6, 0x66, 0x99, 0xd6, 0xd6, 0x55, 0x55,
0xd5, 0xd5, 0x55, 0x55, 0xd5, 0xd5, 0x55, 0x55, 0xd4, 0xd4, 0x44, 0x11,
0xd4, 0xd4, 0x55, 0x55, 0xd3, 0xd3, 0x33, 0xcc, 0xd3, 0xd3, 0x55, 0x55,
0xd2, 0xd2, 0x22, 0x88, 0xd2, 0xd2, 0x55, 0x55, 0xd1, 0xd1, 0x11, 0x44,
0xd1, 0xd1, 0x55, 0x55, 0xd0, 0xd0, 0x00, 0x00, 0xd0, 0xd0, 0x55, 0x55,
0xcf, 0xcf, 0xff, 0xff, 0xcf, 0xcf, 0x44, 0x11, 0xce, 0xce, 0xee, 0xbb,
0xce, 0xce, 0x44, 0x11, 0xcd, 0xcd, 0xdd, 0x77, 0xcd, 0xcd, 0x44, 0x11,
0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc, 0x44, 0x11, 0xcb, 0xcb, 0xbb, 0xee,
0xcb, 0xcb, 0x44, 0x11, 0xca, 0xca, 0xaa, 0xaa, 0xca, 0xca, 0x44, 0x11,
0xc9, 0xc9, 0x99, 0x66, 0xc9, 0xc9, 0x44, 0x11, 0xc8, 0xc8, 0x88, 0x22,
0xc8, 0xc8, 0x44, 0x11, 0xc7, 0xc7, 0x77, 0xdd, 0xc7, 0xc7, 0x44, 0x11,
0xc6, 0xc6, 0x66, 0x99, 0xc6, 0xc6, 0x44, 0x11, 0xc5, 0xc5, 0x55, 0x55,
0xc5, 0xc5, 0x44, 0x11, 0xc4, 0xc4, 0x44, 0x11, 0xc4, 0xc4, 0x44, 0x11,
0xc3, 0xc3, 0x33, 0xcc, 0xc3, 0xc3, 0x44, 0x11, 0xc2, 0xc2, 0x22, 0x88,
0xc2, 0xc2, 0x44, 0x11, 0xc1, 0xc1, 0x11, 0x44, 0xc1, 0xc1, 0x44, 0x11,
0xc0, 0xc0, 0x00, 0x00, 0xc0, 0xc0, 0x44, 0x11, 0xbf, 0xbf, 0xff, 0xff,
0xbf, 0xbf, 0x33, 0xcc, 0xbe, 0xbe, 0xee, 0xbb, 0xbe, 0xbe, 0x33, 0xcc,
0xbd, 0xbd, 0xdd, 0x77, 0xbd, 0xbd, 0x33, 0xcc, 0xbc, 0xbc, 0xcc, 0x33,
0xbc, 0xbc, 0x33, 0xcc, 0xbb, 0xbb, 0xbb, 0xee, 0xbb, 0xbb, 0x33, 0xcc,
0xba, 0xba, 0xaa, 0xaa, 0xba, 0xba, 0x33, 0xcc, 0xb9, 0xb9, 0x99, 0x66,
0xb9, 0xb9, 0x33, 0xcc, 0xb8, 0xb8, 0x88, 0x22, 0xb8, 0xb8, 0x33, 0xcc,
0xb7, 0xb7, 0x77, 0xdd, 0xb7, 0xb7, 0x33, 0xcc, 0xb6, 0xb6, 0x66, 0x99,
0xb6, 0xb6, 0x33, 0xcc, 0xb5, 0xb5, 0x55, 0x55, 0xb5, 0xb5, 0x33, 0xcc,
0xb4, 0xb4, 0x44, 0x11, 0xb4, 0xb4, 0x33, 0xcc, 0xb3, 0xb3, 0x33, 0xcc,
0xb3, 0xb3, 0x33, 0xcc, 0xb2, 0xb2, 0x22, 0x88, 0xb2, 0xb2, 0x33, 0xcc,
0xb1, 0xb1, 0x11, 0x44, 0xb1, 0xb1, 0x33, 0xcc, 0xb0, 0xb0, 0x00, 0x00,
0xb0, 0xb0, 0x33, 0xcc, 0xaf, 0xaf, 0xff, 0xff, 0xaf, 0xaf, 0x22, 0x88,
0xae, 0xae, 0xee, 0xbb, 0xae, 0xae, 0x22, 0x88, 0xad, 0xad, 0xdd, 0x77,
0xad, 0xad, 0x22, 0x88, 0xac, 0xac, 0xcc, 0x33, 0xac, 0xac, 0x22, 0x88,
0xab, 0xab, 0xbb, 0xee, 0xab, 0xab, 0x22, 0x88, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0x22, 0x88, 0xa9, 0xa9, 0x99, 0x66, 0xa9, 0xa9, 0x22, 0x88,
0xa8, 0xa8, 0x88, 0x22, 0xa8, 0xa8, 0x22, 0x88, 0xa7, 0xa7, 0x77, 0xdd,
0xa7, 0xa7, 0x22, 0x88, 0xa6, 0xa6, 0x66, 0x99, 0xa6, 0xa6, 0x22, 0x88,
0xa5, 0xa5, 0x55, 0x55, 0xa5, 0xa5, 0x22, 0x88, 0xa4, 0xa4, 0x44, 0x11,
0xa4, 0xa4, 0x22, 0x88, 0xa3, 0xa3, 0x33, 0xcc, 0xa3, 0xa3, 0x22, 0x88,
0xa2, 0xa2, 0x22, 0x88, 0xa2, 0xa2, 0x22, 0x88, 0xa1, 0xa1, 0x11, 0x44,
0xa1, 0xa1, 0x22, 0x88, 0xa0, 0xa0, 0x00, 0x00, 0xa0, 0xa0, 0x22, 0x88,
0x9f, 0x9f, 0xff, 0xff, 0x9f, 0x9f, 0x11, 0x44, 0x9e, 0x9e, 0xee, 0xbb,
0x9e, 0x9e, 0x11, 0x44, 0x9d, 0x9d, 0xdd, 0x77, 0x9d, 0x9d, 0x11, 0x44,
0x9c, 0x9c, 0xcc, 0x33, 0x9c, 0x9c, 0x11, 0x44, 0x9b, 0x9b, 0xbb, 0xee,
0x9b, 0x9b, 0x11, 0x44, 0x9a, 0x9a, 0xaa, 0xaa, 0x9a, 0x9a, 0x11, 0x44,
0x99, 0x99, 0x99, 0x66, 0x99, 0x99, 0x11, 0x44, 0x98, 0x98, 0x88, 0x22,
0x98, 0x98, 0x11, 0x44, 0x97, 0x97, 0x77, 0xdd, 0x97, 0x97, 0x11, 0x44,
0x96, 0x96, 0x66, 0x99, 0x96, 0x96, 0x11, 0x44, 0x95, 0x95, 0x55, 0x55,
0x95, 0x95, 0x11, 0x44, 0x94, 0x94, 0x44, 0x11, 0x94, 0x94, 0x11, 0x44,
0x93, 0x93, 0x33, 0xcc, 0x93, 0x93, 0x11, 0x44, 0x92, 0x92, 0x22, 0x88,
0x92, 0x92, 0x11, 0x44, 0x91, 0x91, 0x11, 0x44, 0x91, 0x91, 0x11, 0x44,
0x90, 0x90, 0x00, 0x00, 0x90, 0x90, 0x11, 0x44, 0x8f, 0x8f, 0xff, 0xff,
0x8f, 0x8f, 0x00, 0x00, 0x8e, 0x8e, 0xee, 0xbb, 0x8e, 0x8e, 0x00, 0x00,
0x8d, 0x8d, 0xdd, 0x77, 0x8d, 0x8d, 0x00, 0x00, 0x8c, 0x8c, 0xcc, 0x33,
0x8c, 0x8c, 0x00, 0x00, 0x8b, 0x8b, 0xbb, 0xee, 0x8b, 0x8b, 0x00, 0x00,
0x8a, 0x8a, 0xaa, 0xaa, 0x8a, 0x8a, 0x00, 0x00, 0x89, 0x89, 0x99, 0x66,
0x89, 0x89, 0x00, 0x00, 0x88, 0x88, 0x88, 0x22, 0x88, 0x88, 0x00, 0x00,
0x87, 0x87, 0x77, 0xdd, 0x87, 0x87, 0x00, 0x00, 0x86, 0x86, 0x66, 0x99,
0x86, 0x86, 0x00, 0x00, 0x85, 0x85, 0x55, 0x55, 0x85, 0x85, 0x00, 0x00,
0x84, 0x84, 0x44, 0x11, 0x84, 0x84, 0x00, 0x00, 0x83, 0x83, 0x33, 0xcc,
0x83, 0x83, 0x00, 0x00, 0x82, 0x82, 0x22, 0x88, 0x82, 0x82, 0x00, 0x00,
0x81, 0x81, 0x11, 0x44, 0x81, 0x81, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
0x80, 0x80, 0x00, 0x00
};
static const unsigned int mii_rom_iic_video_len = 4096;

1038
src/roms/mii_rom_iiee.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,270 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_iiee_video[] = {
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xc1,0xeb,0xc1,0xeb,0xeb,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
};
static mii_rom_t iiee_video_rom = {
.name = "iiee_video",
.class = "video",
.description = "Apple IIe Video ROM",
.rom = mii_rom_iiee_video,
.len = 4096,
};
MII_ROM(iiee_video_rom);

View File

@ -1,346 +0,0 @@
#pragma once
static const unsigned char mii_rom_iiee_video[] = {
0x1c, 0x22, 0x2a, 0x3a, 0x1a, 0x02, 0x3c, 0x00, 0x08, 0x14, 0x22, 0x22,
0x3e, 0x22, 0x22, 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x22, 0x22, 0x1e, 0x00,
0x1c, 0x22, 0x02, 0x02, 0x02, 0x22, 0x1c, 0x00, 0x1e, 0x22, 0x22, 0x22,
0x22, 0x22, 0x1e, 0x00, 0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x3e, 0x00,
0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x00, 0x3c, 0x02, 0x02, 0x02,
0x32, 0x22, 0x3c, 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22, 0x00,
0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x20, 0x20, 0x20, 0x20,
0x20, 0x22, 0x1c, 0x00, 0x22, 0x12, 0x0a, 0x06, 0x0a, 0x12, 0x22, 0x00,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x3e, 0x00, 0x22, 0x36, 0x2a, 0x2a,
0x22, 0x22, 0x22, 0x00, 0x22, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x22, 0x00,
0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x1e, 0x22, 0x22, 0x1e,
0x02, 0x02, 0x02, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x12, 0x2c, 0x00,
0x1e, 0x22, 0x22, 0x1e, 0x0a, 0x12, 0x22, 0x00, 0x1c, 0x22, 0x02, 0x1c,
0x20, 0x22, 0x1c, 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x22, 0x22, 0x22, 0x22,
0x22, 0x14, 0x08, 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22, 0x00,
0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00, 0x22, 0x22, 0x14, 0x08,
0x08, 0x08, 0x08, 0x00, 0x3e, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3e, 0x00,
0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e, 0x00, 0x00, 0x02, 0x04, 0x08,
0x10, 0x20, 0x00, 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00,
0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x14, 0x14, 0x14, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14, 0x00,
0x08, 0x3c, 0x0a, 0x1c, 0x28, 0x1e, 0x08, 0x00, 0x06, 0x26, 0x10, 0x08,
0x04, 0x32, 0x30, 0x00, 0x04, 0x0a, 0x0a, 0x04, 0x2a, 0x12, 0x2c, 0x00,
0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x02,
0x02, 0x04, 0x08, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00,
0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08, 0x00, 0x00, 0x08, 0x08, 0x3e,
0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x00,
0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00,
0x1c, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x1c, 0x00, 0x08, 0x0c, 0x08, 0x08,
0x08, 0x08, 0x1c, 0x00, 0x1c, 0x22, 0x20, 0x18, 0x04, 0x02, 0x3e, 0x00,
0x3e, 0x20, 0x10, 0x18, 0x20, 0x22, 0x1c, 0x00, 0x10, 0x18, 0x14, 0x12,
0x3e, 0x10, 0x10, 0x00, 0x3e, 0x02, 0x1e, 0x20, 0x20, 0x22, 0x1c, 0x00,
0x38, 0x04, 0x02, 0x1e, 0x22, 0x22, 0x1c, 0x00, 0x3e, 0x20, 0x10, 0x08,
0x04, 0x04, 0x04, 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c, 0x00,
0x1c, 0x22, 0x22, 0x3c, 0x20, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x08, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x04, 0x00,
0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x3e, 0x00,
0x3e, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00,
0x1c, 0x22, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00, 0xef, 0xf7, 0xc9, 0x80,
0xc0, 0xc0, 0x81, 0xc9, 0xef, 0xf7, 0xc9, 0xbe, 0xde, 0xde, 0xb5, 0xc9,
0xff, 0xff, 0xfd, 0xf9, 0xf1, 0xe1, 0xc9, 0xbd, 0x80, 0xdd, 0xeb, 0xf7,
0xf7, 0xeb, 0xd5, 0x80, 0xff, 0xbf, 0xdf, 0xee, 0xf5, 0xfb, 0xfb, 0xff,
0x80, 0xc0, 0xa0, 0x93, 0x8a, 0x84, 0x84, 0x80, 0x8f, 0x9f, 0x81, 0xce,
0x86, 0xcf, 0xc0, 0xfd, 0xff, 0xe7, 0xf8, 0xff, 0xf8, 0xf3, 0xf7, 0x8f,
0xf7, 0xfb, 0xfd, 0x80, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xd5, 0xf7, 0xf7, 0xf7, 0xf7, 0xb6, 0xd5, 0xe3, 0xf7,
0xf7, 0xe3, 0xd5, 0xb6, 0xf7, 0xf7, 0xf7, 0xf7, 0x80, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xbf, 0xbb, 0xb9, 0x80, 0xf9, 0xfb,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xec, 0xe7, 0xe3, 0x81,
0xe3, 0xe7, 0xef, 0x90, 0x9b, 0xf3, 0xe3, 0xc0, 0xe3, 0xf3, 0xfb, 0x84,
0xbf, 0xb7, 0xf7, 0x80, 0xc1, 0xe3, 0xb7, 0xbf, 0xbf, 0xb7, 0xe3, 0xc1,
0x80, 0xf7, 0xb7, 0xbf, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x80, 0xf7, 0xef, 0xdf, 0x80,
0xdf, 0xef, 0xf7, 0xff, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa,
0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xff, 0xc1, 0xbe, 0xfe,
0xfe, 0xfe, 0x80, 0xff, 0xff, 0xff, 0xc0, 0xbf, 0xbf, 0xbf, 0x80, 0xff,
0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xf7, 0xe3, 0xc1, 0x80,
0xc1, 0xe3, 0xf7, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
0xeb, 0xeb, 0x88, 0xff, 0x88, 0xeb, 0xeb, 0xff, 0x80, 0xbf, 0xbf, 0xb3,
0xb3, 0xbf, 0xbf, 0x80, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20,
0x3c, 0x22, 0x3c, 0x00, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x00,
0x00, 0x00, 0x3c, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x20, 0x20, 0x3c, 0x22,
0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x02, 0x3c, 0x00,
0x18, 0x24, 0x04, 0x1e, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x22,
0x22, 0x3c, 0x20, 0x1c, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00,
0x08, 0x00, 0x0c, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x10, 0x00, 0x18, 0x10,
0x10, 0x10, 0x12, 0x0c, 0x02, 0x02, 0x22, 0x12, 0x0e, 0x12, 0x22, 0x00,
0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x36, 0x2a,
0x2a, 0x2a, 0x22, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00,
0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x22,
0x22, 0x1e, 0x02, 0x02, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20,
0x00, 0x00, 0x3a, 0x06, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x02,
0x1c, 0x20, 0x1e, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x04, 0x24, 0x18, 0x00,
0x00, 0x00, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x22,
0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x00,
0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x22, 0x22,
0x22, 0x3c, 0x20, 0x1c, 0x00, 0x00, 0x3e, 0x10, 0x08, 0x04, 0x3e, 0x00,
0x38, 0x0c, 0x0c, 0x06, 0x0c, 0x0c, 0x38, 0x00, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00,
0x2c, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x14, 0x2a,
0x14, 0x2a, 0x00, 0x00, 0xe3, 0xdd, 0xd5, 0xc5, 0xe5, 0xfd, 0xc3, 0xff,
0xf7, 0xeb, 0xdd, 0xdd, 0xc1, 0xdd, 0xdd, 0xff, 0xe1, 0xdd, 0xdd, 0xe1,
0xdd, 0xdd, 0xe1, 0xff, 0xe3, 0xdd, 0xfd, 0xfd, 0xfd, 0xdd, 0xe3, 0xff,
0xe1, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1,
0xfd, 0xfd, 0xc1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff,
0xc3, 0xfd, 0xfd, 0xfd, 0xcd, 0xdd, 0xc3, 0xff, 0xdd, 0xdd, 0xdd, 0xc1,
0xdd, 0xdd, 0xdd, 0xff, 0xe3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdd, 0xe3, 0xff, 0xdd, 0xed, 0xf5, 0xf9,
0xf5, 0xed, 0xdd, 0xff, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xc1, 0xff,
0xdd, 0xc9, 0xd5, 0xd5, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xd9, 0xd5,
0xcd, 0xdd, 0xdd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xe1, 0xdd, 0xdd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd,
0xd5, 0xed, 0xd3, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xf5, 0xed, 0xdd, 0xff,
0xe3, 0xdd, 0xfd, 0xe3, 0xdf, 0xdd, 0xe3, 0xff, 0xc1, 0xf7, 0xf7, 0xf7,
0xf7, 0xf7, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xeb, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xd5,
0xd5, 0xc9, 0xdd, 0xff, 0xdd, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xdd, 0xff,
0xdd, 0xdd, 0xeb, 0xf7, 0xf7, 0xf7, 0xf7, 0xff, 0xc1, 0xdf, 0xef, 0xf7,
0xfb, 0xfd, 0xc1, 0xff, 0xc1, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xc1, 0xff,
0xff, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff, 0xff, 0xc1, 0xcf, 0xcf, 0xcf,
0xcf, 0xcf, 0xc1, 0xff, 0xff, 0xff, 0xf7, 0xeb, 0xdd, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xff, 0xf7, 0xff,
0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xc1, 0xeb,
0xc1, 0xeb, 0xeb, 0xff, 0xf7, 0xc3, 0xf5, 0xe3, 0xd7, 0xe1, 0xf7, 0xff,
0xf9, 0xd9, 0xef, 0xf7, 0xfb, 0xcd, 0xcf, 0xff, 0xfb, 0xf5, 0xf5, 0xfb,
0xd5, 0xed, 0xd3, 0xff, 0xf7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0xfb, 0xfd, 0xfd, 0xfd, 0xfb, 0xf7, 0xff, 0xf7, 0xef, 0xdf, 0xdf,
0xdf, 0xef, 0xf7, 0xff, 0xf7, 0xd5, 0xe3, 0xf7, 0xe3, 0xd5, 0xf7, 0xff,
0xff, 0xf7, 0xf7, 0xc1, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdf, 0xef, 0xf7,
0xfb, 0xfd, 0xff, 0xff, 0xe3, 0xdd, 0xcd, 0xd5, 0xd9, 0xdd, 0xe3, 0xff,
0xf7, 0xf3, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff, 0xe3, 0xdd, 0xdf, 0xe7,
0xfb, 0xfd, 0xc1, 0xff, 0xc1, 0xdf, 0xef, 0xe7, 0xdf, 0xdd, 0xe3, 0xff,
0xef, 0xe7, 0xeb, 0xed, 0xc1, 0xef, 0xef, 0xff, 0xc1, 0xfd, 0xe1, 0xdf,
0xdf, 0xdd, 0xe3, 0xff, 0xc7, 0xfb, 0xfd, 0xe1, 0xdd, 0xdd, 0xe3, 0xff,
0xc1, 0xdf, 0xef, 0xf7, 0xfb, 0xfb, 0xfb, 0xff, 0xe3, 0xdd, 0xdd, 0xe3,
0xdd, 0xdd, 0xe3, 0xff, 0xe3, 0xdd, 0xdd, 0xc3, 0xdf, 0xef, 0xf1, 0xff,
0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
0xf7, 0xf7, 0xfb, 0xff, 0xef, 0xf7, 0xfb, 0xfd, 0xfb, 0xf7, 0xef, 0xff,
0xff, 0xff, 0xc1, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xef, 0xdf,
0xef, 0xf7, 0xfb, 0xff, 0xe3, 0xdd, 0xef, 0xf7, 0xf7, 0xff, 0xf7, 0xff,
0xe3, 0xdd, 0xd5, 0xc5, 0xe5, 0xfd, 0xc3, 0xff, 0xf7, 0xeb, 0xdd, 0xdd,
0xc1, 0xdd, 0xdd, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xdd, 0xdd, 0xe1, 0xff,
0xe3, 0xdd, 0xfd, 0xfd, 0xfd, 0xdd, 0xe3, 0xff, 0xe1, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xe1, 0xff, 0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xc1, 0xff,
0xc1, 0xfd, 0xfd, 0xe1, 0xfd, 0xfd, 0xfd, 0xff, 0xc3, 0xfd, 0xfd, 0xfd,
0xcd, 0xdd, 0xc3, 0xff, 0xdd, 0xdd, 0xdd, 0xc1, 0xdd, 0xdd, 0xdd, 0xff,
0xe3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff, 0xdf, 0xdf, 0xdf, 0xdf,
0xdf, 0xdd, 0xe3, 0xff, 0xdd, 0xed, 0xf5, 0xf9, 0xf5, 0xed, 0xdd, 0xff,
0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xc1, 0xff, 0xdd, 0xc9, 0xd5, 0xd5,
0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xd9, 0xd5, 0xcd, 0xdd, 0xdd, 0xff,
0xe3, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff, 0xe1, 0xdd, 0xdd, 0xe1,
0xfd, 0xfd, 0xfd, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xd5, 0xed, 0xd3, 0xff,
0xe1, 0xdd, 0xdd, 0xe1, 0xf5, 0xed, 0xdd, 0xff, 0xe3, 0xdd, 0xfd, 0xe3,
0xdf, 0xdd, 0xe3, 0xff, 0xc1, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xff,
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xe3, 0xff, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xeb, 0xf7, 0xff, 0xdd, 0xdd, 0xdd, 0xd5, 0xd5, 0xc9, 0xdd, 0xff,
0xdd, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xeb, 0xf7,
0xf7, 0xf7, 0xf7, 0xff, 0xc1, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xc1, 0xff,
0xc1, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xc1, 0xff, 0xff, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xff, 0xff, 0xc1, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc1, 0xff,
0xff, 0xff, 0xf7, 0xeb, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0xfb, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xe3, 0xdf, 0xc3, 0xdd, 0xc3, 0xff, 0xfd, 0xfd, 0xe1, 0xdd,
0xdd, 0xdd, 0xe1, 0xff, 0xff, 0xff, 0xc3, 0xfd, 0xfd, 0xfd, 0xc3, 0xff,
0xdf, 0xdf, 0xc3, 0xdd, 0xdd, 0xdd, 0xc3, 0xff, 0xff, 0xff, 0xe3, 0xdd,
0xc1, 0xfd, 0xc3, 0xff, 0xe7, 0xdb, 0xfb, 0xe1, 0xfb, 0xfb, 0xfb, 0xff,
0xff, 0xff, 0xe3, 0xdd, 0xdd, 0xc3, 0xdf, 0xe3, 0xfd, 0xfd, 0xe1, 0xdd,
0xdd, 0xdd, 0xdd, 0xff, 0xf7, 0xff, 0xf3, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xef, 0xff, 0xe7, 0xef, 0xef, 0xef, 0xed, 0xf3, 0xfd, 0xfd, 0xdd, 0xed,
0xf1, 0xed, 0xdd, 0xff, 0xf3, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xe3, 0xff,
0xff, 0xff, 0xc9, 0xd5, 0xd5, 0xd5, 0xdd, 0xff, 0xff, 0xff, 0xe1, 0xdd,
0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xe3, 0xdd, 0xdd, 0xdd, 0xe3, 0xff,
0xff, 0xff, 0xe1, 0xdd, 0xdd, 0xe1, 0xfd, 0xfd, 0xff, 0xff, 0xc3, 0xdd,
0xdd, 0xc3, 0xdf, 0xdf, 0xff, 0xff, 0xc5, 0xf9, 0xfd, 0xfd, 0xfd, 0xff,
0xff, 0xff, 0xc3, 0xfd, 0xe3, 0xdf, 0xe1, 0xff, 0xfb, 0xfb, 0xe1, 0xfb,
0xfb, 0xdb, 0xe7, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xcd, 0xd3, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xeb, 0xf7, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xd5, 0xd5, 0xc9, 0xff, 0xff, 0xff, 0xdd, 0xeb, 0xf7, 0xeb, 0xdd, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xc3, 0xdf, 0xe3, 0xff, 0xff, 0xc1, 0xef,
0xf7, 0xfb, 0xc1, 0xff, 0xc7, 0xf3, 0xf3, 0xf9, 0xf3, 0xf3, 0xc7, 0xff,
0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf1, 0xe7, 0xe7, 0xcf,
0xe7, 0xe7, 0xf1, 0xff, 0xd3, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xd5, 0xeb, 0xd5, 0xeb, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xee, 0xbb, 0xfe, 0xfe, 0xff, 0xff,
0xfd, 0xfd, 0xdd, 0x77, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xfc, 0xcc, 0x33,
0xfc, 0xfc, 0xff, 0xff, 0xfb, 0xfb, 0xbb, 0xee, 0xfb, 0xfb, 0xff, 0xff,
0xfa, 0xfa, 0xaa, 0xaa, 0xfa, 0xfa, 0xff, 0xff, 0xf9, 0xf9, 0x99, 0x66,
0xf9, 0xf9, 0xff, 0xff, 0xf8, 0xf8, 0x88, 0x22, 0xf8, 0xf8, 0xff, 0xff,
0xf7, 0xf7, 0x77, 0xdd, 0xf7, 0xf7, 0xff, 0xff, 0xf6, 0xf6, 0x66, 0x99,
0xf6, 0xf6, 0xff, 0xff, 0xf5, 0xf5, 0x55, 0x55, 0xf5, 0xf5, 0xff, 0xff,
0xf4, 0xf4, 0x44, 0x11, 0xf4, 0xf4, 0xff, 0xff, 0xf3, 0xf3, 0x33, 0xcc,
0xf3, 0xf3, 0xff, 0xff, 0xf2, 0xf2, 0x22, 0x88, 0xf2, 0xf2, 0xff, 0xff,
0xf1, 0xf1, 0x11, 0x44, 0xf1, 0xf1, 0xff, 0xff, 0xf0, 0xf0, 0x00, 0x00,
0xf0, 0xf0, 0xff, 0xff, 0xef, 0xef, 0xff, 0xff, 0xef, 0xef, 0xee, 0xbb,
0xee, 0xee, 0xee, 0xbb, 0xee, 0xee, 0xee, 0xbb, 0xed, 0xed, 0xdd, 0x77,
0xed, 0xed, 0xee, 0xbb, 0xec, 0xec, 0xcc, 0x33, 0xec, 0xec, 0xee, 0xbb,
0xeb, 0xeb, 0xbb, 0xee, 0xeb, 0xeb, 0xee, 0xbb, 0xea, 0xea, 0xaa, 0xaa,
0xea, 0xea, 0xee, 0xbb, 0xe9, 0xe9, 0x99, 0x66, 0xe9, 0xe9, 0xee, 0xbb,
0xe8, 0xe8, 0x88, 0x22, 0xe8, 0xe8, 0xee, 0xbb, 0xe7, 0xe7, 0x77, 0xdd,
0xe7, 0xe7, 0xee, 0xbb, 0xe6, 0xe6, 0x66, 0x99, 0xe6, 0xe6, 0xee, 0xbb,
0xe5, 0xe5, 0x55, 0x55, 0xe5, 0xe5, 0xee, 0xbb, 0xe4, 0xe4, 0x44, 0x11,
0xe4, 0xe4, 0xee, 0xbb, 0xe3, 0xe3, 0x33, 0xcc, 0xe3, 0xe3, 0xee, 0xbb,
0xe2, 0xe2, 0x22, 0x88, 0xe2, 0xe2, 0xee, 0xbb, 0xe1, 0xe1, 0x11, 0x44,
0xe1, 0xe1, 0xee, 0xbb, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0xe0, 0xee, 0xbb,
0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xdf, 0xdd, 0x77, 0xde, 0xde, 0xee, 0xbb,
0xde, 0xde, 0xdd, 0x77, 0xdd, 0xdd, 0xdd, 0x77, 0xdd, 0xdd, 0xdd, 0x77,
0xdc, 0xdc, 0xcc, 0x33, 0xdc, 0xdc, 0xdd, 0x77, 0xdb, 0xdb, 0xbb, 0xee,
0xdb, 0xdb, 0xdd, 0x77, 0xda, 0xda, 0xaa, 0xaa, 0xda, 0xda, 0xdd, 0x77,
0xd9, 0xd9, 0x99, 0x66, 0xd9, 0xd9, 0xdd, 0x77, 0xd8, 0xd8, 0x88, 0x22,
0xd8, 0xd8, 0xdd, 0x77, 0xd7, 0xd7, 0x77, 0xdd, 0xd7, 0xd7, 0xdd, 0x77,
0xd6, 0xd6, 0x66, 0x99, 0xd6, 0xd6, 0xdd, 0x77, 0xd5, 0xd5, 0x55, 0x55,
0xd5, 0xd5, 0xdd, 0x77, 0xd4, 0xd4, 0x44, 0x11, 0xd4, 0xd4, 0xdd, 0x77,
0xd3, 0xd3, 0x33, 0xcc, 0xd3, 0xd3, 0xdd, 0x77, 0xd2, 0xd2, 0x22, 0x88,
0xd2, 0xd2, 0xdd, 0x77, 0xd1, 0xd1, 0x11, 0x44, 0xd1, 0xd1, 0xdd, 0x77,
0xd0, 0xd0, 0x00, 0x00, 0xd0, 0xd0, 0xdd, 0x77, 0xcf, 0xcf, 0xff, 0xff,
0xcf, 0xcf, 0xcc, 0x33, 0xce, 0xce, 0xee, 0xbb, 0xce, 0xce, 0xcc, 0x33,
0xcd, 0xcd, 0xdd, 0x77, 0xcd, 0xcd, 0xcc, 0x33, 0xcc, 0xcc, 0xcc, 0x33,
0xcc, 0xcc, 0xcc, 0x33, 0xcb, 0xcb, 0xbb, 0xee, 0xcb, 0xcb, 0xcc, 0x33,
0xca, 0xca, 0xaa, 0xaa, 0xca, 0xca, 0xcc, 0x33, 0xc9, 0xc9, 0x99, 0x66,
0xc9, 0xc9, 0xcc, 0x33, 0xc8, 0xc8, 0x88, 0x22, 0xc8, 0xc8, 0xcc, 0x33,
0xc7, 0xc7, 0x77, 0xdd, 0xc7, 0xc7, 0xcc, 0x33, 0xc6, 0xc6, 0x66, 0x99,
0xc6, 0xc6, 0xcc, 0x33, 0xc5, 0xc5, 0x55, 0x55, 0xc5, 0xc5, 0xcc, 0x33,
0xc4, 0xc4, 0x44, 0x11, 0xc4, 0xc4, 0xcc, 0x33, 0xc3, 0xc3, 0x33, 0xcc,
0xc3, 0xc3, 0xcc, 0x33, 0xc2, 0xc2, 0x22, 0x88, 0xc2, 0xc2, 0xcc, 0x33,
0xc1, 0xc1, 0x11, 0x44, 0xc1, 0xc1, 0xcc, 0x33, 0xc0, 0xc0, 0x00, 0x00,
0xc0, 0xc0, 0xcc, 0x33, 0xbf, 0xbf, 0xff, 0xff, 0xbf, 0xbf, 0xbb, 0xee,
0xbe, 0xbe, 0xee, 0xbb, 0xbe, 0xbe, 0xbb, 0xee, 0xbd, 0xbd, 0xdd, 0x77,
0xbd, 0xbd, 0xbb, 0xee, 0xbc, 0xbc, 0xcc, 0x33, 0xbc, 0xbc, 0xbb, 0xee,
0xbb, 0xbb, 0xbb, 0xee, 0xbb, 0xbb, 0xbb, 0xee, 0xba, 0xba, 0xaa, 0xaa,
0xba, 0xba, 0xbb, 0xee, 0xb9, 0xb9, 0x99, 0x66, 0xb9, 0xb9, 0xbb, 0xee,
0xb8, 0xb8, 0x88, 0x22, 0xb8, 0xb8, 0xbb, 0xee, 0xb7, 0xb7, 0x77, 0xdd,
0xb7, 0xb7, 0xbb, 0xee, 0xb6, 0xb6, 0x66, 0x99, 0xb6, 0xb6, 0xbb, 0xee,
0xb5, 0xb5, 0x55, 0x55, 0xb5, 0xb5, 0xbb, 0xee, 0xb4, 0xb4, 0x44, 0x11,
0xb4, 0xb4, 0xbb, 0xee, 0xb3, 0xb3, 0x33, 0xcc, 0xb3, 0xb3, 0xbb, 0xee,
0xb2, 0xb2, 0x22, 0x88, 0xb2, 0xb2, 0xbb, 0xee, 0xb1, 0xb1, 0x11, 0x44,
0xb1, 0xb1, 0xbb, 0xee, 0xb0, 0xb0, 0x00, 0x00, 0xb0, 0xb0, 0xbb, 0xee,
0xaf, 0xaf, 0xff, 0xff, 0xaf, 0xaf, 0xaa, 0xaa, 0xae, 0xae, 0xee, 0xbb,
0xae, 0xae, 0xaa, 0xaa, 0xad, 0xad, 0xdd, 0x77, 0xad, 0xad, 0xaa, 0xaa,
0xac, 0xac, 0xcc, 0x33, 0xac, 0xac, 0xaa, 0xaa, 0xab, 0xab, 0xbb, 0xee,
0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xa9, 0xa9, 0x99, 0x66, 0xa9, 0xa9, 0xaa, 0xaa, 0xa8, 0xa8, 0x88, 0x22,
0xa8, 0xa8, 0xaa, 0xaa, 0xa7, 0xa7, 0x77, 0xdd, 0xa7, 0xa7, 0xaa, 0xaa,
0xa6, 0xa6, 0x66, 0x99, 0xa6, 0xa6, 0xaa, 0xaa, 0xa5, 0xa5, 0x55, 0x55,
0xa5, 0xa5, 0xaa, 0xaa, 0xa4, 0xa4, 0x44, 0x11, 0xa4, 0xa4, 0xaa, 0xaa,
0xa3, 0xa3, 0x33, 0xcc, 0xa3, 0xa3, 0xaa, 0xaa, 0xa2, 0xa2, 0x22, 0x88,
0xa2, 0xa2, 0xaa, 0xaa, 0xa1, 0xa1, 0x11, 0x44, 0xa1, 0xa1, 0xaa, 0xaa,
0xa0, 0xa0, 0x00, 0x00, 0xa0, 0xa0, 0xaa, 0xaa, 0x9f, 0x9f, 0xff, 0xff,
0x9f, 0x9f, 0x99, 0x66, 0x9e, 0x9e, 0xee, 0xbb, 0x9e, 0x9e, 0x99, 0x66,
0x9d, 0x9d, 0xdd, 0x77, 0x9d, 0x9d, 0x99, 0x66, 0x9c, 0x9c, 0xcc, 0x33,
0x9c, 0x9c, 0x99, 0x66, 0x9b, 0x9b, 0xbb, 0xee, 0x9b, 0x9b, 0x99, 0x66,
0x9a, 0x9a, 0xaa, 0xaa, 0x9a, 0x9a, 0x99, 0x66, 0x99, 0x99, 0x99, 0x66,
0x99, 0x99, 0x99, 0x66, 0x98, 0x98, 0x88, 0x22, 0x98, 0x98, 0x99, 0x66,
0x97, 0x97, 0x77, 0xdd, 0x97, 0x97, 0x99, 0x66, 0x96, 0x96, 0x66, 0x99,
0x96, 0x96, 0x99, 0x66, 0x95, 0x95, 0x55, 0x55, 0x95, 0x95, 0x99, 0x66,
0x94, 0x94, 0x44, 0x11, 0x94, 0x94, 0x99, 0x66, 0x93, 0x93, 0x33, 0xcc,
0x93, 0x93, 0x99, 0x66, 0x92, 0x92, 0x22, 0x88, 0x92, 0x92, 0x99, 0x66,
0x91, 0x91, 0x11, 0x44, 0x91, 0x91, 0x99, 0x66, 0x90, 0x90, 0x00, 0x00,
0x90, 0x90, 0x99, 0x66, 0x8f, 0x8f, 0xff, 0xff, 0x8f, 0x8f, 0x88, 0x22,
0x8e, 0x8e, 0xee, 0xbb, 0x8e, 0x8e, 0x88, 0x22, 0x8d, 0x8d, 0xdd, 0x77,
0x8d, 0x8d, 0x88, 0x22, 0x8c, 0x8c, 0xcc, 0x33, 0x8c, 0x8c, 0x88, 0x22,
0x8b, 0x8b, 0xbb, 0xee, 0x8b, 0x8b, 0x88, 0x22, 0x8a, 0x8a, 0xaa, 0xaa,
0x8a, 0x8a, 0x88, 0x22, 0x89, 0x89, 0x99, 0x66, 0x89, 0x89, 0x88, 0x22,
0x88, 0x88, 0x88, 0x22, 0x88, 0x88, 0x88, 0x22, 0x87, 0x87, 0x77, 0xdd,
0x87, 0x87, 0x88, 0x22, 0x86, 0x86, 0x66, 0x99, 0x86, 0x86, 0x88, 0x22,
0x85, 0x85, 0x55, 0x55, 0x85, 0x85, 0x88, 0x22, 0x84, 0x84, 0x44, 0x11,
0x84, 0x84, 0x88, 0x22, 0x83, 0x83, 0x33, 0xcc, 0x83, 0x83, 0x88, 0x22,
0x82, 0x82, 0x22, 0x88, 0x82, 0x82, 0x88, 0x22, 0x81, 0x81, 0x11, 0x44,
0x81, 0x81, 0x88, 0x22, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x88, 0x22,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xdd, 0xfe, 0xfe, 0xee, 0xbb,
0xfe, 0xfe, 0x77, 0xdd, 0xfd, 0xfd, 0xdd, 0x77, 0xfd, 0xfd, 0x77, 0xdd,
0xfc, 0xfc, 0xcc, 0x33, 0xfc, 0xfc, 0x77, 0xdd, 0xfb, 0xfb, 0xbb, 0xee,
0xfb, 0xfb, 0x77, 0xdd, 0xfa, 0xfa, 0xaa, 0xaa, 0xfa, 0xfa, 0x77, 0xdd,
0xf9, 0xf9, 0x99, 0x66, 0xf9, 0xf9, 0x77, 0xdd, 0xf8, 0xf8, 0x88, 0x22,
0xf8, 0xf8, 0x77, 0xdd, 0xf7, 0xf7, 0x77, 0xdd, 0xf7, 0xf7, 0x77, 0xdd,
0xf6, 0xf6, 0x66, 0x99, 0xf6, 0xf6, 0x77, 0xdd, 0xf5, 0xf5, 0x55, 0x55,
0xf5, 0xf5, 0x77, 0xdd, 0xf4, 0xf4, 0x44, 0x11, 0xf4, 0xf4, 0x77, 0xdd,
0xf3, 0xf3, 0x33, 0xcc, 0xf3, 0xf3, 0x77, 0xdd, 0xf2, 0xf2, 0x22, 0x88,
0xf2, 0xf2, 0x77, 0xdd, 0xf1, 0xf1, 0x11, 0x44, 0xf1, 0xf1, 0x77, 0xdd,
0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x77, 0xdd, 0xef, 0xef, 0xff, 0xff,
0xef, 0xef, 0x66, 0x99, 0xee, 0xee, 0xee, 0xbb, 0xee, 0xee, 0x66, 0x99,
0xed, 0xed, 0xdd, 0x77, 0xed, 0xed, 0x66, 0x99, 0xec, 0xec, 0xcc, 0x33,
0xec, 0xec, 0x66, 0x99, 0xeb, 0xeb, 0xbb, 0xee, 0xeb, 0xeb, 0x66, 0x99,
0xea, 0xea, 0xaa, 0xaa, 0xea, 0xea, 0x66, 0x99, 0xe9, 0xe9, 0x99, 0x66,
0xe9, 0xe9, 0x66, 0x99, 0xe8, 0xe8, 0x88, 0x22, 0xe8, 0xe8, 0x66, 0x99,
0xe7, 0xe7, 0x77, 0xdd, 0xe7, 0xe7, 0x66, 0x99, 0xe6, 0xe6, 0x66, 0x99,
0xe6, 0xe6, 0x66, 0x99, 0xe5, 0xe5, 0x55, 0x55, 0xe5, 0xe5, 0x66, 0x99,
0xe4, 0xe4, 0x44, 0x11, 0xe4, 0xe4, 0x66, 0x99, 0xe3, 0xe3, 0x33, 0xcc,
0xe3, 0xe3, 0x66, 0x99, 0xe2, 0xe2, 0x22, 0x88, 0xe2, 0xe2, 0x66, 0x99,
0xe1, 0xe1, 0x11, 0x44, 0xe1, 0xe1, 0x66, 0x99, 0xe0, 0xe0, 0x00, 0x00,
0xe0, 0xe0, 0x66, 0x99, 0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xdf, 0x55, 0x55,
0xde, 0xde, 0xee, 0xbb, 0xde, 0xde, 0x55, 0x55, 0xdd, 0xdd, 0xdd, 0x77,
0xdd, 0xdd, 0x55, 0x55, 0xdc, 0xdc, 0xcc, 0x33, 0xdc, 0xdc, 0x55, 0x55,
0xdb, 0xdb, 0xbb, 0xee, 0xdb, 0xdb, 0x55, 0x55, 0xda, 0xda, 0xaa, 0xaa,
0xda, 0xda, 0x55, 0x55, 0xd9, 0xd9, 0x99, 0x66, 0xd9, 0xd9, 0x55, 0x55,
0xd8, 0xd8, 0x88, 0x22, 0xd8, 0xd8, 0x55, 0x55, 0xd7, 0xd7, 0x77, 0xdd,
0xd7, 0xd7, 0x55, 0x55, 0xd6, 0xd6, 0x66, 0x99, 0xd6, 0xd6, 0x55, 0x55,
0xd5, 0xd5, 0x55, 0x55, 0xd5, 0xd5, 0x55, 0x55, 0xd4, 0xd4, 0x44, 0x11,
0xd4, 0xd4, 0x55, 0x55, 0xd3, 0xd3, 0x33, 0xcc, 0xd3, 0xd3, 0x55, 0x55,
0xd2, 0xd2, 0x22, 0x88, 0xd2, 0xd2, 0x55, 0x55, 0xd1, 0xd1, 0x11, 0x44,
0xd1, 0xd1, 0x55, 0x55, 0xd0, 0xd0, 0x00, 0x00, 0xd0, 0xd0, 0x55, 0x55,
0xcf, 0xcf, 0xff, 0xff, 0xcf, 0xcf, 0x44, 0x11, 0xce, 0xce, 0xee, 0xbb,
0xce, 0xce, 0x44, 0x11, 0xcd, 0xcd, 0xdd, 0x77, 0xcd, 0xcd, 0x44, 0x11,
0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc, 0x44, 0x11, 0xcb, 0xcb, 0xbb, 0xee,
0xcb, 0xcb, 0x44, 0x11, 0xca, 0xca, 0xaa, 0xaa, 0xca, 0xca, 0x44, 0x11,
0xc9, 0xc9, 0x99, 0x66, 0xc9, 0xc9, 0x44, 0x11, 0xc8, 0xc8, 0x88, 0x22,
0xc8, 0xc8, 0x44, 0x11, 0xc7, 0xc7, 0x77, 0xdd, 0xc7, 0xc7, 0x44, 0x11,
0xc6, 0xc6, 0x66, 0x99, 0xc6, 0xc6, 0x44, 0x11, 0xc5, 0xc5, 0x55, 0x55,
0xc5, 0xc5, 0x44, 0x11, 0xc4, 0xc4, 0x44, 0x11, 0xc4, 0xc4, 0x44, 0x11,
0xc3, 0xc3, 0x33, 0xcc, 0xc3, 0xc3, 0x44, 0x11, 0xc2, 0xc2, 0x22, 0x88,
0xc2, 0xc2, 0x44, 0x11, 0xc1, 0xc1, 0x11, 0x44, 0xc1, 0xc1, 0x44, 0x11,
0xc0, 0xc0, 0x00, 0x00, 0xc0, 0xc0, 0x44, 0x11, 0xbf, 0xbf, 0xff, 0xff,
0xbf, 0xbf, 0x33, 0xcc, 0xbe, 0xbe, 0xee, 0xbb, 0xbe, 0xbe, 0x33, 0xcc,
0xbd, 0xbd, 0xdd, 0x77, 0xbd, 0xbd, 0x33, 0xcc, 0xbc, 0xbc, 0xcc, 0x33,
0xbc, 0xbc, 0x33, 0xcc, 0xbb, 0xbb, 0xbb, 0xee, 0xbb, 0xbb, 0x33, 0xcc,
0xba, 0xba, 0xaa, 0xaa, 0xba, 0xba, 0x33, 0xcc, 0xb9, 0xb9, 0x99, 0x66,
0xb9, 0xb9, 0x33, 0xcc, 0xb8, 0xb8, 0x88, 0x22, 0xb8, 0xb8, 0x33, 0xcc,
0xb7, 0xb7, 0x77, 0xdd, 0xb7, 0xb7, 0x33, 0xcc, 0xb6, 0xb6, 0x66, 0x99,
0xb6, 0xb6, 0x33, 0xcc, 0xb5, 0xb5, 0x55, 0x55, 0xb5, 0xb5, 0x33, 0xcc,
0xb4, 0xb4, 0x44, 0x11, 0xb4, 0xb4, 0x33, 0xcc, 0xb3, 0xb3, 0x33, 0xcc,
0xb3, 0xb3, 0x33, 0xcc, 0xb2, 0xb2, 0x22, 0x88, 0xb2, 0xb2, 0x33, 0xcc,
0xb1, 0xb1, 0x11, 0x44, 0xb1, 0xb1, 0x33, 0xcc, 0xb0, 0xb0, 0x00, 0x00,
0xb0, 0xb0, 0x33, 0xcc, 0xaf, 0xaf, 0xff, 0xff, 0xaf, 0xaf, 0x22, 0x88,
0xae, 0xae, 0xee, 0xbb, 0xae, 0xae, 0x22, 0x88, 0xad, 0xad, 0xdd, 0x77,
0xad, 0xad, 0x22, 0x88, 0xac, 0xac, 0xcc, 0x33, 0xac, 0xac, 0x22, 0x88,
0xab, 0xab, 0xbb, 0xee, 0xab, 0xab, 0x22, 0x88, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0x22, 0x88, 0xa9, 0xa9, 0x99, 0x66, 0xa9, 0xa9, 0x22, 0x88,
0xa8, 0xa8, 0x88, 0x22, 0xa8, 0xa8, 0x22, 0x88, 0xa7, 0xa7, 0x77, 0xdd,
0xa7, 0xa7, 0x22, 0x88, 0xa6, 0xa6, 0x66, 0x99, 0xa6, 0xa6, 0x22, 0x88,
0xa5, 0xa5, 0x55, 0x55, 0xa5, 0xa5, 0x22, 0x88, 0xa4, 0xa4, 0x44, 0x11,
0xa4, 0xa4, 0x22, 0x88, 0xa3, 0xa3, 0x33, 0xcc, 0xa3, 0xa3, 0x22, 0x88,
0xa2, 0xa2, 0x22, 0x88, 0xa2, 0xa2, 0x22, 0x88, 0xa1, 0xa1, 0x11, 0x44,
0xa1, 0xa1, 0x22, 0x88, 0xa0, 0xa0, 0x00, 0x00, 0xa0, 0xa0, 0x22, 0x88,
0x9f, 0x9f, 0xff, 0xff, 0x9f, 0x9f, 0x11, 0x44, 0x9e, 0x9e, 0xee, 0xbb,
0x9e, 0x9e, 0x11, 0x44, 0x9d, 0x9d, 0xdd, 0x77, 0x9d, 0x9d, 0x11, 0x44,
0x9c, 0x9c, 0xcc, 0x33, 0x9c, 0x9c, 0x11, 0x44, 0x9b, 0x9b, 0xbb, 0xee,
0x9b, 0x9b, 0x11, 0x44, 0x9a, 0x9a, 0xaa, 0xaa, 0x9a, 0x9a, 0x11, 0x44,
0x99, 0x99, 0x99, 0x66, 0x99, 0x99, 0x11, 0x44, 0x98, 0x98, 0x88, 0x22,
0x98, 0x98, 0x11, 0x44, 0x97, 0x97, 0x77, 0xdd, 0x97, 0x97, 0x11, 0x44,
0x96, 0x96, 0x66, 0x99, 0x96, 0x96, 0x11, 0x44, 0x95, 0x95, 0x55, 0x55,
0x95, 0x95, 0x11, 0x44, 0x94, 0x94, 0x44, 0x11, 0x94, 0x94, 0x11, 0x44,
0x93, 0x93, 0x33, 0xcc, 0x93, 0x93, 0x11, 0x44, 0x92, 0x92, 0x22, 0x88,
0x92, 0x92, 0x11, 0x44, 0x91, 0x91, 0x11, 0x44, 0x91, 0x91, 0x11, 0x44,
0x90, 0x90, 0x00, 0x00, 0x90, 0x90, 0x11, 0x44, 0x8f, 0x8f, 0xff, 0xff,
0x8f, 0x8f, 0x00, 0x00, 0x8e, 0x8e, 0xee, 0xbb, 0x8e, 0x8e, 0x00, 0x00,
0x8d, 0x8d, 0xdd, 0x77, 0x8d, 0x8d, 0x00, 0x00, 0x8c, 0x8c, 0xcc, 0x33,
0x8c, 0x8c, 0x00, 0x00, 0x8b, 0x8b, 0xbb, 0xee, 0x8b, 0x8b, 0x00, 0x00,
0x8a, 0x8a, 0xaa, 0xaa, 0x8a, 0x8a, 0x00, 0x00, 0x89, 0x89, 0x99, 0x66,
0x89, 0x89, 0x00, 0x00, 0x88, 0x88, 0x88, 0x22, 0x88, 0x88, 0x00, 0x00,
0x87, 0x87, 0x77, 0xdd, 0x87, 0x87, 0x00, 0x00, 0x86, 0x86, 0x66, 0x99,
0x86, 0x86, 0x00, 0x00, 0x85, 0x85, 0x55, 0x55, 0x85, 0x85, 0x00, 0x00,
0x84, 0x84, 0x44, 0x11, 0x84, 0x84, 0x00, 0x00, 0x83, 0x83, 0x33, 0xcc,
0x83, 0x83, 0x00, 0x00, 0x82, 0x82, 0x22, 0x88, 0x82, 0x82, 0x00, 0x00,
0x81, 0x81, 0x11, 0x44, 0x81, 0x81, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
0x80, 0x80, 0x00, 0x00
};
static const unsigned int mii_rom_iiee_video_len = 4096;

View File

@ -0,0 +1,526 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_iiee_video_fr[] = {
0x10,0x20,0x1c,0x20,0x3c,0x22,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x08,0x14,0x08,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3c,0x02,0x02,0x3c,0x10,0x08,0x3c,0x02,0x1c,0x22,0x1c,0x20,0x1e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x1c,0x02,0x02,0x07,0x02,0x02,0x3d,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x20,0x10,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x04,0x08,0x22,0x22,0x22,0x32,0x2c,0x00,0x10,0x20,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xef,0xdf,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xf7,0xeb,0xf7,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xc3,0xfd,0xfd,0xc3,0xef,0xf7,0xc3,0xfd,0xe3,0xdd,0xe3,0xdf,0xe1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xfd,0xf8,0xfd,0xfd,0xc2,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xef,0xdf,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xf7,0xeb,0xf7,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xc3,0xfd,0xfd,0xc3,0xef,0xf7,0xc3,0xfd,0xe3,0xdd,0xe3,0xdf,0xe1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xdf,0xef,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xfb,0xf7,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,0xef,0xdf,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xc1,0xeb,0xc1,0xeb,0xeb,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
};
static mii_rom_t iiee_video_fr_rom = {
.name = "iiee_video_fr",
.class = "video",
.description = "Apple IIe Video ROM FR",
.rom = mii_rom_iiee_video_fr,
.len = 8192,
};
MII_ROM(iiee_video_fr_rom);

View File

@ -0,0 +1,526 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_iiee_video_uk[] = {
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x0e,0x04,0x04,0x7a,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xc7,0xbb,0xfb,0xf1,0xfb,0xfb,0x85,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00,
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xc1,0xeb,0xc1,0xeb,0xeb,0xff,
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,
};
static mii_rom_t iiee_video_uk_rom = {
.name = "iiee_video_uk",
.class = "video",
.description = "Apple IIe Video ROM UK",
.rom = mii_rom_iiee_video_uk,
.len = 8192,
};
MII_ROM(iiee_video_uk_rom);

View File

@ -0,0 +1,30 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_smartport[] = {
0xa2,0x20,0xa9,0x00,0xa2,0x03,0xa9,0x00,0x2c,0xff,0xcf,0xa0,0x00,0x84,0x44,0x84,
0x46,0x84,0x47,0xc8,0x84,0x42,0xa9,0x4c,0x8d,0xfd,0x07,0xa9,0xc0,0x8d,0xfe,0x07,
0x20,0x58,0xff,0xba,0xbd,0x00,0x01,0x8d,0xff,0x07,0x0a,0x0a,0x0a,0x0a,0x85,0x43,
0xa9,0x08,0x85,0x45,0x64,0x44,0x64,0x46,0x64,0x47,0x20,0xfd,0x07,0xb0,0x1e,0xa9,
0x0a,0x85,0x45,0xa9,0x01,0x85,0x46,0x20,0xfd,0x07,0xb0,0x11,0xad,0x01,0x08,0xf0,
0x0c,0xa9,0x01,0xcd,0x00,0x08,0xd0,0x05,0xa6,0x43,0x4c,0x01,0x08,0xad,0xff,0x07,
0xc9,0xc1,0xf0,0x08,0xc5,0x01,0xd0,0x04,0xa5,0x00,0xf0,0x03,0x4c,0x00,0xe0,0xa9,
0x92,0x85,0x44,0xad,0xff,0x07,0x85,0x45,0xa0,0x00,0xb1,0x44,0xf0,0x06,0x99,0x55,
0x07,0xc8,0x80,0xf6,0xad,0xff,0x07,0x29,0x0f,0x3a,0x09,0xb0,0x99,0x55,0x07,0x4c,
0xba,0xfa,0x8e,0xef,0xa0,0x93,0xed,0xe1,0xf2,0xf4,0x90,0xef,0xf2,0xf4,0xa0,0x84,
0xe9,0xf3,0xe3,0xac,0xa0,0x82,0xef,0xef,0xf4,0xe9,0xee,0xe7,0xa0,0x93,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xea,0x80,0x0d,0x80,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xeb,0xfb,0x00,0x80,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xeb,0xfb,0x00,0x80,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xb0,0x03,0xa9,0x00,0x60,0xa9,0x27,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xc0,
};
static mii_rom_t smartport_rom = {
.name = "smartport",
.class = "smartport",
.description = "Smartport Driver ROM",
.rom = mii_rom_smartport,
.len = 256,
};
MII_ROM(smartport_rom);

View File

@ -1,26 +0,0 @@
#pragma once
static const unsigned char mii_smartport_driver_bin[] = {
0xa2, 0x20, 0xa9, 0x00, 0xa2, 0x03, 0xa9, 0x00, 0x2c, 0xff, 0xcf, 0xa0,
0x00, 0x84, 0x44, 0x84, 0x46, 0x84, 0x47, 0xc8, 0x84, 0x42, 0xa9, 0x4c,
0x8d, 0xfd, 0x07, 0xa9, 0xc0, 0x8d, 0xfe, 0x07, 0x20, 0x58, 0xff, 0xba,
0xbd, 0x00, 0x01, 0x8d, 0xff, 0x07, 0x0a, 0x0a, 0x0a, 0x0a, 0x85, 0x43,
0xa9, 0x08, 0x85, 0x45, 0x64, 0x44, 0x64, 0x46, 0x64, 0x47, 0x20, 0xfd,
0x07, 0xb0, 0x1e, 0xa9, 0x0a, 0x85, 0x45, 0xa9, 0x01, 0x85, 0x46, 0x20,
0xfd, 0x07, 0xb0, 0x11, 0xad, 0x01, 0x08, 0xf0, 0x0c, 0xa9, 0x01, 0xcd,
0x00, 0x08, 0xd0, 0x05, 0xa6, 0x43, 0x4c, 0x01, 0x08, 0xad, 0xff, 0x07,
0xc9, 0xc1, 0xf0, 0x08, 0xc5, 0x01, 0xd0, 0x04, 0xa5, 0x00, 0xf0, 0x03,
0x4c, 0x00, 0xe0, 0xa9, 0x92, 0x85, 0x44, 0xad, 0xff, 0x07, 0x85, 0x45,
0xa0, 0x00, 0xb1, 0x44, 0xf0, 0x06, 0x99, 0x55, 0x07, 0xc8, 0x80, 0xf6,
0xad, 0xff, 0x07, 0x29, 0x0f, 0x3a, 0x09, 0xb0, 0x99, 0x55, 0x07, 0x4c,
0xba, 0xfa, 0x8e, 0xef, 0xa0, 0x93, 0xed, 0xe1, 0xf2, 0xf4, 0x90, 0xef,
0xf2, 0xf4, 0xa0, 0x84, 0xe9, 0xf3, 0xe3, 0xac, 0xa0, 0x82, 0xef, 0xef,
0xf4, 0xe9, 0xee, 0xe7, 0xa0, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xea, 0x80, 0x0d, 0x80, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xeb, 0xfb, 0x00, 0x80, 0x1b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xfb, 0x00, 0x80,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb0, 0x03, 0xa9, 0x00, 0x60, 0xa9, 0x27, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x17, 0xc0
};
static const unsigned int mii_smartport_driver_bin_len = 256;

142
src/roms/mii_rom_ssc.c Normal file
View File

@ -0,0 +1,142 @@
/* this file is auto-generated by convert-rom-tcc.c */
#include "mii_rom.h"
static const uint8_t mii_rom_ssc[] = {
0x20,0x9b,0xc9,0xa9,0x16,0x48,0xa9,0x00,0x9d,0xb8,0x04,0x9d,0xb8,0x03,0x9d,0x38,
0x04,0x9d,0xb8,0x05,0x9d,0x38,0x06,0x9d,0xb8,0x06,0xb9,0x82,0xc0,0x85,0x2b,0x4a,
0x4a,0x90,0x04,0x68,0x29,0xfe,0x48,0xb8,0xb9,0x81,0xc0,0x4a,0xb0,0x07,0x4a,0xb0,
0x0e,0xa9,0x01,0xd0,0x3d,0x4a,0xa9,0x03,0xb0,0x02,0xa9,0x80,0x9d,0xb8,0x04,0x2c,
0x58,0xff,0xa5,0x2b,0x29,0x20,0x49,0x20,0x9d,0xb8,0x03,0x70,0x0a,0x20,0x9b,0xc8,
0xae,0xf8,0x07,0x9d,0xb8,0x05,0x60,0xa5,0x2b,0x4a,0x4a,0x29,0x03,0xa8,0xf0,0x04,
0x68,0x29,0x7f,0x48,0xb9,0xa6,0xc9,0x9d,0x38,0x06,0xa4,0x26,0x68,0x29,0x95,0x48,
0xa9,0x09,0x9d,0x38,0x05,0x68,0x9d,0x38,0x07,0xa5,0x2b,0x48,0x29,0xa0,0x50,0x02,
0x29,0x80,0x20,0xa1,0xcd,0x20,0x81,0xcd,0x68,0x29,0x0c,0x50,0x02,0xa9,0x00,0x0a,
0x0a,0x0a,0x09,0x0b,0x99,0x8a,0xc0,0xb9,0x88,0xc0,0x60,0x20,0x9b,0xc9,0x20,0xaa,
0xc8,0x29,0x7f,0xac,0xf8,0x07,0xbe,0xb8,0x05,0x60,0x20,0xff,0xca,0xb0,0x05,0x20,
0x2c,0xcc,0x90,0xf6,0x60,0x20,0x1e,0xca,0x68,0xa8,0x68,0xaa,0xa5,0x27,0x60,0xf0,
0x29,0xbd,0xb8,0x06,0x10,0x05,0x5e,0xb8,0x06,0xd0,0x24,0x20,0x3e,0xcc,0x90,0x1a,
0xbd,0xb8,0x03,0x29,0xc0,0xf0,0x0e,0xa5,0x27,0xc9,0xe0,0x90,0x08,0xbd,0xb8,0x04,
0x09,0x40,0x9d,0xb8,0x04,0x28,0xf0,0xd0,0xd0,0xcb,0x20,0xff,0xca,0x90,0xdc,0x20,
0x11,0xcc,0x28,0x08,0xf0,0xda,0x20,0xd1,0xc9,0x4c,0xd0,0xc8,0x20,0x1a,0xcb,0xb0,
0xb7,0xa5,0x27,0x48,0xbd,0x38,0x07,0x29,0xc0,0xd0,0x16,0xa5,0x24,0xf0,0x42,0xc9,
0x08,0xf0,0x04,0xc9,0x10,0xd0,0x0a,0x09,0xf0,0x3d,0xb8,0x06,0x18,0x65,0x24,0x85,
0x24,0xbd,0xb8,0x06,0xc5,0x24,0xf0,0x29,0xa9,0xa0,0x90,0x08,0xbd,0x38,0x07,0x0a,
0x10,0x1f,0xa9,0x88,0x85,0x27,0x2c,0x58,0xff,0x08,0x70,0x0c,0xea,0x2c,0x58,0xff,
0x50,0xb8,0xae,0xf8,0x07,0x4c,0xef,0xc9,0x20,0xb5,0xc9,0x20,0x6b,0xcb,0x4c,0x68,
0xc9,0x68,0xb8,0x08,0x85,0x27,0x48,0x20,0x68,0xcb,0x20,0xb5,0xc9,0x68,0x49,0x8d,
0x0a,0xd0,0x05,0x9d,0xb8,0x06,0x85,0x24,0xbd,0xb8,0x04,0x10,0x0d,0xbd,0x38,0x06,
0xf0,0x08,0x18,0xfd,0xb8,0x06,0xa9,0x8d,0x90,0xda,0x28,0x70,0xa4,0xbd,0x38,0x07,
0x30,0x16,0xbc,0xb8,0x06,0x0a,0x30,0x0e,0x98,0xa0,0x00,0x38,0xfd,0x38,0x06,0xc9,
0xf8,0x90,0x03,0x69,0x27,0xa8,0x84,0x24,0x4c,0xb8,0xc8,0x8e,0xf8,0x07,0x84,0x26,
0xa9,0x00,0x9d,0xb8,0x05,0x60,0x29,0x48,0x50,0x84,0x85,0x27,0x20,0x9b,0xc9,0x20,
0x63,0xcb,0x4c,0xa3,0xc8,0xa5,0x27,0x49,0x08,0x0a,0xf0,0x04,0x49,0xee,0xd0,0x09,
0xde,0xb8,0x06,0x10,0x03,0x9d,0xb8,0x06,0x60,0xc9,0xc0,0xb0,0xfb,0xfe,0xb8,0x06,
0x60,0xbd,0x38,0x07,0x29,0x08,0xf0,0x16,0xbd,0xb8,0x04,0xa4,0x27,0xc0,0x94,0xd0,
0x04,0x09,0x80,0xd0,0x06,0xc0,0x92,0xd0,0x05,0x29,0x7f,0x9d,0xb8,0x04,0x60,0x8a,
0x0a,0x0a,0x0a,0x0a,0x85,0x26,0xa9,0x00,0x9d,0xb8,0x05,0x70,0x0f,0xa0,0x00,0xb1,
0x3c,0x85,0x27,0x20,0x02,0xcc,0x20,0xba,0xfc,0x90,0xf2,0x60,0x20,0xd2,0xca,0x90,
0xfb,0xb9,0x88,0xc0,0xa0,0x00,0x91,0x3c,0x20,0xba,0xfc,0x90,0xef,0x60,0xbd,0xb8,
0x04,0x10,0x31,0xa9,0x02,0x48,0xa9,0x7f,0x20,0xe2,0xcd,0xa4,0x24,0xb1,0x28,0x85,
0x27,0xa9,0x07,0x25,0x4f,0xd0,0x10,0xa4,0x24,0xa9,0xdf,0xd1,0x28,0xd0,0x02,0xa5,
0x27,0x91,0x28,0xe6,0x4f,0xe6,0x4f,0xbd,0xb8,0x04,0x30,0x09,0x20,0x11,0xcc,0x68,
0xa9,0x8d,0x85,0x27,0x60,0x20,0xff,0xca,0x90,0x0c,0x20,0x11,0xcc,0x20,0xd1,0xc9,
0x20,0xa3,0xcc,0x4c,0x2b,0xca,0x20,0x3e,0xcc,0x90,0xc6,0x70,0xbe,0xbd,0x38,0x07,
0x0a,0x10,0x22,0x68,0xa8,0xa5,0x27,0xc0,0x01,0xf0,0x20,0xb0,0x34,0xc9,0x9b,0xd0,
0x06,0xc8,0x98,0x48,0x4c,0x2b,0xca,0xc9,0xc1,0x90,0x08,0xc9,0xdb,0xb0,0x04,0x09,
0x20,0x85,0x27,0x98,0x48,0x20,0x68,0xcb,0x4c,0x2b,0xca,0xc9,0x9b,0xf0,0xe2,0xc9,
0xb0,0x90,0x0a,0xc9,0xbb,0xb0,0x06,0xa8,0xb9,0x09,0xca,0x85,0x27,0xa0,0x00,0xf0,
0xe2,0xc9,0x9b,0xd0,0xde,0xa0,0x00,0xf0,0xc9,0x9b,0x9c,0x9f,0xdb,0xdc,0xdf,0xfb,
0xfc,0xfd,0xfe,0xff,0xa2,0xca,0xca,0xd0,0xfd,0x38,0xe9,0x01,0xd0,0xf6,0xae,0xf8,
0x07,0x60,0xa4,0x26,0xb9,0x89,0xc0,0x48,0x29,0x20,0x4a,0x4a,0x85,0x35,0x68,0x29,
0x0f,0xc9,0x08,0x90,0x04,0x29,0x07,0xb0,0x02,0xa5,0x35,0x05,0x35,0xf0,0x05,0x09,
0x20,0x9d,0xb8,0x05,0x60,0xa4,0x26,0xb9,0x89,0xc0,0x29,0x70,0xc9,0x10,0x60,0x20,
0xd2,0xca,0x90,0x15,0xb9,0x88,0xc0,0x09,0x80,0xc9,0x8a,0xd0,0x09,0xa8,0xbd,0x38,
0x07,0x29,0x20,0xd0,0x03,0x98,0x38,0x60,0x18,0x60,0xa4,0x26,0xb9,0x81,0xc0,0x4a,
0xb0,0x36,0xbd,0xb8,0x04,0x29,0x07,0xf0,0x05,0x20,0xfc,0xcd,0x38,0x60,0xa5,0x27,
0x29,0x7f,0xdd,0x38,0x05,0xd0,0x05,0xfe,0xb8,0x04,0x38,0x60,0xbd,0x38,0x07,0x29,
0x08,0xf0,0x15,0x20,0xff,0xca,0x90,0x10,0xc9,0x93,0xf0,0x0e,0x48,0xbd,0x38,0x07,
0x4a,0x4a,0x68,0x90,0x04,0x9d,0xb8,0x06,0x18,0x60,0x20,0xaa,0xc8,0xc9,0x91,0xd0,
0xf9,0x18,0x60,0x20,0x1a,0xcb,0xb0,0xf1,0x20,0x9e,0xcc,0xa4,0x26,0xb9,0x81,0xc0,
0x4a,0x90,0x4e,0x4a,0x90,0x4b,0xa5,0x27,0x48,0xbd,0x38,0x04,0xc9,0x67,0x90,0x10,
0xc9,0x6c,0xb0,0x22,0xc9,0x6b,0x68,0x48,0x49,0x9b,0x29,0x7f,0xd0,0x18,0xb0,0x19,
0xbd,0xb8,0x04,0x29,0x1f,0x09,0x80,0x85,0x27,0x20,0x02,0xcc,0x20,0xaa,0xc8,0x49,
0x86,0xd0,0xed,0x9d,0x38,0x04,0xde,0x38,0x04,0x68,0x85,0x27,0x49,0x8d,0x0a,0xd0,
0x0a,0xbd,0xb8,0x03,0x29,0x30,0xf0,0x03,0x9d,0x38,0x04,0x20,0x02,0xcc,0x4c,0xea,
0xcb,0x20,0x02,0xcc,0x0a,0xa8,0xbd,0xb8,0x03,0xc0,0x18,0xf0,0x0c,0x4a,0x4a,0xc0,
0x14,0xf0,0x06,0x4a,0x4a,0xc0,0x1a,0xd0,0x25,0x29,0x03,0xf0,0x0d,0xa8,0xb9,0xfe,
0xcb,0xa8,0xa9,0x20,0x20,0xc4,0xca,0x88,0xd0,0xf8,0xa5,0x27,0x0a,0xc9,0x1a,0xd0,
0x0d,0xbd,0x38,0x07,0x6a,0x90,0x07,0xa9,0x8a,0x85,0x27,0x4c,0x6b,0xcb,0x60,0x01,
0x08,0x40,0x20,0xf5,0xca,0xd0,0xfb,0x98,0x09,0x89,0xa8,0xa5,0x27,0x99,0xff,0xbf,
0x60,0x48,0xa4,0x24,0xa5,0x27,0x91,0x28,0x68,0xc9,0x95,0xd0,0x0c,0xa5,0x27,0xc9,
0x20,0xb0,0x06,0x20,0xdf,0xcc,0x59,0xdb,0xcc,0x85,0x27,0x60,0x18,0xbd,0x38,0x07,
0x29,0x04,0xf0,0x09,0xad,0x00,0xc0,0x10,0x04,0x8d,0x10,0xc0,0x38,0x60,0xe6,0x4e,
0xd0,0x02,0xe6,0x4f,0x20,0x2c,0xcc,0xb8,0x90,0xf3,0x20,0x11,0xcc,0x29,0x7f,0xdd,
0x38,0x05,0xd0,0x3d,0xa4,0x26,0xb9,0x81,0xc0,0x4a,0xb0,0x35,0xa0,0x0a,0xb9,0x93,
0xcc,0x85,0x27,0x98,0x48,0x20,0xa3,0xcc,0x68,0xa8,0x88,0x10,0xf1,0xa9,0x01,0x20,
0x7b,0xce,0x20,0x34,0xcc,0x10,0xfb,0xc9,0x88,0xf0,0xe1,0x85,0x27,0x20,0xa3,0xcc,
0x20,0x1a,0xcb,0xbd,0xb8,0x04,0x29,0x07,0xd0,0xe8,0xa9,0x8d,0x85,0x27,0x2c,0x58,
0xff,0x38,0x60,0xba,0xc3,0xd3,0xd3,0xa0,0xc5,0xcc,0xd0,0xd0,0xc1,0x8d,0xbd,0x38,
0x07,0x10,0x13,0xbd,0x38,0x07,0x29,0x02,0xf0,0x0d,0xbd,0xb8,0x04,0x29,0x38,0xf0,
0x06,0x8a,0x48,0xa9,0xaf,0x48,0x60,0x20,0xdf,0xcc,0x09,0x80,0xc9,0xe0,0x90,0x06,
0x59,0xd3,0xcc,0x4c,0xf6,0xfd,0xc9,0xc1,0x90,0xf9,0xc9,0xdb,0xb0,0xf5,0x59,0xd7,
0xcc,0x90,0xf0,0x20,0x00,0xe0,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0xe0,0xc0,0xbd,
0xb8,0x03,0x2a,0x2a,0x2a,0x29,0x03,0xa8,0xa5,0x27,0x60,0x42,0x67,0xc0,0x54,0x47,
0xa6,0x43,0x87,0xa6,0x51,0x47,0xb8,0x52,0xc7,0xac,0x5a,0xe7,0xf3,0x49,0x90,0xd3,
0x4b,0x90,0xdf,0x45,0x43,0x80,0x46,0xe3,0x04,0x4c,0xe3,0x01,0x58,0xe3,0x08,0x54,
0x83,0x40,0x53,0x43,0x40,0x4d,0xe3,0x20,0x00,0x42,0xf6,0x7c,0x50,0xf6,0x9a,0x44,
0xf6,0x9b,0x46,0xf6,0x46,0x4c,0xf6,0x40,0x43,0xf6,0x3a,0x54,0xd6,0x34,0x4e,0x90,
0xe8,0x53,0x56,0x60,0x00,0xa9,0x3f,0xa0,0x07,0xd0,0x10,0xa9,0xcf,0xa0,0x05,0xd0,
0x0a,0xa9,0xf3,0xa0,0x03,0xd0,0x04,0xa9,0xfc,0xa0,0x01,0x3d,0xb8,0x03,0x85,0x2a,
0xbd,0x38,0x04,0x29,0x03,0x18,0x6a,0x2a,0x88,0xd0,0xfc,0x05,0x2a,0x9d,0xb8,0x03,
0x60,0x29,0x07,0x0a,0x0a,0x0a,0x85,0x2a,0x0a,0xc5,0x26,0xf0,0x0f,0xbd,0xb8,0x04,
0x29,0xc7,0x05,0x2a,0x9d,0xb8,0x04,0xa9,0x00,0x9d,0x38,0x06,0x60,0x29,0x0f,0xd0,
0x07,0xb9,0x81,0xc0,0x4a,0x4a,0x4a,0x4a,0x09,0x10,0x85,0x2a,0xa9,0xe0,0x85,0x2b,
0xb9,0x8b,0xc0,0x25,0x2b,0x05,0x2a,0x99,0x8b,0xc0,0x60,0x88,0x0a,0x0a,0x0a,0x0a,
0x0a,0x85,0x2a,0xa9,0x1f,0xd0,0xe7,0x1e,0xb8,0x04,0x38,0xb0,0x10,0x99,0x89,0xc0,
0x20,0x93,0xfe,0x20,0x89,0xfe,0xae,0xf8,0x07,0x1e,0xb8,0x04,0x18,0x7e,0xb8,0x04,
0x60,0xb9,0x8a,0xc0,0x48,0x09,0x0c,0x99,0x8a,0xc0,0xa9,0xe9,0x20,0xc4,0xca,0x68,
0x99,0x8a,0xc0,0x60,0xa9,0x28,0x9d,0x38,0x06,0xa9,0x80,0x1d,0x38,0x07,0xd0,0x05,
0xa9,0xfe,0x3d,0x38,0x07,0x9d,0x38,0x07,0x60,0xc9,0x28,0x90,0x0e,0x9d,0x38,0x06,
0xa9,0x3f,0xd0,0xee,0x1e,0x38,0x05,0x38,0x7e,0x38,0x05,0x60,0xa8,0xa5,0x27,0x29,
0x7f,0xc9,0x20,0xd0,0x09,0xc0,0x03,0xf0,0x01,0x60,0xa9,0x04,0xd0,0x6d,0xc9,0x0d,
0xd0,0x12,0x20,0x79,0xce,0xc0,0x07,0xf0,0x01,0x60,0xa9,0xcd,0x48,0xbd,0x38,0x04,
0x48,0xa4,0x26,0x60,0x85,0x35,0xa9,0xce,0x48,0xb9,0x30,0xce,0x48,0xa5,0x35,0x60,
0xa7,0x37,0x61,0x89,0x8a,0xa7,0x89,0x89,0xdd,0x38,0x05,0xd0,0x06,0xde,0xb8,0x04,
0x4c,0x02,0xcc,0xc9,0x30,0x90,0x0d,0xc9,0x3a,0xb0,0x09,0x29,0x0f,0x9d,0x38,0x04,
0xa9,0x02,0xd0,0x27,0xc9,0x20,0xb0,0x06,0x9d,0x38,0x05,0x4c,0x79,0xce,0xa0,0x00,
0xf0,0x4d,0x49,0x30,0xc9,0x0a,0xb0,0x0d,0xa0,0x0a,0x7d,0x38,0x04,0x88,0xd0,0xfa,
0x9d,0x38,0x04,0xf0,0x15,0xa0,0x2e,0xd0,0x36,0xa9,0x00,0x85,0x2a,0xae,0xf8,0x07,
0xbd,0xb8,0x04,0x29,0xf8,0x05,0x2a,0x9d,0xb8,0x04,0x60,0xa8,0xbd,0x38,0x04,0xc0,
0x44,0xf0,0x09,0xc0,0x45,0xd0,0x11,0x1d,0x38,0x07,0xd0,0x05,0x49,0xff,0x3d,0x38,
0x07,0x9d,0x38,0x07,0xa9,0x06,0xd0,0xd3,0xa9,0x20,0x9d,0xb8,0x05,0xd0,0xf5,0xb9,
0xeb,0xcc,0xf0,0xf4,0xc5,0x35,0xf0,0x05,0xc8,0xc8,0xc8,0xd0,0xf2,0xc8,0xb9,0xeb,
0xcc,0x85,0x2a,0x29,0x20,0xd0,0x07,0xbd,0x38,0x07,0x29,0x10,0xd0,0xeb,0xbd,0x38,
0x07,0x4a,0x4a,0x24,0x2a,0xb0,0x04,0x10,0xe0,0x30,0x02,0x50,0xdc,0xa5,0x2a,0x48,
0x29,0x07,0x20,0x7b,0xce,0xc8,0x68,0x29,0x10,0xd0,0x07,0xb9,0xeb,0xcc,0x9d,0x38,
0x04,0x60,0xa9,0xcd,0x48,0xb9,0xeb,0xcc,0x48,0xa4,0x26,0xbd,0x38,0x04,0x60,0xc2,
0x2c,0x58,0xff,0x70,0x0c,0x38,0x90,0x18,0xb8,0x50,0x06,0x01,0x31,0x8e,0x94,0x97,
0x9a,0x85,0x27,0x86,0x35,0x8a,0x48,0x98,0x48,0x08,0x78,0x8d,0xff,0xcf,0x20,0x58,
0xff,0xba,0xbd,0x00,0x01,0x8d,0xf8,0x07,0xaa,0x0a,0x0a,0x0a,0x0a,0x85,0x26,0xa8,
0x28,0x50,0x29,0x1e,0x38,0x05,0x5e,0x38,0x05,0xb9,0x8a,0xc0,0x29,0x1f,0xd0,0x05,
0xa9,0xef,0x20,0x05,0xc8,0xe4,0x37,0xd0,0x0b,0xa9,0x07,0xc5,0x36,0xf0,0x05,0x85,
0x36,0x18,0x90,0x08,0xe4,0x39,0xd0,0xf9,0xa9,0x05,0x85,0x38,0xbd,0x38,0x07,0x29,
0x02,0x08,0x90,0x03,0x4c,0xbf,0xc8,0xbd,0xb8,0x04,0x48,0x0a,0x10,0x0e,0xa6,0x35,
0xa5,0x27,0x09,0x20,0x9d,0x00,0x02,0x85,0x27,0xae,0xf8,0x07,0x68,0x29,0xbf,0x9d,
0xb8,0x04,0x28,0xf0,0x06,0x20,0x63,0xcb,0x4c,0xb5,0xc8,0x4c,0xfc,0xc8,0x20,0x00,
0xc8,0xa2,0x00,0x60,0x4c,0x9b,0xc8,0x4c,0xaa,0xc9,0x4a,0x20,0x9b,0xc9,0xb0,0x08,
0x20,0xf5,0xca,0xf0,0x06,0x18,0x90,0x03,0x20,0xd2,0xca,0xbd,0xb8,0x05,0xaa,0x60,
0xa2,0x03,0xb5,0x36,0x48,0xca,0x10,0xfa,0xae,0xf8,0x07,0xbd,0x38,0x06,0x85,0x36,
0xbd,0xb8,0x04,0x29,0x38,0x4a,0x4a,0x4a,0x09,0xc0,0x85,0x37,0x8a,0x48,0xa5,0x27,
0x48,0x09,0x80,0x20,0xed,0xfd,0x68,0x85,0x27,0x68,0x8d,0xf8,0x07,0xaa,0x0a,0x0a,
0x0a,0x0a,0x85,0x26,0x8d,0xff,0xcf,0xa5,0x36,0x9d,0x38,0x06,0xa2,0x00,0x68,0x95,
0x36,0xe8,0xe0,0x04,0x90,0xf8,0xae,0xf8,0x07,0x60,0xc1,0xd0,0xd0,0xcc,0xc5,0x08,
};
static mii_rom_t ssc_rom = {
.name = "ssc",
.class = "ssc",
.description = "Super Serial Card ROM",
.rom = mii_rom_ssc,
.len = 2048,
};
MII_ROM(ssc_rom);

View File

@ -1,175 +0,0 @@
#pragma once
static const unsigned char mii_rom_ssc[] = {
0x20, 0x9b, 0xc9, 0xa9, 0x16, 0x48, 0xa9, 0x00, 0x9d, 0xb8, 0x04, 0x9d,
0xb8, 0x03, 0x9d, 0x38, 0x04, 0x9d, 0xb8, 0x05, 0x9d, 0x38, 0x06, 0x9d,
0xb8, 0x06, 0xb9, 0x82, 0xc0, 0x85, 0x2b, 0x4a, 0x4a, 0x90, 0x04, 0x68,
0x29, 0xfe, 0x48, 0xb8, 0xb9, 0x81, 0xc0, 0x4a, 0xb0, 0x07, 0x4a, 0xb0,
0x0e, 0xa9, 0x01, 0xd0, 0x3d, 0x4a, 0xa9, 0x03, 0xb0, 0x02, 0xa9, 0x80,
0x9d, 0xb8, 0x04, 0x2c, 0x58, 0xff, 0xa5, 0x2b, 0x29, 0x20, 0x49, 0x20,
0x9d, 0xb8, 0x03, 0x70, 0x0a, 0x20, 0x9b, 0xc8, 0xae, 0xf8, 0x07, 0x9d,
0xb8, 0x05, 0x60, 0xa5, 0x2b, 0x4a, 0x4a, 0x29, 0x03, 0xa8, 0xf0, 0x04,
0x68, 0x29, 0x7f, 0x48, 0xb9, 0xa6, 0xc9, 0x9d, 0x38, 0x06, 0xa4, 0x26,
0x68, 0x29, 0x95, 0x48, 0xa9, 0x09, 0x9d, 0x38, 0x05, 0x68, 0x9d, 0x38,
0x07, 0xa5, 0x2b, 0x48, 0x29, 0xa0, 0x50, 0x02, 0x29, 0x80, 0x20, 0xa1,
0xcd, 0x20, 0x81, 0xcd, 0x68, 0x29, 0x0c, 0x50, 0x02, 0xa9, 0x00, 0x0a,
0x0a, 0x0a, 0x09, 0x0b, 0x99, 0x8a, 0xc0, 0xb9, 0x88, 0xc0, 0x60, 0x20,
0x9b, 0xc9, 0x20, 0xaa, 0xc8, 0x29, 0x7f, 0xac, 0xf8, 0x07, 0xbe, 0xb8,
0x05, 0x60, 0x20, 0xff, 0xca, 0xb0, 0x05, 0x20, 0x2c, 0xcc, 0x90, 0xf6,
0x60, 0x20, 0x1e, 0xca, 0x68, 0xa8, 0x68, 0xaa, 0xa5, 0x27, 0x60, 0xf0,
0x29, 0xbd, 0xb8, 0x06, 0x10, 0x05, 0x5e, 0xb8, 0x06, 0xd0, 0x24, 0x20,
0x3e, 0xcc, 0x90, 0x1a, 0xbd, 0xb8, 0x03, 0x29, 0xc0, 0xf0, 0x0e, 0xa5,
0x27, 0xc9, 0xe0, 0x90, 0x08, 0xbd, 0xb8, 0x04, 0x09, 0x40, 0x9d, 0xb8,
0x04, 0x28, 0xf0, 0xd0, 0xd0, 0xcb, 0x20, 0xff, 0xca, 0x90, 0xdc, 0x20,
0x11, 0xcc, 0x28, 0x08, 0xf0, 0xda, 0x20, 0xd1, 0xc9, 0x4c, 0xd0, 0xc8,
0x20, 0x1a, 0xcb, 0xb0, 0xb7, 0xa5, 0x27, 0x48, 0xbd, 0x38, 0x07, 0x29,
0xc0, 0xd0, 0x16, 0xa5, 0x24, 0xf0, 0x42, 0xc9, 0x08, 0xf0, 0x04, 0xc9,
0x10, 0xd0, 0x0a, 0x09, 0xf0, 0x3d, 0xb8, 0x06, 0x18, 0x65, 0x24, 0x85,
0x24, 0xbd, 0xb8, 0x06, 0xc5, 0x24, 0xf0, 0x29, 0xa9, 0xa0, 0x90, 0x08,
0xbd, 0x38, 0x07, 0x0a, 0x10, 0x1f, 0xa9, 0x88, 0x85, 0x27, 0x2c, 0x58,
0xff, 0x08, 0x70, 0x0c, 0xea, 0x2c, 0x58, 0xff, 0x50, 0xb8, 0xae, 0xf8,
0x07, 0x4c, 0xef, 0xc9, 0x20, 0xb5, 0xc9, 0x20, 0x6b, 0xcb, 0x4c, 0x68,
0xc9, 0x68, 0xb8, 0x08, 0x85, 0x27, 0x48, 0x20, 0x68, 0xcb, 0x20, 0xb5,
0xc9, 0x68, 0x49, 0x8d, 0x0a, 0xd0, 0x05, 0x9d, 0xb8, 0x06, 0x85, 0x24,
0xbd, 0xb8, 0x04, 0x10, 0x0d, 0xbd, 0x38, 0x06, 0xf0, 0x08, 0x18, 0xfd,
0xb8, 0x06, 0xa9, 0x8d, 0x90, 0xda, 0x28, 0x70, 0xa4, 0xbd, 0x38, 0x07,
0x30, 0x16, 0xbc, 0xb8, 0x06, 0x0a, 0x30, 0x0e, 0x98, 0xa0, 0x00, 0x38,
0xfd, 0x38, 0x06, 0xc9, 0xf8, 0x90, 0x03, 0x69, 0x27, 0xa8, 0x84, 0x24,
0x4c, 0xb8, 0xc8, 0x8e, 0xf8, 0x07, 0x84, 0x26, 0xa9, 0x00, 0x9d, 0xb8,
0x05, 0x60, 0x29, 0x48, 0x50, 0x84, 0x85, 0x27, 0x20, 0x9b, 0xc9, 0x20,
0x63, 0xcb, 0x4c, 0xa3, 0xc8, 0xa5, 0x27, 0x49, 0x08, 0x0a, 0xf0, 0x04,
0x49, 0xee, 0xd0, 0x09, 0xde, 0xb8, 0x06, 0x10, 0x03, 0x9d, 0xb8, 0x06,
0x60, 0xc9, 0xc0, 0xb0, 0xfb, 0xfe, 0xb8, 0x06, 0x60, 0xbd, 0x38, 0x07,
0x29, 0x08, 0xf0, 0x16, 0xbd, 0xb8, 0x04, 0xa4, 0x27, 0xc0, 0x94, 0xd0,
0x04, 0x09, 0x80, 0xd0, 0x06, 0xc0, 0x92, 0xd0, 0x05, 0x29, 0x7f, 0x9d,
0xb8, 0x04, 0x60, 0x8a, 0x0a, 0x0a, 0x0a, 0x0a, 0x85, 0x26, 0xa9, 0x00,
0x9d, 0xb8, 0x05, 0x70, 0x0f, 0xa0, 0x00, 0xb1, 0x3c, 0x85, 0x27, 0x20,
0x02, 0xcc, 0x20, 0xba, 0xfc, 0x90, 0xf2, 0x60, 0x20, 0xd2, 0xca, 0x90,
0xfb, 0xb9, 0x88, 0xc0, 0xa0, 0x00, 0x91, 0x3c, 0x20, 0xba, 0xfc, 0x90,
0xef, 0x60, 0xbd, 0xb8, 0x04, 0x10, 0x31, 0xa9, 0x02, 0x48, 0xa9, 0x7f,
0x20, 0xe2, 0xcd, 0xa4, 0x24, 0xb1, 0x28, 0x85, 0x27, 0xa9, 0x07, 0x25,
0x4f, 0xd0, 0x10, 0xa4, 0x24, 0xa9, 0xdf, 0xd1, 0x28, 0xd0, 0x02, 0xa5,
0x27, 0x91, 0x28, 0xe6, 0x4f, 0xe6, 0x4f, 0xbd, 0xb8, 0x04, 0x30, 0x09,
0x20, 0x11, 0xcc, 0x68, 0xa9, 0x8d, 0x85, 0x27, 0x60, 0x20, 0xff, 0xca,
0x90, 0x0c, 0x20, 0x11, 0xcc, 0x20, 0xd1, 0xc9, 0x20, 0xa3, 0xcc, 0x4c,
0x2b, 0xca, 0x20, 0x3e, 0xcc, 0x90, 0xc6, 0x70, 0xbe, 0xbd, 0x38, 0x07,
0x0a, 0x10, 0x22, 0x68, 0xa8, 0xa5, 0x27, 0xc0, 0x01, 0xf0, 0x20, 0xb0,
0x34, 0xc9, 0x9b, 0xd0, 0x06, 0xc8, 0x98, 0x48, 0x4c, 0x2b, 0xca, 0xc9,
0xc1, 0x90, 0x08, 0xc9, 0xdb, 0xb0, 0x04, 0x09, 0x20, 0x85, 0x27, 0x98,
0x48, 0x20, 0x68, 0xcb, 0x4c, 0x2b, 0xca, 0xc9, 0x9b, 0xf0, 0xe2, 0xc9,
0xb0, 0x90, 0x0a, 0xc9, 0xbb, 0xb0, 0x06, 0xa8, 0xb9, 0x09, 0xca, 0x85,
0x27, 0xa0, 0x00, 0xf0, 0xe2, 0xc9, 0x9b, 0xd0, 0xde, 0xa0, 0x00, 0xf0,
0xc9, 0x9b, 0x9c, 0x9f, 0xdb, 0xdc, 0xdf, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0xa2, 0xca, 0xca, 0xd0, 0xfd, 0x38, 0xe9, 0x01, 0xd0, 0xf6, 0xae, 0xf8,
0x07, 0x60, 0xa4, 0x26, 0xb9, 0x89, 0xc0, 0x48, 0x29, 0x20, 0x4a, 0x4a,
0x85, 0x35, 0x68, 0x29, 0x0f, 0xc9, 0x08, 0x90, 0x04, 0x29, 0x07, 0xb0,
0x02, 0xa5, 0x35, 0x05, 0x35, 0xf0, 0x05, 0x09, 0x20, 0x9d, 0xb8, 0x05,
0x60, 0xa4, 0x26, 0xb9, 0x89, 0xc0, 0x29, 0x70, 0xc9, 0x10, 0x60, 0x20,
0xd2, 0xca, 0x90, 0x15, 0xb9, 0x88, 0xc0, 0x09, 0x80, 0xc9, 0x8a, 0xd0,
0x09, 0xa8, 0xbd, 0x38, 0x07, 0x29, 0x20, 0xd0, 0x03, 0x98, 0x38, 0x60,
0x18, 0x60, 0xa4, 0x26, 0xb9, 0x81, 0xc0, 0x4a, 0xb0, 0x36, 0xbd, 0xb8,
0x04, 0x29, 0x07, 0xf0, 0x05, 0x20, 0xfc, 0xcd, 0x38, 0x60, 0xa5, 0x27,
0x29, 0x7f, 0xdd, 0x38, 0x05, 0xd0, 0x05, 0xfe, 0xb8, 0x04, 0x38, 0x60,
0xbd, 0x38, 0x07, 0x29, 0x08, 0xf0, 0x15, 0x20, 0xff, 0xca, 0x90, 0x10,
0xc9, 0x93, 0xf0, 0x0e, 0x48, 0xbd, 0x38, 0x07, 0x4a, 0x4a, 0x68, 0x90,
0x04, 0x9d, 0xb8, 0x06, 0x18, 0x60, 0x20, 0xaa, 0xc8, 0xc9, 0x91, 0xd0,
0xf9, 0x18, 0x60, 0x20, 0x1a, 0xcb, 0xb0, 0xf1, 0x20, 0x9e, 0xcc, 0xa4,
0x26, 0xb9, 0x81, 0xc0, 0x4a, 0x90, 0x4e, 0x4a, 0x90, 0x4b, 0xa5, 0x27,
0x48, 0xbd, 0x38, 0x04, 0xc9, 0x67, 0x90, 0x10, 0xc9, 0x6c, 0xb0, 0x22,
0xc9, 0x6b, 0x68, 0x48, 0x49, 0x9b, 0x29, 0x7f, 0xd0, 0x18, 0xb0, 0x19,
0xbd, 0xb8, 0x04, 0x29, 0x1f, 0x09, 0x80, 0x85, 0x27, 0x20, 0x02, 0xcc,
0x20, 0xaa, 0xc8, 0x49, 0x86, 0xd0, 0xed, 0x9d, 0x38, 0x04, 0xde, 0x38,
0x04, 0x68, 0x85, 0x27, 0x49, 0x8d, 0x0a, 0xd0, 0x0a, 0xbd, 0xb8, 0x03,
0x29, 0x30, 0xf0, 0x03, 0x9d, 0x38, 0x04, 0x20, 0x02, 0xcc, 0x4c, 0xea,
0xcb, 0x20, 0x02, 0xcc, 0x0a, 0xa8, 0xbd, 0xb8, 0x03, 0xc0, 0x18, 0xf0,
0x0c, 0x4a, 0x4a, 0xc0, 0x14, 0xf0, 0x06, 0x4a, 0x4a, 0xc0, 0x1a, 0xd0,
0x25, 0x29, 0x03, 0xf0, 0x0d, 0xa8, 0xb9, 0xfe, 0xcb, 0xa8, 0xa9, 0x20,
0x20, 0xc4, 0xca, 0x88, 0xd0, 0xf8, 0xa5, 0x27, 0x0a, 0xc9, 0x1a, 0xd0,
0x0d, 0xbd, 0x38, 0x07, 0x6a, 0x90, 0x07, 0xa9, 0x8a, 0x85, 0x27, 0x4c,
0x6b, 0xcb, 0x60, 0x01, 0x08, 0x40, 0x20, 0xf5, 0xca, 0xd0, 0xfb, 0x98,
0x09, 0x89, 0xa8, 0xa5, 0x27, 0x99, 0xff, 0xbf, 0x60, 0x48, 0xa4, 0x24,
0xa5, 0x27, 0x91, 0x28, 0x68, 0xc9, 0x95, 0xd0, 0x0c, 0xa5, 0x27, 0xc9,
0x20, 0xb0, 0x06, 0x20, 0xdf, 0xcc, 0x59, 0xdb, 0xcc, 0x85, 0x27, 0x60,
0x18, 0xbd, 0x38, 0x07, 0x29, 0x04, 0xf0, 0x09, 0xad, 0x00, 0xc0, 0x10,
0x04, 0x8d, 0x10, 0xc0, 0x38, 0x60, 0xe6, 0x4e, 0xd0, 0x02, 0xe6, 0x4f,
0x20, 0x2c, 0xcc, 0xb8, 0x90, 0xf3, 0x20, 0x11, 0xcc, 0x29, 0x7f, 0xdd,
0x38, 0x05, 0xd0, 0x3d, 0xa4, 0x26, 0xb9, 0x81, 0xc0, 0x4a, 0xb0, 0x35,
0xa0, 0x0a, 0xb9, 0x93, 0xcc, 0x85, 0x27, 0x98, 0x48, 0x20, 0xa3, 0xcc,
0x68, 0xa8, 0x88, 0x10, 0xf1, 0xa9, 0x01, 0x20, 0x7b, 0xce, 0x20, 0x34,
0xcc, 0x10, 0xfb, 0xc9, 0x88, 0xf0, 0xe1, 0x85, 0x27, 0x20, 0xa3, 0xcc,
0x20, 0x1a, 0xcb, 0xbd, 0xb8, 0x04, 0x29, 0x07, 0xd0, 0xe8, 0xa9, 0x8d,
0x85, 0x27, 0x2c, 0x58, 0xff, 0x38, 0x60, 0xba, 0xc3, 0xd3, 0xd3, 0xa0,
0xc5, 0xcc, 0xd0, 0xd0, 0xc1, 0x8d, 0xbd, 0x38, 0x07, 0x10, 0x13, 0xbd,
0x38, 0x07, 0x29, 0x02, 0xf0, 0x0d, 0xbd, 0xb8, 0x04, 0x29, 0x38, 0xf0,
0x06, 0x8a, 0x48, 0xa9, 0xaf, 0x48, 0x60, 0x20, 0xdf, 0xcc, 0x09, 0x80,
0xc9, 0xe0, 0x90, 0x06, 0x59, 0xd3, 0xcc, 0x4c, 0xf6, 0xfd, 0xc9, 0xc1,
0x90, 0xf9, 0xc9, 0xdb, 0xb0, 0xf5, 0x59, 0xd7, 0xcc, 0x90, 0xf0, 0x20,
0x00, 0xe0, 0x20, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0xc0, 0xbd,
0xb8, 0x03, 0x2a, 0x2a, 0x2a, 0x29, 0x03, 0xa8, 0xa5, 0x27, 0x60, 0x42,
0x67, 0xc0, 0x54, 0x47, 0xa6, 0x43, 0x87, 0xa6, 0x51, 0x47, 0xb8, 0x52,
0xc7, 0xac, 0x5a, 0xe7, 0xf3, 0x49, 0x90, 0xd3, 0x4b, 0x90, 0xdf, 0x45,
0x43, 0x80, 0x46, 0xe3, 0x04, 0x4c, 0xe3, 0x01, 0x58, 0xe3, 0x08, 0x54,
0x83, 0x40, 0x53, 0x43, 0x40, 0x4d, 0xe3, 0x20, 0x00, 0x42, 0xf6, 0x7c,
0x50, 0xf6, 0x9a, 0x44, 0xf6, 0x9b, 0x46, 0xf6, 0x46, 0x4c, 0xf6, 0x40,
0x43, 0xf6, 0x3a, 0x54, 0xd6, 0x34, 0x4e, 0x90, 0xe8, 0x53, 0x56, 0x60,
0x00, 0xa9, 0x3f, 0xa0, 0x07, 0xd0, 0x10, 0xa9, 0xcf, 0xa0, 0x05, 0xd0,
0x0a, 0xa9, 0xf3, 0xa0, 0x03, 0xd0, 0x04, 0xa9, 0xfc, 0xa0, 0x01, 0x3d,
0xb8, 0x03, 0x85, 0x2a, 0xbd, 0x38, 0x04, 0x29, 0x03, 0x18, 0x6a, 0x2a,
0x88, 0xd0, 0xfc, 0x05, 0x2a, 0x9d, 0xb8, 0x03, 0x60, 0x29, 0x07, 0x0a,
0x0a, 0x0a, 0x85, 0x2a, 0x0a, 0xc5, 0x26, 0xf0, 0x0f, 0xbd, 0xb8, 0x04,
0x29, 0xc7, 0x05, 0x2a, 0x9d, 0xb8, 0x04, 0xa9, 0x00, 0x9d, 0x38, 0x06,
0x60, 0x29, 0x0f, 0xd0, 0x07, 0xb9, 0x81, 0xc0, 0x4a, 0x4a, 0x4a, 0x4a,
0x09, 0x10, 0x85, 0x2a, 0xa9, 0xe0, 0x85, 0x2b, 0xb9, 0x8b, 0xc0, 0x25,
0x2b, 0x05, 0x2a, 0x99, 0x8b, 0xc0, 0x60, 0x88, 0x0a, 0x0a, 0x0a, 0x0a,
0x0a, 0x85, 0x2a, 0xa9, 0x1f, 0xd0, 0xe7, 0x1e, 0xb8, 0x04, 0x38, 0xb0,
0x10, 0x99, 0x89, 0xc0, 0x20, 0x93, 0xfe, 0x20, 0x89, 0xfe, 0xae, 0xf8,
0x07, 0x1e, 0xb8, 0x04, 0x18, 0x7e, 0xb8, 0x04, 0x60, 0xb9, 0x8a, 0xc0,
0x48, 0x09, 0x0c, 0x99, 0x8a, 0xc0, 0xa9, 0xe9, 0x20, 0xc4, 0xca, 0x68,
0x99, 0x8a, 0xc0, 0x60, 0xa9, 0x28, 0x9d, 0x38, 0x06, 0xa9, 0x80, 0x1d,
0x38, 0x07, 0xd0, 0x05, 0xa9, 0xfe, 0x3d, 0x38, 0x07, 0x9d, 0x38, 0x07,
0x60, 0xc9, 0x28, 0x90, 0x0e, 0x9d, 0x38, 0x06, 0xa9, 0x3f, 0xd0, 0xee,
0x1e, 0x38, 0x05, 0x38, 0x7e, 0x38, 0x05, 0x60, 0xa8, 0xa5, 0x27, 0x29,
0x7f, 0xc9, 0x20, 0xd0, 0x09, 0xc0, 0x03, 0xf0, 0x01, 0x60, 0xa9, 0x04,
0xd0, 0x6d, 0xc9, 0x0d, 0xd0, 0x12, 0x20, 0x79, 0xce, 0xc0, 0x07, 0xf0,
0x01, 0x60, 0xa9, 0xcd, 0x48, 0xbd, 0x38, 0x04, 0x48, 0xa4, 0x26, 0x60,
0x85, 0x35, 0xa9, 0xce, 0x48, 0xb9, 0x30, 0xce, 0x48, 0xa5, 0x35, 0x60,
0xa7, 0x37, 0x61, 0x89, 0x8a, 0xa7, 0x89, 0x89, 0xdd, 0x38, 0x05, 0xd0,
0x06, 0xde, 0xb8, 0x04, 0x4c, 0x02, 0xcc, 0xc9, 0x30, 0x90, 0x0d, 0xc9,
0x3a, 0xb0, 0x09, 0x29, 0x0f, 0x9d, 0x38, 0x04, 0xa9, 0x02, 0xd0, 0x27,
0xc9, 0x20, 0xb0, 0x06, 0x9d, 0x38, 0x05, 0x4c, 0x79, 0xce, 0xa0, 0x00,
0xf0, 0x4d, 0x49, 0x30, 0xc9, 0x0a, 0xb0, 0x0d, 0xa0, 0x0a, 0x7d, 0x38,
0x04, 0x88, 0xd0, 0xfa, 0x9d, 0x38, 0x04, 0xf0, 0x15, 0xa0, 0x2e, 0xd0,
0x36, 0xa9, 0x00, 0x85, 0x2a, 0xae, 0xf8, 0x07, 0xbd, 0xb8, 0x04, 0x29,
0xf8, 0x05, 0x2a, 0x9d, 0xb8, 0x04, 0x60, 0xa8, 0xbd, 0x38, 0x04, 0xc0,
0x44, 0xf0, 0x09, 0xc0, 0x45, 0xd0, 0x11, 0x1d, 0x38, 0x07, 0xd0, 0x05,
0x49, 0xff, 0x3d, 0x38, 0x07, 0x9d, 0x38, 0x07, 0xa9, 0x06, 0xd0, 0xd3,
0xa9, 0x20, 0x9d, 0xb8, 0x05, 0xd0, 0xf5, 0xb9, 0xeb, 0xcc, 0xf0, 0xf4,
0xc5, 0x35, 0xf0, 0x05, 0xc8, 0xc8, 0xc8, 0xd0, 0xf2, 0xc8, 0xb9, 0xeb,
0xcc, 0x85, 0x2a, 0x29, 0x20, 0xd0, 0x07, 0xbd, 0x38, 0x07, 0x29, 0x10,
0xd0, 0xeb, 0xbd, 0x38, 0x07, 0x4a, 0x4a, 0x24, 0x2a, 0xb0, 0x04, 0x10,
0xe0, 0x30, 0x02, 0x50, 0xdc, 0xa5, 0x2a, 0x48, 0x29, 0x07, 0x20, 0x7b,
0xce, 0xc8, 0x68, 0x29, 0x10, 0xd0, 0x07, 0xb9, 0xeb, 0xcc, 0x9d, 0x38,
0x04, 0x60, 0xa9, 0xcd, 0x48, 0xb9, 0xeb, 0xcc, 0x48, 0xa4, 0x26, 0xbd,
0x38, 0x04, 0x60, 0xc2, 0x2c, 0x58, 0xff, 0x70, 0x0c, 0x38, 0x90, 0x18,
0xb8, 0x50, 0x06, 0x01, 0x31, 0x8e, 0x94, 0x97, 0x9a, 0x85, 0x27, 0x86,
0x35, 0x8a, 0x48, 0x98, 0x48, 0x08, 0x78, 0x8d, 0xff, 0xcf, 0x20, 0x58,
0xff, 0xba, 0xbd, 0x00, 0x01, 0x8d, 0xf8, 0x07, 0xaa, 0x0a, 0x0a, 0x0a,
0x0a, 0x85, 0x26, 0xa8, 0x28, 0x50, 0x29, 0x1e, 0x38, 0x05, 0x5e, 0x38,
0x05, 0xb9, 0x8a, 0xc0, 0x29, 0x1f, 0xd0, 0x05, 0xa9, 0xef, 0x20, 0x05,
0xc8, 0xe4, 0x37, 0xd0, 0x0b, 0xa9, 0x07, 0xc5, 0x36, 0xf0, 0x05, 0x85,
0x36, 0x18, 0x90, 0x08, 0xe4, 0x39, 0xd0, 0xf9, 0xa9, 0x05, 0x85, 0x38,
0xbd, 0x38, 0x07, 0x29, 0x02, 0x08, 0x90, 0x03, 0x4c, 0xbf, 0xc8, 0xbd,
0xb8, 0x04, 0x48, 0x0a, 0x10, 0x0e, 0xa6, 0x35, 0xa5, 0x27, 0x09, 0x20,
0x9d, 0x00, 0x02, 0x85, 0x27, 0xae, 0xf8, 0x07, 0x68, 0x29, 0xbf, 0x9d,
0xb8, 0x04, 0x28, 0xf0, 0x06, 0x20, 0x63, 0xcb, 0x4c, 0xb5, 0xc8, 0x4c,
0xfc, 0xc8, 0x20, 0x00, 0xc8, 0xa2, 0x00, 0x60, 0x4c, 0x9b, 0xc8, 0x4c,
0xaa, 0xc9, 0x4a, 0x20, 0x9b, 0xc9, 0xb0, 0x08, 0x20, 0xf5, 0xca, 0xf0,
0x06, 0x18, 0x90, 0x03, 0x20, 0xd2, 0xca, 0xbd, 0xb8, 0x05, 0xaa, 0x60,
0xa2, 0x03, 0xb5, 0x36, 0x48, 0xca, 0x10, 0xfa, 0xae, 0xf8, 0x07, 0xbd,
0x38, 0x06, 0x85, 0x36, 0xbd, 0xb8, 0x04, 0x29, 0x38, 0x4a, 0x4a, 0x4a,
0x09, 0xc0, 0x85, 0x37, 0x8a, 0x48, 0xa5, 0x27, 0x48, 0x09, 0x80, 0x20,
0xed, 0xfd, 0x68, 0x85, 0x27, 0x68, 0x8d, 0xf8, 0x07, 0xaa, 0x0a, 0x0a,
0x0a, 0x0a, 0x85, 0x26, 0x8d, 0xff, 0xcf, 0xa5, 0x36, 0x9d, 0x38, 0x06,
0xa2, 0x00, 0x68, 0x95, 0x36, 0xe8, 0xe0, 0x04, 0x90, 0xf8, 0xae, 0xf8,
0x07, 0x60, 0xc1, 0xd0, 0xd0, 0xcc, 0xc5, 0x08
};
static const unsigned int mii_rom_ssc_len = 2048;

View File

@ -50,6 +50,8 @@ typedef struct mii_x11_t {
Display * dpy;
Window win;
Atom wmState;
Atom wmStateFullscreen;
Atom wm_delete_window;
int width, height;
GLXContext glContext;
@ -130,6 +132,40 @@ _mii_x11_convert_keycode(
return true;
}
static GLAPIENTRY void
debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity,
GLsizei length, const GLchar* message, const void* userParam) {
// Filter out notifications if theyre too verbose
if (severity == GL_DEBUG_SEVERITY_NOTIFICATION) return;
printf("OpenGL Debug Message:\n");
printf("Source: %s\n", source == GL_DEBUG_SOURCE_API ? "API" :
source == GL_DEBUG_SOURCE_WINDOW_SYSTEM ? "Window System" :
source == GL_DEBUG_SOURCE_SHADER_COMPILER ? "Shader Compiler" :
source == GL_DEBUG_SOURCE_THIRD_PARTY ? "Third Party" :
source == GL_DEBUG_SOURCE_APPLICATION ? "Application" :
source == GL_DEBUG_SOURCE_OTHER ? "Other" : "Unknown");
printf("Type: %s\n", type == GL_DEBUG_TYPE_ERROR ? "Error" :
type == GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR ? "Deprecated Behavior" :
type == GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR ? "Undefined Behavior" :
type == GL_DEBUG_TYPE_PORTABILITY ? "Portability" :
type == GL_DEBUG_TYPE_PERFORMANCE ? "Performance" :
type == GL_DEBUG_TYPE_MARKER ? "Marker" :
type == GL_DEBUG_TYPE_PUSH_GROUP ? "Push Group" :
type == GL_DEBUG_TYPE_POP_GROUP ? "Pop Group" :
type == GL_DEBUG_TYPE_OTHER ? "Other" : "Unknown");
printf("Severity: %s\n", severity == GL_DEBUG_SEVERITY_HIGH ? "High" :
severity == GL_DEBUG_SEVERITY_MEDIUM ? "Medium" :
severity == GL_DEBUG_SEVERITY_LOW ? "Low" :
severity == GL_DEBUG_SEVERITY_NOTIFICATION ? "Notification" : "Unknown");
printf("Message: %s\n", message);
printf("---------------------------------\n");
}
static int
mii_x11_init(
struct mii_x11_t *ui )
@ -249,6 +285,8 @@ mii_x11_init(
XMapWindow(ui->dpy, ui->win);
ui->wm_delete_window = XInternAtom(ui->dpy, "WM_DELETE_WINDOW", False);
XSetWMProtocols(ui->dpy, ui->win, &ui->wm_delete_window, 1);
ui->wmState = XInternAtom(ui->dpy, "_NET_WM_STATE", False);
ui->wmStateFullscreen = XInternAtom(ui->dpy, "_NET_WM_STATE_FULLSCREEN", False);
}
/* create invisible cursor */
{
@ -299,10 +337,21 @@ mii_x11_init(
die("[X11]: Failed to create an OpenGL context\n");
glXMakeCurrent(ui->dpy, ui->win, ui->glContext);
}
{
glEnable(GL_DEBUG_OUTPUT); // Enables the debug output
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); // Makes sure errors are handled immediately
typedef void (APIENTRY *PFNGLDEBUGMESSAGECALLBACKPROC)(
GLDEBUGPROC callback, const void *userParam);
PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback =
(PFNGLDEBUGMESSAGECALLBACKPROC)glXGetProcAddressARB(
(const GLubyte *)"glDebugMessageCallback");
glDebugMessageCallback(debug_callback, 0); // Register the callback function
}
return 0;
}
static void
mui_read_clipboard(
struct mui_t *mui)
@ -323,6 +372,27 @@ mui_read_clipboard(
pclose(f);
mui_utf8_free(&mui->clipboard);
mui->clipboard = clip;
printf("%s %d bytes\n", __func__, mui->clipboard.count);
}
void
mii_mui_toggle_fullscreen(
mii_mui_t * _ui )
{
mii_x11_t * ui = (mii_x11_t*)_ui;
XEvent xev = {};
xev.type = ClientMessage;
xev.xclient.window = ui->win;
xev.xclient.message_type = ui->wmState;
xev.xclient.format = 32;
xev.xclient.data.l[0] = 2; // _NET_WM_STATE_TOGGLE
xev.xclient.data.l[1] = ui->wmStateFullscreen;
xev.xclient.data.l[2] = 0; // No second property
xev.xclient.data.l[3] = 1; // Normal source indication
XSendEvent(ui->dpy, DefaultRootWindow(ui->dpy), False,
SubstructureNotifyMask | SubstructureRedirectMask, &xev);
XFlush(ui->dpy);
}
static int
@ -443,6 +513,11 @@ mii_x11_handle_event(
mui->clipboard.count = mui->clipboard.size = 0;
mii_th_fifo_write(mii_thread_get_fifo(mii), sig);
}
} else if (mii_key == 0x01b && /* Toggle full screen too! */
(mui->modifier_keys & MUI_MODIFIER_SHIFT) &&
(mui->modifier_keys & MUI_MODIFIER_CTRL)) {
mii_mui_toggle_fullscreen(&ui->video);
} else
mii_keypress(mii, mii_key);
}
@ -470,6 +545,13 @@ mii_x11_handle_event(
}
mii_mui_update_mouse_card(&ui->video);
} break;
case Button3: {
/* right click force the UI to reappear if it was hidden */
if (!ui->video.mui_visible &&
ui->video.transition.state == MII_MUI_TRANSITION_NONE) {
ui->video.transition.state = MII_MUI_TRANSITION_SHOW_UI;
}
} break;
case Button4:
case Button5: {
// printf("%s wheel %d %d\n", __func__,
@ -494,6 +576,10 @@ mii_x11_handle_event(
ui->video.window_size.x = evt->xconfigure.width;
ui->video.window_size.y = evt->xconfigure.height;
ui->video.video_frame = mii_mui_get_video_position(&ui->video);
mui_resize(&ui->video.mui, &ui->video.pixels.mui,
ui->video.window_size);
ui->video.pixels.mui.texture.size = ui->video.window_size;
mui_mui_gl_regenerate_ui_texture(&ui->video);
mii_mui_update_mouse_card(&ui->video);
}
break;
@ -605,6 +691,7 @@ _mii_ui_load_config(
if (config->titan_accelerator)
*ioFlags |= MII_INIT_TITAN;
mii->audio.muted = config->audio_muted;
mii_audio_volume(&mii->speaker.source, config->audio_volume);
mii->video.color_mode = config->video_mode;
mii_video_set_mode(mii, config->video_mode);
for (int i = 0; i < 7; i++) {
@ -661,6 +748,8 @@ mii_x11_reload_config(
mii_x11_t g_mii = {};
extern const mii_machine_config_t mii_default_config;
int
main(
int argc,
@ -673,10 +762,18 @@ main(
mii_x11_t * ui = &g_mii;
mii_t * mii = &g_mii.video.mii;
mui_t * mui = &g_mii.video.mui;
bool no_config_found = false;
// start with a default config, as some settings might not have been saved
ui->video.config = mii_default_config;
bool no_config_found = false;
char pwd[1024];
if (!getcwd(pwd, sizeof(pwd))) {
perror("getcwd");
exit(1);
}
if (mii_settings_load(
&ui->video.cf, getcwd(NULL,0), ".mii_emu_config") < 0 &&
&ui->video.cf, pwd, ".mii_emu_config") < 0 &&
mii_settings_load(
&ui->video.cf, conf_path, "mii_emu_gl") < 0) {
asprintf(&ui->video.cf.path, "%s/.local/share/mii/mii_emu_gl",
@ -738,6 +835,8 @@ main(
/* start the CPU/emulator thread */
ui->cpu_thread = mii_threads_start(mii);
if (g_startup_flags & MII_INIT_HIDE_UI)
ui->video.transition.state = MII_MUI_TRANSITION_HIDE_UI;
while (mii->state != MII_INIT) {
/* Input */
XEvent evt;
@ -771,6 +870,12 @@ main(
perror(__func__);
goto cleanup;
}
/* This delay the switch to full screen until the window was drawn */
if (mii->video.frame_count == 30) {
if (g_startup_flags & MII_INIT_FULLSCREEN) {
mii_mui_toggle_fullscreen(&ui->video);
}
}
#if 0
miigl_counter_tick(&ui->sleepc, miigl_get_time());
if (!(current_frame % 60))

View File

@ -15,7 +15,7 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mii_mui.h"
#include "minipt.h"
@ -35,6 +35,10 @@ c2_rect_interpolate(
return r;
}
/*
* This returns the position where the II video should be drawn, depending on
* the window size and the visibility of the MUI interface.
*/
c2_rect_t
mii_mui_get_video_position(
mii_mui_t * ui)
@ -56,6 +60,146 @@ mii_mui_get_video_position(
return r;
}
/*
* If the mesh is empty, create one. Then on future calls, just update the
* texture coordinates as it's width can change depending on which floppy is
* being drawn.
*/
void
mii_generate_floppy_mesh(
mii_mui_v_array_t * vtx,
float tex_width )
{
if (vtx->count == 0) {
const double astep = 2 * M_PI / MII_GL_FLOPPY_SEGMENT_COUNT; // Angle step for each blade
const double radius_out = MII_GL_FLOPPY_FLUX_RADIUS_OUT;
const double radius_in = MII_GL_FLOPPY_FLUX_RADIUS_IN;
for (int i = 0; i < MII_GL_FLOPPY_SEGMENT_COUNT; ++i) {
double a = i * astep, b = (i + 1) * astep;
// Outer vertex
double x_out = radius_out * cos(a);
double y_out = radius_out * sin(a);
double x_out2 = radius_out * cos(b);
double y_out2 = radius_out * sin(b);
// Inner vertex
double x_in = radius_in * cos(a);
double y_in = radius_in * sin(a);
double x_in2 = radius_in * cos(b);
double y_in2 = radius_in * sin(b);
// add two triangles winded in the right direction
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_out, .y = y_out,
});
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_in, .y = y_in,
});
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_out2, .y = y_out2,
});
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_in2, .y = y_in2,
});
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_out2, .y = y_out2,
});
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x_in, .y = y_in,
});
}
}
const double tex_y_in = 1;
const double tex_y_out = 0;
mii_mui_v_t * tex = vtx->e;
for (int i = 0; i < MII_GL_FLOPPY_SEGMENT_COUNT; ++i) {
tex->u = (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_out;
tex++;
tex->u = (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_in;
tex++;
tex->u = ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_out;
tex++;
tex->u = ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_in;
tex++;
tex->u = ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_out;
tex++;
tex->u = (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT;
tex->v = tex_y_in;
tex++;
}
}
/*
* This function takes the video frame size and calculate a vertice list and
* texture coordinates that will be used to draw the video frame.
*
* The base rectangle is made from video_frame, split into a grid , that are
* then distorted to simulate the barell effect of the CRT screen.
*/
void
mii_generate_screen_mesh(
mii_mui_t * ui )
{
mii_mui_v_array_t * vtx = &ui->video_mesh;
mii_mui_v_array_clear(vtx);
c2_rect_t r = C2_RECT(0, 0, MII_VIDEO_WIDTH, MII_VIDEO_HEIGHT);
const int x_steps = 32;
const int y_steps = 32;
const float width = c2_rect_width(&r), height = c2_rect_height(&r);
const float barell = 0.00000025;
// printf("Frame is %s w:%d h:%d\n", c2_rect_as_str(&r), (int)width, (int)height);
for (int j = 0; j <= y_steps; j++) {
float y1 = -(height / 2) + ((height / y_steps) * j);
float v = (float)j / y_steps;
for (int i = 0; i <= x_steps; i++) {
float x1 = -(width / 2) + ((width / x_steps) * i);
float u = (float)i / x_steps;
float r1 = sqrt(x1 * x1 + y1 * y1);
float r2 = 1.0 - barell * (r1 * r1);
float x2 = x1 * r2;
float y2 = y1 * r2;
float x3 = r.l + x2 + (width / 2);
float y3 = r.t + y2 + (height / 2);
#if 0
printf("%2dx%2d : x:%4.2f y:%4.2f x1:%4.2f y1:%4.2f\n"
"\tr1:%.2f r2:%.2f\n"
"\tx2:%4.2f y2:%4.2f\n"
"\tx3:%4.2f y3:%4.2f\n",
i, j, x, y, x1, y1, r1, r2, x2, y2, x3, y3);
#endif
mii_mui_v_array_push(vtx, (mii_mui_v_t){
.x = x3, .y = y3,
.u = u, .v = v
});
}
}
int_array_t * idx = &ui->video_indices;
int_array_clear(idx);
/* generate triangles vertice indexes */
for (int j = 0; j < y_steps; j++) {
for (int i = 0; i < x_steps ; i++) {
int tl = i + j * (x_steps + 1);
int tr = i + 1 + j * (x_steps + 1);
int bl = i + (j + 1) * (x_steps + 1);
int br = i + 1 + (j + 1) * (x_steps + 1);
int_array_push(idx, tl);
int_array_push(idx, bl);
int_array_push(idx, tr);
int_array_push(idx, tr);
int_array_push(idx, bl);
int_array_push(idx, br);
}
}
}
void
mii_mui_showhide_ui_machine(
mii_mui_t * ui )
@ -161,7 +305,7 @@ mii_mui_init(
{
mui_drawable_t * dr = &ui->pixels.mui;
// annoyingly I have to make it a LOT bigger to handle that the
// non-power-of-2 texture extension is not avialable everywhere
// non-power-of-2 texture extension is not available everywhere
// textures, which is a bit of a waste of memory, but oh well.
#if MII_MUI_GL_POW2
int padded_x = 1;
@ -176,13 +320,13 @@ mii_mui_init(
#endif
mui_drawable_init(dr, C2_PT(padded_x, padded_y), 32, NULL, 0);
dr->texture.size = C2_PT(padded_x, padded_y);
printf("MUI Padded UI size is %dx%d\n", padded_x, padded_y);
ui->mui.screen_size = dr->pix.size;
ui->window_size = window_size;
ui->mui_alpha = 1.0f;
ui->mui_visible = true;
ui->video_frame = mii_mui_get_video_position(ui);
mii_generate_screen_mesh(ui);
mui_t * mui = &ui->mui;
mui_init(mui);
@ -191,3 +335,4 @@ mii_mui_init(
// Tell libmui to clear the background with transparency.
mui->color.clear.value = 0;
}

View File

@ -30,14 +30,17 @@ enum mii_mui_transition_e {
#define MII_PIXEL_LAYERS 9
DECLARE_C_ARRAY(float, float_array, 16);
IMPLEMENT_C_ARRAY(float_array);
typedef struct mii_mui_v_t {
float x, y, u, v;
} mii_mui_v_t;
DECLARE_C_ARRAY(mii_mui_v_t, mii_mui_v_array, 16,
unsigned int vao, vbo, kind;);
IMPLEMENT_C_ARRAY(mii_mui_v_array);
DECLARE_C_ARRAY(int, int_array, 16, unsigned int ebo;);
IMPLEMENT_C_ARRAY(int_array);
typedef struct mii_vtx_t {
unsigned int kind; // TRIANGLES, QUADS, etc
float_array_t pos;
float_array_t tex;
} mii_vtx_t;
typedef struct mii_mui_t {
mui_t mui; // mui interface
@ -49,7 +52,10 @@ typedef struct mii_mui_t {
c2_pt_t pos;
} mouse;
mui_event_t key;
// This is the list of vertices and coordinates for the screen, including
// the pincushion distortion. This is inset from video_frame
mii_mui_v_array_t video_mesh;
int_array_t video_indices;
c2_rect_t video_frame; // current video frame
uint32_t video_drawn_seed;
float mui_alpha;
@ -79,10 +85,10 @@ typedef struct mii_mui_t {
mii_floppy_t * floppy;
uint32_t seed_load;
float max_width;
/* technically speaking we'd only need one set of vertices, but hey */
mii_vtx_t vtx;
/* Despite having the same size, they can (will) have different
* texture coordinates, so each floppy have their own */
mii_mui_v_array_t vtx;
} floppy[2];
float_array_t floppy_base;
mii_machine_config_t config;
mii_loadbin_conf_t loadbin_conf;
@ -112,6 +118,17 @@ c2_rect_t
mii_mui_get_video_position(
mii_mui_t * ui);
#define MII_GL_FLOPPY_SEGMENT_COUNT 48
#define MII_GL_FLOPPY_DISC_RADIUS_IN 1.8
#define MII_GL_FLOPPY_DISC_RADIUS_OUT 10
#define MII_GL_FLOPPY_FLUX_RADIUS_IN 2.0
#define MII_GL_FLOPPY_FLUX_RADIUS_OUT 9.8
void
mii_generate_floppy_mesh(
mii_mui_v_array_t * vtx,
float tex_width );
// slot can be <= 0 to open the machine dialog instead
void
mii_config_open_slots_dialog(

View File

@ -91,7 +91,7 @@ _mii_check_1mb_file(
char stt[64];
long delta = 1024*1024 - st.st_size;
_size_string(delta < 0 ? -delta : delta, stt, sizeof(stt)-2, 1);
strcpy(stt + strlen(stt), "B");
strcat(stt + strlen(stt), "B");
char *msg;
asprintf(&msg, "File '%s' is the wrong size, %s too %s.",
basename((char*)path),

View File

@ -110,7 +110,7 @@ _mii_floppy_check_file(
char stt[64];
long delta = want_size - st.st_size;
_size_string(delta < 0 ? -delta : delta, stt, sizeof(stt)-2, 1);
strcpy(stt + strlen(stt), "B");
strcat(stt + strlen(stt), "B");
asprintf(&out->error,
"File '%s' is the wrong size, %s too %s.",
filename,

View File

@ -13,7 +13,10 @@
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>
#if defined(__AVX2__)
#include <immintrin.h>
@ -24,85 +27,11 @@
#include "mii_mui_gl.h"
#include "mii_floppy.h"
#define MII_GL_FLOPPY_SEGMENT_COUNT 32
#define MII_GL_FLOPPY_DISC_RADIUS_IN 1.8
#define MII_GL_FLOPPY_DISC_RADIUS_OUT 10
#define MII_GL_FLOPPY_FLUX_RADIUS_IN 2.0
#define MII_GL_FLOPPY_FLUX_RADIUS_OUT 9.8
static void
mii_gl_make_disc(
float_array_t * pos,
const double radius_out,
const double radius_in,
const int count)
{
float_array_clear(pos);
const double astep = 2 * M_PI / count; // Angle step for each blade
for (int i = 0; i < MII_GL_FLOPPY_SEGMENT_COUNT; ++i) {
double a = i * astep, b = (i + 1) * astep;
// Outer vertex
double x_out = radius_out * cos(a);
double y_out = radius_out * sin(a);
double x_out2 = radius_out * cos(b);
double y_out2 = radius_out * sin(b);
// Inner vertex
double x_in = radius_in * cos(a);
double y_in = radius_in * sin(a);
double x_in2 = radius_in * cos(b);
double y_in2 = radius_in * sin(b);
// add two triangles winded in the right direction
float_array_push(pos, x_out); float_array_push(pos, y_out);
float_array_push(pos, x_in); float_array_push(pos, y_in);
float_array_push(pos, x_out2); float_array_push(pos, y_out2);
float_array_push(pos, x_in2); float_array_push(pos, y_in2);
float_array_push(pos, x_out2); float_array_push(pos, y_out2);
float_array_push(pos, x_in); float_array_push(pos, y_in);
}
}
static void
mii_gl_make_floppy(
mii_vtx_t * vtx,
float tex_width,
bool do_pos,
bool do_tex)
{
vtx->kind = GL_TRIANGLES;
if (do_pos) {
mii_gl_make_disc(&vtx->pos,
MII_GL_FLOPPY_FLUX_RADIUS_OUT,
MII_GL_FLOPPY_FLUX_RADIUS_IN,
MII_GL_FLOPPY_SEGMENT_COUNT);
}
if (!do_tex)
return;
const double tex_y_in = 1;
const double tex_y_out = 0;
float_array_t * tex = &vtx->tex;
float_array_clear(tex);
for (int i = 0; i < MII_GL_FLOPPY_SEGMENT_COUNT; ++i) {
float_array_push(tex, (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_out);
float_array_push(tex, (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_in);
float_array_push(tex, ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_out);
float_array_push(tex, ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_in);
float_array_push(tex, ((i + 1) * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_out);
float_array_push(tex, (i * tex_width) / MII_GL_FLOPPY_SEGMENT_COUNT);
float_array_push(tex, tex_y_in);
}
}
void
mii_mui_gl_init(
mii_mui_t *ui)
{
GLuint tex[MII_PIXEL_LAYERS];
glGenTextures(MII_PIXEL_LAYERS, tex);
for (int i = 0; i < MII_PIXEL_LAYERS; i++) {
@ -110,13 +39,13 @@ mii_mui_gl_init(
ui->pixels.v[i].texture.id = tex[i];
ui->tex_id[i] = tex[i];
}
mii_gl_make_disc(&ui->floppy_base,
MII_GL_FLOPPY_DISC_RADIUS_OUT,
MII_GL_FLOPPY_DISC_RADIUS_IN,
MII_GL_FLOPPY_SEGMENT_COUNT);
mii_mui_gl_prepare_textures(ui);
}
/*
* Grayscale textures are the floppy 'bits' and the heapmaps. They actually
* look a lot better as nearest neighbour, as they ought to look like pixels.
*/
static void
_prep_grayscale_texture(
mui_drawable_t * dr)
@ -139,28 +68,14 @@ _prep_grayscale_texture(
}
void
mii_mui_gl_prepare_textures(
mui_mui_gl_regenerate_ui_texture(
mii_mui_t *ui)
{
mii_t * mii = &ui->mii;
glEnable(GL_TEXTURE_2D);
mui_drawable_t * dr = &ui->pixels.mii;
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// disable the repeat of textures
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
dr->texture.kind = GL_RGBA;// note RGBA here, it's quicker!!
glTexImage2D(GL_TEXTURE_2D, 0, 4,
MII_VRAM_WIDTH,
MII_VRAM_HEIGHT, 0, dr->texture.kind,
GL_UNSIGNED_BYTE, // GL_UNSIGNED_INT_8_8_8_8_REV
mii->video.pixels);
// bind the mui texture using the GL_ARB_texture_rectangle as well
dr = &ui->pixels.mui;
mui_drawable_t * dr = &ui->pixels.mui;
if (dr->texture.id != 0) {
glDeleteTextures(1, &dr->texture.id);
glGenTextures(1, &dr->texture.id);
}
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@ -168,11 +83,71 @@ mii_mui_gl_prepare_textures(
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// here we use GL_BGRA, as the pixman/libmui uses that.
dr->texture.kind = GL_BGRA;
glTexImage2D(GL_TEXTURE_2D, 0, 4,
dr->pix.row_bytes / 4, // already power of two.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
dr->pix.row_bytes / 4,
dr->texture.size.y, 0, dr->texture.kind,
GL_UNSIGNED_INT_8_8_8_8_REV,
GL_UNSIGNED_BYTE, //GL_UNSIGNED_INT_8_8_8_8_REV,
dr->pix.pixels);
}
void
mii_mui_gl_prepare_textures(
mii_mui_t *ui)
{
mii_t * mii = &ui->mii;
glEnable(GL_TEXTURE_2D);
mui_drawable_t * dr = &ui->pixels.mii;
unsigned int tex = dr->texture.id;
mui_drawable_init(dr, C2_PT(MII_VIDEO_WIDTH, MII_VIDEO_HEIGHT),
32, mii->video.pixels, 0);
dr->texture.id = tex;
dr->texture.size = dr->pix.size;
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// disable the repeat of textures
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
dr->texture.kind = GL_RGBA;// note RGBA here, it's quicker!!
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
dr->pix.row_bytes / 4,
dr->texture.size.y, 0, dr->texture.kind,
GL_UNSIGNED_BYTE, //GL_UNSIGNED_INT_8_8_8_8_REV,
dr->pix.pixels);
#if 0
{
printf("Creating video mesh: %d vertices %d indices\n",
ui->video_mesh.count, ui->video_indices.count);
glGenVertexArrays(1, &ui->video_mesh.vao);
glBindVertexArray(ui->video_mesh.vao);
glGenBuffers(1, &ui->video_mesh.vbo);
glBindBuffer(GL_ARRAY_BUFFER, ui->video_mesh.vbo);
glBufferData(GL_ARRAY_BUFFER,
sizeof(ui->video_mesh.e[0]) * ui->video_mesh.count,
ui->video_mesh.e, GL_STATIC_DRAW);
glGenBuffers(1, &ui->video_indices.ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ui->video_indices.ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
sizeof(ui->video_indices.e[0]) * ui->video_indices.count,
ui->video_indices.e, GL_STATIC_DRAW);
// describe what's in that buffer
// Vertices
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
4 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// Texture coordinates
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE,
4 * sizeof(float), (void*)(2 * sizeof(float)));
glEnableVertexAttribArray(1);
glBindVertexArray(0);
}
#endif
mui_mui_gl_regenerate_ui_texture(ui);
#if MII_VIDEO_DEBUG_HEAPMAP
dr = &ui->pixels.video_heapmap;
@ -224,7 +199,7 @@ mii_mui_gl_prepare_textures(
8, f->heat->write.map, MII_FLOPPY_HM_TRACK_SIZE);
dr->texture.id = tex;
_prep_grayscale_texture(dr);
mii_gl_make_floppy(&ui->floppy[fi].vtx, 1.0, true, true);
mii_generate_floppy_mesh(&ui->floppy[fi].vtx, 1.0);
}
} else {
printf("%s No floppy found\n", __func__);
@ -233,9 +208,10 @@ mii_mui_gl_prepare_textures(
mui_drawable_clear(&ui->pixels.floppy[fi].bits);
mui_drawable_clear(&ui->pixels.floppy[fi].hm_read);
mui_drawable_clear(&ui->pixels.floppy[fi].hm_write);
mii_gl_make_floppy(&ui->floppy[fi].vtx, 1.0, true, true);
mii_generate_floppy_mesh(&ui->floppy[fi].vtx, 1.0);
}
}
GLenum err = glGetError();
if (err != GL_NO_ERROR) {
printf("%s Error creating texture: %d\n", __func__, err);
@ -357,7 +333,7 @@ mii_mui_gl_run(
glTexSubImage2D(GL_TEXTURE_2D, 0, r.l, r.t,
c2_rect_width(&r), c2_rect_height(&r),
dr->texture.kind,
GL_UNSIGNED_INT_8_8_8_8_REV,
GL_UNSIGNED_BYTE, //GL_UNSIGNED_INT_8_8_8_8_REV,
dr->pix.pixels + (r.t * dr->pix.row_bytes) + (r.l * 4));
}
}
@ -372,11 +348,13 @@ mii_mui_gl_run(
// update the whole texture
mui_drawable_t * dr = &ui->pixels.mii;
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
// glPixelStorei(GL_UNPACK_ROW_LENGTH, dr->pix.row_bytes / 4);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
MII_VRAM_WIDTH,
MII_VIDEO_HEIGHT, dr->texture.kind,
GL_UNSIGNED_INT_8_8_8_8_REV,
mii->video.pixels);
dr->pix.size.x, dr->pix.size.y,
dr->texture.kind,
GL_UNSIGNED_BYTE, //GL_UNSIGNED_INT_8_8_8_8_REV,
dr->pix.pixels);
// glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
}
#if MII_VIDEO_DEBUG_HEAPMAP
if (ui->mii.state == MII_RUNNING) {
@ -411,8 +389,8 @@ mii_mui_gl_run(
dr->texture.kind, GL_UNSIGNED_BYTE,
f->track_data);
// dont recalculate the vertices, just the texture coordinates
mii_gl_make_floppy(&ui->floppy[fi].vtx,
ui->floppy[fi].max_width, false, true);
mii_generate_floppy_mesh(&ui->floppy[fi].vtx,
ui->floppy[fi].max_width);
} else if (dr->texture.opacity > 0.0f ||
ui->floppy[fi].floppy->motor) {// still animating
draw = true;
@ -447,6 +425,30 @@ mii_mui_gl_run(
return draw;
}
/*
* small replacement for glBegin/glEnd with a static array buffer. Use default
* texture coordinates
*/
static void
glRect(
c2_rect_p r)
{
const float vtx[] = {
r->l, r->t, 0, 0,
r->r, r->t, 1, 0,
r->r, r->b, 1, 1,
r->l, r->b, 0, 1,
};
const uint32_t idx[] = {0, 1, 2, 0, 2, 3};
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 4 * sizeof(float), &vtx[0]);
glTexCoordPointer(2, GL_FLOAT, 4 * sizeof(float), &vtx[2]);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, idx);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
void
mii_mui_gl_render(
mii_mui_t *ui)
@ -470,12 +472,10 @@ mii_mui_gl_render(
(GLsizei)ui->window_size.x,
(GLsizei)ui->window_size.y);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0f, ui->window_size.x, ui->window_size.y,
0.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
/* draw mii texture */
@ -483,20 +483,44 @@ mii_mui_gl_render(
mui_drawable_t * dr = &ui->pixels.mii;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glBegin(GL_QUADS);
c2_rect_t r = ui->video_frame;
glTexCoord2f(0, 0);
glVertex2f(r.l, r.t);
glTexCoord2f(MII_VIDEO_WIDTH / (double)MII_VRAM_WIDTH, 0);
glVertex2f(r.r, r.t);
glTexCoord2f(MII_VIDEO_WIDTH / (double)MII_VRAM_WIDTH,
MII_VIDEO_HEIGHT / (double)MII_VRAM_HEIGHT);
glVertex2f(r.r, r.b);
glTexCoord2f(0,
MII_VIDEO_HEIGHT / (double)MII_VRAM_HEIGHT);
glVertex2f(r.l, r.b);
glEnd();
if (ui->video_mesh.count == 0) {
c2_rect_t r = ui->video_frame;
glRect(&r);
} else {
c2_rect_t r = ui->video_frame;
glDisable(GL_TEXTURE_2D);
glColor4f(0.0f, 0.0f, 0.0f, 1.0);
/* replacement for glBegin/end with a small static vertex buffer,
and a draw */
glRect(&r);
glColor4f(1.0f, 1.0f, 1.0f, 1.0);
glEnable(GL_TEXTURE_2D);
#if 0
glPushMatrix();
glTranslatef(r.l, r.t, 0);
glScalef((float)c2_rect_width(&r) / (float)MII_VIDEO_WIDTH,
(float)c2_rect_height(&r) / (float)MII_VIDEO_HEIGHT, 1);
glBindVertexArray(ui->video_mesh.vao);
glDrawElements(GL_TRIANGLES, ui->video_indices.count,
GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
glPopMatrix();
#else
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 4 * sizeof(float), &ui->video_mesh.e[0].x);
glTexCoordPointer(2, GL_FLOAT, 4 * sizeof(float), &ui->video_mesh.e[0].u);
glPushMatrix();
glTranslatef(r.l, r.t, 0);
glScalef((float)c2_rect_width(&r) / (float)MII_VIDEO_WIDTH,
(float)c2_rect_height(&r) / (float)MII_VIDEO_HEIGHT, 1);
glDrawElements(GL_TRIANGLES, ui->video_indices.count,
GL_UNSIGNED_INT, ui->video_indices.e);
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
#endif
}
#if MII_VIDEO_DEBUG_HEAPMAP
/* draw video heatmap */
dr = &ui->pixels.video_heapmap;
@ -508,17 +532,10 @@ mii_mui_gl_render(
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
// draw a vertical quad on the left side of the video to show
// what's being updated
glBegin(GL_QUADS);
c2_rect_t r = ui->video_frame;
glTexCoord2f(0, 1);
glVertex2f(r.l - 10, r.t);
glTexCoord2f(0, 0);
glVertex2f(r.l + 0, r.t);
glTexCoord2f(1, 0);
glVertex2f(r.l + 0, r.b);
glTexCoord2f(1, 1);
glVertex2f(r.l - 10, r.b);
glEnd();
c2_rect_offet(&r, -10, 0);
r.r = r.l + 10;
glRect(&r);
glPopMatrix();
}
#endif
@ -555,8 +572,9 @@ mii_mui_gl_render(
glColor4f(0.0f, 0.0f, 0.0f, main_opacity);
glDisable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, ui->floppy_base.e);
int element_count = ui->floppy_base.count / 2;
glVertexPointer(2, GL_FLOAT,
4 * sizeof(float), &ui->floppy[i].vtx.e[0].x);
int element_count = ui->floppy[i].vtx.count ;
glDrawArrays(GL_TRIANGLES, 0, element_count);
}
int track_id = f->track_id[f->qtrack];
@ -576,10 +594,12 @@ mii_mui_gl_render(
glColor4f(1.0f, 1.0f, 1.0f, main_opacity);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, ui->floppy[i].vtx.pos.e);
glTexCoordPointer(2, GL_FLOAT, 0, ui->floppy[i].vtx.tex.e);
int element_count = ui->floppy[i].vtx.pos.count / 2;
glDrawArrays(ui->floppy[i].vtx.kind, 0, element_count);
glVertexPointer(2, GL_FLOAT,
4 * sizeof(float), &ui->floppy[i].vtx.e[0].x);
glTexCoordPointer(2, GL_FLOAT,
4 * sizeof(float), &ui->floppy[i].vtx.e[0].u);
int element_count = ui->floppy[i].vtx.count;
glDrawArrays(GL_TRIANGLES, 0, element_count);
// draw heatmap and head with full opacity
// otherwise we get wierd artifacts
if (f->heat) {
@ -587,11 +607,11 @@ mii_mui_gl_render(
dr = &ui->pixels.floppy[i].hm_read;
glColor4f(0.0f, 1.0f, 0.0f, 1.0);
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glDrawArrays(ui->floppy[i].vtx.kind, 0, element_count);
glDrawArrays(GL_TRIANGLES, 0, element_count);
dr = &ui->pixels.floppy[i].hm_write;
glColor4f(1.0f, 0.0f, 0.0f, 1.0);
glBindTexture(GL_TEXTURE_2D, dr->texture.id);
glDrawArrays(ui->floppy[i].vtx.kind, 0, element_count);
glDrawArrays(GL_TRIANGLES, 0, element_count);
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@ -642,9 +662,5 @@ mii_mui_gl_render(
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
}

View File

@ -16,6 +16,9 @@ void
mii_mui_gl_prepare_textures(
mii_mui_t *ui);
void
mui_mui_gl_regenerate_ui_texture(
mii_mui_t *ui);
void
mii_mui_gl_render(
mii_mui_t *ui);
bool

View File

@ -111,6 +111,11 @@ mii_config_open_slots_dialog(
mii_config_save_cb, ui);
}
// this probably needs to be declared differently
void
mii_mui_toggle_fullscreen(
mii_mui_t * _ui );
static int
mii_menubar_action(
mui_window_t *win, // window (menubar)
@ -208,6 +213,14 @@ mii_menubar_action(
(mui_window_front(mui) != NULL) ||
(ui->transition.state != MII_MUI_TRANSITION_NONE);
} break;
case FCC('a','l','t','f'): {
items[i].disabled = mii->video.rom->len < (8*1024);
// bank zero is the international one
if (mii->video.rom_bank == 0 && !items[i].disabled)
strcpy(items[i].mark, MUI_GLYPH_TICK);
else
items[i].mark[0] = 0;
} break;
}
}
} break;
@ -281,10 +294,12 @@ mii_menubar_action(
case FCC('a','u','d','+'):
mii_audio_volume(&mii->speaker.source,
mii->speaker.source.volume + 1);
ui->config.audio_volume = mii->speaker.source.volume;
break;
case FCC('a','u','d','-'):
mii_audio_volume(&mii->speaker.source,
mii->speaker.source.volume - 1);
ui->config.audio_volume = mii->speaker.source.volume;
break;
case FCC('v','d','C','l'): {
// printf("%s Cycle video\n", __func__);
@ -300,6 +315,15 @@ mii_menubar_action(
mii_video_set_mode(mii, FCC_INDEX(item->uid));
ui->config.video_mode = mii->video.color_mode;
break;
case FCC('a','l','t','f'): {
mii->video.rom_bank = !mii->video.rom_bank;
// this forces a refresh
mii_video_set_mode(mii, mii->video.color_mode);
} break;
case FCC('t','g','l','F'):
printf("Toggle Fullscreen\n");
mii_mui_toggle_fullscreen(ui);
break;
case FCC('m','h','z','1'):
mii->speed = MII_SPEED_NTSC;
break;
@ -415,4 +439,4 @@ mii_mui_menus_init(
mui_menubar_add_simple(mbar, "CPU",
FCC('c','p','u','m'),
m_cpu_menu);
}
}

View File

@ -49,7 +49,15 @@ mui_menu_item_t m_video_menu[] = {
.uid = FCC('s','h','m','b'),
.key_equ = MUI_KEY_EQU(MUI_MODIFIER_RCTRL, MUI_KEY_F1),
.kcombo = MUI_GLYPH_CONTROL MUI_GLYPH_F1 },
{ .title = "Cycle Mode",
{ .title = "Toggle Fullscreen", // Handled in the X11 layer, not MUI
.uid = FCC('t','g','l','F'),
.key_equ = MUI_KEY_EQU(MUI_MODIFIER_RCTRL|MUI_MODIFIER_RSHIFT, '\x1b'),
.kcombo = MUI_GLYPH_CONTROL MUI_GLYPH_SHIFT MUI_GLYPH_ESC },
{ .title = "Intl. Font Switch",
.uid = FCC('a','l','t','f'),
.key_equ = MUI_KEY_EQU(MUI_MODIFIER_RCTRL, MUI_KEY_F10),
.kcombo = MUI_GLYPH_CONTROL MUI_GLYPH_F10 },
{ .title = "Cycle Color Mode",
.uid = FCC('v','d','C','l'),
.key_equ = MUI_KEY_EQU(MUI_MODIFIER_RCTRL, MUI_KEY_F11),
.kcombo = MUI_GLYPH_CONTROL MUI_GLYPH_F11 },

View File

@ -224,6 +224,9 @@ mii_emu_save(
config->no_slot_clock ? "1" : "0");
mii_config_set(cf, section, "audio_muted",
config->audio_muted ? "1" : "0");
// audio volume
sprintf(label, "%.2f", config->audio_volume);
mii_config_set(cf, section, "audio_volume", label);
sprintf(label, "%d", config->video_mode);
mii_config_set(cf, section, "video_mode", label);
@ -332,6 +335,9 @@ mii_emu_load(
cl = mii_config_get(cf, section, "audio_muted");
if (cl)
config->audio_muted = !!atoi(cl->value);
cl = mii_config_get(cf, section, "audio_volume");
if (cl)
config->audio_volume = atof(cl->value);
cl = mii_config_get(cf, section, "video_mode");
if (cl)
config->video_mode = atoi(cl->value);

View File

@ -115,6 +115,7 @@ typedef struct mii_machine_config_t {
no_slot_clock : 1,
titan_accelerator : 1;
uint32_t video_mode;
float audio_volume;
mii_joystick_conf_t joystick;
mii_loadbin_conf_t loadbin;
struct {

View File

@ -27,9 +27,10 @@ typedef struct mii_ui_machine_config_t {
mii_machine_config_t config;
} mii_ui_machine_config_t;
static const mii_machine_config_t _default_config = {
const mii_machine_config_t mii_default_config = {
.no_slot_clock = 1,
.titan_accelerator = 0,
.audio_volume = 5.0,
.slot = {
[0] = {
// .driver = MII_SLOT_DRIVER_SSC,
@ -58,10 +59,11 @@ static const mii_machine_config_t _default_config = {
},
};
static const mii_machine_config_t _default_config_2c
const mii_machine_config_t mii_default_config_2c
__attribute__((unused)) = {
.no_slot_clock = 1,
.titan_accelerator = 0,
.audio_volume = 5.0,
.slot = {
[0] = {
.driver = MII_SLOT_DRIVER_SSC,
@ -277,7 +279,7 @@ _mii_config_slot_action_cb(
case MII_SLOT_DEFAULT: {
// set the default config
printf("%s default\n", __func__);
m->config = _default_config;
m->config = mii_default_config;
_mii_config_conf_to_win(m);
} break;
#if 0
@ -483,7 +485,7 @@ mii_mui_configure_slots(
m->dst = config;
if (config) {
if (config->load_defaults)
m->config = _default_config;
m->config = mii_default_config;
else
m->config = *config;
}

View File

@ -22,6 +22,7 @@
#endif
#include "mii.h"
#include "mii_sw.h"
#include "mii_thread.h"
#include "miigl_counter.h"
#include "mii_mui_settings.h"
@ -143,13 +144,12 @@ mii_thread_cpu_regulator(
}
if (sleep) {
if (paste_buffer) {
mii_bank_t * sw = &mii->bank[MII_BANK_SW];
if (paste_buffer[paste_buffer_index] == 0) {
free(paste_buffer);
paste_buffer = NULL;
} else if (!(mii_bank_peek(
&mii->bank[MII_BANK_SW], 0xc000) & 0x80)) {
mii_bank_poke(&mii->bank[MII_BANK_SW],
0xc000, paste_buffer[paste_buffer_index] | 0x80);
} else if (!(mii_bank_peek(sw, SWAKD) & 0x80)) {
mii_keypress(mii, paste_buffer[paste_buffer_index]);
paste_buffer_index++;
}
}

View File

@ -36,6 +36,7 @@ END {
acc = "";
for (cmd in e) {
e[cmd] = gensub(/[ |\t]+$/, "", "g", e[cmd]);
e[cmd] = gensub(/\\"\\"/, "\\\\\"", "g", e[cmd]);
split(e[cmd], arg, / +/);
if (!match(arg[1], /g?cc$/))
continue;

103
utils/convert-rom-tcc.c Normal file
View File

@ -0,0 +1,103 @@
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <libgen.h>
// this take these parameters.
/*
-o <output file> -- .c file with rom data
-i <input file> -- binary file to load
-c <class> -- class of the rom
-n <name> -- internal name of the rom
-d <description> -- Human description of the rom
*/
int
main(int argc, const char * argv[]) {
const char * output = NULL;
const char * class = NULL;
const char * name = NULL;
const char * desc = NULL;
const char * input = NULL;
uint8_t * data = NULL;
size_t size = 0;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-o") == 0 && i < argc-1) {
output = argv[++i];
} else if (strcmp(argv[i], "-i") == 0 && i < argc-1) {
input = argv[++i];
} else if (strcmp(argv[i], "-c") == 0 && i < argc-1) {
class = argv[++i];
} else if (strcmp(argv[i], "-n") == 0 && i < argc-1) {
name = argv[++i];
} else if (strcmp(argv[i], "-d") == 0 && i < argc-1) {
desc = argv[++i];
} else {
fprintf(stderr, "Unknown option %s\n", argv[i]);
exit(1);
}
}
// stat the file to get the size, load it in data
{
struct stat st;
if (stat(input, &st) < 0) {
perror(input);
exit(1);
}
size = st.st_size;
if (size == 0) {
fprintf(stderr, "File %s is empty, ignored\n", input);
exit(1);
}
data = malloc(size);
if (!data) {
perror("malloc");
exit(1);
}
FILE * f = fopen(input, "rb");
if (!f) {
perror(input);
exit(1);
}
if (fread(data, 1, size, f) != size) {
perror(input);
exit(1);
}
fclose(f);
}
// open the output file, add a header, the data, and the mii_rom_t struct
{
char newoutput[1024];
snprintf(newoutput, sizeof(newoutput), "%s.tmp", output);
FILE * f = fopen(newoutput, "w");
if (!f) {
perror(output);
exit(1);
}
fprintf(f, "/* this file is auto-generated by convert-rom-tcc.c */\n\n");
fprintf(f, "#include \"mii_rom.h\"\n\n");
fprintf(f, "static const uint8_t mii_rom_%s[] = {\n", name);
for (size_t i = 0; i < size; i++) {
fprintf(f, "0x%02x,", data[i]);
if ((i % 16) == 15)
fprintf(f, "\n");
}
fprintf(f, "};\n");
fprintf(f, "static mii_rom_t %s_rom = {\n", name);
fprintf(f, "\t.name = \"%s\",\n", name);
fprintf(f, "\t.class = \"%s\",\n", class);
fprintf(f, "\t.description = \"%s\",\n", desc);
fprintf(f, "\t.rom = mii_rom_%s,\n", name);
fprintf(f, "\t.len = %ld,\n", size);
fprintf(f, "};\n");
fprintf(f, "MII_ROM(%s_rom);\n", name);
fclose(f);
// rename the .tmp file to the output file
rename(newoutput, output);
}
}