1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-02-09 01:31:01 +00:00

Bombjack first working version without Backgrounds

This commit is contained in:
Gehstock
2019-10-28 20:03:04 +01:00
parent 7ff9dcbb17
commit 1b2e10823a
526 changed files with 670 additions and 2011 deletions

View File

@@ -150,6 +150,13 @@ set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name VERILOG_INPUT_VERSION SYSTEMVERILOG_2005
set_global_assignment -name VERILOG_SHOW_LMF_MAPPING_MESSAGES OFF
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_*
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
#set_location_assignment PLL_1 -to #"pll:pll|altpll:altpll_component"
set_global_assignment -name SYSTEMVERILOG_FILE rtl/b2m_mist.sv
set_global_assignment -name VERILOG_FILE rtl/b2m_top.v
set_global_assignment -name VERILOG_FILE rtl/k580wi53.v
set_global_assignment -name VERILOG_FILE rtl/k580wm80a.v
@@ -157,23 +164,10 @@ set_global_assignment -name VERILOG_FILE rtl/k580wn59.v
set_global_assignment -name VERILOG_FILE rtl/k580ww55.v
set_global_assignment -name VERILOG_FILE rtl/b2m_video.v
set_global_assignment -name VERILOG_FILE rtl/b2m_kbd.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv
set_global_assignment -name VERILOG_FILE rtl/scandoubler.v
set_global_assignment -name VERILOG_FILE rtl/osd.v
set_global_assignment -name VERILOG_FILE rtl/mist_io.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv
set_global_assignment -name VHDL_FILE rtl/dac.vhd
set_global_assignment -name VERILOG_FILE rtl/build_id.v
set_global_assignment -name VERILOG_FILE rtl/SDRAM_Controller.v
set_global_assignment -name QIP_FILE rtl/bios.qip
set_global_assignment -name SYSTEMVERILOG_FILE rtl/b2m_mist.sv
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_*
set_global_assignment -name VERILOG_FILE rtl/sd_card.v
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
#set_location_assignment PLL_1 -to #"pll:pll|altpll:altpll_component"
set_global_assignment -name QIP_FILE rtl/pll.qip
set_global_assignment -name QIP_FILE rtl/clk20mhz.qip
set_global_assignment -name VERILOG_FILE rtl/clk20mhz.v
set_global_assignment -name VHDL_FILE rtl/pll.vhd
set_global_assignment -name VHDL_FILE rtl/bios.vhd
set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

View File

@@ -1,7 +1,2 @@
{ "" "" "" "*" { } { } 0 10240 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 13012 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 10230 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 14320 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 14284 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 10273 "" 0 0 "Quartus II" 0 -1 0 ""}
{ "" "" "" "*" { } { } 0 10240 "" 0 0 "Quartus II" 0 -1 0 ""}

View File

@@ -1,257 +0,0 @@
:20000000C313E0C355E8C3CBF1C372E2C3CCE2C3F5F132F33EAAD310D311D312D3133E801D
:20002000D36B3E30D3633E76D3633E94D3633E0DD3623E90D3473EF0D3463E15D3793E4020
:20004000D3793EFED3793E16D3743EDFD3753EFFD375AFD36A32FEDF32FFDF3EC33204DF26
:200060002113E02205DFFB0100603EE9D3613E07D3613E15D3790B79B0C276E03E25D3799C
:2000800001FFFF0B79B0C283E03100DFCD66EE0120DF2126DFCD55F07AFEDCCC3CF83AFF12
:2000A000DFB7C29EE03100DFCD10FF3E25D3793EFFD3753E20D374CD04E92119E1CDC2E35E
:2000C0002125E1CDC2E33100DF218CE1CDC2E3CD72E221C6E0E5FE3FCAABE0FE0DC8FE53F4
:2000E000CA05E2FE52CA53E2FE57CA5AE2FE4CCA6AE3FE47CA41E2FE59CA53E3FE55CA603E
:20010000E3CD07E1C3C6E0210DE1C3C2E30D0A2DDEE8D8D1DAD02D0D001B42B7B0B3C0C3D6
:20012000B7C7B8BA00C4E3DDDAE6D8D83A0D0A532DE3E1E2D0DDDED2DAD020EFE7D5D9DADF
:20014000D80D0A4C2DD7D0D3E0E3D7DAD020D8D720BFB7C30D0A522DE7E2D5DDD8D520E192
:2001600020BCBB0D0A572DD7D0DFD8E1EC20DDD020BCBB0D0A472DD2EBDFDEDBDDD8E2EC5B
:2001800020DFE0DED3E0D0DCDCE30D000A3E000D0ABFDED4D3DEE2DED2ECE2D520DCD0D322
:2001A000DDD8E2DEE4DEDD20D4DBEF2000B7B0BFB8C1B800C7C2B5BDB8CF000D0AD820DD88
:2001C000D0D6DCD8E2D5203CB2BA3E000A2AB7B0BFB8C1CC2A0D000A2AC7C2B5BDB8B52A6C
:2001E0000D000A2ADEE8D8D1DAD020BAC12A0D000AD2EBDADBEEE7D820DCD0D3DDD8E2DE96
:20020000E4DEDD0D00CDCCE23DC201E12A1ADFCD41E3E5CD46E3CD4EE3E17EE5CDD5E3CD53
:200220004EE3CD72E2E1FE0DCA3DE2FE2EC8E5CDCFE22A1ADF7CB7C201E17DE17723C30F7C
:20024000E2CDCCE23DC201E13100DF21C6E0E52A1ADFE9CD61E2CDE2EFC9CD61E2CDA8EFAD
:20026000C9CDCCE2FE02C201E12A1ADF444D2A1CDFC911DADF0600CD6FE4FE0DCA89E2FEC6
:200280007FCA9DE2FE20DA77E2CDCEE31213FE0DCAACE20478FE20CAACE2C377E2AFB0CA08
:2002A00077E2051B3E7FCDCEE3C377E221DADF2217DF783216DFE52116DF7EB73E0DCACACE
:2002C000E2352A17DF7E232217DFE1C9CDB6E22119DF360023FE0DCA01E3CD08E3CD20E36C
:2002E000FE0DCA01E3CDB6E2CD08E3CD20E3FE0DCA01E3CDB6E2CD08E3CD20E3FE0DC201E4
:20030000E11119DF1A13B7C9EB210000CD2BE329292929B56FCDB6E2CD38E3C20CE3EBC9E5
:2003200073237223E52119DF34E1C9D630FE0AD8C6F9FE10D8C301E1FE0DC8FE2CC8FE20A3
:20034000C93E0AC3CEE37CCDD5E37DC3D5E33E20C3CEE3CD61E2CD44E4CDF1E3C207E1C934
:20036000CD61E2CD44E4CD1CE4C9CDCCE2FE03C201E12A1ADF444D2A1CDFE52A1EDF545D2C
:20038000E13E90D3477BD3457AF6C0D3467AE6C0C2A1E33E0CD347DB44F53E0DD347C3AC06
:2003A000E33E0ED347DB44F53E0FD347F10213CDB6E3DA85E3C97894DABFE3C07995D003D9
:2003C00037C9F57ECDCEE323B7C2C3E3F1C9C54FCDD7E7C1C9F51F1F1F1FE60FCDE2E3F11E
:2003E000E60FFE0AD2ECE3C630C3CEE3C637C3CEE3C5CD65E4C0DB78B7C0CD65E4C0DB78F6
:20040000FEFFC0CD65E4C0DB7802CDB6E3DA03E4CD65E4C0DB78C1CD55F0BAC9C5CD55F077
:20042000C1D5CD5DE4AFD378CD5DE43EFFD378CD5DE40AD378CDB6E3DA2FE4CD5DE4DB7871
:20044000F1D378C93E96D3633E07D3623E15D3793E40D3793EFED3793E27D379C9DB79E66E
:2004600005CA5DE4C9DB79E63ACA65E4FE02C9C5D53EFF32D7DFCDAFE4FEFFCA76E44F3A8A
:2004800045DFB7CA9DE4110008CDFCE6CA96E41B7BB2C289E42F3245DF79D1C1C911002029
:2004A000C389E4AF32D7DFCDAFE4FEFFC02FC9C5D5E53A25DFB7CACBE42A6EDF7E3225DF48
:2004C000B7CAACE623226EDFC3B4E63E04F5065816001E7F210128F33E02D36A4E3AFEDFB3
:2004E000D36AFB3E01F5A1C209E5147AB8FAF5E41600C313E5F107D2E5E47D07D205E52161
:200500000129C3D7E46FC3D7E47BFE7FC213E55AC3EAE4F13AD6DFBA7A32D6DFCA23E5F1EB
:20052000C3CBE4F13DC2CDE47BFE7FCAB2E67AB7CA63E5FE38FAB2E6FE407BFA4FE5FE3826
:20054000FAB2E6FE40F2B2E6CDC7E65AC330E6FE38FA5CE5FE40F2B2E6C38BE67ACDC7E633
:20056000C37AE506007BFE38FA7AE5FE40F230E6FE3CC2B2E63E1BC3B4E616003A26DF4F15
:20058000A8E604CA8CE52A27DFC3DFE52187E77800E610C2DFE57BFE20D2EAE5211FE7797A
:2005A000A80600E603CAD9E5FE01C2CFE57BFE05CAD9E5FE07CAD9E5FE0FCAD9E5FE11CAA6
:2005C000D9E5FE18CAD9E5FE1BCAD9E5C3D7E52167E7FE02CAD9E50620197E80C3B4E67B93
:2005E0000600FE30D2B2E6C3D9E5D620FE10D220E65FFE0BC20BE679A8E602CA0BE679A800
:20060000E6013EF1C2B4E63DC3B4E679A80600E601C21AE6213FE7C3D9E52157E7C3D9E556
:20062000D610FE08D2B2E65F214FE70600C3D9E53A26DF4F7B1600D640FE10DA5CE6D618DA
:200640002F3C5F79A8E601C24CE616057B82110A002168DF193DC254E6C3BCE45FFE08CA55
:200660006CE6FE0ACA6CE6FE0BC276E679A8E601C283E6C37DE679A8E608C283E621B7E78B
:20068000C386E621C7E70600C3D9E53AD7DFB7CAB2E67AFE397BCA9FE6FE397AC2B2E6CD79
:2006A000C7E63A26DFA83226DFCD7FEBCDFCE6C2ACE63EFF4FFEFFCAC3E63A26DFE610C440
:2006C00039F879E1D1C1C90600FE38CAD3E6FE3FC2D6E60601C9FE3EC2DEE60602C9FE3D1C
:2006E000C2E6E60604C9FE3BC2EEE60608C9FE3AC2F6E60610C9FE3CC00620C9F33E02D34F
:200700006A3A7F28B7C214E73A8028E612C214E73AFF29B73AFEDFD36AFB3E00C82FC955C8
:2007200041544C5760467E4A59564B5251427B445B454E43485A477D584F5D4950534D2A77
:20074000265E252423405F3C272BFF217C292820097F1C1D031F0D383736353433322D2CB3
:200760003B3DFF315C3039B3C4B5B4C6B1B0CEBEBDBCBBBAB9B8C5B2B6C3C2C1C0CFBFCA8F
:20078000C7C9CDC8B7CBCC1501140C17FF06FF0A19160B121102FF041B050E03081A07FFD0
:2007A000180F1D0910130DFFFF1EFFFFFF001FFFFFFFFFFF1CFFFF37363534333231303F94
:2007C0002E223EFFFF39380C181108151A16172F103A2EFFFF1419F3F5C5D5E5CD55E8211F
:2007E0004CE8E5C335DF79FE1BC2F8E73EC33235DF2164EC2236DFC9FE08C202E83E12C359
:200800001BE8FE0CC20CE83E13C31BE8FE1BD224E8FE11CA24E8FE10DA24E8C6314FCDEC2F
:20082000E7C335DFFE7FCA7CE8FE09CA85E8FE0ACAC2E8FE0DCAEAE8FE1FCA04E9FE07CA4B
:20084000BEE8FE20D8E1CDC9E9CD9DE9CD55E8E1D1C1F1FBC9F52A38DFCD48EAE53E02CDF0
:200860006AE8E13E03CD6AE8F1C9D36A060A7E2F772C05C26EE83AFEDFD36AC9CDB4E93EAC
:2008800020CDC9E9C93A43DF473A3EDFB8CAB7E847AFB8CA99E8D29EE8C608C392E8470032
:2008A0003A43DFB8DAA8E878323EDF473A3FDF4FCDC3ED2238DFC9CDEAE8CDC2E8C9CD39A1
:2008C000F8C93A41DF473A3FDFFE17CADFE8B8C83C323FDF2A38DF7DC60A6F2238DFC93A73
:2008E00026DFE620CAECEAC288E93A42DF473A3EDFB8C82A38DF90253DC2F7E878323EDF06
:200900002238DFC9F5C5D5E5210644223ADF21EC44223CDFCD6EE9CD25E9CD88E9CD7FEBB9
:20092000E1D1C1F1C9E5F53EFFD310D311D312D313210040E53E02CD5DE9E13E03CD5DE913
:200940003A21DFD3103A22DFD3113A23DFD3123A24DFD313AF3244DFD369F1E1C9D36A36C9
:2009600000237CFE70C25FE93AFEDFD36AC9AF3242DF3240DF3E273243DF3E173241DF3A56
:2009800026DFE61F3226DFC93A42DF323EDF473A40DF323FDF4FCDC3ED2238DFC93A43DF89
:2009A000473A3EDFB8CAB7E83C323EDF2A38DF242238DFC93A42DF473A3EDFB8C83D323E60
:2009C000DF2A38DF252238DFC9F5AF32D9DFCD48EA11D9DF0601CD5AEAF1CDEBE90608CDF5
:2009E0005AEA060111D9DFCD5AEAC9E52132EAE50129DFFE40D2FBE9D620C90303FE60D210
:200A000005EAD640C90303FE80D20FEAD660C90303FEB0D219EAD680C90303FED0D223EA5F
:200A2000D6B0C90303FEF3D22DEAD6D0C90129DFAFE1F50A6F030A67F1110800B7CA45EAE3
:200A4000193DC33CEAEBE1C9D5F52A38DFEB2A3ADF7D836F7C8267F1D1C91A4FD511D5EA1C
:200A6000D53A20DFFE01C26DEA160059C9FE02C276EA511E00C9FE03C27EEA5159C9FE041E
:200A8000C289EA1600792F5FC9FE06C293EA51792F5FC9FE07C29CEA511EFFC9FE08C2A7E4
:200AA000EA792F571E00C9FE09C2B1EA792F5759C9FE0BC2BAEA16FF59C9FE0CC2C4EA7948
:200AC0002F575FC9FE0DC2CFEA792F571EFFC9D116FF792F5F3E02D36A723E03D36A733AF6
:200AE000FEDFD36AD1132C05C25AEAC92100003922ECDF21ECDFF92A3CDF7DC60A6F223C6D
:200B0000DF3E02F5D36A061AE50E283600240DC20BEBE12C05C208EBF13DCA2FEBF53E0618
:200B20003207EB2A3ADF7DC6046F3E03C304EB3E1A3207EB2A3CDFE5D17DC60A6FDB74E63D
:200B400001C23DEB3A44DFC60AD3693244DF3E03D36A060AE5D50E281A77AF1214240DC215
:200B600058EBD1E12C1C05C254EB2A3ADF7DC60A6F223ADF2AECDFF93AFEDFD36AC90DF5EB
:200B8000C5D5E53A20DFF53E043220DF2146DF3A26DFE604C2B1EB3A26DFE602C2A8EB01EB
:200BA00052ECCD44ECC3B7EB0155ECCD44ECC3B7EB0158ECCD44EC362F233A26DFE601CA37
:200BC000C7EB3648C3C9EB364223365023362F233A26DFE608C2DEEB015BECC3E1EB015EB4
:200BE000ECCD44EC3A26DFE620C2F8EB362F230161ECCD44ECC301EC362023014FECCD44D9
:200C0000EC06281146DFAF32D9DF2A38DFE52A3CDF3E0B856F2238DFC5E5D511D9DF0601BB
:200C2000CD5AEAD11AD5CDEBE90608CD5AEAD1E124C11305C215ECE12238DFF13220DFE194
:200C4000D1C1F1C916030A77230315C246ECC9202020BBD0E2C0E3E1B3E0E4C6E4E0C3DFC2
:200C6000BAC0E3DB79D641FE1AD2ADEC5F16002179EC19195E2356EBE95EEF2EED73ED7910
:200C8000ED82EF8CEF7CEF6FEF6DED52ED67ED7FEDADEC66EE85EDE5EEADECADECADECB9A3
:200CA000EC1DEEADECEFEC0AEF9BEEADEC3EC33235DF21E6E72236DFC9AF32D8DF21C4EC10
:200CC0002236DFC93AD8DFB7C2DEEC2168DF7932D8DF110A00193DC2D5EC2217DFC9792A9E
:200CE00017DF77232217DFB7C032D8DFC3ADEC3E0332D8DF2101ED2236DF2129DF22ECDF0A
:200D0000C93AD8DF2AECDFFE03C21BEDF5793D075F16001922ECDFF1C326EDFE02C224ED92
:200D200071C326ED23713D32D8DFC0C3ADECCD8EEE213EED2236DF2155DF2217DFC979B764
:200D4000CA4CED2A17DF77232217DFC9CD7FEBC3ADEC3A40DF473A3FDFB8CAADEC3DF53AE3
:200D60003EDF47F1C368EFCDC2E8C3ADECCD9DE9C3ADECCDB4E9C3ADECCD88E9C3ADECCD55
:200D80006EE9C3ADEC3A20DFF50F0FE603F53A42DF473A40DF4FCDC3ED11064419F1F5E66F
:200DA000013220DFE53E0232D9DFCDDCEDE1F1E6023220DF3E0332D9DFCDDCEDF13220DF8E
:200DC000C3ADEC21000078B7CAD0ED243DC2CBED79B7C87DC60A0DC2D4ED6FC93A42DF4756
:200DE0003A43DF903C4F3A40DF473A41DF903C47C5E53AD9DFD36A3A20DFB7C202EE57C3DA
:200E000004EE16FF3E0A722C3DC206EE05C204EE3AFEDFD36AE124C10DC2F0EDC93E043236
:200E2000D8DF2131EE2236DF3A26DFF6203226DFC93AD8DFF50D215DEEE5FE04C244EE797C
:200E40003242DFC9FE03C24EEE793240DFC9FE02C258EE793243DFC9793241DFE1F13D323A
:200E6000D8DFCA79EDC93E0A01F6FF21D6DF09772336002B3DC26EEE0E151193EF2120DF79
:200E80001A7713230DC280EECD8EEEC3ADEC2154DF3E1A3620233DC293EEC93E0232D8DF12
:200EA00021A7EE2236DFC93AD8DF0DF5FE02C2C1EE79D620FE18DABBEE3E17323FDFC3CEDA
:200EC000EE79D620FE28DACBEE3E27323EDFF13D32D8DFC03A3EDF473A3FDF4FCDC3ED228D
:200EE00038DFC3ADEC21ECEE2236DFC979E60FF5F50F0FE60347F1E603B8C203EFF13E0267
:200F0000C304EFF13220DFC3ADEC3E0432D8DF2116EF2236DFC93AD8DFF52155EFE5FE041A
:200F2000C22DEF79FE80C83222DFD311C9FE03C23CEF79FE80C83223DFD312C9FE02C24B98
:200F4000EF79FE80C83224DFD313C979FE80C83221DFD310E1F13D32D8DFCAADECC93A438A
:200F6000DF323EDF473A41DF323FDF4FC3DCEE3A42DF323EDF473A3FDFC36BEF3A43DFC3F1
:200F800072EF3A3EDF473A40DFC368EF3A3EDF47C365EF02FFCD1EF000001FE7EFF2EFF385
:200FA000EFF4EFF2EFF5EFF6F5D5E5C5CD55F0218FE1CDC2E321ADE1CDC2E321BBE1CDC2AE
:200FC000E3CD6FE4FE0DCACEEFC1E1C32BF021CCE1CDC2E3C1E11EB0CD63F03E0DD362C3E9
:200FE0002BF0221EDF210000392217DF2A1EDFF5D5E5C5218FE1CDC2E321B4E1CDC2E3215E
:20100000BBE1CDC2E3CD6FE4FE0DC2C9EF21D7E1CDC2E3AFC1E1CD86F0F3C247F07ACD55B6
:20102000F0BACA2BF021E2E1CDC2E32113E02205DFCD38F0D1F1FBC93EFFD3753E20D3740C
:2010400021F0E1CDC2E3C921B7F1CDC2E3CD38F02A17DFF9C9F516000A8257CDB6E3DA58CB
:20106000F0F1C9F5C5E5D5C5CDACF07D914F7C984703E156CDDBF0230B78B1C273F0D1CD80
:20108000DBF0E1C1F1C9F5C5E5E5C5CD2DF1C1E10B03C5CD5CF1C17A0279ADC291F078AC9C
:2010A000C291F0C5CD5CF1C1E1C1F1C9F3E52122F12205DF21401F3E9ED3633E02D3623E9A
:2010C00010D3633EFDD3753E0DCD22F13E0C763E0D762B7CB5C2CCF0E1F3C93E0CFB763E2B
:2010E0000C763E0D763E0D763E08F53E0C767A0F573E0617767A07573E063F17767A0F5778
:201100003E0D76F13DC2EAF03E0C763E0D763E0C763E0D763E0C763E0D763E0C763E0D7640
:20112000F3C9D36B7BD3603E61D374FBC92147F02205DFF33E10D3633EFDD37521E803CD2C
:2011400085F12B7CB5C23FF1445CFBCD85F1091DC24BF12424247CA71F845FC9CD85F1CD5F
:2011600085F17993DA5FF106081600CD85F17993D278F1F5CD85F1F17A1F5705C26BF1CD0C
:2011800085F1CD85F1DB74E610CA85F1DB74E610C28CF1AFD363DB602F4F3E10D3633EFF2E
:2011A000D360C9C5D5CD5CF17AD1C1C9F5D51EB051CDDBF0D1F1C90A2A20DEE8D8D1DAD031
:2011C00020E7E2D5DDD8EF202A0D001100000100C02101C0CD81E32A00C07CBDC80321FF63
:2011E000C3CD81E3CD59E22A00C02B7E23CDC2E3B7CA2DF2570600CD6FE4FE0DCA20F2FEC9
:2012000019C20EF24F78B7CAF7F105C31AF2FE1AC2F7F14F78BACAF7F104CDD7E7C3F7F1C0
:2012200078010800B7CA2DF2093DC324F25E2356D5234E2346235E2356D5235E2356EBD163
:20124000CD81E3CD66EEE1E9DB74E604C83EFFC9F5C5CD48F2CA52F279FE80D46BF22FD372
:20126000683E09D36B3DD36BC1F1C9FEF0C275F23EB5C37CF2FEF1C27CF23ED5FED0D288F6
:20128000F2D6B00E00C38CF2D6D00E01E5D521A1F216005F195E79B77BC29EF2C620D1E1E3
:2012A000C9C1C2D7C7C4C5D6DAC9CACBCCCDCECFD0D2D3D4D5C6C8C3DEDBDDDFD9D8DCC046
:2012C000D1C50E40C3CAF2C50E80F306F63E0BD36B3DD36BDB7404A1CAD4F278A7F2EBF2F5
:2012E0002F3CFE0A0600FAEBF2067F78C1FBC900000000000000000C1E1E0C0C000C00367A
:201300003636000000000036367F367F36360000187C063C603718006333180C6663001C31
:20132000361C6E3B336E000606030000000000180C0606060C1800060C1818180C0600003C
:20134000663CFF3C660000000C0C3F0C0C000000000000000C0C060000003F00000000007E
:20136000000000000C0C006030180C060301003E63737B6F673E000C0E0C0C0C0C3F001E4D
:2013800033301C06333F003F33181C30331E00383C36337F3078003F031F3030331E001CFD
:2013A00006031F33331E003F3330180C0C0C001E33331E33331E001E33333E30180E000065
:2013C0000C0C00000C0C00000C0C00000C0C06180C0603060C180000003F003F00000006CC
:2013E0000C1830180C06001E3330180C000C003E637B7B031E00000C1E33333F3333003F92
:2014000066663E66663F003C66030303663C001F36666666361F007F46161E16467F007F3B
:2014200046161E16060F003C66030373667C003333333F333333001E0C0C0C0C0C1E0078A9
:2014400030303033331E006766361E366667000F06060646667F0063777F7F6B636300639C
:20146000676F7B736363001C36636363361C003F66663E06060F001E3333333B1E38007FEA
:2014800066663E366667001E33060C18331E003F2D0C0C0C0C1E003333333333331E003336
:2014A000333333331E0C006363636B7F7763006363361C1C3663003333331E0C0C1E007F10
:2014C0006331184C667F001E06060606061E0003060C18306040001E18181818181E00081C
:2014E0001C366300000000000000000000007F0C0C18000000000000001E303E336E000754
:2015000006063E66663B0000001E3303331E003830303E33336E0000001E333F031E001C5E
:2015200036060F06060F0000006E33333E301F0706366E666667000C000E0C0C0C1E003074
:201540000030303033331E070666361E3667000E0C0C0C0C0C1E000000337F7F6B630000AC
:20156000001F333333330000001E3333331E0000003B66663E060F00006E33333E30780097
:20158000003B6E66060F0000003E031E301F00080C3E0C0C2C18000000333333336E000091
:2015A000003333331E0C000000636B7F7F3600000063361C36630000003333333E301F00F2
:2015C000003F190C263F00380C0C070C0C38000808080000080808070C0C380C0C07006E87
:2015E0003B00000000000000081C3663637F000C1E33333F3333007F06063E66663F003FC9
:2016000066663E66663F007F66060606060F003C36363636367F637F46161E16467F006B3E
:201620006B3E1C3E696B003E63603860633E006363737B6F6763001C63737B6F67630063A3
:20164000331B0F1B336300786C66666666630063777F7F6B6363003333333F333333003EE5
:2016600063636363633E007F636363636363003F66663E06060F003C66030303663C003F7C
:201680002D0C0C0C0C1E006363637E60201E00187EDBDB7E183C0063361C1C36636300336C
:2016A00033333333337F606363637E60606000636B6B6B6B6B7F00636B6B6B6B6B7F60072C
:2016C000060636666636006363636F5B5B6F000303033F63633F003E63607C60633E00330B
:2016E0006B6B6F6B6B33007E63637E6C66630000001E303E337E0000003F033F633F000045
:20170000001F331F331F0000003F030303030000003C3636367F6300001E333F031E00004A
:20172000006B6B3E6B6B0000001E3318331E0000006363737F660000186363737F660000B1
:2017400000331B0F1B73000000786C66666700000063777F6B6300000063637F6363000055
:20176000003E6363633E0000007F636363630000003F63633F030300003E6303633E00002A
:20178000003F0C0C0C0C00000063667C603E000000187EDB7E1818000063361C366300008A
:2017A00000333333337F60000033333E30300000006B6B6B6B7F0000006B6B6B6B7F6000C4
:2017C0000007063E663E00000063636F5B6F00000003033F633F0000003F6078603F00007E
:2017E00000336B6F6B330000007E637E666300147F46161E16467F00121E333F031E006407
:20180000C3A3E4C36FE4C3A3F1C3D7E7C3ACF1C350F2C3FCE6C348F2C3C2E3C3F1E3C32D9A
:20182000F1C3ACF0C3E2EFC3A8EFC355F0C31CE4C3A5E0C31CFDC340FDC32EFDC335FDC3D5
:2018400080F8C3F0F8C3ABF9C380FAC316FBC372FBC3BEFBC305FCC339FCC3A0FCC325E955
:20186000C304E9C381E3C3FFFFC3B6E3C37EF8C37EF8C344E4C3D5E3C3C1F2C3C7F2C9FFE2
:20188000CDBAF8D8E5D5C57A1F7B1F1F1FE63FC640574B5879E6074F060021E8F80946EBE6
:2018A0003ADCDF4FCDC5F87832DFDF22DDDFC1E1D122EFDF7832F1DFEBC978C60AD83E7FA6
:2018C000933E019AC91602F33E02D36A79A278CAD6F8B6C3D8F82FA6773E03D36A15C2CC6A
:2018E000F83AFEDFD36AFBC90102040810204080CDBAF8D8E5D5C52AEFDF7B956F7A9C670F
:20190000DCA3F90E02DA0AF90E003AF1DFEB906FDCA3F93E0067DA1BF93E40B14F7B957A4D
:201920009C3E01D229F9EB3E80B132E0DF29CDA3F92B22E3DFEB22E5DF545D2922E1DF3A25
:20194000DCDF4F3ADFDF472ADDDF7CD640DA37FA3E7094DA37FA7AB3CAA7F81BD5E52AE3F6
:20196000DFEB2AE5DF23193AE0DFDA74F9F681EB2AE1DF1922E5DFE1570FD290F90F78D2ED
:201980008AF90FD28FF925C38FF907D28FF924477A07D29CF9072DDA9CF92C2CCDC5F8D1E1
:2019A000C356F97C2F677D2F6F23C9CDBAF8D8E5D5C5EB22E9DF68260022EBDF3AF7DF4780
:2019C0002AF8DFEBCD91FADA37FA5916003AEEDF6F62EBA7C4A8FA22D7DF593AEDDF6F6271
:2019E000EBA7C4A8FA22F5DF48CDC5FAE52AF5DFCDA8FA2422F3DF2AD7DFEBCDA8FA22D986
:201A0000DFEBD1CDA8FA22D7DF2AF5DFCDA8FA22F5DF3AF9DF4FCD3BFACD80F8DA37FA0CC2
:201A20003E48A9C227FA4FCD3BFACDF0F8DA37FA3AF8DFA9C21FFAC1D1E1C9CDC5FA22E123
:201A4000DFEB22E5DF2AD9DFCD9DFAE52AE5DFEB2AF5DFCD9DFAD119EB2AEBDF197CC6FF4D
:201A6000D8452AE5DFEB2AF3DFCD9DFAE52AE1DFEB2AD7DFCD9DFAD119EB2AE9DF19EBC97E
:201A8000CD91FAD822EDDFEB22F8DFEB7832F7DFC97AC6B9D87BC6B9D878C6B9C9CDA8FA3E
:201AA0007C26000FDCA3F9C9D5C57CAA477D21FF00540E080FD2B9FA19EB29EB0DC2B4FAFD
:201AC0006C60C1D1C9C579010000161292FADCFA0C92FADCFA0492FADCFA0D9282076F2685
:201AE0000011F0FA195E236E60517CAAC1C8EBC900FF16FF2CFC42F758F16CE880DE93D2FA
:201B0000A5C4B5B5C4A5D293DE80E86CF158F742FC2CFF16FF0078C6F0D8C5D5E5CD61FB06
:201B20000E20F31ACD53FB473E02D36A703AFEDFD36A131ACD53FB473E03D36A703AFEDF33
:201B4000D36A13230DC223FBFB3AFEDFD36AAFE1D1C1C9E5C5670608291F05C258FBC1E1C8
:201B6000C9780F0F0F47E6F04F78E6034721003C09C978C6F0D87AC6D1D87BC68CD8C5D586
:201B8000E5CD61FB7B075F3E4082570602D50E10F33E02D36A1A2424772525B6123E03D395
:201BA0006A1A2424772525B61223130DC291FB3AFEDFD36AFBD11405C28DFBC34EFB78C672
:201BC000F0D87AC6D1D87BC68CD8C5D5E57B076F3E408267E5CD61FB11000219EBE10602CA
:201BE000E50E10F33E02D36A1A773E03D36A1A7713230DC2E4FB3AFEDFD36AFBE12405C2D3
:201C0000E0FBC34EFBCDBAF8D8C5D5E5CD34FCCDBAF8DA30FC7891D434FC0504CD84F8CD59
:201C200034FCC541CDF0F8C1CD34FC4FB8C21BFCE1D1C1C9EB78414FC9CD8AFCD8C5E5E569
:201C40007CC64067474DCD7AFCDA6CFCF33E02D36A0A772B773E03D36A0A7723777C2505B0
:201C6000D64092C24DFC3AFEDFD36AFBE17D2D93C23FFCE1CD7AFCA7C1C97D2EF59307D8E0
:201C80003C83D8C60AD8D60A6FC97AC6D1D87BC60BD87CC6D0D87DC60AD87C92D87D93C912
:201CA000CD8AFCD8C5E5E57CC640474DCDDDFCDACFFC7CC64067D53E0232D6DFCDEAFC3E33
:201CC0000332D6DFCDEAFCD17D2D0D93C2B6FCE17C2592C2A6FCE1CDDDFCA7C1C97C920793
:201CE0003C82673E2F94D0262FC9F3E53AD6DFD36A0A2100001608292907D200FD2C2C2CD7
:201D000015C2F7FC555C3AFEDFD36AE13AD6DFD36A7325723AFEDFD36A24FBC9F5E604CAF8
:201D200029FDF13A20DFC32AFDF132DCDFC9E52139FEC339FDE52132FEC5010020C342FD6E
:201D4000E5C53E8832FFDF32FADF7932FDDF3E25D3793EA6D36378D3623E10D3633E76D3F0
:201D6000633EC33204DF22FBDF2171FD2205DFC1E1F5C5D5E53AFADFA7C294FD3C32FADFEF
:201D8000D3603E25D3793EFDD3753E61D374FBE1D1C1F1C9AF32FADF2AFBDF7EA7C2C6FD68
:201DA0003EFFD375AF32FFDF3E76D3633E96D3633E0DD3623EFFD3753E20D3742100E0221E
:201DC00005DFFBC38FFDF2D0FD32FFDF23C39BFDE6700F0F0F0F4F3AFDDF81E6074F7E2333
:201DE00022FBDFE60FFE0DF20EFE3D075F1600211AFE1956235E0DCA04FEA77A1F577B1FFD
:201E00005FC3F6FD7BD3617AD3613E05D3793AFFDFE67F073DD360C386FDEEEAE178D4E0A2
:201E2000C8D6BDA0B2FBA8EB9F7096888E0C86017DE1905B9051A06500885B003EAFD31A2D
:201E40003EFFD31B07D31B07D31B07D31B07D31B07D31B07D31B07D31BC93EFFD31BD31BC2
:201E6000D31BD31BD31BD31BD31BD31BDB1BC92100001100004FCD40FE79CD42FE7ACD4274
:201E8000FE7BCD42FE7CCD42FE7DCD42FE3E95CD42FE11808021204ECD5AFE4F92BB79D01F
:201EA0002B7CB5C298FED601C9C5D5E511FF00CD95FEE1D1C1C9CD3DFE0610CD40FE05C2B3
:201EC000BBFECD3CFE3E40CD6FFEFE01C03E77CD6FFEE6FEC03E69CD6FFEFE01CACDFEB70C
:201EE000C9CDA9FED8E5EB295C65AF576F3E51CD75FEE1D80600E51101FFCD95FEE1FEFEDD
:201F0000C0CD5AFE7723CD5AFE772305C201FFC93E02D36A3A8028E604C0AFD36ACD24FF0E
:201F2000DA3DFEE9CDB6FE37C01100002100C0CDE1FED8CD42FFD02AC6C1EB2100C0CDE1AC
:201F4000FED8CDBAFF37C02A16C0EB2A0EC03A10C0193DC251FFEB2A1CC01922F0C1EB2AE7
:201F600011C04D4429292929E579E60FC5CC9EFFD5E5060B11CBFF1ABEC2AAFF132305C2F4
:201F800077FFC1C1C1110F00195E23561B1B2AF0C13A0DC0193DC294FFD15A5719EBD52139
:201FA00000C2E5CDE1FEE1D113C9E111200019D1C10B78B1C269FFC137C92136C07E23FEAE
:201FC00046C07E23FE41C07EFE54C9424F4F5420202020524F4D0000000000000000000020
:201FE00000000000000000001B592C2C2DDEE8D8D1DAD020D7D0D3E0E3D7DAD82D00FFF6C7
:00000001FF

View File

@@ -7,7 +7,7 @@ module SDRAM_Controller(
input clk100, // Clock 100MHz
input reset, // System reset
inout [15:0] DRAM_DQ, // SDRAM Data bus 16 Bits
output reg[11:0] DRAM_ADDR, // SDRAM Address bus 12 Bits
output reg[12:0] DRAM_ADDR, // SDRAM Address bus 12 Bits
output reg DRAM_LDQM, // SDRAM Low-byte Data Mask
output reg DRAM_UDQM, // SDRAM High-byte Data Mask
output reg DRAM_WE_N, // SDRAM Write Enable
@@ -17,7 +17,7 @@ module SDRAM_Controller(
output DRAM_BA_0, // SDRAM Bank Address 0
output DRAM_BA_1, // SDRAM Bank Address 0
input [21:0] iaddr,
input [7:0] idata,
input [15:0] idata,
input rd,
input we_n,
output reg [15:0] odata,
@@ -50,17 +50,17 @@ reg[15:0] data;
reg exrd,exwen;
reg ubn,lbn,rdvid;
assign DRAM_DQ[7:0] = (state==ST_WRITE0) ? data : 8'bZZZZZZZZ;
assign DRAM_DQ[15:8] = (state == ST_WRITE0) ? data : 8'bZZZZZZZZ;
assign DRAM_DQ[7:0] = (state==ST_WRITE0) ? data[7:0] : 8'bZZZZZZZZ;
assign DRAM_DQ[15:8] = (state == ST_WRITE0) ? data[7:0] : 8'bZZZZZZZZ;
assign DRAM_CS_N = 1'b0;
assign DRAM_BA_0 = addr[20];
assign DRAM_BA_1 = addr[21];
always @(*) begin
case (state)
ST_RESET0: DRAM_ADDR = 12'b100000;
ST_RAS0: DRAM_ADDR = addr[19:8];
default: DRAM_ADDR = {4'b0100,addr[7:0]};
ST_RESET0: DRAM_ADDR = 13'b100000;
ST_RAS0: DRAM_ADDR = addr[20:8];
default: DRAM_ADDR = {5'b00100,addr[7:0]};
endcase
case (state)
ST_RESET0: {DRAM_RAS_N,DRAM_CAS_N,DRAM_WE_N} = 3'b000;

View File

@@ -1,6 +1,5 @@
module b2m_mist
(
input CLOCK_27,
module b2m_mist(
input CLOCK_27,
output LED,
output SPI_DO,
input SPI_DI,
@@ -9,17 +8,17 @@ module b2m_mist
input SPI_SS3,
input SPI_SS4,
input CONF_DATA0,
inout [15:0] SDRAM_DQ, // SDRAM Data bus 16 Bits
output [12:0] SDRAM_A, // SDRAM Address bus 13 Bits
output SDRAM_DQML, // SDRAM Low-byte Data Mask
output SDRAM_DQMH, // SDRAM High-byte Data Mask
output SDRAM_nWE, // SDRAM Write Enable
output SDRAM_nCAS, // SDRAM Column Address Strobe
output SDRAM_nRAS, // SDRAM Row Address Strobe
output SDRAM_nCS, // SDRAM Chip Select
output [1:0] SDRAM_BA, // SDRAM Bank Address
output SDRAM_CLK, // SDRAM Clock
output SDRAM_CKE, // SDRAM Clock Enable
inout [15:0] SDRAM_DQ,
output [12:0] SDRAM_A,
output SDRAM_DQML,
output SDRAM_DQMH,
output SDRAM_nWE,
output SDRAM_nCAS,
output SDRAM_nRAS,
output SDRAM_nCS,
output [1:0] SDRAM_BA,
output SDRAM_CLK,
output SDRAM_CKE,
output AUDIO_L,
output AUDIO_R,
output VGA_HS,
@@ -33,34 +32,28 @@ module b2m_mist
`include "rtl\build_id.v"
localparam CONF_STR = {
"B2M;;",
"Bashkiria 2M;;",
"O2,Turbo ,ON,OFF;",
"O3,Color Mode ,COLOR,B/W;",
"O4,Video Mode ,PAL,NTSC;",
"O56,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;",
"O56,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
"T7,Reset;",
"V,v1.00.",`BUILD_DATE
};
assign LED = 1'b1;
assign AUDIO_R = AUDIO_L;
wire clk_sys;
wire clk12p5;
wire clk100;
wire [31:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [7:0] kbjoy;
wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoubler_disable;
wire scandoublerD;
wire ypbpr;
wire ps2_kbd_clk, ps2_kbd_data;
wire ps2_kbd_clk;
wire ps2_kbd_data;
wire [15:0] audio;
//assign LED = 1;
wire hblank, vblank;
wire ce_vid;
wire hs, vs;
wire [3:0] r,g,b;
@@ -68,102 +61,11 @@ wire [3:0] r,g,b;
pll pll(
.inclk0(CLOCK_27),
.c0(clk_sys),//50
.c1(clk12p5)
);
video_mixer #(.LINE_LENGTH(800), .HALF_DEPTH(0)) video_mixer(
.clk_sys(clk_sys),
.ce_pix(clk12p5),
.ce_pix_actual(clk12p5),
.SPI_SCK(SPI_SCK),
.SPI_SS3(SPI_SS3),
.SPI_DI(SPI_DI),
.R({r,r[1:0]}),
.G({g,g[1:0]}),
.B({b,b[1:0]}),
.HSync(hs),
.VSync(vs),
.VGA_R(VGA_R),
.VGA_G(VGA_G),
.VGA_B(VGA_B),
.VGA_VS(VGA_VS),
.VGA_HS(VGA_HS),
.scandoubler_disable(1),//scandoubler_disable),
.scanlines(scandoubler_disable ? 2'b00 : {status[6:5] == 3, status[6:5] == 2}),
.hq2x(status[6:5]==1),
.ypbpr_full(1),
.line_start(0),
.mono(0)
);
mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_SCK (SPI_SCK ),
.CONF_DATA0 (CONF_DATA0 ),
.SPI_SS2 (SPI_SS2 ),
.SPI_DO (SPI_DO ),
.SPI_DI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable(scandoubler_disable),
.ypbpr (ypbpr ),
.ps2_kbd_clk (ps2_kbd_clk ),
.ps2_kbd_data (ps2_kbd_data ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status ),
.sd_lba (sd_lba ),
.sd_rd (sd_rd ),
.sd_wr (sd_wr ),
.sd_ack (sd_ack ),
.sd_conf (sd_conf ),
.sd_sdhc (sd_sdhc ),
.sd_buff_dout (sd_data_out ),
.sd_buff_din (sd_data_in ),
.sd_dout_strobe (sd_data_in_strobe),
.sd_din_strobe (sd_data_out_strobe)
);
wire [31:0] sd_lba;
wire sd_rd;
wire sd_wr;
wire sd_ack;
wire sd_conf;
wire sd_sdhc;
wire allow_sdhc;
wire [7:0] sd_data_in;
wire sd_data_in_strobe;
wire [7:0] sd_data_out;
wire sd_data_out_strobe;
wire sd_cs;
wire sd_sck;
wire sd_sdi;
wire sd_sdo;
sd_card sd_card(
.io_lba (sd_lba),
.io_rd (sd_rd),
.io_wr (sd_wr),
.io_ack (sd_ack),
.io_conf (sd_conf),
.io_sdhc (sd_sdhc),
.io_din (sd_data_out),
.io_din_strobe (sd_data_in_strobe),
.io_dout (sd_data_in),
.io_dout_strobe(sd_data_out_strobe),
.allow_sdhc (allow_sdhc),
.sd_cs (sd_cs),
.sd_sck (sd_sck),
.sd_sdi (sd_sdi),
.sd_sdo (sd_sdo)
);
b2m_top b2m_top(
.clk50mhz(clk_sys),
.res(~(status[0] || status[7] || buttons[1])),
.res(~(status[0] | status[7] | buttons[1])),
.color_mode(~status[3] ),
.video_mode(status[4] ),
.turbo(~status[2] ),
@@ -192,14 +94,95 @@ b2m_top b2m_top(
.SD_CMD(sd_sdi),
.SD_CLK(sd_sck)
);
dac dac(
mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(9)) mist_video(
.clk_sys ( clk_sys ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
.R ( r),
.G ( g),
.B ( b),
.HSync ( hs ),
.VSync ( vs ),
.VGA_R ( VGA_R ),
.VGA_G ( VGA_G ),
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.scandoubler_disable( 1'b1),//scandoublerD ),
.scanlines ( status[6:5] ),
.ce_divider (1),
.ypbpr ( ypbpr )
);
user_io #(.STRLEN(($size(CONF_STR)>>3))) user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.ps2_kbd_clk (ps2_kbd_clk ),
.ps2_kbd_data (ps2_kbd_data ),
.status (status ),
.sd_lba (sd_lba ),
.sd_rd (sd_rd ),
.sd_wr (sd_wr ),
.sd_ack (sd_ack ),
.sd_conf (sd_conf ),
.sd_sdhc (sd_sdhc ),
.sd_dout (sd_data_out ),
.sd_din (sd_data_in ),
.sd_dout_strobe (sd_data_in_strobe),
.sd_din_strobe (sd_data_out_strobe)
);
dac #(
.C_bits(16))
dac(
.clk_i(clk_sys),
.res_n_i(1),
.dac_i(audio),
.dac_o(AUDIO_L)
);
assign AUDIO_R = AUDIO_L;
);
wire [31:0] sd_lba;
wire sd_rd;
wire sd_wr;
wire sd_ack;
wire sd_conf;
wire sd_sdhc;
wire allow_sdhc;
wire [7:0] sd_data_in;
wire sd_data_in_strobe;
wire [7:0] sd_data_out;
wire sd_data_out_strobe;
wire sd_cs;
wire sd_sck;
wire sd_sdi;
wire sd_sdo;
sd_card sd_card(
.io_lba (sd_lba),
.io_rd (sd_rd),
.io_wr (sd_wr),
.io_ack (sd_ack),
.io_conf (sd_conf),
.io_sdhc (sd_sdhc),
.io_din (sd_data_out),
.io_din_strobe (sd_data_in_strobe),
.io_dout (sd_data_in),
.io_dout_strobe(sd_data_out_strobe),
.allow_sdhc (allow_sdhc),
.sd_cs (sd_cs),
.sd_sck (sd_sck),
.sd_sdi (sd_sdi),
.sd_sdo (sd_sdo)
);
endmodule

View File

@@ -107,11 +107,10 @@ reg[7:0] mem_o;
always @(negedge memvidbusy) vid_data <= dramout;
always @(negedge memcpubusy) mem_o <= dramout[7:0];
bios rom(
.address(addrbus[12:0]),
.clock(clk50mhz),
.q(rom_o)
.addr(addrbus[12:0]),
.clk(clk50mhz),
.data(rom_o)
);
//////////////////// CPU ////////////////////
@@ -161,7 +160,7 @@ wire cpu_ce = cpu_ce2;
always @(posedge clk50mhz) begin
vidce2<=vidce;
cpu_cnt <= cpu_cnt + 1;
cpu_cnt <= cpu_cnt + 1'b1;
if (cpu_sync) sysctl <= cpu_o;
if (addrbus[0]&~sio_we_n) sound_on <= ~cpu_o[5];
if(turbo==1 && {vidce2,vidce}==2'b01 && cpu_cnt>3){cpu_cnt,cpu_ce2}<={10'b0,~memcpubusy&~memvidbusy};
@@ -333,7 +332,7 @@ always @(posedge clk50mhz) begin
if (line6bit > 32) tapein <= 1'b1;
end*/
//I2C_AV_Config sndcfg(.iCLK(clk50mhz), .iRST_N(reset_n), .I2C_SCLK(I2C_SCLK), .I2C_SDAT(I2C_SDAT));
//////////////////// SD CARD ////////////////////
reg sdcs;

View File

@@ -1,3 +0,0 @@
set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT"
set_global_assignment -name IP_TOOL_VERSION "13.1"
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "bios.v"]

View File

@@ -1,159 +0,0 @@
// megafunction wizard: %ROM: 1-PORT%
// GENERATION: STANDARD
// VERSION: WM1.0
// MODULE: altsyncram
// ============================================================
// File Name: bios.v
// Megafunction Name(s):
// altsyncram
//
// Simulation Library Files(s):
// altera_mf
// ============================================================
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
//
// 13.1.0 Build 162 10/23/2013 SJ Web Edition
// ************************************************************
//Copyright (C) 1991-2013 Altera Corporation
//Your use of Altera Corporation's design tools, logic functions
//and other software and tools, and its AMPP partner logic
//functions, and any output files from any of the foregoing
//(including device programming or simulation files), and any
//associated documentation or information are expressly subject
//to the terms and conditions of the Altera Program License
//Subscription Agreement, Altera MegaCore Function License
//Agreement, or other applicable license agreement, including,
//without limitation, that your use is for the sole purpose of
//programming logic devices manufactured by Altera and sold by
//Altera or its authorized distributors. Please refer to the
//applicable agreement for further details.
// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module bios (
address,
clock,
q);
input [12:0] address;
input clock;
output [7:0] q;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_off
`endif
tri1 clock;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_on
`endif
wire [7:0] sub_wire0;
wire [7:0] q = sub_wire0[7:0];
altsyncram altsyncram_component (
.address_a (address),
.clock0 (clock),
.q_a (sub_wire0),
.aclr0 (1'b0),
.aclr1 (1'b0),
.address_b (1'b1),
.addressstall_a (1'b0),
.addressstall_b (1'b0),
.byteena_a (1'b1),
.byteena_b (1'b1),
.clock1 (1'b1),
.clocken0 (1'b1),
.clocken1 (1'b1),
.clocken2 (1'b1),
.clocken3 (1'b1),
.data_a ({8{1'b1}}),
.data_b (1'b1),
.eccstatus (),
.q_b (),
.rden_a (1'b1),
.rden_b (1'b1),
.wren_a (1'b0),
.wren_b (1'b0));
defparam
altsyncram_component.clock_enable_input_a = "BYPASS",
altsyncram_component.clock_enable_output_a = "BYPASS",
altsyncram_component.init_file = "./rtl/BIOS4.HEX",
altsyncram_component.intended_device_family = "Cyclone II",
altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",
altsyncram_component.lpm_type = "altsyncram",
altsyncram_component.numwords_a = 8192,
altsyncram_component.operation_mode = "ROM",
altsyncram_component.outdata_aclr_a = "NONE",
altsyncram_component.outdata_reg_a = "UNREGISTERED",
altsyncram_component.widthad_a = 13,
altsyncram_component.width_a = 8,
altsyncram_component.width_byteena_a = 1;
endmodule
// ============================================================
// CNX file retrieval info
// ============================================================
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
// Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
// Retrieval info: PRIVATE: AclrByte NUMERIC "0"
// Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: Clken NUMERIC "0"
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
// Retrieval info: PRIVATE: MIFfilename STRING "./rtl/BIOS4.HEX"
// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192"
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
// Retrieval info: PRIVATE: RegAddr NUMERIC "1"
// Retrieval info: PRIVATE: RegOutput NUMERIC "0"
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
// Retrieval info: PRIVATE: SingleClock NUMERIC "1"
// Retrieval info: PRIVATE: UseDQRAM NUMERIC "0"
// Retrieval info: PRIVATE: WidthAddr NUMERIC "13"
// Retrieval info: PRIVATE: WidthData NUMERIC "8"
// Retrieval info: PRIVATE: rden NUMERIC "0"
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: INIT_FILE STRING "./rtl/BIOS4.HEX"
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192"
// Retrieval info: CONSTANT: OPERATION_MODE STRING "ROM"
// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED"
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "13"
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
// Retrieval info: USED_PORT: address 0 0 13 0 INPUT NODEFVAL "address[12..0]"
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
// Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
// Retrieval info: CONNECT: @address_a 0 0 13 0 address 0 0 13 0
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
// Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
// Retrieval info: GEN_FILE: TYPE_NORMAL bios.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios.inc FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios.cmp FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios.bsf FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios_inst.v FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios_bb.v FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios_waveforms.html FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL bios_wave*.jpg FALSE
// Retrieval info: LIB_FILE: altera_mf

View File

@@ -0,0 +1,534 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity bios is
port (
clk : in std_logic;
addr : in std_logic_vector(12 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of bios is
type rom is array(0 to 8191) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"C3",X"13",X"E0",X"C3",X"55",X"E8",X"C3",X"CB",X"F1",X"C3",X"72",X"E2",X"C3",X"CC",X"E2",X"C3",
X"F5",X"F1",X"32",X"F3",X"3E",X"AA",X"D3",X"10",X"D3",X"11",X"D3",X"12",X"D3",X"13",X"3E",X"80",
X"D3",X"6B",X"3E",X"30",X"D3",X"63",X"3E",X"76",X"D3",X"63",X"3E",X"94",X"D3",X"63",X"3E",X"0D",
X"D3",X"62",X"3E",X"90",X"D3",X"47",X"3E",X"F0",X"D3",X"46",X"3E",X"15",X"D3",X"79",X"3E",X"40",
X"D3",X"79",X"3E",X"FE",X"D3",X"79",X"3E",X"16",X"D3",X"74",X"3E",X"DF",X"D3",X"75",X"3E",X"FF",
X"D3",X"75",X"AF",X"D3",X"6A",X"32",X"FE",X"DF",X"32",X"FF",X"DF",X"3E",X"C3",X"32",X"04",X"DF",
X"21",X"13",X"E0",X"22",X"05",X"DF",X"FB",X"01",X"00",X"60",X"3E",X"E9",X"D3",X"61",X"3E",X"07",
X"D3",X"61",X"3E",X"15",X"D3",X"79",X"0B",X"79",X"B0",X"C2",X"76",X"E0",X"3E",X"25",X"D3",X"79",
X"01",X"FF",X"FF",X"0B",X"79",X"B0",X"C2",X"83",X"E0",X"31",X"00",X"DF",X"CD",X"66",X"EE",X"01",
X"20",X"DF",X"21",X"26",X"DF",X"CD",X"55",X"F0",X"7A",X"FE",X"DC",X"CC",X"3C",X"F8",X"3A",X"FF",
X"DF",X"B7",X"C2",X"9E",X"E0",X"31",X"00",X"DF",X"CD",X"10",X"FF",X"3E",X"25",X"D3",X"79",X"3E",
X"FF",X"D3",X"75",X"3E",X"20",X"D3",X"74",X"CD",X"04",X"E9",X"21",X"19",X"E1",X"CD",X"C2",X"E3",
X"21",X"25",X"E1",X"CD",X"C2",X"E3",X"31",X"00",X"DF",X"21",X"8C",X"E1",X"CD",X"C2",X"E3",X"CD",
X"72",X"E2",X"21",X"C6",X"E0",X"E5",X"FE",X"3F",X"CA",X"AB",X"E0",X"FE",X"0D",X"C8",X"FE",X"53",
X"CA",X"05",X"E2",X"FE",X"52",X"CA",X"53",X"E2",X"FE",X"57",X"CA",X"5A",X"E2",X"FE",X"4C",X"CA",
X"6A",X"E3",X"FE",X"47",X"CA",X"41",X"E2",X"FE",X"59",X"CA",X"53",X"E3",X"FE",X"55",X"CA",X"60",
X"E3",X"CD",X"07",X"E1",X"C3",X"C6",X"E0",X"21",X"0D",X"E1",X"C3",X"C2",X"E3",X"0D",X"0A",X"2D",
X"DE",X"E8",X"D8",X"D1",X"DA",X"D0",X"2D",X"0D",X"00",X"1B",X"42",X"B7",X"B0",X"B3",X"C0",X"C3",
X"B7",X"C7",X"B8",X"BA",X"00",X"C4",X"E3",X"DD",X"DA",X"E6",X"D8",X"D8",X"3A",X"0D",X"0A",X"53",
X"2D",X"E3",X"E1",X"E2",X"D0",X"DD",X"DE",X"D2",X"DA",X"D0",X"20",X"EF",X"E7",X"D5",X"D9",X"DA",
X"D8",X"0D",X"0A",X"4C",X"2D",X"D7",X"D0",X"D3",X"E0",X"E3",X"D7",X"DA",X"D0",X"20",X"D8",X"D7",
X"20",X"BF",X"B7",X"C3",X"0D",X"0A",X"52",X"2D",X"E7",X"E2",X"D5",X"DD",X"D8",X"D5",X"20",X"E1",
X"20",X"BC",X"BB",X"0D",X"0A",X"57",X"2D",X"D7",X"D0",X"DF",X"D8",X"E1",X"EC",X"20",X"DD",X"D0",
X"20",X"BC",X"BB",X"0D",X"0A",X"47",X"2D",X"D2",X"EB",X"DF",X"DE",X"DB",X"DD",X"D8",X"E2",X"EC",
X"20",X"DF",X"E0",X"DE",X"D3",X"E0",X"D0",X"DC",X"DC",X"E3",X"0D",X"00",X"0A",X"3E",X"00",X"0D",
X"0A",X"BF",X"DE",X"D4",X"D3",X"DE",X"E2",X"DE",X"D2",X"EC",X"E2",X"D5",X"20",X"DC",X"D0",X"D3",
X"DD",X"D8",X"E2",X"DE",X"E4",X"DE",X"DD",X"20",X"D4",X"DB",X"EF",X"20",X"00",X"B7",X"B0",X"BF",
X"B8",X"C1",X"B8",X"00",X"C7",X"C2",X"B5",X"BD",X"B8",X"CF",X"00",X"0D",X"0A",X"D8",X"20",X"DD",
X"D0",X"D6",X"DC",X"D8",X"E2",X"D5",X"20",X"3C",X"B2",X"BA",X"3E",X"00",X"0A",X"2A",X"B7",X"B0",
X"BF",X"B8",X"C1",X"CC",X"2A",X"0D",X"00",X"0A",X"2A",X"C7",X"C2",X"B5",X"BD",X"B8",X"B5",X"2A",
X"0D",X"00",X"0A",X"2A",X"DE",X"E8",X"D8",X"D1",X"DA",X"D0",X"20",X"BA",X"C1",X"2A",X"0D",X"00",
X"0A",X"D2",X"EB",X"DA",X"DB",X"EE",X"E7",X"D8",X"20",X"DC",X"D0",X"D3",X"DD",X"D8",X"E2",X"DE",
X"E4",X"DE",X"DD",X"0D",X"00",X"CD",X"CC",X"E2",X"3D",X"C2",X"01",X"E1",X"2A",X"1A",X"DF",X"CD",
X"41",X"E3",X"E5",X"CD",X"46",X"E3",X"CD",X"4E",X"E3",X"E1",X"7E",X"E5",X"CD",X"D5",X"E3",X"CD",
X"4E",X"E3",X"CD",X"72",X"E2",X"E1",X"FE",X"0D",X"CA",X"3D",X"E2",X"FE",X"2E",X"C8",X"E5",X"CD",
X"CF",X"E2",X"2A",X"1A",X"DF",X"7C",X"B7",X"C2",X"01",X"E1",X"7D",X"E1",X"77",X"23",X"C3",X"0F",
X"E2",X"CD",X"CC",X"E2",X"3D",X"C2",X"01",X"E1",X"31",X"00",X"DF",X"21",X"C6",X"E0",X"E5",X"2A",
X"1A",X"DF",X"E9",X"CD",X"61",X"E2",X"CD",X"E2",X"EF",X"C9",X"CD",X"61",X"E2",X"CD",X"A8",X"EF",
X"C9",X"CD",X"CC",X"E2",X"FE",X"02",X"C2",X"01",X"E1",X"2A",X"1A",X"DF",X"44",X"4D",X"2A",X"1C",
X"DF",X"C9",X"11",X"DA",X"DF",X"06",X"00",X"CD",X"6F",X"E4",X"FE",X"0D",X"CA",X"89",X"E2",X"FE",
X"7F",X"CA",X"9D",X"E2",X"FE",X"20",X"DA",X"77",X"E2",X"CD",X"CE",X"E3",X"12",X"13",X"FE",X"0D",
X"CA",X"AC",X"E2",X"04",X"78",X"FE",X"20",X"CA",X"AC",X"E2",X"C3",X"77",X"E2",X"AF",X"B0",X"CA",
X"77",X"E2",X"05",X"1B",X"3E",X"7F",X"CD",X"CE",X"E3",X"C3",X"77",X"E2",X"21",X"DA",X"DF",X"22",
X"17",X"DF",X"78",X"32",X"16",X"DF",X"E5",X"21",X"16",X"DF",X"7E",X"B7",X"3E",X"0D",X"CA",X"CA",
X"E2",X"35",X"2A",X"17",X"DF",X"7E",X"23",X"22",X"17",X"DF",X"E1",X"C9",X"CD",X"B6",X"E2",X"21",
X"19",X"DF",X"36",X"00",X"23",X"FE",X"0D",X"CA",X"01",X"E3",X"CD",X"08",X"E3",X"CD",X"20",X"E3",
X"FE",X"0D",X"CA",X"01",X"E3",X"CD",X"B6",X"E2",X"CD",X"08",X"E3",X"CD",X"20",X"E3",X"FE",X"0D",
X"CA",X"01",X"E3",X"CD",X"B6",X"E2",X"CD",X"08",X"E3",X"CD",X"20",X"E3",X"FE",X"0D",X"C2",X"01",
X"E1",X"11",X"19",X"DF",X"1A",X"13",X"B7",X"C9",X"EB",X"21",X"00",X"00",X"CD",X"2B",X"E3",X"29",
X"29",X"29",X"29",X"B5",X"6F",X"CD",X"B6",X"E2",X"CD",X"38",X"E3",X"C2",X"0C",X"E3",X"EB",X"C9",
X"73",X"23",X"72",X"23",X"E5",X"21",X"19",X"DF",X"34",X"E1",X"C9",X"D6",X"30",X"FE",X"0A",X"D8",
X"C6",X"F9",X"FE",X"10",X"D8",X"C3",X"01",X"E1",X"FE",X"0D",X"C8",X"FE",X"2C",X"C8",X"FE",X"20",
X"C9",X"3E",X"0A",X"C3",X"CE",X"E3",X"7C",X"CD",X"D5",X"E3",X"7D",X"C3",X"D5",X"E3",X"3E",X"20",
X"C3",X"CE",X"E3",X"CD",X"61",X"E2",X"CD",X"44",X"E4",X"CD",X"F1",X"E3",X"C2",X"07",X"E1",X"C9",
X"CD",X"61",X"E2",X"CD",X"44",X"E4",X"CD",X"1C",X"E4",X"C9",X"CD",X"CC",X"E2",X"FE",X"03",X"C2",
X"01",X"E1",X"2A",X"1A",X"DF",X"44",X"4D",X"2A",X"1C",X"DF",X"E5",X"2A",X"1E",X"DF",X"54",X"5D",
X"E1",X"3E",X"90",X"D3",X"47",X"7B",X"D3",X"45",X"7A",X"F6",X"C0",X"D3",X"46",X"7A",X"E6",X"C0",
X"C2",X"A1",X"E3",X"3E",X"0C",X"D3",X"47",X"DB",X"44",X"F5",X"3E",X"0D",X"D3",X"47",X"C3",X"AC",
X"E3",X"3E",X"0E",X"D3",X"47",X"DB",X"44",X"F5",X"3E",X"0F",X"D3",X"47",X"F1",X"02",X"13",X"CD",
X"B6",X"E3",X"DA",X"85",X"E3",X"C9",X"78",X"94",X"DA",X"BF",X"E3",X"C0",X"79",X"95",X"D0",X"03",
X"37",X"C9",X"F5",X"7E",X"CD",X"CE",X"E3",X"23",X"B7",X"C2",X"C3",X"E3",X"F1",X"C9",X"C5",X"4F",
X"CD",X"D7",X"E7",X"C1",X"C9",X"F5",X"1F",X"1F",X"1F",X"1F",X"E6",X"0F",X"CD",X"E2",X"E3",X"F1",
X"E6",X"0F",X"FE",X"0A",X"D2",X"EC",X"E3",X"C6",X"30",X"C3",X"CE",X"E3",X"C6",X"37",X"C3",X"CE",
X"E3",X"C5",X"CD",X"65",X"E4",X"C0",X"DB",X"78",X"B7",X"C0",X"CD",X"65",X"E4",X"C0",X"DB",X"78",
X"FE",X"FF",X"C0",X"CD",X"65",X"E4",X"C0",X"DB",X"78",X"02",X"CD",X"B6",X"E3",X"DA",X"03",X"E4",
X"CD",X"65",X"E4",X"C0",X"DB",X"78",X"C1",X"CD",X"55",X"F0",X"BA",X"C9",X"C5",X"CD",X"55",X"F0",
X"C1",X"D5",X"CD",X"5D",X"E4",X"AF",X"D3",X"78",X"CD",X"5D",X"E4",X"3E",X"FF",X"D3",X"78",X"CD",
X"5D",X"E4",X"0A",X"D3",X"78",X"CD",X"B6",X"E3",X"DA",X"2F",X"E4",X"CD",X"5D",X"E4",X"DB",X"78",
X"F1",X"D3",X"78",X"C9",X"3E",X"96",X"D3",X"63",X"3E",X"07",X"D3",X"62",X"3E",X"15",X"D3",X"79",
X"3E",X"40",X"D3",X"79",X"3E",X"FE",X"D3",X"79",X"3E",X"27",X"D3",X"79",X"C9",X"DB",X"79",X"E6",
X"05",X"CA",X"5D",X"E4",X"C9",X"DB",X"79",X"E6",X"3A",X"CA",X"65",X"E4",X"FE",X"02",X"C9",X"C5",
X"D5",X"3E",X"FF",X"32",X"D7",X"DF",X"CD",X"AF",X"E4",X"FE",X"FF",X"CA",X"76",X"E4",X"4F",X"3A",
X"45",X"DF",X"B7",X"CA",X"9D",X"E4",X"11",X"00",X"08",X"CD",X"FC",X"E6",X"CA",X"96",X"E4",X"1B",
X"7B",X"B2",X"C2",X"89",X"E4",X"2F",X"32",X"45",X"DF",X"79",X"D1",X"C1",X"C9",X"11",X"00",X"20",
X"C3",X"89",X"E4",X"AF",X"32",X"D7",X"DF",X"CD",X"AF",X"E4",X"FE",X"FF",X"C0",X"2F",X"C9",X"C5",
X"D5",X"E5",X"3A",X"25",X"DF",X"B7",X"CA",X"CB",X"E4",X"2A",X"6E",X"DF",X"7E",X"32",X"25",X"DF",
X"B7",X"CA",X"AC",X"E6",X"23",X"22",X"6E",X"DF",X"C3",X"B4",X"E6",X"3E",X"04",X"F5",X"06",X"58",
X"16",X"00",X"1E",X"7F",X"21",X"01",X"28",X"F3",X"3E",X"02",X"D3",X"6A",X"4E",X"3A",X"FE",X"DF",
X"D3",X"6A",X"FB",X"3E",X"01",X"F5",X"A1",X"C2",X"09",X"E5",X"14",X"7A",X"B8",X"FA",X"F5",X"E4",
X"16",X"00",X"C3",X"13",X"E5",X"F1",X"07",X"D2",X"E5",X"E4",X"7D",X"07",X"D2",X"05",X"E5",X"21",
X"01",X"29",X"C3",X"D7",X"E4",X"6F",X"C3",X"D7",X"E4",X"7B",X"FE",X"7F",X"C2",X"13",X"E5",X"5A",
X"C3",X"EA",X"E4",X"F1",X"3A",X"D6",X"DF",X"BA",X"7A",X"32",X"D6",X"DF",X"CA",X"23",X"E5",X"F1",
X"C3",X"CB",X"E4",X"F1",X"3D",X"C2",X"CD",X"E4",X"7B",X"FE",X"7F",X"CA",X"B2",X"E6",X"7A",X"B7",
X"CA",X"63",X"E5",X"FE",X"38",X"FA",X"B2",X"E6",X"FE",X"40",X"7B",X"FA",X"4F",X"E5",X"FE",X"38",
X"FA",X"B2",X"E6",X"FE",X"40",X"F2",X"B2",X"E6",X"CD",X"C7",X"E6",X"5A",X"C3",X"30",X"E6",X"FE",
X"38",X"FA",X"5C",X"E5",X"FE",X"40",X"F2",X"B2",X"E6",X"C3",X"8B",X"E6",X"7A",X"CD",X"C7",X"E6",
X"C3",X"7A",X"E5",X"06",X"00",X"7B",X"FE",X"38",X"FA",X"7A",X"E5",X"FE",X"40",X"F2",X"30",X"E6",
X"FE",X"3C",X"C2",X"B2",X"E6",X"3E",X"1B",X"C3",X"B4",X"E6",X"16",X"00",X"3A",X"26",X"DF",X"4F",
X"A8",X"E6",X"04",X"CA",X"8C",X"E5",X"2A",X"27",X"DF",X"C3",X"DF",X"E5",X"21",X"87",X"E7",X"78",
X"00",X"E6",X"10",X"C2",X"DF",X"E5",X"7B",X"FE",X"20",X"D2",X"EA",X"E5",X"21",X"1F",X"E7",X"79",
X"A8",X"06",X"00",X"E6",X"03",X"CA",X"D9",X"E5",X"FE",X"01",X"C2",X"CF",X"E5",X"7B",X"FE",X"05",
X"CA",X"D9",X"E5",X"FE",X"07",X"CA",X"D9",X"E5",X"FE",X"0F",X"CA",X"D9",X"E5",X"FE",X"11",X"CA",
X"D9",X"E5",X"FE",X"18",X"CA",X"D9",X"E5",X"FE",X"1B",X"CA",X"D9",X"E5",X"C3",X"D7",X"E5",X"21",
X"67",X"E7",X"FE",X"02",X"CA",X"D9",X"E5",X"06",X"20",X"19",X"7E",X"80",X"C3",X"B4",X"E6",X"7B",
X"06",X"00",X"FE",X"30",X"D2",X"B2",X"E6",X"C3",X"D9",X"E5",X"D6",X"20",X"FE",X"10",X"D2",X"20",
X"E6",X"5F",X"FE",X"0B",X"C2",X"0B",X"E6",X"79",X"A8",X"E6",X"02",X"CA",X"0B",X"E6",X"79",X"A8",
X"E6",X"01",X"3E",X"F1",X"C2",X"B4",X"E6",X"3D",X"C3",X"B4",X"E6",X"79",X"A8",X"06",X"00",X"E6",
X"01",X"C2",X"1A",X"E6",X"21",X"3F",X"E7",X"C3",X"D9",X"E5",X"21",X"57",X"E7",X"C3",X"D9",X"E5",
X"D6",X"10",X"FE",X"08",X"D2",X"B2",X"E6",X"5F",X"21",X"4F",X"E7",X"06",X"00",X"C3",X"D9",X"E5",
X"3A",X"26",X"DF",X"4F",X"7B",X"16",X"00",X"D6",X"40",X"FE",X"10",X"DA",X"5C",X"E6",X"D6",X"18",
X"2F",X"3C",X"5F",X"79",X"A8",X"E6",X"01",X"C2",X"4C",X"E6",X"16",X"05",X"7B",X"82",X"11",X"0A",
X"00",X"21",X"68",X"DF",X"19",X"3D",X"C2",X"54",X"E6",X"C3",X"BC",X"E4",X"5F",X"FE",X"08",X"CA",
X"6C",X"E6",X"FE",X"0A",X"CA",X"6C",X"E6",X"FE",X"0B",X"C2",X"76",X"E6",X"79",X"A8",X"E6",X"01",
X"C2",X"83",X"E6",X"C3",X"7D",X"E6",X"79",X"A8",X"E6",X"08",X"C2",X"83",X"E6",X"21",X"B7",X"E7",
X"C3",X"86",X"E6",X"21",X"C7",X"E7",X"06",X"00",X"C3",X"D9",X"E5",X"3A",X"D7",X"DF",X"B7",X"CA",
X"B2",X"E6",X"7A",X"FE",X"39",X"7B",X"CA",X"9F",X"E6",X"FE",X"39",X"7A",X"C2",X"B2",X"E6",X"CD",
X"C7",X"E6",X"3A",X"26",X"DF",X"A8",X"32",X"26",X"DF",X"CD",X"7F",X"EB",X"CD",X"FC",X"E6",X"C2",
X"AC",X"E6",X"3E",X"FF",X"4F",X"FE",X"FF",X"CA",X"C3",X"E6",X"3A",X"26",X"DF",X"E6",X"10",X"C4",
X"39",X"F8",X"79",X"E1",X"D1",X"C1",X"C9",X"06",X"00",X"FE",X"38",X"CA",X"D3",X"E6",X"FE",X"3F",
X"C2",X"D6",X"E6",X"06",X"01",X"C9",X"FE",X"3E",X"C2",X"DE",X"E6",X"06",X"02",X"C9",X"FE",X"3D",
X"C2",X"E6",X"E6",X"06",X"04",X"C9",X"FE",X"3B",X"C2",X"EE",X"E6",X"06",X"08",X"C9",X"FE",X"3A",
X"C2",X"F6",X"E6",X"06",X"10",X"C9",X"FE",X"3C",X"C0",X"06",X"20",X"C9",X"F3",X"3E",X"02",X"D3",
X"6A",X"3A",X"7F",X"28",X"B7",X"C2",X"14",X"E7",X"3A",X"80",X"28",X"E6",X"12",X"C2",X"14",X"E7",
X"3A",X"FF",X"29",X"B7",X"3A",X"FE",X"DF",X"D3",X"6A",X"FB",X"3E",X"00",X"C8",X"2F",X"C9",X"55",
X"41",X"54",X"4C",X"57",X"60",X"46",X"7E",X"4A",X"59",X"56",X"4B",X"52",X"51",X"42",X"7B",X"44",
X"5B",X"45",X"4E",X"43",X"48",X"5A",X"47",X"7D",X"58",X"4F",X"5D",X"49",X"50",X"53",X"4D",X"2A",
X"26",X"5E",X"25",X"24",X"23",X"40",X"5F",X"3C",X"27",X"2B",X"FF",X"21",X"7C",X"29",X"28",X"20",
X"09",X"7F",X"1C",X"1D",X"03",X"1F",X"0D",X"38",X"37",X"36",X"35",X"34",X"33",X"32",X"2D",X"2C",
X"3B",X"3D",X"FF",X"31",X"5C",X"30",X"39",X"B3",X"C4",X"B5",X"B4",X"C6",X"B1",X"B0",X"CE",X"BE",
X"BD",X"BC",X"BB",X"BA",X"B9",X"B8",X"C5",X"B2",X"B6",X"C3",X"C2",X"C1",X"C0",X"CF",X"BF",X"CA",
X"C7",X"C9",X"CD",X"C8",X"B7",X"CB",X"CC",X"15",X"01",X"14",X"0C",X"17",X"FF",X"06",X"FF",X"0A",
X"19",X"16",X"0B",X"12",X"11",X"02",X"FF",X"04",X"1B",X"05",X"0E",X"03",X"08",X"1A",X"07",X"FF",
X"18",X"0F",X"1D",X"09",X"10",X"13",X"0D",X"FF",X"FF",X"1E",X"FF",X"FF",X"FF",X"00",X"1F",X"FF",
X"FF",X"FF",X"FF",X"FF",X"1C",X"FF",X"FF",X"37",X"36",X"35",X"34",X"33",X"32",X"31",X"30",X"3F",
X"2E",X"22",X"3E",X"FF",X"FF",X"39",X"38",X"0C",X"18",X"11",X"08",X"15",X"1A",X"16",X"17",X"2F",
X"10",X"3A",X"2E",X"FF",X"FF",X"14",X"19",X"F3",X"F5",X"C5",X"D5",X"E5",X"CD",X"55",X"E8",X"21",
X"4C",X"E8",X"E5",X"C3",X"35",X"DF",X"79",X"FE",X"1B",X"C2",X"F8",X"E7",X"3E",X"C3",X"32",X"35",
X"DF",X"21",X"64",X"EC",X"22",X"36",X"DF",X"C9",X"FE",X"08",X"C2",X"02",X"E8",X"3E",X"12",X"C3",
X"1B",X"E8",X"FE",X"0C",X"C2",X"0C",X"E8",X"3E",X"13",X"C3",X"1B",X"E8",X"FE",X"1B",X"D2",X"24",
X"E8",X"FE",X"11",X"CA",X"24",X"E8",X"FE",X"10",X"DA",X"24",X"E8",X"C6",X"31",X"4F",X"CD",X"EC",
X"E7",X"C3",X"35",X"DF",X"FE",X"7F",X"CA",X"7C",X"E8",X"FE",X"09",X"CA",X"85",X"E8",X"FE",X"0A",
X"CA",X"C2",X"E8",X"FE",X"0D",X"CA",X"EA",X"E8",X"FE",X"1F",X"CA",X"04",X"E9",X"FE",X"07",X"CA",
X"BE",X"E8",X"FE",X"20",X"D8",X"E1",X"CD",X"C9",X"E9",X"CD",X"9D",X"E9",X"CD",X"55",X"E8",X"E1",
X"D1",X"C1",X"F1",X"FB",X"C9",X"F5",X"2A",X"38",X"DF",X"CD",X"48",X"EA",X"E5",X"3E",X"02",X"CD",
X"6A",X"E8",X"E1",X"3E",X"03",X"CD",X"6A",X"E8",X"F1",X"C9",X"D3",X"6A",X"06",X"0A",X"7E",X"2F",
X"77",X"2C",X"05",X"C2",X"6E",X"E8",X"3A",X"FE",X"DF",X"D3",X"6A",X"C9",X"CD",X"B4",X"E9",X"3E",
X"20",X"CD",X"C9",X"E9",X"C9",X"3A",X"43",X"DF",X"47",X"3A",X"3E",X"DF",X"B8",X"CA",X"B7",X"E8",
X"47",X"AF",X"B8",X"CA",X"99",X"E8",X"D2",X"9E",X"E8",X"C6",X"08",X"C3",X"92",X"E8",X"47",X"00",
X"3A",X"43",X"DF",X"B8",X"DA",X"A8",X"E8",X"78",X"32",X"3E",X"DF",X"47",X"3A",X"3F",X"DF",X"4F",
X"CD",X"C3",X"ED",X"22",X"38",X"DF",X"C9",X"CD",X"EA",X"E8",X"CD",X"C2",X"E8",X"C9",X"CD",X"39",
X"F8",X"C9",X"3A",X"41",X"DF",X"47",X"3A",X"3F",X"DF",X"FE",X"17",X"CA",X"DF",X"E8",X"B8",X"C8",
X"3C",X"32",X"3F",X"DF",X"2A",X"38",X"DF",X"7D",X"C6",X"0A",X"6F",X"22",X"38",X"DF",X"C9",X"3A",
X"26",X"DF",X"E6",X"20",X"CA",X"EC",X"EA",X"C2",X"88",X"E9",X"3A",X"42",X"DF",X"47",X"3A",X"3E",
X"DF",X"B8",X"C8",X"2A",X"38",X"DF",X"90",X"25",X"3D",X"C2",X"F7",X"E8",X"78",X"32",X"3E",X"DF",
X"22",X"38",X"DF",X"C9",X"F5",X"C5",X"D5",X"E5",X"21",X"06",X"44",X"22",X"3A",X"DF",X"21",X"EC",
X"44",X"22",X"3C",X"DF",X"CD",X"6E",X"E9",X"CD",X"25",X"E9",X"CD",X"88",X"E9",X"CD",X"7F",X"EB",
X"E1",X"D1",X"C1",X"F1",X"C9",X"E5",X"F5",X"3E",X"FF",X"D3",X"10",X"D3",X"11",X"D3",X"12",X"D3",
X"13",X"21",X"00",X"40",X"E5",X"3E",X"02",X"CD",X"5D",X"E9",X"E1",X"3E",X"03",X"CD",X"5D",X"E9",
X"3A",X"21",X"DF",X"D3",X"10",X"3A",X"22",X"DF",X"D3",X"11",X"3A",X"23",X"DF",X"D3",X"12",X"3A",
X"24",X"DF",X"D3",X"13",X"AF",X"32",X"44",X"DF",X"D3",X"69",X"F1",X"E1",X"C9",X"D3",X"6A",X"36",
X"00",X"23",X"7C",X"FE",X"70",X"C2",X"5F",X"E9",X"3A",X"FE",X"DF",X"D3",X"6A",X"C9",X"AF",X"32",
X"42",X"DF",X"32",X"40",X"DF",X"3E",X"27",X"32",X"43",X"DF",X"3E",X"17",X"32",X"41",X"DF",X"3A",
X"26",X"DF",X"E6",X"1F",X"32",X"26",X"DF",X"C9",X"3A",X"42",X"DF",X"32",X"3E",X"DF",X"47",X"3A",
X"40",X"DF",X"32",X"3F",X"DF",X"4F",X"CD",X"C3",X"ED",X"22",X"38",X"DF",X"C9",X"3A",X"43",X"DF",
X"47",X"3A",X"3E",X"DF",X"B8",X"CA",X"B7",X"E8",X"3C",X"32",X"3E",X"DF",X"2A",X"38",X"DF",X"24",
X"22",X"38",X"DF",X"C9",X"3A",X"42",X"DF",X"47",X"3A",X"3E",X"DF",X"B8",X"C8",X"3D",X"32",X"3E",
X"DF",X"2A",X"38",X"DF",X"25",X"22",X"38",X"DF",X"C9",X"F5",X"AF",X"32",X"D9",X"DF",X"CD",X"48",
X"EA",X"11",X"D9",X"DF",X"06",X"01",X"CD",X"5A",X"EA",X"F1",X"CD",X"EB",X"E9",X"06",X"08",X"CD",
X"5A",X"EA",X"06",X"01",X"11",X"D9",X"DF",X"CD",X"5A",X"EA",X"C9",X"E5",X"21",X"32",X"EA",X"E5",
X"01",X"29",X"DF",X"FE",X"40",X"D2",X"FB",X"E9",X"D6",X"20",X"C9",X"03",X"03",X"FE",X"60",X"D2",
X"05",X"EA",X"D6",X"40",X"C9",X"03",X"03",X"FE",X"80",X"D2",X"0F",X"EA",X"D6",X"60",X"C9",X"03",
X"03",X"FE",X"B0",X"D2",X"19",X"EA",X"D6",X"80",X"C9",X"03",X"03",X"FE",X"D0",X"D2",X"23",X"EA",
X"D6",X"B0",X"C9",X"03",X"03",X"FE",X"F3",X"D2",X"2D",X"EA",X"D6",X"D0",X"C9",X"01",X"29",X"DF",
X"AF",X"E1",X"F5",X"0A",X"6F",X"03",X"0A",X"67",X"F1",X"11",X"08",X"00",X"B7",X"CA",X"45",X"EA",
X"19",X"3D",X"C3",X"3C",X"EA",X"EB",X"E1",X"C9",X"D5",X"F5",X"2A",X"38",X"DF",X"EB",X"2A",X"3A",
X"DF",X"7D",X"83",X"6F",X"7C",X"82",X"67",X"F1",X"D1",X"C9",X"1A",X"4F",X"D5",X"11",X"D5",X"EA",
X"D5",X"3A",X"20",X"DF",X"FE",X"01",X"C2",X"6D",X"EA",X"16",X"00",X"59",X"C9",X"FE",X"02",X"C2",
X"76",X"EA",X"51",X"1E",X"00",X"C9",X"FE",X"03",X"C2",X"7E",X"EA",X"51",X"59",X"C9",X"FE",X"04",
X"C2",X"89",X"EA",X"16",X"00",X"79",X"2F",X"5F",X"C9",X"FE",X"06",X"C2",X"93",X"EA",X"51",X"79",
X"2F",X"5F",X"C9",X"FE",X"07",X"C2",X"9C",X"EA",X"51",X"1E",X"FF",X"C9",X"FE",X"08",X"C2",X"A7",
X"EA",X"79",X"2F",X"57",X"1E",X"00",X"C9",X"FE",X"09",X"C2",X"B1",X"EA",X"79",X"2F",X"57",X"59",
X"C9",X"FE",X"0B",X"C2",X"BA",X"EA",X"16",X"FF",X"59",X"C9",X"FE",X"0C",X"C2",X"C4",X"EA",X"79",
X"2F",X"57",X"5F",X"C9",X"FE",X"0D",X"C2",X"CF",X"EA",X"79",X"2F",X"57",X"1E",X"FF",X"C9",X"D1",
X"16",X"FF",X"79",X"2F",X"5F",X"3E",X"02",X"D3",X"6A",X"72",X"3E",X"03",X"D3",X"6A",X"73",X"3A",
X"FE",X"DF",X"D3",X"6A",X"D1",X"13",X"2C",X"05",X"C2",X"5A",X"EA",X"C9",X"21",X"00",X"00",X"39",
X"22",X"EC",X"DF",X"21",X"EC",X"DF",X"F9",X"2A",X"3C",X"DF",X"7D",X"C6",X"0A",X"6F",X"22",X"3C",
X"DF",X"3E",X"02",X"F5",X"D3",X"6A",X"06",X"1A",X"E5",X"0E",X"28",X"36",X"00",X"24",X"0D",X"C2",
X"0B",X"EB",X"E1",X"2C",X"05",X"C2",X"08",X"EB",X"F1",X"3D",X"CA",X"2F",X"EB",X"F5",X"3E",X"06",
X"32",X"07",X"EB",X"2A",X"3A",X"DF",X"7D",X"C6",X"04",X"6F",X"3E",X"03",X"C3",X"04",X"EB",X"3E",
X"1A",X"32",X"07",X"EB",X"2A",X"3C",X"DF",X"E5",X"D1",X"7D",X"C6",X"0A",X"6F",X"DB",X"74",X"E6",
X"01",X"C2",X"3D",X"EB",X"3A",X"44",X"DF",X"C6",X"0A",X"D3",X"69",X"32",X"44",X"DF",X"3E",X"03",
X"D3",X"6A",X"06",X"0A",X"E5",X"D5",X"0E",X"28",X"1A",X"77",X"AF",X"12",X"14",X"24",X"0D",X"C2",
X"58",X"EB",X"D1",X"E1",X"2C",X"1C",X"05",X"C2",X"54",X"EB",X"2A",X"3A",X"DF",X"7D",X"C6",X"0A",
X"6F",X"22",X"3A",X"DF",X"2A",X"EC",X"DF",X"F9",X"3A",X"FE",X"DF",X"D3",X"6A",X"C9",X"0D",X"F5",
X"C5",X"D5",X"E5",X"3A",X"20",X"DF",X"F5",X"3E",X"04",X"32",X"20",X"DF",X"21",X"46",X"DF",X"3A",
X"26",X"DF",X"E6",X"04",X"C2",X"B1",X"EB",X"3A",X"26",X"DF",X"E6",X"02",X"C2",X"A8",X"EB",X"01",
X"52",X"EC",X"CD",X"44",X"EC",X"C3",X"B7",X"EB",X"01",X"55",X"EC",X"CD",X"44",X"EC",X"C3",X"B7",
X"EB",X"01",X"58",X"EC",X"CD",X"44",X"EC",X"36",X"2F",X"23",X"3A",X"26",X"DF",X"E6",X"01",X"CA",
X"C7",X"EB",X"36",X"48",X"C3",X"C9",X"EB",X"36",X"42",X"23",X"36",X"50",X"23",X"36",X"2F",X"23",
X"3A",X"26",X"DF",X"E6",X"08",X"C2",X"DE",X"EB",X"01",X"5B",X"EC",X"C3",X"E1",X"EB",X"01",X"5E",
X"EC",X"CD",X"44",X"EC",X"3A",X"26",X"DF",X"E6",X"20",X"C2",X"F8",X"EB",X"36",X"2F",X"23",X"01",
X"61",X"EC",X"CD",X"44",X"EC",X"C3",X"01",X"EC",X"36",X"20",X"23",X"01",X"4F",X"EC",X"CD",X"44",
X"EC",X"06",X"28",X"11",X"46",X"DF",X"AF",X"32",X"D9",X"DF",X"2A",X"38",X"DF",X"E5",X"2A",X"3C",
X"DF",X"3E",X"0B",X"85",X"6F",X"22",X"38",X"DF",X"C5",X"E5",X"D5",X"11",X"D9",X"DF",X"06",X"01",
X"CD",X"5A",X"EA",X"D1",X"1A",X"D5",X"CD",X"EB",X"E9",X"06",X"08",X"CD",X"5A",X"EA",X"D1",X"E1",
X"24",X"C1",X"13",X"05",X"C2",X"15",X"EC",X"E1",X"22",X"38",X"DF",X"F1",X"32",X"20",X"DF",X"E1",
X"D1",X"C1",X"F1",X"C9",X"16",X"03",X"0A",X"77",X"23",X"03",X"15",X"C2",X"46",X"EC",X"C9",X"20",
X"20",X"20",X"BB",X"D0",X"E2",X"C0",X"E3",X"E1",X"B3",X"E0",X"E4",X"C6",X"E4",X"E0",X"C3",X"DF",
X"BA",X"C0",X"E3",X"DB",X"79",X"D6",X"41",X"FE",X"1A",X"D2",X"AD",X"EC",X"5F",X"16",X"00",X"21",
X"79",X"EC",X"19",X"19",X"5E",X"23",X"56",X"EB",X"E9",X"5E",X"EF",X"2E",X"ED",X"73",X"ED",X"79",
X"ED",X"82",X"EF",X"8C",X"EF",X"7C",X"EF",X"6F",X"EF",X"6D",X"ED",X"52",X"ED",X"67",X"ED",X"7F",
X"ED",X"AD",X"EC",X"66",X"EE",X"85",X"ED",X"E5",X"EE",X"AD",X"EC",X"AD",X"EC",X"AD",X"EC",X"B9",
X"EC",X"1D",X"EE",X"AD",X"EC",X"EF",X"EC",X"0A",X"EF",X"9B",X"EE",X"AD",X"EC",X"3E",X"C3",X"32",
X"35",X"DF",X"21",X"E6",X"E7",X"22",X"36",X"DF",X"C9",X"AF",X"32",X"D8",X"DF",X"21",X"C4",X"EC",
X"22",X"36",X"DF",X"C9",X"3A",X"D8",X"DF",X"B7",X"C2",X"DE",X"EC",X"21",X"68",X"DF",X"79",X"32",
X"D8",X"DF",X"11",X"0A",X"00",X"19",X"3D",X"C2",X"D5",X"EC",X"22",X"17",X"DF",X"C9",X"79",X"2A",
X"17",X"DF",X"77",X"23",X"22",X"17",X"DF",X"B7",X"C0",X"32",X"D8",X"DF",X"C3",X"AD",X"EC",X"3E",
X"03",X"32",X"D8",X"DF",X"21",X"01",X"ED",X"22",X"36",X"DF",X"21",X"29",X"DF",X"22",X"EC",X"DF",
X"C9",X"3A",X"D8",X"DF",X"2A",X"EC",X"DF",X"FE",X"03",X"C2",X"1B",X"ED",X"F5",X"79",X"3D",X"07",
X"5F",X"16",X"00",X"19",X"22",X"EC",X"DF",X"F1",X"C3",X"26",X"ED",X"FE",X"02",X"C2",X"24",X"ED",
X"71",X"C3",X"26",X"ED",X"23",X"71",X"3D",X"32",X"D8",X"DF",X"C0",X"C3",X"AD",X"EC",X"CD",X"8E",
X"EE",X"21",X"3E",X"ED",X"22",X"36",X"DF",X"21",X"55",X"DF",X"22",X"17",X"DF",X"C9",X"79",X"B7",
X"CA",X"4C",X"ED",X"2A",X"17",X"DF",X"77",X"23",X"22",X"17",X"DF",X"C9",X"CD",X"7F",X"EB",X"C3",
X"AD",X"EC",X"3A",X"40",X"DF",X"47",X"3A",X"3F",X"DF",X"B8",X"CA",X"AD",X"EC",X"3D",X"F5",X"3A",
X"3E",X"DF",X"47",X"F1",X"C3",X"68",X"EF",X"CD",X"C2",X"E8",X"C3",X"AD",X"EC",X"CD",X"9D",X"E9",
X"C3",X"AD",X"EC",X"CD",X"B4",X"E9",X"C3",X"AD",X"EC",X"CD",X"88",X"E9",X"C3",X"AD",X"EC",X"CD",
X"6E",X"E9",X"C3",X"AD",X"EC",X"3A",X"20",X"DF",X"F5",X"0F",X"0F",X"E6",X"03",X"F5",X"3A",X"42",
X"DF",X"47",X"3A",X"40",X"DF",X"4F",X"CD",X"C3",X"ED",X"11",X"06",X"44",X"19",X"F1",X"F5",X"E6",
X"01",X"32",X"20",X"DF",X"E5",X"3E",X"02",X"32",X"D9",X"DF",X"CD",X"DC",X"ED",X"E1",X"F1",X"E6",
X"02",X"32",X"20",X"DF",X"3E",X"03",X"32",X"D9",X"DF",X"CD",X"DC",X"ED",X"F1",X"32",X"20",X"DF",
X"C3",X"AD",X"EC",X"21",X"00",X"00",X"78",X"B7",X"CA",X"D0",X"ED",X"24",X"3D",X"C2",X"CB",X"ED",
X"79",X"B7",X"C8",X"7D",X"C6",X"0A",X"0D",X"C2",X"D4",X"ED",X"6F",X"C9",X"3A",X"42",X"DF",X"47",
X"3A",X"43",X"DF",X"90",X"3C",X"4F",X"3A",X"40",X"DF",X"47",X"3A",X"41",X"DF",X"90",X"3C",X"47",
X"C5",X"E5",X"3A",X"D9",X"DF",X"D3",X"6A",X"3A",X"20",X"DF",X"B7",X"C2",X"02",X"EE",X"57",X"C3",
X"04",X"EE",X"16",X"FF",X"3E",X"0A",X"72",X"2C",X"3D",X"C2",X"06",X"EE",X"05",X"C2",X"04",X"EE",
X"3A",X"FE",X"DF",X"D3",X"6A",X"E1",X"24",X"C1",X"0D",X"C2",X"F0",X"ED",X"C9",X"3E",X"04",X"32",
X"D8",X"DF",X"21",X"31",X"EE",X"22",X"36",X"DF",X"3A",X"26",X"DF",X"F6",X"20",X"32",X"26",X"DF",
X"C9",X"3A",X"D8",X"DF",X"F5",X"0D",X"21",X"5D",X"EE",X"E5",X"FE",X"04",X"C2",X"44",X"EE",X"79",
X"32",X"42",X"DF",X"C9",X"FE",X"03",X"C2",X"4E",X"EE",X"79",X"32",X"40",X"DF",X"C9",X"FE",X"02",
X"C2",X"58",X"EE",X"79",X"32",X"43",X"DF",X"C9",X"79",X"32",X"41",X"DF",X"E1",X"F1",X"3D",X"32",
X"D8",X"DF",X"CA",X"79",X"ED",X"C9",X"3E",X"0A",X"01",X"F6",X"FF",X"21",X"D6",X"DF",X"09",X"77",
X"23",X"36",X"00",X"2B",X"3D",X"C2",X"6E",X"EE",X"0E",X"15",X"11",X"93",X"EF",X"21",X"20",X"DF",
X"1A",X"77",X"13",X"23",X"0D",X"C2",X"80",X"EE",X"CD",X"8E",X"EE",X"C3",X"AD",X"EC",X"21",X"54",
X"DF",X"3E",X"1A",X"36",X"20",X"23",X"3D",X"C2",X"93",X"EE",X"C9",X"3E",X"02",X"32",X"D8",X"DF",
X"21",X"A7",X"EE",X"22",X"36",X"DF",X"C9",X"3A",X"D8",X"DF",X"0D",X"F5",X"FE",X"02",X"C2",X"C1",
X"EE",X"79",X"D6",X"20",X"FE",X"18",X"DA",X"BB",X"EE",X"3E",X"17",X"32",X"3F",X"DF",X"C3",X"CE",
X"EE",X"79",X"D6",X"20",X"FE",X"28",X"DA",X"CB",X"EE",X"3E",X"27",X"32",X"3E",X"DF",X"F1",X"3D",
X"32",X"D8",X"DF",X"C0",X"3A",X"3E",X"DF",X"47",X"3A",X"3F",X"DF",X"4F",X"CD",X"C3",X"ED",X"22",
X"38",X"DF",X"C3",X"AD",X"EC",X"21",X"EC",X"EE",X"22",X"36",X"DF",X"C9",X"79",X"E6",X"0F",X"F5",
X"F5",X"0F",X"0F",X"E6",X"03",X"47",X"F1",X"E6",X"03",X"B8",X"C2",X"03",X"EF",X"F1",X"3E",X"02",
X"C3",X"04",X"EF",X"F1",X"32",X"20",X"DF",X"C3",X"AD",X"EC",X"3E",X"04",X"32",X"D8",X"DF",X"21",
X"16",X"EF",X"22",X"36",X"DF",X"C9",X"3A",X"D8",X"DF",X"F5",X"21",X"55",X"EF",X"E5",X"FE",X"04",
X"C2",X"2D",X"EF",X"79",X"FE",X"80",X"C8",X"32",X"22",X"DF",X"D3",X"11",X"C9",X"FE",X"03",X"C2",
X"3C",X"EF",X"79",X"FE",X"80",X"C8",X"32",X"23",X"DF",X"D3",X"12",X"C9",X"FE",X"02",X"C2",X"4B",
X"EF",X"79",X"FE",X"80",X"C8",X"32",X"24",X"DF",X"D3",X"13",X"C9",X"79",X"FE",X"80",X"C8",X"32",
X"21",X"DF",X"D3",X"10",X"E1",X"F1",X"3D",X"32",X"D8",X"DF",X"CA",X"AD",X"EC",X"C9",X"3A",X"43",
X"DF",X"32",X"3E",X"DF",X"47",X"3A",X"41",X"DF",X"32",X"3F",X"DF",X"4F",X"C3",X"DC",X"EE",X"3A",
X"42",X"DF",X"32",X"3E",X"DF",X"47",X"3A",X"3F",X"DF",X"C3",X"6B",X"EF",X"3A",X"43",X"DF",X"C3",
X"72",X"EF",X"3A",X"3E",X"DF",X"47",X"3A",X"40",X"DF",X"C3",X"68",X"EF",X"3A",X"3E",X"DF",X"47",
X"C3",X"65",X"EF",X"02",X"FF",X"CD",X"1E",X"F0",X"00",X"00",X"1F",X"E7",X"EF",X"F2",X"EF",X"F3",
X"EF",X"F4",X"EF",X"F2",X"EF",X"F5",X"EF",X"F6",X"F5",X"D5",X"E5",X"C5",X"CD",X"55",X"F0",X"21",
X"8F",X"E1",X"CD",X"C2",X"E3",X"21",X"AD",X"E1",X"CD",X"C2",X"E3",X"21",X"BB",X"E1",X"CD",X"C2",
X"E3",X"CD",X"6F",X"E4",X"FE",X"0D",X"CA",X"CE",X"EF",X"C1",X"E1",X"C3",X"2B",X"F0",X"21",X"CC",
X"E1",X"CD",X"C2",X"E3",X"C1",X"E1",X"1E",X"B0",X"CD",X"63",X"F0",X"3E",X"0D",X"D3",X"62",X"C3",
X"2B",X"F0",X"22",X"1E",X"DF",X"21",X"00",X"00",X"39",X"22",X"17",X"DF",X"2A",X"1E",X"DF",X"F5",
X"D5",X"E5",X"C5",X"21",X"8F",X"E1",X"CD",X"C2",X"E3",X"21",X"B4",X"E1",X"CD",X"C2",X"E3",X"21",
X"BB",X"E1",X"CD",X"C2",X"E3",X"CD",X"6F",X"E4",X"FE",X"0D",X"C2",X"C9",X"EF",X"21",X"D7",X"E1",
X"CD",X"C2",X"E3",X"AF",X"C1",X"E1",X"CD",X"86",X"F0",X"F3",X"C2",X"47",X"F0",X"7A",X"CD",X"55",
X"F0",X"BA",X"CA",X"2B",X"F0",X"21",X"E2",X"E1",X"CD",X"C2",X"E3",X"21",X"13",X"E0",X"22",X"05",
X"DF",X"CD",X"38",X"F0",X"D1",X"F1",X"FB",X"C9",X"3E",X"FF",X"D3",X"75",X"3E",X"20",X"D3",X"74",
X"21",X"F0",X"E1",X"CD",X"C2",X"E3",X"C9",X"21",X"B7",X"F1",X"CD",X"C2",X"E3",X"CD",X"38",X"F0",
X"2A",X"17",X"DF",X"F9",X"C9",X"F5",X"16",X"00",X"0A",X"82",X"57",X"CD",X"B6",X"E3",X"DA",X"58",
X"F0",X"F1",X"C9",X"F5",X"C5",X"E5",X"D5",X"C5",X"CD",X"AC",X"F0",X"7D",X"91",X"4F",X"7C",X"98",
X"47",X"03",X"E1",X"56",X"CD",X"DB",X"F0",X"23",X"0B",X"78",X"B1",X"C2",X"73",X"F0",X"D1",X"CD",
X"DB",X"F0",X"E1",X"C1",X"F1",X"C9",X"F5",X"C5",X"E5",X"E5",X"C5",X"CD",X"2D",X"F1",X"C1",X"E1",
X"0B",X"03",X"C5",X"CD",X"5C",X"F1",X"C1",X"7A",X"02",X"79",X"AD",X"C2",X"91",X"F0",X"78",X"AC",
X"C2",X"91",X"F0",X"C5",X"CD",X"5C",X"F1",X"C1",X"E1",X"C1",X"F1",X"C9",X"F3",X"E5",X"21",X"22",
X"F1",X"22",X"05",X"DF",X"21",X"40",X"1F",X"3E",X"9E",X"D3",X"63",X"3E",X"02",X"D3",X"62",X"3E",
X"10",X"D3",X"63",X"3E",X"FD",X"D3",X"75",X"3E",X"0D",X"CD",X"22",X"F1",X"3E",X"0C",X"76",X"3E",
X"0D",X"76",X"2B",X"7C",X"B5",X"C2",X"CC",X"F0",X"E1",X"F3",X"C9",X"3E",X"0C",X"FB",X"76",X"3E",
X"0C",X"76",X"3E",X"0D",X"76",X"3E",X"0D",X"76",X"3E",X"08",X"F5",X"3E",X"0C",X"76",X"7A",X"0F",
X"57",X"3E",X"06",X"17",X"76",X"7A",X"07",X"57",X"3E",X"06",X"3F",X"17",X"76",X"7A",X"0F",X"57",
X"3E",X"0D",X"76",X"F1",X"3D",X"C2",X"EA",X"F0",X"3E",X"0C",X"76",X"3E",X"0D",X"76",X"3E",X"0C",
X"76",X"3E",X"0D",X"76",X"3E",X"0C",X"76",X"3E",X"0D",X"76",X"3E",X"0C",X"76",X"3E",X"0D",X"76",
X"F3",X"C9",X"D3",X"6B",X"7B",X"D3",X"60",X"3E",X"61",X"D3",X"74",X"FB",X"C9",X"21",X"47",X"F0",
X"22",X"05",X"DF",X"F3",X"3E",X"10",X"D3",X"63",X"3E",X"FD",X"D3",X"75",X"21",X"E8",X"03",X"CD",
X"85",X"F1",X"2B",X"7C",X"B5",X"C2",X"3F",X"F1",X"44",X"5C",X"FB",X"CD",X"85",X"F1",X"09",X"1D",
X"C2",X"4B",X"F1",X"24",X"24",X"24",X"7C",X"A7",X"1F",X"84",X"5F",X"C9",X"CD",X"85",X"F1",X"CD",
X"85",X"F1",X"79",X"93",X"DA",X"5F",X"F1",X"06",X"08",X"16",X"00",X"CD",X"85",X"F1",X"79",X"93",
X"D2",X"78",X"F1",X"F5",X"CD",X"85",X"F1",X"F1",X"7A",X"1F",X"57",X"05",X"C2",X"6B",X"F1",X"CD",
X"85",X"F1",X"CD",X"85",X"F1",X"DB",X"74",X"E6",X"10",X"CA",X"85",X"F1",X"DB",X"74",X"E6",X"10",
X"C2",X"8C",X"F1",X"AF",X"D3",X"63",X"DB",X"60",X"2F",X"4F",X"3E",X"10",X"D3",X"63",X"3E",X"FF",
X"D3",X"60",X"C9",X"C5",X"D5",X"CD",X"5C",X"F1",X"7A",X"D1",X"C1",X"C9",X"F5",X"D5",X"1E",X"B0",
X"51",X"CD",X"DB",X"F0",X"D1",X"F1",X"C9",X"0A",X"2A",X"20",X"DE",X"E8",X"D8",X"D1",X"DA",X"D0",
X"20",X"E7",X"E2",X"D5",X"DD",X"D8",X"EF",X"20",X"2A",X"0D",X"00",X"11",X"00",X"00",X"01",X"00",
X"C0",X"21",X"01",X"C0",X"CD",X"81",X"E3",X"2A",X"00",X"C0",X"7C",X"BD",X"C8",X"03",X"21",X"FF",
X"C3",X"CD",X"81",X"E3",X"CD",X"59",X"E2",X"2A",X"00",X"C0",X"2B",X"7E",X"23",X"CD",X"C2",X"E3",
X"B7",X"CA",X"2D",X"F2",X"57",X"06",X"00",X"CD",X"6F",X"E4",X"FE",X"0D",X"CA",X"20",X"F2",X"FE",
X"19",X"C2",X"0E",X"F2",X"4F",X"78",X"B7",X"CA",X"F7",X"F1",X"05",X"C3",X"1A",X"F2",X"FE",X"1A",
X"C2",X"F7",X"F1",X"4F",X"78",X"BA",X"CA",X"F7",X"F1",X"04",X"CD",X"D7",X"E7",X"C3",X"F7",X"F1",
X"78",X"01",X"08",X"00",X"B7",X"CA",X"2D",X"F2",X"09",X"3D",X"C3",X"24",X"F2",X"5E",X"23",X"56",
X"D5",X"23",X"4E",X"23",X"46",X"23",X"5E",X"23",X"56",X"D5",X"23",X"5E",X"23",X"56",X"EB",X"D1",
X"CD",X"81",X"E3",X"CD",X"66",X"EE",X"E1",X"E9",X"DB",X"74",X"E6",X"04",X"C8",X"3E",X"FF",X"C9",
X"F5",X"C5",X"CD",X"48",X"F2",X"CA",X"52",X"F2",X"79",X"FE",X"80",X"D4",X"6B",X"F2",X"2F",X"D3",
X"68",X"3E",X"09",X"D3",X"6B",X"3D",X"D3",X"6B",X"C1",X"F1",X"C9",X"FE",X"F0",X"C2",X"75",X"F2",
X"3E",X"B5",X"C3",X"7C",X"F2",X"FE",X"F1",X"C2",X"7C",X"F2",X"3E",X"D5",X"FE",X"D0",X"D2",X"88",
X"F2",X"D6",X"B0",X"0E",X"00",X"C3",X"8C",X"F2",X"D6",X"D0",X"0E",X"01",X"E5",X"D5",X"21",X"A1",
X"F2",X"16",X"00",X"5F",X"19",X"5E",X"79",X"B7",X"7B",X"C2",X"9E",X"F2",X"C6",X"20",X"D1",X"E1",
X"C9",X"C1",X"C2",X"D7",X"C7",X"C4",X"C5",X"D6",X"DA",X"C9",X"CA",X"CB",X"CC",X"CD",X"CE",X"CF",
X"D0",X"D2",X"D3",X"D4",X"D5",X"C6",X"C8",X"C3",X"DE",X"DB",X"DD",X"DF",X"D9",X"D8",X"DC",X"C0",
X"D1",X"C5",X"0E",X"40",X"C3",X"CA",X"F2",X"C5",X"0E",X"80",X"F3",X"06",X"F6",X"3E",X"0B",X"D3",
X"6B",X"3D",X"D3",X"6B",X"DB",X"74",X"04",X"A1",X"CA",X"D4",X"F2",X"78",X"A7",X"F2",X"EB",X"F2",
X"2F",X"3C",X"FE",X"0A",X"06",X"00",X"FA",X"EB",X"F2",X"06",X"7F",X"78",X"C1",X"FB",X"C9",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"1E",X"1E",X"0C",X"0C",X"00",X"0C",X"00",X"36",
X"36",X"36",X"00",X"00",X"00",X"00",X"00",X"36",X"36",X"7F",X"36",X"7F",X"36",X"36",X"00",X"00",
X"18",X"7C",X"06",X"3C",X"60",X"37",X"18",X"00",X"63",X"33",X"18",X"0C",X"66",X"63",X"00",X"1C",
X"36",X"1C",X"6E",X"3B",X"33",X"6E",X"00",X"06",X"06",X"03",X"00",X"00",X"00",X"00",X"00",X"18",
X"0C",X"06",X"06",X"06",X"0C",X"18",X"00",X"06",X"0C",X"18",X"18",X"18",X"0C",X"06",X"00",X"00",
X"66",X"3C",X"FF",X"3C",X"66",X"00",X"00",X"00",X"0C",X"0C",X"3F",X"0C",X"0C",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"0C",X"0C",X"06",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"0C",X"0C",X"00",X"60",X"30",X"18",X"0C",X"06",X"03",X"01",X"00",X"3E",
X"63",X"73",X"7B",X"6F",X"67",X"3E",X"00",X"0C",X"0E",X"0C",X"0C",X"0C",X"0C",X"3F",X"00",X"1E",
X"33",X"30",X"1C",X"06",X"33",X"3F",X"00",X"3F",X"33",X"18",X"1C",X"30",X"33",X"1E",X"00",X"38",
X"3C",X"36",X"33",X"7F",X"30",X"78",X"00",X"3F",X"03",X"1F",X"30",X"30",X"33",X"1E",X"00",X"1C",
X"06",X"03",X"1F",X"33",X"33",X"1E",X"00",X"3F",X"33",X"30",X"18",X"0C",X"0C",X"0C",X"00",X"1E",
X"33",X"33",X"1E",X"33",X"33",X"1E",X"00",X"1E",X"33",X"33",X"3E",X"30",X"18",X"0E",X"00",X"00",
X"0C",X"0C",X"00",X"00",X"0C",X"0C",X"00",X"00",X"0C",X"0C",X"00",X"00",X"0C",X"0C",X"06",X"18",
X"0C",X"06",X"03",X"06",X"0C",X"18",X"00",X"00",X"00",X"3F",X"00",X"3F",X"00",X"00",X"00",X"06",
X"0C",X"18",X"30",X"18",X"0C",X"06",X"00",X"1E",X"33",X"30",X"18",X"0C",X"00",X"0C",X"00",X"3E",
X"63",X"7B",X"7B",X"03",X"1E",X"00",X"00",X"0C",X"1E",X"33",X"33",X"3F",X"33",X"33",X"00",X"3F",
X"66",X"66",X"3E",X"66",X"66",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C",X"00",X"1F",
X"36",X"66",X"66",X"66",X"36",X"1F",X"00",X"7F",X"46",X"16",X"1E",X"16",X"46",X"7F",X"00",X"7F",
X"46",X"16",X"1E",X"16",X"06",X"0F",X"00",X"3C",X"66",X"03",X"03",X"73",X"66",X"7C",X"00",X"33",
X"33",X"33",X"3F",X"33",X"33",X"33",X"00",X"1E",X"0C",X"0C",X"0C",X"0C",X"0C",X"1E",X"00",X"78",
X"30",X"30",X"30",X"33",X"33",X"1E",X"00",X"67",X"66",X"36",X"1E",X"36",X"66",X"67",X"00",X"0F",
X"06",X"06",X"06",X"46",X"66",X"7F",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63",X"00",X"63",
X"67",X"6F",X"7B",X"73",X"63",X"63",X"00",X"1C",X"36",X"63",X"63",X"63",X"36",X"1C",X"00",X"3F",
X"66",X"66",X"3E",X"06",X"06",X"0F",X"00",X"1E",X"33",X"33",X"33",X"3B",X"1E",X"38",X"00",X"7F",
X"66",X"66",X"3E",X"36",X"66",X"67",X"00",X"1E",X"33",X"06",X"0C",X"18",X"33",X"1E",X"00",X"3F",
X"2D",X"0C",X"0C",X"0C",X"0C",X"1E",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"1E",X"00",X"33",
X"33",X"33",X"33",X"33",X"1E",X"0C",X"00",X"63",X"63",X"63",X"6B",X"7F",X"77",X"63",X"00",X"63",
X"63",X"36",X"1C",X"1C",X"36",X"63",X"00",X"33",X"33",X"33",X"1E",X"0C",X"0C",X"1E",X"00",X"7F",
X"63",X"31",X"18",X"4C",X"66",X"7F",X"00",X"1E",X"06",X"06",X"06",X"06",X"06",X"1E",X"00",X"03",
X"06",X"0C",X"18",X"30",X"60",X"40",X"00",X"1E",X"18",X"18",X"18",X"18",X"18",X"1E",X"00",X"08",
X"1C",X"36",X"63",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"0C",
X"0C",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1E",X"30",X"3E",X"33",X"6E",X"00",X"07",
X"06",X"06",X"3E",X"66",X"66",X"3B",X"00",X"00",X"00",X"1E",X"33",X"03",X"33",X"1E",X"00",X"38",
X"30",X"30",X"3E",X"33",X"33",X"6E",X"00",X"00",X"00",X"1E",X"33",X"3F",X"03",X"1E",X"00",X"1C",
X"36",X"06",X"0F",X"06",X"06",X"0F",X"00",X"00",X"00",X"6E",X"33",X"33",X"3E",X"30",X"1F",X"07",
X"06",X"36",X"6E",X"66",X"66",X"67",X"00",X"0C",X"00",X"0E",X"0C",X"0C",X"0C",X"1E",X"00",X"30",
X"00",X"30",X"30",X"30",X"33",X"33",X"1E",X"07",X"06",X"66",X"36",X"1E",X"36",X"67",X"00",X"0E",
X"0C",X"0C",X"0C",X"0C",X"0C",X"1E",X"00",X"00",X"00",X"33",X"7F",X"7F",X"6B",X"63",X"00",X"00",
X"00",X"1F",X"33",X"33",X"33",X"33",X"00",X"00",X"00",X"1E",X"33",X"33",X"33",X"1E",X"00",X"00",
X"00",X"3B",X"66",X"66",X"3E",X"06",X"0F",X"00",X"00",X"6E",X"33",X"33",X"3E",X"30",X"78",X"00",
X"00",X"3B",X"6E",X"66",X"06",X"0F",X"00",X"00",X"00",X"3E",X"03",X"1E",X"30",X"1F",X"00",X"08",
X"0C",X"3E",X"0C",X"0C",X"2C",X"18",X"00",X"00",X"00",X"33",X"33",X"33",X"33",X"6E",X"00",X"00",
X"00",X"33",X"33",X"33",X"1E",X"0C",X"00",X"00",X"00",X"63",X"6B",X"7F",X"7F",X"36",X"00",X"00",
X"00",X"63",X"36",X"1C",X"36",X"63",X"00",X"00",X"00",X"33",X"33",X"33",X"3E",X"30",X"1F",X"00",
X"00",X"3F",X"19",X"0C",X"26",X"3F",X"00",X"38",X"0C",X"0C",X"07",X"0C",X"0C",X"38",X"00",X"08",
X"08",X"08",X"00",X"00",X"08",X"08",X"08",X"07",X"0C",X"0C",X"38",X"0C",X"0C",X"07",X"00",X"6E",
X"3B",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"1C",X"36",X"63",X"63",X"7F",X"00",X"0C",
X"1E",X"33",X"33",X"3F",X"33",X"33",X"00",X"7F",X"06",X"06",X"3E",X"66",X"66",X"3F",X"00",X"3F",
X"66",X"66",X"3E",X"66",X"66",X"3F",X"00",X"7F",X"66",X"06",X"06",X"06",X"06",X"0F",X"00",X"3C",
X"36",X"36",X"36",X"36",X"36",X"7F",X"63",X"7F",X"46",X"16",X"1E",X"16",X"46",X"7F",X"00",X"6B",
X"6B",X"3E",X"1C",X"3E",X"69",X"6B",X"00",X"3E",X"63",X"60",X"38",X"60",X"63",X"3E",X"00",X"63",
X"63",X"73",X"7B",X"6F",X"67",X"63",X"00",X"1C",X"63",X"73",X"7B",X"6F",X"67",X"63",X"00",X"63",
X"33",X"1B",X"0F",X"1B",X"33",X"63",X"00",X"78",X"6C",X"66",X"66",X"66",X"66",X"63",X"00",X"63",
X"77",X"7F",X"7F",X"6B",X"63",X"63",X"00",X"33",X"33",X"33",X"3F",X"33",X"33",X"33",X"00",X"3E",
X"63",X"63",X"63",X"63",X"63",X"3E",X"00",X"7F",X"63",X"63",X"63",X"63",X"63",X"63",X"00",X"3F",
X"66",X"66",X"3E",X"06",X"06",X"0F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C",X"00",X"3F",
X"2D",X"0C",X"0C",X"0C",X"0C",X"1E",X"00",X"63",X"63",X"63",X"7E",X"60",X"20",X"1E",X"00",X"18",
X"7E",X"DB",X"DB",X"7E",X"18",X"3C",X"00",X"63",X"36",X"1C",X"1C",X"36",X"63",X"63",X"00",X"33",
X"33",X"33",X"33",X"33",X"33",X"7F",X"60",X"63",X"63",X"63",X"7E",X"60",X"60",X"60",X"00",X"63",
X"6B",X"6B",X"6B",X"6B",X"6B",X"7F",X"00",X"63",X"6B",X"6B",X"6B",X"6B",X"6B",X"7F",X"60",X"07",
X"06",X"06",X"36",X"66",X"66",X"36",X"00",X"63",X"63",X"63",X"6F",X"5B",X"5B",X"6F",X"00",X"03",
X"03",X"03",X"3F",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"7C",X"60",X"63",X"3E",X"00",X"33",
X"6B",X"6B",X"6F",X"6B",X"6B",X"33",X"00",X"7E",X"63",X"63",X"7E",X"6C",X"66",X"63",X"00",X"00",
X"00",X"1E",X"30",X"3E",X"33",X"7E",X"00",X"00",X"00",X"3F",X"03",X"3F",X"63",X"3F",X"00",X"00",
X"00",X"1F",X"33",X"1F",X"33",X"1F",X"00",X"00",X"00",X"3F",X"03",X"03",X"03",X"03",X"00",X"00",
X"00",X"3C",X"36",X"36",X"36",X"7F",X"63",X"00",X"00",X"1E",X"33",X"3F",X"03",X"1E",X"00",X"00",
X"00",X"6B",X"6B",X"3E",X"6B",X"6B",X"00",X"00",X"00",X"1E",X"33",X"18",X"33",X"1E",X"00",X"00",
X"00",X"63",X"63",X"73",X"7F",X"66",X"00",X"00",X"18",X"63",X"63",X"73",X"7F",X"66",X"00",X"00",
X"00",X"33",X"1B",X"0F",X"1B",X"73",X"00",X"00",X"00",X"78",X"6C",X"66",X"66",X"67",X"00",X"00",
X"00",X"63",X"77",X"7F",X"6B",X"63",X"00",X"00",X"00",X"63",X"63",X"7F",X"63",X"63",X"00",X"00",
X"00",X"3E",X"63",X"63",X"63",X"3E",X"00",X"00",X"00",X"7F",X"63",X"63",X"63",X"63",X"00",X"00",
X"00",X"3F",X"63",X"63",X"3F",X"03",X"03",X"00",X"00",X"3E",X"63",X"03",X"63",X"3E",X"00",X"00",
X"00",X"3F",X"0C",X"0C",X"0C",X"0C",X"00",X"00",X"00",X"63",X"66",X"7C",X"60",X"3E",X"00",X"00",
X"00",X"18",X"7E",X"DB",X"7E",X"18",X"18",X"00",X"00",X"63",X"36",X"1C",X"36",X"63",X"00",X"00",
X"00",X"33",X"33",X"33",X"33",X"7F",X"60",X"00",X"00",X"33",X"33",X"3E",X"30",X"30",X"00",X"00",
X"00",X"6B",X"6B",X"6B",X"6B",X"7F",X"00",X"00",X"00",X"6B",X"6B",X"6B",X"6B",X"7F",X"60",X"00",
X"00",X"07",X"06",X"3E",X"66",X"3E",X"00",X"00",X"00",X"63",X"63",X"6F",X"5B",X"6F",X"00",X"00",
X"00",X"03",X"03",X"3F",X"63",X"3F",X"00",X"00",X"00",X"3F",X"60",X"78",X"60",X"3F",X"00",X"00",
X"00",X"33",X"6B",X"6F",X"6B",X"33",X"00",X"00",X"00",X"7E",X"63",X"7E",X"66",X"63",X"00",X"14",
X"7F",X"46",X"16",X"1E",X"16",X"46",X"7F",X"00",X"12",X"1E",X"33",X"3F",X"03",X"1E",X"00",X"64",
X"C3",X"A3",X"E4",X"C3",X"6F",X"E4",X"C3",X"A3",X"F1",X"C3",X"D7",X"E7",X"C3",X"AC",X"F1",X"C3",
X"50",X"F2",X"C3",X"FC",X"E6",X"C3",X"48",X"F2",X"C3",X"C2",X"E3",X"C3",X"F1",X"E3",X"C3",X"2D",
X"F1",X"C3",X"AC",X"F0",X"C3",X"E2",X"EF",X"C3",X"A8",X"EF",X"C3",X"55",X"F0",X"C3",X"1C",X"E4",
X"C3",X"A5",X"E0",X"C3",X"1C",X"FD",X"C3",X"40",X"FD",X"C3",X"2E",X"FD",X"C3",X"35",X"FD",X"C3",
X"80",X"F8",X"C3",X"F0",X"F8",X"C3",X"AB",X"F9",X"C3",X"80",X"FA",X"C3",X"16",X"FB",X"C3",X"72",
X"FB",X"C3",X"BE",X"FB",X"C3",X"05",X"FC",X"C3",X"39",X"FC",X"C3",X"A0",X"FC",X"C3",X"25",X"E9",
X"C3",X"04",X"E9",X"C3",X"81",X"E3",X"C3",X"FF",X"FF",X"C3",X"B6",X"E3",X"C3",X"7E",X"F8",X"C3",
X"7E",X"F8",X"C3",X"44",X"E4",X"C3",X"D5",X"E3",X"C3",X"C1",X"F2",X"C3",X"C7",X"F2",X"C9",X"FF",
X"CD",X"BA",X"F8",X"D8",X"E5",X"D5",X"C5",X"7A",X"1F",X"7B",X"1F",X"1F",X"1F",X"E6",X"3F",X"C6",
X"40",X"57",X"4B",X"58",X"79",X"E6",X"07",X"4F",X"06",X"00",X"21",X"E8",X"F8",X"09",X"46",X"EB",
X"3A",X"DC",X"DF",X"4F",X"CD",X"C5",X"F8",X"78",X"32",X"DF",X"DF",X"22",X"DD",X"DF",X"C1",X"E1",
X"D1",X"22",X"EF",X"DF",X"78",X"32",X"F1",X"DF",X"EB",X"C9",X"78",X"C6",X"0A",X"D8",X"3E",X"7F",
X"93",X"3E",X"01",X"9A",X"C9",X"16",X"02",X"F3",X"3E",X"02",X"D3",X"6A",X"79",X"A2",X"78",X"CA",
X"D6",X"F8",X"B6",X"C3",X"D8",X"F8",X"2F",X"A6",X"77",X"3E",X"03",X"D3",X"6A",X"15",X"C2",X"CC",
X"F8",X"3A",X"FE",X"DF",X"D3",X"6A",X"FB",X"C9",X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",
X"CD",X"BA",X"F8",X"D8",X"E5",X"D5",X"C5",X"2A",X"EF",X"DF",X"7B",X"95",X"6F",X"7A",X"9C",X"67",
X"DC",X"A3",X"F9",X"0E",X"02",X"DA",X"0A",X"F9",X"0E",X"00",X"3A",X"F1",X"DF",X"EB",X"90",X"6F",
X"DC",X"A3",X"F9",X"3E",X"00",X"67",X"DA",X"1B",X"F9",X"3E",X"40",X"B1",X"4F",X"7B",X"95",X"7A",
X"9C",X"3E",X"01",X"D2",X"29",X"F9",X"EB",X"3E",X"80",X"B1",X"32",X"E0",X"DF",X"29",X"CD",X"A3",
X"F9",X"2B",X"22",X"E3",X"DF",X"EB",X"22",X"E5",X"DF",X"54",X"5D",X"29",X"22",X"E1",X"DF",X"3A",
X"DC",X"DF",X"4F",X"3A",X"DF",X"DF",X"47",X"2A",X"DD",X"DF",X"7C",X"D6",X"40",X"DA",X"37",X"FA",
X"3E",X"70",X"94",X"DA",X"37",X"FA",X"7A",X"B3",X"CA",X"A7",X"F8",X"1B",X"D5",X"E5",X"2A",X"E3",
X"DF",X"EB",X"2A",X"E5",X"DF",X"23",X"19",X"3A",X"E0",X"DF",X"DA",X"74",X"F9",X"F6",X"81",X"EB",
X"2A",X"E1",X"DF",X"19",X"22",X"E5",X"DF",X"E1",X"57",X"0F",X"D2",X"90",X"F9",X"0F",X"78",X"D2",
X"8A",X"F9",X"0F",X"D2",X"8F",X"F9",X"25",X"C3",X"8F",X"F9",X"07",X"D2",X"8F",X"F9",X"24",X"47",
X"7A",X"07",X"D2",X"9C",X"F9",X"07",X"2D",X"DA",X"9C",X"F9",X"2C",X"2C",X"CD",X"C5",X"F8",X"D1",
X"C3",X"56",X"F9",X"7C",X"2F",X"67",X"7D",X"2F",X"6F",X"23",X"C9",X"CD",X"BA",X"F8",X"D8",X"E5",
X"D5",X"C5",X"EB",X"22",X"E9",X"DF",X"68",X"26",X"00",X"22",X"EB",X"DF",X"3A",X"F7",X"DF",X"47",
X"2A",X"F8",X"DF",X"EB",X"CD",X"91",X"FA",X"DA",X"37",X"FA",X"59",X"16",X"00",X"3A",X"EE",X"DF",
X"6F",X"62",X"EB",X"A7",X"C4",X"A8",X"FA",X"22",X"D7",X"DF",X"59",X"3A",X"ED",X"DF",X"6F",X"62",
X"EB",X"A7",X"C4",X"A8",X"FA",X"22",X"F5",X"DF",X"48",X"CD",X"C5",X"FA",X"E5",X"2A",X"F5",X"DF",
X"CD",X"A8",X"FA",X"24",X"22",X"F3",X"DF",X"2A",X"D7",X"DF",X"EB",X"CD",X"A8",X"FA",X"22",X"D9",
X"DF",X"EB",X"D1",X"CD",X"A8",X"FA",X"22",X"D7",X"DF",X"2A",X"F5",X"DF",X"CD",X"A8",X"FA",X"22",
X"F5",X"DF",X"3A",X"F9",X"DF",X"4F",X"CD",X"3B",X"FA",X"CD",X"80",X"F8",X"DA",X"37",X"FA",X"0C",
X"3E",X"48",X"A9",X"C2",X"27",X"FA",X"4F",X"CD",X"3B",X"FA",X"CD",X"F0",X"F8",X"DA",X"37",X"FA",
X"3A",X"F8",X"DF",X"A9",X"C2",X"1F",X"FA",X"C1",X"D1",X"E1",X"C9",X"CD",X"C5",X"FA",X"22",X"E1",
X"DF",X"EB",X"22",X"E5",X"DF",X"2A",X"D9",X"DF",X"CD",X"9D",X"FA",X"E5",X"2A",X"E5",X"DF",X"EB",
X"2A",X"F5",X"DF",X"CD",X"9D",X"FA",X"D1",X"19",X"EB",X"2A",X"EB",X"DF",X"19",X"7C",X"C6",X"FF",
X"D8",X"45",X"2A",X"E5",X"DF",X"EB",X"2A",X"F3",X"DF",X"CD",X"9D",X"FA",X"E5",X"2A",X"E1",X"DF",
X"EB",X"2A",X"D7",X"DF",X"CD",X"9D",X"FA",X"D1",X"19",X"EB",X"2A",X"E9",X"DF",X"19",X"EB",X"C9",
X"CD",X"91",X"FA",X"D8",X"22",X"ED",X"DF",X"EB",X"22",X"F8",X"DF",X"EB",X"78",X"32",X"F7",X"DF",
X"C9",X"7A",X"C6",X"B9",X"D8",X"7B",X"C6",X"B9",X"D8",X"78",X"C6",X"B9",X"C9",X"CD",X"A8",X"FA",
X"7C",X"26",X"00",X"0F",X"DC",X"A3",X"F9",X"C9",X"D5",X"C5",X"7C",X"AA",X"47",X"7D",X"21",X"FF",
X"00",X"54",X"0E",X"08",X"0F",X"D2",X"B9",X"FA",X"19",X"EB",X"29",X"EB",X"0D",X"C2",X"B4",X"FA",
X"6C",X"60",X"C1",X"D1",X"C9",X"C5",X"79",X"01",X"00",X"00",X"16",X"12",X"92",X"FA",X"DC",X"FA",
X"0C",X"92",X"FA",X"DC",X"FA",X"04",X"92",X"FA",X"DC",X"FA",X"0D",X"92",X"82",X"07",X"6F",X"26",
X"00",X"11",X"F0",X"FA",X"19",X"5E",X"23",X"6E",X"60",X"51",X"7C",X"AA",X"C1",X"C8",X"EB",X"C9",
X"00",X"FF",X"16",X"FF",X"2C",X"FC",X"42",X"F7",X"58",X"F1",X"6C",X"E8",X"80",X"DE",X"93",X"D2",
X"A5",X"C4",X"B5",X"B5",X"C4",X"A5",X"D2",X"93",X"DE",X"80",X"E8",X"6C",X"F1",X"58",X"F7",X"42",
X"FC",X"2C",X"FF",X"16",X"FF",X"00",X"78",X"C6",X"F0",X"D8",X"C5",X"D5",X"E5",X"CD",X"61",X"FB",
X"0E",X"20",X"F3",X"1A",X"CD",X"53",X"FB",X"47",X"3E",X"02",X"D3",X"6A",X"70",X"3A",X"FE",X"DF",
X"D3",X"6A",X"13",X"1A",X"CD",X"53",X"FB",X"47",X"3E",X"03",X"D3",X"6A",X"70",X"3A",X"FE",X"DF",
X"D3",X"6A",X"13",X"23",X"0D",X"C2",X"23",X"FB",X"FB",X"3A",X"FE",X"DF",X"D3",X"6A",X"AF",X"E1",
X"D1",X"C1",X"C9",X"E5",X"C5",X"67",X"06",X"08",X"29",X"1F",X"05",X"C2",X"58",X"FB",X"C1",X"E1",
X"C9",X"78",X"0F",X"0F",X"0F",X"47",X"E6",X"F0",X"4F",X"78",X"E6",X"03",X"47",X"21",X"00",X"3C",
X"09",X"C9",X"78",X"C6",X"F0",X"D8",X"7A",X"C6",X"D1",X"D8",X"7B",X"C6",X"8C",X"D8",X"C5",X"D5",
X"E5",X"CD",X"61",X"FB",X"7B",X"07",X"5F",X"3E",X"40",X"82",X"57",X"06",X"02",X"D5",X"0E",X"10",
X"F3",X"3E",X"02",X"D3",X"6A",X"1A",X"24",X"24",X"77",X"25",X"25",X"B6",X"12",X"3E",X"03",X"D3",
X"6A",X"1A",X"24",X"24",X"77",X"25",X"25",X"B6",X"12",X"23",X"13",X"0D",X"C2",X"91",X"FB",X"3A",
X"FE",X"DF",X"D3",X"6A",X"FB",X"D1",X"14",X"05",X"C2",X"8D",X"FB",X"C3",X"4E",X"FB",X"78",X"C6",
X"F0",X"D8",X"7A",X"C6",X"D1",X"D8",X"7B",X"C6",X"8C",X"D8",X"C5",X"D5",X"E5",X"7B",X"07",X"6F",
X"3E",X"40",X"82",X"67",X"E5",X"CD",X"61",X"FB",X"11",X"00",X"02",X"19",X"EB",X"E1",X"06",X"02",
X"E5",X"0E",X"10",X"F3",X"3E",X"02",X"D3",X"6A",X"1A",X"77",X"3E",X"03",X"D3",X"6A",X"1A",X"77",
X"13",X"23",X"0D",X"C2",X"E4",X"FB",X"3A",X"FE",X"DF",X"D3",X"6A",X"FB",X"E1",X"24",X"05",X"C2",
X"E0",X"FB",X"C3",X"4E",X"FB",X"CD",X"BA",X"F8",X"D8",X"C5",X"D5",X"E5",X"CD",X"34",X"FC",X"CD",
X"BA",X"F8",X"DA",X"30",X"FC",X"78",X"91",X"D4",X"34",X"FC",X"05",X"04",X"CD",X"84",X"F8",X"CD",
X"34",X"FC",X"C5",X"41",X"CD",X"F0",X"F8",X"C1",X"CD",X"34",X"FC",X"4F",X"B8",X"C2",X"1B",X"FC",
X"E1",X"D1",X"C1",X"C9",X"EB",X"78",X"41",X"4F",X"C9",X"CD",X"8A",X"FC",X"D8",X"C5",X"E5",X"E5",
X"7C",X"C6",X"40",X"67",X"47",X"4D",X"CD",X"7A",X"FC",X"DA",X"6C",X"FC",X"F3",X"3E",X"02",X"D3",
X"6A",X"0A",X"77",X"2B",X"77",X"3E",X"03",X"D3",X"6A",X"0A",X"77",X"23",X"77",X"7C",X"25",X"05",
X"D6",X"40",X"92",X"C2",X"4D",X"FC",X"3A",X"FE",X"DF",X"D3",X"6A",X"FB",X"E1",X"7D",X"2D",X"93",
X"C2",X"3F",X"FC",X"E1",X"CD",X"7A",X"FC",X"A7",X"C1",X"C9",X"7D",X"2E",X"F5",X"93",X"07",X"D8",
X"3C",X"83",X"D8",X"C6",X"0A",X"D8",X"D6",X"0A",X"6F",X"C9",X"7A",X"C6",X"D1",X"D8",X"7B",X"C6",
X"0B",X"D8",X"7C",X"C6",X"D0",X"D8",X"7D",X"C6",X"0A",X"D8",X"7C",X"92",X"D8",X"7D",X"93",X"C9",
X"CD",X"8A",X"FC",X"D8",X"C5",X"E5",X"E5",X"7C",X"C6",X"40",X"47",X"4D",X"CD",X"DD",X"FC",X"DA",
X"CF",X"FC",X"7C",X"C6",X"40",X"67",X"D5",X"3E",X"02",X"32",X"D6",X"DF",X"CD",X"EA",X"FC",X"3E",
X"03",X"32",X"D6",X"DF",X"CD",X"EA",X"FC",X"D1",X"7D",X"2D",X"0D",X"93",X"C2",X"B6",X"FC",X"E1",
X"7C",X"25",X"92",X"C2",X"A6",X"FC",X"E1",X"CD",X"DD",X"FC",X"A7",X"C1",X"C9",X"7C",X"92",X"07",
X"3C",X"82",X"67",X"3E",X"2F",X"94",X"D0",X"26",X"2F",X"C9",X"F3",X"E5",X"3A",X"D6",X"DF",X"D3",
X"6A",X"0A",X"21",X"00",X"00",X"16",X"08",X"29",X"29",X"07",X"D2",X"00",X"FD",X"2C",X"2C",X"2C",
X"15",X"C2",X"F7",X"FC",X"55",X"5C",X"3A",X"FE",X"DF",X"D3",X"6A",X"E1",X"3A",X"D6",X"DF",X"D3",
X"6A",X"73",X"25",X"72",X"3A",X"FE",X"DF",X"D3",X"6A",X"24",X"FB",X"C9",X"F5",X"E6",X"04",X"CA",
X"29",X"FD",X"F1",X"3A",X"20",X"DF",X"C3",X"2A",X"FD",X"F1",X"32",X"DC",X"DF",X"C9",X"E5",X"21",
X"39",X"FE",X"C3",X"39",X"FD",X"E5",X"21",X"32",X"FE",X"C5",X"01",X"00",X"20",X"C3",X"42",X"FD",
X"E5",X"C5",X"3E",X"88",X"32",X"FF",X"DF",X"32",X"FA",X"DF",X"79",X"32",X"FD",X"DF",X"3E",X"25",
X"D3",X"79",X"3E",X"A6",X"D3",X"63",X"78",X"D3",X"62",X"3E",X"10",X"D3",X"63",X"3E",X"76",X"D3",
X"63",X"3E",X"C3",X"32",X"04",X"DF",X"22",X"FB",X"DF",X"21",X"71",X"FD",X"22",X"05",X"DF",X"C1",
X"E1",X"F5",X"C5",X"D5",X"E5",X"3A",X"FA",X"DF",X"A7",X"C2",X"94",X"FD",X"3C",X"32",X"FA",X"DF",
X"D3",X"60",X"3E",X"25",X"D3",X"79",X"3E",X"FD",X"D3",X"75",X"3E",X"61",X"D3",X"74",X"FB",X"E1",
X"D1",X"C1",X"F1",X"C9",X"AF",X"32",X"FA",X"DF",X"2A",X"FB",X"DF",X"7E",X"A7",X"C2",X"C6",X"FD",
X"3E",X"FF",X"D3",X"75",X"AF",X"32",X"FF",X"DF",X"3E",X"76",X"D3",X"63",X"3E",X"96",X"D3",X"63",
X"3E",X"0D",X"D3",X"62",X"3E",X"FF",X"D3",X"75",X"3E",X"20",X"D3",X"74",X"21",X"00",X"E0",X"22",
X"05",X"DF",X"FB",X"C3",X"8F",X"FD",X"F2",X"D0",X"FD",X"32",X"FF",X"DF",X"23",X"C3",X"9B",X"FD",
X"E6",X"70",X"0F",X"0F",X"0F",X"0F",X"4F",X"3A",X"FD",X"DF",X"81",X"E6",X"07",X"4F",X"7E",X"23",
X"22",X"FB",X"DF",X"E6",X"0F",X"FE",X"0D",X"F2",X"0E",X"FE",X"3D",X"07",X"5F",X"16",X"00",X"21",
X"1A",X"FE",X"19",X"56",X"23",X"5E",X"0D",X"CA",X"04",X"FE",X"A7",X"7A",X"1F",X"57",X"7B",X"1F",
X"5F",X"C3",X"F6",X"FD",X"7B",X"D3",X"61",X"7A",X"D3",X"61",X"3E",X"05",X"D3",X"79",X"3A",X"FF",
X"DF",X"E6",X"7F",X"07",X"3D",X"D3",X"60",X"C3",X"86",X"FD",X"EE",X"EA",X"E1",X"78",X"D4",X"E0",
X"C8",X"D6",X"BD",X"A0",X"B2",X"FB",X"A8",X"EB",X"9F",X"70",X"96",X"88",X"8E",X"0C",X"86",X"01",
X"7D",X"E1",X"90",X"5B",X"90",X"51",X"A0",X"65",X"00",X"88",X"5B",X"00",X"3E",X"AF",X"D3",X"1A",
X"3E",X"FF",X"D3",X"1B",X"07",X"D3",X"1B",X"07",X"D3",X"1B",X"07",X"D3",X"1B",X"07",X"D3",X"1B",
X"07",X"D3",X"1B",X"07",X"D3",X"1B",X"07",X"D3",X"1B",X"C9",X"3E",X"FF",X"D3",X"1B",X"D3",X"1B",
X"D3",X"1B",X"D3",X"1B",X"D3",X"1B",X"D3",X"1B",X"D3",X"1B",X"D3",X"1B",X"DB",X"1B",X"C9",X"21",
X"00",X"00",X"11",X"00",X"00",X"4F",X"CD",X"40",X"FE",X"79",X"CD",X"42",X"FE",X"7A",X"CD",X"42",
X"FE",X"7B",X"CD",X"42",X"FE",X"7C",X"CD",X"42",X"FE",X"7D",X"CD",X"42",X"FE",X"3E",X"95",X"CD",
X"42",X"FE",X"11",X"80",X"80",X"21",X"20",X"4E",X"CD",X"5A",X"FE",X"4F",X"92",X"BB",X"79",X"D0",
X"2B",X"7C",X"B5",X"C2",X"98",X"FE",X"D6",X"01",X"C9",X"C5",X"D5",X"E5",X"11",X"FF",X"00",X"CD",
X"95",X"FE",X"E1",X"D1",X"C1",X"C9",X"CD",X"3D",X"FE",X"06",X"10",X"CD",X"40",X"FE",X"05",X"C2",
X"BB",X"FE",X"CD",X"3C",X"FE",X"3E",X"40",X"CD",X"6F",X"FE",X"FE",X"01",X"C0",X"3E",X"77",X"CD",
X"6F",X"FE",X"E6",X"FE",X"C0",X"3E",X"69",X"CD",X"6F",X"FE",X"FE",X"01",X"CA",X"CD",X"FE",X"B7",
X"C9",X"CD",X"A9",X"FE",X"D8",X"E5",X"EB",X"29",X"5C",X"65",X"AF",X"57",X"6F",X"3E",X"51",X"CD",
X"75",X"FE",X"E1",X"D8",X"06",X"00",X"E5",X"11",X"01",X"FF",X"CD",X"95",X"FE",X"E1",X"FE",X"FE",
X"C0",X"CD",X"5A",X"FE",X"77",X"23",X"CD",X"5A",X"FE",X"77",X"23",X"05",X"C2",X"01",X"FF",X"C9",
X"3E",X"02",X"D3",X"6A",X"3A",X"80",X"28",X"E6",X"04",X"C0",X"AF",X"D3",X"6A",X"CD",X"24",X"FF",
X"DA",X"3D",X"FE",X"E9",X"CD",X"B6",X"FE",X"37",X"C0",X"11",X"00",X"00",X"21",X"00",X"C0",X"CD",
X"E1",X"FE",X"D8",X"CD",X"42",X"FF",X"D0",X"2A",X"C6",X"C1",X"EB",X"21",X"00",X"C0",X"CD",X"E1",
X"FE",X"D8",X"CD",X"BA",X"FF",X"37",X"C0",X"2A",X"16",X"C0",X"EB",X"2A",X"0E",X"C0",X"3A",X"10",
X"C0",X"19",X"3D",X"C2",X"51",X"FF",X"EB",X"2A",X"1C",X"C0",X"19",X"22",X"F0",X"C1",X"EB",X"2A",
X"11",X"C0",X"4D",X"44",X"29",X"29",X"29",X"29",X"E5",X"79",X"E6",X"0F",X"C5",X"CC",X"9E",X"FF",
X"D5",X"E5",X"06",X"0B",X"11",X"CB",X"FF",X"1A",X"BE",X"C2",X"AA",X"FF",X"13",X"23",X"05",X"C2",
X"77",X"FF",X"C1",X"C1",X"C1",X"11",X"0F",X"00",X"19",X"5E",X"23",X"56",X"1B",X"1B",X"2A",X"F0",
X"C1",X"3A",X"0D",X"C0",X"19",X"3D",X"C2",X"94",X"FF",X"D1",X"5A",X"57",X"19",X"EB",X"D5",X"21",
X"00",X"C2",X"E5",X"CD",X"E1",X"FE",X"E1",X"D1",X"13",X"C9",X"E1",X"11",X"20",X"00",X"19",X"D1",
X"C1",X"0B",X"78",X"B1",X"C2",X"69",X"FF",X"C1",X"37",X"C9",X"21",X"36",X"C0",X"7E",X"23",X"FE",
X"46",X"C0",X"7E",X"23",X"FE",X"41",X"C0",X"7E",X"FE",X"54",X"C9",X"42",X"4F",X"4F",X"54",X"20",
X"20",X"20",X"20",X"52",X"4F",X"4D",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1B",X"59",X"2C",X"2C",X"2D",X"DE",X"E8",X"D8",
X"D1",X"DA",X"D0",X"20",X"D7",X"D0",X"D3",X"E0",X"E3",X"D7",X"DA",X"D8",X"2D",X"00",X"FF",X"F6");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -1,4 +0,0 @@
set_global_assignment -name IP_TOOL_NAME "ALTPLL"
set_global_assignment -name IP_TOOL_VERSION "13.1"
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "clk20mhz.v"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "clk20mhz.ppf"]

View File

@@ -1,48 +0,0 @@
-------------------------------------------------------------------------------
--
-- Delta-Sigma DAC
--
-- Refer to Xilinx Application Note XAPP154.
--
-- This DAC requires an external RC low-pass filter:
--
-- dac_o 0---XXXXX---+---0 analog audio
-- 3k3 |
-- === 4n7
-- |
-- GND
--
-------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity dac is
generic (
C_bits : integer := 16
);
port (
clk_i : in std_logic;
res_n_i : in std_logic;
dac_i : in std_logic_vector(C_bits-1 downto 0);
dac_o : out std_logic
);
end dac;
architecture rtl of dac is
signal sig_in: unsigned(C_bits downto 0);
begin
seq: process(clk_i, res_n_i)
begin
if res_n_i = '0' then
sig_in <= to_unsigned(2**C_bits, sig_in'length);
dac_o <= '0';
elsif rising_edge(clk_i) then
-- not dac_i(C_bits-1) effectively adds 0x8..0 to dac_i
--sig_in <= sig_in + unsigned(sig_in(C_bits) & (not dac_i(C_bits-1)) & dac_i(C_bits-2 downto 0));
sig_in <= sig_in + unsigned(sig_in(C_bits) & dac_i);
dac_o <= sig_in(C_bits);
end if;
end process seq;
end rtl;

View File

@@ -1,511 +0,0 @@
//
// mist_io.v
//
// mist_io for the MiST board
// http://code.google.com/p/mist-board/
//
// Copyright (c) 2014 Till Harbaum <till@harbaum.org>
//
// This source file is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This source file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
///////////////////////////////////////////////////////////////////////
//
// Use buffer to access SD card. It's time-critical part.
// Made module synchroneous with 2 clock domains: clk_sys and SPI_SCK
// (Sorgelig)
//
// for synchronous projects default value for PS2DIV is fine for any frequency of system clock.
// clk_ps2 = clk_sys/(PS2DIV*2)
//
module mist_io #(parameter STRLEN=0, parameter PS2DIV=100)
(
// parameter STRLEN and the actual length of conf_str have to match
input [(8*STRLEN)-1:0] conf_str,
// Global clock. It should be around 100MHz (higher is better).
input clk_sys,
// Global SPI clock from ARM. 24MHz
input SPI_SCK,
input CONF_DATA0,
input SPI_SS2,
output SPI_DO,
input SPI_DI,
output reg [7:0] joystick_0,
output reg [7:0] joystick_1,
output reg [15:0] joystick_analog_0,
output reg [15:0] joystick_analog_1,
output [1:0] buttons,
output [1:0] switches,
output scandoubler_disable,
output ypbpr,
output reg [31:0] status,
// SD config
input sd_conf,
input sd_sdhc,
output img_mounted, // signaling that new image has been mounted
output reg [31:0] img_size, // size of image in bytes
// SD block level access
input [31:0] sd_lba,
input sd_rd,
input sd_wr,
output reg sd_ack,
output reg sd_ack_conf,
// SD byte level access. Signals for 2-PORT altsyncram.
output reg [8:0] sd_buff_addr,
output reg [7:0] sd_buff_dout,
input [7:0] sd_buff_din,
output reg sd_buff_wr,
output reg sd_dout_strobe,
output reg sd_din_strobe,
// ps2 keyboard emulation
output ps2_kbd_clk,
output reg ps2_kbd_data,
output ps2_mouse_clk,
output reg ps2_mouse_data,
input ps2_caps_led,
// ARM -> FPGA download
output reg ioctl_download = 0, // signal indicating an active download
output reg [7:0] ioctl_index, // menu index used to upload the file
output ioctl_wr,
output reg [24:0] ioctl_addr,
output reg [7:0] ioctl_dout
);
reg [7:0] b_data;
reg [6:0] sbuf;
reg [7:0] cmd;
reg [2:0] bit_cnt; // counts bits 0-7 0-7 ...
reg [9:0] byte_cnt; // counts bytes
reg [7:0] but_sw;
reg [2:0] stick_idx;
reg mount_strobe = 0;
assign img_mounted = mount_strobe;
assign buttons = but_sw[1:0];
assign switches = but_sw[3:2];
assign scandoubler_disable = but_sw[4];
assign ypbpr = but_sw[5];
wire [7:0] spi_dout = { sbuf, SPI_DI};
// this variant of user_io is for 8 bit cores (type == a4) only
wire [7:0] core_type = 8'ha4;
// command byte read by the io controller
wire [7:0] sd_cmd = { 4'h5, sd_conf, sd_sdhc, sd_wr, sd_rd };
reg spi_do;
assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do;
wire [7:0] kbd_led = { 2'b01, 4'b0000, ps2_caps_led, 1'b1};
// drive MISO only when transmitting core id
always@(negedge SPI_SCK) begin
if(!CONF_DATA0) begin
// first byte returned is always core type, further bytes are
// command dependent
if(byte_cnt == 0) begin
spi_do <= core_type[~bit_cnt];
end else begin
case(cmd)
// reading config string
8'h14: begin
// returning a byte from string
if(byte_cnt < STRLEN + 1) spi_do <= conf_str[{STRLEN - byte_cnt,~bit_cnt}];
else spi_do <= 0;
end
// reading sd card status
8'h16: begin
if(byte_cnt == 1) spi_do <= sd_cmd[~bit_cnt];
else if((byte_cnt >= 2) && (byte_cnt < 6)) spi_do <= sd_lba[{5-byte_cnt, ~bit_cnt}];
else spi_do <= 0;
end
// reading sd card write data
8'h18:
spi_do <= b_data[~bit_cnt];
// reading keyboard LED status
8'h1f:
spi_do <= kbd_led[~bit_cnt];
default:
spi_do <= 0;
endcase
end
end
end
reg b_wr2,b_wr3;
always @(negedge clk_sys) begin
b_wr3 <= b_wr2;
sd_buff_wr <= b_wr3;
end
// SPI receiver
always@(posedge SPI_SCK or posedge CONF_DATA0) begin
if(CONF_DATA0) begin
b_wr2 <= 0;
bit_cnt <= 0;
byte_cnt <= 0;
sd_ack <= 0;
sd_ack_conf <= 0;
sd_dout_strobe <= 0;
sd_din_strobe <= 0;
end else begin
b_wr2 <= 0;
sd_dout_strobe <= 0;
sd_din_strobe <= 0;
sbuf <= spi_dout[6:0];
bit_cnt <= bit_cnt + 1'd1;
if(bit_cnt == 5) begin
if (byte_cnt == 0) sd_buff_addr <= 0;
if((byte_cnt != 0) & (sd_buff_addr != 511)) sd_buff_addr <= sd_buff_addr + 1'b1;
if((byte_cnt == 1) & ((cmd == 8'h17) | (cmd == 8'h19))) sd_buff_addr <= 0;
end
// finished reading command byte
if(bit_cnt == 7) begin
if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1;
if(byte_cnt == 0) begin
cmd <= spi_dout;
if(spi_dout == 8'h19) begin
sd_ack_conf <= 1;
sd_buff_addr <= 0;
end
if((spi_dout == 8'h17) || (spi_dout == 8'h18)) begin
sd_ack <= 1;
sd_buff_addr <= 0;
end
if(spi_dout == 8'h18) begin
b_data <= sd_buff_din;
sd_din_strobe <= 1'b1;
mount_strobe <= 0;
end
end else begin
case(cmd)
// buttons and switches
8'h01: but_sw <= spi_dout;
8'h02: joystick_0 <= spi_dout;
8'h03: joystick_1 <= spi_dout;
// store incoming ps2 mouse bytes
8'h04: begin
ps2_mouse_fifo[ps2_mouse_wptr] <= spi_dout;
ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1;
end
// store incoming ps2 keyboard bytes
8'h05: begin
ps2_kbd_fifo[ps2_kbd_wptr] <= spi_dout;
ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1;
end
8'h15: status[7:0] <= spi_dout;
// send SD config IO -> FPGA
// flag that download begins
// sd card knows data is config if sd_dout_strobe is asserted
// with sd_ack still being inactive (low)
8'h19: begin
// flag that download begins
sd_buff_dout <= spi_dout;
// sd card knows data is config if sd_dout_strobe is asserted
// with sd_ack still being inactive (low)
sd_dout_strobe <= 1;
end
// send sector IO -> FPGA
// flag that download begins
8'h17: begin
sd_buff_dout <= spi_dout;
sd_dout_strobe <= 1;
b_wr2 <= 1;
end
8'h18: begin
b_data <= sd_buff_din;
sd_din_strobe <= 1;
end
// joystick analog
8'h1a: begin
// first byte is joystick index
if(byte_cnt == 1) stick_idx <= spi_dout[2:0];
else if(byte_cnt == 2) begin
// second byte is x axis
if(stick_idx == 0) joystick_analog_0[15:8] <= spi_dout;
else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_dout;
end else if(byte_cnt == 3) begin
// third byte is y axis
if(stick_idx == 0) joystick_analog_0[7:0] <= spi_dout;
else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_dout;
end
end
// notify image selection
8'h1c: mount_strobe <= 1;
// send image info
8'h1d: if(byte_cnt<5) img_size[(byte_cnt-1)<<3 +:8] <= spi_dout;
// status, 32bit version
8'h1e: if(byte_cnt<5) status[(byte_cnt-1)<<3 +:8] <= spi_dout;
default: ;
endcase
end
end
end
end
/////////////////////////////// PS2 ///////////////////////////////
// 8 byte fifos to store ps2 bytes
localparam PS2_FIFO_BITS = 3;
reg clk_ps2;
always @(negedge clk_sys) begin
integer cnt;
cnt <= cnt + 1'd1;
if(cnt == PS2DIV) begin
clk_ps2 <= ~clk_ps2;
cnt <= 0;
end
end
// keyboard
reg [7:0] ps2_kbd_fifo[1<<PS2_FIFO_BITS];
reg [PS2_FIFO_BITS-1:0] ps2_kbd_wptr;
reg [PS2_FIFO_BITS-1:0] ps2_kbd_rptr;
// ps2 transmitter state machine
reg [3:0] ps2_kbd_tx_state;
reg [7:0] ps2_kbd_tx_byte;
reg ps2_kbd_parity;
assign ps2_kbd_clk = clk_ps2 || (ps2_kbd_tx_state == 0);
// ps2 transmitter
// Takes a byte from the FIFO and sends it in a ps2 compliant serial format.
reg ps2_kbd_r_inc;
always@(posedge clk_sys) begin
reg old_clk;
old_clk <= clk_ps2;
if(~old_clk & clk_ps2) begin
ps2_kbd_r_inc <= 0;
if(ps2_kbd_r_inc) ps2_kbd_rptr <= ps2_kbd_rptr + 1'd1;
// transmitter is idle?
if(ps2_kbd_tx_state == 0) begin
// data in fifo present?
if(ps2_kbd_wptr != ps2_kbd_rptr) begin
// load tx register from fifo
ps2_kbd_tx_byte <= ps2_kbd_fifo[ps2_kbd_rptr];
ps2_kbd_r_inc <= 1;
// reset parity
ps2_kbd_parity <= 1;
// start transmitter
ps2_kbd_tx_state <= 1;
// put start bit on data line
ps2_kbd_data <= 0; // start bit is 0
end
end else begin
// transmission of 8 data bits
if((ps2_kbd_tx_state >= 1)&&(ps2_kbd_tx_state < 9)) begin
ps2_kbd_data <= ps2_kbd_tx_byte[0]; // data bits
ps2_kbd_tx_byte[6:0] <= ps2_kbd_tx_byte[7:1]; // shift down
if(ps2_kbd_tx_byte[0])
ps2_kbd_parity <= !ps2_kbd_parity;
end
// transmission of parity
if(ps2_kbd_tx_state == 9) ps2_kbd_data <= ps2_kbd_parity;
// transmission of stop bit
if(ps2_kbd_tx_state == 10) ps2_kbd_data <= 1; // stop bit is 1
// advance state machine
if(ps2_kbd_tx_state < 11) ps2_kbd_tx_state <= ps2_kbd_tx_state + 1'd1;
else ps2_kbd_tx_state <= 0;
end
end
end
// mouse
reg [7:0] ps2_mouse_fifo[1<<PS2_FIFO_BITS];
reg [PS2_FIFO_BITS-1:0] ps2_mouse_wptr;
reg [PS2_FIFO_BITS-1:0] ps2_mouse_rptr;
// ps2 transmitter state machine
reg [3:0] ps2_mouse_tx_state;
reg [7:0] ps2_mouse_tx_byte;
reg ps2_mouse_parity;
assign ps2_mouse_clk = clk_ps2 || (ps2_mouse_tx_state == 0);
// ps2 transmitter
// Takes a byte from the FIFO and sends it in a ps2 compliant serial format.
reg ps2_mouse_r_inc;
always@(posedge clk_sys) begin
reg old_clk;
old_clk <= clk_ps2;
if(~old_clk & clk_ps2) begin
ps2_mouse_r_inc <= 0;
if(ps2_mouse_r_inc) ps2_mouse_rptr <= ps2_mouse_rptr + 1'd1;
// transmitter is idle?
if(ps2_mouse_tx_state == 0) begin
// data in fifo present?
if(ps2_mouse_wptr != ps2_mouse_rptr) begin
// load tx register from fifo
ps2_mouse_tx_byte <= ps2_mouse_fifo[ps2_mouse_rptr];
ps2_mouse_r_inc <= 1;
// reset parity
ps2_mouse_parity <= 1;
// start transmitter
ps2_mouse_tx_state <= 1;
// put start bit on data line
ps2_mouse_data <= 0; // start bit is 0
end
end else begin
// transmission of 8 data bits
if((ps2_mouse_tx_state >= 1)&&(ps2_mouse_tx_state < 9)) begin
ps2_mouse_data <= ps2_mouse_tx_byte[0]; // data bits
ps2_mouse_tx_byte[6:0] <= ps2_mouse_tx_byte[7:1]; // shift down
if(ps2_mouse_tx_byte[0])
ps2_mouse_parity <= !ps2_mouse_parity;
end
// transmission of parity
if(ps2_mouse_tx_state == 9) ps2_mouse_data <= ps2_mouse_parity;
// transmission of stop bit
if(ps2_mouse_tx_state == 10) ps2_mouse_data <= 1; // stop bit is 1
// advance state machine
if(ps2_mouse_tx_state < 11) ps2_mouse_tx_state <= ps2_mouse_tx_state + 1'd1;
else ps2_mouse_tx_state <= 0;
end
end
end
/////////////////////////////// DOWNLOADING ///////////////////////////////
reg [7:0] data_w;
reg [24:0] addr_w;
reg rclk = 0;
localparam UIO_FILE_TX = 8'h53;
localparam UIO_FILE_TX_DAT = 8'h54;
localparam UIO_FILE_INDEX = 8'h55;
// data_io has its own SPI interface to the io controller
always@(posedge SPI_SCK, posedge SPI_SS2) begin
reg [6:0] sbuf;
reg [7:0] cmd;
reg [4:0] cnt;
reg [24:0] addr;
if(SPI_SS2) cnt <= 0;
else begin
rclk <= 0;
// don't shift in last bit. It is evaluated directly
// when writing to ram
if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI};
// increase target address after write
if(rclk) addr <= addr + 1'd1;
// count 0-7 8-15 8-15 ...
if(cnt < 15) cnt <= cnt + 1'd1;
else cnt <= 8;
// finished command byte
if(cnt == 7) cmd <= {sbuf, SPI_DI};
// prepare/end transmission
if((cmd == UIO_FILE_TX) && (cnt == 15)) begin
// prepare
if(SPI_DI) begin
addr <= 0;
ioctl_download <= 1;
end else begin
addr_w <= addr;
ioctl_download <= 0;
end
end
// command 0x54: UIO_FILE_TX
if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin
addr_w <= addr;
data_w <= {sbuf, SPI_DI};
rclk <= 1;
end
// expose file (menu) index
if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI};
end
end
assign ioctl_wr = |ioctl_wrd;
reg [1:0] ioctl_wrd;
always@(negedge clk_sys) begin
reg rclkD, rclkD2;
rclkD <= rclk;
rclkD2 <= rclkD;
ioctl_wrd<= {ioctl_wrd[0],1'b0};
if(rclkD & ~rclkD2) begin
ioctl_dout <= data_w;
ioctl_addr <= addr_w;
ioctl_wrd <= 2'b11;
end
end
endmodule

View File

@@ -1,179 +0,0 @@
// A simple OSD implementation. Can be hooked up between a cores
// VGA output and the physical VGA pins
module osd (
// OSDs pixel clock, should be synchronous to cores pixel clock to
// avoid jitter.
input clk_sys,
// SPI interface
input SPI_SCK,
input SPI_SS3,
input SPI_DI,
// VGA signals coming from core
input [5:0] R_in,
input [5:0] G_in,
input [5:0] B_in,
input HSync,
input VSync,
// VGA signals going to video connector
output [5:0] R_out,
output [5:0] G_out,
output [5:0] B_out
);
parameter OSD_X_OFFSET = 10'd0;
parameter OSD_Y_OFFSET = 10'd0;
parameter OSD_COLOR = 3'd0;
localparam OSD_WIDTH = 10'd256;
localparam OSD_HEIGHT = 10'd128;
// *********************************************************************************
// spi client
// *********************************************************************************
// this core supports only the display related OSD commands
// of the minimig
reg osd_enable;
(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[2047:0]; // the OSD buffer itself
// the OSD has its own SPI interface to the io controller
always@(posedge SPI_SCK, posedge SPI_SS3) begin
reg [4:0] cnt;
reg [10:0] bcnt;
reg [7:0] sbuf;
reg [7:0] cmd;
if(SPI_SS3) begin
cnt <= 0;
bcnt <= 0;
end else begin
sbuf <= {sbuf[6:0], SPI_DI};
// 0:7 is command, rest payload
if(cnt < 15) cnt <= cnt + 1'd1;
else cnt <= 8;
if(cnt == 7) begin
cmd <= {sbuf[6:0], SPI_DI};
// lower three command bits are line address
bcnt <= {sbuf[1:0], SPI_DI, 8'h00};
// command 0x40: OSDCMDENABLE, OSDCMDDISABLE
if(sbuf[6:3] == 4'b0100) osd_enable <= SPI_DI;
end
// command 0x20: OSDCMDWRITE
if((cmd[7:3] == 5'b00100) && (cnt == 15)) begin
osd_buffer[bcnt] <= {sbuf[6:0], SPI_DI};
bcnt <= bcnt + 1'd1;
end
end
end
// *********************************************************************************
// video timing and sync polarity anaylsis
// *********************************************************************************
// horizontal counter
reg [9:0] h_cnt;
reg [9:0] hs_low, hs_high;
wire hs_pol = hs_high < hs_low;
wire [9:0] dsp_width = hs_pol ? hs_low : hs_high;
// vertical counter
reg [9:0] v_cnt;
reg [9:0] vs_low, vs_high;
wire vs_pol = vs_high < vs_low;
wire [9:0] dsp_height = vs_pol ? vs_low : vs_high;
wire doublescan = (dsp_height>350);
reg ce_pix;
always @(negedge clk_sys) begin
integer cnt = 0;
integer pixsz, pixcnt;
reg hs;
cnt <= cnt + 1;
hs <= HSync;
pixcnt <= pixcnt + 1;
if(pixcnt == pixsz) pixcnt <= 0;
ce_pix <= !pixcnt;
if(hs && ~HSync) begin
cnt <= 0;
pixsz <= (cnt >> 9) - 1;
pixcnt <= 0;
ce_pix <= 1;
end
end
always @(posedge clk_sys) begin
reg hsD, hsD2;
reg vsD, vsD2;
if(ce_pix) begin
// bring hsync into local clock domain
hsD <= HSync;
hsD2 <= hsD;
// falling edge of HSync
if(!hsD && hsD2) begin
h_cnt <= 0;
hs_high <= h_cnt;
end
// rising edge of HSync
else if(hsD && !hsD2) begin
h_cnt <= 0;
hs_low <= h_cnt;
v_cnt <= v_cnt + 1'd1;
end else begin
h_cnt <= h_cnt + 1'd1;
end
vsD <= VSync;
vsD2 <= vsD;
// falling edge of VSync
if(!vsD && vsD2) begin
v_cnt <= 0;
vs_high <= v_cnt;
end
// rising edge of VSync
else if(vsD && !vsD2) begin
v_cnt <= 0;
vs_low <= v_cnt;
end
end
end
// area in which OSD is being displayed
wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET;
wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH;
wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<<doublescan))>> 1) + OSD_Y_OFFSET;
wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<<doublescan);
wire [9:0] osd_hcnt = h_cnt - h_osd_start + 1'd1; // one pixel offset for osd_byte register
wire [9:0] osd_vcnt = v_cnt - v_osd_start;
wire osd_de = osd_enable &&
(HSync != hs_pol) && (h_cnt >= h_osd_start) && (h_cnt < h_osd_end) &&
(VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end);
reg [7:0] osd_byte;
always @(posedge clk_sys) if(ce_pix) osd_byte <= osd_buffer[{doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt[7:0]}];
wire osd_pixel = osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]];
assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]};
assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]};
assign B_out = !osd_de ? B_in : {osd_pixel, osd_pixel, OSD_COLOR[0], B_in[5:3]};
endmodule

View File

@@ -1,195 +0,0 @@
//
// scandoubler.v
//
// Copyright (c) 2015 Till Harbaum <till@harbaum.org>
// Copyright (c) 2017 Sorgelig
//
// This source file is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This source file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// TODO: Delay vsync one line
module scandoubler #(parameter LENGTH, parameter HALF_DEPTH)
(
// system interface
input clk_sys,
input ce_pix,
input ce_pix_actual,
input hq2x,
// shifter video interface
input hs_in,
input vs_in,
input line_start,
input [DWIDTH:0] r_in,
input [DWIDTH:0] g_in,
input [DWIDTH:0] b_in,
input mono,
// output interface
output reg hs_out,
output vs_out,
output [DWIDTH:0] r_out,
output [DWIDTH:0] g_out,
output [DWIDTH:0] b_out
);
localparam DWIDTH = HALF_DEPTH ? 2 : 5;
assign vs_out = vs_in;
reg [2:0] phase;
reg [2:0] ce_div;
reg [7:0] pix_len = 0;
wire [7:0] pl = pix_len + 1'b1;
reg ce_x1, ce_x4;
reg req_line_reset;
wire ls_in = hs_in | line_start;
always @(negedge clk_sys) begin
reg old_ce;
reg [2:0] ce_cnt;
reg [7:0] pixsz2, pixsz4 = 0;
old_ce <= ce_pix;
if(~&pix_len) pix_len <= pix_len + 1'd1;
ce_x4 <= 0;
ce_x1 <= 0;
// use such odd comparison to place c_x4 evenly if master clock isn't multiple 4.
if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin
phase <= phase + 1'd1;
ce_x4 <= 1;
end
if(~old_ce & ce_pix) begin
pixsz2 <= {1'b0, pl[7:1]};
pixsz4 <= {2'b00, pl[7:2]};
ce_x1 <= 1;
ce_x4 <= 1;
pix_len <= 0;
phase <= phase + 1'd1;
ce_cnt <= ce_cnt + 1'd1;
if(ce_pix_actual) begin
phase <= 0;
ce_div <= ce_cnt + 1'd1;
ce_cnt <= 0;
req_line_reset <= 0;
end
if(ls_in) req_line_reset <= 1;
end
end
reg ce_sd;
always @(*) begin
case(ce_div)
2: ce_sd = !phase[0];
4: ce_sd = !phase[1:0];
default: ce_sd <= 1;
endcase
end
`define BITS_TO_FIT(N) ( \
N <= 2 ? 0 : \
N <= 4 ? 1 : \
N <= 8 ? 2 : \
N <= 16 ? 3 : \
N <= 32 ? 4 : \
N <= 64 ? 5 : \
N <= 128 ? 6 : \
N <= 256 ? 7 : \
N <= 512 ? 8 : \
N <=1024 ? 9 : 10 )
localparam AWIDTH = `BITS_TO_FIT(LENGTH);
Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x
(
.clk(clk_sys),
.ce_x4(ce_x4 & ce_sd),
.inputpixel({b_in,g_in,r_in}),
.mono(mono),
.disable_hq2x(~hq2x),
.reset_frame(vs_in),
.reset_line(req_line_reset),
.read_y(sd_line),
.read_x(sd_h_actual),
.outpixel({b_out,g_out,r_out})
);
reg [10:0] sd_h_actual;
always @(*) begin
case(ce_div)
2: sd_h_actual = sd_h[10:1];
4: sd_h_actual = sd_h[10:2];
default: sd_h_actual = sd_h;
endcase
end
reg [10:0] sd_h;
reg [1:0] sd_line;
always @(posedge clk_sys) begin
reg [11:0] hs_max,hs_rise,hs_ls;
reg [10:0] hcnt;
reg [11:0] sd_hcnt;
reg hs, hs2, vs, ls;
if(ce_x1) begin
hs <= hs_in;
ls <= ls_in;
if(ls && !ls_in) hs_ls <= {hcnt,1'b1};
// falling edge of hsync indicates start of line
if(hs && !hs_in) begin
hs_max <= {hcnt,1'b1};
hcnt <= 0;
if(ls && !ls_in) hs_ls <= {10'd0,1'b1};
end else begin
hcnt <= hcnt + 1'd1;
end
// save position of rising edge
if(!hs && hs_in) hs_rise <= {hcnt,1'b1};
vs <= vs_in;
if(vs && ~vs_in) sd_line <= 0;
end
if(ce_x4) begin
hs2 <= hs_in;
// output counter synchronous to input and at twice the rate
sd_hcnt <= sd_hcnt + 1'd1;
sd_h <= sd_h + 1'd1;
if(hs2 && !hs_in) sd_hcnt <= hs_max;
if(sd_hcnt == hs_max) sd_hcnt <= 0;
// replicate horizontal sync at twice the speed
if(sd_hcnt == hs_max) hs_out <= 0;
if(sd_hcnt == hs_rise) hs_out <= 1;
if(sd_hcnt == hs_ls) sd_h <= 0;
if(sd_hcnt == hs_ls) sd_line <= sd_line + 1'd1;
end
end
endmodule

View File

@@ -1,141 +0,0 @@
//Legal Notice: (C)2006 Altera Corporation. All rights reserved. Your
//use of Altera Corporation's design tools, logic functions and other
//software and tools, and its AMPP partner logic functions, and any
//output files any of the foregoing (including device programming or
//simulation files), and any associated documentation or information are
//expressly subject to the terms and conditions of the Altera Program
//License Subscription Agreement or other applicable license agreement,
//including, without limitation, that your use is for the sole purpose
//of programming logic devices manufactured by Altera and sold by Altera
//or its authorized distributors. Please refer to the applicable
//agreement for further details.
module I2C_AV_Config ( // Host Side
iCLK,
iRST_N,
// I2C Side
I2C_SCLK,
I2C_SDAT );
// Host Side
input iCLK;
input iRST_N;
// I2C Side
output I2C_SCLK;
inout I2C_SDAT;
// Internal Registers/Wires
reg [15:0] mI2C_CLK_DIV;
reg [23:0] mI2C_DATA;
reg mI2C_CTRL_CLK;
reg mI2C_GO;
wire mI2C_END;
wire mI2C_ACK;
reg [15:0] LUT_DATA;
reg [3:0] LUT_INDEX;
reg [1:0] mSetup_ST;
// Clock Setting
parameter CLK_Freq = 50000000; // 50 MHz
parameter I2C_Freq = 20000; // 20 KHz
// LUT Data Number
parameter LUT_SIZE = 11;
// Audio Data Index
parameter Dummy_DATA = 0;
parameter SET_LIN_L = 1;
parameter SET_LIN_R = 2;
parameter SET_HEAD_L = 3;
parameter SET_HEAD_R = 4;
parameter A_PATH_CTRL = 5;
parameter D_PATH_CTRL = 6;
parameter POWER_ON = 7;
parameter SET_FORMAT = 8;
parameter SAMPLE_CTRL = 9;
parameter SET_ACTIVE = 10;
///////////////////// I2C Control Clock ////////////////////////
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
mI2C_CTRL_CLK <= 0;
mI2C_CLK_DIV <= 0;
end
else
begin
if( mI2C_CLK_DIV < (CLK_Freq/I2C_Freq) )
mI2C_CLK_DIV <= mI2C_CLK_DIV+16'b1;
else
begin
mI2C_CLK_DIV <= 0;
mI2C_CTRL_CLK <= ~mI2C_CTRL_CLK;
end
end
end
////////////////////////////////////////////////////////////////////
I2C_Controller u0 ( .CLOCK(mI2C_CTRL_CLK), // Controller Work Clock
.I2C_SCLK(I2C_SCLK), // I2C CLOCK
.I2C_SDAT(I2C_SDAT), // I2C DATA
.I2C_DATA(mI2C_DATA), // DATA:[SLAVE_ADDR,SUB_ADDR,DATA]
.GO(mI2C_GO), // GO transfor
.END(mI2C_END), // END transfor
.ACK(mI2C_ACK), // ACK
.RESET(iRST_N) );
////////////////////////////////////////////////////////////////////
////////////////////// Config Control ////////////////////////////
always@(posedge mI2C_CTRL_CLK or negedge iRST_N)
begin
if(!iRST_N)
begin
LUT_INDEX <= 0;
mSetup_ST <= 0;
mI2C_GO <= 0;
end
else
begin
if(LUT_INDEX<LUT_SIZE)
begin
case(mSetup_ST)
0: begin
mI2C_DATA <= {8'h34,LUT_DATA};
mI2C_GO <= 1;
mSetup_ST <= 1;
end
1: begin
if(mI2C_END)
begin
if(!mI2C_ACK)
mSetup_ST <= 2;
else
mSetup_ST <= 0;
mI2C_GO <= 0;
end
end
2: begin
LUT_INDEX <= LUT_INDEX+4'b1;
mSetup_ST <= 0;
end
endcase
end
end
end
////////////////////////////////////////////////////////////////////
///////////////////// Config Data LUT //////////////////////////
always
begin
case(LUT_INDEX)
// Audio Config Data
Dummy_DATA : LUT_DATA <= 16'h0000;
SET_LIN_L : LUT_DATA <= 16'h0017;
SET_LIN_R : LUT_DATA <= 16'h0217;
SET_HEAD_L : LUT_DATA <= 16'h0479;
SET_HEAD_R : LUT_DATA <= 16'h0679;
A_PATH_CTRL : LUT_DATA <= 16'h08F2;
D_PATH_CTRL : LUT_DATA <= 16'h0A06;
POWER_ON : LUT_DATA <= 16'h0C00;
SET_FORMAT : LUT_DATA <= 16'h0E01;
SAMPLE_CTRL : LUT_DATA <= 16'h1002;
SET_ACTIVE : LUT_DATA <= 16'h1201;
default : LUT_DATA <= 16'h0000;
endcase
end
////////////////////////////////////////////////////////////////////
endmodule

View File

@@ -1,108 +0,0 @@
//Legal Notice: (C)2006 Altera Corporation. All rights reserved. Your
//use of Altera Corporation's design tools, logic functions and other
//software and tools, and its AMPP partner logic functions, and any
//output files any of the foregoing (including device programming or
//simulation files), and any associated documentation or information are
//expressly subject to the terms and conditions of the Altera Program
//License Subscription Agreement or other applicable license agreement,
//including, without limitation, that your use is for the sole purpose
//of programming logic devices manufactured by Altera and sold by Altera
//or its authorized distributors. Please refer to the applicable
//agreement for further details.
module I2C_Controller (
CLOCK,
I2C_SCLK,//I2C CLOCK
I2C_SDAT,//I2C DATA
I2C_DATA,//DATA:[SLAVE_ADDR,SUB_ADDR,DATA]
GO, //GO transfor
END, //END transfor
ACK, //ACK
RESET
);
input CLOCK;
input [23:0]I2C_DATA;
input GO;
input RESET;
inout I2C_SDAT;
output I2C_SCLK;
output END;
output ACK;
reg SDO;
reg SCLK;
reg END;
reg [23:0]SD;
reg [5:0]SD_COUNTER;
wire I2C_SCLK=SCLK | ( ((SD_COUNTER >= 4) & (SD_COUNTER <=30))? ~CLOCK :1'b0 );
wire I2C_SDAT=SDO?1'bz:1'b0;
reg ACK1,ACK2,ACK3;
wire ACK=ACK1 | ACK2 |ACK3;
//--I2C COUNTER
always @(negedge RESET or posedge CLOCK ) begin
if (!RESET) SD_COUNTER=6'b111111;
else begin
if (GO==0)
SD_COUNTER=0;
else
if (SD_COUNTER < 6'b111111) SD_COUNTER=SD_COUNTER+6'b1;
end
end
//----
always @(negedge RESET or posedge CLOCK ) begin
if (!RESET) begin SCLK=1;SDO=1; ACK1=0;ACK2=0;ACK3=0; END=1; end
else
case (SD_COUNTER)
6'd0 : begin ACK1=0 ;ACK2=0 ;ACK3=0 ; END=0; SDO=1; SCLK=1;end
//start
6'd1 : begin SD=I2C_DATA;SDO=0;end
6'd2 : SCLK=0;
//SLAVE ADDR
6'd3 : SDO=SD[23];
6'd4 : SDO=SD[22];
6'd5 : SDO=SD[21];
6'd6 : SDO=SD[20];
6'd7 : SDO=SD[19];
6'd8 : SDO=SD[18];
6'd9 : SDO=SD[17];
6'd10 : SDO=SD[16];
6'd11 : SDO=1'b1;//ACK
//SUB ADDR
6'd12 : begin SDO=SD[15]; ACK1=I2C_SDAT; end
6'd13 : SDO=SD[14];
6'd14 : SDO=SD[13];
6'd15 : SDO=SD[12];
6'd16 : SDO=SD[11];
6'd17 : SDO=SD[10];
6'd18 : SDO=SD[9];
6'd19 : SDO=SD[8];
6'd20 : SDO=1'b1;//ACK
//DATA
6'd21 : begin SDO=SD[7]; ACK2=I2C_SDAT; end
6'd22 : SDO=SD[6];
6'd23 : SDO=SD[5];
6'd24 : SDO=SD[4];
6'd25 : SDO=SD[3];
6'd26 : SDO=SD[2];
6'd27 : SDO=SD[1];
6'd28 : SDO=SD[0];
6'd29 : SDO=1'b1;//ACK
//stop
6'd30 : begin SDO=1'b0; SCLK=1'b0; ACK3=I2C_SDAT; end
6'd31 : SCLK=1'b1;
6'd32 : begin SDO=1'b1; END=1; end
endcase
end
endmodule

View File

@@ -1,242 +0,0 @@
//
//
// Copyright (c) 2017 Sorgelig
//
// This program is GPL Licensed. See COPYING for the full license.
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps
//
// LINE_LENGTH: Length of display line in pixels
// Usually it's length from HSync to HSync.
// May be less if line_start is used.
//
// HALF_DEPTH: If =1 then color dept is 3 bits per component
// For half depth 6 bits monochrome is available with
// mono signal enabled and color = {G, R}
module video_mixer
#(
parameter LINE_LENGTH = 768,
parameter HALF_DEPTH = 0,
parameter OSD_COLOR = 3'd4,
parameter OSD_X_OFFSET = 10'd0,
parameter OSD_Y_OFFSET = 10'd0
)
(
// master clock
// it should be multiple by (ce_pix*4).
input clk_sys,
// Pixel clock or clock_enable (both are accepted).
input ce_pix,
// Some systems have multiple resolutions.
// ce_pix_actual should match ce_pix where every second or fourth pulse is enabled,
// thus half or qurter resolutions can be used without brake video sync while switching resolutions.
// For fixed single resolution (or when video sync stability isn't required) ce_pix_actual = ce_pix.
input ce_pix_actual,
// OSD SPI interface
input SPI_SCK,
input SPI_SS3,
input SPI_DI,
// scanlines (00-none 01-25% 10-50% 11-75%)
input [1:0] scanlines,
// 0 = HVSync 31KHz, 1 = CSync 15KHz
input scandoubler_disable,
// High quality 2x scaling
input hq2x,
// YPbPr always uses composite sync
input ypbpr,
// 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space)
input ypbpr_full,
// color
input [DWIDTH:0] R,
input [DWIDTH:0] G,
input [DWIDTH:0] B,
// Monochrome mode (for HALF_DEPTH only)
input mono,
// interlace sync. Positive pulses.
input HSync,
input VSync,
// Falling of this signal means start of informative part of line.
// It can be horizontal blank signal.
// This signal can be used to reduce amount of required FPGA RAM for HQ2x scan doubler
// If FPGA RAM is not an issue, then simply set it to 0 for whole line processing.
// Keep in mind: due to algo first and last pixels of line should be black to avoid side artefacts.
// Thus, if blank signal is used to reduce the line, make sure to feed at least one black (or paper) pixel
// before first informative pixel.
input line_start,
// MiST video output signals
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B,
output VGA_VS,
output VGA_HS
);
localparam DWIDTH = HALF_DEPTH ? 2 : 5;
wire [DWIDTH:0] R_sd;
wire [DWIDTH:0] G_sd;
wire [DWIDTH:0] B_sd;
wire hs_sd, vs_sd;
scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler
(
.*,
.hs_in(HSync),
.vs_in(VSync),
.r_in(R),
.g_in(G),
.b_in(B),
.hs_out(hs_sd),
.vs_out(vs_sd),
.r_out(R_sd),
.g_out(G_sd),
.b_out(B_sd)
);
wire [DWIDTH:0] rt = (scandoubler_disable ? R : R_sd);
wire [DWIDTH:0] gt = (scandoubler_disable ? G : G_sd);
wire [DWIDTH:0] bt = (scandoubler_disable ? B : B_sd);
generate
if(HALF_DEPTH) begin
wire [5:0] r = mono ? {gt,rt} : {rt,rt};
wire [5:0] g = mono ? {gt,rt} : {gt,gt};
wire [5:0] b = mono ? {gt,rt} : {bt,bt};
end else begin
wire [5:0] r = rt;
wire [5:0] g = gt;
wire [5:0] b = bt;
end
endgenerate
wire hs = (scandoubler_disable ? HSync : hs_sd);
wire vs = (scandoubler_disable ? VSync : vs_sd);
reg scanline = 0;
always @(posedge clk_sys) begin
reg old_hs, old_vs;
old_hs <= hs;
old_vs <= vs;
if(old_hs && ~hs) scanline <= ~scanline;
if(old_vs && ~vs) scanline <= 0;
end
wire [5:0] r_out, g_out, b_out;
always @(*) begin
case(scanlines & {scanline, scanline})
1: begin // reduce 25% = 1/2 + 1/4
r_out = {1'b0, r[5:1]} + {2'b00, r[5:2]};
g_out = {1'b0, g[5:1]} + {2'b00, g[5:2]};
b_out = {1'b0, b[5:1]} + {2'b00, b[5:2]};
end
2: begin // reduce 50% = 1/2
r_out = {1'b0, r[5:1]};
g_out = {1'b0, g[5:1]};
b_out = {1'b0, b[5:1]};
end
3: begin // reduce 75% = 1/4
r_out = {2'b00, r[5:2]};
g_out = {2'b00, g[5:2]};
b_out = {2'b00, b[5:2]};
end
default: begin
r_out = r;
g_out = g;
b_out = b;
end
endcase
end
wire [5:0] red, green, blue;
osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd
(
.*,
.R_in(r_out),
.G_in(g_out),
.B_in(b_out),
.HSync(hs),
.VSync(vs),
.R_out(red),
.G_out(green),
.B_out(blue)
);
wire [5:0] yuv_full[225] = '{
6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1,
6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4,
6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6,
6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8,
6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11,
6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13,
6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15,
6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17,
6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20,
6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22,
6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24,
6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27,
6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29,
6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31,
6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33,
6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36,
6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38,
6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40,
6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42,
6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45,
6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47,
6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49,
6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52,
6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54,
6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56,
6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58,
6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61,
6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63,
6'd63
};
// http://marsee101.blog19.fc2.com/blog-entry-2311.html
// Y = 16 + 0.257*R + 0.504*G + 0.098*B (Y = 0.299*R + 0.587*G + 0.114*B)
// Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B)
// Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B)
wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0});
wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0});
wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0});
wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8];
wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8];
wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8];
assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red;
assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green;
assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue;
assign VGA_VS = (scandoubler_disable | ypbpr) ? 1'b1 : ~vs_sd;
assign VGA_HS = scandoubler_disable ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd;
endmodule