diff --git a/.hgeol b/.hgeol new file mode 100644 index 0000000000..d6ac94569e --- /dev/null +++ b/.hgeol @@ -0,0 +1,3 @@ +[patterns] +Data/User/Wii/**.* = BIN +** = native \ No newline at end of file diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000000..d359997953 --- /dev/null +++ b/.hgignore @@ -0,0 +1,22 @@ +syntax:glob +Binary +*.obj +*.pdb +*.idb +*.ilk +*.pch +*.ncb +*.suo +*.vcproj.*.user +*/Win32/Release +*/Win32/Debug +*/x64/Release +*/x64/Debug +Source/Release +Source/Debug +BuildLog.htm +Source/Core/Common/Src/svnrev.h +Externals/wxWidgets/lib/vc_lib/msw +Externals/wxWidgets/lib/vc_lib/mswd +Externals/wxWidgets/lib/vc_lib/Win32 +Externals/wxWidgets/lib/vc_lib/x64 \ No newline at end of file diff --git a/Data/User/Config/IrPointer.ini b/Data/User/Config/IrPointer.ini index eddc605f49..c58fe7e54c 100644 --- a/Data/User/Config/IrPointer.ini +++ b/Data/User/Config/IrPointer.ini @@ -1,182 +1,182 @@ -[Default] -IRLeft = 266 -IRTop = 215 -IRWidth = 486 -IRHeight = 490 -[RSPE] # Wii Sports (NTSC) -IRLeft = 266 -IRTop = 215 -IRWidth = 486 -IRHeight = 490 -[RSPP] # Wii Sports (PAL) -IRLeft = 266 -IRTop = 215 -IRWidth = 486 -IRHeight = 490 -[RMGE] # Mario Galaxy (NTSC) -IRLeft = 255 -IRTop = 278 -IRWidth = 452 -IRHeight = 456 -[RMGP] # Mario Galaxy (PAL) -IRLeft = 255 -IRTop = 278 -IRWidth = 452 -IRHeight = 456 -[RMCE] # Mario Kart Wii (NTSC) -IRLeft = 253 -IRTop = 272 -IRWidth = 454 -IRHeight = 455 -[RMCP] # Mario Kart Wii (PAL) -IRLeft = 254 -IRTop = 278 -IRWidth = 451 -IRHeight = 448 -[R7PE] # Punch Out (NTSC) -IRLeft = 265 -IRTop = 289 -IRWidth = 408 -IRHeight = 416 -[R7PP] # Punch Out (PAL) -IRLeft = 265 -IRTop = 289 -IRWidth = 408 -IRHeight = 416 -[RZDE] # Zelda - Twilight Princess (NTSC) -IRLeft = 233 -IRTop = 181 -IRWidth = 559 -IRHeight = 409 -[RZDP] # Zelda - Twilight Princess (PAL) -IRLeft = 233 -IRTop = 181 -IRWidth = 559 -IRHeight = 409 -[RM8E] # Mario Part 8 (NTSC) -IRLeft = 277 -IRTop = 273 -IRWidth = 460 -IRHeight = 394 -[RM8P] # Mario Part 8 (PAL) -IRLeft = 277 -IRTop = 273 -IRWidth = 460 -IRHeight = 394 -[R8PE] # Super Paper Mario (NTSC) -IRLeft = 399 -IRTop = 373 -IRWidth = 227 -IRHeight = 228 -[R8PP] # Super Paper Mario (PAL) -IRLeft = 399 -IRTop = 373 -IRWidth = 227 -IRHeight = 228 -[R4QP] # Mario Strikers (NTSC) -IRLeft = 200 -IRTop = 54 -IRWidth = 615 -IRHeight = 657 -[R4QP] # Mario Strikers (PAL) -IRLeft = 200 -IRTop = 54 -IRWidth = 615 -IRHeight = 657 -[RBUE] # Resident Evil - The Umbrella Chronicles (NTSC) -IRLeft = 335 -IRTop = 351 -IRWidth = 357 -IRHeight = 273 -[RBUP] # Resident Evil - The Umbrella Chronicles (PAL) -IRLeft = 335 -IRTop = 351 -IRWidth = 357 -IRHeight = 273 -[RB4E] # Resident Evil 4 (NTSC) -IRLeft = 286 -IRTop = 256 -IRWidth = 450 -IRHeight = 455 -[RB4P] # Resident Evil 4 (PAL) -IRLeft = 286 -IRTop = 256 -IRWidth = 450 -IRHeight = 455 -[R3IJ] # Metroid Prime - Wii De Asobu (JAP) -IRLeft = 228 -IRTop = 112 -IRWidth = 486 -IRHeight = 577 -[RM3E] # Metroid Prime 3 (NTSC) -IRLeft = 258 -IRTop = 84 -IRWidth = 489 -IRHeight = 613 -[RM3P] # Metroid Prime 3 (PAL) -IRLeft = 258 -IRTop = 84 -IRWidth = 489 -IRHeight = 613 -[RSUP] # Sports Party (NTSC) -IRLeft = 391 -IRTop = 377 -IRWidth = 241 -IRHeight = 225 -[RSUP] # Sports Party (PAL) -IRLeft = 391 -IRTop = 377 -IRWidth = 241 -IRHeight = 225 -[RDZE] # Disaster - Day of Crisis (NTSC) -IRLeft = 253 -IRTop = 276 -IRWidth = 453 -IRHeight = 421 -[RDZP] # Disaster - Day of Crisis (PAL) -IRLeft = 253 -IRTop = 276 -IRWidth = 453 -IRHeight = 421 -[R4QE] # Mario Strikers (NTSC) -IRLeft = 266 -IRTop = 215 -IRWidth = 486 -IRHeight = 490 -[R4QP] # Mario Strikers (PAL) -IRLeft = 266 -IRTop = 215 -IRWidth = 486 -IRHeight = 490 -[RPBE] # Pokemon Battle Revolution (NTSC) -IRLeft = 287 -IRTop = 261 -IRWidth = 451 -IRHeight = 449 -[RPBP] # Pokemon Battle Revolution (PAL) -IRLeft = 287 -IRTop = 261 -IRWidth = 451 -IRHeight = 449 -[R2GJ] # Fragile: Sayonara Tsuki no Haikyo (JAP) -IRLeft = 254 -IRTop = 280 -IRWidth = 451 -IRHeight = 453 -[RFNE] # Wii Fit (NTSC) -[RFNP] # Wii Fit (PAL) -[RSBE] # Super Smash Bros. Brawl (NTSC) -[RSBP] # Super Smash Bros. Brawl (PAL) -[R3TE] # Top Spin 3 (NTSC) -[RSBP] # Top Spin 3 (PAL) -[RLBE] # Lego Batman (NTSC) -[RLBP] # Lego Batman (PAL) -########################################################################## -# These games don't use the IR Pointer at any time -########################################################################## -[RSRE] # Sonic and the Secret Rings (NTSC) -[RSRP] # Sonic and the Secret Rings (PAL) -[RWLE] # Wario Land - Shake It (NTSC) -[RWLP] # Wario Land - Shake It (PAL) -[RTNE] # Tenchu: Shadow Assassins (NTSC) -[RTNE] # Tenchu: Shadow Assassins (PAL) +[Default] +IRLeft = 266 +IRTop = 215 +IRWidth = 486 +IRHeight = 490 +[RSPE] # Wii Sports (NTSC) +IRLeft = 266 +IRTop = 215 +IRWidth = 486 +IRHeight = 490 +[RSPP] # Wii Sports (PAL) +IRLeft = 266 +IRTop = 215 +IRWidth = 486 +IRHeight = 490 +[RMGE] # Mario Galaxy (NTSC) +IRLeft = 255 +IRTop = 278 +IRWidth = 452 +IRHeight = 456 +[RMGP] # Mario Galaxy (PAL) +IRLeft = 255 +IRTop = 278 +IRWidth = 452 +IRHeight = 456 +[RMCE] # Mario Kart Wii (NTSC) +IRLeft = 253 +IRTop = 272 +IRWidth = 454 +IRHeight = 455 +[RMCP] # Mario Kart Wii (PAL) +IRLeft = 254 +IRTop = 278 +IRWidth = 451 +IRHeight = 448 +[R7PE] # Punch Out (NTSC) +IRLeft = 265 +IRTop = 289 +IRWidth = 408 +IRHeight = 416 +[R7PP] # Punch Out (PAL) +IRLeft = 265 +IRTop = 289 +IRWidth = 408 +IRHeight = 416 +[RZDE] # Zelda - Twilight Princess (NTSC) +IRLeft = 233 +IRTop = 181 +IRWidth = 559 +IRHeight = 409 +[RZDP] # Zelda - Twilight Princess (PAL) +IRLeft = 233 +IRTop = 181 +IRWidth = 559 +IRHeight = 409 +[RM8E] # Mario Part 8 (NTSC) +IRLeft = 277 +IRTop = 273 +IRWidth = 460 +IRHeight = 394 +[RM8P] # Mario Part 8 (PAL) +IRLeft = 277 +IRTop = 273 +IRWidth = 460 +IRHeight = 394 +[R8PE] # Super Paper Mario (NTSC) +IRLeft = 399 +IRTop = 373 +IRWidth = 227 +IRHeight = 228 +[R8PP] # Super Paper Mario (PAL) +IRLeft = 399 +IRTop = 373 +IRWidth = 227 +IRHeight = 228 +[R4QP] # Mario Strikers (NTSC) +IRLeft = 200 +IRTop = 54 +IRWidth = 615 +IRHeight = 657 +[R4QP] # Mario Strikers (PAL) +IRLeft = 200 +IRTop = 54 +IRWidth = 615 +IRHeight = 657 +[RBUE] # Resident Evil - The Umbrella Chronicles (NTSC) +IRLeft = 335 +IRTop = 351 +IRWidth = 357 +IRHeight = 273 +[RBUP] # Resident Evil - The Umbrella Chronicles (PAL) +IRLeft = 335 +IRTop = 351 +IRWidth = 357 +IRHeight = 273 +[RB4E] # Resident Evil 4 (NTSC) +IRLeft = 286 +IRTop = 256 +IRWidth = 450 +IRHeight = 455 +[RB4P] # Resident Evil 4 (PAL) +IRLeft = 286 +IRTop = 256 +IRWidth = 450 +IRHeight = 455 +[R3IJ] # Metroid Prime - Wii De Asobu (JAP) +IRLeft = 228 +IRTop = 112 +IRWidth = 486 +IRHeight = 577 +[RM3E] # Metroid Prime 3 (NTSC) +IRLeft = 258 +IRTop = 84 +IRWidth = 489 +IRHeight = 613 +[RM3P] # Metroid Prime 3 (PAL) +IRLeft = 258 +IRTop = 84 +IRWidth = 489 +IRHeight = 613 +[RSUP] # Sports Party (NTSC) +IRLeft = 391 +IRTop = 377 +IRWidth = 241 +IRHeight = 225 +[RSUP] # Sports Party (PAL) +IRLeft = 391 +IRTop = 377 +IRWidth = 241 +IRHeight = 225 +[RDZE] # Disaster - Day of Crisis (NTSC) +IRLeft = 253 +IRTop = 276 +IRWidth = 453 +IRHeight = 421 +[RDZP] # Disaster - Day of Crisis (PAL) +IRLeft = 253 +IRTop = 276 +IRWidth = 453 +IRHeight = 421 +[R4QE] # Mario Strikers (NTSC) +IRLeft = 266 +IRTop = 215 +IRWidth = 486 +IRHeight = 490 +[R4QP] # Mario Strikers (PAL) +IRLeft = 266 +IRTop = 215 +IRWidth = 486 +IRHeight = 490 +[RPBE] # Pokemon Battle Revolution (NTSC) +IRLeft = 287 +IRTop = 261 +IRWidth = 451 +IRHeight = 449 +[RPBP] # Pokemon Battle Revolution (PAL) +IRLeft = 287 +IRTop = 261 +IRWidth = 451 +IRHeight = 449 +[R2GJ] # Fragile: Sayonara Tsuki no Haikyo (JAP) +IRLeft = 254 +IRTop = 280 +IRWidth = 451 +IRHeight = 453 +[RFNE] # Wii Fit (NTSC) +[RFNP] # Wii Fit (PAL) +[RSBE] # Super Smash Bros. Brawl (NTSC) +[RSBP] # Super Smash Bros. Brawl (PAL) +[R3TE] # Top Spin 3 (NTSC) +[RSBP] # Top Spin 3 (PAL) +[RLBE] # Lego Batman (NTSC) +[RLBP] # Lego Batman (PAL) +########################################################################## +# These games don't use the IR Pointer at any time +########################################################################## +[RSRE] # Sonic and the Secret Rings (NTSC) +[RSRP] # Sonic and the Secret Rings (PAL) +[RWLE] # Wario Land - Shake It (NTSC) +[RWLP] # Wario Land - Shake It (PAL) +[RTNE] # Tenchu: Shadow Assassins (NTSC) +[RTNE] # Tenchu: Shadow Assassins (PAL) diff --git a/Data/User/Maps/GFZE01.map b/Data/User/Maps/GFZE01.map index 1588db0935..464dba3610 100644 --- a/Data/User/Maps/GFZE01.map +++ b/Data/User/Maps/GFZE01.map @@ -1,41 +1,41 @@ -.text -80003488 000000b8 80003488 0 __fill_mem -80003540 00000050 80003540 0 memcpy -8006cff8 0000004c 8006cff8 0 .LoadQuantizers -8006d044 0000002c 8006d044 0 .kill_infinites_helper -8006d070 00000018 8006d070 0 .kill_infinites -8006d088 0000002c 8006d088 0 .rsqrt -8006d0b4 00000034 8006d0b4 0 .sqrt_internal_fz -8006d0e8 00000030 8006d0e8 0 .rsqrt_internal_fz -8006d118 00000070 8006d118 0 .sqrt_fz -8006d188 00000030 8006d188 0 .wrapping_once_fp_lookup -8006d1b8 00000064 8006d1b8 0 .weird2 -8006d1c4 00000058 8006d1c4 0 .into_weird2 -8006d21c 00000030 8006d21c 0 .lookup_some_float_in_table_with_neg_wrap -8006d24c 00000184 8006d24c 0 .atan2 -8006d3d0 0000009c 8006d3d0 0 .asin_fz -8006d46c 000000c8 8006d46c 0 .acos_fz -8006d534 00000070 8006d534 0 .evil_vec_cosine -8006d5f0 00000078 8006d5f0 0 .evil_vec_setlength -8006d668 00000094 8006d668 0 .evil_vec_something -8006d6fc 0000005c 8006d6fc 0 .func -8006d784 0000002c 8006d784 0 .load_strange_matrix1 -8006d7b0 0000002c 8006d7b0 0 .load_strange_matrix2 -8006d7f4 0000003c 8006d7f4 0 .some_strange_destination -8006db30 00000044 8006db30 0 .push_matrix_3x3? -8006db74 00000038 8006db74 0 .write_top_3x3_matrix -8006dbe4 0000003c 8006dbe4 0 .read_current_3x3_matrix -8006dc20 00000014 8006dc20 0 .pop_matrix_stack -8006e424 00000074 8006e424 0 .weird_param_in_p1_p2 -8006e978 000001d4 8006e978 0 zz_006e978_ -8006eb4c 000001c0 8006eb4c 0 zz_006eb4c_ -8006f6a8 000000cc 8006f6a8 0 .z_last_skum_function -800798f0 000000ec 800798f0 0 __div2u -800799dc 00000138 800799dc 0 __div2i -80079b14 000000e0 80079b14 0 __mod2u -80079bf8 0000010c 80079bf8 0 __mod2i -80079d04 00000024 80079d04 0 __shl2i -80079d28 00000024 80079d28 0 __shr2u -80079d4c 00000028 80079d4c 0 __shr2i -8008596c 00000310 8008596c 0 big_matrix_trickery -80088538 00000020 80088538 0 zz_0088538_ +.text +80003488 000000b8 80003488 0 __fill_mem +80003540 00000050 80003540 0 memcpy +8006cff8 0000004c 8006cff8 0 .LoadQuantizers +8006d044 0000002c 8006d044 0 .kill_infinites_helper +8006d070 00000018 8006d070 0 .kill_infinites +8006d088 0000002c 8006d088 0 .rsqrt +8006d0b4 00000034 8006d0b4 0 .sqrt_internal_fz +8006d0e8 00000030 8006d0e8 0 .rsqrt_internal_fz +8006d118 00000070 8006d118 0 .sqrt_fz +8006d188 00000030 8006d188 0 .wrapping_once_fp_lookup +8006d1b8 00000064 8006d1b8 0 .weird2 +8006d1c4 00000058 8006d1c4 0 .into_weird2 +8006d21c 00000030 8006d21c 0 .lookup_some_float_in_table_with_neg_wrap +8006d24c 00000184 8006d24c 0 .atan2 +8006d3d0 0000009c 8006d3d0 0 .asin_fz +8006d46c 000000c8 8006d46c 0 .acos_fz +8006d534 00000070 8006d534 0 .evil_vec_cosine +8006d5f0 00000078 8006d5f0 0 .evil_vec_setlength +8006d668 00000094 8006d668 0 .evil_vec_something +8006d6fc 0000005c 8006d6fc 0 .func +8006d784 0000002c 8006d784 0 .load_strange_matrix1 +8006d7b0 0000002c 8006d7b0 0 .load_strange_matrix2 +8006d7f4 0000003c 8006d7f4 0 .some_strange_destination +8006db30 00000044 8006db30 0 .push_matrix_3x3? +8006db74 00000038 8006db74 0 .write_top_3x3_matrix +8006dbe4 0000003c 8006dbe4 0 .read_current_3x3_matrix +8006dc20 00000014 8006dc20 0 .pop_matrix_stack +8006e424 00000074 8006e424 0 .weird_param_in_p1_p2 +8006e978 000001d4 8006e978 0 zz_006e978_ +8006eb4c 000001c0 8006eb4c 0 zz_006eb4c_ +8006f6a8 000000cc 8006f6a8 0 .z_last_skum_function +800798f0 000000ec 800798f0 0 __div2u +800799dc 00000138 800799dc 0 __div2i +80079b14 000000e0 80079b14 0 __mod2u +80079bf8 0000010c 80079bf8 0 __mod2i +80079d04 00000024 80079d04 0 __shl2i +80079d28 00000024 80079d28 0 __shr2u +80079d4c 00000028 80079d4c 0 __shr2i +8008596c 00000310 8008596c 0 big_matrix_trickery +80088538 00000020 80088538 0 zz_0088538_ diff --git a/Data/User/Maps/GMBE8P.map b/Data/User/Maps/GMBE8P.map index d83be68df3..7cbab7e984 100644 --- a/Data/User/Maps/GMBE8P.map +++ b/Data/User/Maps/GMBE8P.map @@ -1,34 +1,34 @@ -.text -800031f0 0000001c 800031f0 0 load_sp_rtoc -80007034 0000004c 80007034 0 .LoadQuantizers -80007080 00000030 80007080 0 .LoadInfinitiesEtc -800070b0 00000038 800070b0 0 .rsqrt -800070ec 00000040 800070ec 0 .sqrt_internal_needs_cr1 -8000712c 00000040 8000712c 0 .rsqrt_internal_needs_cr1 -800071e0 00000030 800071e0 0 .wrapping_once_fp_lookup -80007210 00000064 80007210 0 .weird2 -80007274 00000030 80007274 0 .lookup_some_float_in_table_with_neg_wrap -800072a4 00000180 800072a4 0 .atan2 -80007424 000000b8 80007424 0 .calls_sqrt -800074dc 0000005c 800074dc 0 .func -80007538 0000002c 80007538 0 .load_strange_matrix1 -80007564 0000002c 80007564 0 .load_strange_matrix3 -80007590 0000002c 80007590 0 .load_strange_matrix2 -80007834 00000044 80007834 0 .push_matrix_3x3? -80007878 00000038 80007878 0 .read_top_3x3matrix -800078b0 00000038 800078b0 0 .write_top_3x3_matrix -800078e8 0000003c 800078e8 0 .read_current_3x3_matrix -80007924 00000014 80007924 0 .pop_matrix_stack -80007a50 00000170 80007a50 0 .mult_matrix? -80007ecc 000000bc 80007ecc 0 .weird_vector_op_status_in_cr2 -80007f88 00000074 80007f88 0 .weird_param_in_p1_p2 -800080fc 00000078 800080fc 0 .evil_normalize -80008174 00000078 80008174 0 .evil_vec_setlength -800081ec 00000070 800081ec 0 .evil_vec_cosine -80008538 000000f0 80008538 0 .calls_evil1 -8000875c 00000088 8000875c 0 .another_caller -800087e4 0000008c 800087e4 0 .another_caller2 -80008d30 000001b4 80008d30 0 .another_caller3 -80036544 000001b4 80036544 0 .fctiwi_weird2 -8003dd1c 00000110 8003dd1c 0 .fctwi_weird -80043b48 000005bc 80043b48 0 .fctwi_weird3 +.text +800031f0 0000001c 800031f0 0 load_sp_rtoc +80007034 0000004c 80007034 0 .LoadQuantizers +80007080 00000030 80007080 0 .LoadInfinitiesEtc +800070b0 00000038 800070b0 0 .rsqrt +800070ec 00000040 800070ec 0 .sqrt_internal_needs_cr1 +8000712c 00000040 8000712c 0 .rsqrt_internal_needs_cr1 +800071e0 00000030 800071e0 0 .wrapping_once_fp_lookup +80007210 00000064 80007210 0 .weird2 +80007274 00000030 80007274 0 .lookup_some_float_in_table_with_neg_wrap +800072a4 00000180 800072a4 0 .atan2 +80007424 000000b8 80007424 0 .calls_sqrt +800074dc 0000005c 800074dc 0 .func +80007538 0000002c 80007538 0 .load_strange_matrix1 +80007564 0000002c 80007564 0 .load_strange_matrix3 +80007590 0000002c 80007590 0 .load_strange_matrix2 +80007834 00000044 80007834 0 .push_matrix_3x3? +80007878 00000038 80007878 0 .read_top_3x3matrix +800078b0 00000038 800078b0 0 .write_top_3x3_matrix +800078e8 0000003c 800078e8 0 .read_current_3x3_matrix +80007924 00000014 80007924 0 .pop_matrix_stack +80007a50 00000170 80007a50 0 .mult_matrix? +80007ecc 000000bc 80007ecc 0 .weird_vector_op_status_in_cr2 +80007f88 00000074 80007f88 0 .weird_param_in_p1_p2 +800080fc 00000078 800080fc 0 .evil_normalize +80008174 00000078 80008174 0 .evil_vec_setlength +800081ec 00000070 800081ec 0 .evil_vec_cosine +80008538 000000f0 80008538 0 .calls_evil1 +8000875c 00000088 8000875c 0 .another_caller +800087e4 0000008c 800087e4 0 .another_caller2 +80008d30 000001b4 80008d30 0 .another_caller3 +80036544 000001b4 80036544 0 .fctiwi_weird2 +8003dd1c 00000110 8003dd1c 0 .fctwi_weird +80043b48 000005bc 80043b48 0 .fctwi_weird3 diff --git a/Data/User/OpenCL/TextureDecoder.cl b/Data/User/OpenCL/TextureDecoder.cl index 89595eb496..1ca5cc6d6f 100644 --- a/Data/User/OpenCL/TextureDecoder.cl +++ b/Data/User/OpenCL/TextureDecoder.cl @@ -1,224 +1,224 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -kernel void DecodeI4(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 8, y = get_global_id(1) * 8; - int srcOffset = x + y * width / 8; - for (int iy = 0; iy < 8; iy++) - { - uchar4 val = vload4(srcOffset, src); - uchar8 res; - res.even = (val >> (uchar4)4) & (uchar4)0x0F; - res.odd = val & (uchar4)0x0F; - res |= res << (uchar8)4; - vstore8(res, 0, dst + ((y + iy)*width + x)); - srcOffset++; - } -} - -kernel void DecodeI8(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 8, y = get_global_id(1) * 4; - int srcOffset = ((x * 4) + (y * width)) / 8; - for (int iy = 0; iy < 4; iy++) - { - vstore8(vload8(srcOffset, src), - 0, dst + ((y + iy)*width + x)); - srcOffset++; - } -} - -kernel void DecodeIA8(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 4, y = get_global_id(1) * 4; - int srcOffset = ((x * 4) + (y * width)) / 4; - for (int iy = 0; iy < 4; iy++) - { - uchar8 val = vload8(srcOffset, src); - uchar8 res; - res.odd = val.even; - res.even = val.odd; - vstore8(res, 0, dst + ((y + iy)*width + x) * 2); - srcOffset++; - } -} - -kernel void DecodeIA4(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 8, y = get_global_id(1) * 4; - int srcOffset = ((x * 4) + (y * width)) / 8; - for (int iy = 0; iy < 4; iy++) - { - uchar8 val = vload8(srcOffset, src); - uchar16 res; - res.odd = (val >> (uchar8)4) & (uchar8)0x0F; - res.even = val & (uchar8)0x0F; - res |= res << (uchar16)4; - vstore16(res, 0, dst + ((y + iy)*width + x) * 2); - srcOffset++; - } -} - -kernel void DecodeRGBA8(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 4, y = get_global_id(1) * 4; - int srcOffset = (x * 2) + (y * width) / 2; - for (int iy = 0; iy < 4; iy++) - { - uchar8 ar = vload8(srcOffset, src); - uchar8 gb = vload8(srcOffset + 4, src); - uchar16 res; - res.even.even = gb.odd; - res.even.odd = ar.odd; - res.odd.even = gb.even; - res.odd.odd = ar.even; - vstore16(res, 0, dst + ((y + iy)*width + x) * 4); - srcOffset++; - } -} - -kernel void DecodeRGB565(global ushort *dst, - const global ushort *src, int width) -{ - int x = get_global_id(0) * 4, y = get_global_id(1) * 4; - int srcOffset = x + (y * width) / 4; - for (int iy = 0; iy < 4; iy++) - { - ushort4 val = vload4(srcOffset, src); - val = (val >> (ushort4)8) | (val << (ushort4)8); - vstore4(val, 0, dst + ((y + iy)*width + x)); - srcOffset++; - } -} - -kernel void DecodeRGB5A3(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 4, y = get_global_id(1) * 4; - int srcOffset = x + (y * width) / 4; - for (int iy = 0; iy < 4; iy++) - { - ushort8 val = convert_ushort8(vload8(srcOffset, src)); - ushort4 vs = val.odd | (ushort4)(val.even << (ushort4)8); - - uchar16 resNoAlpha; - resNoAlpha.s26AE = convert_uchar4(vs >> (ushort4)7); // R - resNoAlpha.s159D = convert_uchar4(vs >> (ushort4)2); // G - resNoAlpha.s048C = convert_uchar4(vs << (ushort4)3); // B - resNoAlpha &= (uchar16)0xF8; - resNoAlpha |= (uchar16)(resNoAlpha >> (uchar16)5) & (uchar16)3; // 5 -> 8 - resNoAlpha.s37BF = (uchar4)(0xFF); - - uchar16 resAlpha; - resAlpha.s26AE = convert_uchar4(vs >> (ushort4)8); // R - resAlpha.s159D = convert_uchar4(vs >> (ushort4)4); // G - resAlpha.s048C = convert_uchar4(vs); // B - resAlpha &= (uchar16)0x0F; - resAlpha |= (resAlpha << (uchar16)4); - resAlpha.s37BF = convert_uchar4(vs >> (ushort4)7) & (uchar4)0xE0; - resAlpha.s37BF |= ((resAlpha.s37BF >> (uchar4)3) & (uchar4)0x1C) - | ((resAlpha.s37BF >> (uchar4)6) & (uchar4)0x3); - uchar16 choice = (uchar16)((uchar4)(vs.s0 >> 8), - (uchar4)(vs.s1 >> 8), - (uchar4)(vs.s2 >> 8), - (uchar4)(vs.s3 >> 8)); - uchar16 res; - res = select(resAlpha, resNoAlpha, choice); - vstore16(res, 0, dst + ((y + iy) * width + x) * 4); - srcOffset++; - } -} - -uint4 unpack2bits(uchar b) -{ - return (uint4)(b >> 6, - (b >> 4) & 3, - (b >> 2) & 3, - b & 3); -} - -kernel void decodeCMPRBlock(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 4, y = get_global_id(1) * 4; - uchar8 val = vload8(0, src); - ushort2 color565 = (ushort2)((val.s1 & 0xFF) | (val.s0 << 8), (val.s3 & 0xFF) | (val.s2 << 8)); - uchar8 color32 = convert_uchar8((ushort8) - (((color565 << (ushort2)3) & (ushort2)0xF8) | ((color565 >> (ushort2)2) & (ushort2)0x7), - ((color565 >> (ushort2)3) & (ushort2)0xFC) | ((color565 >> (ushort2)9) & (ushort2)0x3), - ((color565 >> (ushort2)8) & (ushort2)0xF8) | ((color565 >> (ushort2)13) & (ushort2)0x7), - 0xFF, 0xFF)); - uint4 colors; - uint4 colorNoAlpha; - uchar4 frac = convert_uchar4((((convert_ushort4(color32.even) & (ushort4)0xFF) - (convert_ushort4(color32.odd) & (ushort4)0xFF)) * (ushort4)3) / (ushort4)8); - colorNoAlpha = convert_uint4(color32.odd + frac); - colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.even - frac); - colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.odd); - colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.even); - - uint4 colorAlpha; - uchar4 midpoint = convert_uchar4((convert_ushort4(color32.odd) + convert_ushort4(color32.even) + (ushort4)1) / (ushort4)2); - midpoint.s3 = 0xFF; - colorAlpha = convert_uint4((uchar4)(0, 0, 0, 0)); - colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(midpoint); - colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(color32.odd); - colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(color32.even); - - colors = color565.s0 > color565.s1 ? colorNoAlpha : colorAlpha; - - uint16 colorsFull = (uint16)(colors, colors, colors, colors); - - uint4 shift0 = unpack2bits(val.s4); - uint4 shift1 = unpack2bits(val.s5); - uint4 shift2 = unpack2bits(val.s6); - uint4 shift3 = unpack2bits(val.s7); - uint16 shifts = (uint16)((uint4)(shift3.s0), (uint4)(shift3.s1), (uint4)(shift3.s2), (uint4)(shift3.s3)); - shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift2.s0), (uint4)(shift2.s1), (uint4)(shift2.s2), (uint4)(shift2.s3)); - shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift1.s0), (uint4)(shift1.s1), (uint4)(shift1.s2), (uint4)(shift1.s3)); - shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift0.s0), (uint4)(shift0.s1), (uint4)(shift0.s2), (uint4)(shift0.s3)) << (uint16)3; - - for (int iy = 0; iy < 4; iy++) - { - uchar16 res; - res = convert_uchar16(colorsFull >> (shifts & (uint16)0xFF)) >> (uchar16)8; - vstore16(res, 0, dst); - dst += width * 4; - } -} - -kernel void DecodeCMPR(global uchar *dst, - const global uchar *src, int width) -{ - int x = get_global_id(0) * 8, y = get_global_id(1) * 8; - - src += x * 4 + (y * width) / 2; - - decodeCMPRBlock(dst + (y * width + x) * 4, src, width); - src += 8; - decodeCMPRBlock(dst + (y * width + x + 4) * 4, src, width); - src += 8; - decodeCMPRBlock(dst + ((y + 4) * width + x) * 4, src, width); - src += 8; - decodeCMPRBlock(dst + ((y + 4) * width + x + 4) * 4, src, width); - +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +kernel void DecodeI4(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 8, y = get_global_id(1) * 8; + int srcOffset = x + y * width / 8; + for (int iy = 0; iy < 8; iy++) + { + uchar4 val = vload4(srcOffset, src); + uchar8 res; + res.even = (val >> (uchar4)4) & (uchar4)0x0F; + res.odd = val & (uchar4)0x0F; + res |= res << (uchar8)4; + vstore8(res, 0, dst + ((y + iy)*width + x)); + srcOffset++; + } +} + +kernel void DecodeI8(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 8, y = get_global_id(1) * 4; + int srcOffset = ((x * 4) + (y * width)) / 8; + for (int iy = 0; iy < 4; iy++) + { + vstore8(vload8(srcOffset, src), + 0, dst + ((y + iy)*width + x)); + srcOffset++; + } +} + +kernel void DecodeIA8(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 4, y = get_global_id(1) * 4; + int srcOffset = ((x * 4) + (y * width)) / 4; + for (int iy = 0; iy < 4; iy++) + { + uchar8 val = vload8(srcOffset, src); + uchar8 res; + res.odd = val.even; + res.even = val.odd; + vstore8(res, 0, dst + ((y + iy)*width + x) * 2); + srcOffset++; + } +} + +kernel void DecodeIA4(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 8, y = get_global_id(1) * 4; + int srcOffset = ((x * 4) + (y * width)) / 8; + for (int iy = 0; iy < 4; iy++) + { + uchar8 val = vload8(srcOffset, src); + uchar16 res; + res.odd = (val >> (uchar8)4) & (uchar8)0x0F; + res.even = val & (uchar8)0x0F; + res |= res << (uchar16)4; + vstore16(res, 0, dst + ((y + iy)*width + x) * 2); + srcOffset++; + } +} + +kernel void DecodeRGBA8(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 4, y = get_global_id(1) * 4; + int srcOffset = (x * 2) + (y * width) / 2; + for (int iy = 0; iy < 4; iy++) + { + uchar8 ar = vload8(srcOffset, src); + uchar8 gb = vload8(srcOffset + 4, src); + uchar16 res; + res.even.even = gb.odd; + res.even.odd = ar.odd; + res.odd.even = gb.even; + res.odd.odd = ar.even; + vstore16(res, 0, dst + ((y + iy)*width + x) * 4); + srcOffset++; + } +} + +kernel void DecodeRGB565(global ushort *dst, + const global ushort *src, int width) +{ + int x = get_global_id(0) * 4, y = get_global_id(1) * 4; + int srcOffset = x + (y * width) / 4; + for (int iy = 0; iy < 4; iy++) + { + ushort4 val = vload4(srcOffset, src); + val = (val >> (ushort4)8) | (val << (ushort4)8); + vstore4(val, 0, dst + ((y + iy)*width + x)); + srcOffset++; + } +} + +kernel void DecodeRGB5A3(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 4, y = get_global_id(1) * 4; + int srcOffset = x + (y * width) / 4; + for (int iy = 0; iy < 4; iy++) + { + ushort8 val = convert_ushort8(vload8(srcOffset, src)); + ushort4 vs = val.odd | (ushort4)(val.even << (ushort4)8); + + uchar16 resNoAlpha; + resNoAlpha.s26AE = convert_uchar4(vs >> (ushort4)7); // R + resNoAlpha.s159D = convert_uchar4(vs >> (ushort4)2); // G + resNoAlpha.s048C = convert_uchar4(vs << (ushort4)3); // B + resNoAlpha &= (uchar16)0xF8; + resNoAlpha |= (uchar16)(resNoAlpha >> (uchar16)5) & (uchar16)3; // 5 -> 8 + resNoAlpha.s37BF = (uchar4)(0xFF); + + uchar16 resAlpha; + resAlpha.s26AE = convert_uchar4(vs >> (ushort4)8); // R + resAlpha.s159D = convert_uchar4(vs >> (ushort4)4); // G + resAlpha.s048C = convert_uchar4(vs); // B + resAlpha &= (uchar16)0x0F; + resAlpha |= (resAlpha << (uchar16)4); + resAlpha.s37BF = convert_uchar4(vs >> (ushort4)7) & (uchar4)0xE0; + resAlpha.s37BF |= ((resAlpha.s37BF >> (uchar4)3) & (uchar4)0x1C) + | ((resAlpha.s37BF >> (uchar4)6) & (uchar4)0x3); + uchar16 choice = (uchar16)((uchar4)(vs.s0 >> 8), + (uchar4)(vs.s1 >> 8), + (uchar4)(vs.s2 >> 8), + (uchar4)(vs.s3 >> 8)); + uchar16 res; + res = select(resAlpha, resNoAlpha, choice); + vstore16(res, 0, dst + ((y + iy) * width + x) * 4); + srcOffset++; + } +} + +uint4 unpack2bits(uchar b) +{ + return (uint4)(b >> 6, + (b >> 4) & 3, + (b >> 2) & 3, + b & 3); +} + +kernel void decodeCMPRBlock(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 4, y = get_global_id(1) * 4; + uchar8 val = vload8(0, src); + ushort2 color565 = (ushort2)((val.s1 & 0xFF) | (val.s0 << 8), (val.s3 & 0xFF) | (val.s2 << 8)); + uchar8 color32 = convert_uchar8((ushort8) + (((color565 << (ushort2)3) & (ushort2)0xF8) | ((color565 >> (ushort2)2) & (ushort2)0x7), + ((color565 >> (ushort2)3) & (ushort2)0xFC) | ((color565 >> (ushort2)9) & (ushort2)0x3), + ((color565 >> (ushort2)8) & (ushort2)0xF8) | ((color565 >> (ushort2)13) & (ushort2)0x7), + 0xFF, 0xFF)); + uint4 colors; + uint4 colorNoAlpha; + uchar4 frac = convert_uchar4((((convert_ushort4(color32.even) & (ushort4)0xFF) - (convert_ushort4(color32.odd) & (ushort4)0xFF)) * (ushort4)3) / (ushort4)8); + colorNoAlpha = convert_uint4(color32.odd + frac); + colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.even - frac); + colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.odd); + colorNoAlpha = (colorNoAlpha << (uint4)8) | convert_uint4(color32.even); + + uint4 colorAlpha; + uchar4 midpoint = convert_uchar4((convert_ushort4(color32.odd) + convert_ushort4(color32.even) + (ushort4)1) / (ushort4)2); + midpoint.s3 = 0xFF; + colorAlpha = convert_uint4((uchar4)(0, 0, 0, 0)); + colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(midpoint); + colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(color32.odd); + colorAlpha = (colorAlpha << (uint4)8) | convert_uint4(color32.even); + + colors = color565.s0 > color565.s1 ? colorNoAlpha : colorAlpha; + + uint16 colorsFull = (uint16)(colors, colors, colors, colors); + + uint4 shift0 = unpack2bits(val.s4); + uint4 shift1 = unpack2bits(val.s5); + uint4 shift2 = unpack2bits(val.s6); + uint4 shift3 = unpack2bits(val.s7); + uint16 shifts = (uint16)((uint4)(shift3.s0), (uint4)(shift3.s1), (uint4)(shift3.s2), (uint4)(shift3.s3)); + shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift2.s0), (uint4)(shift2.s1), (uint4)(shift2.s2), (uint4)(shift2.s3)); + shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift1.s0), (uint4)(shift1.s1), (uint4)(shift1.s2), (uint4)(shift1.s3)); + shifts = (shifts << (uint16)8) | (uint16)((uint4)(shift0.s0), (uint4)(shift0.s1), (uint4)(shift0.s2), (uint4)(shift0.s3)) << (uint16)3; + + for (int iy = 0; iy < 4; iy++) + { + uchar16 res; + res = convert_uchar16(colorsFull >> (shifts & (uint16)0xFF)) >> (uchar16)8; + vstore16(res, 0, dst); + dst += width * 4; + } +} + +kernel void DecodeCMPR(global uchar *dst, + const global uchar *src, int width) +{ + int x = get_global_id(0) * 8, y = get_global_id(1) * 8; + + src += x * 4 + (y * width) / 2; + + decodeCMPRBlock(dst + (y * width + x) * 4, src, width); + src += 8; + decodeCMPRBlock(dst + (y * width + x + 4) * 4, src, width); + src += 8; + decodeCMPRBlock(dst + ((y + 4) * width + x) * 4, src, width); + src += 8; + decodeCMPRBlock(dst + ((y + 4) * width + x + 4) * 4, src, width); + } \ No newline at end of file diff --git a/Externals/Cg/cgD3D9.h b/Externals/Cg/cgD3D9.h index ca3359bd43..af6db1871e 100644 --- a/Externals/Cg/cgD3D9.h +++ b/Externals/Cg/cgD3D9.h @@ -1,317 +1,317 @@ -/* - * - * Copyright (c) 2002-2010, NVIDIA Corporation. - * - * - * - * NVIDIA Corporation("NVIDIA") supplies this software to you in consideration - * of your agreement to the following terms, and your use, installation, - * modification or redistribution of this NVIDIA software constitutes - * acceptance of these terms. If you do not agree with these terms, please do - * not use, install, modify or redistribute this NVIDIA software. - * - * - * - * In consideration of your agreement to abide by the following terms, and - * subject to these terms, NVIDIA grants you a personal, non-exclusive license, - * under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA - * Software"), to use, reproduce, modify and redistribute the NVIDIA - * Software, with or without modifications, in source and/or binary forms; - * provided that if you redistribute the NVIDIA Software, you must retain the - * copyright notice of NVIDIA, this notice and the following text and - * disclaimers in all such redistributions of the NVIDIA Software. Neither the - * name, trademarks, service marks nor logos of NVIDIA Corporation may be used - * to endorse or promote products derived from the NVIDIA Software without - * specific prior written permission from NVIDIA. Except as expressly stated - * in this notice, no other rights or licenses express or implied, are granted - * by NVIDIA herein, including but not limited to any patent rights that may be - * infringed by your derivative works or by other works in which the NVIDIA - * Software may be incorporated. No hardware is licensed hereunder. - * - * - * - * THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING - * WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION - * EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS. - * - * - * - * IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, - * EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST - * PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE, - * REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE, - * HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING - * NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef CGD3D9_INCLUDED -#define CGD3D9_INCLUDED - -#ifdef _WIN32 - -#pragma once - -#include "cg.h" -#include -#include - -// Set up for either Win32 import/export/lib. -#include -#ifdef CGD3D9DLL_EXPORTS -#define CGD3D9DLL_API __declspec(dllexport) -#elif defined (CG_LIB) -#define CGD3D9DLL_API -#else -#define CGD3D9DLL_API __declspec(dllimport) -#endif - -#ifndef CGD3D9ENTRY -# ifdef _WIN32 -# define CGD3D9ENTRY __cdecl -# else -# define CGD3D9ENTRY -# endif -#endif - -/*--------------------------------------------------------------------------- -// CGerrors that will be fed to cgSetError -// Use cgD3D9TranslateCGerror() to translate these errors into strings. ----------------------------------------------------------------------------*/ -enum cgD3D9Errors -{ - cgD3D9Failed = 1000, - cgD3D9DebugTrace = 1001, -}; - -/*--------------------------------------------------------------------------- -// HRESULTs specific to cgD3D9. When the CGerror is set to cgD3D9Failed -// cgD3D9GetLastError will return an HRESULT that could be one these. -// Use cgD3D9TranslateHRESULT() to translate these errors into strings. ----------------------------------------------------------------------------*/ -static const HRESULT CGD3D9ERR_NOTLOADED = MAKE_HRESULT(1, 0x877, 1); -static const HRESULT CGD3D9ERR_NODEVICE = MAKE_HRESULT(1, 0x877, 2); -static const HRESULT CGD3D9ERR_NOTSAMPLER = MAKE_HRESULT(1, 0x877, 3); -static const HRESULT CGD3D9ERR_INVALIDPROFILE = MAKE_HRESULT(1, 0x877, 4); -static const HRESULT CGD3D9ERR_NULLVALUE = MAKE_HRESULT(1, 0x877, 5); -static const HRESULT CGD3D9ERR_OUTOFRANGE = MAKE_HRESULT(1, 0x877, 6); -static const HRESULT CGD3D9ERR_NOTUNIFORM = MAKE_HRESULT(1, 0x877, 7); -static const HRESULT CGD3D9ERR_NOTMATRIX = MAKE_HRESULT(1, 0x877, 8); -static const HRESULT CGD3D9ERR_INVALIDPARAM = MAKE_HRESULT(1, 0x877, 9); - -/*--------------------------------------------------------------------------- -// Other error return values ----------------------------------------------------------------------------*/ -static const DWORD CGD3D9_INVALID_USAGE = 0xFF; - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifndef CGD3D9_EXPLICIT - -/*--------------------------------------------------------------------------- -// Minimal Interface ----------------------------------------------------------------------------*/ - -CGD3D9DLL_API DWORD CGD3D9ENTRY -cgD3D9TypeToSize( - CGtype type -); - -CGD3D9DLL_API BYTE CGD3D9ENTRY -cgD3D9ResourceToDeclUsage( - CGresource resource -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9GetVertexDeclaration( - CGprogram prog, - D3DVERTEXELEMENT9 decl[MAXD3DDECLLENGTH] -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9ValidateVertexDeclaration( - CGprogram prog, - const D3DVERTEXELEMENT9* decl -); - -/*--------------------------------------------------------------------------- -// Expanded Interface ----------------------------------------------------------------------------*/ - -/* ----- D3D Device Control ----------- */ -CGD3D9DLL_API IDirect3DDevice9 * CGD3D9ENTRY -cgD3D9GetDevice(); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetDevice( - IDirect3DDevice9* pDevice -); - -/* ----- Shader Management ----------- */ - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9LoadProgram( - CGprogram prog, - CGbool paramShadowing, - DWORD assemFlags -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9UnloadProgram( - CGprogram prog -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9IsProgramLoaded( - CGprogram prog -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9BindProgram( - CGprogram prog -); - -/* ----- Parameter Management ----------- */ -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetUniform( - CGparameter param, - const void* floats -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetUniformArray( - CGparameter param, - DWORD offset, - DWORD numItems, - const void* values -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetUniformMatrix( - CGparameter param, - const D3DMATRIX* matrix -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetUniformMatrixArray( - CGparameter param, - DWORD offset, - DWORD numItems, - const D3DMATRIX* matrices -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetTexture( - CGparameter param, - IDirect3DBaseTexture9* tex -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetSamplerState( - CGparameter param, - D3DSAMPLERSTATETYPE type, - DWORD value -); - -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9SetTextureWrapMode( - CGparameter param, - DWORD value -); - -/* ----- Parameter Management (Shadowing) ----------- */ -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9EnableParameterShadowing( - CGprogram prog, - CGbool enable -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9IsParameterShadowingEnabled( - CGprogram prog -); - -/* --------- Profile Options ----------------- */ -CGD3D9DLL_API CGprofile CGD3D9ENTRY -cgD3D9GetLatestVertexProfile(); - -CGD3D9DLL_API CGprofile CGD3D9ENTRY -cgD3D9GetLatestPixelProfile(); - -CGD3D9DLL_API const char * * CGD3D9ENTRY -cgD3D9GetOptimalOptions( - CGprofile profile -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9IsProfileSupported( - CGprofile profile -); - -/* --------- Error reporting ----------------- */ -CGD3D9DLL_API HRESULT CGD3D9ENTRY -cgD3D9GetLastError(); - -CGD3D9DLL_API const char * CGD3D9ENTRY -cgD3D9TranslateCGerror( - CGerror error -); - -CGD3D9DLL_API const char * CGD3D9ENTRY -cgD3D9TranslateHRESULT( - HRESULT hr -); - -CGD3D9DLL_API void CGD3D9ENTRY -cgD3D9EnableDebugTracing( - CGbool enable -); - -/* --------- CgFX support -------------------- */ - -CGD3D9DLL_API void CGD3D9ENTRY -cgD3D9RegisterStates( - CGcontext ctx -); - -CGD3D9DLL_API void CGD3D9ENTRY -cgD3D9SetManageTextureParameters( - CGcontext ctx, - CGbool flag -); - -CGD3D9DLL_API CGbool CGD3D9ENTRY -cgD3D9GetManageTextureParameters( - CGcontext ctx -); - -CGD3D9DLL_API IDirect3DBaseTexture9 * CGD3D9ENTRY -cgD3D9GetTextureParameter( - CGparameter param -); - -CGD3D9DLL_API void CGD3D9ENTRY -cgD3D9SetTextureParameter( - CGparameter param, - IDirect3DBaseTexture9 *tex -); - -CGD3D9DLL_API void CGD3D9ENTRY -cgD3D9UnloadAllPrograms( void ); - - -#endif - -#ifdef __cplusplus -}; -#endif - -#endif // _WIN32 - -#endif +/* + * + * Copyright (c) 2002-2010, NVIDIA Corporation. + * + * + * + * NVIDIA Corporation("NVIDIA") supplies this software to you in consideration + * of your agreement to the following terms, and your use, installation, + * modification or redistribution of this NVIDIA software constitutes + * acceptance of these terms. If you do not agree with these terms, please do + * not use, install, modify or redistribute this NVIDIA software. + * + * + * + * In consideration of your agreement to abide by the following terms, and + * subject to these terms, NVIDIA grants you a personal, non-exclusive license, + * under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA + * Software"), to use, reproduce, modify and redistribute the NVIDIA + * Software, with or without modifications, in source and/or binary forms; + * provided that if you redistribute the NVIDIA Software, you must retain the + * copyright notice of NVIDIA, this notice and the following text and + * disclaimers in all such redistributions of the NVIDIA Software. Neither the + * name, trademarks, service marks nor logos of NVIDIA Corporation may be used + * to endorse or promote products derived from the NVIDIA Software without + * specific prior written permission from NVIDIA. Except as expressly stated + * in this notice, no other rights or licenses express or implied, are granted + * by NVIDIA herein, including but not limited to any patent rights that may be + * infringed by your derivative works or by other works in which the NVIDIA + * Software may be incorporated. No hardware is licensed hereunder. + * + * + * + * THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING + * WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION + * EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS. + * + * + * + * IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, + * EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST + * PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE, + * REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE, + * HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING + * NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef CGD3D9_INCLUDED +#define CGD3D9_INCLUDED + +#ifdef _WIN32 + +#pragma once + +#include "cg.h" +#include +#include + +// Set up for either Win32 import/export/lib. +#include +#ifdef CGD3D9DLL_EXPORTS +#define CGD3D9DLL_API __declspec(dllexport) +#elif defined (CG_LIB) +#define CGD3D9DLL_API +#else +#define CGD3D9DLL_API __declspec(dllimport) +#endif + +#ifndef CGD3D9ENTRY +# ifdef _WIN32 +# define CGD3D9ENTRY __cdecl +# else +# define CGD3D9ENTRY +# endif +#endif + +/*--------------------------------------------------------------------------- +// CGerrors that will be fed to cgSetError +// Use cgD3D9TranslateCGerror() to translate these errors into strings. +---------------------------------------------------------------------------*/ +enum cgD3D9Errors +{ + cgD3D9Failed = 1000, + cgD3D9DebugTrace = 1001, +}; + +/*--------------------------------------------------------------------------- +// HRESULTs specific to cgD3D9. When the CGerror is set to cgD3D9Failed +// cgD3D9GetLastError will return an HRESULT that could be one these. +// Use cgD3D9TranslateHRESULT() to translate these errors into strings. +---------------------------------------------------------------------------*/ +static const HRESULT CGD3D9ERR_NOTLOADED = MAKE_HRESULT(1, 0x877, 1); +static const HRESULT CGD3D9ERR_NODEVICE = MAKE_HRESULT(1, 0x877, 2); +static const HRESULT CGD3D9ERR_NOTSAMPLER = MAKE_HRESULT(1, 0x877, 3); +static const HRESULT CGD3D9ERR_INVALIDPROFILE = MAKE_HRESULT(1, 0x877, 4); +static const HRESULT CGD3D9ERR_NULLVALUE = MAKE_HRESULT(1, 0x877, 5); +static const HRESULT CGD3D9ERR_OUTOFRANGE = MAKE_HRESULT(1, 0x877, 6); +static const HRESULT CGD3D9ERR_NOTUNIFORM = MAKE_HRESULT(1, 0x877, 7); +static const HRESULT CGD3D9ERR_NOTMATRIX = MAKE_HRESULT(1, 0x877, 8); +static const HRESULT CGD3D9ERR_INVALIDPARAM = MAKE_HRESULT(1, 0x877, 9); + +/*--------------------------------------------------------------------------- +// Other error return values +---------------------------------------------------------------------------*/ +static const DWORD CGD3D9_INVALID_USAGE = 0xFF; + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef CGD3D9_EXPLICIT + +/*--------------------------------------------------------------------------- +// Minimal Interface +---------------------------------------------------------------------------*/ + +CGD3D9DLL_API DWORD CGD3D9ENTRY +cgD3D9TypeToSize( + CGtype type +); + +CGD3D9DLL_API BYTE CGD3D9ENTRY +cgD3D9ResourceToDeclUsage( + CGresource resource +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9GetVertexDeclaration( + CGprogram prog, + D3DVERTEXELEMENT9 decl[MAXD3DDECLLENGTH] +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9ValidateVertexDeclaration( + CGprogram prog, + const D3DVERTEXELEMENT9* decl +); + +/*--------------------------------------------------------------------------- +// Expanded Interface +---------------------------------------------------------------------------*/ + +/* ----- D3D Device Control ----------- */ +CGD3D9DLL_API IDirect3DDevice9 * CGD3D9ENTRY +cgD3D9GetDevice(); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetDevice( + IDirect3DDevice9* pDevice +); + +/* ----- Shader Management ----------- */ + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9LoadProgram( + CGprogram prog, + CGbool paramShadowing, + DWORD assemFlags +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9UnloadProgram( + CGprogram prog +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9IsProgramLoaded( + CGprogram prog +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9BindProgram( + CGprogram prog +); + +/* ----- Parameter Management ----------- */ +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetUniform( + CGparameter param, + const void* floats +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetUniformArray( + CGparameter param, + DWORD offset, + DWORD numItems, + const void* values +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetUniformMatrix( + CGparameter param, + const D3DMATRIX* matrix +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetUniformMatrixArray( + CGparameter param, + DWORD offset, + DWORD numItems, + const D3DMATRIX* matrices +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetTexture( + CGparameter param, + IDirect3DBaseTexture9* tex +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetSamplerState( + CGparameter param, + D3DSAMPLERSTATETYPE type, + DWORD value +); + +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9SetTextureWrapMode( + CGparameter param, + DWORD value +); + +/* ----- Parameter Management (Shadowing) ----------- */ +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9EnableParameterShadowing( + CGprogram prog, + CGbool enable +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9IsParameterShadowingEnabled( + CGprogram prog +); + +/* --------- Profile Options ----------------- */ +CGD3D9DLL_API CGprofile CGD3D9ENTRY +cgD3D9GetLatestVertexProfile(); + +CGD3D9DLL_API CGprofile CGD3D9ENTRY +cgD3D9GetLatestPixelProfile(); + +CGD3D9DLL_API const char * * CGD3D9ENTRY +cgD3D9GetOptimalOptions( + CGprofile profile +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9IsProfileSupported( + CGprofile profile +); + +/* --------- Error reporting ----------------- */ +CGD3D9DLL_API HRESULT CGD3D9ENTRY +cgD3D9GetLastError(); + +CGD3D9DLL_API const char * CGD3D9ENTRY +cgD3D9TranslateCGerror( + CGerror error +); + +CGD3D9DLL_API const char * CGD3D9ENTRY +cgD3D9TranslateHRESULT( + HRESULT hr +); + +CGD3D9DLL_API void CGD3D9ENTRY +cgD3D9EnableDebugTracing( + CGbool enable +); + +/* --------- CgFX support -------------------- */ + +CGD3D9DLL_API void CGD3D9ENTRY +cgD3D9RegisterStates( + CGcontext ctx +); + +CGD3D9DLL_API void CGD3D9ENTRY +cgD3D9SetManageTextureParameters( + CGcontext ctx, + CGbool flag +); + +CGD3D9DLL_API CGbool CGD3D9ENTRY +cgD3D9GetManageTextureParameters( + CGcontext ctx +); + +CGD3D9DLL_API IDirect3DBaseTexture9 * CGD3D9ENTRY +cgD3D9GetTextureParameter( + CGparameter param +); + +CGD3D9DLL_API void CGD3D9ENTRY +cgD3D9SetTextureParameter( + CGparameter param, + IDirect3DBaseTexture9 *tex +); + +CGD3D9DLL_API void CGD3D9ENTRY +cgD3D9UnloadAllPrograms( void ); + + +#endif + +#ifdef __cplusplus +}; +#endif + +#endif // _WIN32 + +#endif diff --git a/Externals/MemcardManager/src/MCMdebug.cpp b/Externals/MemcardManager/src/MCMdebug.cpp index a1d65003b3..90942ce683 100644 --- a/Externals/MemcardManager/src/MCMdebug.cpp +++ b/Externals/MemcardManager/src/MCMdebug.cpp @@ -1,519 +1,519 @@ -#include "MemcardManager.h" -#include "MCMdebug.h" - -BEGIN_EVENT_TABLE(CMemcardManagerDebug, wxWindow) - EVT_CLOSE(CMemcardManagerDebug::OnClose) -END_EVENT_TABLE() - -CMemcardManagerDebug::CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos, const wxSize& size) : - wxFrame(parent, wxID_ANY, _T("Memcard Debug Window"), pos, size, MEMCARD_MANAGER_STYLE) -{ - // Create the GUI controls - Init_ChildControls(); - - // Setup Window - SetBackgroundColour(m_Notebook_MCMD->GetBackgroundColour()); - SetSize(size); - SetPosition(pos); - - Layout(); - Show(); -} - - -void CMemcardManagerDebug::updatePanels(GCMemcard **memCard,int card) -{ - memoryCard = memCard; - updateHDRtab(card); - updateDIRtab(card); - updateDIRBtab(card); - updateBATtab(card); - updateBATBtab(card); -} - -void CMemcardManagerDebug::Init_ChildControls() -{ - // Main Notebook - m_Notebook_MCMD = new wxNotebook(this, ID_NOTEBOOK_MAIN, wxDefaultPosition, wxDefaultSize); - - m_Tab_HDR = new wxPanel(m_Notebook_MCMD, ID_TAB_HDR, wxDefaultPosition, wxDefaultSize); - m_Tab_DIR = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR, wxDefaultPosition, wxDefaultSize); - m_Tab_DIR_b = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR_B, wxDefaultPosition, wxDefaultSize); - m_Tab_BAT = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT, wxDefaultPosition, wxDefaultSize); - m_Tab_BAT_b = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT_B, wxDefaultPosition, wxDefaultSize); - - Init_HDR(); - Init_DIR(); - Init_DIR_b(); - Init_BAT(); - Init_BAT_b(); - - // Add Tabs to Notebook - m_Notebook_MCMD->AddPage(m_Tab_HDR, _T("HDR")); - m_Notebook_MCMD->AddPage(m_Tab_DIR, _T("DIR")); - m_Notebook_MCMD->AddPage(m_Tab_DIR_b, _T("DIR_b")); - m_Notebook_MCMD->AddPage(m_Tab_BAT, _T("Bat")); - m_Notebook_MCMD->AddPage(m_Tab_BAT_b, _T("Bat_b")); - - wxBoxSizer* sMain = new wxBoxSizer(wxVERTICAL); - sMain->Add(m_Notebook_MCMD, 1, wxEXPAND|wxALL, 5); - SetSizer(sMain); - Layout(); - Fit(); -} -void CMemcardManagerDebug::OnClose(wxCloseEvent& WXUNUSED (event)) -{ - Hide(); -} - -void CMemcardManagerDebug::Init_HDR() -{ - wxBoxSizer *sMain; - wxStaticBoxSizer *sHDR[2]; - - sMain = new wxBoxSizer(wxHORIZONTAL); - sHDR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:A")); - sHDR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:B")); - - wxGridBagSizer * sOtPaths[2]; - - wxStaticText *st[2][11]; - - for(int i = SLOT_A; i <=SLOT_B;i++) - { - sOtPaths[i] = new wxGridBagSizer(0, 0); - sOtPaths[i]->AddGrowableCol(1); - st[i][0]= new wxStaticText(m_Tab_HDR, 0, wxT("Ser\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][1]= new wxStaticText(m_Tab_HDR, 0, wxT("fmtTime\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][2]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMBIAS\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][3]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMLANG\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][4]= new wxStaticText(m_Tab_HDR, 0, wxT("Unk2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][5]= new wxStaticText(m_Tab_HDR, 0, wxT("deviceID\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][6]= new wxStaticText(m_Tab_HDR, 0, wxT("Size\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][7]= new wxStaticText(m_Tab_HDR, 0, wxT("Encoding\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][8]= new wxStaticText(m_Tab_HDR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][9]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][10]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - t_HDR_ser[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX"), - wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_fmtTime[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XXXXXXXX, XXXXXXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_SRAMBIAS[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_SRAMLANG[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_Unk2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_devID[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_Size[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_Encoding[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_UpdateCounter[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_CheckSum1[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_HDR_CheckSum2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_ser[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_fmtTime[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_SRAMBIAS[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_SRAMLANG[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_Unk2[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][5], wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_devID[i], wxGBPosition(5, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][6], wxGBPosition(6, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_Size[i], wxGBPosition(6, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][7], wxGBPosition(7, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_Encoding[i], wxGBPosition(7, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][8], wxGBPosition(8, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_UpdateCounter[i], wxGBPosition(8, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][9], wxGBPosition(9, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_CheckSum1[i], wxGBPosition(9, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][10], wxGBPosition(10, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_HDR_CheckSum2[i], wxGBPosition(10, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sHDR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); - sMain->Add(sHDR[i], 0, wxEXPAND|wxALL, 1); - } - m_Tab_HDR->SetSizer(sMain); - m_Tab_HDR->Layout(); -} - -void CMemcardManagerDebug::updateHDRtab(int card) -{ - wxString wx_ser, - wx_fmtTime, - wx_SRAMBIAS, - wx_SRAMLANG, - wx_Unk2, - wx_devID, - wx_Size, - wx_Encoding, - wx_UpdateCounter, - wx_CheckSum1, - wx_CheckSum2; - - wx_ser.Printf(wxT("%02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X"), - memoryCard[card]->hdr.serial[0],memoryCard[card]->hdr.serial[1], - memoryCard[card]->hdr.serial[2],memoryCard[card]->hdr.serial[3], - memoryCard[card]->hdr.serial[4],memoryCard[card]->hdr.serial[5], - memoryCard[card]->hdr.serial[6],memoryCard[card]->hdr.serial[7], - memoryCard[card]->hdr.serial[8],memoryCard[card]->hdr.serial[9], - memoryCard[card]->hdr.serial[10],memoryCard[card]->hdr.serial[11]); - - wx_fmtTime.Printf(wxT("%08X, %08X"), - Common::swap32(memoryCard[card]->hdr.fmtTime.high),Common::swap32(memoryCard[card]->hdr.fmtTime.low)); - - wx_SRAMBIAS.Printf(wxT("%02X, %02X, %02X, %02X"), - memoryCard[card]->hdr.SramBias[0],memoryCard[card]->hdr.SramBias[1], - memoryCard[card]->hdr.SramBias[2],memoryCard[card]->hdr.SramBias[3]); - - wx_SRAMLANG.Printf(wxT("%02X, %02X, %02X, %02X"), - memoryCard[card]->hdr.SramLang[0], memoryCard[card]->hdr.SramLang[1], - memoryCard[card]->hdr.SramLang[2],memoryCard[card]->hdr.SramLang[3]); - - wx_Unk2.Printf(wxT("%02X, %02X, %02X, %02X"), - memoryCard[card]->hdr.Unk2[0],memoryCard[card]->hdr.Unk2[1], - memoryCard[card]->hdr.Unk2[2],memoryCard[card]->hdr.Unk2[3]); - - wx_devID.Printf(wxT("%02X, %02X"), - memoryCard[card]->hdr.deviceID[0],memoryCard[card]->hdr.deviceID[1]); - - wx_Size.Printf(wxT("%02X, %02X"), - memoryCard[card]->hdr.SizeMb[0],memoryCard[card]->hdr.SizeMb[1]); - - wx_Encoding.Printf( wxT("%02X, %02X"), - memoryCard[card]->hdr.Encoding[0],memoryCard[card]->hdr.Encoding[1]); - - wx_UpdateCounter.Printf(wxT("%02X, %02X"), - memoryCard[card]->hdr.UpdateCounter[0],memoryCard[card]->hdr.UpdateCounter[1]); - - wx_CheckSum1.Printf(wxT("%02X, %02X"), - memoryCard[card]->hdr.CheckSum1[0],memoryCard[card]->hdr.CheckSum1[1]); - - wx_CheckSum2.Printf(wxT("%02X, %02X"), - memoryCard[card]->hdr.CheckSum2[0],memoryCard[card]->hdr.CheckSum2[1]); - - - t_HDR_ser[card]->SetLabel(wx_ser); - t_HDR_fmtTime[card]->SetLabel(wx_fmtTime); - t_HDR_SRAMBIAS[card]->SetLabel(wx_SRAMBIAS); - t_HDR_SRAMLANG[card]->SetLabel(wx_SRAMLANG); - t_HDR_Unk2[card]->SetLabel(wx_Unk2); - t_HDR_devID[card]->SetLabel(wx_devID); - t_HDR_Size[card]->SetLabel(wx_Size); - t_HDR_Encoding[card]->SetLabel(wx_Encoding); - t_HDR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); - t_HDR_CheckSum1[card]->SetLabel(wx_CheckSum1); - t_HDR_CheckSum2[card]->SetLabel(wx_CheckSum2); -} - - - -void CMemcardManagerDebug::Init_DIR() -{ - wxBoxSizer *sMain; - wxStaticBoxSizer *sDIR[2]; - sMain = new wxBoxSizer(wxHORIZONTAL); - sDIR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:A")); - sDIR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:B")); - - wxGridBagSizer * sOtPaths[3]; - - wxStaticText *st[2][9]; - for(int i = SLOT_A; i <=SLOT_B;i++) - { - sOtPaths[i] = new wxGridBagSizer(0, 0); - sOtPaths[i]->AddGrowableCol(1); - st[i][0]= new wxStaticText(m_Tab_DIR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][1]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][2]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - t_DIR_UpdateCounter[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_DIR_CheckSum1[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_DIR_CheckSum2[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - - sDIR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); - sMain->Add(sDIR[i], 0, wxEXPAND|wxALL, 1); - } - - m_Tab_DIR->SetSizer(sMain); - m_Tab_DIR->Layout(); -} - - -void CMemcardManagerDebug::updateDIRtab(int card) -{ - wxString wx_UpdateCounter, - wx_CheckSum1, - wx_CheckSum2; - - wx_UpdateCounter.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir.UpdateCounter[0],memoryCard[card]->dir.UpdateCounter[1]); - - wx_CheckSum1.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir.CheckSum1[0],memoryCard[card]->dir.CheckSum1[1]); - - wx_CheckSum2.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir.CheckSum2[0],memoryCard[card]->dir.CheckSum2[1]); - - t_DIR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); - t_DIR_CheckSum1[card]->SetLabel(wx_CheckSum1); - t_DIR_CheckSum2[card]->SetLabel(wx_CheckSum2); -} - - -void CMemcardManagerDebug::Init_DIR_b() -{ - wxBoxSizer *sMain; - wxStaticBoxSizer *sDIR_b[2]; - sMain = new wxBoxSizer(wxHORIZONTAL); - sDIR_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:A")); - sDIR_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:B")); - - wxGridBagSizer * sOtPaths[3]; - - wxStaticText *st[2][9]; - for(int i = SLOT_A; i <=SLOT_B;i++) - { - sOtPaths[i] = new wxGridBagSizer(0, 0); - sOtPaths[i]->AddGrowableCol(1); - st[i][0]= new wxStaticText(m_Tab_DIR_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][1]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][2]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - t_DIR_b_UpdateCounter[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_DIR_b_CheckSum1[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_DIR_b_CheckSum2[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_b_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_b_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_DIR_b_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sDIR_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); - sMain->Add(sDIR_b[i], 0, wxEXPAND|wxALL, 1); - } - m_Tab_DIR_b->SetSizer(sMain); - m_Tab_DIR_b->Layout(); -} - -void CMemcardManagerDebug::updateDIRBtab(int card) -{ - wxString wx_UpdateCounter, - wx_CheckSum1, - wx_CheckSum2; - - wx_UpdateCounter.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir_backup.UpdateCounter[0],memoryCard[card]->dir_backup.UpdateCounter[1]); - wx_CheckSum1.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir_backup.CheckSum1[0],memoryCard[card]->dir_backup.CheckSum1[1]); - wx_CheckSum2.Printf(wxT("%02X, %02X"), - memoryCard[card]->dir_backup.CheckSum2[0],memoryCard[card]->dir_backup.CheckSum2[1]); - - t_DIR_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); - t_DIR_b_CheckSum1[card]->SetLabel(wx_CheckSum1); - t_DIR_b_CheckSum2[card]->SetLabel(wx_CheckSum2); -} - -void CMemcardManagerDebug::Init_BAT() -{ - wxBoxSizer *sMain; - wxStaticBoxSizer *sBAT[4]; - sMain = new wxBoxSizer(wxHORIZONTAL); - sBAT[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A")); - sBAT[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B")); - sBAT[2] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A MAP")); - sBAT[3] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B MAP")); - wxGridBagSizer * sOtPaths[4]; - - wxStaticText *st[2][9]; - for(int i = SLOT_A; i <=SLOT_B;i++) - { - sOtPaths[i] = new wxGridBagSizer(0, 0); - sOtPaths[i]->AddGrowableCol(1); - st[i][0]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][1]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][2]= new wxStaticText(m_Tab_BAT, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][3]= new wxStaticText(m_Tab_BAT, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][4]= new wxStaticText(m_Tab_BAT, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - t_BAT_CheckSum1[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_CheckSum2[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_UpdateCounter[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_FreeBlocks[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_LastAllocated[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - - - sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - - sBAT[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); - sMain->Add(sBAT[i], 0, wxEXPAND|wxALL, 1); - } - - for (int k=2;k<=3;k++) //256 - { - sOtPaths[k] = new wxGridBagSizer(0, 0); - sOtPaths[k]->AddGrowableCol(1); - - for(int j=0;j<256;j++) - { - t_BAT_map[j][k%2] = new wxStaticText(m_Tab_BAT, 0, wxT("XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - sOtPaths[k]->Add(t_BAT_map[j][k%2], wxGBPosition(j, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - - } - - sBAT[k]->Add(sOtPaths[k], 0, wxEXPAND|wxALL, 5); - sMain->Add(sBAT[k], 0, wxEXPAND|wxALL, 1); - } - - m_Tab_BAT->SetSizer(sMain); - m_Tab_BAT->Layout(); -} - -void CMemcardManagerDebug::updateBATtab(int card) -{ - wxString wx_UpdateCounter, - wx_CheckSum1, - wx_CheckSum2, - wx_FreeBlocks, - wx_LastAllocated; - - wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum1[0],memoryCard[card]->bat.CheckSum1[1]); - wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum2[0],memoryCard[card]->bat.CheckSum2[1]); - wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.UpdateCounter[0],memoryCard[card]->bat.UpdateCounter[1]); - wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.FreeBlocks[0],memoryCard[card]->bat.FreeBlocks[1]); - wx_LastAllocated.Printf(wxT("%d"), memoryCard[card]->bat.LastAllocated[0] << 8 | memoryCard[card]->bat.LastAllocated[1]); - - t_BAT_CheckSum1[card]->SetLabel(wx_CheckSum1); - t_BAT_CheckSum2[card]->SetLabel(wx_CheckSum2); - t_BAT_UpdateCounter[card]->SetLabel(wx_UpdateCounter); - t_BAT_FreeBlocks[card]->SetLabel(wx_FreeBlocks); - t_BAT_LastAllocated[card]->SetLabel(wx_LastAllocated); - - wxString wx_map[256]; - int pagesMax = 2048; - pagesMax = (1) * 13*8; - for(int j=0;j<2048 && j < pagesMax ;j+=8) - { - wx_map[j/8].Printf(wxT("%d, %d, %d, %d, %d, %d, %d, %d"), - (memoryCard[card]->bat.Map[j] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j]), - (memoryCard[card]->bat.Map[j+1] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+1]), - (memoryCard[card]->bat.Map[j+2] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+2]), - (memoryCard[card]->bat.Map[j+3] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+3]), - (memoryCard[card]->bat.Map[j+4] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+4]), - (memoryCard[card]->bat.Map[j+5] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+5]), - (memoryCard[card]->bat.Map[j+6] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+6]), - (memoryCard[card]->bat.Map[j+7] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+7])); - t_BAT_map[j/8][card]->SetLabel(wx_map[j/8]); - } -} - -void CMemcardManagerDebug::Init_BAT_b() -{ - wxBoxSizer *sMain; - wxStaticBoxSizer *sBAT_b[2]; - sMain = new wxBoxSizer(wxHORIZONTAL); - sBAT_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:A")); - sBAT_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:B")); - - wxGridBagSizer * sOtPaths[3]; - wxStaticText *st[2][9]; - - for(int i = SLOT_A; i <=SLOT_B;i++) - { - sOtPaths[i] = new wxGridBagSizer(0, 0); - sOtPaths[i]->AddGrowableCol(1); - st[i][0]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][1]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][2]= new wxStaticText(m_Tab_BAT_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][3]= new wxStaticText(m_Tab_BAT_b, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - st[i][4]= new wxStaticText(m_Tab_BAT_b, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - t_BAT_b_CheckSum1[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_b_CheckSum2[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_b_UpdateCounter[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_b_FreeBlocks[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - t_BAT_b_LastAllocated[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); - - sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_b_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_b_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_b_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_b_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sOtPaths[i]->Add(t_BAT_b_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); - - sBAT_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); - sMain->Add(sBAT_b[i], 0, wxEXPAND|wxALL, 1); - } - - m_Tab_BAT_b->SetSizer(sMain); - m_Tab_BAT_b->Layout(); -} - -void CMemcardManagerDebug::updateBATBtab(int card) -{ - wxString wx_UpdateCounter, - wx_CheckSum1, - wx_CheckSum2, - wx_FreeBlocks, - wx_LastAllocated; - - wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum1[0],memoryCard[card]->bat_backup.CheckSum1[1]); - wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum2[0],memoryCard[card]->bat_backup.CheckSum2[1]); - wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.UpdateCounter[0],memoryCard[card]->bat_backup.UpdateCounter[1]); - wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.FreeBlocks[0],memoryCard[card]->bat_backup.FreeBlocks[1]); - wx_LastAllocated.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.LastAllocated[0],memoryCard[card]->bat_backup.LastAllocated[1]); - - t_BAT_b_CheckSum1[card]->SetLabel(wx_CheckSum1); - t_BAT_b_CheckSum2[card]->SetLabel(wx_CheckSum2); - t_BAT_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); - t_BAT_b_FreeBlocks[card]->SetLabel(wx_FreeBlocks); - t_BAT_b_LastAllocated[card]->SetLabel(wx_LastAllocated); -} +#include "MemcardManager.h" +#include "MCMdebug.h" + +BEGIN_EVENT_TABLE(CMemcardManagerDebug, wxWindow) + EVT_CLOSE(CMemcardManagerDebug::OnClose) +END_EVENT_TABLE() + +CMemcardManagerDebug::CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos, const wxSize& size) : + wxFrame(parent, wxID_ANY, _T("Memcard Debug Window"), pos, size, MEMCARD_MANAGER_STYLE) +{ + // Create the GUI controls + Init_ChildControls(); + + // Setup Window + SetBackgroundColour(m_Notebook_MCMD->GetBackgroundColour()); + SetSize(size); + SetPosition(pos); + + Layout(); + Show(); +} + + +void CMemcardManagerDebug::updatePanels(GCMemcard **memCard,int card) +{ + memoryCard = memCard; + updateHDRtab(card); + updateDIRtab(card); + updateDIRBtab(card); + updateBATtab(card); + updateBATBtab(card); +} + +void CMemcardManagerDebug::Init_ChildControls() +{ + // Main Notebook + m_Notebook_MCMD = new wxNotebook(this, ID_NOTEBOOK_MAIN, wxDefaultPosition, wxDefaultSize); + + m_Tab_HDR = new wxPanel(m_Notebook_MCMD, ID_TAB_HDR, wxDefaultPosition, wxDefaultSize); + m_Tab_DIR = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR, wxDefaultPosition, wxDefaultSize); + m_Tab_DIR_b = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR_B, wxDefaultPosition, wxDefaultSize); + m_Tab_BAT = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT, wxDefaultPosition, wxDefaultSize); + m_Tab_BAT_b = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT_B, wxDefaultPosition, wxDefaultSize); + + Init_HDR(); + Init_DIR(); + Init_DIR_b(); + Init_BAT(); + Init_BAT_b(); + + // Add Tabs to Notebook + m_Notebook_MCMD->AddPage(m_Tab_HDR, _T("HDR")); + m_Notebook_MCMD->AddPage(m_Tab_DIR, _T("DIR")); + m_Notebook_MCMD->AddPage(m_Tab_DIR_b, _T("DIR_b")); + m_Notebook_MCMD->AddPage(m_Tab_BAT, _T("Bat")); + m_Notebook_MCMD->AddPage(m_Tab_BAT_b, _T("Bat_b")); + + wxBoxSizer* sMain = new wxBoxSizer(wxVERTICAL); + sMain->Add(m_Notebook_MCMD, 1, wxEXPAND|wxALL, 5); + SetSizer(sMain); + Layout(); + Fit(); +} +void CMemcardManagerDebug::OnClose(wxCloseEvent& WXUNUSED (event)) +{ + Hide(); +} + +void CMemcardManagerDebug::Init_HDR() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sHDR[2]; + + sMain = new wxBoxSizer(wxHORIZONTAL); + sHDR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:A")); + sHDR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[2]; + + wxStaticText *st[2][11]; + + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_HDR, 0, wxT("Ser\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_HDR, 0, wxT("fmtTime\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMBIAS\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMLANG\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_HDR, 0, wxT("Unk2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][5]= new wxStaticText(m_Tab_HDR, 0, wxT("deviceID\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][6]= new wxStaticText(m_Tab_HDR, 0, wxT("Size\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][7]= new wxStaticText(m_Tab_HDR, 0, wxT("Encoding\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][8]= new wxStaticText(m_Tab_HDR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][9]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][10]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_HDR_ser[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX"), + wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_fmtTime[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XXXXXXXX, XXXXXXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_SRAMBIAS[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_SRAMLANG[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Unk2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_devID[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Size[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Encoding[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_UpdateCounter[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_CheckSum1[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_CheckSum2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_ser[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_fmtTime[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_SRAMBIAS[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_SRAMLANG[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Unk2[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][5], wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_devID[i], wxGBPosition(5, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][6], wxGBPosition(6, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Size[i], wxGBPosition(6, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][7], wxGBPosition(7, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Encoding[i], wxGBPosition(7, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][8], wxGBPosition(8, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_UpdateCounter[i], wxGBPosition(8, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][9], wxGBPosition(9, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_CheckSum1[i], wxGBPosition(9, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][10], wxGBPosition(10, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_CheckSum2[i], wxGBPosition(10, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sHDR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sHDR[i], 0, wxEXPAND|wxALL, 1); + } + m_Tab_HDR->SetSizer(sMain); + m_Tab_HDR->Layout(); +} + +void CMemcardManagerDebug::updateHDRtab(int card) +{ + wxString wx_ser, + wx_fmtTime, + wx_SRAMBIAS, + wx_SRAMLANG, + wx_Unk2, + wx_devID, + wx_Size, + wx_Encoding, + wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_ser.Printf(wxT("%02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.serial[0],memoryCard[card]->hdr.serial[1], + memoryCard[card]->hdr.serial[2],memoryCard[card]->hdr.serial[3], + memoryCard[card]->hdr.serial[4],memoryCard[card]->hdr.serial[5], + memoryCard[card]->hdr.serial[6],memoryCard[card]->hdr.serial[7], + memoryCard[card]->hdr.serial[8],memoryCard[card]->hdr.serial[9], + memoryCard[card]->hdr.serial[10],memoryCard[card]->hdr.serial[11]); + + wx_fmtTime.Printf(wxT("%08X, %08X"), + Common::swap32(memoryCard[card]->hdr.fmtTime.high),Common::swap32(memoryCard[card]->hdr.fmtTime.low)); + + wx_SRAMBIAS.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.SramBias[0],memoryCard[card]->hdr.SramBias[1], + memoryCard[card]->hdr.SramBias[2],memoryCard[card]->hdr.SramBias[3]); + + wx_SRAMLANG.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.SramLang[0], memoryCard[card]->hdr.SramLang[1], + memoryCard[card]->hdr.SramLang[2],memoryCard[card]->hdr.SramLang[3]); + + wx_Unk2.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.Unk2[0],memoryCard[card]->hdr.Unk2[1], + memoryCard[card]->hdr.Unk2[2],memoryCard[card]->hdr.Unk2[3]); + + wx_devID.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.deviceID[0],memoryCard[card]->hdr.deviceID[1]); + + wx_Size.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.SizeMb[0],memoryCard[card]->hdr.SizeMb[1]); + + wx_Encoding.Printf( wxT("%02X, %02X"), + memoryCard[card]->hdr.Encoding[0],memoryCard[card]->hdr.Encoding[1]); + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.UpdateCounter[0],memoryCard[card]->hdr.UpdateCounter[1]); + + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.CheckSum1[0],memoryCard[card]->hdr.CheckSum1[1]); + + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.CheckSum2[0],memoryCard[card]->hdr.CheckSum2[1]); + + + t_HDR_ser[card]->SetLabel(wx_ser); + t_HDR_fmtTime[card]->SetLabel(wx_fmtTime); + t_HDR_SRAMBIAS[card]->SetLabel(wx_SRAMBIAS); + t_HDR_SRAMLANG[card]->SetLabel(wx_SRAMLANG); + t_HDR_Unk2[card]->SetLabel(wx_Unk2); + t_HDR_devID[card]->SetLabel(wx_devID); + t_HDR_Size[card]->SetLabel(wx_Size); + t_HDR_Encoding[card]->SetLabel(wx_Encoding); + t_HDR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_HDR_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_HDR_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + + + +void CMemcardManagerDebug::Init_DIR() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sDIR[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sDIR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:A")); + sDIR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_DIR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_DIR_UpdateCounter[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_CheckSum1[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_CheckSum2[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + + sDIR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sDIR[i], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_DIR->SetSizer(sMain); + m_Tab_DIR->Layout(); +} + + +void CMemcardManagerDebug::updateDIRtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.UpdateCounter[0],memoryCard[card]->dir.UpdateCounter[1]); + + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.CheckSum1[0],memoryCard[card]->dir.CheckSum1[1]); + + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.CheckSum2[0],memoryCard[card]->dir.CheckSum2[1]); + + t_DIR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_DIR_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_DIR_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + + +void CMemcardManagerDebug::Init_DIR_b() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sDIR_b[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sDIR_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:A")); + sDIR_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_DIR_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_DIR_b_UpdateCounter[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_b_CheckSum1[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_b_CheckSum2[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sDIR_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sDIR_b[i], 0, wxEXPAND|wxALL, 1); + } + m_Tab_DIR_b->SetSizer(sMain); + m_Tab_DIR_b->Layout(); +} + +void CMemcardManagerDebug::updateDIRBtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.UpdateCounter[0],memoryCard[card]->dir_backup.UpdateCounter[1]); + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.CheckSum1[0],memoryCard[card]->dir_backup.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.CheckSum2[0],memoryCard[card]->dir_backup.CheckSum2[1]); + + t_DIR_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_DIR_b_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_DIR_b_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + +void CMemcardManagerDebug::Init_BAT() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sBAT[4]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sBAT[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A")); + sBAT[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B")); + sBAT[2] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A MAP")); + sBAT[3] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B MAP")); + wxGridBagSizer * sOtPaths[4]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_BAT, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_BAT, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_BAT, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_BAT_CheckSum1[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_CheckSum2[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_UpdateCounter[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_FreeBlocks[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_LastAllocated[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + + sBAT[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT[i], 0, wxEXPAND|wxALL, 1); + } + + for (int k=2;k<=3;k++) //256 + { + sOtPaths[k] = new wxGridBagSizer(0, 0); + sOtPaths[k]->AddGrowableCol(1); + + for(int j=0;j<256;j++) + { + t_BAT_map[j][k%2] = new wxStaticText(m_Tab_BAT, 0, wxT("XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + sOtPaths[k]->Add(t_BAT_map[j][k%2], wxGBPosition(j, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + + } + + sBAT[k]->Add(sOtPaths[k], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT[k], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_BAT->SetSizer(sMain); + m_Tab_BAT->Layout(); +} + +void CMemcardManagerDebug::updateBATtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2, + wx_FreeBlocks, + wx_LastAllocated; + + wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum1[0],memoryCard[card]->bat.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum2[0],memoryCard[card]->bat.CheckSum2[1]); + wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.UpdateCounter[0],memoryCard[card]->bat.UpdateCounter[1]); + wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.FreeBlocks[0],memoryCard[card]->bat.FreeBlocks[1]); + wx_LastAllocated.Printf(wxT("%d"), memoryCard[card]->bat.LastAllocated[0] << 8 | memoryCard[card]->bat.LastAllocated[1]); + + t_BAT_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_BAT_CheckSum2[card]->SetLabel(wx_CheckSum2); + t_BAT_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_BAT_FreeBlocks[card]->SetLabel(wx_FreeBlocks); + t_BAT_LastAllocated[card]->SetLabel(wx_LastAllocated); + + wxString wx_map[256]; + int pagesMax = 2048; + pagesMax = (1) * 13*8; + for(int j=0;j<2048 && j < pagesMax ;j+=8) + { + wx_map[j/8].Printf(wxT("%d, %d, %d, %d, %d, %d, %d, %d"), + (memoryCard[card]->bat.Map[j] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j]), + (memoryCard[card]->bat.Map[j+1] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+1]), + (memoryCard[card]->bat.Map[j+2] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+2]), + (memoryCard[card]->bat.Map[j+3] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+3]), + (memoryCard[card]->bat.Map[j+4] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+4]), + (memoryCard[card]->bat.Map[j+5] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+5]), + (memoryCard[card]->bat.Map[j+6] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+6]), + (memoryCard[card]->bat.Map[j+7] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+7])); + t_BAT_map[j/8][card]->SetLabel(wx_map[j/8]); + } +} + +void CMemcardManagerDebug::Init_BAT_b() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sBAT_b[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sBAT_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:A")); + sBAT_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + wxStaticText *st[2][9]; + + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_BAT_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_BAT_b, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_BAT_b, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_BAT_b_CheckSum1[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_CheckSum2[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_UpdateCounter[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_FreeBlocks[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_LastAllocated[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sBAT_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT_b[i], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_BAT_b->SetSizer(sMain); + m_Tab_BAT_b->Layout(); +} + +void CMemcardManagerDebug::updateBATBtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2, + wx_FreeBlocks, + wx_LastAllocated; + + wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum1[0],memoryCard[card]->bat_backup.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum2[0],memoryCard[card]->bat_backup.CheckSum2[1]); + wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.UpdateCounter[0],memoryCard[card]->bat_backup.UpdateCounter[1]); + wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.FreeBlocks[0],memoryCard[card]->bat_backup.FreeBlocks[1]); + wx_LastAllocated.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.LastAllocated[0],memoryCard[card]->bat_backup.LastAllocated[1]); + + t_BAT_b_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_BAT_b_CheckSum2[card]->SetLabel(wx_CheckSum2); + t_BAT_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_BAT_b_FreeBlocks[card]->SetLabel(wx_FreeBlocks); + t_BAT_b_LastAllocated[card]->SetLabel(wx_LastAllocated); +} diff --git a/Externals/MemcardManager/src/MCMdebug.h b/Externals/MemcardManager/src/MCMdebug.h index e4c8e858c8..ca466ebd12 100644 --- a/Externals/MemcardManager/src/MCMdebug.h +++ b/Externals/MemcardManager/src/MCMdebug.h @@ -1,111 +1,111 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef __MCM_H__ -#define __MCM_H__ - -#include "MemcardManager.h" -#include -#include - - -class CMemcardManagerDebug : public wxFrame -{ - public: - - CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); - virtual ~CMemcardManagerDebug(){}; - void updatePanels(GCMemcard ** memCard,int card); - - private: - enum - { - ID_NOTEBOOK_MAIN, - ID_TAB_HDR, - ID_TAB_DIR, - ID_TAB_DIR_B, - ID_TAB_BAT, - ID_TAB_BAT_B, - }; - - - - GCMemcard **memoryCard; - - wxNotebook *m_Notebook_MCMD; - - wxPanel *m_Tab_HDR, - *m_Tab_DIR, - *m_Tab_DIR_b, - *m_Tab_BAT, - *m_Tab_BAT_b; - - wxBoxSizer *sMain, - *sDebug, - *sDebug2; - - wxStaticText *t_HDR_ser[2], - *t_HDR_fmtTime[2], - *t_HDR_SRAMBIAS[2], - *t_HDR_SRAMLANG[2], - *t_HDR_Unk2[2], - *t_HDR_devID[2], - *t_HDR_Size[2], - *t_HDR_Encoding[2], - *t_HDR_UpdateCounter[2], - *t_HDR_CheckSum1[2], - *t_HDR_CheckSum2[2], - - *t_DIR_UpdateCounter[2], - *t_DIR_CheckSum1[2], - *t_DIR_CheckSum2[2], - - *t_DIR_b_UpdateCounter[2], - *t_DIR_b_CheckSum1[2], - *t_DIR_b_CheckSum2[2], - - *t_BAT_CheckSum1[2], - *t_BAT_CheckSum2[2], - *t_BAT_UpdateCounter[2], - *t_BAT_FreeBlocks[2], - *t_BAT_LastAllocated[2], - *t_BAT_map[256][2], - - *t_BAT_b_CheckSum1[2], - *t_BAT_b_CheckSum2[2], - *t_BAT_b_UpdateCounter[2], - *t_BAT_b_FreeBlocks[2], - *t_BAT_b_LastAllocated[2]; - - DECLARE_EVENT_TABLE(); - void Init_ChildControls(); - void OnClose(wxCloseEvent& event); - - void Init_HDR(); - void Init_DIR(); - void Init_DIR_b(); - void Init_BAT(); - void Init_BAT_b(); - void updateHDRtab(int card); - void updateDIRtab(int card); - void updateDIRBtab(int card); - void updateBATtab(int card); - void updateBATBtab(int card); - -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __MCM_H__ +#define __MCM_H__ + +#include "MemcardManager.h" +#include +#include + + +class CMemcardManagerDebug : public wxFrame +{ + public: + + CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + virtual ~CMemcardManagerDebug(){}; + void updatePanels(GCMemcard ** memCard,int card); + + private: + enum + { + ID_NOTEBOOK_MAIN, + ID_TAB_HDR, + ID_TAB_DIR, + ID_TAB_DIR_B, + ID_TAB_BAT, + ID_TAB_BAT_B, + }; + + + + GCMemcard **memoryCard; + + wxNotebook *m_Notebook_MCMD; + + wxPanel *m_Tab_HDR, + *m_Tab_DIR, + *m_Tab_DIR_b, + *m_Tab_BAT, + *m_Tab_BAT_b; + + wxBoxSizer *sMain, + *sDebug, + *sDebug2; + + wxStaticText *t_HDR_ser[2], + *t_HDR_fmtTime[2], + *t_HDR_SRAMBIAS[2], + *t_HDR_SRAMLANG[2], + *t_HDR_Unk2[2], + *t_HDR_devID[2], + *t_HDR_Size[2], + *t_HDR_Encoding[2], + *t_HDR_UpdateCounter[2], + *t_HDR_CheckSum1[2], + *t_HDR_CheckSum2[2], + + *t_DIR_UpdateCounter[2], + *t_DIR_CheckSum1[2], + *t_DIR_CheckSum2[2], + + *t_DIR_b_UpdateCounter[2], + *t_DIR_b_CheckSum1[2], + *t_DIR_b_CheckSum2[2], + + *t_BAT_CheckSum1[2], + *t_BAT_CheckSum2[2], + *t_BAT_UpdateCounter[2], + *t_BAT_FreeBlocks[2], + *t_BAT_LastAllocated[2], + *t_BAT_map[256][2], + + *t_BAT_b_CheckSum1[2], + *t_BAT_b_CheckSum2[2], + *t_BAT_b_UpdateCounter[2], + *t_BAT_b_FreeBlocks[2], + *t_BAT_b_LastAllocated[2]; + + DECLARE_EVENT_TABLE(); + void Init_ChildControls(); + void OnClose(wxCloseEvent& event); + + void Init_HDR(); + void Init_DIR(); + void Init_DIR_b(); + void Init_BAT(); + void Init_BAT_b(); + void updateHDRtab(int card); + void updateDIRtab(int card); + void updateDIRBtab(int card); + void updateBATtab(int card); + void updateBATBtab(int card); + +}; + +#endif diff --git a/Externals/MemcardManager/src/MCMmain.h b/Externals/MemcardManager/src/MCMmain.h index 149ee695c6..88c944f5e5 100644 --- a/Externals/MemcardManager/src/MCMmain.h +++ b/Externals/MemcardManager/src/MCMmain.h @@ -1,17 +1,17 @@ -#ifndef _MCM__ -#define _MCM__ - -void __Log(int logNumber, const char* text, ...){logNumber; text;} -void __Logv(int log, int v, const char *format, ...){log; v; format;} - -#include "MemcardManager.h" -#include "Timer.h" - -class MCMApp - : public wxApp -{ - public: - bool OnInit(); - -}; -#endif +#ifndef _MCM__ +#define _MCM__ + +void __Log(int logNumber, const char* text, ...){logNumber; text;} +void __Logv(int log, int v, const char *format, ...){log; v; format;} + +#include "MemcardManager.h" +#include "Timer.h" + +class MCMApp + : public wxApp +{ + public: + bool OnInit(); + +}; +#endif diff --git a/Externals/MemcardManager/src/mcmMain.cpp b/Externals/MemcardManager/src/mcmMain.cpp index eddc182f18..423576367f 100644 --- a/Externals/MemcardManager/src/mcmMain.cpp +++ b/Externals/MemcardManager/src/mcmMain.cpp @@ -1,51 +1,51 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -#include "MCMmain.h" - -IMPLEMENT_APP(MCMApp) - -CMemcardManager *main_frame; - -#if defined HAVE_WX && HAVE_WX -bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int Style) -{ - return wxYES == wxMessageBox(wxString::FromAscii(text), - wxString::FromAscii(caption), - (yes_no)?wxYES_NO:wxOK); -} -#endif - -bool MCMApp::OnInit() -{ - // Register message box handler - #if defined(HAVE_WX) && HAVE_WX - RegisterMsgAlertHandler(&wxMsgAlert); - #endif - - main_frame = new CMemcardManager((wxFrame*) NULL, wxID_ANY, wxString::FromAscii("Memcard Manager"), - wxPoint(100, 100), wxSize(800, 600)); - main_frame->Show(); - SetTopWindow(main_frame); - return true; -} - -u32 CEXIIPL::GetGCTime() -{ - const u32 cJanuary2000 = 0x386D42C0; // Seconds between 1.1.1970 and 1.1.2000 - u64 ltime = Common::Timer::GetLocalTimeSinceJan1970(); - return ((u32)ltime - cJanuary2000); -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +#include "MCMmain.h" + +IMPLEMENT_APP(MCMApp) + +CMemcardManager *main_frame; + +#if defined HAVE_WX && HAVE_WX +bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int Style) +{ + return wxYES == wxMessageBox(wxString::FromAscii(text), + wxString::FromAscii(caption), + (yes_no)?wxYES_NO:wxOK); +} +#endif + +bool MCMApp::OnInit() +{ + // Register message box handler + #if defined(HAVE_WX) && HAVE_WX + RegisterMsgAlertHandler(&wxMsgAlert); + #endif + + main_frame = new CMemcardManager((wxFrame*) NULL, wxID_ANY, wxString::FromAscii("Memcard Manager"), + wxPoint(100, 100), wxSize(800, 600)); + main_frame->Show(); + SetTopWindow(main_frame); + return true; +} + +u32 CEXIIPL::GetGCTime() +{ + const u32 cJanuary2000 = 0x386D42C0; // Seconds between 1.1.1970 and 1.1.2000 + u64 ltime = Common::Timer::GetLocalTimeSinceJan1970(); + return ((u32)ltime - cJanuary2000); +} diff --git a/Externals/SDL/Include_1.2/SDL.h b/Externals/SDL/Include_1.2/SDL.h index 4f1a86ccd4..60ac26ce4b 100644 --- a/Externals/SDL/Include_1.2/SDL.h +++ b/Externals/SDL/Include_1.2/SDL.h @@ -1,94 +1,94 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Main include header for the SDL library */ - -#ifndef _SDL_H -#define _SDL_H - -#include "SDL_main.h" -#include "SDL_stdinc.h" -#include "SDL_audio.h" -#include "SDL_cdrom.h" -#include "SDL_cpuinfo.h" -#include "SDL_endian.h" -#include "SDL_error.h" -#include "SDL_events.h" -#include "SDL_loadso.h" -#include "SDL_mutex.h" -#include "SDL_rwops.h" -#include "SDL_thread.h" -#include "SDL_timer.h" -#include "SDL_video.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* As of version 0.5, SDL is loaded dynamically into the application */ - -/* These are the flags which may be passed to SDL_Init() -- you should - specify the subsystems which you will be using in your application. -*/ -#define SDL_INIT_TIMER 0x00000001 -#define SDL_INIT_AUDIO 0x00000010 -#define SDL_INIT_VIDEO 0x00000020 -#define SDL_INIT_CDROM 0x00000100 -#define SDL_INIT_JOYSTICK 0x00000200 -#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ -#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ -#define SDL_INIT_EVERYTHING 0x0000FFFF - -/* This function loads the SDL dynamically linked library and initializes - * the subsystems specified by 'flags' (and those satisfying dependencies) - * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV) - */ -extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); - -/* This function initializes specific SDL subsystems */ -extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); - -/* This function cleans up specific SDL subsystems */ -extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); - -/* This function returns mask of the specified subsystems which have - been initialized. - If 'flags' is 0, it returns a mask of all initialized subsystems. -*/ -extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); - -/* This function cleans up all initialized subsystems and unloads the - * dynamically linked library. You should call it upon all exit conditions. - */ -extern DECLSPEC void SDLCALL SDL_Quit(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_H */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Main include header for the SDL library */ + +#ifndef _SDL_H +#define _SDL_H + +#include "SDL_main.h" +#include "SDL_stdinc.h" +#include "SDL_audio.h" +#include "SDL_cdrom.h" +#include "SDL_cpuinfo.h" +#include "SDL_endian.h" +#include "SDL_error.h" +#include "SDL_events.h" +#include "SDL_loadso.h" +#include "SDL_mutex.h" +#include "SDL_rwops.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_video.h" +#include "SDL_version.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/* These are the flags which may be passed to SDL_Init() -- you should + specify the subsystems which you will be using in your application. +*/ +#define SDL_INIT_TIMER 0x00000001 +#define SDL_INIT_AUDIO 0x00000010 +#define SDL_INIT_VIDEO 0x00000020 +#define SDL_INIT_CDROM 0x00000100 +#define SDL_INIT_JOYSTICK 0x00000200 +#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ +#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ +#define SDL_INIT_EVERYTHING 0x0000FFFF + +/* This function loads the SDL dynamically linked library and initializes + * the subsystems specified by 'flags' (and those satisfying dependencies) + * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup + * signal handlers for some commonly ignored fatal signals (like SIGSEGV) + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/* This function initializes specific SDL subsystems */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/* This function cleans up specific SDL subsystems */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/* This function returns mask of the specified subsystems which have + been initialized. + If 'flags' is 0, it returns a mask of all initialized subsystems. +*/ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/* This function cleans up all initialized subsystems and unloads the + * dynamically linked library. You should call it upon all exit conditions. + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_H */ diff --git a/Externals/SDL/Include_1.2/SDL_active.h b/Externals/SDL/Include_1.2/SDL_active.h index d71d61aeaa..2cf474c5a3 100644 --- a/Externals/SDL/Include_1.2/SDL_active.h +++ b/Externals/SDL/Include_1.2/SDL_active.h @@ -1,58 +1,58 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL application focus event handling */ - -#ifndef _SDL_active_h -#define _SDL_active_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The available application states */ -#define SDL_APPMOUSEFOCUS 0x01 /* The app has mouse coverage */ -#define SDL_APPINPUTFOCUS 0x02 /* The app has input focus */ -#define SDL_APPACTIVE 0x04 /* The application is active */ - -/* Function prototypes */ -/* - * This function returns the current state of the application, which is a - * bitwise combination of SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS, and - * SDL_APPACTIVE. If SDL_APPACTIVE is set, then the user is able to - * see your application, otherwise it has been iconified or disabled. - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetAppState(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_active_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL application focus event handling */ + +#ifndef _SDL_active_h +#define _SDL_active_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The available application states */ +#define SDL_APPMOUSEFOCUS 0x01 /* The app has mouse coverage */ +#define SDL_APPINPUTFOCUS 0x02 /* The app has input focus */ +#define SDL_APPACTIVE 0x04 /* The application is active */ + +/* Function prototypes */ +/* + * This function returns the current state of the application, which is a + * bitwise combination of SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS, and + * SDL_APPACTIVE. If SDL_APPACTIVE is set, then the user is able to + * see your application, otherwise it has been iconified or disabled. + */ +extern DECLSPEC Uint8 SDLCALL SDL_GetAppState(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_active_h */ diff --git a/Externals/SDL/Include_1.2/SDL_audio.h b/Externals/SDL/Include_1.2/SDL_audio.h index 4362182002..68ec4759d8 100644 --- a/Externals/SDL/Include_1.2/SDL_audio.h +++ b/Externals/SDL/Include_1.2/SDL_audio.h @@ -1,253 +1,253 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Access to the raw audio mixing buffer for the SDL library */ - -#ifndef _SDL_audio_h -#define _SDL_audio_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_endian.h" -#include "SDL_mutex.h" -#include "SDL_thread.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The calculated values in this structure are calculated by SDL_OpenAudio() */ -typedef struct SDL_AudioSpec { - int freq; /* DSP frequency -- samples per second */ - Uint16 format; /* Audio data format */ - Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ - Uint8 silence; /* Audio buffer silence value (calculated) */ - Uint16 samples; /* Audio buffer size in samples (power of 2) */ - Uint16 padding; /* Necessary for some compile environments */ - Uint32 size; /* Audio buffer size in bytes (calculated) */ - /* This function is called when the audio device needs more data. - 'stream' is a pointer to the audio data buffer - 'len' is the length of that buffer in bytes. - Once the callback returns, the buffer will no longer be valid. - Stereo samples are stored in a LRLRLR ordering. - */ - void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); - void *userdata; -} SDL_AudioSpec; - -/* Audio format flags (defaults to LSB byte order) */ -#define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ -#define AUDIO_S8 0x8008 /* Signed 8-bit samples */ -#define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ -#define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ -#define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ -#define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ -#define AUDIO_U16 AUDIO_U16LSB -#define AUDIO_S16 AUDIO_S16LSB - -/* Native audio byte ordering */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define AUDIO_U16SYS AUDIO_U16LSB -#define AUDIO_S16SYS AUDIO_S16LSB -#else -#define AUDIO_U16SYS AUDIO_U16MSB -#define AUDIO_S16SYS AUDIO_S16MSB -#endif - - -/* A structure to hold a set of audio conversion filters and buffers */ -typedef struct SDL_AudioCVT { - int needed; /* Set to 1 if conversion possible */ - Uint16 src_format; /* Source audio format */ - Uint16 dst_format; /* Target audio format */ - double rate_incr; /* Rate conversion increment */ - Uint8 *buf; /* Buffer to hold entire audio data */ - int len; /* Length of original audio buffer */ - int len_cvt; /* Length of converted audio buffer */ - int len_mult; /* buffer must be len*len_mult big */ - double len_ratio; /* Given len, final size is len*len_ratio */ - void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); - int filter_index; /* Current audio conversion function */ -} SDL_AudioCVT; - - -/* Function prototypes */ - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the audio driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - */ -extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); -extern DECLSPEC void SDLCALL SDL_AudioQuit(void); - -/* This function fills the given character buffer with the name of the - * current audio driver, and returns a pointer to it if the audio driver has - * been initialized. It returns NULL if no driver has been initialized. - */ -extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); - -/* - * This function opens the audio device with the desired parameters, and - * returns 0 if successful, placing the actual hardware parameters in the - * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio - * data passed to the callback function will be guaranteed to be in the - * requested format, and will be automatically converted to the hardware - * audio format if necessary. This function returns -1 if it failed - * to open the audio device, or couldn't set up the audio thread. - * - * When filling in the desired audio spec structure, - * 'desired->freq' should be the desired audio frequency in samples-per-second. - * 'desired->format' should be the desired audio format. - * 'desired->samples' is the desired size of the audio buffer, in samples. - * This number should be a power of two, and may be adjusted by the audio - * driver to a value more suitable for the hardware. Good values seem to - * range between 512 and 8096 inclusive, depending on the application and - * CPU speed. Smaller values yield faster response time, but can lead - * to underflow if the application is doing heavy processing and cannot - * fill the audio buffer in time. A stereo sample consists of both right - * and left channels in LR ordering. - * Note that the number of samples is directly related to time by the - * following formula: ms = (samples*1000)/freq - * 'desired->size' is the size in bytes of the audio buffer, and is - * calculated by SDL_OpenAudio(). - * 'desired->silence' is the value used to set the buffer to silence, - * and is calculated by SDL_OpenAudio(). - * 'desired->callback' should be set to a function that will be called - * when the audio device is ready for more data. It is passed a pointer - * to the audio buffer, and the length in bytes of the audio buffer. - * This function usually runs in a separate thread, and so you should - * protect data structures that it accesses by calling SDL_LockAudio() - * and SDL_UnlockAudio() in your code. - * 'desired->userdata' is passed as the first parameter to your callback - * function. - * - * The audio device starts out playing silence when it's opened, and should - * be enabled for playing by calling SDL_PauseAudio(0) when you are ready - * for your audio callback function to be called. Since the audio driver - * may modify the requested size of the audio buffer, you should allocate - * any local mixing buffers after you open the audio device. - */ -extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained); - -/* - * Get the current audio state: - */ -typedef enum { - SDL_AUDIO_STOPPED = 0, - SDL_AUDIO_PLAYING, - SDL_AUDIO_PAUSED -} SDL_audiostatus; -extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); - -/* - * This function pauses and unpauses the audio callback processing. - * It should be called with a parameter of 0 after opening the audio - * device to start playing sound. This is so you can safely initialize - * data for your callback function after opening the audio device. - * Silence will be written to the audio device during the pause. - */ -extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); - -/* - * This function loads a WAVE from the data source, automatically freeing - * that source if 'freesrc' is non-zero. For example, to load a WAVE file, - * you could do: - * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); - * - * If this function succeeds, it returns the given SDL_AudioSpec, - * filled with the audio data format of the wave data, and sets - * 'audio_buf' to a malloc()'d buffer containing the audio data, - * and sets 'audio_len' to the length of that audio buffer, in bytes. - * You need to free the audio buffer with SDL_FreeWAV() when you are - * done with it. - * - * This function returns NULL and sets the SDL error message if the - * wave file cannot be opened, uses an unknown data format, or is - * corrupt. Currently raw and MS-ADPCM WAVE files are supported. - */ -extern DECLSPEC SDL_AudioSpec * SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len); - -/* Compatibility convenience function -- loads a WAV from a file */ -#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ - SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) - -/* - * This function frees data previously allocated with SDL_LoadWAV_RW() - */ -extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf); - -/* - * This function takes a source format and rate and a destination format - * and rate, and initializes the 'cvt' structure with information needed - * by SDL_ConvertAudio() to convert a buffer of audio data from one format - * to the other. - * This function returns 0, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, - Uint16 src_format, Uint8 src_channels, int src_rate, - Uint16 dst_format, Uint8 dst_channels, int dst_rate); - -/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), - * created an audio buffer cvt->buf, and filled it with cvt->len bytes of - * audio data in the source format, this function will convert it in-place - * to the desired format. - * The data conversion may expand the size of the audio data, so the buffer - * cvt->buf should be allocated after the cvt structure is initialized by - * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. - */ -extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt); - -/* - * This takes two audio buffers of the playing audio format and mixes - * them, performing addition, volume adjustment, and overflow clipping. - * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume. Note this does not change hardware volume. - * This is provided for convenience -- you can mix your own audio data. - */ -#define SDL_MIX_MAXVOLUME 128 -extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume); - -/* - * The lock manipulated by these functions protects the callback function. - * During a LockAudio/UnlockAudio pair, you can be guaranteed that the - * callback function is not running. Do not call these from the callback - * function or you will cause deadlock. - */ -extern DECLSPEC void SDLCALL SDL_LockAudio(void); -extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); - -/* - * This function shuts down audio processing and closes the audio device. - */ -extern DECLSPEC void SDLCALL SDL_CloseAudio(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_audio_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Access to the raw audio mixing buffer for the SDL library */ + +#ifndef _SDL_audio_h +#define _SDL_audio_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_endian.h" +#include "SDL_mutex.h" +#include "SDL_thread.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The calculated values in this structure are calculated by SDL_OpenAudio() */ +typedef struct SDL_AudioSpec { + int freq; /* DSP frequency -- samples per second */ + Uint16 format; /* Audio data format */ + Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /* Audio buffer silence value (calculated) */ + Uint16 samples; /* Audio buffer size in samples (power of 2) */ + Uint16 padding; /* Necessary for some compile environments */ + Uint32 size; /* Audio buffer size in bytes (calculated) */ + /* This function is called when the audio device needs more data. + 'stream' is a pointer to the audio data buffer + 'len' is the length of that buffer in bytes. + Once the callback returns, the buffer will no longer be valid. + Stereo samples are stored in a LRLRLR ordering. + */ + void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); + void *userdata; +} SDL_AudioSpec; + +/* Audio format flags (defaults to LSB byte order) */ +#define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /* Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB + +/* Native audio byte ordering */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#endif + + +/* A structure to hold a set of audio conversion filters and buffers */ +typedef struct SDL_AudioCVT { + int needed; /* Set to 1 if conversion possible */ + Uint16 src_format; /* Source audio format */ + Uint16 dst_format; /* Target audio format */ + double rate_incr; /* Rate conversion increment */ + Uint8 *buf; /* Buffer to hold entire audio data */ + int len; /* Length of original audio buffer */ + int len_cvt; /* Length of converted audio buffer */ + int len_mult; /* buffer must be len*len_mult big */ + double len_ratio; /* Given len, final size is len*len_ratio */ + void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); + int filter_index; /* Current audio conversion function */ +} SDL_AudioCVT; + + +/* Function prototypes */ + +/* These functions are used internally, and should not be used unless you + * have a specific need to specify the audio driver you want to use. + * You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); + +/* This function fills the given character buffer with the name of the + * current audio driver, and returns a pointer to it if the audio driver has + * been initialized. It returns NULL if no driver has been initialized. + */ +extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); + +/* + * This function opens the audio device with the desired parameters, and + * returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio + * data passed to the callback function will be guaranteed to be in the + * requested format, and will be automatically converted to the hardware + * audio format if necessary. This function returns -1 if it failed + * to open the audio device, or couldn't set up the audio thread. + * + * When filling in the desired audio spec structure, + * 'desired->freq' should be the desired audio frequency in samples-per-second. + * 'desired->format' should be the desired audio format. + * 'desired->samples' is the desired size of the audio buffer, in samples. + * This number should be a power of two, and may be adjusted by the audio + * driver to a value more suitable for the hardware. Good values seem to + * range between 512 and 8096 inclusive, depending on the application and + * CPU speed. Smaller values yield faster response time, but can lead + * to underflow if the application is doing heavy processing and cannot + * fill the audio buffer in time. A stereo sample consists of both right + * and left channels in LR ordering. + * Note that the number of samples is directly related to time by the + * following formula: ms = (samples*1000)/freq + * 'desired->size' is the size in bytes of the audio buffer, and is + * calculated by SDL_OpenAudio(). + * 'desired->silence' is the value used to set the buffer to silence, + * and is calculated by SDL_OpenAudio(). + * 'desired->callback' should be set to a function that will be called + * when the audio device is ready for more data. It is passed a pointer + * to the audio buffer, and the length in bytes of the audio buffer. + * This function usually runs in a separate thread, and so you should + * protect data structures that it accesses by calling SDL_LockAudio() + * and SDL_UnlockAudio() in your code. + * 'desired->userdata' is passed as the first parameter to your callback + * function. + * + * The audio device starts out playing silence when it's opened, and should + * be enabled for playing by calling SDL_PauseAudio(0) when you are ready + * for your audio callback function to be called. Since the audio driver + * may modify the requested size of the audio buffer, you should allocate + * any local mixing buffers after you open the audio device. + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained); + +/* + * Get the current audio state: + */ +typedef enum { + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_audiostatus; +extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); + +/* + * This function pauses and unpauses the audio callback processing. + * It should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); + +/* + * This function loads a WAVE from the data source, automatically freeing + * that source if 'freesrc' is non-zero. For example, to load a WAVE file, + * you could do: + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); + * + * If this function succeeds, it returns the given SDL_AudioSpec, + * filled with the audio data format of the wave data, and sets + * 'audio_buf' to a malloc()'d buffer containing the audio data, + * and sets 'audio_len' to the length of that audio buffer, in bytes. + * You need to free the audio buffer with SDL_FreeWAV() when you are + * done with it. + * + * This function returns NULL and sets the SDL error message if the + * wave file cannot be opened, uses an unknown data format, or is + * corrupt. Currently raw and MS-ADPCM WAVE files are supported. + */ +extern DECLSPEC SDL_AudioSpec * SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len); + +/* Compatibility convenience function -- loads a WAV from a file */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/* + * This function frees data previously allocated with SDL_LoadWAV_RW() + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf); + +/* + * This function takes a source format and rate and a destination format + * and rate, and initializes the 'cvt' structure with information needed + * by SDL_ConvertAudio() to convert a buffer of audio data from one format + * to the other. + * This function returns 0, or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, + Uint16 src_format, Uint8 src_channels, int src_rate, + Uint16 dst_format, Uint8 dst_channels, int dst_rate); + +/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), + * created an audio buffer cvt->buf, and filled it with cvt->len bytes of + * audio data in the source format, this function will convert it in-place + * to the desired format. + * The data conversion may expand the size of the audio data, so the buffer + * cvt->buf should be allocated after the cvt structure is initialized by + * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt); + +/* + * This takes two audio buffers of the playing audio format and mixes + * them, performing addition, volume adjustment, and overflow clipping. + * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume. Note this does not change hardware volume. + * This is provided for convenience -- you can mix your own audio data. + */ +#define SDL_MIX_MAXVOLUME 128 +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume); + +/* + * The lock manipulated by these functions protects the callback function. + * During a LockAudio/UnlockAudio pair, you can be guaranteed that the + * callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); + +/* + * This function shuts down audio processing and closes the audio device. + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_audio_h */ diff --git a/Externals/SDL/Include_1.2/SDL_byteorder.h b/Externals/SDL/Include_1.2/SDL_byteorder.h index b9ac75b8e3..3871cfed56 100644 --- a/Externals/SDL/Include_1.2/SDL_byteorder.h +++ b/Externals/SDL/Include_1.2/SDL_byteorder.h @@ -1,24 +1,24 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_endian.h" +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* DEPRECATED */ +#include "SDL_endian.h" diff --git a/Externals/SDL/Include_1.2/SDL_cdrom.h b/Externals/SDL/Include_1.2/SDL_cdrom.h index 002d697669..5f8f0c62a0 100644 --- a/Externals/SDL/Include_1.2/SDL_cdrom.h +++ b/Externals/SDL/Include_1.2/SDL_cdrom.h @@ -1,171 +1,171 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is the CD-audio control API for Simple DirectMedia Layer */ - -#ifndef _SDL_cdrom_h -#define _SDL_cdrom_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_CDROM flag. This causes SDL to scan the system - for CD-ROM drives, and load appropriate drivers. -*/ - -/* The maximum number of CD-ROM tracks on a disk */ -#define SDL_MAX_TRACKS 99 - -/* The types of CD-ROM track possible */ -#define SDL_AUDIO_TRACK 0x00 -#define SDL_DATA_TRACK 0x04 - -/* The possible states which a CD-ROM drive can be in. */ -typedef enum { - CD_TRAYEMPTY, - CD_STOPPED, - CD_PLAYING, - CD_PAUSED, - CD_ERROR = -1 -} CDstatus; - -/* Given a status, returns true if there's a disk in the drive */ -#define CD_INDRIVE(status) ((int)(status) > 0) - -typedef struct SDL_CDtrack { - Uint8 id; /* Track number */ - Uint8 type; /* Data or audio track */ - Uint16 unused; - Uint32 length; /* Length, in frames, of this track */ - Uint32 offset; /* Offset, in frames, from start of disk */ -} SDL_CDtrack; - -/* This structure is only current as of the last call to SDL_CDStatus() */ -typedef struct SDL_CD { - int id; /* Private drive identifier */ - CDstatus status; /* Current drive status */ - - /* The rest of this structure is only valid if there's a CD in drive */ - int numtracks; /* Number of tracks on disk */ - int cur_track; /* Current track position */ - int cur_frame; /* Current frame offset within current track */ - SDL_CDtrack track[SDL_MAX_TRACKS+1]; -} SDL_CD; - -/* Conversion functions from frames to Minute/Second/Frames and vice versa */ -#define CD_FPS 75 -#define FRAMES_TO_MSF(f, M,S,F) { \ - int value = f; \ - *(F) = value%CD_FPS; \ - value /= CD_FPS; \ - *(S) = value%60; \ - value /= 60; \ - *(M) = value; \ -} -#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) - -/* CD-audio API functions: */ - -/* Returns the number of CD-ROM drives on the system, or -1 if - SDL_Init() has not been called with the SDL_INIT_CDROM flag. - */ -extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); - -/* Returns a human-readable, system-dependent identifier for the CD-ROM. - Example: - "/dev/cdrom" - "E:" - "/dev/disk/ide/1/master" -*/ -extern DECLSPEC const char * SDLCALL SDL_CDName(int drive); - -/* Opens a CD-ROM drive for access. It returns a drive handle on success, - or NULL if the drive was invalid or busy. This newly opened CD-ROM - becomes the default CD used when other CD functions are passed a NULL - CD-ROM handle. - Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. -*/ -extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive); - -/* This function returns the current status of the given drive. - If the drive has a CD in it, the table of contents of the CD and current - play position of the CD will be stored in the SDL_CD structure. -*/ -extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom); - -/* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' - tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play - until the end of the CD. This function will skip data tracks. - This function should only be called after calling SDL_CDStatus() to - get track information about the CD. - For example: - // Play entire CD: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); - // Play last track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { - SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); - } - // Play first and second track and 10 seconds of third track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); - - This function returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom, - int start_track, int start_frame, int ntracks, int nframes); - -/* Play the given CD starting at 'start' frame for 'length' frames. - It returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length); - -/* Pause play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom); - -/* Resume play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom); - -/* Stop play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom); - -/* Eject CD-ROM -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom); - -/* Closes the handle for the CD-ROM drive */ -extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This is the CD-audio control API for Simple DirectMedia Layer */ + +#ifndef _SDL_cdrom_h +#define _SDL_cdrom_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* In order to use these functions, SDL_Init() must have been called + with the SDL_INIT_CDROM flag. This causes SDL to scan the system + for CD-ROM drives, and load appropriate drivers. +*/ + +/* The maximum number of CD-ROM tracks on a disk */ +#define SDL_MAX_TRACKS 99 + +/* The types of CD-ROM track possible */ +#define SDL_AUDIO_TRACK 0x00 +#define SDL_DATA_TRACK 0x04 + +/* The possible states which a CD-ROM drive can be in. */ +typedef enum { + CD_TRAYEMPTY, + CD_STOPPED, + CD_PLAYING, + CD_PAUSED, + CD_ERROR = -1 +} CDstatus; + +/* Given a status, returns true if there's a disk in the drive */ +#define CD_INDRIVE(status) ((int)(status) > 0) + +typedef struct SDL_CDtrack { + Uint8 id; /* Track number */ + Uint8 type; /* Data or audio track */ + Uint16 unused; + Uint32 length; /* Length, in frames, of this track */ + Uint32 offset; /* Offset, in frames, from start of disk */ +} SDL_CDtrack; + +/* This structure is only current as of the last call to SDL_CDStatus() */ +typedef struct SDL_CD { + int id; /* Private drive identifier */ + CDstatus status; /* Current drive status */ + + /* The rest of this structure is only valid if there's a CD in drive */ + int numtracks; /* Number of tracks on disk */ + int cur_track; /* Current track position */ + int cur_frame; /* Current frame offset within current track */ + SDL_CDtrack track[SDL_MAX_TRACKS+1]; +} SDL_CD; + +/* Conversion functions from frames to Minute/Second/Frames and vice versa */ +#define CD_FPS 75 +#define FRAMES_TO_MSF(f, M,S,F) { \ + int value = f; \ + *(F) = value%CD_FPS; \ + value /= CD_FPS; \ + *(S) = value%60; \ + value /= 60; \ + *(M) = value; \ +} +#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) + +/* CD-audio API functions: */ + +/* Returns the number of CD-ROM drives on the system, or -1 if + SDL_Init() has not been called with the SDL_INIT_CDROM flag. + */ +extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); + +/* Returns a human-readable, system-dependent identifier for the CD-ROM. + Example: + "/dev/cdrom" + "E:" + "/dev/disk/ide/1/master" +*/ +extern DECLSPEC const char * SDLCALL SDL_CDName(int drive); + +/* Opens a CD-ROM drive for access. It returns a drive handle on success, + or NULL if the drive was invalid or busy. This newly opened CD-ROM + becomes the default CD used when other CD functions are passed a NULL + CD-ROM handle. + Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. +*/ +extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive); + +/* This function returns the current status of the given drive. + If the drive has a CD in it, the table of contents of the CD and current + play position of the CD will be stored in the SDL_CD structure. +*/ +extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom); + +/* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' + tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play + until the end of the CD. This function will skip data tracks. + This function should only be called after calling SDL_CDStatus() to + get track information about the CD. + For example: + // Play entire CD: + if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) + SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); + // Play last track: + if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { + SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); + } + // Play first and second track and 10 seconds of third track: + if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) + SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); + + This function returns 0, or -1 if there was an error. +*/ +extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom, + int start_track, int start_frame, int ntracks, int nframes); + +/* Play the given CD starting at 'start' frame for 'length' frames. + It returns 0, or -1 if there was an error. +*/ +extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length); + +/* Pause play -- returns 0, or -1 on error */ +extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom); + +/* Resume play -- returns 0, or -1 on error */ +extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom); + +/* Stop play -- returns 0, or -1 on error */ +extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom); + +/* Eject CD-ROM -- returns 0, or -1 on error */ +extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom); + +/* Closes the handle for the CD-ROM drive */ +extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_video_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config.h b/Externals/SDL/Include_1.2/SDL_config.h index d835a3b237..c82f42adf0 100644 --- a/Externals/SDL/Include_1.2/SDL_config.h +++ b/Externals/SDL/Include_1.2/SDL_config.h @@ -1,45 +1,45 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -#include "SDL_platform.h" - -/* Add any platform that doesn't build using the configure system */ -#if defined(__DREAMCAST__) -#include "SDL_config_dreamcast.h" -#elif defined(__MACOS__) -#include "SDL_config_macos.h" -#elif defined(__MACOSX__) -#include "SDL_config_macosx.h" -#elif defined(__SYMBIAN32__) -#include "SDL_config_symbian.h" /* must be before win32! */ -#elif defined(__WIN32__) -#include "SDL_config_win32.h" -#elif defined(__OS2__) -#include "SDL_config_os2.h" -#else -#include "SDL_config_minimal.h" -#endif /* platform config */ - -#endif /* _SDL_config_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_h +#define _SDL_config_h + +#include "SDL_platform.h" + +/* Add any platform that doesn't build using the configure system */ +#if defined(__DREAMCAST__) +#include "SDL_config_dreamcast.h" +#elif defined(__MACOS__) +#include "SDL_config_macos.h" +#elif defined(__MACOSX__) +#include "SDL_config_macosx.h" +#elif defined(__SYMBIAN32__) +#include "SDL_config_symbian.h" /* must be before win32! */ +#elif defined(__WIN32__) +#include "SDL_config_win32.h" +#elif defined(__OS2__) +#include "SDL_config_os2.h" +#else +#include "SDL_config_minimal.h" +#endif /* platform config */ + +#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config.h.in b/Externals/SDL/Include_1.2/SDL_config.h.in index b3bef19a76..fb49c0e2fa 100644 --- a/Externals/SDL/Include_1.2/SDL_config.h.in +++ b/Externals/SDL/Include_1.2/SDL_config.h.in @@ -1,306 +1,306 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* Make sure that this isn't included by Visual C++ */ -#ifdef _MSC_VER -#error You should copy include/SDL_config.h.default to include/SDL_config.h -#endif - -/* C language features */ -#undef const -#undef inline -#undef volatile - -/* C datatypes */ -#undef size_t -#undef int8_t -#undef uint8_t -#undef int16_t -#undef uint16_t -#undef int32_t -#undef uint32_t -#undef int64_t -#undef uint64_t -#undef uintptr_t -#undef SDL_HAS_64BIT_TYPE - -/* Endianness */ -#undef SDL_BYTEORDER - -/* Comment this if you want to build without any C library requirements */ -#undef HAVE_LIBC -#if HAVE_LIBC - -/* Useful headers */ -#undef HAVE_ALLOCA_H -#undef HAVE_SYS_TYPES_H -#undef HAVE_STDIO_H -#undef STDC_HEADERS -#undef HAVE_STDLIB_H -#undef HAVE_STDARG_H -#undef HAVE_MALLOC_H -#undef HAVE_MEMORY_H -#undef HAVE_STRING_H -#undef HAVE_STRINGS_H -#undef HAVE_INTTYPES_H -#undef HAVE_STDINT_H -#undef HAVE_CTYPE_H -#undef HAVE_MATH_H -#undef HAVE_ICONV_H -#undef HAVE_SIGNAL_H -#undef HAVE_ALTIVEC_H - -/* C library functions */ -#undef HAVE_MALLOC -#undef HAVE_CALLOC -#undef HAVE_REALLOC -#undef HAVE_FREE -#undef HAVE_ALLOCA -#ifndef _WIN32 /* Don't use C runtime versions of these on Windows */ -#undef HAVE_GETENV -#undef HAVE_PUTENV -#undef HAVE_UNSETENV -#endif -#undef HAVE_QSORT -#undef HAVE_ABS -#undef HAVE_BCOPY -#undef HAVE_MEMSET -#undef HAVE_MEMCPY -#undef HAVE_MEMMOVE -#undef HAVE_MEMCMP -#undef HAVE_STRLEN -#undef HAVE_STRLCPY -#undef HAVE_STRLCAT -#undef HAVE_STRDUP -#undef HAVE__STRREV -#undef HAVE__STRUPR -#undef HAVE__STRLWR -#undef HAVE_INDEX -#undef HAVE_RINDEX -#undef HAVE_STRCHR -#undef HAVE_STRRCHR -#undef HAVE_STRSTR -#undef HAVE_ITOA -#undef HAVE__LTOA -#undef HAVE__UITOA -#undef HAVE__ULTOA -#undef HAVE_STRTOL -#undef HAVE_STRTOUL -#undef HAVE__I64TOA -#undef HAVE__UI64TOA -#undef HAVE_STRTOLL -#undef HAVE_STRTOULL -#undef HAVE_STRTOD -#undef HAVE_ATOI -#undef HAVE_ATOF -#undef HAVE_STRCMP -#undef HAVE_STRNCMP -#undef HAVE__STRICMP -#undef HAVE_STRCASECMP -#undef HAVE__STRNICMP -#undef HAVE_STRNCASECMP -#undef HAVE_SSCANF -#undef HAVE_SNPRINTF -#undef HAVE_VSNPRINTF -#undef HAVE_ICONV -#undef HAVE_SIGACTION -#undef HAVE_SETJMP -#undef HAVE_NANOSLEEP -#undef HAVE_CLOCK_GETTIME -#undef HAVE_DLVSYM -#undef HAVE_GETPAGESIZE -#undef HAVE_MPROTECT - -#else -/* We may need some replacement for stdarg.h here */ -#include -#endif /* HAVE_LIBC */ - -/* Allow disabling of core subsystems */ -#undef SDL_AUDIO_DISABLED -#undef SDL_CDROM_DISABLED -#undef SDL_CPUINFO_DISABLED -#undef SDL_EVENTS_DISABLED -#undef SDL_FILE_DISABLED -#undef SDL_JOYSTICK_DISABLED -#undef SDL_LOADSO_DISABLED -#undef SDL_THREADS_DISABLED -#undef SDL_TIMERS_DISABLED -#undef SDL_VIDEO_DISABLED - -/* Enable various audio drivers */ -#undef SDL_AUDIO_DRIVER_ALSA -#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC -#undef SDL_AUDIO_DRIVER_ARTS -#undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC -#undef SDL_AUDIO_DRIVER_BAUDIO -#undef SDL_AUDIO_DRIVER_BSD -#undef SDL_AUDIO_DRIVER_COREAUDIO -#undef SDL_AUDIO_DRIVER_DART -#undef SDL_AUDIO_DRIVER_DC -#undef SDL_AUDIO_DRIVER_DISK -#undef SDL_AUDIO_DRIVER_DUMMY -#undef SDL_AUDIO_DRIVER_DMEDIA -#undef SDL_AUDIO_DRIVER_DSOUND -#undef SDL_AUDIO_DRIVER_PULSE -#undef SDL_AUDIO_DRIVER_PULSE_DYNAMIC -#undef SDL_AUDIO_DRIVER_ESD -#undef SDL_AUDIO_DRIVER_ESD_DYNAMIC -#undef SDL_AUDIO_DRIVER_MINT -#undef SDL_AUDIO_DRIVER_MMEAUDIO -#undef SDL_AUDIO_DRIVER_NAS -#undef SDL_AUDIO_DRIVER_OSS -#undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H -#undef SDL_AUDIO_DRIVER_PAUD -#undef SDL_AUDIO_DRIVER_QNXNTO -#undef SDL_AUDIO_DRIVER_SNDMGR -#undef SDL_AUDIO_DRIVER_SUNAUDIO -#undef SDL_AUDIO_DRIVER_WAVEOUT - -/* Enable various cdrom drivers */ -#undef SDL_CDROM_AIX -#undef SDL_CDROM_BEOS -#undef SDL_CDROM_BSDI -#undef SDL_CDROM_DC -#undef SDL_CDROM_DUMMY -#undef SDL_CDROM_FREEBSD -#undef SDL_CDROM_LINUX -#undef SDL_CDROM_MACOS -#undef SDL_CDROM_MACOSX -#undef SDL_CDROM_MINT -#undef SDL_CDROM_OPENBSD -#undef SDL_CDROM_OS2 -#undef SDL_CDROM_OSF -#undef SDL_CDROM_QNX -#undef SDL_CDROM_WIN32 - -/* Enable various input drivers */ -#undef SDL_INPUT_LINUXEV -#undef SDL_INPUT_TSLIB -#undef SDL_JOYSTICK_BEOS -#undef SDL_JOYSTICK_DC -#undef SDL_JOYSTICK_DUMMY -#undef SDL_JOYSTICK_IOKIT -#undef SDL_JOYSTICK_LINUX -#undef SDL_JOYSTICK_MACOS -#undef SDL_JOYSTICK_MINT -#undef SDL_JOYSTICK_OS2 -#undef SDL_JOYSTICK_RISCOS -#undef SDL_JOYSTICK_WINMM -#undef SDL_JOYSTICK_USBHID -#undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H - -/* Enable various shared object loading systems */ -#undef SDL_LOADSO_BEOS -#undef SDL_LOADSO_DLCOMPAT -#undef SDL_LOADSO_DLOPEN -#undef SDL_LOADSO_DUMMY -#undef SDL_LOADSO_LDG -#undef SDL_LOADSO_MACOS -#undef SDL_LOADSO_OS2 -#undef SDL_LOADSO_WIN32 - -/* Enable various threading systems */ -#undef SDL_THREAD_BEOS -#undef SDL_THREAD_DC -#undef SDL_THREAD_OS2 -#undef SDL_THREAD_PTH -#undef SDL_THREAD_PTHREAD -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP -#undef SDL_THREAD_SPROC -#undef SDL_THREAD_WIN32 - -/* Enable various timer systems */ -#undef SDL_TIMER_BEOS -#undef SDL_TIMER_DC -#undef SDL_TIMER_DUMMY -#undef SDL_TIMER_MACOS -#undef SDL_TIMER_MINT -#undef SDL_TIMER_OS2 -#undef SDL_TIMER_RISCOS -#undef SDL_TIMER_UNIX -#undef SDL_TIMER_WIN32 -#undef SDL_TIMER_WINCE - -/* Enable various video drivers */ -#undef SDL_VIDEO_DRIVER_AALIB -#undef SDL_VIDEO_DRIVER_BWINDOW -#undef SDL_VIDEO_DRIVER_DC -#undef SDL_VIDEO_DRIVER_DDRAW -#undef SDL_VIDEO_DRIVER_DGA -#undef SDL_VIDEO_DRIVER_DIRECTFB -#undef SDL_VIDEO_DRIVER_DRAWSPROCKET -#undef SDL_VIDEO_DRIVER_DUMMY -#undef SDL_VIDEO_DRIVER_FBCON -#undef SDL_VIDEO_DRIVER_GAPI -#undef SDL_VIDEO_DRIVER_GEM -#undef SDL_VIDEO_DRIVER_GGI -#undef SDL_VIDEO_DRIVER_IPOD -#undef SDL_VIDEO_DRIVER_NANOX -#undef SDL_VIDEO_DRIVER_OS2FS -#undef SDL_VIDEO_DRIVER_PHOTON -#undef SDL_VIDEO_DRIVER_PICOGUI -#undef SDL_VIDEO_DRIVER_PS2GS -#undef SDL_VIDEO_DRIVER_QTOPIA -#undef SDL_VIDEO_DRIVER_QUARTZ -#undef SDL_VIDEO_DRIVER_RISCOS -#undef SDL_VIDEO_DRIVER_SVGALIB -#undef SDL_VIDEO_DRIVER_TOOLBOX -#undef SDL_VIDEO_DRIVER_VGL -#undef SDL_VIDEO_DRIVER_WINDIB -#undef SDL_VIDEO_DRIVER_WSCONS -#undef SDL_VIDEO_DRIVER_X11 -#undef SDL_VIDEO_DRIVER_X11_DGAMOUSE -#undef SDL_VIDEO_DRIVER_X11_DPMS -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER -#undef SDL_VIDEO_DRIVER_X11_VIDMODE -#undef SDL_VIDEO_DRIVER_X11_XINERAMA -#undef SDL_VIDEO_DRIVER_X11_XME -#undef SDL_VIDEO_DRIVER_X11_XRANDR -#undef SDL_VIDEO_DRIVER_X11_XV -#undef SDL_VIDEO_DRIVER_XBIOS - -/* Enable OpenGL support */ -#undef SDL_VIDEO_OPENGL -#undef SDL_VIDEO_OPENGL_GLX -#undef SDL_VIDEO_OPENGL_WGL -#undef SDL_VIDEO_OPENGL_OSMESA -#undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC - -/* Enable assembly routines */ -#undef SDL_ASSEMBLY_ROUTINES -#undef SDL_HERMES_BLITTERS -#undef SDL_ALTIVEC_BLITTERS - -#endif /* _SDL_config_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_h +#define _SDL_config_h + +/* This is a set of defines to configure the SDL features */ + +/* General platform specific identifiers */ +#include "SDL_platform.h" + +/* Make sure that this isn't included by Visual C++ */ +#ifdef _MSC_VER +#error You should copy include/SDL_config.h.default to include/SDL_config.h +#endif + +/* C language features */ +#undef const +#undef inline +#undef volatile + +/* C datatypes */ +#undef size_t +#undef int8_t +#undef uint8_t +#undef int16_t +#undef uint16_t +#undef int32_t +#undef uint32_t +#undef int64_t +#undef uint64_t +#undef uintptr_t +#undef SDL_HAS_64BIT_TYPE + +/* Endianness */ +#undef SDL_BYTEORDER + +/* Comment this if you want to build without any C library requirements */ +#undef HAVE_LIBC +#if HAVE_LIBC + +/* Useful headers */ +#undef HAVE_ALLOCA_H +#undef HAVE_SYS_TYPES_H +#undef HAVE_STDIO_H +#undef STDC_HEADERS +#undef HAVE_STDLIB_H +#undef HAVE_STDARG_H +#undef HAVE_MALLOC_H +#undef HAVE_MEMORY_H +#undef HAVE_STRING_H +#undef HAVE_STRINGS_H +#undef HAVE_INTTYPES_H +#undef HAVE_STDINT_H +#undef HAVE_CTYPE_H +#undef HAVE_MATH_H +#undef HAVE_ICONV_H +#undef HAVE_SIGNAL_H +#undef HAVE_ALTIVEC_H + +/* C library functions */ +#undef HAVE_MALLOC +#undef HAVE_CALLOC +#undef HAVE_REALLOC +#undef HAVE_FREE +#undef HAVE_ALLOCA +#ifndef _WIN32 /* Don't use C runtime versions of these on Windows */ +#undef HAVE_GETENV +#undef HAVE_PUTENV +#undef HAVE_UNSETENV +#endif +#undef HAVE_QSORT +#undef HAVE_ABS +#undef HAVE_BCOPY +#undef HAVE_MEMSET +#undef HAVE_MEMCPY +#undef HAVE_MEMMOVE +#undef HAVE_MEMCMP +#undef HAVE_STRLEN +#undef HAVE_STRLCPY +#undef HAVE_STRLCAT +#undef HAVE_STRDUP +#undef HAVE__STRREV +#undef HAVE__STRUPR +#undef HAVE__STRLWR +#undef HAVE_INDEX +#undef HAVE_RINDEX +#undef HAVE_STRCHR +#undef HAVE_STRRCHR +#undef HAVE_STRSTR +#undef HAVE_ITOA +#undef HAVE__LTOA +#undef HAVE__UITOA +#undef HAVE__ULTOA +#undef HAVE_STRTOL +#undef HAVE_STRTOUL +#undef HAVE__I64TOA +#undef HAVE__UI64TOA +#undef HAVE_STRTOLL +#undef HAVE_STRTOULL +#undef HAVE_STRTOD +#undef HAVE_ATOI +#undef HAVE_ATOF +#undef HAVE_STRCMP +#undef HAVE_STRNCMP +#undef HAVE__STRICMP +#undef HAVE_STRCASECMP +#undef HAVE__STRNICMP +#undef HAVE_STRNCASECMP +#undef HAVE_SSCANF +#undef HAVE_SNPRINTF +#undef HAVE_VSNPRINTF +#undef HAVE_ICONV +#undef HAVE_SIGACTION +#undef HAVE_SETJMP +#undef HAVE_NANOSLEEP +#undef HAVE_CLOCK_GETTIME +#undef HAVE_DLVSYM +#undef HAVE_GETPAGESIZE +#undef HAVE_MPROTECT + +#else +/* We may need some replacement for stdarg.h here */ +#include +#endif /* HAVE_LIBC */ + +/* Allow disabling of core subsystems */ +#undef SDL_AUDIO_DISABLED +#undef SDL_CDROM_DISABLED +#undef SDL_CPUINFO_DISABLED +#undef SDL_EVENTS_DISABLED +#undef SDL_FILE_DISABLED +#undef SDL_JOYSTICK_DISABLED +#undef SDL_LOADSO_DISABLED +#undef SDL_THREADS_DISABLED +#undef SDL_TIMERS_DISABLED +#undef SDL_VIDEO_DISABLED + +/* Enable various audio drivers */ +#undef SDL_AUDIO_DRIVER_ALSA +#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC +#undef SDL_AUDIO_DRIVER_ARTS +#undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC +#undef SDL_AUDIO_DRIVER_BAUDIO +#undef SDL_AUDIO_DRIVER_BSD +#undef SDL_AUDIO_DRIVER_COREAUDIO +#undef SDL_AUDIO_DRIVER_DART +#undef SDL_AUDIO_DRIVER_DC +#undef SDL_AUDIO_DRIVER_DISK +#undef SDL_AUDIO_DRIVER_DUMMY +#undef SDL_AUDIO_DRIVER_DMEDIA +#undef SDL_AUDIO_DRIVER_DSOUND +#undef SDL_AUDIO_DRIVER_PULSE +#undef SDL_AUDIO_DRIVER_PULSE_DYNAMIC +#undef SDL_AUDIO_DRIVER_ESD +#undef SDL_AUDIO_DRIVER_ESD_DYNAMIC +#undef SDL_AUDIO_DRIVER_MINT +#undef SDL_AUDIO_DRIVER_MMEAUDIO +#undef SDL_AUDIO_DRIVER_NAS +#undef SDL_AUDIO_DRIVER_OSS +#undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H +#undef SDL_AUDIO_DRIVER_PAUD +#undef SDL_AUDIO_DRIVER_QNXNTO +#undef SDL_AUDIO_DRIVER_SNDMGR +#undef SDL_AUDIO_DRIVER_SUNAUDIO +#undef SDL_AUDIO_DRIVER_WAVEOUT + +/* Enable various cdrom drivers */ +#undef SDL_CDROM_AIX +#undef SDL_CDROM_BEOS +#undef SDL_CDROM_BSDI +#undef SDL_CDROM_DC +#undef SDL_CDROM_DUMMY +#undef SDL_CDROM_FREEBSD +#undef SDL_CDROM_LINUX +#undef SDL_CDROM_MACOS +#undef SDL_CDROM_MACOSX +#undef SDL_CDROM_MINT +#undef SDL_CDROM_OPENBSD +#undef SDL_CDROM_OS2 +#undef SDL_CDROM_OSF +#undef SDL_CDROM_QNX +#undef SDL_CDROM_WIN32 + +/* Enable various input drivers */ +#undef SDL_INPUT_LINUXEV +#undef SDL_INPUT_TSLIB +#undef SDL_JOYSTICK_BEOS +#undef SDL_JOYSTICK_DC +#undef SDL_JOYSTICK_DUMMY +#undef SDL_JOYSTICK_IOKIT +#undef SDL_JOYSTICK_LINUX +#undef SDL_JOYSTICK_MACOS +#undef SDL_JOYSTICK_MINT +#undef SDL_JOYSTICK_OS2 +#undef SDL_JOYSTICK_RISCOS +#undef SDL_JOYSTICK_WINMM +#undef SDL_JOYSTICK_USBHID +#undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H + +/* Enable various shared object loading systems */ +#undef SDL_LOADSO_BEOS +#undef SDL_LOADSO_DLCOMPAT +#undef SDL_LOADSO_DLOPEN +#undef SDL_LOADSO_DUMMY +#undef SDL_LOADSO_LDG +#undef SDL_LOADSO_MACOS +#undef SDL_LOADSO_OS2 +#undef SDL_LOADSO_WIN32 + +/* Enable various threading systems */ +#undef SDL_THREAD_BEOS +#undef SDL_THREAD_DC +#undef SDL_THREAD_OS2 +#undef SDL_THREAD_PTH +#undef SDL_THREAD_PTHREAD +#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX +#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP +#undef SDL_THREAD_SPROC +#undef SDL_THREAD_WIN32 + +/* Enable various timer systems */ +#undef SDL_TIMER_BEOS +#undef SDL_TIMER_DC +#undef SDL_TIMER_DUMMY +#undef SDL_TIMER_MACOS +#undef SDL_TIMER_MINT +#undef SDL_TIMER_OS2 +#undef SDL_TIMER_RISCOS +#undef SDL_TIMER_UNIX +#undef SDL_TIMER_WIN32 +#undef SDL_TIMER_WINCE + +/* Enable various video drivers */ +#undef SDL_VIDEO_DRIVER_AALIB +#undef SDL_VIDEO_DRIVER_BWINDOW +#undef SDL_VIDEO_DRIVER_DC +#undef SDL_VIDEO_DRIVER_DDRAW +#undef SDL_VIDEO_DRIVER_DGA +#undef SDL_VIDEO_DRIVER_DIRECTFB +#undef SDL_VIDEO_DRIVER_DRAWSPROCKET +#undef SDL_VIDEO_DRIVER_DUMMY +#undef SDL_VIDEO_DRIVER_FBCON +#undef SDL_VIDEO_DRIVER_GAPI +#undef SDL_VIDEO_DRIVER_GEM +#undef SDL_VIDEO_DRIVER_GGI +#undef SDL_VIDEO_DRIVER_IPOD +#undef SDL_VIDEO_DRIVER_NANOX +#undef SDL_VIDEO_DRIVER_OS2FS +#undef SDL_VIDEO_DRIVER_PHOTON +#undef SDL_VIDEO_DRIVER_PICOGUI +#undef SDL_VIDEO_DRIVER_PS2GS +#undef SDL_VIDEO_DRIVER_QTOPIA +#undef SDL_VIDEO_DRIVER_QUARTZ +#undef SDL_VIDEO_DRIVER_RISCOS +#undef SDL_VIDEO_DRIVER_SVGALIB +#undef SDL_VIDEO_DRIVER_TOOLBOX +#undef SDL_VIDEO_DRIVER_VGL +#undef SDL_VIDEO_DRIVER_WINDIB +#undef SDL_VIDEO_DRIVER_WSCONS +#undef SDL_VIDEO_DRIVER_X11 +#undef SDL_VIDEO_DRIVER_X11_DGAMOUSE +#undef SDL_VIDEO_DRIVER_X11_DPMS +#undef SDL_VIDEO_DRIVER_X11_DYNAMIC +#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT +#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR +#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER +#undef SDL_VIDEO_DRIVER_X11_VIDMODE +#undef SDL_VIDEO_DRIVER_X11_XINERAMA +#undef SDL_VIDEO_DRIVER_X11_XME +#undef SDL_VIDEO_DRIVER_X11_XRANDR +#undef SDL_VIDEO_DRIVER_X11_XV +#undef SDL_VIDEO_DRIVER_XBIOS + +/* Enable OpenGL support */ +#undef SDL_VIDEO_OPENGL +#undef SDL_VIDEO_OPENGL_GLX +#undef SDL_VIDEO_OPENGL_WGL +#undef SDL_VIDEO_OPENGL_OSMESA +#undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC + +/* Enable assembly routines */ +#undef SDL_ASSEMBLY_ROUTINES +#undef SDL_HERMES_BLITTERS +#undef SDL_ALTIVEC_BLITTERS + +#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_dreamcast.h b/Externals/SDL/Include_1.2/SDL_config_dreamcast.h index ebbb087218..9cbeea3166 100644 --- a/Externals/SDL/Include_1.2/SDL_config_dreamcast.h +++ b/Externals/SDL/Include_1.2/SDL_config_dreamcast.h @@ -1,106 +1,106 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_dreamcast_h -#define _SDL_config_dreamcast_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned long uintptr_t; -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRDUP 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DC 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_DC 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_DC 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DUMMY 1 - -/* Enable various threading systems */ -#define SDL_THREAD_DC 1 - -/* Enable various timer systems */ -#define SDL_TIMER_DC 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DC 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_dreamcast_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_dreamcast_h +#define _SDL_config_dreamcast_h + +#include "SDL_platform.h" + +/* This is a set of defines to configure the SDL features */ + +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef signed long long int64_t; +typedef unsigned long long uint64_t; +typedef unsigned long uintptr_t; +#define SDL_HAS_64BIT_TYPE 1 + +/* Useful headers */ +#define HAVE_SYS_TYPES_H 1 +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STRING_H 1 +#define HAVE_CTYPE_H 1 + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRDUP 1 +#define HAVE_INDEX 1 +#define HAVE_RINDEX 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRICMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_SSCANF 1 +#define HAVE_SNPRINTF 1 +#define HAVE_VSNPRINTF 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_DC 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various cdrom drivers */ +#define SDL_CDROM_DC 1 + +/* Enable various input drivers */ +#define SDL_JOYSTICK_DC 1 + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_DUMMY 1 + +/* Enable various threading systems */ +#define SDL_THREAD_DC 1 + +/* Enable various timer systems */ +#define SDL_TIMER_DC 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_DC 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 + +#endif /* _SDL_config_dreamcast_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_macos.h b/Externals/SDL/Include_1.2/SDL_config_macos.h index 6723e133fe..c4a1c59804 100644 --- a/Externals/SDL/Include_1.2/SDL_config_macos.h +++ b/Externals/SDL/Include_1.2/SDL_config_macos.h @@ -1,112 +1,112 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_macos_h -#define _SDL_config_macos_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -#include - -typedef SInt8 int8_t; -typedef UInt8 uint8_t; -typedef SInt16 int16_t; -typedef UInt16 uint16_t; -typedef SInt32 int32_t; -typedef UInt32 uint32_t; -typedef SInt64 int64_t; -typedef UInt64 uint64_t; -typedef unsigned long uintptr_t; - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_SSCANF 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_SNDMGR 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#if TARGET_API_MAC_CARBON -#define SDL_CDROM_DUMMY 1 -#else -#define SDL_CDROM_MACOS 1 -#endif - -/* Enable various input drivers */ -#if TARGET_API_MAC_CARBON -#define SDL_JOYSTICK_DUMMY 1 -#else -#define SDL_JOYSTICK_MACOS 1 -#endif - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_MACOS 1 - -/* Enable various threading systems */ -#define SDL_THREADS_DISABLED 1 - -/* Enable various timer systems */ -#define SDL_TIMER_MACOS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_DRAWSPROCKET 1 -#define SDL_VIDEO_DRIVER_TOOLBOX 1 - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 - -#endif /* _SDL_config_macos_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_macos_h +#define _SDL_config_macos_h + +#include "SDL_platform.h" + +/* This is a set of defines to configure the SDL features */ + +#include + +typedef SInt8 int8_t; +typedef UInt8 uint8_t; +typedef SInt16 int16_t; +typedef UInt16 uint16_t; +typedef SInt32 int32_t; +typedef UInt32 uint32_t; +typedef SInt64 int64_t; +typedef UInt64 uint64_t; +typedef unsigned long uintptr_t; + +#define SDL_HAS_64BIT_TYPE 1 + +/* Useful headers */ +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STRING_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_ABS 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_ITOA 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_SSCANF 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_SNDMGR 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various cdrom drivers */ +#if TARGET_API_MAC_CARBON +#define SDL_CDROM_DUMMY 1 +#else +#define SDL_CDROM_MACOS 1 +#endif + +/* Enable various input drivers */ +#if TARGET_API_MAC_CARBON +#define SDL_JOYSTICK_DUMMY 1 +#else +#define SDL_JOYSTICK_MACOS 1 +#endif + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_MACOS 1 + +/* Enable various threading systems */ +#define SDL_THREADS_DISABLED 1 + +/* Enable various timer systems */ +#define SDL_TIMER_MACOS 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_DUMMY 1 +#define SDL_VIDEO_DRIVER_DRAWSPROCKET 1 +#define SDL_VIDEO_DRIVER_TOOLBOX 1 + +/* Enable OpenGL support */ +#define SDL_VIDEO_OPENGL 1 + +#endif /* _SDL_config_macos_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_macosx.h b/Externals/SDL/Include_1.2/SDL_config_macosx.h index b45848cc90..481c22edc3 100644 --- a/Externals/SDL/Include_1.2/SDL_config_macosx.h +++ b/Externals/SDL/Include_1.2/SDL_config_macosx.h @@ -1,135 +1,135 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_macosx_h -#define _SDL_config_macosx_h - -#include "SDL_platform.h" - -/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ -#include - -/* This is a set of defines to configure the SDL features */ - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -/* If we specified an SDK or have a post-PowerPC chip, then alloca.h exists. */ -#if ( (MAC_OS_X_VERSION_MIN_REQUIRED >= 1030) || (!defined(__POWERPC__)) ) -#define HAVE_ALLOCA_H 1 -#endif -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_SNDMGR 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_MACOSX 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_IOKIT 1 - -/* Enable various shared object loading systems */ -#ifdef __ppc__ -/* For Mac OS X 10.2 compatibility */ -#define SDL_LOADSO_DLCOMPAT 1 -#else -#define SDL_LOADSO_DLOPEN 1 -#endif - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#if ((defined TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON)) -#define SDL_VIDEO_DRIVER_TOOLBOX 1 -#else -#define SDL_VIDEO_DRIVER_QUARTZ 1 -#endif - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 -#ifdef __ppc__ -#define SDL_ALTIVEC_BLITTERS 1 -#endif - -#endif /* _SDL_config_macosx_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_macosx_h +#define _SDL_config_macosx_h + +#include "SDL_platform.h" + +/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ +#include + +/* This is a set of defines to configure the SDL features */ + +#define SDL_HAS_64BIT_TYPE 1 + +/* Useful headers */ +/* If we specified an SDK or have a post-PowerPC chip, then alloca.h exists. */ +#if ( (MAC_OS_X_VERSION_MIN_REQUIRED >= 1030) || (!defined(__POWERPC__)) ) +#define HAVE_ALLOCA_H 1 +#endif +#define HAVE_SYS_TYPES_H 1 +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STRING_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRDUP 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_SSCANF 1 +#define HAVE_SNPRINTF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_SIGACTION 1 +#define HAVE_SETJMP 1 +#define HAVE_NANOSLEEP 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_COREAUDIO 1 +#define SDL_AUDIO_DRIVER_SNDMGR 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various cdrom drivers */ +#define SDL_CDROM_MACOSX 1 + +/* Enable various input drivers */ +#define SDL_JOYSTICK_IOKIT 1 + +/* Enable various shared object loading systems */ +#ifdef __ppc__ +/* For Mac OS X 10.2 compatibility */ +#define SDL_LOADSO_DLCOMPAT 1 +#else +#define SDL_LOADSO_DLOPEN 1 +#endif + +/* Enable various threading systems */ +#define SDL_THREAD_PTHREAD 1 +#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 + +/* Enable various timer systems */ +#define SDL_TIMER_UNIX 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_DUMMY 1 +#if ((defined TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON)) +#define SDL_VIDEO_DRIVER_TOOLBOX 1 +#else +#define SDL_VIDEO_DRIVER_QUARTZ 1 +#endif + +/* Enable OpenGL support */ +#define SDL_VIDEO_OPENGL 1 + +/* Enable assembly routines */ +#define SDL_ASSEMBLY_ROUTINES 1 +#ifdef __ppc__ +#define SDL_ALTIVEC_BLITTERS 1 +#endif + +#endif /* _SDL_config_macosx_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_minimal.h b/Externals/SDL/Include_1.2/SDL_config_minimal.h index 51f8e7222b..78b6148ca9 100644 --- a/Externals/SDL/Include_1.2/SDL_config_minimal.h +++ b/Externals/SDL/Include_1.2/SDL_config_minimal.h @@ -1,62 +1,62 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_minimal_h -#define _SDL_config_minimal_h - -#include "SDL_platform.h" - -/* This is the minimal configuration that can be used to build SDL */ - -#include - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; - -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ -#define SDL_JOYSTICK_DISABLED 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable the stub timer support (src/timer/dummy/\*.c) */ -#define SDL_TIMERS_DISABLED 1 - -/* Enable the dummy video driver (src/video/dummy/\*.c) */ -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_minimal_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_minimal_h +#define _SDL_config_minimal_h + +#include "SDL_platform.h" + +/* This is the minimal configuration that can be used to build SDL */ + +#include + +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned int size_t; +typedef unsigned long uintptr_t; + +/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ +#define SDL_CDROM_DISABLED 1 + +/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ +#define SDL_JOYSTICK_DISABLED 1 + +/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ +#define SDL_LOADSO_DISABLED 1 + +/* Enable the stub thread support (src/thread/generic/\*.c) */ +#define SDL_THREADS_DISABLED 1 + +/* Enable the stub timer support (src/timer/dummy/\*.c) */ +#define SDL_TIMERS_DISABLED 1 + +/* Enable the dummy video driver (src/video/dummy/\*.c) */ +#define SDL_VIDEO_DRIVER_DUMMY 1 + +#endif /* _SDL_config_minimal_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_nds.h b/Externals/SDL/Include_1.2/SDL_config_nds.h index d9033a236a..20b789c85a 100644 --- a/Externals/SDL/Include_1.2/SDL_config_nds.h +++ b/Externals/SDL/Include_1.2/SDL_config_nds.h @@ -1,115 +1,115 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_nds_h -#define _SDL_config_nds_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* C datatypes */ -#define SDL_HAS_64BIT_TYPE 1 - -/* Endianness */ -#define SDL_BYTEORDER 1234 - -/* Useful headers */ -#define HAVE_ALLOCA_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_ICONV_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_NDS 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_NDS 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable various timer systems */ -#define SDL_TIMER_NDS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_NDS 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_nds_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_nds_h +#define _SDL_config_nds_h + +#include "SDL_platform.h" + +/* This is a set of defines to configure the SDL features */ + +/* General platform specific identifiers */ +#include "SDL_platform.h" + +/* C datatypes */ +#define SDL_HAS_64BIT_TYPE 1 + +/* Endianness */ +#define SDL_BYTEORDER 1234 + +/* Useful headers */ +#define HAVE_ALLOCA_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_STRING_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_ICONV_H 1 +#define HAVE_SIGNAL_H 1 + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRDUP 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_SSCANF 1 +#define HAVE_SNPRINTF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_SETJMP 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_NDS 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ +#define SDL_CDROM_DISABLED 1 + +/* Enable various input drivers */ +#define SDL_JOYSTICK_NDS 1 + +/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ +#define SDL_LOADSO_DISABLED 1 + +/* Enable the stub thread support (src/thread/generic/\*.c) */ +#define SDL_THREADS_DISABLED 1 + +/* Enable various timer systems */ +#define SDL_TIMER_NDS 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_NDS 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 + +#endif /* _SDL_config_nds_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_os2.h b/Externals/SDL/Include_1.2/SDL_config_os2.h index ffbb188bc1..8cdea9ff2b 100644 --- a/Externals/SDL/Include_1.2/SDL_config_os2.h +++ b/Externals/SDL/Include_1.2/SDL_config_os2.h @@ -1,141 +1,141 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_os2_h -#define _SDL_config_os2_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; - -#define SDL_HAS_64BIT_TYPE 1 - -/* Use Watcom's LIBC */ -#define HAVE_LIBC 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRING_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__UITOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE__I64TOA 1 -#define HAVE__UI64TOA 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 -#define HAVE_CLOCK_GETTIME 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DART 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_OS2 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_OS2 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_OS2 1 - -/* Enable various threading systems */ -#define SDL_THREAD_OS2 1 - -/* Enable various timer systems */ -#define SDL_TIMER_OS2 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_OS2FS 1 - -/* Enable OpenGL support */ -/* Nothing here yet for OS/2... :( */ - -/* Enable assembly routines where available */ -#define SDL_ASSEMBLY_ROUTINES 1 - -#endif /* _SDL_config_os2_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_os2_h +#define _SDL_config_os2_h + +#include "SDL_platform.h" + +/* This is a set of defines to configure the SDL features */ + +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned int size_t; +typedef unsigned long uintptr_t; +typedef signed long long int64_t; +typedef unsigned long long uint64_t; + +#define SDL_HAS_64BIT_TYPE 1 + +/* Use Watcom's LIBC */ +#define HAVE_LIBC 1 + +/* Useful headers */ +#define HAVE_SYS_TYPES_H 1 +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRDUP 1 +#define HAVE__STRREV 1 +#define HAVE__STRUPR 1 +#define HAVE__STRLWR 1 +#define HAVE_INDEX 1 +#define HAVE_RINDEX 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_ITOA 1 +#define HAVE__LTOA 1 +#define HAVE__UITOA 1 +#define HAVE__ULTOA 1 +#define HAVE_STRTOL 1 +#define HAVE__I64TOA 1 +#define HAVE__UI64TOA 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRICMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_SSCANF 1 +#define HAVE_SNPRINTF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_SETJMP 1 +#define HAVE_CLOCK_GETTIME 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_DART 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various cdrom drivers */ +#define SDL_CDROM_OS2 1 + +/* Enable various input drivers */ +#define SDL_JOYSTICK_OS2 1 + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_OS2 1 + +/* Enable various threading systems */ +#define SDL_THREAD_OS2 1 + +/* Enable various timer systems */ +#define SDL_TIMER_OS2 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_DUMMY 1 +#define SDL_VIDEO_DRIVER_OS2FS 1 + +/* Enable OpenGL support */ +/* Nothing here yet for OS/2... :( */ + +/* Enable assembly routines where available */ +#define SDL_ASSEMBLY_ROUTINES 1 + +#endif /* _SDL_config_os2_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_win32.h b/Externals/SDL/Include_1.2/SDL_config_win32.h index 1f318575c2..cfb44d2a07 100644 --- a/Externals/SDL/Include_1.2/SDL_config_win32.h +++ b/Externals/SDL/Include_1.2/SDL_config_win32.h @@ -1,180 +1,180 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_win32_h -#define _SDL_config_win32_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -#if defined(__GNUC__) || defined(__DMC__) -#define HAVE_STDINT_H 1 -#elif defined(_MSC_VER) -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -#ifndef _UINTPTR_T_DEFINED -#ifdef _WIN64 -typedef unsigned __int64 uintptr_t; -#else -typedef unsigned int uintptr_t; -#endif -#define _UINTPTR_T_DEFINED -#endif -/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ -#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) -#define DWORD_PTR DWORD -#endif -#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) -#define LONG_PTR LONG -#endif -#else /* !__GNUC__ && !_MSC_VER */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -#ifndef _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED_ -typedef unsigned int size_t; -#endif -typedef unsigned int uintptr_t; -#endif /* __GNUC__ || _MSC_VER */ -#define SDL_HAS_64BIT_TYPE 1 - -/* Enabled for SDL 1.2 (binary compatibility) */ -#define HAVE_LIBC 1 -#ifdef HAVE_LIBC -/* Useful headers */ -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#ifndef _WIN32_WCE -#define HAVE_SIGNAL_H 1 -#endif - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE__STRICMP 1 -#define HAVE__STRNICMP 1 -#define HAVE_SSCANF 1 -#else -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 -#endif - -/* Enable various audio drivers */ -#ifndef _WIN32_WCE -#define SDL_AUDIO_DRIVER_DSOUND 1 -#endif -#define SDL_AUDIO_DRIVER_WAVEOUT 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#ifdef _WIN32_WCE -#define SDL_CDROM_DISABLED 1 -#else -#define SDL_CDROM_WIN32 1 -#endif - -/* Enable various input drivers */ -#ifdef _WIN32_WCE -#define SDL_JOYSTICK_DISABLED 1 -#else -#define SDL_JOYSTICK_WINMM 1 -#endif - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_WIN32 1 - -/* Enable various threading systems */ -#define SDL_THREAD_WIN32 1 - -/* Enable various timer systems */ -#ifdef _WIN32_WCE -#define SDL_TIMER_WINCE 1 -#else -#define SDL_TIMER_WIN32 1 -#endif - -/* Enable various video drivers */ -#ifdef _WIN32_WCE -#define SDL_VIDEO_DRIVER_GAPI 1 -#endif -#ifndef _WIN32_WCE -#define SDL_VIDEO_DRIVER_DDRAW 1 -#endif -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_WINDIB 1 - -/* Enable OpenGL support */ -#ifndef _WIN32_WCE -#define SDL_VIDEO_OPENGL 1 -#define SDL_VIDEO_OPENGL_WGL 1 -#endif - -/* Enable assembly routines (Win64 doesn't have inline asm) */ -#ifndef _WIN64 -#define SDL_ASSEMBLY_ROUTINES 1 -#endif - -#endif /* _SDL_config_win32_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_config_win32_h +#define _SDL_config_win32_h + +#include "SDL_platform.h" + +/* This is a set of defines to configure the SDL features */ + +#if defined(__GNUC__) || defined(__DMC__) +#define HAVE_STDINT_H 1 +#elif defined(_MSC_VER) +typedef signed __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef signed __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef signed __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 uintptr_t; +#else +typedef unsigned int uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif +/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ +#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) +#define DWORD_PTR DWORD +#endif +#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) +#define LONG_PTR LONG +#endif +#else /* !__GNUC__ && !_MSC_VER */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef signed long long int64_t; +typedef unsigned long long uint64_t; +#ifndef _SIZE_T_DEFINED_ +#define _SIZE_T_DEFINED_ +typedef unsigned int size_t; +#endif +typedef unsigned int uintptr_t; +#endif /* __GNUC__ || _MSC_VER */ +#define SDL_HAS_64BIT_TYPE 1 + +/* Enabled for SDL 1.2 (binary compatibility) */ +#define HAVE_LIBC 1 +#ifdef HAVE_LIBC +/* Useful headers */ +#define HAVE_STDIO_H 1 +#define STDC_HEADERS 1 +#define HAVE_STRING_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_MATH_H 1 +#ifndef _WIN32_WCE +#define HAVE_SIGNAL_H 1 +#endif + +/* C library functions */ +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE__STRREV 1 +#define HAVE__STRUPR 1 +#define HAVE__STRLWR 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_ITOA 1 +#define HAVE__LTOA 1 +#define HAVE__ULTOA 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE__STRICMP 1 +#define HAVE__STRNICMP 1 +#define HAVE_SSCANF 1 +#else +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 +#endif + +/* Enable various audio drivers */ +#ifndef _WIN32_WCE +#define SDL_AUDIO_DRIVER_DSOUND 1 +#endif +#define SDL_AUDIO_DRIVER_WAVEOUT 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various cdrom drivers */ +#ifdef _WIN32_WCE +#define SDL_CDROM_DISABLED 1 +#else +#define SDL_CDROM_WIN32 1 +#endif + +/* Enable various input drivers */ +#ifdef _WIN32_WCE +#define SDL_JOYSTICK_DISABLED 1 +#else +#define SDL_JOYSTICK_WINMM 1 +#endif + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_WIN32 1 + +/* Enable various threading systems */ +#define SDL_THREAD_WIN32 1 + +/* Enable various timer systems */ +#ifdef _WIN32_WCE +#define SDL_TIMER_WINCE 1 +#else +#define SDL_TIMER_WIN32 1 +#endif + +/* Enable various video drivers */ +#ifdef _WIN32_WCE +#define SDL_VIDEO_DRIVER_GAPI 1 +#endif +#ifndef _WIN32_WCE +#define SDL_VIDEO_DRIVER_DDRAW 1 +#endif +#define SDL_VIDEO_DRIVER_DUMMY 1 +#define SDL_VIDEO_DRIVER_WINDIB 1 + +/* Enable OpenGL support */ +#ifndef _WIN32_WCE +#define SDL_VIDEO_OPENGL 1 +#define SDL_VIDEO_OPENGL_WGL 1 +#endif + +/* Enable assembly routines (Win64 doesn't have inline asm) */ +#ifndef _WIN64 +#define SDL_ASSEMBLY_ROUTINES 1 +#endif + +#endif /* _SDL_config_win32_h */ diff --git a/Externals/SDL/Include_1.2/SDL_copying.h b/Externals/SDL/Include_1.2/SDL_copying.h index 35b7bc4b0f..39e122db73 100644 --- a/Externals/SDL/Include_1.2/SDL_copying.h +++ b/Externals/SDL/Include_1.2/SDL_copying.h @@ -1,22 +1,22 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + diff --git a/Externals/SDL/Include_1.2/SDL_cpuinfo.h b/Externals/SDL/Include_1.2/SDL_cpuinfo.h index 0d21279f3f..72acbdd8ba 100644 --- a/Externals/SDL/Include_1.2/SDL_cpuinfo.h +++ b/Externals/SDL/Include_1.2/SDL_cpuinfo.h @@ -1,75 +1,75 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* CPU feature detection for SDL */ - -#ifndef _SDL_cpuinfo_h -#define _SDL_cpuinfo_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This function returns true if the CPU has the RDTSC instruction - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); - -/* This function returns true if the CPU has MMX features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); - -/* This function returns true if the CPU has MMX Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMXExt(void); - -/* This function returns true if the CPU has 3DNow features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); - -/* This function returns true if the CPU has 3DNow! Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNowExt(void); - -/* This function returns true if the CPU has SSE features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); - -/* This function returns true if the CPU has SSE2 features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); - -/* This function returns true if the CPU has AltiVec features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_cpuinfo_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* CPU feature detection for SDL */ + +#ifndef _SDL_cpuinfo_h +#define _SDL_cpuinfo_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This function returns true if the CPU has the RDTSC instruction + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/* This function returns true if the CPU has MMX features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/* This function returns true if the CPU has MMX Ext. features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMXExt(void); + +/* This function returns true if the CPU has 3DNow features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/* This function returns true if the CPU has 3DNow! Ext. features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNowExt(void); + +/* This function returns true if the CPU has SSE features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/* This function returns true if the CPU has SSE2 features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/* This function returns true if the CPU has AltiVec features + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_cpuinfo_h */ diff --git a/Externals/SDL/Include_1.2/SDL_endian.h b/Externals/SDL/Include_1.2/SDL_endian.h index 11fa43a5f6..8f8db4ccae 100644 --- a/Externals/SDL/Include_1.2/SDL_endian.h +++ b/Externals/SDL/Include_1.2/SDL_endian.h @@ -1,194 +1,194 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Functions for reading and writing endian-specific values */ - -#ifndef _SDL_endian_h -#define _SDL_endian_h - -#include "SDL_stdinc.h" - -/* The two types of endianness */ -#define SDL_LIL_ENDIAN 1234 -#define SDL_BIG_ENDIAN 4321 - -#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ -#if defined(__hppa__) || \ - defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ - (defined(__MIPS__) && defined(__MISPEB__)) || \ - defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ - defined(__sparc__) -#define SDL_BYTEORDER SDL_BIG_ENDIAN -#else -#define SDL_BYTEORDER SDL_LIL_ENDIAN -#endif -#endif /* !SDL_BYTEORDER */ - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Use inline functions for compilers that support them, and static - functions for those that do not. Because these functions become - static for compilers that do not support inline functions, this - header should only be included in files that actually use them. -*/ -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0" : "=Q" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - Uint16 result; - - __asm__("rlwimi %0,%2,8,16,23" : "=&r" (result) : "0" (x >> 8), "r" (x)); - return result; -} -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("rorw #8,%0" : "=d" (x) : "0" (x) : "cc"); - return x; -} -#else -static __inline__ Uint16 SDL_Swap16(Uint16 x) { - return((x<<8)|(x>>8)); -} -#endif - -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("bswapl %0" : "=r" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - Uint32 result; - - __asm__("rlwimi %0,%2,24,16,23" : "=&r" (result) : "0" (x>>24), "r" (x)); - __asm__("rlwimi %0,%2,8,8,15" : "=&r" (result) : "0" (result), "r" (x)); - __asm__("rlwimi %0,%2,24,0,7" : "=&r" (result) : "0" (result), "r" (x)); - return result; -} -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0" : "=d" (x) : "0" (x) : "cc"); - return x; -} -#else -static __inline__ Uint32 SDL_Swap32(Uint32 x) { - return((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24)); -} -#endif - -#ifdef SDL_HAS_64BIT_TYPE -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - union { - struct { Uint32 a,b; } s; - Uint64 u; - } v; - v.u = x; - __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" - : "=r" (v.s.a), "=r" (v.s.b) - : "0" (v.s.a), "1" (v.s.b)); - return v.u; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - __asm__("bswapq %0" : "=r" (x) : "0" (x)); - return x; -} -#else -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - Uint32 hi, lo; - - /* Separate into high and low 32-bit values and swap them */ - lo = (Uint32)(x&0xFFFFFFFF); - x >>= 32; - hi = (Uint32)(x&0xFFFFFFFF); - x = SDL_Swap32(lo); - x <<= 32; - x |= SDL_Swap32(hi); - return(x); -} -#endif -#else -/* This is mainly to keep compilers from complaining in SDL code. - If there is no real 64-bit datatype, then compilers will complain about - the fake 64-bit datatype that SDL provides when it compiles user code. -*/ -#define SDL_Swap64(X) (X) -#endif /* SDL_HAS_64BIT_TYPE */ - - -/* Byteswap item from the specified endianness to the native endianness */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define SDL_SwapLE16(X) (X) -#define SDL_SwapLE32(X) (X) -#define SDL_SwapLE64(X) (X) -#define SDL_SwapBE16(X) SDL_Swap16(X) -#define SDL_SwapBE32(X) SDL_Swap32(X) -#define SDL_SwapBE64(X) SDL_Swap64(X) -#else -#define SDL_SwapLE16(X) SDL_Swap16(X) -#define SDL_SwapLE32(X) SDL_Swap32(X) -#define SDL_SwapLE64(X) SDL_Swap64(X) -#define SDL_SwapBE16(X) (X) -#define SDL_SwapBE32(X) (X) -#define SDL_SwapBE64(X) (X) -#endif - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_endian_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Functions for reading and writing endian-specific values */ + +#ifndef _SDL_endian_h +#define _SDL_endian_h + +#include "SDL_stdinc.h" + +/* The two types of endianness */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MISPEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* !SDL_BYTEORDER */ + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Use inline functions for compilers that support them, and static + functions for those that do not. Because these functions become + static for compilers that do not support inline functions, this + header should only be included in files that actually use them. +*/ +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) +static __inline__ Uint16 SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +static __inline__ Uint16 SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0" : "=Q" (x) : "0" (x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +static __inline__ Uint16 SDL_Swap16(Uint16 x) +{ + Uint16 result; + + __asm__("rlwimi %0,%2,8,16,23" : "=&r" (result) : "0" (x >> 8), "r" (x)); + return result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) +static __inline__ Uint16 SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0" : "=d" (x) : "0" (x) : "cc"); + return x; +} +#else +static __inline__ Uint16 SDL_Swap16(Uint16 x) { + return((x<<8)|(x>>8)); +} +#endif + +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) +static __inline__ Uint32 SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0" : "=r" (x) : "0" (x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +static __inline__ Uint32 SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0" : "=r" (x) : "0" (x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +static __inline__ Uint32 SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23" : "=&r" (result) : "0" (x>>24), "r" (x)); + __asm__("rlwimi %0,%2,8,8,15" : "=&r" (result) : "0" (result), "r" (x)); + __asm__("rlwimi %0,%2,24,0,7" : "=&r" (result) : "0" (result), "r" (x)); + return result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) +static __inline__ Uint32 SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0" : "=d" (x) : "0" (x) : "cc"); + return x; +} +#else +static __inline__ Uint32 SDL_Swap32(Uint32 x) { + return((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24)); +} +#endif + +#ifdef SDL_HAS_64BIT_TYPE +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) +static __inline__ Uint64 SDL_Swap64(Uint64 x) +{ + union { + struct { Uint32 a,b; } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r" (v.s.a), "=r" (v.s.b) + : "0" (v.s.a), "1" (v.s.b)); + return v.u; +} +#elif defined(__GNUC__) && defined(__x86_64__) +static __inline__ Uint64 SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0" : "=r" (x) : "0" (x)); + return x; +} +#else +static __inline__ Uint64 SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = (Uint32)(x&0xFFFFFFFF); + x >>= 32; + hi = (Uint32)(x&0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return(x); +} +#endif +#else +/* This is mainly to keep compilers from complaining in SDL code. + If there is no real 64-bit datatype, then compilers will complain about + the fake 64-bit datatype that SDL provides when it compiles user code. +*/ +#define SDL_Swap64(X) (X) +#endif /* SDL_HAS_64BIT_TYPE */ + + +/* Byteswap item from the specified endianness to the native endianness */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_endian_h */ diff --git a/Externals/SDL/Include_1.2/SDL_error.h b/Externals/SDL/Include_1.2/SDL_error.h index a0aab68073..26d6bfaef1 100644 --- a/Externals/SDL/Include_1.2/SDL_error.h +++ b/Externals/SDL/Include_1.2/SDL_error.h @@ -1,61 +1,61 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Simple error message routines for SDL */ - -#ifndef _SDL_error_h -#define _SDL_error_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Public functions */ -extern DECLSPEC void SDLCALL SDL_SetError(const char *fmt, ...); -extern DECLSPEC char * SDLCALL SDL_GetError(void); -extern DECLSPEC void SDLCALL SDL_ClearError(void); - -/* Private error message function - used internally */ -#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) -#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) -typedef enum { - SDL_ENOMEM, - SDL_EFREAD, - SDL_EFWRITE, - SDL_EFSEEK, - SDL_UNSUPPORTED, - SDL_LASTERROR -} SDL_errorcode; -extern DECLSPEC void SDLCALL SDL_Error(SDL_errorcode code); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_error_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Simple error message routines for SDL */ + +#ifndef _SDL_error_h +#define _SDL_error_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ +extern DECLSPEC void SDLCALL SDL_SetError(const char *fmt, ...); +extern DECLSPEC char * SDLCALL SDL_GetError(void); +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/* Private error message function - used internally */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +typedef enum { + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +extern DECLSPEC void SDLCALL SDL_Error(SDL_errorcode code); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_error_h */ diff --git a/Externals/SDL/Include_1.2/SDL_events.h b/Externals/SDL/Include_1.2/SDL_events.h index 33461113cc..9fe918c7be 100644 --- a/Externals/SDL/Include_1.2/SDL_events.h +++ b/Externals/SDL/Include_1.2/SDL_events.h @@ -1,337 +1,337 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL event handling */ - -#ifndef _SDL_events_h -#define _SDL_events_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_active.h" -#include "SDL_keyboard.h" -#include "SDL_mouse.h" -#include "SDL_joystick.h" -#include "SDL_quit.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* General keyboard/mouse state definitions */ -#define SDL_RELEASED 0 -#define SDL_PRESSED 1 - -/* Event enumerations */ -typedef enum { - SDL_NOEVENT = 0, /* Unused (do not remove) */ - SDL_ACTIVEEVENT, /* Application loses/gains visibility */ - SDL_KEYDOWN, /* Keys pressed */ - SDL_KEYUP, /* Keys released */ - SDL_MOUSEMOTION, /* Mouse moved */ - SDL_MOUSEBUTTONDOWN, /* Mouse button pressed */ - SDL_MOUSEBUTTONUP, /* Mouse button released */ - SDL_JOYAXISMOTION, /* Joystick axis motion */ - SDL_JOYBALLMOTION, /* Joystick trackball motion */ - SDL_JOYHATMOTION, /* Joystick hat position change */ - SDL_JOYBUTTONDOWN, /* Joystick button pressed */ - SDL_JOYBUTTONUP, /* Joystick button released */ - SDL_QUIT, /* User-requested quit */ - SDL_SYSWMEVENT, /* System specific event */ - SDL_EVENT_RESERVEDA, /* Reserved for future use.. */ - SDL_EVENT_RESERVEDB, /* Reserved for future use.. */ - SDL_VIDEORESIZE, /* User resized video mode */ - SDL_VIDEOEXPOSE, /* Screen needs to be redrawn */ - SDL_EVENT_RESERVED2, /* Reserved for future use.. */ - SDL_EVENT_RESERVED3, /* Reserved for future use.. */ - SDL_EVENT_RESERVED4, /* Reserved for future use.. */ - SDL_EVENT_RESERVED5, /* Reserved for future use.. */ - SDL_EVENT_RESERVED6, /* Reserved for future use.. */ - SDL_EVENT_RESERVED7, /* Reserved for future use.. */ - /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ - SDL_USEREVENT = 24, - /* This last event is only for bounding internal arrays - It is the number of bits in the event mask datatype -- Uint32 - */ - SDL_NUMEVENTS = 32 -} SDL_EventType; - -/* Predefined event masks */ -#define SDL_EVENTMASK(X) (1<<(X)) -typedef enum { - SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT), - SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN), - SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP), - SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN)| - SDL_EVENTMASK(SDL_KEYUP), - SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION), - SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN), - SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION)| - SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)| - SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION), - SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION), - SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION), - SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN), - SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION)| - SDL_EVENTMASK(SDL_JOYBALLMOTION)| - SDL_EVENTMASK(SDL_JOYHATMOTION)| - SDL_EVENTMASK(SDL_JOYBUTTONDOWN)| - SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_VIDEORESIZEMASK = SDL_EVENTMASK(SDL_VIDEORESIZE), - SDL_VIDEOEXPOSEMASK = SDL_EVENTMASK(SDL_VIDEOEXPOSE), - SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT), - SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT) -} SDL_EventMask ; -#define SDL_ALLEVENTS 0xFFFFFFFF - -/* Application visibility event structure */ -typedef struct SDL_ActiveEvent { - Uint8 type; /* SDL_ACTIVEEVENT */ - Uint8 gain; /* Whether given states were gained or lost (1/0) */ - Uint8 state; /* A mask of the focus states */ -} SDL_ActiveEvent; - -/* Keyboard event structure */ -typedef struct SDL_KeyboardEvent { - Uint8 type; /* SDL_KEYDOWN or SDL_KEYUP */ - Uint8 which; /* The keyboard device index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ - SDL_keysym keysym; -} SDL_KeyboardEvent; - -/* Mouse motion event structure */ -typedef struct SDL_MouseMotionEvent { - Uint8 type; /* SDL_MOUSEMOTION */ - Uint8 which; /* The mouse device index */ - Uint8 state; /* The current button state */ - Uint16 x, y; /* The X/Y coordinates of the mouse */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ -} SDL_MouseMotionEvent; - -/* Mouse button event structure */ -typedef struct SDL_MouseButtonEvent { - Uint8 type; /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ - Uint8 which; /* The mouse device index */ - Uint8 button; /* The mouse button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ - Uint16 x, y; /* The X/Y coordinates of the mouse at press time */ -} SDL_MouseButtonEvent; - -/* Joystick axis motion event structure */ -typedef struct SDL_JoyAxisEvent { - Uint8 type; /* SDL_JOYAXISMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 axis; /* The joystick axis index */ - Sint16 value; /* The axis value (range: -32768 to 32767) */ -} SDL_JoyAxisEvent; - -/* Joystick trackball motion event structure */ -typedef struct SDL_JoyBallEvent { - Uint8 type; /* SDL_JOYBALLMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 ball; /* The joystick trackball index */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ -} SDL_JoyBallEvent; - -/* Joystick hat position change event structure */ -typedef struct SDL_JoyHatEvent { - Uint8 type; /* SDL_JOYHATMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 hat; /* The joystick hat index */ - Uint8 value; /* The hat position value: - SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP - SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT - SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN - Note that zero means the POV is centered. - */ -} SDL_JoyHatEvent; - -/* Joystick button event structure */ -typedef struct SDL_JoyButtonEvent { - Uint8 type; /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ - Uint8 which; /* The joystick device index */ - Uint8 button; /* The joystick button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ -} SDL_JoyButtonEvent; - -/* The "window resized" event - When you get this event, you are responsible for setting a new video - mode with the new width and height. - */ -typedef struct SDL_ResizeEvent { - Uint8 type; /* SDL_VIDEORESIZE */ - int w; /* New width */ - int h; /* New height */ -} SDL_ResizeEvent; - -/* The "screen redraw" event */ -typedef struct SDL_ExposeEvent { - Uint8 type; /* SDL_VIDEOEXPOSE */ -} SDL_ExposeEvent; - -/* The "quit requested" event */ -typedef struct SDL_QuitEvent { - Uint8 type; /* SDL_QUIT */ -} SDL_QuitEvent; - -/* A user-defined event type */ -typedef struct SDL_UserEvent { - Uint8 type; /* SDL_USEREVENT through SDL_NUMEVENTS-1 */ - int code; /* User defined event code */ - void *data1; /* User defined data pointer */ - void *data2; /* User defined data pointer */ -} SDL_UserEvent; - -/* If you want to use this event, you should include SDL_syswm.h */ -struct SDL_SysWMmsg; -typedef struct SDL_SysWMmsg SDL_SysWMmsg; -typedef struct SDL_SysWMEvent { - Uint8 type; - SDL_SysWMmsg *msg; -} SDL_SysWMEvent; - -/* General event structure */ -typedef union SDL_Event { - Uint8 type; - SDL_ActiveEvent active; - SDL_KeyboardEvent key; - SDL_MouseMotionEvent motion; - SDL_MouseButtonEvent button; - SDL_JoyAxisEvent jaxis; - SDL_JoyBallEvent jball; - SDL_JoyHatEvent jhat; - SDL_JoyButtonEvent jbutton; - SDL_ResizeEvent resize; - SDL_ExposeEvent expose; - SDL_QuitEvent quit; - SDL_UserEvent user; - SDL_SysWMEvent syswm; -} SDL_Event; - - -/* Function prototypes */ - -/* Pumps the event loop, gathering events from the input devices. - This function updates the event queue and internal input device state. - This should only be run in the thread that sets the video mode. -*/ -extern DECLSPEC void SDLCALL SDL_PumpEvents(void); - -/* Checks the event queue for messages and optionally returns them. - If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to - the back of the event queue. - If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will not - be removed from the queue. - If 'action' is SDL_GETEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will be - removed from the queue. - This function returns the number of events actually stored, or -1 - if there was an error. This function is thread-safe. -*/ -typedef enum { - SDL_ADDEVENT, - SDL_PEEKEVENT, - SDL_GETEVENT -} SDL_eventaction; -/* */ -extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents, - SDL_eventaction action, Uint32 mask); - -/* Polls for currently pending events, and returns 1 if there are any pending - events, or 0 if there are none available. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event); - -/* Waits indefinitely for the next available event, returning 1, or 0 if there - was an error while waiting for events. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event); - -/* Add an event to the event queue. - This function returns 0 on success, or -1 if the event queue was full - or there was some other error. - */ -extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event); - -/* - This function sets up a filter to process all events before they - change internal state and are posted to the internal event queue. - - The filter is protypted as: -*/ -typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event); -/* - If the filter returns 1, then the event will be added to the internal queue. - If it returns 0, then the event will be dropped from the queue, but the - internal state will still be updated. This allows selective filtering of - dynamically arriving events. - - WARNING: Be very careful of what you do in the event filter function, as - it may run in a different thread! - - There is one caveat when dealing with the SDL_QUITEVENT event type. The - event filter is only called when the window manager desires to close the - application window. If the event filter returns 1, then the window will - be closed, otherwise the window will remain open if possible. - If the quit event is generated by an interrupt signal, it will bypass the - internal queue and be delivered to the application at the next event poll. -*/ -extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter); - -/* - Return the current event filter - can be used to "chain" filters. - If there is no event filter set, this function returns NULL. -*/ -extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void); - -/* - This function allows you to set the state of processing certain events. - If 'state' is set to SDL_IGNORE, that event will be automatically dropped - from the event queue and will not event be filtered. - If 'state' is set to SDL_ENABLE, that event will be processed normally. - If 'state' is set to SDL_QUERY, SDL_EventState() will return the - current processing state of the specified event. -*/ -#define SDL_QUERY -1 -#define SDL_IGNORE 0 -#define SDL_DISABLE 0 -#define SDL_ENABLE 1 -extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_events_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL event handling */ + +#ifndef _SDL_events_h +#define _SDL_events_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_active.h" +#include "SDL_keyboard.h" +#include "SDL_mouse.h" +#include "SDL_joystick.h" +#include "SDL_quit.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/* Event enumerations */ +typedef enum { + SDL_NOEVENT = 0, /* Unused (do not remove) */ + SDL_ACTIVEEVENT, /* Application loses/gains visibility */ + SDL_KEYDOWN, /* Keys pressed */ + SDL_KEYUP, /* Keys released */ + SDL_MOUSEMOTION, /* Mouse moved */ + SDL_MOUSEBUTTONDOWN, /* Mouse button pressed */ + SDL_MOUSEBUTTONUP, /* Mouse button released */ + SDL_JOYAXISMOTION, /* Joystick axis motion */ + SDL_JOYBALLMOTION, /* Joystick trackball motion */ + SDL_JOYHATMOTION, /* Joystick hat position change */ + SDL_JOYBUTTONDOWN, /* Joystick button pressed */ + SDL_JOYBUTTONUP, /* Joystick button released */ + SDL_QUIT, /* User-requested quit */ + SDL_SYSWMEVENT, /* System specific event */ + SDL_EVENT_RESERVEDA, /* Reserved for future use.. */ + SDL_EVENT_RESERVEDB, /* Reserved for future use.. */ + SDL_VIDEORESIZE, /* User resized video mode */ + SDL_VIDEOEXPOSE, /* Screen needs to be redrawn */ + SDL_EVENT_RESERVED2, /* Reserved for future use.. */ + SDL_EVENT_RESERVED3, /* Reserved for future use.. */ + SDL_EVENT_RESERVED4, /* Reserved for future use.. */ + SDL_EVENT_RESERVED5, /* Reserved for future use.. */ + SDL_EVENT_RESERVED6, /* Reserved for future use.. */ + SDL_EVENT_RESERVED7, /* Reserved for future use.. */ + /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ + SDL_USEREVENT = 24, + /* This last event is only for bounding internal arrays + It is the number of bits in the event mask datatype -- Uint32 + */ + SDL_NUMEVENTS = 32 +} SDL_EventType; + +/* Predefined event masks */ +#define SDL_EVENTMASK(X) (1<<(X)) +typedef enum { + SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT), + SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN), + SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP), + SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN)| + SDL_EVENTMASK(SDL_KEYUP), + SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION), + SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN), + SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP), + SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION)| + SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)| + SDL_EVENTMASK(SDL_MOUSEBUTTONUP), + SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION), + SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION), + SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION), + SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN), + SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP), + SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION)| + SDL_EVENTMASK(SDL_JOYBALLMOTION)| + SDL_EVENTMASK(SDL_JOYHATMOTION)| + SDL_EVENTMASK(SDL_JOYBUTTONDOWN)| + SDL_EVENTMASK(SDL_JOYBUTTONUP), + SDL_VIDEORESIZEMASK = SDL_EVENTMASK(SDL_VIDEORESIZE), + SDL_VIDEOEXPOSEMASK = SDL_EVENTMASK(SDL_VIDEOEXPOSE), + SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT), + SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT) +} SDL_EventMask ; +#define SDL_ALLEVENTS 0xFFFFFFFF + +/* Application visibility event structure */ +typedef struct SDL_ActiveEvent { + Uint8 type; /* SDL_ACTIVEEVENT */ + Uint8 gain; /* Whether given states were gained or lost (1/0) */ + Uint8 state; /* A mask of the focus states */ +} SDL_ActiveEvent; + +/* Keyboard event structure */ +typedef struct SDL_KeyboardEvent { + Uint8 type; /* SDL_KEYDOWN or SDL_KEYUP */ + Uint8 which; /* The keyboard device index */ + Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ + SDL_keysym keysym; +} SDL_KeyboardEvent; + +/* Mouse motion event structure */ +typedef struct SDL_MouseMotionEvent { + Uint8 type; /* SDL_MOUSEMOTION */ + Uint8 which; /* The mouse device index */ + Uint8 state; /* The current button state */ + Uint16 x, y; /* The X/Y coordinates of the mouse */ + Sint16 xrel; /* The relative motion in the X direction */ + Sint16 yrel; /* The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/* Mouse button event structure */ +typedef struct SDL_MouseButtonEvent { + Uint8 type; /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ + Uint8 which; /* The mouse device index */ + Uint8 button; /* The mouse button index */ + Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ + Uint16 x, y; /* The X/Y coordinates of the mouse at press time */ +} SDL_MouseButtonEvent; + +/* Joystick axis motion event structure */ +typedef struct SDL_JoyAxisEvent { + Uint8 type; /* SDL_JOYAXISMOTION */ + Uint8 which; /* The joystick device index */ + Uint8 axis; /* The joystick axis index */ + Sint16 value; /* The axis value (range: -32768 to 32767) */ +} SDL_JoyAxisEvent; + +/* Joystick trackball motion event structure */ +typedef struct SDL_JoyBallEvent { + Uint8 type; /* SDL_JOYBALLMOTION */ + Uint8 which; /* The joystick device index */ + Uint8 ball; /* The joystick trackball index */ + Sint16 xrel; /* The relative motion in the X direction */ + Sint16 yrel; /* The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/* Joystick hat position change event structure */ +typedef struct SDL_JoyHatEvent { + Uint8 type; /* SDL_JOYHATMOTION */ + Uint8 which; /* The joystick device index */ + Uint8 hat; /* The joystick hat index */ + Uint8 value; /* The hat position value: + SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP + SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT + SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN + Note that zero means the POV is centered. + */ +} SDL_JoyHatEvent; + +/* Joystick button event structure */ +typedef struct SDL_JoyButtonEvent { + Uint8 type; /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ + Uint8 which; /* The joystick device index */ + Uint8 button; /* The joystick button index */ + Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ +} SDL_JoyButtonEvent; + +/* The "window resized" event + When you get this event, you are responsible for setting a new video + mode with the new width and height. + */ +typedef struct SDL_ResizeEvent { + Uint8 type; /* SDL_VIDEORESIZE */ + int w; /* New width */ + int h; /* New height */ +} SDL_ResizeEvent; + +/* The "screen redraw" event */ +typedef struct SDL_ExposeEvent { + Uint8 type; /* SDL_VIDEOEXPOSE */ +} SDL_ExposeEvent; + +/* The "quit requested" event */ +typedef struct SDL_QuitEvent { + Uint8 type; /* SDL_QUIT */ +} SDL_QuitEvent; + +/* A user-defined event type */ +typedef struct SDL_UserEvent { + Uint8 type; /* SDL_USEREVENT through SDL_NUMEVENTS-1 */ + int code; /* User defined event code */ + void *data1; /* User defined data pointer */ + void *data2; /* User defined data pointer */ +} SDL_UserEvent; + +/* If you want to use this event, you should include SDL_syswm.h */ +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; +typedef struct SDL_SysWMEvent { + Uint8 type; + SDL_SysWMmsg *msg; +} SDL_SysWMEvent; + +/* General event structure */ +typedef union SDL_Event { + Uint8 type; + SDL_ActiveEvent active; + SDL_KeyboardEvent key; + SDL_MouseMotionEvent motion; + SDL_MouseButtonEvent button; + SDL_JoyAxisEvent jaxis; + SDL_JoyBallEvent jball; + SDL_JoyHatEvent jhat; + SDL_JoyButtonEvent jbutton; + SDL_ResizeEvent resize; + SDL_ExposeEvent expose; + SDL_QuitEvent quit; + SDL_UserEvent user; + SDL_SysWMEvent syswm; +} SDL_Event; + + +/* Function prototypes */ + +/* Pumps the event loop, gathering events from the input devices. + This function updates the event queue and internal input device state. + This should only be run in the thread that sets the video mode. +*/ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* Checks the event queue for messages and optionally returns them. + If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to + the back of the event queue. + If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front + of the event queue, matching 'mask', will be returned and will not + be removed from the queue. + If 'action' is SDL_GETEVENT, up to 'numevents' events at the front + of the event queue, matching 'mask', will be returned and will be + removed from the queue. + This function returns the number of events actually stored, or -1 + if there was an error. This function is thread-safe. +*/ +typedef enum { + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; +/* */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents, + SDL_eventaction action, Uint32 mask); + +/* Polls for currently pending events, and returns 1 if there are any pending + events, or 0 if there are none available. If 'event' is not NULL, the next + event is removed from the queue and stored in that area. + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event); + +/* Waits indefinitely for the next available event, returning 1, or 0 if there + was an error while waiting for events. If 'event' is not NULL, the next + event is removed from the queue and stored in that area. + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event); + +/* Add an event to the event queue. + This function returns 0 on success, or -1 if the event queue was full + or there was some other error. + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event); + +/* + This function sets up a filter to process all events before they + change internal state and are posted to the internal event queue. + + The filter is protypted as: +*/ +typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event); +/* + If the filter returns 1, then the event will be added to the internal queue. + If it returns 0, then the event will be dropped from the queue, but the + internal state will still be updated. This allows selective filtering of + dynamically arriving events. + + WARNING: Be very careful of what you do in the event filter function, as + it may run in a different thread! + + There is one caveat when dealing with the SDL_QUITEVENT event type. The + event filter is only called when the window manager desires to close the + application window. If the event filter returns 1, then the window will + be closed, otherwise the window will remain open if possible. + If the quit event is generated by an interrupt signal, it will bypass the + internal queue and be delivered to the application at the next event poll. +*/ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter); + +/* + Return the current event filter - can be used to "chain" filters. + If there is no event filter set, this function returns NULL. +*/ +extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void); + +/* + This function allows you to set the state of processing certain events. + If 'state' is set to SDL_IGNORE, that event will be automatically dropped + from the event queue and will not event be filtered. + If 'state' is set to SDL_ENABLE, that event will be processed normally. + If 'state' is set to SDL_QUERY, SDL_EventState() will return the + current processing state of the specified event. +*/ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_events_h */ diff --git a/Externals/SDL/Include_1.2/SDL_getenv.h b/Externals/SDL/Include_1.2/SDL_getenv.h index 86994e14b8..853b9ce454 100644 --- a/Externals/SDL/Include_1.2/SDL_getenv.h +++ b/Externals/SDL/Include_1.2/SDL_getenv.h @@ -1,24 +1,24 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_stdinc.h" +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* DEPRECATED */ +#include "SDL_stdinc.h" diff --git a/Externals/SDL/Include_1.2/SDL_joystick.h b/Externals/SDL/Include_1.2/SDL_joystick.h index eaa8866217..e4f72f1a41 100644 --- a/Externals/SDL/Include_1.2/SDL_joystick.h +++ b/Externals/SDL/Include_1.2/SDL_joystick.h @@ -1,167 +1,167 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL joystick event handling */ - -#ifndef _SDL_joystick_h -#define _SDL_joystick_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system - for joysticks, and load appropriate drivers. -*/ - -/* The joystick structure used to identify an SDL joystick */ -struct _SDL_Joystick; -typedef struct _SDL_Joystick SDL_Joystick; - - -/* Function prototypes */ -/* - * Count the number of joysticks attached to the system - */ -extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); - -/* - * Get the implementation dependent name of a joystick. - * This can be called before any joysticks are opened. - * If no name can be found, this function returns NULL. - */ -extern DECLSPEC const char * SDLCALL SDL_JoystickName(int device_index); - -/* - * Open a joystick for use - the index passed as an argument refers to - * the N'th joystick on the system. This index is the value which will - * identify this joystick in future joystick events. - * - * This function returns a joystick identifier, or NULL if an error occurred. - */ -extern DECLSPEC SDL_Joystick * SDLCALL SDL_JoystickOpen(int device_index); - -/* - * Returns 1 if the joystick has been opened, or 0 if it has not. - */ -extern DECLSPEC int SDLCALL SDL_JoystickOpened(int device_index); - -/* - * Get the device index of an opened joystick. - */ -extern DECLSPEC int SDLCALL SDL_JoystickIndex(SDL_Joystick *joystick); - -/* - * Get the number of general axis controls on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); - -/* - * Get the number of trackballs on a joystick - * Joystick trackballs have only relative motion events associated - * with them and their state cannot be polled. - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); - -/* - * Get the number of POV hats on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); - -/* - * Get the number of buttons on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); - -/* - * Update the current state of the open joysticks. - * This is called automatically by the event loop if any joystick - * events are enabled. - */ -extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); - -/* - * Enable/disable joystick event polling. - * If joystick events are disabled, you must call SDL_JoystickUpdate() - * yourself and check the state of the joystick when you want joystick - * information. - * The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. - */ -extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); - -/* - * Get the current state of an axis control on a joystick - * The state is a value ranging from -32768 to 32767. - * The axis indices start at index 0. - */ -extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis); - -/* - * Get the current state of a POV hat on a joystick - * The return value is one of the following positions: - */ -#define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 -#define SDL_HAT_RIGHT 0x02 -#define SDL_HAT_DOWN 0x04 -#define SDL_HAT_LEFT 0x08 -#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) -#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) -#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) -#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) -/* - * The hat indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, int hat); - -/* - * Get the ball axis change since the last poll - * This returns 0, or -1 if you passed it invalid parameters. - * The ball indices start at index 0. - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy); - -/* - * Get the current state of a button on a joystick - * The button indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, int button); - -/* - * Close a joystick previously opened with SDL_JoystickOpen() - */ -extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_joystick_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL joystick event handling */ + +#ifndef _SDL_joystick_h +#define _SDL_joystick_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* In order to use these functions, SDL_Init() must have been called + with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + for joysticks, and load appropriate drivers. +*/ + +/* The joystick structure used to identify an SDL joystick */ +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + + +/* Function prototypes */ +/* + * Count the number of joysticks attached to the system + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/* + * Get the implementation dependent name of a joystick. + * This can be called before any joysticks are opened. + * If no name can be found, this function returns NULL. + */ +extern DECLSPEC const char * SDLCALL SDL_JoystickName(int device_index); + +/* + * Open a joystick for use - the index passed as an argument refers to + * the N'th joystick on the system. This index is the value which will + * identify this joystick in future joystick events. + * + * This function returns a joystick identifier, or NULL if an error occurred. + */ +extern DECLSPEC SDL_Joystick * SDLCALL SDL_JoystickOpen(int device_index); + +/* + * Returns 1 if the joystick has been opened, or 0 if it has not. + */ +extern DECLSPEC int SDLCALL SDL_JoystickOpened(int device_index); + +/* + * Get the device index of an opened joystick. + */ +extern DECLSPEC int SDLCALL SDL_JoystickIndex(SDL_Joystick *joystick); + +/* + * Get the number of general axis controls on a joystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); + +/* + * Get the number of trackballs on a joystick + * Joystick trackballs have only relative motion events associated + * with them and their state cannot be polled. + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); + +/* + * Get the number of POV hats on a joystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); + +/* + * Get the number of buttons on a joystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); + +/* + * Update the current state of the open joysticks. + * This is called automatically by the event loop if any joystick + * events are enabled. + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/* + * Enable/disable joystick event polling. + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and check the state of the joystick when you want joystick + * information. + * The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +/* + * Get the current state of an axis control on a joystick + * The state is a value ranging from -32768 to 32767. + * The axis indices start at index 0. + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis); + +/* + * Get the current state of a POV hat on a joystick + * The return value is one of the following positions: + */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* + * The hat indices start at index 0. + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, int hat); + +/* + * Get the ball axis change since the last poll + * This returns 0, or -1 if you passed it invalid parameters. + * The ball indices start at index 0. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy); + +/* + * Get the current state of a button on a joystick + * The button indices start at index 0. + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, int button); + +/* + * Close a joystick previously opened with SDL_JoystickOpen() + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_joystick_h */ diff --git a/Externals/SDL/Include_1.2/SDL_keyboard.h b/Externals/SDL/Include_1.2/SDL_keyboard.h index ebeb61ae37..1ad7dcaa44 100644 --- a/Externals/SDL/Include_1.2/SDL_keyboard.h +++ b/Externals/SDL/Include_1.2/SDL_keyboard.h @@ -1,121 +1,121 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL keyboard event handling */ - -#ifndef _SDL_keyboard_h -#define _SDL_keyboard_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_keysym.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Keysym structure - - The scancode is hardware dependent, and should not be used by general - applications. If no hardware scancode is available, it will be 0. - - - The 'unicode' translated character is only available when character - translation is enabled by the SDL_EnableUNICODE() API. If non-zero, - this is a UNICODE character corresponding to the keypress. If the - high 9 bits of the character are 0, then this maps to the equivalent - ASCII character: - char ch; - if ( (keysym.unicode & 0xFF80) == 0 ) { - ch = keysym.unicode & 0x7F; - } else { - An international character.. - } - */ -typedef struct SDL_keysym { - Uint8 scancode; /* hardware specific scancode */ - SDLKey sym; /* SDL virtual keysym */ - SDLMod mod; /* current key modifiers */ - Uint16 unicode; /* translated character */ -} SDL_keysym; - -/* This is the mask which refers to all hotkey bindings */ -#define SDL_ALL_HOTKEYS 0xFFFFFFFF - -/* Function prototypes */ -/* - * Enable/Disable UNICODE translation of keyboard input. - * This translation has some overhead, so translation defaults off. - * If 'enable' is 1, translation is enabled. - * If 'enable' is 0, translation is disabled. - * If 'enable' is -1, the translation state is not changed. - * It returns the previous state of keyboard translation. - */ -extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable); - -/* - * Enable/Disable keyboard repeat. Keyboard repeat defaults to off. - * 'delay' is the initial delay in ms between the time when a key is - * pressed, and keyboard repeat begins. - * 'interval' is the time in ms between keyboard repeat events. - */ -#define SDL_DEFAULT_REPEAT_DELAY 500 -#define SDL_DEFAULT_REPEAT_INTERVAL 30 -/* - * If 'delay' is set to 0, keyboard repeat is disabled. - */ -extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval); -extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval); - -/* - * Get a snapshot of the current state of the keyboard. - * Returns an array of keystates, indexed by the SDLK_* syms. - * Used: - * Uint8 *keystate = SDL_GetKeyState(NULL); - * if ( keystate[SDLK_RETURN] ) ... is pressed. - */ -extern DECLSPEC Uint8 * SDLCALL SDL_GetKeyState(int *numkeys); - -/* - * Get the current key modifier state - */ -extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void); - -/* - * Set the current key modifier state - * This does not change the keyboard state, only the key modifier flags. - */ -extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate); - -/* - * Get the name of an SDL virtual keysym - */ -extern DECLSPEC char * SDLCALL SDL_GetKeyName(SDLKey key); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_keyboard_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL keyboard event handling */ + +#ifndef _SDL_keyboard_h +#define _SDL_keyboard_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_keysym.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Keysym structure + - The scancode is hardware dependent, and should not be used by general + applications. If no hardware scancode is available, it will be 0. + + - The 'unicode' translated character is only available when character + translation is enabled by the SDL_EnableUNICODE() API. If non-zero, + this is a UNICODE character corresponding to the keypress. If the + high 9 bits of the character are 0, then this maps to the equivalent + ASCII character: + char ch; + if ( (keysym.unicode & 0xFF80) == 0 ) { + ch = keysym.unicode & 0x7F; + } else { + An international character.. + } + */ +typedef struct SDL_keysym { + Uint8 scancode; /* hardware specific scancode */ + SDLKey sym; /* SDL virtual keysym */ + SDLMod mod; /* current key modifiers */ + Uint16 unicode; /* translated character */ +} SDL_keysym; + +/* This is the mask which refers to all hotkey bindings */ +#define SDL_ALL_HOTKEYS 0xFFFFFFFF + +/* Function prototypes */ +/* + * Enable/Disable UNICODE translation of keyboard input. + * This translation has some overhead, so translation defaults off. + * If 'enable' is 1, translation is enabled. + * If 'enable' is 0, translation is disabled. + * If 'enable' is -1, the translation state is not changed. + * It returns the previous state of keyboard translation. + */ +extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable); + +/* + * Enable/Disable keyboard repeat. Keyboard repeat defaults to off. + * 'delay' is the initial delay in ms between the time when a key is + * pressed, and keyboard repeat begins. + * 'interval' is the time in ms between keyboard repeat events. + */ +#define SDL_DEFAULT_REPEAT_DELAY 500 +#define SDL_DEFAULT_REPEAT_INTERVAL 30 +/* + * If 'delay' is set to 0, keyboard repeat is disabled. + */ +extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval); +extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval); + +/* + * Get a snapshot of the current state of the keyboard. + * Returns an array of keystates, indexed by the SDLK_* syms. + * Used: + * Uint8 *keystate = SDL_GetKeyState(NULL); + * if ( keystate[SDLK_RETURN] ) ... is pressed. + */ +extern DECLSPEC Uint8 * SDLCALL SDL_GetKeyState(int *numkeys); + +/* + * Get the current key modifier state + */ +extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void); + +/* + * Set the current key modifier state + * This does not change the keyboard state, only the key modifier flags. + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate); + +/* + * Get the name of an SDL virtual keysym + */ +extern DECLSPEC char * SDLCALL SDL_GetKeyName(SDLKey key); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_keyboard_h */ diff --git a/Externals/SDL/Include_1.2/SDL_keysym.h b/Externals/SDL/Include_1.2/SDL_keysym.h index a3d7196b52..ff44a035f9 100644 --- a/Externals/SDL/Include_1.2/SDL_keysym.h +++ b/Externals/SDL/Include_1.2/SDL_keysym.h @@ -1,311 +1,311 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_keysym_h -#define _SDL_keysym_h - -/* What we really want is a mapping of every raw key on the keyboard. - To support international keyboards, we use the range 0xA1 - 0xFF - as international virtual keycodes. We'll follow in the footsteps of X11... - The names of the keys - */ - -typedef enum { - /* The keyboard syms have been cleverly chosen to map to ASCII */ - SDLK_UNKNOWN = 0, - SDLK_FIRST = 0, - SDLK_BACKSPACE = 8, - SDLK_TAB = 9, - SDLK_CLEAR = 12, - SDLK_RETURN = 13, - SDLK_PAUSE = 19, - SDLK_ESCAPE = 27, - SDLK_SPACE = 32, - SDLK_EXCLAIM = 33, - SDLK_QUOTEDBL = 34, - SDLK_HASH = 35, - SDLK_DOLLAR = 36, - SDLK_AMPERSAND = 38, - SDLK_QUOTE = 39, - SDLK_LEFTPAREN = 40, - SDLK_RIGHTPAREN = 41, - SDLK_ASTERISK = 42, - SDLK_PLUS = 43, - SDLK_COMMA = 44, - SDLK_MINUS = 45, - SDLK_PERIOD = 46, - SDLK_SLASH = 47, - SDLK_0 = 48, - SDLK_1 = 49, - SDLK_2 = 50, - SDLK_3 = 51, - SDLK_4 = 52, - SDLK_5 = 53, - SDLK_6 = 54, - SDLK_7 = 55, - SDLK_8 = 56, - SDLK_9 = 57, - SDLK_COLON = 58, - SDLK_SEMICOLON = 59, - SDLK_LESS = 60, - SDLK_EQUALS = 61, - SDLK_GREATER = 62, - SDLK_QUESTION = 63, - SDLK_AT = 64, - /* - Skip uppercase letters - */ - SDLK_LEFTBRACKET = 91, - SDLK_BACKSLASH = 92, - SDLK_RIGHTBRACKET = 93, - SDLK_CARET = 94, - SDLK_UNDERSCORE = 95, - SDLK_BACKQUOTE = 96, - SDLK_a = 97, - SDLK_b = 98, - SDLK_c = 99, - SDLK_d = 100, - SDLK_e = 101, - SDLK_f = 102, - SDLK_g = 103, - SDLK_h = 104, - SDLK_i = 105, - SDLK_j = 106, - SDLK_k = 107, - SDLK_l = 108, - SDLK_m = 109, - SDLK_n = 110, - SDLK_o = 111, - SDLK_p = 112, - SDLK_q = 113, - SDLK_r = 114, - SDLK_s = 115, - SDLK_t = 116, - SDLK_u = 117, - SDLK_v = 118, - SDLK_w = 119, - SDLK_x = 120, - SDLK_y = 121, - SDLK_z = 122, - SDLK_DELETE = 127, - /* End of ASCII mapped keysyms */ - - /* International keyboard syms */ - SDLK_WORLD_0 = 160, /* 0xA0 */ - SDLK_WORLD_1 = 161, - SDLK_WORLD_2 = 162, - SDLK_WORLD_3 = 163, - SDLK_WORLD_4 = 164, - SDLK_WORLD_5 = 165, - SDLK_WORLD_6 = 166, - SDLK_WORLD_7 = 167, - SDLK_WORLD_8 = 168, - SDLK_WORLD_9 = 169, - SDLK_WORLD_10 = 170, - SDLK_WORLD_11 = 171, - SDLK_WORLD_12 = 172, - SDLK_WORLD_13 = 173, - SDLK_WORLD_14 = 174, - SDLK_WORLD_15 = 175, - SDLK_WORLD_16 = 176, - SDLK_WORLD_17 = 177, - SDLK_WORLD_18 = 178, - SDLK_WORLD_19 = 179, - SDLK_WORLD_20 = 180, - SDLK_WORLD_21 = 181, - SDLK_WORLD_22 = 182, - SDLK_WORLD_23 = 183, - SDLK_WORLD_24 = 184, - SDLK_WORLD_25 = 185, - SDLK_WORLD_26 = 186, - SDLK_WORLD_27 = 187, - SDLK_WORLD_28 = 188, - SDLK_WORLD_29 = 189, - SDLK_WORLD_30 = 190, - SDLK_WORLD_31 = 191, - SDLK_WORLD_32 = 192, - SDLK_WORLD_33 = 193, - SDLK_WORLD_34 = 194, - SDLK_WORLD_35 = 195, - SDLK_WORLD_36 = 196, - SDLK_WORLD_37 = 197, - SDLK_WORLD_38 = 198, - SDLK_WORLD_39 = 199, - SDLK_WORLD_40 = 200, - SDLK_WORLD_41 = 201, - SDLK_WORLD_42 = 202, - SDLK_WORLD_43 = 203, - SDLK_WORLD_44 = 204, - SDLK_WORLD_45 = 205, - SDLK_WORLD_46 = 206, - SDLK_WORLD_47 = 207, - SDLK_WORLD_48 = 208, - SDLK_WORLD_49 = 209, - SDLK_WORLD_50 = 210, - SDLK_WORLD_51 = 211, - SDLK_WORLD_52 = 212, - SDLK_WORLD_53 = 213, - SDLK_WORLD_54 = 214, - SDLK_WORLD_55 = 215, - SDLK_WORLD_56 = 216, - SDLK_WORLD_57 = 217, - SDLK_WORLD_58 = 218, - SDLK_WORLD_59 = 219, - SDLK_WORLD_60 = 220, - SDLK_WORLD_61 = 221, - SDLK_WORLD_62 = 222, - SDLK_WORLD_63 = 223, - SDLK_WORLD_64 = 224, - SDLK_WORLD_65 = 225, - SDLK_WORLD_66 = 226, - SDLK_WORLD_67 = 227, - SDLK_WORLD_68 = 228, - SDLK_WORLD_69 = 229, - SDLK_WORLD_70 = 230, - SDLK_WORLD_71 = 231, - SDLK_WORLD_72 = 232, - SDLK_WORLD_73 = 233, - SDLK_WORLD_74 = 234, - SDLK_WORLD_75 = 235, - SDLK_WORLD_76 = 236, - SDLK_WORLD_77 = 237, - SDLK_WORLD_78 = 238, - SDLK_WORLD_79 = 239, - SDLK_WORLD_80 = 240, - SDLK_WORLD_81 = 241, - SDLK_WORLD_82 = 242, - SDLK_WORLD_83 = 243, - SDLK_WORLD_84 = 244, - SDLK_WORLD_85 = 245, - SDLK_WORLD_86 = 246, - SDLK_WORLD_87 = 247, - SDLK_WORLD_88 = 248, - SDLK_WORLD_89 = 249, - SDLK_WORLD_90 = 250, - SDLK_WORLD_91 = 251, - SDLK_WORLD_92 = 252, - SDLK_WORLD_93 = 253, - SDLK_WORLD_94 = 254, - SDLK_WORLD_95 = 255, /* 0xFF */ - - /* Numeric keypad */ - SDLK_KP0 = 256, - SDLK_KP1 = 257, - SDLK_KP2 = 258, - SDLK_KP3 = 259, - SDLK_KP4 = 260, - SDLK_KP5 = 261, - SDLK_KP6 = 262, - SDLK_KP7 = 263, - SDLK_KP8 = 264, - SDLK_KP9 = 265, - SDLK_KP_PERIOD = 266, - SDLK_KP_DIVIDE = 267, - SDLK_KP_MULTIPLY = 268, - SDLK_KP_MINUS = 269, - SDLK_KP_PLUS = 270, - SDLK_KP_ENTER = 271, - SDLK_KP_EQUALS = 272, - - /* Arrows + Home/End pad */ - SDLK_UP = 273, - SDLK_DOWN = 274, - SDLK_RIGHT = 275, - SDLK_LEFT = 276, - SDLK_INSERT = 277, - SDLK_HOME = 278, - SDLK_END = 279, - SDLK_PAGEUP = 280, - SDLK_PAGEDOWN = 281, - - /* Function keys */ - SDLK_F1 = 282, - SDLK_F2 = 283, - SDLK_F3 = 284, - SDLK_F4 = 285, - SDLK_F5 = 286, - SDLK_F6 = 287, - SDLK_F7 = 288, - SDLK_F8 = 289, - SDLK_F9 = 290, - SDLK_F10 = 291, - SDLK_F11 = 292, - SDLK_F12 = 293, - SDLK_F13 = 294, - SDLK_F14 = 295, - SDLK_F15 = 296, - - /* Key state modifier keys */ - SDLK_NUMLOCK = 300, - SDLK_CAPSLOCK = 301, - SDLK_SCROLLOCK = 302, - SDLK_RSHIFT = 303, - SDLK_LSHIFT = 304, - SDLK_RCTRL = 305, - SDLK_LCTRL = 306, - SDLK_RALT = 307, - SDLK_LALT = 308, - SDLK_RMETA = 309, - SDLK_LMETA = 310, - SDLK_LSUPER = 311, /* Left "Windows" key */ - SDLK_RSUPER = 312, /* Right "Windows" key */ - SDLK_MODE = 313, /* "Alt Gr" key */ - SDLK_COMPOSE = 314, /* Multi-key compose key */ - - /* Miscellaneous function keys */ - SDLK_HELP = 315, - SDLK_PRINT = 316, - SDLK_SYSREQ = 317, - SDLK_BREAK = 318, - SDLK_MENU = 319, - SDLK_POWER = 320, /* Power Macintosh power key */ - SDLK_EURO = 321, /* Some european keyboards */ - SDLK_UNDO = 322, /* Atari keyboard has Undo */ - - /* Add any other keys here */ - - SDLK_LAST -} SDLKey; - -/* Enumeration of valid key mods (possibly OR'd together) */ -typedef enum { - KMOD_NONE = 0x0000, - KMOD_LSHIFT= 0x0001, - KMOD_RSHIFT= 0x0002, - KMOD_LCTRL = 0x0040, - KMOD_RCTRL = 0x0080, - KMOD_LALT = 0x0100, - KMOD_RALT = 0x0200, - KMOD_LMETA = 0x0400, - KMOD_RMETA = 0x0800, - KMOD_NUM = 0x1000, - KMOD_CAPS = 0x2000, - KMOD_MODE = 0x4000, - KMOD_RESERVED = 0x8000 -} SDLMod; - -#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) -#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) -#define KMOD_ALT (KMOD_LALT|KMOD_RALT) -#define KMOD_META (KMOD_LMETA|KMOD_RMETA) - -#endif /* _SDL_keysym_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_keysym_h +#define _SDL_keysym_h + +/* What we really want is a mapping of every raw key on the keyboard. + To support international keyboards, we use the range 0xA1 - 0xFF + as international virtual keycodes. We'll follow in the footsteps of X11... + The names of the keys + */ + +typedef enum { + /* The keyboard syms have been cleverly chosen to map to ASCII */ + SDLK_UNKNOWN = 0, + SDLK_FIRST = 0, + SDLK_BACKSPACE = 8, + SDLK_TAB = 9, + SDLK_CLEAR = 12, + SDLK_RETURN = 13, + SDLK_PAUSE = 19, + SDLK_ESCAPE = 27, + SDLK_SPACE = 32, + SDLK_EXCLAIM = 33, + SDLK_QUOTEDBL = 34, + SDLK_HASH = 35, + SDLK_DOLLAR = 36, + SDLK_AMPERSAND = 38, + SDLK_QUOTE = 39, + SDLK_LEFTPAREN = 40, + SDLK_RIGHTPAREN = 41, + SDLK_ASTERISK = 42, + SDLK_PLUS = 43, + SDLK_COMMA = 44, + SDLK_MINUS = 45, + SDLK_PERIOD = 46, + SDLK_SLASH = 47, + SDLK_0 = 48, + SDLK_1 = 49, + SDLK_2 = 50, + SDLK_3 = 51, + SDLK_4 = 52, + SDLK_5 = 53, + SDLK_6 = 54, + SDLK_7 = 55, + SDLK_8 = 56, + SDLK_9 = 57, + SDLK_COLON = 58, + SDLK_SEMICOLON = 59, + SDLK_LESS = 60, + SDLK_EQUALS = 61, + SDLK_GREATER = 62, + SDLK_QUESTION = 63, + SDLK_AT = 64, + /* + Skip uppercase letters + */ + SDLK_LEFTBRACKET = 91, + SDLK_BACKSLASH = 92, + SDLK_RIGHTBRACKET = 93, + SDLK_CARET = 94, + SDLK_UNDERSCORE = 95, + SDLK_BACKQUOTE = 96, + SDLK_a = 97, + SDLK_b = 98, + SDLK_c = 99, + SDLK_d = 100, + SDLK_e = 101, + SDLK_f = 102, + SDLK_g = 103, + SDLK_h = 104, + SDLK_i = 105, + SDLK_j = 106, + SDLK_k = 107, + SDLK_l = 108, + SDLK_m = 109, + SDLK_n = 110, + SDLK_o = 111, + SDLK_p = 112, + SDLK_q = 113, + SDLK_r = 114, + SDLK_s = 115, + SDLK_t = 116, + SDLK_u = 117, + SDLK_v = 118, + SDLK_w = 119, + SDLK_x = 120, + SDLK_y = 121, + SDLK_z = 122, + SDLK_DELETE = 127, + /* End of ASCII mapped keysyms */ + + /* International keyboard syms */ + SDLK_WORLD_0 = 160, /* 0xA0 */ + SDLK_WORLD_1 = 161, + SDLK_WORLD_2 = 162, + SDLK_WORLD_3 = 163, + SDLK_WORLD_4 = 164, + SDLK_WORLD_5 = 165, + SDLK_WORLD_6 = 166, + SDLK_WORLD_7 = 167, + SDLK_WORLD_8 = 168, + SDLK_WORLD_9 = 169, + SDLK_WORLD_10 = 170, + SDLK_WORLD_11 = 171, + SDLK_WORLD_12 = 172, + SDLK_WORLD_13 = 173, + SDLK_WORLD_14 = 174, + SDLK_WORLD_15 = 175, + SDLK_WORLD_16 = 176, + SDLK_WORLD_17 = 177, + SDLK_WORLD_18 = 178, + SDLK_WORLD_19 = 179, + SDLK_WORLD_20 = 180, + SDLK_WORLD_21 = 181, + SDLK_WORLD_22 = 182, + SDLK_WORLD_23 = 183, + SDLK_WORLD_24 = 184, + SDLK_WORLD_25 = 185, + SDLK_WORLD_26 = 186, + SDLK_WORLD_27 = 187, + SDLK_WORLD_28 = 188, + SDLK_WORLD_29 = 189, + SDLK_WORLD_30 = 190, + SDLK_WORLD_31 = 191, + SDLK_WORLD_32 = 192, + SDLK_WORLD_33 = 193, + SDLK_WORLD_34 = 194, + SDLK_WORLD_35 = 195, + SDLK_WORLD_36 = 196, + SDLK_WORLD_37 = 197, + SDLK_WORLD_38 = 198, + SDLK_WORLD_39 = 199, + SDLK_WORLD_40 = 200, + SDLK_WORLD_41 = 201, + SDLK_WORLD_42 = 202, + SDLK_WORLD_43 = 203, + SDLK_WORLD_44 = 204, + SDLK_WORLD_45 = 205, + SDLK_WORLD_46 = 206, + SDLK_WORLD_47 = 207, + SDLK_WORLD_48 = 208, + SDLK_WORLD_49 = 209, + SDLK_WORLD_50 = 210, + SDLK_WORLD_51 = 211, + SDLK_WORLD_52 = 212, + SDLK_WORLD_53 = 213, + SDLK_WORLD_54 = 214, + SDLK_WORLD_55 = 215, + SDLK_WORLD_56 = 216, + SDLK_WORLD_57 = 217, + SDLK_WORLD_58 = 218, + SDLK_WORLD_59 = 219, + SDLK_WORLD_60 = 220, + SDLK_WORLD_61 = 221, + SDLK_WORLD_62 = 222, + SDLK_WORLD_63 = 223, + SDLK_WORLD_64 = 224, + SDLK_WORLD_65 = 225, + SDLK_WORLD_66 = 226, + SDLK_WORLD_67 = 227, + SDLK_WORLD_68 = 228, + SDLK_WORLD_69 = 229, + SDLK_WORLD_70 = 230, + SDLK_WORLD_71 = 231, + SDLK_WORLD_72 = 232, + SDLK_WORLD_73 = 233, + SDLK_WORLD_74 = 234, + SDLK_WORLD_75 = 235, + SDLK_WORLD_76 = 236, + SDLK_WORLD_77 = 237, + SDLK_WORLD_78 = 238, + SDLK_WORLD_79 = 239, + SDLK_WORLD_80 = 240, + SDLK_WORLD_81 = 241, + SDLK_WORLD_82 = 242, + SDLK_WORLD_83 = 243, + SDLK_WORLD_84 = 244, + SDLK_WORLD_85 = 245, + SDLK_WORLD_86 = 246, + SDLK_WORLD_87 = 247, + SDLK_WORLD_88 = 248, + SDLK_WORLD_89 = 249, + SDLK_WORLD_90 = 250, + SDLK_WORLD_91 = 251, + SDLK_WORLD_92 = 252, + SDLK_WORLD_93 = 253, + SDLK_WORLD_94 = 254, + SDLK_WORLD_95 = 255, /* 0xFF */ + + /* Numeric keypad */ + SDLK_KP0 = 256, + SDLK_KP1 = 257, + SDLK_KP2 = 258, + SDLK_KP3 = 259, + SDLK_KP4 = 260, + SDLK_KP5 = 261, + SDLK_KP6 = 262, + SDLK_KP7 = 263, + SDLK_KP8 = 264, + SDLK_KP9 = 265, + SDLK_KP_PERIOD = 266, + SDLK_KP_DIVIDE = 267, + SDLK_KP_MULTIPLY = 268, + SDLK_KP_MINUS = 269, + SDLK_KP_PLUS = 270, + SDLK_KP_ENTER = 271, + SDLK_KP_EQUALS = 272, + + /* Arrows + Home/End pad */ + SDLK_UP = 273, + SDLK_DOWN = 274, + SDLK_RIGHT = 275, + SDLK_LEFT = 276, + SDLK_INSERT = 277, + SDLK_HOME = 278, + SDLK_END = 279, + SDLK_PAGEUP = 280, + SDLK_PAGEDOWN = 281, + + /* Function keys */ + SDLK_F1 = 282, + SDLK_F2 = 283, + SDLK_F3 = 284, + SDLK_F4 = 285, + SDLK_F5 = 286, + SDLK_F6 = 287, + SDLK_F7 = 288, + SDLK_F8 = 289, + SDLK_F9 = 290, + SDLK_F10 = 291, + SDLK_F11 = 292, + SDLK_F12 = 293, + SDLK_F13 = 294, + SDLK_F14 = 295, + SDLK_F15 = 296, + + /* Key state modifier keys */ + SDLK_NUMLOCK = 300, + SDLK_CAPSLOCK = 301, + SDLK_SCROLLOCK = 302, + SDLK_RSHIFT = 303, + SDLK_LSHIFT = 304, + SDLK_RCTRL = 305, + SDLK_LCTRL = 306, + SDLK_RALT = 307, + SDLK_LALT = 308, + SDLK_RMETA = 309, + SDLK_LMETA = 310, + SDLK_LSUPER = 311, /* Left "Windows" key */ + SDLK_RSUPER = 312, /* Right "Windows" key */ + SDLK_MODE = 313, /* "Alt Gr" key */ + SDLK_COMPOSE = 314, /* Multi-key compose key */ + + /* Miscellaneous function keys */ + SDLK_HELP = 315, + SDLK_PRINT = 316, + SDLK_SYSREQ = 317, + SDLK_BREAK = 318, + SDLK_MENU = 319, + SDLK_POWER = 320, /* Power Macintosh power key */ + SDLK_EURO = 321, /* Some european keyboards */ + SDLK_UNDO = 322, /* Atari keyboard has Undo */ + + /* Add any other keys here */ + + SDLK_LAST +} SDLKey; + +/* Enumeration of valid key mods (possibly OR'd together) */ +typedef enum { + KMOD_NONE = 0x0000, + KMOD_LSHIFT= 0x0001, + KMOD_RSHIFT= 0x0002, + KMOD_LCTRL = 0x0040, + KMOD_RCTRL = 0x0080, + KMOD_LALT = 0x0100, + KMOD_RALT = 0x0200, + KMOD_LMETA = 0x0400, + KMOD_RMETA = 0x0800, + KMOD_NUM = 0x1000, + KMOD_CAPS = 0x2000, + KMOD_MODE = 0x4000, + KMOD_RESERVED = 0x8000 +} SDLMod; + +#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) +#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) +#define KMOD_ALT (KMOD_LALT|KMOD_RALT) +#define KMOD_META (KMOD_LMETA|KMOD_RMETA) + +#endif /* _SDL_keysym_h */ diff --git a/Externals/SDL/Include_1.2/SDL_loadso.h b/Externals/SDL/Include_1.2/SDL_loadso.h index 0490b45e11..ce96449494 100644 --- a/Externals/SDL/Include_1.2/SDL_loadso.h +++ b/Externals/SDL/Include_1.2/SDL_loadso.h @@ -1,74 +1,74 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent library loading routines */ - -/* Some things to keep in mind: - - These functions only work on C function names. Other languages may - have name mangling and intrinsic language support that varies from - compiler to compiler. - - Make sure you declare your function pointers with the same calling - convention as the actual library function. Your code will crash - mysteriously if you do not do this. - - Avoid namespace collisions. If you load a symbol from the library, - it is not defined whether or not it goes into the global symbol - namespace for the application. If it does and it conflicts with - symbols in your code or other shared libraries, you will not get - the results you expect. :) -*/ - - -#ifndef _SDL_loadso_h -#define _SDL_loadso_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This function dynamically loads a shared object and returns a pointer - * to the object handle (or NULL if there was an error). - * The 'sofile' parameter is a system dependent name of the object file. - */ -extern DECLSPEC void * SDLCALL SDL_LoadObject(const char *sofile); - -/* Given an object handle, this function looks up the address of the - * named function in the shared object and returns it. This address - * is no longer valid after calling SDL_UnloadObject(). - */ -extern DECLSPEC void * SDLCALL SDL_LoadFunction(void *handle, const char *name); - -/* Unload a shared object from memory */ -extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_loadso_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* System dependent library loading routines */ + +/* Some things to keep in mind: + - These functions only work on C function names. Other languages may + have name mangling and intrinsic language support that varies from + compiler to compiler. + - Make sure you declare your function pointers with the same calling + convention as the actual library function. Your code will crash + mysteriously if you do not do this. + - Avoid namespace collisions. If you load a symbol from the library, + it is not defined whether or not it goes into the global symbol + namespace for the application. If it does and it conflicts with + symbols in your code or other shared libraries, you will not get + the results you expect. :) +*/ + + +#ifndef _SDL_loadso_h +#define _SDL_loadso_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This function dynamically loads a shared object and returns a pointer + * to the object handle (or NULL if there was an error). + * The 'sofile' parameter is a system dependent name of the object file. + */ +extern DECLSPEC void * SDLCALL SDL_LoadObject(const char *sofile); + +/* Given an object handle, this function looks up the address of the + * named function in the shared object and returns it. This address + * is no longer valid after calling SDL_UnloadObject(). + */ +extern DECLSPEC void * SDLCALL SDL_LoadFunction(void *handle, const char *name); + +/* Unload a shared object from memory */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_loadso_h */ diff --git a/Externals/SDL/Include_1.2/SDL_main.h b/Externals/SDL/Include_1.2/SDL_main.h index 87f3447ede..cf8b728dc3 100644 --- a/Externals/SDL/Include_1.2/SDL_main.h +++ b/Externals/SDL/Include_1.2/SDL_main.h @@ -1,98 +1,98 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_main_h -#define _SDL_main_h - -#include "SDL_stdinc.h" - -/* Redefine main() on Win32 and MacOS so that it is called by winmain.c */ - -#if defined(__WIN32__) || \ - (defined(__MWERKS__) && !defined(__BEOS__)) || \ - defined(__MACOS__) || defined(__MACOSX__) || \ - defined(__SYMBIAN32__) || defined(QWS) - -#ifdef __cplusplus -#define C_LINKAGE "C" -#else -#define C_LINKAGE -#endif /* __cplusplus */ - -/* The application's main() function must be called with C linkage, - and should be declared like this: -#ifdef __cplusplus -extern "C" -#endif - int main(int argc, char *argv[]) - { - } - */ -#define main SDL_main - -/* The prototype for the application's main() function */ -extern C_LINKAGE int SDL_main(int argc, char *argv[]); - - -/* From the SDL library code -- needed for registering the app on Win32 */ -#ifdef __WIN32__ - -#include "begin_code.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be called from your WinMain() function, if any */ -extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); -/* This can also be called, but is no longer necessary */ -extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); -/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ -extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); -#ifdef __cplusplus -} -#endif -#include "close_code.h" -#endif - -/* From the SDL library code -- needed for registering QuickDraw on MacOS */ -#if defined(__MACOS__) - -#include "begin_code.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Forward declaration so we don't need to include QuickDraw.h */ -struct QDGlobals; - -/* This should be called from your main() function, if any */ -extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); - -#ifdef __cplusplus -} -#endif -#include "close_code.h" -#endif - -#endif /* Need to redefine main()? */ - -#endif /* _SDL_main_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_main_h +#define _SDL_main_h + +#include "SDL_stdinc.h" + +/* Redefine main() on Win32 and MacOS so that it is called by winmain.c */ + +#if defined(__WIN32__) || \ + (defined(__MWERKS__) && !defined(__BEOS__)) || \ + defined(__MACOS__) || defined(__MACOSX__) || \ + defined(__SYMBIAN32__) || defined(QWS) + +#ifdef __cplusplus +#define C_LINKAGE "C" +#else +#define C_LINKAGE +#endif /* __cplusplus */ + +/* The application's main() function must be called with C linkage, + and should be declared like this: +#ifdef __cplusplus +extern "C" +#endif + int main(int argc, char *argv[]) + { + } + */ +#define main SDL_main + +/* The prototype for the application's main() function */ +extern C_LINKAGE int SDL_main(int argc, char *argv[]); + + +/* From the SDL library code -- needed for registering the app on Win32 */ +#ifdef __WIN32__ + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be called from your WinMain() function, if any */ +extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); +/* This can also be called, but is no longer necessary */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); +/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); +#ifdef __cplusplus +} +#endif +#include "close_code.h" +#endif + +/* From the SDL library code -- needed for registering QuickDraw on MacOS */ +#if defined(__MACOS__) + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declaration so we don't need to include QuickDraw.h */ +struct QDGlobals; + +/* This should be called from your main() function, if any */ +extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); + +#ifdef __cplusplus +} +#endif +#include "close_code.h" +#endif + +#endif /* Need to redefine main()? */ + +#endif /* _SDL_main_h */ diff --git a/Externals/SDL/Include_1.2/SDL_mouse.h b/Externals/SDL/Include_1.2/SDL_mouse.h index 7767624831..019497fbb1 100644 --- a/Externals/SDL/Include_1.2/SDL_mouse.h +++ b/Externals/SDL/Include_1.2/SDL_mouse.h @@ -1,140 +1,140 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL mouse event handling */ - -#ifndef _SDL_mouse_h -#define _SDL_mouse_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct WMcursor WMcursor; /* Implementation dependent */ -typedef struct SDL_Cursor { - SDL_Rect area; /* The area of the mouse cursor */ - Sint16 hot_x, hot_y; /* The "tip" of the cursor */ - Uint8 *data; /* B/W cursor data */ - Uint8 *mask; /* B/W cursor mask */ - Uint8 *save[2]; /* Place to save cursor area */ - WMcursor *wm_cursor; /* Window-manager cursor */ -} SDL_Cursor; - -/* Function prototypes */ -/* - * Retrieve the current state of the mouse. - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * current mouse cursor position. You can pass NULL for either x or y. - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); - -/* - * Retrieve the current state of the mouse. - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * mouse deltas since the last call to SDL_GetRelativeMouseState(). - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); - -/* - * Set the position of the mouse cursor (generates a mouse motion event) - */ -extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); - -/* - * Create a cursor using the specified data and mask (in MSB format). - * The cursor width must be a multiple of 8 bits. - * - * The cursor is created in black and white according to the following: - * data mask resulting pixel on screen - * 0 1 White - * 1 1 Black - * 0 0 Transparent - * 1 0 Inverted color if possible, black if not. - * - * Cursors created with this function must be freed with SDL_FreeCursor(). - */ -extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor - (Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y); - -/* - * Set the currently active cursor to the specified one. - * If the cursor is currently visible, the change will be immediately - * represented on the display. - */ -extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor *cursor); - -/* - * Returns the currently active cursor. - */ -extern DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); - -/* - * Deallocates a cursor created with SDL_CreateCursor(). - */ -extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); - -/* - * Toggle whether or not the cursor is shown on the screen. - * The cursor start off displayed, but can be turned off. - * SDL_ShowCursor() returns 1 if the cursor was being displayed - * before the call, or 0 if it was not. You can query the current - * state by passing a 'toggle' value of -1. - */ -extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); - -/* Used as a mask when testing buttons in buttonstate - Button 1: Left mouse button - Button 2: Middle mouse button - Button 3: Right mouse button - Button 4: Mouse wheel up (may also be a real button) - Button 5: Mouse wheel down (may also be a real button) - */ -#define SDL_BUTTON(X) (1 << ((X)-1)) -#define SDL_BUTTON_LEFT 1 -#define SDL_BUTTON_MIDDLE 2 -#define SDL_BUTTON_RIGHT 3 -#define SDL_BUTTON_WHEELUP 4 -#define SDL_BUTTON_WHEELDOWN 5 -#define SDL_BUTTON_X1 6 -#define SDL_BUTTON_X2 7 -#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) -#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) -#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) -#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) -#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_mouse_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL mouse event handling */ + +#ifndef _SDL_mouse_h +#define _SDL_mouse_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct WMcursor WMcursor; /* Implementation dependent */ +typedef struct SDL_Cursor { + SDL_Rect area; /* The area of the mouse cursor */ + Sint16 hot_x, hot_y; /* The "tip" of the cursor */ + Uint8 *data; /* B/W cursor data */ + Uint8 *mask; /* B/W cursor mask */ + Uint8 *save[2]; /* Place to save cursor area */ + WMcursor *wm_cursor; /* Window-manager cursor */ +} SDL_Cursor; + +/* Function prototypes */ +/* + * Retrieve the current state of the mouse. + * The current button state is returned as a button bitmask, which can + * be tested using the SDL_BUTTON(X) macros, and x and y are set to the + * current mouse cursor position. You can pass NULL for either x or y. + */ +extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); + +/* + * Retrieve the current state of the mouse. + * The current button state is returned as a button bitmask, which can + * be tested using the SDL_BUTTON(X) macros, and x and y are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState(). + */ +extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/* + * Set the position of the mouse cursor (generates a mouse motion event) + */ +extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); + +/* + * Create a cursor using the specified data and mask (in MSB format). + * The cursor width must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * data mask resulting pixel on screen + * 0 1 White + * 1 1 Black + * 0 0 Transparent + * 1 0 Inverted color if possible, black if not. + * + * Cursors created with this function must be freed with SDL_FreeCursor(). + */ +extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor + (Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y); + +/* + * Set the currently active cursor to the specified one. + * If the cursor is currently visible, the change will be immediately + * represented on the display. + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor *cursor); + +/* + * Returns the currently active cursor. + */ +extern DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); + +/* + * Deallocates a cursor created with SDL_CreateCursor(). + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); + +/* + * Toggle whether or not the cursor is shown on the screen. + * The cursor start off displayed, but can be turned off. + * SDL_ShowCursor() returns 1 if the cursor was being displayed + * before the call, or 0 if it was not. You can query the current + * state by passing a 'toggle' value of -1. + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/* Used as a mask when testing buttons in buttonstate + Button 1: Left mouse button + Button 2: Middle mouse button + Button 3: Right mouse button + Button 4: Mouse wheel up (may also be a real button) + Button 5: Mouse wheel down (may also be a real button) + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_WHEELUP 4 +#define SDL_BUTTON_WHEELDOWN 5 +#define SDL_BUTTON_X1 6 +#define SDL_BUTTON_X2 7 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_mouse_h */ diff --git a/Externals/SDL/Include_1.2/SDL_mutex.h b/Externals/SDL/Include_1.2/SDL_mutex.h index aca92680a1..00165281de 100644 --- a/Externals/SDL/Include_1.2/SDL_mutex.h +++ b/Externals/SDL/Include_1.2/SDL_mutex.h @@ -1,162 +1,162 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_mutex_h -#define _SDL_mutex_h - -/* Functions to provide thread synchronization primitives - - These are independent of the other SDL routines. -*/ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Synchronization functions which can time out return this value - if they time out. -*/ -#define SDL_MUTEX_TIMEDOUT 1 - -/* This is the timeout value which corresponds to never time out */ -#define SDL_MUTEX_MAXWAIT (~(Uint32)0) - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Mutex functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL mutex structure, defined in SDL_mutex.c */ -struct SDL_mutex; -typedef struct SDL_mutex SDL_mutex; - -/* Create a mutex, initialized unlocked */ -extern DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void); - -/* Lock the mutex (Returns 0, or -1 on error) */ -#define SDL_LockMutex(m) SDL_mutexP(m) -extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex); - -/* Unlock the mutex (Returns 0, or -1 on error) - It is an error to unlock a mutex that has not been locked by - the current thread, and doing so results in undefined behavior. - */ -#define SDL_UnlockMutex(m) SDL_mutexV(m) -extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex); - -/* Destroy a mutex */ -extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Semaphore functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL semaphore structure, defined in SDL_sem.c */ -struct SDL_semaphore; -typedef struct SDL_semaphore SDL_sem; - -/* Create a semaphore, initialized with value, returns NULL on failure. */ -extern DECLSPEC SDL_sem * SDLCALL SDL_CreateSemaphore(Uint32 initial_value); - -/* Destroy a semaphore */ -extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem *sem); - -/* This function suspends the calling thread until the semaphore pointed - * to by sem has a positive count. It then atomically decreases the semaphore - * count. - */ -extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem *sem); - -/* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds, - SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. -*/ -extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem *sem); - -/* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if - the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in - the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms); - -/* Atomically increases the semaphore's count (not blocking), returns 0, - or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem *sem); - -/* Returns the current count of the semaphore */ -extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem *sem); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Condition variable functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL condition variable structure, defined in SDL_cond.c */ -struct SDL_cond; -typedef struct SDL_cond SDL_cond; - -/* Create a condition variable */ -extern DECLSPEC SDL_cond * SDLCALL SDL_CreateCond(void); - -/* Destroy a condition variable */ -extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond *cond); - -/* Restart one of the threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond *cond); - -/* Restart all threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond *cond); - -/* Wait on the condition variable, unlocking the provided mutex. - The mutex must be locked before entering this function! - The mutex is re-locked once the condition variable is signaled. - Returns 0 when it is signaled, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut); - -/* Waits for at most 'ms' milliseconds, and returns 0 if the condition - variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not - signaled in the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_mutex_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_mutex_h +#define _SDL_mutex_h + +/* Functions to provide thread synchronization primitives + + These are independent of the other SDL routines. +*/ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Synchronization functions which can time out return this value + if they time out. +*/ +#define SDL_MUTEX_TIMEDOUT 1 + +/* This is the timeout value which corresponds to never time out */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* Mutex functions */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* The SDL mutex structure, defined in SDL_mutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/* Create a mutex, initialized unlocked */ +extern DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void); + +/* Lock the mutex (Returns 0, or -1 on error) */ +#define SDL_LockMutex(m) SDL_mutexP(m) +extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex); + +/* Unlock the mutex (Returns 0, or -1 on error) + It is an error to unlock a mutex that has not been locked by + the current thread, and doing so results in undefined behavior. + */ +#define SDL_UnlockMutex(m) SDL_mutexV(m) +extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex); + +/* Destroy a mutex */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* Semaphore functions */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* The SDL semaphore structure, defined in SDL_sem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/* Create a semaphore, initialized with value, returns NULL on failure. */ +extern DECLSPEC SDL_sem * SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/* Destroy a semaphore */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem *sem); + +/* This function suspends the calling thread until the semaphore pointed + * to by sem has a positive count. It then atomically decreases the semaphore + * count. + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem *sem); + +/* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds, + SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. +*/ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem *sem); + +/* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if + the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in + the allotted time, and -1 on error. + On some platforms this function is implemented by looping with a delay + of 1 ms, and so should be avoided if possible. +*/ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms); + +/* Atomically increases the semaphore's count (not blocking), returns 0, + or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem *sem); + +/* Returns the current count of the semaphore */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem *sem); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* Condition variable functions */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* The SDL condition variable structure, defined in SDL_cond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/* Create a condition variable */ +extern DECLSPEC SDL_cond * SDLCALL SDL_CreateCond(void); + +/* Destroy a condition variable */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond *cond); + +/* Restart one of the threads that are waiting on the condition variable, + returns 0 or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond *cond); + +/* Restart all threads that are waiting on the condition variable, + returns 0 or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond *cond); + +/* Wait on the condition variable, unlocking the provided mutex. + The mutex must be locked before entering this function! + The mutex is re-locked once the condition variable is signaled. + Returns 0 when it is signaled, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut); + +/* Waits for at most 'ms' milliseconds, and returns 0 if the condition + variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not + signaled in the allotted time, and -1 on error. + On some platforms this function is implemented by looping with a delay + of 1 ms, and so should be avoided if possible. +*/ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_mutex_h */ diff --git a/Externals/SDL/Include_1.2/SDL_name.h b/Externals/SDL/Include_1.2/SDL_name.h index 84d5e39a09..511619af56 100644 --- a/Externals/SDL/Include_1.2/SDL_name.h +++ b/Externals/SDL/Include_1.2/SDL_name.h @@ -1,11 +1,11 @@ - -#ifndef _SDLname_h_ -#define _SDLname_h_ - -#if defined(__STDC__) || defined(__cplusplus) -#define NeedFunctionPrototypes 1 -#endif - -#define SDL_NAME(X) SDL_##X - -#endif /* _SDLname_h_ */ + +#ifndef _SDLname_h_ +#define _SDLname_h_ + +#if defined(__STDC__) || defined(__cplusplus) +#define NeedFunctionPrototypes 1 +#endif + +#define SDL_NAME(X) SDL_##X + +#endif /* _SDLname_h_ */ diff --git a/Externals/SDL/Include_1.2/SDL_opengl.h b/Externals/SDL/Include_1.2/SDL_opengl.h index eea7640955..36c0a3099e 100644 --- a/Externals/SDL/Include_1.2/SDL_opengl.h +++ b/Externals/SDL/Include_1.2/SDL_opengl.h @@ -1,6551 +1,6551 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is a simple file to encapsulate the OpenGL API headers */ - -#include "SDL_config.h" - -#ifdef __WIN32__ -#define WIN32_LEAN_AND_MEAN -#ifndef NOMINMAX -#define NOMINMAX /* Don't defined min() and max() */ -#endif -#include -#endif -#ifndef NO_SDL_GLEXT -#define __glext_h_ /* Don't let gl.h include glext.h */ -#endif -#if defined(__MACOSX__) -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#elif defined(__MACOS__) -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#else -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#endif -#ifndef NO_SDL_GLEXT -#undef __glext_h_ -#endif - -/* This file taken from "GLext.h" from the Jeff Molofee OpenGL tutorials. - It is included here because glext.h is not available on some systems. - If you don't want this version included, simply define "NO_SDL_GLEXT" - */ -#ifndef NO_SDL_GLEXT -#if !defined(__glext_h_) && !defined(GL_GLEXT_LEGACY) -#define __glext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** License Applicability. Except to the extent portions of this file are -** made subject to an alternative license as permitted in the SGI Free -** Software License B, Version 1.1 (the "License"), the contents of this -** file are subject only to the provisions of the License. You may not use -** this file except in compliance with the License. You may obtain a copy -** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: -** -** http://oss.sgi.com/projects/FreeB -** -** Note that, as provided in the License, the Software is distributed on an -** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. -** -** Original Code. The Original Code is: OpenGL Sample Implementation, -** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. -** Copyright in any portions created by third parties is as indicated -** elsewhere herein. All Rights Reserved. -** -** Additional Notice Provisions: This software was created using the -** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has -** not been independently verified as being compliant with the OpenGL(R) -** version 1.2.1 Specification. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2005/06/20 */ -/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define GL_GLEXT_VERSION 29 - -#ifndef GL_VERSION_1_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_ARB_imaging -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif - -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif - -#ifndef GL_VERSION_1_4 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif - -#ifndef GL_VERSION_1_5 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif - -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif - -#ifndef GL_ARB_multisample -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif - -#ifndef GL_ARB_texture_env_add -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif - -#ifndef GL_ARB_texture_compression -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#ifndef GL_ARB_point_parameters -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif - -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif - -#ifndef GL_ARB_window_pos -#endif - -#ifndef GL_ARB_vertex_program -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#endif - -#ifndef GL_ARB_fragment_program -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#endif - -#ifndef GL_ARB_shader_objects -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#endif - -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif - -#ifndef GL_ARB_texture_float -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif - -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif - -#ifndef GL_EXT_blend_color -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif - -#ifndef GL_SGI_color_matrix -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif - -#ifndef GL_SGI_color_table -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif - -#ifndef GL_SGIS_multisample -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif - -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif - -#ifndef GL_INGR_color_clamp -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif - -#ifndef GL_NV_register_combiners -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif - -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_NV_evaluators -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -#ifndef GL_NV_texture_compression_vtc -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif - -#ifndef GL_NV_texture_shader -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif - -#ifndef GL_NV_vertex_program -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif - -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif - -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif - -#ifndef GL_OML_resample -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif - -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif - -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif - -#ifndef GL_NV_occlusion_query -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#endif - -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif - -#ifndef GL_NV_vertex_program1_1 -#endif - -#ifndef GL_EXT_shadow_funcs -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif - -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A -#endif - -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif - -#ifndef GL_ATI_texture_float -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif - -#ifndef GL_NV_float_buffer -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif - -#ifndef GL_NV_fragment_program -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#endif - -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#endif - -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif - -#ifndef GL_NV_vertex_program2 -#endif - -#ifndef GL_ATI_map_object_buffer -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#endif - -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif - -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif - -#ifndef GL_NV_fragment_program_option -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif - -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif - -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; /* native character */ -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and program/shader text */ -typedef char GLcharARB; /* native character */ -typedef unsigned int GLhandleARB; /* shader object handle */ -#endif - -/* GL types for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); -GLAPI void APIENTRY glBlendEquation (GLenum); -GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogram (GLenum); -GLAPI void APIENTRY glResetMinmax (GLenum); -GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum); -GLAPI void APIENTRY glClientActiveTexture (GLenum); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glFogCoordf (GLfloat); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *); -GLAPI void APIENTRY glFogCoordd (GLdouble); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); -GLAPI void APIENTRY glPointParameteri (GLenum, GLint); -GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); -GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos2i (GLint, GLint); -GLAPI void APIENTRY glWindowPos2iv (const GLint *); -GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *); -GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3iv (const GLint *); -GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQuery (GLuint); -GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); -GLAPI void APIENTRY glEndQuery (GLenum); -GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); -GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint); -GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); -GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); -GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); -GLAPI void APIENTRY glAttachShader (GLuint, GLuint); -GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); -GLAPI void APIENTRY glCompileShader (GLuint); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum); -GLAPI void APIENTRY glDeleteProgram (GLuint); -GLAPI void APIENTRY glDeleteShader (GLuint); -GLAPI void APIENTRY glDetachShader (GLuint, GLuint); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); -GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgram (GLuint); -GLAPI GLboolean APIENTRY glIsShader (GLuint); -GLAPI void APIENTRY glLinkProgram (GLuint); -GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); -GLAPI void APIENTRY glUseProgram (GLuint); -GLAPI void APIENTRY glUniform1f (GLint, GLfloat); -GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1i (GLint, GLint); -GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glValidateProgram (GLuint); -GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); -GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); -GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); -GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); -GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); -GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexBlendARB (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); -GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); -GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); -GLAPI void APIENTRY glEndQueryARB (GLenum); -GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); -GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); -GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1iARB (GLint, GLint); -GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogramEXT (GLenum); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_EXT_color_matrix -#define GL_EXT_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint); -GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); -GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); -GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); -GLAPI void APIENTRY glDeformSGIX (GLbitfield); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); -GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); -GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum); -GLAPI void APIENTRY glTextureLightEXT (GLenum); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); -GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); -GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); -GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); -GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *); -GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); -GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); -GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); -GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); -GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFinishFenceNV (GLuint); -GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); -GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); -GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); -GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); -GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); -GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); -GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); -GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); -GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. - */ -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif -#endif /* NO_SDL_GLEXT */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This is a simple file to encapsulate the OpenGL API headers */ + +#include "SDL_config.h" + +#ifdef __WIN32__ +#define WIN32_LEAN_AND_MEAN +#ifndef NOMINMAX +#define NOMINMAX /* Don't defined min() and max() */ +#endif +#include +#endif +#ifndef NO_SDL_GLEXT +#define __glext_h_ /* Don't let gl.h include glext.h */ +#endif +#if defined(__MACOSX__) +#include /* Header File For The OpenGL Library */ +#include /* Header File For The GLU Library */ +#elif defined(__MACOS__) +#include /* Header File For The OpenGL Library */ +#include /* Header File For The GLU Library */ +#else +#include /* Header File For The OpenGL Library */ +#include /* Header File For The GLU Library */ +#endif +#ifndef NO_SDL_GLEXT +#undef __glext_h_ +#endif + +/* This file taken from "GLext.h" from the Jeff Molofee OpenGL tutorials. + It is included here because glext.h is not available on some systems. + If you don't want this version included, simply define "NO_SDL_GLEXT" + */ +#ifndef NO_SDL_GLEXT +#if !defined(__glext_h_) && !defined(GL_GLEXT_LEGACY) +#define __glext_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** License Applicability. Except to the extent portions of this file are +** made subject to an alternative license as permitted in the SGI Free +** Software License B, Version 1.1 (the "License"), the contents of this +** file are subject only to the provisions of the License. You may not use +** this file except in compliance with the License. You may obtain a copy +** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 +** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: +** +** http://oss.sgi.com/projects/FreeB +** +** Note that, as provided in the License, the Software is distributed on an +** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS +** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +** +** Original Code. The Original Code is: OpenGL Sample Implementation, +** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, +** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. +** Copyright in any portions created by third parties is as indicated +** elsewhere herein. All Rights Reserved. +** +** Additional Notice Provisions: This software was created using the +** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has +** not been independently verified as being compliant with the OpenGL(R) +** version 1.2.1 Specification. +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#define WIN32_LEAN_AND_MEAN 1 +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +/*************************************************************/ + +/* Header file version number, required by OpenGL ABI for Linux */ +/* glext.h last updated 2005/06/20 */ +/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ +#define GL_GLEXT_VERSION 29 + +#ifndef GL_VERSION_1_2 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_RESCALE_NORMAL 0x803A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#endif + +#ifndef GL_ARB_imaging +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_FUNC_ADD 0x8006 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_BLEND_EQUATION 0x8009 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#endif + +#ifndef GL_VERSION_1_3 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#endif + +#ifndef GL_VERSION_1_4 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#endif + +#ifndef GL_VERSION_1_5 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE +#define GL_FOG_COORD GL_FOG_COORDINATE +#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE +#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE +#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER +#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING +#define GL_SRC0_RGB GL_SOURCE0_RGB +#define GL_SRC1_RGB GL_SOURCE1_RGB +#define GL_SRC2_RGB GL_SOURCE2_RGB +#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA +#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA +#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA +#endif + +#ifndef GL_VERSION_2_0 +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#endif + +#ifndef GL_ARB_multitexture +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#endif + +#ifndef GL_ARB_transpose_matrix +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#endif + +#ifndef GL_ARB_multisample +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#endif + +#ifndef GL_ARB_texture_env_add +#endif + +#ifndef GL_ARB_texture_cube_map +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif + +#ifndef GL_ARB_texture_compression +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#endif + +#ifndef GL_ARB_texture_border_clamp +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif + +#ifndef GL_ARB_point_parameters +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#endif + +#ifndef GL_ARB_vertex_blend +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#endif + +#ifndef GL_ARB_matrix_palette +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#endif + +#ifndef GL_ARB_texture_env_combine +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif + +#ifndef GL_ARB_texture_env_crossbar +#endif + +#ifndef GL_ARB_texture_env_dot3 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif + +#ifndef GL_ARB_depth_texture +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif + +#ifndef GL_ARB_shadow +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif + +#ifndef GL_ARB_shadow_ambient +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif + +#ifndef GL_ARB_window_pos +#endif + +#ifndef GL_ARB_vertex_program +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#endif + +#ifndef GL_ARB_fragment_program +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#endif + +#ifndef GL_ARB_vertex_buffer_object +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +#endif + +#ifndef GL_ARB_occlusion_query +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#endif + +#ifndef GL_ARB_shader_objects +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#endif + +#ifndef GL_ARB_vertex_shader +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#endif + +#ifndef GL_ARB_fragment_shader +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif + +#ifndef GL_ARB_shading_language_100 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif + +#ifndef GL_ARB_texture_non_power_of_two +#endif + +#ifndef GL_ARB_point_sprite +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif + +#ifndef GL_ARB_fragment_program_shadow +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_HALF_FLOAT_ARB 0x140B +#endif + +#ifndef GL_ARB_texture_float +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif + +#ifndef GL_EXT_abgr +#define GL_ABGR_EXT 0x8000 +#endif + +#ifndef GL_EXT_blend_color +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +#endif + +#ifndef GL_EXT_polygon_offset +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#endif + +#ifndef GL_EXT_texture +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif + +#ifndef GL_EXT_texture3D +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#endif + +#ifndef GL_SGIS_texture_filter4 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#endif + +#ifndef GL_EXT_subtexture +#endif + +#ifndef GL_EXT_copy_texture +#endif + +#ifndef GL_EXT_histogram +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#endif + +#ifndef GL_EXT_convolution +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#endif + +#ifndef GL_SGI_color_matrix +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif + +#ifndef GL_SGI_color_table +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#endif + +#ifndef GL_SGIS_pixel_texture +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#endif + +#ifndef GL_SGIX_pixel_texture +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#endif + +#ifndef GL_SGIS_texture4D +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#endif + +#ifndef GL_SGI_texture_color_table +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif + +#ifndef GL_EXT_cmyka +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif + +#ifndef GL_EXT_texture_object +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#endif + +#ifndef GL_SGIS_detail_texture +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#endif + +#ifndef GL_SGIS_sharpen_texture +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#endif + +#ifndef GL_EXT_packed_pixels +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif + +#ifndef GL_SGIS_texture_lod +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif + +#ifndef GL_SGIS_multisample +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#endif + +#ifndef GL_EXT_rescale_normal +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif + +#ifndef GL_EXT_vertex_array +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#endif + +#ifndef GL_EXT_misc_attribute +#endif + +#ifndef GL_SGIS_generate_mipmap +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif + +#ifndef GL_SGIX_clipmap +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif + +#ifndef GL_SGIX_shadow +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif + +#ifndef GL_SGIS_texture_border_clamp +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif + +#ifndef GL_EXT_blend_minmax +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_BLEND_EQUATION_EXT 0x8009 +#endif + +#ifndef GL_EXT_blend_subtract +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif + +#ifndef GL_EXT_blend_logic_op +#endif + +#ifndef GL_SGIX_interlace +#define GL_INTERLACE_SGIX 0x8094 +#endif + +#ifndef GL_SGIX_pixel_tiles +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif + +#ifndef GL_SGIS_texture_select +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif + +#ifndef GL_SGIX_sprite +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#endif + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif + +#ifndef GL_EXT_point_parameters +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#endif + +#ifndef GL_SGIS_point_parameters +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#endif + +#ifndef GL_SGIX_instruments +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#endif + +#ifndef GL_SGIX_texture_scale_bias +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif + +#ifndef GL_SGIX_framezoom +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#endif + +#ifndef GL_SGIX_tag_sample_buffer +#endif + +#ifndef GL_FfdMaskSGIX +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#endif + +#ifndef GL_SGIX_polynomial_ffd +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#endif + +#ifndef GL_SGIX_reference_plane +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#endif + +#ifndef GL_SGIX_flush_raster +#endif + +#ifndef GL_SGIX_depth_texture +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif + +#ifndef GL_SGIS_fog_function +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#endif + +#ifndef GL_SGIX_fog_offset +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif + +#ifndef GL_HP_image_transform +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#endif + +#ifndef GL_HP_convolution_border_modes +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif + +#ifndef GL_INGR_palette_buffer +#endif + +#ifndef GL_SGIX_texture_add_env +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif + +#ifndef GL_EXT_color_subtable +#endif + +#ifndef GL_PGI_vertex_hints +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif + +#ifndef GL_PGI_misc_hints +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#endif + +#ifndef GL_EXT_paletted_texture +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#endif + +#ifndef GL_EXT_clip_volume_hint +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif + +#ifndef GL_SGIX_list_priority +#define GL_LIST_PRIORITY_SGIX 0x8182 +#endif + +#ifndef GL_SGIX_ir_instrument1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif + +#ifndef GL_SGIX_texture_lod_bias +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif + +#ifndef GL_SGIX_shadow_ambient +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif + +#ifndef GL_EXT_index_texture +#endif + +#ifndef GL_EXT_index_material +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#endif + +#ifndef GL_EXT_index_func +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#endif + +#ifndef GL_EXT_index_array_formats +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif + +#ifndef GL_EXT_compiled_vertex_array +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#endif + +#ifndef GL_EXT_cull_vertex +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#endif + +#ifndef GL_SGIX_ycrcb +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif + +#ifndef GL_SGIX_fragment_lighting +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#endif + +#ifndef GL_IBM_rasterpos_clip +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif + +#ifndef GL_HP_texture_lighting +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif + +#ifndef GL_EXT_draw_range_elements +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#endif + +#ifndef GL_WIN_phong_shading +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif + +#ifndef GL_WIN_specular_fog +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif + +#ifndef GL_EXT_light_texture +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +/* reuse GL_FRAGMENT_DEPTH_EXT */ +#endif + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif + +#ifndef GL_SGIX_impact_pixel_texture +#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 +#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 +#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 +#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 +#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 +#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 +#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A +#endif + +#ifndef GL_EXT_bgra +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif + +#ifndef GL_SGIX_async +#define GL_ASYNC_MARKER_SGIX 0x8329 +#endif + +#ifndef GL_SGIX_async_pixel +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif + +#ifndef GL_SGIX_async_histogram +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif + +#ifndef GL_INTEL_texture_scissor +#endif + +#ifndef GL_INTEL_parallel_arrays +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#endif + +#ifndef GL_HP_occlusion_test +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif + +#ifndef GL_EXT_pixel_transform +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#endif + +#ifndef GL_EXT_pixel_transform_color_table +#endif + +#ifndef GL_EXT_shared_texture_palette +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif + +#ifndef GL_EXT_separate_specular_color +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif + +#ifndef GL_EXT_secondary_color +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#endif + +#ifndef GL_EXT_texture_perturb_normal +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#endif + +#ifndef GL_EXT_multi_draw_arrays +#endif + +#ifndef GL_EXT_fog_coord +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#endif + +#ifndef GL_REND_screen_coordinates +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif + +#ifndef GL_EXT_coordinate_frame +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#endif + +#ifndef GL_EXT_texture_env_combine +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif + +#ifndef GL_APPLE_specular_vector +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif + +#ifndef GL_APPLE_transform_hint +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif + +#ifndef GL_SGIX_fog_scale +#define GL_FOG_SCALE_SGIX 0x81FC +#define GL_FOG_SCALE_VALUE_SGIX 0x81FD +#endif + +#ifndef GL_SUNX_constant_data +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#endif + +#ifndef GL_SUN_global_alpha +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#endif + +#ifndef GL_SUN_triangle_list +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#endif + +#ifndef GL_SUN_vertex +#endif + +#ifndef GL_EXT_blend_func_separate +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#endif + +#ifndef GL_INGR_color_clamp +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif + +#ifndef GL_INGR_interlace_read +#define GL_INTERLACE_READ_INGR 0x8568 +#endif + +#ifndef GL_EXT_stencil_wrap +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif + +#ifndef GL_EXT_422_pixels +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif + +#ifndef GL_NV_texgen_reflection +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif + +#ifndef GL_EXT_texture_cube_map +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif + +#ifndef GL_SUN_convolution_border_modes +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif + +#ifndef GL_EXT_texture_env_add +#endif + +#ifndef GL_EXT_texture_lod_bias +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +#ifndef GL_EXT_vertex_weighting +#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT GL_MODELVIEW +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#endif + +#ifndef GL_NV_light_max_exponent +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif + +#ifndef GL_NV_vertex_array_range +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#endif + +#ifndef GL_NV_register_combiners +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +/* reuse GL_TEXTURE0_ARB */ +/* reuse GL_TEXTURE1_ARB */ +/* reuse GL_ZERO */ +/* reuse GL_NONE */ +/* reuse GL_FOG */ +#endif + +#ifndef GL_NV_fog_distance +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +/* reuse GL_EYE_PLANE */ +#endif + +#ifndef GL_NV_texgen_emboss +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif + +#ifndef GL_NV_blend_square +#endif + +#ifndef GL_NV_texture_env_combine4 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif + +#ifndef GL_MESA_resize_buffers +#endif + +#ifndef GL_MESA_window_pos +#endif + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif + +#ifndef GL_IBM_cull_vertex +#define GL_CULL_VERTEX_IBM 103050 +#endif + +#ifndef GL_IBM_multimode_draw_arrays +#endif + +#ifndef GL_IBM_vertex_array_lists +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#endif + +#ifndef GL_SGIX_subsample +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif + +#ifndef GL_SGIX_ycrcb_subsample +#endif + +#ifndef GL_SGIX_ycrcba +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif + +#ifndef GL_SGI_depth_pass_instrument +#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 +#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 +#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 +#endif + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif + +#ifndef GL_3DFX_multisample +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif + +#ifndef GL_3DFX_tbuffer +#endif + +#ifndef GL_EXT_multisample +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#endif + +#ifndef GL_SGIX_vertex_preclip +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif + +#ifndef GL_SGIX_convolution_accuracy +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif + +#ifndef GL_SGIX_resample +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif + +#ifndef GL_SGIS_point_line_texgen +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif + +#ifndef GL_SGIS_texture_color_mask +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#endif + +#ifndef GL_EXT_texture_env_dot3 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif + +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif + +#ifndef GL_NV_evaluators +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#endif + +#ifndef GL_NV_packed_depth_stencil +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif + +#ifndef GL_NV_register_combiners2 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#endif + +#ifndef GL_NV_texture_compression_vtc +#endif + +#ifndef GL_NV_texture_rectangle +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif + +#ifndef GL_NV_texture_shader +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV +#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV +#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif + +#ifndef GL_NV_texture_shader2 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif + +#ifndef GL_NV_vertex_array_range2 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif + +#ifndef GL_NV_vertex_program +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#endif + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif + +#ifndef GL_SGIX_scalebias_hint +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif + +#ifndef GL_OML_interlace +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif + +#ifndef GL_OML_subsample +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif + +#ifndef GL_OML_resample +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif + +#ifndef GL_NV_copy_depth_to_color +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif + +#ifndef GL_ATI_envmap_bumpmap +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +#endif + +#ifndef GL_ATI_fragment_shader +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#endif + +#ifndef GL_ATI_pn_triangles +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#endif + +#ifndef GL_ATI_vertex_array_object +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#endif + +#ifndef GL_EXT_vertex_shader +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#endif + +#ifndef GL_ATI_vertex_streams +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#endif + +#ifndef GL_ATI_element_array +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#endif + +#ifndef GL_SUN_mesh_array +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#endif + +#ifndef GL_SUN_slice_accum +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif + +#ifndef GL_NV_multisample_filter_hint +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif + +#ifndef GL_NV_depth_clamp +#define GL_DEPTH_CLAMP_NV 0x864F +#endif + +#ifndef GL_NV_occlusion_query +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#endif + +#ifndef GL_NV_point_sprite +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#endif + +#ifndef GL_NV_texture_shader3 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif + +#ifndef GL_NV_vertex_program1_1 +#endif + +#ifndef GL_EXT_shadow_funcs +#endif + +#ifndef GL_EXT_stencil_two_side +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#endif + +#ifndef GL_ATI_text_fragment_shader +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif + +#ifndef GL_APPLE_client_storage +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif + +#ifndef GL_APPLE_element_array +#define GL_ELEMENT_ARRAY_APPLE 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A +#endif + +#ifndef GL_APPLE_fence +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +#endif + +#ifndef GL_APPLE_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#endif + +#ifndef GL_APPLE_vertex_array_range +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +#endif + +#ifndef GL_APPLE_ycbcr_422 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +#ifndef GL_S3_s3tc +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#endif + +#ifndef GL_ATI_draw_buffers +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#endif + +#ifndef GL_ATI_pixel_format_float +#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif + +#ifndef GL_ATI_texture_env_combine3 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif + +#ifndef GL_ATI_texture_float +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif + +#ifndef GL_NV_float_buffer +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif + +#ifndef GL_NV_fragment_program +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#endif + +#ifndef GL_NV_half_float +#define GL_HALF_FLOAT_NV 0x140B +#endif + +#ifndef GL_NV_pixel_data_range +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#endif + +#ifndef GL_NV_primitive_restart +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#endif + +#ifndef GL_NV_texture_expand_normal +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif + +#ifndef GL_NV_vertex_program2 +#endif + +#ifndef GL_ATI_map_object_buffer +#endif + +#ifndef GL_ATI_separate_stencil +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#endif + +#ifndef GL_ATI_vertex_attrib_array_object +#endif + +#ifndef GL_OES_read_format +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif + +#ifndef GL_EXT_depth_bounds_test +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#endif + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#endif + +#ifndef GL_MESA_pack_invert +#define GL_PACK_INVERT_MESA 0x8758 +#endif + +#ifndef GL_MESA_ycbcr_texture +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif + +#ifndef GL_EXT_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif + +#ifndef GL_NV_fragment_program_option +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif + +#ifndef GL_NV_vertex_program2_option +/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ +/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ +#endif + +#ifndef GL_NV_vertex_program3 +/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ +#endif + +#ifndef GL_EXT_framebuffer_object +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#endif + +#ifndef GL_GREMEDY_string_marker +#endif + + +/*************************************************************/ + +#include +#ifndef GL_VERSION_2_0 +/* GL type for program/shader text */ +typedef char GLchar; /* native character */ +#endif + +#ifndef GL_VERSION_1_5 +/* GL types for handling large vertex buffer objects */ +typedef ptrdiff_t GLintptr; +typedef ptrdiff_t GLsizeiptr; +#endif + +#ifndef GL_ARB_vertex_buffer_object +/* GL types for handling large vertex buffer objects */ +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +#endif + +#ifndef GL_ARB_shader_objects +/* GL types for handling shader object handles and program/shader text */ +typedef char GLcharARB; /* native character */ +typedef unsigned int GLhandleARB; /* shader object handle */ +#endif + +/* GL types for "half" precision (s10e5) float data in host memory */ +#ifndef GL_ARB_half_float_pixel +typedef unsigned short GLhalfARB; +#endif + +#ifndef GL_NV_half_float +typedef unsigned short GLhalfNV; +#endif + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); +GLAPI void APIENTRY glBlendEquation (GLenum); +GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); +GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); +GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); +GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); +GLAPI void APIENTRY glResetHistogram (GLenum); +GLAPI void APIENTRY glResetMinmax (GLenum); +GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum); +GLAPI void APIENTRY glClientActiveTexture (GLenum); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); +GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); +#endif + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glFogCoordf (GLfloat); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *); +GLAPI void APIENTRY glFogCoordd (GLdouble); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *); +GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); +GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameteri (GLenum, GLint); +GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); +GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); +GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); +GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); +GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); +GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); +GLAPI void APIENTRY glWindowPos2i (GLint, GLint); +GLAPI void APIENTRY glWindowPos2iv (const GLint *); +GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *); +GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); +GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); +GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3iv (const GLint *); +GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +#endif + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsQuery (GLuint); +GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); +GLAPI void APIENTRY glEndQuery (GLenum); +GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); +GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); +GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint); +GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); +GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); +GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); +GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); +typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); +#endif + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); +GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); +GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); +GLAPI void APIENTRY glAttachShader (GLuint, GLuint); +GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); +GLAPI void APIENTRY glCompileShader (GLuint); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum); +GLAPI void APIENTRY glDeleteProgram (GLuint); +GLAPI void APIENTRY glDeleteShader (GLuint); +GLAPI void APIENTRY glDetachShader (GLuint, GLuint); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); +GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgram (GLuint); +GLAPI GLboolean APIENTRY glIsShader (GLuint); +GLAPI void APIENTRY glLinkProgram (GLuint); +GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); +GLAPI void APIENTRY glUseProgram (GLuint); +GLAPI void APIENTRY glUniform1f (GLint, GLfloat); +GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1i (GLint, GLint); +GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glValidateProgram (GLuint); +GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#endif + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#endif + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); +#endif + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#endif + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); +#endif + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#endif + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); +GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); +GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); +GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); +GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); +GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); +GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); +GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); +GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexBlendARB (GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#endif + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#endif + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#endif + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#endif + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#endif + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#endif + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#endif + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); +GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); +GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); +GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); +GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#endif + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); +GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); +GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#endif + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ +#endif + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); +GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); +GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); +GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); +typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); +#endif + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); +GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); +GLAPI void APIENTRY glEndQueryARB (GLenum); +GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#endif + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); +GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); +GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1iARB (GLint, GLint); +GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#endif + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#endif + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#endif + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#endif + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +#endif + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#endif + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#endif + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +#endif + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#endif + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#endif + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +#endif + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +#endif + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); +GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); +GLAPI void APIENTRY glResetHistogramEXT (GLenum); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#endif + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); +#endif + +#ifndef GL_EXT_color_matrix +#define GL_EXT_color_matrix 1 +#endif + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#endif + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#endif + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#endif + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); +#endif + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#endif + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#endif + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); +GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#endif + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#endif + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#endif + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#endif + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#endif + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#endif + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint); +GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); +GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); +GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +#endif + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#endif + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#endif + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#endif + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#endif + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#endif + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#endif + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#endif + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#endif + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#endif + +#ifndef GL_SGIX_texture_select +#define GL_SGIX_texture_select 1 +#endif + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#endif + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#endif + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#endif + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#endif + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#endif + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#endif + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); +GLAPI void APIENTRY glDeformSGIX (GLbitfield); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#endif + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#endif + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#endif + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#endif + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#endif + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#endif + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#endif + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#endif + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#endif + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#endif + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#endif + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#endif + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#endif + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); +GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); +GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#endif + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#endif + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#endif + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#endif + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#endif + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#endif + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#endif + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#endif + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#endif + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#endif + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#endif + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#endif + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#endif + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#endif + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +#endif + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#endif + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#endif + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum); +GLAPI void APIENTRY glTextureLightEXT (GLenum); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#endif + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#endif + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#endif + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#endif + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#endif + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#endif + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); +GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +#endif + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#endif + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#endif + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#endif + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +#endif + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#endif + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); +GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); +GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); +GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *); +GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); +GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); +GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); +GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#endif + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#endif + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#endif + +#ifndef GL_SGIX_fog_scale +#define GL_SGIX_fog_scale 1 +#endif + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#endif + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#endif + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); +#endif + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#endif + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#endif + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#endif + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#endif + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#endif + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#endif + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#endif + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#endif + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); +#endif + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); +GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#endif + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#endif + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#endif + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#endif + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#endif + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#endif + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#endif + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); +#endif + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +#endif + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#endif + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#endif + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#endif + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#endif + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#endif + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); +GLAPI void APIENTRY glSamplePatternEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#endif + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#endif + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#endif + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#endif + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#endif + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); +#endif + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#endif + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); +GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glFinishFenceNV (GLuint); +GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); +GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#endif + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#endif + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#endif + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#endif + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#endif + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#endif + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#endif + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); +GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); +GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#endif + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#endif + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#endif + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#endif + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#endif + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#endif + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#endif + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#endif + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); +GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#endif + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#endif + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); +GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#endif + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); +GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); +GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); +GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); +GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); +GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); +GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); +GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); +GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); +GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); +GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); +GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); +GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#endif + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); +GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); +GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#endif + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#endif + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#endif + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#endif + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#endif + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); +GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#endif + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#endif + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#endif + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#endif + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#endif + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#endif + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#endif + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#endif + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#endif + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#endif + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#endif + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +/* This is really a WGL extension, but defines some associated GL enums. + * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. + */ +#endif + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#endif + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#endif + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#endif + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#endif + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#endif + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#endif + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#endif + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#endif + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#endif + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#endif + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#endif + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#endif + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#endif + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#endif + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#endif + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#endif + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#endif + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); +#endif + + +#ifdef __cplusplus +} +#endif + +#endif +#endif /* NO_SDL_GLEXT */ diff --git a/Externals/SDL/Include_1.2/SDL_platform.h b/Externals/SDL/Include_1.2/SDL_platform.h index f03f9d79ee..1bfee29ec0 100644 --- a/Externals/SDL/Include_1.2/SDL_platform.h +++ b/Externals/SDL/Include_1.2/SDL_platform.h @@ -1,100 +1,100 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Try to get a standard set of platform defines */ - -#ifndef _SDL_platform_h -#define _SDL_platform_h - -#if defined(_AIX) -#undef __AIX__ -#define __AIX__ 1 -#endif -#if defined(__BEOS__) -#undef __BEOS__ -#define __BEOS__ 1 -#endif -#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) -#undef __BSDI__ -#define __BSDI__ 1 -#endif -#if defined(_arch_dreamcast) -#undef __DREAMCAST__ -#define __DREAMCAST__ 1 -#endif -#if defined(__FreeBSD__) || defined(__DragonFly__) -#undef __FREEBSD__ -#define __FREEBSD__ 1 -#endif -#if defined(hpux) || defined(__hpux) || defined(__hpux__) -#undef __HPUX__ -#define __HPUX__ 1 -#endif -#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) -#undef __IRIX__ -#define __IRIX__ 1 -#endif -#if defined(linux) || defined(__linux) || defined(__linux__) -#undef __LINUX__ -#define __LINUX__ 1 -#endif -#if defined(__APPLE__) -#undef __MACOSX__ -#define __MACOSX__ 1 -#elif defined(macintosh) -#undef __MACOS__ -#define __MACOS__ 1 -#endif -#if defined(__NetBSD__) -#undef __NETBSD__ -#define __NETBSD__ 1 -#endif -#if defined(__OpenBSD__) -#undef __OPENBSD__ -#define __OPENBSD__ 1 -#endif -#if defined(__OS2__) -#undef __OS2__ -#define __OS2__ 1 -#endif -#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) -#undef __OSF__ -#define __OSF__ 1 -#endif -#if defined(__QNXNTO__) -#undef __QNXNTO__ -#define __QNXNTO__ 1 -#endif -#if defined(riscos) || defined(__riscos) || defined(__riscos__) -#undef __RISCOS__ -#define __RISCOS__ 1 -#endif -#if defined(__SVR4) -#undef __SOLARIS__ -#define __SOLARIS__ 1 -#endif -#if defined(WIN32) || defined(_WIN32) -#undef __WIN32__ -#define __WIN32__ 1 -#endif - -#endif /* _SDL_platform_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Try to get a standard set of platform defines */ + +#ifndef _SDL_platform_h +#define _SDL_platform_h + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__BEOS__) +#undef __BEOS__ +#define __BEOS__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if defined(linux) || defined(__linux) || defined(__linux__) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(__APPLE__) +#undef __MACOSX__ +#define __MACOSX__ 1 +#elif defined(macintosh) +#undef __MACOS__ +#define __MACOS__ 1 +#endif +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif +#if defined(WIN32) || defined(_WIN32) +#undef __WIN32__ +#define __WIN32__ 1 +#endif + +#endif /* _SDL_platform_h */ diff --git a/Externals/SDL/Include_1.2/SDL_quit.h b/Externals/SDL/Include_1.2/SDL_quit.h index f18b2887c1..fcf40fbdda 100644 --- a/Externals/SDL/Include_1.2/SDL_quit.h +++ b/Externals/SDL/Include_1.2/SDL_quit.h @@ -1,50 +1,50 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL quit event handling */ - -#ifndef _SDL_quit_h -#define _SDL_quit_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* - An SDL_QUITEVENT is generated when the user tries to close the application - window. If it is ignored or filtered out, the window will remain open. - If it is not ignored or filtered, it is queued normally and the window - is allowed to close. When the window is closed, screen updates will - complete, but have no effect. - - SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - and SIGTERM (system termination request), if handlers do not already - exist, that generate SDL_QUITEVENT events as well. There is no way - to determine the cause of an SDL_QUITEVENT, but setting a signal - handler in your application will override the default generation of - quit events for that signal. -*/ - -/* There are no functions directly affecting the quit event */ -#define SDL_QuitRequested() \ - (SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK)) - -#endif /* _SDL_quit_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL quit event handling */ + +#ifndef _SDL_quit_h +#define _SDL_quit_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/* + An SDL_QUITEVENT is generated when the user tries to close the application + window. If it is ignored or filtered out, the window will remain open. + If it is not ignored or filtered, it is queued normally and the window + is allowed to close. When the window is closed, screen updates will + complete, but have no effect. + + SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + and SIGTERM (system termination request), if handlers do not already + exist, that generate SDL_QUITEVENT events as well. There is no way + to determine the cause of an SDL_QUITEVENT, but setting a signal + handler in your application will override the default generation of + quit events for that signal. +*/ + +/* There are no functions directly affecting the quit event */ +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK)) + +#endif /* _SDL_quit_h */ diff --git a/Externals/SDL/Include_1.2/SDL_rwops.h b/Externals/SDL/Include_1.2/SDL_rwops.h index bdfc268b67..8c177017f5 100644 --- a/Externals/SDL/Include_1.2/SDL_rwops.h +++ b/Externals/SDL/Include_1.2/SDL_rwops.h @@ -1,144 +1,144 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file provides a general interface for SDL to read and write - data sources. It can easily be extended to files, memory, etc. -*/ - -#ifndef _SDL_rwops_h -#define _SDL_rwops_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This is the read/write operation structure -- very basic */ - -typedef struct SDL_RWops { - /* Seek to 'offset' relative to whence, one of stdio's whence values: - SEEK_SET, SEEK_CUR, SEEK_END - Returns the final offset in the data source. - */ - int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); - - /* Read up to 'num' objects each of size 'objsize' from the data - source to the area pointed at by 'ptr'. - Returns the number of objects read, or -1 if the read failed. - */ - int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); - - /* Write exactly 'num' objects each of size 'objsize' from the area - pointed at by 'ptr' to data source. - Returns 'num', or -1 if the write failed. - */ - int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); - - /* Close and free an allocated SDL_FSops structure */ - int (SDLCALL *close)(struct SDL_RWops *context); - - Uint32 type; - union { -#if defined(__WIN32__) && !defined(__SYMBIAN32__) - struct { - int append; - void *h; - struct { - void *data; - int size; - int left; - } buffer; - } win32io; -#endif -#ifdef HAVE_STDIO_H - struct { - int autoclose; - FILE *fp; - } stdio; -#endif - struct { - Uint8 *base; - Uint8 *here; - Uint8 *stop; - } mem; - struct { - void *data1; - } unknown; - } hidden; - -} SDL_RWops; - - -/* Functions to create SDL_RWops structures from various data sources */ - -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode); - -#ifdef HAVE_STDIO_H -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose); -#endif - -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size); -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size); - -extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void); -extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area); - -#define RW_SEEK_SET 0 /* Seek from the beginning of data */ -#define RW_SEEK_CUR 1 /* Seek relative to current read point */ -#define RW_SEEK_END 2 /* Seek relative to the end of data */ - -/* Macros to easily read and write from an SDL_RWops structure */ -#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) -#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) -#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) -#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) -#define SDL_RWclose(ctx) (ctx)->close(ctx) - - -/* Read an item of the specified endianness and return in native format */ -extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); -extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src); - -/* Write an item of native format to the specified endianness */ -extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value); -extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_rwops_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This file provides a general interface for SDL to read and write + data sources. It can easily be extended to files, memory, etc. +*/ + +#ifndef _SDL_rwops_h +#define _SDL_rwops_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is the read/write operation structure -- very basic */ + +typedef struct SDL_RWops { + /* Seek to 'offset' relative to whence, one of stdio's whence values: + SEEK_SET, SEEK_CUR, SEEK_END + Returns the final offset in the data source. + */ + int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); + + /* Read up to 'num' objects each of size 'objsize' from the data + source to the area pointed at by 'ptr'. + Returns the number of objects read, or -1 if the read failed. + */ + int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); + + /* Write exactly 'num' objects each of size 'objsize' from the area + pointed at by 'ptr' to data source. + Returns 'num', or -1 if the write failed. + */ + int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); + + /* Close and free an allocated SDL_FSops structure */ + int (SDLCALL *close)(struct SDL_RWops *context); + + Uint32 type; + union { +#if defined(__WIN32__) && !defined(__SYMBIAN32__) + struct { + int append; + void *h; + struct { + void *data; + int size; + int left; + } buffer; + } win32io; +#endif +#ifdef HAVE_STDIO_H + struct { + int autoclose; + FILE *fp; + } stdio; +#endif + struct { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct { + void *data1; + } unknown; + } hidden; + +} SDL_RWops; + + +/* Functions to create SDL_RWops structures from various data sources */ + +extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode); + +#ifdef HAVE_STDIO_H +extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose); +#endif + +extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size); +extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size); + +extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void); +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area); + +#define RW_SEEK_SET 0 /* Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /* Seek relative to current read point */ +#define RW_SEEK_END 2 /* Seek relative to the end of data */ + +/* Macros to easily read and write from an SDL_RWops structure */ +#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) +#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) +#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) +#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) +#define SDL_RWclose(ctx) (ctx)->close(ctx) + + +/* Read an item of the specified endianness and return in native format */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src); +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src); +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src); +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src); +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src); + +/* Write an item of native format to the specified endianness */ +extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value); +extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value); +extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value); +extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value); +extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value); +extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_rwops_h */ diff --git a/Externals/SDL/Include_1.2/SDL_stdinc.h b/Externals/SDL/Include_1.2/SDL_stdinc.h index eab790b19f..e47c21daff 100644 --- a/Externals/SDL/Include_1.2/SDL_stdinc.h +++ b/Externals/SDL/Include_1.2/SDL_stdinc.h @@ -1,596 +1,596 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is a general header that includes C language support */ - -#ifndef _SDL_stdinc_h -#define _SDL_stdinc_h - -#include "SDL_config.h" - - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_STDIO_H -#include -#endif -#if defined(STDC_HEADERS) -# include -# include -# include -#else -# if defined(HAVE_STDLIB_H) -# include -# elif defined(HAVE_MALLOC_H) -# include -# endif -# if defined(HAVE_STDDEF_H) -# include -# endif -# if defined(HAVE_STDARG_H) -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#if defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_STDINT_H) -# include -#endif -#ifdef HAVE_CTYPE_H -# include -#endif -#ifdef HAVE_ICONV_H -# include -#endif - -/* The number of elements in an array */ -#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) -#define SDL_TABLESIZE(table) SDL_arraysize(table) - -/* Basic data types */ -typedef enum SDL_bool { - SDL_FALSE = 0, - SDL_TRUE = 1 -} SDL_bool; - -typedef int8_t Sint8; -typedef uint8_t Uint8; -typedef int16_t Sint16; -typedef uint16_t Uint16; -typedef int32_t Sint32; -typedef uint32_t Uint32; - -#ifdef SDL_HAS_64BIT_TYPE -typedef int64_t Sint64; -#ifndef SYMBIAN32_GCCE -typedef uint64_t Uint64; -#endif -#else -/* This is really just a hack to prevent the compiler from complaining */ -typedef struct { - Uint32 hi; - Uint32 lo; -} Uint64, Sint64; -#endif - -/* Make sure the types really have the right sizes */ -#define SDL_COMPILE_TIME_ASSERT(name, x) \ - typedef int SDL_dummy_ ## name[(x) * 2 - 1] - -SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); -SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); -SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); -SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); -SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); -SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); -SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); -SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); - -/* Check to make sure enums are the size of ints, for structure packing. - For both Watcom C/C++ and Borland C/C++ the compiler option that makes - enums having the size of an int must be enabled. - This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). -*/ -/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ -#ifdef __MWERKS__ -#pragma enumsalwaysint on -#endif - -typedef enum { - DUMMY_ENUM_VALUE -} SDL_DUMMY_ENUM; - -#ifndef __NDS__ -SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); -#endif - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef HAVE_MALLOC -#define SDL_malloc malloc -#else -extern DECLSPEC void * SDLCALL SDL_malloc(size_t size); -#endif - -#ifdef HAVE_CALLOC -#define SDL_calloc calloc -#else -extern DECLSPEC void * SDLCALL SDL_calloc(size_t nmemb, size_t size); -#endif - -#ifdef HAVE_REALLOC -#define SDL_realloc realloc -#else -extern DECLSPEC void * SDLCALL SDL_realloc(void *mem, size_t size); -#endif - -#ifdef HAVE_FREE -#define SDL_free free -#else -extern DECLSPEC void SDLCALL SDL_free(void *mem); -#endif - -#if defined(HAVE_ALLOCA) && !defined(alloca) -# if defined(HAVE_ALLOCA_H) -# include -# elif defined(__GNUC__) -# define alloca __builtin_alloca -# elif defined(_MSC_VER) -# include -# define alloca _alloca -# elif defined(__WATCOMC__) -# include -# elif defined(__BORLANDC__) -# include -# elif defined(__DMC__) -# include -# elif defined(__AIX__) - #pragma alloca -# elif defined(__MRC__) - void *alloca (unsigned); -# else - char *alloca (); -# endif -#endif -#ifdef HAVE_ALLOCA -#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) -#define SDL_stack_free(data) -#else -#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) -#define SDL_stack_free(data) SDL_free(data) -#endif - -#ifdef HAVE_GETENV -#define SDL_getenv getenv -#else -extern DECLSPEC char * SDLCALL SDL_getenv(const char *name); -#endif - -#ifdef HAVE_PUTENV -#define SDL_putenv putenv -#else -extern DECLSPEC int SDLCALL SDL_putenv(const char *variable); -#endif - -#ifdef HAVE_QSORT -#define SDL_qsort qsort -#else -extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, - int (*compare)(const void *, const void *)); -#endif - -#ifdef HAVE_ABS -#define SDL_abs abs -#else -#define SDL_abs(X) ((X) < 0 ? -(X) : (X)) -#endif - -#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) -#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) - -#ifdef HAVE_CTYPE_H -#define SDL_isdigit(X) isdigit(X) -#define SDL_isspace(X) isspace(X) -#define SDL_toupper(X) toupper(X) -#define SDL_tolower(X) tolower(X) -#else -#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9')) -#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n')) -#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X)) -#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X)) -#endif - -#ifdef HAVE_MEMSET -#define SDL_memset memset -#else -extern DECLSPEC void * SDLCALL SDL_memset(void *dst, int c, size_t len); -#endif - -#if defined(__GNUC__) && defined(i386) -#define SDL_memset4(dst, val, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; stosl\n\t" \ - : "=&D" (u0), "=&a" (u1), "=&c" (u2) \ - : "0" (dst), "1" (val), "2" ((Uint32)(len)) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memset4 -#define SDL_memset4(dst, val, len) \ -do { \ - unsigned _count = (len); \ - unsigned _n = (_count + 3) / 4; \ - Uint32 *_p = (Uint32 *)(dst); \ - Uint32 _val = (val); \ - switch (_count % 4) { \ - case 0: do { *_p++ = _val; \ - case 3: *_p++ = _val; \ - case 2: *_p++ = _val; \ - case 1: *_p++ = _val; \ - } while ( --_n ); \ - } \ -} while(0) -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy(dst, src, len) memcpy(dst, src, len) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl\n\t" \ - "testb $2,%b4\n\t" \ - "je 1f\n\t" \ - "movsw\n" \ - "1:\ttestb $1,%b4\n\t" \ - "je 2f\n\t" \ - "movsb\n" \ - "2:" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy -#ifdef HAVE_MEMCPY -#define SDL_memcpy memcpy -#elif defined(HAVE_BCOPY) -#define SDL_memcpy(d, s, n) bcopy((s), (d), (n)) -#else -extern DECLSPEC void * SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); -#endif -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy4(dst, src, len) \ -do { \ - int ecx, edi, esi; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl" \ - : "=&c" (ecx), "=&D" (edi), "=&S" (esi) \ - : "0" ((unsigned)(len)), "1" (dst), "2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy4 -#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2) -#endif - -#if defined(__GNUC__) && defined(i386) -#define SDL_revcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - char *dstp = (char *)(dst); \ - char *srcp = (char *)(src); \ - int n = (len); \ - if ( n >= 4 ) { \ - __asm__ __volatile__ ( \ - "std\n\t" \ - "rep ; movsl\n\t" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" (n >> 2), \ - "1" (dstp+(n-4)), "2" (srcp+(n-4)) \ - : "memory" ); \ - } \ - switch (n & 3) { \ - case 3: dstp[2] = srcp[2]; \ - case 2: dstp[1] = srcp[1]; \ - case 1: dstp[0] = srcp[0]; \ - break; \ - default: \ - break; \ - } \ -} while(0) -#endif -#ifndef SDL_revcpy -extern DECLSPEC void * SDLCALL SDL_revcpy(void *dst, const void *src, size_t len); -#endif - -#ifdef HAVE_MEMMOVE -#define SDL_memmove memmove -#elif defined(HAVE_BCOPY) -#define SDL_memmove(d, s, n) bcopy((s), (d), (n)) -#else -#define SDL_memmove(dst, src, len) \ -do { \ - if ( dst < src ) { \ - SDL_memcpy(dst, src, len); \ - } else { \ - SDL_revcpy(dst, src, len); \ - } \ -} while(0) -#endif - -#ifdef HAVE_MEMCMP -#define SDL_memcmp memcmp -#else -extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); -#endif - -#ifdef HAVE_STRLEN -#define SDL_strlen strlen -#else -extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string); -#endif - -#ifdef HAVE_STRLCPY -#define SDL_strlcpy strlcpy -#else -extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); -#endif - -#ifdef HAVE_STRLCAT -#define SDL_strlcat strlcat -#else -extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); -#endif - -#ifdef HAVE_STRDUP -#define SDL_strdup strdup -#else -extern DECLSPEC char * SDLCALL SDL_strdup(const char *string); -#endif - -#ifdef HAVE__STRREV -#define SDL_strrev _strrev -#else -extern DECLSPEC char * SDLCALL SDL_strrev(char *string); -#endif - -#ifdef HAVE__STRUPR -#define SDL_strupr _strupr -#else -extern DECLSPEC char * SDLCALL SDL_strupr(char *string); -#endif - -#ifdef HAVE__STRLWR -#define SDL_strlwr _strlwr -#else -extern DECLSPEC char * SDLCALL SDL_strlwr(char *string); -#endif - -#ifdef HAVE_STRCHR -#define SDL_strchr strchr -#elif defined(HAVE_INDEX) -#define SDL_strchr index -#else -extern DECLSPEC char * SDLCALL SDL_strchr(const char *string, int c); -#endif - -#ifdef HAVE_STRRCHR -#define SDL_strrchr strrchr -#elif defined(HAVE_RINDEX) -#define SDL_strrchr rindex -#else -extern DECLSPEC char * SDLCALL SDL_strrchr(const char *string, int c); -#endif - -#ifdef HAVE_STRSTR -#define SDL_strstr strstr -#else -extern DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle); -#endif - -#ifdef HAVE_ITOA -#define SDL_itoa itoa -#else -#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix) -#endif - -#ifdef HAVE__LTOA -#define SDL_ltoa _ltoa -#else -extern DECLSPEC char * SDLCALL SDL_ltoa(long value, char *string, int radix); -#endif - -#ifdef HAVE__UITOA -#define SDL_uitoa _uitoa -#else -#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix) -#endif - -#ifdef HAVE__ULTOA -#define SDL_ultoa _ultoa -#else -extern DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *string, int radix); -#endif - -#ifdef HAVE_STRTOL -#define SDL_strtol strtol -#else -extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, int base); -#endif - -#ifdef HAVE_STRTOUL -#define SDL_strtoul strtoul -#else -extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, char **endp, int base); -#endif - -#ifdef SDL_HAS_64BIT_TYPE - -#ifdef HAVE__I64TOA -#define SDL_lltoa _i64toa -#else -extern DECLSPEC char* SDLCALL SDL_lltoa(Sint64 value, char *string, int radix); -#endif - -#ifdef HAVE__UI64TOA -#define SDL_ulltoa _ui64toa -#else -extern DECLSPEC char* SDLCALL SDL_ulltoa(Uint64 value, char *string, int radix); -#endif - -#ifdef HAVE_STRTOLL -#define SDL_strtoll strtoll -#else -extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, int base); -#endif - -#ifdef HAVE_STRTOULL -#define SDL_strtoull strtoull -#else -extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, int base); -#endif - -#endif /* SDL_HAS_64BIT_TYPE */ - -#ifdef HAVE_STRTOD -#define SDL_strtod strtod -#else -extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp); -#endif - -#ifdef HAVE_ATOI -#define SDL_atoi atoi -#else -#define SDL_atoi(X) SDL_strtol(X, NULL, 0) -#endif - -#ifdef HAVE_ATOF -#define SDL_atof atof -#else -#define SDL_atof(X) SDL_strtod(X, NULL) -#endif - -#ifdef HAVE_STRCMP -#define SDL_strcmp strcmp -#else -extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); -#endif - -#ifdef HAVE_STRNCMP -#define SDL_strncmp strncmp -#else -extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); -#endif - -#ifdef HAVE_STRCASECMP -#define SDL_strcasecmp strcasecmp -#elif defined(HAVE__STRICMP) -#define SDL_strcasecmp _stricmp -#else -extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); -#endif - -#ifdef HAVE_STRNCASECMP -#define SDL_strncasecmp strncasecmp -#elif defined(HAVE__STRNICMP) -#define SDL_strncasecmp _strnicmp -#else -extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen); -#endif - -#ifdef HAVE_SSCANF -#define SDL_sscanf sscanf -#else -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); -#endif - -#ifdef HAVE_SNPRINTF -#define SDL_snprintf snprintf -#else -extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); -#endif - -#ifdef HAVE_VSNPRINTF -#define SDL_vsnprintf vsnprintf -#else -extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); -#endif - -/* The SDL implementation of iconv() returns these error codes */ -#define SDL_ICONV_ERROR (size_t)-1 -#define SDL_ICONV_E2BIG (size_t)-2 -#define SDL_ICONV_EILSEQ (size_t)-3 -#define SDL_ICONV_EINVAL (size_t)-4 - -#ifdef HAVE_ICONV -#define SDL_iconv_t iconv_t -#define SDL_iconv_open iconv_open -#define SDL_iconv_close iconv_close -#else -typedef struct _SDL_iconv_t *SDL_iconv_t; -extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode); -extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); -#endif -extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); -/* This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. -*/ -extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); -#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_stdinc_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This is a general header that includes C language support */ + +#ifndef _SDL_stdinc_h +#define _SDL_stdinc_h + +#include "SDL_config.h" + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_ICONV_H +# include +#endif + +/* The number of elements in an array */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/* Basic data types */ +typedef enum SDL_bool { + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; + +typedef int8_t Sint8; +typedef uint8_t Uint8; +typedef int16_t Sint16; +typedef uint16_t Uint16; +typedef int32_t Sint32; +typedef uint32_t Uint32; + +#ifdef SDL_HAS_64BIT_TYPE +typedef int64_t Sint64; +#ifndef SYMBIAN32_GCCE +typedef uint64_t Uint64; +#endif +#else +/* This is really just a hack to prevent the compiler from complaining */ +typedef struct { + Uint32 hi; + Uint32 lo; +} Uint64, Sint64; +#endif + +/* Make sure the types really have the right sizes */ +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_dummy_ ## name[(x) * 2 - 1] + +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ +/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ +#ifdef __MWERKS__ +#pragma enumsalwaysint on +#endif + +typedef enum { + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +#ifndef __NDS__ +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_MALLOC +#define SDL_malloc malloc +#else +extern DECLSPEC void * SDLCALL SDL_malloc(size_t size); +#endif + +#ifdef HAVE_CALLOC +#define SDL_calloc calloc +#else +extern DECLSPEC void * SDLCALL SDL_calloc(size_t nmemb, size_t size); +#endif + +#ifdef HAVE_REALLOC +#define SDL_realloc realloc +#else +extern DECLSPEC void * SDLCALL SDL_realloc(void *mem, size_t size); +#endif + +#ifdef HAVE_FREE +#define SDL_free free +#else +extern DECLSPEC void SDLCALL SDL_free(void *mem); +#endif + +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) + #pragma alloca +# elif defined(__MRC__) + void *alloca (unsigned); +# else + char *alloca (); +# endif +#endif +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +#ifdef HAVE_GETENV +#define SDL_getenv getenv +#else +extern DECLSPEC char * SDLCALL SDL_getenv(const char *name); +#endif + +#ifdef HAVE_PUTENV +#define SDL_putenv putenv +#else +extern DECLSPEC int SDLCALL SDL_putenv(const char *variable); +#endif + +#ifdef HAVE_QSORT +#define SDL_qsort qsort +#else +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, + int (*compare)(const void *, const void *)); +#endif + +#ifdef HAVE_ABS +#define SDL_abs abs +#else +#define SDL_abs(X) ((X) < 0 ? -(X) : (X)) +#endif + +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) + +#ifdef HAVE_CTYPE_H +#define SDL_isdigit(X) isdigit(X) +#define SDL_isspace(X) isspace(X) +#define SDL_toupper(X) toupper(X) +#define SDL_tolower(X) tolower(X) +#else +#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9')) +#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n')) +#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X)) +#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X)) +#endif + +#ifdef HAVE_MEMSET +#define SDL_memset memset +#else +extern DECLSPEC void * SDLCALL SDL_memset(void *dst, int c, size_t len); +#endif + +#if defined(__GNUC__) && defined(i386) +#define SDL_memset4(dst, val, len) \ +do { \ + int u0, u1, u2; \ + __asm__ __volatile__ ( \ + "cld\n\t" \ + "rep ; stosl\n\t" \ + : "=&D" (u0), "=&a" (u1), "=&c" (u2) \ + : "0" (dst), "1" (val), "2" ((Uint32)(len)) \ + : "memory" ); \ +} while(0) +#endif +#ifndef SDL_memset4 +#define SDL_memset4(dst, val, len) \ +do { \ + unsigned _count = (len); \ + unsigned _n = (_count + 3) / 4; \ + Uint32 *_p = (Uint32 *)(dst); \ + Uint32 _val = (val); \ + switch (_count % 4) { \ + case 0: do { *_p++ = _val; \ + case 3: *_p++ = _val; \ + case 2: *_p++ = _val; \ + case 1: *_p++ = _val; \ + } while ( --_n ); \ + } \ +} while(0) +#endif + +/* We can count on memcpy existing on Mac OS X and being well-tuned. */ +#if defined(__MACH__) && defined(__APPLE__) +#define SDL_memcpy(dst, src, len) memcpy(dst, src, len) +#elif defined(__GNUC__) && defined(i386) +#define SDL_memcpy(dst, src, len) \ +do { \ + int u0, u1, u2; \ + __asm__ __volatile__ ( \ + "cld\n\t" \ + "rep ; movsl\n\t" \ + "testb $2,%b4\n\t" \ + "je 1f\n\t" \ + "movsw\n" \ + "1:\ttestb $1,%b4\n\t" \ + "je 2f\n\t" \ + "movsb\n" \ + "2:" \ + : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ + : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \ + : "memory" ); \ +} while(0) +#endif +#ifndef SDL_memcpy +#ifdef HAVE_MEMCPY +#define SDL_memcpy memcpy +#elif defined(HAVE_BCOPY) +#define SDL_memcpy(d, s, n) bcopy((s), (d), (n)) +#else +extern DECLSPEC void * SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); +#endif +#endif + +/* We can count on memcpy existing on Mac OS X and being well-tuned. */ +#if defined(__MACH__) && defined(__APPLE__) +#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4) +#elif defined(__GNUC__) && defined(i386) +#define SDL_memcpy4(dst, src, len) \ +do { \ + int ecx, edi, esi; \ + __asm__ __volatile__ ( \ + "cld\n\t" \ + "rep ; movsl" \ + : "=&c" (ecx), "=&D" (edi), "=&S" (esi) \ + : "0" ((unsigned)(len)), "1" (dst), "2" (src) \ + : "memory" ); \ +} while(0) +#endif +#ifndef SDL_memcpy4 +#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2) +#endif + +#if defined(__GNUC__) && defined(i386) +#define SDL_revcpy(dst, src, len) \ +do { \ + int u0, u1, u2; \ + char *dstp = (char *)(dst); \ + char *srcp = (char *)(src); \ + int n = (len); \ + if ( n >= 4 ) { \ + __asm__ __volatile__ ( \ + "std\n\t" \ + "rep ; movsl\n\t" \ + : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ + : "0" (n >> 2), \ + "1" (dstp+(n-4)), "2" (srcp+(n-4)) \ + : "memory" ); \ + } \ + switch (n & 3) { \ + case 3: dstp[2] = srcp[2]; \ + case 2: dstp[1] = srcp[1]; \ + case 1: dstp[0] = srcp[0]; \ + break; \ + default: \ + break; \ + } \ +} while(0) +#endif +#ifndef SDL_revcpy +extern DECLSPEC void * SDLCALL SDL_revcpy(void *dst, const void *src, size_t len); +#endif + +#ifdef HAVE_MEMMOVE +#define SDL_memmove memmove +#elif defined(HAVE_BCOPY) +#define SDL_memmove(d, s, n) bcopy((s), (d), (n)) +#else +#define SDL_memmove(dst, src, len) \ +do { \ + if ( dst < src ) { \ + SDL_memcpy(dst, src, len); \ + } else { \ + SDL_revcpy(dst, src, len); \ + } \ +} while(0) +#endif + +#ifdef HAVE_MEMCMP +#define SDL_memcmp memcmp +#else +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); +#endif + +#ifdef HAVE_STRLEN +#define SDL_strlen strlen +#else +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string); +#endif + +#ifdef HAVE_STRLCPY +#define SDL_strlcpy strlcpy +#else +extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); +#endif + +#ifdef HAVE_STRLCAT +#define SDL_strlcat strlcat +#else +extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); +#endif + +#ifdef HAVE_STRDUP +#define SDL_strdup strdup +#else +extern DECLSPEC char * SDLCALL SDL_strdup(const char *string); +#endif + +#ifdef HAVE__STRREV +#define SDL_strrev _strrev +#else +extern DECLSPEC char * SDLCALL SDL_strrev(char *string); +#endif + +#ifdef HAVE__STRUPR +#define SDL_strupr _strupr +#else +extern DECLSPEC char * SDLCALL SDL_strupr(char *string); +#endif + +#ifdef HAVE__STRLWR +#define SDL_strlwr _strlwr +#else +extern DECLSPEC char * SDLCALL SDL_strlwr(char *string); +#endif + +#ifdef HAVE_STRCHR +#define SDL_strchr strchr +#elif defined(HAVE_INDEX) +#define SDL_strchr index +#else +extern DECLSPEC char * SDLCALL SDL_strchr(const char *string, int c); +#endif + +#ifdef HAVE_STRRCHR +#define SDL_strrchr strrchr +#elif defined(HAVE_RINDEX) +#define SDL_strrchr rindex +#else +extern DECLSPEC char * SDLCALL SDL_strrchr(const char *string, int c); +#endif + +#ifdef HAVE_STRSTR +#define SDL_strstr strstr +#else +extern DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle); +#endif + +#ifdef HAVE_ITOA +#define SDL_itoa itoa +#else +#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix) +#endif + +#ifdef HAVE__LTOA +#define SDL_ltoa _ltoa +#else +extern DECLSPEC char * SDLCALL SDL_ltoa(long value, char *string, int radix); +#endif + +#ifdef HAVE__UITOA +#define SDL_uitoa _uitoa +#else +#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix) +#endif + +#ifdef HAVE__ULTOA +#define SDL_ultoa _ultoa +#else +extern DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *string, int radix); +#endif + +#ifdef HAVE_STRTOL +#define SDL_strtol strtol +#else +extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, int base); +#endif + +#ifdef HAVE_STRTOUL +#define SDL_strtoul strtoul +#else +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, char **endp, int base); +#endif + +#ifdef SDL_HAS_64BIT_TYPE + +#ifdef HAVE__I64TOA +#define SDL_lltoa _i64toa +#else +extern DECLSPEC char* SDLCALL SDL_lltoa(Sint64 value, char *string, int radix); +#endif + +#ifdef HAVE__UI64TOA +#define SDL_ulltoa _ui64toa +#else +extern DECLSPEC char* SDLCALL SDL_ulltoa(Uint64 value, char *string, int radix); +#endif + +#ifdef HAVE_STRTOLL +#define SDL_strtoll strtoll +#else +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, int base); +#endif + +#ifdef HAVE_STRTOULL +#define SDL_strtoull strtoull +#else +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, int base); +#endif + +#endif /* SDL_HAS_64BIT_TYPE */ + +#ifdef HAVE_STRTOD +#define SDL_strtod strtod +#else +extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp); +#endif + +#ifdef HAVE_ATOI +#define SDL_atoi atoi +#else +#define SDL_atoi(X) SDL_strtol(X, NULL, 0) +#endif + +#ifdef HAVE_ATOF +#define SDL_atof atof +#else +#define SDL_atof(X) SDL_strtod(X, NULL) +#endif + +#ifdef HAVE_STRCMP +#define SDL_strcmp strcmp +#else +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +#endif + +#ifdef HAVE_STRNCMP +#define SDL_strncmp strncmp +#else +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +#endif + +#ifdef HAVE_STRCASECMP +#define SDL_strcasecmp strcasecmp +#elif defined(HAVE__STRICMP) +#define SDL_strcasecmp _stricmp +#else +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +#endif + +#ifdef HAVE_STRNCASECMP +#define SDL_strncasecmp strncasecmp +#elif defined(HAVE__STRNICMP) +#define SDL_strncasecmp _strnicmp +#else +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen); +#endif + +#ifdef HAVE_SSCANF +#define SDL_sscanf sscanf +#else +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); +#endif + +#ifdef HAVE_SNPRINTF +#define SDL_snprintf snprintf +#else +extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); +#endif + +#ifdef HAVE_VSNPRINTF +#define SDL_vsnprintf vsnprintf +#else +extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); +#endif + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +#ifdef HAVE_ICONV +#define SDL_iconv_t iconv_t +#define SDL_iconv_open iconv_open +#define SDL_iconv_close iconv_close +#else +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +#endif +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); +/* This function converts a string between encodings in one pass, returning a + string that must be freed with SDL_free() or NULL on error. +*/ +extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_stdinc_h */ diff --git a/Externals/SDL/Include_1.2/SDL_syswm.h b/Externals/SDL/Include_1.2/SDL_syswm.h index abeb41ab9d..010dd1bcc6 100644 --- a/Externals/SDL/Include_1.2/SDL_syswm.h +++ b/Externals/SDL/Include_1.2/SDL_syswm.h @@ -1,214 +1,214 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL custom system window manager hooks */ - -#ifndef _SDL_syswm_h -#define _SDL_syswm_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Your application has access to a special type of event 'SDL_SYSWMEVENT', - which contains window-manager specific information and arrives whenever - an unhandled window event occurs. This event is ignored by default, but - you can enable it with SDL_EventState() -*/ -#ifdef SDL_PROTOTYPES_ONLY -struct SDL_SysWMinfo; -typedef struct SDL_SysWMinfo SDL_SysWMinfo; -#else - -/* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) -#if defined(__APPLE__) && defined(__MACH__) -/* conflicts with Quickdraw.h */ -#define Cursor X11Cursor -#endif - -#include -#include - -#if defined(__APPLE__) && defined(__MACH__) -/* matches the re-define above */ -#undef Cursor -#endif - -/* These are the various supported subsystems under UNIX */ -typedef enum { - SDL_SYSWM_X11 -} SDL_SYSWM_TYPE; - -/* The UNIX custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union { - XEvent xevent; - } event; -}; - -/* The UNIX custom window manager information structure. - When this structure is returned, it holds information about which - low level system it is using, and will be one of SDL_SYSWM_TYPE. - */ -typedef struct SDL_SysWMinfo { - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union { - struct { - Display *display; /* The X11 display */ - Window window; /* The X11 display window */ - /* These locking functions should be called around - any X11 functions using the display variable, - but not the gfxdisplay variable. - They lock the event thread, so should not be - called around event functions or from event filters. - */ - void (*lock_func)(void); - void (*unlock_func)(void); - - /* Introduced in SDL 1.0.2 */ - Window fswindow; /* The X11 fullscreen window */ - Window wmwindow; /* The X11 managed input window */ - - /* Introduced in SDL 1.2.12 */ - Display *gfxdisplay; /* The X11 display to which rendering is done */ - } x11; - } info; -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_NANOX) -#include - -/* The generic custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The windows custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version ; - GR_WINDOW_ID window ; /* The display window */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) -#define WIN32_LEAN_AND_MEAN -#include - -/* The windows custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - HWND hwnd; /* The window for the message */ - UINT msg; /* The type of message */ - WPARAM wParam; /* WORD message parameter */ - LPARAM lParam; /* LONG message parameter */ -}; - -/* The windows custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - HWND window; /* The Win32 display window */ - HGLRC hglrc; /* The OpenGL context, if any */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_RISCOS) - -/* RISC OS custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int eventCode; /* The window for the message */ - int pollBlock[64]; -}; - -/* The RISC OS custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int wimpVersion; /* Wimp version running under */ - int taskHandle; /* The RISC OS task handle */ - int window; /* The RISC OS display window */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_PHOTON) -#include -#include - -/* The QNX custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The QNX custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int data; -} SDL_SysWMinfo; - -#else - -/* The generic custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The generic custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int data; -} SDL_SysWMinfo; - -#endif /* video driver type */ - -#endif /* SDL_PROTOTYPES_ONLY */ - -/* Function prototypes */ -/* - * This function gives you custom hooks into the window manager information. - * It fills the structure pointed to by 'info' with custom information and - * returns 1 if the function is implemented. If it's not implemented, or - * the version member of the 'info' structure is invalid, it returns 0. - * - * You typically use this function like this: - * SDL_SysWMInfo info; - * SDL_VERSION(&info.version); - * if ( SDL_GetWMInfo(&info) ) { ... } - */ -extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_syswm_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Include file for SDL custom system window manager hooks */ + +#ifndef _SDL_syswm_h +#define _SDL_syswm_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_version.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Your application has access to a special type of event 'SDL_SYSWMEVENT', + which contains window-manager specific information and arrives whenever + an unhandled window event occurs. This event is ignored by default, but + you can enable it with SDL_EventState() +*/ +#ifdef SDL_PROTOTYPES_ONLY +struct SDL_SysWMinfo; +typedef struct SDL_SysWMinfo SDL_SysWMinfo; +#else + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +/* These are the various supported subsystems under UNIX */ +typedef enum { + SDL_SYSWM_X11 +} SDL_SYSWM_TYPE; + +/* The UNIX custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union { + XEvent xevent; + } event; +}; + +/* The UNIX custom window manager information structure. + When this structure is returned, it holds information about which + low level system it is using, and will be one of SDL_SYSWM_TYPE. + */ +typedef struct SDL_SysWMinfo { + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union { + struct { + Display *display; /* The X11 display */ + Window window; /* The X11 display window */ + /* These locking functions should be called around + any X11 functions using the display variable, + but not the gfxdisplay variable. + They lock the event thread, so should not be + called around event functions or from event filters. + */ + void (*lock_func)(void); + void (*unlock_func)(void); + + /* Introduced in SDL 1.0.2 */ + Window fswindow; /* The X11 fullscreen window */ + Window wmwindow; /* The X11 managed input window */ + + /* Introduced in SDL 1.2.12 */ + Display *gfxdisplay; /* The X11 display to which rendering is done */ + } x11; + } info; +} SDL_SysWMinfo; + +#elif defined(SDL_VIDEO_DRIVER_NANOX) +#include + +/* The generic custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + int data; +}; + +/* The windows custom window manager information structure */ +typedef struct SDL_SysWMinfo { + SDL_version version ; + GR_WINDOW_ID window ; /* The display window */ +} SDL_SysWMinfo; + +#elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) +#define WIN32_LEAN_AND_MEAN +#include + +/* The windows custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + HWND hwnd; /* The window for the message */ + UINT msg; /* The type of message */ + WPARAM wParam; /* WORD message parameter */ + LPARAM lParam; /* LONG message parameter */ +}; + +/* The windows custom window manager information structure */ +typedef struct SDL_SysWMinfo { + SDL_version version; + HWND window; /* The Win32 display window */ + HGLRC hglrc; /* The OpenGL context, if any */ +} SDL_SysWMinfo; + +#elif defined(SDL_VIDEO_DRIVER_RISCOS) + +/* RISC OS custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + int eventCode; /* The window for the message */ + int pollBlock[64]; +}; + +/* The RISC OS custom window manager information structure */ +typedef struct SDL_SysWMinfo { + SDL_version version; + int wimpVersion; /* Wimp version running under */ + int taskHandle; /* The RISC OS task handle */ + int window; /* The RISC OS display window */ +} SDL_SysWMinfo; + +#elif defined(SDL_VIDEO_DRIVER_PHOTON) +#include +#include + +/* The QNX custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + int data; +}; + +/* The QNX custom window manager information structure */ +typedef struct SDL_SysWMinfo { + SDL_version version; + int data; +} SDL_SysWMinfo; + +#else + +/* The generic custom event structure */ +struct SDL_SysWMmsg { + SDL_version version; + int data; +}; + +/* The generic custom window manager information structure */ +typedef struct SDL_SysWMinfo { + SDL_version version; + int data; +} SDL_SysWMinfo; + +#endif /* video driver type */ + +#endif /* SDL_PROTOTYPES_ONLY */ + +/* Function prototypes */ +/* + * This function gives you custom hooks into the window manager information. + * It fills the structure pointed to by 'info' with custom information and + * returns 1 if the function is implemented. If it's not implemented, or + * the version member of the 'info' structure is invalid, it returns 0. + * + * You typically use this function like this: + * SDL_SysWMInfo info; + * SDL_VERSION(&info.version); + * if ( SDL_GetWMInfo(&info) ) { ... } + */ +extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_syswm_h */ diff --git a/Externals/SDL/Include_1.2/SDL_thread.h b/Externals/SDL/Include_1.2/SDL_thread.h index 7305602a2b..403ee46209 100644 --- a/Externals/SDL/Include_1.2/SDL_thread.h +++ b/Externals/SDL/Include_1.2/SDL_thread.h @@ -1,119 +1,119 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_thread_h -#define _SDL_thread_h - -/* Header for the SDL thread management routines - - These are independent of the other SDL routines. -*/ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* Thread synchronization primitives */ -#include "SDL_mutex.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The SDL thread structure, defined in SDL_thread.c */ -struct SDL_Thread; -typedef struct SDL_Thread SDL_Thread; - -/* Create a thread */ -#if ((defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__)) && !defined(__SYMBIAN32__) -/* - We compile SDL into a DLL on OS/2. This means, that it's the DLL which - creates a new thread for the calling process with the SDL_CreateThread() - API. There is a problem with this, that only the RTL of the SDL.DLL will - be initialized for those threads, and not the RTL of the calling application! - To solve this, we make a little hack here. - We'll always use the caller's _beginthread() and _endthread() APIs to - start a new thread. This way, if it's the SDL.DLL which uses this API, - then the RTL of SDL.DLL will be used to create the new thread, and if it's - the application, then the RTL of the application will be used. - So, in short: - Always use the _beginthread() and _endthread() of the calling runtime library! -*/ -#define SDL_PASSED_BEGINTHREAD_ENDTHREAD -#ifndef _WIN32_WCE -#include /* This has _beginthread() and _endthread() defined! */ -#endif - -#ifdef __OS2__ -typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void *arg); -typedef void (*pfnSDL_CurrentEndThread)(void); -#elif __GNUC__ -typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned (__stdcall *func)(void *), void *arg, - unsigned, unsigned *threadID); -typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); -#else -typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned (__stdcall *func)(void *), void *arg, - unsigned, unsigned *threadID); -typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); -#endif - -extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); - -#ifdef __OS2__ -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread) -#elif defined(_WIN32_WCE) -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) -#else -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) -#endif -#else -extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data); -#endif - -/* Get the 32-bit thread identifier for the current thread */ -extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); - -/* Get the 32-bit thread identifier for the specified thread, - equivalent to SDL_ThreadID() if the specified thread is NULL. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread); - -/* Wait for a thread to finish. - The return code for the thread function is placed in the area - pointed to by 'status', if 'status' is not NULL. - */ -extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status); - -/* Forcefully kill a thread without worrying about its state */ -extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_thread_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_thread_h +#define _SDL_thread_h + +/* Header for the SDL thread management routines + + These are independent of the other SDL routines. +*/ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/* Thread synchronization primitives */ +#include "SDL_mutex.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* Create a thread */ +#if ((defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__)) && !defined(__SYMBIAN32__) +/* + We compile SDL into a DLL on OS/2. This means, that it's the DLL which + creates a new thread for the calling process with the SDL_CreateThread() + API. There is a problem with this, that only the RTL of the SDL.DLL will + be initialized for those threads, and not the RTL of the calling application! + To solve this, we make a little hack here. + We'll always use the caller's _beginthread() and _endthread() APIs to + start a new thread. This way, if it's the SDL.DLL which uses this API, + then the RTL of SDL.DLL will be used to create the new thread, and if it's + the application, then the RTL of the application will be used. + So, in short: + Always use the _beginthread() and _endthread() of the calling runtime library! +*/ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD +#ifndef _WIN32_WCE +#include /* This has _beginthread() and _endthread() defined! */ +#endif + +#ifdef __OS2__ +typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void *arg); +typedef void (*pfnSDL_CurrentEndThread)(void); +#elif __GNUC__ +typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, + unsigned (__stdcall *func)(void *), void *arg, + unsigned, unsigned *threadID); +typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); +#else +typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, + unsigned (__stdcall *func)(void *), void *arg, + unsigned, unsigned *threadID); +typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); +#endif + +extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); + +#ifdef __OS2__ +#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread) +#elif defined(_WIN32_WCE) +#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) +#else +#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) +#endif +#else +extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data); +#endif + +/* Get the 32-bit thread identifier for the current thread */ +extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); + +/* Get the 32-bit thread identifier for the specified thread, + equivalent to SDL_ThreadID() if the specified thread is NULL. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread); + +/* Wait for a thread to finish. + The return code for the thread function is placed in the area + pointed to by 'status', if 'status' is not NULL. + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status); + +/* Forcefully kill a thread without worrying about its state */ +extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_thread_h */ diff --git a/Externals/SDL/Include_1.2/SDL_timer.h b/Externals/SDL/Include_1.2/SDL_timer.h index c79a0ef571..d21159fed2 100644 --- a/Externals/SDL/Include_1.2/SDL_timer.h +++ b/Externals/SDL/Include_1.2/SDL_timer.h @@ -1,115 +1,115 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_timer_h -#define _SDL_timer_h - -/* Header for the SDL time management routines */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This is the OS scheduler timeslice, in milliseconds */ -#define SDL_TIMESLICE 10 - -/* This is the maximum resolution of the SDL timer on all platforms */ -#define TIMER_RESOLUTION 10 /* Experimentally determined */ - -/* Get the number of milliseconds since the SDL library initialization. - * Note that this value wraps if the program runs for more than ~49 days. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); - -/* Wait a specified number of milliseconds before returning */ -extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); - -/* Function prototype for the timer callback function */ -typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); - -/* Set a callback to run after the specified number of milliseconds has - * elapsed. The callback function is passed the current timer interval - * and returns the next timer interval. If the returned value is the - * same as the one passed in, the periodic alarm continues, otherwise a - * new alarm is scheduled. If the callback returns 0, the periodic alarm - * is cancelled. - * - * To cancel a currently running timer, call SDL_SetTimer(0, NULL); - * - * The timer callback function may run in a different thread than your - * main code, and so shouldn't call any functions from within itself. - * - * The maximum resolution of this timer is 10 ms, which means that if - * you request a 16 ms timer, your callback will run approximately 20 ms - * later on an unloaded system. If you wanted to set a flag signaling - * a frame update at 30 frames per second (every 33 ms), you might set a - * timer for 30 ms: - * SDL_SetTimer((33/10)*10, flag_update); - * - * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). - * - * Under UNIX, you should not use raise or use SIGALRM and this function - * in the same program, as it is implemented using setitimer(). You also - * should not use this function in multi-threaded applications as signals - * to multi-threaded apps have undefined behavior in some implementations. - * - * This function returns 0 if successful, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback); - -/* New timer API, supports multiple timers - * Written by Stephane Peter - */ - -/* Function prototype for the new timer callback function. - * The callback function is passed the current timer interval and returns - * the next timer interval. If the returned value is the same as the one - * passed in, the periodic alarm continues, otherwise a new alarm is - * scheduled. If the callback returns 0, the periodic alarm is cancelled. - */ -typedef Uint32 (SDLCALL *SDL_NewTimerCallback)(Uint32 interval, void *param); - -/* Definition of the timer ID type */ -typedef struct _SDL_TimerID *SDL_TimerID; - -/* Add a new timer to the pool of timers already running. - Returns a timer ID, or NULL when an error occurs. - */ -extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param); - -/* Remove one of the multiple timers knowing its ID. - * Returns a boolean value indicating success. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_timer_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_timer_h +#define _SDL_timer_h + +/* Header for the SDL time management routines */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is the OS scheduler timeslice, in milliseconds */ +#define SDL_TIMESLICE 10 + +/* This is the maximum resolution of the SDL timer on all platforms */ +#define TIMER_RESOLUTION 10 /* Experimentally determined */ + +/* Get the number of milliseconds since the SDL library initialization. + * Note that this value wraps if the program runs for more than ~49 days. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/* Wait a specified number of milliseconds before returning */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/* Function prototype for the timer callback function */ +typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); + +/* Set a callback to run after the specified number of milliseconds has + * elapsed. The callback function is passed the current timer interval + * and returns the next timer interval. If the returned value is the + * same as the one passed in, the periodic alarm continues, otherwise a + * new alarm is scheduled. If the callback returns 0, the periodic alarm + * is cancelled. + * + * To cancel a currently running timer, call SDL_SetTimer(0, NULL); + * + * The timer callback function may run in a different thread than your + * main code, and so shouldn't call any functions from within itself. + * + * The maximum resolution of this timer is 10 ms, which means that if + * you request a 16 ms timer, your callback will run approximately 20 ms + * later on an unloaded system. If you wanted to set a flag signaling + * a frame update at 30 frames per second (every 33 ms), you might set a + * timer for 30 ms: + * SDL_SetTimer((33/10)*10, flag_update); + * + * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). + * + * Under UNIX, you should not use raise or use SIGALRM and this function + * in the same program, as it is implemented using setitimer(). You also + * should not use this function in multi-threaded applications as signals + * to multi-threaded apps have undefined behavior in some implementations. + * + * This function returns 0 if successful, or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback); + +/* New timer API, supports multiple timers + * Written by Stephane Peter + */ + +/* Function prototype for the new timer callback function. + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL *SDL_NewTimerCallback)(Uint32 interval, void *param); + +/* Definition of the timer ID type */ +typedef struct _SDL_TimerID *SDL_TimerID; + +/* Add a new timer to the pool of timers already running. + Returns a timer ID, or NULL when an error occurs. + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param); + +/* Remove one of the multiple timers knowing its ID. + * Returns a boolean value indicating success. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_timer_h */ diff --git a/Externals/SDL/Include_1.2/SDL_types.h b/Externals/SDL/Include_1.2/SDL_types.h index 86994e14b8..853b9ce454 100644 --- a/Externals/SDL/Include_1.2/SDL_types.h +++ b/Externals/SDL/Include_1.2/SDL_types.h @@ -1,24 +1,24 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_stdinc.h" +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* DEPRECATED */ +#include "SDL_stdinc.h" diff --git a/Externals/SDL/Include_1.2/SDL_version.h b/Externals/SDL/Include_1.2/SDL_version.h index ab7bd92bf5..9ff0fa8a7f 100644 --- a/Externals/SDL/Include_1.2/SDL_version.h +++ b/Externals/SDL/Include_1.2/SDL_version.h @@ -1,85 +1,85 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This header defines the current SDL version */ - -#ifndef _SDL_version_h -#define _SDL_version_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL -*/ -#define SDL_MAJOR_VERSION 1 -#define SDL_MINOR_VERSION 2 -#define SDL_PATCHLEVEL 13 - -typedef struct SDL_version { - Uint8 major; - Uint8 minor; - Uint8 patch; -} SDL_version; - -/* This macro can be used to fill a version structure with the compile-time - * version of the SDL library. - */ -#define SDL_VERSION(X) \ -{ \ - (X)->major = SDL_MAJOR_VERSION; \ - (X)->minor = SDL_MINOR_VERSION; \ - (X)->patch = SDL_PATCHLEVEL; \ -} - -/* This macro turns the version numbers into a numeric value: - (1,2,3) -> (1203) - This assumes that there will never be more than 100 patchlevels -*/ -#define SDL_VERSIONNUM(X, Y, Z) \ - ((X)*1000 + (Y)*100 + (Z)) - -/* This is the version number macro for the current SDL version */ -#define SDL_COMPILEDVERSION \ - SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) - -/* This macro will evaluate to true if compiled with SDL at least X.Y.Z */ -#define SDL_VERSION_ATLEAST(X, Y, Z) \ - (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) - -/* This function gets the version of the dynamically linked SDL library. - it should NOT be used to fill a version structure, instead you should - use the SDL_Version() macro. - */ -extern DECLSPEC const SDL_version * SDLCALL SDL_Linked_Version(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_version_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This header defines the current SDL version */ + +#ifndef _SDL_version_h +#define _SDL_version_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 1 +#define SDL_MINOR_VERSION 2 +#define SDL_PATCHLEVEL 13 + +typedef struct SDL_version { + Uint8 major; + Uint8 minor; + Uint8 patch; +} SDL_version; + +/* This macro can be used to fill a version structure with the compile-time + * version of the SDL library. + */ +#define SDL_VERSION(X) \ +{ \ + (X)->major = SDL_MAJOR_VERSION; \ + (X)->minor = SDL_MINOR_VERSION; \ + (X)->patch = SDL_PATCHLEVEL; \ +} + +/* This macro turns the version numbers into a numeric value: + (1,2,3) -> (1203) + This assumes that there will never be more than 100 patchlevels +*/ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/* This is the version number macro for the current SDL version */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) + +/* This macro will evaluate to true if compiled with SDL at least X.Y.Z */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/* This function gets the version of the dynamically linked SDL library. + it should NOT be used to fill a version structure, instead you should + use the SDL_Version() macro. + */ +extern DECLSPEC const SDL_version * SDLCALL SDL_Linked_Version(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_version_h */ diff --git a/Externals/SDL/Include_1.2/SDL_video.h b/Externals/SDL/Include_1.2/SDL_video.h index 2f89bd3b0e..f6baccee7f 100644 --- a/Externals/SDL/Include_1.2/SDL_video.h +++ b/Externals/SDL/Include_1.2/SDL_video.h @@ -1,891 +1,891 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Header file for access to the SDL raw framebuffer window */ - -#ifndef _SDL_video_h -#define _SDL_video_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Transparency definitions: These define alpha as the opacity of a surface */ -#define SDL_ALPHA_OPAQUE 255 -#define SDL_ALPHA_TRANSPARENT 0 - -/* Useful data types */ -typedef struct SDL_Rect { - Sint16 x, y; - Uint16 w, h; -} SDL_Rect; - -typedef struct SDL_Color { - Uint8 r; - Uint8 g; - Uint8 b; - Uint8 unused; -} SDL_Color; -#define SDL_Colour SDL_Color - -typedef struct SDL_Palette { - int ncolors; - SDL_Color *colors; -} SDL_Palette; - -/* Everything in the pixel format structure is read-only */ -typedef struct SDL_PixelFormat { - SDL_Palette *palette; - Uint8 BitsPerPixel; - Uint8 BytesPerPixel; - Uint8 Rloss; - Uint8 Gloss; - Uint8 Bloss; - Uint8 Aloss; - Uint8 Rshift; - Uint8 Gshift; - Uint8 Bshift; - Uint8 Ashift; - Uint32 Rmask; - Uint32 Gmask; - Uint32 Bmask; - Uint32 Amask; - - /* RGB color key information */ - Uint32 colorkey; - /* Alpha value information (per-surface alpha) */ - Uint8 alpha; -} SDL_PixelFormat; - -/* This structure should be treated as read-only, except for 'pixels', - which, if not NULL, contains the raw pixel data for the surface. -*/ -typedef struct SDL_Surface { - Uint32 flags; /* Read-only */ - SDL_PixelFormat *format; /* Read-only */ - int w, h; /* Read-only */ - Uint16 pitch; /* Read-only */ - void *pixels; /* Read-write */ - int offset; /* Private */ - - /* Hardware-specific surface info */ - struct private_hwdata *hwdata; - - /* clipping information */ - SDL_Rect clip_rect; /* Read-only */ - Uint32 unused1; /* for binary compatibility */ - - /* Allow recursive locks */ - Uint32 locked; /* Private */ - - /* info for fast blit mapping to other surfaces */ - struct SDL_BlitMap *map; /* Private */ - - /* format version, bumped at every change to invalidate blit maps */ - unsigned int format_version; /* Private */ - - /* Reference count -- used when freeing surface */ - int refcount; /* Read-mostly */ -} SDL_Surface; - -/* These are the currently supported flags for the SDL_surface */ -/* Available for SDL_CreateRGBSurface() or SDL_SetVideoMode() */ -#define SDL_SWSURFACE 0x00000000 /* Surface is in system memory */ -#define SDL_HWSURFACE 0x00000001 /* Surface is in video memory */ -#define SDL_ASYNCBLIT 0x00000004 /* Use asynchronous blits if possible */ -/* Available for SDL_SetVideoMode() */ -#define SDL_ANYFORMAT 0x10000000 /* Allow any video depth/pixel-format */ -#define SDL_HWPALETTE 0x20000000 /* Surface has exclusive palette */ -#define SDL_DOUBLEBUF 0x40000000 /* Set up double-buffered video mode */ -#define SDL_FULLSCREEN 0x80000000 /* Surface is a full screen display */ -#define SDL_OPENGL 0x00000002 /* Create an OpenGL rendering context */ -#define SDL_OPENGLBLIT 0x0000000A /* Create an OpenGL rendering context and use it for blitting */ -#define SDL_RESIZABLE 0x00000010 /* This video mode may be resized */ -#define SDL_NOFRAME 0x00000020 /* No window caption or edge frame */ -/* Used internally (read-only) */ -#define SDL_HWACCEL 0x00000100 /* Blit uses hardware acceleration */ -#define SDL_SRCCOLORKEY 0x00001000 /* Blit uses a source color key */ -#define SDL_RLEACCELOK 0x00002000 /* Private flag */ -#define SDL_RLEACCEL 0x00004000 /* Surface is RLE encoded */ -#define SDL_SRCALPHA 0x00010000 /* Blit uses source alpha blending */ -#define SDL_PREALLOC 0x01000000 /* Surface uses preallocated memory */ - -/* Evaluates to true if the surface needs to be locked before access */ -#define SDL_MUSTLOCK(surface) \ - (surface->offset || \ - ((surface->flags & (SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_RLEACCEL)) != 0)) - -/* typedef for private surface blitting functions */ -typedef int (*SDL_blit)(struct SDL_Surface *src, SDL_Rect *srcrect, - struct SDL_Surface *dst, SDL_Rect *dstrect); - - -/* Useful for determining the video hardware capabilities */ -typedef struct SDL_VideoInfo { - Uint32 hw_available :1; /* Flag: Can you create hardware surfaces? */ - Uint32 wm_available :1; /* Flag: Can you talk to a window manager? */ - Uint32 UnusedBits1 :6; - Uint32 UnusedBits2 :1; - Uint32 blit_hw :1; /* Flag: Accelerated blits HW --> HW */ - Uint32 blit_hw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_hw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_sw :1; /* Flag: Accelerated blits SW --> HW */ - Uint32 blit_sw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_sw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_fill :1; /* Flag: Accelerated color fill */ - Uint32 UnusedBits3 :16; - Uint32 video_mem; /* The total amount of video memory (in K) */ - SDL_PixelFormat *vfmt; /* Value: The format of the video surface */ - int current_w; /* Value: The current video mode width */ - int current_h; /* Value: The current video mode height */ -} SDL_VideoInfo; - - -/* The most common video overlay formats. - For an explanation of these pixel formats, see: - http://www.webartz.com/fourcc/indexyuv.htm - - For information on the relationship between color spaces, see: - http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html - */ -#define SDL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ -#define SDL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ -#define SDL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ -#define SDL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ -#define SDL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ - -/* The YUV hardware video overlay */ -typedef struct SDL_Overlay { - Uint32 format; /* Read-only */ - int w, h; /* Read-only */ - int planes; /* Read-only */ - Uint16 *pitches; /* Read-only */ - Uint8 **pixels; /* Read-write */ - - /* Hardware-specific surface info */ - struct private_yuvhwfuncs *hwfuncs; - struct private_yuvhwdata *hwdata; - - /* Special flags */ - Uint32 hw_overlay :1; /* Flag: This overlay hardware accelerated? */ - Uint32 UnusedBits :31; -} SDL_Overlay; - - -/* Public enumeration for setting the OpenGL window attributes. */ -typedef enum { - SDL_GL_RED_SIZE, - SDL_GL_GREEN_SIZE, - SDL_GL_BLUE_SIZE, - SDL_GL_ALPHA_SIZE, - SDL_GL_BUFFER_SIZE, - SDL_GL_DOUBLEBUFFER, - SDL_GL_DEPTH_SIZE, - SDL_GL_STENCIL_SIZE, - SDL_GL_ACCUM_RED_SIZE, - SDL_GL_ACCUM_GREEN_SIZE, - SDL_GL_ACCUM_BLUE_SIZE, - SDL_GL_ACCUM_ALPHA_SIZE, - SDL_GL_STEREO, - SDL_GL_MULTISAMPLEBUFFERS, - SDL_GL_MULTISAMPLESAMPLES, - SDL_GL_ACCELERATED_VISUAL, - SDL_GL_SWAP_CONTROL -} SDL_GLattr; - -/* flags for SDL_SetPalette() */ -#define SDL_LOGPAL 0x01 -#define SDL_PHYSPAL 0x02 - -/* Function prototypes */ - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the video driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - * - * SDL_VideoInit() initializes the video subsystem -- sets up a connection - * to the window manager, etc, and determines the current video mode and - * pixel format, but does not initialize a window or graphics mode. - * Note that event handling is activated by this routine. - * - * If you use both sound and video in your application, you need to call - * SDL_Init() before opening the sound device, otherwise under Win32 DirectX, - * you won't be able to set full-screen display modes. - */ -extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name, Uint32 flags); -extern DECLSPEC void SDLCALL SDL_VideoQuit(void); - -/* This function fills the given character buffer with the name of the - * video driver, and returns a pointer to it if the video driver has - * been initialized. It returns NULL if no driver has been initialized. - */ -extern DECLSPEC char * SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); - -/* - * This function returns a pointer to the current display surface. - * If SDL is doing format conversion on the display surface, this - * function returns the publicly visible surface, not the real video - * surface. - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_GetVideoSurface(void); - -/* - * This function returns a read-only pointer to information about the - * video hardware. If this is called before SDL_SetVideoMode(), the 'vfmt' - * member of the returned structure will contain the pixel format of the - * "best" video mode. - */ -extern DECLSPEC const SDL_VideoInfo * SDLCALL SDL_GetVideoInfo(void); - -/* - * Check to see if a particular video mode is supported. - * It returns 0 if the requested mode is not supported under any bit depth, - * or returns the bits-per-pixel of the closest available mode with the - * given width and height. If this bits-per-pixel is different from the - * one used when setting the video mode, SDL_SetVideoMode() will succeed, - * but will emulate the requested bits-per-pixel with a shadow surface. - * - * The arguments to SDL_VideoModeOK() are the same ones you would pass to - * SDL_SetVideoMode() - */ -extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags); - -/* - * Return a pointer to an array of available screen dimensions for the - * given format and video flags, sorted largest to smallest. Returns - * NULL if there are no dimensions available for a particular format, - * or (SDL_Rect **)-1 if any dimension is okay for the given format. - * - * If 'format' is NULL, the mode list will be for the format given - * by SDL_GetVideoInfo()->vfmt - */ -extern DECLSPEC SDL_Rect ** SDLCALL SDL_ListModes(SDL_PixelFormat *format, Uint32 flags); - -/* - * Set up a video mode with the specified width, height and bits-per-pixel. - * - * If 'bpp' is 0, it is treated as the current display bits per pixel. - * - * If SDL_ANYFORMAT is set in 'flags', the SDL library will try to set the - * requested bits-per-pixel, but will return whatever video pixel format is - * available. The default is to emulate the requested pixel format if it - * is not natively available. - * - * If SDL_HWSURFACE is set in 'flags', the video surface will be placed in - * video memory, if possible, and you may have to call SDL_LockSurface() - * in order to access the raw framebuffer. Otherwise, the video surface - * will be created in system memory. - * - * If SDL_ASYNCBLIT is set in 'flags', SDL will try to perform rectangle - * updates asynchronously, but you must always lock before accessing pixels. - * SDL will wait for updates to complete before returning from the lock. - * - * If SDL_HWPALETTE is set in 'flags', the SDL library will guarantee - * that the colors set by SDL_SetColors() will be the colors you get. - * Otherwise, in 8-bit mode, SDL_SetColors() may not be able to set all - * of the colors exactly the way they are requested, and you should look - * at the video surface structure to determine the actual palette. - * If SDL cannot guarantee that the colors you request can be set, - * i.e. if the colormap is shared, then the video surface may be created - * under emulation in system memory, overriding the SDL_HWSURFACE flag. - * - * If SDL_FULLSCREEN is set in 'flags', the SDL library will try to set - * a fullscreen video mode. The default is to create a windowed mode - * if the current graphics system has a window manager. - * If the SDL library is able to set a fullscreen video mode, this flag - * will be set in the surface that is returned. - * - * If SDL_DOUBLEBUF is set in 'flags', the SDL library will try to set up - * two surfaces in video memory and swap between them when you call - * SDL_Flip(). This is usually slower than the normal single-buffering - * scheme, but prevents "tearing" artifacts caused by modifying video - * memory while the monitor is refreshing. It should only be used by - * applications that redraw the entire screen on every update. - * - * If SDL_RESIZABLE is set in 'flags', the SDL library will allow the - * window manager, if any, to resize the window at runtime. When this - * occurs, SDL will send a SDL_VIDEORESIZE event to you application, - * and you must respond to the event by re-calling SDL_SetVideoMode() - * with the requested size (or another size that suits the application). - * - * If SDL_NOFRAME is set in 'flags', the SDL library will create a window - * without any title bar or frame decoration. Fullscreen video modes have - * this flag set automatically. - * - * This function returns the video framebuffer surface, or NULL if it fails. - * - * If you rely on functionality provided by certain video flags, check the - * flags of the returned surface to make sure that functionality is available. - * SDL will fall back to reduced functionality if the exact flags you wanted - * are not available. - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_SetVideoMode - (int width, int height, int bpp, Uint32 flags); - -/* - * Makes sure the given list of rectangles is updated on the given screen. - * If 'x', 'y', 'w' and 'h' are all 0, SDL_UpdateRect will update the entire - * screen. - * These functions should not be called while 'screen' is locked. - */ -extern DECLSPEC void SDLCALL SDL_UpdateRects - (SDL_Surface *screen, int numrects, SDL_Rect *rects); -extern DECLSPEC void SDLCALL SDL_UpdateRect - (SDL_Surface *screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h); - -/* - * On hardware that supports double-buffering, this function sets up a flip - * and returns. The hardware will wait for vertical retrace, and then swap - * video buffers before the next video surface blit or lock will return. - * On hardware that doesn not support double-buffering, this is equivalent - * to calling SDL_UpdateRect(screen, 0, 0, 0, 0); - * The SDL_DOUBLEBUF flag must have been passed to SDL_SetVideoMode() when - * setting the video mode for this function to perform hardware flipping. - * This function returns 0 if successful, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface *screen); - -/* - * Set the gamma correction for each of the color channels. - * The gamma values range (approximately) between 0.1 and 10.0 - * - * If this function isn't supported directly by the hardware, it will - * be emulated using gamma ramps, if available. If successful, this - * function returns 0, otherwise it returns -1. - */ -extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); - -/* - * Set the gamma translation table for the red, green, and blue channels - * of the video hardware. Each table is an array of 256 16-bit quantities, - * representing a mapping between the input and output for that channel. - * The input is the index into the array, and the output is the 16-bit - * gamma value at that index, scaled to the output color precision. - * - * You may pass NULL for any of the channels to leave it unchanged. - * If the call succeeds, it will return 0. If the display driver or - * hardware does not support gamma translation, or otherwise fails, - * this function will return -1. - */ -extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 *red, const Uint16 *green, const Uint16 *blue); - -/* - * Retrieve the current values of the gamma translation tables. - * - * You must pass in valid pointers to arrays of 256 16-bit quantities. - * Any of the pointers may be NULL to ignore that channel. - * If the call succeeds, it will return 0. If the display driver or - * hardware does not support gamma translation, or otherwise fails, - * this function will return -1. - */ -extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 *red, Uint16 *green, Uint16 *blue); - -/* - * Sets a portion of the colormap for the given 8-bit surface. If 'surface' - * is not a palettized surface, this function does nothing, returning 0. - * If all of the colors were set as passed to SDL_SetColors(), it will - * return 1. If not all the color entries were set exactly as given, - * it will return 0, and you should look at the surface palette to - * determine the actual color palette. - * - * When 'surface' is the surface associated with the current display, the - * display colormap will be updated with the requested colors. If - * SDL_HWPALETTE was set in SDL_SetVideoMode() flags, SDL_SetColors() - * will always return 1, and the palette is guaranteed to be set the way - * you desire, even if the window colormap has to be warped or run under - * emulation. - */ -extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface *surface, - SDL_Color *colors, int firstcolor, int ncolors); - -/* - * Sets a portion of the colormap for a given 8-bit surface. - * 'flags' is one or both of: - * SDL_LOGPAL -- set logical palette, which controls how blits are mapped - * to/from the surface, - * SDL_PHYSPAL -- set physical palette, which controls how pixels look on - * the screen - * Only screens have physical palettes. Separate change of physical/logical - * palettes is only possible if the screen has SDL_HWPALETTE set. - * - * The return value is 1 if all colours could be set as requested, and 0 - * otherwise. - * - * SDL_SetColors() is equivalent to calling this function with - * flags = (SDL_LOGPAL|SDL_PHYSPAL). - */ -extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface *surface, int flags, - SDL_Color *colors, int firstcolor, - int ncolors); - -/* - * Maps an RGB triple to an opaque pixel value for a given pixel format - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGB -(const SDL_PixelFormat * const format, - const Uint8 r, const Uint8 g, const Uint8 b); - -/* - * Maps an RGBA quadruple to a pixel value for a given pixel format - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA -(const SDL_PixelFormat * const format, - const Uint8 r, const Uint8 g, const Uint8 b, const Uint8 a); - -/* - * Maps a pixel value into the RGB components for a given pixel format - */ -extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, - Uint8 *r, Uint8 *g, Uint8 *b); - -/* - * Maps a pixel value into the RGBA components for a given pixel format - */ -extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, - Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); - -/* - * Allocate and free an RGB surface (must be called after SDL_SetVideoMode) - * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. - * If the depth is greater than 8 bits, the pixel format is set using the - * flags '[RGB]mask'. - * If the function runs out of memory, it will return NULL. - * - * The 'flags' tell what kind of surface to create. - * SDL_SWSURFACE means that the surface should be created in system memory. - * SDL_HWSURFACE means that the surface should be created in video memory, - * with the same format as the display surface. This is useful for surfaces - * that will not change much, to take advantage of hardware acceleration - * when being blitted to the display surface. - * SDL_ASYNCBLIT means that SDL will try to perform asynchronous blits with - * this surface, but you must always lock it before accessing the pixels. - * SDL will wait for current blits to finish before returning from the lock. - * SDL_SRCCOLORKEY indicates that the surface will be used for colorkey blits. - * If the hardware supports acceleration of colorkey blits between - * two surfaces in video memory, SDL will try to place the surface in - * video memory. If this isn't possible or if there is no hardware - * acceleration available, the surface will be placed in system memory. - * SDL_SRCALPHA means that the surface will be used for alpha blits and - * if the hardware supports hardware acceleration of alpha blits between - * two surfaces in video memory, to place the surface in video memory - * if possible, otherwise it will be placed in system memory. - * If the surface is created in video memory, blits will be _much_ faster, - * but the surface format must be identical to the video surface format, - * and the only way to access the pixels member of the surface is to use - * the SDL_LockSurface() and SDL_UnlockSurface() calls. - * If the requested surface actually resides in video memory, SDL_HWSURFACE - * will be set in the flags member of the returned surface. If for some - * reason the surface could not be placed in video memory, it will not have - * the SDL_HWSURFACE flag set, and will be created in system memory instead. - */ -#define SDL_AllocSurface SDL_CreateRGBSurface -extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurface - (Uint32 flags, int width, int height, int depth, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); -extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, - int width, int height, int depth, int pitch, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); -extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface *surface); - -/* - * SDL_LockSurface() sets up a surface for directly accessing the pixels. - * Between calls to SDL_LockSurface()/SDL_UnlockSurface(), you can write - * to and read from 'surface->pixels', using the pixel format stored in - * 'surface->format'. Once you are done accessing the surface, you should - * use SDL_UnlockSurface() to release it. - * - * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates - * to 0, then you can read and write to the surface at any time, and the - * pixel format of the surface will not change. In particular, if the - * SDL_HWSURFACE flag is not given when calling SDL_SetVideoMode(), you - * will not need to lock the display surface before accessing it. - * - * No operating system or library calls should be made between lock/unlock - * pairs, as critical system locks may be held during this time. - * - * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. - */ -extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface *surface); -extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); - -/* - * Load a surface from a seekable SDL data source (memory or file.) - * If 'freesrc' is non-zero, the source will be closed after being read. - * Returns the new surface, or NULL if there was an error. - * The new surface should be freed with SDL_FreeSurface(). - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc); - -/* Convenience macro -- load a surface from a file */ -#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) - -/* - * Save a surface to a seekable SDL data source (memory or file.) - * If 'freedst' is non-zero, the source will be closed after being written. - * Returns 0 if successful or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SaveBMP_RW - (SDL_Surface *surface, SDL_RWops *dst, int freedst); - -/* Convenience macro -- save a surface to a file */ -#define SDL_SaveBMP(surface, file) \ - SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) - -/* - * Sets the color key (transparent pixel) in a blittable surface. - * If 'flag' is SDL_SRCCOLORKEY (optionally OR'd with SDL_RLEACCEL), - * 'key' will be the transparent pixel in the source image of a blit. - * SDL_RLEACCEL requests RLE acceleration for the surface if present, - * and removes RLE acceleration if absent. - * If 'flag' is 0, this function clears any current color key. - * This function returns 0, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SetColorKey - (SDL_Surface *surface, Uint32 flag, Uint32 key); - -/* - * This function sets the alpha value for the entire surface, as opposed to - * using the alpha component of each pixel. This value measures the range - * of transparency of the surface, 0 being completely transparent to 255 - * being completely opaque. An 'alpha' value of 255 causes blits to be - * opaque, the source pixels copied to the destination (the default). Note - * that per-surface alpha can be combined with colorkey transparency. - * - * If 'flag' is 0, alpha blending is disabled for the surface. - * If 'flag' is SDL_SRCALPHA, alpha blending is enabled for the surface. - * OR:ing the flag with SDL_RLEACCEL requests RLE acceleration for the - * surface; if SDL_RLEACCEL is not specified, the RLE accel will be removed. - * - * The 'alpha' parameter is ignored for surfaces that have an alpha channel. - */ -extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha); - -/* - * Sets the clipping rectangle for the destination surface in a blit. - * - * If the clip rectangle is NULL, clipping will be disabled. - * If the clip rectangle doesn't intersect the surface, the function will - * return SDL_FALSE and blits will be completely clipped. Otherwise the - * function returns SDL_TRUE and blits to the surface will be clipped to - * the intersection of the surface area and the clipping rectangle. - * - * Note that blits are automatically clipped to the edges of the source - * and destination surfaces. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect); - -/* - * Gets the clipping rectangle for the destination surface in a blit. - * 'rect' must be a pointer to a valid rectangle which will be filled - * with the correct values. - */ -extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect); - -/* - * Creates a new surface of the specified format, and then copies and maps - * the given surface to it so the blit of the converted surface will be as - * fast as possible. If this function fails, it returns NULL. - * - * The 'flags' parameter is passed to SDL_CreateRGBSurface() and has those - * semantics. You can also pass SDL_RLEACCEL in the flags parameter and - * SDL will try to RLE accelerate colorkey and alpha blits in the resulting - * surface. - * - * This function is used internally by SDL_DisplayFormat(). - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface - (SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags); - -/* - * This performs a fast blit from the source surface to the destination - * surface. It assumes that the source and destination rectangles are - * the same size. If either 'srcrect' or 'dstrect' are NULL, the entire - * surface (src or dst) is copied. The final blit rectangles are saved - * in 'srcrect' and 'dstrect' after all clipping is performed. - * If the blit is successful, it returns 0, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without alpha and colorkey - * are defined as follows: - * - * RGBA->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using alpha-channel). - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy RGB. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value); - * set destination alpha to opaque. - * SDL_SRCALPHA not set: - * copy RGB, set destination alpha to source per-surface alpha value. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * RGBA->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source alpha channel) the RGB values; - * leave destination alpha untouched. [Note: is this correct?] - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy all of RGBA to the destination. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value). - * SDL_SRCALPHA not set: - * copy RGB. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * If either of the surfaces were in video memory, and the blit returns -2, - * the video memory was lost, so it should be reloaded with artwork and - * re-blitted: - while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { - while ( SDL_LockSurface(image) < 0 ) - Sleep(10); - -- Write image pixels to image->pixels -- - SDL_UnlockSurface(image); - } - * This happens under DirectX 5.0 when the system switches away from your - * fullscreen application. The lock will also fail until you have access - * to the video memory again. - */ -/* You should call SDL_BlitSurface() unless you know exactly how SDL - blitting works internally and how to use the other blit functions. -*/ -#define SDL_BlitSurface SDL_UpperBlit - -/* This is the public blit function, SDL_BlitSurface(), and it performs - rectangle validation and clipping before passing it to SDL_LowerBlit() -*/ -extern DECLSPEC int SDLCALL SDL_UpperBlit - (SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); -/* This is a semi-private blit function and it performs low-level surface - blitting only. -*/ -extern DECLSPEC int SDLCALL SDL_LowerBlit - (SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); - -/* - * This function performs a fast fill of the given rectangle with 'color' - * The given rectangle is clipped to the destination surface clip area - * and the final fill rectangle is saved in the passed in pointer. - * If 'dstrect' is NULL, the whole surface will be filled with 'color' - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_FillRect - (SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); - -/* - * This function takes a surface and copies it to a new surface of the - * pixel format and colors of the video framebuffer, suitable for fast - * blitting onto the display surface. It calls SDL_ConvertSurface() - * - * If you want to take advantage of hardware colorkey or alpha blit - * acceleration, you should set the colorkey and alpha value before - * calling this function. - * - * If the conversion fails or runs out of memory, it returns NULL - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormat(SDL_Surface *surface); - -/* - * This function takes a surface and copies it to a new surface of the - * pixel format and colors of the video framebuffer (if possible), - * suitable for fast alpha blitting onto the display surface. - * The new surface will always have an alpha channel. - * - * If you want to take advantage of hardware colorkey or alpha blit - * acceleration, you should set the colorkey and alpha value before - * calling this function. - * - * If the conversion fails or runs out of memory, it returns NULL - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormatAlpha(SDL_Surface *surface); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* YUV video surface overlay functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* This function creates a video output overlay - Calling the returned surface an overlay is something of a misnomer because - the contents of the display surface underneath the area where the overlay - is shown is undefined - it may be overwritten with the converted YUV data. -*/ -extern DECLSPEC SDL_Overlay * SDLCALL SDL_CreateYUVOverlay(int width, int height, - Uint32 format, SDL_Surface *display); - -/* Lock an overlay for direct access, and unlock it when you are done */ -extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay *overlay); -extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay *overlay); - -/* Blit a video overlay to the display surface. - The contents of the video surface underneath the blit destination are - not defined. - The width and height of the destination rectangle may be different from - that of the overlay, but currently only 2x scaling is supported. -*/ -extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay *overlay, SDL_Rect *dstrect); - -/* Free a video overlay */ -extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay *overlay); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* OpenGL support functions. */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Dynamically load an OpenGL library, or the default one if path is NULL - * - * If you do this, you need to retrieve all of the GL functions used in - * your program from the dynamic library using SDL_GL_GetProcAddress(). - */ -extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); - -/* - * Get the address of a GL function - */ -extern DECLSPEC void * SDLCALL SDL_GL_GetProcAddress(const char* proc); - -/* - * Set an attribute of the OpenGL subsystem before intialization. - */ -extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); - -/* - * Get an attribute of the OpenGL subsystem from the windowing - * interface, such as glX. This is of course different from getting - * the values from SDL's internal OpenGL subsystem, which only - * stores the values you request before initialization. - * - * Developers should track the values they pass into SDL_GL_SetAttribute - * themselves if they want to retrieve these values. - */ -extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int* value); - -/* - * Swap the OpenGL buffers, if double-buffering is supported. - */ -extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void); - -/* - * Internal functions that should not be called unless you have read - * and understood the source code for these functions. - */ -extern DECLSPEC void SDLCALL SDL_GL_UpdateRects(int numrects, SDL_Rect* rects); -extern DECLSPEC void SDLCALL SDL_GL_Lock(void); -extern DECLSPEC void SDLCALL SDL_GL_Unlock(void); - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* These functions allow interaction with the window manager, if any. */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Sets/Gets the title and icon text of the display window (UTF-8 encoded) - */ -extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title, const char *icon); -extern DECLSPEC void SDLCALL SDL_WM_GetCaption(char **title, char **icon); - -/* - * Sets the icon for the display window. - * This function must be called before the first call to SDL_SetVideoMode(). - * It takes an icon surface, and a mask in MSB format. - * If 'mask' is NULL, the entire icon surface will be used as the icon. - */ -extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); - -/* - * This function iconifies the window, and returns 1 if it succeeded. - * If the function succeeds, it generates an SDL_APPACTIVE loss event. - * This function is a noop and returns 0 in non-windowed environments. - */ -extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); - -/* - * Toggle fullscreen mode without changing the contents of the screen. - * If the display surface does not require locking before accessing - * the pixel information, then the memory pointers will not change. - * - * If this function was able to toggle fullscreen mode (change from - * running in a window to fullscreen, or vice-versa), it will return 1. - * If it is not implemented, or fails, it returns 0. - * - * The next call to SDL_SetVideoMode() will set the mode fullscreen - * attribute based on the flags parameter - if SDL_FULLSCREEN is not - * set, then the display will be windowed by default where supported. - * - * This is currently only implemented in the X11 video driver. - */ -extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface *surface); - -/* - * This function allows you to set and query the input grab state of - * the application. It returns the new input grab state. - */ -typedef enum { - SDL_GRAB_QUERY = -1, - SDL_GRAB_OFF = 0, - SDL_GRAB_ON = 1, - SDL_GRAB_FULLSCREEN /* Used internally */ -} SDL_GrabMode; -/* - * Grabbing means that the mouse is confined to the application window, - * and nearly all keyboard input is passed directly to the application, - * and not interpreted by a window manager, if any. - */ -extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode); - -/* Not in public API at the moment - do not use! */ -extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Header file for access to the SDL raw framebuffer window */ + +#ifndef _SDL_video_h +#define _SDL_video_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Transparency definitions: These define alpha as the opacity of a surface */ +#define SDL_ALPHA_OPAQUE 255 +#define SDL_ALPHA_TRANSPARENT 0 + +/* Useful data types */ +typedef struct SDL_Rect { + Sint16 x, y; + Uint16 w, h; +} SDL_Rect; + +typedef struct SDL_Color { + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 unused; +} SDL_Color; +#define SDL_Colour SDL_Color + +typedef struct SDL_Palette { + int ncolors; + SDL_Color *colors; +} SDL_Palette; + +/* Everything in the pixel format structure is read-only */ +typedef struct SDL_PixelFormat { + SDL_Palette *palette; + Uint8 BitsPerPixel; + Uint8 BytesPerPixel; + Uint8 Rloss; + Uint8 Gloss; + Uint8 Bloss; + Uint8 Aloss; + Uint8 Rshift; + Uint8 Gshift; + Uint8 Bshift; + Uint8 Ashift; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; + + /* RGB color key information */ + Uint32 colorkey; + /* Alpha value information (per-surface alpha) */ + Uint8 alpha; +} SDL_PixelFormat; + +/* This structure should be treated as read-only, except for 'pixels', + which, if not NULL, contains the raw pixel data for the surface. +*/ +typedef struct SDL_Surface { + Uint32 flags; /* Read-only */ + SDL_PixelFormat *format; /* Read-only */ + int w, h; /* Read-only */ + Uint16 pitch; /* Read-only */ + void *pixels; /* Read-write */ + int offset; /* Private */ + + /* Hardware-specific surface info */ + struct private_hwdata *hwdata; + + /* clipping information */ + SDL_Rect clip_rect; /* Read-only */ + Uint32 unused1; /* for binary compatibility */ + + /* Allow recursive locks */ + Uint32 locked; /* Private */ + + /* info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /* Private */ + + /* format version, bumped at every change to invalidate blit maps */ + unsigned int format_version; /* Private */ + + /* Reference count -- used when freeing surface */ + int refcount; /* Read-mostly */ +} SDL_Surface; + +/* These are the currently supported flags for the SDL_surface */ +/* Available for SDL_CreateRGBSurface() or SDL_SetVideoMode() */ +#define SDL_SWSURFACE 0x00000000 /* Surface is in system memory */ +#define SDL_HWSURFACE 0x00000001 /* Surface is in video memory */ +#define SDL_ASYNCBLIT 0x00000004 /* Use asynchronous blits if possible */ +/* Available for SDL_SetVideoMode() */ +#define SDL_ANYFORMAT 0x10000000 /* Allow any video depth/pixel-format */ +#define SDL_HWPALETTE 0x20000000 /* Surface has exclusive palette */ +#define SDL_DOUBLEBUF 0x40000000 /* Set up double-buffered video mode */ +#define SDL_FULLSCREEN 0x80000000 /* Surface is a full screen display */ +#define SDL_OPENGL 0x00000002 /* Create an OpenGL rendering context */ +#define SDL_OPENGLBLIT 0x0000000A /* Create an OpenGL rendering context and use it for blitting */ +#define SDL_RESIZABLE 0x00000010 /* This video mode may be resized */ +#define SDL_NOFRAME 0x00000020 /* No window caption or edge frame */ +/* Used internally (read-only) */ +#define SDL_HWACCEL 0x00000100 /* Blit uses hardware acceleration */ +#define SDL_SRCCOLORKEY 0x00001000 /* Blit uses a source color key */ +#define SDL_RLEACCELOK 0x00002000 /* Private flag */ +#define SDL_RLEACCEL 0x00004000 /* Surface is RLE encoded */ +#define SDL_SRCALPHA 0x00010000 /* Blit uses source alpha blending */ +#define SDL_PREALLOC 0x01000000 /* Surface uses preallocated memory */ + +/* Evaluates to true if the surface needs to be locked before access */ +#define SDL_MUSTLOCK(surface) \ + (surface->offset || \ + ((surface->flags & (SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_RLEACCEL)) != 0)) + +/* typedef for private surface blitting functions */ +typedef int (*SDL_blit)(struct SDL_Surface *src, SDL_Rect *srcrect, + struct SDL_Surface *dst, SDL_Rect *dstrect); + + +/* Useful for determining the video hardware capabilities */ +typedef struct SDL_VideoInfo { + Uint32 hw_available :1; /* Flag: Can you create hardware surfaces? */ + Uint32 wm_available :1; /* Flag: Can you talk to a window manager? */ + Uint32 UnusedBits1 :6; + Uint32 UnusedBits2 :1; + Uint32 blit_hw :1; /* Flag: Accelerated blits HW --> HW */ + Uint32 blit_hw_CC :1; /* Flag: Accelerated blits with Colorkey */ + Uint32 blit_hw_A :1; /* Flag: Accelerated blits with Alpha */ + Uint32 blit_sw :1; /* Flag: Accelerated blits SW --> HW */ + Uint32 blit_sw_CC :1; /* Flag: Accelerated blits with Colorkey */ + Uint32 blit_sw_A :1; /* Flag: Accelerated blits with Alpha */ + Uint32 blit_fill :1; /* Flag: Accelerated color fill */ + Uint32 UnusedBits3 :16; + Uint32 video_mem; /* The total amount of video memory (in K) */ + SDL_PixelFormat *vfmt; /* Value: The format of the video surface */ + int current_w; /* Value: The current video mode width */ + int current_h; /* Value: The current video mode height */ +} SDL_VideoInfo; + + +/* The most common video overlay formats. + For an explanation of these pixel formats, see: + http://www.webartz.com/fourcc/indexyuv.htm + + For information on the relationship between color spaces, see: + http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html + */ +#define SDL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ +#define SDL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ +#define SDL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ +#define SDL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ +#define SDL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ + +/* The YUV hardware video overlay */ +typedef struct SDL_Overlay { + Uint32 format; /* Read-only */ + int w, h; /* Read-only */ + int planes; /* Read-only */ + Uint16 *pitches; /* Read-only */ + Uint8 **pixels; /* Read-write */ + + /* Hardware-specific surface info */ + struct private_yuvhwfuncs *hwfuncs; + struct private_yuvhwdata *hwdata; + + /* Special flags */ + Uint32 hw_overlay :1; /* Flag: This overlay hardware accelerated? */ + Uint32 UnusedBits :31; +} SDL_Overlay; + + +/* Public enumeration for setting the OpenGL window attributes. */ +typedef enum { + SDL_GL_RED_SIZE, + SDL_GL_GREEN_SIZE, + SDL_GL_BLUE_SIZE, + SDL_GL_ALPHA_SIZE, + SDL_GL_BUFFER_SIZE, + SDL_GL_DOUBLEBUFFER, + SDL_GL_DEPTH_SIZE, + SDL_GL_STENCIL_SIZE, + SDL_GL_ACCUM_RED_SIZE, + SDL_GL_ACCUM_GREEN_SIZE, + SDL_GL_ACCUM_BLUE_SIZE, + SDL_GL_ACCUM_ALPHA_SIZE, + SDL_GL_STEREO, + SDL_GL_MULTISAMPLEBUFFERS, + SDL_GL_MULTISAMPLESAMPLES, + SDL_GL_ACCELERATED_VISUAL, + SDL_GL_SWAP_CONTROL +} SDL_GLattr; + +/* flags for SDL_SetPalette() */ +#define SDL_LOGPAL 0x01 +#define SDL_PHYSPAL 0x02 + +/* Function prototypes */ + +/* These functions are used internally, and should not be used unless you + * have a specific need to specify the video driver you want to use. + * You should normally use SDL_Init() or SDL_InitSubSystem(). + * + * SDL_VideoInit() initializes the video subsystem -- sets up a connection + * to the window manager, etc, and determines the current video mode and + * pixel format, but does not initialize a window or graphics mode. + * Note that event handling is activated by this routine. + * + * If you use both sound and video in your application, you need to call + * SDL_Init() before opening the sound device, otherwise under Win32 DirectX, + * you won't be able to set full-screen display modes. + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name, Uint32 flags); +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/* This function fills the given character buffer with the name of the + * video driver, and returns a pointer to it if the video driver has + * been initialized. It returns NULL if no driver has been initialized. + */ +extern DECLSPEC char * SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); + +/* + * This function returns a pointer to the current display surface. + * If SDL is doing format conversion on the display surface, this + * function returns the publicly visible surface, not the real video + * surface. + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetVideoSurface(void); + +/* + * This function returns a read-only pointer to information about the + * video hardware. If this is called before SDL_SetVideoMode(), the 'vfmt' + * member of the returned structure will contain the pixel format of the + * "best" video mode. + */ +extern DECLSPEC const SDL_VideoInfo * SDLCALL SDL_GetVideoInfo(void); + +/* + * Check to see if a particular video mode is supported. + * It returns 0 if the requested mode is not supported under any bit depth, + * or returns the bits-per-pixel of the closest available mode with the + * given width and height. If this bits-per-pixel is different from the + * one used when setting the video mode, SDL_SetVideoMode() will succeed, + * but will emulate the requested bits-per-pixel with a shadow surface. + * + * The arguments to SDL_VideoModeOK() are the same ones you would pass to + * SDL_SetVideoMode() + */ +extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags); + +/* + * Return a pointer to an array of available screen dimensions for the + * given format and video flags, sorted largest to smallest. Returns + * NULL if there are no dimensions available for a particular format, + * or (SDL_Rect **)-1 if any dimension is okay for the given format. + * + * If 'format' is NULL, the mode list will be for the format given + * by SDL_GetVideoInfo()->vfmt + */ +extern DECLSPEC SDL_Rect ** SDLCALL SDL_ListModes(SDL_PixelFormat *format, Uint32 flags); + +/* + * Set up a video mode with the specified width, height and bits-per-pixel. + * + * If 'bpp' is 0, it is treated as the current display bits per pixel. + * + * If SDL_ANYFORMAT is set in 'flags', the SDL library will try to set the + * requested bits-per-pixel, but will return whatever video pixel format is + * available. The default is to emulate the requested pixel format if it + * is not natively available. + * + * If SDL_HWSURFACE is set in 'flags', the video surface will be placed in + * video memory, if possible, and you may have to call SDL_LockSurface() + * in order to access the raw framebuffer. Otherwise, the video surface + * will be created in system memory. + * + * If SDL_ASYNCBLIT is set in 'flags', SDL will try to perform rectangle + * updates asynchronously, but you must always lock before accessing pixels. + * SDL will wait for updates to complete before returning from the lock. + * + * If SDL_HWPALETTE is set in 'flags', the SDL library will guarantee + * that the colors set by SDL_SetColors() will be the colors you get. + * Otherwise, in 8-bit mode, SDL_SetColors() may not be able to set all + * of the colors exactly the way they are requested, and you should look + * at the video surface structure to determine the actual palette. + * If SDL cannot guarantee that the colors you request can be set, + * i.e. if the colormap is shared, then the video surface may be created + * under emulation in system memory, overriding the SDL_HWSURFACE flag. + * + * If SDL_FULLSCREEN is set in 'flags', the SDL library will try to set + * a fullscreen video mode. The default is to create a windowed mode + * if the current graphics system has a window manager. + * If the SDL library is able to set a fullscreen video mode, this flag + * will be set in the surface that is returned. + * + * If SDL_DOUBLEBUF is set in 'flags', the SDL library will try to set up + * two surfaces in video memory and swap between them when you call + * SDL_Flip(). This is usually slower than the normal single-buffering + * scheme, but prevents "tearing" artifacts caused by modifying video + * memory while the monitor is refreshing. It should only be used by + * applications that redraw the entire screen on every update. + * + * If SDL_RESIZABLE is set in 'flags', the SDL library will allow the + * window manager, if any, to resize the window at runtime. When this + * occurs, SDL will send a SDL_VIDEORESIZE event to you application, + * and you must respond to the event by re-calling SDL_SetVideoMode() + * with the requested size (or another size that suits the application). + * + * If SDL_NOFRAME is set in 'flags', the SDL library will create a window + * without any title bar or frame decoration. Fullscreen video modes have + * this flag set automatically. + * + * This function returns the video framebuffer surface, or NULL if it fails. + * + * If you rely on functionality provided by certain video flags, check the + * flags of the returned surface to make sure that functionality is available. + * SDL will fall back to reduced functionality if the exact flags you wanted + * are not available. + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_SetVideoMode + (int width, int height, int bpp, Uint32 flags); + +/* + * Makes sure the given list of rectangles is updated on the given screen. + * If 'x', 'y', 'w' and 'h' are all 0, SDL_UpdateRect will update the entire + * screen. + * These functions should not be called while 'screen' is locked. + */ +extern DECLSPEC void SDLCALL SDL_UpdateRects + (SDL_Surface *screen, int numrects, SDL_Rect *rects); +extern DECLSPEC void SDLCALL SDL_UpdateRect + (SDL_Surface *screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h); + +/* + * On hardware that supports double-buffering, this function sets up a flip + * and returns. The hardware will wait for vertical retrace, and then swap + * video buffers before the next video surface blit or lock will return. + * On hardware that doesn not support double-buffering, this is equivalent + * to calling SDL_UpdateRect(screen, 0, 0, 0, 0); + * The SDL_DOUBLEBUF flag must have been passed to SDL_SetVideoMode() when + * setting the video mode for this function to perform hardware flipping. + * This function returns 0 if successful, or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface *screen); + +/* + * Set the gamma correction for each of the color channels. + * The gamma values range (approximately) between 0.1 and 10.0 + * + * If this function isn't supported directly by the hardware, it will + * be emulated using gamma ramps, if available. If successful, this + * function returns 0, otherwise it returns -1. + */ +extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); + +/* + * Set the gamma translation table for the red, green, and blue channels + * of the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. + * The input is the index into the array, and the output is the 16-bit + * gamma value at that index, scaled to the output color precision. + * + * You may pass NULL for any of the channels to leave it unchanged. + * If the call succeeds, it will return 0. If the display driver or + * hardware does not support gamma translation, or otherwise fails, + * this function will return -1. + */ +extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 *red, const Uint16 *green, const Uint16 *blue); + +/* + * Retrieve the current values of the gamma translation tables. + * + * You must pass in valid pointers to arrays of 256 16-bit quantities. + * Any of the pointers may be NULL to ignore that channel. + * If the call succeeds, it will return 0. If the display driver or + * hardware does not support gamma translation, or otherwise fails, + * this function will return -1. + */ +extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 *red, Uint16 *green, Uint16 *blue); + +/* + * Sets a portion of the colormap for the given 8-bit surface. If 'surface' + * is not a palettized surface, this function does nothing, returning 0. + * If all of the colors were set as passed to SDL_SetColors(), it will + * return 1. If not all the color entries were set exactly as given, + * it will return 0, and you should look at the surface palette to + * determine the actual color palette. + * + * When 'surface' is the surface associated with the current display, the + * display colormap will be updated with the requested colors. If + * SDL_HWPALETTE was set in SDL_SetVideoMode() flags, SDL_SetColors() + * will always return 1, and the palette is guaranteed to be set the way + * you desire, even if the window colormap has to be warped or run under + * emulation. + */ +extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface *surface, + SDL_Color *colors, int firstcolor, int ncolors); + +/* + * Sets a portion of the colormap for a given 8-bit surface. + * 'flags' is one or both of: + * SDL_LOGPAL -- set logical palette, which controls how blits are mapped + * to/from the surface, + * SDL_PHYSPAL -- set physical palette, which controls how pixels look on + * the screen + * Only screens have physical palettes. Separate change of physical/logical + * palettes is only possible if the screen has SDL_HWPALETTE set. + * + * The return value is 1 if all colours could be set as requested, and 0 + * otherwise. + * + * SDL_SetColors() is equivalent to calling this function with + * flags = (SDL_LOGPAL|SDL_PHYSPAL). + */ +extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface *surface, int flags, + SDL_Color *colors, int firstcolor, + int ncolors); + +/* + * Maps an RGB triple to an opaque pixel value for a given pixel format + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGB +(const SDL_PixelFormat * const format, + const Uint8 r, const Uint8 g, const Uint8 b); + +/* + * Maps an RGBA quadruple to a pixel value for a given pixel format + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA +(const SDL_PixelFormat * const format, + const Uint8 r, const Uint8 g, const Uint8 b, const Uint8 a); + +/* + * Maps a pixel value into the RGB components for a given pixel format + */ +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, + Uint8 *r, Uint8 *g, Uint8 *b); + +/* + * Maps a pixel value into the RGBA components for a given pixel format + */ +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, + Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); + +/* + * Allocate and free an RGB surface (must be called after SDL_SetVideoMode) + * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. + * If the depth is greater than 8 bits, the pixel format is set using the + * flags '[RGB]mask'. + * If the function runs out of memory, it will return NULL. + * + * The 'flags' tell what kind of surface to create. + * SDL_SWSURFACE means that the surface should be created in system memory. + * SDL_HWSURFACE means that the surface should be created in video memory, + * with the same format as the display surface. This is useful for surfaces + * that will not change much, to take advantage of hardware acceleration + * when being blitted to the display surface. + * SDL_ASYNCBLIT means that SDL will try to perform asynchronous blits with + * this surface, but you must always lock it before accessing the pixels. + * SDL will wait for current blits to finish before returning from the lock. + * SDL_SRCCOLORKEY indicates that the surface will be used for colorkey blits. + * If the hardware supports acceleration of colorkey blits between + * two surfaces in video memory, SDL will try to place the surface in + * video memory. If this isn't possible or if there is no hardware + * acceleration available, the surface will be placed in system memory. + * SDL_SRCALPHA means that the surface will be used for alpha blits and + * if the hardware supports hardware acceleration of alpha blits between + * two surfaces in video memory, to place the surface in video memory + * if possible, otherwise it will be placed in system memory. + * If the surface is created in video memory, blits will be _much_ faster, + * but the surface format must be identical to the video surface format, + * and the only way to access the pixels member of the surface is to use + * the SDL_LockSurface() and SDL_UnlockSurface() calls. + * If the requested surface actually resides in video memory, SDL_HWSURFACE + * will be set in the flags member of the returned surface. If for some + * reason the surface could not be placed in video memory, it will not have + * the SDL_HWSURFACE flag set, and will be created in system memory instead. + */ +#define SDL_AllocSurface SDL_CreateRGBSurface +extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); +extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, int height, int depth, int pitch, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface *surface); + +/* + * SDL_LockSurface() sets up a surface for directly accessing the pixels. + * Between calls to SDL_LockSurface()/SDL_UnlockSurface(), you can write + * to and read from 'surface->pixels', using the pixel format stored in + * 'surface->format'. Once you are done accessing the surface, you should + * use SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates + * to 0, then you can read and write to the surface at any time, and the + * pixel format of the surface will not change. In particular, if the + * SDL_HWSURFACE flag is not given when calling SDL_SetVideoMode(), you + * will not need to lock the display surface before accessing it. + * + * No operating system or library calls should be made between lock/unlock + * pairs, as critical system locks may be held during this time. + * + * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface *surface); +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); + +/* + * Load a surface from a seekable SDL data source (memory or file.) + * If 'freesrc' is non-zero, the source will be closed after being read. + * Returns the new surface, or NULL if there was an error. + * The new surface should be freed with SDL_FreeSurface(). + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc); + +/* Convenience macro -- load a surface from a file */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/* + * Save a surface to a seekable SDL data source (memory or file.) + * If 'freedst' is non-zero, the source will be closed after being written. + * Returns 0 if successful or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface *surface, SDL_RWops *dst, int freedst); + +/* Convenience macro -- save a surface to a file */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/* + * Sets the color key (transparent pixel) in a blittable surface. + * If 'flag' is SDL_SRCCOLORKEY (optionally OR'd with SDL_RLEACCEL), + * 'key' will be the transparent pixel in the source image of a blit. + * SDL_RLEACCEL requests RLE acceleration for the surface if present, + * and removes RLE acceleration if absent. + * If 'flag' is 0, this function clears any current color key. + * This function returns 0, or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey + (SDL_Surface *surface, Uint32 flag, Uint32 key); + +/* + * This function sets the alpha value for the entire surface, as opposed to + * using the alpha component of each pixel. This value measures the range + * of transparency of the surface, 0 being completely transparent to 255 + * being completely opaque. An 'alpha' value of 255 causes blits to be + * opaque, the source pixels copied to the destination (the default). Note + * that per-surface alpha can be combined with colorkey transparency. + * + * If 'flag' is 0, alpha blending is disabled for the surface. + * If 'flag' is SDL_SRCALPHA, alpha blending is enabled for the surface. + * OR:ing the flag with SDL_RLEACCEL requests RLE acceleration for the + * surface; if SDL_RLEACCEL is not specified, the RLE accel will be removed. + * + * The 'alpha' parameter is ignored for surfaces that have an alpha channel. + */ +extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha); + +/* + * Sets the clipping rectangle for the destination surface in a blit. + * + * If the clip rectangle is NULL, clipping will be disabled. + * If the clip rectangle doesn't intersect the surface, the function will + * return SDL_FALSE and blits will be completely clipped. Otherwise the + * function returns SDL_TRUE and blits to the surface will be clipped to + * the intersection of the surface area and the clipping rectangle. + * + * Note that blits are automatically clipped to the edges of the source + * and destination surfaces. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect); + +/* + * Gets the clipping rectangle for the destination surface in a blit. + * 'rect' must be a pointer to a valid rectangle which will be filled + * with the correct values. + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect); + +/* + * Creates a new surface of the specified format, and then copies and maps + * the given surface to it so the blit of the converted surface will be as + * fast as possible. If this function fails, it returns NULL. + * + * The 'flags' parameter is passed to SDL_CreateRGBSurface() and has those + * semantics. You can also pass SDL_RLEACCEL in the flags parameter and + * SDL will try to RLE accelerate colorkey and alpha blits in the resulting + * surface. + * + * This function is used internally by SDL_DisplayFormat(). + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface + (SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags); + +/* + * This performs a fast blit from the source surface to the destination + * surface. It assumes that the source and destination rectangles are + * the same size. If either 'srcrect' or 'dstrect' are NULL, the entire + * surface (src or dst) is copied. The final blit rectangles are saved + * in 'srcrect' and 'dstrect' after all clipping is performed. + * If the blit is successful, it returns 0, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without alpha and colorkey + * are defined as follows: + * + * RGBA->RGB: + * SDL_SRCALPHA set: + * alpha-blend (using alpha-channel). + * SDL_SRCCOLORKEY ignored. + * SDL_SRCALPHA not set: + * copy RGB. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source colour key, ignoring alpha in the + * comparison. + * + * RGB->RGBA: + * SDL_SRCALPHA set: + * alpha-blend (using the source per-surface alpha value); + * set destination alpha to opaque. + * SDL_SRCALPHA not set: + * copy RGB, set destination alpha to source per-surface alpha value. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source colour key. + * + * RGBA->RGBA: + * SDL_SRCALPHA set: + * alpha-blend (using the source alpha channel) the RGB values; + * leave destination alpha untouched. [Note: is this correct?] + * SDL_SRCCOLORKEY ignored. + * SDL_SRCALPHA not set: + * copy all of RGBA to the destination. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source colour key, ignoring alpha in the + * comparison. + * + * RGB->RGB: + * SDL_SRCALPHA set: + * alpha-blend (using the source per-surface alpha value). + * SDL_SRCALPHA not set: + * copy RGB. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source colour key. + * + * If either of the surfaces were in video memory, and the blit returns -2, + * the video memory was lost, so it should be reloaded with artwork and + * re-blitted: + while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { + while ( SDL_LockSurface(image) < 0 ) + Sleep(10); + -- Write image pixels to image->pixels -- + SDL_UnlockSurface(image); + } + * This happens under DirectX 5.0 when the system switches away from your + * fullscreen application. The lock will also fail until you have access + * to the video memory again. + */ +/* You should call SDL_BlitSurface() unless you know exactly how SDL + blitting works internally and how to use the other blit functions. +*/ +#define SDL_BlitSurface SDL_UpperBlit + +/* This is the public blit function, SDL_BlitSurface(), and it performs + rectangle validation and clipping before passing it to SDL_LowerBlit() +*/ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface *src, SDL_Rect *srcrect, + SDL_Surface *dst, SDL_Rect *dstrect); +/* This is a semi-private blit function and it performs low-level surface + blitting only. +*/ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface *src, SDL_Rect *srcrect, + SDL_Surface *dst, SDL_Rect *dstrect); + +/* + * This function performs a fast fill of the given rectangle with 'color' + * The given rectangle is clipped to the destination surface clip area + * and the final fill rectangle is saved in the passed in pointer. + * If 'dstrect' is NULL, the whole surface will be filled with 'color' + * The color should be a pixel of the format used by the surface, and + * can be generated by the SDL_MapRGB() function. + * This function returns 0 on success, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); + +/* + * This function takes a surface and copies it to a new surface of the + * pixel format and colors of the video framebuffer, suitable for fast + * blitting onto the display surface. It calls SDL_ConvertSurface() + * + * If you want to take advantage of hardware colorkey or alpha blit + * acceleration, you should set the colorkey and alpha value before + * calling this function. + * + * If the conversion fails or runs out of memory, it returns NULL + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormat(SDL_Surface *surface); + +/* + * This function takes a surface and copies it to a new surface of the + * pixel format and colors of the video framebuffer (if possible), + * suitable for fast alpha blitting onto the display surface. + * The new surface will always have an alpha channel. + * + * If you want to take advantage of hardware colorkey or alpha blit + * acceleration, you should set the colorkey and alpha value before + * calling this function. + * + * If the conversion fails or runs out of memory, it returns NULL + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormatAlpha(SDL_Surface *surface); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* YUV video surface overlay functions */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* This function creates a video output overlay + Calling the returned surface an overlay is something of a misnomer because + the contents of the display surface underneath the area where the overlay + is shown is undefined - it may be overwritten with the converted YUV data. +*/ +extern DECLSPEC SDL_Overlay * SDLCALL SDL_CreateYUVOverlay(int width, int height, + Uint32 format, SDL_Surface *display); + +/* Lock an overlay for direct access, and unlock it when you are done */ +extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay *overlay); +extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay *overlay); + +/* Blit a video overlay to the display surface. + The contents of the video surface underneath the blit destination are + not defined. + The width and height of the destination rectangle may be different from + that of the overlay, but currently only 2x scaling is supported. +*/ +extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay *overlay, SDL_Rect *dstrect); + +/* Free a video overlay */ +extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay *overlay); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* OpenGL support functions. */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Dynamically load an OpenGL library, or the default one if path is NULL + * + * If you do this, you need to retrieve all of the GL functions used in + * your program from the dynamic library using SDL_GL_GetProcAddress(). + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/* + * Get the address of a GL function + */ +extern DECLSPEC void * SDLCALL SDL_GL_GetProcAddress(const char* proc); + +/* + * Set an attribute of the OpenGL subsystem before intialization. + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/* + * Get an attribute of the OpenGL subsystem from the windowing + * interface, such as glX. This is of course different from getting + * the values from SDL's internal OpenGL subsystem, which only + * stores the values you request before initialization. + * + * Developers should track the values they pass into SDL_GL_SetAttribute + * themselves if they want to retrieve these values. + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int* value); + +/* + * Swap the OpenGL buffers, if double-buffering is supported. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void); + +/* + * Internal functions that should not be called unless you have read + * and understood the source code for these functions. + */ +extern DECLSPEC void SDLCALL SDL_GL_UpdateRects(int numrects, SDL_Rect* rects); +extern DECLSPEC void SDLCALL SDL_GL_Lock(void); +extern DECLSPEC void SDLCALL SDL_GL_Unlock(void); + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* These functions allow interaction with the window manager, if any. */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Sets/Gets the title and icon text of the display window (UTF-8 encoded) + */ +extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title, const char *icon); +extern DECLSPEC void SDLCALL SDL_WM_GetCaption(char **title, char **icon); + +/* + * Sets the icon for the display window. + * This function must be called before the first call to SDL_SetVideoMode(). + * It takes an icon surface, and a mask in MSB format. + * If 'mask' is NULL, the entire icon surface will be used as the icon. + */ +extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); + +/* + * This function iconifies the window, and returns 1 if it succeeded. + * If the function succeeds, it generates an SDL_APPACTIVE loss event. + * This function is a noop and returns 0 in non-windowed environments. + */ +extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); + +/* + * Toggle fullscreen mode without changing the contents of the screen. + * If the display surface does not require locking before accessing + * the pixel information, then the memory pointers will not change. + * + * If this function was able to toggle fullscreen mode (change from + * running in a window to fullscreen, or vice-versa), it will return 1. + * If it is not implemented, or fails, it returns 0. + * + * The next call to SDL_SetVideoMode() will set the mode fullscreen + * attribute based on the flags parameter - if SDL_FULLSCREEN is not + * set, then the display will be windowed by default where supported. + * + * This is currently only implemented in the X11 video driver. + */ +extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface *surface); + +/* + * This function allows you to set and query the input grab state of + * the application. It returns the new input grab state. + */ +typedef enum { + SDL_GRAB_QUERY = -1, + SDL_GRAB_OFF = 0, + SDL_GRAB_ON = 1, + SDL_GRAB_FULLSCREEN /* Used internally */ +} SDL_GrabMode; +/* + * Grabbing means that the mouse is confined to the application window, + * and nearly all keyboard input is passed directly to the application, + * and not interpreted by a window manager, if any. + */ +extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode); + +/* Not in public API at the moment - do not use! */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface *src, SDL_Rect *srcrect, + SDL_Surface *dst, SDL_Rect *dstrect); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_video_h */ diff --git a/Externals/SDL/Include_1.2/close_code.h b/Externals/SDL/Include_1.2/close_code.h index ecfd0d0d66..afbb65047c 100644 --- a/Externals/SDL/Include_1.2/close_code.h +++ b/Externals/SDL/Include_1.2/close_code.h @@ -1,41 +1,41 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2004 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file reverses the effects of begin_code.h and should be included - after you finish any function and structure declarations in your headers -*/ - -#undef _begin_code_h - -/* Reset structure packing at previous byte alignment */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#if (defined(__MWERKS__) && defined(__MACOS__)) -#pragma options align=reset -#pragma enumsalwaysint reset -#else -#pragma pack(pop) -#endif -#endif /* Compiler needs structure packing set */ - +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2004 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* This file reverses the effects of begin_code.h and should be included + after you finish any function and structure declarations in your headers +*/ + +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#if (defined(__MWERKS__) && defined(__MACOS__)) +#pragma options align=reset +#pragma enumsalwaysint reset +#else +#pragma pack(pop) +#endif +#endif /* Compiler needs structure packing set */ + diff --git a/Externals/SFML/include/SFML/Config.hpp b/Externals/SFML/include/SFML/Config.hpp index 84ec60f9fe..63ff46c421 100644 --- a/Externals/SFML/include/SFML/Config.hpp +++ b/Externals/SFML/include/SFML/Config.hpp @@ -1,165 +1,165 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_CONFIG_HPP -#define SFML_CONFIG_HPP - -//////////////////////////////////////////////////////////// -// Identify the operating system -//////////////////////////////////////////////////////////// -#if defined(_WIN32) || defined(__WIN32__) - - // Windows - #define SFML_SYSTEM_WINDOWS - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN - #endif - #ifndef NOMINMAX - #define NOMINMAX - #endif - -#elif defined(linux) || defined(__linux) - - // Linux - #define SFML_SYSTEM_LINUX - -#elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh) - - // MacOS - #define SFML_SYSTEM_MACOS - -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - - // FreeBSD - #define SFML_SYSTEM_FREEBSD - -#else - - // Unsupported system - #error This operating system is not supported by SFML library - -#endif - - -//////////////////////////////////////////////////////////// -// Define a portable debug macro -//////////////////////////////////////////////////////////// -#if !defined(NDEBUG) - - #define SFML_DEBUG - -#endif - - -//////////////////////////////////////////////////////////// -// Define portable import / export macros -//////////////////////////////////////////////////////////// -#if defined(SFML_SYSTEM_WINDOWS) - - #ifdef SFML_DYNAMIC - - // Windows platforms - #ifdef SFML_EXPORTS - - // From DLL side, we must export - #define SFML_API __declspec(dllexport) - - #else - - // From client application side, we must import - #define SFML_API __declspec(dllimport) - - #endif - - // For Visual C++ compilers, we also need to turn off this annoying C4251 warning. - // You can read lots ot different things about it, but the point is the code will - // just work fine, and so the simplest way to get rid of this warning is to disable it - #ifdef _MSC_VER - - #pragma warning(disable : 4251) - - #endif - - #else - - // No specific directive needed for static build - #define SFML_API - - #endif - -#else - - // Other platforms don't need to define anything - #define SFML_API - -#endif - - -//////////////////////////////////////////////////////////// -// Define portable fixed-size types -//////////////////////////////////////////////////////////// -#include - -namespace sf -{ - // 8 bits integer types - #if UCHAR_MAX == 0xFF - typedef signed char Int8; - typedef unsigned char Uint8; - #else - #error No 8 bits integer type for this platform - #endif - - // 16 bits integer types - #if USHRT_MAX == 0xFFFF - typedef signed short Int16; - typedef unsigned short Uint16; - #elif UINT_MAX == 0xFFFF - typedef signed int Int16; - typedef unsigned int Uint16; - #elif ULONG_MAX == 0xFFFF - typedef signed long Int16; - typedef unsigned long Uint16; - #else - #error No 16 bits integer type for this platform - #endif - - // 32 bits integer types - #if USHRT_MAX == 0xFFFFFFFF - typedef signed short Int32; - typedef unsigned short Uint32; - #elif UINT_MAX == 0xFFFFFFFF - typedef signed int Int32; - typedef unsigned int Uint32; - #elif ULONG_MAX == 0xFFFFFFFF - typedef signed long Int32; - typedef unsigned long Uint32; - #else - #error No 32 bits integer type for this platform - #endif - -} // namespace sf - - -#endif // SFML_CONFIG_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONFIG_HPP +#define SFML_CONFIG_HPP + +//////////////////////////////////////////////////////////// +// Identify the operating system +//////////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(__WIN32__) + + // Windows + #define SFML_SYSTEM_WINDOWS + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef NOMINMAX + #define NOMINMAX + #endif + +#elif defined(linux) || defined(__linux) + + // Linux + #define SFML_SYSTEM_LINUX + +#elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh) + + // MacOS + #define SFML_SYSTEM_MACOS + +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + + // FreeBSD + #define SFML_SYSTEM_FREEBSD + +#else + + // Unsupported system + #error This operating system is not supported by SFML library + +#endif + + +//////////////////////////////////////////////////////////// +// Define a portable debug macro +//////////////////////////////////////////////////////////// +#if !defined(NDEBUG) + + #define SFML_DEBUG + +#endif + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + #ifdef SFML_DYNAMIC + + // Windows platforms + #ifdef SFML_EXPORTS + + // From DLL side, we must export + #define SFML_API __declspec(dllexport) + + #else + + // From client application side, we must import + #define SFML_API __declspec(dllimport) + + #endif + + // For Visual C++ compilers, we also need to turn off this annoying C4251 warning. + // You can read lots ot different things about it, but the point is the code will + // just work fine, and so the simplest way to get rid of this warning is to disable it + #ifdef _MSC_VER + + #pragma warning(disable : 4251) + + #endif + + #else + + // No specific directive needed for static build + #define SFML_API + + #endif + +#else + + // Other platforms don't need to define anything + #define SFML_API + +#endif + + +//////////////////////////////////////////////////////////// +// Define portable fixed-size types +//////////////////////////////////////////////////////////// +#include + +namespace sf +{ + // 8 bits integer types + #if UCHAR_MAX == 0xFF + typedef signed char Int8; + typedef unsigned char Uint8; + #else + #error No 8 bits integer type for this platform + #endif + + // 16 bits integer types + #if USHRT_MAX == 0xFFFF + typedef signed short Int16; + typedef unsigned short Uint16; + #elif UINT_MAX == 0xFFFF + typedef signed int Int16; + typedef unsigned int Uint16; + #elif ULONG_MAX == 0xFFFF + typedef signed long Int16; + typedef unsigned long Uint16; + #else + #error No 16 bits integer type for this platform + #endif + + // 32 bits integer types + #if USHRT_MAX == 0xFFFFFFFF + typedef signed short Int32; + typedef unsigned short Uint32; + #elif UINT_MAX == 0xFFFFFFFF + typedef signed int Int32; + typedef unsigned int Uint32; + #elif ULONG_MAX == 0xFFFFFFFF + typedef signed long Int32; + typedef unsigned long Uint32; + #else + #error No 32 bits integer type for this platform + #endif + +} // namespace sf + + +#endif // SFML_CONFIG_HPP diff --git a/Externals/SFML/include/SFML/Network.hpp b/Externals/SFML/include/SFML/Network.hpp index 6ec13d3535..b0ca47d2b1 100644 --- a/Externals/SFML/include/SFML/Network.hpp +++ b/Externals/SFML/include/SFML/Network.hpp @@ -1,42 +1,42 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_NETWORK_HPP -#define SFML_NETWORK_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include -#include - - -#endif // SFML_NETWORK_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NETWORK_HPP +#define SFML_NETWORK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_NETWORK_HPP diff --git a/Externals/SFML/include/SFML/Network/Ftp.hpp b/Externals/SFML/include/SFML/Network/Ftp.hpp index f2f1bd33d1..efc3a819b7 100644 --- a/Externals/SFML/include/SFML/Network/Ftp.hpp +++ b/Externals/SFML/include/SFML/Network/Ftp.hpp @@ -1,448 +1,448 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_FTP_HPP -#define SFML_FTP_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include - - -namespace sf -{ -class IPAddress; - -//////////////////////////////////////////////////////////// -/// This class provides methods for manipulating the FTP -/// protocol (described in RFC 959). -/// It provides easy access and transfers to remote -/// directories and files on a FTP server -//////////////////////////////////////////////////////////// -class SFML_API Ftp : NonCopyable -{ -public : - - //////////////////////////////////////////////////////////// - /// Enumeration of transfer modes - //////////////////////////////////////////////////////////// - enum TransferMode - { - Binary, ///< Binary mode (file is transfered as a sequence of bytes) - Ascii, ///< Text mode using ASCII encoding - Ebcdic ///< Text mode using EBCDIC encoding - }; - - //////////////////////////////////////////////////////////// - /// This class wraps a FTP response, which is basically : - /// - a status code - /// - a message - //////////////////////////////////////////////////////////// - class SFML_API Response - { - public : - - //////////////////////////////////////////////////////////// - /// Enumerate all the valid status codes returned in - /// a FTP response - //////////////////////////////////////////////////////////// - enum Status - { - // 1xx: the requested action is being initiated, - // expect another reply before proceeding with a new command - RestartMarkerReply = 110, ///< Restart marker reply - ServiceReadySoon = 120, ///< Service ready in N minutes - DataConnectionAlreadyOpened = 125, ///< Data connection already opened, transfer starting - OpeningDataConnection = 150, ///< File status ok, about to open data connection - - // 2xx: the requested action has been successfully completed - Ok = 200, ///< Command ok - PointlessCommand = 202, ///< Command not implemented - SystemStatus = 211, ///< System status, or system help reply - DirectoryStatus = 212, ///< Directory status - FileStatus = 213, ///< File status - HelpMessage = 214, ///< Help message - SystemType = 215, ///< NAME system type, where NAME is an official system name from the list in the Assigned Numbers document - ServiceReady = 220, ///< Service ready for new user - ClosingConnection = 221, ///< Service closing control connection - DataConnectionOpened = 225, ///< Data connection open, no transfer in progress - ClosingDataConnection = 226, ///< Closing data connection, requested file action successful - EnteringPassiveMode = 227, ///< Entering passive mode - LoggedIn = 230, ///< User logged in, proceed. Logged out if appropriate - FileActionOk = 250, ///< Requested file action ok - DirectoryOk = 257, ///< PATHNAME created - - // 3xx: the command has been accepted, but the requested action - // is dormant, pending receipt of further information - NeedPassword = 331, ///< User name ok, need password - NeedAccountToLogIn = 332, ///< Need account for login - NeedInformation = 350, ///< Requested file action pending further information - - // 4xx: the command was not accepted and the requested action did not take place, - // but the error condition is temporary and the action may be requested again - ServiceUnavailable = 421, ///< Service not available, closing control connection - DataConnectionUnavailable = 425, ///< Can't open data connection - TransferAborted = 426, ///< Connection closed, transfer aborted - FileActionAborted = 450, ///< Requested file action not taken - LocalError = 451, ///< Requested action aborted, local error in processing - InsufficientStorageSpace = 452, ///< Requested action not taken; insufficient storage space in system, file unavailable - - // 5xx: the command was not accepted and - // the requested action did not take place - CommandUnknown = 500, ///< Syntax error, command unrecognized - ParametersUnknown = 501, ///< Syntax error in parameters or arguments - CommandNotImplemented = 502, ///< Command not implemented - BadCommandSequence = 503, ///< Bad sequence of commands - ParameterNotImplemented = 504, ///< Command not implemented for that parameter - NotLoggedIn = 530, ///< Not logged in - NeedAccountToStore = 532, ///< Need account for storing files - FileUnavailable = 550, ///< Requested action not taken, file unavailable - PageTypeUnknown = 551, ///< Requested action aborted, page type unknown - NotEnoughMemory = 552, ///< Requested file action aborted, exceeded storage allocation - FilenameNotAllowed = 553, ///< Requested action not taken, file name not allowed - - // 10xx: SFML custom codes - InvalidResponse = 1000, ///< Response is not a valid FTP one - ConnectionFailed = 1001, ///< Connection with server failed - ConnectionClosed = 1002, ///< Connection with server closed - InvalidFile = 1003 ///< Invalid file to upload / download - }; - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - /// \param Code : Response status code (InvalidResponse by default) - /// \param Message : Response message (empty by default) - /// - //////////////////////////////////////////////////////////// - Response(Status Code = InvalidResponse, const std::string& Message = ""); - - //////////////////////////////////////////////////////////// - /// Convenience function to check if the response status code - /// means a success - /// - /// \return True if status is success (code < 400) - /// - //////////////////////////////////////////////////////////// - bool IsOk() const; - - //////////////////////////////////////////////////////////// - /// Get the response status code - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Status GetStatus() const; - - //////////////////////////////////////////////////////////// - /// Get the full message contained in the response - /// - /// \return The response message - /// - //////////////////////////////////////////////////////////// - const std::string& GetMessage() const; - - private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - Status myStatus; ///< Status code returned from the server - std::string myMessage; ///< Last message received from the server - }; - - //////////////////////////////////////////////////////////// - /// Specialization of FTP response returning a directory - //////////////////////////////////////////////////////////// - class SFML_API DirectoryResponse : public Response - { - public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - /// \param Resp : Source response - /// - //////////////////////////////////////////////////////////// - DirectoryResponse(Response Resp); - - //////////////////////////////////////////////////////////// - /// Get the directory returned in the response - /// - /// \return Directory name - /// - //////////////////////////////////////////////////////////// - const std::string& GetDirectory() const; - - private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - std::string myDirectory; ///< Directory extracted from the response message - }; - - - //////////////////////////////////////////////////////////// - /// Specialization of FTP response returning a filename lisiting - //////////////////////////////////////////////////////////// - class SFML_API ListingResponse : public Response - { - public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - /// \param Resp : Source response - /// \param Data : Data containing the raw listing - /// - //////////////////////////////////////////////////////////// - ListingResponse(Response Resp, const std::vector& Data); - - //////////////////////////////////////////////////////////// - /// Get the number of filenames in the listing - /// - /// \return Total number of filenames - /// - //////////////////////////////////////////////////////////// - std::size_t GetCount() const; - - //////////////////////////////////////////////////////////// - /// Get the Index-th filename in the directory - /// - /// \param Index : Index of the filename to get - /// - /// \return Index-th filename - /// - //////////////////////////////////////////////////////////// - const std::string& GetFilename(std::size_t Index) const; - - private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - std::vector myFilenames; ///< Filenames extracted from the data - }; - - - //////////////////////////////////////////////////////////// - /// Destructor -- close the connection with the server - /// - //////////////////////////////////////////////////////////// - ~Ftp(); - - //////////////////////////////////////////////////////////// - /// Connect to the specified FTP server - /// - /// \param Server : FTP server to connect to - /// \param Port : Port used for connection (21 by default, standard FTP port) - /// \param Timeout : Maximum time to wait, in seconds (0 by default, means no timeout) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Connect(const IPAddress& Server, unsigned short Port = 21, float Timeout = 0.f); - - //////////////////////////////////////////////////////////// - /// Log in using anonymous account - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Login(); - - //////////////////////////////////////////////////////////// - /// Log in using a username and a password - /// - /// \param UserName : User name - /// \param Password : Password - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Login(const std::string& UserName, const std::string& Password); - - //////////////////////////////////////////////////////////// - /// Close the connection with FTP server - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Disconnect(); - - //////////////////////////////////////////////////////////// - /// Send a null command just to prevent from being disconnected - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response KeepAlive(); - - //////////////////////////////////////////////////////////// - /// Get the current working directory - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - DirectoryResponse GetWorkingDirectory(); - - //////////////////////////////////////////////////////////// - /// Get the contents of the given directory - /// (subdirectories and files) - /// - /// \param Directory : Directory to list ("" by default, the current one) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - ListingResponse GetDirectoryListing(const std::string& Directory = ""); - - //////////////////////////////////////////////////////////// - /// Change the current working directory - /// - /// \param Directory : New directory, relative to the current one - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response ChangeDirectory(const std::string& Directory); - - //////////////////////////////////////////////////////////// - /// Go to the parent directory of the current one - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response ParentDirectory(); - - //////////////////////////////////////////////////////////// - /// Create a new directory - /// - /// \param Name : Name of the directory to create - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response MakeDirectory(const std::string& Name); - - //////////////////////////////////////////////////////////// - /// Remove an existing directory - /// - /// \param Name : Name of the directory to remove - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response DeleteDirectory(const std::string& Name); - - //////////////////////////////////////////////////////////// - /// Rename a file - /// - /// \param File : File to rename - /// \param NewName : New name - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response RenameFile(const std::string& File, const std::string& NewName); - - //////////////////////////////////////////////////////////// - /// Remove an existing file - /// - /// \param Name : File to remove - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response DeleteFile(const std::string& Name); - - //////////////////////////////////////////////////////////// - /// Download a file from the server - /// - /// \param DistantFile : Path of the distant file to download - /// \param DestPath : Where to put to file on the local computer - /// \param Mode : Transfer mode (binary by default) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Download(const std::string& DistantFile, const std::string& DestPath, TransferMode Mode = Binary); - - //////////////////////////////////////////////////////////// - /// Upload a file to the server - /// - /// \param LocalFile : Path of the local file to upload - /// \param DestPath : Where to put to file on the server - /// \param Mode : Transfer mode (binary by default) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response Upload(const std::string& LocalFile, const std::string& DestPath, TransferMode Mode = Binary); - -private : - - //////////////////////////////////////////////////////////// - /// Send a command to the FTP server - /// - /// \param Command : Command to send - /// \param Parameter : Command parameter ("" by default) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response SendCommand(const std::string& Command, const std::string& Parameter = ""); - - //////////////////////////////////////////////////////////// - /// Receive a response from the server - /// (usually after a command has been sent) - /// - /// \return Server response to the request - /// - //////////////////////////////////////////////////////////// - Response GetResponse(); - - //////////////////////////////////////////////////////////// - /// Utility class for exchanging datas with the server - /// on the data channel - //////////////////////////////////////////////////////////// - class DataChannel; - - friend class DataChannel; - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - SocketTCP myCommandSocket; ///< Socket holding the control connection with the server -}; - -} // namespace sf - - -#endif // SFML_FTP_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_FTP_HPP +#define SFML_FTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +class IPAddress; + +//////////////////////////////////////////////////////////// +/// This class provides methods for manipulating the FTP +/// protocol (described in RFC 959). +/// It provides easy access and transfers to remote +/// directories and files on a FTP server +//////////////////////////////////////////////////////////// +class SFML_API Ftp : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// Enumeration of transfer modes + //////////////////////////////////////////////////////////// + enum TransferMode + { + Binary, ///< Binary mode (file is transfered as a sequence of bytes) + Ascii, ///< Text mode using ASCII encoding + Ebcdic ///< Text mode using EBCDIC encoding + }; + + //////////////////////////////////////////////////////////// + /// This class wraps a FTP response, which is basically : + /// - a status code + /// - a message + //////////////////////////////////////////////////////////// + class SFML_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// Enumerate all the valid status codes returned in + /// a FTP response + //////////////////////////////////////////////////////////// + enum Status + { + // 1xx: the requested action is being initiated, + // expect another reply before proceeding with a new command + RestartMarkerReply = 110, ///< Restart marker reply + ServiceReadySoon = 120, ///< Service ready in N minutes + DataConnectionAlreadyOpened = 125, ///< Data connection already opened, transfer starting + OpeningDataConnection = 150, ///< File status ok, about to open data connection + + // 2xx: the requested action has been successfully completed + Ok = 200, ///< Command ok + PointlessCommand = 202, ///< Command not implemented + SystemStatus = 211, ///< System status, or system help reply + DirectoryStatus = 212, ///< Directory status + FileStatus = 213, ///< File status + HelpMessage = 214, ///< Help message + SystemType = 215, ///< NAME system type, where NAME is an official system name from the list in the Assigned Numbers document + ServiceReady = 220, ///< Service ready for new user + ClosingConnection = 221, ///< Service closing control connection + DataConnectionOpened = 225, ///< Data connection open, no transfer in progress + ClosingDataConnection = 226, ///< Closing data connection, requested file action successful + EnteringPassiveMode = 227, ///< Entering passive mode + LoggedIn = 230, ///< User logged in, proceed. Logged out if appropriate + FileActionOk = 250, ///< Requested file action ok + DirectoryOk = 257, ///< PATHNAME created + + // 3xx: the command has been accepted, but the requested action + // is dormant, pending receipt of further information + NeedPassword = 331, ///< User name ok, need password + NeedAccountToLogIn = 332, ///< Need account for login + NeedInformation = 350, ///< Requested file action pending further information + + // 4xx: the command was not accepted and the requested action did not take place, + // but the error condition is temporary and the action may be requested again + ServiceUnavailable = 421, ///< Service not available, closing control connection + DataConnectionUnavailable = 425, ///< Can't open data connection + TransferAborted = 426, ///< Connection closed, transfer aborted + FileActionAborted = 450, ///< Requested file action not taken + LocalError = 451, ///< Requested action aborted, local error in processing + InsufficientStorageSpace = 452, ///< Requested action not taken; insufficient storage space in system, file unavailable + + // 5xx: the command was not accepted and + // the requested action did not take place + CommandUnknown = 500, ///< Syntax error, command unrecognized + ParametersUnknown = 501, ///< Syntax error in parameters or arguments + CommandNotImplemented = 502, ///< Command not implemented + BadCommandSequence = 503, ///< Bad sequence of commands + ParameterNotImplemented = 504, ///< Command not implemented for that parameter + NotLoggedIn = 530, ///< Not logged in + NeedAccountToStore = 532, ///< Need account for storing files + FileUnavailable = 550, ///< Requested action not taken, file unavailable + PageTypeUnknown = 551, ///< Requested action aborted, page type unknown + NotEnoughMemory = 552, ///< Requested file action aborted, exceeded storage allocation + FilenameNotAllowed = 553, ///< Requested action not taken, file name not allowed + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid FTP one + ConnectionFailed = 1001, ///< Connection with server failed + ConnectionClosed = 1002, ///< Connection with server closed + InvalidFile = 1003 ///< Invalid file to upload / download + }; + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + /// \param Code : Response status code (InvalidResponse by default) + /// \param Message : Response message (empty by default) + /// + //////////////////////////////////////////////////////////// + Response(Status Code = InvalidResponse, const std::string& Message = ""); + + //////////////////////////////////////////////////////////// + /// Convenience function to check if the response status code + /// means a success + /// + /// \return True if status is success (code < 400) + /// + //////////////////////////////////////////////////////////// + bool IsOk() const; + + //////////////////////////////////////////////////////////// + /// Get the response status code + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Status GetStatus() const; + + //////////////////////////////////////////////////////////// + /// Get the full message contained in the response + /// + /// \return The response message + /// + //////////////////////////////////////////////////////////// + const std::string& GetMessage() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Status myStatus; ///< Status code returned from the server + std::string myMessage; ///< Last message received from the server + }; + + //////////////////////////////////////////////////////////// + /// Specialization of FTP response returning a directory + //////////////////////////////////////////////////////////// + class SFML_API DirectoryResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + /// \param Resp : Source response + /// + //////////////////////////////////////////////////////////// + DirectoryResponse(Response Resp); + + //////////////////////////////////////////////////////////// + /// Get the directory returned in the response + /// + /// \return Directory name + /// + //////////////////////////////////////////////////////////// + const std::string& GetDirectory() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::string myDirectory; ///< Directory extracted from the response message + }; + + + //////////////////////////////////////////////////////////// + /// Specialization of FTP response returning a filename lisiting + //////////////////////////////////////////////////////////// + class SFML_API ListingResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + /// \param Resp : Source response + /// \param Data : Data containing the raw listing + /// + //////////////////////////////////////////////////////////// + ListingResponse(Response Resp, const std::vector& Data); + + //////////////////////////////////////////////////////////// + /// Get the number of filenames in the listing + /// + /// \return Total number of filenames + /// + //////////////////////////////////////////////////////////// + std::size_t GetCount() const; + + //////////////////////////////////////////////////////////// + /// Get the Index-th filename in the directory + /// + /// \param Index : Index of the filename to get + /// + /// \return Index-th filename + /// + //////////////////////////////////////////////////////////// + const std::string& GetFilename(std::size_t Index) const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector myFilenames; ///< Filenames extracted from the data + }; + + + //////////////////////////////////////////////////////////// + /// Destructor -- close the connection with the server + /// + //////////////////////////////////////////////////////////// + ~Ftp(); + + //////////////////////////////////////////////////////////// + /// Connect to the specified FTP server + /// + /// \param Server : FTP server to connect to + /// \param Port : Port used for connection (21 by default, standard FTP port) + /// \param Timeout : Maximum time to wait, in seconds (0 by default, means no timeout) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Connect(const IPAddress& Server, unsigned short Port = 21, float Timeout = 0.f); + + //////////////////////////////////////////////////////////// + /// Log in using anonymous account + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Login(); + + //////////////////////////////////////////////////////////// + /// Log in using a username and a password + /// + /// \param UserName : User name + /// \param Password : Password + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Login(const std::string& UserName, const std::string& Password); + + //////////////////////////////////////////////////////////// + /// Close the connection with FTP server + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Disconnect(); + + //////////////////////////////////////////////////////////// + /// Send a null command just to prevent from being disconnected + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response KeepAlive(); + + //////////////////////////////////////////////////////////// + /// Get the current working directory + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + DirectoryResponse GetWorkingDirectory(); + + //////////////////////////////////////////////////////////// + /// Get the contents of the given directory + /// (subdirectories and files) + /// + /// \param Directory : Directory to list ("" by default, the current one) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + ListingResponse GetDirectoryListing(const std::string& Directory = ""); + + //////////////////////////////////////////////////////////// + /// Change the current working directory + /// + /// \param Directory : New directory, relative to the current one + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response ChangeDirectory(const std::string& Directory); + + //////////////////////////////////////////////////////////// + /// Go to the parent directory of the current one + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response ParentDirectory(); + + //////////////////////////////////////////////////////////// + /// Create a new directory + /// + /// \param Name : Name of the directory to create + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response MakeDirectory(const std::string& Name); + + //////////////////////////////////////////////////////////// + /// Remove an existing directory + /// + /// \param Name : Name of the directory to remove + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response DeleteDirectory(const std::string& Name); + + //////////////////////////////////////////////////////////// + /// Rename a file + /// + /// \param File : File to rename + /// \param NewName : New name + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response RenameFile(const std::string& File, const std::string& NewName); + + //////////////////////////////////////////////////////////// + /// Remove an existing file + /// + /// \param Name : File to remove + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response DeleteFile(const std::string& Name); + + //////////////////////////////////////////////////////////// + /// Download a file from the server + /// + /// \param DistantFile : Path of the distant file to download + /// \param DestPath : Where to put to file on the local computer + /// \param Mode : Transfer mode (binary by default) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Download(const std::string& DistantFile, const std::string& DestPath, TransferMode Mode = Binary); + + //////////////////////////////////////////////////////////// + /// Upload a file to the server + /// + /// \param LocalFile : Path of the local file to upload + /// \param DestPath : Where to put to file on the server + /// \param Mode : Transfer mode (binary by default) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response Upload(const std::string& LocalFile, const std::string& DestPath, TransferMode Mode = Binary); + +private : + + //////////////////////////////////////////////////////////// + /// Send a command to the FTP server + /// + /// \param Command : Command to send + /// \param Parameter : Command parameter ("" by default) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response SendCommand(const std::string& Command, const std::string& Parameter = ""); + + //////////////////////////////////////////////////////////// + /// Receive a response from the server + /// (usually after a command has been sent) + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response GetResponse(); + + //////////////////////////////////////////////////////////// + /// Utility class for exchanging datas with the server + /// on the data channel + //////////////////////////////////////////////////////////// + class DataChannel; + + friend class DataChannel; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketTCP myCommandSocket; ///< Socket holding the control connection with the server +}; + +} // namespace sf + + +#endif // SFML_FTP_HPP diff --git a/Externals/SFML/include/SFML/Network/Http.hpp b/Externals/SFML/include/SFML/Network/Http.hpp index 54e5c1fccc..137bf97130 100644 --- a/Externals/SFML/include/SFML/Network/Http.hpp +++ b/Externals/SFML/include/SFML/Network/Http.hpp @@ -1,340 +1,340 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_HTTP_HPP -#define SFML_HTTP_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// This class provides methods for manipulating the HTTP -/// protocol (described in RFC 1945). -/// It can connect to a website, get its files, send requests, etc. -//////////////////////////////////////////////////////////// -class SFML_API Http : NonCopyable -{ -public : - - //////////////////////////////////////////////////////////// - /// This class wraps an HTTP request, which is basically : - /// - a header with a method, a target URI, and a set of field/value pairs - /// - an optional body (for POST requests) - //////////////////////////////////////////////////////////// - class SFML_API Request - { - public : - - //////////////////////////////////////////////////////////// - /// Enumerate the available HTTP methods for a request - //////////////////////////////////////////////////////////// - enum Method - { - Get, ///< Request in get mode, standard method to retrieve a page - Post, ///< Request in post mode, usually to send data to a page - Head ///< Request a page's header only - }; - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - /// \param RequestMethod : Method to use for the request (Get by default) - /// \param URI : Target URI ("/" by default -- index page) - /// \param Body : Content of the request's body (empty by default) - /// - //////////////////////////////////////////////////////////// - Request(Method RequestMethod = Get, const std::string& URI = "/", const std::string& Body = ""); - - //////////////////////////////////////////////////////////// - /// Set the value of a field; the field is added if it doesn't exist - /// - /// \param Field : Name of the field to set (case-insensitive) - /// \param Value : Value of the field - /// - //////////////////////////////////////////////////////////// - void SetField(const std::string& Field, const std::string& Value); - - //////////////////////////////////////////////////////////// - /// Set the request method. - /// This parameter is Http::Request::Get by default - /// - /// \param RequestMethod : Method to use for the request - /// - //////////////////////////////////////////////////////////// - void SetMethod(Method RequestMethod); - - //////////////////////////////////////////////////////////// - /// Set the target URI of the request. - /// This parameter is "/" by default - /// - /// \param URI : URI to request, local to the host - /// - //////////////////////////////////////////////////////////// - void SetURI(const std::string& URI); - - //////////////////////////////////////////////////////////// - /// Set the HTTP version of the request. - /// This parameter is 1.0 by default - /// - /// \param Major : Major version number - /// \param Minor : Minor version number - /// - //////////////////////////////////////////////////////////// - void SetHttpVersion(unsigned int Major, unsigned int Minor); - - //////////////////////////////////////////////////////////// - /// Set the body of the request. This parameter is optional and - /// makes sense only for POST requests. - /// This parameter is empty by default - /// - /// \param Body : Content of the request body - /// - //////////////////////////////////////////////////////////// - void SetBody(const std::string& Body); - - private : - - friend class Http; - - //////////////////////////////////////////////////////////// - /// Get the string representation of the request header - /// - /// \return String containing the request - /// - //////////////////////////////////////////////////////////// - std::string ToString() const; - - //////////////////////////////////////////////////////////// - /// Check if the given field has been defined - /// - /// \param Field : Name of the field to check (case-insensitive) - /// - /// \return True if the field exists - /// - //////////////////////////////////////////////////////////// - bool HasField(const std::string& Field) const; - - //////////////////////////////////////////////////////////// - // Types - //////////////////////////////////////////////////////////// - typedef std::map FieldTable; - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - FieldTable myFields; ///< Fields of the header - Method myMethod; ///< Method to use for the request - std::string myURI; ///< Target URI of the request - unsigned int myMajorVersion; ///< Major HTTP version - unsigned int myMinorVersion; ///< Minor HTTP version - std::string myBody; ///< Body of the request - }; - - //////////////////////////////////////////////////////////// - /// This class wraps an HTTP response, which is basically : - /// - a header with a status code and a set of field/value pairs - /// - a body (the content of the requested resource) - //////////////////////////////////////////////////////////// - class SFML_API Response - { - public : - - //////////////////////////////////////////////////////////// - /// Enumerate all the valid status codes returned in - /// a HTTP response - //////////////////////////////////////////////////////////// - enum Status - { - // 2xx: success - Ok = 200, ///< Most common code returned when operation was successful - Created = 201, ///< The resource has successfully been created - Accepted = 202, ///< The request has been accepted, but will be processed later by the server - NoContent = 204, ///< Sent when the server didn't send any data in return - - // 3xx: redirection - MultipleChoices = 300, ///< The requested page can be accessed from several locations - MovedPermanently = 301, ///< The requested page has permanently moved to a new location - MovedTemporarily = 302, ///< The requested page has temporarily moved to a new location - NotModified = 304, ///< For conditionnal requests, means the requested page hasn't changed and doesn't need to be refreshed - - // 4xx: client error - BadRequest = 400, ///< The server couldn't understand the request (syntax error) - Unauthorized = 401, ///< The requested page needs an authentification to be accessed - Forbidden = 403, ///< The requested page cannot be accessed at all, even with authentification - NotFound = 404, ///< The requested page doesn't exist - - // 5xx: server error - InternalServerError = 500, ///< The server encountered an unexpected error - NotImplemented = 501, ///< The server doesn't implement a requested feature - BadGateway = 502, ///< The gateway server has received an error from the source server - ServiceNotAvailable = 503, ///< The server is temporarily unavailable (overloaded, in maintenance, ...) - - // 10xx: SFML custom codes - InvalidResponse = 1000, ///< Response is not a valid HTTP one - ConnectionFailed = 1001 ///< Connection with server failed - }; - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - Response(); - - //////////////////////////////////////////////////////////// - /// Get the value of a field - /// - /// \param Field : Name of the field to get (case-insensitive) - /// - /// \return Value of the field, or empty string if not found - /// - //////////////////////////////////////////////////////////// - const std::string& GetField(const std::string& Field) const; - - //////////////////////////////////////////////////////////// - /// Get the header's status code - /// - /// \return Header's status code - /// - //////////////////////////////////////////////////////////// - Status GetStatus() const; - - //////////////////////////////////////////////////////////// - /// Get the major HTTP version number of the response - /// - /// \return Major version number - /// - //////////////////////////////////////////////////////////// - unsigned int GetMajorHttpVersion() const; - - //////////////////////////////////////////////////////////// - /// Get the major HTTP version number of the response - /// - /// \return Major version number - /// - //////////////////////////////////////////////////////////// - unsigned int GetMinorHttpVersion() const; - - //////////////////////////////////////////////////////////// - /// Get the body of the response. The body can contain : - /// - the requested page (for GET requests) - /// - a response from the server (for POST requests) - /// - nothing (for HEAD requests) - /// - an error message (in case of an error) - /// - /// \return The response body - /// - //////////////////////////////////////////////////////////// - const std::string& GetBody() const; - - private : - - friend class Http; - - //////////////////////////////////////////////////////////// - /// Construct the header from a response string - /// - /// \param Data : Content of the response's header to parse - /// - //////////////////////////////////////////////////////////// - void FromString(const std::string& Data); - - //////////////////////////////////////////////////////////// - // Types - //////////////////////////////////////////////////////////// - typedef std::map FieldTable; - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - FieldTable myFields; ///< Fields of the header - Status myStatus; ///< Status code - unsigned int myMajorVersion; ///< Major HTTP version - unsigned int myMinorVersion; ///< Minor HTTP version - std::string myBody; ///< Body of the response - }; - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - Http(); - - //////////////////////////////////////////////////////////// - /// Construct the Http instance with the target host - /// - /// \param Host : Web server to connect to - /// \param Port : Port to use for connection (0 by default -- use the standard port of the protocol used) - /// - //////////////////////////////////////////////////////////// - Http(const std::string& Host, unsigned short Port = 0); - - //////////////////////////////////////////////////////////// - /// Set the target host - /// - /// \param Host : Web server to connect to - /// \param Port : Port to use for connection (0 by default -- use the standard port of the protocol used) - /// - //////////////////////////////////////////////////////////// - void SetHost(const std::string& Host, unsigned short Port = 0); - - //////////////////////////////////////////////////////////// - /// Send a HTTP request and return the server's response. - /// You must be connected to a host before sending requests. - /// Any missing mandatory header field will be added with an appropriate value. - /// Warning : this function waits for the server's response and may - /// not return instantly; use a thread if you don't want to block your - /// application. - /// - /// \param Req : Request to send - /// \param Timeout : Maximum time to wait, in seconds (0 by default, means no timeout) - /// - /// \return Server's response - /// - //////////////////////////////////////////////////////////// - Response SendRequest(const Request& Req, float Timeout = 0.f); - -private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - SocketTCP myConnection; ///< Connection to the host - IPAddress myHost; ///< Web host address - std::string myHostName; ///< Web host name - unsigned short myPort; ///< Port used for connection with host -}; - -} // namespace sf - - -#endif // SFML_HTTP_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_HTTP_HPP +#define SFML_HTTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// This class provides methods for manipulating the HTTP +/// protocol (described in RFC 1945). +/// It can connect to a website, get its files, send requests, etc. +//////////////////////////////////////////////////////////// +class SFML_API Http : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// This class wraps an HTTP request, which is basically : + /// - a header with a method, a target URI, and a set of field/value pairs + /// - an optional body (for POST requests) + //////////////////////////////////////////////////////////// + class SFML_API Request + { + public : + + //////////////////////////////////////////////////////////// + /// Enumerate the available HTTP methods for a request + //////////////////////////////////////////////////////////// + enum Method + { + Get, ///< Request in get mode, standard method to retrieve a page + Post, ///< Request in post mode, usually to send data to a page + Head ///< Request a page's header only + }; + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + /// \param RequestMethod : Method to use for the request (Get by default) + /// \param URI : Target URI ("/" by default -- index page) + /// \param Body : Content of the request's body (empty by default) + /// + //////////////////////////////////////////////////////////// + Request(Method RequestMethod = Get, const std::string& URI = "/", const std::string& Body = ""); + + //////////////////////////////////////////////////////////// + /// Set the value of a field; the field is added if it doesn't exist + /// + /// \param Field : Name of the field to set (case-insensitive) + /// \param Value : Value of the field + /// + //////////////////////////////////////////////////////////// + void SetField(const std::string& Field, const std::string& Value); + + //////////////////////////////////////////////////////////// + /// Set the request method. + /// This parameter is Http::Request::Get by default + /// + /// \param RequestMethod : Method to use for the request + /// + //////////////////////////////////////////////////////////// + void SetMethod(Method RequestMethod); + + //////////////////////////////////////////////////////////// + /// Set the target URI of the request. + /// This parameter is "/" by default + /// + /// \param URI : URI to request, local to the host + /// + //////////////////////////////////////////////////////////// + void SetURI(const std::string& URI); + + //////////////////////////////////////////////////////////// + /// Set the HTTP version of the request. + /// This parameter is 1.0 by default + /// + /// \param Major : Major version number + /// \param Minor : Minor version number + /// + //////////////////////////////////////////////////////////// + void SetHttpVersion(unsigned int Major, unsigned int Minor); + + //////////////////////////////////////////////////////////// + /// Set the body of the request. This parameter is optional and + /// makes sense only for POST requests. + /// This parameter is empty by default + /// + /// \param Body : Content of the request body + /// + //////////////////////////////////////////////////////////// + void SetBody(const std::string& Body); + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// Get the string representation of the request header + /// + /// \return String containing the request + /// + //////////////////////////////////////////////////////////// + std::string ToString() const; + + //////////////////////////////////////////////////////////// + /// Check if the given field has been defined + /// + /// \param Field : Name of the field to check (case-insensitive) + /// + /// \return True if the field exists + /// + //////////////////////////////////////////////////////////// + bool HasField(const std::string& Field) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable myFields; ///< Fields of the header + Method myMethod; ///< Method to use for the request + std::string myURI; ///< Target URI of the request + unsigned int myMajorVersion; ///< Major HTTP version + unsigned int myMinorVersion; ///< Minor HTTP version + std::string myBody; ///< Body of the request + }; + + //////////////////////////////////////////////////////////// + /// This class wraps an HTTP response, which is basically : + /// - a header with a status code and a set of field/value pairs + /// - a body (the content of the requested resource) + //////////////////////////////////////////////////////////// + class SFML_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// Enumerate all the valid status codes returned in + /// a HTTP response + //////////////////////////////////////////////////////////// + enum Status + { + // 2xx: success + Ok = 200, ///< Most common code returned when operation was successful + Created = 201, ///< The resource has successfully been created + Accepted = 202, ///< The request has been accepted, but will be processed later by the server + NoContent = 204, ///< Sent when the server didn't send any data in return + + // 3xx: redirection + MultipleChoices = 300, ///< The requested page can be accessed from several locations + MovedPermanently = 301, ///< The requested page has permanently moved to a new location + MovedTemporarily = 302, ///< The requested page has temporarily moved to a new location + NotModified = 304, ///< For conditionnal requests, means the requested page hasn't changed and doesn't need to be refreshed + + // 4xx: client error + BadRequest = 400, ///< The server couldn't understand the request (syntax error) + Unauthorized = 401, ///< The requested page needs an authentification to be accessed + Forbidden = 403, ///< The requested page cannot be accessed at all, even with authentification + NotFound = 404, ///< The requested page doesn't exist + + // 5xx: server error + InternalServerError = 500, ///< The server encountered an unexpected error + NotImplemented = 501, ///< The server doesn't implement a requested feature + BadGateway = 502, ///< The gateway server has received an error from the source server + ServiceNotAvailable = 503, ///< The server is temporarily unavailable (overloaded, in maintenance, ...) + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid HTTP one + ConnectionFailed = 1001 ///< Connection with server failed + }; + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + Response(); + + //////////////////////////////////////////////////////////// + /// Get the value of a field + /// + /// \param Field : Name of the field to get (case-insensitive) + /// + /// \return Value of the field, or empty string if not found + /// + //////////////////////////////////////////////////////////// + const std::string& GetField(const std::string& Field) const; + + //////////////////////////////////////////////////////////// + /// Get the header's status code + /// + /// \return Header's status code + /// + //////////////////////////////////////////////////////////// + Status GetStatus() const; + + //////////////////////////////////////////////////////////// + /// Get the major HTTP version number of the response + /// + /// \return Major version number + /// + //////////////////////////////////////////////////////////// + unsigned int GetMajorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// Get the major HTTP version number of the response + /// + /// \return Major version number + /// + //////////////////////////////////////////////////////////// + unsigned int GetMinorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// Get the body of the response. The body can contain : + /// - the requested page (for GET requests) + /// - a response from the server (for POST requests) + /// - nothing (for HEAD requests) + /// - an error message (in case of an error) + /// + /// \return The response body + /// + //////////////////////////////////////////////////////////// + const std::string& GetBody() const; + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// Construct the header from a response string + /// + /// \param Data : Content of the response's header to parse + /// + //////////////////////////////////////////////////////////// + void FromString(const std::string& Data); + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable myFields; ///< Fields of the header + Status myStatus; ///< Status code + unsigned int myMajorVersion; ///< Major HTTP version + unsigned int myMinorVersion; ///< Minor HTTP version + std::string myBody; ///< Body of the response + }; + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + Http(); + + //////////////////////////////////////////////////////////// + /// Construct the Http instance with the target host + /// + /// \param Host : Web server to connect to + /// \param Port : Port to use for connection (0 by default -- use the standard port of the protocol used) + /// + //////////////////////////////////////////////////////////// + Http(const std::string& Host, unsigned short Port = 0); + + //////////////////////////////////////////////////////////// + /// Set the target host + /// + /// \param Host : Web server to connect to + /// \param Port : Port to use for connection (0 by default -- use the standard port of the protocol used) + /// + //////////////////////////////////////////////////////////// + void SetHost(const std::string& Host, unsigned short Port = 0); + + //////////////////////////////////////////////////////////// + /// Send a HTTP request and return the server's response. + /// You must be connected to a host before sending requests. + /// Any missing mandatory header field will be added with an appropriate value. + /// Warning : this function waits for the server's response and may + /// not return instantly; use a thread if you don't want to block your + /// application. + /// + /// \param Req : Request to send + /// \param Timeout : Maximum time to wait, in seconds (0 by default, means no timeout) + /// + /// \return Server's response + /// + //////////////////////////////////////////////////////////// + Response SendRequest(const Request& Req, float Timeout = 0.f); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketTCP myConnection; ///< Connection to the host + IPAddress myHost; ///< Web host address + std::string myHostName; ///< Web host name + unsigned short myPort; ///< Port used for connection with host +}; + +} // namespace sf + + +#endif // SFML_HTTP_HPP diff --git a/Externals/SFML/include/SFML/Network/IPAddress.hpp b/Externals/SFML/include/SFML/Network/IPAddress.hpp index 638dc47889..0e560d9da3 100644 --- a/Externals/SFML/include/SFML/Network/IPAddress.hpp +++ b/Externals/SFML/include/SFML/Network/IPAddress.hpp @@ -1,231 +1,231 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_IPADDRESS_HPP -#define SFML_IPADDRESS_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// IPAddress provides easy manipulation of IP v4 addresses -//////////////////////////////////////////////////////////// -class SFML_API IPAddress -{ -public : - - //////////////////////////////////////////////////////////// - /// Default constructor -- constructs an invalid address - /// - //////////////////////////////////////////////////////////// - IPAddress(); - - //////////////////////////////////////////////////////////// - /// Construct the address from a string - /// - /// \param Address : IP address ("xxx.xxx.xxx.xxx") or network name - /// - //////////////////////////////////////////////////////////// - IPAddress(const std::string& Address); - - //////////////////////////////////////////////////////////// - /// Construct the address from a C-style string ; - /// Needed for implicit conversions from literal strings to IPAddress to work - /// - /// \param Address : IP address ("xxx.xxx.xxx.xxx") or network name - /// - //////////////////////////////////////////////////////////// - IPAddress(const char* Address); - - //////////////////////////////////////////////////////////// - /// Construct the address from 4 bytes - /// - /// \param Byte0 : First byte of the address - /// \param Byte1 : Second byte of the address - /// \param Byte2 : Third byte of the address - /// \param Byte3 : Fourth byte of the address - /// - //////////////////////////////////////////////////////////// - IPAddress(Uint8 Byte0, Uint8 Byte1, Uint8 Byte2, Uint8 Byte3); - - //////////////////////////////////////////////////////////// - /// Construct the address from a 32-bits integer - /// - /// \param Address : 4 bytes of the address packed into a 32-bits integer - /// - //////////////////////////////////////////////////////////// - IPAddress(Uint32 Address); - - //////////////////////////////////////////////////////////// - /// Tell if the address is a valid one - /// - /// \return True if address has a valid syntax - /// - //////////////////////////////////////////////////////////// - bool IsValid() const; - - //////////////////////////////////////////////////////////// - /// Get a string representation of the address - /// - /// \return String representation of the IP address ("xxx.xxx.xxx.xxx") - /// - //////////////////////////////////////////////////////////// - std::string ToString() const; - - //////////////////////////////////////////////////////////// - /// Get an integer representation of the address - /// - /// \return 32-bits integer containing the 4 bytes of the address, in system endianness - /// - //////////////////////////////////////////////////////////// - Uint32 ToInteger() const; - - //////////////////////////////////////////////////////////// - /// Get the computer's local IP address (from the LAN point of view) - /// - /// \return Local IP address - /// - //////////////////////////////////////////////////////////// - static IPAddress GetLocalAddress(); - - //////////////////////////////////////////////////////////// - /// Get the computer's public IP address (from the web point of view). - /// The only way to get a public address is to ask it to a - /// distant website ; as a consequence, this function may be - /// very slow -- use it as few as possible ! - /// - /// \param Timeout : Maximum time to wait, in seconds (0 by default : no timeout) - /// - /// \return Public IP address - /// - //////////////////////////////////////////////////////////// - static IPAddress GetPublicAddress(float Timeout = 0.f); - - //////////////////////////////////////////////////////////// - /// Comparison operator == - /// - /// \param Other : Address to compare - /// - /// \return True if *this == Other - /// - //////////////////////////////////////////////////////////// - bool operator ==(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator != - /// - /// \param Other : Address to compare - /// - /// \return True if *this != Other - /// - //////////////////////////////////////////////////////////// - bool operator !=(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator < - /// - /// \param Other : Address to compare - /// - /// \return True if *this < Other - /// - //////////////////////////////////////////////////////////// - bool operator <(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator > - /// - /// \param Other : Address to compare - /// - /// \return True if *this > Other - /// - //////////////////////////////////////////////////////////// - bool operator >(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator <= - /// - /// \param Other : Address to compare - /// - /// \return True if *this <= Other - /// - //////////////////////////////////////////////////////////// - bool operator <=(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator >= - /// - /// \param Other : Address to compare - /// - /// \return True if *this >= Other - /// - //////////////////////////////////////////////////////////// - bool operator >=(const IPAddress& Other) const; - - //////////////////////////////////////////////////////////// - // Static member data - //////////////////////////////////////////////////////////// - static const IPAddress LocalHost; ///< Local host address (to connect to the same computer) - -private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - Uint32 myAddress; ///< Address stored as an unsigned 32 bits integer -}; - -//////////////////////////////////////////////////////////// -/// Operator >> overload to extract an address from an input stream -/// -/// \param Stream : Input stream -/// \param Address : Address to extract -/// -/// \return Reference to the input stream -/// -//////////////////////////////////////////////////////////// -SFML_API std::istream& operator >>(std::istream& Stream, IPAddress& Address); - -//////////////////////////////////////////////////////////// -/// Operator << overload to print an address to an output stream -/// -/// \param Stream : Output stream -/// \param Address : Address to print -/// -/// \return Reference to the output stream -/// -//////////////////////////////////////////////////////////// -SFML_API std::ostream& operator <<(std::ostream& Stream, const IPAddress& Address); - -} // namespace sf - - -#endif // SFML_IPADDRESS_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_IPADDRESS_HPP +#define SFML_IPADDRESS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// IPAddress provides easy manipulation of IP v4 addresses +//////////////////////////////////////////////////////////// +class SFML_API IPAddress +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor -- constructs an invalid address + /// + //////////////////////////////////////////////////////////// + IPAddress(); + + //////////////////////////////////////////////////////////// + /// Construct the address from a string + /// + /// \param Address : IP address ("xxx.xxx.xxx.xxx") or network name + /// + //////////////////////////////////////////////////////////// + IPAddress(const std::string& Address); + + //////////////////////////////////////////////////////////// + /// Construct the address from a C-style string ; + /// Needed for implicit conversions from literal strings to IPAddress to work + /// + /// \param Address : IP address ("xxx.xxx.xxx.xxx") or network name + /// + //////////////////////////////////////////////////////////// + IPAddress(const char* Address); + + //////////////////////////////////////////////////////////// + /// Construct the address from 4 bytes + /// + /// \param Byte0 : First byte of the address + /// \param Byte1 : Second byte of the address + /// \param Byte2 : Third byte of the address + /// \param Byte3 : Fourth byte of the address + /// + //////////////////////////////////////////////////////////// + IPAddress(Uint8 Byte0, Uint8 Byte1, Uint8 Byte2, Uint8 Byte3); + + //////////////////////////////////////////////////////////// + /// Construct the address from a 32-bits integer + /// + /// \param Address : 4 bytes of the address packed into a 32-bits integer + /// + //////////////////////////////////////////////////////////// + IPAddress(Uint32 Address); + + //////////////////////////////////////////////////////////// + /// Tell if the address is a valid one + /// + /// \return True if address has a valid syntax + /// + //////////////////////////////////////////////////////////// + bool IsValid() const; + + //////////////////////////////////////////////////////////// + /// Get a string representation of the address + /// + /// \return String representation of the IP address ("xxx.xxx.xxx.xxx") + /// + //////////////////////////////////////////////////////////// + std::string ToString() const; + + //////////////////////////////////////////////////////////// + /// Get an integer representation of the address + /// + /// \return 32-bits integer containing the 4 bytes of the address, in system endianness + /// + //////////////////////////////////////////////////////////// + Uint32 ToInteger() const; + + //////////////////////////////////////////////////////////// + /// Get the computer's local IP address (from the LAN point of view) + /// + /// \return Local IP address + /// + //////////////////////////////////////////////////////////// + static IPAddress GetLocalAddress(); + + //////////////////////////////////////////////////////////// + /// Get the computer's public IP address (from the web point of view). + /// The only way to get a public address is to ask it to a + /// distant website ; as a consequence, this function may be + /// very slow -- use it as few as possible ! + /// + /// \param Timeout : Maximum time to wait, in seconds (0 by default : no timeout) + /// + /// \return Public IP address + /// + //////////////////////////////////////////////////////////// + static IPAddress GetPublicAddress(float Timeout = 0.f); + + //////////////////////////////////////////////////////////// + /// Comparison operator == + /// + /// \param Other : Address to compare + /// + /// \return True if *this == Other + /// + //////////////////////////////////////////////////////////// + bool operator ==(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator != + /// + /// \param Other : Address to compare + /// + /// \return True if *this != Other + /// + //////////////////////////////////////////////////////////// + bool operator !=(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator < + /// + /// \param Other : Address to compare + /// + /// \return True if *this < Other + /// + //////////////////////////////////////////////////////////// + bool operator <(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator > + /// + /// \param Other : Address to compare + /// + /// \return True if *this > Other + /// + //////////////////////////////////////////////////////////// + bool operator >(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator <= + /// + /// \param Other : Address to compare + /// + /// \return True if *this <= Other + /// + //////////////////////////////////////////////////////////// + bool operator <=(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator >= + /// + /// \param Other : Address to compare + /// + /// \return True if *this >= Other + /// + //////////////////////////////////////////////////////////// + bool operator >=(const IPAddress& Other) const; + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const IPAddress LocalHost; ///< Local host address (to connect to the same computer) + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Uint32 myAddress; ///< Address stored as an unsigned 32 bits integer +}; + +//////////////////////////////////////////////////////////// +/// Operator >> overload to extract an address from an input stream +/// +/// \param Stream : Input stream +/// \param Address : Address to extract +/// +/// \return Reference to the input stream +/// +//////////////////////////////////////////////////////////// +SFML_API std::istream& operator >>(std::istream& Stream, IPAddress& Address); + +//////////////////////////////////////////////////////////// +/// Operator << overload to print an address to an output stream +/// +/// \param Stream : Output stream +/// \param Address : Address to print +/// +/// \return Reference to the output stream +/// +//////////////////////////////////////////////////////////// +SFML_API std::ostream& operator <<(std::ostream& Stream, const IPAddress& Address); + +} // namespace sf + + +#endif // SFML_IPADDRESS_HPP diff --git a/Externals/SFML/include/SFML/Network/Packet.hpp b/Externals/SFML/include/SFML/Network/Packet.hpp index 9c5463f423..a4af131ae7 100644 --- a/Externals/SFML/include/SFML/Network/Packet.hpp +++ b/Externals/SFML/include/SFML/Network/Packet.hpp @@ -1,187 +1,187 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_PACKET_HPP -#define SFML_PACKET_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// Packet wraps data to send / to receive through the network -//////////////////////////////////////////////////////////// -class SFML_API Packet -{ -public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - Packet(); - - //////////////////////////////////////////////////////////// - /// Virtual destructor - /// - //////////////////////////////////////////////////////////// - virtual ~Packet(); - - //////////////////////////////////////////////////////////// - /// Append data to the end of the packet - /// - /// \param Data : Pointer to the bytes to append - /// \param SizeInBytes : Number of bytes to append - /// - //////////////////////////////////////////////////////////// - void Append(const void* Data, std::size_t SizeInBytes); - - //////////////////////////////////////////////////////////// - /// Clear the packet data - /// - //////////////////////////////////////////////////////////// - void Clear(); - - //////////////////////////////////////////////////////////// - /// Get a pointer to the data contained in the packet - /// Warning : the returned pointer may be invalid after you - /// append data to the packet - /// - /// \return Pointer to the data - /// - //////////////////////////////////////////////////////////// - const char* GetData() const; - - //////////////////////////////////////////////////////////// - /// Get the size of the data contained in the packet - /// - /// \return Data size, in bytes - /// - //////////////////////////////////////////////////////////// - std::size_t GetDataSize() const; - - //////////////////////////////////////////////////////////// - /// Tell if the reading position has reached the end of the packet - /// - /// \return True if all data have been read into the packet - /// - //////////////////////////////////////////////////////////// - bool EndOfPacket() const; - - //////////////////////////////////////////////////////////// - /// Return the validity of packet - /// - /// \return True if last data extraction from packet was successful - /// - //////////////////////////////////////////////////////////// - operator bool() const; - - //////////////////////////////////////////////////////////// - /// Operator >> overloads to extract data from the packet - /// - //////////////////////////////////////////////////////////// - Packet& operator >>(bool& Data); - Packet& operator >>(Int8& Data); - Packet& operator >>(Uint8& Data); - Packet& operator >>(Int16& Data); - Packet& operator >>(Uint16& Data); - Packet& operator >>(Int32& Data); - Packet& operator >>(Uint32& Data); - Packet& operator >>(float& Data); - Packet& operator >>(double& Data); - Packet& operator >>(char* Data); - Packet& operator >>(std::string& Data); - Packet& operator >>(wchar_t* Data); - Packet& operator >>(std::wstring& Data); - - //////////////////////////////////////////////////////////// - /// Operator << overloads to put data into the packet - /// - //////////////////////////////////////////////////////////// - Packet& operator <<(bool Data); - Packet& operator <<(Int8 Data); - Packet& operator <<(Uint8 Data); - Packet& operator <<(Int16 Data); - Packet& operator <<(Uint16 Data); - Packet& operator <<(Int32 Data); - Packet& operator <<(Uint32 Data); - Packet& operator <<(float Data); - Packet& operator <<(double Data); - Packet& operator <<(const char* Data); - Packet& operator <<(const std::string& Data); - Packet& operator <<(const wchar_t* Data); - Packet& operator <<(const std::wstring& Data); - -private : - - friend class SocketTCP; - friend class SocketUDP; - - //////////////////////////////////////////////////////////// - /// Check if the packet can extract a given size of bytes - /// - /// \param Size : Size to check - /// - /// \return True if Size bytes can be read from the packet's data - /// - //////////////////////////////////////////////////////////// - bool CheckSize(std::size_t Size); - - //////////////////////////////////////////////////////////// - /// Called before the packet is sent to the network - /// - /// \param DataSize : Variable to fill with the size of data to send - /// - /// \return Pointer to the array of bytes to send - /// - //////////////////////////////////////////////////////////// - virtual const char* OnSend(std::size_t& DataSize); - - //////////////////////////////////////////////////////////// - /// Called after the packet has been received from the network - /// - /// \param Data : Pointer to the array of received bytes - /// \param DataSize : Size of the array of bytes - /// - //////////////////////////////////////////////////////////// - virtual void OnReceive(const char* Data, std::size_t DataSize); - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - std::vector myData; ///< Data stored in the packet - std::size_t myReadPos; ///< Current reading position in the packet - bool myIsValid; ///< Reading state of the packet -}; - -} // namespace sf - - -#endif // SFML_PACKET_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_PACKET_HPP +#define SFML_PACKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Packet wraps data to send / to receive through the network +//////////////////////////////////////////////////////////// +class SFML_API Packet +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + Packet(); + + //////////////////////////////////////////////////////////// + /// Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Packet(); + + //////////////////////////////////////////////////////////// + /// Append data to the end of the packet + /// + /// \param Data : Pointer to the bytes to append + /// \param SizeInBytes : Number of bytes to append + /// + //////////////////////////////////////////////////////////// + void Append(const void* Data, std::size_t SizeInBytes); + + //////////////////////////////////////////////////////////// + /// Clear the packet data + /// + //////////////////////////////////////////////////////////// + void Clear(); + + //////////////////////////////////////////////////////////// + /// Get a pointer to the data contained in the packet + /// Warning : the returned pointer may be invalid after you + /// append data to the packet + /// + /// \return Pointer to the data + /// + //////////////////////////////////////////////////////////// + const char* GetData() const; + + //////////////////////////////////////////////////////////// + /// Get the size of the data contained in the packet + /// + /// \return Data size, in bytes + /// + //////////////////////////////////////////////////////////// + std::size_t GetDataSize() const; + + //////////////////////////////////////////////////////////// + /// Tell if the reading position has reached the end of the packet + /// + /// \return True if all data have been read into the packet + /// + //////////////////////////////////////////////////////////// + bool EndOfPacket() const; + + //////////////////////////////////////////////////////////// + /// Return the validity of packet + /// + /// \return True if last data extraction from packet was successful + /// + //////////////////////////////////////////////////////////// + operator bool() const; + + //////////////////////////////////////////////////////////// + /// Operator >> overloads to extract data from the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator >>(bool& Data); + Packet& operator >>(Int8& Data); + Packet& operator >>(Uint8& Data); + Packet& operator >>(Int16& Data); + Packet& operator >>(Uint16& Data); + Packet& operator >>(Int32& Data); + Packet& operator >>(Uint32& Data); + Packet& operator >>(float& Data); + Packet& operator >>(double& Data); + Packet& operator >>(char* Data); + Packet& operator >>(std::string& Data); + Packet& operator >>(wchar_t* Data); + Packet& operator >>(std::wstring& Data); + + //////////////////////////////////////////////////////////// + /// Operator << overloads to put data into the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator <<(bool Data); + Packet& operator <<(Int8 Data); + Packet& operator <<(Uint8 Data); + Packet& operator <<(Int16 Data); + Packet& operator <<(Uint16 Data); + Packet& operator <<(Int32 Data); + Packet& operator <<(Uint32 Data); + Packet& operator <<(float Data); + Packet& operator <<(double Data); + Packet& operator <<(const char* Data); + Packet& operator <<(const std::string& Data); + Packet& operator <<(const wchar_t* Data); + Packet& operator <<(const std::wstring& Data); + +private : + + friend class SocketTCP; + friend class SocketUDP; + + //////////////////////////////////////////////////////////// + /// Check if the packet can extract a given size of bytes + /// + /// \param Size : Size to check + /// + /// \return True if Size bytes can be read from the packet's data + /// + //////////////////////////////////////////////////////////// + bool CheckSize(std::size_t Size); + + //////////////////////////////////////////////////////////// + /// Called before the packet is sent to the network + /// + /// \param DataSize : Variable to fill with the size of data to send + /// + /// \return Pointer to the array of bytes to send + /// + //////////////////////////////////////////////////////////// + virtual const char* OnSend(std::size_t& DataSize); + + //////////////////////////////////////////////////////////// + /// Called after the packet has been received from the network + /// + /// \param Data : Pointer to the array of received bytes + /// \param DataSize : Size of the array of bytes + /// + //////////////////////////////////////////////////////////// + virtual void OnReceive(const char* Data, std::size_t DataSize); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector myData; ///< Data stored in the packet + std::size_t myReadPos; ///< Current reading position in the packet + bool myIsValid; ///< Reading state of the packet +}; + +} // namespace sf + + +#endif // SFML_PACKET_HPP diff --git a/Externals/SFML/include/SFML/Network/Selector.hpp b/Externals/SFML/include/SFML/Network/Selector.hpp index 588a72c1cc..83c766eb7c 100644 --- a/Externals/SFML/include/SFML/Network/Selector.hpp +++ b/Externals/SFML/include/SFML/Network/Selector.hpp @@ -1,116 +1,116 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SELECTOR_HPP -#define SFML_SELECTOR_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// Selector allow reading from multiple sockets -/// without blocking. It's a kind of multiplexer -//////////////////////////////////////////////////////////// -template -class Selector : private SelectorBase -{ -public : - - //////////////////////////////////////////////////////////// - /// Add a socket to watch - /// - /// \param Socket : Socket to add - /// - //////////////////////////////////////////////////////////// - void Add(Type Socket); - - //////////////////////////////////////////////////////////// - /// Remove a socket - /// - /// \param Socket : Socket to remove - /// - //////////////////////////////////////////////////////////// - void Remove(Type Socket); - - //////////////////////////////////////////////////////////// - /// Remove all sockets - /// - //////////////////////////////////////////////////////////// - void Clear(); - - //////////////////////////////////////////////////////////// - /// Wait and collect sockets which are ready for reading. - /// This functions will return either when at least one socket - /// is ready, or when the given time is out - /// - /// \param Timeout : Timeout, in seconds (0 by default : no timeout) - /// - /// \return Number of sockets ready to be read - /// - //////////////////////////////////////////////////////////// - unsigned int Wait(float Timeout = 0.f); - - //////////////////////////////////////////////////////////// - /// After a call to Wait(), get the Index-th socket which is - /// ready for reading. The total number of sockets ready - /// is the integer returned by the previous call to Wait() - /// - /// \param Index : Index of the socket to get - /// - /// \return The Index-th socket - /// - //////////////////////////////////////////////////////////// - Type GetSocketReady(unsigned int Index); - -private : - - //////////////////////////////////////////////////////////// - // Types - //////////////////////////////////////////////////////////// - typedef std::map SocketTable; - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - SocketTable mySockets; ///< Table matching the SFML socket instances with their low-level handles -}; - -#include - -// Let's define the two only valid types of Selector -typedef Selector SelectorUDP; -typedef Selector SelectorTCP; - -} // namespace sf - - -#endif // SFML_SELECTOR_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SELECTOR_HPP +#define SFML_SELECTOR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Selector allow reading from multiple sockets +/// without blocking. It's a kind of multiplexer +//////////////////////////////////////////////////////////// +template +class Selector : private SelectorBase +{ +public : + + //////////////////////////////////////////////////////////// + /// Add a socket to watch + /// + /// \param Socket : Socket to add + /// + //////////////////////////////////////////////////////////// + void Add(Type Socket); + + //////////////////////////////////////////////////////////// + /// Remove a socket + /// + /// \param Socket : Socket to remove + /// + //////////////////////////////////////////////////////////// + void Remove(Type Socket); + + //////////////////////////////////////////////////////////// + /// Remove all sockets + /// + //////////////////////////////////////////////////////////// + void Clear(); + + //////////////////////////////////////////////////////////// + /// Wait and collect sockets which are ready for reading. + /// This functions will return either when at least one socket + /// is ready, or when the given time is out + /// + /// \param Timeout : Timeout, in seconds (0 by default : no timeout) + /// + /// \return Number of sockets ready to be read + /// + //////////////////////////////////////////////////////////// + unsigned int Wait(float Timeout = 0.f); + + //////////////////////////////////////////////////////////// + /// After a call to Wait(), get the Index-th socket which is + /// ready for reading. The total number of sockets ready + /// is the integer returned by the previous call to Wait() + /// + /// \param Index : Index of the socket to get + /// + /// \return The Index-th socket + /// + //////////////////////////////////////////////////////////// + Type GetSocketReady(unsigned int Index); + +private : + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map SocketTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketTable mySockets; ///< Table matching the SFML socket instances with their low-level handles +}; + +#include + +// Let's define the two only valid types of Selector +typedef Selector SelectorUDP; +typedef Selector SelectorTCP; + +} // namespace sf + + +#endif // SFML_SELECTOR_HPP diff --git a/Externals/SFML/include/SFML/Network/Selector.inl b/Externals/SFML/include/SFML/Network/Selector.inl index 40ac948afe..e234a05bbb 100644 --- a/Externals/SFML/include/SFML/Network/Selector.inl +++ b/Externals/SFML/include/SFML/Network/Selector.inl @@ -1,97 +1,97 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////// -/// Add a socket to watch -//////////////////////////////////////////////////////////// -template -void Selector::Add(Type Socket) -{ - if (Socket.IsValid()) - { - SelectorBase::Add(Socket.mySocket); - mySockets[Socket.mySocket] = Socket; - } -} - - -//////////////////////////////////////////////////////////// -/// Remove a socket -//////////////////////////////////////////////////////////// -template -void Selector::Remove(Type Socket) -{ - typename SocketTable::iterator It = mySockets.find(Socket.mySocket); - if (It != mySockets.end()) - { - SelectorBase::Remove(Socket.mySocket); - mySockets.erase(It); - } -} - - -//////////////////////////////////////////////////////////// -/// Remove all sockets -//////////////////////////////////////////////////////////// -template -void Selector::Clear() -{ - SelectorBase::Clear(); - mySockets.clear(); -} - - -//////////////////////////////////////////////////////////// -/// Wait and collect sockets which are ready for reading. -/// This functions will return either when at least one socket -/// is ready, or when the given time is out -//////////////////////////////////////////////////////////// -template -unsigned int Selector::Wait(float Timeout) -{ - // No socket in the selector : return 0 - if (mySockets.empty()) - return 0; - - return SelectorBase::Wait(Timeout); -} - - -//////////////////////////////////////////////////////////// -/// After a call to Wait(), get the Index-th socket which is -/// ready for reading. The total number of sockets ready -/// is the integer returned by the previous call to Wait() -//////////////////////////////////////////////////////////// -template -Type Selector::GetSocketReady(unsigned int Index) -{ - SocketHelper::SocketType Socket = SelectorBase::GetSocketReady(Index); - - typename SocketTable::const_iterator It = mySockets.find(Socket); - if (It != mySockets.end()) - return It->second; - else - return Type(Socket); -} +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +/// Add a socket to watch +//////////////////////////////////////////////////////////// +template +void Selector::Add(Type Socket) +{ + if (Socket.IsValid()) + { + SelectorBase::Add(Socket.mySocket); + mySockets[Socket.mySocket] = Socket; + } +} + + +//////////////////////////////////////////////////////////// +/// Remove a socket +//////////////////////////////////////////////////////////// +template +void Selector::Remove(Type Socket) +{ + typename SocketTable::iterator It = mySockets.find(Socket.mySocket); + if (It != mySockets.end()) + { + SelectorBase::Remove(Socket.mySocket); + mySockets.erase(It); + } +} + + +//////////////////////////////////////////////////////////// +/// Remove all sockets +//////////////////////////////////////////////////////////// +template +void Selector::Clear() +{ + SelectorBase::Clear(); + mySockets.clear(); +} + + +//////////////////////////////////////////////////////////// +/// Wait and collect sockets which are ready for reading. +/// This functions will return either when at least one socket +/// is ready, or when the given time is out +//////////////////////////////////////////////////////////// +template +unsigned int Selector::Wait(float Timeout) +{ + // No socket in the selector : return 0 + if (mySockets.empty()) + return 0; + + return SelectorBase::Wait(Timeout); +} + + +//////////////////////////////////////////////////////////// +/// After a call to Wait(), get the Index-th socket which is +/// ready for reading. The total number of sockets ready +/// is the integer returned by the previous call to Wait() +//////////////////////////////////////////////////////////// +template +Type Selector::GetSocketReady(unsigned int Index) +{ + SocketHelper::SocketType Socket = SelectorBase::GetSocketReady(Index); + + typename SocketTable::const_iterator It = mySockets.find(Socket); + if (It != mySockets.end()) + return It->second; + else + return Type(Socket); +} diff --git a/Externals/SFML/include/SFML/Network/SelectorBase.hpp b/Externals/SFML/include/SFML/Network/SelectorBase.hpp index 4b9e9157a7..c85a4feec7 100644 --- a/Externals/SFML/include/SFML/Network/SelectorBase.hpp +++ b/Externals/SFML/include/SFML/Network/SelectorBase.hpp @@ -1,112 +1,112 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SELECTORBASE_HPP -#define SFML_SELECTORBASE_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// Private base class for selectors. -/// As Selector is a template class, this base is needed so that -/// every system call get compiled in SFML (not inlined) -//////////////////////////////////////////////////////////// -class SFML_API SelectorBase -{ -public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - SelectorBase(); - - //////////////////////////////////////////////////////////// - /// Add a socket to watch - /// - /// \param Socket : Socket to add - /// - //////////////////////////////////////////////////////////// - void Add(SocketHelper::SocketType Socket); - - //////////////////////////////////////////////////////////// - /// Remove a socket - /// - /// \param Socket : Socket to remove - /// - //////////////////////////////////////////////////////////// - void Remove(SocketHelper::SocketType Socket); - - //////////////////////////////////////////////////////////// - /// Remove all sockets - /// - //////////////////////////////////////////////////////////// - void Clear(); - - //////////////////////////////////////////////////////////// - /// Wait and collect sockets which are ready for reading. - /// This functions will return either when at least one socket - /// is ready, or when the given time is out - /// - /// \param Timeout : Timeout, in seconds (0 by default : no timeout) - /// - /// \return Number of sockets ready to be read - /// - //////////////////////////////////////////////////////////// - unsigned int Wait(float Timeout = 0.f); - - //////////////////////////////////////////////////////////// - /// After a call to Wait(), get the Index-th socket which is - /// ready for reading. The total number of sockets ready - /// is the integer returned by the previous call to Wait() - /// - /// \param Index : Index of the socket to get - /// - /// \return The Index-th socket - /// - //////////////////////////////////////////////////////////// - SocketHelper::SocketType GetSocketReady(unsigned int Index); - -private : - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - fd_set mySet; ///< Set of socket to watch - fd_set mySetReady; ///< Set of socket which are ready for reading - int myMaxSocket; ///< Maximum socket index -}; - -} // namespace sf - - -#endif // SFML_SELECTORBASE_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SELECTORBASE_HPP +#define SFML_SELECTORBASE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Private base class for selectors. +/// As Selector is a template class, this base is needed so that +/// every system call get compiled in SFML (not inlined) +//////////////////////////////////////////////////////////// +class SFML_API SelectorBase +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + SelectorBase(); + + //////////////////////////////////////////////////////////// + /// Add a socket to watch + /// + /// \param Socket : Socket to add + /// + //////////////////////////////////////////////////////////// + void Add(SocketHelper::SocketType Socket); + + //////////////////////////////////////////////////////////// + /// Remove a socket + /// + /// \param Socket : Socket to remove + /// + //////////////////////////////////////////////////////////// + void Remove(SocketHelper::SocketType Socket); + + //////////////////////////////////////////////////////////// + /// Remove all sockets + /// + //////////////////////////////////////////////////////////// + void Clear(); + + //////////////////////////////////////////////////////////// + /// Wait and collect sockets which are ready for reading. + /// This functions will return either when at least one socket + /// is ready, or when the given time is out + /// + /// \param Timeout : Timeout, in seconds (0 by default : no timeout) + /// + /// \return Number of sockets ready to be read + /// + //////////////////////////////////////////////////////////// + unsigned int Wait(float Timeout = 0.f); + + //////////////////////////////////////////////////////////// + /// After a call to Wait(), get the Index-th socket which is + /// ready for reading. The total number of sockets ready + /// is the integer returned by the previous call to Wait() + /// + /// \param Index : Index of the socket to get + /// + /// \return The Index-th socket + /// + //////////////////////////////////////////////////////////// + SocketHelper::SocketType GetSocketReady(unsigned int Index); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + fd_set mySet; ///< Set of socket to watch + fd_set mySetReady; ///< Set of socket which are ready for reading + int myMaxSocket; ///< Maximum socket index +}; + +} // namespace sf + + +#endif // SFML_SELECTORBASE_HPP diff --git a/Externals/SFML/include/SFML/Network/SocketHelper.hpp b/Externals/SFML/include/SFML/Network/SocketHelper.hpp index 166ce6074c..a9fb8ed65a 100644 --- a/Externals/SFML/include/SFML/Network/SocketHelper.hpp +++ b/Externals/SFML/include/SFML/Network/SocketHelper.hpp @@ -1,64 +1,64 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETHELPER_HPP -#define SFML_SOCKETHELPER_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include - - -namespace sf -{ -namespace Socket -{ - //////////////////////////////////////////////////////////// - /// Enumeration of status returned by socket functions - //////////////////////////////////////////////////////////// - enum Status - { - Done, ///< The socket has sent / received the data - NotReady, ///< The socket is not ready to send / receive data yet - Disconnected, ///< The TCP socket has been disconnected - Error ///< An unexpected error happened - }; -} - -} // namespace sf - - -#ifdef SFML_SYSTEM_WINDOWS - - #include - -#else - - #include - -#endif - - -#endif // SFML_SOCKETHELPER_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETHELPER_HPP +#define SFML_SOCKETHELPER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +namespace Socket +{ + //////////////////////////////////////////////////////////// + /// Enumeration of status returned by socket functions + //////////////////////////////////////////////////////////// + enum Status + { + Done, ///< The socket has sent / received the data + NotReady, ///< The socket is not ready to send / receive data yet + Disconnected, ///< The TCP socket has been disconnected + Error ///< An unexpected error happened + }; +} + +} // namespace sf + + +#ifdef SFML_SYSTEM_WINDOWS + + #include + +#else + + #include + +#endif + + +#endif // SFML_SOCKETHELPER_HPP diff --git a/Externals/SFML/include/SFML/Network/SocketTCP.hpp b/Externals/SFML/include/SFML/Network/SocketTCP.hpp index 8929dc9597..810a36b346 100644 --- a/Externals/SFML/include/SFML/Network/SocketTCP.hpp +++ b/Externals/SFML/include/SFML/Network/SocketTCP.hpp @@ -1,227 +1,227 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETTCP_HPP -#define SFML_SOCKETTCP_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include - - -namespace sf -{ -class Packet; -class IPAddress; -template class Selector; - -//////////////////////////////////////////////////////////// -/// SocketTCP wraps a socket using TCP protocol to -/// send data safely (but a bit slower) -//////////////////////////////////////////////////////////// -class SFML_API SocketTCP -{ -public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - SocketTCP(); - - //////////////////////////////////////////////////////////// - /// Change the blocking state of the socket. - /// The default behaviour of a socket is blocking - /// - /// \param Blocking : Pass true to set the socket as blocking, or false for non-blocking - /// - //////////////////////////////////////////////////////////// - void SetBlocking(bool Blocking); - - //////////////////////////////////////////////////////////// - /// Connect to another computer on a specified port - /// - /// \param Port : Port to use for transfers (warning : ports < 1024 are reserved) - /// \param HostAddress : IP Address of the host to connect to - /// \param Timeout : Maximum time to wait, in seconds (0 by default : no timeout) (this parameter is ignored for non-blocking sockets) - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - Socket::Status Connect(unsigned short Port, const IPAddress& HostAddress, float Timeout = 0.f); - - //////////////////////////////////////////////////////////// - /// Listen to a specified port for incoming data or connections - /// - /// \param Port : Port to listen to - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - bool Listen(unsigned short Port); - - //////////////////////////////////////////////////////////// - /// Wait for a connection (must be listening to a port). - /// This function will block if the socket is blocking - /// - /// \param Connected : Socket containing the connection with the connected client - /// \param Address : Pointer to an address to fill with client infos (NULL by default) - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Accept(SocketTCP& Connected, IPAddress* Address = NULL); - - //////////////////////////////////////////////////////////// - /// Send an array of bytes to the host (must be connected first) - /// - /// \param Data : Pointer to the bytes to send - /// \param Size : Number of bytes to send - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Send(const char* Data, std::size_t Size); - - //////////////////////////////////////////////////////////// - /// Receive an array of bytes from the host (must be connected first). - /// This function will block if the socket is blocking - /// - /// \param Data : Pointer to a byte array to fill (make sure it is big enough) - /// \param MaxSize : Maximum number of bytes to read - /// \param SizeReceived : Number of bytes received - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Receive(char* Data, std::size_t MaxSize, std::size_t& SizeReceived); - - //////////////////////////////////////////////////////////// - /// Send a packet of data to the host (must be connected first) - /// - /// \param PacketToSend : Packet to send - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Send(Packet& PacketToSend); - - //////////////////////////////////////////////////////////// - /// Receive a packet from the host (must be connected first). - /// This function will block if the socket is blocking - /// - /// \param PacketToReceive : Packet to fill with received data - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Receive(Packet& PacketToReceive); - - //////////////////////////////////////////////////////////// - /// Close the socket - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - bool Close(); - - //////////////////////////////////////////////////////////// - /// Check if the socket is in a valid state ; this function - /// can be called any time to check if the socket is OK - /// - /// \return True if the socket is valid - /// - //////////////////////////////////////////////////////////// - bool IsValid() const; - - //////////////////////////////////////////////////////////// - /// Comparison operator == - /// - /// \param Other : Socket to compare - /// - /// \return True if *this == Other - /// - //////////////////////////////////////////////////////////// - bool operator ==(const SocketTCP& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator != - /// - /// \param Other : Socket to compare - /// - /// \return True if *this != Other - /// - //////////////////////////////////////////////////////////// - bool operator !=(const SocketTCP& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator <. - /// Provided for compatibility with standard containers, as - /// comparing two sockets doesn't make much sense... - /// - /// \param Other : Socket to compare - /// - /// \return True if *this < Other - /// - //////////////////////////////////////////////////////////// - bool operator <(const SocketTCP& Other) const; - -private : - - friend class Selector; - - //////////////////////////////////////////////////////////// - /// Construct the socket from a socket descriptor - /// (for internal use only) - /// - /// \param Descriptor : Socket descriptor - /// - //////////////////////////////////////////////////////////// - SocketTCP(SocketHelper::SocketType Descriptor); - - //////////////////////////////////////////////////////////// - /// Create the socket - /// - /// \param Descriptor : System socket descriptor to use (0 by default -- create a new socket) - /// - //////////////////////////////////////////////////////////// - void Create(SocketHelper::SocketType Descriptor = 0); - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - SocketHelper::SocketType mySocket; ///< Socket descriptor - Uint32 myPendingHeader; ///< Data of the current pending packet header, if any - Uint32 myPendingHeaderSize; ///< Size of the current pending packet header, if any - std::vector myPendingPacket; ///< Data of the current pending packet, if any - Int32 myPendingPacketSize; ///< Size of the current pending packet, if any - bool myIsBlocking; ///< Is the socket blocking or non-blocking ? -}; - -} // namespace sf - - -#endif // SFML_SOCKETTCP_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETTCP_HPP +#define SFML_SOCKETTCP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Packet; +class IPAddress; +template class Selector; + +//////////////////////////////////////////////////////////// +/// SocketTCP wraps a socket using TCP protocol to +/// send data safely (but a bit slower) +//////////////////////////////////////////////////////////// +class SFML_API SocketTCP +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + SocketTCP(); + + //////////////////////////////////////////////////////////// + /// Change the blocking state of the socket. + /// The default behaviour of a socket is blocking + /// + /// \param Blocking : Pass true to set the socket as blocking, or false for non-blocking + /// + //////////////////////////////////////////////////////////// + void SetBlocking(bool Blocking); + + //////////////////////////////////////////////////////////// + /// Connect to another computer on a specified port + /// + /// \param Port : Port to use for transfers (warning : ports < 1024 are reserved) + /// \param HostAddress : IP Address of the host to connect to + /// \param Timeout : Maximum time to wait, in seconds (0 by default : no timeout) (this parameter is ignored for non-blocking sockets) + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + Socket::Status Connect(unsigned short Port, const IPAddress& HostAddress, float Timeout = 0.f); + + //////////////////////////////////////////////////////////// + /// Listen to a specified port for incoming data or connections + /// + /// \param Port : Port to listen to + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + bool Listen(unsigned short Port); + + //////////////////////////////////////////////////////////// + /// Wait for a connection (must be listening to a port). + /// This function will block if the socket is blocking + /// + /// \param Connected : Socket containing the connection with the connected client + /// \param Address : Pointer to an address to fill with client infos (NULL by default) + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Accept(SocketTCP& Connected, IPAddress* Address = NULL); + + //////////////////////////////////////////////////////////// + /// Send an array of bytes to the host (must be connected first) + /// + /// \param Data : Pointer to the bytes to send + /// \param Size : Number of bytes to send + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Send(const char* Data, std::size_t Size); + + //////////////////////////////////////////////////////////// + /// Receive an array of bytes from the host (must be connected first). + /// This function will block if the socket is blocking + /// + /// \param Data : Pointer to a byte array to fill (make sure it is big enough) + /// \param MaxSize : Maximum number of bytes to read + /// \param SizeReceived : Number of bytes received + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Receive(char* Data, std::size_t MaxSize, std::size_t& SizeReceived); + + //////////////////////////////////////////////////////////// + /// Send a packet of data to the host (must be connected first) + /// + /// \param PacketToSend : Packet to send + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Send(Packet& PacketToSend); + + //////////////////////////////////////////////////////////// + /// Receive a packet from the host (must be connected first). + /// This function will block if the socket is blocking + /// + /// \param PacketToReceive : Packet to fill with received data + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Receive(Packet& PacketToReceive); + + //////////////////////////////////////////////////////////// + /// Close the socket + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + bool Close(); + + //////////////////////////////////////////////////////////// + /// Check if the socket is in a valid state ; this function + /// can be called any time to check if the socket is OK + /// + /// \return True if the socket is valid + /// + //////////////////////////////////////////////////////////// + bool IsValid() const; + + //////////////////////////////////////////////////////////// + /// Comparison operator == + /// + /// \param Other : Socket to compare + /// + /// \return True if *this == Other + /// + //////////////////////////////////////////////////////////// + bool operator ==(const SocketTCP& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator != + /// + /// \param Other : Socket to compare + /// + /// \return True if *this != Other + /// + //////////////////////////////////////////////////////////// + bool operator !=(const SocketTCP& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator <. + /// Provided for compatibility with standard containers, as + /// comparing two sockets doesn't make much sense... + /// + /// \param Other : Socket to compare + /// + /// \return True if *this < Other + /// + //////////////////////////////////////////////////////////// + bool operator <(const SocketTCP& Other) const; + +private : + + friend class Selector; + + //////////////////////////////////////////////////////////// + /// Construct the socket from a socket descriptor + /// (for internal use only) + /// + /// \param Descriptor : Socket descriptor + /// + //////////////////////////////////////////////////////////// + SocketTCP(SocketHelper::SocketType Descriptor); + + //////////////////////////////////////////////////////////// + /// Create the socket + /// + /// \param Descriptor : System socket descriptor to use (0 by default -- create a new socket) + /// + //////////////////////////////////////////////////////////// + void Create(SocketHelper::SocketType Descriptor = 0); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketHelper::SocketType mySocket; ///< Socket descriptor + Uint32 myPendingHeader; ///< Data of the current pending packet header, if any + Uint32 myPendingHeaderSize; ///< Size of the current pending packet header, if any + std::vector myPendingPacket; ///< Data of the current pending packet, if any + Int32 myPendingPacketSize; ///< Size of the current pending packet, if any + bool myIsBlocking; ///< Is the socket blocking or non-blocking ? +}; + +} // namespace sf + + +#endif // SFML_SOCKETTCP_HPP diff --git a/Externals/SFML/include/SFML/Network/SocketUDP.hpp b/Externals/SFML/include/SFML/Network/SocketUDP.hpp index 7cb6b19d30..4653f56b91 100644 --- a/Externals/SFML/include/SFML/Network/SocketUDP.hpp +++ b/Externals/SFML/include/SFML/Network/SocketUDP.hpp @@ -1,228 +1,228 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETUDP_HPP -#define SFML_SOCKETUDP_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include - - -namespace sf -{ -class Packet; -class IPAddress; -template class Selector; - -//////////////////////////////////////////////////////////// -/// SocketUDP wraps a socket using UDP protocol to -/// send data fastly (but with less safety) -//////////////////////////////////////////////////////////// -class SFML_API SocketUDP -{ -public : - - //////////////////////////////////////////////////////////// - /// Default constructor - /// - //////////////////////////////////////////////////////////// - SocketUDP(); - - //////////////////////////////////////////////////////////// - /// Change the blocking state of the socket. - /// The default behaviour of a socket is blocking - /// - /// \param Blocking : Pass true to set the socket as blocking, or false for non-blocking - /// - //////////////////////////////////////////////////////////// - void SetBlocking(bool Blocking); - - //////////////////////////////////////////////////////////// - /// Bind the socket to a specific port - /// - /// \param Port : Port to bind the socket to - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - bool Bind(unsigned short Port); - - //////////////////////////////////////////////////////////// - /// Unbind the socket from its previous port, if any - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - bool Unbind(); - - //////////////////////////////////////////////////////////// - /// Send an array of bytes - /// - /// \param Data : Pointer to the bytes to send - /// \param Size : Number of bytes to send - /// \param Address : Address of the computer to send the packet to - /// \param Port : Port to send the data to - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Send(const char* Data, std::size_t Size, const IPAddress& Address, unsigned short Port); - - //////////////////////////////////////////////////////////// - /// Receive an array of bytes. - /// This function will block if the socket is blocking - /// - /// \param Data : Pointer to a byte array to fill (make sure it is big enough) - /// \param MaxSize : Maximum number of bytes to read - /// \param SizeReceived : Number of bytes received - /// \param Address : Address of the computer which sent the data - /// \param Port : Port on which the remote computer sent the data - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Receive(char* Data, std::size_t MaxSize, std::size_t& SizeReceived, IPAddress& Address, unsigned short& Port); - - //////////////////////////////////////////////////////////// - /// Send a packet of data - /// - /// \param PacketToSend : Packet to send - /// \param Address : Address of the computer to send the packet to - /// \param Port : Port to send the data to - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Send(Packet& PacketToSend, const IPAddress& Address, unsigned short Port); - - //////////////////////////////////////////////////////////// - /// Receive a packet. - /// This function will block if the socket is blocking - /// - /// \param PacketToReceive : Packet to fill with received data - /// \param Address : Address of the computer which sent the packet - /// \param Port : Port on which the remote computer sent the data - /// - /// \return Status code - /// - //////////////////////////////////////////////////////////// - Socket::Status Receive(Packet& PacketToReceive, IPAddress& Address, unsigned short& Port); - - //////////////////////////////////////////////////////////// - /// Close the socket - /// - /// \return True if operation has been successful - /// - //////////////////////////////////////////////////////////// - bool Close(); - - //////////////////////////////////////////////////////////// - /// Check if the socket is in a valid state ; this function - /// can be called any time to check if the socket is OK - /// - /// \return True if the socket is valid - /// - //////////////////////////////////////////////////////////// - bool IsValid() const; - - //////////////////////////////////////////////////////////// - /// Get the port the socket is currently bound to - /// - /// \return Current port (0 means the socket is not bound) - /// - //////////////////////////////////////////////////////////// - unsigned short GetPort() const; - - //////////////////////////////////////////////////////////// - /// Comparison operator == - /// - /// \param Other : Socket to compare - /// - /// \return True if *this == Other - /// - //////////////////////////////////////////////////////////// - bool operator ==(const SocketUDP& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator != - /// - /// \param Other : Socket to compare - /// - /// \return True if *this != Other - /// - //////////////////////////////////////////////////////////// - bool operator !=(const SocketUDP& Other) const; - - //////////////////////////////////////////////////////////// - /// Comparison operator <. - /// Provided for compatibility with standard containers, as - /// comparing two sockets doesn't make much sense... - /// - /// \param Other : Socket to compare - /// - /// \return True if *this < Other - /// - //////////////////////////////////////////////////////////// - bool operator <(const SocketUDP& Other) const; - -private : - - friend class Selector; - - //////////////////////////////////////////////////////////// - /// Construct the socket from a socket descriptor - /// (for internal use only) - /// - /// \param Descriptor : Socket descriptor - /// - //////////////////////////////////////////////////////////// - SocketUDP(SocketHelper::SocketType Descriptor); - - //////////////////////////////////////////////////////////// - /// Create the socket - /// - /// \param Descriptor : System socket descriptor to use (0 by default -- create a new socket) - /// - //////////////////////////////////////////////////////////// - void Create(SocketHelper::SocketType Descriptor = 0); - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - SocketHelper::SocketType mySocket; ///< Socket identifier - unsigned short myPort; ///< Port to which the socket is bound - Uint32 myPendingHeader; ///< Data of the current pending packet header, if any - Uint32 myPendingHeaderSize; ///< Size of the current pending packet header, if any - std::vector myPendingPacket; ///< Data of the current pending packet, if any - Int32 myPendingPacketSize; ///< Size of the current pending packet, if any - bool myIsBlocking; ///< Is the socket blocking or non-blocking ? -}; - -} // namespace sf - - -#endif // SFML_SOCKETUDP_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETUDP_HPP +#define SFML_SOCKETUDP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Packet; +class IPAddress; +template class Selector; + +//////////////////////////////////////////////////////////// +/// SocketUDP wraps a socket using UDP protocol to +/// send data fastly (but with less safety) +//////////////////////////////////////////////////////////// +class SFML_API SocketUDP +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + SocketUDP(); + + //////////////////////////////////////////////////////////// + /// Change the blocking state of the socket. + /// The default behaviour of a socket is blocking + /// + /// \param Blocking : Pass true to set the socket as blocking, or false for non-blocking + /// + //////////////////////////////////////////////////////////// + void SetBlocking(bool Blocking); + + //////////////////////////////////////////////////////////// + /// Bind the socket to a specific port + /// + /// \param Port : Port to bind the socket to + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + bool Bind(unsigned short Port); + + //////////////////////////////////////////////////////////// + /// Unbind the socket from its previous port, if any + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + bool Unbind(); + + //////////////////////////////////////////////////////////// + /// Send an array of bytes + /// + /// \param Data : Pointer to the bytes to send + /// \param Size : Number of bytes to send + /// \param Address : Address of the computer to send the packet to + /// \param Port : Port to send the data to + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Send(const char* Data, std::size_t Size, const IPAddress& Address, unsigned short Port); + + //////////////////////////////////////////////////////////// + /// Receive an array of bytes. + /// This function will block if the socket is blocking + /// + /// \param Data : Pointer to a byte array to fill (make sure it is big enough) + /// \param MaxSize : Maximum number of bytes to read + /// \param SizeReceived : Number of bytes received + /// \param Address : Address of the computer which sent the data + /// \param Port : Port on which the remote computer sent the data + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Receive(char* Data, std::size_t MaxSize, std::size_t& SizeReceived, IPAddress& Address, unsigned short& Port); + + //////////////////////////////////////////////////////////// + /// Send a packet of data + /// + /// \param PacketToSend : Packet to send + /// \param Address : Address of the computer to send the packet to + /// \param Port : Port to send the data to + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Send(Packet& PacketToSend, const IPAddress& Address, unsigned short Port); + + //////////////////////////////////////////////////////////// + /// Receive a packet. + /// This function will block if the socket is blocking + /// + /// \param PacketToReceive : Packet to fill with received data + /// \param Address : Address of the computer which sent the packet + /// \param Port : Port on which the remote computer sent the data + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Socket::Status Receive(Packet& PacketToReceive, IPAddress& Address, unsigned short& Port); + + //////////////////////////////////////////////////////////// + /// Close the socket + /// + /// \return True if operation has been successful + /// + //////////////////////////////////////////////////////////// + bool Close(); + + //////////////////////////////////////////////////////////// + /// Check if the socket is in a valid state ; this function + /// can be called any time to check if the socket is OK + /// + /// \return True if the socket is valid + /// + //////////////////////////////////////////////////////////// + bool IsValid() const; + + //////////////////////////////////////////////////////////// + /// Get the port the socket is currently bound to + /// + /// \return Current port (0 means the socket is not bound) + /// + //////////////////////////////////////////////////////////// + unsigned short GetPort() const; + + //////////////////////////////////////////////////////////// + /// Comparison operator == + /// + /// \param Other : Socket to compare + /// + /// \return True if *this == Other + /// + //////////////////////////////////////////////////////////// + bool operator ==(const SocketUDP& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator != + /// + /// \param Other : Socket to compare + /// + /// \return True if *this != Other + /// + //////////////////////////////////////////////////////////// + bool operator !=(const SocketUDP& Other) const; + + //////////////////////////////////////////////////////////// + /// Comparison operator <. + /// Provided for compatibility with standard containers, as + /// comparing two sockets doesn't make much sense... + /// + /// \param Other : Socket to compare + /// + /// \return True if *this < Other + /// + //////////////////////////////////////////////////////////// + bool operator <(const SocketUDP& Other) const; + +private : + + friend class Selector; + + //////////////////////////////////////////////////////////// + /// Construct the socket from a socket descriptor + /// (for internal use only) + /// + /// \param Descriptor : Socket descriptor + /// + //////////////////////////////////////////////////////////// + SocketUDP(SocketHelper::SocketType Descriptor); + + //////////////////////////////////////////////////////////// + /// Create the socket + /// + /// \param Descriptor : System socket descriptor to use (0 by default -- create a new socket) + /// + //////////////////////////////////////////////////////////// + void Create(SocketHelper::SocketType Descriptor = 0); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketHelper::SocketType mySocket; ///< Socket identifier + unsigned short myPort; ///< Port to which the socket is bound + Uint32 myPendingHeader; ///< Data of the current pending packet header, if any + Uint32 myPendingHeaderSize; ///< Size of the current pending packet header, if any + std::vector myPendingPacket; ///< Data of the current pending packet, if any + Int32 myPendingPacketSize; ///< Size of the current pending packet, if any + bool myIsBlocking; ///< Is the socket blocking or non-blocking ? +}; + +} // namespace sf + + +#endif // SFML_SOCKETUDP_HPP diff --git a/Externals/SFML/include/SFML/Network/Sockets.hpp b/Externals/SFML/include/SFML/Network/Sockets.hpp index 1359cb973e..8c78d76ad6 100644 --- a/Externals/SFML/include/SFML/Network/Sockets.hpp +++ b/Externals/SFML/include/SFML/Network/Sockets.hpp @@ -1,45 +1,45 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETS_HPP -#define SFML_SOCKETS_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include - - -#ifdef SFML_SYSTEM_WINDOWS - - #include - -#else - - #include - -#endif - - -#endif // SFML_SOCKETS_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETS_HPP +#define SFML_SOCKETS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +#ifdef SFML_SYSTEM_WINDOWS + + #include + +#else + + #include + +#endif + + +#endif // SFML_SOCKETS_HPP diff --git a/Externals/SFML/include/SFML/Network/Unix/SocketHelper.hpp b/Externals/SFML/include/SFML/Network/Unix/SocketHelper.hpp index 1068cd8536..2f6d8965ee 100644 --- a/Externals/SFML/include/SFML/Network/Unix/SocketHelper.hpp +++ b/Externals/SFML/include/SFML/Network/Unix/SocketHelper.hpp @@ -1,96 +1,96 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETHELPERUNIX_HPP -#define SFML_SOCKETHELPERUNIX_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include -#include -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// This class defines helper functions to do all the -/// non-portable socket stuff. This class is meant for internal -/// use only -//////////////////////////////////////////////////////////// -class SFML_API SocketHelper -{ -public : - - //////////////////////////////////////////////////////////// - // Define some socket types - //////////////////////////////////////////////////////////// - typedef int SocketType; - typedef socklen_t LengthType; - - //////////////////////////////////////////////////////////// - /// Return the value of the invalid socket - /// - /// \return Unique value of the invalid socket - /// - //////////////////////////////////////////////////////////// - static SocketType InvalidSocket(); - - //////////////////////////////////////////////////////////// - /// Close / destroy a socket - /// - /// \param Socket : Socket to close - /// - /// \return True on success - /// - //////////////////////////////////////////////////////////// - static bool Close(SocketType Socket); - - //////////////////////////////////////////////////////////// - /// Set a socket as blocking or non-blocking - /// - /// \param Socket : Socket to modify - /// \param Block : New blocking state of the socket - /// - //////////////////////////////////////////////////////////// - static void SetBlocking(SocketType Socket, bool Block); - - //////////////////////////////////////////////////////////// - /// Get the last socket error status - /// - /// \return Status corresponding to the last socket error - /// - //////////////////////////////////////////////////////////// - static Socket::Status GetErrorStatus(); -}; - -} // namespace sf - - -#endif // SFML_SOCKETHELPERUNIX_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETHELPERUNIX_HPP +#define SFML_SOCKETHELPERUNIX_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// This class defines helper functions to do all the +/// non-portable socket stuff. This class is meant for internal +/// use only +//////////////////////////////////////////////////////////// +class SFML_API SocketHelper +{ +public : + + //////////////////////////////////////////////////////////// + // Define some socket types + //////////////////////////////////////////////////////////// + typedef int SocketType; + typedef socklen_t LengthType; + + //////////////////////////////////////////////////////////// + /// Return the value of the invalid socket + /// + /// \return Unique value of the invalid socket + /// + //////////////////////////////////////////////////////////// + static SocketType InvalidSocket(); + + //////////////////////////////////////////////////////////// + /// Close / destroy a socket + /// + /// \param Socket : Socket to close + /// + /// \return True on success + /// + //////////////////////////////////////////////////////////// + static bool Close(SocketType Socket); + + //////////////////////////////////////////////////////////// + /// Set a socket as blocking or non-blocking + /// + /// \param Socket : Socket to modify + /// \param Block : New blocking state of the socket + /// + //////////////////////////////////////////////////////////// + static void SetBlocking(SocketType Socket, bool Block); + + //////////////////////////////////////////////////////////// + /// Get the last socket error status + /// + /// \return Status corresponding to the last socket error + /// + //////////////////////////////////////////////////////////// + static Socket::Status GetErrorStatus(); +}; + +} // namespace sf + + +#endif // SFML_SOCKETHELPERUNIX_HPP diff --git a/Externals/SFML/include/SFML/Network/Win32/SocketHelper.hpp b/Externals/SFML/include/SFML/Network/Win32/SocketHelper.hpp index 6199c0a2ce..c02d990a83 100644 --- a/Externals/SFML/include/SFML/Network/Win32/SocketHelper.hpp +++ b/Externals/SFML/include/SFML/Network/Win32/SocketHelper.hpp @@ -1,90 +1,90 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SOCKETHELPERWIN32_HPP -#define SFML_SOCKETHELPERWIN32_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// This class defines helper functions to do all the -/// non-portable socket stuff. This class is meant for internal -/// use only -//////////////////////////////////////////////////////////// -class SFML_API SocketHelper -{ -public : - - //////////////////////////////////////////////////////////// - // Define some socket types - //////////////////////////////////////////////////////////// - typedef SOCKET SocketType; - typedef int LengthType; - - //////////////////////////////////////////////////////////// - /// Return the value of the invalid socket - /// - /// \return Unique value of the invalid socket - /// - //////////////////////////////////////////////////////////// - static SocketType InvalidSocket(); - - //////////////////////////////////////////////////////////// - /// Close / destroy a socket - /// - /// \param Socket : Socket to close - /// - /// \return True on success - /// - //////////////////////////////////////////////////////////// - static bool Close(SocketType Socket); - - //////////////////////////////////////////////////////////// - /// Set a socket as blocking or non-blocking - /// - /// \param Socket : Socket to modify - /// \param Block : New blocking state of the socket - /// - //////////////////////////////////////////////////////////// - static void SetBlocking(SocketType Socket, bool Block); - - //////////////////////////////////////////////////////////// - /// Get the last socket error status - /// - /// \return Status corresponding to the last socket error - /// - //////////////////////////////////////////////////////////// - static Socket::Status GetErrorStatus(); -}; - -} // namespace sf - - -#endif // SFML_SOCKETHELPERWIN32_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETHELPERWIN32_HPP +#define SFML_SOCKETHELPERWIN32_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// This class defines helper functions to do all the +/// non-portable socket stuff. This class is meant for internal +/// use only +//////////////////////////////////////////////////////////// +class SFML_API SocketHelper +{ +public : + + //////////////////////////////////////////////////////////// + // Define some socket types + //////////////////////////////////////////////////////////// + typedef SOCKET SocketType; + typedef int LengthType; + + //////////////////////////////////////////////////////////// + /// Return the value of the invalid socket + /// + /// \return Unique value of the invalid socket + /// + //////////////////////////////////////////////////////////// + static SocketType InvalidSocket(); + + //////////////////////////////////////////////////////////// + /// Close / destroy a socket + /// + /// \param Socket : Socket to close + /// + /// \return True on success + /// + //////////////////////////////////////////////////////////// + static bool Close(SocketType Socket); + + //////////////////////////////////////////////////////////// + /// Set a socket as blocking or non-blocking + /// + /// \param Socket : Socket to modify + /// \param Block : New blocking state of the socket + /// + //////////////////////////////////////////////////////////// + static void SetBlocking(SocketType Socket, bool Block); + + //////////////////////////////////////////////////////////// + /// Get the last socket error status + /// + /// \return Status corresponding to the last socket error + /// + //////////////////////////////////////////////////////////// + static Socket::Status GetErrorStatus(); +}; + +} // namespace sf + + +#endif // SFML_SOCKETHELPERWIN32_HPP diff --git a/Externals/SFML/include/SFML/System.hpp b/Externals/SFML/include/SFML/System.hpp index 769262b459..4b2b938eec 100644 --- a/Externals/SFML/include/SFML/System.hpp +++ b/Externals/SFML/include/SFML/System.hpp @@ -1,43 +1,43 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_SYSTEM_HPP -#define SFML_SYSTEM_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// - -#include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include - -#endif // SFML_SYSTEM_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SYSTEM_HPP +#define SFML_SYSTEM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +// #include +// #include +// #include +// #include +// #include +// #include +// #include +// #include +// #include + +#endif // SFML_SYSTEM_HPP diff --git a/Externals/SFML/include/SFML/System/NonCopyable.hpp b/Externals/SFML/include/SFML/System/NonCopyable.hpp index 3ac6719fca..b61e989cca 100644 --- a/Externals/SFML/include/SFML/System/NonCopyable.hpp +++ b/Externals/SFML/include/SFML/System/NonCopyable.hpp @@ -1,70 +1,70 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_NONCOPYABLE_HPP -#define SFML_NONCOPYABLE_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include - - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// Utility base class to easily declare non-copyable classes. -/// Just inherit from NonCopyable to get a non-copyable class -//////////////////////////////////////////////////////////// -struct SFML_API NonCopyable -{ -protected : - - //////////////////////////////////////////////////////////// - /// The default constructor won't be generated, so provide it - /// - //////////////////////////////////////////////////////////// - NonCopyable() {} - -private : - - //////////////////////////////////////////////////////////// - /// Copy constructor : declare it private and don't implement - /// it to prevent from calling it - /// - //////////////////////////////////////////////////////////// - NonCopyable(const NonCopyable&); - - //////////////////////////////////////////////////////////// - /// Assignment operator : declare it private and don't implement - /// it to prevent from calling it - /// - //////////////////////////////////////////////////////////// - NonCopyable& operator =(const NonCopyable&); -}; - -} // namespace sf - - -#endif // SFML_NONCOPYABLE_HPP +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NONCOPYABLE_HPP +#define SFML_NONCOPYABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Utility base class to easily declare non-copyable classes. +/// Just inherit from NonCopyable to get a non-copyable class +//////////////////////////////////////////////////////////// +struct SFML_API NonCopyable +{ +protected : + + //////////////////////////////////////////////////////////// + /// The default constructor won't be generated, so provide it + /// + //////////////////////////////////////////////////////////// + NonCopyable() {} + +private : + + //////////////////////////////////////////////////////////// + /// Copy constructor : declare it private and don't implement + /// it to prevent from calling it + /// + //////////////////////////////////////////////////////////// + NonCopyable(const NonCopyable&); + + //////////////////////////////////////////////////////////// + /// Assignment operator : declare it private and don't implement + /// it to prevent from calling it + /// + //////////////////////////////////////////////////////////// + NonCopyable& operator =(const NonCopyable&); +}; + +} // namespace sf + + +#endif // SFML_NONCOPYABLE_HPP diff --git a/Externals/SOIL/SOIL.c b/Externals/SOIL/SOIL.c index d5a8df9a9a..e9f292daf5 100644 --- a/Externals/SOIL/SOIL.c +++ b/Externals/SOIL/SOIL.c @@ -1,2041 +1,2041 @@ -/* - Jonathan Dummer - 2007-07-26-10.36 - - Simple OpenGL Image Library - - Public Domain - using Sean Barret's stb_image as a base - - Thanks to: - * Sean Barret - for the awesome stb_image - * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts - * everybody at gamedev.net -*/ - -#define SOIL_CHECK_FOR_GL_ERRORS 0 - -#ifdef WIN32 - #define WIN32_LEAN_AND_MEAN - #include - #include - #if 0 - #include - #endif -#elif defined(__APPLE__) || defined(__APPLE_CC__) - /* I can't test this Apple stuff! */ - #if 0 - #include - #endif - #include - #define APIENTRY -#else - #if 0 - #include - #include - #endif -#endif - -#include "SOIL.h" -#include "stb_image_aug.h" -#include "image_helper.h" -#include "image_DXT.h" - -#include -#include - -/* error reporting */ -const char *result_string_pointer = "SOIL initialized"; - -/* for loading cube maps */ -enum{ - SOIL_CAPABILITY_UNKNOWN = -1, - SOIL_CAPABILITY_NONE = 0, - SOIL_CAPABILITY_PRESENT = 1 -}; - -/* static int has_cubemap_capability = SOIL_CAPABILITY_UNKNOWN; */ -int query_cubemap_capability( void ); -#define SOIL_TEXTURE_WRAP_R 0x8072 -#define SOIL_CLAMP_TO_EDGE 0x812F -#define SOIL_NORMAL_MAP 0x8511 -#define SOIL_REFLECTION_MAP 0x8512 -#define SOIL_TEXTURE_CUBE_MAP 0x8513 -#define SOIL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define SOIL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define SOIL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -/* for non-power-of-two texture */ -/* static int has_NPOT_capability = SOIL_CAPABILITY_UNKNOWN; */ -int query_NPOT_capability( void ); -/* for texture rectangles */ -/* static int has_tex_rectangle_capability = SOIL_CAPABILITY_UNKNOWN; */ -int query_tex_rectangle_capability( void ); -#define SOIL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define SOIL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -/* for using DXT compression */ -/* static int has_DXT_capability = SOIL_CAPABILITY_UNKNOWN; */ -int query_DXT_capability( void ); -#define SOIL_RGB_S3TC_DXT1 0x83F0 -#define SOIL_RGBA_S3TC_DXT1 0x83F1 -#define SOIL_RGBA_S3TC_DXT3 0x83F2 -#define SOIL_RGBA_S3TC_DXT5 0x83F3 - -#if 0 -typedef void (APIENTRY * P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); -P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC soilGlCompressedTexImage2D = NULL; - -unsigned int SOIL_direct_load_DDS( - const char *filename, - unsigned int reuse_texture_ID, - int flags, - int loading_as_cubemap ); - -unsigned int SOIL_direct_load_DDS_from_memory( - const unsigned char *const buffer, - int buffer_length, - unsigned int reuse_texture_ID, - int flags, - int loading_as_cubemap ); -/* other functions */ - -unsigned int - SOIL_internal_create_OGL_texture - ( - const unsigned char *const data, - int width, int height, int channels, - unsigned int reuse_texture_ID, - unsigned int flags, - unsigned int opengl_texture_type, - unsigned int opengl_texture_target, - unsigned int texture_check_size_enum - ); - -/* and the code magic begins here [8^) */ -unsigned int - SOIL_load_OGL_texture - ( - const char *filename, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels; - unsigned int tex_id; - /* does the user want direct uploading of the image as a DDS file? */ - if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) - { - /* 1st try direct loading of the image as a DDS file - note: direct uploading will only load what is in the - DDS file, no MIPmaps will be generated, the image will - not be flipped, etc. */ - tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 0 ); - if( tex_id ) - { - /* hey, it worked!! */ - return tex_id; - } - } - /* try to load the image */ - img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* OK, make it a texture! */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - reuse_texture_ID, flags, - GL_TEXTURE_2D, GL_TEXTURE_2D, - GL_MAX_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_load_OGL_HDR_texture - ( - const char *filename, - int fake_HDR_format, - int rescale_to_max, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels; - unsigned int tex_id; - /* no direct uploading of the image as a DDS file */ - /* error check */ - if( (fake_HDR_format != SOIL_HDR_RGBE) && - (fake_HDR_format != SOIL_HDR_RGBdivA) && - (fake_HDR_format != SOIL_HDR_RGBdivA2) ) - { - result_string_pointer = "Invalid fake HDR format specified"; - return 0; - } - /* try to load the image (only the HDR type) */ - img = stbi_hdr_load_rgbe( filename, &width, &height, &channels, 4 ); - /* channels holds the original number of channels, which may have been forced */ - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* the load worked, do I need to convert it? */ - if( fake_HDR_format == SOIL_HDR_RGBdivA ) - { - RGBE_to_RGBdivA( img, width, height, rescale_to_max ); - } else if( fake_HDR_format == SOIL_HDR_RGBdivA2 ) - { - RGBE_to_RGBdivA2( img, width, height, rescale_to_max ); - } - /* OK, make it a texture! */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - reuse_texture_ID, flags, - GL_TEXTURE_2D, GL_TEXTURE_2D, - GL_MAX_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_load_OGL_texture_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels; - unsigned int tex_id; - /* does the user want direct uploading of the image as a DDS file? */ - if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) - { - /* 1st try direct loading of the image as a DDS file - note: direct uploading will only load what is in the - DDS file, no MIPmaps will be generated, the image will - not be flipped, etc. */ - tex_id = SOIL_direct_load_DDS_from_memory( - buffer, buffer_length, - reuse_texture_ID, flags, 0 ); - if( tex_id ) - { - /* hey, it worked!! */ - return tex_id; - } - } - /* try to load the image */ - img = SOIL_load_image_from_memory( - buffer, buffer_length, - &width, &height, &channels, - force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* OK, make it a texture! */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - reuse_texture_ID, flags, - GL_TEXTURE_2D, GL_TEXTURE_2D, - GL_MAX_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_load_OGL_cubemap - ( - const char *x_pos_file, - const char *x_neg_file, - const char *y_pos_file, - const char *y_neg_file, - const char *z_pos_file, - const char *z_neg_file, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels; - unsigned int tex_id; - /* error checking */ - if( (x_pos_file == NULL) || - (x_neg_file == NULL) || - (y_pos_file == NULL) || - (y_neg_file == NULL) || - (z_pos_file == NULL) || - (z_neg_file == NULL) ) - { - result_string_pointer = "Invalid cube map files list"; - return 0; - } - /* capability checking */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - result_string_pointer = "No cube map capability present"; - return 0; - } - /* 1st face: try to load the image */ - img = SOIL_load_image( x_pos_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, and create a texture ID if necessary */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - reuse_texture_ID, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image( x_neg_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image( y_pos_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image( y_neg_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image( z_pos_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image( z_neg_file, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_load_OGL_cubemap_from_memory - ( - const unsigned char *const x_pos_buffer, - int x_pos_buffer_length, - const unsigned char *const x_neg_buffer, - int x_neg_buffer_length, - const unsigned char *const y_pos_buffer, - int y_pos_buffer_length, - const unsigned char *const y_neg_buffer, - int y_neg_buffer_length, - const unsigned char *const z_pos_buffer, - int z_pos_buffer_length, - const unsigned char *const z_neg_buffer, - int z_neg_buffer_length, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels; - unsigned int tex_id; - /* error checking */ - if( (x_pos_buffer == NULL) || - (x_neg_buffer == NULL) || - (y_pos_buffer == NULL) || - (y_neg_buffer == NULL) || - (z_pos_buffer == NULL) || - (z_neg_buffer == NULL) ) - { - result_string_pointer = "Invalid cube map buffers list"; - return 0; - } - /* capability checking */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - result_string_pointer = "No cube map capability present"; - return 0; - } - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - x_pos_buffer, x_pos_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, and create a texture ID if necessary */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - reuse_texture_ID, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - x_neg_buffer, x_neg_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - y_pos_buffer, y_pos_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - y_neg_buffer, y_neg_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - z_pos_buffer, z_pos_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* continue? */ - if( tex_id != 0 ) - { - /* 1st face: try to load the image */ - img = SOIL_load_image_from_memory( - z_neg_buffer, z_neg_buffer_length, - &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* upload the texture, but reuse the assigned texture ID */ - tex_id = SOIL_internal_create_OGL_texture( - img, width, height, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - /* and nuke the image data */ - SOIL_free_image_data( img ); - } - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_load_OGL_single_cubemap - ( - const char *filename, - const char face_order[6], - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels, i; - unsigned int tex_id = 0; - /* error checking */ - if( filename == NULL ) - { - result_string_pointer = "Invalid single cube map file name"; - return 0; - } - /* does the user want direct uploading of the image as a DDS file? */ - if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) - { - /* 1st try direct loading of the image as a DDS file - note: direct uploading will only load what is in the - DDS file, no MIPmaps will be generated, the image will - not be flipped, etc. */ - tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 1 ); - if( tex_id ) - { - /* hey, it worked!! */ - return tex_id; - } - } - /* face order checking */ - for( i = 0; i < 6; ++i ) - { - if( (face_order[i] != 'N') && - (face_order[i] != 'S') && - (face_order[i] != 'W') && - (face_order[i] != 'E') && - (face_order[i] != 'U') && - (face_order[i] != 'D') ) - { - result_string_pointer = "Invalid single cube map face order"; - return 0; - }; - } - /* capability checking */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - result_string_pointer = "No cube map capability present"; - return 0; - } - /* 1st off, try to load the full image */ - img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* now, does this image have the right dimensions? */ - if( (width != 6*height) && - (6*width != height) ) - { - SOIL_free_image_data( img ); - result_string_pointer = "Single cubemap image must have a 6:1 ratio"; - return 0; - } - /* try the image split and create */ - tex_id = SOIL_create_OGL_single_cubemap( - img, width, height, channels, - face_order, reuse_texture_ID, flags - ); - /* nuke the temporary image data and return the texture handle */ - SOIL_free_image_data( img ); - return tex_id; -} - -unsigned int - SOIL_load_OGL_single_cubemap_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - const char face_order[6], - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* img; - int width, height, channels, i; - unsigned int tex_id = 0; - /* error checking */ - if( buffer == NULL ) - { - result_string_pointer = "Invalid single cube map buffer"; - return 0; - } - /* does the user want direct uploading of the image as a DDS file? */ - if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) - { - /* 1st try direct loading of the image as a DDS file - note: direct uploading will only load what is in the - DDS file, no MIPmaps will be generated, the image will - not be flipped, etc. */ - tex_id = SOIL_direct_load_DDS_from_memory( - buffer, buffer_length, - reuse_texture_ID, flags, 1 ); - if( tex_id ) - { - /* hey, it worked!! */ - return tex_id; - } - } - /* face order checking */ - for( i = 0; i < 6; ++i ) - { - if( (face_order[i] != 'N') && - (face_order[i] != 'S') && - (face_order[i] != 'W') && - (face_order[i] != 'E') && - (face_order[i] != 'U') && - (face_order[i] != 'D') ) - { - result_string_pointer = "Invalid single cube map face order"; - return 0; - }; - } - /* capability checking */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - result_string_pointer = "No cube map capability present"; - return 0; - } - /* 1st off, try to load the full image */ - img = SOIL_load_image_from_memory( - buffer, buffer_length, - &width, &height, &channels, - force_channels ); - /* channels holds the original number of channels, which may have been forced */ - if( (force_channels >= 1) && (force_channels <= 4) ) - { - channels = force_channels; - } - if( NULL == img ) - { - /* image loading failed */ - result_string_pointer = stbi_failure_reason(); - return 0; - } - /* now, does this image have the right dimensions? */ - if( (width != 6*height) && - (6*width != height) ) - { - SOIL_free_image_data( img ); - result_string_pointer = "Single cubemap image must have a 6:1 ratio"; - return 0; - } - /* try the image split and create */ - tex_id = SOIL_create_OGL_single_cubemap( - img, width, height, channels, - face_order, reuse_texture_ID, flags - ); - /* nuke the temporary image data and return the texture handle */ - SOIL_free_image_data( img ); - return tex_id; -} - -unsigned int - SOIL_create_OGL_single_cubemap - ( - const unsigned char *const data, - int width, int height, int channels, - const char face_order[6], - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* variables */ - unsigned char* sub_img; - int dw, dh, sz, i; - unsigned int tex_id; - /* error checking */ - if( data == NULL ) - { - result_string_pointer = "Invalid single cube map image data"; - return 0; - } - /* face order checking */ - for( i = 0; i < 6; ++i ) - { - if( (face_order[i] != 'N') && - (face_order[i] != 'S') && - (face_order[i] != 'W') && - (face_order[i] != 'E') && - (face_order[i] != 'U') && - (face_order[i] != 'D') ) - { - result_string_pointer = "Invalid single cube map face order"; - return 0; - }; - } - /* capability checking */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - result_string_pointer = "No cube map capability present"; - return 0; - } - /* now, does this image have the right dimensions? */ - if( (width != 6*height) && - (6*width != height) ) - { - result_string_pointer = "Single cubemap image must have a 6:1 ratio"; - return 0; - } - /* which way am I stepping? */ - if( width > height ) - { - dw = height; - dh = 0; - } else - { - dw = 0; - dh = width; - } - sz = dw+dh; - sub_img = (unsigned char *)malloc( sz*sz*channels ); - /* do the splitting and uploading */ - tex_id = reuse_texture_ID; - for( i = 0; i < 6; ++i ) - { - int x, y, idx = 0; - unsigned int cubemap_target = 0; - /* copy in the sub-image */ - for( y = i*dh; y < i*dh+sz; ++y ) - { - for( x = i*dw*channels; x < (i*dw+sz)*channels; ++x ) - { - sub_img[idx++] = data[y*width*channels+x]; - } - } - /* what is my texture target? - remember, this coordinate system is - LHS if viewed from inside the cube! */ - switch( face_order[i] ) - { - case 'N': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z; - break; - case 'S': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; - break; - case 'W': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X; - break; - case 'E': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; - break; - case 'U': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y; - break; - case 'D': - cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y; - break; - } - /* upload it as a texture */ - tex_id = SOIL_internal_create_OGL_texture( - sub_img, sz, sz, channels, - tex_id, flags, - SOIL_TEXTURE_CUBE_MAP, - cubemap_target, - SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); - } - /* and nuke the image and sub-image data */ - SOIL_free_image_data( sub_img ); - /* and return the handle, such as it is */ - return tex_id; -} - -unsigned int - SOIL_create_OGL_texture - ( - const unsigned char *const data, - int width, int height, int channels, - unsigned int reuse_texture_ID, - unsigned int flags - ) -{ - /* wrapper function for 2D textures */ - return SOIL_internal_create_OGL_texture( - data, width, height, channels, - reuse_texture_ID, flags, - GL_TEXTURE_2D, GL_TEXTURE_2D, - GL_MAX_TEXTURE_SIZE ); -} - -#if SOIL_CHECK_FOR_GL_ERRORS -void check_for_GL_errors( const char *calling_location ) -{ - /* check for errors */ - GLenum err_code = glGetError(); - while( GL_NO_ERROR != err_code ) - { - printf( "OpenGL Error @ %s: %i", calling_location, err_code ); - err_code = glGetError(); - } -} -#else -void check_for_GL_errors( const char *calling_location ) -{ - /* no check for errors */ -} -#endif - -unsigned int - SOIL_internal_create_OGL_texture - ( - const unsigned char *const data, - int width, int height, int channels, - unsigned int reuse_texture_ID, - unsigned int flags, - unsigned int opengl_texture_type, - unsigned int opengl_texture_target, - unsigned int texture_check_size_enum - ) -{ - /* variables */ - unsigned char* img; - unsigned int tex_id; - unsigned int internal_texture_format = 0, original_texture_format = 0; - int DXT_mode = SOIL_CAPABILITY_UNKNOWN; - int max_supported_size; - /* If the user wants to use the texture rectangle I kill a few flags */ - if( flags & SOIL_FLAG_TEXTURE_RECTANGLE ) - { - /* well, the user asked for it, can we do that? */ - if( query_tex_rectangle_capability() == SOIL_CAPABILITY_PRESENT ) - { - /* only allow this if the user in _NOT_ trying to do a cubemap! */ - if( opengl_texture_type == GL_TEXTURE_2D ) - { - /* clean out the flags that cannot be used with texture rectangles */ - flags &= ~( - SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | - SOIL_FLAG_TEXTURE_REPEATS - ); - /* and change my target */ - opengl_texture_target = SOIL_TEXTURE_RECTANGLE_ARB; - opengl_texture_type = SOIL_TEXTURE_RECTANGLE_ARB; - } else - { - /* not allowed for any other uses (yes, I'm looking at you, cubemaps!) */ - flags &= ~SOIL_FLAG_TEXTURE_RECTANGLE; - } - - } else - { - /* can't do it, and that is a breakable offense (uv coords use pixels instead of [0,1]!) */ - result_string_pointer = "Texture Rectangle extension unsupported"; - return 0; - } - } - /* create a copy the image data */ - img = (unsigned char*)malloc( width*height*channels ); - memcpy( img, data, width*height*channels ); - /* does the user want me to invert the image? */ - if( flags & SOIL_FLAG_INVERT_Y ) - { - int i, j; - for( j = 0; j*2 < height; ++j ) - { - int index1 = j * width * channels; - int index2 = (height - 1 - j) * width * channels; - for( i = width * channels; i > 0; --i ) - { - unsigned char temp = img[index1]; - img[index1] = img[index2]; - img[index2] = temp; - ++index1; - ++index2; - } - } - } - /* does the user want me to scale the colors into the NTSC safe RGB range? */ - if( flags & SOIL_FLAG_NTSC_SAFE_RGB ) - { - scale_image_RGB_to_NTSC_safe( img, width, height, channels ); - } - /* does the user want me to convert from straight to pre-multiplied alpha? - (and do we even _have_ alpha?) */ - if( flags & SOIL_FLAG_MULTIPLY_ALPHA ) - { - int i; - switch( channels ) - { - case 2: - for( i = 0; i < 2*width*height; i += 2 ) - { - img[i] = (img[i] * img[i+1] + 128) >> 8; - } - break; - case 4: - for( i = 0; i < 4*width*height; i += 4 ) - { - img[i+0] = (img[i+0] * img[i+3] + 128) >> 8; - img[i+1] = (img[i+1] * img[i+3] + 128) >> 8; - img[i+2] = (img[i+2] * img[i+3] + 128) >> 8; - } - break; - default: - /* no other number of channels contains alpha data */ - break; - } - } - /* if the user can't support NPOT textures, make sure we force the POT option */ - if( (query_NPOT_capability() == SOIL_CAPABILITY_NONE) && - !(flags & SOIL_FLAG_TEXTURE_RECTANGLE) ) - { - /* add in the POT flag */ - flags |= SOIL_FLAG_POWER_OF_TWO; - } - /* how large of a texture can this OpenGL implementation handle? */ - /* texture_check_size_enum will be GL_MAX_TEXTURE_SIZE or SOIL_MAX_CUBE_MAP_TEXTURE_SIZE */ - glGetIntegerv( texture_check_size_enum, &max_supported_size ); - /* do I need to make it a power of 2? */ - if( - (flags & SOIL_FLAG_POWER_OF_TWO) || /* user asked for it */ - (flags & SOIL_FLAG_MIPMAPS) || /* need it for the MIP-maps */ - (width > max_supported_size) || /* it's too big, (make sure it's */ - (height > max_supported_size) ) /* 2^n for later down-sampling) */ - { - int new_width = 1; - int new_height = 1; - while( new_width < width ) - { - new_width *= 2; - } - while( new_height < height ) - { - new_height *= 2; - } - /* still? */ - if( (new_width != width) || (new_height != height) ) - { - /* yep, resize */ - unsigned char *resampled = (unsigned char*)malloc( channels*new_width*new_height ); - up_scale_image( - img, width, height, channels, - resampled, new_width, new_height ); - /* OJO this is for debug only! */ - /* - SOIL_save_image( "\\showme.bmp", SOIL_SAVE_TYPE_BMP, - new_width, new_height, channels, - resampled ); - */ - /* nuke the old guy, then point it at the new guy */ - SOIL_free_image_data( img ); - img = resampled; - width = new_width; - height = new_height; - } - } - /* now, if it is too large... */ - if( (width > max_supported_size) || (height > max_supported_size) ) - { - /* I've already made it a power of two, so simply use the MIPmapping - code to reduce its size to the allowable maximum. */ - unsigned char *resampled; - int reduce_block_x = 1, reduce_block_y = 1; - int new_width, new_height; - if( width > max_supported_size ) - { - reduce_block_x = width / max_supported_size; - } - if( height > max_supported_size ) - { - reduce_block_y = height / max_supported_size; - } - new_width = width / reduce_block_x; - new_height = height / reduce_block_y; - resampled = (unsigned char*)malloc( channels*new_width*new_height ); - /* perform the actual reduction */ - mipmap_image( img, width, height, channels, - resampled, reduce_block_x, reduce_block_y ); - /* nuke the old guy, then point it at the new guy */ - SOIL_free_image_data( img ); - img = resampled; - width = new_width; - height = new_height; - } - /* does the user want us to use YCoCg color space? */ - if( flags & SOIL_FLAG_CoCg_Y ) - { - /* this will only work with RGB and RGBA images */ - convert_RGB_to_YCoCg( img, width, height, channels ); - /* - save_image_as_DDS( "CoCg_Y.dds", width, height, channels, img ); - */ - } - /* create the OpenGL texture ID handle - (note: allowing a forced texture ID lets me reload a texture) */ - tex_id = reuse_texture_ID; - if( tex_id == 0 ) - { - glGenTextures( 1, &tex_id ); - } - check_for_GL_errors( "glGenTextures" ); - /* Note: sometimes glGenTextures fails (usually no OpenGL context) */ - if( tex_id ) - { - /* and what type am I using as the internal texture format? */ - switch( channels ) - { - case 1: - original_texture_format = GL_LUMINANCE; - break; - case 2: - original_texture_format = GL_LUMINANCE_ALPHA; - break; - case 3: - original_texture_format = GL_RGB; - break; - case 4: - original_texture_format = GL_RGBA; - break; - } - internal_texture_format = original_texture_format; - /* does the user want me to, and can I, save as DXT? */ - if( flags & SOIL_FLAG_COMPRESS_TO_DXT ) - { - DXT_mode = query_DXT_capability(); - if( DXT_mode == SOIL_CAPABILITY_PRESENT ) - { - /* I can use DXT, whether I compress it or OpenGL does */ - if( (channels & 1) == 1 ) - { - /* 1 or 3 channels = DXT1 */ - internal_texture_format = SOIL_RGB_S3TC_DXT1; - } else - { - /* 2 or 4 channels = DXT5 */ - internal_texture_format = SOIL_RGBA_S3TC_DXT5; - } - } - } - /* bind an OpenGL texture ID */ - glBindTexture( opengl_texture_type, tex_id ); - check_for_GL_errors( "glBindTexture" ); - /* upload the main image */ - if( DXT_mode == SOIL_CAPABILITY_PRESENT ) - { - /* user wants me to do the DXT conversion! */ - int DDS_size; - unsigned char *DDS_data = NULL; - if( (channels & 1) == 1 ) - { - /* RGB, use DXT1 */ - DDS_data = convert_image_to_DXT1( img, width, height, channels, &DDS_size ); - } else - { - /* RGBA, use DXT5 */ - DDS_data = convert_image_to_DXT5( img, width, height, channels, &DDS_size ); - } - if( DDS_data ) - { - soilGlCompressedTexImage2D( - opengl_texture_target, 0, - internal_texture_format, width, height, 0, - DDS_size, DDS_data ); - check_for_GL_errors( "glCompressedTexImage2D" ); - SOIL_free_image_data( DDS_data ); - /* printf( "Internal DXT compressor\n" ); */ - } else - { - /* my compression failed, try the OpenGL driver's version */ - glTexImage2D( - opengl_texture_target, 0, - internal_texture_format, width, height, 0, - original_texture_format, GL_UNSIGNED_BYTE, img ); - check_for_GL_errors( "glTexImage2D" ); - /* printf( "OpenGL DXT compressor\n" ); */ - } - } else - { - /* user want OpenGL to do all the work! */ - glTexImage2D( - opengl_texture_target, 0, - internal_texture_format, width, height, 0, - original_texture_format, GL_UNSIGNED_BYTE, img ); - check_for_GL_errors( "glTexImage2D" ); - /*printf( "OpenGL DXT compressor\n" ); */ - } - /* are any MIPmaps desired? */ - if( flags & SOIL_FLAG_MIPMAPS ) - { - int MIPlevel = 1; - int MIPwidth = (width+1) / 2; - int MIPheight = (height+1) / 2; - unsigned char *resampled = (unsigned char*)malloc( channels*MIPwidth*MIPheight ); - while( ((1< 0; --i ) - { - unsigned char temp = pixel_data[index1]; - pixel_data[index1] = pixel_data[index2]; - pixel_data[index2] = temp; - ++index1; - ++index2; - } - } - - /* save the image */ - save_result = SOIL_save_image( filename, image_type, width, height, 3, pixel_data); - - /* And free the memory */ - SOIL_free_image_data( pixel_data ); - return save_result; -} -#endif - -unsigned char * - SOIL_load_image - ( - const char *filename, - int *width, int *height, int *channels, - int force_channels - ) -{ - stbi_uc *result = stbi_load( filename, - width, height, channels, force_channels ); - if( result == NULL ) - { - result_string_pointer = stbi_failure_reason(); - } else - { - result_string_pointer = "Image loaded"; - } - return result; -} - -unsigned char * - SOIL_load_image_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - int *width, int *height, int *channels, - int force_channels - ) -{ - stbi_uc *result = stbi_load_from_memory( - buffer, buffer_length, - width, height, channels, - force_channels ); - if( result == NULL ) - { - result_string_pointer = stbi_failure_reason(); - } else - { - result_string_pointer = "Image loaded from memory"; - } - return result; -} - -int - SOIL_save_image - ( - const char *filename, - int image_type, - int width, int height, int channels, - const unsigned char *const data - ) -{ - int save_result; - - /* error check */ - if( (width < 1) || (height < 1) || - (channels < 1) || (channels > 4) || - (data == NULL) || - (filename == NULL) ) - { - return 0; - } - if( image_type == SOIL_SAVE_TYPE_BMP ) - { - save_result = stbi_write_bmp( filename, - width, height, channels, (void*)data ); - } else - if( image_type == SOIL_SAVE_TYPE_TGA ) - { - save_result = stbi_write_tga( filename, - width, height, channels, (void*)data ); - } else - if( image_type == SOIL_SAVE_TYPE_DDS ) - { - save_result = save_image_as_DDS( filename, - width, height, channels, (const unsigned char *const)data ); - } else - { - save_result = 0; - } - if( save_result == 0 ) - { - result_string_pointer = "Saving the image failed"; - } else - { - result_string_pointer = "Image saved"; - } - return save_result; -} - -void - SOIL_free_image_data - ( - unsigned char *img_data - ) -{ - free( (void*)img_data ); -} - -const char* - SOIL_last_result - ( - void - ) -{ - return result_string_pointer; -} - -#if 0 -unsigned int SOIL_direct_load_DDS_from_memory( - const unsigned char *const buffer, - int buffer_length, - unsigned int reuse_texture_ID, - int flags, - int loading_as_cubemap ) -{ - /* variables */ - DDS_header header; - unsigned int buffer_index = 0; - unsigned int tex_ID = 0; - /* file reading variables */ - unsigned int S3TC_type = 0; - unsigned char *DDS_data; - unsigned int DDS_main_size; - unsigned int DDS_full_size; - unsigned int width, height; - int mipmaps, cubemap, uncompressed, block_size = 16; - unsigned int flag; - unsigned int cf_target, ogl_target_start, ogl_target_end; - unsigned int opengl_texture_type; - int i; - /* 1st off, does the filename even exist? */ - if( NULL == buffer ) - { - /* we can't do it! */ - result_string_pointer = "NULL buffer"; - return 0; - } - if( buffer_length < sizeof( DDS_header ) ) - { - /* we can't do it! */ - result_string_pointer = "DDS file was too small to contain the DDS header"; - return 0; - } - /* try reading in the header */ - memcpy ( (void*)(&header), (const void *)buffer, sizeof( DDS_header ) ); - buffer_index = sizeof( DDS_header ); - /* guilty until proven innocent */ - result_string_pointer = "Failed to read a known DDS header"; - /* validate the header (warning, "goto"'s ahead, shield your eyes!!) */ - flag = ('D'<<0)|('D'<<8)|('S'<<16)|(' '<<24); - if( header.dwMagic != flag ) {goto quick_exit;} - if( header.dwSize != 124 ) {goto quick_exit;} - /* I need all of these */ - flag = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; - if( (header.dwFlags & flag) != flag ) {goto quick_exit;} - /* According to the MSDN spec, the dwFlags should contain - DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if - uncompressed. Some DDS writers do not conform to the - spec, so I need to make my reader more tolerant */ - /* I need one of these */ - flag = DDPF_FOURCC | DDPF_RGB; - if( (header.sPixelFormat.dwFlags & flag) == 0 ) {goto quick_exit;} - if( header.sPixelFormat.dwSize != 32 ) {goto quick_exit;} - if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) {goto quick_exit;} - /* make sure it is a type we can upload */ - if( (header.sPixelFormat.dwFlags & DDPF_FOURCC) && - !( - (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24))) || - (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('3'<<24))) || - (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('5'<<24))) - ) ) - { - goto quick_exit; - } - /* OK, validated the header, let's load the image data */ - result_string_pointer = "DDS header loaded and validated"; - width = header.dwWidth; - height = header.dwHeight; - uncompressed = 1 - (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; - cubemap = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; - if( uncompressed ) - { - S3TC_type = GL_RGB; - block_size = 3; - if( header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS ) - { - S3TC_type = GL_RGBA; - block_size = 4; - } - DDS_main_size = width * height * block_size; - } else - { - /* can we even handle direct uploading to OpenGL DXT compressed images? */ - if( query_DXT_capability() != SOIL_CAPABILITY_PRESENT ) - { - /* we can't do it! */ - result_string_pointer = "Direct upload of S3TC images not supported by the OpenGL driver"; - return 0; - } - /* well, we know it is DXT1/3/5, because we checked above */ - switch( (header.sPixelFormat.dwFourCC >> 24) - '0' ) - { - case 1: - S3TC_type = SOIL_RGBA_S3TC_DXT1; - block_size = 8; - break; - case 3: - S3TC_type = SOIL_RGBA_S3TC_DXT3; - block_size = 16; - break; - case 5: - S3TC_type = SOIL_RGBA_S3TC_DXT5; - block_size = 16; - break; - } - DDS_main_size = ((width+3)>>2)*((height+3)>>2)*block_size; - } - if( cubemap ) - { - /* does the user want a cubemap? */ - if( !loading_as_cubemap ) - { - /* we can't do it! */ - result_string_pointer = "DDS image was a cubemap"; - return 0; - } - /* can we even handle cubemaps with the OpenGL driver? */ - if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) - { - /* we can't do it! */ - result_string_pointer = "Direct upload of cubemap images not supported by the OpenGL driver"; - return 0; - } - ogl_target_start = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; - ogl_target_end = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; - opengl_texture_type = SOIL_TEXTURE_CUBE_MAP; - } else - { - /* does the user want a non-cubemap? */ - if( loading_as_cubemap ) - { - /* we can't do it! */ - result_string_pointer = "DDS image was not a cubemap"; - return 0; - } - ogl_target_start = GL_TEXTURE_2D; - ogl_target_end = GL_TEXTURE_2D; - opengl_texture_type = GL_TEXTURE_2D; - } - if( (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1) ) - { - int shift_offset; - mipmaps = header.dwMipMapCount - 1; - DDS_full_size = DDS_main_size; - if( uncompressed ) - { - /* uncompressed DDS, simple MIPmap size calculation */ - shift_offset = 0; - } else - { - /* compressed DDS, MIPmap size calculation is block based */ - shift_offset = 2; - } - for( i = 1; i <= mipmaps; ++ i ) - { - int w, h; - w = width >> (shift_offset + i); - h = height >> (shift_offset + i); - if( w < 1 ) - { - w = 1; - } - if( h < 1 ) - { - h = 1; - } - DDS_full_size += w*h*block_size; - } - } else - { - mipmaps = 0; - DDS_full_size = DDS_main_size; - } - DDS_data = (unsigned char*)malloc( DDS_full_size ); - /* got the image data RAM, create or use an existing OpenGL texture handle */ - tex_ID = reuse_texture_ID; - if( tex_ID == 0 ) - { - glGenTextures( 1, &tex_ID ); - } - /* bind an OpenGL texture ID */ - glBindTexture( opengl_texture_type, tex_ID ); - /* do this for each face of the cubemap! */ - for( cf_target = ogl_target_start; cf_target <= ogl_target_end; ++cf_target ) - { - if( buffer_index + DDS_full_size <= buffer_length ) - { - unsigned int byte_offset = DDS_main_size; - memcpy( (void*)DDS_data, (const void*)(&buffer[buffer_index]), DDS_full_size ); - buffer_index += DDS_full_size; - /* upload the main chunk */ - if( uncompressed ) - { - /* and remember, DXT uncompressed uses BGR(A), - so swap to RGB(A) for ALL MIPmap levels */ - for( i = 0; i < DDS_full_size; i += block_size ) - { - unsigned char temp = DDS_data[i]; - DDS_data[i] = DDS_data[i+2]; - DDS_data[i+2] = temp; - } - glTexImage2D( - cf_target, 0, - S3TC_type, width, height, 0, - S3TC_type, GL_UNSIGNED_BYTE, DDS_data ); - } else - { - soilGlCompressedTexImage2D( - cf_target, 0, - S3TC_type, width, height, 0, - DDS_main_size, DDS_data ); - } - /* upload the mipmaps, if we have them */ - for( i = 1; i <= mipmaps; ++i ) - { - int w, h, mip_size; - w = width >> i; - h = height >> i; - if( w < 1 ) - { - w = 1; - } - if( h < 1 ) - { - h = 1; - } - /* upload this mipmap */ - if( uncompressed ) - { - mip_size = w*h*block_size; - glTexImage2D( - cf_target, i, - S3TC_type, w, h, 0, - S3TC_type, GL_UNSIGNED_BYTE, &DDS_data[byte_offset] ); - } else - { - mip_size = ((w+3)/4)*((h+3)/4)*block_size; - soilGlCompressedTexImage2D( - cf_target, i, - S3TC_type, w, h, 0, - mip_size, &DDS_data[byte_offset] ); - } - /* and move to the next mipmap */ - byte_offset += mip_size; - } - /* it worked! */ - result_string_pointer = "DDS file loaded"; - } else - { - glDeleteTextures( 1, & tex_ID ); - tex_ID = 0; - cf_target = ogl_target_end + 1; - result_string_pointer = "DDS file was too small for expected image data"; - } - }/* end reading each face */ - SOIL_free_image_data( DDS_data ); - if( tex_ID ) - { - /* did I have MIPmaps? */ - if( mipmaps > 0 ) - { - /* instruct OpenGL to use the MIPmaps */ - glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); - } else - { - /* instruct OpenGL _NOT_ to use the MIPmaps */ - glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - } - /* does the user want clamping, or wrapping? */ - if( flags & SOIL_FLAG_TEXTURE_REPEATS ) - { - glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, GL_REPEAT ); - glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, GL_REPEAT ); - } else - { - /* unsigned int clamp_mode = SOIL_CLAMP_TO_EDGE; */ - unsigned int clamp_mode = GL_CLAMP; - glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, clamp_mode ); - glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, clamp_mode ); - glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, clamp_mode ); - } - } - -quick_exit: - /* report success or failure */ - return tex_ID; -} - -unsigned int SOIL_direct_load_DDS( - const char *filename, - unsigned int reuse_texture_ID, - int flags, - int loading_as_cubemap ) -{ - FILE *f; - unsigned char *buffer; - size_t buffer_length, bytes_read; - unsigned int tex_ID = 0; - /* error checks */ - if( NULL == filename ) - { - result_string_pointer = "NULL filename"; - return 0; - } - f = fopen( filename, "rb" ); - if( NULL == f ) - { - /* the file doesn't seem to exist (or be open-able) */ - result_string_pointer = "Can not find DDS file"; - return 0; - } - fseek( f, 0, SEEK_END ); - buffer_length = ftell( f ); - fseek( f, 0, SEEK_SET ); - buffer = (unsigned char *) malloc( buffer_length ); - if( NULL == buffer ) - { - result_string_pointer = "malloc failed"; - fclose( f ); - return 0; - } - bytes_read = fread( (void*)buffer, 1, buffer_length, f ); - fclose( f ); - if( bytes_read < buffer_length ) - { - /* huh? */ - buffer_length = bytes_read; - } - /* now try to do the loading */ - tex_ID = SOIL_direct_load_DDS_from_memory( - (const unsigned char *const)buffer, buffer_length, - reuse_texture_ID, flags, loading_as_cubemap ); - SOIL_free_image_data( buffer ); - return tex_ID; -} - - -int query_NPOT_capability( void ) -{ - /* check for the capability */ - if( has_NPOT_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ - if( - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_ARB_texture_non_power_of_two" ) ) - ) - { - /* not there, flag the failure */ - has_NPOT_capability = SOIL_CAPABILITY_NONE; - } else - { - /* it's there! */ - has_NPOT_capability = SOIL_CAPABILITY_PRESENT; - } - } - /* let the user know if we can do non-power-of-two textures or not */ - return has_NPOT_capability; -} - -int query_tex_rectangle_capability( void ) -{ - /* check for the capability */ - if( has_tex_rectangle_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ - if( - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_ARB_texture_rectangle" ) ) - && - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_EXT_texture_rectangle" ) ) - && - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_NV_texture_rectangle" ) ) - ) - { - /* not there, flag the failure */ - has_tex_rectangle_capability = SOIL_CAPABILITY_NONE; - } else - { - /* it's there! */ - has_tex_rectangle_capability = SOIL_CAPABILITY_PRESENT; - } - } - /* let the user know if we can do texture rectangles or not */ - return has_tex_rectangle_capability; -} - -int query_cubemap_capability( void ) -{ - /* check for the capability */ - if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ - if( - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_ARB_texture_cube_map" ) ) - && - (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), - "GL_EXT_texture_cube_map" ) ) - ) - { - /* not there, flag the failure */ - has_cubemap_capability = SOIL_CAPABILITY_NONE; - } else - { - /* it's there! */ - has_cubemap_capability = SOIL_CAPABILITY_PRESENT; - } - } - /* let the user know if we can do cubemaps or not */ - return has_cubemap_capability; -} - - -int query_DXT_capability( void ) -{ - /* check for the capability */ - if( has_DXT_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ - if( NULL == strstr( - (char const*)glGetString( GL_EXTENSIONS ), - "GL_EXT_texture_compression_s3tc" ) ) - { - /* not there, flag the failure */ - has_DXT_capability = SOIL_CAPABILITY_NONE; - } else - { - /* and find the address of the extension function */ - P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC ext_addr = NULL; - #ifdef WIN32 - ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) - wglGetProcAddress - ( - "glCompressedTexImage2DARB" - ); - #elif defined(__APPLE__) || defined(__APPLE_CC__) - /* I can't test this Apple stuff! */ - CFBundleRef bundle; - CFURLRef bundleURL = - CFURLCreateWithFileSystemPath( - kCFAllocatorDefault, - CFSTR("/System/Library/Frameworks/OpenGL.framework"), - kCFURLPOSIXPathStyle, - true ); - CFStringRef extensionName = - CFStringCreateWithCString( - kCFAllocatorDefault, - "glCompressedTexImage2DARB", - kCFStringEncodingASCII ); - bundle = CFBundleCreate( kCFAllocatorDefault, bundleURL ); - assert( bundle != NULL ); - ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) - CFBundleGetFunctionPointerForName - ( - bundle, extensionName - ); - CFRelease( bundleURL ); - CFRelease( extensionName ); - CFRelease( bundle ); - #else - ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) - glXGetProcAddressARB - ( - (const GLubyte *)"glCompressedTexImage2DARB" - ); - #endif - /* Flag it so no checks needed later */ - if( NULL == ext_addr ) - { - /* hmm, not good!! This should not happen, but does on my - laptop's VIA chipset. The GL_EXT_texture_compression_s3tc - spec requires that ARB_texture_compression be present too. - this means I can upload and have the OpenGL drive do the - conversion, but I can't use my own routines or load DDS files - from disk and upload them directly [8^( */ - has_DXT_capability = SOIL_CAPABILITY_NONE; - } else - { - /* all's well! */ - soilGlCompressedTexImage2D = ext_addr; - has_DXT_capability = SOIL_CAPABILITY_PRESENT; - } - } - } - /* let the user know if we can do DXT or not */ - return has_DXT_capability; -} -#endif +/* + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + Public Domain + using Sean Barret's stb_image as a base + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +*/ + +#define SOIL_CHECK_FOR_GL_ERRORS 0 + +#ifdef WIN32 + #define WIN32_LEAN_AND_MEAN + #include + #include + #if 0 + #include + #endif +#elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + #if 0 + #include + #endif + #include + #define APIENTRY +#else + #if 0 + #include + #include + #endif +#endif + +#include "SOIL.h" +#include "stb_image_aug.h" +#include "image_helper.h" +#include "image_DXT.h" + +#include +#include + +/* error reporting */ +const char *result_string_pointer = "SOIL initialized"; + +/* for loading cube maps */ +enum{ + SOIL_CAPABILITY_UNKNOWN = -1, + SOIL_CAPABILITY_NONE = 0, + SOIL_CAPABILITY_PRESENT = 1 +}; + +/* static int has_cubemap_capability = SOIL_CAPABILITY_UNKNOWN; */ +int query_cubemap_capability( void ); +#define SOIL_TEXTURE_WRAP_R 0x8072 +#define SOIL_CLAMP_TO_EDGE 0x812F +#define SOIL_NORMAL_MAP 0x8511 +#define SOIL_REFLECTION_MAP 0x8512 +#define SOIL_TEXTURE_CUBE_MAP 0x8513 +#define SOIL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define SOIL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define SOIL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* for non-power-of-two texture */ +/* static int has_NPOT_capability = SOIL_CAPABILITY_UNKNOWN; */ +int query_NPOT_capability( void ); +/* for texture rectangles */ +/* static int has_tex_rectangle_capability = SOIL_CAPABILITY_UNKNOWN; */ +int query_tex_rectangle_capability( void ); +#define SOIL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define SOIL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +/* for using DXT compression */ +/* static int has_DXT_capability = SOIL_CAPABILITY_UNKNOWN; */ +int query_DXT_capability( void ); +#define SOIL_RGB_S3TC_DXT1 0x83F0 +#define SOIL_RGBA_S3TC_DXT1 0x83F1 +#define SOIL_RGBA_S3TC_DXT3 0x83F2 +#define SOIL_RGBA_S3TC_DXT5 0x83F3 + +#if 0 +typedef void (APIENTRY * P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); +P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC soilGlCompressedTexImage2D = NULL; + +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); + +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); +/* other functions */ + +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ); + +/* and the code magic begins here [8^) */ +unsigned int + SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* no direct uploading of the image as a DDS file */ + /* error check */ + if( (fake_HDR_format != SOIL_HDR_RGBE) && + (fake_HDR_format != SOIL_HDR_RGBdivA) && + (fake_HDR_format != SOIL_HDR_RGBdivA2) ) + { + result_string_pointer = "Invalid fake HDR format specified"; + return 0; + } + /* try to load the image (only the HDR type) */ + img = stbi_hdr_load_rgbe( filename, &width, &height, &channels, 4 ); + /* channels holds the original number of channels, which may have been forced */ + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* the load worked, do I need to convert it? */ + if( fake_HDR_format == SOIL_HDR_RGBdivA ) + { + RGBE_to_RGBdivA( img, width, height, rescale_to_max ); + } else if( fake_HDR_format == SOIL_HDR_RGBdivA2 ) + { + RGBE_to_RGBdivA2( img, width, height, rescale_to_max ); + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_file == NULL) || + (x_neg_file == NULL) || + (y_pos_file == NULL) || + (y_neg_file == NULL) || + (z_pos_file == NULL) || + (z_neg_file == NULL) ) + { + result_string_pointer = "Invalid cube map files list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image( x_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( x_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_buffer == NULL) || + (x_neg_buffer == NULL) || + (y_pos_buffer == NULL) || + (y_neg_buffer == NULL) || + (z_pos_buffer == NULL) || + (z_neg_buffer == NULL) ) + { + result_string_pointer = "Invalid cube map buffers list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_pos_buffer, x_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_neg_buffer, x_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_pos_buffer, y_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_neg_buffer, y_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_pos_buffer, z_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_neg_buffer, z_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( filename == NULL ) + { + result_string_pointer = "Invalid single cube map file name"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( buffer == NULL ) + { + result_string_pointer = "Invalid single cube map buffer"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* sub_img; + int dw, dh, sz, i; + unsigned int tex_id; + /* error checking */ + if( data == NULL ) + { + result_string_pointer = "Invalid single cube map image data"; + return 0; + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* which way am I stepping? */ + if( width > height ) + { + dw = height; + dh = 0; + } else + { + dw = 0; + dh = width; + } + sz = dw+dh; + sub_img = (unsigned char *)malloc( sz*sz*channels ); + /* do the splitting and uploading */ + tex_id = reuse_texture_ID; + for( i = 0; i < 6; ++i ) + { + int x, y, idx = 0; + unsigned int cubemap_target = 0; + /* copy in the sub-image */ + for( y = i*dh; y < i*dh+sz; ++y ) + { + for( x = i*dw*channels; x < (i*dw+sz)*channels; ++x ) + { + sub_img[idx++] = data[y*width*channels+x]; + } + } + /* what is my texture target? + remember, this coordinate system is + LHS if viewed from inside the cube! */ + switch( face_order[i] ) + { + case 'N': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z; + break; + case 'S': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + break; + case 'W': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X; + break; + case 'E': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + break; + case 'U': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y; + break; + case 'D': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y; + break; + } + /* upload it as a texture */ + tex_id = SOIL_internal_create_OGL_texture( + sub_img, sz, sz, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, + cubemap_target, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + } + /* and nuke the image and sub-image data */ + SOIL_free_image_data( sub_img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* wrapper function for 2D textures */ + return SOIL_internal_create_OGL_texture( + data, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); +} + +#if SOIL_CHECK_FOR_GL_ERRORS +void check_for_GL_errors( const char *calling_location ) +{ + /* check for errors */ + GLenum err_code = glGetError(); + while( GL_NO_ERROR != err_code ) + { + printf( "OpenGL Error @ %s: %i", calling_location, err_code ); + err_code = glGetError(); + } +} +#else +void check_for_GL_errors( const char *calling_location ) +{ + /* no check for errors */ +} +#endif + +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ) +{ + /* variables */ + unsigned char* img; + unsigned int tex_id; + unsigned int internal_texture_format = 0, original_texture_format = 0; + int DXT_mode = SOIL_CAPABILITY_UNKNOWN; + int max_supported_size; + /* If the user wants to use the texture rectangle I kill a few flags */ + if( flags & SOIL_FLAG_TEXTURE_RECTANGLE ) + { + /* well, the user asked for it, can we do that? */ + if( query_tex_rectangle_capability() == SOIL_CAPABILITY_PRESENT ) + { + /* only allow this if the user in _NOT_ trying to do a cubemap! */ + if( opengl_texture_type == GL_TEXTURE_2D ) + { + /* clean out the flags that cannot be used with texture rectangles */ + flags &= ~( + SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | + SOIL_FLAG_TEXTURE_REPEATS + ); + /* and change my target */ + opengl_texture_target = SOIL_TEXTURE_RECTANGLE_ARB; + opengl_texture_type = SOIL_TEXTURE_RECTANGLE_ARB; + } else + { + /* not allowed for any other uses (yes, I'm looking at you, cubemaps!) */ + flags &= ~SOIL_FLAG_TEXTURE_RECTANGLE; + } + + } else + { + /* can't do it, and that is a breakable offense (uv coords use pixels instead of [0,1]!) */ + result_string_pointer = "Texture Rectangle extension unsupported"; + return 0; + } + } + /* create a copy the image data */ + img = (unsigned char*)malloc( width*height*channels ); + memcpy( img, data, width*height*channels ); + /* does the user want me to invert the image? */ + if( flags & SOIL_FLAG_INVERT_Y ) + { + int i, j; + for( j = 0; j*2 < height; ++j ) + { + int index1 = j * width * channels; + int index2 = (height - 1 - j) * width * channels; + for( i = width * channels; i > 0; --i ) + { + unsigned char temp = img[index1]; + img[index1] = img[index2]; + img[index2] = temp; + ++index1; + ++index2; + } + } + } + /* does the user want me to scale the colors into the NTSC safe RGB range? */ + if( flags & SOIL_FLAG_NTSC_SAFE_RGB ) + { + scale_image_RGB_to_NTSC_safe( img, width, height, channels ); + } + /* does the user want me to convert from straight to pre-multiplied alpha? + (and do we even _have_ alpha?) */ + if( flags & SOIL_FLAG_MULTIPLY_ALPHA ) + { + int i; + switch( channels ) + { + case 2: + for( i = 0; i < 2*width*height; i += 2 ) + { + img[i] = (img[i] * img[i+1] + 128) >> 8; + } + break; + case 4: + for( i = 0; i < 4*width*height; i += 4 ) + { + img[i+0] = (img[i+0] * img[i+3] + 128) >> 8; + img[i+1] = (img[i+1] * img[i+3] + 128) >> 8; + img[i+2] = (img[i+2] * img[i+3] + 128) >> 8; + } + break; + default: + /* no other number of channels contains alpha data */ + break; + } + } + /* if the user can't support NPOT textures, make sure we force the POT option */ + if( (query_NPOT_capability() == SOIL_CAPABILITY_NONE) && + !(flags & SOIL_FLAG_TEXTURE_RECTANGLE) ) + { + /* add in the POT flag */ + flags |= SOIL_FLAG_POWER_OF_TWO; + } + /* how large of a texture can this OpenGL implementation handle? */ + /* texture_check_size_enum will be GL_MAX_TEXTURE_SIZE or SOIL_MAX_CUBE_MAP_TEXTURE_SIZE */ + glGetIntegerv( texture_check_size_enum, &max_supported_size ); + /* do I need to make it a power of 2? */ + if( + (flags & SOIL_FLAG_POWER_OF_TWO) || /* user asked for it */ + (flags & SOIL_FLAG_MIPMAPS) || /* need it for the MIP-maps */ + (width > max_supported_size) || /* it's too big, (make sure it's */ + (height > max_supported_size) ) /* 2^n for later down-sampling) */ + { + int new_width = 1; + int new_height = 1; + while( new_width < width ) + { + new_width *= 2; + } + while( new_height < height ) + { + new_height *= 2; + } + /* still? */ + if( (new_width != width) || (new_height != height) ) + { + /* yep, resize */ + unsigned char *resampled = (unsigned char*)malloc( channels*new_width*new_height ); + up_scale_image( + img, width, height, channels, + resampled, new_width, new_height ); + /* OJO this is for debug only! */ + /* + SOIL_save_image( "\\showme.bmp", SOIL_SAVE_TYPE_BMP, + new_width, new_height, channels, + resampled ); + */ + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + } + /* now, if it is too large... */ + if( (width > max_supported_size) || (height > max_supported_size) ) + { + /* I've already made it a power of two, so simply use the MIPmapping + code to reduce its size to the allowable maximum. */ + unsigned char *resampled; + int reduce_block_x = 1, reduce_block_y = 1; + int new_width, new_height; + if( width > max_supported_size ) + { + reduce_block_x = width / max_supported_size; + } + if( height > max_supported_size ) + { + reduce_block_y = height / max_supported_size; + } + new_width = width / reduce_block_x; + new_height = height / reduce_block_y; + resampled = (unsigned char*)malloc( channels*new_width*new_height ); + /* perform the actual reduction */ + mipmap_image( img, width, height, channels, + resampled, reduce_block_x, reduce_block_y ); + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + /* does the user want us to use YCoCg color space? */ + if( flags & SOIL_FLAG_CoCg_Y ) + { + /* this will only work with RGB and RGBA images */ + convert_RGB_to_YCoCg( img, width, height, channels ); + /* + save_image_as_DDS( "CoCg_Y.dds", width, height, channels, img ); + */ + } + /* create the OpenGL texture ID handle + (note: allowing a forced texture ID lets me reload a texture) */ + tex_id = reuse_texture_ID; + if( tex_id == 0 ) + { + glGenTextures( 1, &tex_id ); + } + check_for_GL_errors( "glGenTextures" ); + /* Note: sometimes glGenTextures fails (usually no OpenGL context) */ + if( tex_id ) + { + /* and what type am I using as the internal texture format? */ + switch( channels ) + { + case 1: + original_texture_format = GL_LUMINANCE; + break; + case 2: + original_texture_format = GL_LUMINANCE_ALPHA; + break; + case 3: + original_texture_format = GL_RGB; + break; + case 4: + original_texture_format = GL_RGBA; + break; + } + internal_texture_format = original_texture_format; + /* does the user want me to, and can I, save as DXT? */ + if( flags & SOIL_FLAG_COMPRESS_TO_DXT ) + { + DXT_mode = query_DXT_capability(); + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* I can use DXT, whether I compress it or OpenGL does */ + if( (channels & 1) == 1 ) + { + /* 1 or 3 channels = DXT1 */ + internal_texture_format = SOIL_RGB_S3TC_DXT1; + } else + { + /* 2 or 4 channels = DXT5 */ + internal_texture_format = SOIL_RGBA_S3TC_DXT5; + } + } + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_id ); + check_for_GL_errors( "glBindTexture" ); + /* upload the main image */ + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* user wants me to do the DXT conversion! */ + int DDS_size; + unsigned char *DDS_data = NULL; + if( (channels & 1) == 1 ) + { + /* RGB, use DXT1 */ + DDS_data = convert_image_to_DXT1( img, width, height, channels, &DDS_size ); + } else + { + /* RGBA, use DXT5 */ + DDS_data = convert_image_to_DXT5( img, width, height, channels, &DDS_size ); + } + if( DDS_data ) + { + soilGlCompressedTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + DDS_size, DDS_data ); + check_for_GL_errors( "glCompressedTexImage2D" ); + SOIL_free_image_data( DDS_data ); + /* printf( "Internal DXT compressor\n" ); */ + } else + { + /* my compression failed, try the OpenGL driver's version */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /* printf( "OpenGL DXT compressor\n" ); */ + } + } else + { + /* user want OpenGL to do all the work! */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /*printf( "OpenGL DXT compressor\n" ); */ + } + /* are any MIPmaps desired? */ + if( flags & SOIL_FLAG_MIPMAPS ) + { + int MIPlevel = 1; + int MIPwidth = (width+1) / 2; + int MIPheight = (height+1) / 2; + unsigned char *resampled = (unsigned char*)malloc( channels*MIPwidth*MIPheight ); + while( ((1< 0; --i ) + { + unsigned char temp = pixel_data[index1]; + pixel_data[index1] = pixel_data[index2]; + pixel_data[index2] = temp; + ++index1; + ++index2; + } + } + + /* save the image */ + save_result = SOIL_save_image( filename, image_type, width, height, 3, pixel_data); + + /* And free the memory */ + SOIL_free_image_data( pixel_data ); + return save_result; +} +#endif + +unsigned char * + SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ) +{ + stbi_uc *result = stbi_load( filename, + width, height, channels, force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded"; + } + return result; +} + +unsigned char * + SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ) +{ + stbi_uc *result = stbi_load_from_memory( + buffer, buffer_length, + width, height, channels, + force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded from memory"; + } + return result; +} + +int + SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ) +{ + int save_result; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL) || + (filename == NULL) ) + { + return 0; + } + if( image_type == SOIL_SAVE_TYPE_BMP ) + { + save_result = stbi_write_bmp( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_TGA ) + { + save_result = stbi_write_tga( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_DDS ) + { + save_result = save_image_as_DDS( filename, + width, height, channels, (const unsigned char *const)data ); + } else + { + save_result = 0; + } + if( save_result == 0 ) + { + result_string_pointer = "Saving the image failed"; + } else + { + result_string_pointer = "Image saved"; + } + return save_result; +} + +void + SOIL_free_image_data + ( + unsigned char *img_data + ) +{ + free( (void*)img_data ); +} + +const char* + SOIL_last_result + ( + void + ) +{ + return result_string_pointer; +} + +#if 0 +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + /* variables */ + DDS_header header; + unsigned int buffer_index = 0; + unsigned int tex_ID = 0; + /* file reading variables */ + unsigned int S3TC_type = 0; + unsigned char *DDS_data; + unsigned int DDS_main_size; + unsigned int DDS_full_size; + unsigned int width, height; + int mipmaps, cubemap, uncompressed, block_size = 16; + unsigned int flag; + unsigned int cf_target, ogl_target_start, ogl_target_end; + unsigned int opengl_texture_type; + int i; + /* 1st off, does the filename even exist? */ + if( NULL == buffer ) + { + /* we can't do it! */ + result_string_pointer = "NULL buffer"; + return 0; + } + if( buffer_length < sizeof( DDS_header ) ) + { + /* we can't do it! */ + result_string_pointer = "DDS file was too small to contain the DDS header"; + return 0; + } + /* try reading in the header */ + memcpy ( (void*)(&header), (const void *)buffer, sizeof( DDS_header ) ); + buffer_index = sizeof( DDS_header ); + /* guilty until proven innocent */ + result_string_pointer = "Failed to read a known DDS header"; + /* validate the header (warning, "goto"'s ahead, shield your eyes!!) */ + flag = ('D'<<0)|('D'<<8)|('S'<<16)|(' '<<24); + if( header.dwMagic != flag ) {goto quick_exit;} + if( header.dwSize != 124 ) {goto quick_exit;} + /* I need all of these */ + flag = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flag) != flag ) {goto quick_exit;} + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + /* I need one of these */ + flag = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flag) == 0 ) {goto quick_exit;} + if( header.sPixelFormat.dwSize != 32 ) {goto quick_exit;} + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) {goto quick_exit;} + /* make sure it is a type we can upload */ + if( (header.sPixelFormat.dwFlags & DDPF_FOURCC) && + !( + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('3'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('5'<<24))) + ) ) + { + goto quick_exit; + } + /* OK, validated the header, let's load the image data */ + result_string_pointer = "DDS header loaded and validated"; + width = header.dwWidth; + height = header.dwHeight; + uncompressed = 1 - (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + cubemap = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + if( uncompressed ) + { + S3TC_type = GL_RGB; + block_size = 3; + if( header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS ) + { + S3TC_type = GL_RGBA; + block_size = 4; + } + DDS_main_size = width * height * block_size; + } else + { + /* can we even handle direct uploading to OpenGL DXT compressed images? */ + if( query_DXT_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of S3TC images not supported by the OpenGL driver"; + return 0; + } + /* well, we know it is DXT1/3/5, because we checked above */ + switch( (header.sPixelFormat.dwFourCC >> 24) - '0' ) + { + case 1: + S3TC_type = SOIL_RGBA_S3TC_DXT1; + block_size = 8; + break; + case 3: + S3TC_type = SOIL_RGBA_S3TC_DXT3; + block_size = 16; + break; + case 5: + S3TC_type = SOIL_RGBA_S3TC_DXT5; + block_size = 16; + break; + } + DDS_main_size = ((width+3)>>2)*((height+3)>>2)*block_size; + } + if( cubemap ) + { + /* does the user want a cubemap? */ + if( !loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was a cubemap"; + return 0; + } + /* can we even handle cubemaps with the OpenGL driver? */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of cubemap images not supported by the OpenGL driver"; + return 0; + } + ogl_target_start = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + ogl_target_end = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + opengl_texture_type = SOIL_TEXTURE_CUBE_MAP; + } else + { + /* does the user want a non-cubemap? */ + if( loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was not a cubemap"; + return 0; + } + ogl_target_start = GL_TEXTURE_2D; + ogl_target_end = GL_TEXTURE_2D; + opengl_texture_type = GL_TEXTURE_2D; + } + if( (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1) ) + { + int shift_offset; + mipmaps = header.dwMipMapCount - 1; + DDS_full_size = DDS_main_size; + if( uncompressed ) + { + /* uncompressed DDS, simple MIPmap size calculation */ + shift_offset = 0; + } else + { + /* compressed DDS, MIPmap size calculation is block based */ + shift_offset = 2; + } + for( i = 1; i <= mipmaps; ++ i ) + { + int w, h; + w = width >> (shift_offset + i); + h = height >> (shift_offset + i); + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + DDS_full_size += w*h*block_size; + } + } else + { + mipmaps = 0; + DDS_full_size = DDS_main_size; + } + DDS_data = (unsigned char*)malloc( DDS_full_size ); + /* got the image data RAM, create or use an existing OpenGL texture handle */ + tex_ID = reuse_texture_ID; + if( tex_ID == 0 ) + { + glGenTextures( 1, &tex_ID ); + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_ID ); + /* do this for each face of the cubemap! */ + for( cf_target = ogl_target_start; cf_target <= ogl_target_end; ++cf_target ) + { + if( buffer_index + DDS_full_size <= buffer_length ) + { + unsigned int byte_offset = DDS_main_size; + memcpy( (void*)DDS_data, (const void*)(&buffer[buffer_index]), DDS_full_size ); + buffer_index += DDS_full_size; + /* upload the main chunk */ + if( uncompressed ) + { + /* and remember, DXT uncompressed uses BGR(A), + so swap to RGB(A) for ALL MIPmap levels */ + for( i = 0; i < DDS_full_size; i += block_size ) + { + unsigned char temp = DDS_data[i]; + DDS_data[i] = DDS_data[i+2]; + DDS_data[i+2] = temp; + } + glTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + S3TC_type, GL_UNSIGNED_BYTE, DDS_data ); + } else + { + soilGlCompressedTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + DDS_main_size, DDS_data ); + } + /* upload the mipmaps, if we have them */ + for( i = 1; i <= mipmaps; ++i ) + { + int w, h, mip_size; + w = width >> i; + h = height >> i; + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + /* upload this mipmap */ + if( uncompressed ) + { + mip_size = w*h*block_size; + glTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + S3TC_type, GL_UNSIGNED_BYTE, &DDS_data[byte_offset] ); + } else + { + mip_size = ((w+3)/4)*((h+3)/4)*block_size; + soilGlCompressedTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + mip_size, &DDS_data[byte_offset] ); + } + /* and move to the next mipmap */ + byte_offset += mip_size; + } + /* it worked! */ + result_string_pointer = "DDS file loaded"; + } else + { + glDeleteTextures( 1, & tex_ID ); + tex_ID = 0; + cf_target = ogl_target_end + 1; + result_string_pointer = "DDS file was too small for expected image data"; + } + }/* end reading each face */ + SOIL_free_image_data( DDS_data ); + if( tex_ID ) + { + /* did I have MIPmaps? */ + if( mipmaps > 0 ) + { + /* instruct OpenGL to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); + } else + { + /* instruct OpenGL _NOT_ to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + } + /* does the user want clamping, or wrapping? */ + if( flags & SOIL_FLAG_TEXTURE_REPEATS ) + { + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, GL_REPEAT ); + } else + { + /* unsigned int clamp_mode = SOIL_CLAMP_TO_EDGE; */ + unsigned int clamp_mode = GL_CLAMP; + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, clamp_mode ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, clamp_mode ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, clamp_mode ); + } + } + +quick_exit: + /* report success or failure */ + return tex_ID; +} + +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + FILE *f; + unsigned char *buffer; + size_t buffer_length, bytes_read; + unsigned int tex_ID = 0; + /* error checks */ + if( NULL == filename ) + { + result_string_pointer = "NULL filename"; + return 0; + } + f = fopen( filename, "rb" ); + if( NULL == f ) + { + /* the file doesn't seem to exist (or be open-able) */ + result_string_pointer = "Can not find DDS file"; + return 0; + } + fseek( f, 0, SEEK_END ); + buffer_length = ftell( f ); + fseek( f, 0, SEEK_SET ); + buffer = (unsigned char *) malloc( buffer_length ); + if( NULL == buffer ) + { + result_string_pointer = "malloc failed"; + fclose( f ); + return 0; + } + bytes_read = fread( (void*)buffer, 1, buffer_length, f ); + fclose( f ); + if( bytes_read < buffer_length ) + { + /* huh? */ + buffer_length = bytes_read; + } + /* now try to do the loading */ + tex_ID = SOIL_direct_load_DDS_from_memory( + (const unsigned char *const)buffer, buffer_length, + reuse_texture_ID, flags, loading_as_cubemap ); + SOIL_free_image_data( buffer ); + return tex_ID; +} + + +int query_NPOT_capability( void ) +{ + /* check for the capability */ + if( has_NPOT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_non_power_of_two" ) ) + ) + { + /* not there, flag the failure */ + has_NPOT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_NPOT_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do non-power-of-two textures or not */ + return has_NPOT_capability; +} + +int query_tex_rectangle_capability( void ) +{ + /* check for the capability */ + if( has_tex_rectangle_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_NV_texture_rectangle" ) ) + ) + { + /* not there, flag the failure */ + has_tex_rectangle_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_tex_rectangle_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do texture rectangles or not */ + return has_tex_rectangle_capability; +} + +int query_cubemap_capability( void ) +{ + /* check for the capability */ + if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_cube_map" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_cube_map" ) ) + ) + { + /* not there, flag the failure */ + has_cubemap_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_cubemap_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do cubemaps or not */ + return has_cubemap_capability; +} + + +int query_DXT_capability( void ) +{ + /* check for the capability */ + if( has_DXT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( NULL == strstr( + (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_compression_s3tc" ) ) + { + /* not there, flag the failure */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* and find the address of the extension function */ + P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC ext_addr = NULL; + #ifdef WIN32 + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + wglGetProcAddress + ( + "glCompressedTexImage2DARB" + ); + #elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + CFBundleRef bundle; + CFURLRef bundleURL = + CFURLCreateWithFileSystemPath( + kCFAllocatorDefault, + CFSTR("/System/Library/Frameworks/OpenGL.framework"), + kCFURLPOSIXPathStyle, + true ); + CFStringRef extensionName = + CFStringCreateWithCString( + kCFAllocatorDefault, + "glCompressedTexImage2DARB", + kCFStringEncodingASCII ); + bundle = CFBundleCreate( kCFAllocatorDefault, bundleURL ); + assert( bundle != NULL ); + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + CFBundleGetFunctionPointerForName + ( + bundle, extensionName + ); + CFRelease( bundleURL ); + CFRelease( extensionName ); + CFRelease( bundle ); + #else + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + glXGetProcAddressARB + ( + (const GLubyte *)"glCompressedTexImage2DARB" + ); + #endif + /* Flag it so no checks needed later */ + if( NULL == ext_addr ) + { + /* hmm, not good!! This should not happen, but does on my + laptop's VIA chipset. The GL_EXT_texture_compression_s3tc + spec requires that ARB_texture_compression be present too. + this means I can upload and have the OpenGL drive do the + conversion, but I can't use my own routines or load DDS files + from disk and upload them directly [8^( */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* all's well! */ + soilGlCompressedTexImage2D = ext_addr; + has_DXT_capability = SOIL_CAPABILITY_PRESENT; + } + } + } + /* let the user know if we can do DXT or not */ + return has_DXT_capability; +} +#endif diff --git a/Externals/SOIL/image_DXT.c b/Externals/SOIL/image_DXT.c index 3c7883e9af..0693062a7b 100644 --- a/Externals/SOIL/image_DXT.c +++ b/Externals/SOIL/image_DXT.c @@ -1,632 +1,632 @@ -/* - Jonathan Dummer - 2007-07-31-10.32 - - simple DXT compression / decompression code - - public domain -*/ - -#include "image_DXT.h" -#include -#include -#include -#include - -/* set this =1 if you want to use the covarince matrix method... - which is better than my method of using standard deviations - overall, except on the infintesimal chance that the power - method fails for finding the largest eigenvector */ -#define USE_COV_MAT 1 - -/********* Function Prototypes *********/ -/* - Takes a 4x4 block of pixels and compresses it into 8 bytes - in DXT1 format (color only, no alpha). Speed is valued - over prettyness, at least for now. -*/ -void compress_DDS_color_block( - int channels, - const unsigned char *const uncompressed, - unsigned char compressed[8] ); -/* - Takes a 4x4 block of pixels and compresses the alpha - component it into 8 bytes for use in DXT5 DDS files. - Speed is valued over prettyness, at least for now. -*/ -void compress_DDS_alpha_block( - const unsigned char *const uncompressed, - unsigned char compressed[8] ); - -/********* Actual Exposed Functions *********/ -int - save_image_as_DDS - ( - const char *filename, - int width, int height, int channels, - const unsigned char *const data - ) -{ - /* variables */ - FILE *fout; - unsigned char *DDS_data; - DDS_header header; - int DDS_size; - /* error check */ - if( (NULL == filename) || - (width < 1) || (height < 1) || - (channels < 1) || (channels > 4) || - (data == NULL ) ) - { - return 0; - } - /* Convert the image */ - if( (channels & 1) == 1 ) - { - /* no alpha, just use DXT1 */ - DDS_data = convert_image_to_DXT1( data, width, height, channels, &DDS_size ); - } else - { - /* has alpha, so use DXT5 */ - DDS_data = convert_image_to_DXT5( data, width, height, channels, &DDS_size ); - } - /* save it */ - memset( &header, 0, sizeof( DDS_header ) ); - header.dwMagic = ('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24); - header.dwSize = 124; - header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; - header.dwWidth = width; - header.dwHeight = height; - header.dwPitchOrLinearSize = DDS_size; - header.sPixelFormat.dwSize = 32; - header.sPixelFormat.dwFlags = DDPF_FOURCC; - if( (channels & 1) == 1 ) - { - header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('1' << 24); - } else - { - header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('5' << 24); - } - header.sCaps.dwCaps1 = DDSCAPS_TEXTURE; - /* write it out */ - fout = fopen( filename, "wb"); - fwrite( &header, sizeof( DDS_header ), 1, fout ); - fwrite( DDS_data, 1, DDS_size, fout ); - fclose( fout ); - /* done */ - free( DDS_data ); - return 1; -} - -unsigned char* convert_image_to_DXT1( - const unsigned char *const uncompressed, - int width, int height, int channels, - int *out_size ) -{ - unsigned char *compressed; - int i, j, x, y; - unsigned char ublock[16*3]; - unsigned char cblock[8]; - int cindex = 0, chan_step = 1; - int block_count = 0; - /* error check */ - *out_size = 0; - if( (width < 1) || (height < 1) || - (NULL == uncompressed) || - (channels < 1) || (channels > 4) ) - { - return NULL; - } - /* for channels == 1 or 2, I do not step forward for R,G,B values */ - if( channels < 3 ) - { - chan_step = 0; - } - /* get the RAM for the compressed image - (8 bytes per 4x4 pixel block) */ - *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 8; - compressed = (unsigned char*)malloc( *out_size ); - /* go through each block */ - for( j = 0; j < height; j += 4 ) - { - for( i = 0; i < width; i += 4 ) - { - /* copy this block into a new one */ - int idx = 0; - int mx = 4, my = 4; - if( j+4 >= height ) - { - my = height - j; - } - if( i+4 >= width ) - { - mx = width - i; - } - for( y = 0; y < my; ++y ) - { - for( x = 0; x < mx; ++x ) - { - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; - } - for( x = mx; x < 4; ++x ) - { - ublock[idx++] = ublock[0]; - ublock[idx++] = ublock[1]; - ublock[idx++] = ublock[2]; - } - } - for( y = my; y < 4; ++y ) - { - for( x = 0; x < 4; ++x ) - { - ublock[idx++] = ublock[0]; - ublock[idx++] = ublock[1]; - ublock[idx++] = ublock[2]; - } - } - /* compress the block */ - ++block_count; - compress_DDS_color_block( 3, ublock, cblock ); - /* copy the data from the block into the main block */ - for( x = 0; x < 8; ++x ) - { - compressed[cindex++] = cblock[x]; - } - } - } - return compressed; -} - -unsigned char* convert_image_to_DXT5( - const unsigned char *const uncompressed, - int width, int height, int channels, - int *out_size ) -{ - unsigned char *compressed; - int i, j, x, y; - unsigned char ublock[16*4]; - unsigned char cblock[8]; - int cindex = 0, chan_step = 1; - int block_count = 0, has_alpha; - /* error check */ - *out_size = 0; - if( (width < 1) || (height < 1) || - (NULL == uncompressed) || - (channels < 1) || ( channels > 4) ) - { - return NULL; - } - /* for channels == 1 or 2, I do not step forward for R,G,B vales */ - if( channels < 3 ) - { - chan_step = 0; - } - /* # channels = 1 or 3 have no alpha, 2 & 4 do have alpha */ - has_alpha = 1 - (channels & 1); - /* get the RAM for the compressed image - (16 bytes per 4x4 pixel block) */ - *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 16; - compressed = (unsigned char*)malloc( *out_size ); - /* go through each block */ - for( j = 0; j < height; j += 4 ) - { - for( i = 0; i < width; i += 4 ) - { - /* local variables, and my block counter */ - int idx = 0; - int mx = 4, my = 4; - if( j+4 >= height ) - { - my = height - j; - } - if( i+4 >= width ) - { - mx = width - i; - } - for( y = 0; y < my; ++y ) - { - for( x = 0; x < mx; ++x ) - { - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; - ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; - ublock[idx++] = - has_alpha * uncompressed[(j+y)*width*channels+(i+x)*channels+channels-1] - + (1-has_alpha)*255; - } - for( x = mx; x < 4; ++x ) - { - ublock[idx++] = ublock[0]; - ublock[idx++] = ublock[1]; - ublock[idx++] = ublock[2]; - ublock[idx++] = ublock[3]; - } - } - for( y = my; y < 4; ++y ) - { - for( x = 0; x < 4; ++x ) - { - ublock[idx++] = ublock[0]; - ublock[idx++] = ublock[1]; - ublock[idx++] = ublock[2]; - ublock[idx++] = ublock[3]; - } - } - /* now compress the alpha block */ - compress_DDS_alpha_block( ublock, cblock ); - /* copy the data from the compressed alpha block into the main buffer */ - for( x = 0; x < 8; ++x ) - { - compressed[cindex++] = cblock[x]; - } - /* then compress the color block */ - ++block_count; - compress_DDS_color_block( 4, ublock, cblock ); - /* copy the data from the compressed color block into the main buffer */ - for( x = 0; x < 8; ++x ) - { - compressed[cindex++] = cblock[x]; - } - } - } - return compressed; -} - -/********* Helper Functions *********/ -int convert_bit_range( int c, int from_bits, int to_bits ) -{ - int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); - return (b + (b >> from_bits)) >> from_bits; -} - -int rgb_to_565( int r, int g, int b ) -{ - return - (convert_bit_range( r, 8, 5 ) << 11) | - (convert_bit_range( g, 8, 6 ) << 05) | - (convert_bit_range( b, 8, 5 ) << 00); -} - -void rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) -{ - *r = convert_bit_range( (c >> 11) & 31, 5, 8 ); - *g = convert_bit_range( (c >> 05) & 63, 6, 8 ); - *b = convert_bit_range( (c >> 00) & 31, 5, 8 ); -} - -void compute_color_line_STDEV( - const unsigned char *const uncompressed, - int channels, - float point[3], float direction[3] ) -{ - const float inv_16 = 1.0f / 16.0f; - int i; - float sum_r = 0.0f, sum_g = 0.0f, sum_b = 0.0f; - float sum_rr = 0.0f, sum_gg = 0.0f, sum_bb = 0.0f; - float sum_rg = 0.0f, sum_rb = 0.0f, sum_gb = 0.0f; - /* calculate all data needed for the covariance matrix - ( to compare with _rygdxt code) */ - for( i = 0; i < 16*channels; i += channels ) - { - sum_r += uncompressed[i+0]; - sum_rr += uncompressed[i+0] * uncompressed[i+0]; - sum_g += uncompressed[i+1]; - sum_gg += uncompressed[i+1] * uncompressed[i+1]; - sum_b += uncompressed[i+2]; - sum_bb += uncompressed[i+2] * uncompressed[i+2]; - sum_rg += uncompressed[i+0] * uncompressed[i+1]; - sum_rb += uncompressed[i+0] * uncompressed[i+2]; - sum_gb += uncompressed[i+1] * uncompressed[i+2]; - } - /* convert the sums to averages */ - sum_r *= inv_16; - sum_g *= inv_16; - sum_b *= inv_16; - /* and convert the squares to the squares of the value - avg_value */ - sum_rr -= 16.0f * sum_r * sum_r; - sum_gg -= 16.0f * sum_g * sum_g; - sum_bb -= 16.0f * sum_b * sum_b; - sum_rg -= 16.0f * sum_r * sum_g; - sum_rb -= 16.0f * sum_r * sum_b; - sum_gb -= 16.0f * sum_g * sum_b; - /* the point on the color line is the average */ - point[0] = sum_r; - point[1] = sum_g; - point[2] = sum_b; - #if USE_COV_MAT - /* - The following idea was from ryg. - (https://mollyrocket.com/forums/viewtopic.php?t=392) - The method worked great (less RMSE than mine) most of - the time, but had some issues handling some simple - boundary cases, like full green next to full red, - which would generate a covariance matrix like this: - - | 1 -1 0 | - | -1 1 0 | - | 0 0 0 | - - For a given starting vector, the power method can - generate all zeros! So no starting with {1,1,1} - as I was doing! This kind of error is still a - slight posibillity, but will be very rare. - */ - /* use the covariance matrix directly - (1st iteration, don't use all 1.0 values!) */ - sum_r = 1.0f; - sum_g = 2.718281828f; - sum_b = 3.141592654f; - direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; - direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; - direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; - /* 2nd iteration, use results from the 1st guy */ - sum_r = direction[0]; - sum_g = direction[1]; - sum_b = direction[2]; - direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; - direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; - direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; - /* 3rd iteration, use results from the 2nd guy */ - sum_r = direction[0]; - sum_g = direction[1]; - sum_b = direction[2]; - direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; - direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; - direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; - #else - /* use my standard deviation method - (very robust, a tiny bit slower and less accurate) */ - direction[0] = sqrt( sum_rr ); - direction[1] = sqrt( sum_gg ); - direction[2] = sqrt( sum_bb ); - /* which has a greater component */ - if( sum_gg > sum_rr ) - { - /* green has greater component, so base the other signs off of green */ - if( sum_rg < 0.0f ) - { - direction[0] = -direction[0]; - } - if( sum_gb < 0.0f ) - { - direction[2] = -direction[2]; - } - } else - { - /* red has a greater component */ - if( sum_rg < 0.0f ) - { - direction[1] = -direction[1]; - } - if( sum_rb < 0.0f ) - { - direction[2] = -direction[2]; - } - } - #endif -} - -void LSE_master_colors_max_min( - int *cmax, int *cmin, - int channels, - const unsigned char *const uncompressed ) -{ - int i, j; - /* the master colors */ - int c0[3], c1[3]; - /* used for fitting the line */ - float sum_x[] = { 0.0f, 0.0f, 0.0f }; - float sum_x2[] = { 0.0f, 0.0f, 0.0f }; - float dot_max = 1.0f, dot_min = -1.0f; - float vec_len2 = 0.0f; - float dot; - /* error check */ - if( (channels < 3) || (channels > 4) ) - { - return; - } - compute_color_line_STDEV( uncompressed, channels, sum_x, sum_x2 ); - vec_len2 = 1.0f / ( 0.00001f + - sum_x2[0]*sum_x2[0] + sum_x2[1]*sum_x2[1] + sum_x2[2]*sum_x2[2] ); - /* finding the max and min vector values */ - dot_max = - ( - sum_x2[0] * uncompressed[0] + - sum_x2[1] * uncompressed[1] + - sum_x2[2] * uncompressed[2] - ); - dot_min = dot_max; - for( i = 1; i < 16; ++i ) - { - dot = - ( - sum_x2[0] * uncompressed[i*channels+0] + - sum_x2[1] * uncompressed[i*channels+1] + - sum_x2[2] * uncompressed[i*channels+2] - ); - if( dot < dot_min ) - { - dot_min = dot; - } else if( dot > dot_max ) - { - dot_max = dot; - } - } - /* and the offset (from the average location) */ - dot = sum_x2[0]*sum_x[0] + sum_x2[1]*sum_x[1] + sum_x2[2]*sum_x[2]; - dot_min -= dot; - dot_max -= dot; - /* post multiply by the scaling factor */ - dot_min *= vec_len2; - dot_max *= vec_len2; - /* OK, build the master colors */ - for( i = 0; i < 3; ++i ) - { - /* color 0 */ - c0[i] = (int)(0.5f + sum_x[i] + dot_max * sum_x2[i]); - if( c0[i] < 0 ) - { - c0[i] = 0; - } else if( c0[i] > 255 ) - { - c0[i] = 255; - } - /* color 1 */ - c1[i] = (int)(0.5f + sum_x[i] + dot_min * sum_x2[i]); - if( c1[i] < 0 ) - { - c1[i] = 0; - } else if( c1[i] > 255 ) - { - c1[i] = 255; - } - } - /* down_sample (with rounding?) */ - i = rgb_to_565( c0[0], c0[1], c0[2] ); - j = rgb_to_565( c1[0], c1[1], c1[2] ); - if( i > j ) - { - *cmax = i; - *cmin = j; - } else - { - *cmax = j; - *cmin = i; - } -} - -void - compress_DDS_color_block - ( - int channels, - const unsigned char *const uncompressed, - unsigned char compressed[8] - ) -{ - /* variables */ - int i; - int next_bit; - int enc_c0, enc_c1; - int c0[4], c1[4]; - float color_line[] = { 0.0f, 0.0f, 0.0f, 0.0f }; - float vec_len2 = 0.0f, dot_offset = 0.0f; - /* stupid order */ - int swizzle4[] = { 0, 2, 3, 1 }; - /* get the master colors */ - LSE_master_colors_max_min( &enc_c0, &enc_c1, channels, uncompressed ); - /* store the 565 color 0 and color 1 */ - compressed[0] = (enc_c0 >> 0) & 255; - compressed[1] = (enc_c0 >> 8) & 255; - compressed[2] = (enc_c1 >> 0) & 255; - compressed[3] = (enc_c1 >> 8) & 255; - /* zero out the compressed data */ - compressed[4] = 0; - compressed[5] = 0; - compressed[6] = 0; - compressed[7] = 0; - /* reconstitute the master color vectors */ - rgb_888_from_565( enc_c0, &c0[0], &c0[1], &c0[2] ); - rgb_888_from_565( enc_c1, &c1[0], &c1[1], &c1[2] ); - /* the new vector */ - vec_len2 = 0.0f; - for( i = 0; i < 3; ++i ) - { - color_line[i] = (float)(c1[i] - c0[i]); - vec_len2 += color_line[i] * color_line[i]; - } - if( vec_len2 > 0.0f ) - { - vec_len2 = 1.0f / vec_len2; - } - /* pre-proform the scaling */ - color_line[0] *= vec_len2; - color_line[1] *= vec_len2; - color_line[2] *= vec_len2; - /* compute the offset (constant) portion of the dot product */ - dot_offset = color_line[0]*c0[0] + color_line[1]*c0[1] + color_line[2]*c0[2]; - /* store the rest of the bits */ - next_bit = 8*4; - for( i = 0; i < 16; ++i ) - { - /* find the dot product of this color, to place it on the line - (should be [-1,1]) */ - int next_value = 0; - float dot_product = - color_line[0] * uncompressed[i*channels+0] + - color_line[1] * uncompressed[i*channels+1] + - color_line[2] * uncompressed[i*channels+2] - - dot_offset; - /* map to [0,3] */ - next_value = (int)( dot_product * 3.0f + 0.5f ); - if( next_value > 3 ) - { - next_value = 3; - } else if( next_value < 0 ) - { - next_value = 0; - } - /* OK, store this value */ - compressed[next_bit >> 3] |= swizzle4[ next_value ] << (next_bit & 7); - next_bit += 2; - } - /* done compressing to DXT1 */ -} - -void - compress_DDS_alpha_block - ( - const unsigned char *const uncompressed, - unsigned char compressed[8] - ) -{ - /* variables */ - int i; - int next_bit; - int a0, a1; - float scale_me; - /* stupid order */ - int swizzle8[] = { 1, 7, 6, 5, 4, 3, 2, 0 }; - /* get the alpha limits (a0 > a1) */ - a0 = a1 = uncompressed[3]; - for( i = 4+3; i < 16*4; i += 4 ) - { - if( uncompressed[i] > a0 ) - { - a0 = uncompressed[i]; - } else if( uncompressed[i] < a1 ) - { - a1 = uncompressed[i]; - } - } - /* store those limits, and zero the rest of the compressed dataset */ - compressed[0] = a0; - compressed[1] = a1; - /* zero out the compressed data */ - compressed[2] = 0; - compressed[3] = 0; - compressed[4] = 0; - compressed[5] = 0; - compressed[6] = 0; - compressed[7] = 0; - /* store the all of the alpha values */ - next_bit = 8*2; - scale_me = 7.9999f / (a0 - a1); - for( i = 3; i < 16*4; i += 4 ) - { - /* convert this alpha value to a 3 bit number */ - int svalue; - int value = (int)((uncompressed[i] - a1) * scale_me); - svalue = swizzle8[ value&7 ]; - /* OK, store this value, start with the 1st byte */ - compressed[next_bit >> 3] |= svalue << (next_bit & 7); - if( (next_bit & 7) > 5 ) - { - /* spans 2 bytes, fill in the start of the 2nd byte */ - compressed[1 + (next_bit >> 3)] |= svalue >> (8 - (next_bit & 7) ); - } - next_bit += 3; - } - /* done compressing to DXT1 */ -} +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#include "image_DXT.h" +#include +#include +#include +#include + +/* set this =1 if you want to use the covarince matrix method... + which is better than my method of using standard deviations + overall, except on the infintesimal chance that the power + method fails for finding the largest eigenvector */ +#define USE_COV_MAT 1 + +/********* Function Prototypes *********/ +/* + Takes a 4x4 block of pixels and compresses it into 8 bytes + in DXT1 format (color only, no alpha). Speed is valued + over prettyness, at least for now. +*/ +void compress_DDS_color_block( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] ); +/* + Takes a 4x4 block of pixels and compresses the alpha + component it into 8 bytes for use in DXT5 DDS files. + Speed is valued over prettyness, at least for now. +*/ +void compress_DDS_alpha_block( + const unsigned char *const uncompressed, + unsigned char compressed[8] ); + +/********* Actual Exposed Functions *********/ +int + save_image_as_DDS + ( + const char *filename, + int width, int height, int channels, + const unsigned char *const data + ) +{ + /* variables */ + FILE *fout; + unsigned char *DDS_data; + DDS_header header; + int DDS_size; + /* error check */ + if( (NULL == filename) || + (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL ) ) + { + return 0; + } + /* Convert the image */ + if( (channels & 1) == 1 ) + { + /* no alpha, just use DXT1 */ + DDS_data = convert_image_to_DXT1( data, width, height, channels, &DDS_size ); + } else + { + /* has alpha, so use DXT5 */ + DDS_data = convert_image_to_DXT5( data, width, height, channels, &DDS_size ); + } + /* save it */ + memset( &header, 0, sizeof( DDS_header ) ); + header.dwMagic = ('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24); + header.dwSize = 124; + header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; + header.dwWidth = width; + header.dwHeight = height; + header.dwPitchOrLinearSize = DDS_size; + header.sPixelFormat.dwSize = 32; + header.sPixelFormat.dwFlags = DDPF_FOURCC; + if( (channels & 1) == 1 ) + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('1' << 24); + } else + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('5' << 24); + } + header.sCaps.dwCaps1 = DDSCAPS_TEXTURE; + /* write it out */ + fout = fopen( filename, "wb"); + fwrite( &header, sizeof( DDS_header ), 1, fout ); + fwrite( DDS_data, 1, DDS_size, fout ); + fclose( fout ); + /* done */ + free( DDS_data ); + return 1; +} + +unsigned char* convert_image_to_DXT1( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*3]; + unsigned char cblock[8]; + int cindex = 0, chan_step = 1; + int block_count = 0; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || (channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B values */ + if( channels < 3 ) + { + chan_step = 0; + } + /* get the RAM for the compressed image + (8 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 8; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* copy this block into a new one */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + /* compress the block */ + ++block_count; + compress_DDS_color_block( 3, ublock, cblock ); + /* copy the data from the block into the main block */ + for( x = 0; x < 8; ++x ) + { + compressed[cindex++] = cblock[x]; + } + } + } + return compressed; +} + +unsigned char* convert_image_to_DXT5( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*4]; + unsigned char cblock[8]; + int cindex = 0, chan_step = 1; + int block_count = 0, has_alpha; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || ( channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B vales */ + if( channels < 3 ) + { + chan_step = 0; + } + /* # channels = 1 or 3 have no alpha, 2 & 4 do have alpha */ + has_alpha = 1 - (channels & 1); + /* get the RAM for the compressed image + (16 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 16; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* local variables, and my block counter */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + ublock[idx++] = + has_alpha * uncompressed[(j+y)*width*channels+(i+x)*channels+channels-1] + + (1-has_alpha)*255; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + /* now compress the alpha block */ + compress_DDS_alpha_block( ublock, cblock ); + /* copy the data from the compressed alpha block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[cindex++] = cblock[x]; + } + /* then compress the color block */ + ++block_count; + compress_DDS_color_block( 4, ublock, cblock ); + /* copy the data from the compressed color block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[cindex++] = cblock[x]; + } + } + } + return compressed; +} + +/********* Helper Functions *********/ +int convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} + +int rgb_to_565( int r, int g, int b ) +{ + return + (convert_bit_range( r, 8, 5 ) << 11) | + (convert_bit_range( g, 8, 6 ) << 05) | + (convert_bit_range( b, 8, 5 ) << 00); +} + +void rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = convert_bit_range( (c >> 00) & 31, 5, 8 ); +} + +void compute_color_line_STDEV( + const unsigned char *const uncompressed, + int channels, + float point[3], float direction[3] ) +{ + const float inv_16 = 1.0f / 16.0f; + int i; + float sum_r = 0.0f, sum_g = 0.0f, sum_b = 0.0f; + float sum_rr = 0.0f, sum_gg = 0.0f, sum_bb = 0.0f; + float sum_rg = 0.0f, sum_rb = 0.0f, sum_gb = 0.0f; + /* calculate all data needed for the covariance matrix + ( to compare with _rygdxt code) */ + for( i = 0; i < 16*channels; i += channels ) + { + sum_r += uncompressed[i+0]; + sum_rr += uncompressed[i+0] * uncompressed[i+0]; + sum_g += uncompressed[i+1]; + sum_gg += uncompressed[i+1] * uncompressed[i+1]; + sum_b += uncompressed[i+2]; + sum_bb += uncompressed[i+2] * uncompressed[i+2]; + sum_rg += uncompressed[i+0] * uncompressed[i+1]; + sum_rb += uncompressed[i+0] * uncompressed[i+2]; + sum_gb += uncompressed[i+1] * uncompressed[i+2]; + } + /* convert the sums to averages */ + sum_r *= inv_16; + sum_g *= inv_16; + sum_b *= inv_16; + /* and convert the squares to the squares of the value - avg_value */ + sum_rr -= 16.0f * sum_r * sum_r; + sum_gg -= 16.0f * sum_g * sum_g; + sum_bb -= 16.0f * sum_b * sum_b; + sum_rg -= 16.0f * sum_r * sum_g; + sum_rb -= 16.0f * sum_r * sum_b; + sum_gb -= 16.0f * sum_g * sum_b; + /* the point on the color line is the average */ + point[0] = sum_r; + point[1] = sum_g; + point[2] = sum_b; + #if USE_COV_MAT + /* + The following idea was from ryg. + (https://mollyrocket.com/forums/viewtopic.php?t=392) + The method worked great (less RMSE than mine) most of + the time, but had some issues handling some simple + boundary cases, like full green next to full red, + which would generate a covariance matrix like this: + + | 1 -1 0 | + | -1 1 0 | + | 0 0 0 | + + For a given starting vector, the power method can + generate all zeros! So no starting with {1,1,1} + as I was doing! This kind of error is still a + slight posibillity, but will be very rare. + */ + /* use the covariance matrix directly + (1st iteration, don't use all 1.0 values!) */ + sum_r = 1.0f; + sum_g = 2.718281828f; + sum_b = 3.141592654f; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 2nd iteration, use results from the 1st guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 3rd iteration, use results from the 2nd guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + #else + /* use my standard deviation method + (very robust, a tiny bit slower and less accurate) */ + direction[0] = sqrt( sum_rr ); + direction[1] = sqrt( sum_gg ); + direction[2] = sqrt( sum_bb ); + /* which has a greater component */ + if( sum_gg > sum_rr ) + { + /* green has greater component, so base the other signs off of green */ + if( sum_rg < 0.0f ) + { + direction[0] = -direction[0]; + } + if( sum_gb < 0.0f ) + { + direction[2] = -direction[2]; + } + } else + { + /* red has a greater component */ + if( sum_rg < 0.0f ) + { + direction[1] = -direction[1]; + } + if( sum_rb < 0.0f ) + { + direction[2] = -direction[2]; + } + } + #endif +} + +void LSE_master_colors_max_min( + int *cmax, int *cmin, + int channels, + const unsigned char *const uncompressed ) +{ + int i, j; + /* the master colors */ + int c0[3], c1[3]; + /* used for fitting the line */ + float sum_x[] = { 0.0f, 0.0f, 0.0f }; + float sum_x2[] = { 0.0f, 0.0f, 0.0f }; + float dot_max = 1.0f, dot_min = -1.0f; + float vec_len2 = 0.0f; + float dot; + /* error check */ + if( (channels < 3) || (channels > 4) ) + { + return; + } + compute_color_line_STDEV( uncompressed, channels, sum_x, sum_x2 ); + vec_len2 = 1.0f / ( 0.00001f + + sum_x2[0]*sum_x2[0] + sum_x2[1]*sum_x2[1] + sum_x2[2]*sum_x2[2] ); + /* finding the max and min vector values */ + dot_max = + ( + sum_x2[0] * uncompressed[0] + + sum_x2[1] * uncompressed[1] + + sum_x2[2] * uncompressed[2] + ); + dot_min = dot_max; + for( i = 1; i < 16; ++i ) + { + dot = + ( + sum_x2[0] * uncompressed[i*channels+0] + + sum_x2[1] * uncompressed[i*channels+1] + + sum_x2[2] * uncompressed[i*channels+2] + ); + if( dot < dot_min ) + { + dot_min = dot; + } else if( dot > dot_max ) + { + dot_max = dot; + } + } + /* and the offset (from the average location) */ + dot = sum_x2[0]*sum_x[0] + sum_x2[1]*sum_x[1] + sum_x2[2]*sum_x[2]; + dot_min -= dot; + dot_max -= dot; + /* post multiply by the scaling factor */ + dot_min *= vec_len2; + dot_max *= vec_len2; + /* OK, build the master colors */ + for( i = 0; i < 3; ++i ) + { + /* color 0 */ + c0[i] = (int)(0.5f + sum_x[i] + dot_max * sum_x2[i]); + if( c0[i] < 0 ) + { + c0[i] = 0; + } else if( c0[i] > 255 ) + { + c0[i] = 255; + } + /* color 1 */ + c1[i] = (int)(0.5f + sum_x[i] + dot_min * sum_x2[i]); + if( c1[i] < 0 ) + { + c1[i] = 0; + } else if( c1[i] > 255 ) + { + c1[i] = 255; + } + } + /* down_sample (with rounding?) */ + i = rgb_to_565( c0[0], c0[1], c0[2] ); + j = rgb_to_565( c1[0], c1[1], c1[2] ); + if( i > j ) + { + *cmax = i; + *cmin = j; + } else + { + *cmax = j; + *cmin = i; + } +} + +void + compress_DDS_color_block + ( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int enc_c0, enc_c1; + int c0[4], c1[4]; + float color_line[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float vec_len2 = 0.0f, dot_offset = 0.0f; + /* stupid order */ + int swizzle4[] = { 0, 2, 3, 1 }; + /* get the master colors */ + LSE_master_colors_max_min( &enc_c0, &enc_c1, channels, uncompressed ); + /* store the 565 color 0 and color 1 */ + compressed[0] = (enc_c0 >> 0) & 255; + compressed[1] = (enc_c0 >> 8) & 255; + compressed[2] = (enc_c1 >> 0) & 255; + compressed[3] = (enc_c1 >> 8) & 255; + /* zero out the compressed data */ + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* reconstitute the master color vectors */ + rgb_888_from_565( enc_c0, &c0[0], &c0[1], &c0[2] ); + rgb_888_from_565( enc_c1, &c1[0], &c1[1], &c1[2] ); + /* the new vector */ + vec_len2 = 0.0f; + for( i = 0; i < 3; ++i ) + { + color_line[i] = (float)(c1[i] - c0[i]); + vec_len2 += color_line[i] * color_line[i]; + } + if( vec_len2 > 0.0f ) + { + vec_len2 = 1.0f / vec_len2; + } + /* pre-proform the scaling */ + color_line[0] *= vec_len2; + color_line[1] *= vec_len2; + color_line[2] *= vec_len2; + /* compute the offset (constant) portion of the dot product */ + dot_offset = color_line[0]*c0[0] + color_line[1]*c0[1] + color_line[2]*c0[2]; + /* store the rest of the bits */ + next_bit = 8*4; + for( i = 0; i < 16; ++i ) + { + /* find the dot product of this color, to place it on the line + (should be [-1,1]) */ + int next_value = 0; + float dot_product = + color_line[0] * uncompressed[i*channels+0] + + color_line[1] * uncompressed[i*channels+1] + + color_line[2] * uncompressed[i*channels+2] - + dot_offset; + /* map to [0,3] */ + next_value = (int)( dot_product * 3.0f + 0.5f ); + if( next_value > 3 ) + { + next_value = 3; + } else if( next_value < 0 ) + { + next_value = 0; + } + /* OK, store this value */ + compressed[next_bit >> 3] |= swizzle4[ next_value ] << (next_bit & 7); + next_bit += 2; + } + /* done compressing to DXT1 */ +} + +void + compress_DDS_alpha_block + ( + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int a0, a1; + float scale_me; + /* stupid order */ + int swizzle8[] = { 1, 7, 6, 5, 4, 3, 2, 0 }; + /* get the alpha limits (a0 > a1) */ + a0 = a1 = uncompressed[3]; + for( i = 4+3; i < 16*4; i += 4 ) + { + if( uncompressed[i] > a0 ) + { + a0 = uncompressed[i]; + } else if( uncompressed[i] < a1 ) + { + a1 = uncompressed[i]; + } + } + /* store those limits, and zero the rest of the compressed dataset */ + compressed[0] = a0; + compressed[1] = a1; + /* zero out the compressed data */ + compressed[2] = 0; + compressed[3] = 0; + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* store the all of the alpha values */ + next_bit = 8*2; + scale_me = 7.9999f / (a0 - a1); + for( i = 3; i < 16*4; i += 4 ) + { + /* convert this alpha value to a 3 bit number */ + int svalue; + int value = (int)((uncompressed[i] - a1) * scale_me); + svalue = swizzle8[ value&7 ]; + /* OK, store this value, start with the 1st byte */ + compressed[next_bit >> 3] |= svalue << (next_bit & 7); + if( (next_bit & 7) > 5 ) + { + /* spans 2 bytes, fill in the start of the 2nd byte */ + compressed[1 + (next_bit >> 3)] |= svalue >> (8 - (next_bit & 7) ); + } + next_bit += 3; + } + /* done compressing to DXT1 */ +} diff --git a/Externals/SOIL/image_DXT.h b/Externals/SOIL/image_DXT.h index ce7716425c..75f604f42b 100644 --- a/Externals/SOIL/image_DXT.h +++ b/Externals/SOIL/image_DXT.h @@ -1,123 +1,123 @@ -/* - Jonathan Dummer - 2007-07-31-10.32 - - simple DXT compression / decompression code - - public domain -*/ - -#ifndef HEADER_IMAGE_DXT -#define HEADER_IMAGE_DXT - -/** - Converts an image from an array of unsigned chars (RGB or RGBA) to - DXT1 or DXT5, then saves the converted image to disk. - \return 0 if failed, otherwise returns 1 -**/ -int -save_image_as_DDS -( - const char *filename, - int width, int height, int channels, - const unsigned char *const data -); - -/** - take an image and convert it to DXT1 (no alpha) -**/ -unsigned char* -convert_image_to_DXT1 -( - const unsigned char *const uncompressed, - int width, int height, int channels, - int *out_size -); - -/** - take an image and convert it to DXT5 (with alpha) -**/ -unsigned char* -convert_image_to_DXT5 -( - const unsigned char *const uncompressed, - int width, int height, int channels, - int *out_size -); - -/** A bunch of DirectDraw Surface structures and flags **/ -typedef struct -{ - unsigned int dwMagic; - unsigned int dwSize; - unsigned int dwFlags; - unsigned int dwHeight; - unsigned int dwWidth; - unsigned int dwPitchOrLinearSize; - unsigned int dwDepth; - unsigned int dwMipMapCount; - unsigned int dwReserved1[ 11 ]; - - /* DDPIXELFORMAT */ - struct - { - unsigned int dwSize; - unsigned int dwFlags; - unsigned int dwFourCC; - unsigned int dwRGBBitCount; - unsigned int dwRBitMask; - unsigned int dwGBitMask; - unsigned int dwBBitMask; - unsigned int dwAlphaBitMask; - } - sPixelFormat; - - /* DDCAPS2 */ - struct - { - unsigned int dwCaps1; - unsigned int dwCaps2; - unsigned int dwDDSX; - unsigned int dwReserved; - } - sCaps; - unsigned int dwReserved2; -} -DDS_header ; - -/* the following constants were copied directly off the MSDN website */ - -/* The dwFlags member of the original DDSURFACEDESC2 structure - can be set to one or more of the following values. */ -#define DDSD_CAPS 0x00000001 -#define DDSD_HEIGHT 0x00000002 -#define DDSD_WIDTH 0x00000004 -#define DDSD_PITCH 0x00000008 -#define DDSD_PIXELFORMAT 0x00001000 -#define DDSD_MIPMAPCOUNT 0x00020000 -#define DDSD_LINEARSIZE 0x00080000 -#define DDSD_DEPTH 0x00800000 - -/* DirectDraw Pixel Format */ -#define DDPF_ALPHAPIXELS 0x00000001 -#define DDPF_FOURCC 0x00000004 -#define DDPF_RGB 0x00000040 - -/* The dwCaps1 member of the DDSCAPS2 structure can be - set to one or more of the following values. */ -#define DDSCAPS_COMPLEX 0x00000008 -#define DDSCAPS_TEXTURE 0x00001000 -#define DDSCAPS_MIPMAP 0x00400000 - -/* The dwCaps2 member of the DDSCAPS2 structure can be - set to one or more of the following values. */ -#define DDSCAPS2_CUBEMAP 0x00000200 -#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 -#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 -#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 -#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 -#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 -#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 -#define DDSCAPS2_VOLUME 0x00200000 - -#endif /* HEADER_IMAGE_DXT */ +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#ifndef HEADER_IMAGE_DXT +#define HEADER_IMAGE_DXT + +/** + Converts an image from an array of unsigned chars (RGB or RGBA) to + DXT1 or DXT5, then saves the converted image to disk. + \return 0 if failed, otherwise returns 1 +**/ +int +save_image_as_DDS +( + const char *filename, + int width, int height, int channels, + const unsigned char *const data +); + +/** + take an image and convert it to DXT1 (no alpha) +**/ +unsigned char* +convert_image_to_DXT1 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** + take an image and convert it to DXT5 (with alpha) +**/ +unsigned char* +convert_image_to_DXT5 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** A bunch of DirectDraw Surface structures and flags **/ +typedef struct +{ + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + /* DDPIXELFORMAT */ + struct + { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } + sPixelFormat; + + /* DDCAPS2 */ + struct + { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } + sCaps; + unsigned int dwReserved2; +} +DDS_header ; + +/* the following constants were copied directly off the MSDN website */ + +/* The dwFlags member of the original DDSURFACEDESC2 structure + can be set to one or more of the following values. */ +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +/* DirectDraw Pixel Format */ +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +/* The dwCaps1 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +/* The dwCaps2 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +#endif /* HEADER_IMAGE_DXT */ diff --git a/Externals/SOIL/image_helper.c b/Externals/SOIL/image_helper.c index 445f6bbf58..d22340f405 100644 --- a/Externals/SOIL/image_helper.c +++ b/Externals/SOIL/image_helper.c @@ -1,435 +1,435 @@ -/* - Jonathan Dummer - - image helper functions - - MIT license -*/ - -#include "image_helper.h" -#include -#include - -/* Upscaling the image uses simple bilinear interpolation */ -int - up_scale_image - ( - const unsigned char* const orig, - int width, int height, int channels, - unsigned char* resampled, - int resampled_width, int resampled_height - ) -{ - float dx, dy; - int x, y, c; - - /* error(s) check */ - if ( (width < 1) || (height < 1) || - (resampled_width < 2) || (resampled_height < 2) || - (channels < 1) || - (NULL == orig) || (NULL == resampled) ) - { - /* signify badness */ - return 0; - } - /* - for each given pixel in the new map, find the exact location - from the original map which would contribute to this guy - */ - dx = (width - 1.0f) / (resampled_width - 1.0f); - dy = (height - 1.0f) / (resampled_height - 1.0f); - for ( y = 0; y < resampled_height; ++y ) - { - /* find the base y index and fractional offset from that */ - float sampley = y * dy; - int inty = (int)sampley; - /* if( inty < 0 ) { inty = 0; } else */ - if( inty > height - 2 ) { inty = height - 2; } - sampley -= inty; - for ( x = 0; x < resampled_width; ++x ) - { - float samplex = x * dx; - int intx = (int)samplex; - int base_index; - /* find the base x index and fractional offset from that */ - /* if( intx < 0 ) { intx = 0; } else */ - if( intx > width - 2 ) { intx = width - 2; } - samplex -= intx; - /* base index into the original image */ - base_index = (inty * width + intx) * channels; - for ( c = 0; c < channels; ++c ) - { - /* do the sampling */ - float value = 0.5f; - value += orig[base_index] - *(1.0f-samplex)*(1.0f-sampley); - value += orig[base_index+channels] - *(samplex)*(1.0f-sampley); - value += orig[base_index+width*channels] - *(1.0f-samplex)*(sampley); - value += orig[base_index+width*channels+channels] - *(samplex)*(sampley); - /* move to the next channel */ - ++base_index; - /* save the new value */ - resampled[y*resampled_width*channels+x*channels+c] = - (unsigned char)(value); - } - } - } - /* done */ - return 1; -} - -int - mipmap_image - ( - const unsigned char* const orig, - int width, int height, int channels, - unsigned char* resampled, - int block_size_x, int block_size_y - ) -{ - int mip_width, mip_height; - int i, j, c; - - /* error check */ - if( (width < 1) || (height < 1) || - (channels < 1) || (orig == NULL) || - (resampled == NULL) || - (block_size_x < 1) || (block_size_y < 1) ) - { - /* nothing to do */ - return 0; - } - mip_width = width / block_size_x; - mip_height = height / block_size_y; - if( mip_width < 1 ) - { - mip_width = 1; - } - if( mip_height < 1 ) - { - mip_height = 1; - } - for( j = 0; j < mip_height; ++j ) - { - for( i = 0; i < mip_width; ++i ) - { - for( c = 0; c < channels; ++c ) - { - const int index = (j*block_size_y)*width*channels + (i*block_size_x)*channels + c; - int sum_value; - int u,v; - int u_block = block_size_x; - int v_block = block_size_y; - int block_area; - /* do a bit of checking so we don't over-run the boundaries - (necessary for non-square textures!) */ - if( block_size_x * (i+1) > width ) - { - u_block = width - i*block_size_y; - } - if( block_size_y * (j+1) > height ) - { - v_block = height - j*block_size_y; - } - block_area = u_block*v_block; - /* for this pixel, see what the average - of all the values in the block are. - note: start the sum at the rounding value, not at 0 */ - sum_value = block_area >> 1; - for( v = 0; v < v_block; ++v ) - for( u = 0; u < u_block; ++u ) - { - sum_value += orig[index + v*width*channels + u*channels]; - } - resampled[j*mip_width*channels + i*channels + c] = sum_value / block_area; - } - } - } - return 1; -} - -int - scale_image_RGB_to_NTSC_safe - ( - unsigned char* orig, - int width, int height, int channels - ) -{ - const float scale_lo = 16.0f - 0.499f; - const float scale_hi = 235.0f + 0.499f; - int i, j; - int nc = channels; - unsigned char scale_LUT[256]; - /* error check */ - if( (width < 1) || (height < 1) || - (channels < 1) || (orig == NULL) ) - { - /* nothing to do */ - return 0; - } - /* set up the scaling Look Up Table */ - for( i = 0; i < 256; ++i ) - { - scale_LUT[i] = (unsigned char)((scale_hi - scale_lo) * i / 255.0f + scale_lo); - } - /* for channels = 2 or 4, ignore the alpha component */ - nc -= 1 - (channels & 1); - /* OK, go through the image and scale any non-alpha components */ - for( i = 0; i < width*height*channels; i += channels ) - { - for( j = 0; j < nc; ++j ) - { - orig[i+j] = scale_LUT[orig[i+j]]; - } - } - return 1; -} - -unsigned char clamp_byte( int x ) { return ( (x) < 0 ? (0) : ( (x) > 255 ? 255 : (x) ) ); } - -/* - This function takes the RGB components of the image - and converts them into YCoCg. 3 components will be - re-ordered to CoYCg (for optimum DXT1 compression), - while 4 components will be ordered CoCgAY (for DXT5 - compression). -*/ -int - convert_RGB_to_YCoCg - ( - unsigned char* orig, - int width, int height, int channels - ) -{ - int i; - /* error check */ - if( (width < 1) || (height < 1) || - (channels < 3) || (channels > 4) || - (orig == NULL) ) - { - /* nothing to do */ - return -1; - } - /* do the conversion */ - if( channels == 3 ) - { - for( i = 0; i < width*height*3; i += 3 ) - { - int r = orig[i+0]; - int g = (orig[i+1] + 1) >> 1; - int b = orig[i+2]; - int tmp = (2 + r + b) >> 2; - /* Co */ - orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); - /* Y */ - orig[i+1] = clamp_byte( g + tmp ); - /* Cg */ - orig[i+2] = clamp_byte( 128 + g - tmp ); - } - } else - { - for( i = 0; i < width*height*4; i += 4 ) - { - int r = orig[i+0]; - int g = (orig[i+1] + 1) >> 1; - int b = orig[i+2]; - unsigned char a = orig[i+3]; - int tmp = (2 + r + b) >> 2; - /* Co */ - orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); - /* Cg */ - orig[i+1] = clamp_byte( 128 + g - tmp ); - /* Alpha */ - orig[i+2] = a; - /* Y */ - orig[i+3] = clamp_byte( g + tmp ); - } - } - /* done */ - return 0; -} - -/* - This function takes the YCoCg components of the image - and converts them into RGB. See above. -*/ -int - convert_YCoCg_to_RGB - ( - unsigned char* orig, - int width, int height, int channels - ) -{ - int i; - /* error check */ - if( (width < 1) || (height < 1) || - (channels < 3) || (channels > 4) || - (orig == NULL) ) - { - /* nothing to do */ - return -1; - } - /* do the conversion */ - if( channels == 3 ) - { - for( i = 0; i < width*height*3; i += 3 ) - { - int co = orig[i+0] - 128; - int y = orig[i+1]; - int cg = orig[i+2] - 128; - /* R */ - orig[i+0] = clamp_byte( y + co - cg ); - /* G */ - orig[i+1] = clamp_byte( y + cg ); - /* B */ - orig[i+2] = clamp_byte( y - co - cg ); - } - } else - { - for( i = 0; i < width*height*4; i += 4 ) - { - int co = orig[i+0] - 128; - int cg = orig[i+1] - 128; - unsigned char a = orig[i+2]; - int y = orig[i+3]; - /* R */ - orig[i+0] = clamp_byte( y + co - cg ); - /* G */ - orig[i+1] = clamp_byte( y + cg ); - /* B */ - orig[i+2] = clamp_byte( y - co - cg ); - /* A */ - orig[i+3] = a; - } - } - /* done */ - return 0; -} - -float -find_max_RGBE -( - unsigned char *image, - int width, int height -) -{ - float max_val = 0.0f; - unsigned char *img = image; - int i, j; - for( i = width * height; i > 0; --i ) - { - /* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ - float scale = ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); - for( j = 0; j < 3; ++j ) - { - if( img[j] * scale > max_val ) - { - max_val = img[j] * scale; - } - } - /* next pixel */ - img += 4; - } - return max_val; -} - -int -RGBE_to_RGBdivA -( - unsigned char *image, - int width, int height, - int rescale_to_max -) -{ - /* local variables */ - int i, iv; - unsigned char *img = image; - float scale = 1.0f; - /* error check */ - if( (!image) || (width < 1) || (height < 1) ) - { - return 0; - } - /* convert (note: no negative numbers, but 0.0 is possible) */ - if( rescale_to_max ) - { - scale = 255.0f / find_max_RGBE( image, width, height ); - } - for( i = width * height; i > 0; --i ) - { - /* decode this pixel, and find the max */ - float r,g,b,e, m; - /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ - e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); - r = e * img[0]; - g = e * img[1]; - b = e * img[2]; - m = (r > g) ? r : g; - m = (b > m) ? b : m; - /* and encode it into RGBdivA */ - iv = (m != 0.0f) ? (int)(255.0f / m) : 1.0f; - iv = (iv < 1) ? 1 : iv; - img[3] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * r + 0.5f); - img[0] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * g + 0.5f); - img[1] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * b + 0.5f); - img[2] = (iv > 255) ? 255 : iv; - /* and on to the next pixel */ - img += 4; - } - return 1; -} - -int -RGBE_to_RGBdivA2 -( - unsigned char *image, - int width, int height, - int rescale_to_max -) -{ - /* local variables */ - int i, iv; - unsigned char *img = image; - float scale = 1.0f; - /* error check */ - if( (!image) || (width < 1) || (height < 1) ) - { - return 0; - } - /* convert (note: no negative numbers, but 0.0 is possible) */ - if( rescale_to_max ) - { - scale = 255.0f * 255.0f / find_max_RGBE( image, width, height ); - } - for( i = width * height; i > 0; --i ) - { - /* decode this pixel, and find the max */ - float r,g,b,e, m; - /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ - e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); - r = e * img[0]; - g = e * img[1]; - b = e * img[2]; - m = (r > g) ? r : g; - m = (b > m) ? b : m; - /* and encode it into RGBdivA */ - iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1.0f; - iv = (iv < 1) ? 1 : iv; - img[3] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f); - img[0] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f); - img[1] = (iv > 255) ? 255 : iv; - iv = (int)(img[3] * img[3] * b / 255.0f + 0.5f); - img[2] = (iv > 255) ? 255 : iv; - /* and on to the next pixel */ - img += 4; - } - return 1; -} +/* + Jonathan Dummer + + image helper functions + + MIT license +*/ + +#include "image_helper.h" +#include +#include + +/* Upscaling the image uses simple bilinear interpolation */ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ) +{ + float dx, dy; + int x, y, c; + + /* error(s) check */ + if ( (width < 1) || (height < 1) || + (resampled_width < 2) || (resampled_height < 2) || + (channels < 1) || + (NULL == orig) || (NULL == resampled) ) + { + /* signify badness */ + return 0; + } + /* + for each given pixel in the new map, find the exact location + from the original map which would contribute to this guy + */ + dx = (width - 1.0f) / (resampled_width - 1.0f); + dy = (height - 1.0f) / (resampled_height - 1.0f); + for ( y = 0; y < resampled_height; ++y ) + { + /* find the base y index and fractional offset from that */ + float sampley = y * dy; + int inty = (int)sampley; + /* if( inty < 0 ) { inty = 0; } else */ + if( inty > height - 2 ) { inty = height - 2; } + sampley -= inty; + for ( x = 0; x < resampled_width; ++x ) + { + float samplex = x * dx; + int intx = (int)samplex; + int base_index; + /* find the base x index and fractional offset from that */ + /* if( intx < 0 ) { intx = 0; } else */ + if( intx > width - 2 ) { intx = width - 2; } + samplex -= intx; + /* base index into the original image */ + base_index = (inty * width + intx) * channels; + for ( c = 0; c < channels; ++c ) + { + /* do the sampling */ + float value = 0.5f; + value += orig[base_index] + *(1.0f-samplex)*(1.0f-sampley); + value += orig[base_index+channels] + *(samplex)*(1.0f-sampley); + value += orig[base_index+width*channels] + *(1.0f-samplex)*(sampley); + value += orig[base_index+width*channels+channels] + *(samplex)*(sampley); + /* move to the next channel */ + ++base_index; + /* save the new value */ + resampled[y*resampled_width*channels+x*channels+c] = + (unsigned char)(value); + } + } + } + /* done */ + return 1; +} + +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ) +{ + int mip_width, mip_height; + int i, j, c; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) || + (resampled == NULL) || + (block_size_x < 1) || (block_size_y < 1) ) + { + /* nothing to do */ + return 0; + } + mip_width = width / block_size_x; + mip_height = height / block_size_y; + if( mip_width < 1 ) + { + mip_width = 1; + } + if( mip_height < 1 ) + { + mip_height = 1; + } + for( j = 0; j < mip_height; ++j ) + { + for( i = 0; i < mip_width; ++i ) + { + for( c = 0; c < channels; ++c ) + { + const int index = (j*block_size_y)*width*channels + (i*block_size_x)*channels + c; + int sum_value; + int u,v; + int u_block = block_size_x; + int v_block = block_size_y; + int block_area; + /* do a bit of checking so we don't over-run the boundaries + (necessary for non-square textures!) */ + if( block_size_x * (i+1) > width ) + { + u_block = width - i*block_size_y; + } + if( block_size_y * (j+1) > height ) + { + v_block = height - j*block_size_y; + } + block_area = u_block*v_block; + /* for this pixel, see what the average + of all the values in the block are. + note: start the sum at the rounding value, not at 0 */ + sum_value = block_area >> 1; + for( v = 0; v < v_block; ++v ) + for( u = 0; u < u_block; ++u ) + { + sum_value += orig[index + v*width*channels + u*channels]; + } + resampled[j*mip_width*channels + i*channels + c] = sum_value / block_area; + } + } + } + return 1; +} + +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + const float scale_lo = 16.0f - 0.499f; + const float scale_hi = 235.0f + 0.499f; + int i, j; + int nc = channels; + unsigned char scale_LUT[256]; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) ) + { + /* nothing to do */ + return 0; + } + /* set up the scaling Look Up Table */ + for( i = 0; i < 256; ++i ) + { + scale_LUT[i] = (unsigned char)((scale_hi - scale_lo) * i / 255.0f + scale_lo); + } + /* for channels = 2 or 4, ignore the alpha component */ + nc -= 1 - (channels & 1); + /* OK, go through the image and scale any non-alpha components */ + for( i = 0; i < width*height*channels; i += channels ) + { + for( j = 0; j < nc; ++j ) + { + orig[i+j] = scale_LUT[orig[i+j]]; + } + } + return 1; +} + +unsigned char clamp_byte( int x ) { return ( (x) < 0 ? (0) : ( (x) > 255 ? 255 : (x) ) ); } + +/* + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +*/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Y */ + orig[i+1] = clamp_byte( g + tmp ); + /* Cg */ + orig[i+2] = clamp_byte( 128 + g - tmp ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + unsigned char a = orig[i+3]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Cg */ + orig[i+1] = clamp_byte( 128 + g - tmp ); + /* Alpha */ + orig[i+2] = a; + /* Y */ + orig[i+3] = clamp_byte( g + tmp ); + } + } + /* done */ + return 0; +} + +/* + This function takes the YCoCg components of the image + and converts them into RGB. See above. +*/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int co = orig[i+0] - 128; + int y = orig[i+1]; + int cg = orig[i+2] - 128; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int co = orig[i+0] - 128; + int cg = orig[i+1] - 128; + unsigned char a = orig[i+2]; + int y = orig[i+3]; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + /* A */ + orig[i+3] = a; + } + } + /* done */ + return 0; +} + +float +find_max_RGBE +( + unsigned char *image, + int width, int height +) +{ + float max_val = 0.0f; + unsigned char *img = image; + int i, j; + for( i = width * height; i > 0; --i ) + { + /* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + float scale = ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + for( j = 0; j < 3; ++j ) + { + if( img[j] * scale > max_val ) + { + max_val = img[j] * scale; + } + } + /* next pixel */ + img += 4; + } + return max_val; +} + +int +RGBE_to_RGBdivA +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)(255.0f / m) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * r + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * g + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * b + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} + +int +RGBE_to_RGBdivA2 +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f * 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * b / 255.0f + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} diff --git a/Externals/SOIL/image_helper.h b/Externals/SOIL/image_helper.h index abb257c342..3fa2662f0b 100644 --- a/Externals/SOIL/image_helper.h +++ b/Externals/SOIL/image_helper.h @@ -1,115 +1,115 @@ -/* - Jonathan Dummer - - Image helper functions - - MIT license -*/ - -#ifndef HEADER_IMAGE_HELPER -#define HEADER_IMAGE_HELPER - -#ifdef __cplusplus -extern "C" { -#endif - -/** - This function upscales an image. - Not to be used to create MIPmaps, - but to make it square, - or to make it a power-of-two sized. -**/ -int - up_scale_image - ( - const unsigned char* const orig, - int width, int height, int channels, - unsigned char* resampled, - int resampled_width, int resampled_height - ); - -/** - This function downscales an image. - Used for creating MIPmaps, - the incoming image should be a - power-of-two sized. -**/ -int - mipmap_image - ( - const unsigned char* const orig, - int width, int height, int channels, - unsigned char* resampled, - int block_size_x, int block_size_y - ); - -/** - This function takes the RGB components of the image - and scales each channel from [0,255] to [16,235]. - This makes the colors "Safe" for display on NTSC - displays. Note that this is _NOT_ a good idea for - loading images like normal- or height-maps! -**/ -int - scale_image_RGB_to_NTSC_safe - ( - unsigned char* orig, - int width, int height, int channels - ); - -/** - This function takes the RGB components of the image - and converts them into YCoCg. 3 components will be - re-ordered to CoYCg (for optimum DXT1 compression), - while 4 components will be ordered CoCgAY (for DXT5 - compression). -**/ -int - convert_RGB_to_YCoCg - ( - unsigned char* orig, - int width, int height, int channels - ); - -/** - This function takes the YCoCg components of the image - and converts them into RGB. See above. -**/ -int - convert_YCoCg_to_RGB - ( - unsigned char* orig, - int width, int height, int channels - ); - -/** - Converts an HDR image from an array - of unsigned chars (RGBE) to RGBdivA - \return 0 if failed, otherwise returns 1 -**/ -int - RGBE_to_RGBdivA - ( - unsigned char *image, - int width, int height, - int rescale_to_max - ); - -/** - Converts an HDR image from an array - of unsigned chars (RGBE) to RGBdivA2 - \return 0 if failed, otherwise returns 1 -**/ -int - RGBE_to_RGBdivA2 - ( - unsigned char *image, - int width, int height, - int rescale_to_max - ); - -#ifdef __cplusplus -} -#endif - -#endif /* HEADER_IMAGE_HELPER */ +/* + Jonathan Dummer + + Image helper functions + + MIT license +*/ + +#ifndef HEADER_IMAGE_HELPER +#define HEADER_IMAGE_HELPER + +#ifdef __cplusplus +extern "C" { +#endif + +/** + This function upscales an image. + Not to be used to create MIPmaps, + but to make it square, + or to make it a power-of-two sized. +**/ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ); + +/** + This function downscales an image. + Used for creating MIPmaps, + the incoming image should be a + power-of-two sized. +**/ +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ); + +/** + This function takes the RGB components of the image + and scales each channel from [0,255] to [16,235]. + This makes the colors "Safe" for display on NTSC + displays. Note that this is _NOT_ a good idea for + loading images like normal- or height-maps! +**/ +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +**/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the YCoCg components of the image + and converts them into RGB. See above. +**/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA2 + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA2 + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_IMAGE_HELPER */ diff --git a/Externals/SOIL/stb_image_aug.h b/Externals/SOIL/stb_image_aug.h index c35a9c570d..a84714c6da 100644 --- a/Externals/SOIL/stb_image_aug.h +++ b/Externals/SOIL/stb_image_aug.h @@ -1,354 +1,354 @@ -/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c - when you control the images you're loading - - QUICK NOTES: - Primarily of interest to game developers and other people who can - avoid problematic images and only need the trivial interface - - JPEG baseline (no JPEG progressive, no oddball channel decimations) - PNG non-interlaced - BMP non-1bpp, non-RLE - TGA (not sure what subset, if a subset) - PSD (composited view only, no extra channels) - HDR (radiance rgbE format) - writes BMP,TGA (define STBI_NO_WRITE to remove code) - decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) - supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) - - TODO: - stbi_info_* - - history: - 1.16 major bugfix - convert_format converted one too many pixels - 1.15 initialize some fields for thread safety - 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) - 1.13 threadsafe - 1.12 const qualifiers in the API - 1.11 Support installable IDCT, colorspace conversion routines - 1.10 Fixes for 64-bit (don't use "unsigned long") - optimized upsampling by Fabian "ryg" Giesen - 1.09 Fix format-conversion for PSD code (bad global variables!) - 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz - 1.07 attempt to fix C++ warning/errors again - 1.06 attempt to fix C++ warning/errors again - 1.05 fix TGA loading to return correct *comp and use good luminance calc - 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free - 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR - 1.02 support for (subset of) HDR files, float interface for preferred access to them - 1.01 fix bug: possible bug in handling right-side up bmps... not sure - fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all - 1.00 interface to zlib that skips zlib header - 0.99 correct handling of alpha in palette - 0.98 TGA loader by lonesock; dynamically add loaders (untested) - 0.97 jpeg errors on too large a file; also catch another malloc failure - 0.96 fix detection of invalid v value - particleman@mollyrocket forum - 0.95 during header scan, seek to markers in case of padding - 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same - 0.93 handle jpegtran output; verbose errors - 0.92 read 4,8,16,24,32-bit BMP files of several formats - 0.91 output 24-bit Windows 3.0 BMP files - 0.90 fix a few more warnings; bump version number to approach 1.0 - 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd - 0.60 fix compiling as c++ - 0.59 fix warnings: merge Dave Moore's -Wall fixes - 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian - 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less - than 16 available - 0.56 fix bug: zlib uncompressed mode len vs. nlen - 0.55 fix bug: restart_interval not initialized to 0 - 0.54 allow NULL for 'int *comp' - 0.53 fix bug in png 3->4; speedup png decoding - 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments - 0.51 obey req_comp requests, 1-component jpegs return as 1-component, - on 'test' only check type, not whether we support this variant -*/ - -#ifndef HEADER_STB_IMAGE_AUGMENTED -#define HEADER_STB_IMAGE_AUGMENTED - -//// begin header file //////////////////////////////////////////////////// -// -// Limitations: -// - no progressive/interlaced support (jpeg, png) -// - 8-bit samples only (jpeg, png) -// - not threadsafe -// - channel subsampling of at most 2 in each dimension (jpeg) -// - no delayed line count (jpeg) -- IJG doesn't support either -// -// Basic usage (see HDR discussion below): -// int x,y,n; -// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); -// // ... process data if not NULL ... -// // ... x = width, y = height, n = # 8-bit components per pixel ... -// // ... replace '0' with '1'..'4' to force that many components per pixel -// stbi_image_free(data) -// -// Standard parameters: -// int *x -- outputs image width in pixels -// int *y -- outputs image height in pixels -// int *comp -- outputs # of image components in image file -// int req_comp -- if non-zero, # of image components requested in result -// -// The return value from an image loader is an 'unsigned char *' which points -// to the pixel data. The pixel data consists of *y scanlines of *x pixels, -// with each pixel consisting of N interleaved 8-bit components; the first -// pixel pointed to is top-left-most in the image. There is no padding between -// image scanlines or between pixels, regardless of format. The number of -// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. -// If req_comp is non-zero, *comp has the number of components that _would_ -// have been output otherwise. E.g. if you set req_comp to 4, you will always -// get RGBA output, but you can check *comp to easily see if it's opaque. -// -// An output image with N components has the following components interleaved -// in this order in each pixel: -// -// N=#comp components -// 1 grey -// 2 grey, alpha -// 3 red, green, blue -// 4 red, green, blue, alpha -// -// If image loading fails for any reason, the return value will be NULL, -// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() -// can be queried for an extremely brief, end-user unfriendly explanation -// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid -// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly -// more user-friendly ones. -// -// Paletted PNG and BMP images are automatically depalettized. -// -// -// =========================================================================== -// -// HDR image support (disable by defining STBI_NO_HDR) -// -// stb_image now supports loading HDR images in general, and currently -// the Radiance .HDR file format, although the support is provided -// generically. You can still load any file through the existing interface; -// if you attempt to load an HDR file, it will be automatically remapped to -// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; -// both of these constants can be reconfigured through this interface: -// -// stbi_hdr_to_ldr_gamma(2.2f); -// stbi_hdr_to_ldr_scale(1.0f); -// -// (note, do not use _inverse_ constants; stbi_image will invert them -// appropriately). -// -// Additionally, there is a new, parallel interface for loading files as -// (linear) floats to preserve the full dynamic range: -// -// float *data = stbi_loadf(filename, &x, &y, &n, 0); -// -// If you load LDR images through this interface, those images will -// be promoted to floating point values, run through the inverse of -// constants corresponding to the above: -// -// stbi_ldr_to_hdr_scale(1.0f); -// stbi_ldr_to_hdr_gamma(2.2f); -// -// Finally, given a filename (or an open file or memory block--see header -// file for details) containing image data, you can query for the "most -// appropriate" interface to use (that is, whether the image is HDR or -// not), using: -// -// stbi_is_hdr(char *filename); - -#ifndef STBI_NO_STDIO -#include -#endif - -#define STBI_VERSION 1 - -enum -{ - STBI_default = 0, // only used for req_comp - - STBI_grey = 1, - STBI_grey_alpha = 2, - STBI_rgb = 3, - STBI_rgb_alpha = 4, -}; - -typedef unsigned char stbi_uc; - -#ifdef __cplusplus -extern "C" { -#endif - -// WRITING API - -#if !defined(STBI_NO_WRITE) && !defined(STBI_NO_STDIO) -// write a BMP/TGA file given tightly packed 'comp' channels (no padding, nor bmp-stride-padding) -// (you must include the appropriate extension in the filename). -// returns TRUE on success, FALSE if couldn't open file, error writing file -extern int stbi_write_bmp (char const *filename, int x, int y, int comp, void *data); -extern int stbi_write_tga (char const *filename, int x, int y, int comp, void *data); -#endif - -// PRIMARY API - works on images of any type - -// load image by filename, open file, or memory buffer -#ifndef STBI_NO_STDIO -extern stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); -#endif -extern stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -// for stbi_load_from_file, file pointer is left pointing immediately after image - -#ifndef STBI_NO_HDR -#ifndef STBI_NO_STDIO -extern float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); -extern float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif -extern float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); - -extern void stbi_hdr_to_ldr_gamma(float gammafactor); -extern void stbi_hdr_to_ldr_scale(float scale); - -extern void stbi_ldr_to_hdr_gamma(float gammafactor); -extern void stbi_ldr_to_hdr_scale(float scale); - -#endif // STBI_NO_HDR - -// get a VERY brief reason for failure -// NOT THREADSAFE -extern const char *stbi_failure_reason (void); - -// free the loaded image -- this is just free() -extern void stbi_image_free (void *retval_from_stbi_load); - -// get image dimensions & components without fully decoding -extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); -extern int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); -#ifndef STBI_NO_STDIO -extern int stbi_info (char const *filename, int *x, int *y, int *comp); -extern int stbi_is_hdr (char const *filename); -extern int stbi_is_hdr_from_file(FILE *f); -#endif - -// ZLIB client - used by PNG, available for other purposes - -extern char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); -extern char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); -extern int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -extern char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); -extern int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -// TYPE-SPECIFIC ACCESS - -// is it a jpeg? -extern int stbi_jpeg_test_memory (stbi_uc const *buffer, int len); -extern stbi_uc *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); - -#ifndef STBI_NO_STDIO -extern stbi_uc *stbi_jpeg_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern int stbi_jpeg_test_file (FILE *f); -extern stbi_uc *stbi_jpeg_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); - -extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); -extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); -#endif - -// is it a png? -extern int stbi_png_test_memory (stbi_uc const *buffer, int len); -extern stbi_uc *stbi_png_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); - -#ifndef STBI_NO_STDIO -extern stbi_uc *stbi_png_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); -extern int stbi_png_test_file (FILE *f); -extern stbi_uc *stbi_png_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); -#endif - -// is it a bmp? -extern int stbi_bmp_test_memory (stbi_uc const *buffer, int len); - -extern stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -#ifndef STBI_NO_STDIO -extern int stbi_bmp_test_file (FILE *f); -extern stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif - -// is it a tga? -extern int stbi_tga_test_memory (stbi_uc const *buffer, int len); - -extern stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -#ifndef STBI_NO_STDIO -extern int stbi_tga_test_file (FILE *f); -extern stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif - -// is it a psd? -extern int stbi_psd_test_memory (stbi_uc const *buffer, int len); - -extern stbi_uc *stbi_psd_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -#ifndef STBI_NO_STDIO -extern int stbi_psd_test_file (FILE *f); -extern stbi_uc *stbi_psd_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif - -// is it an hdr? -extern int stbi_hdr_test_memory (stbi_uc const *buffer, int len); - -extern float * stbi_hdr_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp); -extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -#ifndef STBI_NO_STDIO -extern int stbi_hdr_test_file (FILE *f); -extern float * stbi_hdr_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_hdr_load_rgbe_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif - -// define new loaders -typedef struct -{ - int (*test_memory)(stbi_uc const *buffer, int len); - stbi_uc * (*load_from_memory)(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); - #ifndef STBI_NO_STDIO - int (*test_file)(FILE *f); - stbi_uc * (*load_from_file)(FILE *f, int *x, int *y, int *comp, int req_comp); - #endif -} stbi_loader; - -// register a loader by filling out the above structure (you must defined ALL functions) -// returns 1 if added or already added, 0 if not added (too many loaders) -// NOT THREADSAFE -extern int stbi_register_loader(stbi_loader *loader); - -// define faster low-level operations (typically SIMD support) -#if STBI_SIMD -typedef void (*stbi_idct_8x8)(uint8 *out, int out_stride, short data[64], unsigned short *dequantize); -// compute an integer IDCT on "input" -// input[x] = data[x] * dequantize[x] -// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' -// CLAMP results to 0..255 -typedef void (*stbi_YCbCr_to_RGB_run)(uint8 *output, uint8 const *y, uint8 const *cb, uint8 const *cr, int count, int step); -// compute a conversion from YCbCr to RGB -// 'count' pixels -// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B -// y: Y input channel -// cb: Cb input channel; scale/biased to be 0..255 -// cr: Cr input channel; scale/biased to be 0..255 - -extern void stbi_install_idct(stbi_idct_8x8 func); -extern void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); -#endif // STBI_SIMD - -#ifdef __cplusplus -} -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBI_INCLUDE_STB_IMAGE_H +/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive, no oddball channel decimations) + PNG non-interlaced + BMP non-1bpp, non-RLE + TGA (not sure what subset, if a subset) + PSD (composited view only, no extra channels) + HDR (radiance rgbE format) + writes BMP,TGA (define STBI_NO_WRITE to remove code) + decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) + supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + TODO: + stbi_info_* + + history: + 1.16 major bugfix - convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less + than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant +*/ + +#ifndef HEADER_STB_IMAGE_AUGMENTED +#define HEADER_STB_IMAGE_AUGMENTED + +//// begin header file //////////////////////////////////////////////////// +// +// Limitations: +// - no progressive/interlaced support (jpeg, png) +// - 8-bit samples only (jpeg, png) +// - not threadsafe +// - channel subsampling of at most 2 in each dimension (jpeg) +// - no delayed line count (jpeg) -- IJG doesn't support either +// +// Basic usage (see HDR discussion below): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *comp -- outputs # of image components in image file +// int req_comp -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. +// If req_comp is non-zero, *comp has the number of components that _would_ +// have been output otherwise. E.g. if you set req_comp to 4, you will always +// get RGBA output, but you can check *comp to easily see if it's opaque. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() +// can be queried for an extremely brief, end-user unfriendly explanation +// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid +// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG and BMP images are automatically depalettized. +// +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image now supports loading HDR images in general, and currently +// the Radiance .HDR file format, although the support is provided +// generically. You can still load any file through the existing interface; +// if you attempt to load an HDR file, it will be automatically remapped to +// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); + +#ifndef STBI_NO_STDIO +#include +#endif + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for req_comp + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4, +}; + +typedef unsigned char stbi_uc; + +#ifdef __cplusplus +extern "C" { +#endif + +// WRITING API + +#if !defined(STBI_NO_WRITE) && !defined(STBI_NO_STDIO) +// write a BMP/TGA file given tightly packed 'comp' channels (no padding, nor bmp-stride-padding) +// (you must include the appropriate extension in the filename). +// returns TRUE on success, FALSE if couldn't open file, error writing file +extern int stbi_write_bmp (char const *filename, int x, int y, int comp, void *data); +extern int stbi_write_tga (char const *filename, int x, int y, int comp, void *data); +#endif + +// PRIMARY API - works on images of any type + +// load image by filename, open file, or memory buffer +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +// for stbi_load_from_file, file pointer is left pointing immediately after image + +#ifndef STBI_NO_HDR +#ifndef STBI_NO_STDIO +extern float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif +extern float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + +extern void stbi_hdr_to_ldr_gamma(float gammafactor); +extern void stbi_hdr_to_ldr_scale(float scale); + +extern void stbi_ldr_to_hdr_gamma(float gammafactor); +extern void stbi_ldr_to_hdr_scale(float scale); + +#endif // STBI_NO_HDR + +// get a VERY brief reason for failure +// NOT THREADSAFE +extern const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +extern void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +extern int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +extern int stbi_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_is_hdr (char const *filename); +extern int stbi_is_hdr_from_file(FILE *f); +#endif + +// ZLIB client - used by PNG, available for other purposes + +extern char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +extern char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +extern char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +// TYPE-SPECIFIC ACCESS + +// is it a jpeg? +extern int stbi_jpeg_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_jpeg_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_test_file (FILE *f); +extern stbi_uc *stbi_jpeg_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); + +extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a png? +extern int stbi_png_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_png_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_png_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_png_test_file (FILE *f); +extern stbi_uc *stbi_png_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a bmp? +extern int stbi_bmp_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_bmp_test_file (FILE *f); +extern stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a tga? +extern int stbi_tga_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_tga_test_file (FILE *f); +extern stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a psd? +extern int stbi_psd_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_psd_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_psd_test_file (FILE *f); +extern stbi_uc *stbi_psd_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it an hdr? +extern int stbi_hdr_test_memory (stbi_uc const *buffer, int len); + +extern float * stbi_hdr_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_hdr_test_file (FILE *f); +extern float * stbi_hdr_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// define new loaders +typedef struct +{ + int (*test_memory)(stbi_uc const *buffer, int len); + stbi_uc * (*load_from_memory)(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + #ifndef STBI_NO_STDIO + int (*test_file)(FILE *f); + stbi_uc * (*load_from_file)(FILE *f, int *x, int *y, int *comp, int req_comp); + #endif +} stbi_loader; + +// register a loader by filling out the above structure (you must defined ALL functions) +// returns 1 if added or already added, 0 if not added (too many loaders) +// NOT THREADSAFE +extern int stbi_register_loader(stbi_loader *loader); + +// define faster low-level operations (typically SIMD support) +#if STBI_SIMD +typedef void (*stbi_idct_8x8)(uint8 *out, int out_stride, short data[64], unsigned short *dequantize); +// compute an integer IDCT on "input" +// input[x] = data[x] * dequantize[x] +// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' +// CLAMP results to 0..255 +typedef void (*stbi_YCbCr_to_RGB_run)(uint8 *output, uint8 const *y, uint8 const *cb, uint8 const *cr, int count, int step); +// compute a conversion from YCbCr to RGB +// 'count' pixels +// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B +// y: Y input channel +// cb: Cb input channel; scale/biased to be 0..255 +// cr: Cr input channel; scale/biased to be 0..255 + +extern void stbi_install_idct(stbi_idct_8x8 func); +extern void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); +#endif // STBI_SIMD + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H diff --git a/Externals/SOIL/stbi_DDS_aug.h b/Externals/SOIL/stbi_DDS_aug.h index 98f7b65341..c7da9f7894 100644 --- a/Externals/SOIL/stbi_DDS_aug.h +++ b/Externals/SOIL/stbi_DDS_aug.h @@ -1,21 +1,21 @@ -/* - adding DDS loading support to stbi -*/ - -#ifndef HEADER_STB_IMAGE_DDS_AUGMENTATION -#define HEADER_STB_IMAGE_DDS_AUGMENTATION - -// is it a DDS file? -extern int stbi_dds_test_memory (stbi_uc const *buffer, int len); - -extern stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); -#ifndef STBI_NO_STDIO -extern int stbi_dds_test_file (FILE *f); -extern stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // HEADER_STB_IMAGE_DDS_AUGMENTATION +/* + adding DDS loading support to stbi +*/ + +#ifndef HEADER_STB_IMAGE_DDS_AUGMENTATION +#define HEADER_STB_IMAGE_DDS_AUGMENTATION + +// is it a DDS file? +extern int stbi_dds_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_dds_test_file (FILE *f); +extern stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // HEADER_STB_IMAGE_DDS_AUGMENTATION diff --git a/Externals/SOIL/stbi_DDS_aug_c.h b/Externals/SOIL/stbi_DDS_aug_c.h index 683d1cf0b7..f49407a7f1 100644 --- a/Externals/SOIL/stbi_DDS_aug_c.h +++ b/Externals/SOIL/stbi_DDS_aug_c.h @@ -1,511 +1,511 @@ - -/// DDS file support, does decoding, _not_ direct uploading -/// (use SOIL for that ;-) - -/// A bunch of DirectDraw Surface structures and flags -typedef struct { - unsigned int dwMagic; - unsigned int dwSize; - unsigned int dwFlags; - unsigned int dwHeight; - unsigned int dwWidth; - unsigned int dwPitchOrLinearSize; - unsigned int dwDepth; - unsigned int dwMipMapCount; - unsigned int dwReserved1[ 11 ]; - - // DDPIXELFORMAT - struct { - unsigned int dwSize; - unsigned int dwFlags; - unsigned int dwFourCC; - unsigned int dwRGBBitCount; - unsigned int dwRBitMask; - unsigned int dwGBitMask; - unsigned int dwBBitMask; - unsigned int dwAlphaBitMask; - } sPixelFormat; - - // DDCAPS2 - struct { - unsigned int dwCaps1; - unsigned int dwCaps2; - unsigned int dwDDSX; - unsigned int dwReserved; - } sCaps; - unsigned int dwReserved2; -} DDS_header ; - -// the following constants were copied directly off the MSDN website - -// The dwFlags member of the original DDSURFACEDESC2 structure -// can be set to one or more of the following values. -#define DDSD_CAPS 0x00000001 -#define DDSD_HEIGHT 0x00000002 -#define DDSD_WIDTH 0x00000004 -#define DDSD_PITCH 0x00000008 -#define DDSD_PIXELFORMAT 0x00001000 -#define DDSD_MIPMAPCOUNT 0x00020000 -#define DDSD_LINEARSIZE 0x00080000 -#define DDSD_DEPTH 0x00800000 - -// DirectDraw Pixel Format -#define DDPF_ALPHAPIXELS 0x00000001 -#define DDPF_FOURCC 0x00000004 -#define DDPF_RGB 0x00000040 - -// The dwCaps1 member of the DDSCAPS2 structure can be -// set to one or more of the following values. -#define DDSCAPS_COMPLEX 0x00000008 -#define DDSCAPS_TEXTURE 0x00001000 -#define DDSCAPS_MIPMAP 0x00400000 - -// The dwCaps2 member of the DDSCAPS2 structure can be -// set to one or more of the following values. -#define DDSCAPS2_CUBEMAP 0x00000200 -#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 -#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 -#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 -#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 -#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 -#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 -#define DDSCAPS2_VOLUME 0x00200000 - -static int dds_test(stbi *s) -{ - // check the magic number - if (get8(s) != 'D') return 0; - if (get8(s) != 'D') return 0; - if (get8(s) != 'S') return 0; - if (get8(s) != ' ') return 0; - // check header size - if (get32le(s) != 124) return 0; - return 1; -} -#ifndef STBI_NO_STDIO -int stbi_dds_test_file (FILE *f) -{ - stbi s; - int r,n = ftell(f); - start_file(&s,f); - r = dds_test(&s); - fseek(f,n,SEEK_SET); - return r; -} -#endif - -int stbi_dds_test_memory (stbi_uc const *buffer, int len) -{ - stbi s; - start_mem(&s,buffer, len); - return dds_test(&s); -} - -// helper functions -int stbi_convert_bit_range( int c, int from_bits, int to_bits ) -{ - int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); - return (b + (b >> from_bits)) >> from_bits; -} -void stbi_rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) -{ - *r = stbi_convert_bit_range( (c >> 11) & 31, 5, 8 ); - *g = stbi_convert_bit_range( (c >> 05) & 63, 6, 8 ); - *b = stbi_convert_bit_range( (c >> 00) & 31, 5, 8 ); -} -void stbi_decode_DXT1_block( - unsigned char uncompressed[16*4], - unsigned char compressed[8] ) -{ - int next_bit = 4*8; - int i, r, g, b; - int c0, c1; - unsigned char decode_colors[4*4]; - // find the 2 primary colors - c0 = compressed[0] + (compressed[1] << 8); - c1 = compressed[2] + (compressed[3] << 8); - stbi_rgb_888_from_565( c0, &r, &g, &b ); - decode_colors[0] = r; - decode_colors[1] = g; - decode_colors[2] = b; - decode_colors[3] = 255; - stbi_rgb_888_from_565( c1, &r, &g, &b ); - decode_colors[4] = r; - decode_colors[5] = g; - decode_colors[6] = b; - decode_colors[7] = 255; - if( c0 > c1 ) - { - // no alpha, 2 interpolated colors - decode_colors[8] = (2*decode_colors[0] + decode_colors[4]) / 3; - decode_colors[9] = (2*decode_colors[1] + decode_colors[5]) / 3; - decode_colors[10] = (2*decode_colors[2] + decode_colors[6]) / 3; - decode_colors[11] = 255; - decode_colors[12] = (decode_colors[0] + 2*decode_colors[4]) / 3; - decode_colors[13] = (decode_colors[1] + 2*decode_colors[5]) / 3; - decode_colors[14] = (decode_colors[2] + 2*decode_colors[6]) / 3; - decode_colors[15] = 255; - } else - { - // 1 interpolated color, alpha - decode_colors[8] = (decode_colors[0] + decode_colors[4]) / 2; - decode_colors[9] = (decode_colors[1] + decode_colors[5]) / 2; - decode_colors[10] = (decode_colors[2] + decode_colors[6]) / 2; - decode_colors[11] = 255; - decode_colors[12] = 0; - decode_colors[13] = 0; - decode_colors[14] = 0; - decode_colors[15] = 0; - } - // decode the block - for( i = 0; i < 16*4; i += 4 ) - { - int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 4; - next_bit += 2; - uncompressed[i+0] = decode_colors[idx+0]; - uncompressed[i+1] = decode_colors[idx+1]; - uncompressed[i+2] = decode_colors[idx+2]; - uncompressed[i+3] = decode_colors[idx+3]; - } - // done -} -void stbi_decode_DXT23_alpha_block( - unsigned char uncompressed[16*4], - unsigned char compressed[8] ) -{ - int i, next_bit = 0; - // each alpha value gets 4 bits - for( i = 3; i < 16*4; i += 4 ) - { - uncompressed[i] = stbi_convert_bit_range( - (compressed[next_bit>>3] >> (next_bit&7)) & 15, - 4, 8 ); - next_bit += 4; - } -} -void stbi_decode_DXT45_alpha_block( - unsigned char uncompressed[16*4], - unsigned char compressed[8] ) -{ - int i, next_bit = 8*2; - unsigned char decode_alpha[8]; - // each alpha value gets 3 bits, and the 1st 2 bytes are the range - decode_alpha[0] = compressed[0]; - decode_alpha[1] = compressed[1]; - if( decode_alpha[0] > decode_alpha[1] ) - { - // 6 step intermediate - decode_alpha[2] = (6*decode_alpha[0] + 1*decode_alpha[1]) / 7; - decode_alpha[3] = (5*decode_alpha[0] + 2*decode_alpha[1]) / 7; - decode_alpha[4] = (4*decode_alpha[0] + 3*decode_alpha[1]) / 7; - decode_alpha[5] = (3*decode_alpha[0] + 4*decode_alpha[1]) / 7; - decode_alpha[6] = (2*decode_alpha[0] + 5*decode_alpha[1]) / 7; - decode_alpha[7] = (1*decode_alpha[0] + 6*decode_alpha[1]) / 7; - } else - { - // 4 step intermediate, pluss full and none - decode_alpha[2] = (4*decode_alpha[0] + 1*decode_alpha[1]) / 5; - decode_alpha[3] = (3*decode_alpha[0] + 2*decode_alpha[1]) / 5; - decode_alpha[4] = (2*decode_alpha[0] + 3*decode_alpha[1]) / 5; - decode_alpha[5] = (1*decode_alpha[0] + 4*decode_alpha[1]) / 5; - decode_alpha[6] = 0; - decode_alpha[7] = 255; - } - for( i = 3; i < 16*4; i += 4 ) - { - int idx = 0, bit; - bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; - idx += bit << 0; - ++next_bit; - bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; - idx += bit << 1; - ++next_bit; - bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; - idx += bit << 2; - ++next_bit; - uncompressed[i] = decode_alpha[idx & 7]; - } - // done -} -void stbi_decode_DXT_color_block( - unsigned char uncompressed[16*4], - unsigned char compressed[8] ) -{ - int next_bit = 4*8; - int i, r, g, b; - int c0, c1; - unsigned char decode_colors[4*3]; - // find the 2 primary colors - c0 = compressed[0] + (compressed[1] << 8); - c1 = compressed[2] + (compressed[3] << 8); - stbi_rgb_888_from_565( c0, &r, &g, &b ); - decode_colors[0] = r; - decode_colors[1] = g; - decode_colors[2] = b; - stbi_rgb_888_from_565( c1, &r, &g, &b ); - decode_colors[3] = r; - decode_colors[4] = g; - decode_colors[5] = b; - // Like DXT1, but no choicees: - // no alpha, 2 interpolated colors - decode_colors[6] = (2*decode_colors[0] + decode_colors[3]) / 3; - decode_colors[7] = (2*decode_colors[1] + decode_colors[4]) / 3; - decode_colors[8] = (2*decode_colors[2] + decode_colors[5]) / 3; - decode_colors[9] = (decode_colors[0] + 2*decode_colors[3]) / 3; - decode_colors[10] = (decode_colors[1] + 2*decode_colors[4]) / 3; - decode_colors[11] = (decode_colors[2] + 2*decode_colors[5]) / 3; - // decode the block - for( i = 0; i < 16*4; i += 4 ) - { - int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 3; - next_bit += 2; - uncompressed[i+0] = decode_colors[idx+0]; - uncompressed[i+1] = decode_colors[idx+1]; - uncompressed[i+2] = decode_colors[idx+2]; - } - // done -} -static stbi_uc *dds_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - // all variables go up front - stbi_uc *dds_data = NULL; - stbi_uc block[16*4]; - stbi_uc compressed[8]; - int flags, DXT_family; - int has_alpha, has_mipmap; - int is_compressed, cubemap_faces; - int block_pitch, num_blocks; - DDS_header header; - int i, sz, cf; - // load the header - if( sizeof( DDS_header ) != 128 ) - { - return NULL; - } - getn( s, (stbi_uc*)(&header), 128 ); - // and do some checking - if( header.dwMagic != (('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24)) ) return NULL; - if( header.dwSize != 124 ) return NULL; - flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; - if( (header.dwFlags & flags) != flags ) return NULL; - /* According to the MSDN spec, the dwFlags should contain - DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if - uncompressed. Some DDS writers do not conform to the - spec, so I need to make my reader more tolerant */ - if( header.sPixelFormat.dwSize != 32 ) return NULL; - flags = DDPF_FOURCC | DDPF_RGB; - if( (header.sPixelFormat.dwFlags & flags) == 0 ) return NULL; - if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) return NULL; - // get the image data - s->img_x = header.dwWidth; - s->img_y = header.dwHeight; - s->img_n = 4; - is_compressed = (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; - has_alpha = (header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS) / DDPF_ALPHAPIXELS; - has_mipmap = (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1); - cubemap_faces = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; - /* I need cubemaps to have square faces */ - cubemap_faces &= (s->img_x == s->img_y); - cubemap_faces *= 5; - cubemap_faces += 1; - block_pitch = (s->img_x+3) >> 2; - num_blocks = block_pitch * ((s->img_y+3) >> 2); - /* let the user know what's going on */ - *x = s->img_x; - *y = s->img_y; - *comp = s->img_n; - /* is this uncompressed? */ - if( is_compressed ) - { - /* compressed */ - // note: header.sPixelFormat.dwFourCC is something like (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24)) - DXT_family = 1 + (header.sPixelFormat.dwFourCC >> 24) - '1'; - if( (DXT_family < 1) || (DXT_family > 5) ) return NULL; - /* check the expected size...oops, nevermind... - those non-compliant writers leave - dwPitchOrLinearSize == 0 */ - // passed all the tests, get the RAM for decoding - sz = (s->img_x)*(s->img_y)*4*cubemap_faces; - dds_data = (unsigned char*)malloc( sz ); - /* do this once for each face */ - for( cf = 0; cf < cubemap_faces; ++ cf ) - { - // now read and decode all the blocks - for( i = 0; i < num_blocks; ++i ) - { - // where are we? - int bx, by, bw=4, bh=4; - int ref_x = 4 * (i % block_pitch); - int ref_y = 4 * (i / block_pitch); - // get the next block's worth of compressed data, and decompress it - if( DXT_family == 1 ) - { - // DXT1 - getn( s, compressed, 8 ); - stbi_decode_DXT1_block( block, compressed ); - } else if( DXT_family < 4 ) - { - // DXT2/3 - getn( s, compressed, 8 ); - stbi_decode_DXT23_alpha_block ( block, compressed ); - getn( s, compressed, 8 ); - stbi_decode_DXT_color_block ( block, compressed ); - } else - { - // DXT4/5 - getn( s, compressed, 8 ); - stbi_decode_DXT45_alpha_block ( block, compressed ); - getn( s, compressed, 8 ); - stbi_decode_DXT_color_block ( block, compressed ); - } - // is this a partial block? - if( ref_x + 4 > s->img_x ) - { - bw = s->img_x - ref_x; - } - if( ref_y + 4 > s->img_y ) - { - bh = s->img_y - ref_y; - } - // now drop our decompressed data into the buffer - for( by = 0; by < bh; ++by ) - { - int idx = 4*((ref_y+by+cf*s->img_x)*s->img_x + ref_x); - for( bx = 0; bx < bw*4; ++bx ) - { - - dds_data[idx+bx] = block[by*16+bx]; - } - } - } - /* done reading and decoding the main image... - skip MIPmaps if present */ - if( has_mipmap ) - { - int block_size = 16; - if( DXT_family == 1 ) - { - block_size = 8; - } - for( i = 1; i < header.dwMipMapCount; ++i ) - { - int mx = s->img_x >> (i + 2); - int my = s->img_y >> (i + 2); - if( mx < 1 ) - { - mx = 1; - } - if( my < 1 ) - { - my = 1; - } - skip( s, mx*my*block_size ); - } - } - }/* per cubemap face */ - } else - { - /* uncompressed */ - DXT_family = 0; - s->img_n = 3; - if( has_alpha ) - { - s->img_n = 4; - } - *comp = s->img_n; - sz = s->img_x*s->img_y*s->img_n*cubemap_faces; - dds_data = (unsigned char*)malloc( sz ); - /* do this once for each face */ - for( cf = 0; cf < cubemap_faces; ++ cf ) - { - /* read the main image for this face */ - getn( s, &dds_data[cf*s->img_x*s->img_y*s->img_n], s->img_x*s->img_y*s->img_n ); - /* done reading and decoding the main image... - skip MIPmaps if present */ - if( has_mipmap ) - { - for( i = 1; i < header.dwMipMapCount; ++i ) - { - int mx = s->img_x >> i; - int my = s->img_y >> i; - if( mx < 1 ) - { - mx = 1; - } - if( my < 1 ) - { - my = 1; - } - skip( s, mx*my*s->img_n ); - } - } - } - /* data was BGR, I need it RGB */ - for( i = 0; i < sz; i += s->img_n ) - { - unsigned char temp = dds_data[i]; - dds_data[i] = dds_data[i+2]; - dds_data[i+2] = temp; - } - } - /* finished decompressing into RGBA, - adjust the y size if we have a cubemap - note: sz is already up to date */ - s->img_y *= cubemap_faces; - *y = s->img_y; - // did the user want something else, or - // see if all the alpha values are 255 (i.e. no transparency) - has_alpha = 0; - if( s->img_n == 4) - { - for( i = 3; (i < sz) && (has_alpha == 0); i += 4 ) - { - has_alpha |= (dds_data[i] < 255); - } - } - if( (req_comp <= 4) && (req_comp >= 1) ) - { - // user has some requirements, meet them - if( req_comp != s->img_n ) - { - dds_data = convert_format( dds_data, s->img_n, req_comp, s->img_x, s->img_y ); - *comp = s->img_n; - } - } else - { - // user had no requirements, only drop to RGB is no alpha - if( (has_alpha == 0) && (s->img_n == 4) ) - { - dds_data = convert_format( dds_data, 4, 3, s->img_x, s->img_y ); - *comp = 3; - } - } - // OK, done - return dds_data; -} - -#ifndef STBI_NO_STDIO -stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_file(&s,f); - return dds_load(&s,x,y,comp,req_comp); -} - -stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp) -{ - stbi_uc *data; - FILE *f = fopen(filename, "rb"); - if (!f) return NULL; - data = stbi_dds_load_from_file(f,x,y,comp,req_comp); - fclose(f); - return data; -} -#endif - -stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_mem(&s,buffer, len); - return dds_load(&s,x,y,comp,req_comp); -} + +/// DDS file support, does decoding, _not_ direct uploading +/// (use SOIL for that ;-) + +/// A bunch of DirectDraw Surface structures and flags +typedef struct { + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + // DDPIXELFORMAT + struct { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } sPixelFormat; + + // DDCAPS2 + struct { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } sCaps; + unsigned int dwReserved2; +} DDS_header ; + +// the following constants were copied directly off the MSDN website + +// The dwFlags member of the original DDSURFACEDESC2 structure +// can be set to one or more of the following values. +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +// DirectDraw Pixel Format +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +// The dwCaps1 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +// The dwCaps2 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +static int dds_test(stbi *s) +{ + // check the magic number + if (get8(s) != 'D') return 0; + if (get8(s) != 'D') return 0; + if (get8(s) != 'S') return 0; + if (get8(s) != ' ') return 0; + // check header size + if (get32le(s) != 124) return 0; + return 1; +} +#ifndef STBI_NO_STDIO +int stbi_dds_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s,f); + r = dds_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_dds_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_test(&s); +} + +// helper functions +int stbi_convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} +void stbi_rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = stbi_convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = stbi_convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = stbi_convert_bit_range( (c >> 00) & 31, 5, 8 ); +} +void stbi_decode_DXT1_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*4]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + decode_colors[3] = 255; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[4] = r; + decode_colors[5] = g; + decode_colors[6] = b; + decode_colors[7] = 255; + if( c0 > c1 ) + { + // no alpha, 2 interpolated colors + decode_colors[8] = (2*decode_colors[0] + decode_colors[4]) / 3; + decode_colors[9] = (2*decode_colors[1] + decode_colors[5]) / 3; + decode_colors[10] = (2*decode_colors[2] + decode_colors[6]) / 3; + decode_colors[11] = 255; + decode_colors[12] = (decode_colors[0] + 2*decode_colors[4]) / 3; + decode_colors[13] = (decode_colors[1] + 2*decode_colors[5]) / 3; + decode_colors[14] = (decode_colors[2] + 2*decode_colors[6]) / 3; + decode_colors[15] = 255; + } else + { + // 1 interpolated color, alpha + decode_colors[8] = (decode_colors[0] + decode_colors[4]) / 2; + decode_colors[9] = (decode_colors[1] + decode_colors[5]) / 2; + decode_colors[10] = (decode_colors[2] + decode_colors[6]) / 2; + decode_colors[11] = 255; + decode_colors[12] = 0; + decode_colors[13] = 0; + decode_colors[14] = 0; + decode_colors[15] = 0; + } + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 4; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + uncompressed[i+3] = decode_colors[idx+3]; + } + // done +} +void stbi_decode_DXT23_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 0; + // each alpha value gets 4 bits + for( i = 3; i < 16*4; i += 4 ) + { + uncompressed[i] = stbi_convert_bit_range( + (compressed[next_bit>>3] >> (next_bit&7)) & 15, + 4, 8 ); + next_bit += 4; + } +} +void stbi_decode_DXT45_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 8*2; + unsigned char decode_alpha[8]; + // each alpha value gets 3 bits, and the 1st 2 bytes are the range + decode_alpha[0] = compressed[0]; + decode_alpha[1] = compressed[1]; + if( decode_alpha[0] > decode_alpha[1] ) + { + // 6 step intermediate + decode_alpha[2] = (6*decode_alpha[0] + 1*decode_alpha[1]) / 7; + decode_alpha[3] = (5*decode_alpha[0] + 2*decode_alpha[1]) / 7; + decode_alpha[4] = (4*decode_alpha[0] + 3*decode_alpha[1]) / 7; + decode_alpha[5] = (3*decode_alpha[0] + 4*decode_alpha[1]) / 7; + decode_alpha[6] = (2*decode_alpha[0] + 5*decode_alpha[1]) / 7; + decode_alpha[7] = (1*decode_alpha[0] + 6*decode_alpha[1]) / 7; + } else + { + // 4 step intermediate, pluss full and none + decode_alpha[2] = (4*decode_alpha[0] + 1*decode_alpha[1]) / 5; + decode_alpha[3] = (3*decode_alpha[0] + 2*decode_alpha[1]) / 5; + decode_alpha[4] = (2*decode_alpha[0] + 3*decode_alpha[1]) / 5; + decode_alpha[5] = (1*decode_alpha[0] + 4*decode_alpha[1]) / 5; + decode_alpha[6] = 0; + decode_alpha[7] = 255; + } + for( i = 3; i < 16*4; i += 4 ) + { + int idx = 0, bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 0; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 1; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 2; + ++next_bit; + uncompressed[i] = decode_alpha[idx & 7]; + } + // done +} +void stbi_decode_DXT_color_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*3]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[3] = r; + decode_colors[4] = g; + decode_colors[5] = b; + // Like DXT1, but no choicees: + // no alpha, 2 interpolated colors + decode_colors[6] = (2*decode_colors[0] + decode_colors[3]) / 3; + decode_colors[7] = (2*decode_colors[1] + decode_colors[4]) / 3; + decode_colors[8] = (2*decode_colors[2] + decode_colors[5]) / 3; + decode_colors[9] = (decode_colors[0] + 2*decode_colors[3]) / 3; + decode_colors[10] = (decode_colors[1] + 2*decode_colors[4]) / 3; + decode_colors[11] = (decode_colors[2] + 2*decode_colors[5]) / 3; + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 3; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + } + // done +} +static stbi_uc *dds_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + // all variables go up front + stbi_uc *dds_data = NULL; + stbi_uc block[16*4]; + stbi_uc compressed[8]; + int flags, DXT_family; + int has_alpha, has_mipmap; + int is_compressed, cubemap_faces; + int block_pitch, num_blocks; + DDS_header header; + int i, sz, cf; + // load the header + if( sizeof( DDS_header ) != 128 ) + { + return NULL; + } + getn( s, (stbi_uc*)(&header), 128 ); + // and do some checking + if( header.dwMagic != (('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24)) ) return NULL; + if( header.dwSize != 124 ) return NULL; + flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flags) != flags ) return NULL; + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + if( header.sPixelFormat.dwSize != 32 ) return NULL; + flags = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flags) == 0 ) return NULL; + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) return NULL; + // get the image data + s->img_x = header.dwWidth; + s->img_y = header.dwHeight; + s->img_n = 4; + is_compressed = (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + has_alpha = (header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS) / DDPF_ALPHAPIXELS; + has_mipmap = (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1); + cubemap_faces = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + /* I need cubemaps to have square faces */ + cubemap_faces &= (s->img_x == s->img_y); + cubemap_faces *= 5; + cubemap_faces += 1; + block_pitch = (s->img_x+3) >> 2; + num_blocks = block_pitch * ((s->img_y+3) >> 2); + /* let the user know what's going on */ + *x = s->img_x; + *y = s->img_y; + *comp = s->img_n; + /* is this uncompressed? */ + if( is_compressed ) + { + /* compressed */ + // note: header.sPixelFormat.dwFourCC is something like (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24)) + DXT_family = 1 + (header.sPixelFormat.dwFourCC >> 24) - '1'; + if( (DXT_family < 1) || (DXT_family > 5) ) return NULL; + /* check the expected size...oops, nevermind... + those non-compliant writers leave + dwPitchOrLinearSize == 0 */ + // passed all the tests, get the RAM for decoding + sz = (s->img_x)*(s->img_y)*4*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + // now read and decode all the blocks + for( i = 0; i < num_blocks; ++i ) + { + // where are we? + int bx, by, bw=4, bh=4; + int ref_x = 4 * (i % block_pitch); + int ref_y = 4 * (i / block_pitch); + // get the next block's worth of compressed data, and decompress it + if( DXT_family == 1 ) + { + // DXT1 + getn( s, compressed, 8 ); + stbi_decode_DXT1_block( block, compressed ); + } else if( DXT_family < 4 ) + { + // DXT2/3 + getn( s, compressed, 8 ); + stbi_decode_DXT23_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } else + { + // DXT4/5 + getn( s, compressed, 8 ); + stbi_decode_DXT45_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } + // is this a partial block? + if( ref_x + 4 > s->img_x ) + { + bw = s->img_x - ref_x; + } + if( ref_y + 4 > s->img_y ) + { + bh = s->img_y - ref_y; + } + // now drop our decompressed data into the buffer + for( by = 0; by < bh; ++by ) + { + int idx = 4*((ref_y+by+cf*s->img_x)*s->img_x + ref_x); + for( bx = 0; bx < bw*4; ++bx ) + { + + dds_data[idx+bx] = block[by*16+bx]; + } + } + } + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + int block_size = 16; + if( DXT_family == 1 ) + { + block_size = 8; + } + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> (i + 2); + int my = s->img_y >> (i + 2); + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*block_size ); + } + } + }/* per cubemap face */ + } else + { + /* uncompressed */ + DXT_family = 0; + s->img_n = 3; + if( has_alpha ) + { + s->img_n = 4; + } + *comp = s->img_n; + sz = s->img_x*s->img_y*s->img_n*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + /* read the main image for this face */ + getn( s, &dds_data[cf*s->img_x*s->img_y*s->img_n], s->img_x*s->img_y*s->img_n ); + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> i; + int my = s->img_y >> i; + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*s->img_n ); + } + } + } + /* data was BGR, I need it RGB */ + for( i = 0; i < sz; i += s->img_n ) + { + unsigned char temp = dds_data[i]; + dds_data[i] = dds_data[i+2]; + dds_data[i+2] = temp; + } + } + /* finished decompressing into RGBA, + adjust the y size if we have a cubemap + note: sz is already up to date */ + s->img_y *= cubemap_faces; + *y = s->img_y; + // did the user want something else, or + // see if all the alpha values are 255 (i.e. no transparency) + has_alpha = 0; + if( s->img_n == 4) + { + for( i = 3; (i < sz) && (has_alpha == 0); i += 4 ) + { + has_alpha |= (dds_data[i] < 255); + } + } + if( (req_comp <= 4) && (req_comp >= 1) ) + { + // user has some requirements, meet them + if( req_comp != s->img_n ) + { + dds_data = convert_format( dds_data, s->img_n, req_comp, s->img_x, s->img_y ); + *comp = s->img_n; + } + } else + { + // user had no requirements, only drop to RGB is no alpha + if( (has_alpha == 0) && (s->img_n == 4) ) + { + dds_data = convert_format( dds_data, 4, 3, s->img_x, s->img_y ); + *comp = 3; + } + } + // OK, done + return dds_data; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return dds_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_dds_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_load(&s,x,y,comp,req_comp); +} diff --git a/Externals/WiiUseSrc/wiiuse.sln b/Externals/WiiUseSrc/wiiuse.sln index beece4e143..005518bf33 100644 --- a/Externals/WiiUseSrc/wiiuse.sln +++ b/Externals/WiiUseSrc/wiiuse.sln @@ -1,26 +1,26 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wiiuse", "wiiuse.vcproj", "{944EF6DE-471D-447E-A2FD-D37D58805169}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|Win32.ActiveCfg = Debug|Win32 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|Win32.Build.0 = Debug|Win32 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|x64.ActiveCfg = Debug|x64 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|x64.Build.0 = Debug|x64 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|Win32.ActiveCfg = Release|Win32 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|Win32.Build.0 = Release|Win32 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|x64.ActiveCfg = Release|x64 - {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wiiuse", "wiiuse.vcproj", "{944EF6DE-471D-447E-A2FD-D37D58805169}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|Win32.ActiveCfg = Debug|Win32 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|Win32.Build.0 = Debug|Win32 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|x64.ActiveCfg = Debug|x64 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Debug|x64.Build.0 = Debug|x64 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|Win32.ActiveCfg = Release|Win32 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|Win32.Build.0 = Release|Win32 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|x64.ActiveCfg = Release|x64 + {944EF6DE-471D-447E-A2FD-D37D58805169}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Externals/wxWidgets/lib/vc_lib/msw/wx/setup.h b/Externals/wxWidgets/lib/vc_lib/msw/wx/setup.h deleted file mode 100644 index 2029455526..0000000000 --- a/Externals/wxWidgets/lib/vc_lib/msw/wx/setup.h +++ /dev/null @@ -1,1349 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup0.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* --- start common options --- */ -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 1 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 1 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 1 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 1 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// Recommended setting: 0 (this is still work in progress...) -#define wxUSE_EXTENDED_RTTI 0 - -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list and std::vector, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - -// Support for message/error logging. This includes wxLogXXX() functions and -// wxLog and derived classes. Don't set this to 0 unless you really know what -// you are doing. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 1 - -// Use standard C++ streams if 1 instead of wx streams in some places. If -// disabled (default), wx streams are used everywhere and wxWidgets doesn't -// depend on the standard streams library. -// -// Notice that enabling this does not replace wx streams with std streams -// everywhere, in a lot of places wx streams are used no matter what. -// -// Default is 0 -// -// Recommended setting: 1 if you use the standard streams anyhow and so -// dependency on the standard streams library is not a -// problem -#define wxUSE_STD_IOSTREAM 0 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// Currently the Digital Mars and Watcom compilers come without standard C++ -// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have -// them (e.g. from STLPort). -// -// VC++ 5.0 does include standard C++ library header, however they produce -// many warnings that can't be turned off when compiled at warning level 4. -#if defined(__DMC__) || defined(__WATCOMC__) \ - || (defined(_MSC_VER) && _MSC_VER < 1200) - #define wxUSE_STD_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf. -// Note that if the system's implementation does not support positional -// parameters, setting this to 1 forces the use of the wxWidgets implementation -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 1 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 1 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 1 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 1 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 1 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 1 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 1 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 1 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 1 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 1 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#define wxUSE_JOYSTICK 1 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 1 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 1 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 1 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 1 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 1 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 1 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 1 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 1 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 1 -#define wxUSE_ENH_METAFILE 1 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 1 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 1 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 1 - // 0 for no interprocess comms -#define wxUSE_HELP 1 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 1 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 1 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows and but you can't mix -// them. Set to 1 for , 0 for . Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 1 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 1 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 1 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 1 - -// Set to 1 for GIF format support -#define wxUSE_GIF 1 - -// Set to 1 for PNM format support -#define wxUSE_PNM 1 - -// Set to 1 for PCX format support -#define wxUSE_PCX 1 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - -/* --- end common options --- */ - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE_MSLU to 1 if you're compiling wxWidgets in Unicode mode -// and want to run your programs under Windows 9x and not only NT/2000/XP. -// This setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx). Note -// that you will have to modify the makefiles to include unicows.lib import -// library as the first library (see installation instructions in install.txt -// to learn how to do it when building the library or samples). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 (1 if you want to deploy Unicode apps on 9x systems) -#ifndef wxUSE_UNICODE_MSLU - #define wxUSE_UNICODE_MSLU 0 -#endif - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 1 - -// Set this to 1 to enable wxAutomationObject class. -// -// Default is 1. -// -// Recommended setting: 1 if you need to control other applications via OLE -// Automation, can be safely set to 0 otherwise -#define wxUSE_OLE_AUTOMATION 1 - -// Set this to 1 to enable wxActiveXContainer class allowing to embed OLE -// controls in wx. -// -// Default is 1. -// -// Recommended setting: 1, required by wxMediaCtrl -#define wxUSE_ACTIVEX 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// Set this to 1 to enable wxDIB class used internally for manipulating -// wxBitmao data. -// -// Default is 1, set it to 0 only if you don't use wxImage neither -// -// Recommended setting: 1 (without it conversion to/from wxImage won't work) -#define wxUSE_WXDIB 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile -#define wxUSE_RICHEDIT 1 - -// Set this to 1 to use extra features of richedit v2 and later controls -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1 -#define wxUSE_RICHEDIT2 1 - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. This -// is required by wxUSE_CHECKLISTBOX. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 1 - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 1 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 1 - -// Set to 1 to use InkEdit control (Tablet PC), if available -#define wxUSE_INKEDIT 0 - -// ---------------------------------------------------------------------------- -// Generic versions of native controls -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxDatePickerCtrlGeneric in addition to the -// native wxDatePickerCtrl -// -// Default is 0. -// -// Recommended setting: 0, this is mainly used for testing -#define wxUSE_DATEPICKCTRL_GENERIC 0 - -// ---------------------------------------------------------------------------- -// Crash debugging helpers -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 1 - -// ---------------------------------------------------------------------------- -// obsolete settings -// ---------------------------------------------------------------------------- - -// NB: all settings in this section are obsolete and should not be used/changed -// at all, they will disappear - -// Define 1 to use bitmap messages. -#define wxUSE_BITMAP_MESSAGE 1 - -#endif // _WX_SETUP_H_ - diff --git a/Installer/GetSVNRev.nsi b/Installer/GetSVNRev.nsi index 4b45cdc054..c9f0c166d7 100644 --- a/Installer/GetSVNRev.nsi +++ b/Installer/GetSVNRev.nsi @@ -1,11 +1,11 @@ -OutFile "GetSVNRev.exe" -SilentInstall silent - -Section - ; Create template for SubWCRev - FileOpen $R0 "svnrev_template.txt" w - FileWrite $R0 '!define PRODUCT_VERSION "$$WCREV$$"' - FileClose $R0 - ; Make a file with only rev # in it - Exec "..\Source\Core\Common\SubWCRev.exe ..\ svnrev_template.txt svnrev.txt" +OutFile "GetSVNRev.exe" +SilentInstall silent + +Section + ; Create template for SubWCRev + FileOpen $R0 "svnrev_template.txt" w + FileWrite $R0 '!define PRODUCT_VERSION "$$WCREV$$"' + FileClose $R0 + ; Make a file with only rev # in it + Exec "..\Source\Core\Common\SubWCRev.exe ..\ svnrev_template.txt svnrev.txt" SectionEnd \ No newline at end of file diff --git a/Source/Core/Common/Common.vcproj b/Source/Core/Common/Common.vcproj index a9bd6ed579..2c8893258b 100644 --- a/Source/Core/Common/Common.vcproj +++ b/Source/Core/Common/Common.vcproj @@ -29,7 +29,7 @@ > %02x", _byte); - if (m_position < 4) - { - m_command[m_position] = _byte; - _byte = 0xFF; - } - - if ((m_position >= 2) && (m_command[0] == 0 && m_command[1] == 0)) - _byte = "\x06\x04\x10\x00"[(m_position-2)&3]; - else if (m_position == 3) - { - unsigned int checksum = (m_command[0] << 24) | (m_command[1] << 16) | (m_command[2] << 8); - unsigned int bit = 0x80000000UL; - unsigned int check = 0x8D800000UL; - while (bit >= 0x100) - { - if (checksum & bit) - checksum ^= check; - check >>= 1; - bit >>= 1; - } - if (m_command[3] != (checksum & 0xFF)) - ERROR_LOG(SP1, "AM-BB cs: %02x, w: %02x", m_command[3], checksum & 0xFF); - } - else - { - if (m_position == 4) - { - _byte = 4; - ERROR_LOG(SP1, "AM-BB COMMAND: %02x %02x %02x", m_command[0], m_command[1], m_command[2]); - if ((m_command[0] == 0xFF) && (m_command[1] == 0) && (m_command[2] == 0)) - m_have_irq = true; - else if (m_command[0] == 0x82) - m_have_irq = false; - } - else if (m_position > 4) - { - switch (m_command[0]) - { - case 0xFF: // lan - _byte = 0xFF; - break; - case 0x86: // imr - _byte = 0x00; - break; - case 0x82: // isr - _byte = m_have_irq ? 0xFF : 0; - break; - default: - _dbg_assert_msg_(SP1, 0, "Unknown AM-BB cmd"); - break; - } - } - else - _byte = 0xFF; - } - DEBUG_LOG(SP1, "AM-BB < %02x", _byte); - m_position++; -} - -bool CEXIAMBaseboard::IsInterruptSet() -{ - if (m_have_irq) - ERROR_LOG(SP1, "AM-BB IRQ"); - return m_have_irq; -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "../Core.h" + +#include "EXI_Device.h" +#include "EXI_DeviceAMBaseboard.h" + +CEXIAMBaseboard::CEXIAMBaseboard() + : m_position(0) + , m_have_irq(false) +{ +} + +void CEXIAMBaseboard::SetCS(int cs) +{ + ERROR_LOG(SP1, "AM-BB ChipSelect=%d", cs); + if (cs) + m_position = 0; +} + +bool CEXIAMBaseboard::IsPresent() +{ + return true; +} + +void CEXIAMBaseboard::TransferByte(u8& _byte) +{ + /* + ID: + 00 00 xx xx xx xx + xx xx 06 04 10 00 + CMD: + 01 00 00 b3 xx + xx xx xx xx 04 + exi_lanctl_write: + ff 02 01 63 xx + xx xx xx xx 04 + exi_imr_read: + 86 00 00 f5 xx xx xx + xx xx xx xx 04 rr rr + exi_imr_write: + 87 80 5c 17 xx + xx xx xx xx 04 + + exi_isr_read: + 82 .. .. .. xx xx xx + xx xx xx xx 04 rr rr + 3 byte command, 1 byte checksum + */ + DEBUG_LOG(SP1, "AM-BB > %02x", _byte); + if (m_position < 4) + { + m_command[m_position] = _byte; + _byte = 0xFF; + } + + if ((m_position >= 2) && (m_command[0] == 0 && m_command[1] == 0)) + _byte = "\x06\x04\x10\x00"[(m_position-2)&3]; + else if (m_position == 3) + { + unsigned int checksum = (m_command[0] << 24) | (m_command[1] << 16) | (m_command[2] << 8); + unsigned int bit = 0x80000000UL; + unsigned int check = 0x8D800000UL; + while (bit >= 0x100) + { + if (checksum & bit) + checksum ^= check; + check >>= 1; + bit >>= 1; + } + if (m_command[3] != (checksum & 0xFF)) + ERROR_LOG(SP1, "AM-BB cs: %02x, w: %02x", m_command[3], checksum & 0xFF); + } + else + { + if (m_position == 4) + { + _byte = 4; + ERROR_LOG(SP1, "AM-BB COMMAND: %02x %02x %02x", m_command[0], m_command[1], m_command[2]); + if ((m_command[0] == 0xFF) && (m_command[1] == 0) && (m_command[2] == 0)) + m_have_irq = true; + else if (m_command[0] == 0x82) + m_have_irq = false; + } + else if (m_position > 4) + { + switch (m_command[0]) + { + case 0xFF: // lan + _byte = 0xFF; + break; + case 0x86: // imr + _byte = 0x00; + break; + case 0x82: // isr + _byte = m_have_irq ? 0xFF : 0; + break; + default: + _dbg_assert_msg_(SP1, 0, "Unknown AM-BB cmd"); + break; + } + } + else + _byte = 0xFF; + } + DEBUG_LOG(SP1, "AM-BB < %02x", _byte); + m_position++; +} + +bool CEXIAMBaseboard::IsInterruptSet() +{ + if (m_have_irq) + ERROR_LOG(SP1, "AM-BB IRQ"); + return m_have_irq; +} diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h index 3e91580e44..091b478688 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h @@ -1,37 +1,37 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _EXIDEVICE_AMBASEBOARD_H -#define _EXIDEVICE_AMBASEBOARD_H - -class CEXIAMBaseboard : public IEXIDevice -{ -public: - CEXIAMBaseboard(); - - virtual void SetCS(int _iCS); - virtual bool IsPresent(); - virtual bool IsInterruptSet(); - -private: - virtual void TransferByte(u8& _uByte); - int m_position; - bool m_have_irq; - unsigned char m_command[4]; -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _EXIDEVICE_AMBASEBOARD_H +#define _EXIDEVICE_AMBASEBOARD_H + +class CEXIAMBaseboard : public IEXIDevice +{ +public: + CEXIAMBaseboard(); + + virtual void SetCS(int _iCS); + virtual bool IsPresent(); + virtual bool IsInterruptSet(); + +private: + virtual void TransferByte(u8& _uByte); + int m_position; + bool m_have_irq; + unsigned char m_command[4]; +}; + +#endif diff --git a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp index 3737a6f899..9b6986579d 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp @@ -1,470 +1,470 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "SI.h" -#include "SI_Device.h" -#include "SI_DeviceAMBaseboard.h" - -#include "../PluginManager.h" // for pad state - -// where to put baseboard debug -#define AMBASEBOARDDEBUG OSREPORT - -// "JAMMA Video Standard" I/O -class JVSIOMessage -{ -public: - int m_ptr, m_last_start, m_csum; - unsigned char m_msg[0x80]; - - JVSIOMessage() - { - m_ptr = 0; - m_last_start = 0; - } - - void start(int node) - { - m_last_start = m_ptr; - unsigned char hdr[3] = {0xe0, node, 0}; - m_csum = 0; - addData(hdr, 3, 1); - } - void addData(const void *data, size_t len) - { - addData((const unsigned char*)data, len); - } - void addData(const char *data) - { - addData(data, strlen(data)); - } - void addData(int n) - { - unsigned char cs = n; - addData(&cs, 1); - } - - void end() - { - int len = m_ptr - m_last_start; - m_msg[m_last_start + 2] = len - 2; // assuming len <0xD0 - addData(m_csum + len - 2); - } - - void addData(const unsigned char *dst, size_t len, int sync = 0) - { - while (len--) - { - int c = *dst++; - if (!sync && ((c == 0xE0) || (c == 0xD0))) - { - m_msg[m_ptr++] = 0xD0; - m_msg[m_ptr++] = c - 1; - } else - m_msg[m_ptr++] = c; - if (!sync) - m_csum += c; - sync = 0; - if (m_ptr >= 0x80) - PanicAlert("JVSIOMessage overrun!"); - } - } -}; // end class JVSIOMessage - - -// AM-Baseboard device on SI -CSIDevice_AMBaseboard::CSIDevice_AMBaseboard(int _iDeviceNumber) - : ISIDevice(_iDeviceNumber) -{ -} - -int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) -{ - // for debug logging only - ISIDevice::RunBuffer(_pBuffer, _iLength); - - int iPosition = 0; - while(iPosition < _iLength) - { - // read the command - EBufferCommands command = static_cast(_pBuffer[iPosition ^ 3]); - iPosition ++; - - // handle it - switch(command) - { - case CMD_RESET: // returns ID and dip switches - { - *(u32*)&_pBuffer[0] = SI_AM_BASEBOARD|0x100; // 0x100 is progressive flag according to dip switch - iPosition = _iLength; // break the while loop - } - break; - case CMD_GCAM: - { - int i; - - // calculate checksum over buffer - int csum = 0; - for (i=0; i<_iLength; ++i) - csum += _pBuffer[i]; - - unsigned char res[0x80]; - int resp = 0; - - int real_len = _pBuffer[1^3]; - int p = 2; - - static int d10_1 = 0xfe; - - memset(res, 0, 0x80); - res[resp++] = 1; - res[resp++] = 1; - -#define ptr(x) _pBuffer[(p + x)^3] - while (p < real_len+2) - { - switch (ptr(0)) - { - case 0x10: - { - DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 10, %02x (READ STATUS&SWITCHES)", ptr(1)); - SPADStatus PadStatus; - memset(&PadStatus, 0 ,sizeof(PadStatus)); - CPluginManager::GetInstance().GetPad(0) - ->PAD_GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); - res[resp++] = 0x10; - res[resp++] = 0x2; - int d10_0 = 0xdf; - - if (PadStatus.triggerLeft) - d10_0 &= ~0x80; - if (PadStatus.triggerRight) - d10_0 &= ~0x40; - - res[resp++] = d10_0; - res[resp++] = d10_1; - break; - } - case 0x12: - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 12, %02x %02x", ptr(1), ptr(2)); - res[resp++] = 0x12; - res[resp++] = 0x00; - break; - case 0x11: - { - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 11, %02x (READ SERIAL NR)", ptr(1)); - char string[] = "AADE-01A14964511"; - res[resp++] = 0x11; - res[resp++] = 0x10; - memcpy(res + resp, string, 0x10); - resp += 0x10; - break; - } - case 0x15: - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 15, %02x (READ FIRM VERSION)", ptr(1)); - res[resp++] = 0x15; - res[resp++] = 0x02; - res[resp++] = 0x00; - res[resp++] = 0x29; // FIRM VERSION - break; - case 0x16: - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 16, %02x (READ FPGA VERSION)", ptr(1)); - res[resp++] = 0x16; - res[resp++] = 0x02; - res[resp++] = 0x07; - res[resp++] = 0x06; // FPGAVERSION - /* - res[resp++] = 0x16; - res[resp++] = 0x00; - p += 2; - */ - break; - case 0x1f: - { - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 1f, %02x %02x %02x %02x %02x (REGION)", ptr(1), ptr(2), ptr(3), ptr(4), ptr(5)); - unsigned char string[] = - "\x00\x00\x30\x00" - //"\x01\xfe\x00\x00" // JAPAN - "\x02\xfd\x00\x00" // USA - //"\x03\xfc\x00\x00" // export - "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"; - res[resp++] = 0x1f; - res[resp++] = 0x14; - - for (i=0; i<0x14; ++i) - res[resp++] = string[i]; - break; - } - case 0x31: - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 31 (UNKNOWN)"); - res[resp++] = 0x31; - res[resp++] = 0x02; - res[resp++] = 0x00; - res[resp++] = 0x00; - break; - case 0x32: - ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 32 (UNKNOWN)"); - res[resp++] = 0x32; - res[resp++] = 0x02; - res[resp++] = 0x00; - res[resp++] = 0x00; - break; - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4a: - case 0x4b: - case 0x4c: - case 0x4d: - case 0x4e: - case 0x4f: - { - DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD %02x, %02x %02x %02x %02x %02x %02x %02x (JVS IO)", - ptr(0), ptr(1), ptr(2), ptr(3), ptr(4), ptr(5), ptr(6), ptr(7)); - int pptr = 2; - JVSIOMessage msg; - - msg.start(0); - msg.addData(1); - - unsigned char jvs_io_buffer[0x80]; - int nr_bytes = ptr(pptr + 2); // byte after e0 xx - int jvs_io_length = 0; - for (i=0; iPAD_GetStatus(i, &PadStatus); - unsigned char player_data[2] = {0,0}; - if (PadStatus.button & PAD_BUTTON_START) - player_data[0] |= 0x80; - if (PadStatus.button & PAD_BUTTON_UP) - player_data[0] |= 0x20; - if (PadStatus.button & PAD_BUTTON_DOWN) - player_data[0] |= 0x10; - if (PadStatus.button & PAD_BUTTON_LEFT) - player_data[0] |= 0x08; - if (PadStatus.button & PAD_BUTTON_RIGHT) - player_data[0] |= 0x04; - - if (PadStatus.button & PAD_BUTTON_A) - player_data[0] |= 0x02; - if (PadStatus.button & PAD_BUTTON_B) - player_data[0] |= 0x01; - - if (PadStatus.button & PAD_BUTTON_X) - player_data[1] |= 0x80; - if (PadStatus.button & PAD_BUTTON_Y) - player_data[1] |= 0x40; - if (PadStatus.button & PAD_TRIGGER_L) - player_data[1] |= 0x20; - if (PadStatus.button & PAD_TRIGGER_R) - player_data[1] |= 0x10; - - for (j=0; jPAD_GetStatus(0, &PadStatus); - while (slots--) - { - msg.addData(0); - msg.addData((PadStatus.button & PAD_BUTTON_START) ? 1 : 0); - } - break; - } - case 0x22: // analog - { - break; - } - case 0xf0: - if (*jvs_io++ == 0xD9) - { - ERROR_LOG(AMBASEBOARDDEBUG, "JVS RESET"); - } else - unknown = 1; - msg.addData(1); - - d10_1 |= 1; - break; - case 0xf1: - node = *jvs_io++; - ERROR_LOG(AMBASEBOARDDEBUG, "JVS SET ADDRESS, node=%d", node); - msg.addData(node == 1); - break; - default: - break; - } - - pptr += jvs_io_length; - - } - - msg.end(); - - res[resp++] = ptr(0); - - unsigned char *buf = msg.m_msg; - int len = msg.m_ptr; - res[resp++] = len; - for (i=0; i= 0x80) + PanicAlert("JVSIOMessage overrun!"); + } + } +}; // end class JVSIOMessage + + +// AM-Baseboard device on SI +CSIDevice_AMBaseboard::CSIDevice_AMBaseboard(int _iDeviceNumber) + : ISIDevice(_iDeviceNumber) +{ +} + +int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) +{ + // for debug logging only + ISIDevice::RunBuffer(_pBuffer, _iLength); + + int iPosition = 0; + while(iPosition < _iLength) + { + // read the command + EBufferCommands command = static_cast(_pBuffer[iPosition ^ 3]); + iPosition ++; + + // handle it + switch(command) + { + case CMD_RESET: // returns ID and dip switches + { + *(u32*)&_pBuffer[0] = SI_AM_BASEBOARD|0x100; // 0x100 is progressive flag according to dip switch + iPosition = _iLength; // break the while loop + } + break; + case CMD_GCAM: + { + int i; + + // calculate checksum over buffer + int csum = 0; + for (i=0; i<_iLength; ++i) + csum += _pBuffer[i]; + + unsigned char res[0x80]; + int resp = 0; + + int real_len = _pBuffer[1^3]; + int p = 2; + + static int d10_1 = 0xfe; + + memset(res, 0, 0x80); + res[resp++] = 1; + res[resp++] = 1; + +#define ptr(x) _pBuffer[(p + x)^3] + while (p < real_len+2) + { + switch (ptr(0)) + { + case 0x10: + { + DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 10, %02x (READ STATUS&SWITCHES)", ptr(1)); + SPADStatus PadStatus; + memset(&PadStatus, 0 ,sizeof(PadStatus)); + CPluginManager::GetInstance().GetPad(0) + ->PAD_GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); + res[resp++] = 0x10; + res[resp++] = 0x2; + int d10_0 = 0xdf; + + if (PadStatus.triggerLeft) + d10_0 &= ~0x80; + if (PadStatus.triggerRight) + d10_0 &= ~0x40; + + res[resp++] = d10_0; + res[resp++] = d10_1; + break; + } + case 0x12: + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 12, %02x %02x", ptr(1), ptr(2)); + res[resp++] = 0x12; + res[resp++] = 0x00; + break; + case 0x11: + { + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 11, %02x (READ SERIAL NR)", ptr(1)); + char string[] = "AADE-01A14964511"; + res[resp++] = 0x11; + res[resp++] = 0x10; + memcpy(res + resp, string, 0x10); + resp += 0x10; + break; + } + case 0x15: + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 15, %02x (READ FIRM VERSION)", ptr(1)); + res[resp++] = 0x15; + res[resp++] = 0x02; + res[resp++] = 0x00; + res[resp++] = 0x29; // FIRM VERSION + break; + case 0x16: + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 16, %02x (READ FPGA VERSION)", ptr(1)); + res[resp++] = 0x16; + res[resp++] = 0x02; + res[resp++] = 0x07; + res[resp++] = 0x06; // FPGAVERSION + /* + res[resp++] = 0x16; + res[resp++] = 0x00; + p += 2; + */ + break; + case 0x1f: + { + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 1f, %02x %02x %02x %02x %02x (REGION)", ptr(1), ptr(2), ptr(3), ptr(4), ptr(5)); + unsigned char string[] = + "\x00\x00\x30\x00" + //"\x01\xfe\x00\x00" // JAPAN + "\x02\xfd\x00\x00" // USA + //"\x03\xfc\x00\x00" // export + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"; + res[resp++] = 0x1f; + res[resp++] = 0x14; + + for (i=0; i<0x14; ++i) + res[resp++] = string[i]; + break; + } + case 0x31: + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 31 (UNKNOWN)"); + res[resp++] = 0x31; + res[resp++] = 0x02; + res[resp++] = 0x00; + res[resp++] = 0x00; + break; + case 0x32: + ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD 32 (UNKNOWN)"); + res[resp++] = 0x32; + res[resp++] = 0x02; + res[resp++] = 0x00; + res[resp++] = 0x00; + break; + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4a: + case 0x4b: + case 0x4c: + case 0x4d: + case 0x4e: + case 0x4f: + { + DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: CMD %02x, %02x %02x %02x %02x %02x %02x %02x (JVS IO)", + ptr(0), ptr(1), ptr(2), ptr(3), ptr(4), ptr(5), ptr(6), ptr(7)); + int pptr = 2; + JVSIOMessage msg; + + msg.start(0); + msg.addData(1); + + unsigned char jvs_io_buffer[0x80]; + int nr_bytes = ptr(pptr + 2); // byte after e0 xx + int jvs_io_length = 0; + for (i=0; iPAD_GetStatus(i, &PadStatus); + unsigned char player_data[2] = {0,0}; + if (PadStatus.button & PAD_BUTTON_START) + player_data[0] |= 0x80; + if (PadStatus.button & PAD_BUTTON_UP) + player_data[0] |= 0x20; + if (PadStatus.button & PAD_BUTTON_DOWN) + player_data[0] |= 0x10; + if (PadStatus.button & PAD_BUTTON_LEFT) + player_data[0] |= 0x08; + if (PadStatus.button & PAD_BUTTON_RIGHT) + player_data[0] |= 0x04; + + if (PadStatus.button & PAD_BUTTON_A) + player_data[0] |= 0x02; + if (PadStatus.button & PAD_BUTTON_B) + player_data[0] |= 0x01; + + if (PadStatus.button & PAD_BUTTON_X) + player_data[1] |= 0x80; + if (PadStatus.button & PAD_BUTTON_Y) + player_data[1] |= 0x40; + if (PadStatus.button & PAD_TRIGGER_L) + player_data[1] |= 0x20; + if (PadStatus.button & PAD_TRIGGER_R) + player_data[1] |= 0x10; + + for (j=0; jPAD_GetStatus(0, &PadStatus); + while (slots--) + { + msg.addData(0); + msg.addData((PadStatus.button & PAD_BUTTON_START) ? 1 : 0); + } + break; + } + case 0x22: // analog + { + break; + } + case 0xf0: + if (*jvs_io++ == 0xD9) + { + ERROR_LOG(AMBASEBOARDDEBUG, "JVS RESET"); + } else + unknown = 1; + msg.addData(1); + + d10_1 |= 1; + break; + case 0xf1: + node = *jvs_io++; + ERROR_LOG(AMBASEBOARDDEBUG, "JVS SET ADDRESS, node=%d", node); + msg.addData(node == 1); + break; + default: + break; + } + + pptr += jvs_io_length; + + } + + msg.end(); + + res[resp++] = ptr(0); + + unsigned char *buf = msg.m_msg; + int len = msg.m_ptr; + res[resp++] = len; + for (i=0; i m_MessageQueue; - - bool m_OldKeyBuffer[256]; - u8 m_OldModifiers; - - virtual bool IsKeyPressed(int _Key); - - // This stuff should probably die - enum - { - KBD_LAYOUT_QWERTY = 0, - KBD_LAYOUT_AZERTY - }; - int m_KeyboardLayout; - static u8 m_KeyCodesQWERTY[256]; - static u8 m_KeyCodesAZERTY[256]; -}; - -#endif // _WII_IPC_HLE_DEVICE_USB_KBD_H_ +#ifndef _WII_IPC_HLE_DEVICE_USB_KBD_H_ +#define _WII_IPC_HLE_DEVICE_USB_KBD_H_ + +class CWII_IPC_HLE_Device_usb_kbd : public IWII_IPC_HLE_Device +{ +public: + CWII_IPC_HLE_Device_usb_kbd(u32 _DeviceID, const std::string& _rDeviceName); + virtual ~CWII_IPC_HLE_Device_usb_kbd(); + + virtual bool Open(u32 _CommandAddress, u32 _Mode); + virtual bool Close(u32 _CommandAddress, bool _bForce); + virtual bool Write(u32 _CommandAddress); + virtual bool IOCtl(u32 _CommandAddress); + virtual u32 Update(); + +private: + enum + { + MSG_KBD_CONNECT = 0, + MSG_KBD_DISCONNECT, + MSG_EVENT + }; + + #pragma pack(push, 1) + struct SMessageData + { + u32 MsgType; + u32 Unk1; + u8 Modifiers; + u8 Unk2; + u8 PressedKeys[6]; + + SMessageData(u32 _MsgType, u8 _Modifiers, u8 *_PressedKeys) { + MsgType = Common::swap32(_MsgType); + Unk1 = 0; // swapped + Modifiers = _Modifiers; + Unk2 = 0; + + if (_PressedKeys) // Doesn't need to be in a specific order + memcpy(PressedKeys, _PressedKeys, sizeof(PressedKeys)); + else + memset(PressedKeys, 0, sizeof(PressedKeys)); + } + }; + #pragma pack(pop) + std::queue m_MessageQueue; + + bool m_OldKeyBuffer[256]; + u8 m_OldModifiers; + + virtual bool IsKeyPressed(int _Key); + + // This stuff should probably die + enum + { + KBD_LAYOUT_QWERTY = 0, + KBD_LAYOUT_AZERTY + }; + int m_KeyboardLayout; + static u8 m_KeyCodesQWERTY[256]; + static u8 m_KeyCodesAZERTY[256]; +}; + +#endif // _WII_IPC_HLE_DEVICE_USB_KBD_H_ diff --git a/Source/Core/Core/Src/LuaInterface.h b/Source/Core/Core/Src/LuaInterface.h index a87e469d76..8f12612528 100644 --- a/Source/Core/Core/Src/LuaInterface.h +++ b/Source/Core/Core/Src/LuaInterface.h @@ -1,114 +1,114 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef __LUA_INTERFACE_H -#define __LUA_INTERFACE_H - -namespace Lua { - -void OpenLuaContext(int uid, void(*print)(int uid, const char* str) = 0, void(*onstart)(int uid) = 0, void(*onstop)(int uid, bool statusOK) = 0); -void RunLuaScriptFile(int uid, const char* filename); -void StopLuaScript(int uid); -void RequestAbortLuaScript(int uid, const char* message = 0); -void CloseLuaContext(int uid); - -enum LuaCallID -{ - LUACALL_BEFOREEMULATION, - LUACALL_AFTEREMULATION, - LUACALL_AFTEREMULATIONGUI, - LUACALL_BEFOREEXIT, - LUACALL_BEFORESAVE, - LUACALL_AFTERLOAD, - LUACALL_ONSTART, - - LUACALL_SCRIPT_HOTKEY_1, - LUACALL_SCRIPT_HOTKEY_2, - LUACALL_SCRIPT_HOTKEY_3, - LUACALL_SCRIPT_HOTKEY_4, - LUACALL_SCRIPT_HOTKEY_5, - LUACALL_SCRIPT_HOTKEY_6, - LUACALL_SCRIPT_HOTKEY_7, - LUACALL_SCRIPT_HOTKEY_8, - LUACALL_SCRIPT_HOTKEY_9, - LUACALL_SCRIPT_HOTKEY_10, - LUACALL_SCRIPT_HOTKEY_11, - LUACALL_SCRIPT_HOTKEY_12, - LUACALL_SCRIPT_HOTKEY_13, - LUACALL_SCRIPT_HOTKEY_14, - LUACALL_SCRIPT_HOTKEY_15, - LUACALL_SCRIPT_HOTKEY_16, - - LUACALL_COUNT -}; -void CallRegisteredLuaFunctions(LuaCallID calltype); - -enum LuaMemHookType -{ - LUAMEMHOOK_WRITE, - LUAMEMHOOK_READ, - LUAMEMHOOK_EXEC, - LUAMEMHOOK_WRITE_SUB, - LUAMEMHOOK_READ_SUB, - LUAMEMHOOK_EXEC_SUB, - - LUAMEMHOOK_COUNT -}; -void CallRegisteredLuaMemHook(unsigned int address, int size, unsigned int value, LuaMemHookType hookType); - -struct LuaSaveData -{ - LuaSaveData() { recordList = 0; } - ~LuaSaveData() { ClearRecords(); } - - struct Record - { - unsigned int key; // crc32 - unsigned int size; // size of data - unsigned char* data; - Record* next; - }; - - Record* recordList; - - void SaveRecord(int uid, unsigned int key); // saves Lua stack into a record and pops it - void LoadRecord(int uid, unsigned int key, unsigned int itemsToLoad) const; // pushes a record's data onto the Lua stack - void SaveRecordPartial(int uid, unsigned int key, int idx); // saves part of the Lua stack (at the given index) into a record and does NOT pop anything - - void ExportRecords(void* file) const; // writes all records to an already-open file - void ImportRecords(void* file); // reads records from an already-open file - void ClearRecords(); // deletes all record data - -private: - // disallowed, it's dangerous to call this - // (because the memory the destructor deletes isn't refcounted and shouldn't need to be copied) - // so pass LuaSaveDatas by reference and this should never get called - LuaSaveData(const LuaSaveData& ) {} -}; -void CallRegisteredLuaSaveFunctions(int savestateNumber, LuaSaveData& saveData); -void CallRegisteredLuaLoadFunctions(int savestateNumber, const LuaSaveData& saveData); - -void StopAllLuaScripts(); -void RestartAllLuaScripts(); -void EnableStopAllLuaScripts(bool enable); -void DontWorryLua(); - - - -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __LUA_INTERFACE_H +#define __LUA_INTERFACE_H + +namespace Lua { + +void OpenLuaContext(int uid, void(*print)(int uid, const char* str) = 0, void(*onstart)(int uid) = 0, void(*onstop)(int uid, bool statusOK) = 0); +void RunLuaScriptFile(int uid, const char* filename); +void StopLuaScript(int uid); +void RequestAbortLuaScript(int uid, const char* message = 0); +void CloseLuaContext(int uid); + +enum LuaCallID +{ + LUACALL_BEFOREEMULATION, + LUACALL_AFTEREMULATION, + LUACALL_AFTEREMULATIONGUI, + LUACALL_BEFOREEXIT, + LUACALL_BEFORESAVE, + LUACALL_AFTERLOAD, + LUACALL_ONSTART, + + LUACALL_SCRIPT_HOTKEY_1, + LUACALL_SCRIPT_HOTKEY_2, + LUACALL_SCRIPT_HOTKEY_3, + LUACALL_SCRIPT_HOTKEY_4, + LUACALL_SCRIPT_HOTKEY_5, + LUACALL_SCRIPT_HOTKEY_6, + LUACALL_SCRIPT_HOTKEY_7, + LUACALL_SCRIPT_HOTKEY_8, + LUACALL_SCRIPT_HOTKEY_9, + LUACALL_SCRIPT_HOTKEY_10, + LUACALL_SCRIPT_HOTKEY_11, + LUACALL_SCRIPT_HOTKEY_12, + LUACALL_SCRIPT_HOTKEY_13, + LUACALL_SCRIPT_HOTKEY_14, + LUACALL_SCRIPT_HOTKEY_15, + LUACALL_SCRIPT_HOTKEY_16, + + LUACALL_COUNT +}; +void CallRegisteredLuaFunctions(LuaCallID calltype); + +enum LuaMemHookType +{ + LUAMEMHOOK_WRITE, + LUAMEMHOOK_READ, + LUAMEMHOOK_EXEC, + LUAMEMHOOK_WRITE_SUB, + LUAMEMHOOK_READ_SUB, + LUAMEMHOOK_EXEC_SUB, + + LUAMEMHOOK_COUNT +}; +void CallRegisteredLuaMemHook(unsigned int address, int size, unsigned int value, LuaMemHookType hookType); + +struct LuaSaveData +{ + LuaSaveData() { recordList = 0; } + ~LuaSaveData() { ClearRecords(); } + + struct Record + { + unsigned int key; // crc32 + unsigned int size; // size of data + unsigned char* data; + Record* next; + }; + + Record* recordList; + + void SaveRecord(int uid, unsigned int key); // saves Lua stack into a record and pops it + void LoadRecord(int uid, unsigned int key, unsigned int itemsToLoad) const; // pushes a record's data onto the Lua stack + void SaveRecordPartial(int uid, unsigned int key, int idx); // saves part of the Lua stack (at the given index) into a record and does NOT pop anything + + void ExportRecords(void* file) const; // writes all records to an already-open file + void ImportRecords(void* file); // reads records from an already-open file + void ClearRecords(); // deletes all record data + +private: + // disallowed, it's dangerous to call this + // (because the memory the destructor deletes isn't refcounted and shouldn't need to be copied) + // so pass LuaSaveDatas by reference and this should never get called + LuaSaveData(const LuaSaveData& ) {} +}; +void CallRegisteredLuaSaveFunctions(int savestateNumber, LuaSaveData& saveData); +void CallRegisteredLuaLoadFunctions(int savestateNumber, const LuaSaveData& saveData); + +void StopAllLuaScripts(); +void RestartAllLuaScripts(); +void EnableStopAllLuaScripts(bool enable); +void DontWorryLua(); + + + +}; + +#endif diff --git a/Source/Core/Core/Src/OnFrame.cpp b/Source/Core/Core/Src/OnFrame.cpp index c81803ba03..0b58abd844 100644 --- a/Source/Core/Core/Src/OnFrame.cpp +++ b/Source/Core/Core/Src/OnFrame.cpp @@ -1,405 +1,405 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "OnFrame.h" - -#include "Core.h" -#include "PluginManager.h" -#include "Thread.h" -#include "FileUtil.h" -#include "PowerPC/PowerPC.h" - -Common::CriticalSection cs_frameSkip; - -namespace Frame { - -bool g_bFrameStep = false; -bool g_bFrameStop = false; -bool g_bAutoFire = false; -u32 g_autoFirstKey = 0, g_autoSecondKey = 0; -bool g_bFirstKey = true; -PlayMode g_playMode = MODE_NONE; - -unsigned int g_framesToSkip = 0, g_frameSkipCounter = 0; - -int g_numPads = 0; -ControllerState *g_padStates; -FILE *g_recordfd = NULL; - -u64 g_frameCounter = 0, g_lagCounter = 0; -bool g_bPolled = false; - -int g_numRerecords = 0; -std::string g_recordFile; - -void FrameUpdate() -{ - g_frameCounter++; - - if(!g_bPolled) - g_lagCounter++; - - if (g_bFrameStep) - Core::SetState(Core::CORE_PAUSE); - - // ("framestop") the only purpose of this is to cause interpreter/jit Run() to return temporarily. - // after that we set it back to CPU_RUNNING and continue as normal. - if (g_bFrameStop) - *PowerPC::GetStatePtr() = PowerPC::CPU_STEPPING; - - if(g_framesToSkip) - FrameSkipping(); - - if (g_bAutoFire) - g_bFirstKey = !g_bFirstKey; - - // Dump/Read all controllers' states for this frame - if(IsRecordingInput()) - fwrite(g_padStates, sizeof(ControllerState), g_numPads, g_recordfd); - else if(IsPlayingInput()) { - fread(g_padStates, sizeof(ControllerState), g_numPads, g_recordfd); - - // End of recording - if(feof(g_recordfd)) - EndPlayInput(); - } - - g_bPolled = false; -} - -void SetFrameSkipping(unsigned int framesToSkip) -{ - cs_frameSkip.Enter(); - - g_framesToSkip = framesToSkip; - g_frameSkipCounter = 0; - - // Don't forget to re-enable rendering in case it wasn't... - // as this won't be changed anymore when frameskip is turned off - if (framesToSkip == 0) - CPluginManager::GetInstance().GetVideo()->Video_SetRendering(true); - - cs_frameSkip.Leave(); -} - -int FrameSkippingFactor() -{ - return g_framesToSkip; -} - -void SetPolledDevice() -{ - g_bPolled = true; -} - -void SetAutoHold(bool bEnabled, u32 keyToHold) -{ - g_bAutoFire = bEnabled; - if (bEnabled) - g_autoFirstKey = g_autoSecondKey = keyToHold; - else - g_autoFirstKey = g_autoSecondKey = 0; -} - -void SetAutoFire(bool bEnabled, u32 keyOne, u32 keyTwo) -{ - g_bAutoFire = bEnabled; - if (bEnabled) { - g_autoFirstKey = keyOne; - g_autoSecondKey = keyTwo; - } else - g_autoFirstKey = g_autoSecondKey = 0; - - g_bFirstKey = true; -} - -bool IsAutoFiring() -{ - return g_bAutoFire; -} - -void SetFrameStepping(bool bEnabled) -{ - g_bFrameStep = bEnabled; -} -void SetFrameStopping(bool bEnabled) { - g_bFrameStop = bEnabled; -} - -void ModifyController(SPADStatus *PadStatus, int controllerID) -{ - if(controllerID < 0) - return; - - u32 keyToPress = (g_bFirstKey) ? g_autoFirstKey : g_autoSecondKey; - - if (!keyToPress) - return; - - PadStatus->button |= keyToPress; - - switch(keyToPress) { - default: - return; - - case PAD_BUTTON_A: - PadStatus->analogA = 255; - break; - case PAD_BUTTON_B: - PadStatus->analogB = 255; - break; - - case PAD_TRIGGER_L: - PadStatus->triggerLeft = 255; - break; - case PAD_TRIGGER_R: - PadStatus->triggerRight = 255; - break; - } -} - -void FrameSkipping() -{ - cs_frameSkip.Enter(); - - g_frameSkipCounter++; - if (g_frameSkipCounter > g_framesToSkip || Core::report_slow(g_frameSkipCounter) == false) - g_frameSkipCounter = 0; - - CPluginManager::GetInstance().GetVideo()->Video_SetRendering(!g_frameSkipCounter); - - cs_frameSkip.Leave(); -} - -bool IsRecordingInput() -{ - return (g_playMode == MODE_RECORDING); -} - -bool IsPlayingInput() -{ - return (g_playMode == MODE_PLAYING); -} - -// TODO: Add BeginRecordingFromSavestate -bool BeginRecordingInput(const char *filename, int controllers) -{ - if(!filename || g_playMode != MODE_NONE || g_recordfd) - return false; - - if(File::Exists(filename)) - File::Delete(filename); - - g_recordfd = fopen(filename, "wb"); - if(!g_recordfd) { - PanicAlert("Error opening file %s for recording", filename); - return false; - } - - // Write initial empty header - DTMHeader dummy; - fwrite(&dummy, sizeof(DTMHeader), 1, g_recordfd); - - g_numPads = controllers; - g_padStates = new ControllerState[controllers]; - - g_frameCounter = 0; - g_lagCounter = 0; - - g_playMode = MODE_RECORDING; - - g_recordFile = filename; - - return true; -} - -void EndRecordingInput() -{ - rewind(g_recordfd); - - // Create the real header now and write it - DTMHeader header; - memset(&header, 0, sizeof(DTMHeader)); - - header.filetype[0] = 'D'; header.filetype[1] = 'T'; header.filetype[2] = 'M'; header.filetype[3] = 0x1A; - strncpy((char *)header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str(), 6); - header.bWii = Core::g_CoreStartupParameter.bWii; - header.numControllers = g_numPads; - - header.bFromSaveState = false; // TODO: add the case where it's true - header.frameCount = g_frameCounter; - header.lagCount = g_lagCounter; - - // TODO - header.uniqueID = 0; - header.numRerecords = 0; - // header.author; - // header.videoPlugin; - // header.audioPlugin; - // header.padPlugin; - - fwrite(&header, sizeof(DTMHeader), 1, g_recordfd); - - fclose(g_recordfd); - g_recordfd = NULL; - - delete[] g_padStates; - - g_playMode = MODE_NONE; -} - -void RecordInput(SPADStatus *PadStatus, int controllerID) -{ - if(!IsRecordingInput() || controllerID >= g_numPads || controllerID < 0) - return; - - g_padStates[controllerID].A = ((PadStatus->button & PAD_BUTTON_A) != 0); - g_padStates[controllerID].B = ((PadStatus->button & PAD_BUTTON_B) != 0); - g_padStates[controllerID].X = ((PadStatus->button & PAD_BUTTON_X) != 0); - g_padStates[controllerID].Y = ((PadStatus->button & PAD_BUTTON_Y) != 0); - g_padStates[controllerID].Z = ((PadStatus->button & PAD_TRIGGER_Z) != 0); - g_padStates[controllerID].Start = ((PadStatus->button & PAD_BUTTON_START) != 0); - - g_padStates[controllerID].DPadUp = ((PadStatus->button & PAD_BUTTON_UP) != 0); - g_padStates[controllerID].DPadDown = ((PadStatus->button & PAD_BUTTON_DOWN) != 0); - g_padStates[controllerID].DPadLeft = ((PadStatus->button & PAD_BUTTON_LEFT) != 0); - g_padStates[controllerID].DPadRight = ((PadStatus->button & PAD_BUTTON_RIGHT) != 0); - - g_padStates[controllerID].L = PadStatus->triggerLeft; - g_padStates[controllerID].R = PadStatus->triggerRight; - - g_padStates[controllerID].AnalogStickX = PadStatus->stickX; - g_padStates[controllerID].AnalogStickY = PadStatus->stickY; - - g_padStates[controllerID].CStickX = PadStatus->substickX; - g_padStates[controllerID].CStickY = PadStatus->substickY; - - PlayController(PadStatus, controllerID); -} - -bool PlayInput(const char *filename) -{ - if(!filename || g_playMode != MODE_NONE || g_recordfd) - return false; - - if(!File::Exists(filename)) - return false; - - DTMHeader header; - - g_recordfd = fopen(filename, "rb"); - if(!g_recordfd) - return false; - - fread(&header, sizeof(DTMHeader), 1, g_recordfd); - - if(header.filetype[0] != 'D' || header.filetype[1] != 'T' || header.filetype[2] != 'M' || header.filetype[3] != 0x1A) { - PanicAlert("Invalid recording file"); - goto cleanup; - } - - // Load savestate (and skip to frame data) - if(header.bFromSaveState) { - // TODO - } - - /* TODO: Put this verification somewhere we have the gameID of the played game - // TODO: Replace with Unique ID - if(header.uniqueID != 0) { - PanicAlert("Recording Unique ID Verification Failed"); - goto cleanup; - } - - if(strncmp((char *)header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str(), 6)) { - PanicAlert("The recorded game (%s) is not the same as the selected game (%s)", header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str()); - goto cleanup; - } - */ - - g_numPads = header.numControllers; - g_padStates = new ControllerState[g_numPads]; - g_numRerecords = header.numRerecords; - g_recordFile = filename; - - g_playMode = MODE_PLAYING; - - return true; - -cleanup: - fclose(g_recordfd); - g_recordfd = NULL; - return false; -} - -void PlayController(SPADStatus *PadStatus, int controllerID) -{ - if(!IsPlayingInput() || controllerID >= g_numPads || controllerID < 0) - return; - - memset(PadStatus, 0, sizeof(SPADStatus)); - - PadStatus->button |= PAD_USE_ORIGIN; - - if(g_padStates[controllerID].A) { - PadStatus->button |= PAD_BUTTON_A; - PadStatus->analogA = 0xFF; - } - if(g_padStates[controllerID].B) { - PadStatus->button |= PAD_BUTTON_B; - PadStatus->analogB = 0xFF; - } - if(g_padStates[controllerID].X) - PadStatus->button |= PAD_BUTTON_X; - if(g_padStates[controllerID].Y) - PadStatus->button |= PAD_BUTTON_Y; - if(g_padStates[controllerID].Z) - PadStatus->button |= PAD_TRIGGER_Z; - if(g_padStates[controllerID].Start) - PadStatus->button |= PAD_BUTTON_START; - - if(g_padStates[controllerID].DPadUp) - PadStatus->button |= PAD_BUTTON_UP; - if(g_padStates[controllerID].DPadDown) - PadStatus->button |= PAD_BUTTON_DOWN; - if(g_padStates[controllerID].DPadLeft) - PadStatus->button |= PAD_BUTTON_LEFT; - if(g_padStates[controllerID].DPadRight) - PadStatus->button |= PAD_BUTTON_RIGHT; - - PadStatus->triggerLeft = g_padStates[controllerID].L; - if(PadStatus->triggerLeft > 230) - PadStatus->button |= PAD_TRIGGER_L; - PadStatus->triggerRight = g_padStates[controllerID].R; - if(PadStatus->triggerRight > 230) - PadStatus->button |= PAD_TRIGGER_R; - - PadStatus->stickX = g_padStates[controllerID].AnalogStickX; - PadStatus->stickY = g_padStates[controllerID].AnalogStickY; - - PadStatus->substickX = g_padStates[controllerID].CStickX; - PadStatus->substickY = g_padStates[controllerID].CStickY; -} - -void EndPlayInput() { - fclose(g_recordfd); - g_recordfd = NULL; - g_numPads = 0; - delete[] g_padStates; - g_playMode = MODE_NONE; -} - -}; +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "OnFrame.h" + +#include "Core.h" +#include "PluginManager.h" +#include "Thread.h" +#include "FileUtil.h" +#include "PowerPC/PowerPC.h" + +Common::CriticalSection cs_frameSkip; + +namespace Frame { + +bool g_bFrameStep = false; +bool g_bFrameStop = false; +bool g_bAutoFire = false; +u32 g_autoFirstKey = 0, g_autoSecondKey = 0; +bool g_bFirstKey = true; +PlayMode g_playMode = MODE_NONE; + +unsigned int g_framesToSkip = 0, g_frameSkipCounter = 0; + +int g_numPads = 0; +ControllerState *g_padStates; +FILE *g_recordfd = NULL; + +u64 g_frameCounter = 0, g_lagCounter = 0; +bool g_bPolled = false; + +int g_numRerecords = 0; +std::string g_recordFile; + +void FrameUpdate() +{ + g_frameCounter++; + + if(!g_bPolled) + g_lagCounter++; + + if (g_bFrameStep) + Core::SetState(Core::CORE_PAUSE); + + // ("framestop") the only purpose of this is to cause interpreter/jit Run() to return temporarily. + // after that we set it back to CPU_RUNNING and continue as normal. + if (g_bFrameStop) + *PowerPC::GetStatePtr() = PowerPC::CPU_STEPPING; + + if(g_framesToSkip) + FrameSkipping(); + + if (g_bAutoFire) + g_bFirstKey = !g_bFirstKey; + + // Dump/Read all controllers' states for this frame + if(IsRecordingInput()) + fwrite(g_padStates, sizeof(ControllerState), g_numPads, g_recordfd); + else if(IsPlayingInput()) { + fread(g_padStates, sizeof(ControllerState), g_numPads, g_recordfd); + + // End of recording + if(feof(g_recordfd)) + EndPlayInput(); + } + + g_bPolled = false; +} + +void SetFrameSkipping(unsigned int framesToSkip) +{ + cs_frameSkip.Enter(); + + g_framesToSkip = framesToSkip; + g_frameSkipCounter = 0; + + // Don't forget to re-enable rendering in case it wasn't... + // as this won't be changed anymore when frameskip is turned off + if (framesToSkip == 0) + CPluginManager::GetInstance().GetVideo()->Video_SetRendering(true); + + cs_frameSkip.Leave(); +} + +int FrameSkippingFactor() +{ + return g_framesToSkip; +} + +void SetPolledDevice() +{ + g_bPolled = true; +} + +void SetAutoHold(bool bEnabled, u32 keyToHold) +{ + g_bAutoFire = bEnabled; + if (bEnabled) + g_autoFirstKey = g_autoSecondKey = keyToHold; + else + g_autoFirstKey = g_autoSecondKey = 0; +} + +void SetAutoFire(bool bEnabled, u32 keyOne, u32 keyTwo) +{ + g_bAutoFire = bEnabled; + if (bEnabled) { + g_autoFirstKey = keyOne; + g_autoSecondKey = keyTwo; + } else + g_autoFirstKey = g_autoSecondKey = 0; + + g_bFirstKey = true; +} + +bool IsAutoFiring() +{ + return g_bAutoFire; +} + +void SetFrameStepping(bool bEnabled) +{ + g_bFrameStep = bEnabled; +} +void SetFrameStopping(bool bEnabled) { + g_bFrameStop = bEnabled; +} + +void ModifyController(SPADStatus *PadStatus, int controllerID) +{ + if(controllerID < 0) + return; + + u32 keyToPress = (g_bFirstKey) ? g_autoFirstKey : g_autoSecondKey; + + if (!keyToPress) + return; + + PadStatus->button |= keyToPress; + + switch(keyToPress) { + default: + return; + + case PAD_BUTTON_A: + PadStatus->analogA = 255; + break; + case PAD_BUTTON_B: + PadStatus->analogB = 255; + break; + + case PAD_TRIGGER_L: + PadStatus->triggerLeft = 255; + break; + case PAD_TRIGGER_R: + PadStatus->triggerRight = 255; + break; + } +} + +void FrameSkipping() +{ + cs_frameSkip.Enter(); + + g_frameSkipCounter++; + if (g_frameSkipCounter > g_framesToSkip || Core::report_slow(g_frameSkipCounter) == false) + g_frameSkipCounter = 0; + + CPluginManager::GetInstance().GetVideo()->Video_SetRendering(!g_frameSkipCounter); + + cs_frameSkip.Leave(); +} + +bool IsRecordingInput() +{ + return (g_playMode == MODE_RECORDING); +} + +bool IsPlayingInput() +{ + return (g_playMode == MODE_PLAYING); +} + +// TODO: Add BeginRecordingFromSavestate +bool BeginRecordingInput(const char *filename, int controllers) +{ + if(!filename || g_playMode != MODE_NONE || g_recordfd) + return false; + + if(File::Exists(filename)) + File::Delete(filename); + + g_recordfd = fopen(filename, "wb"); + if(!g_recordfd) { + PanicAlert("Error opening file %s for recording", filename); + return false; + } + + // Write initial empty header + DTMHeader dummy; + fwrite(&dummy, sizeof(DTMHeader), 1, g_recordfd); + + g_numPads = controllers; + g_padStates = new ControllerState[controllers]; + + g_frameCounter = 0; + g_lagCounter = 0; + + g_playMode = MODE_RECORDING; + + g_recordFile = filename; + + return true; +} + +void EndRecordingInput() +{ + rewind(g_recordfd); + + // Create the real header now and write it + DTMHeader header; + memset(&header, 0, sizeof(DTMHeader)); + + header.filetype[0] = 'D'; header.filetype[1] = 'T'; header.filetype[2] = 'M'; header.filetype[3] = 0x1A; + strncpy((char *)header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str(), 6); + header.bWii = Core::g_CoreStartupParameter.bWii; + header.numControllers = g_numPads; + + header.bFromSaveState = false; // TODO: add the case where it's true + header.frameCount = g_frameCounter; + header.lagCount = g_lagCounter; + + // TODO + header.uniqueID = 0; + header.numRerecords = 0; + // header.author; + // header.videoPlugin; + // header.audioPlugin; + // header.padPlugin; + + fwrite(&header, sizeof(DTMHeader), 1, g_recordfd); + + fclose(g_recordfd); + g_recordfd = NULL; + + delete[] g_padStates; + + g_playMode = MODE_NONE; +} + +void RecordInput(SPADStatus *PadStatus, int controllerID) +{ + if(!IsRecordingInput() || controllerID >= g_numPads || controllerID < 0) + return; + + g_padStates[controllerID].A = ((PadStatus->button & PAD_BUTTON_A) != 0); + g_padStates[controllerID].B = ((PadStatus->button & PAD_BUTTON_B) != 0); + g_padStates[controllerID].X = ((PadStatus->button & PAD_BUTTON_X) != 0); + g_padStates[controllerID].Y = ((PadStatus->button & PAD_BUTTON_Y) != 0); + g_padStates[controllerID].Z = ((PadStatus->button & PAD_TRIGGER_Z) != 0); + g_padStates[controllerID].Start = ((PadStatus->button & PAD_BUTTON_START) != 0); + + g_padStates[controllerID].DPadUp = ((PadStatus->button & PAD_BUTTON_UP) != 0); + g_padStates[controllerID].DPadDown = ((PadStatus->button & PAD_BUTTON_DOWN) != 0); + g_padStates[controllerID].DPadLeft = ((PadStatus->button & PAD_BUTTON_LEFT) != 0); + g_padStates[controllerID].DPadRight = ((PadStatus->button & PAD_BUTTON_RIGHT) != 0); + + g_padStates[controllerID].L = PadStatus->triggerLeft; + g_padStates[controllerID].R = PadStatus->triggerRight; + + g_padStates[controllerID].AnalogStickX = PadStatus->stickX; + g_padStates[controllerID].AnalogStickY = PadStatus->stickY; + + g_padStates[controllerID].CStickX = PadStatus->substickX; + g_padStates[controllerID].CStickY = PadStatus->substickY; + + PlayController(PadStatus, controllerID); +} + +bool PlayInput(const char *filename) +{ + if(!filename || g_playMode != MODE_NONE || g_recordfd) + return false; + + if(!File::Exists(filename)) + return false; + + DTMHeader header; + + g_recordfd = fopen(filename, "rb"); + if(!g_recordfd) + return false; + + fread(&header, sizeof(DTMHeader), 1, g_recordfd); + + if(header.filetype[0] != 'D' || header.filetype[1] != 'T' || header.filetype[2] != 'M' || header.filetype[3] != 0x1A) { + PanicAlert("Invalid recording file"); + goto cleanup; + } + + // Load savestate (and skip to frame data) + if(header.bFromSaveState) { + // TODO + } + + /* TODO: Put this verification somewhere we have the gameID of the played game + // TODO: Replace with Unique ID + if(header.uniqueID != 0) { + PanicAlert("Recording Unique ID Verification Failed"); + goto cleanup; + } + + if(strncmp((char *)header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str(), 6)) { + PanicAlert("The recorded game (%s) is not the same as the selected game (%s)", header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str()); + goto cleanup; + } + */ + + g_numPads = header.numControllers; + g_padStates = new ControllerState[g_numPads]; + g_numRerecords = header.numRerecords; + g_recordFile = filename; + + g_playMode = MODE_PLAYING; + + return true; + +cleanup: + fclose(g_recordfd); + g_recordfd = NULL; + return false; +} + +void PlayController(SPADStatus *PadStatus, int controllerID) +{ + if(!IsPlayingInput() || controllerID >= g_numPads || controllerID < 0) + return; + + memset(PadStatus, 0, sizeof(SPADStatus)); + + PadStatus->button |= PAD_USE_ORIGIN; + + if(g_padStates[controllerID].A) { + PadStatus->button |= PAD_BUTTON_A; + PadStatus->analogA = 0xFF; + } + if(g_padStates[controllerID].B) { + PadStatus->button |= PAD_BUTTON_B; + PadStatus->analogB = 0xFF; + } + if(g_padStates[controllerID].X) + PadStatus->button |= PAD_BUTTON_X; + if(g_padStates[controllerID].Y) + PadStatus->button |= PAD_BUTTON_Y; + if(g_padStates[controllerID].Z) + PadStatus->button |= PAD_TRIGGER_Z; + if(g_padStates[controllerID].Start) + PadStatus->button |= PAD_BUTTON_START; + + if(g_padStates[controllerID].DPadUp) + PadStatus->button |= PAD_BUTTON_UP; + if(g_padStates[controllerID].DPadDown) + PadStatus->button |= PAD_BUTTON_DOWN; + if(g_padStates[controllerID].DPadLeft) + PadStatus->button |= PAD_BUTTON_LEFT; + if(g_padStates[controllerID].DPadRight) + PadStatus->button |= PAD_BUTTON_RIGHT; + + PadStatus->triggerLeft = g_padStates[controllerID].L; + if(PadStatus->triggerLeft > 230) + PadStatus->button |= PAD_TRIGGER_L; + PadStatus->triggerRight = g_padStates[controllerID].R; + if(PadStatus->triggerRight > 230) + PadStatus->button |= PAD_TRIGGER_R; + + PadStatus->stickX = g_padStates[controllerID].AnalogStickX; + PadStatus->stickY = g_padStates[controllerID].AnalogStickY; + + PadStatus->substickX = g_padStates[controllerID].CStickX; + PadStatus->substickY = g_padStates[controllerID].CStickY; +} + +void EndPlayInput() { + fclose(g_recordfd); + g_recordfd = NULL; + g_numPads = 0; + delete[] g_padStates; + g_playMode = MODE_NONE; +} + +}; diff --git a/Source/Core/Core/Src/OnFrame.h b/Source/Core/Core/Src/OnFrame.h index 416e4dc188..f197921478 100644 --- a/Source/Core/Core/Src/OnFrame.h +++ b/Source/Core/Core/Src/OnFrame.h @@ -1,121 +1,121 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef __FRAME_H -#define __FRAME_H - -#include "Common.h" -#include "pluginspecs_pad.h" - -#include - -// Per-(video )Frame actions - -namespace Frame { - -// Enumerations and structs -enum PlayMode { - MODE_NONE = 0, - MODE_RECORDING, - MODE_PLAYING -}; - -// Gamecube Controller State -typedef struct { - bool Start, A, B, X, Y, Z; // Binary buttons, 6 bits - bool DPadUp, DPadDown, DPadLeft, DPadRight; // Binary D-Pad buttons, 4 bits - u8 L, R; // Triggers, 16 bits - u8 AnalogStickX, AnalogStickY; // Main Stick, 16 bits - u8 CStickX, CStickY; // Sub-Stick, 16 bits - - bool reserved[6]; // Reserved bits, 6 bits -} ControllerState; // Total: 58 + 6 = 64 bits per frame - - -// Global declarations -extern bool g_bFrameStep, g_bAutoFire, g_bFirstKey, g_bPolled; -extern u32 g_autoFirstKey, g_autoSecondKey; -extern PlayMode g_playMode; - -extern unsigned int g_framesToSkip, g_frameSkipCounter; - -extern int g_numPads; -extern ControllerState *g_padStates; -extern FILE *g_recordfd; -extern std::string g_recordFile; - -extern u64 g_frameCounter, g_lagCounter; - -extern int g_numRerecords; - -typedef struct { - u8 filetype[4]; // Unique Identifier (always "DTM"0x1A) - - u8 gameID[6]; // The Game ID - bool bWii; // Wii game - - u8 numControllers; // The number of connected controllers (1-4) - - bool bFromSaveState; // false indicates that the recording started from bootup, true for savestate - u64 frameCount; // Number of frames in the recording - u64 lagCount; // Number of lag frames in the recording - u64 uniqueID; // A Unique ID comprised of: md5(time + Game ID) - u32 numRerecords; // Number of rerecords/'cuts' of this TAS - u8 author[32]; // Author's name (encoded in UTF-8) - - u8 videoPlugin[16]; // UTF-8 representation of the video plugin - u8 audioPlugin[16]; // UTF-8 representation of the audio plugin - u8 padPlugin[16]; // UTF-8 representation of the input plugin - - - bool padding[102]; // Padding to align the header to 1024 bits - - u8 reserved[128]; // Increasing size from 128 bytes to 256 bytes, just because we can -} DTMHeader; - - -void FrameUpdate(); - -void SetPolledDevice(); - -bool IsAutoFiring(); -bool IsRecordingInput(); -bool IsPlayingInput(); - -void SetAutoHold(bool bEnabled, u32 keyToHold = 0); -void SetAutoFire(bool bEnabled, u32 keyOne = 0, u32 keyTwo = 0); - -void SetFrameStepping(bool bEnabled); -void SetFrameStopping(bool bEnabled); - -void SetFrameSkipping(unsigned int framesToSkip); -int FrameSkippingFactor(); -void FrameSkipping(); - -void ModifyController(SPADStatus *PadStatus, int controllerID); - -bool BeginRecordingInput(const char *filename, int controllers); -void RecordInput(SPADStatus *PadStatus, int controllerID); -void EndRecordingInput(); - -bool PlayInput(const char *filename); -void PlayController(SPADStatus *PadStatus, int controllerID); -void EndPlayInput(); - -}; - -#endif // __FRAME_H +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __FRAME_H +#define __FRAME_H + +#include "Common.h" +#include "pluginspecs_pad.h" + +#include + +// Per-(video )Frame actions + +namespace Frame { + +// Enumerations and structs +enum PlayMode { + MODE_NONE = 0, + MODE_RECORDING, + MODE_PLAYING +}; + +// Gamecube Controller State +typedef struct { + bool Start, A, B, X, Y, Z; // Binary buttons, 6 bits + bool DPadUp, DPadDown, DPadLeft, DPadRight; // Binary D-Pad buttons, 4 bits + u8 L, R; // Triggers, 16 bits + u8 AnalogStickX, AnalogStickY; // Main Stick, 16 bits + u8 CStickX, CStickY; // Sub-Stick, 16 bits + + bool reserved[6]; // Reserved bits, 6 bits +} ControllerState; // Total: 58 + 6 = 64 bits per frame + + +// Global declarations +extern bool g_bFrameStep, g_bAutoFire, g_bFirstKey, g_bPolled; +extern u32 g_autoFirstKey, g_autoSecondKey; +extern PlayMode g_playMode; + +extern unsigned int g_framesToSkip, g_frameSkipCounter; + +extern int g_numPads; +extern ControllerState *g_padStates; +extern FILE *g_recordfd; +extern std::string g_recordFile; + +extern u64 g_frameCounter, g_lagCounter; + +extern int g_numRerecords; + +typedef struct { + u8 filetype[4]; // Unique Identifier (always "DTM"0x1A) + + u8 gameID[6]; // The Game ID + bool bWii; // Wii game + + u8 numControllers; // The number of connected controllers (1-4) + + bool bFromSaveState; // false indicates that the recording started from bootup, true for savestate + u64 frameCount; // Number of frames in the recording + u64 lagCount; // Number of lag frames in the recording + u64 uniqueID; // A Unique ID comprised of: md5(time + Game ID) + u32 numRerecords; // Number of rerecords/'cuts' of this TAS + u8 author[32]; // Author's name (encoded in UTF-8) + + u8 videoPlugin[16]; // UTF-8 representation of the video plugin + u8 audioPlugin[16]; // UTF-8 representation of the audio plugin + u8 padPlugin[16]; // UTF-8 representation of the input plugin + + + bool padding[102]; // Padding to align the header to 1024 bits + + u8 reserved[128]; // Increasing size from 128 bytes to 256 bytes, just because we can +} DTMHeader; + + +void FrameUpdate(); + +void SetPolledDevice(); + +bool IsAutoFiring(); +bool IsRecordingInput(); +bool IsPlayingInput(); + +void SetAutoHold(bool bEnabled, u32 keyToHold = 0); +void SetAutoFire(bool bEnabled, u32 keyOne = 0, u32 keyTwo = 0); + +void SetFrameStepping(bool bEnabled); +void SetFrameStopping(bool bEnabled); + +void SetFrameSkipping(unsigned int framesToSkip); +int FrameSkippingFactor(); +void FrameSkipping(); + +void ModifyController(SPADStatus *PadStatus, int controllerID); + +bool BeginRecordingInput(const char *filename, int controllers); +void RecordInput(SPADStatus *PadStatus, int controllerID); +void EndRecordingInput(); + +bool PlayInput(const char *filename); +void PlayController(SPADStatus *PadStatus, int controllerID); +void EndPlayInput(); + +}; + +#endif // __FRAME_H diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h index e4fd5f90db..5dd96ed6e7 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h @@ -1,255 +1,255 @@ -// Copyright (C) 2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _INTERPRETER_FPUTILS_H -#define _INTERPRETER_FPUTILS_H - -#include "../../Core.h" -#include "Interpreter.h" -#include "MathUtil.h" - -using namespace MathUtil; - -// warning! very slow! This setting fixes NAN -//#define VERY_ACCURATE_FP - -#define MIN_SINGLE 0xc7efffffe0000000ull -#define MAX_SINGLE 0x47efffffe0000000ull - -// FPSCR exception flags -const u32 FPSCR_OX = (u32)1 << (31 - 3); -const u32 FPSCR_UX = (u32)1 << (31 - 4); -const u32 FPSCR_ZX = (u32)1 << (31 - 5); -// ! XX shouldn't be accessed directly to set 1. Use SetFI() instead ! -const u32 FPSCR_XX = (u32)1 << (31 - 6); -const u32 FPSCR_VXSNAN = (u32)1 << (31 - 7); -const u32 FPSCR_VXISI = (u32)1 << (31 - 8); -const u32 FPSCR_VXIDI = (u32)1 << (31 - 9); -const u32 FPSCR_VXZDZ = (u32)1 << (31 - 10); -const u32 FPSCR_VXIMZ = (u32)1 << (31 - 11); -const u32 FPSCR_VXVC = (u32)1 << (31 - 12); -const u32 FPSCR_VXSOFT = (u32)1 << (31 - 21); -const u32 FPSCR_VXSQRT = (u32)1 << (31 - 22); -const u32 FPSCR_VXCVI = (u32)1 << (31 - 23); - -const u32 FPSCR_VX_ANY = FPSCR_VXSNAN | FPSCR_VXISI | FPSCR_VXIDI | FPSCR_VXZDZ | - FPSCR_VXIMZ | FPSCR_VXVC | FPSCR_VXSOFT | FPSCR_VXSQRT | FPSCR_VXCVI; - -const u32 FPSCR_ANY_X = FPSCR_OX | FPSCR_UX | FPSCR_ZX | FPSCR_XX | FPSCR_VX_ANY; - -const u64 PPC_NAN_U64 = 0x7ff8000000000000ull; -const double PPC_NAN = *(double* const)&PPC_NAN_U64; - -inline bool IsINF(double x) -{ - return ((*(u64*)&x) & ~DOUBLE_SIGN) == DOUBLE_EXP; -} - -inline void SetFPException(u32 mask) -{ - if ((FPSCR.Hex & mask) != mask) - FPSCR.FX = 1; - FPSCR.Hex |= mask; -} - -inline void SetFI(int FI) -{ - if (FI) - { - SetFPException(FPSCR_XX); - } - FPSCR.FI = FI; -} - -inline void UpdateFPSCR() -{ - FPSCR.VX = (FPSCR.Hex & FPSCR_VX_ANY) != 0; - FPSCR.FEX = 0; // we assume that "?E" bits are always 0 -} - -inline double ForceSingle(double _x) -{ - //if (FPSCR.RN != 0) - // PanicAlert("RN = %d at %x", (int)FPSCR.RN, PC); - if (FPSCR.NI) - _x = FlushToZeroAsFloat(_x); - - double x = static_cast(_x); - - return x; -} - -inline double ForceDouble(double d) -{ - //if (FPSCR.RN != 0) - // PanicAlert("RN = %d at %x", (int)FPSCR.RN, PC); - - //if (FPSCR.NI) - //{ - // IntDouble x; x.d = d; - //if ((x.i & DOUBLE_EXP) == 0) - // x.i &= DOUBLE_SIGN; // turn into signed zero - // return x.d; - //} - return d; -} - -// these functions allow globally modify operations behaviour -// also, these may be used to set flags like FR, FI, OX, UX - -inline double NI_mul(const double a, const double b) -{ -#ifdef VERY_ACCURATE_FP - if (a != a) return a; - if (b != b) return b; - double t = a * b; - if (t != t) - { - SetFPException(FPSCR_VXIMZ); - return PPC_NAN; - } - return t; -#else - return a * b; -#endif -} - -inline double NI_add(const double a, const double b) -{ -#ifdef VERY_ACCURATE_FP - if (a != a) return a; - if (b != b) return b; - double t = a + b; - if (t != t) - { - SetFPException(FPSCR_VXISI); - return PPC_NAN; - } - return t; -#else - return a + b; -#endif -} - -inline double NI_sub(const double a, const double b) -{ -#ifdef VERY_ACCURATE_FP - if (a != a) return a; - if (b != b) return b; - double t = a - b; - if (t != t) - { - SetFPException(FPSCR_VXISI); - return PPC_NAN; - } - return t; -#else - return a - b; -#endif -} - -inline double NI_madd(const double a, const double b, const double c) -{ -#ifdef VERY_ACCURATE_FP - if (a != a) return a; - if (c != c) return c; - if (b != b) return b; - double t = a * b; - if (t != t) - { - SetFPException(FPSCR_VXIMZ); - return PPC_NAN; - } - t = t + c; - if (t != t) - { - SetFPException(FPSCR_VXISI); - return PPC_NAN; - } - return t; -#else - return NI_add(NI_mul(a, b), c); -#endif -} - -inline double NI_msub(const double a, const double b, const double c) -{ -//#ifdef VERY_ACCURATE_FP -// This code does not produce accurate fp! NAN's are not calculated correctly, nor negative zero. -// The code is kept here for reference. -// -// if (a != a) return a; -// if (c != c) return c; -// if (b != b) return b; -// double t = a * b; -// if (t != t) -// { -// SetFPException(FPSCR_VXIMZ); -// return PPC_NAN; -// } -// -// t = t - c; -// if (t != t) -// { -// SetFPException(FPSCR_VXISI); -// return PPC_NAN; -// } -// return t; -//#else -// This code does not calculate QNAN's correctly but calculates negative zero correctly. - return NI_sub(NI_mul(a, b), c); -// #endif -} - -// used by stfsXX instructions and ps_rsqrte -inline u32 ConvertToSingle(u64 x) -{ - u32 exp = (x >> 52) & 0x7ff; - if (exp > 896 || (x & ~DOUBLE_SIGN) == 0) - { - return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); - } - else if (exp >= 874) - { - u32 t = (u32)(0x80000000 | ((x & DOUBLE_FRAC) >> 21)); - t = t >> (905 - exp); - t |= (x >> 32) & 0x80000000; - return t; - } - else - { - // This is said to be undefined. - // The code is based on hardware tests. - return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); - } -} - -// used by psq_stXX operations. -inline u32 ConvertToSingleFTZ(u64 x) -{ - u32 exp = (x >> 52) & 0x7ff; - if (exp > 896 || (x & ~DOUBLE_SIGN) == 0) - { - return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); - } - else - { - return (x >> 32) & 0x80000000; - } -} - -#endif +// Copyright (C) 2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _INTERPRETER_FPUTILS_H +#define _INTERPRETER_FPUTILS_H + +#include "../../Core.h" +#include "Interpreter.h" +#include "MathUtil.h" + +using namespace MathUtil; + +// warning! very slow! This setting fixes NAN +//#define VERY_ACCURATE_FP + +#define MIN_SINGLE 0xc7efffffe0000000ull +#define MAX_SINGLE 0x47efffffe0000000ull + +// FPSCR exception flags +const u32 FPSCR_OX = (u32)1 << (31 - 3); +const u32 FPSCR_UX = (u32)1 << (31 - 4); +const u32 FPSCR_ZX = (u32)1 << (31 - 5); +// ! XX shouldn't be accessed directly to set 1. Use SetFI() instead ! +const u32 FPSCR_XX = (u32)1 << (31 - 6); +const u32 FPSCR_VXSNAN = (u32)1 << (31 - 7); +const u32 FPSCR_VXISI = (u32)1 << (31 - 8); +const u32 FPSCR_VXIDI = (u32)1 << (31 - 9); +const u32 FPSCR_VXZDZ = (u32)1 << (31 - 10); +const u32 FPSCR_VXIMZ = (u32)1 << (31 - 11); +const u32 FPSCR_VXVC = (u32)1 << (31 - 12); +const u32 FPSCR_VXSOFT = (u32)1 << (31 - 21); +const u32 FPSCR_VXSQRT = (u32)1 << (31 - 22); +const u32 FPSCR_VXCVI = (u32)1 << (31 - 23); + +const u32 FPSCR_VX_ANY = FPSCR_VXSNAN | FPSCR_VXISI | FPSCR_VXIDI | FPSCR_VXZDZ | + FPSCR_VXIMZ | FPSCR_VXVC | FPSCR_VXSOFT | FPSCR_VXSQRT | FPSCR_VXCVI; + +const u32 FPSCR_ANY_X = FPSCR_OX | FPSCR_UX | FPSCR_ZX | FPSCR_XX | FPSCR_VX_ANY; + +const u64 PPC_NAN_U64 = 0x7ff8000000000000ull; +const double PPC_NAN = *(double* const)&PPC_NAN_U64; + +inline bool IsINF(double x) +{ + return ((*(u64*)&x) & ~DOUBLE_SIGN) == DOUBLE_EXP; +} + +inline void SetFPException(u32 mask) +{ + if ((FPSCR.Hex & mask) != mask) + FPSCR.FX = 1; + FPSCR.Hex |= mask; +} + +inline void SetFI(int FI) +{ + if (FI) + { + SetFPException(FPSCR_XX); + } + FPSCR.FI = FI; +} + +inline void UpdateFPSCR() +{ + FPSCR.VX = (FPSCR.Hex & FPSCR_VX_ANY) != 0; + FPSCR.FEX = 0; // we assume that "?E" bits are always 0 +} + +inline double ForceSingle(double _x) +{ + //if (FPSCR.RN != 0) + // PanicAlert("RN = %d at %x", (int)FPSCR.RN, PC); + if (FPSCR.NI) + _x = FlushToZeroAsFloat(_x); + + double x = static_cast(_x); + + return x; +} + +inline double ForceDouble(double d) +{ + //if (FPSCR.RN != 0) + // PanicAlert("RN = %d at %x", (int)FPSCR.RN, PC); + + //if (FPSCR.NI) + //{ + // IntDouble x; x.d = d; + //if ((x.i & DOUBLE_EXP) == 0) + // x.i &= DOUBLE_SIGN; // turn into signed zero + // return x.d; + //} + return d; +} + +// these functions allow globally modify operations behaviour +// also, these may be used to set flags like FR, FI, OX, UX + +inline double NI_mul(const double a, const double b) +{ +#ifdef VERY_ACCURATE_FP + if (a != a) return a; + if (b != b) return b; + double t = a * b; + if (t != t) + { + SetFPException(FPSCR_VXIMZ); + return PPC_NAN; + } + return t; +#else + return a * b; +#endif +} + +inline double NI_add(const double a, const double b) +{ +#ifdef VERY_ACCURATE_FP + if (a != a) return a; + if (b != b) return b; + double t = a + b; + if (t != t) + { + SetFPException(FPSCR_VXISI); + return PPC_NAN; + } + return t; +#else + return a + b; +#endif +} + +inline double NI_sub(const double a, const double b) +{ +#ifdef VERY_ACCURATE_FP + if (a != a) return a; + if (b != b) return b; + double t = a - b; + if (t != t) + { + SetFPException(FPSCR_VXISI); + return PPC_NAN; + } + return t; +#else + return a - b; +#endif +} + +inline double NI_madd(const double a, const double b, const double c) +{ +#ifdef VERY_ACCURATE_FP + if (a != a) return a; + if (c != c) return c; + if (b != b) return b; + double t = a * b; + if (t != t) + { + SetFPException(FPSCR_VXIMZ); + return PPC_NAN; + } + t = t + c; + if (t != t) + { + SetFPException(FPSCR_VXISI); + return PPC_NAN; + } + return t; +#else + return NI_add(NI_mul(a, b), c); +#endif +} + +inline double NI_msub(const double a, const double b, const double c) +{ +//#ifdef VERY_ACCURATE_FP +// This code does not produce accurate fp! NAN's are not calculated correctly, nor negative zero. +// The code is kept here for reference. +// +// if (a != a) return a; +// if (c != c) return c; +// if (b != b) return b; +// double t = a * b; +// if (t != t) +// { +// SetFPException(FPSCR_VXIMZ); +// return PPC_NAN; +// } +// +// t = t - c; +// if (t != t) +// { +// SetFPException(FPSCR_VXISI); +// return PPC_NAN; +// } +// return t; +//#else +// This code does not calculate QNAN's correctly but calculates negative zero correctly. + return NI_sub(NI_mul(a, b), c); +// #endif +} + +// used by stfsXX instructions and ps_rsqrte +inline u32 ConvertToSingle(u64 x) +{ + u32 exp = (x >> 52) & 0x7ff; + if (exp > 896 || (x & ~DOUBLE_SIGN) == 0) + { + return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); + } + else if (exp >= 874) + { + u32 t = (u32)(0x80000000 | ((x & DOUBLE_FRAC) >> 21)); + t = t >> (905 - exp); + t |= (x >> 32) & 0x80000000; + return t; + } + else + { + // This is said to be undefined. + // The code is based on hardware tests. + return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); + } +} + +// used by psq_stXX operations. +inline u32 ConvertToSingleFTZ(u64 x) +{ + u32 exp = (x >> 52) & 0x7ff; + if (exp > 896 || (x & ~DOUBLE_SIGN) == 0) + { + return ((x >> 32) & 0xc0000000) | ((x >> 29) & 0x3fffffff); + } + else + { + return (x >> 32) & 0x80000000; + } +} + +#endif diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.h index 60d503a2b3..e532345b7c 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.h +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.h @@ -1,28 +1,28 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef INTERPRETER_TABLES_H -#define INTERPRETER_TABLES_H -#include "../Gekko.h" -#include "../PPCTables.h" -#include "Interpreter.h" - -namespace InterpreterTables -{ - void InitTables(); -} -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef INTERPRETER_TABLES_H +#define INTERPRETER_TABLES_H +#include "../Gekko.h" +#include "../PPCTables.h" +#include "Interpreter.h" + +namespace InterpreterTables +{ + void InitTables(); +} +#endif diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp index 7ce5b80690..5fb5257847 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp @@ -1,489 +1,489 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Jit.h" -#include "Jit64_Tables.h" - -// Should be moved in to the Jit class -typedef void (Jit64::*_Instruction) (UGeckoInstruction instCode); - -static _Instruction dynaOpTable[64]; -static _Instruction dynaOpTable4[1024]; -static _Instruction dynaOpTable19[1024]; -static _Instruction dynaOpTable31[1024]; -static _Instruction dynaOpTable59[32]; -static _Instruction dynaOpTable63[1024]; -void Jit64::DynaRunTable4(UGeckoInstruction _inst) {(this->*dynaOpTable4 [_inst.SUBOP10])(_inst);} -void Jit64::DynaRunTable19(UGeckoInstruction _inst) {(this->*dynaOpTable19[_inst.SUBOP10])(_inst);} -void Jit64::DynaRunTable31(UGeckoInstruction _inst) {(this->*dynaOpTable31[_inst.SUBOP10])(_inst);} -void Jit64::DynaRunTable59(UGeckoInstruction _inst) {(this->*dynaOpTable59[_inst.SUBOP5 ])(_inst);} -void Jit64::DynaRunTable63(UGeckoInstruction _inst) {(this->*dynaOpTable63[_inst.SUBOP10])(_inst);} - -struct GekkoOPTemplate -{ - int opcode; - _Instruction Inst; - //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out - int runCount; -}; - -static GekkoOPTemplate primarytable[] = -{ - {4, &Jit64::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, - {19, &Jit64::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, - {31, &Jit64::DynaRunTable31}, //"RunTable31", OPTYPE_SUBTABLE | (31<<24), 0}}, - {59, &Jit64::DynaRunTable59}, //"RunTable59", OPTYPE_SUBTABLE | (59<<24), 0}}, - {63, &Jit64::DynaRunTable63}, //"RunTable63", OPTYPE_SUBTABLE | (63<<24), 0}}, - - {16, &Jit64::bcx}, //"bcx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {18, &Jit64::bx}, //"bx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - - {1, &Jit64::HLEFunction}, //"HLEFunction", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {2, &Jit64::Default}, //"DynaBlock", OPTYPE_SYSTEM, 0}}, - {3, &Jit64::Default}, //"twi", OPTYPE_SYSTEM, 0}}, - {17, &Jit64::sc}, //"sc", OPTYPE_SYSTEM, FL_ENDBLOCK, 1}}, - - {7, &Jit64::mulli}, //"mulli", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_RC_BIT, 2}}, - {8, &Jit64::subfic}, //"subfic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, - {10, &Jit64::cmpXX}, //"cmpli", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, - {11, &Jit64::cmpXX}, //"cmpi", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, - {12, &Jit64::reg_imm}, //"addic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, - {13, &Jit64::reg_imm}, //"addic_rc", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CR0}}, - {14, &Jit64::reg_imm}, //"addi", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, - {15, &Jit64::reg_imm}, //"addis", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, - - {20, &Jit64::rlwimix}, //"rlwimix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_A | FL_IN_S | FL_RC_BIT}}, - {21, &Jit64::rlwinmx}, //"rlwinmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {23, &Jit64::rlwnmx}, //"rlwnmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_IN_B | FL_RC_BIT}}, - - {24, &Jit64::reg_imm}, //"ori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {25, &Jit64::reg_imm}, //"oris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {26, &Jit64::reg_imm}, //"xori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {27, &Jit64::reg_imm}, //"xoris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {28, &Jit64::reg_imm}, //"andi_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, - {29, &Jit64::reg_imm}, //"andis_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, - - {32, &Jit64::lXz}, //"lwz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {33, &Jit64::Default}, //"lwzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {34, &Jit64::lXz}, //"lbz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {35, &Jit64::Default}, //"lbzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {40, &Jit64::lXz}, //"lhz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {41, &Jit64::Default}, //"lhzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {42, &Jit64::lha}, //"lha", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {43, &Jit64::Default}, //"lhau", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - - {44, &Jit64::stX}, //"sth", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {45, &Jit64::stX}, //"sthu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - {36, &Jit64::stX}, //"stw", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {37, &Jit64::stX}, //"stwu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - {38, &Jit64::stX}, //"stb", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {39, &Jit64::stX}, //"stbu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - - {46, &Jit64::lmw}, //"lmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, - {47, &Jit64::stmw}, //"stmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, - - {48, &Jit64::lfs}, //"lfs", OPTYPE_LOADFP, FL_IN_A}}, - {49, &Jit64::Default}, //"lfsu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, - {50, &Jit64::lfd}, //"lfd", OPTYPE_LOADFP, FL_IN_A}}, - {51, &Jit64::Default}, //"lfdu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, - - {52, &Jit64::stfs}, //"stfs", OPTYPE_STOREFP, FL_IN_A}}, - {53, &Jit64::stfs}, //"stfsu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, - {54, &Jit64::stfd}, //"stfd", OPTYPE_STOREFP, FL_IN_A}}, - {55, &Jit64::Default}, //"stfdu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, - - {56, &Jit64::psq_l}, //"psq_l", OPTYPE_PS, FL_IN_A}}, - {57, &Jit64::psq_l}, //"psq_lu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, - {60, &Jit64::psq_st}, //"psq_st", OPTYPE_PS, FL_IN_A}}, - {61, &Jit64::psq_st}, //"psq_stu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, - - //missing: 0, 5, 6, 9, 22, 30, 62, 58 - {0, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {5, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {6, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {9, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {22, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {30, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {62, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {58, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, -}; - -static GekkoOPTemplate table4[] = -{ //SUBOP10 - {0, &Jit64::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, - {32, &Jit64::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, - {40, &Jit64::ps_sign}, //"ps_neg", OPTYPE_PS, FL_RC_BIT}}, - {136, &Jit64::ps_sign}, //"ps_nabs", OPTYPE_PS, FL_RC_BIT}}, - {264, &Jit64::ps_sign}, //"ps_abs", OPTYPE_PS, FL_RC_BIT}}, - {64, &Jit64::Default}, //"ps_cmpu1", OPTYPE_PS, FL_RC_BIT}}, - {72, &Jit64::ps_mr}, //"ps_mr", OPTYPE_PS, FL_RC_BIT}}, - {96, &Jit64::Default}, //"ps_cmpo1", OPTYPE_PS, FL_RC_BIT}}, - {528, &Jit64::ps_mergeXX}, //"ps_merge00", OPTYPE_PS, FL_RC_BIT}}, - {560, &Jit64::ps_mergeXX}, //"ps_merge01", OPTYPE_PS, FL_RC_BIT}}, - {592, &Jit64::ps_mergeXX}, //"ps_merge10", OPTYPE_PS, FL_RC_BIT}}, - {624, &Jit64::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, - - {1014, &Jit64::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; - -static GekkoOPTemplate table4_2[] = -{ - {10, &Jit64::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, - {11, &Jit64::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, - {12, &Jit64::ps_muls}, //"ps_muls0", OPTYPE_PS, 0}}, - {13, &Jit64::ps_muls}, //"ps_muls1", OPTYPE_PS, 0}}, - {14, &Jit64::ps_maddXX}, //"ps_madds0", OPTYPE_PS, 0}}, - {15, &Jit64::ps_maddXX}, //"ps_madds1", OPTYPE_PS, 0}}, - {18, &Jit64::ps_arith}, //"ps_div", OPTYPE_PS, 0, 16}}, - {20, &Jit64::ps_arith}, //"ps_sub", OPTYPE_PS, 0}}, - {21, &Jit64::ps_arith}, //"ps_add", OPTYPE_PS, 0}}, - {23, &Jit64::ps_sel}, //"ps_sel", OPTYPE_PS, 0}}, - {24, &Jit64::Default}, //"ps_res", OPTYPE_PS, 0}}, - {25, &Jit64::ps_arith}, //"ps_mul", OPTYPE_PS, 0}}, - {26, &Jit64::ps_rsqrte}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, - {28, &Jit64::ps_maddXX}, //"ps_msub", OPTYPE_PS, 0}}, - {29, &Jit64::ps_maddXX}, //"ps_madd", OPTYPE_PS, 0}}, - {30, &Jit64::ps_maddXX}, //"ps_nmsub", OPTYPE_PS, 0}}, - {31, &Jit64::ps_maddXX}, //"ps_nmadd", OPTYPE_PS, 0}}, -}; - - -static GekkoOPTemplate table4_3[] = -{ - {6, &Jit64::Default}, //"psq_lx", OPTYPE_PS, 0}}, - {7, &Jit64::Default}, //"psq_stx", OPTYPE_PS, 0}}, - {38, &Jit64::Default}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &Jit64::Default}, //"psq_stux", OPTYPE_PS, 0}}, -}; - -static GekkoOPTemplate table19[] = -{ - {528, &Jit64::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, - {16, &Jit64::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, - {257, &Jit64::Default}, //"crand", OPTYPE_CR, FL_EVIL}}, - {129, &Jit64::Default}, //"crandc", OPTYPE_CR, FL_EVIL}}, - {289, &Jit64::Default}, //"creqv", OPTYPE_CR, FL_EVIL}}, - {225, &Jit64::Default}, //"crnand", OPTYPE_CR, FL_EVIL}}, - {33, &Jit64::Default}, //"crnor", OPTYPE_CR, FL_EVIL}}, - {449, &Jit64::Default}, //"cror", OPTYPE_CR, FL_EVIL}}, - {417, &Jit64::Default}, //"crorc", OPTYPE_CR, FL_EVIL}}, - {193, &Jit64::Default}, //"crxor", OPTYPE_CR, FL_EVIL}}, - - {150, &Jit64::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, - {0, &Jit64::Default}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - - {50, &Jit64::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, - {18, &Jit64::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} -}; - - -static GekkoOPTemplate table31[] = -{ - {28, &Jit64::andx}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {60, &Jit64::Default}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {444, &Jit64::orx}, //"orx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {124, &Jit64::Default}, //"norx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {316, &Jit64::xorx}, //"xorx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {412, &Jit64::Default}, //"orcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {476, &Jit64::Default}, //"nandx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {284, &Jit64::Default}, //"eqvx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {0, &Jit64::cmpXX}, //"cmp", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, - {32, &Jit64::cmpXX}, //"cmpl", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, - {26, &Jit64::cntlzwx}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {922, &Jit64::extshx}, //"extshx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {954, &Jit64::extsbx}, //"extsbx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {536, &Jit64::srwx}, //"srwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {792, &Jit64::srawx}, //"srawx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {824, &Jit64::srawix}, //"srawix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {24, &Jit64::slwx}, //"slwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - - {54, &Jit64::Default}, //"dcbst", OPTYPE_DCACHE, 0, 4}}, - {86, &Jit64::DoNothing}, //"dcbf", OPTYPE_DCACHE, 0, 4}}, - {246, &Jit64::Default}, //"dcbtst", OPTYPE_DCACHE, 0, 1}}, - {278, &Jit64::Default}, //"dcbt", OPTYPE_DCACHE, 0, 1}}, - {470, &Jit64::Default}, //"dcbi", OPTYPE_DCACHE, 0, 4}}, - {758, &Jit64::Default}, //"dcba", OPTYPE_DCACHE, 0, 4}}, - {1014, &Jit64::dcbz}, //"dcbz", OPTYPE_DCACHE, 0, 4}}, - - //load word - {23, &Jit64::lwzx}, //"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {55, &Jit64::lwzux}, //"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load halfword - {279, &Jit64::Default}, //"lhzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {311, &Jit64::Default}, //"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load halfword signextend - {343, &Jit64::lhax}, //"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {375, &Jit64::Default}, //"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load byte - {87, &Jit64::lbzx}, //"lbzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {119, &Jit64::Default}, //"lbzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load byte reverse - {534, &Jit64::Default}, //"lwbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {790, &Jit64::Default}, //"lhbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - - // Conditional load/store (Wii SMP) - {150, &Jit64::Default}, //"stwcxd", OPTYPE_STORE, FL_EVIL | FL_SET_CR0}}, - {20, &Jit64::Default}, //"lwarx", OPTYPE_LOAD, FL_EVIL | FL_OUT_D | FL_IN_A0B | FL_SET_CR0}}, - - //load string (interpret these) - {533, &Jit64::Default}, //"lswx", OPTYPE_LOAD, FL_EVIL | FL_IN_A | FL_OUT_D}}, - {597, &Jit64::Default}, //"lswi", OPTYPE_LOAD, FL_EVIL | FL_IN_AB | FL_OUT_D}}, - - //store word - {151, &Jit64::stXx}, //"stwx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {183, &Jit64::stXx}, //"stwux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store halfword - {407, &Jit64::stXx}, //"sthx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {439, &Jit64::stXx}, //"sthux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store byte - {215, &Jit64::stXx}, //"stbx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {247, &Jit64::stXx}, //"stbux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store bytereverse - {662, &Jit64::Default}, //"stwbrx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {918, &Jit64::Default}, //"sthbrx", OPTYPE_STORE, FL_IN_A | FL_IN_B}}, - - {661, &Jit64::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, - {725, &Jit64::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - - // fp load/store - {535, &Jit64::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, - {567, &Jit64::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, - {599, &Jit64::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, - {631, &Jit64::Default}, //"lfdux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, - - {663, &Jit64::stfsx}, //"stfsx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - {695, &Jit64::Default}, //"stfsux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, - {727, &Jit64::Default}, //"stfdx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - {759, &Jit64::Default}, //"stfdux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, - {983, &Jit64::Default}, //"stfiwx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - - {19, &Jit64::mfcr}, //"mfcr", OPTYPE_SYSTEM, FL_OUT_D}}, - {83, &Jit64::mfmsr}, //"mfmsr", OPTYPE_SYSTEM, FL_OUT_D}}, - {144, &Jit64::mtcrf}, //"mtcrf", OPTYPE_SYSTEM, 0}}, - {146, &Jit64::mtmsr}, //"mtmsr", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {210, &Jit64::Default}, //"mtsr", OPTYPE_SYSTEM, 0}}, - {242, &Jit64::Default}, //"mtsrin", OPTYPE_SYSTEM, 0}}, - {339, &Jit64::mfspr}, //"mfspr", OPTYPE_SPR, FL_OUT_D}}, - {467, &Jit64::mtspr}, //"mtspr", OPTYPE_SPR, 0, 2}}, - {371, &Jit64::mftb}, //"mftb", OPTYPE_SYSTEM, FL_OUT_D | FL_TIMER}}, - {512, &Jit64::Default}, //"mcrxr", OPTYPE_SYSTEM, 0}}, - {595, &Jit64::Default}, //"mfsr", OPTYPE_SYSTEM, FL_OUT_D, 2}}, - {659, &Jit64::Default}, //"mfsrin", OPTYPE_SYSTEM, FL_OUT_D, 2}}, - - {4, &Jit64::Default}, //"tw", OPTYPE_SYSTEM, 0, 1}}, - {598, &Jit64::DoNothing}, //"sync", OPTYPE_SYSTEM, 0, 2}}, - {982, &Jit64::icbi}, //"icbi", OPTYPE_SYSTEM, FL_ENDBLOCK, 3}}, - - // Unused instructions on GC - {310, &Jit64::Default}, //"eciwx", OPTYPE_INTEGER, FL_RC_BIT}}, - {438, &Jit64::Default}, //"ecowx", OPTYPE_INTEGER, FL_RC_BIT}}, - {854, &Jit64::Default}, //"eieio", OPTYPE_INTEGER, FL_RC_BIT}}, - {306, &Jit64::Default}, //"tlbie", OPTYPE_SYSTEM, 0}}, - {370, &Jit64::Default}, //"tlbia", OPTYPE_SYSTEM, 0}}, - {566, &Jit64::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, -}; - -static GekkoOPTemplate table31_2[] = -{ - {266, &Jit64::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {10, &Jit64::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, - {138, &Jit64::addex}, //"addex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {234, &Jit64::Default}, //"addmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {202, &Jit64::Default}, //"addzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {491, &Jit64::Default}, //"divwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, - {459, &Jit64::divwux}, //"divwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, - {75, &Jit64::Default}, //"mulhwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {11, &Jit64::mulhwux}, //"mulhwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {235, &Jit64::mullwx}, //"mullwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {104, &Jit64::negx}, //"negx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {40, &Jit64::subfx}, //"subfx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {8, &Jit64::subfcx}, //"subfcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, - {136, &Jit64::subfex}, //"subfex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {232, &Jit64::Default}, //"subfmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {200, &Jit64::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, -}; - -static GekkoOPTemplate table59[] = -{ - {18, &Jit64::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &Jit64::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &Jit64::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -// {22, &Jit64::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko - {24, &Jit64::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &Jit64::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &Jit64::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &Jit64::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &Jit64::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &Jit64::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; - -static GekkoOPTemplate table63[] = -{ - {264, &Jit64::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {32, &Jit64::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, - {0, &Jit64::fcmpx}, //"fcmpu", OPTYPE_FPU, FL_RC_BIT_F}}, - {14, &Jit64::Default}, //"fctiwx", OPTYPE_FPU, FL_RC_BIT_F}}, - {15, &Jit64::Default}, //"fctiwzx", OPTYPE_FPU, FL_RC_BIT_F}}, - {72, &Jit64::fmrx}, //"fmrx", OPTYPE_FPU, FL_RC_BIT_F}}, - {136, &Jit64::fsign}, //"fnabsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {40, &Jit64::fsign}, //"fnegx", OPTYPE_FPU, FL_RC_BIT_F}}, - {12, &Jit64::Default}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}}, - - {64, &Jit64::Default}, //"mcrfs", OPTYPE_SYSTEMFP, 0}}, - {583, &Jit64::Default}, //"mffsx", OPTYPE_SYSTEMFP, 0}}, - {70, &Jit64::Default}, //"mtfsb0x", OPTYPE_SYSTEMFP, 0, 2}}, - {38, &Jit64::Default}, //"mtfsb1x", OPTYPE_SYSTEMFP, 0, 2}}, - {134, &Jit64::Default}, //"mtfsfix", OPTYPE_SYSTEMFP, 0, 2}}, - {711, &Jit64::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, -}; - -static GekkoOPTemplate table63_2[] = -{ - {18, &Jit64::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, - {20, &Jit64::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &Jit64::Default}, //"faddx", OPTYPE_FPU, FL_RC_BIT_F}}, - {22, &Jit64::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}}, - {23, &Jit64::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &Jit64::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}}, - {26, &Jit64::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &Jit64::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &Jit64::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &Jit64::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &Jit64::fmaddXX}, //"fnmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; - -namespace Jit64Tables -{ - -void CompileInstruction(UGeckoInstruction _inst) -{ - Jit64 *jit64 = (Jit64 *)jit; - (jit64->*dynaOpTable[_inst.OPCD])(_inst); - GekkoOPInfo *info = GetOpInfo(_inst); - if (info) { -#ifdef OPLOG - if (!strcmp(info->opname, OP_TO_LOG)){ ///"mcrfs" - rsplocations.push_back(jit.js.compilerPC); - } -#endif - info->compileCount++; - info->lastUse = jit->js.compilerPC; - } else { - PanicAlert("Tried to compile illegal (or unknown) instruction %08x, at %08x", _inst.hex, jit->js.compilerPC); - } -} - -void InitTables() -{ - //clear - for (int i = 0; i < 32; i++) - { - dynaOpTable59[i] = &Jit64::unknown_instruction; - } - - for (int i = 0; i < 1024; i++) - { - dynaOpTable4 [i] = &Jit64::unknown_instruction; - dynaOpTable19[i] = &Jit64::unknown_instruction; - dynaOpTable31[i] = &Jit64::unknown_instruction; - dynaOpTable63[i] = &Jit64::unknown_instruction; - } - - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) - { - dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; - } - - for (int i = 0; i < 32; i++) - { - int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill+table4_2[j].opcode; - dynaOpTable4[op] = table4_2[j].Inst; - } - } - - for (int i = 0; i < 16; i++) - { - int fill = i << 6; - for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill+table4_3[j].opcode; - dynaOpTable4[op] = table4_3[j].Inst; - } - } - - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) - { - int op = table4[i].opcode; - dynaOpTable4[op] = table4[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) - { - int op = table31[i].opcode; - dynaOpTable31[op] = table31[i].Inst; - } - - for (int i = 0; i < 1; i++) - { - int fill = i << 9; - for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill + table31_2[j].opcode; - dynaOpTable31[op] = table31_2[j].Inst; - } - } - - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) - { - int op = table19[i].opcode; - dynaOpTable19[op] = table19[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) - { - int op = table59[i].opcode; - dynaOpTable59[op] = table59[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) - { - int op = table63[i].opcode; - dynaOpTable63[op] = table63[i].Inst; - } - - for (int i = 0; i < 32; i++) - { - int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill + table63_2[j].opcode; - dynaOpTable63[op] = table63_2[j].Inst; - } - } -} - -} // namespace +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Jit.h" +#include "Jit64_Tables.h" + +// Should be moved in to the Jit class +typedef void (Jit64::*_Instruction) (UGeckoInstruction instCode); + +static _Instruction dynaOpTable[64]; +static _Instruction dynaOpTable4[1024]; +static _Instruction dynaOpTable19[1024]; +static _Instruction dynaOpTable31[1024]; +static _Instruction dynaOpTable59[32]; +static _Instruction dynaOpTable63[1024]; +void Jit64::DynaRunTable4(UGeckoInstruction _inst) {(this->*dynaOpTable4 [_inst.SUBOP10])(_inst);} +void Jit64::DynaRunTable19(UGeckoInstruction _inst) {(this->*dynaOpTable19[_inst.SUBOP10])(_inst);} +void Jit64::DynaRunTable31(UGeckoInstruction _inst) {(this->*dynaOpTable31[_inst.SUBOP10])(_inst);} +void Jit64::DynaRunTable59(UGeckoInstruction _inst) {(this->*dynaOpTable59[_inst.SUBOP5 ])(_inst);} +void Jit64::DynaRunTable63(UGeckoInstruction _inst) {(this->*dynaOpTable63[_inst.SUBOP10])(_inst);} + +struct GekkoOPTemplate +{ + int opcode; + _Instruction Inst; + //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out + int runCount; +}; + +static GekkoOPTemplate primarytable[] = +{ + {4, &Jit64::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, + {19, &Jit64::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, + {31, &Jit64::DynaRunTable31}, //"RunTable31", OPTYPE_SUBTABLE | (31<<24), 0}}, + {59, &Jit64::DynaRunTable59}, //"RunTable59", OPTYPE_SUBTABLE | (59<<24), 0}}, + {63, &Jit64::DynaRunTable63}, //"RunTable63", OPTYPE_SUBTABLE | (63<<24), 0}}, + + {16, &Jit64::bcx}, //"bcx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {18, &Jit64::bx}, //"bx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + + {1, &Jit64::HLEFunction}, //"HLEFunction", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {2, &Jit64::Default}, //"DynaBlock", OPTYPE_SYSTEM, 0}}, + {3, &Jit64::Default}, //"twi", OPTYPE_SYSTEM, 0}}, + {17, &Jit64::sc}, //"sc", OPTYPE_SYSTEM, FL_ENDBLOCK, 1}}, + + {7, &Jit64::mulli}, //"mulli", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_RC_BIT, 2}}, + {8, &Jit64::subfic}, //"subfic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, + {10, &Jit64::cmpXX}, //"cmpli", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, + {11, &Jit64::cmpXX}, //"cmpi", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, + {12, &Jit64::reg_imm}, //"addic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, + {13, &Jit64::reg_imm}, //"addic_rc", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CR0}}, + {14, &Jit64::reg_imm}, //"addi", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, + {15, &Jit64::reg_imm}, //"addis", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, + + {20, &Jit64::rlwimix}, //"rlwimix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_A | FL_IN_S | FL_RC_BIT}}, + {21, &Jit64::rlwinmx}, //"rlwinmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {23, &Jit64::rlwnmx}, //"rlwnmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_IN_B | FL_RC_BIT}}, + + {24, &Jit64::reg_imm}, //"ori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {25, &Jit64::reg_imm}, //"oris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {26, &Jit64::reg_imm}, //"xori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {27, &Jit64::reg_imm}, //"xoris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {28, &Jit64::reg_imm}, //"andi_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, + {29, &Jit64::reg_imm}, //"andis_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, + + {32, &Jit64::lXz}, //"lwz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {33, &Jit64::Default}, //"lwzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {34, &Jit64::lXz}, //"lbz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {35, &Jit64::Default}, //"lbzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {40, &Jit64::lXz}, //"lhz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {41, &Jit64::Default}, //"lhzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {42, &Jit64::lha}, //"lha", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {43, &Jit64::Default}, //"lhau", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + + {44, &Jit64::stX}, //"sth", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {45, &Jit64::stX}, //"sthu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + {36, &Jit64::stX}, //"stw", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {37, &Jit64::stX}, //"stwu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + {38, &Jit64::stX}, //"stb", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {39, &Jit64::stX}, //"stbu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + + {46, &Jit64::lmw}, //"lmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, + {47, &Jit64::stmw}, //"stmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, + + {48, &Jit64::lfs}, //"lfs", OPTYPE_LOADFP, FL_IN_A}}, + {49, &Jit64::Default}, //"lfsu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, + {50, &Jit64::lfd}, //"lfd", OPTYPE_LOADFP, FL_IN_A}}, + {51, &Jit64::Default}, //"lfdu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, + + {52, &Jit64::stfs}, //"stfs", OPTYPE_STOREFP, FL_IN_A}}, + {53, &Jit64::stfs}, //"stfsu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, + {54, &Jit64::stfd}, //"stfd", OPTYPE_STOREFP, FL_IN_A}}, + {55, &Jit64::Default}, //"stfdu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, + + {56, &Jit64::psq_l}, //"psq_l", OPTYPE_PS, FL_IN_A}}, + {57, &Jit64::psq_l}, //"psq_lu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, + {60, &Jit64::psq_st}, //"psq_st", OPTYPE_PS, FL_IN_A}}, + {61, &Jit64::psq_st}, //"psq_stu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, + + //missing: 0, 5, 6, 9, 22, 30, 62, 58 + {0, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {5, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {6, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {9, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {22, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {30, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {62, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {58, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, +}; + +static GekkoOPTemplate table4[] = +{ //SUBOP10 + {0, &Jit64::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, + {32, &Jit64::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, + {40, &Jit64::ps_sign}, //"ps_neg", OPTYPE_PS, FL_RC_BIT}}, + {136, &Jit64::ps_sign}, //"ps_nabs", OPTYPE_PS, FL_RC_BIT}}, + {264, &Jit64::ps_sign}, //"ps_abs", OPTYPE_PS, FL_RC_BIT}}, + {64, &Jit64::Default}, //"ps_cmpu1", OPTYPE_PS, FL_RC_BIT}}, + {72, &Jit64::ps_mr}, //"ps_mr", OPTYPE_PS, FL_RC_BIT}}, + {96, &Jit64::Default}, //"ps_cmpo1", OPTYPE_PS, FL_RC_BIT}}, + {528, &Jit64::ps_mergeXX}, //"ps_merge00", OPTYPE_PS, FL_RC_BIT}}, + {560, &Jit64::ps_mergeXX}, //"ps_merge01", OPTYPE_PS, FL_RC_BIT}}, + {592, &Jit64::ps_mergeXX}, //"ps_merge10", OPTYPE_PS, FL_RC_BIT}}, + {624, &Jit64::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, + + {1014, &Jit64::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, +}; + +static GekkoOPTemplate table4_2[] = +{ + {10, &Jit64::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, + {11, &Jit64::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, + {12, &Jit64::ps_muls}, //"ps_muls0", OPTYPE_PS, 0}}, + {13, &Jit64::ps_muls}, //"ps_muls1", OPTYPE_PS, 0}}, + {14, &Jit64::ps_maddXX}, //"ps_madds0", OPTYPE_PS, 0}}, + {15, &Jit64::ps_maddXX}, //"ps_madds1", OPTYPE_PS, 0}}, + {18, &Jit64::ps_arith}, //"ps_div", OPTYPE_PS, 0, 16}}, + {20, &Jit64::ps_arith}, //"ps_sub", OPTYPE_PS, 0}}, + {21, &Jit64::ps_arith}, //"ps_add", OPTYPE_PS, 0}}, + {23, &Jit64::ps_sel}, //"ps_sel", OPTYPE_PS, 0}}, + {24, &Jit64::Default}, //"ps_res", OPTYPE_PS, 0}}, + {25, &Jit64::ps_arith}, //"ps_mul", OPTYPE_PS, 0}}, + {26, &Jit64::ps_rsqrte}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, + {28, &Jit64::ps_maddXX}, //"ps_msub", OPTYPE_PS, 0}}, + {29, &Jit64::ps_maddXX}, //"ps_madd", OPTYPE_PS, 0}}, + {30, &Jit64::ps_maddXX}, //"ps_nmsub", OPTYPE_PS, 0}}, + {31, &Jit64::ps_maddXX}, //"ps_nmadd", OPTYPE_PS, 0}}, +}; + + +static GekkoOPTemplate table4_3[] = +{ + {6, &Jit64::Default}, //"psq_lx", OPTYPE_PS, 0}}, + {7, &Jit64::Default}, //"psq_stx", OPTYPE_PS, 0}}, + {38, &Jit64::Default}, //"psq_lux", OPTYPE_PS, 0}}, + {39, &Jit64::Default}, //"psq_stux", OPTYPE_PS, 0}}, +}; + +static GekkoOPTemplate table19[] = +{ + {528, &Jit64::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, + {16, &Jit64::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, + {257, &Jit64::Default}, //"crand", OPTYPE_CR, FL_EVIL}}, + {129, &Jit64::Default}, //"crandc", OPTYPE_CR, FL_EVIL}}, + {289, &Jit64::Default}, //"creqv", OPTYPE_CR, FL_EVIL}}, + {225, &Jit64::Default}, //"crnand", OPTYPE_CR, FL_EVIL}}, + {33, &Jit64::Default}, //"crnor", OPTYPE_CR, FL_EVIL}}, + {449, &Jit64::Default}, //"cror", OPTYPE_CR, FL_EVIL}}, + {417, &Jit64::Default}, //"crorc", OPTYPE_CR, FL_EVIL}}, + {193, &Jit64::Default}, //"crxor", OPTYPE_CR, FL_EVIL}}, + + {150, &Jit64::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, + {0, &Jit64::Default}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, + + {50, &Jit64::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, + {18, &Jit64::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} +}; + + +static GekkoOPTemplate table31[] = +{ + {28, &Jit64::andx}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {60, &Jit64::Default}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {444, &Jit64::orx}, //"orx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {124, &Jit64::Default}, //"norx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {316, &Jit64::xorx}, //"xorx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {412, &Jit64::Default}, //"orcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {476, &Jit64::Default}, //"nandx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {284, &Jit64::Default}, //"eqvx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {0, &Jit64::cmpXX}, //"cmp", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, + {32, &Jit64::cmpXX}, //"cmpl", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, + {26, &Jit64::cntlzwx}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {922, &Jit64::extshx}, //"extshx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {954, &Jit64::extsbx}, //"extsbx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {536, &Jit64::srwx}, //"srwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {792, &Jit64::srawx}, //"srawx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {824, &Jit64::srawix}, //"srawix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {24, &Jit64::slwx}, //"slwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + + {54, &Jit64::Default}, //"dcbst", OPTYPE_DCACHE, 0, 4}}, + {86, &Jit64::DoNothing}, //"dcbf", OPTYPE_DCACHE, 0, 4}}, + {246, &Jit64::Default}, //"dcbtst", OPTYPE_DCACHE, 0, 1}}, + {278, &Jit64::Default}, //"dcbt", OPTYPE_DCACHE, 0, 1}}, + {470, &Jit64::Default}, //"dcbi", OPTYPE_DCACHE, 0, 4}}, + {758, &Jit64::Default}, //"dcba", OPTYPE_DCACHE, 0, 4}}, + {1014, &Jit64::dcbz}, //"dcbz", OPTYPE_DCACHE, 0, 4}}, + + //load word + {23, &Jit64::lwzx}, //"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {55, &Jit64::lwzux}, //"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load halfword + {279, &Jit64::Default}, //"lhzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {311, &Jit64::Default}, //"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load halfword signextend + {343, &Jit64::lhax}, //"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {375, &Jit64::Default}, //"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load byte + {87, &Jit64::lbzx}, //"lbzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {119, &Jit64::Default}, //"lbzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load byte reverse + {534, &Jit64::Default}, //"lwbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {790, &Jit64::Default}, //"lhbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + + // Conditional load/store (Wii SMP) + {150, &Jit64::Default}, //"stwcxd", OPTYPE_STORE, FL_EVIL | FL_SET_CR0}}, + {20, &Jit64::Default}, //"lwarx", OPTYPE_LOAD, FL_EVIL | FL_OUT_D | FL_IN_A0B | FL_SET_CR0}}, + + //load string (interpret these) + {533, &Jit64::Default}, //"lswx", OPTYPE_LOAD, FL_EVIL | FL_IN_A | FL_OUT_D}}, + {597, &Jit64::Default}, //"lswi", OPTYPE_LOAD, FL_EVIL | FL_IN_AB | FL_OUT_D}}, + + //store word + {151, &Jit64::stXx}, //"stwx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {183, &Jit64::stXx}, //"stwux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store halfword + {407, &Jit64::stXx}, //"sthx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {439, &Jit64::stXx}, //"sthux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store byte + {215, &Jit64::stXx}, //"stbx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {247, &Jit64::stXx}, //"stbux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store bytereverse + {662, &Jit64::Default}, //"stwbrx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {918, &Jit64::Default}, //"sthbrx", OPTYPE_STORE, FL_IN_A | FL_IN_B}}, + + {661, &Jit64::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, + {725, &Jit64::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, + + // fp load/store + {535, &Jit64::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, + {567, &Jit64::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, + {599, &Jit64::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, + {631, &Jit64::Default}, //"lfdux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, + + {663, &Jit64::stfsx}, //"stfsx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + {695, &Jit64::Default}, //"stfsux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, + {727, &Jit64::Default}, //"stfdx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + {759, &Jit64::Default}, //"stfdux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, + {983, &Jit64::Default}, //"stfiwx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + + {19, &Jit64::mfcr}, //"mfcr", OPTYPE_SYSTEM, FL_OUT_D}}, + {83, &Jit64::mfmsr}, //"mfmsr", OPTYPE_SYSTEM, FL_OUT_D}}, + {144, &Jit64::mtcrf}, //"mtcrf", OPTYPE_SYSTEM, 0}}, + {146, &Jit64::mtmsr}, //"mtmsr", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {210, &Jit64::Default}, //"mtsr", OPTYPE_SYSTEM, 0}}, + {242, &Jit64::Default}, //"mtsrin", OPTYPE_SYSTEM, 0}}, + {339, &Jit64::mfspr}, //"mfspr", OPTYPE_SPR, FL_OUT_D}}, + {467, &Jit64::mtspr}, //"mtspr", OPTYPE_SPR, 0, 2}}, + {371, &Jit64::mftb}, //"mftb", OPTYPE_SYSTEM, FL_OUT_D | FL_TIMER}}, + {512, &Jit64::Default}, //"mcrxr", OPTYPE_SYSTEM, 0}}, + {595, &Jit64::Default}, //"mfsr", OPTYPE_SYSTEM, FL_OUT_D, 2}}, + {659, &Jit64::Default}, //"mfsrin", OPTYPE_SYSTEM, FL_OUT_D, 2}}, + + {4, &Jit64::Default}, //"tw", OPTYPE_SYSTEM, 0, 1}}, + {598, &Jit64::DoNothing}, //"sync", OPTYPE_SYSTEM, 0, 2}}, + {982, &Jit64::icbi}, //"icbi", OPTYPE_SYSTEM, FL_ENDBLOCK, 3}}, + + // Unused instructions on GC + {310, &Jit64::Default}, //"eciwx", OPTYPE_INTEGER, FL_RC_BIT}}, + {438, &Jit64::Default}, //"ecowx", OPTYPE_INTEGER, FL_RC_BIT}}, + {854, &Jit64::Default}, //"eieio", OPTYPE_INTEGER, FL_RC_BIT}}, + {306, &Jit64::Default}, //"tlbie", OPTYPE_SYSTEM, 0}}, + {370, &Jit64::Default}, //"tlbia", OPTYPE_SYSTEM, 0}}, + {566, &Jit64::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, +}; + +static GekkoOPTemplate table31_2[] = +{ + {266, &Jit64::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {10, &Jit64::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, + {138, &Jit64::addex}, //"addex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {234, &Jit64::Default}, //"addmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {202, &Jit64::Default}, //"addzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {491, &Jit64::Default}, //"divwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, + {459, &Jit64::divwux}, //"divwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, + {75, &Jit64::Default}, //"mulhwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {11, &Jit64::mulhwux}, //"mulhwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {235, &Jit64::mullwx}, //"mullwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {104, &Jit64::negx}, //"negx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {40, &Jit64::subfx}, //"subfx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {8, &Jit64::subfcx}, //"subfcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, + {136, &Jit64::subfex}, //"subfex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {232, &Jit64::Default}, //"subfmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {200, &Jit64::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, +}; + +static GekkoOPTemplate table59[] = +{ + {18, &Jit64::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &Jit64::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &Jit64::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +// {22, &Jit64::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko + {24, &Jit64::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &Jit64::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &Jit64::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &Jit64::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &Jit64::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &Jit64::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; + +static GekkoOPTemplate table63[] = +{ + {264, &Jit64::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {32, &Jit64::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, + {0, &Jit64::fcmpx}, //"fcmpu", OPTYPE_FPU, FL_RC_BIT_F}}, + {14, &Jit64::Default}, //"fctiwx", OPTYPE_FPU, FL_RC_BIT_F}}, + {15, &Jit64::Default}, //"fctiwzx", OPTYPE_FPU, FL_RC_BIT_F}}, + {72, &Jit64::fmrx}, //"fmrx", OPTYPE_FPU, FL_RC_BIT_F}}, + {136, &Jit64::fsign}, //"fnabsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {40, &Jit64::fsign}, //"fnegx", OPTYPE_FPU, FL_RC_BIT_F}}, + {12, &Jit64::Default}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}}, + + {64, &Jit64::Default}, //"mcrfs", OPTYPE_SYSTEMFP, 0}}, + {583, &Jit64::Default}, //"mffsx", OPTYPE_SYSTEMFP, 0}}, + {70, &Jit64::Default}, //"mtfsb0x", OPTYPE_SYSTEMFP, 0, 2}}, + {38, &Jit64::Default}, //"mtfsb1x", OPTYPE_SYSTEMFP, 0, 2}}, + {134, &Jit64::Default}, //"mtfsfix", OPTYPE_SYSTEMFP, 0, 2}}, + {711, &Jit64::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, +}; + +static GekkoOPTemplate table63_2[] = +{ + {18, &Jit64::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, + {20, &Jit64::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &Jit64::Default}, //"faddx", OPTYPE_FPU, FL_RC_BIT_F}}, + {22, &Jit64::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}}, + {23, &Jit64::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &Jit64::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}}, + {26, &Jit64::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &Jit64::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &Jit64::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &Jit64::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &Jit64::fmaddXX}, //"fnmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; + +namespace Jit64Tables +{ + +void CompileInstruction(UGeckoInstruction _inst) +{ + Jit64 *jit64 = (Jit64 *)jit; + (jit64->*dynaOpTable[_inst.OPCD])(_inst); + GekkoOPInfo *info = GetOpInfo(_inst); + if (info) { +#ifdef OPLOG + if (!strcmp(info->opname, OP_TO_LOG)){ ///"mcrfs" + rsplocations.push_back(jit.js.compilerPC); + } +#endif + info->compileCount++; + info->lastUse = jit->js.compilerPC; + } else { + PanicAlert("Tried to compile illegal (or unknown) instruction %08x, at %08x", _inst.hex, jit->js.compilerPC); + } +} + +void InitTables() +{ + //clear + for (int i = 0; i < 32; i++) + { + dynaOpTable59[i] = &Jit64::unknown_instruction; + } + + for (int i = 0; i < 1024; i++) + { + dynaOpTable4 [i] = &Jit64::unknown_instruction; + dynaOpTable19[i] = &Jit64::unknown_instruction; + dynaOpTable31[i] = &Jit64::unknown_instruction; + dynaOpTable63[i] = &Jit64::unknown_instruction; + } + + for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) + { + dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; + } + + for (int i = 0; i < 32; i++) + { + int fill = i << 5; + for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill+table4_2[j].opcode; + dynaOpTable4[op] = table4_2[j].Inst; + } + } + + for (int i = 0; i < 16; i++) + { + int fill = i << 6; + for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill+table4_3[j].opcode; + dynaOpTable4[op] = table4_3[j].Inst; + } + } + + for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) + { + int op = table4[i].opcode; + dynaOpTable4[op] = table4[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) + { + int op = table31[i].opcode; + dynaOpTable31[op] = table31[i].Inst; + } + + for (int i = 0; i < 1; i++) + { + int fill = i << 9; + for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill + table31_2[j].opcode; + dynaOpTable31[op] = table31_2[j].Inst; + } + } + + for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) + { + int op = table19[i].opcode; + dynaOpTable19[op] = table19[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) + { + int op = table59[i].opcode; + dynaOpTable59[op] = table59[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) + { + int op = table63[i].opcode; + dynaOpTable63[op] = table63[i].Inst; + } + + for (int i = 0; i < 32; i++) + { + int fill = i << 5; + for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill + table63_2[j].opcode; + dynaOpTable63[op] = table63_2[j].Inst; + } + } +} + +} // namespace diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.h index ffd6e26a03..d89c517e28 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.h @@ -1,30 +1,30 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef JIT64_TABLES_H -#define JIT64_TABLES_H - -#include "../Gekko.h" -#include "../PPCTables.h" -#include "../Jit64/Jit.h" - -namespace Jit64Tables -{ - void CompileInstruction(UGeckoInstruction _inst); - void InitTables(); -} -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef JIT64_TABLES_H +#define JIT64_TABLES_H + +#include "../Gekko.h" +#include "../PPCTables.h" +#include "../Jit64/Jit.h" + +namespace Jit64Tables +{ + void CompileInstruction(UGeckoInstruction _inst); + void InitTables(); +} +#endif diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp index 4267102a14..f4e936530e 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp @@ -1,487 +1,487 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "JitIL_Tables.h" - -// Should be moved in to the Jit class -typedef void (JitIL::*_Instruction) (UGeckoInstruction instCode); - -static _Instruction dynaOpTable[64]; -static _Instruction dynaOpTable4[1024]; -static _Instruction dynaOpTable19[1024]; -static _Instruction dynaOpTable31[1024]; -static _Instruction dynaOpTable59[32]; -static _Instruction dynaOpTable63[1024]; - -void JitIL::DynaRunTable4(UGeckoInstruction _inst) {(this->*dynaOpTable4 [_inst.SUBOP10])(_inst);} -void JitIL::DynaRunTable19(UGeckoInstruction _inst) {(this->*dynaOpTable19[_inst.SUBOP10])(_inst);} -void JitIL::DynaRunTable31(UGeckoInstruction _inst) {(this->*dynaOpTable31[_inst.SUBOP10])(_inst);} -void JitIL::DynaRunTable59(UGeckoInstruction _inst) {(this->*dynaOpTable59[_inst.SUBOP5 ])(_inst);} -void JitIL::DynaRunTable63(UGeckoInstruction _inst) {(this->*dynaOpTable63[_inst.SUBOP10])(_inst);} - - - -struct GekkoOPTemplate -{ - int opcode; - _Instruction Inst; - //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out - int runCount; -}; - -static GekkoOPTemplate primarytable[] = -{ - {4, &JitIL::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, - {19, &JitIL::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, - {31, &JitIL::DynaRunTable31}, //"RunTable31", OPTYPE_SUBTABLE | (31<<24), 0}}, - {59, &JitIL::DynaRunTable59}, //"RunTable59", OPTYPE_SUBTABLE | (59<<24), 0}}, - {63, &JitIL::DynaRunTable63}, //"RunTable63", OPTYPE_SUBTABLE | (63<<24), 0}}, - - {16, &JitIL::bcx}, //"bcx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {18, &JitIL::bx}, //"bx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - - {1, &JitIL::HLEFunction}, //"HLEFunction", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {2, &JitIL::Default}, //"DynaBlock", OPTYPE_SYSTEM, 0}}, - {3, &JitIL::Default}, //"twi", OPTYPE_SYSTEM, 0}}, - {17, &JitIL::sc}, //"sc", OPTYPE_SYSTEM, FL_ENDBLOCK, 1}}, - - {7, &JitIL::mulli}, //"mulli", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_RC_BIT, 2}}, - {8, &JitIL::subfic}, //"subfic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, - {10, &JitIL::cmpXX}, //"cmpli", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, - {11, &JitIL::cmpXX}, //"cmpi", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, - {12, &JitIL::reg_imm}, //"addic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, - {13, &JitIL::reg_imm}, //"addic_rc", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CR0}}, - {14, &JitIL::reg_imm}, //"addi", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, - {15, &JitIL::reg_imm}, //"addis", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, - - {20, &JitIL::rlwimix}, //"rlwimix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_A | FL_IN_S | FL_RC_BIT}}, - {21, &JitIL::rlwinmx}, //"rlwinmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {23, &JitIL::rlwnmx}, //"rlwnmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_IN_B | FL_RC_BIT}}, - - {24, &JitIL::reg_imm}, //"ori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {25, &JitIL::reg_imm}, //"oris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {26, &JitIL::reg_imm}, //"xori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {27, &JitIL::reg_imm}, //"xoris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, - {28, &JitIL::reg_imm}, //"andi_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, - {29, &JitIL::reg_imm}, //"andis_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, - - {32, &JitIL::lXz}, //"lwz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {33, &JitIL::lXz}, //"lwzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {34, &JitIL::lXz}, //"lbz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {35, &JitIL::Default}, //"lbzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {40, &JitIL::lXz}, //"lhz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {41, &JitIL::lXz}, //"lhzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - {42, &JitIL::lha}, //"lha", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, - {43, &JitIL::Default}, //"lhau", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, - - {44, &JitIL::stX}, //"sth", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {45, &JitIL::stX}, //"sthu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - {36, &JitIL::stX}, //"stw", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {37, &JitIL::stX}, //"stwu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - {38, &JitIL::stX}, //"stb", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, - {39, &JitIL::stX}, //"stbu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, - - {46, &JitIL::lmw}, //"lmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, - {47, &JitIL::stmw}, //"stmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, - - {48, &JitIL::lfs}, //"lfs", OPTYPE_LOADFP, FL_IN_A}}, - {49, &JitIL::Default}, //"lfsu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, - {50, &JitIL::lfd}, //"lfd", OPTYPE_LOADFP, FL_IN_A}}, - {51, &JitIL::Default}, //"lfdu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, - - {52, &JitIL::stfs}, //"stfs", OPTYPE_STOREFP, FL_IN_A}}, - {53, &JitIL::stfs}, //"stfsu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, - {54, &JitIL::stfd}, //"stfd", OPTYPE_STOREFP, FL_IN_A}}, - {55, &JitIL::Default}, //"stfdu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, - - {56, &JitIL::psq_l}, //"psq_l", OPTYPE_PS, FL_IN_A}}, - {57, &JitIL::psq_l}, //"psq_lu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, - {60, &JitIL::psq_st}, //"psq_st", OPTYPE_PS, FL_IN_A}}, - {61, &JitIL::psq_st}, //"psq_stu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, - - //missing: 0, 5, 6, 9, 22, 30, 62, 58 - {0, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {5, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {6, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {9, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {22, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {30, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {62, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, - {58, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, -}; - -static GekkoOPTemplate table4[] = -{ //SUBOP10 - {0, &JitIL::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, - {32, &JitIL::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, - {40, &JitIL::ps_sign}, //"ps_neg", OPTYPE_PS, FL_RC_BIT}}, - {136, &JitIL::ps_sign}, //"ps_nabs", OPTYPE_PS, FL_RC_BIT}}, - {264, &JitIL::ps_sign}, //"ps_abs", OPTYPE_PS, FL_RC_BIT}}, - {64, &JitIL::Default}, //"ps_cmpu1", OPTYPE_PS, FL_RC_BIT}}, - {72, &JitIL::ps_mr}, //"ps_mr", OPTYPE_PS, FL_RC_BIT}}, - {96, &JitIL::Default}, //"ps_cmpo1", OPTYPE_PS, FL_RC_BIT}}, - {528, &JitIL::ps_mergeXX}, //"ps_merge00", OPTYPE_PS, FL_RC_BIT}}, - {560, &JitIL::ps_mergeXX}, //"ps_merge01", OPTYPE_PS, FL_RC_BIT}}, - {592, &JitIL::ps_mergeXX}, //"ps_merge10", OPTYPE_PS, FL_RC_BIT}}, - {624, &JitIL::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, - - {1014, &JitIL::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; - -static GekkoOPTemplate table4_2[] = -{ - {10, &JitIL::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, - {11, &JitIL::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, - {12, &JitIL::ps_muls}, //"ps_muls0", OPTYPE_PS, 0}}, - {13, &JitIL::ps_muls}, //"ps_muls1", OPTYPE_PS, 0}}, - {14, &JitIL::ps_maddXX}, //"ps_madds0", OPTYPE_PS, 0}}, - {15, &JitIL::ps_maddXX}, //"ps_madds1", OPTYPE_PS, 0}}, - {18, &JitIL::ps_arith}, //"ps_div", OPTYPE_PS, 0, 16}}, - {20, &JitIL::ps_arith}, //"ps_sub", OPTYPE_PS, 0}}, - {21, &JitIL::ps_arith}, //"ps_add", OPTYPE_PS, 0}}, - {23, &JitIL::ps_sel}, //"ps_sel", OPTYPE_PS, 0}}, - {24, &JitIL::Default}, //"ps_res", OPTYPE_PS, 0}}, - {25, &JitIL::ps_arith}, //"ps_mul", OPTYPE_PS, 0}}, - {26, &JitIL::ps_rsqrte}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, - {28, &JitIL::ps_maddXX}, //"ps_msub", OPTYPE_PS, 0}}, - {29, &JitIL::ps_maddXX}, //"ps_madd", OPTYPE_PS, 0}}, - {30, &JitIL::ps_maddXX}, //"ps_nmsub", OPTYPE_PS, 0}}, - {31, &JitIL::ps_maddXX}, //"ps_nmadd", OPTYPE_PS, 0}}, -}; - - -static GekkoOPTemplate table4_3[] = -{ - {6, &JitIL::Default}, //"psq_lx", OPTYPE_PS, 0}}, - {7, &JitIL::Default}, //"psq_stx", OPTYPE_PS, 0}}, - {38, &JitIL::Default}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &JitIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, -}; - -static GekkoOPTemplate table19[] = -{ - {528, &JitIL::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, - {16, &JitIL::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, - {257, &JitIL::Default}, //"crand", OPTYPE_CR, FL_EVIL}}, - {129, &JitIL::Default}, //"crandc", OPTYPE_CR, FL_EVIL}}, - {289, &JitIL::Default}, //"creqv", OPTYPE_CR, FL_EVIL}}, - {225, &JitIL::Default}, //"crnand", OPTYPE_CR, FL_EVIL}}, - {33, &JitIL::Default}, //"crnor", OPTYPE_CR, FL_EVIL}}, - {449, &JitIL::Default}, //"cror", OPTYPE_CR, FL_EVIL}}, - {417, &JitIL::Default}, //"crorc", OPTYPE_CR, FL_EVIL}}, - {193, &JitIL::Default}, //"crxor", OPTYPE_CR, FL_EVIL}}, - - {150, &JitIL::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, - {0, &JitIL::Default}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - - {50, &JitIL::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, - {18, &JitIL::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} -}; - - -static GekkoOPTemplate table31[] = -{ - {28, &JitIL::andx}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {60, &JitIL::Default}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {444, &JitIL::orx}, //"orx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {124, &JitIL::Default}, //"norx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {316, &JitIL::xorx}, //"xorx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {412, &JitIL::Default}, //"orcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {476, &JitIL::Default}, //"nandx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {284, &JitIL::Default}, //"eqvx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, - {0, &JitIL::cmpXX}, //"cmp", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, - {32, &JitIL::cmpXX}, //"cmpl", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, - {26, &JitIL::cntlzwx}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {922, &JitIL::extshx}, //"extshx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {954, &JitIL::extsbx}, //"extsbx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, - {536, &JitIL::srwx}, //"srwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {792, &JitIL::srawx}, //"srawx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {824, &JitIL::srawix}, //"srawix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - {24, &JitIL::slwx}, //"slwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, - - {54, &JitIL::Default}, //"dcbst", OPTYPE_DCACHE, 0, 4}}, - {86, &JitIL::DoNothing}, //"dcbf", OPTYPE_DCACHE, 0, 4}}, - {246, &JitIL::Default}, //"dcbtst", OPTYPE_DCACHE, 0, 1}}, - {278, &JitIL::Default}, //"dcbt", OPTYPE_DCACHE, 0, 1}}, - {470, &JitIL::Default}, //"dcbi", OPTYPE_DCACHE, 0, 4}}, - {758, &JitIL::Default}, //"dcba", OPTYPE_DCACHE, 0, 4}}, - {1014, &JitIL::dcbz}, //"dcbz", OPTYPE_DCACHE, 0, 4}}, - //load word - {23, &JitIL::lXzx}, //"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {55, &JitIL::lXzx}, //"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load halfword - {279, &JitIL::lXzx}, //"lhzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {311, &JitIL::lXzx}, //"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load halfword signextend - {343, &JitIL::lhax}, //"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {375, &JitIL::Default}, //"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load byte - {87, &JitIL::lXzx}, //"lbzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {119, &JitIL::lXzx}, //"lbzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //load byte reverse - {534, &JitIL::Default}, //"lwbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - {790, &JitIL::Default}, //"lhbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, - - // Conditional load/store (Wii SMP) - {150, &JitIL::Default}, //"stwcxd", OPTYPE_STORE, FL_EVIL | FL_SET_CR0}}, - {20, &JitIL::Default}, //"lwarx", OPTYPE_LOAD, FL_EVIL | FL_OUT_D | FL_IN_A0B | FL_SET_CR0}}, - - //load string (interpret these) - {533, &JitIL::Default}, //"lswx", OPTYPE_LOAD, FL_EVIL | FL_IN_A | FL_OUT_D}}, - {597, &JitIL::Default}, //"lswi", OPTYPE_LOAD, FL_EVIL | FL_IN_AB | FL_OUT_D}}, - - //store word - {151, &JitIL::stXx}, //"stwx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {183, &JitIL::stXx}, //"stwux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store halfword - {407, &JitIL::stXx}, //"sthx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {439, &JitIL::stXx}, //"sthux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store byte - {215, &JitIL::stXx}, //"stbx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {247, &JitIL::stXx}, //"stbux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, - - //store bytereverse - {662, &JitIL::Default}, //"stwbrx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, - {918, &JitIL::Default}, //"sthbrx", OPTYPE_STORE, FL_IN_A | FL_IN_B}}, - - {661, &JitIL::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, - {725, &JitIL::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - - // fp load/store - {535, &JitIL::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, - {567, &JitIL::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, - {599, &JitIL::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, - {631, &JitIL::Default}, //"lfdux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, - - {663, &JitIL::stfsx}, //"stfsx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - {695, &JitIL::Default}, //"stfsux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, - {727, &JitIL::Default}, //"stfdx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - {759, &JitIL::Default}, //"stfdux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, - {983, &JitIL::Default}, //"stfiwx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, - - {19, &JitIL::mfcr}, //"mfcr", OPTYPE_SYSTEM, FL_OUT_D}}, - {83, &JitIL::mfmsr}, //"mfmsr", OPTYPE_SYSTEM, FL_OUT_D}}, - {144, &JitIL::mtcrf}, //"mtcrf", OPTYPE_SYSTEM, 0}}, - {146, &JitIL::mtmsr}, //"mtmsr", OPTYPE_SYSTEM, FL_ENDBLOCK}}, - {210, &JitIL::Default}, //"mtsr", OPTYPE_SYSTEM, 0}}, - {242, &JitIL::Default}, //"mtsrin", OPTYPE_SYSTEM, 0}}, - {339, &JitIL::mfspr}, //"mfspr", OPTYPE_SPR, FL_OUT_D}}, - {467, &JitIL::mtspr}, //"mtspr", OPTYPE_SPR, 0, 2}}, - {371, &JitIL::mftb}, //"mftb", OPTYPE_SYSTEM, FL_OUT_D | FL_TIMER}}, - {512, &JitIL::Default}, //"mcrxr", OPTYPE_SYSTEM, 0}}, - {595, &JitIL::Default}, //"mfsr", OPTYPE_SYSTEM, FL_OUT_D, 2}}, - {659, &JitIL::Default}, //"mfsrin", OPTYPE_SYSTEM, FL_OUT_D, 2}}, - - {4, &JitIL::Default}, //"tw", OPTYPE_SYSTEM, 0, 1}}, - {598, &JitIL::DoNothing}, //"sync", OPTYPE_SYSTEM, 0, 2}}, - {982, &JitIL::icbi}, //"icbi", OPTYPE_SYSTEM, FL_ENDBLOCK, 3}}, - - // Unused instructions on GC - {310, &JitIL::Default}, //"eciwx", OPTYPE_INTEGER, FL_RC_BIT}}, - {438, &JitIL::Default}, //"ecowx", OPTYPE_INTEGER, FL_RC_BIT}}, - {854, &JitIL::Default}, //"eieio", OPTYPE_INTEGER, FL_RC_BIT}}, - {306, &JitIL::Default}, //"tlbie", OPTYPE_SYSTEM, 0}}, - {370, &JitIL::Default}, //"tlbia", OPTYPE_SYSTEM, 0}}, - {566, &JitIL::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, -}; - -static GekkoOPTemplate table31_2[] = -{ - {266, &JitIL::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {10, &JitIL::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, - {138, &JitIL::addex}, //"addex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {234, &JitIL::Default}, //"addmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {202, &JitIL::addzex}, //"addzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {491, &JitIL::Default}, //"divwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, - {459, &JitIL::divwux}, //"divwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, - {75, &JitIL::Default}, //"mulhwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {11, &JitIL::mulhwux}, //"mulhwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {235, &JitIL::mullwx}, //"mullwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, - {104, &JitIL::negx}, //"negx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {40, &JitIL::subfx}, //"subfx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, - {8, &JitIL::subfcx}, //"subfcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, - {136, &JitIL::subfex}, //"subfex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {232, &JitIL::Default}, //"subfmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, - {200, &JitIL::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, -}; - -static GekkoOPTemplate table59[] = -{ - {18, &JitIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &JitIL::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &JitIL::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -// {22, &JitIL::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko - {24, &JitIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &JitIL::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &JitIL::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &JitIL::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &JitIL::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &JitIL::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; - -static GekkoOPTemplate table63[] = -{ - {264, &JitIL::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {32, &JitIL::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, - {0, &JitIL::fcmpx}, //"fcmpu", OPTYPE_FPU, FL_RC_BIT_F}}, - {14, &JitIL::Default}, //"fctiwx", OPTYPE_FPU, FL_RC_BIT_F}}, - {15, &JitIL::Default}, //"fctiwzx", OPTYPE_FPU, FL_RC_BIT_F}}, - {72, &JitIL::fmrx}, //"fmrx", OPTYPE_FPU, FL_RC_BIT_F}}, - {136, &JitIL::fsign}, //"fnabsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {40, &JitIL::fsign}, //"fnegx", OPTYPE_FPU, FL_RC_BIT_F}}, - {12, &JitIL::Default}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}}, - - {64, &JitIL::Default}, //"mcrfs", OPTYPE_SYSTEMFP, 0}}, - {583, &JitIL::Default}, //"mffsx", OPTYPE_SYSTEMFP, 0}}, - {70, &JitIL::Default}, //"mtfsb0x", OPTYPE_SYSTEMFP, 0, 2}}, - {38, &JitIL::Default}, //"mtfsb1x", OPTYPE_SYSTEMFP, 0, 2}}, - {134, &JitIL::Default}, //"mtfsfix", OPTYPE_SYSTEMFP, 0, 2}}, - {711, &JitIL::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, -}; - -static GekkoOPTemplate table63_2[] = -{ - {18, &JitIL::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, - {20, &JitIL::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &JitIL::Default}, //"faddx", OPTYPE_FPU, FL_RC_BIT_F}}, - {22, &JitIL::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}}, - {23, &JitIL::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &JitIL::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}}, - {26, &JitIL::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &JitIL::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &JitIL::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &JitIL::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &JitIL::fmaddXX}, //"fnmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; - -namespace JitILTables -{ -void CompileInstruction(UGeckoInstruction _inst) -{ - JitIL *jitil = (JitIL *)jit; - (jitil->*dynaOpTable[_inst.OPCD])(_inst); - GekkoOPInfo *info = GetOpInfo(_inst); - if (info) { -#ifdef OPLOG - if (!strcmp(info->opname, OP_TO_LOG)){ ///"mcrfs" - rsplocations.push_back(jit.js.compilerPC); - } -#endif - info->compileCount++; - info->lastUse = jit->js.compilerPC; - } else { - PanicAlert("Tried to compile illegal (or unknown) instruction %08x, at %08x", _inst.hex, jit->js.compilerPC); - } -} -void InitTables() -{ - //clear - for (int i = 0; i < 32; i++) - { - dynaOpTable59[i] = &JitIL::unknown_instruction; - } - - for (int i = 0; i < 1024; i++) - { - dynaOpTable4 [i] = &JitIL::unknown_instruction; - dynaOpTable19[i] = &JitIL::unknown_instruction; - dynaOpTable31[i] = &JitIL::unknown_instruction; - dynaOpTable63[i] = &JitIL::unknown_instruction; - } - - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) - { - dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; - } - - for (int i = 0; i < 32; i++) - { - int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill+table4_2[j].opcode; - dynaOpTable4[op] = table4_2[j].Inst; - } - } - - for (int i = 0; i < 16; i++) - { - int fill = i << 6; - for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill+table4_3[j].opcode; - dynaOpTable4[op] = table4_3[j].Inst; - } - } - - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) - { - int op = table4[i].opcode; - dynaOpTable4[op] = table4[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) - { - int op = table31[i].opcode; - dynaOpTable31[op] = table31[i].Inst; - } - - for (int i = 0; i < 1; i++) - { - int fill = i << 9; - for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill + table31_2[j].opcode; - dynaOpTable31[op] = table31_2[j].Inst; - } - } - - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) - { - int op = table19[i].opcode; - dynaOpTable19[op] = table19[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) - { - int op = table59[i].opcode; - dynaOpTable59[op] = table59[i].Inst; - } - - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) - { - int op = table63[i].opcode; - dynaOpTable63[op] = table63[i].Inst; - } - - for (int i = 0; i < 32; i++) - { - int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) - { - int op = fill + table63_2[j].opcode; - dynaOpTable63[op] = table63_2[j].Inst; - } - } -} -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "JitIL_Tables.h" + +// Should be moved in to the Jit class +typedef void (JitIL::*_Instruction) (UGeckoInstruction instCode); + +static _Instruction dynaOpTable[64]; +static _Instruction dynaOpTable4[1024]; +static _Instruction dynaOpTable19[1024]; +static _Instruction dynaOpTable31[1024]; +static _Instruction dynaOpTable59[32]; +static _Instruction dynaOpTable63[1024]; + +void JitIL::DynaRunTable4(UGeckoInstruction _inst) {(this->*dynaOpTable4 [_inst.SUBOP10])(_inst);} +void JitIL::DynaRunTable19(UGeckoInstruction _inst) {(this->*dynaOpTable19[_inst.SUBOP10])(_inst);} +void JitIL::DynaRunTable31(UGeckoInstruction _inst) {(this->*dynaOpTable31[_inst.SUBOP10])(_inst);} +void JitIL::DynaRunTable59(UGeckoInstruction _inst) {(this->*dynaOpTable59[_inst.SUBOP5 ])(_inst);} +void JitIL::DynaRunTable63(UGeckoInstruction _inst) {(this->*dynaOpTable63[_inst.SUBOP10])(_inst);} + + + +struct GekkoOPTemplate +{ + int opcode; + _Instruction Inst; + //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out + int runCount; +}; + +static GekkoOPTemplate primarytable[] = +{ + {4, &JitIL::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, + {19, &JitIL::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, + {31, &JitIL::DynaRunTable31}, //"RunTable31", OPTYPE_SUBTABLE | (31<<24), 0}}, + {59, &JitIL::DynaRunTable59}, //"RunTable59", OPTYPE_SUBTABLE | (59<<24), 0}}, + {63, &JitIL::DynaRunTable63}, //"RunTable63", OPTYPE_SUBTABLE | (63<<24), 0}}, + + {16, &JitIL::bcx}, //"bcx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {18, &JitIL::bx}, //"bx", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + + {1, &JitIL::HLEFunction}, //"HLEFunction", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {2, &JitIL::Default}, //"DynaBlock", OPTYPE_SYSTEM, 0}}, + {3, &JitIL::Default}, //"twi", OPTYPE_SYSTEM, 0}}, + {17, &JitIL::sc}, //"sc", OPTYPE_SYSTEM, FL_ENDBLOCK, 1}}, + + {7, &JitIL::mulli}, //"mulli", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_RC_BIT, 2}}, + {8, &JitIL::subfic}, //"subfic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, + {10, &JitIL::cmpXX}, //"cmpli", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, + {11, &JitIL::cmpXX}, //"cmpi", OPTYPE_INTEGER, FL_IN_A | FL_SET_CRn}}, + {12, &JitIL::reg_imm}, //"addic", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CA}}, + {13, &JitIL::reg_imm}, //"addic_rc", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A | FL_SET_CR0}}, + {14, &JitIL::reg_imm}, //"addi", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, + {15, &JitIL::reg_imm}, //"addis", OPTYPE_INTEGER, FL_OUT_D | FL_IN_A0}}, + + {20, &JitIL::rlwimix}, //"rlwimix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_A | FL_IN_S | FL_RC_BIT}}, + {21, &JitIL::rlwinmx}, //"rlwinmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {23, &JitIL::rlwnmx}, //"rlwnmx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_IN_B | FL_RC_BIT}}, + + {24, &JitIL::reg_imm}, //"ori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {25, &JitIL::reg_imm}, //"oris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {26, &JitIL::reg_imm}, //"xori", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {27, &JitIL::reg_imm}, //"xoris", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S}}, + {28, &JitIL::reg_imm}, //"andi_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, + {29, &JitIL::reg_imm}, //"andis_rc", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_SET_CR0}}, + + {32, &JitIL::lXz}, //"lwz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {33, &JitIL::lXz}, //"lwzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {34, &JitIL::lXz}, //"lbz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {35, &JitIL::Default}, //"lbzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {40, &JitIL::lXz}, //"lhz", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {41, &JitIL::lXz}, //"lhzu", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + {42, &JitIL::lha}, //"lha", OPTYPE_LOAD, FL_OUT_D | FL_IN_A}}, + {43, &JitIL::Default}, //"lhau", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A}}, + + {44, &JitIL::stX}, //"sth", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {45, &JitIL::stX}, //"sthu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + {36, &JitIL::stX}, //"stw", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {37, &JitIL::stX}, //"stwu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + {38, &JitIL::stX}, //"stb", OPTYPE_STORE, FL_IN_A | FL_IN_S}}, + {39, &JitIL::stX}, //"stbu", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_S}}, + + {46, &JitIL::lmw}, //"lmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, + {47, &JitIL::stmw}, //"stmw", OPTYPE_SYSTEM, FL_EVIL, 10}}, + + {48, &JitIL::lfs}, //"lfs", OPTYPE_LOADFP, FL_IN_A}}, + {49, &JitIL::Default}, //"lfsu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, + {50, &JitIL::lfd}, //"lfd", OPTYPE_LOADFP, FL_IN_A}}, + {51, &JitIL::Default}, //"lfdu", OPTYPE_LOADFP, FL_OUT_A | FL_IN_A}}, + + {52, &JitIL::stfs}, //"stfs", OPTYPE_STOREFP, FL_IN_A}}, + {53, &JitIL::stfs}, //"stfsu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, + {54, &JitIL::stfd}, //"stfd", OPTYPE_STOREFP, FL_IN_A}}, + {55, &JitIL::Default}, //"stfdu", OPTYPE_STOREFP, FL_OUT_A | FL_IN_A}}, + + {56, &JitIL::psq_l}, //"psq_l", OPTYPE_PS, FL_IN_A}}, + {57, &JitIL::psq_l}, //"psq_lu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, + {60, &JitIL::psq_st}, //"psq_st", OPTYPE_PS, FL_IN_A}}, + {61, &JitIL::psq_st}, //"psq_stu", OPTYPE_PS, FL_OUT_A | FL_IN_A}}, + + //missing: 0, 5, 6, 9, 22, 30, 62, 58 + {0, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {5, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {6, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {9, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {22, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {30, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {62, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, + {58, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, +}; + +static GekkoOPTemplate table4[] = +{ //SUBOP10 + {0, &JitIL::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, + {32, &JitIL::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, + {40, &JitIL::ps_sign}, //"ps_neg", OPTYPE_PS, FL_RC_BIT}}, + {136, &JitIL::ps_sign}, //"ps_nabs", OPTYPE_PS, FL_RC_BIT}}, + {264, &JitIL::ps_sign}, //"ps_abs", OPTYPE_PS, FL_RC_BIT}}, + {64, &JitIL::Default}, //"ps_cmpu1", OPTYPE_PS, FL_RC_BIT}}, + {72, &JitIL::ps_mr}, //"ps_mr", OPTYPE_PS, FL_RC_BIT}}, + {96, &JitIL::Default}, //"ps_cmpo1", OPTYPE_PS, FL_RC_BIT}}, + {528, &JitIL::ps_mergeXX}, //"ps_merge00", OPTYPE_PS, FL_RC_BIT}}, + {560, &JitIL::ps_mergeXX}, //"ps_merge01", OPTYPE_PS, FL_RC_BIT}}, + {592, &JitIL::ps_mergeXX}, //"ps_merge10", OPTYPE_PS, FL_RC_BIT}}, + {624, &JitIL::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, + + {1014, &JitIL::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, +}; + +static GekkoOPTemplate table4_2[] = +{ + {10, &JitIL::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, + {11, &JitIL::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, + {12, &JitIL::ps_muls}, //"ps_muls0", OPTYPE_PS, 0}}, + {13, &JitIL::ps_muls}, //"ps_muls1", OPTYPE_PS, 0}}, + {14, &JitIL::ps_maddXX}, //"ps_madds0", OPTYPE_PS, 0}}, + {15, &JitIL::ps_maddXX}, //"ps_madds1", OPTYPE_PS, 0}}, + {18, &JitIL::ps_arith}, //"ps_div", OPTYPE_PS, 0, 16}}, + {20, &JitIL::ps_arith}, //"ps_sub", OPTYPE_PS, 0}}, + {21, &JitIL::ps_arith}, //"ps_add", OPTYPE_PS, 0}}, + {23, &JitIL::ps_sel}, //"ps_sel", OPTYPE_PS, 0}}, + {24, &JitIL::Default}, //"ps_res", OPTYPE_PS, 0}}, + {25, &JitIL::ps_arith}, //"ps_mul", OPTYPE_PS, 0}}, + {26, &JitIL::ps_rsqrte}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, + {28, &JitIL::ps_maddXX}, //"ps_msub", OPTYPE_PS, 0}}, + {29, &JitIL::ps_maddXX}, //"ps_madd", OPTYPE_PS, 0}}, + {30, &JitIL::ps_maddXX}, //"ps_nmsub", OPTYPE_PS, 0}}, + {31, &JitIL::ps_maddXX}, //"ps_nmadd", OPTYPE_PS, 0}}, +}; + + +static GekkoOPTemplate table4_3[] = +{ + {6, &JitIL::Default}, //"psq_lx", OPTYPE_PS, 0}}, + {7, &JitIL::Default}, //"psq_stx", OPTYPE_PS, 0}}, + {38, &JitIL::Default}, //"psq_lux", OPTYPE_PS, 0}}, + {39, &JitIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, +}; + +static GekkoOPTemplate table19[] = +{ + {528, &JitIL::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, + {16, &JitIL::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, + {257, &JitIL::Default}, //"crand", OPTYPE_CR, FL_EVIL}}, + {129, &JitIL::Default}, //"crandc", OPTYPE_CR, FL_EVIL}}, + {289, &JitIL::Default}, //"creqv", OPTYPE_CR, FL_EVIL}}, + {225, &JitIL::Default}, //"crnand", OPTYPE_CR, FL_EVIL}}, + {33, &JitIL::Default}, //"crnor", OPTYPE_CR, FL_EVIL}}, + {449, &JitIL::Default}, //"cror", OPTYPE_CR, FL_EVIL}}, + {417, &JitIL::Default}, //"crorc", OPTYPE_CR, FL_EVIL}}, + {193, &JitIL::Default}, //"crxor", OPTYPE_CR, FL_EVIL}}, + + {150, &JitIL::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, + {0, &JitIL::Default}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, + + {50, &JitIL::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, + {18, &JitIL::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} +}; + + +static GekkoOPTemplate table31[] = +{ + {28, &JitIL::andx}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {60, &JitIL::Default}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {444, &JitIL::orx}, //"orx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {124, &JitIL::Default}, //"norx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {316, &JitIL::xorx}, //"xorx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {412, &JitIL::Default}, //"orcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {476, &JitIL::Default}, //"nandx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {284, &JitIL::Default}, //"eqvx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, + {0, &JitIL::cmpXX}, //"cmp", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, + {32, &JitIL::cmpXX}, //"cmpl", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, + {26, &JitIL::cntlzwx}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {922, &JitIL::extshx}, //"extshx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {954, &JitIL::extsbx}, //"extsbx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {536, &JitIL::srwx}, //"srwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {792, &JitIL::srawx}, //"srawx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {824, &JitIL::srawix}, //"srawix", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + {24, &JitIL::slwx}, //"slwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, + + {54, &JitIL::Default}, //"dcbst", OPTYPE_DCACHE, 0, 4}}, + {86, &JitIL::DoNothing}, //"dcbf", OPTYPE_DCACHE, 0, 4}}, + {246, &JitIL::Default}, //"dcbtst", OPTYPE_DCACHE, 0, 1}}, + {278, &JitIL::Default}, //"dcbt", OPTYPE_DCACHE, 0, 1}}, + {470, &JitIL::Default}, //"dcbi", OPTYPE_DCACHE, 0, 4}}, + {758, &JitIL::Default}, //"dcba", OPTYPE_DCACHE, 0, 4}}, + {1014, &JitIL::dcbz}, //"dcbz", OPTYPE_DCACHE, 0, 4}}, + //load word + {23, &JitIL::lXzx}, //"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {55, &JitIL::lXzx}, //"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load halfword + {279, &JitIL::lXzx}, //"lhzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {311, &JitIL::lXzx}, //"lhzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load halfword signextend + {343, &JitIL::lhax}, //"lhax", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {375, &JitIL::Default}, //"lhaux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load byte + {87, &JitIL::lXzx}, //"lbzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {119, &JitIL::lXzx}, //"lbzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //load byte reverse + {534, &JitIL::Default}, //"lwbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + {790, &JitIL::Default}, //"lhbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B}}, + + // Conditional load/store (Wii SMP) + {150, &JitIL::Default}, //"stwcxd", OPTYPE_STORE, FL_EVIL | FL_SET_CR0}}, + {20, &JitIL::Default}, //"lwarx", OPTYPE_LOAD, FL_EVIL | FL_OUT_D | FL_IN_A0B | FL_SET_CR0}}, + + //load string (interpret these) + {533, &JitIL::Default}, //"lswx", OPTYPE_LOAD, FL_EVIL | FL_IN_A | FL_OUT_D}}, + {597, &JitIL::Default}, //"lswi", OPTYPE_LOAD, FL_EVIL | FL_IN_AB | FL_OUT_D}}, + + //store word + {151, &JitIL::stXx}, //"stwx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {183, &JitIL::stXx}, //"stwux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store halfword + {407, &JitIL::stXx}, //"sthx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {439, &JitIL::stXx}, //"sthux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store byte + {215, &JitIL::stXx}, //"stbx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {247, &JitIL::stXx}, //"stbux", OPTYPE_STORE, FL_OUT_A | FL_IN_A | FL_IN_B}}, + + //store bytereverse + {662, &JitIL::Default}, //"stwbrx", OPTYPE_STORE, FL_IN_A0 | FL_IN_B}}, + {918, &JitIL::Default}, //"sthbrx", OPTYPE_STORE, FL_IN_A | FL_IN_B}}, + + {661, &JitIL::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, + {725, &JitIL::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, + + // fp load/store + {535, &JitIL::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, + {567, &JitIL::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, + {599, &JitIL::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, + {631, &JitIL::Default}, //"lfdux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, + + {663, &JitIL::stfsx}, //"stfsx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + {695, &JitIL::Default}, //"stfsux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, + {727, &JitIL::Default}, //"stfdx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + {759, &JitIL::Default}, //"stfdux", OPTYPE_STOREFP, FL_IN_A | FL_IN_B}}, + {983, &JitIL::Default}, //"stfiwx", OPTYPE_STOREFP, FL_IN_A0 | FL_IN_B}}, + + {19, &JitIL::mfcr}, //"mfcr", OPTYPE_SYSTEM, FL_OUT_D}}, + {83, &JitIL::mfmsr}, //"mfmsr", OPTYPE_SYSTEM, FL_OUT_D}}, + {144, &JitIL::mtcrf}, //"mtcrf", OPTYPE_SYSTEM, 0}}, + {146, &JitIL::mtmsr}, //"mtmsr", OPTYPE_SYSTEM, FL_ENDBLOCK}}, + {210, &JitIL::Default}, //"mtsr", OPTYPE_SYSTEM, 0}}, + {242, &JitIL::Default}, //"mtsrin", OPTYPE_SYSTEM, 0}}, + {339, &JitIL::mfspr}, //"mfspr", OPTYPE_SPR, FL_OUT_D}}, + {467, &JitIL::mtspr}, //"mtspr", OPTYPE_SPR, 0, 2}}, + {371, &JitIL::mftb}, //"mftb", OPTYPE_SYSTEM, FL_OUT_D | FL_TIMER}}, + {512, &JitIL::Default}, //"mcrxr", OPTYPE_SYSTEM, 0}}, + {595, &JitIL::Default}, //"mfsr", OPTYPE_SYSTEM, FL_OUT_D, 2}}, + {659, &JitIL::Default}, //"mfsrin", OPTYPE_SYSTEM, FL_OUT_D, 2}}, + + {4, &JitIL::Default}, //"tw", OPTYPE_SYSTEM, 0, 1}}, + {598, &JitIL::DoNothing}, //"sync", OPTYPE_SYSTEM, 0, 2}}, + {982, &JitIL::icbi}, //"icbi", OPTYPE_SYSTEM, FL_ENDBLOCK, 3}}, + + // Unused instructions on GC + {310, &JitIL::Default}, //"eciwx", OPTYPE_INTEGER, FL_RC_BIT}}, + {438, &JitIL::Default}, //"ecowx", OPTYPE_INTEGER, FL_RC_BIT}}, + {854, &JitIL::Default}, //"eieio", OPTYPE_INTEGER, FL_RC_BIT}}, + {306, &JitIL::Default}, //"tlbie", OPTYPE_SYSTEM, 0}}, + {370, &JitIL::Default}, //"tlbia", OPTYPE_SYSTEM, 0}}, + {566, &JitIL::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, +}; + +static GekkoOPTemplate table31_2[] = +{ + {266, &JitIL::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {10, &JitIL::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, + {138, &JitIL::addex}, //"addex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {234, &JitIL::Default}, //"addmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {202, &JitIL::addzex}, //"addzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {491, &JitIL::Default}, //"divwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, + {459, &JitIL::divwux}, //"divwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 39}}, + {75, &JitIL::Default}, //"mulhwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {11, &JitIL::mulhwux}, //"mulhwux", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {235, &JitIL::mullwx}, //"mullwx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 4}}, + {104, &JitIL::negx}, //"negx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {40, &JitIL::subfx}, //"subfx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, + {8, &JitIL::subfcx}, //"subfcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, + {136, &JitIL::subfex}, //"subfex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {232, &JitIL::Default}, //"subfmex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, + {200, &JitIL::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, +}; + +static GekkoOPTemplate table59[] = +{ + {18, &JitIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &JitIL::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &JitIL::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +// {22, &JitIL::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko + {24, &JitIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &JitIL::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &JitIL::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &JitIL::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &JitIL::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &JitIL::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; + +static GekkoOPTemplate table63[] = +{ + {264, &JitIL::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {32, &JitIL::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, + {0, &JitIL::fcmpx}, //"fcmpu", OPTYPE_FPU, FL_RC_BIT_F}}, + {14, &JitIL::Default}, //"fctiwx", OPTYPE_FPU, FL_RC_BIT_F}}, + {15, &JitIL::Default}, //"fctiwzx", OPTYPE_FPU, FL_RC_BIT_F}}, + {72, &JitIL::fmrx}, //"fmrx", OPTYPE_FPU, FL_RC_BIT_F}}, + {136, &JitIL::fsign}, //"fnabsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {40, &JitIL::fsign}, //"fnegx", OPTYPE_FPU, FL_RC_BIT_F}}, + {12, &JitIL::Default}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}}, + + {64, &JitIL::Default}, //"mcrfs", OPTYPE_SYSTEMFP, 0}}, + {583, &JitIL::Default}, //"mffsx", OPTYPE_SYSTEMFP, 0}}, + {70, &JitIL::Default}, //"mtfsb0x", OPTYPE_SYSTEMFP, 0, 2}}, + {38, &JitIL::Default}, //"mtfsb1x", OPTYPE_SYSTEMFP, 0, 2}}, + {134, &JitIL::Default}, //"mtfsfix", OPTYPE_SYSTEMFP, 0, 2}}, + {711, &JitIL::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, +}; + +static GekkoOPTemplate table63_2[] = +{ + {18, &JitIL::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, + {20, &JitIL::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &JitIL::Default}, //"faddx", OPTYPE_FPU, FL_RC_BIT_F}}, + {22, &JitIL::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}}, + {23, &JitIL::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &JitIL::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}}, + {26, &JitIL::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &JitIL::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &JitIL::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &JitIL::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &JitIL::fmaddXX}, //"fnmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; + +namespace JitILTables +{ +void CompileInstruction(UGeckoInstruction _inst) +{ + JitIL *jitil = (JitIL *)jit; + (jitil->*dynaOpTable[_inst.OPCD])(_inst); + GekkoOPInfo *info = GetOpInfo(_inst); + if (info) { +#ifdef OPLOG + if (!strcmp(info->opname, OP_TO_LOG)){ ///"mcrfs" + rsplocations.push_back(jit.js.compilerPC); + } +#endif + info->compileCount++; + info->lastUse = jit->js.compilerPC; + } else { + PanicAlert("Tried to compile illegal (or unknown) instruction %08x, at %08x", _inst.hex, jit->js.compilerPC); + } +} +void InitTables() +{ + //clear + for (int i = 0; i < 32; i++) + { + dynaOpTable59[i] = &JitIL::unknown_instruction; + } + + for (int i = 0; i < 1024; i++) + { + dynaOpTable4 [i] = &JitIL::unknown_instruction; + dynaOpTable19[i] = &JitIL::unknown_instruction; + dynaOpTable31[i] = &JitIL::unknown_instruction; + dynaOpTable63[i] = &JitIL::unknown_instruction; + } + + for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) + { + dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; + } + + for (int i = 0; i < 32; i++) + { + int fill = i << 5; + for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill+table4_2[j].opcode; + dynaOpTable4[op] = table4_2[j].Inst; + } + } + + for (int i = 0; i < 16; i++) + { + int fill = i << 6; + for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill+table4_3[j].opcode; + dynaOpTable4[op] = table4_3[j].Inst; + } + } + + for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) + { + int op = table4[i].opcode; + dynaOpTable4[op] = table4[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) + { + int op = table31[i].opcode; + dynaOpTable31[op] = table31[i].Inst; + } + + for (int i = 0; i < 1; i++) + { + int fill = i << 9; + for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill + table31_2[j].opcode; + dynaOpTable31[op] = table31_2[j].Inst; + } + } + + for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) + { + int op = table19[i].opcode; + dynaOpTable19[op] = table19[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) + { + int op = table59[i].opcode; + dynaOpTable59[op] = table59[i].Inst; + } + + for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) + { + int op = table63[i].opcode; + dynaOpTable63[op] = table63[i].Inst; + } + + for (int i = 0; i < 32; i++) + { + int fill = i << 5; + for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) + { + int op = fill + table63_2[j].opcode; + dynaOpTable63[op] = table63_2[j].Inst; + } + } +} +} diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.h index 2921d41337..6d453dd68b 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.h @@ -1,31 +1,31 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef JITIL_TABLES_H -#define JITIL_TABLES_H - -#include "../Gekko.h" -#include "../PPCTables.h" -#include "../Jit64IL/JitIL.h" - -namespace JitILTables -{ -void CompileInstruction(UGeckoInstruction _inst); -void InitTables(); -} - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef JITIL_TABLES_H +#define JITIL_TABLES_H + +#include "../Gekko.h" +#include "../PPCTables.h" +#include "../Jit64IL/JitIL.h" + +namespace JitILTables +{ +void CompileInstruction(UGeckoInstruction _inst); +void InitTables(); +} + +#endif diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp index 4ffbb88d9b..5bd9baabf8 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp @@ -1,529 +1,529 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "ABI.h" -#include "Thunk.h" -#include "CPUDetect.h" -#include "x64Emitter.h" - -#include "../../HW/Memmap.h" - -#include "../PowerPC.h" -#include "../../CoreTiming.h" -#include "MemoryUtil.h" - -#include "ABI.h" -#include "../JitCommon/JitCache.h" - -#include "../../HW/GPFifo.h" -#include "../../Core.h" -#include "JitAsmCommon.h" - -using namespace Gen; - -static int temp32; - - -#if defined(__APPLE__) && _M_X64 -void CommonAsmRoutines::GenFifoWrite(int size) -{ - // Assume value in ABI_PARAM1 - PUSH(RSI); - if (size != 32) - PUSH(EDX); - BSWAP(size, ABI_PARAM1); - MOV(32, R(EAX), Imm32((u64)GPFifo::m_gatherPipe)); - MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); - if (size != 32) { - MOV(32, R(EDX), R(ABI_PARAM1)); - MOV(size, MComplex(RAX, RSI, 1, 0), R(EDX)); - } else { - MOV(size, MComplex(RAX, RSI, 1, 0), R(ABI_PARAM1)); - } - ADD(64, R(RSI), Imm8(size >> 3)); - MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); - if (size != 32) - POP(EDX); - POP(RSI); - RET(); -} -void CommonAsmRoutines::GenFifoFloatWrite() -{ - // Assume value in XMM0 - PUSH(RSI); - PUSH(EDX); - MOVSS(M(&temp32), XMM0); - MOV(32, R(EDX), M(&temp32)); - BSWAP(32, EDX); - MOV(64, R(RAX), Imm64((u64)GPFifo::m_gatherPipe)); - MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); - MOV(32, MComplex(RAX, RSI, 1, 0), R(EDX)); - ADD(64, R(RSI), Imm8(4)); - MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); - POP(EDX); - POP(RSI); - RET(); -} - -void CommonAsmRoutines::GenFifoXmm64Write() -{ - // Assume value in XMM0. Assume pre-byteswapped (unlike the others here!) - PUSH(RSI); - MOV(64, R(RAX), Imm32((u64)GPFifo::m_gatherPipe)); - MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); - MOVQ_xmm(MComplex(RAX, RSI, 1, 0), XMM0); - ADD(64, R(RSI), Imm8(8)); - MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); - POP(RSI); - RET(); -} -#else -void CommonAsmRoutines::GenFifoWrite(int size) -{ - // Assume value in ABI_PARAM1 - PUSH(ESI); - if (size != 32) - PUSH(EDX); - BSWAP(size, ABI_PARAM1); - MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); - MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); - if (size != 32) { - MOV(32, R(EDX), R(ABI_PARAM1)); - MOV(size, MComplex(RAX, RSI, 1, 0), R(EDX)); - } else { - MOV(size, MComplex(RAX, RSI, 1, 0), R(ABI_PARAM1)); - } - ADD(32, R(ESI), Imm8(size >> 3)); - MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); - if (size != 32) - POP(EDX); - POP(ESI); - RET(); -} -void CommonAsmRoutines::GenFifoFloatWrite() -{ - // Assume value in XMM0 - PUSH(ESI); - PUSH(EDX); - MOVSS(M(&temp32), XMM0); - MOV(32, R(EDX), M(&temp32)); - BSWAP(32, EDX); - MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); - MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); - MOV(32, MComplex(RAX, RSI, 1, 0), R(EDX)); - ADD(32, R(ESI), Imm8(4)); - MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); - POP(EDX); - POP(ESI); - RET(); -} -void CommonAsmRoutines::GenFifoXmm64Write() -{ - // Assume value in XMM0. Assume pre-byteswapped (unlike the others here!) - PUSH(ESI); - MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); - MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); - MOVQ_xmm(MComplex(RAX, RSI, 1, 0), XMM0); - ADD(32, R(ESI), Imm8(8)); - MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); - POP(ESI); - RET(); -} -#endif - - -// Safe + Fast Quantizers, originally from JITIL by magumagu - -static const u8 GC_ALIGNED16(pbswapShuffle2x4[16]) = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11, 12, 13, 14, 15}; - -static const float GC_ALIGNED16(m_quantizeTableS[]) = -{ - (1 << 0), (1 << 1), (1 << 2), (1 << 3), - (1 << 4), (1 << 5), (1 << 6), (1 << 7), - (1 << 8), (1 << 9), (1 << 10), (1 << 11), - (1 << 12), (1 << 13), (1 << 14), (1 << 15), - (1 << 16), (1 << 17), (1 << 18), (1 << 19), - (1 << 20), (1 << 21), (1 << 22), (1 << 23), - (1 << 24), (1 << 25), (1 << 26), (1 << 27), - (1 << 28), (1 << 29), (1 << 30), (1 << 31), - 1.0 / (1ULL << 32), 1.0 / (1 << 31), 1.0 / (1 << 30), 1.0 / (1 << 29), - 1.0 / (1 << 28), 1.0 / (1 << 27), 1.0 / (1 << 26), 1.0 / (1 << 25), - 1.0 / (1 << 24), 1.0 / (1 << 23), 1.0 / (1 << 22), 1.0 / (1 << 21), - 1.0 / (1 << 20), 1.0 / (1 << 19), 1.0 / (1 << 18), 1.0 / (1 << 17), - 1.0 / (1 << 16), 1.0 / (1 << 15), 1.0 / (1 << 14), 1.0 / (1 << 13), - 1.0 / (1 << 12), 1.0 / (1 << 11), 1.0 / (1 << 10), 1.0 / (1 << 9), - 1.0 / (1 << 8), 1.0 / (1 << 7), 1.0 / (1 << 6), 1.0 / (1 << 5), - 1.0 / (1 << 4), 1.0 / (1 << 3), 1.0 / (1 << 2), 1.0 / (1 << 1), -}; - -static const float GC_ALIGNED16(m_dequantizeTableS[]) = -{ - 1.0 / (1 << 0), 1.0 / (1 << 1), 1.0 / (1 << 2), 1.0 / (1 << 3), - 1.0 / (1 << 4), 1.0 / (1 << 5), 1.0 / (1 << 6), 1.0 / (1 << 7), - 1.0 / (1 << 8), 1.0 / (1 << 9), 1.0 / (1 << 10), 1.0 / (1 << 11), - 1.0 / (1 << 12), 1.0 / (1 << 13), 1.0 / (1 << 14), 1.0 / (1 << 15), - 1.0 / (1 << 16), 1.0 / (1 << 17), 1.0 / (1 << 18), 1.0 / (1 << 19), - 1.0 / (1 << 20), 1.0 / (1 << 21), 1.0 / (1 << 22), 1.0 / (1 << 23), - 1.0 / (1 << 24), 1.0 / (1 << 25), 1.0 / (1 << 26), 1.0 / (1 << 27), - 1.0 / (1 << 28), 1.0 / (1 << 29), 1.0 / (1 << 30), 1.0 / (1 << 31), - (1ULL << 32), (1 << 31), (1 << 30), (1 << 29), - (1 << 28), (1 << 27), (1 << 26), (1 << 25), - (1 << 24), (1 << 23), (1 << 22), (1 << 21), - (1 << 20), (1 << 19), (1 << 18), (1 << 17), - (1 << 16), (1 << 15), (1 << 14), (1 << 13), - (1 << 12), (1 << 11), (1 << 10), (1 << 9), - (1 << 8), (1 << 7), (1 << 6), (1 << 5), - (1 << 4), (1 << 3), (1 << 2), (1 << 1), -}; - -static float GC_ALIGNED16(psTemp[4]); - -static const float GC_ALIGNED16(m_65535) = 65535.0f; -static const float GC_ALIGNED16(m_32767) = 32767.0f; -static const float GC_ALIGNED16(m_m32768) = -32768.0f; -static const float GC_ALIGNED16(m_255) = 255.0f; -static const float GC_ALIGNED16(m_127) = 127.0f; -static const float GC_ALIGNED16(m_m128) = -128.0f; - -#define QUANTIZE_OVERFLOW_SAFE - -// according to Intel Docs CVTPS2DQ writes 0x80000000 if the source floating point value is out of int32 range -// while it's OK for large negatives, it isn't for positives -// I don't know whether the overflow actually happens in any games -// but it potentially can cause problems, so we need some clamping - -#ifdef _M_X64 -// TODO(ector): Improve 64-bit version -static void WriteDual32(u64 value, u32 address) -{ - Memory::Write_U32((u32)(value >> 32), address); - Memory::Write_U32((u32)value, address + 4); -} -#endif - -// See comment in header for in/outs. -void CommonAsmRoutines::GenQuantizedStores() { - const u8* storePairedIllegal = AlignCode4(); - UD2(); - const u8* storePairedFloat = AlignCode4(); - -#ifdef _M_X64 - SHUFPS(XMM0, R(XMM0), 1); - MOVQ_xmm(M(&psTemp[0]), XMM0); - MOV(64, R(RAX), M(&psTemp[0])); - TEST(32, R(ECX), Imm32(0x0C000000)); - FixupBranch too_complex = J_CC(CC_NZ); - BSWAP(64, RAX); - MOV(64, MComplex(RBX, RCX, SCALE_1, 0), R(RAX)); - FixupBranch skip_complex = J(); - SetJumpTarget(too_complex); - ABI_CallFunctionRR(thunks.ProtectFunction((void *)&WriteDual32, 2), RAX, RCX); - SetJumpTarget(skip_complex); - RET(); -#else - MOVQ_xmm(M(&psTemp[0]), XMM0); - TEST(32, R(ECX), Imm32(0x0C000000)); - FixupBranch argh = J_CC(CC_NZ); - MOV(32, R(EAX), M(&psTemp)); - BSWAP(32, EAX); - AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); - MOV(32, MDisp(ECX, (u32)Memory::base), R(EAX)); - MOV(32, R(EAX), M(((char*)&psTemp) + 4)); - BSWAP(32, EAX); - MOV(32, MDisp(ECX, 4+(u32)Memory::base), R(EAX)); - FixupBranch arg2 = J(); - SetJumpTarget(argh); - MOV(32, R(EAX), M(((char*)&psTemp))); - ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), EAX, ECX); - MOV(32, R(EAX), M(((char*)&psTemp)+4)); - ADD(32, R(ECX), Imm32(4)); - ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), EAX, ECX); - SetJumpTarget(arg2); - RET(); -#endif - - const u8* storePairedU8 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); -#ifdef QUANTIZE_OVERFLOW_SAFE - MOVSS(XMM1, M((void *)&m_65535)); - PUNPCKLDQ(XMM1, R(XMM1)); - MINPS(XMM0, R(XMM1)); -#endif - CVTTPS2DQ(XMM0, R(XMM0)); - PACKSSDW(XMM0, R(XMM0)); - PACKUSWB(XMM0, R(XMM0)); - MOVD_xmm(R(EAX), XMM0); - SafeWriteRegToReg(AX, ECX, 16, 0, false); - - RET(); - - const u8* storePairedS8 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); -#ifdef QUANTIZE_OVERFLOW_SAFE - MOVSS(XMM1, M((void *)&m_65535)); - PUNPCKLDQ(XMM1, R(XMM1)); - MINPS(XMM0, R(XMM1)); -#endif - CVTTPS2DQ(XMM0, R(XMM0)); - PACKSSDW(XMM0, R(XMM0)); - PACKSSWB(XMM0, R(XMM0)); - MOVD_xmm(R(EAX), XMM0); - - SafeWriteRegToReg(AX, ECX, 16, 0, false); - - RET(); - - const u8* storePairedU16 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); - - // PACKUSDW is available only in SSE4 - PXOR(XMM1, R(XMM1)); - MAXPS(XMM0, R(XMM1)); - MOVSS(XMM1, M((void *)&m_65535)); - PUNPCKLDQ(XMM1, R(XMM1)); - MINPS(XMM0, R(XMM1)); - - CVTTPS2DQ(XMM0, R(XMM0)); - MOVQ_xmm(M(psTemp), XMM0); - // place ps[0] into the higher word, ps[1] into the lower - // so no need in ROL after BSWAP - MOVZX(32, 16, EAX, M((char*)psTemp + 0)); - SHL(32, R(EAX), Imm8(16)); - MOV(16, R(AX), M((char*)psTemp + 4)); - - BSWAP(32, EAX); - SafeWriteRegToReg(EAX, ECX, 32, 0, false); - - RET(); - - const u8* storePairedS16 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - // SHUFPS or UNPCKLPS might be a better choice here. The last one might just be an alias though. - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); -#ifdef QUANTIZE_OVERFLOW_SAFE - MOVSS(XMM1, M((void *)&m_65535)); - PUNPCKLDQ(XMM1, R(XMM1)); - MINPS(XMM0, R(XMM1)); -#endif - CVTTPS2DQ(XMM0, R(XMM0)); - PACKSSDW(XMM0, R(XMM0)); - MOVD_xmm(R(EAX), XMM0); - BSWAP(32, EAX); - ROL(32, R(EAX), Imm8(16)); - SafeWriteRegToReg(EAX, ECX, 32, 0, false); - - RET(); - - pairedStoreQuantized[0] = storePairedFloat; - pairedStoreQuantized[1] = storePairedIllegal; - pairedStoreQuantized[2] = storePairedIllegal; - pairedStoreQuantized[3] = storePairedIllegal; - pairedStoreQuantized[4] = storePairedU8; - pairedStoreQuantized[5] = storePairedU16; - pairedStoreQuantized[6] = storePairedS8; - pairedStoreQuantized[7] = storePairedS16; -} - -// See comment in header for in/outs. -void CommonAsmRoutines::GenQuantizedSingleStores() { - const u8* storeSingleIllegal = AlignCode4(); - UD2(); - - // Easy! - const u8* storeSingleFloat = AlignCode4(); - SafeWriteFloatToReg(XMM0, ECX); - RET(); - /* - if (cpu_info.bSSSE3) { - PSHUFB(XMM0, M((void *)pbswapShuffle2x4)); - // TODO: SafeWriteFloat - MOVSS(M(&psTemp[0]), XMM0); - MOV(32, R(EAX), M(&psTemp[0])); - SafeWriteRegToReg(EAX, ECX, 32, 0, false); - } else { - MOVSS(M(&psTemp[0]), XMM0); - MOV(32, R(EAX), M(&psTemp[0])); - SafeWriteRegToReg(EAX, ECX, 32, 0, true); - }*/ - - const u8* storeSingleU8 = AlignCode4(); // Used by MKWii - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - MULSS(XMM0, R(XMM1)); - PXOR(XMM1, R(XMM1)); - MAXSS(XMM0, R(XMM1)); - MINSS(XMM0, M((void *)&m_255)); - CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(AL, ECX, 8, 0, true); - RET(); - - const u8* storeSingleS8 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - MULSS(XMM0, R(XMM1)); - MAXSS(XMM0, M((void *)&m_m128)); - MINSS(XMM0, M((void *)&m_127)); - CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(AL, ECX, 8, 0, true); - RET(); - - const u8* storeSingleU16 = AlignCode4(); // Used by MKWii - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - MULSS(XMM0, R(XMM1)); - PXOR(XMM1, R(XMM1)); - MAXSS(XMM0, R(XMM1)); - MINSS(XMM0, M((void *)&m_65535)); - CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(EAX, ECX, 16, 0, true); - RET(); - - const u8* storeSingleS16 = AlignCode4(); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); - MULSS(XMM0, R(XMM1)); - MAXSS(XMM0, M((void *)&m_m32768)); - MINSS(XMM0, M((void *)&m_32767)); - CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(EAX, ECX, 16, 0, true); - RET(); - - singleStoreQuantized[0] = storeSingleFloat; - singleStoreQuantized[1] = storeSingleIllegal; - singleStoreQuantized[2] = storeSingleIllegal; - singleStoreQuantized[3] = storeSingleIllegal; - singleStoreQuantized[4] = storeSingleU8; - singleStoreQuantized[5] = storeSingleU16; - singleStoreQuantized[6] = storeSingleS8; - singleStoreQuantized[7] = storeSingleS16; -} - -void CommonAsmRoutines::GenQuantizedLoads() { - const u8* loadPairedIllegal = AlignCode4(); - UD2(); - const u8* loadPairedFloat = AlignCode4(); - if (cpu_info.bSSSE3) { -#ifdef _M_X64 - MOVQ_xmm(XMM0, MComplex(RBX, RCX, 1, 0)); -#else - AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); - MOVQ_xmm(XMM0, MDisp(ECX, (u32)Memory::base)); -#endif - PSHUFB(XMM0, M((void *)pbswapShuffle2x4)); - } else { -#ifdef _M_X64 - MOV(64, R(RCX), MComplex(RBX, RCX, 1, 0)); - BSWAP(64, RCX); - ROL(64, R(RCX), Imm8(32)); - MOVQ_xmm(XMM0, R(RCX)); -#else -#if 0 - AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); - MOVQ_xmm(XMM0, MDisp(ECX, (u32)Memory::base)); - PXOR(XMM1, R(XMM1)); - PSHUFLW(XMM0, R(XMM0), 0xB1); - MOVAPD(XMM1, R(XMM0)); - PSRLW(XMM0, 8); - PSLLW(XMM1, 8); - POR(XMM0, R(XMM1)); -#else - AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); - MOV(32, R(EAX), MDisp(ECX, (u32)Memory::base)); - BSWAP(32, EAX); - MOV(32, M(&psTemp[0]), R(RAX)); - MOV(32, R(EAX), MDisp(ECX, (u32)Memory::base + 4)); - BSWAP(32, EAX); - MOV(32, M(((float *)&psTemp[0]) + 1), R(RAX)); - MOVQ_xmm(XMM0, M(&psTemp[0])); -#endif -#endif - } - RET(); - - const u8* loadPairedU8 = AlignCode4(); - UnsafeLoadRegToRegNoSwap(ECX, ECX, 16, 0); - MOVD_xmm(XMM0, R(ECX)); - PXOR(XMM1, R(XMM1)); - PUNPCKLBW(XMM0, R(XMM1)); - PUNPCKLWD(XMM0, R(XMM1)); - CVTDQ2PS(XMM0, R(XMM0)); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); - RET(); - - const u8* loadPairedS8 = AlignCode4(); - UnsafeLoadRegToRegNoSwap(ECX, ECX, 16, 0); - MOVD_xmm(XMM0, R(ECX)); - PUNPCKLBW(XMM0, R(XMM0)); - PUNPCKLWD(XMM0, R(XMM0)); - PSRAD(XMM0, 24); - CVTDQ2PS(XMM0, R(XMM0)); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); - RET(); - - const u8* loadPairedU16 = AlignCode4(); - UnsafeLoadRegToReg(ECX, ECX, 32, 0, false); - ROL(32, R(ECX), Imm8(16)); - MOVD_xmm(XMM0, R(ECX)); - PXOR(XMM1, R(XMM1)); - PUNPCKLWD(XMM0, R(XMM1)); - CVTDQ2PS(XMM0, R(XMM0)); - SHR(32, R(EAX), Imm8(6)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); - RET(); - - const u8* loadPairedS16 = AlignCode4(); - UnsafeLoadRegToReg(ECX, ECX, 32, 0, false); - ROL(32, R(ECX), Imm8(16)); - MOVD_xmm(XMM0, R(ECX)); - PUNPCKLWD(XMM0, R(XMM0)); - PSRAD(XMM0, 16); - CVTDQ2PS(XMM0, R(XMM0)); - SHR(32, R(EAX), Imm8(6)); - AND(32, R(EAX), Imm32(0xFC)); - MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); - PUNPCKLDQ(XMM1, R(XMM1)); - MULPS(XMM0, R(XMM1)); - RET(); - - pairedLoadQuantized[0] = loadPairedFloat; - pairedLoadQuantized[1] = loadPairedIllegal; - pairedLoadQuantized[2] = loadPairedIllegal; - pairedLoadQuantized[3] = loadPairedIllegal; - pairedLoadQuantized[4] = loadPairedU8; - pairedLoadQuantized[5] = loadPairedU16; - pairedLoadQuantized[6] = loadPairedS8; - pairedLoadQuantized[7] = loadPairedS16; -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "ABI.h" +#include "Thunk.h" +#include "CPUDetect.h" +#include "x64Emitter.h" + +#include "../../HW/Memmap.h" + +#include "../PowerPC.h" +#include "../../CoreTiming.h" +#include "MemoryUtil.h" + +#include "ABI.h" +#include "../JitCommon/JitCache.h" + +#include "../../HW/GPFifo.h" +#include "../../Core.h" +#include "JitAsmCommon.h" + +using namespace Gen; + +static int temp32; + + +#if defined(__APPLE__) && _M_X64 +void CommonAsmRoutines::GenFifoWrite(int size) +{ + // Assume value in ABI_PARAM1 + PUSH(RSI); + if (size != 32) + PUSH(EDX); + BSWAP(size, ABI_PARAM1); + MOV(32, R(EAX), Imm32((u64)GPFifo::m_gatherPipe)); + MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); + if (size != 32) { + MOV(32, R(EDX), R(ABI_PARAM1)); + MOV(size, MComplex(RAX, RSI, 1, 0), R(EDX)); + } else { + MOV(size, MComplex(RAX, RSI, 1, 0), R(ABI_PARAM1)); + } + ADD(64, R(RSI), Imm8(size >> 3)); + MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); + if (size != 32) + POP(EDX); + POP(RSI); + RET(); +} +void CommonAsmRoutines::GenFifoFloatWrite() +{ + // Assume value in XMM0 + PUSH(RSI); + PUSH(EDX); + MOVSS(M(&temp32), XMM0); + MOV(32, R(EDX), M(&temp32)); + BSWAP(32, EDX); + MOV(64, R(RAX), Imm64((u64)GPFifo::m_gatherPipe)); + MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); + MOV(32, MComplex(RAX, RSI, 1, 0), R(EDX)); + ADD(64, R(RSI), Imm8(4)); + MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); + POP(EDX); + POP(RSI); + RET(); +} + +void CommonAsmRoutines::GenFifoXmm64Write() +{ + // Assume value in XMM0. Assume pre-byteswapped (unlike the others here!) + PUSH(RSI); + MOV(64, R(RAX), Imm32((u64)GPFifo::m_gatherPipe)); + MOV(64, R(RSI), M(&GPFifo::m_gatherPipeCount)); + MOVQ_xmm(MComplex(RAX, RSI, 1, 0), XMM0); + ADD(64, R(RSI), Imm8(8)); + MOV(64, M(&GPFifo::m_gatherPipeCount), R(RSI)); + POP(RSI); + RET(); +} +#else +void CommonAsmRoutines::GenFifoWrite(int size) +{ + // Assume value in ABI_PARAM1 + PUSH(ESI); + if (size != 32) + PUSH(EDX); + BSWAP(size, ABI_PARAM1); + MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); + MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); + if (size != 32) { + MOV(32, R(EDX), R(ABI_PARAM1)); + MOV(size, MComplex(RAX, RSI, 1, 0), R(EDX)); + } else { + MOV(size, MComplex(RAX, RSI, 1, 0), R(ABI_PARAM1)); + } + ADD(32, R(ESI), Imm8(size >> 3)); + MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); + if (size != 32) + POP(EDX); + POP(ESI); + RET(); +} +void CommonAsmRoutines::GenFifoFloatWrite() +{ + // Assume value in XMM0 + PUSH(ESI); + PUSH(EDX); + MOVSS(M(&temp32), XMM0); + MOV(32, R(EDX), M(&temp32)); + BSWAP(32, EDX); + MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); + MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); + MOV(32, MComplex(RAX, RSI, 1, 0), R(EDX)); + ADD(32, R(ESI), Imm8(4)); + MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); + POP(EDX); + POP(ESI); + RET(); +} +void CommonAsmRoutines::GenFifoXmm64Write() +{ + // Assume value in XMM0. Assume pre-byteswapped (unlike the others here!) + PUSH(ESI); + MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe)); + MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount)); + MOVQ_xmm(MComplex(RAX, RSI, 1, 0), XMM0); + ADD(32, R(ESI), Imm8(8)); + MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI)); + POP(ESI); + RET(); +} +#endif + + +// Safe + Fast Quantizers, originally from JITIL by magumagu + +static const u8 GC_ALIGNED16(pbswapShuffle2x4[16]) = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11, 12, 13, 14, 15}; + +static const float GC_ALIGNED16(m_quantizeTableS[]) = +{ + (1 << 0), (1 << 1), (1 << 2), (1 << 3), + (1 << 4), (1 << 5), (1 << 6), (1 << 7), + (1 << 8), (1 << 9), (1 << 10), (1 << 11), + (1 << 12), (1 << 13), (1 << 14), (1 << 15), + (1 << 16), (1 << 17), (1 << 18), (1 << 19), + (1 << 20), (1 << 21), (1 << 22), (1 << 23), + (1 << 24), (1 << 25), (1 << 26), (1 << 27), + (1 << 28), (1 << 29), (1 << 30), (1 << 31), + 1.0 / (1ULL << 32), 1.0 / (1 << 31), 1.0 / (1 << 30), 1.0 / (1 << 29), + 1.0 / (1 << 28), 1.0 / (1 << 27), 1.0 / (1 << 26), 1.0 / (1 << 25), + 1.0 / (1 << 24), 1.0 / (1 << 23), 1.0 / (1 << 22), 1.0 / (1 << 21), + 1.0 / (1 << 20), 1.0 / (1 << 19), 1.0 / (1 << 18), 1.0 / (1 << 17), + 1.0 / (1 << 16), 1.0 / (1 << 15), 1.0 / (1 << 14), 1.0 / (1 << 13), + 1.0 / (1 << 12), 1.0 / (1 << 11), 1.0 / (1 << 10), 1.0 / (1 << 9), + 1.0 / (1 << 8), 1.0 / (1 << 7), 1.0 / (1 << 6), 1.0 / (1 << 5), + 1.0 / (1 << 4), 1.0 / (1 << 3), 1.0 / (1 << 2), 1.0 / (1 << 1), +}; + +static const float GC_ALIGNED16(m_dequantizeTableS[]) = +{ + 1.0 / (1 << 0), 1.0 / (1 << 1), 1.0 / (1 << 2), 1.0 / (1 << 3), + 1.0 / (1 << 4), 1.0 / (1 << 5), 1.0 / (1 << 6), 1.0 / (1 << 7), + 1.0 / (1 << 8), 1.0 / (1 << 9), 1.0 / (1 << 10), 1.0 / (1 << 11), + 1.0 / (1 << 12), 1.0 / (1 << 13), 1.0 / (1 << 14), 1.0 / (1 << 15), + 1.0 / (1 << 16), 1.0 / (1 << 17), 1.0 / (1 << 18), 1.0 / (1 << 19), + 1.0 / (1 << 20), 1.0 / (1 << 21), 1.0 / (1 << 22), 1.0 / (1 << 23), + 1.0 / (1 << 24), 1.0 / (1 << 25), 1.0 / (1 << 26), 1.0 / (1 << 27), + 1.0 / (1 << 28), 1.0 / (1 << 29), 1.0 / (1 << 30), 1.0 / (1 << 31), + (1ULL << 32), (1 << 31), (1 << 30), (1 << 29), + (1 << 28), (1 << 27), (1 << 26), (1 << 25), + (1 << 24), (1 << 23), (1 << 22), (1 << 21), + (1 << 20), (1 << 19), (1 << 18), (1 << 17), + (1 << 16), (1 << 15), (1 << 14), (1 << 13), + (1 << 12), (1 << 11), (1 << 10), (1 << 9), + (1 << 8), (1 << 7), (1 << 6), (1 << 5), + (1 << 4), (1 << 3), (1 << 2), (1 << 1), +}; + +static float GC_ALIGNED16(psTemp[4]); + +static const float GC_ALIGNED16(m_65535) = 65535.0f; +static const float GC_ALIGNED16(m_32767) = 32767.0f; +static const float GC_ALIGNED16(m_m32768) = -32768.0f; +static const float GC_ALIGNED16(m_255) = 255.0f; +static const float GC_ALIGNED16(m_127) = 127.0f; +static const float GC_ALIGNED16(m_m128) = -128.0f; + +#define QUANTIZE_OVERFLOW_SAFE + +// according to Intel Docs CVTPS2DQ writes 0x80000000 if the source floating point value is out of int32 range +// while it's OK for large negatives, it isn't for positives +// I don't know whether the overflow actually happens in any games +// but it potentially can cause problems, so we need some clamping + +#ifdef _M_X64 +// TODO(ector): Improve 64-bit version +static void WriteDual32(u64 value, u32 address) +{ + Memory::Write_U32((u32)(value >> 32), address); + Memory::Write_U32((u32)value, address + 4); +} +#endif + +// See comment in header for in/outs. +void CommonAsmRoutines::GenQuantizedStores() { + const u8* storePairedIllegal = AlignCode4(); + UD2(); + const u8* storePairedFloat = AlignCode4(); + +#ifdef _M_X64 + SHUFPS(XMM0, R(XMM0), 1); + MOVQ_xmm(M(&psTemp[0]), XMM0); + MOV(64, R(RAX), M(&psTemp[0])); + TEST(32, R(ECX), Imm32(0x0C000000)); + FixupBranch too_complex = J_CC(CC_NZ); + BSWAP(64, RAX); + MOV(64, MComplex(RBX, RCX, SCALE_1, 0), R(RAX)); + FixupBranch skip_complex = J(); + SetJumpTarget(too_complex); + ABI_CallFunctionRR(thunks.ProtectFunction((void *)&WriteDual32, 2), RAX, RCX); + SetJumpTarget(skip_complex); + RET(); +#else + MOVQ_xmm(M(&psTemp[0]), XMM0); + TEST(32, R(ECX), Imm32(0x0C000000)); + FixupBranch argh = J_CC(CC_NZ); + MOV(32, R(EAX), M(&psTemp)); + BSWAP(32, EAX); + AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); + MOV(32, MDisp(ECX, (u32)Memory::base), R(EAX)); + MOV(32, R(EAX), M(((char*)&psTemp) + 4)); + BSWAP(32, EAX); + MOV(32, MDisp(ECX, 4+(u32)Memory::base), R(EAX)); + FixupBranch arg2 = J(); + SetJumpTarget(argh); + MOV(32, R(EAX), M(((char*)&psTemp))); + ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), EAX, ECX); + MOV(32, R(EAX), M(((char*)&psTemp)+4)); + ADD(32, R(ECX), Imm32(4)); + ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), EAX, ECX); + SetJumpTarget(arg2); + RET(); +#endif + + const u8* storePairedU8 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); +#ifdef QUANTIZE_OVERFLOW_SAFE + MOVSS(XMM1, M((void *)&m_65535)); + PUNPCKLDQ(XMM1, R(XMM1)); + MINPS(XMM0, R(XMM1)); +#endif + CVTTPS2DQ(XMM0, R(XMM0)); + PACKSSDW(XMM0, R(XMM0)); + PACKUSWB(XMM0, R(XMM0)); + MOVD_xmm(R(EAX), XMM0); + SafeWriteRegToReg(AX, ECX, 16, 0, false); + + RET(); + + const u8* storePairedS8 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); +#ifdef QUANTIZE_OVERFLOW_SAFE + MOVSS(XMM1, M((void *)&m_65535)); + PUNPCKLDQ(XMM1, R(XMM1)); + MINPS(XMM0, R(XMM1)); +#endif + CVTTPS2DQ(XMM0, R(XMM0)); + PACKSSDW(XMM0, R(XMM0)); + PACKSSWB(XMM0, R(XMM0)); + MOVD_xmm(R(EAX), XMM0); + + SafeWriteRegToReg(AX, ECX, 16, 0, false); + + RET(); + + const u8* storePairedU16 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); + + // PACKUSDW is available only in SSE4 + PXOR(XMM1, R(XMM1)); + MAXPS(XMM0, R(XMM1)); + MOVSS(XMM1, M((void *)&m_65535)); + PUNPCKLDQ(XMM1, R(XMM1)); + MINPS(XMM0, R(XMM1)); + + CVTTPS2DQ(XMM0, R(XMM0)); + MOVQ_xmm(M(psTemp), XMM0); + // place ps[0] into the higher word, ps[1] into the lower + // so no need in ROL after BSWAP + MOVZX(32, 16, EAX, M((char*)psTemp + 0)); + SHL(32, R(EAX), Imm8(16)); + MOV(16, R(AX), M((char*)psTemp + 4)); + + BSWAP(32, EAX); + SafeWriteRegToReg(EAX, ECX, 32, 0, false); + + RET(); + + const u8* storePairedS16 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + // SHUFPS or UNPCKLPS might be a better choice here. The last one might just be an alias though. + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); +#ifdef QUANTIZE_OVERFLOW_SAFE + MOVSS(XMM1, M((void *)&m_65535)); + PUNPCKLDQ(XMM1, R(XMM1)); + MINPS(XMM0, R(XMM1)); +#endif + CVTTPS2DQ(XMM0, R(XMM0)); + PACKSSDW(XMM0, R(XMM0)); + MOVD_xmm(R(EAX), XMM0); + BSWAP(32, EAX); + ROL(32, R(EAX), Imm8(16)); + SafeWriteRegToReg(EAX, ECX, 32, 0, false); + + RET(); + + pairedStoreQuantized[0] = storePairedFloat; + pairedStoreQuantized[1] = storePairedIllegal; + pairedStoreQuantized[2] = storePairedIllegal; + pairedStoreQuantized[3] = storePairedIllegal; + pairedStoreQuantized[4] = storePairedU8; + pairedStoreQuantized[5] = storePairedU16; + pairedStoreQuantized[6] = storePairedS8; + pairedStoreQuantized[7] = storePairedS16; +} + +// See comment in header for in/outs. +void CommonAsmRoutines::GenQuantizedSingleStores() { + const u8* storeSingleIllegal = AlignCode4(); + UD2(); + + // Easy! + const u8* storeSingleFloat = AlignCode4(); + SafeWriteFloatToReg(XMM0, ECX); + RET(); + /* + if (cpu_info.bSSSE3) { + PSHUFB(XMM0, M((void *)pbswapShuffle2x4)); + // TODO: SafeWriteFloat + MOVSS(M(&psTemp[0]), XMM0); + MOV(32, R(EAX), M(&psTemp[0])); + SafeWriteRegToReg(EAX, ECX, 32, 0, false); + } else { + MOVSS(M(&psTemp[0]), XMM0); + MOV(32, R(EAX), M(&psTemp[0])); + SafeWriteRegToReg(EAX, ECX, 32, 0, true); + }*/ + + const u8* storeSingleU8 = AlignCode4(); // Used by MKWii + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + MULSS(XMM0, R(XMM1)); + PXOR(XMM1, R(XMM1)); + MAXSS(XMM0, R(XMM1)); + MINSS(XMM0, M((void *)&m_255)); + CVTTSS2SI(EAX, R(XMM0)); + SafeWriteRegToReg(AL, ECX, 8, 0, true); + RET(); + + const u8* storeSingleS8 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + MULSS(XMM0, R(XMM1)); + MAXSS(XMM0, M((void *)&m_m128)); + MINSS(XMM0, M((void *)&m_127)); + CVTTSS2SI(EAX, R(XMM0)); + SafeWriteRegToReg(AL, ECX, 8, 0, true); + RET(); + + const u8* storeSingleU16 = AlignCode4(); // Used by MKWii + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + MULSS(XMM0, R(XMM1)); + PXOR(XMM1, R(XMM1)); + MAXSS(XMM0, R(XMM1)); + MINSS(XMM0, M((void *)&m_65535)); + CVTTSS2SI(EAX, R(XMM0)); + SafeWriteRegToReg(EAX, ECX, 16, 0, true); + RET(); + + const u8* storeSingleS16 = AlignCode4(); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); + MULSS(XMM0, R(XMM1)); + MAXSS(XMM0, M((void *)&m_m32768)); + MINSS(XMM0, M((void *)&m_32767)); + CVTTSS2SI(EAX, R(XMM0)); + SafeWriteRegToReg(EAX, ECX, 16, 0, true); + RET(); + + singleStoreQuantized[0] = storeSingleFloat; + singleStoreQuantized[1] = storeSingleIllegal; + singleStoreQuantized[2] = storeSingleIllegal; + singleStoreQuantized[3] = storeSingleIllegal; + singleStoreQuantized[4] = storeSingleU8; + singleStoreQuantized[5] = storeSingleU16; + singleStoreQuantized[6] = storeSingleS8; + singleStoreQuantized[7] = storeSingleS16; +} + +void CommonAsmRoutines::GenQuantizedLoads() { + const u8* loadPairedIllegal = AlignCode4(); + UD2(); + const u8* loadPairedFloat = AlignCode4(); + if (cpu_info.bSSSE3) { +#ifdef _M_X64 + MOVQ_xmm(XMM0, MComplex(RBX, RCX, 1, 0)); +#else + AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); + MOVQ_xmm(XMM0, MDisp(ECX, (u32)Memory::base)); +#endif + PSHUFB(XMM0, M((void *)pbswapShuffle2x4)); + } else { +#ifdef _M_X64 + MOV(64, R(RCX), MComplex(RBX, RCX, 1, 0)); + BSWAP(64, RCX); + ROL(64, R(RCX), Imm8(32)); + MOVQ_xmm(XMM0, R(RCX)); +#else +#if 0 + AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); + MOVQ_xmm(XMM0, MDisp(ECX, (u32)Memory::base)); + PXOR(XMM1, R(XMM1)); + PSHUFLW(XMM0, R(XMM0), 0xB1); + MOVAPD(XMM1, R(XMM0)); + PSRLW(XMM0, 8); + PSLLW(XMM1, 8); + POR(XMM0, R(XMM1)); +#else + AND(32, R(ECX), Imm32(Memory::MEMVIEW32_MASK)); + MOV(32, R(EAX), MDisp(ECX, (u32)Memory::base)); + BSWAP(32, EAX); + MOV(32, M(&psTemp[0]), R(RAX)); + MOV(32, R(EAX), MDisp(ECX, (u32)Memory::base + 4)); + BSWAP(32, EAX); + MOV(32, M(((float *)&psTemp[0]) + 1), R(RAX)); + MOVQ_xmm(XMM0, M(&psTemp[0])); +#endif +#endif + } + RET(); + + const u8* loadPairedU8 = AlignCode4(); + UnsafeLoadRegToRegNoSwap(ECX, ECX, 16, 0); + MOVD_xmm(XMM0, R(ECX)); + PXOR(XMM1, R(XMM1)); + PUNPCKLBW(XMM0, R(XMM1)); + PUNPCKLWD(XMM0, R(XMM1)); + CVTDQ2PS(XMM0, R(XMM0)); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); + RET(); + + const u8* loadPairedS8 = AlignCode4(); + UnsafeLoadRegToRegNoSwap(ECX, ECX, 16, 0); + MOVD_xmm(XMM0, R(ECX)); + PUNPCKLBW(XMM0, R(XMM0)); + PUNPCKLWD(XMM0, R(XMM0)); + PSRAD(XMM0, 24); + CVTDQ2PS(XMM0, R(XMM0)); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); + RET(); + + const u8* loadPairedU16 = AlignCode4(); + UnsafeLoadRegToReg(ECX, ECX, 32, 0, false); + ROL(32, R(ECX), Imm8(16)); + MOVD_xmm(XMM0, R(ECX)); + PXOR(XMM1, R(XMM1)); + PUNPCKLWD(XMM0, R(XMM1)); + CVTDQ2PS(XMM0, R(XMM0)); + SHR(32, R(EAX), Imm8(6)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); + RET(); + + const u8* loadPairedS16 = AlignCode4(); + UnsafeLoadRegToReg(ECX, ECX, 32, 0, false); + ROL(32, R(ECX), Imm8(16)); + MOVD_xmm(XMM0, R(ECX)); + PUNPCKLWD(XMM0, R(XMM0)); + PSRAD(XMM0, 16); + CVTDQ2PS(XMM0, R(XMM0)); + SHR(32, R(EAX), Imm8(6)); + AND(32, R(EAX), Imm32(0xFC)); + MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_dequantizeTableS)); + PUNPCKLDQ(XMM1, R(XMM1)); + MULPS(XMM0, R(XMM1)); + RET(); + + pairedLoadQuantized[0] = loadPairedFloat; + pairedLoadQuantized[1] = loadPairedIllegal; + pairedLoadQuantized[2] = loadPairedIllegal; + pairedLoadQuantized[3] = loadPairedIllegal; + pairedLoadQuantized[4] = loadPairedU8; + pairedLoadQuantized[5] = loadPairedU16; + pairedLoadQuantized[6] = loadPairedS8; + pairedLoadQuantized[7] = loadPairedS16; +} diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.h index 38646b05bd..a00a31ddd9 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.h @@ -1,78 +1,78 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _JITASMCOMMON_H -#define _JITASMCOMMON_H - -#include "../JitCommon/Jit_Util.h" -#include "Thunk.h" - -class CommonAsmRoutines : public EmuCodeBlock { -protected: - void GenQuantizedLoads(); - void GenQuantizedStores(); - void GenQuantizedSingleStores(); - -public: - void GenFifoWrite(int size); - void GenFifoXmm64Write(); - void GenFifoFloatWrite(); - - const u8 *fifoDirectWrite8; - const u8 *fifoDirectWrite16; - const u8 *fifoDirectWrite32; - const u8 *fifoDirectWriteFloat; - const u8 *fifoDirectWriteXmm64; - - const u8 *enterCode; - - const u8 *dispatcher; - const u8 *dispatcherNoCheck; - const u8 *dispatcherPcInEAX; - - const u8 *fpException; - const u8 *computeRc; - const u8 *testExceptions; - const u8 *dispatchPcInEAX; - const u8 *doTiming; - - const u8 *breakpointBailout; - - // In: array index: GQR to use. - // In: ECX: Address to read from. - // Out: XMM0: Bottom two 32-bit slots hold the read value, - // converted to a pair of floats. - // Trashes: EAX ECX EDX - const u8 GC_ALIGNED16(*pairedLoadQuantized[8]); - - // In: array index: GQR to use. - // In: ECX: Address to write to. - // In: XMM0: Bottom two 32-bit slots hold the pair of floats to be written. - // Out: Nothing. - // Trashes: EAX ECX EDX - const u8 GC_ALIGNED16(*pairedStoreQuantized[8]); - - // In: array index: GQR to use. - // In: ECX: Address to write to. - // In: XMM0: Bottom 32-bit slot holds the float to be written. - const u8 GC_ALIGNED16(*singleStoreQuantized[8]); - -private: - ThunkManager thunks; -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _JITASMCOMMON_H +#define _JITASMCOMMON_H + +#include "../JitCommon/Jit_Util.h" +#include "Thunk.h" + +class CommonAsmRoutines : public EmuCodeBlock { +protected: + void GenQuantizedLoads(); + void GenQuantizedStores(); + void GenQuantizedSingleStores(); + +public: + void GenFifoWrite(int size); + void GenFifoXmm64Write(); + void GenFifoFloatWrite(); + + const u8 *fifoDirectWrite8; + const u8 *fifoDirectWrite16; + const u8 *fifoDirectWrite32; + const u8 *fifoDirectWriteFloat; + const u8 *fifoDirectWriteXmm64; + + const u8 *enterCode; + + const u8 *dispatcher; + const u8 *dispatcherNoCheck; + const u8 *dispatcherPcInEAX; + + const u8 *fpException; + const u8 *computeRc; + const u8 *testExceptions; + const u8 *dispatchPcInEAX; + const u8 *doTiming; + + const u8 *breakpointBailout; + + // In: array index: GQR to use. + // In: ECX: Address to read from. + // Out: XMM0: Bottom two 32-bit slots hold the read value, + // converted to a pair of floats. + // Trashes: EAX ECX EDX + const u8 GC_ALIGNED16(*pairedLoadQuantized[8]); + + // In: array index: GQR to use. + // In: ECX: Address to write to. + // In: XMM0: Bottom two 32-bit slots hold the pair of floats to be written. + // Out: Nothing. + // Trashes: EAX ECX EDX + const u8 GC_ALIGNED16(*pairedStoreQuantized[8]); + + // In: array index: GQR to use. + // In: ECX: Address to write to. + // In: XMM0: Bottom 32-bit slot holds the float to be written. + const u8 GC_ALIGNED16(*singleStoreQuantized[8]); + +private: + ThunkManager thunks; +}; + +#endif diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.h index a99b07d74c..4b880eb86d 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.h @@ -1,61 +1,61 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _JITBACKPATCH_H -#define _JITBACKPATCH_H - -#include "Common.h" -#include "x64Emitter.h" -#include "x64Analyzer.h" -#include "Thunk.h" - -// Declarations and definitions -// ---------- - -// void Jit(u32 em_address); - -#ifndef _WIN32 - - // A bit of a hack to get things building under linux. We manually fill in this structure as needed - // from the real context. - struct CONTEXT - { - #ifdef _M_X64 - u64 Rip; - u64 Rax; - #else - u32 Eip; - u32 Eax; - #endif - }; - -#endif - - -class TrampolineCache : public Gen::XCodeBlock -{ -public: - void Init(); - void Shutdown(); - - const u8 *GetReadTrampoline(const InstructionInfo &info); - const u8 *GetWriteTrampoline(const InstructionInfo &info); -private: - ThunkManager thunks; -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _JITBACKPATCH_H +#define _JITBACKPATCH_H + +#include "Common.h" +#include "x64Emitter.h" +#include "x64Analyzer.h" +#include "Thunk.h" + +// Declarations and definitions +// ---------- + +// void Jit(u32 em_address); + +#ifndef _WIN32 + + // A bit of a hack to get things building under linux. We manually fill in this structure as needed + // from the real context. + struct CONTEXT + { + #ifdef _M_X64 + u64 Rip; + u64 Rax; + #else + u32 Eip; + u32 Eax; + #endif + }; + +#endif + + +class TrampolineCache : public Gen::XCodeBlock +{ +public: + void Init(); + void Shutdown(); + + const u8 *GetReadTrampoline(const InstructionInfo &info); + const u8 *GetWriteTrampoline(const InstructionInfo &info); +private: + ThunkManager thunks; +}; + +#endif diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp index 16149adb6f..7f6cac8dd3 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp @@ -1,75 +1,75 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -#include "JitBase.h" - -JitBase *jit; - -void Jit(u32 em_address) -{ - jit->Jit(em_address); -} - -u32 Helper_Mask(u8 mb, u8 me) -{ - return (((mb > me) ? - ~(((u32)-1 >> mb) ^ ((me >= 31) ? 0 : (u32) -1 >> (me + 1))) - : - (((u32)-1 >> mb) ^ ((me >= 31) ? 0 : (u32) -1 >> (me + 1)))) - ); -} - -void LogGeneratedX86(int size, PPCAnalyst::CodeBuffer *code_buffer, const u8 *normalEntry, JitBlock *b) -{ - char pDis[1000] = ""; - - for (int i = 0; i < size; i++) - { - char temp[256] = ""; - const PPCAnalyst::CodeOp &op = code_buffer->codebuffer[i]; - DisassembleGekko(op.inst.hex, op.address, temp, 256); - sprintf(pDis, "%08x %s", op.address, temp); - DEBUG_LOG(DYNA_REC,"IR_X86 PPC: %s\n", pDis); - } - - disassembler x64disasm; - x64disasm.set_syntax_intel(); - - u64 disasmPtr = (u64)normalEntry; - const u8 *end = normalEntry + b->codeSize; - - while ((u8*)disasmPtr < end) - { - char sptr[1000] = ""; -#ifdef _M_X64 - disasmPtr += x64disasm.disasm64(disasmPtr, disasmPtr, (u8*)disasmPtr, sptr); -#else - disasmPtr += x64disasm.disasm32(disasmPtr, disasmPtr, (u8*)disasmPtr, sptr); -#endif - DEBUG_LOG(DYNA_REC,"IR_X86 x86: %s", sptr); - } - - if (b->codeSize <= 250) - { - char x86code[500] = ""; - for (u8 i = 0; i <= b->codeSize; i++) - { - char opcHex[2] = ""; - u8 opc = *(normalEntry + i); - sprintf(opcHex, "%02x", opc); - strncat(x86code, opcHex, 2); - } - DEBUG_LOG(DYNA_REC,"IR_X86 bin: %s\n\n\n", x86code); - } -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +#include "JitBase.h" + +JitBase *jit; + +void Jit(u32 em_address) +{ + jit->Jit(em_address); +} + +u32 Helper_Mask(u8 mb, u8 me) +{ + return (((mb > me) ? + ~(((u32)-1 >> mb) ^ ((me >= 31) ? 0 : (u32) -1 >> (me + 1))) + : + (((u32)-1 >> mb) ^ ((me >= 31) ? 0 : (u32) -1 >> (me + 1)))) + ); +} + +void LogGeneratedX86(int size, PPCAnalyst::CodeBuffer *code_buffer, const u8 *normalEntry, JitBlock *b) +{ + char pDis[1000] = ""; + + for (int i = 0; i < size; i++) + { + char temp[256] = ""; + const PPCAnalyst::CodeOp &op = code_buffer->codebuffer[i]; + DisassembleGekko(op.inst.hex, op.address, temp, 256); + sprintf(pDis, "%08x %s", op.address, temp); + DEBUG_LOG(DYNA_REC,"IR_X86 PPC: %s\n", pDis); + } + + disassembler x64disasm; + x64disasm.set_syntax_intel(); + + u64 disasmPtr = (u64)normalEntry; + const u8 *end = normalEntry + b->codeSize; + + while ((u8*)disasmPtr < end) + { + char sptr[1000] = ""; +#ifdef _M_X64 + disasmPtr += x64disasm.disasm64(disasmPtr, disasmPtr, (u8*)disasmPtr, sptr); +#else + disasmPtr += x64disasm.disasm32(disasmPtr, disasmPtr, (u8*)disasmPtr, sptr); +#endif + DEBUG_LOG(DYNA_REC,"IR_X86 x86: %s", sptr); + } + + if (b->codeSize <= 250) + { + char x86code[500] = ""; + for (u8 i = 0; i <= b->codeSize; i++) + { + char opcHex[2] = ""; + u8 opc = *(normalEntry + i); + sprintf(opcHex, "%02x", opc); + strncat(x86code, opcHex, 2); + } + DEBUG_LOG(DYNA_REC,"IR_X86 bin: %s\n\n\n", x86code); + } +} diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h index 3488dc4b79..793a75c611 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h @@ -1,111 +1,111 @@ -// Copyright (C) 2010 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _JITBASE_H -#define _JITBASE_H - -//#define JIT_SINGLESTEP // Enables single stepping -//#define JIT_NO_CACHE // Disables the block cache and enables breakpoints -//#define JIT_LOG_X86 // Enables logging of the generated x86 code -//#define JIT_LOG_GPR // Enables logging of the PPC general purpose regs -//#define JIT_LOG_FPR // Enables logging of the PPC floating point regs - -#include "JitCache.h" -#include "Jit_Util.h" // for EmuCodeBlock -#include "JitBackpatch.h" // for EmuCodeBlock -#include "JitAsmCommon.h" - -#include "PowerPCDisasm.h" -#include "disasm.h" - -#define JIT_OPCODE 0 - -// TODO: In the future, inherit this from CPUCoreBase and have Interpreter -// inherit from that too? -class JitBase : public EmuCodeBlock -{ -protected: - JitBlockCache blocks; - TrampolineCache trampolines; - - struct JitOptions - { - bool optimizeStack; - bool assumeFPLoadFromMem; - bool enableBlocklink; - bool fpAccurateFcmp; - bool enableFastMem; - bool optimizeGatherPipe; - bool fastInterrupts; - bool accurateSinglePrecision; - }; - struct JitState - { - u32 compilerPC; - u32 next_compilerPC; - u32 blockStart; - bool cancel; - UGeckoInstruction next_inst; // for easy peephole opt. - int blockSize; - int instructionNumber; - int downcountAmount; - - bool isLastInstruction; - bool forceUnsafeLoad; - - int fifoBytesThisBlock; - - PPCAnalyst::BlockStats st; - PPCAnalyst::BlockRegStats gpa; - PPCAnalyst::BlockRegStats fpa; - PPCAnalyst::CodeOp *op; - u8* rewriteStart; - - JitBlock *curBlock; - }; - -public: - // This should probably be removed from public: - JitOptions jo; - JitState js; - - JitBlockCache *GetBlockCache() { return &blocks; } - - virtual void Init() = 0; - virtual void Shutdown() = 0; - - virtual void Jit(u32 em_address) = 0; - virtual void ClearCache() = 0; - virtual void Run() = 0; - virtual void SingleStep() = 0; - virtual void NotifyBreakpoint(u32 em_address, bool set) = 0; - - const u8 *BackPatch(u8 *codePtr, int accessType, u32 em_address, void *ctx); - - virtual const CommonAsmRoutines *GetAsmRoutines() = 0; - virtual const char *GetName() = 0; -}; - -extern JitBase *jit; - -void Jit(u32 em_address); - -// Merged routines that should be moved somewhere better -u32 Helper_Mask(u8 mb, u8 me); -void LogGeneratedX86(int size, PPCAnalyst::CodeBuffer *code_buffer, const u8 *normalEntry, JitBlock *b); - -#endif +// Copyright (C) 2010 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _JITBASE_H +#define _JITBASE_H + +//#define JIT_SINGLESTEP // Enables single stepping +//#define JIT_NO_CACHE // Disables the block cache and enables breakpoints +//#define JIT_LOG_X86 // Enables logging of the generated x86 code +//#define JIT_LOG_GPR // Enables logging of the PPC general purpose regs +//#define JIT_LOG_FPR // Enables logging of the PPC floating point regs + +#include "JitCache.h" +#include "Jit_Util.h" // for EmuCodeBlock +#include "JitBackpatch.h" // for EmuCodeBlock +#include "JitAsmCommon.h" + +#include "PowerPCDisasm.h" +#include "disasm.h" + +#define JIT_OPCODE 0 + +// TODO: In the future, inherit this from CPUCoreBase and have Interpreter +// inherit from that too? +class JitBase : public EmuCodeBlock +{ +protected: + JitBlockCache blocks; + TrampolineCache trampolines; + + struct JitOptions + { + bool optimizeStack; + bool assumeFPLoadFromMem; + bool enableBlocklink; + bool fpAccurateFcmp; + bool enableFastMem; + bool optimizeGatherPipe; + bool fastInterrupts; + bool accurateSinglePrecision; + }; + struct JitState + { + u32 compilerPC; + u32 next_compilerPC; + u32 blockStart; + bool cancel; + UGeckoInstruction next_inst; // for easy peephole opt. + int blockSize; + int instructionNumber; + int downcountAmount; + + bool isLastInstruction; + bool forceUnsafeLoad; + + int fifoBytesThisBlock; + + PPCAnalyst::BlockStats st; + PPCAnalyst::BlockRegStats gpa; + PPCAnalyst::BlockRegStats fpa; + PPCAnalyst::CodeOp *op; + u8* rewriteStart; + + JitBlock *curBlock; + }; + +public: + // This should probably be removed from public: + JitOptions jo; + JitState js; + + JitBlockCache *GetBlockCache() { return &blocks; } + + virtual void Init() = 0; + virtual void Shutdown() = 0; + + virtual void Jit(u32 em_address) = 0; + virtual void ClearCache() = 0; + virtual void Run() = 0; + virtual void SingleStep() = 0; + virtual void NotifyBreakpoint(u32 em_address, bool set) = 0; + + const u8 *BackPatch(u8 *codePtr, int accessType, u32 em_address, void *ctx); + + virtual const CommonAsmRoutines *GetAsmRoutines() = 0; + virtual const char *GetName() = 0; +}; + +extern JitBase *jit; + +void Jit(u32 em_address); + +// Merged routines that should be moved somewhere better +u32 Helper_Mask(u8 mb, u8 me); +void LogGeneratedX86(int size, PPCAnalyst::CodeBuffer *code_buffer, const u8 *normalEntry, JitBlock *b); + +#endif diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h index b9f41bd259..99ee795822 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h @@ -1,47 +1,47 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _JITUTIL_H -#define _JITUTIL_H - -#include "x64Emitter.h" -#include "Thunk.h" - -// Like XCodeBlock but has some utilities for memory access. -class EmuCodeBlock : public Gen::XCodeBlock { -public: - void UnsafeLoadRegToReg(Gen::X64Reg reg_addr, Gen::X64Reg reg_value, int accessSize, s32 offset = 0, bool signExtend = false); - void UnsafeLoadRegToRegNoSwap(Gen::X64Reg reg_addr, Gen::X64Reg reg_value, int accessSize, s32 offset); - void UnsafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset = 0, bool swap = true); - void SafeLoadRegToEAX(Gen::X64Reg reg, int accessSize, s32 offset, bool signExtend = false); - void SafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset, bool swap = true); - - // Trashes both inputs and EAX. - void SafeWriteFloatToReg(Gen::X64Reg xmm_value, Gen::X64Reg reg_addr); - - void WriteToConstRamAddress(int accessSize, const Gen::OpArg& arg, u32 address); - void WriteFloatToConstRamAddress(const Gen::X64Reg& xmm_reg, u32 address); - void JitClearCA(); - void JitSetCA(); - - void ForceSinglePrecisionS(Gen::X64Reg xmm); - void ForceSinglePrecisionP(Gen::X64Reg xmm); -protected: - ThunkManager thunks; -}; - -#endif // _JITUTIL_H +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _JITUTIL_H +#define _JITUTIL_H + +#include "x64Emitter.h" +#include "Thunk.h" + +// Like XCodeBlock but has some utilities for memory access. +class EmuCodeBlock : public Gen::XCodeBlock { +public: + void UnsafeLoadRegToReg(Gen::X64Reg reg_addr, Gen::X64Reg reg_value, int accessSize, s32 offset = 0, bool signExtend = false); + void UnsafeLoadRegToRegNoSwap(Gen::X64Reg reg_addr, Gen::X64Reg reg_value, int accessSize, s32 offset); + void UnsafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset = 0, bool swap = true); + void SafeLoadRegToEAX(Gen::X64Reg reg, int accessSize, s32 offset, bool signExtend = false); + void SafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset, bool swap = true); + + // Trashes both inputs and EAX. + void SafeWriteFloatToReg(Gen::X64Reg xmm_value, Gen::X64Reg reg_addr); + + void WriteToConstRamAddress(int accessSize, const Gen::OpArg& arg, u32 address); + void WriteFloatToConstRamAddress(const Gen::X64Reg& xmm_reg, u32 address); + void JitClearCA(); + void JitSetCA(); + + void ForceSinglePrecisionS(Gen::X64Reg xmm); + void ForceSinglePrecisionP(Gen::X64Reg xmm); +protected: + ThunkManager thunks; +}; + +#endif // _JITUTIL_H diff --git a/Source/Core/Core/Src/PowerPC/LUT_frsqrtex.cpp b/Source/Core/Core/Src/PowerPC/LUT_frsqrtex.cpp index 0d67e81ff5..4f4751ae18 100644 --- a/Source/Core/Core/Src/PowerPC/LUT_frsqrtex.cpp +++ b/Source/Core/Core/Src/PowerPC/LUT_frsqrtex.cpp @@ -1,21869 +1,21869 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// Gekko related unions, structs, ... -// - -#include "LUT_frsqrtex.h" - -const unsigned int frsqrtex_lut[65536] = { - 0x69FA0000, 0x69F8A600, 0x69F74C00, - 0x69F5F200, 0x69F49800, 0x69F33E00, - 0x69F1E400, 0x69F08A00, 0x69EF3000, - 0x69EDD600, 0x69EC7C00, 0x69EB2200, - 0x69E9C800, 0x69E86E00, 0x69E71400, - 0x69E5BA00, 0x69E46000, 0x69E30600, - 0x69E1AC00, 0x69E05200, 0x69DEF800, - 0x69DD9E00, 0x69DC4400, 0x69DAEA00, - 0x69D99000, 0x69D83600, 0x69D6DC00, - 0x69D58200, 0x69D42800, 0x69D2CE00, - 0x69D17400, 0x69D01A00, 0x69CEC000, - 0x69CD6600, 0x69CC0C00, 0x69CAB200, - 0x69C95800, 0x69C7FE00, 0x69C6A400, - 0x69C54A00, 0x69C3F000, 0x69C29600, - 0x69C13C00, 0x69BFE200, 0x69BE8800, - 0x69BD2E00, 0x69BBD400, 0x69BA7A00, - 0x69B92000, 0x69B7C600, 0x69B66C00, - 0x69B51200, 0x69B3B800, 0x69B25E00, - 0x69B10400, 0x69AFAA00, 0x69AE5000, - 0x69ACF600, 0x69AB9C00, 0x69AA4200, - 0x69A8E800, 0x69A78E00, 0x69A63400, - 0x69A4DA00, 0x69A38000, 0x69A22600, - 0x69A0CC00, 0x699F7200, 0x699E1800, - 0x699CBE00, 0x699B6400, 0x699A0A00, - 0x6998B000, 0x69975600, 0x6995FC00, - 0x6994A200, 0x69934800, 0x6991EE00, - 0x69909400, 0x698F3A00, 0x698DE000, - 0x698C8600, 0x698B2C00, 0x6989D200, - 0x69887800, 0x69871E00, 0x6985C400, - 0x69846A00, 0x69831000, 0x6981B600, - 0x69805C00, 0x697F0200, 0x697DA800, - 0x697C4E00, 0x697AF400, 0x69799A00, - 0x69784000, 0x6976E600, 0x69758C00, - 0x69743200, 0x6972D800, 0x69717E00, - 0x69702400, 0x696ECA00, 0x696D7000, - 0x696C1600, 0x696ABC00, 0x69696200, - 0x69680800, 0x6966AE00, 0x69655400, - 0x6963FA00, 0x6962A000, 0x69614600, - 0x695FEC00, 0x695E9200, 0x695D3800, - 0x695BDE00, 0x695A8400, 0x69592A00, - 0x6957D000, 0x69567600, 0x69551C00, - 0x6953C200, 0x69526800, 0x69510E00, - 0x694FB400, 0x694E5A00, 0x694D0000, - 0x694BA600, 0x694A4C00, 0x6948F200, - 0x69479800, 0x69463E00, 0x6944E400, - 0x69438A00, 0x69423000, 0x6940D600, - 0x693F7C00, 0x693E2200, 0x693CC800, - 0x693B6E00, 0x693A1400, 0x6938BA00, - 0x69376000, 0x69360600, 0x6934AC00, - 0x69335200, 0x6931F800, 0x69309E00, - 0x692F4400, 0x692DEA00, 0x692C9000, - 0x692B3600, 0x6929DC00, 0x69288200, - 0x69272800, 0x6925CE00, 0x69247400, - 0x69231A00, 0x6921C000, 0x69206600, - 0x691F0C00, 0x691DB200, 0x691C5800, - 0x691AFE00, 0x6919A400, 0x69184A00, - 0x6916F000, 0x69159600, 0x69143C00, - 0x6912E200, 0x69118800, 0x69102E00, - 0x690ED400, 0x690D7A00, 0x690C2000, - 0x690AC600, 0x69096C00, 0x69081200, - 0x6906B800, 0x69055E00, 0x69040400, - 0x6902AA00, 0x69015000, 0x68FFF600, - 0x68FE9C00, 0x68FD4200, 0x68FBE800, - 0x68FA8E00, 0x68F93400, 0x68F7DA00, - 0x68F68000, 0x68F52600, 0x68F3CC00, - 0x68F27200, 0x68F11800, 0x68EFBE00, - 0x68EE6400, 0x68ED0A00, 0x68EBB000, - 0x68EA5600, 0x68E8FC00, 0x68E7A200, - 0x68E64800, 0x68E4EE00, 0x68E39400, - 0x68E23A00, 0x68E0E000, 0x68DF8600, - 0x68DE2C00, 0x68DCD200, 0x68DB7800, - 0x68DA1E00, 0x68D8C400, 0x68D76A00, - 0x68D61000, 0x68D4B600, 0x68D35C00, - 0x68D20200, 0x68D0A800, 0x68CF4E00, - 0x68CDF400, 0x68CC9A00, 0x68CB4000, - 0x68C9E600, 0x68C88C00, 0x68C73200, - 0x68C5D800, 0x68C47E00, 0x68C32400, - 0x68C1CA00, 0x68C07000, 0x68BF1600, - 0x68BDBC00, 0x68BC6200, 0x68BB0800, - 0x68B9AE00, 0x68B85400, 0x68B6FA00, - 0x68B5A000, 0x68B44600, 0x68B2EC00, - 0x68B19200, 0x68B03800, 0x68AEDE00, - 0x68AD8400, 0x68AC2A00, 0x68AAD000, - 0x68A97600, 0x68A81C00, 0x68A6C200, - 0x68A56800, 0x68A40E00, 0x68A2B400, - 0x68A15A00, 0x68A00000, 0x689EA600, - 0x689D4C00, 0x689BF200, 0x689A9800, - 0x68993E00, 0x6897E400, 0x68968A00, - 0x68953000, 0x6893D600, 0x68927C00, - 0x68912200, 0x688FC800, 0x688E6E00, - 0x688D1400, 0x688BBA00, 0x688A6000, - 0x68890600, 0x6887AC00, 0x68865200, - 0x6884F800, 0x68839E00, 0x68824400, - 0x6880EA00, 0x687F9000, 0x687E3600, - 0x687CDC00, 0x687B8200, 0x687A2800, - 0x6878CE00, 0x68777400, 0x68761A00, - 0x6874C000, 0x68736600, 0x68720C00, - 0x6870B200, 0x686F5800, 0x686DFE00, - 0x686CA400, 0x686B4A00, 0x6869F000, - 0x68689600, 0x68673C00, 0x6865E200, - 0x68648800, 0x68632E00, 0x6861D400, - 0x68607A00, 0x685F2000, 0x685DC600, - 0x685C6C00, 0x685B1200, 0x6859B800, - 0x68585E00, 0x68570400, 0x6855AA00, - 0x68545000, 0x6852F600, 0x68519C00, - 0x68504200, 0x684EE800, 0x684D8E00, - 0x684C3400, 0x684ADA00, 0x68498000, - 0x68482600, 0x6846CC00, 0x68457200, - 0x68441800, 0x6842BE00, 0x68416400, - 0x68400A00, 0x683EB000, 0x683D5600, - 0x683BFC00, 0x683AA200, 0x68394800, - 0x6837EE00, 0x68369400, 0x68353A00, - 0x6833E000, 0x68328600, 0x68312C00, - 0x682FD200, 0x682E7800, 0x682D1E00, - 0x682BC400, 0x682A6A00, 0x68291000, - 0x6827B600, 0x68265C00, 0x68250200, - 0x6823A800, 0x68224E00, 0x6820F400, - 0x681F9A00, 0x681E4000, 0x681CE600, - 0x681B8C00, 0x681A3200, 0x6818D800, - 0x68177E00, 0x68162400, 0x6814CA00, - 0x68137000, 0x68121600, 0x6810BC00, - 0x680F6200, 0x680E0800, 0x680CAE00, - 0x680B5400, 0x6809FA00, 0x6808A000, - 0x68074600, 0x6805EC00, 0x68049200, - 0x68033800, 0x6801DE00, 0x68008400, - 0x67FF2A00, 0x67FDD000, 0x67FC7600, - 0x67FB1C00, 0x67F9C200, 0x67F86800, - 0x67F70E00, 0x67F5B400, 0x67F45A00, - 0x67F30000, 0x67F1A600, 0x67F04C00, - 0x67EEF200, 0x67ED9800, 0x67EC3E00, - 0x67EAE400, 0x67E98A00, 0x67E83000, - 0x67E6D600, 0x67E57C00, 0x67E42200, - 0x67E2C800, 0x67E16E00, 0x67E01400, - 0x67DEBA00, 0x67DD6000, 0x67DC0600, - 0x67DAAC00, 0x67D95200, 0x67D7F800, - 0x67D69E00, 0x67D54400, 0x67D3EA00, - 0x67D29000, 0x67D13600, 0x67CFDC00, - 0x67CE8200, 0x67CD2800, 0x67CBCE00, - 0x67CA7400, 0x67C91A00, 0x67C7C000, - 0x67C66600, 0x67C50C00, 0x67C3B200, - 0x67C25800, 0x67C0FE00, 0x67BFA400, - 0x67BE4A00, 0x67BCF000, 0x67BB9600, - 0x67BA3C00, 0x67B8E200, 0x67B78800, - 0x67B62E00, 0x67B4D400, 0x67B37A00, - 0x67B22000, 0x67B0C600, 0x67AF6C00, - 0x67AE1200, 0x67ACB800, 0x67AB5E00, - 0x67AA0400, 0x67A8AA00, 0x67A75000, - 0x67A5F600, 0x67A49C00, 0x67A34200, - 0x67A1E800, 0x67A08E00, 0x679F3400, - 0x679DDA00, 0x679C8000, 0x679B2600, - 0x6799CC00, 0x67987200, 0x67971800, - 0x6795BE00, 0x67946400, 0x67930A00, - 0x6791B000, 0x67905600, 0x678EFC00, - 0x678DA200, 0x678C4800, 0x678AEE00, - 0x67899400, 0x67883A00, 0x6786E000, - 0x67858600, 0x67842C00, 0x6782D200, - 0x67817800, 0x67801E00, 0x677EC400, - 0x677D6A00, 0x677C1000, 0x677AB600, - 0x67795C00, 0x67780200, 0x6776A800, - 0x67754E00, 0x6773F400, 0x67729A00, - 0x67714000, 0x676FE600, 0x676E8C00, - 0x676D3200, 0x676BD800, 0x676A7E00, - 0x67692400, 0x6767CA00, 0x67667000, - 0x67651600, 0x6763BC00, 0x67626200, - 0x67610800, 0x675FAE00, 0x675E5400, - 0x675CFA00, 0x675BA000, 0x675A4600, - 0x6758EC00, 0x67579200, 0x67563800, - 0x6754DE00, 0x67538400, 0x67522A00, - 0x6750D000, 0x674F7600, 0x674E1C00, - 0x674CC200, 0x674B6800, 0x674A0E00, - 0x6748B400, 0x67475A00, 0x67460000, - 0x6744A600, 0x67434C00, 0x6741F200, - 0x67409800, 0x673F3E00, 0x673DE400, - 0x673C8A00, 0x673B3000, 0x6739D600, - 0x67387C00, 0x67372200, 0x6735C800, - 0x67346E00, 0x67331400, 0x6731BA00, - 0x67306000, 0x672F0600, 0x672DAC00, - 0x672C5200, 0x672AF800, 0x67299E00, - 0x67284400, 0x6726EA00, 0x67259000, - 0x67243600, 0x6722DC00, 0x67218200, - 0x67202800, 0x671ECE00, 0x671D7400, - 0x671C1A00, 0x671AC000, 0x67196600, - 0x67180C00, 0x6716B200, 0x67155800, - 0x6713FE00, 0x6712A400, 0x67114A00, - 0x670FF000, 0x670E9600, 0x670D3C00, - 0x670BE200, 0x670A8800, 0x67092E00, - 0x6707D400, 0x67067A00, 0x67052000, - 0x6703C600, 0x67026C00, 0x67011200, - 0x66FFB800, 0x66FE5E00, 0x66FD0400, - 0x66FBAA00, 0x66FA5000, 0x66F8F600, - 0x66F79C00, 0x66F64200, 0x66F4E800, - 0x66F38E00, 0x66F23400, 0x66F0DA00, - 0x66EF8000, 0x66EE2600, 0x66ECCC00, - 0x66EB7200, 0x66EA1800, 0x66E8BE00, - 0x66E76400, 0x66E60A00, 0x66E4B000, - 0x66E35600, 0x66E1FC00, 0x66E0A200, - 0x66DF4800, 0x66DDEE00, 0x66DC9400, - 0x66DB3A00, 0x66D9E000, 0x66D88600, - 0x66D72C00, 0x66D5D200, 0x66D47800, - 0x66D31E00, 0x66D1C400, 0x66D06A00, - 0x66CF1000, 0x66CDB600, 0x66CC5C00, - 0x66CB0200, 0x66C9A800, 0x66C84E00, - 0x66C6F400, 0x66C59A00, 0x66C44000, - 0x66C2E600, 0x66C18C00, 0x66C03200, - 0x66BED800, 0x66BD7E00, 0x66BC2400, - 0x66BACA00, 0x66B97000, 0x66B81600, - 0x66B6BC00, 0x66B56200, 0x66B40800, - 0x66B2AE00, 0x66B15400, 0x66AFFA00, - 0x66AEA000, 0x66AD4600, 0x66ABEC00, - 0x66AA9200, 0x66A93800, 0x66A7DE00, - 0x66A68400, 0x66A52A00, 0x66A3D000, - 0x66A27600, 0x66A11C00, 0x669FC200, - 0x669E6800, 0x669D0E00, 0x669BB400, - 0x669A5A00, 0x66990000, 0x6697A600, - 0x66964C00, 0x6694F200, 0x66939800, - 0x66923E00, 0x6690E400, 0x668F8A00, - 0x668E3000, 0x668CD600, 0x668B7C00, - 0x668A2200, 0x6688C800, 0x66876E00, - 0x66861400, 0x6684BA00, 0x66836000, - 0x66820600, 0x6680AC00, 0x667F5200, - 0x667DF800, 0x667C9E00, 0x667B4400, - 0x6679EA00, 0x66789000, 0x66773600, - 0x6675DC00, 0x66748200, 0x66732800, - 0x6671CE00, 0x66707400, 0x666F1A00, - 0x666DC000, 0x666C6600, 0x666B0C00, - 0x6669B200, 0x66685800, 0x6666FE00, - 0x6665A400, 0x66644A00, 0x6662F000, - 0x66619600, 0x66603C00, 0x665EE200, - 0x665D8800, 0x665C2E00, 0x665AD400, - 0x66597A00, 0x66582000, 0x6656C600, - 0x66556C00, 0x66541200, 0x6652B800, - 0x66515E00, 0x66500400, 0x664EAA00, - 0x664D5000, 0x664BF600, 0x664A9C00, - 0x66494200, 0x6647E800, 0x66468E00, - 0x66453400, 0x6643DA00, 0x66428000, - 0x66412600, 0x663FCC00, 0x663E7200, - 0x663D1800, 0x663BBE00, 0x663A6400, - 0x66390A00, 0x6637B000, 0x66365600, - 0x6634FC00, 0x6633A200, 0x66324800, - 0x6630EE00, 0x662F9400, 0x662E3A00, - 0x662CE000, 0x662B8600, 0x662A2C00, - 0x6628D200, 0x66277800, 0x66261E00, - 0x6624C400, 0x66236A00, 0x66221000, - 0x6620B600, 0x661F5C00, 0x661E0200, - 0x661CA800, 0x661B4E00, 0x6619F400, - 0x66189A00, 0x66174000, 0x6615E600, - 0x66148C00, 0x66133200, 0x6611D800, - 0x66107E00, 0x660F2400, 0x660DCA00, - 0x660C7000, 0x660B1600, 0x6609BC00, - 0x66086200, 0x66070800, 0x6605AE00, - 0x66045400, 0x6602FA00, 0x6601A000, - 0x66004600, 0x65FEEC00, 0x65FD9200, - 0x65FC3800, 0x65FADE00, 0x65F98400, - 0x65F82A00, 0x65F6D000, 0x65F57600, - 0x65F41C00, 0x65F2C200, 0x65F16800, - 0x65F00E00, 0x65EEB400, 0x65ED5A00, - 0x65EC0000, 0x65EAA600, 0x65E94C00, - 0x65E7F200, 0x65E69800, 0x65E53E00, - 0x65E3E400, 0x65E28A00, 0x65E13000, - 0x65DFD600, 0x65DE7C00, 0x65DD2200, - 0x65DBC800, 0x65DA6E00, 0x65D91400, - 0x65D7BA00, 0x65D66000, 0x65D50600, - 0x65D3AC00, 0x65D25200, 0x65D0F800, - 0x65CF9E00, 0x65CE4400, 0x65CCEA00, - 0x65CB9000, 0x65CA3600, 0x65C8DC00, - 0x65C78200, 0x65C62800, 0x65C4CE00, - 0x65C37400, 0x65C21A00, 0x65C0C000, - 0x65BF6600, 0x65BE0C00, 0x65BCB200, - 0x65BB5800, 0x65B9FE00, 0x65B8A400, - 0x65B74A00, 0x65B5F000, 0x65B49600, - 0x65B33C00, 0x65B1E200, 0x65B08800, - 0x65AF2E00, 0x65ADD400, 0x65AC7A00, - 0x65AB2000, 0x65A9C600, 0x65A86C00, - 0x65A71200, 0x65A5B800, 0x65A45E00, - 0x65A30400, 0x65A1AA00, 0x65A05000, - 0x659EF600, 0x659D9C00, 0x659C4200, - 0x659AE800, 0x65998E00, 0x65983400, - 0x6596DA00, 0x65958000, 0x65942600, - 0x6592CC00, 0x65917200, 0x65901800, - 0x658EBE00, 0x658D6400, 0x658C0A00, - 0x658AB000, 0x65895600, 0x6587FC00, - 0x6586A200, 0x65854800, 0x6583EE00, - 0x65829400, 0x65813A00, 0x657FE000, - 0x657E8600, 0x657D2C00, 0x657BD200, - 0x657A7800, 0x65791E00, 0x6577C400, - 0x65766A00, 0x65751000, 0x6573B600, - 0x65725C00, 0x65710200, 0x656FA800, - 0x656E4E00, 0x656CF400, 0x656B9A00, - 0x656A4000, 0x6568E600, 0x65678C00, - 0x65663200, 0x6564D800, 0x65637E00, - 0x65622400, 0x6560CA00, 0x655F7000, - 0x655E1600, 0x655CBC00, 0x655B6200, - 0x655A0800, 0x6558AE00, 0x65575400, - 0x6555FA00, 0x6554A000, 0x65534600, - 0x6551EC00, 0x65509200, 0x654F3800, - 0x654DDE00, 0x654C8400, 0x654B2A00, - 0x6549D000, 0x65487600, 0x65471C00, - 0x6545C200, 0x65446800, 0x65430E00, - 0x6541B400, 0x65405A00, 0x653F0000, - 0x653DA600, 0x653C4C00, 0x653AF200, - 0x65399800, 0x65383E00, 0x6536E400, - 0x65358A00, 0x65343000, 0x6532D600, - 0x65317C00, 0x65302200, 0x652EC800, - 0x652D6E00, 0x652C1400, 0x652ABA00, - 0x65296000, 0x65280600, 0x6526AC00, - 0x65255200, 0x6523F800, 0x65229E00, - 0x65214400, 0x651FEA00, 0x651E9000, - 0x651D3600, 0x651BDC00, 0x651A8200, - 0x65192800, 0x6517CE00, 0x65167400, - 0x65151A00, 0x6513C000, 0x65126600, - 0x65110C00, 0x650FB200, 0x650E5800, - 0x650CFE00, 0x650BA400, 0x650A4A00, - 0x6508F000, 0x65079600, 0x65063C00, - 0x6504E200, 0x65038800, 0x65022E00, - 0x6500D400, 0x64FF7A00, 0x64FE2000, - 0x64FCC600, 0x64FB6C00, 0x64FA1200, - 0x64F8B800, 0x64F75E00, 0x64F60400, - 0x64F4AA00, 0x64F35000, 0x64F1F600, - 0x64F09C00, 0x64EF4200, 0x64EDE800, - 0x64EC8E00, 0x64EB3400, 0x64E9DA00, - 0x64E88000, 0x64E72600, 0x64E5CC00, - 0x64E47200, 0x64E31800, 0x64E1BE00, - 0x64E06400, 0x64DF0A00, 0x64DDB000, - 0x64DC5600, 0x64DAFC00, 0x64D9A200, - 0x64D84800, 0x64D6EE00, 0x64D59400, - 0x64D43A00, 0x64D2E000, 0x64D18600, - 0x64D02C00, 0x64CED200, 0x64CD7800, - 0x64CC1E00, 0x64CAC400, 0x64C96A00, - 0x64C81000, 0x64C6B600, 0x64C55C00, - 0x64C40200, 0x64C2A800, 0x64C14E00, - 0x64BFF400, 0x64BE9A00, 0x64BD4000, - 0x64BBE600, 0x64BA8C00, 0x64B93200, - 0x64B7D800, 0x64B67E00, 0x64B52400, - 0x64B3CA00, 0x64B27000, 0x64B11600, - 0x64AFBC00, 0x64AE6200, 0x64AD0800, - 0x64ABAE00, 0x64AA5400, 0x64A8FA00, - 0x64A7A000, 0x64A64600, 0x64A4EC00, - 0x64A39200, 0x64A23800, 0x64A0DE00, - 0x649F8400, 0x649E2A00, 0x649CD000, - 0x649B7600, 0x649A1C00, 0x6498C200, - 0x64976800, 0x64960E00, 0x6494B400, - 0x64935A00, 0x64920000, 0x6490A600, - 0x648F4C00, 0x648DF200, 0x648C9800, - 0x648B3E00, 0x6489E400, 0x64888A00, - 0x64873000, 0x6485D600, 0x64847C00, - 0x64832200, 0x6481C800, 0x64806E00, - 0x647F1400, 0x647DBA00, 0x647C6000, - 0x647B0600, 0x6479AC00, 0x64785200, - 0x6476F800, 0x64759E00, 0x64744400, - 0x6472EA00, 0x64719000, 0x64703600, - 0x646EDC00, 0x646D8200, 0x646C2800, - 0x646ACE00, 0x64697400, 0x64681A00, - 0x6466C000, 0x64656600, 0x64640C00, - 0x6462B200, 0x64615800, 0x645FFE00, - 0x645EA400, 0x645D4A00, 0x645BF000, - 0x645A9600, 0x64593C00, 0x6457E200, - 0x64568800, 0x64552E00, 0x6453D400, - 0x64527A00, 0x64512000, 0x644FC600, - 0x644E6C00, 0x644D1200, 0x644BB800, - 0x644A5E00, 0x64490400, 0x6447AA00, - 0x64465000, 0x6444F600, 0x64439C00, - 0x64424200, 0x6440E800, 0x643F8E00, - 0x643E3400, 0x643CDA00, 0x643B8000, - 0x643A2600, 0x6438CC00, 0x64377200, - 0x64361800, 0x6434BE00, 0x64336400, - 0x64320A00, 0x6430B000, 0x642F5600, - 0x642DFC00, 0x642CA200, 0x642B4800, - 0x6429EE00, 0x64289400, 0x64273A00, - 0x6425E000, 0x64248600, 0x64232C00, - 0x6421D200, 0x64207800, 0x641F1E00, - 0x641DC400, 0x641C6A00, 0x641B1000, - 0x6419B600, 0x64185C00, 0x64170200, - 0x6415A800, 0x64144E00, 0x6412F400, - 0x64119A00, 0x64104000, 0x640EE600, - 0x640D8C00, 0x640C3200, 0x640AD800, - 0x64097E00, 0x64082400, 0x6406CA00, - 0x64057000, 0x64041600, 0x6402BC00, - 0x64016200, 0x64000800, 0x63FEAE00, - 0x63FD5400, 0x63FBFA00, 0x63FAA000, - 0x63F94600, 0x63F7EC00, 0x63F69200, - 0x63F53800, 0x63F3DE00, 0x63F28400, - 0x63F12A00, 0x63EFD000, 0x63EE7600, - 0x63ED1C00, 0x63EBC200, 0x63EA6800, - 0x63E90E00, 0x63E7B400, 0x63E65A00, - 0x63E50000, 0x63E3A600, 0x63E24C00, - 0x63E0F200, 0x63DF9800, 0x63DE3E00, - 0x63DCE400, 0x63DB8A00, 0x63DA3000, - 0x63D8D600, 0x63D77C00, 0x63D62200, - 0x63D4C800, 0x63D36E00, 0x63D21400, - 0x63D0BA00, 0x63CF6000, 0x63CE0600, - 0x63CCAC00, 0x63CB5200, 0x63C9F800, - 0x63C89E00, 0x63C74400, 0x63C5EA00, - 0x63C49000, 0x63C33600, 0x63C1DC00, - 0x63C08200, 0x63BF2800, 0x63BDCE00, - 0x63BC7400, 0x63BB1A00, 0x63B9C000, - 0x63B86600, 0x63B70C00, 0x63B5B200, - 0x63B45800, 0x63B2FE00, 0x63B1A400, - 0x63B04A00, 0x63AEF000, 0x63AD9600, - 0x63AC3C00, 0x63AAE200, 0x63A98800, - 0x63A82E00, 0x63A6D400, 0x63A57A00, - 0x63A42000, 0x63A2C600, 0x63A16C00, - 0x63A01200, 0x639EB800, 0x639D5E00, - 0x639C0400, 0x639AAA00, 0x63995000, - 0x6397F600, 0x63969C00, 0x63954200, - 0x6393E800, 0x63928E00, 0x63913400, - 0x638FDA00, 0x638E8000, 0x638D2600, - 0x638BCC00, 0x638A7200, 0x63891800, - 0x6387BE00, 0x63866400, 0x63850A00, - 0x6383B000, 0x63825600, 0x6380FC00, - 0x637FA200, 0x637E4800, 0x637CEE00, - 0x637B9400, 0x637A3A00, 0x6378E000, - 0x63778600, 0x63762C00, 0x6374D200, - 0x63737800, 0x63721E00, 0x6370C400, - 0x636F6A00, 0x636E1000, 0x636CB600, - 0x636B5C00, 0x636A0200, 0x6368A800, - 0x63674E00, 0x6365F400, 0x63649A00, - 0x63634000, 0x6361E600, 0x63608C00, - 0x635F3200, 0x635DD800, 0x635C7E00, - 0x635B2400, 0x6359CA00, 0x63587000, - 0x63571600, 0x6355BC00, 0x63546200, - 0x63530800, 0x6351AE00, 0x63505400, - 0x634EFA00, 0x634DA000, 0x634C4600, - 0x634AEC00, 0x63499200, 0x63483800, - 0x6346DE00, 0x63458400, 0x63442A00, - 0x6342D000, 0x63417600, 0x63401C00, - 0x633EC200, 0x633D6800, 0x633C0E00, - 0x633AB400, 0x63395A00, 0x63380000, - 0x6336A600, 0x63354C00, 0x6333F200, - 0x63329800, 0x63313E00, 0x632FE400, - 0x632E8A00, 0x632D3000, 0x632BD600, - 0x632A7C00, 0x63292200, 0x6327C800, - 0x63266E00, 0x63251400, 0x6323BA00, - 0x63226000, 0x63210600, 0x631FAC00, - 0x631E5200, 0x631CF800, 0x631B9E00, - 0x631A4400, 0x6318EA00, 0x63179000, - 0x63163600, 0x6314DC00, 0x63138200, - 0x63122800, 0x6310CE00, 0x630F7400, - 0x630E1A00, 0x630CC000, 0x630B6600, - 0x630A0C00, 0x6308B200, 0x63075800, - 0x6305FE00, 0x6304A400, 0x63034A00, - 0x6301F000, 0x63009600, 0x62FF3C00, - 0x62FDE200, 0x62FC8800, 0x62FB2E00, - 0x62F9D400, 0x62F87A00, 0x62F72000, - 0x62F5C600, 0x62F46C00, 0x62F31200, - 0x62F1B800, 0x62F05E00, 0x62EF0400, - 0x62EDAA00, 0x62EC5000, 0x62EAF600, - 0x62E99C00, 0x62E84200, 0x62E6E800, - 0x62E58E00, 0x62E43400, 0x62E2DA00, - 0x62E18000, 0x62E02600, 0x62DECC00, - 0x62DD7200, 0x62DC1800, 0x62DABE00, - 0x62D96400, 0x62D80A00, 0x62D6B000, - 0x62D55600, 0x62D3FC00, 0x62D2A200, - 0x62D14800, 0x62CFEE00, 0x62CE9400, - 0x62CD3A00, 0x62CBE000, 0x62CA8600, - 0x62C92C00, 0x62C7D200, 0x62C67800, - 0x62C51E00, 0x62C3C400, 0x62C26A00, - 0x62C11000, 0x62BFB600, 0x62BE5C00, - 0x62BD0200, 0x62BBA800, 0x62BA4E00, - 0x62B8F400, 0x62B79A00, 0x62B64000, - 0x62B4E600, 0x62B38C00, 0x62B23200, - 0x62B0D800, 0x62AF7E00, 0x62AE2400, - 0x62ACCA00, 0x62AB7000, 0x62AA1600, - 0x62A8BC00, 0x62A76200, 0x62A60800, - 0x62A4AE00, 0x62A35400, 0x62A1FA00, - 0x62A0A000, 0x629F4600, 0x629DEC00, - 0x629C9200, 0x629B3800, 0x6299DE00, - 0x62988400, 0x62972A00, 0x6295D000, - 0x62947600, 0x62931C00, 0x6291C200, - 0x62906800, 0x628F0E00, 0x628DB400, - 0x628C5A00, 0x628B0000, 0x6289A600, - 0x62884C00, 0x6286F200, 0x62859800, - 0x62843E00, 0x6282E400, 0x62818A00, - 0x62803000, 0x627ED600, 0x627D7C00, - 0x627C2200, 0x627AC800, 0x62796E00, - 0x62781400, 0x6276BA00, 0x62756000, - 0x62740600, 0x6272AC00, 0x62715200, - 0x626FF800, 0x626E9E00, 0x626D4400, - 0x626BEA00, 0x626A9000, 0x62693600, - 0x6267DC00, 0x62668200, 0x62652800, - 0x6263CE00, 0x62627400, 0x62611A00, - 0x625FC000, 0x625E6600, 0x625D0C00, - 0x625BB200, 0x625A5800, 0x6258FE00, - 0x6257A400, 0x62564A00, 0x6254F000, - 0x62539600, 0x62523C00, 0x6250E200, - 0x624F8800, 0x624E2E00, 0x624CD400, - 0x624B7A00, 0x624A2000, 0x6248C600, - 0x62476C00, 0x62461200, 0x6244B800, - 0x62435E00, 0x62420400, 0x6240AA00, - 0x623F5000, 0x623DF600, 0x623C9C00, - 0x623B4200, 0x6239E800, 0x62388E00, - 0x62373400, 0x6235DA00, 0x62348000, - 0x62332600, 0x6231CC00, 0x62307200, - 0x622F1800, 0x622DBE00, 0x622C6400, - 0x622B0A00, 0x6229B000, 0x62285600, - 0x6226FC00, 0x6225A200, 0x62244800, - 0x6222EE00, 0x62219400, 0x62203A00, - 0x621EE000, 0x621D8600, 0x621C2C00, - 0x621AD200, 0x62197800, 0x62181E00, - 0x6216C400, 0x62156A00, 0x62141000, - 0x6212B600, 0x62115C00, 0x62100200, - 0x620EA800, 0x620D4E00, 0x620BF400, - 0x620A9A00, 0x62094000, 0x6207E600, - 0x62068C00, 0x62053200, 0x6203D800, - 0x62027E00, 0x62012400, 0x61FFCA00, - 0x61FE7000, 0x61FD1600, 0x61FBBC00, - 0x61FA6200, 0x61F90800, 0x61F7AE00, - 0x61F65400, 0x61F4FA00, 0x61F3A000, - 0x61F24600, 0x61F0EC00, 0x61EF9200, - 0x61EE3800, 0x61ECDE00, 0x61EB8400, - 0x61EA2A00, 0x61E8D000, 0x61E77600, - 0x61E61C00, 0x61E4C200, 0x61E36800, - 0x61E20E00, 0x61E0B400, 0x61DF5A00, - 0x61DE0000, 0x61DCA600, 0x61DB4C00, - 0x61D9F200, 0x61D89800, 0x61D73E00, - 0x61D5E400, 0x61D48A00, 0x61D33000, - 0x61D1D600, 0x61D07C00, 0x61CF2200, - 0x61CDC800, 0x61CC6E00, 0x61CB1400, - 0x61C9BA00, 0x61C86000, 0x61C70600, - 0x61C5AC00, 0x61C45200, 0x61C2F800, - 0x61C19E00, 0x61C04400, 0x61BEEA00, - 0x61BD9000, 0x61BC3600, 0x61BADC00, - 0x61B98200, 0x61B82800, 0x61B6CE00, - 0x61B57400, 0x61B41A00, 0x61B2C000, - 0x61B16600, 0x61B00C00, 0x61AEB200, - 0x61AD5800, 0x61ABFE00, 0x61AAA400, - 0x61A94A00, 0x61A7F000, 0x61A69600, - 0x61A53C00, 0x61A3E200, 0x61A28800, - 0x61A12E00, 0x619FD400, 0x619E7A00, - 0x619D2000, 0x619BC600, 0x619A6C00, - 0x61991200, 0x6197B800, 0x61965E00, - 0x61950400, 0x6193AA00, 0x61925000, - 0x6190F600, 0x618F9C00, 0x618E4200, - 0x618CE800, 0x618B8E00, 0x618A3400, - 0x6188DA00, 0x61878000, 0x61862600, - 0x6184CC00, 0x61837200, 0x61821800, - 0x6180BE00, 0x617F6400, 0x617E0A00, - 0x617CB000, 0x617B5600, 0x6179FC00, - 0x6178A200, 0x61774800, 0x6175EE00, - 0x61749400, 0x61733A00, 0x6171E000, - 0x61708600, 0x616F2C00, 0x616DD200, - 0x616C7800, 0x616B1E00, 0x6169C400, - 0x61686A00, 0x61671000, 0x6165B600, - 0x61645C00, 0x61630200, 0x6161A800, - 0x61604E00, 0x615EF400, 0x615D9A00, - 0x615C4000, 0x615AE600, 0x61598C00, - 0x61583200, 0x6156D800, 0x61557E00, - 0x61542400, 0x6152CA00, 0x61517000, - 0x61501600, 0x614EBC00, 0x614D6200, - 0x614C0800, 0x614AAE00, 0x61495400, - 0x6147FA00, 0x6146A000, 0x61454600, - 0x6143EC00, 0x61429200, 0x61413800, - 0x613FDE00, 0x613E8400, 0x613D2A00, - 0x613BD000, 0x613A7600, 0x61391C00, - 0x6137C200, 0x61366800, 0x61350E00, - 0x6133B400, 0x61325A00, 0x61310000, - 0x612FA600, 0x612E4C00, 0x612CF200, - 0x612B9800, 0x612A3E00, 0x6128E400, - 0x61278A00, 0x61263000, 0x6124D600, - 0x61237C00, 0x61222200, 0x6120C800, - 0x611F6E00, 0x611E1400, 0x611CBA00, - 0x611B6000, 0x611A0600, 0x6118AC00, - 0x61175200, 0x6115F800, 0x61149E00, - 0x61134400, 0x6111EA00, 0x61109000, - 0x610F3600, 0x610DDC00, 0x610C8200, - 0x610B2800, 0x6109CE00, 0x61087400, - 0x61071A00, 0x6105C000, 0x61046600, - 0x61030C00, 0x6101B200, 0x61005800, - 0x60FEFE00, 0x60FDA400, 0x60FC4A00, - 0x60FAF000, 0x60F99600, 0x60F83C00, - 0x60F6E200, 0x60F58800, 0x60F42E00, - 0x60F2D400, 0x60F17A00, 0x60F02000, - 0x60EEC600, 0x60ED6C00, 0x60EC1200, - 0x60EAB800, 0x60E95E00, 0x60E80400, - 0x60E6AA00, 0x60E55000, 0x60E3F600, - 0x60E29C00, 0x60E14200, 0x60DFE800, - 0x60DE8E00, 0x60DD3400, 0x60DBDA00, - 0x60DA8000, 0x60D92600, 0x60D7CC00, - 0x60D67200, 0x60D51800, 0x60D3BE00, - 0x60D26400, 0x60D10A00, 0x60CFB000, - 0x60CE5600, 0x60CCFC00, 0x60CBA200, - 0x60CA4800, 0x60C8EE00, 0x60C79400, - 0x60C63A00, 0x60C4E000, 0x60C38600, - 0x60C22C00, 0x60C0D200, 0x60BF7800, - 0x60BE1E00, 0x60BCC400, 0x60BB6A00, - 0x60BA1000, 0x60B8B600, 0x60B75C00, - 0x60B60200, 0x60B4A800, 0x60B34E00, - 0x60B1F400, 0x60B09A00, 0x60AF4000, - 0x60ADE600, 0x60AC8C00, 0x60AB3200, - 0x60A9D800, 0x60A87E00, 0x60A72400, - 0x60A5CA00, 0x60A47000, 0x60A31600, - 0x60A1BC00, 0x60A06200, 0x609F0800, - 0x609DAE00, 0x609C5400, 0x609AFA00, - 0x6099A000, 0x60984600, 0x6096EC00, - 0x60959200, 0x60943800, 0x6092DE00, - 0x60918400, 0x60902A00, 0x608ED000, - 0x608D7600, 0x608C1C00, 0x608AC200, - 0x60896800, 0x60880E00, 0x6086B400, - 0x60855A00, 0x60840000, 0x6082A600, - 0x60814C00, 0x607FF200, 0x607E9800, - 0x607D3E00, 0x607BE400, 0x607A8A00, - 0x60793000, 0x6077D600, 0x60767C00, - 0x60752200, 0x6073C800, 0x60726E00, - 0x60711400, 0x606FBA00, 0x606E6000, - 0x606D0600, 0x606BAC00, 0x606A5200, - 0x6068F800, 0x60679E00, 0x60664400, - 0x6064EA00, 0x60639000, 0x60623600, - 0x6060DC00, 0x605F8200, 0x605E2800, - 0x605CCE00, 0x605B7400, 0x605A1A00, - 0x6058C000, 0x60576600, 0x60560C00, - 0x6054B200, 0x60535800, 0x6051FE00, - 0x6050A400, 0x604F4A00, 0x604DF000, - 0x604C9600, 0x604B3C00, 0x6049E200, - 0x60488800, 0x60472E00, 0x6045D400, - 0x60447A00, 0x60432000, 0x6041C600, - 0x60406C00, 0x603F1200, 0x603DB800, - 0x603C5E00, 0x603B0400, 0x6039AA00, - 0x60385000, 0x6036F600, 0x60359C00, - 0x60344200, 0x6032E800, 0x60318E00, - 0x60303400, 0x602EDA00, 0x602D8000, - 0x602C2600, 0x602ACC00, 0x60297200, - 0x60281800, 0x6026BE00, 0x60256400, - 0x60240A00, 0x6022B000, 0x60215600, - 0x601FFC00, 0x601EA200, 0x601D4800, - 0x601BEE00, 0x601A9400, 0x60193A00, - 0x6017E000, 0x60168600, 0x60152C00, - 0x6013D200, 0x60127800, 0x60111E00, - 0x600FC400, 0x600E6A00, 0x600D1000, - 0x600BB600, 0x600A5C00, 0x60090200, - 0x6007A800, 0x60064E00, 0x6004F400, - 0x60039A00, 0x60024000, 0x6000E600, - 0x5FFF8C00, 0x5FFE3200, 0x5FFCD800, - 0x5FFB7E00, 0x5FFA2400, 0x5FF8CA00, - 0x5FF77000, 0x5FF61600, 0x5FF4BC00, - 0x5FF36200, 0x5FF20800, 0x5FF0AE00, - 0x5FEF5400, 0x5FEDFA00, 0x5FECA000, - 0x5FEB4600, 0x5FE9EC00, 0x5FE89200, - 0x5FE73800, 0x5FE5DE00, 0x5FE48400, - 0x5FE32A00, 0x5FE1D000, 0x5FE07600, - 0x5FDF1C00, 0x5FDDC200, 0x5FDC6800, - 0x5FDB0E00, 0x5FD9B400, 0x5FD85A00, - 0x5FD70000, 0x5FD5A600, 0x5FD44C00, - 0x5FD2F200, 0x5FD19800, 0x5FD03E00, - 0x5FCEE400, 0x5FCD8A00, 0x5FCC3000, - 0x5FCAD600, 0x5FC97C00, 0x5FC82200, - 0x5FC6C800, 0x5FC56E00, 0x5FC41400, - 0x5FC2BA00, 0x5FC16000, 0x5FC00600, - 0x5FBEAC00, 0x5FBD5200, 0x5FBBF800, - 0x5FBA9E00, 0x5FB94400, 0x5FB7EA00, - 0x5FB69000, 0x5FB53600, 0x5FB3DC00, - 0x5FB28200, 0x5FB12800, 0x5FAFCE00, - 0x5FAE7400, 0x5FAD1A00, 0x5FABC000, - 0x5FAA6600, 0x5FA90C00, 0x5FA7B200, - 0x5FA65800, 0x5FA4FE00, 0x5FA3A400, - 0x5FA24A00, 0x5FA0F000, 0x5F9F9600, - 0x5F9E3C00, 0x5F9CE200, 0x5F9B8800, - 0x5F9A2E00, 0x5F98D400, 0x5F977A00, - 0x5F962000, 0x5F94C600, 0x5F936C00, - 0x5F921200, 0x5F90B800, 0x5F8F5E00, - 0x5F8E0400, 0x5F8CAA00, 0x5F8B5000, - 0x5F89F600, 0x5F889C00, 0x5F874200, - 0x5F85E800, 0x5F848E00, 0x5F833400, - 0x5F81DA00, 0x5F808000, 0x5F7F2600, - 0x5F7DCC00, 0x5F7C7200, 0x5F7B1800, - 0x5F79BE00, 0x5F786400, 0x5F770A00, - 0x5F75B000, 0x5F745600, 0x5F72FC00, - 0x5F71A200, 0x5F704800, 0x5F6EEE00, - 0x5F6D9400, 0x5F6C3A00, 0x5F6AE000, - 0x5F698600, 0x5F682C00, 0x5F66D200, - 0x5F657800, 0x5F641E00, 0x5F62C400, - 0x5F616A00, 0x5F601000, 0x5F5EB600, - 0x5F5D5C00, 0x5F5C0200, 0x5F5AA800, - 0x5F594E00, 0x5F57F400, 0x5F569A00, - 0x5F554000, 0x5F53E600, 0x5F528C00, - 0x5F513200, 0x5F4FD800, 0x5F4E7E00, - 0x5F4D2400, 0x5F4BCA00, 0x5F4A7000, - 0x5F491600, 0x5F47BC00, 0x5F466200, - 0x5F450800, 0x5F43AE00, 0x5F425400, - 0x5F40FA00, 0x5F3FA000, 0x5F3E4600, - 0x5F3CEC00, 0x5F3B9200, 0x5F3A3800, - 0x5F38DE00, 0x5F378400, 0x5F362A00, - 0x5F34D000, 0x5F337600, 0x5F321C00, - 0x5F30C200, 0x5F2F6800, 0x5F2E0E00, - 0x5F2CB400, 0x5F2B5A00, 0x5F2E0000, - 0x5F2CC340, 0x5F2B8680, 0x5F2A49C0, - 0x5F290D00, 0x5F27D040, 0x5F269380, - 0x5F2556C0, 0x5F241A00, 0x5F22DD40, - 0x5F21A080, 0x5F2063C0, 0x5F1F2700, - 0x5F1DEA40, 0x5F1CAD80, 0x5F1B70C0, - 0x5F1A3400, 0x5F18F740, 0x5F17BA80, - 0x5F167DC0, 0x5F154100, 0x5F140440, - 0x5F12C780, 0x5F118AC0, 0x5F104E00, - 0x5F0F1140, 0x5F0DD480, 0x5F0C97C0, - 0x5F0B5B00, 0x5F0A1E40, 0x5F08E180, - 0x5F07A4C0, 0x5F066800, 0x5F052B40, - 0x5F03EE80, 0x5F02B1C0, 0x5F017500, - 0x5F003840, 0x5EFEFB80, 0x5EFDBEC0, - 0x5EFC8200, 0x5EFB4540, 0x5EFA0880, - 0x5EF8CBC0, 0x5EF78F00, 0x5EF65240, - 0x5EF51580, 0x5EF3D8C0, 0x5EF29C00, - 0x5EF15F40, 0x5EF02280, 0x5EEEE5C0, - 0x5EEDA900, 0x5EEC6C40, 0x5EEB2F80, - 0x5EE9F2C0, 0x5EE8B600, 0x5EE77940, - 0x5EE63C80, 0x5EE4FFC0, 0x5EE3C300, - 0x5EE28640, 0x5EE14980, 0x5EE00CC0, - 0x5EDED000, 0x5EDD9340, 0x5EDC5680, - 0x5EDB19C0, 0x5ED9DD00, 0x5ED8A040, - 0x5ED76380, 0x5ED626C0, 0x5ED4EA00, - 0x5ED3AD40, 0x5ED27080, 0x5ED133C0, - 0x5ECFF700, 0x5ECEBA40, 0x5ECD7D80, - 0x5ECC40C0, 0x5ECB0400, 0x5EC9C740, - 0x5EC88A80, 0x5EC74DC0, 0x5EC61100, - 0x5EC4D440, 0x5EC39780, 0x5EC25AC0, - 0x5EC11E00, 0x5EBFE140, 0x5EBEA480, - 0x5EBD67C0, 0x5EBC2B00, 0x5EBAEE40, - 0x5EB9B180, 0x5EB874C0, 0x5EB73800, - 0x5EB5FB40, 0x5EB4BE80, 0x5EB381C0, - 0x5EB24500, 0x5EB10840, 0x5EAFCB80, - 0x5EAE8EC0, 0x5EAD5200, 0x5EAC1540, - 0x5EAAD880, 0x5EA99BC0, 0x5EA85F00, - 0x5EA72240, 0x5EA5E580, 0x5EA4A8C0, - 0x5EA36C00, 0x5EA22F40, 0x5EA0F280, - 0x5E9FB5C0, 0x5E9E7900, 0x5E9D3C40, - 0x5E9BFF80, 0x5E9AC2C0, 0x5E998600, - 0x5E984940, 0x5E970C80, 0x5E95CFC0, - 0x5E949300, 0x5E935640, 0x5E921980, - 0x5E90DCC0, 0x5E8FA000, 0x5E8E6340, - 0x5E8D2680, 0x5E8BE9C0, 0x5E8AAD00, - 0x5E897040, 0x5E883380, 0x5E86F6C0, - 0x5E85BA00, 0x5E847D40, 0x5E834080, - 0x5E8203C0, 0x5E80C700, 0x5E7F8A40, - 0x5E7E4D80, 0x5E7D10C0, 0x5E7BD400, - 0x5E7A9740, 0x5E795A80, 0x5E781DC0, - 0x5E76E100, 0x5E75A440, 0x5E746780, - 0x5E732AC0, 0x5E71EE00, 0x5E70B140, - 0x5E6F7480, 0x5E6E37C0, 0x5E6CFB00, - 0x5E6BBE40, 0x5E6A8180, 0x5E6944C0, - 0x5E680800, 0x5E66CB40, 0x5E658E80, - 0x5E6451C0, 0x5E631500, 0x5E61D840, - 0x5E609B80, 0x5E5F5EC0, 0x5E5E2200, - 0x5E5CE540, 0x5E5BA880, 0x5E5A6BC0, - 0x5E592F00, 0x5E57F240, 0x5E56B580, - 0x5E5578C0, 0x5E543C00, 0x5E52FF40, - 0x5E51C280, 0x5E5085C0, 0x5E4F4900, - 0x5E4E0C40, 0x5E4CCF80, 0x5E4B92C0, - 0x5E4A5600, 0x5E491940, 0x5E47DC80, - 0x5E469FC0, 0x5E456300, 0x5E442640, - 0x5E42E980, 0x5E41ACC0, 0x5E407000, - 0x5E3F3340, 0x5E3DF680, 0x5E3CB9C0, - 0x5E3B7D00, 0x5E3A4040, 0x5E390380, - 0x5E37C6C0, 0x5E368A00, 0x5E354D40, - 0x5E341080, 0x5E32D3C0, 0x5E319700, - 0x5E305A40, 0x5E2F1D80, 0x5E2DE0C0, - 0x5E2CA400, 0x5E2B6740, 0x5E2A2A80, - 0x5E28EDC0, 0x5E27B100, 0x5E267440, - 0x5E253780, 0x5E23FAC0, 0x5E22BE00, - 0x5E218140, 0x5E204480, 0x5E1F07C0, - 0x5E1DCB00, 0x5E1C8E40, 0x5E1B5180, - 0x5E1A14C0, 0x5E18D800, 0x5E179B40, - 0x5E165E80, 0x5E1521C0, 0x5E13E500, - 0x5E12A840, 0x5E116B80, 0x5E102EC0, - 0x5E0EF200, 0x5E0DB540, 0x5E0C7880, - 0x5E0B3BC0, 0x5E09FF00, 0x5E08C240, - 0x5E078580, 0x5E0648C0, 0x5E050C00, - 0x5E03CF40, 0x5E029280, 0x5E0155C0, - 0x5E001900, 0x5DFEDC40, 0x5DFD9F80, - 0x5DFC62C0, 0x5DFB2600, 0x5DF9E940, - 0x5DF8AC80, 0x5DF76FC0, 0x5DF63300, - 0x5DF4F640, 0x5DF3B980, 0x5DF27CC0, - 0x5DF14000, 0x5DF00340, 0x5DEEC680, - 0x5DED89C0, 0x5DEC4D00, 0x5DEB1040, - 0x5DE9D380, 0x5DE896C0, 0x5DE75A00, - 0x5DE61D40, 0x5DE4E080, 0x5DE3A3C0, - 0x5DE26700, 0x5DE12A40, 0x5DDFED80, - 0x5DDEB0C0, 0x5DDD7400, 0x5DDC3740, - 0x5DDAFA80, 0x5DD9BDC0, 0x5DD88100, - 0x5DD74440, 0x5DD60780, 0x5DD4CAC0, - 0x5DD38E00, 0x5DD25140, 0x5DD11480, - 0x5DCFD7C0, 0x5DCE9B00, 0x5DCD5E40, - 0x5DCC2180, 0x5DCAE4C0, 0x5DC9A800, - 0x5DC86B40, 0x5DC72E80, 0x5DC5F1C0, - 0x5DC4B500, 0x5DC37840, 0x5DC23B80, - 0x5DC0FEC0, 0x5DBFC200, 0x5DBE8540, - 0x5DBD4880, 0x5DBC0BC0, 0x5DBACF00, - 0x5DB99240, 0x5DB85580, 0x5DB718C0, - 0x5DB5DC00, 0x5DB49F40, 0x5DB36280, - 0x5DB225C0, 0x5DB0E900, 0x5DAFAC40, - 0x5DAE6F80, 0x5DAD32C0, 0x5DABF600, - 0x5DAAB940, 0x5DA97C80, 0x5DA83FC0, - 0x5DA70300, 0x5DA5C640, 0x5DA48980, - 0x5DA34CC0, 0x5DA21000, 0x5DA0D340, - 0x5D9F9680, 0x5D9E59C0, 0x5D9D1D00, - 0x5D9BE040, 0x5D9AA380, 0x5D9966C0, - 0x5D982A00, 0x5D96ED40, 0x5D95B080, - 0x5D9473C0, 0x5D933700, 0x5D91FA40, - 0x5D90BD80, 0x5D8F80C0, 0x5D8E4400, - 0x5D8D0740, 0x5D8BCA80, 0x5D8A8DC0, - 0x5D895100, 0x5D881440, 0x5D86D780, - 0x5D859AC0, 0x5D845E00, 0x5D832140, - 0x5D81E480, 0x5D80A7C0, 0x5D7F6B00, - 0x5D7E2E40, 0x5D7CF180, 0x5D7BB4C0, - 0x5D7A7800, 0x5D793B40, 0x5D77FE80, - 0x5D76C1C0, 0x5D758500, 0x5D744840, - 0x5D730B80, 0x5D71CEC0, 0x5D709200, - 0x5D6F5540, 0x5D6E1880, 0x5D6CDBC0, - 0x5D6B9F00, 0x5D6A6240, 0x5D692580, - 0x5D67E8C0, 0x5D66AC00, 0x5D656F40, - 0x5D643280, 0x5D62F5C0, 0x5D61B900, - 0x5D607C40, 0x5D5F3F80, 0x5D5E02C0, - 0x5D5CC600, 0x5D5B8940, 0x5D5A4C80, - 0x5D590FC0, 0x5D57D300, 0x5D569640, - 0x5D555980, 0x5D541CC0, 0x5D52E000, - 0x5D51A340, 0x5D506680, 0x5D4F29C0, - 0x5D4DED00, 0x5D4CB040, 0x5D4B7380, - 0x5D4A36C0, 0x5D48FA00, 0x5D47BD40, - 0x5D468080, 0x5D4543C0, 0x5D440700, - 0x5D42CA40, 0x5D418D80, 0x5D4050C0, - 0x5D3F1400, 0x5D3DD740, 0x5D3C9A80, - 0x5D3B5DC0, 0x5D3A2100, 0x5D38E440, - 0x5D37A780, 0x5D366AC0, 0x5D352E00, - 0x5D33F140, 0x5D32B480, 0x5D3177C0, - 0x5D303B00, 0x5D2EFE40, 0x5D2DC180, - 0x5D2C84C0, 0x5D2B4800, 0x5D2A0B40, - 0x5D28CE80, 0x5D2791C0, 0x5D265500, - 0x5D251840, 0x5D23DB80, 0x5D229EC0, - 0x5D216200, 0x5D202540, 0x5D1EE880, - 0x5D1DABC0, 0x5D1C6F00, 0x5D1B3240, - 0x5D19F580, 0x5D18B8C0, 0x5D177C00, - 0x5D163F40, 0x5D150280, 0x5D13C5C0, - 0x5D128900, 0x5D114C40, 0x5D100F80, - 0x5D0ED2C0, 0x5D0D9600, 0x5D0C5940, - 0x5D0B1C80, 0x5D09DFC0, 0x5D08A300, - 0x5D076640, 0x5D062980, 0x5D04ECC0, - 0x5D03B000, 0x5D027340, 0x5D013680, - 0x5CFFF9C0, 0x5CFEBD00, 0x5CFD8040, - 0x5CFC4380, 0x5CFB06C0, 0x5CF9CA00, - 0x5CF88D40, 0x5CF75080, 0x5CF613C0, - 0x5CF4D700, 0x5CF39A40, 0x5CF25D80, - 0x5CF120C0, 0x5CEFE400, 0x5CEEA740, - 0x5CED6A80, 0x5CEC2DC0, 0x5CEAF100, - 0x5CE9B440, 0x5CE87780, 0x5CE73AC0, - 0x5CE5FE00, 0x5CE4C140, 0x5CE38480, - 0x5CE247C0, 0x5CE10B00, 0x5CDFCE40, - 0x5CDE9180, 0x5CDD54C0, 0x5CDC1800, - 0x5CDADB40, 0x5CD99E80, 0x5CD861C0, - 0x5CD72500, 0x5CD5E840, 0x5CD4AB80, - 0x5CD36EC0, 0x5CD23200, 0x5CD0F540, - 0x5CCFB880, 0x5CCE7BC0, 0x5CCD3F00, - 0x5CCC0240, 0x5CCAC580, 0x5CC988C0, - 0x5CC84C00, 0x5CC70F40, 0x5CC5D280, - 0x5CC495C0, 0x5CC35900, 0x5CC21C40, - 0x5CC0DF80, 0x5CBFA2C0, 0x5CBE6600, - 0x5CBD2940, 0x5CBBEC80, 0x5CBAAFC0, - 0x5CB97300, 0x5CB83640, 0x5CB6F980, - 0x5CB5BCC0, 0x5CB48000, 0x5CB34340, - 0x5CB20680, 0x5CB0C9C0, 0x5CAF8D00, - 0x5CAE5040, 0x5CAD1380, 0x5CABD6C0, - 0x5CAA9A00, 0x5CA95D40, 0x5CA82080, - 0x5CA6E3C0, 0x5CA5A700, 0x5CA46A40, - 0x5CA32D80, 0x5CA1F0C0, 0x5CA0B400, - 0x5C9F7740, 0x5C9E3A80, 0x5C9CFDC0, - 0x5C9BC100, 0x5C9A8440, 0x5C994780, - 0x5C980AC0, 0x5C96CE00, 0x5C959140, - 0x5C945480, 0x5C9317C0, 0x5C91DB00, - 0x5C909E40, 0x5C8F6180, 0x5C8E24C0, - 0x5C8CE800, 0x5C8BAB40, 0x5C8A6E80, - 0x5C8931C0, 0x5C87F500, 0x5C86B840, - 0x5C857B80, 0x5C843EC0, 0x5C830200, - 0x5C81C540, 0x5C808880, 0x5C7F4BC0, - 0x5C7E0F00, 0x5C7CD240, 0x5C7B9580, - 0x5C7A58C0, 0x5C791C00, 0x5C77DF40, - 0x5C76A280, 0x5C7565C0, 0x5C742900, - 0x5C72EC40, 0x5C71AF80, 0x5C7072C0, - 0x5C6F3600, 0x5C6DF940, 0x5C6CBC80, - 0x5C6B7FC0, 0x5C6A4300, 0x5C690640, - 0x5C67C980, 0x5C668CC0, 0x5C655000, - 0x5C641340, 0x5C62D680, 0x5C6199C0, - 0x5C605D00, 0x5C5F2040, 0x5C5DE380, - 0x5C5CA6C0, 0x5C5B6A00, 0x5C5A2D40, - 0x5C58F080, 0x5C57B3C0, 0x5C567700, - 0x5C553A40, 0x5C53FD80, 0x5C52C0C0, - 0x5C518400, 0x5C504740, 0x5C4F0A80, - 0x5C4DCDC0, 0x5C4C9100, 0x5C4B5440, - 0x5C4A1780, 0x5C48DAC0, 0x5C479E00, - 0x5C466140, 0x5C452480, 0x5C43E7C0, - 0x5C42AB00, 0x5C416E40, 0x5C403180, - 0x5C3EF4C0, 0x5C3DB800, 0x5C3C7B40, - 0x5C3B3E80, 0x5C3A01C0, 0x5C38C500, - 0x5C378840, 0x5C364B80, 0x5C350EC0, - 0x5C33D200, 0x5C329540, 0x5C315880, - 0x5C301BC0, 0x5C2EDF00, 0x5C2DA240, - 0x5C2C6580, 0x5C2B28C0, 0x5C29EC00, - 0x5C28AF40, 0x5C277280, 0x5C2635C0, - 0x5C24F900, 0x5C23BC40, 0x5C227F80, - 0x5C2142C0, 0x5C200600, 0x5C1EC940, - 0x5C1D8C80, 0x5C1C4FC0, 0x5C1B1300, - 0x5C19D640, 0x5C189980, 0x5C175CC0, - 0x5C162000, 0x5C14E340, 0x5C13A680, - 0x5C1269C0, 0x5C112D00, 0x5C0FF040, - 0x5C0EB380, 0x5C0D76C0, 0x5C0C3A00, - 0x5C0AFD40, 0x5C09C080, 0x5C0883C0, - 0x5C074700, 0x5C060A40, 0x5C04CD80, - 0x5C0390C0, 0x5C025400, 0x5C011740, - 0x5BFFDA80, 0x5BFE9DC0, 0x5BFD6100, - 0x5BFC2440, 0x5BFAE780, 0x5BF9AAC0, - 0x5BF86E00, 0x5BF73140, 0x5BF5F480, - 0x5BF4B7C0, 0x5BF37B00, 0x5BF23E40, - 0x5BF10180, 0x5BEFC4C0, 0x5BEE8800, - 0x5BED4B40, 0x5BEC0E80, 0x5BEAD1C0, - 0x5BE99500, 0x5BE85840, 0x5BE71B80, - 0x5BE5DEC0, 0x5BE4A200, 0x5BE36540, - 0x5BE22880, 0x5BE0EBC0, 0x5BDFAF00, - 0x5BDE7240, 0x5BDD3580, 0x5BDBF8C0, - 0x5BDABC00, 0x5BD97F40, 0x5BD84280, - 0x5BD705C0, 0x5BD5C900, 0x5BD48C40, - 0x5BD34F80, 0x5BD212C0, 0x5BD0D600, - 0x5BCF9940, 0x5BCE5C80, 0x5BCD1FC0, - 0x5BCBE300, 0x5BCAA640, 0x5BC96980, - 0x5BC82CC0, 0x5BC6F000, 0x5BC5B340, - 0x5BC47680, 0x5BC339C0, 0x5BC1FD00, - 0x5BC0C040, 0x5BBF8380, 0x5BBE46C0, - 0x5BBD0A00, 0x5BBBCD40, 0x5BBA9080, - 0x5BB953C0, 0x5BB81700, 0x5BB6DA40, - 0x5BB59D80, 0x5BB460C0, 0x5BB32400, - 0x5BB1E740, 0x5BB0AA80, 0x5BAF6DC0, - 0x5BAE3100, 0x5BACF440, 0x5BABB780, - 0x5BAA7AC0, 0x5BA93E00, 0x5BA80140, - 0x5BA6C480, 0x5BA587C0, 0x5BA44B00, - 0x5BA30E40, 0x5BA1D180, 0x5BA094C0, - 0x5B9F5800, 0x5B9E1B40, 0x5B9CDE80, - 0x5B9BA1C0, 0x5B9A6500, 0x5B992840, - 0x5B97EB80, 0x5B96AEC0, 0x5B957200, - 0x5B943540, 0x5B92F880, 0x5B91BBC0, - 0x5B907F00, 0x5B8F4240, 0x5B8E0580, - 0x5B8CC8C0, 0x5B8B8C00, 0x5B8A4F40, - 0x5B891280, 0x5B87D5C0, 0x5B869900, - 0x5B855C40, 0x5B841F80, 0x5B82E2C0, - 0x5B81A600, 0x5B806940, 0x5B7F2C80, - 0x5B7DEFC0, 0x5B7CB300, 0x5B7B7640, - 0x5B7A3980, 0x5B78FCC0, 0x5B77C000, - 0x5B768340, 0x5B754680, 0x5B7409C0, - 0x5B72CD00, 0x5B719040, 0x5B705380, - 0x5B6F16C0, 0x5B6DDA00, 0x5B6C9D40, - 0x5B6B6080, 0x5B6A23C0, 0x5B68E700, - 0x5B67AA40, 0x5B666D80, 0x5B6530C0, - 0x5B63F400, 0x5B62B740, 0x5B617A80, - 0x5B603DC0, 0x5B5F0100, 0x5B5DC440, - 0x5B5C8780, 0x5B5B4AC0, 0x5B5A0E00, - 0x5B58D140, 0x5B579480, 0x5B5657C0, - 0x5B551B00, 0x5B53DE40, 0x5B52A180, - 0x5B5164C0, 0x5B502800, 0x5B4EEB40, - 0x5B4DAE80, 0x5B4C71C0, 0x5B4B3500, - 0x5B49F840, 0x5B48BB80, 0x5B477EC0, - 0x5B464200, 0x5B450540, 0x5B43C880, - 0x5B428BC0, 0x5B414F00, 0x5B401240, - 0x5B3ED580, 0x5B3D98C0, 0x5B3C5C00, - 0x5B3B1F40, 0x5B39E280, 0x5B38A5C0, - 0x5B376900, 0x5B362C40, 0x5B34EF80, - 0x5B33B2C0, 0x5B327600, 0x5B313940, - 0x5B2FFC80, 0x5B2EBFC0, 0x5B2D8300, - 0x5B2C4640, 0x5B2B0980, 0x5B29CCC0, - 0x5B289000, 0x5B275340, 0x5B261680, - 0x5B24D9C0, 0x5B239D00, 0x5B226040, - 0x5B212380, 0x5B1FE6C0, 0x5B1EAA00, - 0x5B1D6D40, 0x5B1C3080, 0x5B1AF3C0, - 0x5B19B700, 0x5B187A40, 0x5B173D80, - 0x5B1600C0, 0x5B14C400, 0x5B138740, - 0x5B124A80, 0x5B110DC0, 0x5B0FD100, - 0x5B0E9440, 0x5B0D5780, 0x5B0C1AC0, - 0x5B0ADE00, 0x5B09A140, 0x5B086480, - 0x5B0727C0, 0x5B05EB00, 0x5B04AE40, - 0x5B037180, 0x5B0234C0, 0x5B00F800, - 0x5AFFBB40, 0x5AFE7E80, 0x5AFD41C0, - 0x5AFC0500, 0x5AFAC840, 0x5AF98B80, - 0x5AF84EC0, 0x5AF71200, 0x5AF5D540, - 0x5AF49880, 0x5AF35BC0, 0x5AF21F00, - 0x5AF0E240, 0x5AEFA580, 0x5AEE68C0, - 0x5AED2C00, 0x5AEBEF40, 0x5AEAB280, - 0x5AE975C0, 0x5AE83900, 0x5AE6FC40, - 0x5AE5BF80, 0x5AE482C0, 0x5AE34600, - 0x5AE20940, 0x5AE0CC80, 0x5ADF8FC0, - 0x5ADE5300, 0x5ADD1640, 0x5ADBD980, - 0x5ADA9CC0, 0x5AD96000, 0x5AD82340, - 0x5AD6E680, 0x5AD5A9C0, 0x5AD46D00, - 0x5AD33040, 0x5AD1F380, 0x5AD0B6C0, - 0x5ACF7A00, 0x5ACE3D40, 0x5ACD0080, - 0x5ACBC3C0, 0x5ACA8700, 0x5AC94A40, - 0x5AC80D80, 0x5AC6D0C0, 0x5AC59400, - 0x5AC45740, 0x5AC31A80, 0x5AC1DDC0, - 0x5AC0A100, 0x5ABF6440, 0x5ABE2780, - 0x5ABCEAC0, 0x5ABBAE00, 0x5ABA7140, - 0x5AB93480, 0x5AB7F7C0, 0x5AB6BB00, - 0x5AB57E40, 0x5AB44180, 0x5AB304C0, - 0x5AB1C800, 0x5AB08B40, 0x5AAF4E80, - 0x5AAE11C0, 0x5AACD500, 0x5AAB9840, - 0x5AAA5B80, 0x5AA91EC0, 0x5AA7E200, - 0x5AA6A540, 0x5AA56880, 0x5AA42BC0, - 0x5AA2EF00, 0x5AA1B240, 0x5AA07580, - 0x5A9F38C0, 0x5A9DFC00, 0x5A9CBF40, - 0x5A9B8280, 0x5A9A45C0, 0x5A990900, - 0x5A97CC40, 0x5A968F80, 0x5A9552C0, - 0x5A941600, 0x5A92D940, 0x5A919C80, - 0x5A905FC0, 0x5A8F2300, 0x5A8DE640, - 0x5A8CA980, 0x5A8B6CC0, 0x5A8A3000, - 0x5A88F340, 0x5A87B680, 0x5A8679C0, - 0x5A853D00, 0x5A840040, 0x5A82C380, - 0x5A8186C0, 0x5A804A00, 0x5A7F0D40, - 0x5A7DD080, 0x5A7C93C0, 0x5A7B5700, - 0x5A7A1A40, 0x5A78DD80, 0x5A77A0C0, - 0x5A766400, 0x5A752740, 0x5A73EA80, - 0x5A72ADC0, 0x5A717100, 0x5A703440, - 0x5A6EF780, 0x5A6DBAC0, 0x5A6C7E00, - 0x5A6B4140, 0x5A6A0480, 0x5A68C7C0, - 0x5A678B00, 0x5A664E40, 0x5A651180, - 0x5A63D4C0, 0x5A629800, 0x5A615B40, - 0x5A601E80, 0x5A5EE1C0, 0x5A5DA500, - 0x5A5C6840, 0x5A5B2B80, 0x5A59EEC0, - 0x5A58B200, 0x5A577540, 0x5A563880, - 0x5A54FBC0, 0x5A53BF00, 0x5A528240, - 0x5A514580, 0x5A5008C0, 0x5A4ECC00, - 0x5A4D8F40, 0x5A4C5280, 0x5A4B15C0, - 0x5A49D900, 0x5A489C40, 0x5A475F80, - 0x5A4622C0, 0x5A44E600, 0x5A43A940, - 0x5A426C80, 0x5A412FC0, 0x5A3FF300, - 0x5A3EB640, 0x5A3D7980, 0x5A3C3CC0, - 0x5A3B0000, 0x5A39C340, 0x5A388680, - 0x5A3749C0, 0x5A360D00, 0x5A34D040, - 0x5A339380, 0x5A3256C0, 0x5A311A00, - 0x5A2FDD40, 0x5A2EA080, 0x5A2D63C0, - 0x5A2C2700, 0x5A2AEA40, 0x5A29AD80, - 0x5A2870C0, 0x5A273400, 0x5A25F740, - 0x5A24BA80, 0x5A237DC0, 0x5A224100, - 0x5A210440, 0x5A1FC780, 0x5A1E8AC0, - 0x5A1D4E00, 0x5A1C1140, 0x5A1AD480, - 0x5A1997C0, 0x5A185B00, 0x5A171E40, - 0x5A15E180, 0x5A14A4C0, 0x5A136800, - 0x5A122B40, 0x5A10EE80, 0x5A0FB1C0, - 0x5A0E7500, 0x5A0D3840, 0x5A0BFB80, - 0x5A0ABEC0, 0x5A098200, 0x5A084540, - 0x5A070880, 0x5A05CBC0, 0x5A048F00, - 0x5A035240, 0x5A021580, 0x5A00D8C0, - 0x59FF9C00, 0x59FE5F40, 0x59FD2280, - 0x59FBE5C0, 0x59FAA900, 0x59F96C40, - 0x59F82F80, 0x59F6F2C0, 0x59F5B600, - 0x59F47940, 0x59F33C80, 0x59F1FFC0, - 0x59F0C300, 0x59EF8640, 0x59EE4980, - 0x59ED0CC0, 0x59EBD000, 0x59EA9340, - 0x59E95680, 0x59E819C0, 0x59E6DD00, - 0x59E5A040, 0x59E46380, 0x59E326C0, - 0x59E1EA00, 0x59E0AD40, 0x59DF7080, - 0x59DE33C0, 0x59DCF700, 0x59DBBA40, - 0x59DA7D80, 0x59D940C0, 0x59D80400, - 0x59D6C740, 0x59D58A80, 0x59D44DC0, - 0x59D31100, 0x59D1D440, 0x59D09780, - 0x59CF5AC0, 0x59CE1E00, 0x59CCE140, - 0x59CBA480, 0x59CA67C0, 0x59C92B00, - 0x59C7EE40, 0x59C6B180, 0x59C574C0, - 0x59C43800, 0x59C2FB40, 0x59C1BE80, - 0x59C081C0, 0x59BF4500, 0x59BE0840, - 0x59BCCB80, 0x59BB8EC0, 0x59BA5200, - 0x59B91540, 0x59B7D880, 0x59B69BC0, - 0x59B55F00, 0x59B42240, 0x59B2E580, - 0x59B1A8C0, 0x59B06C00, 0x59AF2F40, - 0x59ADF280, 0x59ACB5C0, 0x59AB7900, - 0x59AA3C40, 0x59A8FF80, 0x59A7C2C0, - 0x59A68600, 0x59A54940, 0x59A40C80, - 0x59A2CFC0, 0x59A19300, 0x59A05640, - 0x599F1980, 0x599DDCC0, 0x599CA000, - 0x599B6340, 0x599A2680, 0x5998E9C0, - 0x5997AD00, 0x59967040, 0x59953380, - 0x5993F6C0, 0x5992BA00, 0x59917D40, - 0x59904080, 0x598F03C0, 0x598DC700, - 0x598C8A40, 0x598B4D80, 0x598A10C0, - 0x5988D400, 0x59879740, 0x59865A80, - 0x59851DC0, 0x5983E100, 0x5982A440, - 0x59816780, 0x59802AC0, 0x597EEE00, - 0x597DB140, 0x597C7480, 0x597B37C0, - 0x5979FB00, 0x5978BE40, 0x59778180, - 0x597644C0, 0x59750800, 0x5973CB40, - 0x59728E80, 0x597151C0, 0x59701500, - 0x596ED840, 0x596D9B80, 0x596C5EC0, - 0x596B2200, 0x5969E540, 0x5968A880, - 0x59676BC0, 0x59662F00, 0x5964F240, - 0x5963B580, 0x596278C0, 0x59613C00, - 0x595FFF40, 0x595EC280, 0x595D85C0, - 0x595C4900, 0x595B0C40, 0x5959CF80, - 0x595892C0, 0x59575600, 0x59561940, - 0x5954DC80, 0x59539FC0, 0x59526300, - 0x59512640, 0x594FE980, 0x594EACC0, - 0x594D7000, 0x594C3340, 0x594AF680, - 0x5949B9C0, 0x59487D00, 0x59474040, - 0x59460380, 0x5944C6C0, 0x59438A00, - 0x59424D40, 0x59411080, 0x593FD3C0, - 0x593E9700, 0x593D5A40, 0x593C1D80, - 0x593AE0C0, 0x5939A400, 0x59386740, - 0x59372A80, 0x5935EDC0, 0x5934B100, - 0x59337440, 0x59323780, 0x5930FAC0, - 0x592FBE00, 0x592E8140, 0x592D4480, - 0x592C07C0, 0x592ACB00, 0x59298E40, - 0x59285180, 0x592714C0, 0x5925D800, - 0x59249B40, 0x59235E80, 0x592221C0, - 0x5920E500, 0x591FA840, 0x591E6B80, - 0x591D2EC0, 0x591BF200, 0x591AB540, - 0x59197880, 0x59183BC0, 0x5916FF00, - 0x5915C240, 0x59148580, 0x591348C0, - 0x59120C00, 0x5910CF40, 0x590F9280, - 0x590E55C0, 0x590D1900, 0x590BDC40, - 0x590A9F80, 0x590962C0, 0x59082600, - 0x5906E940, 0x5905AC80, 0x59046FC0, - 0x59033300, 0x5901F640, 0x5900B980, - 0x58FF7CC0, 0x58FE4000, 0x58FD0340, - 0x58FBC680, 0x58FA89C0, 0x58F94D00, - 0x58F81040, 0x58F6D380, 0x58F596C0, - 0x58F45A00, 0x58F31D40, 0x58F1E080, - 0x58F0A3C0, 0x58EF6700, 0x58EE2A40, - 0x58ECED80, 0x58EBB0C0, 0x58EA7400, - 0x58E93740, 0x58E7FA80, 0x58E6BDC0, - 0x58E58100, 0x58E44440, 0x58E30780, - 0x58E1CAC0, 0x58E08E00, 0x58DF5140, - 0x58DE1480, 0x58DCD7C0, 0x58DB9B00, - 0x58DA5E40, 0x58D92180, 0x58D7E4C0, - 0x58D6A800, 0x58D56B40, 0x58D42E80, - 0x58D2F1C0, 0x58D1B500, 0x58D07840, - 0x58CF3B80, 0x58CDFEC0, 0x58CCC200, - 0x58CB8540, 0x58CA4880, 0x58C90BC0, - 0x58C7CF00, 0x58C69240, 0x58C55580, - 0x58C418C0, 0x58C2DC00, 0x58C19F40, - 0x58C06280, 0x58BF25C0, 0x58BDE900, - 0x58BCAC40, 0x58BB6F80, 0x58BA32C0, - 0x58B8F600, 0x58B7B940, 0x58B67C80, - 0x58B53FC0, 0x58B40300, 0x58B2C640, - 0x58B18980, 0x58B04CC0, 0x58AF1000, - 0x58ADD340, 0x58AC9680, 0x58AB59C0, - 0x58AA1D00, 0x58A8E040, 0x58A7A380, - 0x58A666C0, 0x58A52A00, 0x58A3ED40, - 0x58A2B080, 0x58A173C0, 0x58A03700, - 0x589EFA40, 0x589DBD80, 0x589C80C0, - 0x589B4400, 0x589A0740, 0x5898CA80, - 0x58978DC0, 0x58965100, 0x58951440, - 0x5893D780, 0x58929AC0, 0x58915E00, - 0x58902140, 0x588EE480, 0x588DA7C0, - 0x588C6B00, 0x588B2E40, 0x5889F180, - 0x5888B4C0, 0x58877800, 0x58863B40, - 0x5884FE80, 0x5883C1C0, 0x58828500, - 0x58814840, 0x58800B80, 0x587ECEC0, - 0x587D9200, 0x587C5540, 0x587B1880, - 0x5879DBC0, 0x58789F00, 0x58776240, - 0x58762580, 0x5874E8C0, 0x5873AC00, - 0x58726F40, 0x58713280, 0x586FF5C0, - 0x586EB900, 0x586D7C40, 0x586C3F80, - 0x586B02C0, 0x5869C600, 0x58688940, - 0x58674C80, 0x58660FC0, 0x5864D300, - 0x58639640, 0x58625980, 0x58611CC0, - 0x585FE000, 0x585EA340, 0x585D6680, - 0x585C29C0, 0x585AED00, 0x5859B040, - 0x58587380, 0x585736C0, 0x5855FA00, - 0x5854BD40, 0x58538080, 0x585243C0, - 0x58510700, 0x584FCA40, 0x584E8D80, - 0x584D50C0, 0x584C1400, 0x584AD740, - 0x58499A80, 0x58485DC0, 0x58472100, - 0x5845E440, 0x5844A780, 0x58436AC0, - 0x58422E00, 0x5840F140, 0x583FB480, - 0x583E77C0, 0x583D3B00, 0x583BFE40, - 0x583AC180, 0x583984C0, 0x58384800, - 0x58370B40, 0x5835CE80, 0x583491C0, - 0x58335500, 0x58321840, 0x5830DB80, - 0x582F9EC0, 0x582E6200, 0x582D2540, - 0x582BE880, 0x582AABC0, 0x58296F00, - 0x58283240, 0x5826F580, 0x5825B8C0, - 0x58247C00, 0x58233F40, 0x58220280, - 0x5820C5C0, 0x581F8900, 0x581E4C40, - 0x581D0F80, 0x581BD2C0, 0x581A9600, - 0x58195940, 0x58181C80, 0x5816DFC0, - 0x5815A300, 0x58146640, 0x58132980, - 0x5811ECC0, 0x5810B000, 0x580F7340, - 0x580E3680, 0x580CF9C0, 0x580BBD00, - 0x580A8040, 0x58094380, 0x580806C0, - 0x5806CA00, 0x58058D40, 0x58045080, - 0x580313C0, 0x5801D700, 0x58009A40, - 0x57FF5D80, 0x57FE20C0, 0x57FCE400, - 0x57FBA740, 0x57FA6A80, 0x57F92DC0, - 0x57F7F100, 0x57F6B440, 0x57F57780, - 0x57F43AC0, 0x57F2FE00, 0x57F1C140, - 0x57F08480, 0x57EF47C0, 0x57EE0B00, - 0x57ECCE40, 0x57EB9180, 0x57EA54C0, - 0x57E91800, 0x57E7DB40, 0x57E69E80, - 0x57E561C0, 0x57E42500, 0x57E2E840, - 0x57E1AB80, 0x57E06EC0, 0x57DF3200, - 0x57DDF540, 0x57DCB880, 0x57DB7BC0, - 0x57DA3F00, 0x57D90240, 0x57D7C580, - 0x57D688C0, 0x57D54C00, 0x57D40F40, - 0x57D2D280, 0x57D195C0, 0x57D05900, - 0x57CF1C40, 0x57CDDF80, 0x57CCA2C0, - 0x57CB6600, 0x57CA2940, 0x57C8EC80, - 0x57C7AFC0, 0x57C67300, 0x57C53640, - 0x57C3F980, 0x57C2BCC0, 0x57C18000, - 0x57C04340, 0x57BF0680, 0x57BDC9C0, - 0x57BC8D00, 0x57BB5040, 0x57BA1380, - 0x57B8D6C0, 0x57B79A00, 0x57B65D40, - 0x57B52080, 0x57B3E3C0, 0x57B2A700, - 0x57B16A40, 0x57B02D80, 0x57AEF0C0, - 0x57ADB400, 0x57AC7740, 0x57AB3A80, - 0x57A9FDC0, 0x57A8C100, 0x57A78440, - 0x57A64780, 0x57A50AC0, 0x57A3CE00, - 0x57A29140, 0x57A15480, 0x57A017C0, - 0x579EDB00, 0x579D9E40, 0x579C6180, - 0x579B24C0, 0x5799E800, 0x5798AB40, - 0x57976E80, 0x579631C0, 0x5794F500, - 0x5793B840, 0x57927B80, 0x57913EC0, - 0x57900200, 0x578EC540, 0x578D8880, - 0x578C4BC0, 0x578B0F00, 0x5789D240, - 0x57889580, 0x578758C0, 0x57861C00, - 0x5784DF40, 0x5783A280, 0x578265C0, - 0x57812900, 0x577FEC40, 0x577EAF80, - 0x577D72C0, 0x577C3600, 0x577AF940, - 0x5779BC80, 0x57787FC0, 0x57774300, - 0x57760640, 0x5774C980, 0x57738CC0, - 0x57725000, 0x57711340, 0x576FD680, - 0x576E99C0, 0x576D5D00, 0x576C2040, - 0x576AE380, 0x5769A6C0, 0x57686A00, - 0x57672D40, 0x5765F080, 0x5764B3C0, - 0x57637700, 0x57623A40, 0x5760FD80, - 0x575FC0C0, 0x575E8400, 0x575D4740, - 0x575C0A80, 0x575ACDC0, 0x57599100, - 0x57585440, 0x57571780, 0x5755DAC0, - 0x57549E00, 0x57536140, 0x57522480, - 0x5750E7C0, 0x574FAB00, 0x574E6E40, - 0x574D3180, 0x574BF4C0, 0x574AB800, - 0x57497B40, 0x57483E80, 0x574701C0, - 0x5745C500, 0x57448840, 0x57434B80, - 0x57420EC0, 0x5740D200, 0x573F9540, - 0x573E5880, 0x573D1BC0, 0x573BDF00, - 0x573AA240, 0x57396580, 0x573828C0, - 0x5736EC00, 0x5735AF40, 0x57347280, - 0x573335C0, 0x5731F900, 0x5730BC40, - 0x572F7F80, 0x572E42C0, 0x572D0600, - 0x572BC940, 0x572A8C80, 0x57294FC0, - 0x57281300, 0x5726D640, 0x57259980, - 0x57245CC0, 0x57232000, 0x5721E340, - 0x5720A680, 0x571F69C0, 0x571E2D00, - 0x571CF040, 0x571BB380, 0x571A76C0, - 0x57193A00, 0x5717FD40, 0x5716C080, - 0x571583C0, 0x57144700, 0x57130A40, - 0x5711CD80, 0x571090C0, 0x570F5400, - 0x570E1740, 0x570CDA80, 0x570B9DC0, - 0x570A6100, 0x57092440, 0x5707E780, - 0x5706AAC0, 0x57056E00, 0x57043140, - 0x5702F480, 0x5701B7C0, 0x57007B00, - 0x56FF3E40, 0x56FE0180, 0x56FCC4C0, - 0x56FB8800, 0x56FA4B40, 0x56F90E80, - 0x56F7D1C0, 0x56F69500, 0x56F55840, - 0x56F41B80, 0x56F2DEC0, 0x56F1A200, - 0x56F06540, 0x56EF2880, 0x56EDEBC0, - 0x56ECAF00, 0x56EB7240, 0x56EA3580, - 0x56E8F8C0, 0x56E7BC00, 0x56E67F40, - 0x56E54280, 0x56E405C0, 0x56E2C900, - 0x56E18C40, 0x56E04F80, 0x56DF12C0, - 0x56DDD600, 0x56DC9940, 0x56DB5C80, - 0x56DA1FC0, 0x56D8E300, 0x56D7A640, - 0x56D66980, 0x56D52CC0, 0x56D3F000, - 0x56D2B340, 0x56D17680, 0x56D039C0, - 0x56CEFD00, 0x56CDC040, 0x56CC8380, - 0x56CB46C0, 0x56CA0A00, 0x56C8CD40, - 0x56C79080, 0x56C653C0, 0x56C51700, - 0x56C3DA40, 0x56C29D80, 0x56C160C0, - 0x56C02400, 0x56BEE740, 0x56BDAA80, - 0x56BC6DC0, 0x56BB3100, 0x56B9F440, - 0x56B8B780, 0x56B77AC0, 0x56B63E00, - 0x56B50140, 0x56B3C480, 0x56B287C0, - 0x56B14B00, 0x56B00E40, 0x56AED180, - 0x56AD94C0, 0x56AC5800, 0x56AB1B40, - 0x56A9DE80, 0x56A8A1C0, 0x56A76500, - 0x56A62840, 0x56A4EB80, 0x56A3AEC0, - 0x56A27200, 0x56A13540, 0x569FF880, - 0x569EBBC0, 0x569D7F00, 0x569C4240, - 0x569B0580, 0x5699C8C0, 0x56988C00, - 0x56974F40, 0x56961280, 0x5694D5C0, - 0x56939900, 0x56925C40, 0x56911F80, - 0x568FE2C0, 0x568EA600, 0x568D6940, - 0x568C2C80, 0x568AEFC0, 0x5689B300, - 0x56887640, 0x56873980, 0x5685FCC0, - 0x5684C000, 0x56838340, 0x56824680, - 0x568109C0, 0x567FCD00, 0x567E9040, - 0x567D5380, 0x567C16C0, 0x567ADA00, - 0x56799D40, 0x56786080, 0x567723C0, - 0x5675E700, 0x5674AA40, 0x56736D80, - 0x567230C0, 0x5670F400, 0x566FB740, - 0x566E7A80, 0x566D3DC0, 0x566C0100, - 0x566AC440, 0x56698780, 0x56684AC0, - 0x56670E00, 0x5665D140, 0x56649480, - 0x566357C0, 0x56621B00, 0x5660DE40, - 0x565FA180, 0x565E64C0, 0x565D2800, - 0x565BEB40, 0x565AAE80, 0x565971C0, - 0x56583500, 0x5656F840, 0x5655BB80, - 0x56547EC0, 0x56534200, 0x56520540, - 0x5650C880, 0x564F8BC0, 0x564E4F00, - 0x564D1240, 0x564BD580, 0x564A98C0, - 0x56495C00, 0x56481F40, 0x5646E280, - 0x5645A5C0, 0x56446900, 0x56432C40, - 0x5641EF80, 0x5640B2C0, 0x563F7600, - 0x563E3940, 0x563CFC80, 0x563BBFC0, - 0x563A8300, 0x56394640, 0x56380980, - 0x5636CCC0, 0x56359000, 0x56345340, - 0x56331680, 0x5631D9C0, 0x56309D00, - 0x562F6040, 0x562E2380, 0x562CE6C0, - 0x562BAA00, 0x562A6D40, 0x56293080, - 0x5627F3C0, 0x5626B700, 0x56257A40, - 0x56243D80, 0x562300C0, 0x5621C400, - 0x56208740, 0x561F4A80, 0x561E0DC0, - 0x561CD100, 0x561B9440, 0x561A5780, - 0x56191AC0, 0x5617DE00, 0x5616A140, - 0x56156480, 0x561427C0, 0x5612EB00, - 0x5611AE40, 0x56107180, 0x560F34C0, - 0x560DF800, 0x560CBB40, 0x560B7E80, - 0x560A41C0, 0x56090500, 0x5607C840, - 0x56068B80, 0x56054EC0, 0x56041200, - 0x5602D540, 0x56019880, 0x56005BC0, - 0x55FF1F00, 0x55FDE240, 0x55FCA580, - 0x55FB68C0, 0x55FA2C00, 0x55F8EF40, - 0x55F7B280, 0x55F675C0, 0x55F53900, - 0x55F3FC40, 0x55F2BF80, 0x55F182C0, - 0x55F04600, 0x55EF0940, 0x55EDCC80, - 0x55EC8FC0, 0x55EB5300, 0x55EA1640, - 0x55E8D980, 0x55E79CC0, 0x55E66000, - 0x55E52340, 0x55E3E680, 0x55E2A9C0, - 0x55E16D00, 0x55E03040, 0x55DEF380, - 0x55DDB6C0, 0x55DC7A00, 0x55DB3D40, - 0x55DA0080, 0x55D8C3C0, 0x55D78700, - 0x55D64A40, 0x55D50D80, 0x55D3D0C0, - 0x55D29400, 0x55D15740, 0x55D01A80, - 0x55CEDDC0, 0x55CDA100, 0x55CC6440, - 0x55CB2780, 0x55C9EAC0, 0x55C8AE00, - 0x55C77140, 0x55C63480, 0x55C4F7C0, - 0x55C3BB00, 0x55C27E40, 0x55C14180, - 0x55C004C0, 0x55BEC800, 0x55BD8B40, - 0x55BC4E80, 0x55BB11C0, 0x55B9D500, - 0x55B89840, 0x55B75B80, 0x55B61EC0, - 0x55B4E200, 0x55B3A540, 0x55B26880, - 0x55B12BC0, 0x55AFEF00, 0x55AEB240, - 0x55AD7580, 0x55AC38C0, 0x55AAFC00, - 0x55A9BF40, 0x55A88280, 0x55A745C0, - 0x55A60900, 0x55A4CC40, 0x55A38F80, - 0x55A252C0, 0x55A11600, 0x559FD940, - 0x559E9C80, 0x559D5FC0, 0x559C2300, - 0x559AE640, 0x5599A980, 0x55986CC0, - 0x55973000, 0x5595F340, 0x5594B680, - 0x559379C0, 0x55923D00, 0x55910040, - 0x558FC380, 0x558E86C0, 0x558D4A00, - 0x558C0D40, 0x558AD080, 0x558993C0, - 0x55885700, 0x55871A40, 0x5585DD80, - 0x5584A0C0, 0x55836400, 0x55822740, - 0x5580EA80, 0x557FADC0, 0x557E7100, - 0x557D3440, 0x557BF780, 0x557ABAC0, - 0x55797E00, 0x55784140, 0x55770480, - 0x5575C7C0, 0x55748B00, 0x55734E40, - 0x55721180, 0x5570D4C0, 0x556F9800, - 0x556E5B40, 0x556D1E80, 0x556BE1C0, - 0x556AA500, 0x55696840, 0x55682B80, - 0x5566EEC0, 0x5565B200, 0x55647540, - 0x55633880, 0x5561FBC0, 0x5560BF00, - 0x555F8240, 0x555E4580, 0x555D08C0, - 0x555BCC00, 0x555A8F40, 0x55595280, - 0x555815C0, 0x5556D900, 0x55559C40, - 0x55545F80, 0x555322C0, 0x5551E600, - 0x5550A940, 0x554F6C80, 0x554E2FC0, - 0x554CF300, 0x554BB640, 0x554A7980, - 0x55493CC0, 0x554A0000, 0x5548DCC0, - 0x5547B980, 0x55469640, 0x55457300, - 0x55444FC0, 0x55432C80, 0x55420940, - 0x5540E600, 0x553FC2C0, 0x553E9F80, - 0x553D7C40, 0x553C5900, 0x553B35C0, - 0x553A1280, 0x5538EF40, 0x5537CC00, - 0x5536A8C0, 0x55358580, 0x55346240, - 0x55333F00, 0x55321BC0, 0x5530F880, - 0x552FD540, 0x552EB200, 0x552D8EC0, - 0x552C6B80, 0x552B4840, 0x552A2500, - 0x552901C0, 0x5527DE80, 0x5526BB40, - 0x55259800, 0x552474C0, 0x55235180, - 0x55222E40, 0x55210B00, 0x551FE7C0, - 0x551EC480, 0x551DA140, 0x551C7E00, - 0x551B5AC0, 0x551A3780, 0x55191440, - 0x5517F100, 0x5516CDC0, 0x5515AA80, - 0x55148740, 0x55136400, 0x551240C0, - 0x55111D80, 0x550FFA40, 0x550ED700, - 0x550DB3C0, 0x550C9080, 0x550B6D40, - 0x550A4A00, 0x550926C0, 0x55080380, - 0x5506E040, 0x5505BD00, 0x550499C0, - 0x55037680, 0x55025340, 0x55013000, - 0x55000CC0, 0x54FEE980, 0x54FDC640, - 0x54FCA300, 0x54FB7FC0, 0x54FA5C80, - 0x54F93940, 0x54F81600, 0x54F6F2C0, - 0x54F5CF80, 0x54F4AC40, 0x54F38900, - 0x54F265C0, 0x54F14280, 0x54F01F40, - 0x54EEFC00, 0x54EDD8C0, 0x54ECB580, - 0x54EB9240, 0x54EA6F00, 0x54E94BC0, - 0x54E82880, 0x54E70540, 0x54E5E200, - 0x54E4BEC0, 0x54E39B80, 0x54E27840, - 0x54E15500, 0x54E031C0, 0x54DF0E80, - 0x54DDEB40, 0x54DCC800, 0x54DBA4C0, - 0x54DA8180, 0x54D95E40, 0x54D83B00, - 0x54D717C0, 0x54D5F480, 0x54D4D140, - 0x54D3AE00, 0x54D28AC0, 0x54D16780, - 0x54D04440, 0x54CF2100, 0x54CDFDC0, - 0x54CCDA80, 0x54CBB740, 0x54CA9400, - 0x54C970C0, 0x54C84D80, 0x54C72A40, - 0x54C60700, 0x54C4E3C0, 0x54C3C080, - 0x54C29D40, 0x54C17A00, 0x54C056C0, - 0x54BF3380, 0x54BE1040, 0x54BCED00, - 0x54BBC9C0, 0x54BAA680, 0x54B98340, - 0x54B86000, 0x54B73CC0, 0x54B61980, - 0x54B4F640, 0x54B3D300, 0x54B2AFC0, - 0x54B18C80, 0x54B06940, 0x54AF4600, - 0x54AE22C0, 0x54ACFF80, 0x54ABDC40, - 0x54AAB900, 0x54A995C0, 0x54A87280, - 0x54A74F40, 0x54A62C00, 0x54A508C0, - 0x54A3E580, 0x54A2C240, 0x54A19F00, - 0x54A07BC0, 0x549F5880, 0x549E3540, - 0x549D1200, 0x549BEEC0, 0x549ACB80, - 0x5499A840, 0x54988500, 0x549761C0, - 0x54963E80, 0x54951B40, 0x5493F800, - 0x5492D4C0, 0x5491B180, 0x54908E40, - 0x548F6B00, 0x548E47C0, 0x548D2480, - 0x548C0140, 0x548ADE00, 0x5489BAC0, - 0x54889780, 0x54877440, 0x54865100, - 0x54852DC0, 0x54840A80, 0x5482E740, - 0x5481C400, 0x5480A0C0, 0x547F7D80, - 0x547E5A40, 0x547D3700, 0x547C13C0, - 0x547AF080, 0x5479CD40, 0x5478AA00, - 0x547786C0, 0x54766380, 0x54754040, - 0x54741D00, 0x5472F9C0, 0x5471D680, - 0x5470B340, 0x546F9000, 0x546E6CC0, - 0x546D4980, 0x546C2640, 0x546B0300, - 0x5469DFC0, 0x5468BC80, 0x54679940, - 0x54667600, 0x546552C0, 0x54642F80, - 0x54630C40, 0x5461E900, 0x5460C5C0, - 0x545FA280, 0x545E7F40, 0x545D5C00, - 0x545C38C0, 0x545B1580, 0x5459F240, - 0x5458CF00, 0x5457ABC0, 0x54568880, - 0x54556540, 0x54544200, 0x54531EC0, - 0x5451FB80, 0x5450D840, 0x544FB500, - 0x544E91C0, 0x544D6E80, 0x544C4B40, - 0x544B2800, 0x544A04C0, 0x5448E180, - 0x5447BE40, 0x54469B00, 0x544577C0, - 0x54445480, 0x54433140, 0x54420E00, - 0x5440EAC0, 0x543FC780, 0x543EA440, - 0x543D8100, 0x543C5DC0, 0x543B3A80, - 0x543A1740, 0x5438F400, 0x5437D0C0, - 0x5436AD80, 0x54358A40, 0x54346700, - 0x543343C0, 0x54322080, 0x5430FD40, - 0x542FDA00, 0x542EB6C0, 0x542D9380, - 0x542C7040, 0x542B4D00, 0x542A29C0, - 0x54290680, 0x5427E340, 0x5426C000, - 0x54259CC0, 0x54247980, 0x54235640, - 0x54223300, 0x54210FC0, 0x541FEC80, - 0x541EC940, 0x541DA600, 0x541C82C0, - 0x541B5F80, 0x541A3C40, 0x54191900, - 0x5417F5C0, 0x5416D280, 0x5415AF40, - 0x54148C00, 0x541368C0, 0x54124580, - 0x54112240, 0x540FFF00, 0x540EDBC0, - 0x540DB880, 0x540C9540, 0x540B7200, - 0x540A4EC0, 0x54092B80, 0x54080840, - 0x5406E500, 0x5405C1C0, 0x54049E80, - 0x54037B40, 0x54025800, 0x540134C0, - 0x54001180, 0x53FEEE40, 0x53FDCB00, - 0x53FCA7C0, 0x53FB8480, 0x53FA6140, - 0x53F93E00, 0x53F81AC0, 0x53F6F780, - 0x53F5D440, 0x53F4B100, 0x53F38DC0, - 0x53F26A80, 0x53F14740, 0x53F02400, - 0x53EF00C0, 0x53EDDD80, 0x53ECBA40, - 0x53EB9700, 0x53EA73C0, 0x53E95080, - 0x53E82D40, 0x53E70A00, 0x53E5E6C0, - 0x53E4C380, 0x53E3A040, 0x53E27D00, - 0x53E159C0, 0x53E03680, 0x53DF1340, - 0x53DDF000, 0x53DCCCC0, 0x53DBA980, - 0x53DA8640, 0x53D96300, 0x53D83FC0, - 0x53D71C80, 0x53D5F940, 0x53D4D600, - 0x53D3B2C0, 0x53D28F80, 0x53D16C40, - 0x53D04900, 0x53CF25C0, 0x53CE0280, - 0x53CCDF40, 0x53CBBC00, 0x53CA98C0, - 0x53C97580, 0x53C85240, 0x53C72F00, - 0x53C60BC0, 0x53C4E880, 0x53C3C540, - 0x53C2A200, 0x53C17EC0, 0x53C05B80, - 0x53BF3840, 0x53BE1500, 0x53BCF1C0, - 0x53BBCE80, 0x53BAAB40, 0x53B98800, - 0x53B864C0, 0x53B74180, 0x53B61E40, - 0x53B4FB00, 0x53B3D7C0, 0x53B2B480, - 0x53B19140, 0x53B06E00, 0x53AF4AC0, - 0x53AE2780, 0x53AD0440, 0x53ABE100, - 0x53AABDC0, 0x53A99A80, 0x53A87740, - 0x53A75400, 0x53A630C0, 0x53A50D80, - 0x53A3EA40, 0x53A2C700, 0x53A1A3C0, - 0x53A08080, 0x539F5D40, 0x539E3A00, - 0x539D16C0, 0x539BF380, 0x539AD040, - 0x5399AD00, 0x539889C0, 0x53976680, - 0x53964340, 0x53952000, 0x5393FCC0, - 0x5392D980, 0x5391B640, 0x53909300, - 0x538F6FC0, 0x538E4C80, 0x538D2940, - 0x538C0600, 0x538AE2C0, 0x5389BF80, - 0x53889C40, 0x53877900, 0x538655C0, - 0x53853280, 0x53840F40, 0x5382EC00, - 0x5381C8C0, 0x5380A580, 0x537F8240, - 0x537E5F00, 0x537D3BC0, 0x537C1880, - 0x537AF540, 0x5379D200, 0x5378AEC0, - 0x53778B80, 0x53766840, 0x53754500, - 0x537421C0, 0x5372FE80, 0x5371DB40, - 0x5370B800, 0x536F94C0, 0x536E7180, - 0x536D4E40, 0x536C2B00, 0x536B07C0, - 0x5369E480, 0x5368C140, 0x53679E00, - 0x53667AC0, 0x53655780, 0x53643440, - 0x53631100, 0x5361EDC0, 0x5360CA80, - 0x535FA740, 0x535E8400, 0x535D60C0, - 0x535C3D80, 0x535B1A40, 0x5359F700, - 0x5358D3C0, 0x5357B080, 0x53568D40, - 0x53556A00, 0x535446C0, 0x53532380, - 0x53520040, 0x5350DD00, 0x534FB9C0, - 0x534E9680, 0x534D7340, 0x534C5000, - 0x534B2CC0, 0x534A0980, 0x5348E640, - 0x5347C300, 0x53469FC0, 0x53457C80, - 0x53445940, 0x53433600, 0x534212C0, - 0x5340EF80, 0x533FCC40, 0x533EA900, - 0x533D85C0, 0x533C6280, 0x533B3F40, - 0x533A1C00, 0x5338F8C0, 0x5337D580, - 0x5336B240, 0x53358F00, 0x53346BC0, - 0x53334880, 0x53322540, 0x53310200, - 0x532FDEC0, 0x532EBB80, 0x532D9840, - 0x532C7500, 0x532B51C0, 0x532A2E80, - 0x53290B40, 0x5327E800, 0x5326C4C0, - 0x5325A180, 0x53247E40, 0x53235B00, - 0x532237C0, 0x53211480, 0x531FF140, - 0x531ECE00, 0x531DAAC0, 0x531C8780, - 0x531B6440, 0x531A4100, 0x53191DC0, - 0x5317FA80, 0x5316D740, 0x5315B400, - 0x531490C0, 0x53136D80, 0x53124A40, - 0x53112700, 0x531003C0, 0x530EE080, - 0x530DBD40, 0x530C9A00, 0x530B76C0, - 0x530A5380, 0x53093040, 0x53080D00, - 0x5306E9C0, 0x5305C680, 0x5304A340, - 0x53038000, 0x53025CC0, 0x53013980, - 0x53001640, 0x52FEF300, 0x52FDCFC0, - 0x52FCAC80, 0x52FB8940, 0x52FA6600, - 0x52F942C0, 0x52F81F80, 0x52F6FC40, - 0x52F5D900, 0x52F4B5C0, 0x52F39280, - 0x52F26F40, 0x52F14C00, 0x52F028C0, - 0x52EF0580, 0x52EDE240, 0x52ECBF00, - 0x52EB9BC0, 0x52EA7880, 0x52E95540, - 0x52E83200, 0x52E70EC0, 0x52E5EB80, - 0x52E4C840, 0x52E3A500, 0x52E281C0, - 0x52E15E80, 0x52E03B40, 0x52DF1800, - 0x52DDF4C0, 0x52DCD180, 0x52DBAE40, - 0x52DA8B00, 0x52D967C0, 0x52D84480, - 0x52D72140, 0x52D5FE00, 0x52D4DAC0, - 0x52D3B780, 0x52D29440, 0x52D17100, - 0x52D04DC0, 0x52CF2A80, 0x52CE0740, - 0x52CCE400, 0x52CBC0C0, 0x52CA9D80, - 0x52C97A40, 0x52C85700, 0x52C733C0, - 0x52C61080, 0x52C4ED40, 0x52C3CA00, - 0x52C2A6C0, 0x52C18380, 0x52C06040, - 0x52BF3D00, 0x52BE19C0, 0x52BCF680, - 0x52BBD340, 0x52BAB000, 0x52B98CC0, - 0x52B86980, 0x52B74640, 0x52B62300, - 0x52B4FFC0, 0x52B3DC80, 0x52B2B940, - 0x52B19600, 0x52B072C0, 0x52AF4F80, - 0x52AE2C40, 0x52AD0900, 0x52ABE5C0, - 0x52AAC280, 0x52A99F40, 0x52A87C00, - 0x52A758C0, 0x52A63580, 0x52A51240, - 0x52A3EF00, 0x52A2CBC0, 0x52A1A880, - 0x52A08540, 0x529F6200, 0x529E3EC0, - 0x529D1B80, 0x529BF840, 0x529AD500, - 0x5299B1C0, 0x52988E80, 0x52976B40, - 0x52964800, 0x529524C0, 0x52940180, - 0x5292DE40, 0x5291BB00, 0x529097C0, - 0x528F7480, 0x528E5140, 0x528D2E00, - 0x528C0AC0, 0x528AE780, 0x5289C440, - 0x5288A100, 0x52877DC0, 0x52865A80, - 0x52853740, 0x52841400, 0x5282F0C0, - 0x5281CD80, 0x5280AA40, 0x527F8700, - 0x527E63C0, 0x527D4080, 0x527C1D40, - 0x527AFA00, 0x5279D6C0, 0x5278B380, - 0x52779040, 0x52766D00, 0x527549C0, - 0x52742680, 0x52730340, 0x5271E000, - 0x5270BCC0, 0x526F9980, 0x526E7640, - 0x526D5300, 0x526C2FC0, 0x526B0C80, - 0x5269E940, 0x5268C600, 0x5267A2C0, - 0x52667F80, 0x52655C40, 0x52643900, - 0x526315C0, 0x5261F280, 0x5260CF40, - 0x525FAC00, 0x525E88C0, 0x525D6580, - 0x525C4240, 0x525B1F00, 0x5259FBC0, - 0x5258D880, 0x5257B540, 0x52569200, - 0x52556EC0, 0x52544B80, 0x52532840, - 0x52520500, 0x5250E1C0, 0x524FBE80, - 0x524E9B40, 0x524D7800, 0x524C54C0, - 0x524B3180, 0x524A0E40, 0x5248EB00, - 0x5247C7C0, 0x5246A480, 0x52458140, - 0x52445E00, 0x52433AC0, 0x52421780, - 0x5240F440, 0x523FD100, 0x523EADC0, - 0x523D8A80, 0x523C6740, 0x523B4400, - 0x523A20C0, 0x5238FD80, 0x5237DA40, - 0x5236B700, 0x523593C0, 0x52347080, - 0x52334D40, 0x52322A00, 0x523106C0, - 0x522FE380, 0x522EC040, 0x522D9D00, - 0x522C79C0, 0x522B5680, 0x522A3340, - 0x52291000, 0x5227ECC0, 0x5226C980, - 0x5225A640, 0x52248300, 0x52235FC0, - 0x52223C80, 0x52211940, 0x521FF600, - 0x521ED2C0, 0x521DAF80, 0x521C8C40, - 0x521B6900, 0x521A45C0, 0x52192280, - 0x5217FF40, 0x5216DC00, 0x5215B8C0, - 0x52149580, 0x52137240, 0x52124F00, - 0x52112BC0, 0x52100880, 0x520EE540, - 0x520DC200, 0x520C9EC0, 0x520B7B80, - 0x520A5840, 0x52093500, 0x520811C0, - 0x5206EE80, 0x5205CB40, 0x5204A800, - 0x520384C0, 0x52026180, 0x52013E40, - 0x52001B00, 0x51FEF7C0, 0x51FDD480, - 0x51FCB140, 0x51FB8E00, 0x51FA6AC0, - 0x51F94780, 0x51F82440, 0x51F70100, - 0x51F5DDC0, 0x51F4BA80, 0x51F39740, - 0x51F27400, 0x51F150C0, 0x51F02D80, - 0x51EF0A40, 0x51EDE700, 0x51ECC3C0, - 0x51EBA080, 0x51EA7D40, 0x51E95A00, - 0x51E836C0, 0x51E71380, 0x51E5F040, - 0x51E4CD00, 0x51E3A9C0, 0x51E28680, - 0x51E16340, 0x51E04000, 0x51DF1CC0, - 0x51DDF980, 0x51DCD640, 0x51DBB300, - 0x51DA8FC0, 0x51D96C80, 0x51D84940, - 0x51D72600, 0x51D602C0, 0x51D4DF80, - 0x51D3BC40, 0x51D29900, 0x51D175C0, - 0x51D05280, 0x51CF2F40, 0x51CE0C00, - 0x51CCE8C0, 0x51CBC580, 0x51CAA240, - 0x51C97F00, 0x51C85BC0, 0x51C73880, - 0x51C61540, 0x51C4F200, 0x51C3CEC0, - 0x51C2AB80, 0x51C18840, 0x51C06500, - 0x51BF41C0, 0x51BE1E80, 0x51BCFB40, - 0x51BBD800, 0x51BAB4C0, 0x51B99180, - 0x51B86E40, 0x51B74B00, 0x51B627C0, - 0x51B50480, 0x51B3E140, 0x51B2BE00, - 0x51B19AC0, 0x51B07780, 0x51AF5440, - 0x51AE3100, 0x51AD0DC0, 0x51ABEA80, - 0x51AAC740, 0x51A9A400, 0x51A880C0, - 0x51A75D80, 0x51A63A40, 0x51A51700, - 0x51A3F3C0, 0x51A2D080, 0x51A1AD40, - 0x51A08A00, 0x519F66C0, 0x519E4380, - 0x519D2040, 0x519BFD00, 0x519AD9C0, - 0x5199B680, 0x51989340, 0x51977000, - 0x51964CC0, 0x51952980, 0x51940640, - 0x5192E300, 0x5191BFC0, 0x51909C80, - 0x518F7940, 0x518E5600, 0x518D32C0, - 0x518C0F80, 0x518AEC40, 0x5189C900, - 0x5188A5C0, 0x51878280, 0x51865F40, - 0x51853C00, 0x518418C0, 0x5182F580, - 0x5181D240, 0x5180AF00, 0x517F8BC0, - 0x517E6880, 0x517D4540, 0x517C2200, - 0x517AFEC0, 0x5179DB80, 0x5178B840, - 0x51779500, 0x517671C0, 0x51754E80, - 0x51742B40, 0x51730800, 0x5171E4C0, - 0x5170C180, 0x516F9E40, 0x516E7B00, - 0x516D57C0, 0x516C3480, 0x516B1140, - 0x5169EE00, 0x5168CAC0, 0x5167A780, - 0x51668440, 0x51656100, 0x51643DC0, - 0x51631A80, 0x5161F740, 0x5160D400, - 0x515FB0C0, 0x515E8D80, 0x515D6A40, - 0x515C4700, 0x515B23C0, 0x515A0080, - 0x5158DD40, 0x5157BA00, 0x515696C0, - 0x51557380, 0x51545040, 0x51532D00, - 0x515209C0, 0x5150E680, 0x514FC340, - 0x514EA000, 0x514D7CC0, 0x514C5980, - 0x514B3640, 0x514A1300, 0x5148EFC0, - 0x5147CC80, 0x5146A940, 0x51458600, - 0x514462C0, 0x51433F80, 0x51421C40, - 0x5140F900, 0x513FD5C0, 0x513EB280, - 0x513D8F40, 0x513C6C00, 0x513B48C0, - 0x513A2580, 0x51390240, 0x5137DF00, - 0x5136BBC0, 0x51359880, 0x51347540, - 0x51335200, 0x51322EC0, 0x51310B80, - 0x512FE840, 0x512EC500, 0x512DA1C0, - 0x512C7E80, 0x512B5B40, 0x512A3800, - 0x512914C0, 0x5127F180, 0x5126CE40, - 0x5125AB00, 0x512487C0, 0x51236480, - 0x51224140, 0x51211E00, 0x511FFAC0, - 0x511ED780, 0x511DB440, 0x511C9100, - 0x511B6DC0, 0x511A4A80, 0x51192740, - 0x51180400, 0x5116E0C0, 0x5115BD80, - 0x51149A40, 0x51137700, 0x511253C0, - 0x51113080, 0x51100D40, 0x510EEA00, - 0x510DC6C0, 0x510CA380, 0x510B8040, - 0x510A5D00, 0x510939C0, 0x51081680, - 0x5106F340, 0x5105D000, 0x5104ACC0, - 0x51038980, 0x51026640, 0x51014300, - 0x51001FC0, 0x50FEFC80, 0x50FDD940, - 0x50FCB600, 0x50FB92C0, 0x50FA6F80, - 0x50F94C40, 0x50F82900, 0x50F705C0, - 0x50F5E280, 0x50F4BF40, 0x50F39C00, - 0x50F278C0, 0x50F15580, 0x50F03240, - 0x50EF0F00, 0x50EDEBC0, 0x50ECC880, - 0x50EBA540, 0x50EA8200, 0x50E95EC0, - 0x50E83B80, 0x50E71840, 0x50E5F500, - 0x50E4D1C0, 0x50E3AE80, 0x50E28B40, - 0x50E16800, 0x50E044C0, 0x50DF2180, - 0x50DDFE40, 0x50DCDB00, 0x50DBB7C0, - 0x50DA9480, 0x50D97140, 0x50D84E00, - 0x50D72AC0, 0x50D60780, 0x50D4E440, - 0x50D3C100, 0x50D29DC0, 0x50D17A80, - 0x50D05740, 0x50CF3400, 0x50CE10C0, - 0x50CCED80, 0x50CBCA40, 0x50CAA700, - 0x50C983C0, 0x50C86080, 0x50C73D40, - 0x50C61A00, 0x50C4F6C0, 0x50C3D380, - 0x50C2B040, 0x50C18D00, 0x50C069C0, - 0x50BF4680, 0x50BE2340, 0x50BD0000, - 0x50BBDCC0, 0x50BAB980, 0x50B99640, - 0x50B87300, 0x50B74FC0, 0x50B62C80, - 0x50B50940, 0x50B3E600, 0x50B2C2C0, - 0x50B19F80, 0x50B07C40, 0x50AF5900, - 0x50AE35C0, 0x50AD1280, 0x50ABEF40, - 0x50AACC00, 0x50A9A8C0, 0x50A88580, - 0x50A76240, 0x50A63F00, 0x50A51BC0, - 0x50A3F880, 0x50A2D540, 0x50A1B200, - 0x50A08EC0, 0x509F6B80, 0x509E4840, - 0x509D2500, 0x509C01C0, 0x509ADE80, - 0x5099BB40, 0x50989800, 0x509774C0, - 0x50965180, 0x50952E40, 0x50940B00, - 0x5092E7C0, 0x5091C480, 0x5090A140, - 0x508F7E00, 0x508E5AC0, 0x508D3780, - 0x508C1440, 0x508AF100, 0x5089CDC0, - 0x5088AA80, 0x50878740, 0x50866400, - 0x508540C0, 0x50841D80, 0x5082FA40, - 0x5081D700, 0x5080B3C0, 0x507F9080, - 0x507E6D40, 0x507D4A00, 0x507C26C0, - 0x507B0380, 0x5079E040, 0x5078BD00, - 0x507799C0, 0x50767680, 0x50755340, - 0x50743000, 0x50730CC0, 0x5071E980, - 0x5070C640, 0x506FA300, 0x506E7FC0, - 0x506D5C80, 0x506C3940, 0x506B1600, - 0x5069F2C0, 0x5068CF80, 0x5067AC40, - 0x50668900, 0x506565C0, 0x50644280, - 0x50631F40, 0x5061FC00, 0x5060D8C0, - 0x505FB580, 0x505E9240, 0x505D6F00, - 0x505C4BC0, 0x505B2880, 0x505A0540, - 0x5058E200, 0x5057BEC0, 0x50569B80, - 0x50557840, 0x50545500, 0x505331C0, - 0x50520E80, 0x5050EB40, 0x504FC800, - 0x504EA4C0, 0x504D8180, 0x504C5E40, - 0x504B3B00, 0x504A17C0, 0x5048F480, - 0x5047D140, 0x5046AE00, 0x50458AC0, - 0x50446780, 0x50434440, 0x50422100, - 0x5040FDC0, 0x503FDA80, 0x503EB740, - 0x503D9400, 0x503C70C0, 0x503B4D80, - 0x503A2A40, 0x50390700, 0x5037E3C0, - 0x5036C080, 0x50359D40, 0x50347A00, - 0x503356C0, 0x50323380, 0x50311040, - 0x502FED00, 0x502EC9C0, 0x502DA680, - 0x502C8340, 0x502B6000, 0x502A3CC0, - 0x50291980, 0x5027F640, 0x5026D300, - 0x5025AFC0, 0x50248C80, 0x50236940, - 0x50224600, 0x502122C0, 0x501FFF80, - 0x501EDC40, 0x501DB900, 0x501C95C0, - 0x501B7280, 0x501A4F40, 0x50192C00, - 0x501808C0, 0x5016E580, 0x5015C240, - 0x50149F00, 0x50137BC0, 0x50125880, - 0x50113540, 0x50101200, 0x500EEEC0, - 0x500DCB80, 0x500CA840, 0x500B8500, - 0x500A61C0, 0x50093E80, 0x50081B40, - 0x5006F800, 0x5005D4C0, 0x5004B180, - 0x50038E40, 0x50026B00, 0x500147C0, - 0x50002480, 0x4FFF0140, 0x4FFDDE00, - 0x4FFCBAC0, 0x4FFB9780, 0x4FFA7440, - 0x4FF95100, 0x4FF82DC0, 0x4FF70A80, - 0x4FF5E740, 0x4FF4C400, 0x4FF3A0C0, - 0x4FF27D80, 0x4FF15A40, 0x4FF03700, - 0x4FEF13C0, 0x4FEDF080, 0x4FECCD40, - 0x4FEBAA00, 0x4FEA86C0, 0x4FE96380, - 0x4FE84040, 0x4FE71D00, 0x4FE5F9C0, - 0x4FE4D680, 0x4FE3B340, 0x4FE29000, - 0x4FE16CC0, 0x4FE04980, 0x4FDF2640, - 0x4FDE0300, 0x4FDCDFC0, 0x4FDBBC80, - 0x4FDA9940, 0x4FD97600, 0x4FD852C0, - 0x4FD72F80, 0x4FD60C40, 0x4FD4E900, - 0x4FD3C5C0, 0x4FD2A280, 0x4FD17F40, - 0x4FD05C00, 0x4FCF38C0, 0x4FCE1580, - 0x4FCCF240, 0x4FCBCF00, 0x4FCAABC0, - 0x4FC98880, 0x4FC86540, 0x4FC74200, - 0x4FC61EC0, 0x4FC4FB80, 0x4FC3D840, - 0x4FC2B500, 0x4FC191C0, 0x4FC06E80, - 0x4FBF4B40, 0x4FBE2800, 0x4FBD04C0, - 0x4FBBE180, 0x4FBABE40, 0x4FB99B00, - 0x4FB877C0, 0x4FB75480, 0x4FB63140, - 0x4FB50E00, 0x4FB3EAC0, 0x4FB2C780, - 0x4FB1A440, 0x4FB08100, 0x4FAF5DC0, - 0x4FAE3A80, 0x4FAD1740, 0x4FABF400, - 0x4FAAD0C0, 0x4FA9AD80, 0x4FA88A40, - 0x4FA76700, 0x4FA643C0, 0x4FA52080, - 0x4FA3FD40, 0x4FA2DA00, 0x4FA1B6C0, - 0x4FA09380, 0x4F9F7040, 0x4F9E4D00, - 0x4F9D29C0, 0x4F9C0680, 0x4F9AE340, - 0x4F99C000, 0x4F989CC0, 0x4F977980, - 0x4F965640, 0x4F953300, 0x4F940FC0, - 0x4F92EC80, 0x4F91C940, 0x4F90A600, - 0x4F8F82C0, 0x4F8E5F80, 0x4F8D3C40, - 0x4F8C1900, 0x4F8AF5C0, 0x4F89D280, - 0x4F88AF40, 0x4F878C00, 0x4F8668C0, - 0x4F854580, 0x4F842240, 0x4F82FF00, - 0x4F81DBC0, 0x4F80B880, 0x4F7F9540, - 0x4F7E7200, 0x4F7D4EC0, 0x4F7C2B80, - 0x4F7B0840, 0x4F79E500, 0x4F78C1C0, - 0x4F779E80, 0x4F767B40, 0x4F755800, - 0x4F7434C0, 0x4F731180, 0x4F71EE40, - 0x4F70CB00, 0x4F6FA7C0, 0x4F6E8480, - 0x4F6D6140, 0x4F6C3E00, 0x4F6B1AC0, - 0x4F69F780, 0x4F68D440, 0x4F67B100, - 0x4F668DC0, 0x4F656A80, 0x4F644740, - 0x4F632400, 0x4F6200C0, 0x4F60DD80, - 0x4F5FBA40, 0x4F5E9700, 0x4F5D73C0, - 0x4F5C5080, 0x4F5B2D40, 0x4F5A0A00, - 0x4F58E6C0, 0x4F57C380, 0x4F56A040, - 0x4F557D00, 0x4F5459C0, 0x4F533680, - 0x4F521340, 0x4F50F000, 0x4F4FCCC0, - 0x4F4EA980, 0x4F4D8640, 0x4F4C6300, - 0x4F4B3FC0, 0x4F4A1C80, 0x4F48F940, - 0x4F47D600, 0x4F46B2C0, 0x4F458F80, - 0x4F446C40, 0x4F434900, 0x4F4225C0, - 0x4F410280, 0x4F3FDF40, 0x4F3EBC00, - 0x4F3D98C0, 0x4F3C7580, 0x4F3B5240, - 0x4F3A2F00, 0x4F390BC0, 0x4F37E880, - 0x4F36C540, 0x4F35A200, 0x4F347EC0, - 0x4F335B80, 0x4F323840, 0x4F311500, - 0x4F2FF1C0, 0x4F2ECE80, 0x4F2DAB40, - 0x4F2C8800, 0x4F2B64C0, 0x4F2A4180, - 0x4F291E40, 0x4F27FB00, 0x4F26D7C0, - 0x4F25B480, 0x4F249140, 0x4F236E00, - 0x4F224AC0, 0x4F212780, 0x4F200440, - 0x4F1EE100, 0x4F1DBDC0, 0x4F1C9A80, - 0x4F1B7740, 0x4F1A5400, 0x4F1930C0, - 0x4F180D80, 0x4F16EA40, 0x4F15C700, - 0x4F14A3C0, 0x4F138080, 0x4F125D40, - 0x4F113A00, 0x4F1016C0, 0x4F0EF380, - 0x4F0DD040, 0x4F0CAD00, 0x4F0B89C0, - 0x4F0A6680, 0x4F094340, 0x4F082000, - 0x4F06FCC0, 0x4F05D980, 0x4F04B640, - 0x4F039300, 0x4F026FC0, 0x4F014C80, - 0x4F002940, 0x4EFF0600, 0x4EFDE2C0, - 0x4EFCBF80, 0x4EFB9C40, 0x4EFA7900, - 0x4EF955C0, 0x4EF83280, 0x4EF70F40, - 0x4EF5EC00, 0x4EF4C8C0, 0x4EF3A580, - 0x4EF28240, 0x4EF15F00, 0x4EF03BC0, - 0x4EEF1880, 0x4EEDF540, 0x4EECD200, - 0x4EEBAEC0, 0x4EEA8B80, 0x4EE96840, - 0x4EE84500, 0x4EE721C0, 0x4EE5FE80, - 0x4EE4DB40, 0x4EE3B800, 0x4EE294C0, - 0x4EE17180, 0x4EE04E40, 0x4EDF2B00, - 0x4EDE07C0, 0x4EDCE480, 0x4EDBC140, - 0x4EDA9E00, 0x4ED97AC0, 0x4ED85780, - 0x4ED73440, 0x4ED61100, 0x4ED4EDC0, - 0x4ED3CA80, 0x4ED2A740, 0x4ED18400, - 0x4ED060C0, 0x4ECF3D80, 0x4ECE1A40, - 0x4ECCF700, 0x4ECBD3C0, 0x4ECAB080, - 0x4EC98D40, 0x4EC86A00, 0x4EC746C0, - 0x4EC62380, 0x4EC50040, 0x4EC3DD00, - 0x4EC2B9C0, 0x4EC19680, 0x4EC07340, - 0x4EBF5000, 0x4EBE2CC0, 0x4EBD0980, - 0x4EBBE640, 0x4EBAC300, 0x4EB99FC0, - 0x4EB87C80, 0x4EB75940, 0x4EB63600, - 0x4EB512C0, 0x4EB3EF80, 0x4EB2CC40, - 0x4EB1A900, 0x4EB085C0, 0x4EAF6280, - 0x4EAE3F40, 0x4EAD1C00, 0x4EABF8C0, - 0x4EAAD580, 0x4EA9B240, 0x4EA88F00, - 0x4EA76BC0, 0x4EA64880, 0x4EA52540, - 0x4EA40200, 0x4EA2DEC0, 0x4EA1BB80, - 0x4EA09840, 0x4E9F7500, 0x4E9E51C0, - 0x4E9D2E80, 0x4E9C0B40, 0x4E9AE800, - 0x4E99C4C0, 0x4E98A180, 0x4E977E40, - 0x4E965B00, 0x4E9537C0, 0x4E941480, - 0x4E92F140, 0x4E91CE00, 0x4E90AAC0, - 0x4E8F8780, 0x4E8E6440, 0x4E8D4100, - 0x4E8C1DC0, 0x4E8AFA80, 0x4E89D740, - 0x4E88B400, 0x4E8790C0, 0x4E866D80, - 0x4E854A40, 0x4E842700, 0x4E8303C0, - 0x4E81E080, 0x4E80BD40, 0x4E7F9A00, - 0x4E7E76C0, 0x4E7D5380, 0x4E7C3040, - 0x4E7B0D00, 0x4E79E9C0, 0x4E78C680, - 0x4E77A340, 0x4E768000, 0x4E755CC0, - 0x4E743980, 0x4E731640, 0x4E71F300, - 0x4E70CFC0, 0x4E6FAC80, 0x4E6E8940, - 0x4E6D6600, 0x4E6C42C0, 0x4E6B1F80, - 0x4E69FC40, 0x4E68D900, 0x4E67B5C0, - 0x4E669280, 0x4E656F40, 0x4E644C00, - 0x4E6328C0, 0x4E620580, 0x4E60E240, - 0x4E5FBF00, 0x4E5E9BC0, 0x4E5D7880, - 0x4E5C5540, 0x4E5B3200, 0x4E5A0EC0, - 0x4E58EB80, 0x4E57C840, 0x4E56A500, - 0x4E5581C0, 0x4E545E80, 0x4E533B40, - 0x4E521800, 0x4E50F4C0, 0x4E4FD180, - 0x4E4EAE40, 0x4E4D8B00, 0x4E4C67C0, - 0x4E4B4480, 0x4E4A2140, 0x4E48FE00, - 0x4E47DAC0, 0x4E46B780, 0x4E459440, - 0x4E447100, 0x4E434DC0, 0x4E422A80, - 0x4E410740, 0x4E3FE400, 0x4E3EC0C0, - 0x4E3D9D80, 0x4E3C7A40, 0x4E3B5700, - 0x4E3A33C0, 0x4E391080, 0x4E37ED40, - 0x4E36CA00, 0x4E35A6C0, 0x4E348380, - 0x4E336040, 0x4E323D00, 0x4E3119C0, - 0x4E2FF680, 0x4E2ED340, 0x4E2DB000, - 0x4E2C8CC0, 0x4E2B6980, 0x4E2A4640, - 0x4E292300, 0x4E27FFC0, 0x4E26DC80, - 0x4E25B940, 0x4E249600, 0x4E2372C0, - 0x4E224F80, 0x4E212C40, 0x4E200900, - 0x4E1EE5C0, 0x4E1DC280, 0x4E1C9F40, - 0x4E1B7C00, 0x4E1A58C0, 0x4E193580, - 0x4E181240, 0x4E16EF00, 0x4E15CBC0, - 0x4E14A880, 0x4E138540, 0x4E126200, - 0x4E113EC0, 0x4E101B80, 0x4E0EF840, - 0x4E0DD500, 0x4E0CB1C0, 0x4E0B8E80, - 0x4E0A6B40, 0x4E094800, 0x4E0824C0, - 0x4E070180, 0x4E05DE40, 0x4E04BB00, - 0x4E0397C0, 0x4E027480, 0x4E015140, - 0x4E002E00, 0x4DFF0AC0, 0x4DFDE780, - 0x4DFCC440, 0x4DFBA100, 0x4DFA7DC0, - 0x4DF95A80, 0x4DF83740, 0x4DF71400, - 0x4DF5F0C0, 0x4DF4CD80, 0x4DF3AA40, - 0x4DF28700, 0x4DF163C0, 0x4DF04080, - 0x4DEF1D40, 0x4DEDFA00, 0x4DECD6C0, - 0x4DEBB380, 0x4DEA9040, 0x4DE96D00, - 0x4DE849C0, 0x4DE72680, 0x4DE60340, - 0x4DE4E000, 0x4DE3BCC0, 0x4DE29980, - 0x4DE17640, 0x4DE05300, 0x4DDF2FC0, - 0x4DDE0C80, 0x4DDCE940, 0x4DDBC600, - 0x4DDAA2C0, 0x4DD97F80, 0x4DD85C40, - 0x4DD73900, 0x4DD615C0, 0x4DD4F280, - 0x4DD3CF40, 0x4DD2AC00, 0x4DD188C0, - 0x4DD06580, 0x4DCF4240, 0x4DCE1F00, - 0x4DCCFBC0, 0x4DCBD880, 0x4DCAB540, - 0x4DC99200, 0x4DC86EC0, 0x4DC74B80, - 0x4DC62840, 0x4DC50500, 0x4DC3E1C0, - 0x4DC2BE80, 0x4DC19B40, 0x4DC07800, - 0x4DBF54C0, 0x4DBE3180, 0x4DBD0E40, - 0x4DBBEB00, 0x4DBAC7C0, 0x4DB9A480, - 0x4DB88140, 0x4DB75E00, 0x4DB63AC0, - 0x4DB51780, 0x4DB3F440, 0x4DB2D100, - 0x4DB1ADC0, 0x4DB08A80, 0x4DAF6740, - 0x4DAE4400, 0x4DAD20C0, 0x4DABFD80, - 0x4DAADA40, 0x4DA9B700, 0x4DA893C0, - 0x4DA77080, 0x4DA64D40, 0x4DA52A00, - 0x4DA406C0, 0x4DA2E380, 0x4DA1C040, - 0x4DA09D00, 0x4D9F79C0, 0x4D9E5680, - 0x4D9D3340, 0x4D9C1000, 0x4D9AECC0, - 0x4D99C980, 0x4D98A640, 0x4D978300, - 0x4D965FC0, 0x4D953C80, 0x4D941940, - 0x4D92F600, 0x4D91D2C0, 0x4D90AF80, - 0x4D8F8C40, 0x4D8E6900, 0x4D8D45C0, - 0x4D8C2280, 0x4D8AFF40, 0x4D89DC00, - 0x4D88B8C0, 0x4D879580, 0x4D867240, - 0x4D854F00, 0x4D842BC0, 0x4D830880, - 0x4D81E540, 0x4D80C200, 0x4D7F9EC0, - 0x4D7E7B80, 0x4D7D5840, 0x4D7C3500, - 0x4D7B11C0, 0x4D79EE80, 0x4D78CB40, - 0x4D77A800, 0x4D7684C0, 0x4D756180, - 0x4D743E40, 0x4D731B00, 0x4D71F7C0, - 0x4D70D480, 0x4D6FB140, 0x4D6E8E00, - 0x4D6D6AC0, 0x4D6C4780, 0x4D6B2440, - 0x4D6A0100, 0x4D68DDC0, 0x4D67BA80, - 0x4D669740, 0x4D657400, 0x4D6450C0, - 0x4D632D80, 0x4D620A40, 0x4D60E700, - 0x4D5FC3C0, 0x4D5EA080, 0x4D5D7D40, - 0x4D5C5A00, 0x4D5B36C0, 0x4D5A1380, - 0x4D58F040, 0x4D57CD00, 0x4D56A9C0, - 0x4D558680, 0x4D546340, 0x4D534000, - 0x4D521CC0, 0x4D50F980, 0x4D4FD640, - 0x4D4EB300, 0x4D4D8FC0, 0x4D4C6C80, - 0x4D4B4940, 0x4D4A2600, 0x4D4902C0, - 0x4D47DF80, 0x4D46BC40, 0x4D459900, - 0x4D4475C0, 0x4D435280, 0x4D422F40, - 0x4D410C00, 0x4D3FE8C0, 0x4D3EC580, - 0x4D3DA240, 0x4D3C7F00, 0x4D3B5BC0, - 0x4D3A3880, 0x4D391540, 0x4D37F200, - 0x4D36CEC0, 0x4D35AB80, 0x4D348840, - 0x4D336500, 0x4D3241C0, 0x4D311E80, - 0x4D2FFB40, 0x4D2ED800, 0x4D2DB4C0, - 0x4D2C9180, 0x4D2B6E40, 0x4D2A4B00, - 0x4D2927C0, 0x4D280480, 0x4D26E140, - 0x4D25BE00, 0x4D249AC0, 0x4D237780, - 0x4D225440, 0x4D213100, 0x4D200DC0, - 0x4D1EEA80, 0x4D1DC740, 0x4D1CA400, - 0x4D1B80C0, 0x4D1A5D80, 0x4D193A40, - 0x4D181700, 0x4D16F3C0, 0x4D15D080, - 0x4D14AD40, 0x4D138A00, 0x4D1266C0, - 0x4D114380, 0x4D102040, 0x4D0EFD00, - 0x4D0DD9C0, 0x4D0CB680, 0x4D0B9340, - 0x4D0A7000, 0x4D094CC0, 0x4D082980, - 0x4D070640, 0x4D05E300, 0x4D04BFC0, - 0x4D039C80, 0x4D027940, 0x4D015600, - 0x4D0032C0, 0x4CFF0F80, 0x4CFDEC40, - 0x4CFCC900, 0x4CFBA5C0, 0x4CFA8280, - 0x4CF95F40, 0x4CF83C00, 0x4CF718C0, - 0x4CF5F580, 0x4CF4D240, 0x4CF3AF00, - 0x4CF28BC0, 0x4CF16880, 0x4CF04540, - 0x4CEF2200, 0x4CEDFEC0, 0x4CECDB80, - 0x4CEBB840, 0x4CEA9500, 0x4CE971C0, - 0x4CE84E80, 0x4CE72B40, 0x4CE60800, - 0x4CE4E4C0, 0x4CE3C180, 0x4CE29E40, - 0x4CE17B00, 0x4CE057C0, 0x4CDF3480, - 0x4CDE1140, 0x4CDCEE00, 0x4CDBCAC0, - 0x4CDAA780, 0x4CD98440, 0x4CD86100, - 0x4CD73DC0, 0x4CD61A80, 0x4CD4F740, - 0x4CD3D400, 0x4CD2B0C0, 0x4CD18D80, - 0x4CD06A40, 0x4CCF4700, 0x4CCE23C0, - 0x4CCD0080, 0x4CCBDD40, 0x4CCABA00, - 0x4CC996C0, 0x4CC87380, 0x4CC75040, - 0x4CC62D00, 0x4CC509C0, 0x4CC3E680, - 0x4CC2C340, 0x4CC1A000, 0x4CC07CC0, - 0x4CBF5980, 0x4CBE3640, 0x4CBD1300, - 0x4CBBEFC0, 0x4CBACC80, 0x4CB9A940, - 0x4CB88600, 0x4CB762C0, 0x4CB63F80, - 0x4CB51C40, 0x4CB3F900, 0x4CB2D5C0, - 0x4CB1B280, 0x4CB08F40, 0x4CAF6C00, - 0x4CAE48C0, 0x4CAD2580, 0x4CAC0240, - 0x4CAADF00, 0x4CA9BBC0, 0x4CA89880, - 0x4CA77540, 0x4CA65200, 0x4CA52EC0, - 0x4CA40B80, 0x4CA2E840, 0x4CA1C500, - 0x4CA0A1C0, 0x4C9F7E80, 0x4C9E5B40, - 0x4C9D3800, 0x4C9C14C0, 0x4C9AF180, - 0x4C99CE40, 0x4C98AB00, 0x4C9787C0, - 0x4C966480, 0x4C954140, 0x4C941E00, - 0x4C92FAC0, 0x4C91D780, 0x4C90B440, - 0x4C8F9100, 0x4C8E6DC0, 0x4C8D4A80, - 0x4C8C2740, 0x4C8B0400, 0x4C89E0C0, - 0x4C88BD80, 0x4C879A40, 0x4C867700, - 0x4C8553C0, 0x4C843080, 0x4C830D40, - 0x4C81EA00, 0x4C80C6C0, 0x4C7FA380, - 0x4C7E8040, 0x4C7D5D00, 0x4C7C39C0, - 0x4C7B1680, 0x4C79F340, 0x4C78D000, - 0x4C77ACC0, 0x4C768980, 0x4C756640, - 0x4C744300, 0x4C731FC0, 0x4C71FC80, - 0x4C70D940, 0x4C6FB600, 0x4C6E92C0, - 0x4C6D6F80, 0x4C6C4C40, 0x4C6B2900, - 0x4C6A05C0, 0x4C68E280, 0x4C67BF40, - 0x4C669C00, 0x4C6578C0, 0x4C645580, - 0x4C633240, 0x4C620F00, 0x4C60EBC0, - 0x4C5FC880, 0x4C5EA540, 0x4C5D8200, - 0x4C5C5EC0, 0x4C5B3B80, 0x4C5A1840, - 0x4C58F500, 0x4C57D1C0, 0x4C56AE80, - 0x4C558B40, 0x4C546800, 0x4C5344C0, - 0x4C522180, 0x4C50FE40, 0x4C4FDB00, - 0x4C4EB7C0, 0x4C4D9480, 0x4C4C7140, - 0x4C4B4E00, 0x4C4A2AC0, 0x4C490780, - 0x4C47E440, 0x4C46C100, 0x4C459DC0, - 0x4C447A80, 0x4C435740, 0x4C423400, - 0x4C4110C0, 0x4C3FED80, 0x4C3ECA40, - 0x4C3DA700, 0x4C3C83C0, 0x4C3B6080, - 0x4C3A3D40, 0x4C391A00, 0x4C37F6C0, - 0x4C36D380, 0x4C35B040, 0x4C348D00, - 0x4C3369C0, 0x4C324680, 0x4C312340, - 0x4C300000, 0x4C2EF2C0, 0x4C2DE580, - 0x4C2CD840, 0x4C2BCB00, 0x4C2ABDC0, - 0x4C29B080, 0x4C28A340, 0x4C279600, - 0x4C2688C0, 0x4C257B80, 0x4C246E40, - 0x4C236100, 0x4C2253C0, 0x4C214680, - 0x4C203940, 0x4C1F2C00, 0x4C1E1EC0, - 0x4C1D1180, 0x4C1C0440, 0x4C1AF700, - 0x4C19E9C0, 0x4C18DC80, 0x4C17CF40, - 0x4C16C200, 0x4C15B4C0, 0x4C14A780, - 0x4C139A40, 0x4C128D00, 0x4C117FC0, - 0x4C107280, 0x4C0F6540, 0x4C0E5800, - 0x4C0D4AC0, 0x4C0C3D80, 0x4C0B3040, - 0x4C0A2300, 0x4C0915C0, 0x4C080880, - 0x4C06FB40, 0x4C05EE00, 0x4C04E0C0, - 0x4C03D380, 0x4C02C640, 0x4C01B900, - 0x4C00ABC0, 0x4BFF9E80, 0x4BFE9140, - 0x4BFD8400, 0x4BFC76C0, 0x4BFB6980, - 0x4BFA5C40, 0x4BF94F00, 0x4BF841C0, - 0x4BF73480, 0x4BF62740, 0x4BF51A00, - 0x4BF40CC0, 0x4BF2FF80, 0x4BF1F240, - 0x4BF0E500, 0x4BEFD7C0, 0x4BEECA80, - 0x4BEDBD40, 0x4BECB000, 0x4BEBA2C0, - 0x4BEA9580, 0x4BE98840, 0x4BE87B00, - 0x4BE76DC0, 0x4BE66080, 0x4BE55340, - 0x4BE44600, 0x4BE338C0, 0x4BE22B80, - 0x4BE11E40, 0x4BE01100, 0x4BDF03C0, - 0x4BDDF680, 0x4BDCE940, 0x4BDBDC00, - 0x4BDACEC0, 0x4BD9C180, 0x4BD8B440, - 0x4BD7A700, 0x4BD699C0, 0x4BD58C80, - 0x4BD47F40, 0x4BD37200, 0x4BD264C0, - 0x4BD15780, 0x4BD04A40, 0x4BCF3D00, - 0x4BCE2FC0, 0x4BCD2280, 0x4BCC1540, - 0x4BCB0800, 0x4BC9FAC0, 0x4BC8ED80, - 0x4BC7E040, 0x4BC6D300, 0x4BC5C5C0, - 0x4BC4B880, 0x4BC3AB40, 0x4BC29E00, - 0x4BC190C0, 0x4BC08380, 0x4BBF7640, - 0x4BBE6900, 0x4BBD5BC0, 0x4BBC4E80, - 0x4BBB4140, 0x4BBA3400, 0x4BB926C0, - 0x4BB81980, 0x4BB70C40, 0x4BB5FF00, - 0x4BB4F1C0, 0x4BB3E480, 0x4BB2D740, - 0x4BB1CA00, 0x4BB0BCC0, 0x4BAFAF80, - 0x4BAEA240, 0x4BAD9500, 0x4BAC87C0, - 0x4BAB7A80, 0x4BAA6D40, 0x4BA96000, - 0x4BA852C0, 0x4BA74580, 0x4BA63840, - 0x4BA52B00, 0x4BA41DC0, 0x4BA31080, - 0x4BA20340, 0x4BA0F600, 0x4B9FE8C0, - 0x4B9EDB80, 0x4B9DCE40, 0x4B9CC100, - 0x4B9BB3C0, 0x4B9AA680, 0x4B999940, - 0x4B988C00, 0x4B977EC0, 0x4B967180, - 0x4B956440, 0x4B945700, 0x4B9349C0, - 0x4B923C80, 0x4B912F40, 0x4B902200, - 0x4B8F14C0, 0x4B8E0780, 0x4B8CFA40, - 0x4B8BED00, 0x4B8ADFC0, 0x4B89D280, - 0x4B88C540, 0x4B87B800, 0x4B86AAC0, - 0x4B859D80, 0x4B849040, 0x4B838300, - 0x4B8275C0, 0x4B816880, 0x4B805B40, - 0x4B7F4E00, 0x4B7E40C0, 0x4B7D3380, - 0x4B7C2640, 0x4B7B1900, 0x4B7A0BC0, - 0x4B78FE80, 0x4B77F140, 0x4B76E400, - 0x4B75D6C0, 0x4B74C980, 0x4B73BC40, - 0x4B72AF00, 0x4B71A1C0, 0x4B709480, - 0x4B6F8740, 0x4B6E7A00, 0x4B6D6CC0, - 0x4B6C5F80, 0x4B6B5240, 0x4B6A4500, - 0x4B6937C0, 0x4B682A80, 0x4B671D40, - 0x4B661000, 0x4B6502C0, 0x4B63F580, - 0x4B62E840, 0x4B61DB00, 0x4B60CDC0, - 0x4B5FC080, 0x4B5EB340, 0x4B5DA600, - 0x4B5C98C0, 0x4B5B8B80, 0x4B5A7E40, - 0x4B597100, 0x4B5863C0, 0x4B575680, - 0x4B564940, 0x4B553C00, 0x4B542EC0, - 0x4B532180, 0x4B521440, 0x4B510700, - 0x4B4FF9C0, 0x4B4EEC80, 0x4B4DDF40, - 0x4B4CD200, 0x4B4BC4C0, 0x4B4AB780, - 0x4B49AA40, 0x4B489D00, 0x4B478FC0, - 0x4B468280, 0x4B457540, 0x4B446800, - 0x4B435AC0, 0x4B424D80, 0x4B414040, - 0x4B403300, 0x4B3F25C0, 0x4B3E1880, - 0x4B3D0B40, 0x4B3BFE00, 0x4B3AF0C0, - 0x4B39E380, 0x4B38D640, 0x4B37C900, - 0x4B36BBC0, 0x4B35AE80, 0x4B34A140, - 0x4B339400, 0x4B3286C0, 0x4B317980, - 0x4B306C40, 0x4B2F5F00, 0x4B2E51C0, - 0x4B2D4480, 0x4B2C3740, 0x4B2B2A00, - 0x4B2A1CC0, 0x4B290F80, 0x4B280240, - 0x4B26F500, 0x4B25E7C0, 0x4B24DA80, - 0x4B23CD40, 0x4B22C000, 0x4B21B2C0, - 0x4B20A580, 0x4B1F9840, 0x4B1E8B00, - 0x4B1D7DC0, 0x4B1C7080, 0x4B1B6340, - 0x4B1A5600, 0x4B1948C0, 0x4B183B80, - 0x4B172E40, 0x4B162100, 0x4B1513C0, - 0x4B140680, 0x4B12F940, 0x4B11EC00, - 0x4B10DEC0, 0x4B0FD180, 0x4B0EC440, - 0x4B0DB700, 0x4B0CA9C0, 0x4B0B9C80, - 0x4B0A8F40, 0x4B098200, 0x4B0874C0, - 0x4B076780, 0x4B065A40, 0x4B054D00, - 0x4B043FC0, 0x4B033280, 0x4B022540, - 0x4B011800, 0x4B000AC0, 0x4AFEFD80, - 0x4AFDF040, 0x4AFCE300, 0x4AFBD5C0, - 0x4AFAC880, 0x4AF9BB40, 0x4AF8AE00, - 0x4AF7A0C0, 0x4AF69380, 0x4AF58640, - 0x4AF47900, 0x4AF36BC0, 0x4AF25E80, - 0x4AF15140, 0x4AF04400, 0x4AEF36C0, - 0x4AEE2980, 0x4AED1C40, 0x4AEC0F00, - 0x4AEB01C0, 0x4AE9F480, 0x4AE8E740, - 0x4AE7DA00, 0x4AE6CCC0, 0x4AE5BF80, - 0x4AE4B240, 0x4AE3A500, 0x4AE297C0, - 0x4AE18A80, 0x4AE07D40, 0x4ADF7000, - 0x4ADE62C0, 0x4ADD5580, 0x4ADC4840, - 0x4ADB3B00, 0x4ADA2DC0, 0x4AD92080, - 0x4AD81340, 0x4AD70600, 0x4AD5F8C0, - 0x4AD4EB80, 0x4AD3DE40, 0x4AD2D100, - 0x4AD1C3C0, 0x4AD0B680, 0x4ACFA940, - 0x4ACE9C00, 0x4ACD8EC0, 0x4ACC8180, - 0x4ACB7440, 0x4ACA6700, 0x4AC959C0, - 0x4AC84C80, 0x4AC73F40, 0x4AC63200, - 0x4AC524C0, 0x4AC41780, 0x4AC30A40, - 0x4AC1FD00, 0x4AC0EFC0, 0x4ABFE280, - 0x4ABED540, 0x4ABDC800, 0x4ABCBAC0, - 0x4ABBAD80, 0x4ABAA040, 0x4AB99300, - 0x4AB885C0, 0x4AB77880, 0x4AB66B40, - 0x4AB55E00, 0x4AB450C0, 0x4AB34380, - 0x4AB23640, 0x4AB12900, 0x4AB01BC0, - 0x4AAF0E80, 0x4AAE0140, 0x4AACF400, - 0x4AABE6C0, 0x4AAAD980, 0x4AA9CC40, - 0x4AA8BF00, 0x4AA7B1C0, 0x4AA6A480, - 0x4AA59740, 0x4AA48A00, 0x4AA37CC0, - 0x4AA26F80, 0x4AA16240, 0x4AA05500, - 0x4A9F47C0, 0x4A9E3A80, 0x4A9D2D40, - 0x4A9C2000, 0x4A9B12C0, 0x4A9A0580, - 0x4A98F840, 0x4A97EB00, 0x4A96DDC0, - 0x4A95D080, 0x4A94C340, 0x4A93B600, - 0x4A92A8C0, 0x4A919B80, 0x4A908E40, - 0x4A8F8100, 0x4A8E73C0, 0x4A8D6680, - 0x4A8C5940, 0x4A8B4C00, 0x4A8A3EC0, - 0x4A893180, 0x4A882440, 0x4A871700, - 0x4A8609C0, 0x4A84FC80, 0x4A83EF40, - 0x4A82E200, 0x4A81D4C0, 0x4A80C780, - 0x4A7FBA40, 0x4A7EAD00, 0x4A7D9FC0, - 0x4A7C9280, 0x4A7B8540, 0x4A7A7800, - 0x4A796AC0, 0x4A785D80, 0x4A775040, - 0x4A764300, 0x4A7535C0, 0x4A742880, - 0x4A731B40, 0x4A720E00, 0x4A7100C0, - 0x4A6FF380, 0x4A6EE640, 0x4A6DD900, - 0x4A6CCBC0, 0x4A6BBE80, 0x4A6AB140, - 0x4A69A400, 0x4A6896C0, 0x4A678980, - 0x4A667C40, 0x4A656F00, 0x4A6461C0, - 0x4A635480, 0x4A624740, 0x4A613A00, - 0x4A602CC0, 0x4A5F1F80, 0x4A5E1240, - 0x4A5D0500, 0x4A5BF7C0, 0x4A5AEA80, - 0x4A59DD40, 0x4A58D000, 0x4A57C2C0, - 0x4A56B580, 0x4A55A840, 0x4A549B00, - 0x4A538DC0, 0x4A528080, 0x4A517340, - 0x4A506600, 0x4A4F58C0, 0x4A4E4B80, - 0x4A4D3E40, 0x4A4C3100, 0x4A4B23C0, - 0x4A4A1680, 0x4A490940, 0x4A47FC00, - 0x4A46EEC0, 0x4A45E180, 0x4A44D440, - 0x4A43C700, 0x4A42B9C0, 0x4A41AC80, - 0x4A409F40, 0x4A3F9200, 0x4A3E84C0, - 0x4A3D7780, 0x4A3C6A40, 0x4A3B5D00, - 0x4A3A4FC0, 0x4A394280, 0x4A383540, - 0x4A372800, 0x4A361AC0, 0x4A350D80, - 0x4A340040, 0x4A32F300, 0x4A31E5C0, - 0x4A30D880, 0x4A2FCB40, 0x4A2EBE00, - 0x4A2DB0C0, 0x4A2CA380, 0x4A2B9640, - 0x4A2A8900, 0x4A297BC0, 0x4A286E80, - 0x4A276140, 0x4A265400, 0x4A2546C0, - 0x4A243980, 0x4A232C40, 0x4A221F00, - 0x4A2111C0, 0x4A200480, 0x4A1EF740, - 0x4A1DEA00, 0x4A1CDCC0, 0x4A1BCF80, - 0x4A1AC240, 0x4A19B500, 0x4A18A7C0, - 0x4A179A80, 0x4A168D40, 0x4A158000, - 0x4A1472C0, 0x4A136580, 0x4A125840, - 0x4A114B00, 0x4A103DC0, 0x4A0F3080, - 0x4A0E2340, 0x4A0D1600, 0x4A0C08C0, - 0x4A0AFB80, 0x4A09EE40, 0x4A08E100, - 0x4A07D3C0, 0x4A06C680, 0x4A05B940, - 0x4A04AC00, 0x4A039EC0, 0x4A029180, - 0x4A018440, 0x4A007700, 0x49FF69C0, - 0x49FE5C80, 0x49FD4F40, 0x49FC4200, - 0x49FB34C0, 0x49FA2780, 0x49F91A40, - 0x49F80D00, 0x49F6FFC0, 0x49F5F280, - 0x49F4E540, 0x49F3D800, 0x49F2CAC0, - 0x49F1BD80, 0x49F0B040, 0x49EFA300, - 0x49EE95C0, 0x49ED8880, 0x49EC7B40, - 0x49EB6E00, 0x49EA60C0, 0x49E95380, - 0x49E84640, 0x49E73900, 0x49E62BC0, - 0x49E51E80, 0x49E41140, 0x49E30400, - 0x49E1F6C0, 0x49E0E980, 0x49DFDC40, - 0x49DECF00, 0x49DDC1C0, 0x49DCB480, - 0x49DBA740, 0x49DA9A00, 0x49D98CC0, - 0x49D87F80, 0x49D77240, 0x49D66500, - 0x49D557C0, 0x49D44A80, 0x49D33D40, - 0x49D23000, 0x49D122C0, 0x49D01580, - 0x49CF0840, 0x49CDFB00, 0x49CCEDC0, - 0x49CBE080, 0x49CAD340, 0x49C9C600, - 0x49C8B8C0, 0x49C7AB80, 0x49C69E40, - 0x49C59100, 0x49C483C0, 0x49C37680, - 0x49C26940, 0x49C15C00, 0x49C04EC0, - 0x49BF4180, 0x49BE3440, 0x49BD2700, - 0x49BC19C0, 0x49BB0C80, 0x49B9FF40, - 0x49B8F200, 0x49B7E4C0, 0x49B6D780, - 0x49B5CA40, 0x49B4BD00, 0x49B3AFC0, - 0x49B2A280, 0x49B19540, 0x49B08800, - 0x49AF7AC0, 0x49AE6D80, 0x49AD6040, - 0x49AC5300, 0x49AB45C0, 0x49AA3880, - 0x49A92B40, 0x49A81E00, 0x49A710C0, - 0x49A60380, 0x49A4F640, 0x49A3E900, - 0x49A2DBC0, 0x49A1CE80, 0x49A0C140, - 0x499FB400, 0x499EA6C0, 0x499D9980, - 0x499C8C40, 0x499B7F00, 0x499A71C0, - 0x49996480, 0x49985740, 0x49974A00, - 0x49963CC0, 0x49952F80, 0x49942240, - 0x49931500, 0x499207C0, 0x4990FA80, - 0x498FED40, 0x498EE000, 0x498DD2C0, - 0x498CC580, 0x498BB840, 0x498AAB00, - 0x49899DC0, 0x49889080, 0x49878340, - 0x49867600, 0x498568C0, 0x49845B80, - 0x49834E40, 0x49824100, 0x498133C0, - 0x49802680, 0x497F1940, 0x497E0C00, - 0x497CFEC0, 0x497BF180, 0x497AE440, - 0x4979D700, 0x4978C9C0, 0x4977BC80, - 0x4976AF40, 0x4975A200, 0x497494C0, - 0x49738780, 0x49727A40, 0x49716D00, - 0x49705FC0, 0x496F5280, 0x496E4540, - 0x496D3800, 0x496C2AC0, 0x496B1D80, - 0x496A1040, 0x49690300, 0x4967F5C0, - 0x4966E880, 0x4965DB40, 0x4964CE00, - 0x4963C0C0, 0x4962B380, 0x4961A640, - 0x49609900, 0x495F8BC0, 0x495E7E80, - 0x495D7140, 0x495C6400, 0x495B56C0, - 0x495A4980, 0x49593C40, 0x49582F00, - 0x495721C0, 0x49561480, 0x49550740, - 0x4953FA00, 0x4952ECC0, 0x4951DF80, - 0x4950D240, 0x494FC500, 0x494EB7C0, - 0x494DAA80, 0x494C9D40, 0x494B9000, - 0x494A82C0, 0x49497580, 0x49486840, - 0x49475B00, 0x49464DC0, 0x49454080, - 0x49443340, 0x49432600, 0x494218C0, - 0x49410B80, 0x493FFE40, 0x493EF100, - 0x493DE3C0, 0x493CD680, 0x493BC940, - 0x493ABC00, 0x4939AEC0, 0x4938A180, - 0x49379440, 0x49368700, 0x493579C0, - 0x49346C80, 0x49335F40, 0x49325200, - 0x493144C0, 0x49303780, 0x492F2A40, - 0x492E1D00, 0x492D0FC0, 0x492C0280, - 0x492AF540, 0x4929E800, 0x4928DAC0, - 0x4927CD80, 0x4926C040, 0x4925B300, - 0x4924A5C0, 0x49239880, 0x49228B40, - 0x49217E00, 0x492070C0, 0x491F6380, - 0x491E5640, 0x491D4900, 0x491C3BC0, - 0x491B2E80, 0x491A2140, 0x49191400, - 0x491806C0, 0x4916F980, 0x4915EC40, - 0x4914DF00, 0x4913D1C0, 0x4912C480, - 0x4911B740, 0x4910AA00, 0x490F9CC0, - 0x490E8F80, 0x490D8240, 0x490C7500, - 0x490B67C0, 0x490A5A80, 0x49094D40, - 0x49084000, 0x490732C0, 0x49062580, - 0x49051840, 0x49040B00, 0x4902FDC0, - 0x4901F080, 0x4900E340, 0x48FFD600, - 0x48FEC8C0, 0x48FDBB80, 0x48FCAE40, - 0x48FBA100, 0x48FA93C0, 0x48F98680, - 0x48F87940, 0x48F76C00, 0x48F65EC0, - 0x48F55180, 0x48F44440, 0x48F33700, - 0x48F229C0, 0x48F11C80, 0x48F00F40, - 0x48EF0200, 0x48EDF4C0, 0x48ECE780, - 0x48EBDA40, 0x48EACD00, 0x48E9BFC0, - 0x48E8B280, 0x48E7A540, 0x48E69800, - 0x48E58AC0, 0x48E47D80, 0x48E37040, - 0x48E26300, 0x48E155C0, 0x48E04880, - 0x48DF3B40, 0x48DE2E00, 0x48DD20C0, - 0x48DC1380, 0x48DB0640, 0x48D9F900, - 0x48D8EBC0, 0x48D7DE80, 0x48D6D140, - 0x48D5C400, 0x48D4B6C0, 0x48D3A980, - 0x48D29C40, 0x48D18F00, 0x48D081C0, - 0x48CF7480, 0x48CE6740, 0x48CD5A00, - 0x48CC4CC0, 0x48CB3F80, 0x48CA3240, - 0x48C92500, 0x48C817C0, 0x48C70A80, - 0x48C5FD40, 0x48C4F000, 0x48C3E2C0, - 0x48C2D580, 0x48C1C840, 0x48C0BB00, - 0x48BFADC0, 0x48BEA080, 0x48BD9340, - 0x48BC8600, 0x48BB78C0, 0x48BA6B80, - 0x48B95E40, 0x48B85100, 0x48B743C0, - 0x48B63680, 0x48B52940, 0x48B41C00, - 0x48B30EC0, 0x48B20180, 0x48B0F440, - 0x48AFE700, 0x48AED9C0, 0x48ADCC80, - 0x48ACBF40, 0x48ABB200, 0x48AAA4C0, - 0x48A99780, 0x48A88A40, 0x48A77D00, - 0x48A66FC0, 0x48A56280, 0x48A45540, - 0x48A34800, 0x48A23AC0, 0x48A12D80, - 0x48A02040, 0x489F1300, 0x489E05C0, - 0x489CF880, 0x489BEB40, 0x489ADE00, - 0x4899D0C0, 0x4898C380, 0x4897B640, - 0x4896A900, 0x48959BC0, 0x48948E80, - 0x48938140, 0x48927400, 0x489166C0, - 0x48905980, 0x488F4C40, 0x488E3F00, - 0x488D31C0, 0x488C2480, 0x488B1740, - 0x488A0A00, 0x4888FCC0, 0x4887EF80, - 0x4886E240, 0x4885D500, 0x4884C7C0, - 0x4883BA80, 0x4882AD40, 0x4881A000, - 0x488092C0, 0x487F8580, 0x487E7840, - 0x487D6B00, 0x487C5DC0, 0x487B5080, - 0x487A4340, 0x48793600, 0x487828C0, - 0x48771B80, 0x48760E40, 0x48750100, - 0x4873F3C0, 0x4872E680, 0x4871D940, - 0x4870CC00, 0x486FBEC0, 0x486EB180, - 0x486DA440, 0x486C9700, 0x486B89C0, - 0x486A7C80, 0x48696F40, 0x48686200, - 0x486754C0, 0x48664780, 0x48653A40, - 0x48642D00, 0x48631FC0, 0x48621280, - 0x48610540, 0x485FF800, 0x485EEAC0, - 0x485DDD80, 0x485CD040, 0x485BC300, - 0x485AB5C0, 0x4859A880, 0x48589B40, - 0x48578E00, 0x485680C0, 0x48557380, - 0x48546640, 0x48535900, 0x48524BC0, - 0x48513E80, 0x48503140, 0x484F2400, - 0x484E16C0, 0x484D0980, 0x484BFC40, - 0x484AEF00, 0x4849E1C0, 0x4848D480, - 0x4847C740, 0x4846BA00, 0x4845ACC0, - 0x48449F80, 0x48439240, 0x48428500, - 0x484177C0, 0x48406A80, 0x483F5D40, - 0x483E5000, 0x483D42C0, 0x483C3580, - 0x483B2840, 0x483A1B00, 0x48390DC0, - 0x48380080, 0x4836F340, 0x4835E600, - 0x4834D8C0, 0x4833CB80, 0x4832BE40, - 0x4831B100, 0x4830A3C0, 0x482F9680, - 0x482E8940, 0x482D7C00, 0x482C6EC0, - 0x482B6180, 0x482A5440, 0x48294700, - 0x482839C0, 0x48272C80, 0x48261F40, - 0x48251200, 0x482404C0, 0x4822F780, - 0x4821EA40, 0x4820DD00, 0x481FCFC0, - 0x481EC280, 0x481DB540, 0x481CA800, - 0x481B9AC0, 0x481A8D80, 0x48198040, - 0x48187300, 0x481765C0, 0x48165880, - 0x48154B40, 0x48143E00, 0x481330C0, - 0x48122380, 0x48111640, 0x48100900, - 0x480EFBC0, 0x480DEE80, 0x480CE140, - 0x480BD400, 0x480AC6C0, 0x4809B980, - 0x4808AC40, 0x48079F00, 0x480691C0, - 0x48058480, 0x48047740, 0x48036A00, - 0x48025CC0, 0x48014F80, 0x48004240, - 0x47FF3500, 0x47FE27C0, 0x47FD1A80, - 0x47FC0D40, 0x47FB0000, 0x47F9F2C0, - 0x47F8E580, 0x47F7D840, 0x47F6CB00, - 0x47F5BDC0, 0x47F4B080, 0x47F3A340, - 0x47F29600, 0x47F188C0, 0x47F07B80, - 0x47EF6E40, 0x47EE6100, 0x47ED53C0, - 0x47EC4680, 0x47EB3940, 0x47EA2C00, - 0x47E91EC0, 0x47E81180, 0x47E70440, - 0x47E5F700, 0x47E4E9C0, 0x47E3DC80, - 0x47E2CF40, 0x47E1C200, 0x47E0B4C0, - 0x47DFA780, 0x47DE9A40, 0x47DD8D00, - 0x47DC7FC0, 0x47DB7280, 0x47DA6540, - 0x47D95800, 0x47D84AC0, 0x47D73D80, - 0x47D63040, 0x47D52300, 0x47D415C0, - 0x47D30880, 0x47D1FB40, 0x47D0EE00, - 0x47CFE0C0, 0x47CED380, 0x47CDC640, - 0x47CCB900, 0x47CBABC0, 0x47CA9E80, - 0x47C99140, 0x47C88400, 0x47C776C0, - 0x47C66980, 0x47C55C40, 0x47C44F00, - 0x47C341C0, 0x47C23480, 0x47C12740, - 0x47C01A00, 0x47BF0CC0, 0x47BDFF80, - 0x47BCF240, 0x47BBE500, 0x47BAD7C0, - 0x47B9CA80, 0x47B8BD40, 0x47B7B000, - 0x47B6A2C0, 0x47B59580, 0x47B48840, - 0x47B37B00, 0x47B26DC0, 0x47B16080, - 0x47B05340, 0x47AF4600, 0x47AE38C0, - 0x47AD2B80, 0x47AC1E40, 0x47AB1100, - 0x47AA03C0, 0x47A8F680, 0x47A7E940, - 0x47A6DC00, 0x47A5CEC0, 0x47A4C180, - 0x47A3B440, 0x47A2A700, 0x47A199C0, - 0x47A08C80, 0x479F7F40, 0x479E7200, - 0x479D64C0, 0x479C5780, 0x479B4A40, - 0x479A3D00, 0x47992FC0, 0x47982280, - 0x47971540, 0x47960800, 0x4794FAC0, - 0x4793ED80, 0x4792E040, 0x4791D300, - 0x4790C5C0, 0x478FB880, 0x478EAB40, - 0x478D9E00, 0x478C90C0, 0x478B8380, - 0x478A7640, 0x47896900, 0x47885BC0, - 0x47874E80, 0x47864140, 0x47853400, - 0x478426C0, 0x47831980, 0x47820C40, - 0x4780FF00, 0x477FF1C0, 0x477EE480, - 0x477DD740, 0x477CCA00, 0x477BBCC0, - 0x477AAF80, 0x4779A240, 0x47789500, - 0x477787C0, 0x47767A80, 0x47756D40, - 0x47746000, 0x477352C0, 0x47724580, - 0x47713840, 0x47702B00, 0x476F1DC0, - 0x476E1080, 0x476D0340, 0x476BF600, - 0x476AE8C0, 0x4769DB80, 0x4768CE40, - 0x4767C100, 0x4766B3C0, 0x4765A680, - 0x47649940, 0x47638C00, 0x47627EC0, - 0x47617180, 0x47606440, 0x475F5700, - 0x475E49C0, 0x475D3C80, 0x475C2F40, - 0x475B2200, 0x475A14C0, 0x47590780, - 0x4757FA40, 0x4756ED00, 0x4755DFC0, - 0x4754D280, 0x4753C540, 0x4752B800, - 0x4751AAC0, 0x47509D80, 0x474F9040, - 0x474E8300, 0x474D75C0, 0x474C6880, - 0x474B5B40, 0x474A4E00, 0x474940C0, - 0x47483380, 0x47472640, 0x47461900, - 0x47450BC0, 0x4743FE80, 0x4742F140, - 0x4741E400, 0x4740D6C0, 0x473FC980, - 0x473EBC40, 0x473DAF00, 0x473CA1C0, - 0x473B9480, 0x473A8740, 0x47397A00, - 0x47386CC0, 0x47375F80, 0x47365240, - 0x47354500, 0x473437C0, 0x47332A80, - 0x47321D40, 0x47311000, 0x473002C0, - 0x472EF580, 0x472DE840, 0x472CDB00, - 0x472BCDC0, 0x472AC080, 0x4729B340, - 0x4728A600, 0x472798C0, 0x47268B80, - 0x47257E40, 0x47247100, 0x472363C0, - 0x47225680, 0x47214940, 0x47203C00, - 0x471F2EC0, 0x471E2180, 0x471D1440, - 0x471C0700, 0x471AF9C0, 0x4719EC80, - 0x4718DF40, 0x4717D200, 0x4716C4C0, - 0x4715B780, 0x4714AA40, 0x47139D00, - 0x47128FC0, 0x47118280, 0x47107540, - 0x470F6800, 0x470E5AC0, 0x470D4D80, - 0x470C4040, 0x470B3300, 0x470A25C0, - 0x47091880, 0x47080B40, 0x4706FE00, - 0x4705F0C0, 0x4704E380, 0x4703D640, - 0x4702C900, 0x4701BBC0, 0x4700AE80, - 0x46FFA140, 0x46FE9400, 0x46FD86C0, - 0x46FC7980, 0x46FB6C40, 0x46FA5F00, - 0x46F951C0, 0x46F84480, 0x46F73740, - 0x46F62A00, 0x46F51CC0, 0x46F40F80, - 0x46F30240, 0x46F1F500, 0x46F0E7C0, - 0x46EFDA80, 0x46EECD40, 0x46EDC000, - 0x46ECB2C0, 0x46EBA580, 0x46EA9840, - 0x46E98B00, 0x46E87DC0, 0x46E77080, - 0x46E66340, 0x46E55600, 0x46E448C0, - 0x46E33B80, 0x46E22E40, 0x46E12100, - 0x46E013C0, 0x46DF0680, 0x46DDF940, - 0x46DCEC00, 0x46DBDEC0, 0x46DAD180, - 0x46D9C440, 0x46D8B700, 0x46D7A9C0, - 0x46D69C80, 0x46D58F40, 0x46D48200, - 0x46D374C0, 0x46D26780, 0x46D15A40, - 0x46D04D00, 0x46CF3FC0, 0x46CE3280, - 0x46CD2540, 0x46CC1800, 0x46CB0AC0, - 0x46C9FD80, 0x46C8F040, 0x46C7E300, - 0x46C6D5C0, 0x46C5C880, 0x46C4BB40, - 0x46C3AE00, 0x46C2A0C0, 0x46C19380, - 0x46C08640, 0x46BF7900, 0x46BE6BC0, - 0x46BD5E80, 0x46BC5140, 0x46BB4400, - 0x46BA36C0, 0x46B92980, 0x46B81C40, - 0x46B70F00, 0x46B601C0, 0x46B4F480, - 0x46B3E740, 0x46B2DA00, 0x46B1CCC0, - 0x46B0BF80, 0x46AFB240, 0x46AEA500, - 0x46AD97C0, 0x46AC8A80, 0x46AB7D40, - 0x46AA7000, 0x46A962C0, 0x46A85580, - 0x46A74840, 0x46A63B00, 0x46A52DC0, - 0x46A42080, 0x46A31340, 0x46A20600, - 0x46A0F8C0, 0x469FEB80, 0x469EDE40, - 0x469DD100, 0x469CC3C0, 0x469BB680, - 0x469AA940, 0x46999C00, 0x46988EC0, - 0x46978180, 0x46967440, 0x46956700, - 0x469459C0, 0x46934C80, 0x46923F40, - 0x46913200, 0x469024C0, 0x468F1780, - 0x468E0A40, 0x468CFD00, 0x468BEFC0, - 0x468AE280, 0x4689D540, 0x4688C800, - 0x4687BAC0, 0x4686AD80, 0x4685A040, - 0x46849300, 0x468385C0, 0x46827880, - 0x46816B40, 0x46805E00, 0x467F50C0, - 0x467E4380, 0x467D3640, 0x467C2900, - 0x467B1BC0, 0x467A0E80, 0x46790140, - 0x4677F400, 0x4676E6C0, 0x4675D980, - 0x4674CC40, 0x4673BF00, 0x4672B1C0, - 0x4671A480, 0x46709740, 0x466F8A00, - 0x466E7CC0, 0x466D6F80, 0x466C6240, - 0x466B5500, 0x466A47C0, 0x46693A80, - 0x46682D40, 0x46672000, 0x466612C0, - 0x46650580, 0x4663F840, 0x4662EB00, - 0x4661DDC0, 0x4660D080, 0x465FC340, - 0x465EB600, 0x465DA8C0, 0x465C9B80, - 0x465B8E40, 0x465A8100, 0x465973C0, - 0x46586680, 0x46575940, 0x46564C00, - 0x46553EC0, 0x46543180, 0x46532440, - 0x46521700, 0x465109C0, 0x464FFC80, - 0x464EEF40, 0x464DE200, 0x464CD4C0, - 0x464BC780, 0x464ABA40, 0x4649AD00, - 0x46489FC0, 0x46479280, 0x46468540, - 0x46457800, 0x46446AC0, 0x46435D80, - 0x46425040, 0x46414300, 0x464035C0, - 0x463F2880, 0x463E1B40, 0x463D0E00, - 0x463C00C0, 0x463AF380, 0x4639E640, - 0x4638D900, 0x4637CBC0, 0x4636BE80, - 0x4635B140, 0x4634A400, 0x463396C0, - 0x46328980, 0x46317C40, 0x46306F00, - 0x462F61C0, 0x462E5480, 0x462D4740, - 0x462C3A00, 0x462B2CC0, 0x462A1F80, - 0x46291240, 0x46280500, 0x4626F7C0, - 0x4625EA80, 0x4624DD40, 0x4623D000, - 0x4622C2C0, 0x4621B580, 0x4620A840, - 0x461F9B00, 0x461E8DC0, 0x461D8080, - 0x461C7340, 0x461B6600, 0x461A58C0, - 0x46194B80, 0x46183E40, 0x46173100, - 0x461623C0, 0x46151680, 0x46140940, - 0x4612FC00, 0x4611EEC0, 0x4610E180, - 0x460FD440, 0x460EC700, 0x460DB9C0, - 0x460CAC80, 0x460B9F40, 0x460A9200, - 0x460984C0, 0x46087780, 0x46076A40, - 0x46065D00, 0x46054FC0, 0x46044280, - 0x46033540, 0x46022800, 0x46011AC0, - 0x46000D80, 0x45FF0040, 0x45FDF300, - 0x45FCE5C0, 0x45FBD880, 0x45FACB40, - 0x45F9BE00, 0x45F8B0C0, 0x45F7A380, - 0x45F69640, 0x45F58900, 0x45F47BC0, - 0x45F36E80, 0x45F26140, 0x45F15400, - 0x45F046C0, 0x45EF3980, 0x45EE2C40, - 0x45ED1F00, 0x45EC11C0, 0x45EB0480, - 0x45E9F740, 0x45E8EA00, 0x45E7DCC0, - 0x45E6CF80, 0x45E5C240, 0x45E4B500, - 0x45E3A7C0, 0x45E29A80, 0x45E18D40, - 0x45E08000, 0x45DF72C0, 0x45DE6580, - 0x45DD5840, 0x45DC4B00, 0x45DB3DC0, - 0x45DA3080, 0x45D92340, 0x45D81600, - 0x45D708C0, 0x45D5FB80, 0x45D4EE40, - 0x45D3E100, 0x45D2D3C0, 0x45D1C680, - 0x45D0B940, 0x45CFAC00, 0x45CE9EC0, - 0x45CD9180, 0x45CC8440, 0x45CB7700, - 0x45CA69C0, 0x45C95C80, 0x45C84F40, - 0x45C74200, 0x45C634C0, 0x45C52780, - 0x45C41A40, 0x45C30D00, 0x45C1FFC0, - 0x45C0F280, 0x45BFE540, 0x45BED800, - 0x45BDCAC0, 0x45BCBD80, 0x45BBB040, - 0x45BAA300, 0x45B995C0, 0x45B88880, - 0x45B77B40, 0x45B66E00, 0x45B560C0, - 0x45B45380, 0x45B34640, 0x45B23900, - 0x45B12BC0, 0x45B01E80, 0x45AF1140, - 0x45AE0400, 0x45ACF6C0, 0x45ABE980, - 0x45AADC40, 0x45A9CF00, 0x45A8C1C0, - 0x45A7B480, 0x45A6A740, 0x45A59A00, - 0x45A48CC0, 0x45A37F80, 0x45A27240, - 0x45A16500, 0x45A057C0, 0x459F4A80, - 0x459E3D40, 0x459D3000, 0x459C22C0, - 0x459B1580, 0x459A0840, 0x4598FB00, - 0x4597EDC0, 0x4596E080, 0x4595D340, - 0x4594C600, 0x4593B8C0, 0x4592AB80, - 0x45919E40, 0x45909100, 0x458F83C0, - 0x458E7680, 0x458D6940, 0x458C5C00, - 0x458B4EC0, 0x458A4180, 0x45893440, - 0x45882700, 0x458719C0, 0x45860C80, - 0x4584FF40, 0x4583F200, 0x4582E4C0, - 0x4581D780, 0x4580CA40, 0x457FBD00, - 0x457EAFC0, 0x457DA280, 0x457C9540, - 0x457B8800, 0x457A7AC0, 0x45796D80, - 0x45786040, 0x45775300, 0x457645C0, - 0x45753880, 0x45742B40, 0x45731E00, - 0x457210C0, 0x45710380, 0x456FF640, - 0x456EE900, 0x456DDBC0, 0x456CCE80, - 0x456BC140, 0x456AB400, 0x4569A6C0, - 0x45689980, 0x45678C40, 0x45667F00, - 0x456571C0, 0x45646480, 0x45635740, - 0x45624A00, 0x45613CC0, 0x45602F80, - 0x455F2240, 0x455E1500, 0x455D07C0, - 0x455BFA80, 0x455AED40, 0x4559E000, - 0x4558D2C0, 0x4557C580, 0x4556B840, - 0x4555AB00, 0x45549DC0, 0x45539080, - 0x45528340, 0x45517600, 0x455068C0, - 0x454F5B80, 0x454E4E40, 0x454D4100, - 0x454C33C0, 0x454B2680, 0x454A1940, - 0x45490C00, 0x4547FEC0, 0x4546F180, - 0x4545E440, 0x4544D700, 0x4543C9C0, - 0x4542BC80, 0x4541AF40, 0x4540A200, - 0x453F94C0, 0x453E8780, 0x453D7A40, - 0x453C6D00, 0x453B5FC0, 0x453A5280, - 0x45394540, 0x45383800, 0x45372AC0, - 0x45361D80, 0x45351040, 0x45340300, - 0x4532F5C0, 0x4531E880, 0x4530DB40, - 0x452FCE00, 0x452EC0C0, 0x452DB380, - 0x452CA640, 0x452B9900, 0x452A8BC0, - 0x45297E80, 0x45287140, 0x45276400, - 0x452656C0, 0x45254980, 0x45243C40, - 0x45232F00, 0x452221C0, 0x45211480, - 0x45200740, 0x451EFA00, 0x451DECC0, - 0x451CDF80, 0x451BD240, 0x451AC500, - 0x4519B7C0, 0x4518AA80, 0x45179D40, - 0x45169000, 0x451582C0, 0x45147580, - 0x45136840, 0x45125B00, 0x45114DC0, - 0x45104080, 0x450F3340, 0x450E2600, - 0x450D18C0, 0x450C0B80, 0x450AFE40, - 0x4509F100, 0x4508E3C0, 0x4507D680, - 0x4506C940, 0x4505BC00, 0x4504AEC0, - 0x4503A180, 0x45029440, 0x45018700, - 0x450079C0, 0x44FF6C80, 0x44FE5F40, - 0x44FD5200, 0x44FC44C0, 0x44FB3780, - 0x44FA2A40, 0x44F91D00, 0x44F80FC0, - 0x44F70280, 0x44F5F540, 0x44F4E800, - 0x44F3DAC0, 0x44F2CD80, 0x44F1C040, - 0x44F0B300, 0x44EFA5C0, 0x44EE9880, - 0x44ED8B40, 0x44EC7E00, 0x44EB70C0, - 0x44EA6380, 0x44E95640, 0x44E84900, - 0x44E73BC0, 0x44E62E80, 0x44E52140, - 0x44E41400, 0x44E306C0, 0x44E1F980, - 0x44E0EC40, 0x44DFDF00, 0x44DED1C0, - 0x44DDC480, 0x44DCB740, 0x44DBAA00, - 0x44DA9CC0, 0x44D98F80, 0x44D88240, - 0x44D77500, 0x44D667C0, 0x44D55A80, - 0x44D44D40, 0x44D34000, 0x44D232C0, - 0x44D12580, 0x44D01840, 0x44CF0B00, - 0x44CDFDC0, 0x44CCF080, 0x44CBE340, - 0x44CAD600, 0x44C9C8C0, 0x44C8BB80, - 0x44C7AE40, 0x44C6A100, 0x44C593C0, - 0x44C48680, 0x44C37940, 0x44C26C00, - 0x44C15EC0, 0x44C05180, 0x44BF4440, - 0x44BE3700, 0x44BD29C0, 0x44BC1C80, - 0x44BB0F40, 0x44BA0200, 0x44B8F4C0, - 0x44B7E780, 0x44B6DA40, 0x44B5CD00, - 0x44B4BFC0, 0x44B3B280, 0x44B2A540, - 0x44B19800, 0x44B08AC0, 0x44AF7D80, - 0x44AE7040, 0x44AD6300, 0x44AC55C0, - 0x44AB4880, 0x44AA3B40, 0x44A92E00, - 0x44A820C0, 0x44A71380, 0x44A60640, - 0x44A4F900, 0x44A3EBC0, 0x44A2DE80, - 0x44A1D140, 0x44A0C400, 0x449FB6C0, - 0x449EA980, 0x449D9C40, 0x449C8F00, - 0x449B81C0, 0x449A7480, 0x44996740, - 0x44985A00, 0x44974CC0, 0x44963F80, - 0x44953240, 0x44942500, 0x449317C0, - 0x44920A80, 0x4490FD40, 0x448FF000, - 0x448EE2C0, 0x448DD580, 0x448CC840, - 0x448BBB00, 0x448AADC0, 0x4489A080, - 0x44889340, 0x44878600, 0x448678C0, - 0x44856B80, 0x44845E40, 0x44835100, - 0x448243C0, 0x44813680, 0x44802940, - 0x447F1C00, 0x447E0EC0, 0x447D0180, - 0x447BF440, 0x447AE700, 0x4479D9C0, - 0x4478CC80, 0x4477BF40, 0x4476B200, - 0x4475A4C0, 0x44749780, 0x44738A40, - 0x44727D00, 0x44716FC0, 0x44706280, - 0x446F5540, 0x446E4800, 0x446D3AC0, - 0x446C2D80, 0x446B2040, 0x446A1300, - 0x446905C0, 0x4467F880, 0x4466EB40, - 0x4465DE00, 0x4464D0C0, 0x4463C380, - 0x4462B640, 0x4461A900, 0x44609BC0, - 0x445F8E80, 0x445E8140, 0x445D7400, - 0x445C66C0, 0x445B5980, 0x445A4C40, - 0x44593F00, 0x445831C0, 0x44572480, - 0x44561740, 0x44550A00, 0x4453FCC0, - 0x4452EF80, 0x4451E240, 0x4450D500, - 0x444FC7C0, 0x444EBA80, 0x444DAD40, - 0x444CA000, 0x444B92C0, 0x444A8580, - 0x44497840, 0x44486B00, 0x44475DC0, - 0x44465080, 0x44454340, 0x44443600, - 0x444328C0, 0x44421B80, 0x44410E40, - 0x44400100, 0x443EF3C0, 0x443DE680, - 0x443CD940, 0x443BCC00, 0x443ABEC0, - 0x4439B180, 0x4438A440, 0x44379700, - 0x443689C0, 0x44357C80, 0x44346F40, - 0x44336200, 0x443254C0, 0x44314780, - 0x44303A40, 0x442F2D00, 0x442E1FC0, - 0x442D1280, 0x442C0540, 0x442AF800, - 0x4429EAC0, 0x4428DD80, 0x4427D040, - 0x4426C300, 0x4425B5C0, 0x4424A880, - 0x44239B40, 0x44228E00, 0x442180C0, - 0x44207380, 0x441F6640, 0x441E5900, - 0x441D4BC0, 0x441C3E80, 0x441B3140, - 0x441A2400, 0x441916C0, 0x44180980, - 0x4416FC40, 0x4415EF00, 0x4414E1C0, - 0x4413D480, 0x4412C740, 0x4411BA00, - 0x4410ACC0, 0x440F9F80, 0x440E9240, - 0x440D8500, 0x440C77C0, 0x440B6A80, - 0x440A5D40, 0x44095000, 0x440842C0, - 0x44073580, 0x44062840, 0x44051B00, - 0x44040DC0, 0x44030080, 0x4401F340, - 0x4400E600, 0x43FFD8C0, 0x43FECB80, - 0x43FDBE40, 0x43FCB100, 0x43FBA3C0, - 0x43FA9680, 0x43F98940, 0x43F87C00, - 0x43F76EC0, 0x43F66180, 0x43F55440, - 0x43F44700, 0x43F339C0, 0x43F22C80, - 0x43F11F40, 0x43F01200, 0x43EF04C0, - 0x43EDF780, 0x43ECEA40, 0x43EBDD00, - 0x43EACFC0, 0x43E9C280, 0x43E8B540, - 0x43E7A800, 0x43E69AC0, 0x43E58D80, - 0x43E48040, 0x43E37300, 0x43E265C0, - 0x43E15880, 0x43E04B40, 0x43DF3E00, - 0x43DE30C0, 0x43DD2380, 0x43DC1640, - 0x43DB0900, 0x43D9FBC0, 0x43D8EE80, - 0x43D7E140, 0x43D6D400, 0x43D5C6C0, - 0x43D4B980, 0x43D3AC40, 0x43D29F00, - 0x43D191C0, 0x43D08480, 0x43CF7740, - 0x43CE6A00, 0x43CD5CC0, 0x43CC4F80, - 0x43CB4240, 0x43CA3500, 0x43C927C0, - 0x43C81A80, 0x43C70D40, 0x43C80000, - 0x43C70640, 0x43C60C80, 0x43C512C0, - 0x43C41900, 0x43C31F40, 0x43C22580, - 0x43C12BC0, 0x43C03200, 0x43BF3840, - 0x43BE3E80, 0x43BD44C0, 0x43BC4B00, - 0x43BB5140, 0x43BA5780, 0x43B95DC0, - 0x43B86400, 0x43B76A40, 0x43B67080, - 0x43B576C0, 0x43B47D00, 0x43B38340, - 0x43B28980, 0x43B18FC0, 0x43B09600, - 0x43AF9C40, 0x43AEA280, 0x43ADA8C0, - 0x43ACAF00, 0x43ABB540, 0x43AABB80, - 0x43A9C1C0, 0x43A8C800, 0x43A7CE40, - 0x43A6D480, 0x43A5DAC0, 0x43A4E100, - 0x43A3E740, 0x43A2ED80, 0x43A1F3C0, - 0x43A0FA00, 0x43A00040, 0x439F0680, - 0x439E0CC0, 0x439D1300, 0x439C1940, - 0x439B1F80, 0x439A25C0, 0x43992C00, - 0x43983240, 0x43973880, 0x43963EC0, - 0x43954500, 0x43944B40, 0x43935180, - 0x439257C0, 0x43915E00, 0x43906440, - 0x438F6A80, 0x438E70C0, 0x438D7700, - 0x438C7D40, 0x438B8380, 0x438A89C0, - 0x43899000, 0x43889640, 0x43879C80, - 0x4386A2C0, 0x4385A900, 0x4384AF40, - 0x4383B580, 0x4382BBC0, 0x4381C200, - 0x4380C840, 0x437FCE80, 0x437ED4C0, - 0x437DDB00, 0x437CE140, 0x437BE780, - 0x437AEDC0, 0x4379F400, 0x4378FA40, - 0x43780080, 0x437706C0, 0x43760D00, - 0x43751340, 0x43741980, 0x43731FC0, - 0x43722600, 0x43712C40, 0x43703280, - 0x436F38C0, 0x436E3F00, 0x436D4540, - 0x436C4B80, 0x436B51C0, 0x436A5800, - 0x43695E40, 0x43686480, 0x43676AC0, - 0x43667100, 0x43657740, 0x43647D80, - 0x436383C0, 0x43628A00, 0x43619040, - 0x43609680, 0x435F9CC0, 0x435EA300, - 0x435DA940, 0x435CAF80, 0x435BB5C0, - 0x435ABC00, 0x4359C240, 0x4358C880, - 0x4357CEC0, 0x4356D500, 0x4355DB40, - 0x4354E180, 0x4353E7C0, 0x4352EE00, - 0x4351F440, 0x4350FA80, 0x435000C0, - 0x434F0700, 0x434E0D40, 0x434D1380, - 0x434C19C0, 0x434B2000, 0x434A2640, - 0x43492C80, 0x434832C0, 0x43473900, - 0x43463F40, 0x43454580, 0x43444BC0, - 0x43435200, 0x43425840, 0x43415E80, - 0x434064C0, 0x433F6B00, 0x433E7140, - 0x433D7780, 0x433C7DC0, 0x433B8400, - 0x433A8A40, 0x43399080, 0x433896C0, - 0x43379D00, 0x4336A340, 0x4335A980, - 0x4334AFC0, 0x4333B600, 0x4332BC40, - 0x4331C280, 0x4330C8C0, 0x432FCF00, - 0x432ED540, 0x432DDB80, 0x432CE1C0, - 0x432BE800, 0x432AEE40, 0x4329F480, - 0x4328FAC0, 0x43280100, 0x43270740, - 0x43260D80, 0x432513C0, 0x43241A00, - 0x43232040, 0x43222680, 0x43212CC0, - 0x43203300, 0x431F3940, 0x431E3F80, - 0x431D45C0, 0x431C4C00, 0x431B5240, - 0x431A5880, 0x43195EC0, 0x43186500, - 0x43176B40, 0x43167180, 0x431577C0, - 0x43147E00, 0x43138440, 0x43128A80, - 0x431190C0, 0x43109700, 0x430F9D40, - 0x430EA380, 0x430DA9C0, 0x430CB000, - 0x430BB640, 0x430ABC80, 0x4309C2C0, - 0x4308C900, 0x4307CF40, 0x4306D580, - 0x4305DBC0, 0x4304E200, 0x4303E840, - 0x4302EE80, 0x4301F4C0, 0x4300FB00, - 0x43000140, 0x42FF0780, 0x42FE0DC0, - 0x42FD1400, 0x42FC1A40, 0x42FB2080, - 0x42FA26C0, 0x42F92D00, 0x42F83340, - 0x42F73980, 0x42F63FC0, 0x42F54600, - 0x42F44C40, 0x42F35280, 0x42F258C0, - 0x42F15F00, 0x42F06540, 0x42EF6B80, - 0x42EE71C0, 0x42ED7800, 0x42EC7E40, - 0x42EB8480, 0x42EA8AC0, 0x42E99100, - 0x42E89740, 0x42E79D80, 0x42E6A3C0, - 0x42E5AA00, 0x42E4B040, 0x42E3B680, - 0x42E2BCC0, 0x42E1C300, 0x42E0C940, - 0x42DFCF80, 0x42DED5C0, 0x42DDDC00, - 0x42DCE240, 0x42DBE880, 0x42DAEEC0, - 0x42D9F500, 0x42D8FB40, 0x42D80180, - 0x42D707C0, 0x42D60E00, 0x42D51440, - 0x42D41A80, 0x42D320C0, 0x42D22700, - 0x42D12D40, 0x42D03380, 0x42CF39C0, - 0x42CE4000, 0x42CD4640, 0x42CC4C80, - 0x42CB52C0, 0x42CA5900, 0x42C95F40, - 0x42C86580, 0x42C76BC0, 0x42C67200, - 0x42C57840, 0x42C47E80, 0x42C384C0, - 0x42C28B00, 0x42C19140, 0x42C09780, - 0x42BF9DC0, 0x42BEA400, 0x42BDAA40, - 0x42BCB080, 0x42BBB6C0, 0x42BABD00, - 0x42B9C340, 0x42B8C980, 0x42B7CFC0, - 0x42B6D600, 0x42B5DC40, 0x42B4E280, - 0x42B3E8C0, 0x42B2EF00, 0x42B1F540, - 0x42B0FB80, 0x42B001C0, 0x42AF0800, - 0x42AE0E40, 0x42AD1480, 0x42AC1AC0, - 0x42AB2100, 0x42AA2740, 0x42A92D80, - 0x42A833C0, 0x42A73A00, 0x42A64040, - 0x42A54680, 0x42A44CC0, 0x42A35300, - 0x42A25940, 0x42A15F80, 0x42A065C0, - 0x429F6C00, 0x429E7240, 0x429D7880, - 0x429C7EC0, 0x429B8500, 0x429A8B40, - 0x42999180, 0x429897C0, 0x42979E00, - 0x4296A440, 0x4295AA80, 0x4294B0C0, - 0x4293B700, 0x4292BD40, 0x4291C380, - 0x4290C9C0, 0x428FD000, 0x428ED640, - 0x428DDC80, 0x428CE2C0, 0x428BE900, - 0x428AEF40, 0x4289F580, 0x4288FBC0, - 0x42880200, 0x42870840, 0x42860E80, - 0x428514C0, 0x42841B00, 0x42832140, - 0x42822780, 0x42812DC0, 0x42803400, - 0x427F3A40, 0x427E4080, 0x427D46C0, - 0x427C4D00, 0x427B5340, 0x427A5980, - 0x42795FC0, 0x42786600, 0x42776C40, - 0x42767280, 0x427578C0, 0x42747F00, - 0x42738540, 0x42728B80, 0x427191C0, - 0x42709800, 0x426F9E40, 0x426EA480, - 0x426DAAC0, 0x426CB100, 0x426BB740, - 0x426ABD80, 0x4269C3C0, 0x4268CA00, - 0x4267D040, 0x4266D680, 0x4265DCC0, - 0x4264E300, 0x4263E940, 0x4262EF80, - 0x4261F5C0, 0x4260FC00, 0x42600240, - 0x425F0880, 0x425E0EC0, 0x425D1500, - 0x425C1B40, 0x425B2180, 0x425A27C0, - 0x42592E00, 0x42583440, 0x42573A80, - 0x425640C0, 0x42554700, 0x42544D40, - 0x42535380, 0x425259C0, 0x42516000, - 0x42506640, 0x424F6C80, 0x424E72C0, - 0x424D7900, 0x424C7F40, 0x424B8580, - 0x424A8BC0, 0x42499200, 0x42489840, - 0x42479E80, 0x4246A4C0, 0x4245AB00, - 0x4244B140, 0x4243B780, 0x4242BDC0, - 0x4241C400, 0x4240CA40, 0x423FD080, - 0x423ED6C0, 0x423DDD00, 0x423CE340, - 0x423BE980, 0x423AEFC0, 0x4239F600, - 0x4238FC40, 0x42380280, 0x423708C0, - 0x42360F00, 0x42351540, 0x42341B80, - 0x423321C0, 0x42322800, 0x42312E40, - 0x42303480, 0x422F3AC0, 0x422E4100, - 0x422D4740, 0x422C4D80, 0x422B53C0, - 0x422A5A00, 0x42296040, 0x42286680, - 0x42276CC0, 0x42267300, 0x42257940, - 0x42247F80, 0x422385C0, 0x42228C00, - 0x42219240, 0x42209880, 0x421F9EC0, - 0x421EA500, 0x421DAB40, 0x421CB180, - 0x421BB7C0, 0x421ABE00, 0x4219C440, - 0x4218CA80, 0x4217D0C0, 0x4216D700, - 0x4215DD40, 0x4214E380, 0x4213E9C0, - 0x4212F000, 0x4211F640, 0x4210FC80, - 0x421002C0, 0x420F0900, 0x420E0F40, - 0x420D1580, 0x420C1BC0, 0x420B2200, - 0x420A2840, 0x42092E80, 0x420834C0, - 0x42073B00, 0x42064140, 0x42054780, - 0x42044DC0, 0x42035400, 0x42025A40, - 0x42016080, 0x420066C0, 0x41FF6D00, - 0x41FE7340, 0x41FD7980, 0x41FC7FC0, - 0x41FB8600, 0x41FA8C40, 0x41F99280, - 0x41F898C0, 0x41F79F00, 0x41F6A540, - 0x41F5AB80, 0x41F4B1C0, 0x41F3B800, - 0x41F2BE40, 0x41F1C480, 0x41F0CAC0, - 0x41EFD100, 0x41EED740, 0x41EDDD80, - 0x41ECE3C0, 0x41EBEA00, 0x41EAF040, - 0x41E9F680, 0x41E8FCC0, 0x41E80300, - 0x41E70940, 0x41E60F80, 0x41E515C0, - 0x41E41C00, 0x41E32240, 0x41E22880, - 0x41E12EC0, 0x41E03500, 0x41DF3B40, - 0x41DE4180, 0x41DD47C0, 0x41DC4E00, - 0x41DB5440, 0x41DA5A80, 0x41D960C0, - 0x41D86700, 0x41D76D40, 0x41D67380, - 0x41D579C0, 0x41D48000, 0x41D38640, - 0x41D28C80, 0x41D192C0, 0x41D09900, - 0x41CF9F40, 0x41CEA580, 0x41CDABC0, - 0x41CCB200, 0x41CBB840, 0x41CABE80, - 0x41C9C4C0, 0x41C8CB00, 0x41C7D140, - 0x41C6D780, 0x41C5DDC0, 0x41C4E400, - 0x41C3EA40, 0x41C2F080, 0x41C1F6C0, - 0x41C0FD00, 0x41C00340, 0x41BF0980, - 0x41BE0FC0, 0x41BD1600, 0x41BC1C40, - 0x41BB2280, 0x41BA28C0, 0x41B92F00, - 0x41B83540, 0x41B73B80, 0x41B641C0, - 0x41B54800, 0x41B44E40, 0x41B35480, - 0x41B25AC0, 0x41B16100, 0x41B06740, - 0x41AF6D80, 0x41AE73C0, 0x41AD7A00, - 0x41AC8040, 0x41AB8680, 0x41AA8CC0, - 0x41A99300, 0x41A89940, 0x41A79F80, - 0x41A6A5C0, 0x41A5AC00, 0x41A4B240, - 0x41A3B880, 0x41A2BEC0, 0x41A1C500, - 0x41A0CB40, 0x419FD180, 0x419ED7C0, - 0x419DDE00, 0x419CE440, 0x419BEA80, - 0x419AF0C0, 0x4199F700, 0x4198FD40, - 0x41980380, 0x419709C0, 0x41961000, - 0x41951640, 0x41941C80, 0x419322C0, - 0x41922900, 0x41912F40, 0x41903580, - 0x418F3BC0, 0x418E4200, 0x418D4840, - 0x418C4E80, 0x418B54C0, 0x418A5B00, - 0x41896140, 0x41886780, 0x41876DC0, - 0x41867400, 0x41857A40, 0x41848080, - 0x418386C0, 0x41828D00, 0x41819340, - 0x41809980, 0x417F9FC0, 0x417EA600, - 0x417DAC40, 0x417CB280, 0x417BB8C0, - 0x417ABF00, 0x4179C540, 0x4178CB80, - 0x4177D1C0, 0x4176D800, 0x4175DE40, - 0x4174E480, 0x4173EAC0, 0x4172F100, - 0x4171F740, 0x4170FD80, 0x417003C0, - 0x416F0A00, 0x416E1040, 0x416D1680, - 0x416C1CC0, 0x416B2300, 0x416A2940, - 0x41692F80, 0x416835C0, 0x41673C00, - 0x41664240, 0x41654880, 0x41644EC0, - 0x41635500, 0x41625B40, 0x41616180, - 0x416067C0, 0x415F6E00, 0x415E7440, - 0x415D7A80, 0x415C80C0, 0x415B8700, - 0x415A8D40, 0x41599380, 0x415899C0, - 0x4157A000, 0x4156A640, 0x4155AC80, - 0x4154B2C0, 0x4153B900, 0x4152BF40, - 0x4151C580, 0x4150CBC0, 0x414FD200, - 0x414ED840, 0x414DDE80, 0x414CE4C0, - 0x414BEB00, 0x414AF140, 0x4149F780, - 0x4148FDC0, 0x41480400, 0x41470A40, - 0x41461080, 0x414516C0, 0x41441D00, - 0x41432340, 0x41422980, 0x41412FC0, - 0x41403600, 0x413F3C40, 0x413E4280, - 0x413D48C0, 0x413C4F00, 0x413B5540, - 0x413A5B80, 0x413961C0, 0x41386800, - 0x41376E40, 0x41367480, 0x41357AC0, - 0x41348100, 0x41338740, 0x41328D80, - 0x413193C0, 0x41309A00, 0x412FA040, - 0x412EA680, 0x412DACC0, 0x412CB300, - 0x412BB940, 0x412ABF80, 0x4129C5C0, - 0x4128CC00, 0x4127D240, 0x4126D880, - 0x4125DEC0, 0x4124E500, 0x4123EB40, - 0x4122F180, 0x4121F7C0, 0x4120FE00, - 0x41200440, 0x411F0A80, 0x411E10C0, - 0x411D1700, 0x411C1D40, 0x411B2380, - 0x411A29C0, 0x41193000, 0x41183640, - 0x41173C80, 0x411642C0, 0x41154900, - 0x41144F40, 0x41135580, 0x41125BC0, - 0x41116200, 0x41106840, 0x410F6E80, - 0x410E74C0, 0x410D7B00, 0x410C8140, - 0x410B8780, 0x410A8DC0, 0x41099400, - 0x41089A40, 0x4107A080, 0x4106A6C0, - 0x4105AD00, 0x4104B340, 0x4103B980, - 0x4102BFC0, 0x4101C600, 0x4100CC40, - 0x40FFD280, 0x40FED8C0, 0x40FDDF00, - 0x40FCE540, 0x40FBEB80, 0x40FAF1C0, - 0x40F9F800, 0x40F8FE40, 0x40F80480, - 0x40F70AC0, 0x40F61100, 0x40F51740, - 0x40F41D80, 0x40F323C0, 0x40F22A00, - 0x40F13040, 0x40F03680, 0x40EF3CC0, - 0x40EE4300, 0x40ED4940, 0x40EC4F80, - 0x40EB55C0, 0x40EA5C00, 0x40E96240, - 0x40E86880, 0x40E76EC0, 0x40E67500, - 0x40E57B40, 0x40E48180, 0x40E387C0, - 0x40E28E00, 0x40E19440, 0x40E09A80, - 0x40DFA0C0, 0x40DEA700, 0x40DDAD40, - 0x40DCB380, 0x40DBB9C0, 0x40DAC000, - 0x40D9C640, 0x40D8CC80, 0x40D7D2C0, - 0x40D6D900, 0x40D5DF40, 0x40D4E580, - 0x40D3EBC0, 0x40D2F200, 0x40D1F840, - 0x40D0FE80, 0x40D004C0, 0x40CF0B00, - 0x40CE1140, 0x40CD1780, 0x40CC1DC0, - 0x40CB2400, 0x40CA2A40, 0x40C93080, - 0x40C836C0, 0x40C73D00, 0x40C64340, - 0x40C54980, 0x40C44FC0, 0x40C35600, - 0x40C25C40, 0x40C16280, 0x40C068C0, - 0x40BF6F00, 0x40BE7540, 0x40BD7B80, - 0x40BC81C0, 0x40BB8800, 0x40BA8E40, - 0x40B99480, 0x40B89AC0, 0x40B7A100, - 0x40B6A740, 0x40B5AD80, 0x40B4B3C0, - 0x40B3BA00, 0x40B2C040, 0x40B1C680, - 0x40B0CCC0, 0x40AFD300, 0x40AED940, - 0x40ADDF80, 0x40ACE5C0, 0x40ABEC00, - 0x40AAF240, 0x40A9F880, 0x40A8FEC0, - 0x40A80500, 0x40A70B40, 0x40A61180, - 0x40A517C0, 0x40A41E00, 0x40A32440, - 0x40A22A80, 0x40A130C0, 0x40A03700, - 0x409F3D40, 0x409E4380, 0x409D49C0, - 0x409C5000, 0x409B5640, 0x409A5C80, - 0x409962C0, 0x40986900, 0x40976F40, - 0x40967580, 0x40957BC0, 0x40948200, - 0x40938840, 0x40928E80, 0x409194C0, - 0x40909B00, 0x408FA140, 0x408EA780, - 0x408DADC0, 0x408CB400, 0x408BBA40, - 0x408AC080, 0x4089C6C0, 0x4088CD00, - 0x4087D340, 0x4086D980, 0x4085DFC0, - 0x4084E600, 0x4083EC40, 0x4082F280, - 0x4081F8C0, 0x4080FF00, 0x40800540, - 0x407F0B80, 0x407E11C0, 0x407D1800, - 0x407C1E40, 0x407B2480, 0x407A2AC0, - 0x40793100, 0x40783740, 0x40773D80, - 0x407643C0, 0x40754A00, 0x40745040, - 0x40735680, 0x40725CC0, 0x40716300, - 0x40706940, 0x406F6F80, 0x406E75C0, - 0x406D7C00, 0x406C8240, 0x406B8880, - 0x406A8EC0, 0x40699500, 0x40689B40, - 0x4067A180, 0x4066A7C0, 0x4065AE00, - 0x4064B440, 0x4063BA80, 0x4062C0C0, - 0x4061C700, 0x4060CD40, 0x405FD380, - 0x405ED9C0, 0x405DE000, 0x405CE640, - 0x405BEC80, 0x405AF2C0, 0x4059F900, - 0x4058FF40, 0x40580580, 0x40570BC0, - 0x40561200, 0x40551840, 0x40541E80, - 0x405324C0, 0x40522B00, 0x40513140, - 0x40503780, 0x404F3DC0, 0x404E4400, - 0x404D4A40, 0x404C5080, 0x404B56C0, - 0x404A5D00, 0x40496340, 0x40486980, - 0x40476FC0, 0x40467600, 0x40457C40, - 0x40448280, 0x404388C0, 0x40428F00, - 0x40419540, 0x40409B80, 0x403FA1C0, - 0x403EA800, 0x403DAE40, 0x403CB480, - 0x403BBAC0, 0x403AC100, 0x4039C740, - 0x4038CD80, 0x4037D3C0, 0x4036DA00, - 0x4035E040, 0x4034E680, 0x4033ECC0, - 0x4032F300, 0x4031F940, 0x4030FF80, - 0x403005C0, 0x402F0C00, 0x402E1240, - 0x402D1880, 0x402C1EC0, 0x402B2500, - 0x402A2B40, 0x40293180, 0x402837C0, - 0x40273E00, 0x40264440, 0x40254A80, - 0x402450C0, 0x40235700, 0x40225D40, - 0x40216380, 0x402069C0, 0x401F7000, - 0x401E7640, 0x401D7C80, 0x401C82C0, - 0x401B8900, 0x401A8F40, 0x40199580, - 0x40189BC0, 0x4017A200, 0x4016A840, - 0x4015AE80, 0x4014B4C0, 0x4013BB00, - 0x4012C140, 0x4011C780, 0x4010CDC0, - 0x400FD400, 0x400EDA40, 0x400DE080, - 0x400CE6C0, 0x400BED00, 0x400AF340, - 0x4009F980, 0x4008FFC0, 0x40080600, - 0x40070C40, 0x40061280, 0x400518C0, - 0x40041F00, 0x40032540, 0x40022B80, - 0x400131C0, 0x40003800, 0x3FFF3E40, - 0x3FFE4480, 0x3FFD4AC0, 0x3FFC5100, - 0x3FFB5740, 0x3FFA5D80, 0x3FF963C0, - 0x3FF86A00, 0x3FF77040, 0x3FF67680, - 0x3FF57CC0, 0x3FF48300, 0x3FF38940, - 0x3FF28F80, 0x3FF195C0, 0x3FF09C00, - 0x3FEFA240, 0x3FEEA880, 0x3FEDAEC0, - 0x3FECB500, 0x3FEBBB40, 0x3FEAC180, - 0x3FE9C7C0, 0x3FE8CE00, 0x3FE7D440, - 0x3FE6DA80, 0x3FE5E0C0, 0x3FE4E700, - 0x3FE3ED40, 0x3FE2F380, 0x3FE1F9C0, - 0x3FE10000, 0x3FE00640, 0x3FDF0C80, - 0x3FDE12C0, 0x3FDD1900, 0x3FDC1F40, - 0x3FDB2580, 0x3FDA2BC0, 0x3FD93200, - 0x3FD83840, 0x3FD73E80, 0x3FD644C0, - 0x3FD54B00, 0x3FD45140, 0x3FD35780, - 0x3FD25DC0, 0x3FD16400, 0x3FD06A40, - 0x3FCF7080, 0x3FCE76C0, 0x3FCD7D00, - 0x3FCC8340, 0x3FCB8980, 0x3FCA8FC0, - 0x3FC99600, 0x3FC89C40, 0x3FC7A280, - 0x3FC6A8C0, 0x3FC5AF00, 0x3FC4B540, - 0x3FC3BB80, 0x3FC2C1C0, 0x3FC1C800, - 0x3FC0CE40, 0x3FBFD480, 0x3FBEDAC0, - 0x3FBDE100, 0x3FBCE740, 0x3FBBED80, - 0x3FBAF3C0, 0x3FB9FA00, 0x3FB90040, - 0x3FB80680, 0x3FB70CC0, 0x3FB61300, - 0x3FB51940, 0x3FB41F80, 0x3FB325C0, - 0x3FB22C00, 0x3FB13240, 0x3FB03880, - 0x3FAF3EC0, 0x3FAE4500, 0x3FAD4B40, - 0x3FAC5180, 0x3FAB57C0, 0x3FAA5E00, - 0x3FA96440, 0x3FA86A80, 0x3FA770C0, - 0x3FA67700, 0x3FA57D40, 0x3FA48380, - 0x3FA389C0, 0x3FA29000, 0x3FA19640, - 0x3FA09C80, 0x3F9FA2C0, 0x3F9EA900, - 0x3F9DAF40, 0x3F9CB580, 0x3F9BBBC0, - 0x3F9AC200, 0x3F99C840, 0x3F98CE80, - 0x3F97D4C0, 0x3F96DB00, 0x3F95E140, - 0x3F94E780, 0x3F93EDC0, 0x3F92F400, - 0x3F91FA40, 0x3F910080, 0x3F9006C0, - 0x3F8F0D00, 0x3F8E1340, 0x3F8D1980, - 0x3F8C1FC0, 0x3F8B2600, 0x3F8A2C40, - 0x3F893280, 0x3F8838C0, 0x3F873F00, - 0x3F864540, 0x3F854B80, 0x3F8451C0, - 0x3F835800, 0x3F825E40, 0x3F816480, - 0x3F806AC0, 0x3F7F7100, 0x3F7E7740, - 0x3F7D7D80, 0x3F7C83C0, 0x3F7B8A00, - 0x3F7A9040, 0x3F799680, 0x3F789CC0, - 0x3F77A300, 0x3F76A940, 0x3F75AF80, - 0x3F74B5C0, 0x3F73BC00, 0x3F72C240, - 0x3F71C880, 0x3F70CEC0, 0x3F6FD500, - 0x3F6EDB40, 0x3F6DE180, 0x3F6CE7C0, - 0x3F6BEE00, 0x3F6AF440, 0x3F69FA80, - 0x3F6900C0, 0x3F680700, 0x3F670D40, - 0x3F661380, 0x3F6519C0, 0x3F642000, - 0x3F632640, 0x3F622C80, 0x3F6132C0, - 0x3F603900, 0x3F5F3F40, 0x3F5E4580, - 0x3F5D4BC0, 0x3F5C5200, 0x3F5B5840, - 0x3F5A5E80, 0x3F5964C0, 0x3F586B00, - 0x3F577140, 0x3F567780, 0x3F557DC0, - 0x3F548400, 0x3F538A40, 0x3F529080, - 0x3F5196C0, 0x3F509D00, 0x3F4FA340, - 0x3F4EA980, 0x3F4DAFC0, 0x3F4CB600, - 0x3F4BBC40, 0x3F4AC280, 0x3F49C8C0, - 0x3F48CF00, 0x3F47D540, 0x3F46DB80, - 0x3F45E1C0, 0x3F44E800, 0x3F43EE40, - 0x3F42F480, 0x3F41FAC0, 0x3F410100, - 0x3F400740, 0x3F3F0D80, 0x3F3E13C0, - 0x3F3D1A00, 0x3F3C2040, 0x3F3B2680, - 0x3F3A2CC0, 0x3F393300, 0x3F383940, - 0x3F373F80, 0x3F3645C0, 0x3F354C00, - 0x3F345240, 0x3F335880, 0x3F325EC0, - 0x3F316500, 0x3F306B40, 0x3F2F7180, - 0x3F2E77C0, 0x3F2D7E00, 0x3F2C8440, - 0x3F2B8A80, 0x3F2A90C0, 0x3F299700, - 0x3F289D40, 0x3F27A380, 0x3F26A9C0, - 0x3F25B000, 0x3F24B640, 0x3F23BC80, - 0x3F22C2C0, 0x3F21C900, 0x3F20CF40, - 0x3F1FD580, 0x3F1EDBC0, 0x3F1DE200, - 0x3F1CE840, 0x3F1BEE80, 0x3F1AF4C0, - 0x3F19FB00, 0x3F190140, 0x3F180780, - 0x3F170DC0, 0x3F161400, 0x3F151A40, - 0x3F142080, 0x3F1326C0, 0x3F122D00, - 0x3F113340, 0x3F103980, 0x3F0F3FC0, - 0x3F0E4600, 0x3F0D4C40, 0x3F0C5280, - 0x3F0B58C0, 0x3F0A5F00, 0x3F096540, - 0x3F086B80, 0x3F0771C0, 0x3F067800, - 0x3F057E40, 0x3F048480, 0x3F038AC0, - 0x3F029100, 0x3F019740, 0x3F009D80, - 0x3EFFA3C0, 0x3EFEAA00, 0x3EFDB040, - 0x3EFCB680, 0x3EFBBCC0, 0x3EFAC300, - 0x3EF9C940, 0x3EF8CF80, 0x3EF7D5C0, - 0x3EF6DC00, 0x3EF5E240, 0x3EF4E880, - 0x3EF3EEC0, 0x3EF2F500, 0x3EF1FB40, - 0x3EF10180, 0x3EF007C0, 0x3EEF0E00, - 0x3EEE1440, 0x3EED1A80, 0x3EEC20C0, - 0x3EEB2700, 0x3EEA2D40, 0x3EE93380, - 0x3EE839C0, 0x3EE74000, 0x3EE64640, - 0x3EE54C80, 0x3EE452C0, 0x3EE35900, - 0x3EE25F40, 0x3EE16580, 0x3EE06BC0, - 0x3EDF7200, 0x3EDE7840, 0x3EDD7E80, - 0x3EDC84C0, 0x3EDB8B00, 0x3EDA9140, - 0x3ED99780, 0x3ED89DC0, 0x3ED7A400, - 0x3ED6AA40, 0x3ED5B080, 0x3ED4B6C0, - 0x3ED3BD00, 0x3ED2C340, 0x3ED1C980, - 0x3ED0CFC0, 0x3ECFD600, 0x3ECEDC40, - 0x3ECDE280, 0x3ECCE8C0, 0x3ECBEF00, - 0x3ECAF540, 0x3EC9FB80, 0x3EC901C0, - 0x3EC80800, 0x3EC70E40, 0x3EC61480, - 0x3EC51AC0, 0x3EC42100, 0x3EC32740, - 0x3EC22D80, 0x3EC133C0, 0x3EC03A00, - 0x3EBF4040, 0x3EBE4680, 0x3EBD4CC0, - 0x3EBC5300, 0x3EBB5940, 0x3EBA5F80, - 0x3EB965C0, 0x3EB86C00, 0x3EB77240, - 0x3EB67880, 0x3EB57EC0, 0x3EB48500, - 0x3EB38B40, 0x3EB29180, 0x3EB197C0, - 0x3EB09E00, 0x3EAFA440, 0x3EAEAA80, - 0x3EADB0C0, 0x3EACB700, 0x3EABBD40, - 0x3EAAC380, 0x3EA9C9C0, 0x3EA8D000, - 0x3EA7D640, 0x3EA6DC80, 0x3EA5E2C0, - 0x3EA4E900, 0x3EA3EF40, 0x3EA2F580, - 0x3EA1FBC0, 0x3EA10200, 0x3EA00840, - 0x3E9F0E80, 0x3E9E14C0, 0x3E9D1B00, - 0x3E9C2140, 0x3E9B2780, 0x3E9A2DC0, - 0x3E993400, 0x3E983A40, 0x3E974080, - 0x3E9646C0, 0x3E954D00, 0x3E945340, - 0x3E935980, 0x3E925FC0, 0x3E916600, - 0x3E906C40, 0x3E8F7280, 0x3E8E78C0, - 0x3E8D7F00, 0x3E8C8540, 0x3E8B8B80, - 0x3E8A91C0, 0x3E899800, 0x3E889E40, - 0x3E87A480, 0x3E86AAC0, 0x3E85B100, - 0x3E84B740, 0x3E83BD80, 0x3E82C3C0, - 0x3E81CA00, 0x3E80D040, 0x3E7FD680, - 0x3E7EDCC0, 0x3E7DE300, 0x3E7CE940, - 0x3E7BEF80, 0x3E7AF5C0, 0x3E79FC00, - 0x3E790240, 0x3E780880, 0x3E770EC0, - 0x3E761500, 0x3E751B40, 0x3E742180, - 0x3E7327C0, 0x3E722E00, 0x3E713440, - 0x3E703A80, 0x3E6F40C0, 0x3E6E4700, - 0x3E6D4D40, 0x3E6C5380, 0x3E6B59C0, - 0x3E6A6000, 0x3E696640, 0x3E686C80, - 0x3E6772C0, 0x3E667900, 0x3E657F40, - 0x3E648580, 0x3E638BC0, 0x3E629200, - 0x3E619840, 0x3E609E80, 0x3E5FA4C0, - 0x3E5EAB00, 0x3E5DB140, 0x3E5CB780, - 0x3E5BBDC0, 0x3E5AC400, 0x3E59CA40, - 0x3E58D080, 0x3E57D6C0, 0x3E56DD00, - 0x3E55E340, 0x3E54E980, 0x3E53EFC0, - 0x3E52F600, 0x3E51FC40, 0x3E510280, - 0x3E5008C0, 0x3E4F0F00, 0x3E4E1540, - 0x3E4D1B80, 0x3E4C21C0, 0x3E4B2800, - 0x3E4A2E40, 0x3E493480, 0x3E483AC0, - 0x3E474100, 0x3E464740, 0x3E454D80, - 0x3E4453C0, 0x3E435A00, 0x3E426040, - 0x3E416680, 0x3E406CC0, 0x3E3F7300, - 0x3E3E7940, 0x3E3D7F80, 0x3E3C85C0, - 0x3E3B8C00, 0x3E3A9240, 0x3E399880, - 0x3E389EC0, 0x3E37A500, 0x3E36AB40, - 0x3E35B180, 0x3E34B7C0, 0x3E33BE00, - 0x3E32C440, 0x3E31CA80, 0x3E30D0C0, - 0x3E2FD700, 0x3E2EDD40, 0x3E2DE380, - 0x3E2CE9C0, 0x3E2BF000, 0x3E2AF640, - 0x3E29FC80, 0x3E2902C0, 0x3E280900, - 0x3E270F40, 0x3E261580, 0x3E251BC0, - 0x3E242200, 0x3E232840, 0x3E222E80, - 0x3E2134C0, 0x3E203B00, 0x3E1F4140, - 0x3E1E4780, 0x3E1D4DC0, 0x3E1C5400, - 0x3E1B5A40, 0x3E1A6080, 0x3E1966C0, - 0x3E186D00, 0x3E177340, 0x3E167980, - 0x3E157FC0, 0x3E148600, 0x3E138C40, - 0x3E129280, 0x3E1198C0, 0x3E109F00, - 0x3E0FA540, 0x3E0EAB80, 0x3E0DB1C0, - 0x3E0CB800, 0x3E0BBE40, 0x3E0AC480, - 0x3E09CAC0, 0x3E08D100, 0x3E07D740, - 0x3E06DD80, 0x3E05E3C0, 0x3E04EA00, - 0x3E03F040, 0x3E02F680, 0x3E01FCC0, - 0x3E010300, 0x3E000940, 0x3DFF0F80, - 0x3DFE15C0, 0x3DFD1C00, 0x3DFC2240, - 0x3DFB2880, 0x3DFA2EC0, 0x3DF93500, - 0x3DF83B40, 0x3DF74180, 0x3DF647C0, - 0x3DF54E00, 0x3DF45440, 0x3DF35A80, - 0x3DF260C0, 0x3DF16700, 0x3DF06D40, - 0x3DEF7380, 0x3DEE79C0, 0x3DED8000, - 0x3DEC8640, 0x3DEB8C80, 0x3DEA92C0, - 0x3DE99900, 0x3DE89F40, 0x3DE7A580, - 0x3DE6ABC0, 0x3DE5B200, 0x3DE4B840, - 0x3DE3BE80, 0x3DE2C4C0, 0x3DE1CB00, - 0x3DE0D140, 0x3DDFD780, 0x3DDEDDC0, - 0x3DDDE400, 0x3DDCEA40, 0x3DDBF080, - 0x3DDAF6C0, 0x3DD9FD00, 0x3DD90340, - 0x3DD80980, 0x3DD70FC0, 0x3DD61600, - 0x3DD51C40, 0x3DD42280, 0x3DD328C0, - 0x3DD22F00, 0x3DD13540, 0x3DD03B80, - 0x3DCF41C0, 0x3DCE4800, 0x3DCD4E40, - 0x3DCC5480, 0x3DCB5AC0, 0x3DCA6100, - 0x3DC96740, 0x3DC86D80, 0x3DC773C0, - 0x3DC67A00, 0x3DC58040, 0x3DC48680, - 0x3DC38CC0, 0x3DC29300, 0x3DC19940, - 0x3DC09F80, 0x3DBFA5C0, 0x3DBEAC00, - 0x3DBDB240, 0x3DBCB880, 0x3DBBBEC0, - 0x3DBAC500, 0x3DB9CB40, 0x3DB8D180, - 0x3DB7D7C0, 0x3DB6DE00, 0x3DB5E440, - 0x3DB4EA80, 0x3DB3F0C0, 0x3DB2F700, - 0x3DB1FD40, 0x3DB10380, 0x3DB009C0, - 0x3DAF1000, 0x3DAE1640, 0x3DAD1C80, - 0x3DAC22C0, 0x3DAB2900, 0x3DAA2F40, - 0x3DA93580, 0x3DA83BC0, 0x3DA74200, - 0x3DA64840, 0x3DA54E80, 0x3DA454C0, - 0x3DA35B00, 0x3DA26140, 0x3DA16780, - 0x3DA06DC0, 0x3D9F7400, 0x3D9E7A40, - 0x3D9D8080, 0x3D9C86C0, 0x3D9B8D00, - 0x3D9A9340, 0x3D999980, 0x3D989FC0, - 0x3D97A600, 0x3D96AC40, 0x3D95B280, - 0x3D94B8C0, 0x3D93BF00, 0x3D92C540, - 0x3D91CB80, 0x3D90D1C0, 0x3D8FD800, - 0x3D8EDE40, 0x3D8DE480, 0x3D8CEAC0, - 0x3D8BF100, 0x3D8AF740, 0x3D89FD80, - 0x3D8903C0, 0x3D880A00, 0x3D871040, - 0x3D861680, 0x3D851CC0, 0x3D842300, - 0x3D832940, 0x3D822F80, 0x3D8135C0, - 0x3D803C00, 0x3D7F4240, 0x3D7E4880, - 0x3D7D4EC0, 0x3D7C5500, 0x3D7B5B40, - 0x3D7A6180, 0x3D7967C0, 0x3D786E00, - 0x3D777440, 0x3D767A80, 0x3D7580C0, - 0x3D748700, 0x3D738D40, 0x3D729380, - 0x3D7199C0, 0x3D70A000, 0x3D6FA640, - 0x3D6EAC80, 0x3D6DB2C0, 0x3D6CB900, - 0x3D6BBF40, 0x3D6AC580, 0x3D69CBC0, - 0x3D68D200, 0x3D67D840, 0x3D66DE80, - 0x3D65E4C0, 0x3D64EB00, 0x3D63F140, - 0x3D62F780, 0x3D61FDC0, 0x3D610400, - 0x3D600A40, 0x3D5F1080, 0x3D5E16C0, - 0x3D5D1D00, 0x3D5C2340, 0x3D5B2980, - 0x3D5A2FC0, 0x3D593600, 0x3D583C40, - 0x3D574280, 0x3D5648C0, 0x3D554F00, - 0x3D545540, 0x3D535B80, 0x3D5261C0, - 0x3D516800, 0x3D506E40, 0x3D4F7480, - 0x3D4E7AC0, 0x3D4D8100, 0x3D4C8740, - 0x3D4B8D80, 0x3D4A93C0, 0x3D499A00, - 0x3D48A040, 0x3D47A680, 0x3D46ACC0, - 0x3D45B300, 0x3D44B940, 0x3D43BF80, - 0x3D42C5C0, 0x3D41CC00, 0x3D40D240, - 0x3D3FD880, 0x3D3EDEC0, 0x3D3DE500, - 0x3D3CEB40, 0x3D3BF180, 0x3D3AF7C0, - 0x3D39FE00, 0x3D390440, 0x3D380A80, - 0x3D3710C0, 0x3D361700, 0x3D351D40, - 0x3D342380, 0x3D3329C0, 0x3D323000, - 0x3D313640, 0x3D303C80, 0x3D2F42C0, - 0x3D2E4900, 0x3D2D4F40, 0x3D2C5580, - 0x3D2B5BC0, 0x3D2A6200, 0x3D296840, - 0x3D286E80, 0x3D2774C0, 0x3D267B00, - 0x3D258140, 0x3D248780, 0x3D238DC0, - 0x3D229400, 0x3D219A40, 0x3D20A080, - 0x3D1FA6C0, 0x3D1EAD00, 0x3D1DB340, - 0x3D1CB980, 0x3D1BBFC0, 0x3D1AC600, - 0x3D19CC40, 0x3D18D280, 0x3D17D8C0, - 0x3D16DF00, 0x3D15E540, 0x3D14EB80, - 0x3D13F1C0, 0x3D12F800, 0x3D11FE40, - 0x3D110480, 0x3D100AC0, 0x3D0F1100, - 0x3D0E1740, 0x3D0D1D80, 0x3D0C23C0, - 0x3D0B2A00, 0x3D0A3040, 0x3D093680, - 0x3D083CC0, 0x3D074300, 0x3D064940, - 0x3D054F80, 0x3D0455C0, 0x3D035C00, - 0x3D026240, 0x3D016880, 0x3D006EC0, - 0x3CFF7500, 0x3CFE7B40, 0x3CFD8180, - 0x3CFC87C0, 0x3CFB8E00, 0x3CFA9440, - 0x3CF99A80, 0x3CF8A0C0, 0x3CF7A700, - 0x3CF6AD40, 0x3CF5B380, 0x3CF4B9C0, - 0x3CF3C000, 0x3CF2C640, 0x3CF1CC80, - 0x3CF0D2C0, 0x3CEFD900, 0x3CEEDF40, - 0x3CEDE580, 0x3CECEBC0, 0x3CEBF200, - 0x3CEAF840, 0x3CE9FE80, 0x3CE904C0, - 0x3CE80B00, 0x3CE71140, 0x3CE61780, - 0x3CE51DC0, 0x3CE42400, 0x3CE32A40, - 0x3CE23080, 0x3CE136C0, 0x3CE03D00, - 0x3CDF4340, 0x3CDE4980, 0x3CDD4FC0, - 0x3CDC5600, 0x3CDB5C40, 0x3CDA6280, - 0x3CD968C0, 0x3CD86F00, 0x3CD77540, - 0x3CD67B80, 0x3CD581C0, 0x3CD48800, - 0x3CD38E40, 0x3CD29480, 0x3CD19AC0, - 0x3CD0A100, 0x3CCFA740, 0x3CCEAD80, - 0x3CCDB3C0, 0x3CCCBA00, 0x3CCBC040, - 0x3CCAC680, 0x3CC9CCC0, 0x3CC8D300, - 0x3CC7D940, 0x3CC6DF80, 0x3CC5E5C0, - 0x3CC4EC00, 0x3CC3F240, 0x3CC2F880, - 0x3CC1FEC0, 0x3CC10500, 0x3CC00B40, - 0x3CBF1180, 0x3CBE17C0, 0x3CBD1E00, - 0x3CBC2440, 0x3CBB2A80, 0x3CBA30C0, - 0x3CB93700, 0x3CB83D40, 0x3CB74380, - 0x3CB649C0, 0x3CB55000, 0x3CB45640, - 0x3CB35C80, 0x3CB262C0, 0x3CB16900, - 0x3CB06F40, 0x3CAF7580, 0x3CAE7BC0, - 0x3CAD8200, 0x3CAC8840, 0x3CAB8E80, - 0x3CAA94C0, 0x3CA99B00, 0x3CA8A140, - 0x3CA7A780, 0x3CA6ADC0, 0x3CA5B400, - 0x3CA4BA40, 0x3CA3C080, 0x3CA2C6C0, - 0x3CA1CD00, 0x3CA0D340, 0x3C9FD980, - 0x3C9EDFC0, 0x3C9DE600, 0x3C9CEC40, - 0x3C9BF280, 0x3C9AF8C0, 0x3C99FF00, - 0x3C990540, 0x3C980B80, 0x3C9711C0, - 0x3C961800, 0x3C951E40, 0x3C942480, - 0x3C932AC0, 0x3C923100, 0x3C913740, - 0x3C903D80, 0x3C8F43C0, 0x3C8E4A00, - 0x3C8D5040, 0x3C8C5680, 0x3C8B5CC0, - 0x3C8A6300, 0x3C896940, 0x3C886F80, - 0x3C8775C0, 0x3C867C00, 0x3C858240, - 0x3C848880, 0x3C838EC0, 0x3C829500, - 0x3C819B40, 0x3C80A180, 0x3C7FA7C0, - 0x3C7EAE00, 0x3C7DB440, 0x3C7CBA80, - 0x3C7BC0C0, 0x3C7AC700, 0x3C79CD40, - 0x3C78D380, 0x3C77D9C0, 0x3C76E000, - 0x3C75E640, 0x3C74EC80, 0x3C73F2C0, - 0x3C72F900, 0x3C71FF40, 0x3C710580, - 0x3C700BC0, 0x3C6F1200, 0x3C6E1840, - 0x3C6D1E80, 0x3C6C24C0, 0x3C6B2B00, - 0x3C6A3140, 0x3C693780, 0x3C683DC0, - 0x3C674400, 0x3C664A40, 0x3C655080, - 0x3C6456C0, 0x3C635D00, 0x3C626340, - 0x3C616980, 0x3C606FC0, 0x3C5F7600, - 0x3C5E7C40, 0x3C5D8280, 0x3C5C88C0, - 0x3C5B8F00, 0x3C5A9540, 0x3C599B80, - 0x3C58A1C0, 0x3C57A800, 0x3C56AE40, - 0x3C55B480, 0x3C54BAC0, 0x3C53C100, - 0x3C52C740, 0x3C51CD80, 0x3C50D3C0, - 0x3C4FDA00, 0x3C4EE040, 0x3C4DE680, - 0x3C4CECC0, 0x3C4BF300, 0x3C4AF940, - 0x3C49FF80, 0x3C4905C0, 0x3C480C00, - 0x3C471240, 0x3C461880, 0x3C451EC0, - 0x3C442500, 0x3C432B40, 0x3C423180, - 0x3C4137C0, 0x3C403E00, 0x3C3F4440, - 0x3C3E4A80, 0x3C3D50C0, 0x3C3C5700, - 0x3C3B5D40, 0x3C3A6380, 0x3C3969C0, - 0x3C387000, 0x3C377640, 0x3C367C80, - 0x3C3582C0, 0x3C348900, 0x3C338F40, - 0x3C329580, 0x3C319BC0, 0x3C30A200, - 0x3C2FA840, 0x3C2EAE80, 0x3C2DB4C0, - 0x3C2CBB00, 0x3C2BC140, 0x3C2AC780, - 0x3C29CDC0, 0x3C28D400, 0x3C27DA40, - 0x3C26E080, 0x3C25E6C0, 0x3C24ED00, - 0x3C23F340, 0x3C22F980, 0x3C21FFC0, - 0x3C210600, 0x3C200C40, 0x3C1F1280, - 0x3C1E18C0, 0x3C1D1F00, 0x3C1C2540, - 0x3C1B2B80, 0x3C1A31C0, 0x3C193800, - 0x3C183E40, 0x3C174480, 0x3C164AC0, - 0x3C155100, 0x3C145740, 0x3C135D80, - 0x3C1263C0, 0x3C116A00, 0x3C107040, - 0x3C0F7680, 0x3C0E7CC0, 0x3C0D8300, - 0x3C0C8940, 0x3C0B8F80, 0x3C0A95C0, - 0x3C099C00, 0x3C08A240, 0x3C07A880, - 0x3C06AEC0, 0x3C05B500, 0x3C04BB40, - 0x3C03C180, 0x3C02C7C0, 0x3C01CE00, - 0x3C00D440, 0x3BFFDA80, 0x3BFEE0C0, - 0x3BFDE700, 0x3BFCED40, 0x3BFBF380, - 0x3BFAF9C0, 0x3BFC0000, 0x3BFB1780, - 0x3BFA2F00, 0x3BF94680, 0x3BF85E00, - 0x3BF77580, 0x3BF68D00, 0x3BF5A480, - 0x3BF4BC00, 0x3BF3D380, 0x3BF2EB00, - 0x3BF20280, 0x3BF11A00, 0x3BF03180, - 0x3BEF4900, 0x3BEE6080, 0x3BED7800, - 0x3BEC8F80, 0x3BEBA700, 0x3BEABE80, - 0x3BE9D600, 0x3BE8ED80, 0x3BE80500, - 0x3BE71C80, 0x3BE63400, 0x3BE54B80, - 0x3BE46300, 0x3BE37A80, 0x3BE29200, - 0x3BE1A980, 0x3BE0C100, 0x3BDFD880, - 0x3BDEF000, 0x3BDE0780, 0x3BDD1F00, - 0x3BDC3680, 0x3BDB4E00, 0x3BDA6580, - 0x3BD97D00, 0x3BD89480, 0x3BD7AC00, - 0x3BD6C380, 0x3BD5DB00, 0x3BD4F280, - 0x3BD40A00, 0x3BD32180, 0x3BD23900, - 0x3BD15080, 0x3BD06800, 0x3BCF7F80, - 0x3BCE9700, 0x3BCDAE80, 0x3BCCC600, - 0x3BCBDD80, 0x3BCAF500, 0x3BCA0C80, - 0x3BC92400, 0x3BC83B80, 0x3BC75300, - 0x3BC66A80, 0x3BC58200, 0x3BC49980, - 0x3BC3B100, 0x3BC2C880, 0x3BC1E000, - 0x3BC0F780, 0x3BC00F00, 0x3BBF2680, - 0x3BBE3E00, 0x3BBD5580, 0x3BBC6D00, - 0x3BBB8480, 0x3BBA9C00, 0x3BB9B380, - 0x3BB8CB00, 0x3BB7E280, 0x3BB6FA00, - 0x3BB61180, 0x3BB52900, 0x3BB44080, - 0x3BB35800, 0x3BB26F80, 0x3BB18700, - 0x3BB09E80, 0x3BAFB600, 0x3BAECD80, - 0x3BADE500, 0x3BACFC80, 0x3BAC1400, - 0x3BAB2B80, 0x3BAA4300, 0x3BA95A80, - 0x3BA87200, 0x3BA78980, 0x3BA6A100, - 0x3BA5B880, 0x3BA4D000, 0x3BA3E780, - 0x3BA2FF00, 0x3BA21680, 0x3BA12E00, - 0x3BA04580, 0x3B9F5D00, 0x3B9E7480, - 0x3B9D8C00, 0x3B9CA380, 0x3B9BBB00, - 0x3B9AD280, 0x3B99EA00, 0x3B990180, - 0x3B981900, 0x3B973080, 0x3B964800, - 0x3B955F80, 0x3B947700, 0x3B938E80, - 0x3B92A600, 0x3B91BD80, 0x3B90D500, - 0x3B8FEC80, 0x3B8F0400, 0x3B8E1B80, - 0x3B8D3300, 0x3B8C4A80, 0x3B8B6200, - 0x3B8A7980, 0x3B899100, 0x3B88A880, - 0x3B87C000, 0x3B86D780, 0x3B85EF00, - 0x3B850680, 0x3B841E00, 0x3B833580, - 0x3B824D00, 0x3B816480, 0x3B807C00, - 0x3B7F9380, 0x3B7EAB00, 0x3B7DC280, - 0x3B7CDA00, 0x3B7BF180, 0x3B7B0900, - 0x3B7A2080, 0x3B793800, 0x3B784F80, - 0x3B776700, 0x3B767E80, 0x3B759600, - 0x3B74AD80, 0x3B73C500, 0x3B72DC80, - 0x3B71F400, 0x3B710B80, 0x3B702300, - 0x3B6F3A80, 0x3B6E5200, 0x3B6D6980, - 0x3B6C8100, 0x3B6B9880, 0x3B6AB000, - 0x3B69C780, 0x3B68DF00, 0x3B67F680, - 0x3B670E00, 0x3B662580, 0x3B653D00, - 0x3B645480, 0x3B636C00, 0x3B628380, - 0x3B619B00, 0x3B60B280, 0x3B5FCA00, - 0x3B5EE180, 0x3B5DF900, 0x3B5D1080, - 0x3B5C2800, 0x3B5B3F80, 0x3B5A5700, - 0x3B596E80, 0x3B588600, 0x3B579D80, - 0x3B56B500, 0x3B55CC80, 0x3B54E400, - 0x3B53FB80, 0x3B531300, 0x3B522A80, - 0x3B514200, 0x3B505980, 0x3B4F7100, - 0x3B4E8880, 0x3B4DA000, 0x3B4CB780, - 0x3B4BCF00, 0x3B4AE680, 0x3B49FE00, - 0x3B491580, 0x3B482D00, 0x3B474480, - 0x3B465C00, 0x3B457380, 0x3B448B00, - 0x3B43A280, 0x3B42BA00, 0x3B41D180, - 0x3B40E900, 0x3B400080, 0x3B3F1800, - 0x3B3E2F80, 0x3B3D4700, 0x3B3C5E80, - 0x3B3B7600, 0x3B3A8D80, 0x3B39A500, - 0x3B38BC80, 0x3B37D400, 0x3B36EB80, - 0x3B360300, 0x3B351A80, 0x3B343200, - 0x3B334980, 0x3B326100, 0x3B317880, - 0x3B309000, 0x3B2FA780, 0x3B2EBF00, - 0x3B2DD680, 0x3B2CEE00, 0x3B2C0580, - 0x3B2B1D00, 0x3B2A3480, 0x3B294C00, - 0x3B286380, 0x3B277B00, 0x3B269280, - 0x3B25AA00, 0x3B24C180, 0x3B23D900, - 0x3B22F080, 0x3B220800, 0x3B211F80, - 0x3B203700, 0x3B1F4E80, 0x3B1E6600, - 0x3B1D7D80, 0x3B1C9500, 0x3B1BAC80, - 0x3B1AC400, 0x3B19DB80, 0x3B18F300, - 0x3B180A80, 0x3B172200, 0x3B163980, - 0x3B155100, 0x3B146880, 0x3B138000, - 0x3B129780, 0x3B11AF00, 0x3B10C680, - 0x3B0FDE00, 0x3B0EF580, 0x3B0E0D00, - 0x3B0D2480, 0x3B0C3C00, 0x3B0B5380, - 0x3B0A6B00, 0x3B098280, 0x3B089A00, - 0x3B07B180, 0x3B06C900, 0x3B05E080, - 0x3B04F800, 0x3B040F80, 0x3B032700, - 0x3B023E80, 0x3B015600, 0x3B006D80, - 0x3AFF8500, 0x3AFE9C80, 0x3AFDB400, - 0x3AFCCB80, 0x3AFBE300, 0x3AFAFA80, - 0x3AFA1200, 0x3AF92980, 0x3AF84100, - 0x3AF75880, 0x3AF67000, 0x3AF58780, - 0x3AF49F00, 0x3AF3B680, 0x3AF2CE00, - 0x3AF1E580, 0x3AF0FD00, 0x3AF01480, - 0x3AEF2C00, 0x3AEE4380, 0x3AED5B00, - 0x3AEC7280, 0x3AEB8A00, 0x3AEAA180, - 0x3AE9B900, 0x3AE8D080, 0x3AE7E800, - 0x3AE6FF80, 0x3AE61700, 0x3AE52E80, - 0x3AE44600, 0x3AE35D80, 0x3AE27500, - 0x3AE18C80, 0x3AE0A400, 0x3ADFBB80, - 0x3ADED300, 0x3ADDEA80, 0x3ADD0200, - 0x3ADC1980, 0x3ADB3100, 0x3ADA4880, - 0x3AD96000, 0x3AD87780, 0x3AD78F00, - 0x3AD6A680, 0x3AD5BE00, 0x3AD4D580, - 0x3AD3ED00, 0x3AD30480, 0x3AD21C00, - 0x3AD13380, 0x3AD04B00, 0x3ACF6280, - 0x3ACE7A00, 0x3ACD9180, 0x3ACCA900, - 0x3ACBC080, 0x3ACAD800, 0x3AC9EF80, - 0x3AC90700, 0x3AC81E80, 0x3AC73600, - 0x3AC64D80, 0x3AC56500, 0x3AC47C80, - 0x3AC39400, 0x3AC2AB80, 0x3AC1C300, - 0x3AC0DA80, 0x3ABFF200, 0x3ABF0980, - 0x3ABE2100, 0x3ABD3880, 0x3ABC5000, - 0x3ABB6780, 0x3ABA7F00, 0x3AB99680, - 0x3AB8AE00, 0x3AB7C580, 0x3AB6DD00, - 0x3AB5F480, 0x3AB50C00, 0x3AB42380, - 0x3AB33B00, 0x3AB25280, 0x3AB16A00, - 0x3AB08180, 0x3AAF9900, 0x3AAEB080, - 0x3AADC800, 0x3AACDF80, 0x3AABF700, - 0x3AAB0E80, 0x3AAA2600, 0x3AA93D80, - 0x3AA85500, 0x3AA76C80, 0x3AA68400, - 0x3AA59B80, 0x3AA4B300, 0x3AA3CA80, - 0x3AA2E200, 0x3AA1F980, 0x3AA11100, - 0x3AA02880, 0x3A9F4000, 0x3A9E5780, - 0x3A9D6F00, 0x3A9C8680, 0x3A9B9E00, - 0x3A9AB580, 0x3A99CD00, 0x3A98E480, - 0x3A97FC00, 0x3A971380, 0x3A962B00, - 0x3A954280, 0x3A945A00, 0x3A937180, - 0x3A928900, 0x3A91A080, 0x3A90B800, - 0x3A8FCF80, 0x3A8EE700, 0x3A8DFE80, - 0x3A8D1600, 0x3A8C2D80, 0x3A8B4500, - 0x3A8A5C80, 0x3A897400, 0x3A888B80, - 0x3A87A300, 0x3A86BA80, 0x3A85D200, - 0x3A84E980, 0x3A840100, 0x3A831880, - 0x3A823000, 0x3A814780, 0x3A805F00, - 0x3A7F7680, 0x3A7E8E00, 0x3A7DA580, - 0x3A7CBD00, 0x3A7BD480, 0x3A7AEC00, - 0x3A7A0380, 0x3A791B00, 0x3A783280, - 0x3A774A00, 0x3A766180, 0x3A757900, - 0x3A749080, 0x3A73A800, 0x3A72BF80, - 0x3A71D700, 0x3A70EE80, 0x3A700600, - 0x3A6F1D80, 0x3A6E3500, 0x3A6D4C80, - 0x3A6C6400, 0x3A6B7B80, 0x3A6A9300, - 0x3A69AA80, 0x3A68C200, 0x3A67D980, - 0x3A66F100, 0x3A660880, 0x3A652000, - 0x3A643780, 0x3A634F00, 0x3A626680, - 0x3A617E00, 0x3A609580, 0x3A5FAD00, - 0x3A5EC480, 0x3A5DDC00, 0x3A5CF380, - 0x3A5C0B00, 0x3A5B2280, 0x3A5A3A00, - 0x3A595180, 0x3A586900, 0x3A578080, - 0x3A569800, 0x3A55AF80, 0x3A54C700, - 0x3A53DE80, 0x3A52F600, 0x3A520D80, - 0x3A512500, 0x3A503C80, 0x3A4F5400, - 0x3A4E6B80, 0x3A4D8300, 0x3A4C9A80, - 0x3A4BB200, 0x3A4AC980, 0x3A49E100, - 0x3A48F880, 0x3A481000, 0x3A472780, - 0x3A463F00, 0x3A455680, 0x3A446E00, - 0x3A438580, 0x3A429D00, 0x3A41B480, - 0x3A40CC00, 0x3A3FE380, 0x3A3EFB00, - 0x3A3E1280, 0x3A3D2A00, 0x3A3C4180, - 0x3A3B5900, 0x3A3A7080, 0x3A398800, - 0x3A389F80, 0x3A37B700, 0x3A36CE80, - 0x3A35E600, 0x3A34FD80, 0x3A341500, - 0x3A332C80, 0x3A324400, 0x3A315B80, - 0x3A307300, 0x3A2F8A80, 0x3A2EA200, - 0x3A2DB980, 0x3A2CD100, 0x3A2BE880, - 0x3A2B0000, 0x3A2A1780, 0x3A292F00, - 0x3A284680, 0x3A275E00, 0x3A267580, - 0x3A258D00, 0x3A24A480, 0x3A23BC00, - 0x3A22D380, 0x3A21EB00, 0x3A210280, - 0x3A201A00, 0x3A1F3180, 0x3A1E4900, - 0x3A1D6080, 0x3A1C7800, 0x3A1B8F80, - 0x3A1AA700, 0x3A19BE80, 0x3A18D600, - 0x3A17ED80, 0x3A170500, 0x3A161C80, - 0x3A153400, 0x3A144B80, 0x3A136300, - 0x3A127A80, 0x3A119200, 0x3A10A980, - 0x3A0FC100, 0x3A0ED880, 0x3A0DF000, - 0x3A0D0780, 0x3A0C1F00, 0x3A0B3680, - 0x3A0A4E00, 0x3A096580, 0x3A087D00, - 0x3A079480, 0x3A06AC00, 0x3A05C380, - 0x3A04DB00, 0x3A03F280, 0x3A030A00, - 0x3A022180, 0x3A013900, 0x3A005080, - 0x39FF6800, 0x39FE7F80, 0x39FD9700, - 0x39FCAE80, 0x39FBC600, 0x39FADD80, - 0x39F9F500, 0x39F90C80, 0x39F82400, - 0x39F73B80, 0x39F65300, 0x39F56A80, - 0x39F48200, 0x39F39980, 0x39F2B100, - 0x39F1C880, 0x39F0E000, 0x39EFF780, - 0x39EF0F00, 0x39EE2680, 0x39ED3E00, - 0x39EC5580, 0x39EB6D00, 0x39EA8480, - 0x39E99C00, 0x39E8B380, 0x39E7CB00, - 0x39E6E280, 0x39E5FA00, 0x39E51180, - 0x39E42900, 0x39E34080, 0x39E25800, - 0x39E16F80, 0x39E08700, 0x39DF9E80, - 0x39DEB600, 0x39DDCD80, 0x39DCE500, - 0x39DBFC80, 0x39DB1400, 0x39DA2B80, - 0x39D94300, 0x39D85A80, 0x39D77200, - 0x39D68980, 0x39D5A100, 0x39D4B880, - 0x39D3D000, 0x39D2E780, 0x39D1FF00, - 0x39D11680, 0x39D02E00, 0x39CF4580, - 0x39CE5D00, 0x39CD7480, 0x39CC8C00, - 0x39CBA380, 0x39CABB00, 0x39C9D280, - 0x39C8EA00, 0x39C80180, 0x39C71900, - 0x39C63080, 0x39C54800, 0x39C45F80, - 0x39C37700, 0x39C28E80, 0x39C1A600, - 0x39C0BD80, 0x39BFD500, 0x39BEEC80, - 0x39BE0400, 0x39BD1B80, 0x39BC3300, - 0x39BB4A80, 0x39BA6200, 0x39B97980, - 0x39B89100, 0x39B7A880, 0x39B6C000, - 0x39B5D780, 0x39B4EF00, 0x39B40680, - 0x39B31E00, 0x39B23580, 0x39B14D00, - 0x39B06480, 0x39AF7C00, 0x39AE9380, - 0x39ADAB00, 0x39ACC280, 0x39ABDA00, - 0x39AAF180, 0x39AA0900, 0x39A92080, - 0x39A83800, 0x39A74F80, 0x39A66700, - 0x39A57E80, 0x39A49600, 0x39A3AD80, - 0x39A2C500, 0x39A1DC80, 0x39A0F400, - 0x39A00B80, 0x399F2300, 0x399E3A80, - 0x399D5200, 0x399C6980, 0x399B8100, - 0x399A9880, 0x3999B000, 0x3998C780, - 0x3997DF00, 0x3996F680, 0x39960E00, - 0x39952580, 0x39943D00, 0x39935480, - 0x39926C00, 0x39918380, 0x39909B00, - 0x398FB280, 0x398ECA00, 0x398DE180, - 0x398CF900, 0x398C1080, 0x398B2800, - 0x398A3F80, 0x39895700, 0x39886E80, - 0x39878600, 0x39869D80, 0x3985B500, - 0x3984CC80, 0x3983E400, 0x3982FB80, - 0x39821300, 0x39812A80, 0x39804200, - 0x397F5980, 0x397E7100, 0x397D8880, - 0x397CA000, 0x397BB780, 0x397ACF00, - 0x3979E680, 0x3978FE00, 0x39781580, - 0x39772D00, 0x39764480, 0x39755C00, - 0x39747380, 0x39738B00, 0x3972A280, - 0x3971BA00, 0x3970D180, 0x396FE900, - 0x396F0080, 0x396E1800, 0x396D2F80, - 0x396C4700, 0x396B5E80, 0x396A7600, - 0x39698D80, 0x3968A500, 0x3967BC80, - 0x3966D400, 0x3965EB80, 0x39650300, - 0x39641A80, 0x39633200, 0x39624980, - 0x39616100, 0x39607880, 0x395F9000, - 0x395EA780, 0x395DBF00, 0x395CD680, - 0x395BEE00, 0x395B0580, 0x395A1D00, - 0x39593480, 0x39584C00, 0x39576380, - 0x39567B00, 0x39559280, 0x3954AA00, - 0x3953C180, 0x3952D900, 0x3951F080, - 0x39510800, 0x39501F80, 0x394F3700, - 0x394E4E80, 0x394D6600, 0x394C7D80, - 0x394B9500, 0x394AAC80, 0x3949C400, - 0x3948DB80, 0x3947F300, 0x39470A80, - 0x39462200, 0x39453980, 0x39445100, - 0x39436880, 0x39428000, 0x39419780, - 0x3940AF00, 0x393FC680, 0x393EDE00, - 0x393DF580, 0x393D0D00, 0x393C2480, - 0x393B3C00, 0x393A5380, 0x39396B00, - 0x39388280, 0x39379A00, 0x3936B180, - 0x3935C900, 0x3934E080, 0x3933F800, - 0x39330F80, 0x39322700, 0x39313E80, - 0x39305600, 0x392F6D80, 0x392E8500, - 0x392D9C80, 0x392CB400, 0x392BCB80, - 0x392AE300, 0x3929FA80, 0x39291200, - 0x39282980, 0x39274100, 0x39265880, - 0x39257000, 0x39248780, 0x39239F00, - 0x3922B680, 0x3921CE00, 0x3920E580, - 0x391FFD00, 0x391F1480, 0x391E2C00, - 0x391D4380, 0x391C5B00, 0x391B7280, - 0x391A8A00, 0x3919A180, 0x3918B900, - 0x3917D080, 0x3916E800, 0x3915FF80, - 0x39151700, 0x39142E80, 0x39134600, - 0x39125D80, 0x39117500, 0x39108C80, - 0x390FA400, 0x390EBB80, 0x390DD300, - 0x390CEA80, 0x390C0200, 0x390B1980, - 0x390A3100, 0x39094880, 0x39086000, - 0x39077780, 0x39068F00, 0x3905A680, - 0x3904BE00, 0x3903D580, 0x3902ED00, - 0x39020480, 0x39011C00, 0x39003380, - 0x38FF4B00, 0x38FE6280, 0x38FD7A00, - 0x38FC9180, 0x38FBA900, 0x38FAC080, - 0x38F9D800, 0x38F8EF80, 0x38F80700, - 0x38F71E80, 0x38F63600, 0x38F54D80, - 0x38F46500, 0x38F37C80, 0x38F29400, - 0x38F1AB80, 0x38F0C300, 0x38EFDA80, - 0x38EEF200, 0x38EE0980, 0x38ED2100, - 0x38EC3880, 0x38EB5000, 0x38EA6780, - 0x38E97F00, 0x38E89680, 0x38E7AE00, - 0x38E6C580, 0x38E5DD00, 0x38E4F480, - 0x38E40C00, 0x38E32380, 0x38E23B00, - 0x38E15280, 0x38E06A00, 0x38DF8180, - 0x38DE9900, 0x38DDB080, 0x38DCC800, - 0x38DBDF80, 0x38DAF700, 0x38DA0E80, - 0x38D92600, 0x38D83D80, 0x38D75500, - 0x38D66C80, 0x38D58400, 0x38D49B80, - 0x38D3B300, 0x38D2CA80, 0x38D1E200, - 0x38D0F980, 0x38D01100, 0x38CF2880, - 0x38CE4000, 0x38CD5780, 0x38CC6F00, - 0x38CB8680, 0x38CA9E00, 0x38C9B580, - 0x38C8CD00, 0x38C7E480, 0x38C6FC00, - 0x38C61380, 0x38C52B00, 0x38C44280, - 0x38C35A00, 0x38C27180, 0x38C18900, - 0x38C0A080, 0x38BFB800, 0x38BECF80, - 0x38BDE700, 0x38BCFE80, 0x38BC1600, - 0x38BB2D80, 0x38BA4500, 0x38B95C80, - 0x38B87400, 0x38B78B80, 0x38B6A300, - 0x38B5BA80, 0x38B4D200, 0x38B3E980, - 0x38B30100, 0x38B21880, 0x38B13000, - 0x38B04780, 0x38AF5F00, 0x38AE7680, - 0x38AD8E00, 0x38ACA580, 0x38ABBD00, - 0x38AAD480, 0x38A9EC00, 0x38A90380, - 0x38A81B00, 0x38A73280, 0x38A64A00, - 0x38A56180, 0x38A47900, 0x38A39080, - 0x38A2A800, 0x38A1BF80, 0x38A0D700, - 0x389FEE80, 0x389F0600, 0x389E1D80, - 0x389D3500, 0x389C4C80, 0x389B6400, - 0x389A7B80, 0x38999300, 0x3898AA80, - 0x3897C200, 0x3896D980, 0x3895F100, - 0x38950880, 0x38942000, 0x38933780, - 0x38924F00, 0x38916680, 0x38907E00, - 0x388F9580, 0x388EAD00, 0x388DC480, - 0x388CDC00, 0x388BF380, 0x388B0B00, - 0x388A2280, 0x38893A00, 0x38885180, - 0x38876900, 0x38868080, 0x38859800, - 0x3884AF80, 0x3883C700, 0x3882DE80, - 0x3881F600, 0x38810D80, 0x38802500, - 0x387F3C80, 0x387E5400, 0x387D6B80, - 0x387C8300, 0x387B9A80, 0x387AB200, - 0x3879C980, 0x3878E100, 0x3877F880, - 0x38771000, 0x38762780, 0x38753F00, - 0x38745680, 0x38736E00, 0x38728580, - 0x38719D00, 0x3870B480, 0x386FCC00, - 0x386EE380, 0x386DFB00, 0x386D1280, - 0x386C2A00, 0x386B4180, 0x386A5900, - 0x38697080, 0x38688800, 0x38679F80, - 0x3866B700, 0x3865CE80, 0x3864E600, - 0x3863FD80, 0x38631500, 0x38622C80, - 0x38614400, 0x38605B80, 0x385F7300, - 0x385E8A80, 0x385DA200, 0x385CB980, - 0x385BD100, 0x385AE880, 0x385A0000, - 0x38591780, 0x38582F00, 0x38574680, - 0x38565E00, 0x38557580, 0x38548D00, - 0x3853A480, 0x3852BC00, 0x3851D380, - 0x3850EB00, 0x38500280, 0x384F1A00, - 0x384E3180, 0x384D4900, 0x384C6080, - 0x384B7800, 0x384A8F80, 0x3849A700, - 0x3848BE80, 0x3847D600, 0x3846ED80, - 0x38460500, 0x38451C80, 0x38443400, - 0x38434B80, 0x38426300, 0x38417A80, - 0x38409200, 0x383FA980, 0x383EC100, - 0x383DD880, 0x383CF000, 0x383C0780, - 0x383B1F00, 0x383A3680, 0x38394E00, - 0x38386580, 0x38377D00, 0x38369480, - 0x3835AC00, 0x3834C380, 0x3833DB00, - 0x3832F280, 0x38320A00, 0x38312180, - 0x38303900, 0x382F5080, 0x382E6800, - 0x382D7F80, 0x382C9700, 0x382BAE80, - 0x382AC600, 0x3829DD80, 0x3828F500, - 0x38280C80, 0x38272400, 0x38263B80, - 0x38255300, 0x38246A80, 0x38238200, - 0x38229980, 0x3821B100, 0x3820C880, - 0x381FE000, 0x381EF780, 0x381E0F00, - 0x381D2680, 0x381C3E00, 0x381B5580, - 0x381A6D00, 0x38198480, 0x38189C00, - 0x3817B380, 0x3816CB00, 0x3815E280, - 0x3814FA00, 0x38141180, 0x38132900, - 0x38124080, 0x38115800, 0x38106F80, - 0x380F8700, 0x380E9E80, 0x380DB600, - 0x380CCD80, 0x380BE500, 0x380AFC80, - 0x380A1400, 0x38092B80, 0x38084300, - 0x38075A80, 0x38067200, 0x38058980, - 0x3804A100, 0x3803B880, 0x3802D000, - 0x3801E780, 0x3800FF00, 0x38001680, - 0x37FF2E00, 0x37FE4580, 0x37FD5D00, - 0x37FC7480, 0x37FB8C00, 0x37FAA380, - 0x37F9BB00, 0x37F8D280, 0x37F7EA00, - 0x37F70180, 0x37F61900, 0x37F53080, - 0x37F44800, 0x37F35F80, 0x37F27700, - 0x37F18E80, 0x37F0A600, 0x37EFBD80, - 0x37EED500, 0x37EDEC80, 0x37ED0400, - 0x37EC1B80, 0x37EB3300, 0x37EA4A80, - 0x37E96200, 0x37E87980, 0x37E79100, - 0x37E6A880, 0x37E5C000, 0x37E4D780, - 0x37E3EF00, 0x37E30680, 0x37E21E00, - 0x37E13580, 0x37E04D00, 0x37DF6480, - 0x37DE7C00, 0x37DD9380, 0x37DCAB00, - 0x37DBC280, 0x37DADA00, 0x37D9F180, - 0x37D90900, 0x37D82080, 0x37D73800, - 0x37D64F80, 0x37D56700, 0x37D47E80, - 0x37D39600, 0x37D2AD80, 0x37D1C500, - 0x37D0DC80, 0x37CFF400, 0x37CF0B80, - 0x37CE2300, 0x37CD3A80, 0x37CC5200, - 0x37CB6980, 0x37CA8100, 0x37C99880, - 0x37C8B000, 0x37C7C780, 0x37C6DF00, - 0x37C5F680, 0x37C50E00, 0x37C42580, - 0x37C33D00, 0x37C25480, 0x37C16C00, - 0x37C08380, 0x37BF9B00, 0x37BEB280, - 0x37BDCA00, 0x37BCE180, 0x37BBF900, - 0x37BB1080, 0x37BA2800, 0x37B93F80, - 0x37B85700, 0x37B76E80, 0x37B68600, - 0x37B59D80, 0x37B4B500, 0x37B3CC80, - 0x37B2E400, 0x37B1FB80, 0x37B11300, - 0x37B02A80, 0x37AF4200, 0x37AE5980, - 0x37AD7100, 0x37AC8880, 0x37ABA000, - 0x37AAB780, 0x37A9CF00, 0x37A8E680, - 0x37A7FE00, 0x37A71580, 0x37A62D00, - 0x37A54480, 0x37A45C00, 0x37A37380, - 0x37A28B00, 0x37A1A280, 0x37A0BA00, - 0x379FD180, 0x379EE900, 0x379E0080, - 0x379D1800, 0x379C2F80, 0x379B4700, - 0x379A5E80, 0x37997600, 0x37988D80, - 0x3797A500, 0x3796BC80, 0x3795D400, - 0x3794EB80, 0x37940300, 0x37931A80, - 0x37923200, 0x37914980, 0x37906100, - 0x378F7880, 0x378E9000, 0x378DA780, - 0x378CBF00, 0x378BD680, 0x378AEE00, - 0x378A0580, 0x37891D00, 0x37883480, - 0x37874C00, 0x37866380, 0x37857B00, - 0x37849280, 0x3783AA00, 0x3782C180, - 0x3781D900, 0x3780F080, 0x37800800, - 0x377F1F80, 0x377E3700, 0x377D4E80, - 0x377C6600, 0x377B7D80, 0x377A9500, - 0x3779AC80, 0x3778C400, 0x3777DB80, - 0x3776F300, 0x37760A80, 0x37752200, - 0x37743980, 0x37735100, 0x37726880, - 0x37718000, 0x37709780, 0x376FAF00, - 0x376EC680, 0x376DDE00, 0x376CF580, - 0x376C0D00, 0x376B2480, 0x376A3C00, - 0x37695380, 0x37686B00, 0x37678280, - 0x37669A00, 0x3765B180, 0x3764C900, - 0x3763E080, 0x3762F800, 0x37620F80, - 0x37612700, 0x37603E80, 0x375F5600, - 0x375E6D80, 0x375D8500, 0x375C9C80, - 0x375BB400, 0x375ACB80, 0x3759E300, - 0x3758FA80, 0x37581200, 0x37572980, - 0x37564100, 0x37555880, 0x37547000, - 0x37538780, 0x37529F00, 0x3751B680, - 0x3750CE00, 0x374FE580, 0x374EFD00, - 0x374E1480, 0x374D2C00, 0x374C4380, - 0x374B5B00, 0x374A7280, 0x37498A00, - 0x3748A180, 0x3747B900, 0x3746D080, - 0x3745E800, 0x3744FF80, 0x37441700, - 0x37432E80, 0x37424600, 0x37415D80, - 0x37407500, 0x373F8C80, 0x373EA400, - 0x373DBB80, 0x373CD300, 0x373BEA80, - 0x373B0200, 0x373A1980, 0x37393100, - 0x37384880, 0x37376000, 0x37367780, - 0x37358F00, 0x3734A680, 0x3733BE00, - 0x3732D580, 0x3731ED00, 0x37310480, - 0x37301C00, 0x372F3380, 0x372E4B00, - 0x372D6280, 0x372C7A00, 0x372B9180, - 0x372AA900, 0x3729C080, 0x3728D800, - 0x3727EF80, 0x37270700, 0x37261E80, - 0x37253600, 0x37244D80, 0x37236500, - 0x37227C80, 0x37219400, 0x3720AB80, - 0x371FC300, 0x371EDA80, 0x371DF200, - 0x371D0980, 0x371C2100, 0x371B3880, - 0x371A5000, 0x37196780, 0x37187F00, - 0x37179680, 0x3716AE00, 0x3715C580, - 0x3714DD00, 0x3713F480, 0x37130C00, - 0x37122380, 0x37113B00, 0x37105280, - 0x370F6A00, 0x370E8180, 0x370D9900, - 0x370CB080, 0x370BC800, 0x370ADF80, - 0x3709F700, 0x37090E80, 0x37082600, - 0x37073D80, 0x37065500, 0x37056C80, - 0x37048400, 0x37039B80, 0x3702B300, - 0x3701CA80, 0x3700E200, 0x36FFF980, - 0x36FF1100, 0x36FE2880, 0x36FD4000, - 0x36FC5780, 0x36FB6F00, 0x36FA8680, - 0x36F99E00, 0x36F8B580, 0x36F7CD00, - 0x36F6E480, 0x36F5FC00, 0x36F51380, - 0x36F42B00, 0x36F34280, 0x36F25A00, - 0x36F17180, 0x36F08900, 0x36EFA080, - 0x36EEB800, 0x36EDCF80, 0x36ECE700, - 0x36EBFE80, 0x36EB1600, 0x36EA2D80, - 0x36E94500, 0x36E85C80, 0x36E77400, - 0x36E68B80, 0x36E5A300, 0x36E4BA80, - 0x36E3D200, 0x36E2E980, 0x36E20100, - 0x36E11880, 0x36E03000, 0x36DF4780, - 0x36DE5F00, 0x36DD7680, 0x36DC8E00, - 0x36DBA580, 0x36DABD00, 0x36D9D480, - 0x36D8EC00, 0x36D80380, 0x36D71B00, - 0x36D63280, 0x36D54A00, 0x36D46180, - 0x36D37900, 0x36D29080, 0x36D1A800, - 0x36D0BF80, 0x36CFD700, 0x36CEEE80, - 0x36CE0600, 0x36CD1D80, 0x36CC3500, - 0x36CB4C80, 0x36CA6400, 0x36C97B80, - 0x36C89300, 0x36C7AA80, 0x36C6C200, - 0x36C5D980, 0x36C4F100, 0x36C40880, - 0x36C32000, 0x36C23780, 0x36C14F00, - 0x36C06680, 0x36BF7E00, 0x36BE9580, - 0x36BDAD00, 0x36BCC480, 0x36BBDC00, - 0x36BAF380, 0x36BA0B00, 0x36B92280, - 0x36B83A00, 0x36B75180, 0x36B66900, - 0x36B58080, 0x36B49800, 0x36B3AF80, - 0x36B2C700, 0x36B1DE80, 0x36B0F600, - 0x36B00D80, 0x36AF2500, 0x36AE3C80, - 0x36AD5400, 0x36AC6B80, 0x36AB8300, - 0x36AA9A80, 0x36A9B200, 0x36A8C980, - 0x36A7E100, 0x36A6F880, 0x36A61000, - 0x36A52780, 0x36A43F00, 0x36A35680, - 0x36A26E00, 0x36A18580, 0x36A09D00, - 0x369FB480, 0x369ECC00, 0x369DE380, - 0x369CFB00, 0x369C1280, 0x369B2A00, - 0x369A4180, 0x36995900, 0x36987080, - 0x36978800, 0x36969F80, 0x3695B700, - 0x3694CE80, 0x3693E600, 0x3692FD80, - 0x36921500, 0x36912C80, 0x36904400, - 0x368F5B80, 0x368E7300, 0x368D8A80, - 0x368CA200, 0x368BB980, 0x368AD100, - 0x3689E880, 0x36890000, 0x36881780, - 0x36872F00, 0x36864680, 0x36855E00, - 0x36847580, 0x36838D00, 0x3682A480, - 0x3681BC00, 0x3680D380, 0x367FEB00, - 0x367F0280, 0x367E1A00, 0x367D3180, - 0x367C4900, 0x367B6080, 0x367A7800, - 0x36798F80, 0x3678A700, 0x3677BE80, - 0x3676D600, 0x3675ED80, 0x36750500, - 0x36741C80, 0x36733400, 0x36724B80, - 0x36716300, 0x36707A80, 0x366F9200, - 0x366EA980, 0x366DC100, 0x366CD880, - 0x366BF000, 0x366B0780, 0x366A1F00, - 0x36693680, 0x36684E00, 0x36676580, - 0x36667D00, 0x36659480, 0x3664AC00, - 0x3663C380, 0x3662DB00, 0x3661F280, - 0x36610A00, 0x36602180, 0x365F3900, - 0x365E5080, 0x365D6800, 0x365C7F80, - 0x365B9700, 0x365AAE80, 0x3659C600, - 0x3658DD80, 0x3657F500, 0x36570C80, - 0x36562400, 0x36553B80, 0x36545300, - 0x36536A80, 0x36528200, 0x36519980, - 0x3650B100, 0x364FC880, 0x364EE000, - 0x364DF780, 0x364D0F00, 0x364C2680, - 0x364B3E00, 0x364A5580, 0x36496D00, - 0x36488480, 0x36479C00, 0x3646B380, - 0x3645CB00, 0x3644E280, 0x3643FA00, - 0x36431180, 0x36422900, 0x36414080, - 0x36405800, 0x363F6F80, 0x363E8700, - 0x363D9E80, 0x363CB600, 0x363BCD80, - 0x363AE500, 0x3639FC80, 0x36391400, - 0x36382B80, 0x36374300, 0x36365A80, - 0x36357200, 0x36348980, 0x3633A100, - 0x3632B880, 0x3631D000, 0x3630E780, - 0x362FFF00, 0x362F1680, 0x362E2E00, - 0x362D4580, 0x362C5D00, 0x362B7480, - 0x362A8C00, 0x3629A380, 0x3628BB00, - 0x3627D280, 0x3626EA00, 0x36260180, - 0x36251900, 0x36243080, 0x36234800, - 0x36225F80, 0x36217700, 0x36208E80, - 0x361FA600, 0x361EBD80, 0x361DD500, - 0x361CEC80, 0x361C0400, 0x361B1B80, - 0x361A3300, 0x36194A80, 0x36186200, - 0x36177980, 0x36169100, 0x3615A880, - 0x3614C000, 0x3613D780, 0x3612EF00, - 0x36120680, 0x36111E00, 0x36103580, - 0x360F4D00, 0x360E6480, 0x360D7C00, - 0x360C9380, 0x360BAB00, 0x360AC280, - 0x3609DA00, 0x3608F180, 0x36080900, - 0x36072080, 0x36063800, 0x36054F80, - 0x36046700, 0x36037E80, 0x36029600, - 0x3601AD80, 0x3600C500, 0x35FFDC80, - 0x35FEF400, 0x35FE0B80, 0x35FD2300, - 0x35FC3A80, 0x35FB5200, 0x35FA6980, - 0x35F98100, 0x35F89880, 0x35F7B000, - 0x35F6C780, 0x35F5DF00, 0x35F4F680, - 0x35F40E00, 0x35F32580, 0x35F23D00, - 0x35F15480, 0x35F06C00, 0x35EF8380, - 0x35EE9B00, 0x35EDB280, 0x35ECCA00, - 0x35EBE180, 0x35EAF900, 0x35EA1080, - 0x35E92800, 0x35E83F80, 0x35E75700, - 0x35E66E80, 0x35E58600, 0x35E49D80, - 0x35E3B500, 0x35E2CC80, 0x35E1E400, - 0x35E0FB80, 0x35E01300, 0x35DF2A80, - 0x35DE4200, 0x35DD5980, 0x35DC7100, - 0x35DB8880, 0x35DAA000, 0x35D9B780, - 0x35D8CF00, 0x35D7E680, 0x35D6FE00, - 0x35D61580, 0x35D52D00, 0x35D44480, - 0x35D35C00, 0x35D27380, 0x35D18B00, - 0x35D0A280, 0x35CFBA00, 0x35CED180, - 0x35CDE900, 0x35CD0080, 0x35CC1800, - 0x35CB2F80, 0x35CA4700, 0x35C95E80, - 0x35C87600, 0x35C78D80, 0x35C6A500, - 0x35C5BC80, 0x35C4D400, 0x35C3EB80, - 0x35C30300, 0x35C21A80, 0x35C13200, - 0x35C04980, 0x35BF6100, 0x35BE7880, - 0x35BD9000, 0x35BCA780, 0x35BBBF00, - 0x35BAD680, 0x35B9EE00, 0x35B90580, - 0x35B81D00, 0x35B73480, 0x35B64C00, - 0x35B56380, 0x35B47B00, 0x35B39280, - 0x35B2AA00, 0x35B1C180, 0x35B0D900, - 0x35AFF080, 0x35AF0800, 0x35AE1F80, - 0x35AD3700, 0x35AC4E80, 0x35AB6600, - 0x35AA7D80, 0x35A99500, 0x35A8AC80, - 0x35A7C400, 0x35A6DB80, 0x35A5F300, - 0x35A50A80, 0x35A42200, 0x35A33980, - 0x35A25100, 0x35A16880, 0x35A08000, - 0x359F9780, 0x359EAF00, 0x359DC680, - 0x359CDE00, 0x359BF580, 0x359B0D00, - 0x359A2480, 0x35993C00, 0x35985380, - 0x35976B00, 0x35968280, 0x35959A00, - 0x3594B180, 0x3593C900, 0x3592E080, - 0x3591F800, 0x35910F80, 0x35902700, - 0x358F3E80, 0x358E5600, 0x358D6D80, - 0x358C8500, 0x358B9C80, 0x358AB400, - 0x3589CB80, 0x3588E300, 0x3587FA80, - 0x35871200, 0x35862980, 0x35854100, - 0x35845880, 0x35837000, 0x35828780, - 0x35819F00, 0x3580B680, 0x357FCE00, - 0x357EE580, 0x357DFD00, 0x357D1480, - 0x357C2C00, 0x357B4380, 0x357A5B00, - 0x35797280, 0x35788A00, 0x3577A180, - 0x3576B900, 0x3575D080, 0x3574E800, - 0x3573FF80, 0x35731700, 0x35722E80, - 0x35714600, 0x35705D80, 0x356F7500, - 0x356E8C80, 0x356DA400, 0x356CBB80, - 0x356BD300, 0x356AEA80, 0x356A0200, - 0x35691980, 0x35683100, 0x35674880, - 0x35666000, 0x35657780, 0x35648F00, - 0x3563A680, 0x3562BE00, 0x3561D580, - 0x3560ED00, 0x35600480, 0x355F1C00, - 0x355E3380, 0x355D4B00, 0x355C6280, - 0x355B7A00, 0x355A9180, 0x3559A900, - 0x3558C080, 0x3557D800, 0x3556EF80, - 0x35560700, 0x35551E80, 0x35543600, - 0x35534D80, 0x35526500, 0x35517C80, - 0x35509400, 0x354FAB80, 0x354EC300, - 0x354DDA80, 0x354CF200, 0x354C0980, - 0x354B2100, 0x354A3880, 0x35495000, - 0x35486780, 0x35477F00, 0x35469680, - 0x3545AE00, 0x3544C580, 0x3543DD00, - 0x3542F480, 0x35420C00, 0x35412380, - 0x35403B00, 0x353F5280, 0x353E6A00, - 0x353D8180, 0x353C9900, 0x353BB080, - 0x353AC800, 0x3539DF80, 0x3538F700, - 0x35380E80, 0x35372600, 0x35363D80, - 0x35355500, 0x35346C80, 0x35338400, - 0x35329B80, 0x3531B300, 0x3530CA80, - 0x352FE200, 0x352EF980, 0x352E1100, - 0x352D2880, 0x352C4000, 0x352B5780, - 0x352A6F00, 0x35298680, 0x35289E00, - 0x3527B580, 0x3526CD00, 0x3525E480, - 0x3524FC00, 0x35241380, 0x35232B00, - 0x35224280, 0x35215A00, 0x35207180, - 0x351F8900, 0x351EA080, 0x351DB800, - 0x351CCF80, 0x351BE700, 0x351AFE80, - 0x351A1600, 0x35192D80, 0x35184500, - 0x35175C80, 0x35167400, 0x35158B80, - 0x3514A300, 0x3513BA80, 0x3512D200, - 0x3511E980, 0x35110100, 0x35101880, - 0x350F3000, 0x350E4780, 0x350D5F00, - 0x350C7680, 0x350B8E00, 0x350AA580, - 0x3509BD00, 0x3508D480, 0x3507EC00, - 0x35070380, 0x35061B00, 0x35053280, - 0x35044A00, 0x35036180, 0x35027900, - 0x35019080, 0x3500A800, 0x34FFBF80, - 0x34FED700, 0x34FDEE80, 0x34FD0600, - 0x34FC1D80, 0x34FB3500, 0x34FA4C80, - 0x34F96400, 0x34F87B80, 0x34F79300, - 0x34F6AA80, 0x34F5C200, 0x34F4D980, - 0x34F3F100, 0x34F30880, 0x34F22000, - 0x34F13780, 0x34F04F00, 0x34EF6680, - 0x34EE7E00, 0x34ED9580, 0x34ECAD00, - 0x34EBC480, 0x34EADC00, 0x34E9F380, - 0x34E90B00, 0x34E82280, 0x34E73A00, - 0x34E65180, 0x34E56900, 0x34E48080, - 0x34E39800, 0x34E2AF80, 0x34E1C700, - 0x34E0DE80, 0x34DFF600, 0x34DF0D80, - 0x34DE2500, 0x34DD3C80, 0x34DC5400, - 0x34DB6B80, 0x34DA8300, 0x34D99A80, - 0x34D8B200, 0x34D7C980, 0x34D6E100, - 0x34D5F880, 0x34D51000, 0x34D42780, - 0x34D33F00, 0x34D25680, 0x34D16E00, - 0x34D08580, 0x34CF9D00, 0x34CEB480, - 0x34CDCC00, 0x34CCE380, 0x34CBFB00, - 0x34CB1280, 0x34CA2A00, 0x34C94180, - 0x34C85900, 0x34C77080, 0x34C68800, - 0x34C59F80, 0x34C4B700, 0x34C3CE80, - 0x34C2E600, 0x34C1FD80, 0x34C11500, - 0x34C02C80, 0x34BF4400, 0x34BE5B80, - 0x34BD7300, 0x34BC8A80, 0x34BBA200, - 0x34BAB980, 0x34B9D100, 0x34B8E880, - 0x34B80000, 0x34B726C0, 0x34B64D80, - 0x34B57440, 0x34B49B00, 0x34B3C1C0, - 0x34B2E880, 0x34B20F40, 0x34B13600, - 0x34B05CC0, 0x34AF8380, 0x34AEAA40, - 0x34ADD100, 0x34ACF7C0, 0x34AC1E80, - 0x34AB4540, 0x34AA6C00, 0x34A992C0, - 0x34A8B980, 0x34A7E040, 0x34A70700, - 0x34A62DC0, 0x34A55480, 0x34A47B40, - 0x34A3A200, 0x34A2C8C0, 0x34A1EF80, - 0x34A11640, 0x34A03D00, 0x349F63C0, - 0x349E8A80, 0x349DB140, 0x349CD800, - 0x349BFEC0, 0x349B2580, 0x349A4C40, - 0x34997300, 0x349899C0, 0x3497C080, - 0x3496E740, 0x34960E00, 0x349534C0, - 0x34945B80, 0x34938240, 0x3492A900, - 0x3491CFC0, 0x3490F680, 0x34901D40, - 0x348F4400, 0x348E6AC0, 0x348D9180, - 0x348CB840, 0x348BDF00, 0x348B05C0, - 0x348A2C80, 0x34895340, 0x34887A00, - 0x3487A0C0, 0x3486C780, 0x3485EE40, - 0x34851500, 0x34843BC0, 0x34836280, - 0x34828940, 0x3481B000, 0x3480D6C0, - 0x347FFD80, 0x347F2440, 0x347E4B00, - 0x347D71C0, 0x347C9880, 0x347BBF40, - 0x347AE600, 0x347A0CC0, 0x34793380, - 0x34785A40, 0x34778100, 0x3476A7C0, - 0x3475CE80, 0x3474F540, 0x34741C00, - 0x347342C0, 0x34726980, 0x34719040, - 0x3470B700, 0x346FDDC0, 0x346F0480, - 0x346E2B40, 0x346D5200, 0x346C78C0, - 0x346B9F80, 0x346AC640, 0x3469ED00, - 0x346913C0, 0x34683A80, 0x34676140, - 0x34668800, 0x3465AEC0, 0x3464D580, - 0x3463FC40, 0x34632300, 0x346249C0, - 0x34617080, 0x34609740, 0x345FBE00, - 0x345EE4C0, 0x345E0B80, 0x345D3240, - 0x345C5900, 0x345B7FC0, 0x345AA680, - 0x3459CD40, 0x3458F400, 0x34581AC0, - 0x34574180, 0x34566840, 0x34558F00, - 0x3454B5C0, 0x3453DC80, 0x34530340, - 0x34522A00, 0x345150C0, 0x34507780, - 0x344F9E40, 0x344EC500, 0x344DEBC0, - 0x344D1280, 0x344C3940, 0x344B6000, - 0x344A86C0, 0x3449AD80, 0x3448D440, - 0x3447FB00, 0x344721C0, 0x34464880, - 0x34456F40, 0x34449600, 0x3443BCC0, - 0x3442E380, 0x34420A40, 0x34413100, - 0x344057C0, 0x343F7E80, 0x343EA540, - 0x343DCC00, 0x343CF2C0, 0x343C1980, - 0x343B4040, 0x343A6700, 0x34398DC0, - 0x3438B480, 0x3437DB40, 0x34370200, - 0x343628C0, 0x34354F80, 0x34347640, - 0x34339D00, 0x3432C3C0, 0x3431EA80, - 0x34311140, 0x34303800, 0x342F5EC0, - 0x342E8580, 0x342DAC40, 0x342CD300, - 0x342BF9C0, 0x342B2080, 0x342A4740, - 0x34296E00, 0x342894C0, 0x3427BB80, - 0x3426E240, 0x34260900, 0x34252FC0, - 0x34245680, 0x34237D40, 0x3422A400, - 0x3421CAC0, 0x3420F180, 0x34201840, - 0x341F3F00, 0x341E65C0, 0x341D8C80, - 0x341CB340, 0x341BDA00, 0x341B00C0, - 0x341A2780, 0x34194E40, 0x34187500, - 0x34179BC0, 0x3416C280, 0x3415E940, - 0x34151000, 0x341436C0, 0x34135D80, - 0x34128440, 0x3411AB00, 0x3410D1C0, - 0x340FF880, 0x340F1F40, 0x340E4600, - 0x340D6CC0, 0x340C9380, 0x340BBA40, - 0x340AE100, 0x340A07C0, 0x34092E80, - 0x34085540, 0x34077C00, 0x3406A2C0, - 0x3405C980, 0x3404F040, 0x34041700, - 0x34033DC0, 0x34026480, 0x34018B40, - 0x3400B200, 0x33FFD8C0, 0x33FEFF80, - 0x33FE2640, 0x33FD4D00, 0x33FC73C0, - 0x33FB9A80, 0x33FAC140, 0x33F9E800, - 0x33F90EC0, 0x33F83580, 0x33F75C40, - 0x33F68300, 0x33F5A9C0, 0x33F4D080, - 0x33F3F740, 0x33F31E00, 0x33F244C0, - 0x33F16B80, 0x33F09240, 0x33EFB900, - 0x33EEDFC0, 0x33EE0680, 0x33ED2D40, - 0x33EC5400, 0x33EB7AC0, 0x33EAA180, - 0x33E9C840, 0x33E8EF00, 0x33E815C0, - 0x33E73C80, 0x33E66340, 0x33E58A00, - 0x33E4B0C0, 0x33E3D780, 0x33E2FE40, - 0x33E22500, 0x33E14BC0, 0x33E07280, - 0x33DF9940, 0x33DEC000, 0x33DDE6C0, - 0x33DD0D80, 0x33DC3440, 0x33DB5B00, - 0x33DA81C0, 0x33D9A880, 0x33D8CF40, - 0x33D7F600, 0x33D71CC0, 0x33D64380, - 0x33D56A40, 0x33D49100, 0x33D3B7C0, - 0x33D2DE80, 0x33D20540, 0x33D12C00, - 0x33D052C0, 0x33CF7980, 0x33CEA040, - 0x33CDC700, 0x33CCEDC0, 0x33CC1480, - 0x33CB3B40, 0x33CA6200, 0x33C988C0, - 0x33C8AF80, 0x33C7D640, 0x33C6FD00, - 0x33C623C0, 0x33C54A80, 0x33C47140, - 0x33C39800, 0x33C2BEC0, 0x33C1E580, - 0x33C10C40, 0x33C03300, 0x33BF59C0, - 0x33BE8080, 0x33BDA740, 0x33BCCE00, - 0x33BBF4C0, 0x33BB1B80, 0x33BA4240, - 0x33B96900, 0x33B88FC0, 0x33B7B680, - 0x33B6DD40, 0x33B60400, 0x33B52AC0, - 0x33B45180, 0x33B37840, 0x33B29F00, - 0x33B1C5C0, 0x33B0EC80, 0x33B01340, - 0x33AF3A00, 0x33AE60C0, 0x33AD8780, - 0x33ACAE40, 0x33ABD500, 0x33AAFBC0, - 0x33AA2280, 0x33A94940, 0x33A87000, - 0x33A796C0, 0x33A6BD80, 0x33A5E440, - 0x33A50B00, 0x33A431C0, 0x33A35880, - 0x33A27F40, 0x33A1A600, 0x33A0CCC0, - 0x339FF380, 0x339F1A40, 0x339E4100, - 0x339D67C0, 0x339C8E80, 0x339BB540, - 0x339ADC00, 0x339A02C0, 0x33992980, - 0x33985040, 0x33977700, 0x33969DC0, - 0x3395C480, 0x3394EB40, 0x33941200, - 0x339338C0, 0x33925F80, 0x33918640, - 0x3390AD00, 0x338FD3C0, 0x338EFA80, - 0x338E2140, 0x338D4800, 0x338C6EC0, - 0x338B9580, 0x338ABC40, 0x3389E300, - 0x338909C0, 0x33883080, 0x33875740, - 0x33867E00, 0x3385A4C0, 0x3384CB80, - 0x3383F240, 0x33831900, 0x33823FC0, - 0x33816680, 0x33808D40, 0x337FB400, - 0x337EDAC0, 0x337E0180, 0x337D2840, - 0x337C4F00, 0x337B75C0, 0x337A9C80, - 0x3379C340, 0x3378EA00, 0x337810C0, - 0x33773780, 0x33765E40, 0x33758500, - 0x3374ABC0, 0x3373D280, 0x3372F940, - 0x33722000, 0x337146C0, 0x33706D80, - 0x336F9440, 0x336EBB00, 0x336DE1C0, - 0x336D0880, 0x336C2F40, 0x336B5600, - 0x336A7CC0, 0x3369A380, 0x3368CA40, - 0x3367F100, 0x336717C0, 0x33663E80, - 0x33656540, 0x33648C00, 0x3363B2C0, - 0x3362D980, 0x33620040, 0x33612700, - 0x33604DC0, 0x335F7480, 0x335E9B40, - 0x335DC200, 0x335CE8C0, 0x335C0F80, - 0x335B3640, 0x335A5D00, 0x335983C0, - 0x3358AA80, 0x3357D140, 0x3356F800, - 0x33561EC0, 0x33554580, 0x33546C40, - 0x33539300, 0x3352B9C0, 0x3351E080, - 0x33510740, 0x33502E00, 0x334F54C0, - 0x334E7B80, 0x334DA240, 0x334CC900, - 0x334BEFC0, 0x334B1680, 0x334A3D40, - 0x33496400, 0x33488AC0, 0x3347B180, - 0x3346D840, 0x3345FF00, 0x334525C0, - 0x33444C80, 0x33437340, 0x33429A00, - 0x3341C0C0, 0x3340E780, 0x33400E40, - 0x333F3500, 0x333E5BC0, 0x333D8280, - 0x333CA940, 0x333BD000, 0x333AF6C0, - 0x333A1D80, 0x33394440, 0x33386B00, - 0x333791C0, 0x3336B880, 0x3335DF40, - 0x33350600, 0x33342CC0, 0x33335380, - 0x33327A40, 0x3331A100, 0x3330C7C0, - 0x332FEE80, 0x332F1540, 0x332E3C00, - 0x332D62C0, 0x332C8980, 0x332BB040, - 0x332AD700, 0x3329FDC0, 0x33292480, - 0x33284B40, 0x33277200, 0x332698C0, - 0x3325BF80, 0x3324E640, 0x33240D00, - 0x332333C0, 0x33225A80, 0x33218140, - 0x3320A800, 0x331FCEC0, 0x331EF580, - 0x331E1C40, 0x331D4300, 0x331C69C0, - 0x331B9080, 0x331AB740, 0x3319DE00, - 0x331904C0, 0x33182B80, 0x33175240, - 0x33167900, 0x33159FC0, 0x3314C680, - 0x3313ED40, 0x33131400, 0x33123AC0, - 0x33116180, 0x33108840, 0x330FAF00, - 0x330ED5C0, 0x330DFC80, 0x330D2340, - 0x330C4A00, 0x330B70C0, 0x330A9780, - 0x3309BE40, 0x3308E500, 0x33080BC0, - 0x33073280, 0x33065940, 0x33058000, - 0x3304A6C0, 0x3303CD80, 0x3302F440, - 0x33021B00, 0x330141C0, 0x33006880, - 0x32FF8F40, 0x32FEB600, 0x32FDDCC0, - 0x32FD0380, 0x32FC2A40, 0x32FB5100, - 0x32FA77C0, 0x32F99E80, 0x32F8C540, - 0x32F7EC00, 0x32F712C0, 0x32F63980, - 0x32F56040, 0x32F48700, 0x32F3ADC0, - 0x32F2D480, 0x32F1FB40, 0x32F12200, - 0x32F048C0, 0x32EF6F80, 0x32EE9640, - 0x32EDBD00, 0x32ECE3C0, 0x32EC0A80, - 0x32EB3140, 0x32EA5800, 0x32E97EC0, - 0x32E8A580, 0x32E7CC40, 0x32E6F300, - 0x32E619C0, 0x32E54080, 0x32E46740, - 0x32E38E00, 0x32E2B4C0, 0x32E1DB80, - 0x32E10240, 0x32E02900, 0x32DF4FC0, - 0x32DE7680, 0x32DD9D40, 0x32DCC400, - 0x32DBEAC0, 0x32DB1180, 0x32DA3840, - 0x32D95F00, 0x32D885C0, 0x32D7AC80, - 0x32D6D340, 0x32D5FA00, 0x32D520C0, - 0x32D44780, 0x32D36E40, 0x32D29500, - 0x32D1BBC0, 0x32D0E280, 0x32D00940, - 0x32CF3000, 0x32CE56C0, 0x32CD7D80, - 0x32CCA440, 0x32CBCB00, 0x32CAF1C0, - 0x32CA1880, 0x32C93F40, 0x32C86600, - 0x32C78CC0, 0x32C6B380, 0x32C5DA40, - 0x32C50100, 0x32C427C0, 0x32C34E80, - 0x32C27540, 0x32C19C00, 0x32C0C2C0, - 0x32BFE980, 0x32BF1040, 0x32BE3700, - 0x32BD5DC0, 0x32BC8480, 0x32BBAB40, - 0x32BAD200, 0x32B9F8C0, 0x32B91F80, - 0x32B84640, 0x32B76D00, 0x32B693C0, - 0x32B5BA80, 0x32B4E140, 0x32B40800, - 0x32B32EC0, 0x32B25580, 0x32B17C40, - 0x32B0A300, 0x32AFC9C0, 0x32AEF080, - 0x32AE1740, 0x32AD3E00, 0x32AC64C0, - 0x32AB8B80, 0x32AAB240, 0x32A9D900, - 0x32A8FFC0, 0x32A82680, 0x32A74D40, - 0x32A67400, 0x32A59AC0, 0x32A4C180, - 0x32A3E840, 0x32A30F00, 0x32A235C0, - 0x32A15C80, 0x32A08340, 0x329FAA00, - 0x329ED0C0, 0x329DF780, 0x329D1E40, - 0x329C4500, 0x329B6BC0, 0x329A9280, - 0x3299B940, 0x3298E000, 0x329806C0, - 0x32972D80, 0x32965440, 0x32957B00, - 0x3294A1C0, 0x3293C880, 0x3292EF40, - 0x32921600, 0x32913CC0, 0x32906380, - 0x328F8A40, 0x328EB100, 0x328DD7C0, - 0x328CFE80, 0x328C2540, 0x328B4C00, - 0x328A72C0, 0x32899980, 0x3288C040, - 0x3287E700, 0x32870DC0, 0x32863480, - 0x32855B40, 0x32848200, 0x3283A8C0, - 0x3282CF80, 0x3281F640, 0x32811D00, - 0x328043C0, 0x327F6A80, 0x327E9140, - 0x327DB800, 0x327CDEC0, 0x327C0580, - 0x327B2C40, 0x327A5300, 0x327979C0, - 0x3278A080, 0x3277C740, 0x3276EE00, - 0x327614C0, 0x32753B80, 0x32746240, - 0x32738900, 0x3272AFC0, 0x3271D680, - 0x3270FD40, 0x32702400, 0x326F4AC0, - 0x326E7180, 0x326D9840, 0x326CBF00, - 0x326BE5C0, 0x326B0C80, 0x326A3340, - 0x32695A00, 0x326880C0, 0x3267A780, - 0x3266CE40, 0x3265F500, 0x32651BC0, - 0x32644280, 0x32636940, 0x32629000, - 0x3261B6C0, 0x3260DD80, 0x32600440, - 0x325F2B00, 0x325E51C0, 0x325D7880, - 0x325C9F40, 0x325BC600, 0x325AECC0, - 0x325A1380, 0x32593A40, 0x32586100, - 0x325787C0, 0x3256AE80, 0x3255D540, - 0x3254FC00, 0x325422C0, 0x32534980, - 0x32527040, 0x32519700, 0x3250BDC0, - 0x324FE480, 0x324F0B40, 0x324E3200, - 0x324D58C0, 0x324C7F80, 0x324BA640, - 0x324ACD00, 0x3249F3C0, 0x32491A80, - 0x32484140, 0x32476800, 0x32468EC0, - 0x3245B580, 0x3244DC40, 0x32440300, - 0x324329C0, 0x32425080, 0x32417740, - 0x32409E00, 0x323FC4C0, 0x323EEB80, - 0x323E1240, 0x323D3900, 0x323C5FC0, - 0x323B8680, 0x323AAD40, 0x3239D400, - 0x3238FAC0, 0x32382180, 0x32374840, - 0x32366F00, 0x323595C0, 0x3234BC80, - 0x3233E340, 0x32330A00, 0x323230C0, - 0x32315780, 0x32307E40, 0x322FA500, - 0x322ECBC0, 0x322DF280, 0x322D1940, - 0x322C4000, 0x322B66C0, 0x322A8D80, - 0x3229B440, 0x3228DB00, 0x322801C0, - 0x32272880, 0x32264F40, 0x32257600, - 0x32249CC0, 0x3223C380, 0x3222EA40, - 0x32221100, 0x322137C0, 0x32205E80, - 0x321F8540, 0x321EAC00, 0x321DD2C0, - 0x321CF980, 0x321C2040, 0x321B4700, - 0x321A6DC0, 0x32199480, 0x3218BB40, - 0x3217E200, 0x321708C0, 0x32162F80, - 0x32155640, 0x32147D00, 0x3213A3C0, - 0x3212CA80, 0x3211F140, 0x32111800, - 0x32103EC0, 0x320F6580, 0x320E8C40, - 0x320DB300, 0x320CD9C0, 0x320C0080, - 0x320B2740, 0x320A4E00, 0x320974C0, - 0x32089B80, 0x3207C240, 0x3206E900, - 0x32060FC0, 0x32053680, 0x32045D40, - 0x32038400, 0x3202AAC0, 0x3201D180, - 0x3200F840, 0x32001F00, 0x31FF45C0, - 0x31FE6C80, 0x31FD9340, 0x31FCBA00, - 0x31FBE0C0, 0x31FB0780, 0x31FA2E40, - 0x31F95500, 0x31F87BC0, 0x31F7A280, - 0x31F6C940, 0x31F5F000, 0x31F516C0, - 0x31F43D80, 0x31F36440, 0x31F28B00, - 0x31F1B1C0, 0x31F0D880, 0x31EFFF40, - 0x31EF2600, 0x31EE4CC0, 0x31ED7380, - 0x31EC9A40, 0x31EBC100, 0x31EAE7C0, - 0x31EA0E80, 0x31E93540, 0x31E85C00, - 0x31E782C0, 0x31E6A980, 0x31E5D040, - 0x31E4F700, 0x31E41DC0, 0x31E34480, - 0x31E26B40, 0x31E19200, 0x31E0B8C0, - 0x31DFDF80, 0x31DF0640, 0x31DE2D00, - 0x31DD53C0, 0x31DC7A80, 0x31DBA140, - 0x31DAC800, 0x31D9EEC0, 0x31D91580, - 0x31D83C40, 0x31D76300, 0x31D689C0, - 0x31D5B080, 0x31D4D740, 0x31D3FE00, - 0x31D324C0, 0x31D24B80, 0x31D17240, - 0x31D09900, 0x31CFBFC0, 0x31CEE680, - 0x31CE0D40, 0x31CD3400, 0x31CC5AC0, - 0x31CB8180, 0x31CAA840, 0x31C9CF00, - 0x31C8F5C0, 0x31C81C80, 0x31C74340, - 0x31C66A00, 0x31C590C0, 0x31C4B780, - 0x31C3DE40, 0x31C30500, 0x31C22BC0, - 0x31C15280, 0x31C07940, 0x31BFA000, - 0x31BEC6C0, 0x31BDED80, 0x31BD1440, - 0x31BC3B00, 0x31BB61C0, 0x31BA8880, - 0x31B9AF40, 0x31B8D600, 0x31B7FCC0, - 0x31B72380, 0x31B64A40, 0x31B57100, - 0x31B497C0, 0x31B3BE80, 0x31B2E540, - 0x31B20C00, 0x31B132C0, 0x31B05980, - 0x31AF8040, 0x31AEA700, 0x31ADCDC0, - 0x31ACF480, 0x31AC1B40, 0x31AB4200, - 0x31AA68C0, 0x31A98F80, 0x31A8B640, - 0x31A7DD00, 0x31A703C0, 0x31A62A80, - 0x31A55140, 0x31A47800, 0x31A39EC0, - 0x31A2C580, 0x31A1EC40, 0x31A11300, - 0x31A039C0, 0x319F6080, 0x319E8740, - 0x319DAE00, 0x319CD4C0, 0x319BFB80, - 0x319B2240, 0x319A4900, 0x31996FC0, - 0x31989680, 0x3197BD40, 0x3196E400, - 0x31960AC0, 0x31953180, 0x31945840, - 0x31937F00, 0x3192A5C0, 0x3191CC80, - 0x3190F340, 0x31901A00, 0x318F40C0, - 0x318E6780, 0x318D8E40, 0x318CB500, - 0x318BDBC0, 0x318B0280, 0x318A2940, - 0x31895000, 0x318876C0, 0x31879D80, - 0x3186C440, 0x3185EB00, 0x318511C0, - 0x31843880, 0x31835F40, 0x31828600, - 0x3181ACC0, 0x3180D380, 0x317FFA40, - 0x317F2100, 0x317E47C0, 0x317D6E80, - 0x317C9540, 0x317BBC00, 0x317AE2C0, - 0x317A0980, 0x31793040, 0x31785700, - 0x31777DC0, 0x3176A480, 0x3175CB40, - 0x3174F200, 0x317418C0, 0x31733F80, - 0x31726640, 0x31718D00, 0x3170B3C0, - 0x316FDA80, 0x316F0140, 0x316E2800, - 0x316D4EC0, 0x316C7580, 0x316B9C40, - 0x316AC300, 0x3169E9C0, 0x31691080, - 0x31683740, 0x31675E00, 0x316684C0, - 0x3165AB80, 0x3164D240, 0x3163F900, - 0x31631FC0, 0x31624680, 0x31616D40, - 0x31609400, 0x315FBAC0, 0x315EE180, - 0x315E0840, 0x315D2F00, 0x315C55C0, - 0x315B7C80, 0x315AA340, 0x3159CA00, - 0x3158F0C0, 0x31581780, 0x31573E40, - 0x31566500, 0x31558BC0, 0x3154B280, - 0x3153D940, 0x31530000, 0x315226C0, - 0x31514D80, 0x31507440, 0x314F9B00, - 0x314EC1C0, 0x314DE880, 0x314D0F40, - 0x314C3600, 0x314B5CC0, 0x314A8380, - 0x3149AA40, 0x3148D100, 0x3147F7C0, - 0x31471E80, 0x31464540, 0x31456C00, - 0x314492C0, 0x3143B980, 0x3142E040, - 0x31420700, 0x31412DC0, 0x31405480, - 0x313F7B40, 0x313EA200, 0x313DC8C0, - 0x313CEF80, 0x313C1640, 0x313B3D00, - 0x313A63C0, 0x31398A80, 0x3138B140, - 0x3137D800, 0x3136FEC0, 0x31362580, - 0x31354C40, 0x31347300, 0x313399C0, - 0x3132C080, 0x3131E740, 0x31310E00, - 0x313034C0, 0x312F5B80, 0x312E8240, - 0x312DA900, 0x312CCFC0, 0x312BF680, - 0x312B1D40, 0x312A4400, 0x31296AC0, - 0x31289180, 0x3127B840, 0x3126DF00, - 0x312605C0, 0x31252C80, 0x31245340, - 0x31237A00, 0x3122A0C0, 0x3121C780, - 0x3120EE40, 0x31201500, 0x311F3BC0, - 0x311E6280, 0x311D8940, 0x311CB000, - 0x311BD6C0, 0x311AFD80, 0x311A2440, - 0x31194B00, 0x311871C0, 0x31179880, - 0x3116BF40, 0x3115E600, 0x31150CC0, - 0x31143380, 0x31135A40, 0x31128100, - 0x3111A7C0, 0x3110CE80, 0x310FF540, - 0x310F1C00, 0x310E42C0, 0x310D6980, - 0x310C9040, 0x310BB700, 0x310ADDC0, - 0x310A0480, 0x31092B40, 0x31085200, - 0x310778C0, 0x31069F80, 0x3105C640, - 0x3104ED00, 0x310413C0, 0x31033A80, - 0x31026140, 0x31018800, 0x3100AEC0, - 0x30FFD580, 0x30FEFC40, 0x30FE2300, - 0x30FD49C0, 0x30FC7080, 0x30FB9740, - 0x30FABE00, 0x30F9E4C0, 0x30F90B80, - 0x30F83240, 0x30F75900, 0x30F67FC0, - 0x30F5A680, 0x30F4CD40, 0x30F3F400, - 0x30F31AC0, 0x30F24180, 0x30F16840, - 0x30F08F00, 0x30EFB5C0, 0x30EEDC80, - 0x30EE0340, 0x30ED2A00, 0x30EC50C0, - 0x30EB7780, 0x30EA9E40, 0x30E9C500, - 0x30E8EBC0, 0x30E81280, 0x30E73940, - 0x30E66000, 0x30E586C0, 0x30E4AD80, - 0x30E3D440, 0x30E2FB00, 0x30E221C0, - 0x30E14880, 0x30E06F40, 0x30DF9600, - 0x30DEBCC0, 0x30DDE380, 0x30DD0A40, - 0x30DC3100, 0x30DB57C0, 0x30DA7E80, - 0x30D9A540, 0x30D8CC00, 0x30D7F2C0, - 0x30D71980, 0x30D64040, 0x30D56700, - 0x30D48DC0, 0x30D3B480, 0x30D2DB40, - 0x30D20200, 0x30D128C0, 0x30D04F80, - 0x30CF7640, 0x30CE9D00, 0x30CDC3C0, - 0x30CCEA80, 0x30CC1140, 0x30CB3800, - 0x30CA5EC0, 0x30C98580, 0x30C8AC40, - 0x30C7D300, 0x30C6F9C0, 0x30C62080, - 0x30C54740, 0x30C46E00, 0x30C394C0, - 0x30C2BB80, 0x30C1E240, 0x30C10900, - 0x30C02FC0, 0x30BF5680, 0x30BE7D40, - 0x30BDA400, 0x30BCCAC0, 0x30BBF180, - 0x30BB1840, 0x30BA3F00, 0x30B965C0, - 0x30B88C80, 0x30B7B340, 0x30B6DA00, - 0x30B600C0, 0x30B52780, 0x30B44E40, - 0x30B37500, 0x30B29BC0, 0x30B1C280, - 0x30B0E940, 0x30B01000, 0x30AF36C0, - 0x30AE5D80, 0x30AD8440, 0x30ACAB00, - 0x30ABD1C0, 0x30AAF880, 0x30AA1F40, - 0x30A94600, 0x30A86CC0, 0x30A79380, - 0x30A6BA40, 0x30A5E100, 0x30A507C0, - 0x30A42E80, 0x30A35540, 0x30A27C00, - 0x30A1A2C0, 0x30A0C980, 0x309FF040, - 0x309F1700, 0x309E3DC0, 0x309D6480, - 0x309C8B40, 0x309BB200, 0x309AD8C0, - 0x3099FF80, 0x30992640, 0x30984D00, - 0x309773C0, 0x30969A80, 0x3095C140, - 0x3094E800, 0x30940EC0, 0x30933580, - 0x30925C40, 0x30918300, 0x3090A9C0, - 0x308FD080, 0x308EF740, 0x308E1E00, - 0x308D44C0, 0x308C6B80, 0x308B9240, - 0x308AB900, 0x3089DFC0, 0x30890680, - 0x30882D40, 0x30875400, 0x30867AC0, - 0x3085A180, 0x3084C840, 0x3083EF00, - 0x308315C0, 0x30823C80, 0x30816340, - 0x30808A00, 0x307FB0C0, 0x307ED780, - 0x307DFE40, 0x307D2500, 0x307C4BC0, - 0x307B7280, 0x307A9940, 0x3079C000, - 0x3078E6C0, 0x30780D80, 0x30773440, - 0x30765B00, 0x307581C0, 0x3074A880, - 0x3073CF40, 0x3072F600, 0x30721CC0, - 0x30714380, 0x30706A40, 0x306F9100, - 0x306EB7C0, 0x306DDE80, 0x306D0540, - 0x306C2C00, 0x306B52C0, 0x306A7980, - 0x3069A040, 0x3068C700, 0x3067EDC0, - 0x30671480, 0x30663B40, 0x30656200, - 0x306488C0, 0x3063AF80, 0x3062D640, - 0x3061FD00, 0x306123C0, 0x30604A80, - 0x305F7140, 0x305E9800, 0x305DBEC0, - 0x305CE580, 0x305C0C40, 0x305B3300, - 0x305A59C0, 0x30598080, 0x3058A740, - 0x3057CE00, 0x3056F4C0, 0x30561B80, - 0x30554240, 0x30546900, 0x30538FC0, - 0x3052B680, 0x3051DD40, 0x30510400, - 0x30502AC0, 0x304F5180, 0x304E7840, - 0x304D9F00, 0x304CC5C0, 0x304BEC80, - 0x304B1340, 0x304A3A00, 0x304960C0, - 0x30488780, 0x3047AE40, 0x3046D500, - 0x3045FBC0, 0x30452280, 0x30444940, - 0x30437000, 0x304296C0, 0x3041BD80, - 0x3040E440, 0x30400B00, 0x303F31C0, - 0x303E5880, 0x303D7F40, 0x303CA600, - 0x303BCCC0, 0x303AF380, 0x303A1A40, - 0x30394100, 0x303867C0, 0x30378E80, - 0x3036B540, 0x3035DC00, 0x303502C0, - 0x30342980, 0x30335040, 0x30327700, - 0x30319DC0, 0x3030C480, 0x302FEB40, - 0x302F1200, 0x302E38C0, 0x302D5F80, - 0x302C8640, 0x302BAD00, 0x302AD3C0, - 0x3029FA80, 0x30292140, 0x30284800, - 0x30276EC0, 0x30269580, 0x3025BC40, - 0x3024E300, 0x302409C0, 0x30233080, - 0x30225740, 0x30217E00, 0x3020A4C0, - 0x301FCB80, 0x301EF240, 0x301E1900, - 0x301D3FC0, 0x301C6680, 0x301B8D40, - 0x301AB400, 0x3019DAC0, 0x30190180, - 0x30182840, 0x30174F00, 0x301675C0, - 0x30159C80, 0x3014C340, 0x3013EA00, - 0x301310C0, 0x30123780, 0x30115E40, - 0x30108500, 0x300FABC0, 0x300ED280, - 0x300DF940, 0x300D2000, 0x300C46C0, - 0x300B6D80, 0x300A9440, 0x3009BB00, - 0x3008E1C0, 0x30080880, 0x30072F40, - 0x30065600, 0x30057CC0, 0x3004A380, - 0x3003CA40, 0x3002F100, 0x300217C0, - 0x30013E80, 0x30006540, 0x2FFF8C00, - 0x2FFEB2C0, 0x2FFDD980, 0x2FFD0040, - 0x2FFC2700, 0x2FFB4DC0, 0x2FFA7480, - 0x2FF99B40, 0x2FF8C200, 0x2FF7E8C0, - 0x2FF70F80, 0x2FF63640, 0x2FF55D00, - 0x2FF483C0, 0x2FF3AA80, 0x2FF2D140, - 0x2FF1F800, 0x2FF11EC0, 0x2FF04580, - 0x2FEF6C40, 0x2FEE9300, 0x2FEDB9C0, - 0x2FECE080, 0x2FEC0740, 0x2FEB2E00, - 0x2FEA54C0, 0x2FE97B80, 0x2FE8A240, - 0x2FE7C900, 0x2FE6EFC0, 0x2FE61680, - 0x2FE53D40, 0x2FE46400, 0x2FE38AC0, - 0x2FE2B180, 0x2FE1D840, 0x2FE0FF00, - 0x2FE025C0, 0x2FDF4C80, 0x2FDE7340, - 0x2FDD9A00, 0x2FDCC0C0, 0x2FDBE780, - 0x2FDB0E40, 0x2FDA3500, 0x2FD95BC0, - 0x2FD88280, 0x2FD7A940, 0x2FD6D000, - 0x2FD5F6C0, 0x2FD51D80, 0x2FD44440, - 0x2FD36B00, 0x2FD291C0, 0x2FD1B880, - 0x2FD0DF40, 0x2FD00600, 0x2FCF2CC0, - 0x2FCE5380, 0x2FCD7A40, 0x2FCCA100, - 0x2FCBC7C0, 0x2FCAEE80, 0x2FCA1540, - 0x2FC93C00, 0x2FC862C0, 0x2FC78980, - 0x2FC6B040, 0x2FC5D700, 0x2FC4FDC0, - 0x2FC42480, 0x2FC34B40, 0x2FC27200, - 0x2FC198C0, 0x2FC0BF80, 0x2FBFE640, - 0x2FBF0D00, 0x2FBE33C0, 0x2FBD5A80, - 0x2FBC8140, 0x2FBBA800, 0x2FBACEC0, - 0x2FB9F580, 0x2FB91C40, 0x2FB84300, - 0x2FB769C0, 0x2FB69080, 0x2FB5B740, - 0x2FB4DE00, 0x2FB404C0, 0x2FB32B80, - 0x2FB25240, 0x2FB17900, 0x2FB09FC0, - 0x2FAFC680, 0x2FAEED40, 0x2FAE1400, - 0x2FAD3AC0, 0x2FAC6180, 0x2FAB8840, - 0x2FAAAF00, 0x2FA9D5C0, 0x2FA8FC80, - 0x2FA82340, 0x2FA74A00, 0x2FA670C0, - 0x2FA59780, 0x2FA4BE40, 0x2FA3E500, - 0x2FA30BC0, 0x2FA23280, 0x2FA15940, - 0x2FA08000, 0x2F9FA6C0, 0x2F9ECD80, - 0x2F9DF440, 0x2F9D1B00, 0x2F9C41C0, - 0x2F9B6880, 0x2F9A8F40, 0x2F99B600, - 0x2F98DCC0, 0x2F980380, 0x2F972A40, - 0x2F965100, 0x2F9577C0, 0x2F949E80, - 0x2F93C540, 0x2F92EC00, 0x2F9212C0, - 0x2F913980, 0x2F906040, 0x2F8F8700, - 0x2F8EADC0, 0x2F8DD480, 0x2F8CFB40, - 0x2F8C2200, 0x2F8B48C0, 0x2F8A6F80, - 0x2F899640, 0x2F88BD00, 0x2F87E3C0, - 0x2F870A80, 0x2F863140, 0x2F855800, - 0x2F847EC0, 0x2F83A580, 0x2F82CC40, - 0x2F81F300, 0x2F8119C0, 0x2F804080, - 0x2F7F6740, 0x2F7E8E00, 0x2F7DB4C0, - 0x2F7CDB80, 0x2F7C0240, 0x2F7B2900, - 0x2F7A4FC0, 0x2F797680, 0x2F789D40, - 0x2F77C400, 0x2F76EAC0, 0x2F761180, - 0x2F753840, 0x2F745F00, 0x2F7385C0, - 0x2F72AC80, 0x2F71D340, 0x2F70FA00, - 0x2F7020C0, 0x2F6F4780, 0x2F6E6E40, - 0x2F6D9500, 0x2F6CBBC0, 0x2F6BE280, - 0x2F6B0940, 0x2F6A3000, 0x2F6956C0, - 0x2F687D80, 0x2F67A440, 0x2F66CB00, - 0x2F65F1C0, 0x2F651880, 0x2F643F40, - 0x2F636600, 0x2F628CC0, 0x2F61B380, - 0x2F60DA40, 0x2F600100, 0x2F5F27C0, - 0x2F5E4E80, 0x2F5D7540, 0x2F5C9C00, - 0x2F5BC2C0, 0x2F5AE980, 0x2F5A1040, - 0x2F593700, 0x2F585DC0, 0x2F578480, - 0x2F56AB40, 0x2F55D200, 0x2F54F8C0, - 0x2F541F80, 0x2F534640, 0x2F526D00, - 0x2F5193C0, 0x2F50BA80, 0x2F4FE140, - 0x2F4F0800, 0x2F4E2EC0, 0x2F4D5580, - 0x2F4C7C40, 0x2F4BA300, 0x2F4AC9C0, - 0x2F49F080, 0x2F491740, 0x2F483E00, - 0x2F4764C0, 0x2F468B80, 0x2F45B240, - 0x2F44D900, 0x2F43FFC0, 0x2F432680, - 0x2F424D40, 0x2F417400, 0x2F409AC0, - 0x2F3FC180, 0x2F3EE840, 0x2F3E0F00, - 0x2F3D35C0, 0x2F3C5C80, 0x2F3B8340, - 0x2F3AAA00, 0x2F39D0C0, 0x2F38F780, - 0x2F381E40, 0x2F374500, 0x2F366BC0, - 0x2F359280, 0x2F34B940, 0x2F33E000, - 0x2F3306C0, 0x2F322D80, 0x2F315440, - 0x2F307B00, 0x2F2FA1C0, 0x2F2EC880, - 0x2F2DEF40, 0x2F2D1600, 0x2F2C3CC0, - 0x2F2B6380, 0x2F2A8A40, 0x2F29B100, - 0x2F28D7C0, 0x2F27FE80, 0x2F272540, - 0x2F264C00, 0x2F2572C0, 0x2F249980, - 0x2F23C040, 0x2F22E700, 0x2F220DC0, - 0x2F213480, 0x2F205B40, 0x2F1F8200, - 0x2F1EA8C0, 0x2F1DCF80, 0x2F1CF640, - 0x2F1C1D00, 0x2F1B43C0, 0x2F1A6A80, - 0x2F199140, 0x2F18B800, 0x2F17DEC0, - 0x2F170580, 0x2F162C40, 0x2F155300, - 0x2F1479C0, 0x2F13A080, 0x2F12C740, - 0x2F11EE00, 0x2F1114C0, 0x2F103B80, - 0x2F0F6240, 0x2F0E8900, 0x2F0DAFC0, - 0x2F0CD680, 0x2F0BFD40, 0x2F0B2400, - 0x2F0A4AC0, 0x2F097180, 0x2F089840, - 0x2F07BF00, 0x2F06E5C0, 0x2F060C80, - 0x2F053340, 0x2F045A00, 0x2F0380C0, - 0x2F02A780, 0x2F01CE40, 0x2F00F500, - 0x2F001BC0, 0x2EFF4280, 0x2EFE6940, - 0x2EFD9000, 0x2EFCB6C0, 0x2EFBDD80, - 0x2EFB0440, 0x2EFA2B00, 0x2EF951C0, - 0x2EF87880, 0x2EF79F40, 0x2EF6C600, - 0x2EF5ECC0, 0x2EF51380, 0x2EF43A40, - 0x2EF36100, 0x2EF287C0, 0x2EF1AE80, - 0x2EF0D540, 0x2EEFFC00, 0x2EEF22C0, - 0x2EEE4980, 0x2EED7040, 0x2EEC9700, - 0x2EEBBDC0, 0x2EEAE480, 0x2EEA0B40, - 0x2EE93200, 0x2EE858C0, 0x2EE77F80, - 0x2EE6A640, 0x2EE5CD00, 0x2EE4F3C0, - 0x2EE41A80, 0x2EE34140, 0x2EE26800, - 0x2EE18EC0, 0x2EE0B580, 0x2EDFDC40, - 0x2EDF0300, 0x2EDE29C0, 0x2EDD5080, - 0x2EDC7740, 0x2EDB9E00, 0x2EDAC4C0, - 0x2ED9EB80, 0x2ED91240, 0x2ED83900, - 0x2ED75FC0, 0x2ED68680, 0x2ED5AD40, - 0x2ED4D400, 0x2ED3FAC0, 0x2ED32180, - 0x2ED24840, 0x2ED16F00, 0x2ED095C0, - 0x2ECFBC80, 0x2ECEE340, 0x2ECE0A00, - 0x2ECD30C0, 0x2ECC5780, 0x2ECB7E40, - 0x2ECAA500, 0x2EC9CBC0, 0x2EC8F280, - 0x2EC81940, 0x2EC74000, 0x2EC666C0, - 0x2EC58D80, 0x2EC4B440, 0x2EC3DB00, - 0x2EC301C0, 0x2EC22880, 0x2EC14F40, - 0x2EC07600, 0x2EBF9CC0, 0x2EBEC380, - 0x2EBDEA40, 0x2EBD1100, 0x2EBC37C0, - 0x2EBB5E80, 0x2EBA8540, 0x2EB9AC00, - 0x2EB8D2C0, 0x2EB7F980, 0x2EB72040, - 0x2EB64700, 0x2EB56DC0, 0x2EB49480, - 0x2EB3BB40, 0x2EB2E200, 0x2EB208C0, - 0x2EB12F80, 0x2EB05640, 0x2EAF7D00, - 0x2EAEA3C0, 0x2EADCA80, 0x2EACF140, - 0x2EAC1800, 0x2EAB3EC0, 0x2EAA6580, - 0x2EA98C40, 0x2EA8B300, 0x2EA7D9C0, - 0x2EA70080, 0x2EA62740, 0x2EA54E00, - 0x2EA474C0, 0x2EA39B80, 0x2EA2C240, - 0x2EA1E900, 0x2EA10FC0, 0x2EA03680, - 0x2E9F5D40, 0x2E9E8400, 0x2E9DAAC0, - 0x2E9CD180, 0x2E9BF840, 0x2E9B1F00, - 0x2E9A45C0, 0x2E996C80, 0x2E989340, - 0x2E97BA00, 0x2E96E0C0, 0x2E960780, - 0x2E952E40, 0x2E945500, 0x2E937BC0, - 0x2E92A280, 0x2E91C940, 0x2E90F000, - 0x2E9016C0, 0x2E8F3D80, 0x2E8E6440, - 0x2E8D8B00, 0x2E8CB1C0, 0x2E8BD880, - 0x2E8AFF40, 0x2E8A2600, 0x2E894CC0, - 0x2E887380, 0x2E879A40, 0x2E86C100, - 0x2E85E7C0, 0x2E850E80, 0x2E843540, - 0x2E835C00, 0x2E8282C0, 0x2E81A980, - 0x2E80D040, 0x2E7FF700, 0x2E7F1DC0, - 0x2E7E4480, 0x2E7D6B40, 0x2E7C9200, - 0x2E7BB8C0, 0x2E7ADF80, 0x2E7A0640, - 0x2E792D00, 0x2E7853C0, 0x2E777A80, - 0x2E76A140, 0x2E75C800, 0x2E74EEC0, - 0x2E741580, 0x2E733C40, 0x2E726300, - 0x2E7189C0, 0x2E70B080, 0x2E6FD740, - 0x2E6EFE00, 0x2E6E24C0, 0x2E6D4B80, - 0x2E6C7240, 0x2E6B9900, 0x2E6ABFC0, - 0x2E69E680, 0x2E690D40, 0x2E683400, - 0x2E675AC0, 0x2E668180, 0x2E65A840, - 0x2E64CF00, 0x2E63F5C0, 0x2E631C80, - 0x2E624340, 0x2E616A00, 0x2E6090C0, - 0x2E5FB780, 0x2E5EDE40, 0x2E5E0500, - 0x2E5D2BC0, 0x2E5C5280, 0x2E5B7940, - 0x2E5AA000, 0x2E59C6C0, 0x2E58ED80, - 0x2E581440, 0x2E573B00, 0x2E5661C0, - 0x2E558880, 0x2E54AF40, 0x2E53D600, - 0x2E52FCC0, 0x2E522380, 0x2E514A40, - 0x2E507100, 0x2E4F97C0, 0x2E4EBE80, - 0x2E4DE540, 0x2E4D0C00, 0x2E4C32C0, - 0x2E4B5980, 0x2E4A8040, 0x2E49A700, - 0x2E48CDC0, 0x2E47F480, 0x2E471B40, - 0x2E464200, 0x2E4568C0, 0x2E448F80, - 0x2E43B640, 0x2E42DD00, 0x2E4203C0, - 0x2E412A80, 0x2E405140, 0x2E3F7800, - 0x2E3E9EC0, 0x2E3DC580, 0x2E3CEC40, - 0x2E3C1300, 0x2E3B39C0, 0x2E3A6080, - 0x2E398740, 0x2E38AE00, 0x2E37D4C0, - 0x2E36FB80, 0x2E362240, 0x2E354900, - 0x2E346FC0, 0x2E339680, 0x2E32BD40, - 0x2E31E400, 0x2E310AC0, 0x2E303180, - 0x2E2F5840, 0x2E2E7F00, 0x2E2DA5C0, - 0x2E2CCC80, 0x2E2BF340, 0x2E2B1A00, - 0x2E2A40C0, 0x2E296780, 0x2E288E40, - 0x2E27B500, 0x2E26DBC0, 0x2E260280, - 0x2E252940, 0x2E245000, 0x2E2376C0, - 0x2E229D80, 0x2E21C440, 0x2E20EB00, - 0x2E2011C0, 0x2E1F3880, 0x2E1E5F40, - 0x2E1D8600, 0x2E1CACC0, 0x2E1BD380, - 0x2E1AFA40, 0x2E1A2100, 0x2E1947C0, - 0x2E186E80, 0x2E179540, 0x2E16BC00, - 0x2E15E2C0, 0x2E150980, 0x2E143040, - 0x2E135700, 0x2E127DC0, 0x2E11A480, - 0x2E10CB40, 0x2E0FF200, 0x2E0F18C0, - 0x2E0E3F80, 0x2E0D6640, 0x2E0C8D00, - 0x2E0BB3C0, 0x2E0ADA80, 0x2E0A0140, - 0x2E092800, 0x2E084EC0, 0x2E077580, - 0x2E069C40, 0x2E05C300, 0x2E04E9C0, - 0x2E041080, 0x2E033740, 0x2E025E00, - 0x2E0184C0, 0x2E00AB80, 0x2DFFD240, - 0x2DFEF900, 0x2DFE1FC0, 0x2DFD4680, - 0x2DFC6D40, 0x2DFB9400, 0x2DFABAC0, - 0x2DF9E180, 0x2DF90840, 0x2DF82F00, - 0x2DF755C0, 0x2DF67C80, 0x2DF5A340, - 0x2DF4CA00, 0x2DF3F0C0, 0x2DF31780, - 0x2DF23E40, 0x2DF16500, 0x2DF08BC0, - 0x2DEFB280, 0x2DEED940, 0x2DF00000, - 0x2DEF3480, 0x2DEE6900, 0x2DED9D80, - 0x2DECD200, 0x2DEC0680, 0x2DEB3B00, - 0x2DEA6F80, 0x2DE9A400, 0x2DE8D880, - 0x2DE80D00, 0x2DE74180, 0x2DE67600, - 0x2DE5AA80, 0x2DE4DF00, 0x2DE41380, - 0x2DE34800, 0x2DE27C80, 0x2DE1B100, - 0x2DE0E580, 0x2DE01A00, 0x2DDF4E80, - 0x2DDE8300, 0x2DDDB780, 0x2DDCEC00, - 0x2DDC2080, 0x2DDB5500, 0x2DDA8980, - 0x2DD9BE00, 0x2DD8F280, 0x2DD82700, - 0x2DD75B80, 0x2DD69000, 0x2DD5C480, - 0x2DD4F900, 0x2DD42D80, 0x2DD36200, - 0x2DD29680, 0x2DD1CB00, 0x2DD0FF80, - 0x2DD03400, 0x2DCF6880, 0x2DCE9D00, - 0x2DCDD180, 0x2DCD0600, 0x2DCC3A80, - 0x2DCB6F00, 0x2DCAA380, 0x2DC9D800, - 0x2DC90C80, 0x2DC84100, 0x2DC77580, - 0x2DC6AA00, 0x2DC5DE80, 0x2DC51300, - 0x2DC44780, 0x2DC37C00, 0x2DC2B080, - 0x2DC1E500, 0x2DC11980, 0x2DC04E00, - 0x2DBF8280, 0x2DBEB700, 0x2DBDEB80, - 0x2DBD2000, 0x2DBC5480, 0x2DBB8900, - 0x2DBABD80, 0x2DB9F200, 0x2DB92680, - 0x2DB85B00, 0x2DB78F80, 0x2DB6C400, - 0x2DB5F880, 0x2DB52D00, 0x2DB46180, - 0x2DB39600, 0x2DB2CA80, 0x2DB1FF00, - 0x2DB13380, 0x2DB06800, 0x2DAF9C80, - 0x2DAED100, 0x2DAE0580, 0x2DAD3A00, - 0x2DAC6E80, 0x2DABA300, 0x2DAAD780, - 0x2DAA0C00, 0x2DA94080, 0x2DA87500, - 0x2DA7A980, 0x2DA6DE00, 0x2DA61280, - 0x2DA54700, 0x2DA47B80, 0x2DA3B000, - 0x2DA2E480, 0x2DA21900, 0x2DA14D80, - 0x2DA08200, 0x2D9FB680, 0x2D9EEB00, - 0x2D9E1F80, 0x2D9D5400, 0x2D9C8880, - 0x2D9BBD00, 0x2D9AF180, 0x2D9A2600, - 0x2D995A80, 0x2D988F00, 0x2D97C380, - 0x2D96F800, 0x2D962C80, 0x2D956100, - 0x2D949580, 0x2D93CA00, 0x2D92FE80, - 0x2D923300, 0x2D916780, 0x2D909C00, - 0x2D8FD080, 0x2D8F0500, 0x2D8E3980, - 0x2D8D6E00, 0x2D8CA280, 0x2D8BD700, - 0x2D8B0B80, 0x2D8A4000, 0x2D897480, - 0x2D88A900, 0x2D87DD80, 0x2D871200, - 0x2D864680, 0x2D857B00, 0x2D84AF80, - 0x2D83E400, 0x2D831880, 0x2D824D00, - 0x2D818180, 0x2D80B600, 0x2D7FEA80, - 0x2D7F1F00, 0x2D7E5380, 0x2D7D8800, - 0x2D7CBC80, 0x2D7BF100, 0x2D7B2580, - 0x2D7A5A00, 0x2D798E80, 0x2D78C300, - 0x2D77F780, 0x2D772C00, 0x2D766080, - 0x2D759500, 0x2D74C980, 0x2D73FE00, - 0x2D733280, 0x2D726700, 0x2D719B80, - 0x2D70D000, 0x2D700480, 0x2D6F3900, - 0x2D6E6D80, 0x2D6DA200, 0x2D6CD680, - 0x2D6C0B00, 0x2D6B3F80, 0x2D6A7400, - 0x2D69A880, 0x2D68DD00, 0x2D681180, - 0x2D674600, 0x2D667A80, 0x2D65AF00, - 0x2D64E380, 0x2D641800, 0x2D634C80, - 0x2D628100, 0x2D61B580, 0x2D60EA00, - 0x2D601E80, 0x2D5F5300, 0x2D5E8780, - 0x2D5DBC00, 0x2D5CF080, 0x2D5C2500, - 0x2D5B5980, 0x2D5A8E00, 0x2D59C280, - 0x2D58F700, 0x2D582B80, 0x2D576000, - 0x2D569480, 0x2D55C900, 0x2D54FD80, - 0x2D543200, 0x2D536680, 0x2D529B00, - 0x2D51CF80, 0x2D510400, 0x2D503880, - 0x2D4F6D00, 0x2D4EA180, 0x2D4DD600, - 0x2D4D0A80, 0x2D4C3F00, 0x2D4B7380, - 0x2D4AA800, 0x2D49DC80, 0x2D491100, - 0x2D484580, 0x2D477A00, 0x2D46AE80, - 0x2D45E300, 0x2D451780, 0x2D444C00, - 0x2D438080, 0x2D42B500, 0x2D41E980, - 0x2D411E00, 0x2D405280, 0x2D3F8700, - 0x2D3EBB80, 0x2D3DF000, 0x2D3D2480, - 0x2D3C5900, 0x2D3B8D80, 0x2D3AC200, - 0x2D39F680, 0x2D392B00, 0x2D385F80, - 0x2D379400, 0x2D36C880, 0x2D35FD00, - 0x2D353180, 0x2D346600, 0x2D339A80, - 0x2D32CF00, 0x2D320380, 0x2D313800, - 0x2D306C80, 0x2D2FA100, 0x2D2ED580, - 0x2D2E0A00, 0x2D2D3E80, 0x2D2C7300, - 0x2D2BA780, 0x2D2ADC00, 0x2D2A1080, - 0x2D294500, 0x2D287980, 0x2D27AE00, - 0x2D26E280, 0x2D261700, 0x2D254B80, - 0x2D248000, 0x2D23B480, 0x2D22E900, - 0x2D221D80, 0x2D215200, 0x2D208680, - 0x2D1FBB00, 0x2D1EEF80, 0x2D1E2400, - 0x2D1D5880, 0x2D1C8D00, 0x2D1BC180, - 0x2D1AF600, 0x2D1A2A80, 0x2D195F00, - 0x2D189380, 0x2D17C800, 0x2D16FC80, - 0x2D163100, 0x2D156580, 0x2D149A00, - 0x2D13CE80, 0x2D130300, 0x2D123780, - 0x2D116C00, 0x2D10A080, 0x2D0FD500, - 0x2D0F0980, 0x2D0E3E00, 0x2D0D7280, - 0x2D0CA700, 0x2D0BDB80, 0x2D0B1000, - 0x2D0A4480, 0x2D097900, 0x2D08AD80, - 0x2D07E200, 0x2D071680, 0x2D064B00, - 0x2D057F80, 0x2D04B400, 0x2D03E880, - 0x2D031D00, 0x2D025180, 0x2D018600, - 0x2D00BA80, 0x2CFFEF00, 0x2CFF2380, - 0x2CFE5800, 0x2CFD8C80, 0x2CFCC100, - 0x2CFBF580, 0x2CFB2A00, 0x2CFA5E80, - 0x2CF99300, 0x2CF8C780, 0x2CF7FC00, - 0x2CF73080, 0x2CF66500, 0x2CF59980, - 0x2CF4CE00, 0x2CF40280, 0x2CF33700, - 0x2CF26B80, 0x2CF1A000, 0x2CF0D480, - 0x2CF00900, 0x2CEF3D80, 0x2CEE7200, - 0x2CEDA680, 0x2CECDB00, 0x2CEC0F80, - 0x2CEB4400, 0x2CEA7880, 0x2CE9AD00, - 0x2CE8E180, 0x2CE81600, 0x2CE74A80, - 0x2CE67F00, 0x2CE5B380, 0x2CE4E800, - 0x2CE41C80, 0x2CE35100, 0x2CE28580, - 0x2CE1BA00, 0x2CE0EE80, 0x2CE02300, - 0x2CDF5780, 0x2CDE8C00, 0x2CDDC080, - 0x2CDCF500, 0x2CDC2980, 0x2CDB5E00, - 0x2CDA9280, 0x2CD9C700, 0x2CD8FB80, - 0x2CD83000, 0x2CD76480, 0x2CD69900, - 0x2CD5CD80, 0x2CD50200, 0x2CD43680, - 0x2CD36B00, 0x2CD29F80, 0x2CD1D400, - 0x2CD10880, 0x2CD03D00, 0x2CCF7180, - 0x2CCEA600, 0x2CCDDA80, 0x2CCD0F00, - 0x2CCC4380, 0x2CCB7800, 0x2CCAAC80, - 0x2CC9E100, 0x2CC91580, 0x2CC84A00, - 0x2CC77E80, 0x2CC6B300, 0x2CC5E780, - 0x2CC51C00, 0x2CC45080, 0x2CC38500, - 0x2CC2B980, 0x2CC1EE00, 0x2CC12280, - 0x2CC05700, 0x2CBF8B80, 0x2CBEC000, - 0x2CBDF480, 0x2CBD2900, 0x2CBC5D80, - 0x2CBB9200, 0x2CBAC680, 0x2CB9FB00, - 0x2CB92F80, 0x2CB86400, 0x2CB79880, - 0x2CB6CD00, 0x2CB60180, 0x2CB53600, - 0x2CB46A80, 0x2CB39F00, 0x2CB2D380, - 0x2CB20800, 0x2CB13C80, 0x2CB07100, - 0x2CAFA580, 0x2CAEDA00, 0x2CAE0E80, - 0x2CAD4300, 0x2CAC7780, 0x2CABAC00, - 0x2CAAE080, 0x2CAA1500, 0x2CA94980, - 0x2CA87E00, 0x2CA7B280, 0x2CA6E700, - 0x2CA61B80, 0x2CA55000, 0x2CA48480, - 0x2CA3B900, 0x2CA2ED80, 0x2CA22200, - 0x2CA15680, 0x2CA08B00, 0x2C9FBF80, - 0x2C9EF400, 0x2C9E2880, 0x2C9D5D00, - 0x2C9C9180, 0x2C9BC600, 0x2C9AFA80, - 0x2C9A2F00, 0x2C996380, 0x2C989800, - 0x2C97CC80, 0x2C970100, 0x2C963580, - 0x2C956A00, 0x2C949E80, 0x2C93D300, - 0x2C930780, 0x2C923C00, 0x2C917080, - 0x2C90A500, 0x2C8FD980, 0x2C8F0E00, - 0x2C8E4280, 0x2C8D7700, 0x2C8CAB80, - 0x2C8BE000, 0x2C8B1480, 0x2C8A4900, - 0x2C897D80, 0x2C88B200, 0x2C87E680, - 0x2C871B00, 0x2C864F80, 0x2C858400, - 0x2C84B880, 0x2C83ED00, 0x2C832180, - 0x2C825600, 0x2C818A80, 0x2C80BF00, - 0x2C7FF380, 0x2C7F2800, 0x2C7E5C80, - 0x2C7D9100, 0x2C7CC580, 0x2C7BFA00, - 0x2C7B2E80, 0x2C7A6300, 0x2C799780, - 0x2C78CC00, 0x2C780080, 0x2C773500, - 0x2C766980, 0x2C759E00, 0x2C74D280, - 0x2C740700, 0x2C733B80, 0x2C727000, - 0x2C71A480, 0x2C70D900, 0x2C700D80, - 0x2C6F4200, 0x2C6E7680, 0x2C6DAB00, - 0x2C6CDF80, 0x2C6C1400, 0x2C6B4880, - 0x2C6A7D00, 0x2C69B180, 0x2C68E600, - 0x2C681A80, 0x2C674F00, 0x2C668380, - 0x2C65B800, 0x2C64EC80, 0x2C642100, - 0x2C635580, 0x2C628A00, 0x2C61BE80, - 0x2C60F300, 0x2C602780, 0x2C5F5C00, - 0x2C5E9080, 0x2C5DC500, 0x2C5CF980, - 0x2C5C2E00, 0x2C5B6280, 0x2C5A9700, - 0x2C59CB80, 0x2C590000, 0x2C583480, - 0x2C576900, 0x2C569D80, 0x2C55D200, - 0x2C550680, 0x2C543B00, 0x2C536F80, - 0x2C52A400, 0x2C51D880, 0x2C510D00, - 0x2C504180, 0x2C4F7600, 0x2C4EAA80, - 0x2C4DDF00, 0x2C4D1380, 0x2C4C4800, - 0x2C4B7C80, 0x2C4AB100, 0x2C49E580, - 0x2C491A00, 0x2C484E80, 0x2C478300, - 0x2C46B780, 0x2C45EC00, 0x2C452080, - 0x2C445500, 0x2C438980, 0x2C42BE00, - 0x2C41F280, 0x2C412700, 0x2C405B80, - 0x2C3F9000, 0x2C3EC480, 0x2C3DF900, - 0x2C3D2D80, 0x2C3C6200, 0x2C3B9680, - 0x2C3ACB00, 0x2C39FF80, 0x2C393400, - 0x2C386880, 0x2C379D00, 0x2C36D180, - 0x2C360600, 0x2C353A80, 0x2C346F00, - 0x2C33A380, 0x2C32D800, 0x2C320C80, - 0x2C314100, 0x2C307580, 0x2C2FAA00, - 0x2C2EDE80, 0x2C2E1300, 0x2C2D4780, - 0x2C2C7C00, 0x2C2BB080, 0x2C2AE500, - 0x2C2A1980, 0x2C294E00, 0x2C288280, - 0x2C27B700, 0x2C26EB80, 0x2C262000, - 0x2C255480, 0x2C248900, 0x2C23BD80, - 0x2C22F200, 0x2C222680, 0x2C215B00, - 0x2C208F80, 0x2C1FC400, 0x2C1EF880, - 0x2C1E2D00, 0x2C1D6180, 0x2C1C9600, - 0x2C1BCA80, 0x2C1AFF00, 0x2C1A3380, - 0x2C196800, 0x2C189C80, 0x2C17D100, - 0x2C170580, 0x2C163A00, 0x2C156E80, - 0x2C14A300, 0x2C13D780, 0x2C130C00, - 0x2C124080, 0x2C117500, 0x2C10A980, - 0x2C0FDE00, 0x2C0F1280, 0x2C0E4700, - 0x2C0D7B80, 0x2C0CB000, 0x2C0BE480, - 0x2C0B1900, 0x2C0A4D80, 0x2C098200, - 0x2C08B680, 0x2C07EB00, 0x2C071F80, - 0x2C065400, 0x2C058880, 0x2C04BD00, - 0x2C03F180, 0x2C032600, 0x2C025A80, - 0x2C018F00, 0x2C00C380, 0x2BFFF800, - 0x2BFF2C80, 0x2BFE6100, 0x2BFD9580, - 0x2BFCCA00, 0x2BFBFE80, 0x2BFB3300, - 0x2BFA6780, 0x2BF99C00, 0x2BF8D080, - 0x2BF80500, 0x2BF73980, 0x2BF66E00, - 0x2BF5A280, 0x2BF4D700, 0x2BF40B80, - 0x2BF34000, 0x2BF27480, 0x2BF1A900, - 0x2BF0DD80, 0x2BF01200, 0x2BEF4680, - 0x2BEE7B00, 0x2BEDAF80, 0x2BECE400, - 0x2BEC1880, 0x2BEB4D00, 0x2BEA8180, - 0x2BE9B600, 0x2BE8EA80, 0x2BE81F00, - 0x2BE75380, 0x2BE68800, 0x2BE5BC80, - 0x2BE4F100, 0x2BE42580, 0x2BE35A00, - 0x2BE28E80, 0x2BE1C300, 0x2BE0F780, - 0x2BE02C00, 0x2BDF6080, 0x2BDE9500, - 0x2BDDC980, 0x2BDCFE00, 0x2BDC3280, - 0x2BDB6700, 0x2BDA9B80, 0x2BD9D000, - 0x2BD90480, 0x2BD83900, 0x2BD76D80, - 0x2BD6A200, 0x2BD5D680, 0x2BD50B00, - 0x2BD43F80, 0x2BD37400, 0x2BD2A880, - 0x2BD1DD00, 0x2BD11180, 0x2BD04600, - 0x2BCF7A80, 0x2BCEAF00, 0x2BCDE380, - 0x2BCD1800, 0x2BCC4C80, 0x2BCB8100, - 0x2BCAB580, 0x2BC9EA00, 0x2BC91E80, - 0x2BC85300, 0x2BC78780, 0x2BC6BC00, - 0x2BC5F080, 0x2BC52500, 0x2BC45980, - 0x2BC38E00, 0x2BC2C280, 0x2BC1F700, - 0x2BC12B80, 0x2BC06000, 0x2BBF9480, - 0x2BBEC900, 0x2BBDFD80, 0x2BBD3200, - 0x2BBC6680, 0x2BBB9B00, 0x2BBACF80, - 0x2BBA0400, 0x2BB93880, 0x2BB86D00, - 0x2BB7A180, 0x2BB6D600, 0x2BB60A80, - 0x2BB53F00, 0x2BB47380, 0x2BB3A800, - 0x2BB2DC80, 0x2BB21100, 0x2BB14580, - 0x2BB07A00, 0x2BAFAE80, 0x2BAEE300, - 0x2BAE1780, 0x2BAD4C00, 0x2BAC8080, - 0x2BABB500, 0x2BAAE980, 0x2BAA1E00, - 0x2BA95280, 0x2BA88700, 0x2BA7BB80, - 0x2BA6F000, 0x2BA62480, 0x2BA55900, - 0x2BA48D80, 0x2BA3C200, 0x2BA2F680, - 0x2BA22B00, 0x2BA15F80, 0x2BA09400, - 0x2B9FC880, 0x2B9EFD00, 0x2B9E3180, - 0x2B9D6600, 0x2B9C9A80, 0x2B9BCF00, - 0x2B9B0380, 0x2B9A3800, 0x2B996C80, - 0x2B98A100, 0x2B97D580, 0x2B970A00, - 0x2B963E80, 0x2B957300, 0x2B94A780, - 0x2B93DC00, 0x2B931080, 0x2B924500, - 0x2B917980, 0x2B90AE00, 0x2B8FE280, - 0x2B8F1700, 0x2B8E4B80, 0x2B8D8000, - 0x2B8CB480, 0x2B8BE900, 0x2B8B1D80, - 0x2B8A5200, 0x2B898680, 0x2B88BB00, - 0x2B87EF80, 0x2B872400, 0x2B865880, - 0x2B858D00, 0x2B84C180, 0x2B83F600, - 0x2B832A80, 0x2B825F00, 0x2B819380, - 0x2B80C800, 0x2B7FFC80, 0x2B7F3100, - 0x2B7E6580, 0x2B7D9A00, 0x2B7CCE80, - 0x2B7C0300, 0x2B7B3780, 0x2B7A6C00, - 0x2B79A080, 0x2B78D500, 0x2B780980, - 0x2B773E00, 0x2B767280, 0x2B75A700, - 0x2B74DB80, 0x2B741000, 0x2B734480, - 0x2B727900, 0x2B71AD80, 0x2B70E200, - 0x2B701680, 0x2B6F4B00, 0x2B6E7F80, - 0x2B6DB400, 0x2B6CE880, 0x2B6C1D00, - 0x2B6B5180, 0x2B6A8600, 0x2B69BA80, - 0x2B68EF00, 0x2B682380, 0x2B675800, - 0x2B668C80, 0x2B65C100, 0x2B64F580, - 0x2B642A00, 0x2B635E80, 0x2B629300, - 0x2B61C780, 0x2B60FC00, 0x2B603080, - 0x2B5F6500, 0x2B5E9980, 0x2B5DCE00, - 0x2B5D0280, 0x2B5C3700, 0x2B5B6B80, - 0x2B5AA000, 0x2B59D480, 0x2B590900, - 0x2B583D80, 0x2B577200, 0x2B56A680, - 0x2B55DB00, 0x2B550F80, 0x2B544400, - 0x2B537880, 0x2B52AD00, 0x2B51E180, - 0x2B511600, 0x2B504A80, 0x2B4F7F00, - 0x2B4EB380, 0x2B4DE800, 0x2B4D1C80, - 0x2B4C5100, 0x2B4B8580, 0x2B4ABA00, - 0x2B49EE80, 0x2B492300, 0x2B485780, - 0x2B478C00, 0x2B46C080, 0x2B45F500, - 0x2B452980, 0x2B445E00, 0x2B439280, - 0x2B42C700, 0x2B41FB80, 0x2B413000, - 0x2B406480, 0x2B3F9900, 0x2B3ECD80, - 0x2B3E0200, 0x2B3D3680, 0x2B3C6B00, - 0x2B3B9F80, 0x2B3AD400, 0x2B3A0880, - 0x2B393D00, 0x2B387180, 0x2B37A600, - 0x2B36DA80, 0x2B360F00, 0x2B354380, - 0x2B347800, 0x2B33AC80, 0x2B32E100, - 0x2B321580, 0x2B314A00, 0x2B307E80, - 0x2B2FB300, 0x2B2EE780, 0x2B2E1C00, - 0x2B2D5080, 0x2B2C8500, 0x2B2BB980, - 0x2B2AEE00, 0x2B2A2280, 0x2B295700, - 0x2B288B80, 0x2B27C000, 0x2B26F480, - 0x2B262900, 0x2B255D80, 0x2B249200, - 0x2B23C680, 0x2B22FB00, 0x2B222F80, - 0x2B216400, 0x2B209880, 0x2B1FCD00, - 0x2B1F0180, 0x2B1E3600, 0x2B1D6A80, - 0x2B1C9F00, 0x2B1BD380, 0x2B1B0800, - 0x2B1A3C80, 0x2B197100, 0x2B18A580, - 0x2B17DA00, 0x2B170E80, 0x2B164300, - 0x2B157780, 0x2B14AC00, 0x2B13E080, - 0x2B131500, 0x2B124980, 0x2B117E00, - 0x2B10B280, 0x2B0FE700, 0x2B0F1B80, - 0x2B0E5000, 0x2B0D8480, 0x2B0CB900, - 0x2B0BED80, 0x2B0B2200, 0x2B0A5680, - 0x2B098B00, 0x2B08BF80, 0x2B07F400, - 0x2B072880, 0x2B065D00, 0x2B059180, - 0x2B04C600, 0x2B03FA80, 0x2B032F00, - 0x2B026380, 0x2B019800, 0x2B00CC80, - 0x2B000100, 0x2AFF3580, 0x2AFE6A00, - 0x2AFD9E80, 0x2AFCD300, 0x2AFC0780, - 0x2AFB3C00, 0x2AFA7080, 0x2AF9A500, - 0x2AF8D980, 0x2AF80E00, 0x2AF74280, - 0x2AF67700, 0x2AF5AB80, 0x2AF4E000, - 0x2AF41480, 0x2AF34900, 0x2AF27D80, - 0x2AF1B200, 0x2AF0E680, 0x2AF01B00, - 0x2AEF4F80, 0x2AEE8400, 0x2AEDB880, - 0x2AECED00, 0x2AEC2180, 0x2AEB5600, - 0x2AEA8A80, 0x2AE9BF00, 0x2AE8F380, - 0x2AE82800, 0x2AE75C80, 0x2AE69100, - 0x2AE5C580, 0x2AE4FA00, 0x2AE42E80, - 0x2AE36300, 0x2AE29780, 0x2AE1CC00, - 0x2AE10080, 0x2AE03500, 0x2ADF6980, - 0x2ADE9E00, 0x2ADDD280, 0x2ADD0700, - 0x2ADC3B80, 0x2ADB7000, 0x2ADAA480, - 0x2AD9D900, 0x2AD90D80, 0x2AD84200, - 0x2AD77680, 0x2AD6AB00, 0x2AD5DF80, - 0x2AD51400, 0x2AD44880, 0x2AD37D00, - 0x2AD2B180, 0x2AD1E600, 0x2AD11A80, - 0x2AD04F00, 0x2ACF8380, 0x2ACEB800, - 0x2ACDEC80, 0x2ACD2100, 0x2ACC5580, - 0x2ACB8A00, 0x2ACABE80, 0x2AC9F300, - 0x2AC92780, 0x2AC85C00, 0x2AC79080, - 0x2AC6C500, 0x2AC5F980, 0x2AC52E00, - 0x2AC46280, 0x2AC39700, 0x2AC2CB80, - 0x2AC20000, 0x2AC13480, 0x2AC06900, - 0x2ABF9D80, 0x2ABED200, 0x2ABE0680, - 0x2ABD3B00, 0x2ABC6F80, 0x2ABBA400, - 0x2ABAD880, 0x2ABA0D00, 0x2AB94180, - 0x2AB87600, 0x2AB7AA80, 0x2AB6DF00, - 0x2AB61380, 0x2AB54800, 0x2AB47C80, - 0x2AB3B100, 0x2AB2E580, 0x2AB21A00, - 0x2AB14E80, 0x2AB08300, 0x2AAFB780, - 0x2AAEEC00, 0x2AAE2080, 0x2AAD5500, - 0x2AAC8980, 0x2AABBE00, 0x2AAAF280, - 0x2AAA2700, 0x2AA95B80, 0x2AA89000, - 0x2AA7C480, 0x2AA6F900, 0x2AA62D80, - 0x2AA56200, 0x2AA49680, 0x2AA3CB00, - 0x2AA2FF80, 0x2AA23400, 0x2AA16880, - 0x2AA09D00, 0x2A9FD180, 0x2A9F0600, - 0x2A9E3A80, 0x2A9D6F00, 0x2A9CA380, - 0x2A9BD800, 0x2A9B0C80, 0x2A9A4100, - 0x2A997580, 0x2A98AA00, 0x2A97DE80, - 0x2A971300, 0x2A964780, 0x2A957C00, - 0x2A94B080, 0x2A93E500, 0x2A931980, - 0x2A924E00, 0x2A918280, 0x2A90B700, - 0x2A8FEB80, 0x2A8F2000, 0x2A8E5480, - 0x2A8D8900, 0x2A8CBD80, 0x2A8BF200, - 0x2A8B2680, 0x2A8A5B00, 0x2A898F80, - 0x2A88C400, 0x2A87F880, 0x2A872D00, - 0x2A866180, 0x2A859600, 0x2A84CA80, - 0x2A83FF00, 0x2A833380, 0x2A826800, - 0x2A819C80, 0x2A80D100, 0x2A800580, - 0x2A7F3A00, 0x2A7E6E80, 0x2A7DA300, - 0x2A7CD780, 0x2A7C0C00, 0x2A7B4080, - 0x2A7A7500, 0x2A79A980, 0x2A78DE00, - 0x2A781280, 0x2A774700, 0x2A767B80, - 0x2A75B000, 0x2A74E480, 0x2A741900, - 0x2A734D80, 0x2A728200, 0x2A71B680, - 0x2A70EB00, 0x2A701F80, 0x2A6F5400, - 0x2A6E8880, 0x2A6DBD00, 0x2A6CF180, - 0x2A6C2600, 0x2A6B5A80, 0x2A6A8F00, - 0x2A69C380, 0x2A68F800, 0x2A682C80, - 0x2A676100, 0x2A669580, 0x2A65CA00, - 0x2A64FE80, 0x2A643300, 0x2A636780, - 0x2A629C00, 0x2A61D080, 0x2A610500, - 0x2A603980, 0x2A5F6E00, 0x2A5EA280, - 0x2A5DD700, 0x2A5D0B80, 0x2A5C4000, - 0x2A5B7480, 0x2A5AA900, 0x2A59DD80, - 0x2A591200, 0x2A584680, 0x2A577B00, - 0x2A56AF80, 0x2A55E400, 0x2A551880, - 0x2A544D00, 0x2A538180, 0x2A52B600, - 0x2A51EA80, 0x2A511F00, 0x2A505380, - 0x2A4F8800, 0x2A4EBC80, 0x2A4DF100, - 0x2A4D2580, 0x2A4C5A00, 0x2A4B8E80, - 0x2A4AC300, 0x2A49F780, 0x2A492C00, - 0x2A486080, 0x2A479500, 0x2A46C980, - 0x2A45FE00, 0x2A453280, 0x2A446700, - 0x2A439B80, 0x2A42D000, 0x2A420480, - 0x2A413900, 0x2A406D80, 0x2A3FA200, - 0x2A3ED680, 0x2A3E0B00, 0x2A3D3F80, - 0x2A3C7400, 0x2A3BA880, 0x2A3ADD00, - 0x2A3A1180, 0x2A394600, 0x2A387A80, - 0x2A37AF00, 0x2A36E380, 0x2A361800, - 0x2A354C80, 0x2A348100, 0x2A33B580, - 0x2A32EA00, 0x2A321E80, 0x2A315300, - 0x2A308780, 0x2A2FBC00, 0x2A2EF080, - 0x2A2E2500, 0x2A2D5980, 0x2A2C8E00, - 0x2A2BC280, 0x2A2AF700, 0x2A2A2B80, - 0x2A296000, 0x2A289480, 0x2A27C900, - 0x2A26FD80, 0x2A263200, 0x2A256680, - 0x2A249B00, 0x2A23CF80, 0x2A230400, - 0x2A223880, 0x2A216D00, 0x2A20A180, - 0x2A1FD600, 0x2A1F0A80, 0x2A1E3F00, - 0x2A1D7380, 0x2A1CA800, 0x2A1BDC80, - 0x2A1B1100, 0x2A1A4580, 0x2A197A00, - 0x2A18AE80, 0x2A17E300, 0x2A171780, - 0x2A164C00, 0x2A158080, 0x2A14B500, - 0x2A13E980, 0x2A131E00, 0x2A125280, - 0x2A118700, 0x2A10BB80, 0x2A0FF000, - 0x2A0F2480, 0x2A0E5900, 0x2A0D8D80, - 0x2A0CC200, 0x2A0BF680, 0x2A0B2B00, - 0x2A0A5F80, 0x2A099400, 0x2A08C880, - 0x2A07FD00, 0x2A073180, 0x2A066600, - 0x2A059A80, 0x2A04CF00, 0x2A040380, - 0x2A033800, 0x2A026C80, 0x2A01A100, - 0x2A00D580, 0x2A000A00, 0x29FF3E80, - 0x29FE7300, 0x29FDA780, 0x29FCDC00, - 0x29FC1080, 0x29FB4500, 0x29FA7980, - 0x29F9AE00, 0x29F8E280, 0x29F81700, - 0x29F74B80, 0x29F68000, 0x29F5B480, - 0x29F4E900, 0x29F41D80, 0x29F35200, - 0x29F28680, 0x29F1BB00, 0x29F0EF80, - 0x29F02400, 0x29EF5880, 0x29EE8D00, - 0x29EDC180, 0x29ECF600, 0x29EC2A80, - 0x29EB5F00, 0x29EA9380, 0x29E9C800, - 0x29E8FC80, 0x29E83100, 0x29E76580, - 0x29E69A00, 0x29E5CE80, 0x29E50300, - 0x29E43780, 0x29E36C00, 0x29E2A080, - 0x29E1D500, 0x29E10980, 0x29E03E00, - 0x29DF7280, 0x29DEA700, 0x29DDDB80, - 0x29DD1000, 0x29DC4480, 0x29DB7900, - 0x29DAAD80, 0x29D9E200, 0x29D91680, - 0x29D84B00, 0x29D77F80, 0x29D6B400, - 0x29D5E880, 0x29D51D00, 0x29D45180, - 0x29D38600, 0x29D2BA80, 0x29D1EF00, - 0x29D12380, 0x29D05800, 0x29CF8C80, - 0x29CEC100, 0x29CDF580, 0x29CD2A00, - 0x29CC5E80, 0x29CB9300, 0x29CAC780, - 0x29C9FC00, 0x29C93080, 0x29C86500, - 0x29C79980, 0x29C6CE00, 0x29C60280, - 0x29C53700, 0x29C46B80, 0x29C3A000, - 0x29C2D480, 0x29C20900, 0x29C13D80, - 0x29C07200, 0x29BFA680, 0x29BEDB00, - 0x29BE0F80, 0x29BD4400, 0x29BC7880, - 0x29BBAD00, 0x29BAE180, 0x29BA1600, - 0x29B94A80, 0x29B87F00, 0x29B7B380, - 0x29B6E800, 0x29B61C80, 0x29B55100, - 0x29B48580, 0x29B3BA00, 0x29B2EE80, - 0x29B22300, 0x29B15780, 0x29B08C00, - 0x29AFC080, 0x29AEF500, 0x29AE2980, - 0x29AD5E00, 0x29AC9280, 0x29ABC700, - 0x29AAFB80, 0x29AA3000, 0x29A96480, - 0x29A89900, 0x29A7CD80, 0x29A70200, - 0x29A63680, 0x29A56B00, 0x29A49F80, - 0x29A3D400, 0x29A30880, 0x29A23D00, - 0x29A17180, 0x29A0A600, 0x299FDA80, - 0x299F0F00, 0x299E4380, 0x299D7800, - 0x299CAC80, 0x299BE100, 0x299B1580, - 0x299A4A00, 0x29997E80, 0x2998B300, - 0x2997E780, 0x29971C00, 0x29965080, - 0x29958500, 0x2994B980, 0x2993EE00, - 0x29932280, 0x29925700, 0x29918B80, - 0x2990C000, 0x298FF480, 0x298F2900, - 0x298E5D80, 0x298D9200, 0x298CC680, - 0x298BFB00, 0x298B2F80, 0x298A6400, - 0x29899880, 0x2988CD00, 0x29880180, - 0x29873600, 0x29866A80, 0x29859F00, - 0x2984D380, 0x29840800, 0x29833C80, - 0x29827100, 0x2981A580, 0x2980DA00, - 0x29800E80, 0x297F4300, 0x297E7780, - 0x297DAC00, 0x297CE080, 0x297C1500, - 0x297B4980, 0x297A7E00, 0x2979B280, - 0x2978E700, 0x29781B80, 0x29775000, - 0x29768480, 0x2975B900, 0x2974ED80, - 0x29742200, 0x29735680, 0x29728B00, - 0x2971BF80, 0x2970F400, 0x29702880, - 0x296F5D00, 0x296E9180, 0x296DC600, - 0x296CFA80, 0x296C2F00, 0x296B6380, - 0x296A9800, 0x2969CC80, 0x29690100, - 0x29683580, 0x29676A00, 0x29669E80, - 0x2965D300, 0x29650780, 0x29643C00, - 0x29637080, 0x2962A500, 0x2961D980, - 0x29610E00, 0x29604280, 0x295F7700, - 0x295EAB80, 0x295DE000, 0x295D1480, - 0x295C4900, 0x295B7D80, 0x295AB200, - 0x2959E680, 0x29591B00, 0x29584F80, - 0x29578400, 0x2956B880, 0x2955ED00, - 0x29552180, 0x29545600, 0x29538A80, - 0x2952BF00, 0x2951F380, 0x29512800, - 0x29505C80, 0x294F9100, 0x294EC580, - 0x294DFA00, 0x294D2E80, 0x294C6300, - 0x294B9780, 0x294ACC00, 0x294A0080, - 0x29493500, 0x29486980, 0x29479E00, - 0x2946D280, 0x29460700, 0x29453B80, - 0x29447000, 0x2943A480, 0x2942D900, - 0x29420D80, 0x29414200, 0x29407680, - 0x293FAB00, 0x293EDF80, 0x293E1400, - 0x293D4880, 0x293C7D00, 0x293BB180, - 0x293AE600, 0x293A1A80, 0x29394F00, - 0x29388380, 0x2937B800, 0x2936EC80, - 0x29362100, 0x29355580, 0x29348A00, - 0x2933BE80, 0x2932F300, 0x29322780, - 0x29315C00, 0x29309080, 0x292FC500, - 0x292EF980, 0x292E2E00, 0x292D6280, - 0x292C9700, 0x292BCB80, 0x292B0000, - 0x292A3480, 0x29296900, 0x29289D80, - 0x2927D200, 0x29270680, 0x29263B00, - 0x29256F80, 0x2924A400, 0x2923D880, - 0x29230D00, 0x29224180, 0x29217600, - 0x2920AA80, 0x291FDF00, 0x291F1380, - 0x291E4800, 0x291D7C80, 0x291CB100, - 0x291BE580, 0x291B1A00, 0x291A4E80, - 0x29198300, 0x2918B780, 0x2917EC00, - 0x29172080, 0x29165500, 0x29158980, - 0x2914BE00, 0x2913F280, 0x29132700, - 0x29125B80, 0x29119000, 0x2910C480, - 0x290FF900, 0x290F2D80, 0x290E6200, - 0x290D9680, 0x290CCB00, 0x290BFF80, - 0x290B3400, 0x290A6880, 0x29099D00, - 0x2908D180, 0x29080600, 0x29073A80, - 0x29066F00, 0x2905A380, 0x2904D800, - 0x29040C80, 0x29034100, 0x29027580, - 0x2901AA00, 0x2900DE80, 0x29001300, - 0x28FF4780, 0x28FE7C00, 0x28FDB080, - 0x28FCE500, 0x28FC1980, 0x28FB4E00, - 0x28FA8280, 0x28F9B700, 0x28F8EB80, - 0x28F82000, 0x28F75480, 0x28F68900, - 0x28F5BD80, 0x28F4F200, 0x28F42680, - 0x28F35B00, 0x28F28F80, 0x28F1C400, - 0x28F0F880, 0x28F02D00, 0x28EF6180, - 0x28EE9600, 0x28EDCA80, 0x28ECFF00, - 0x28EC3380, 0x28EB6800, 0x28EA9C80, - 0x28E9D100, 0x28E90580, 0x28E83A00, - 0x28E76E80, 0x28E6A300, 0x28E5D780, - 0x28E50C00, 0x28E44080, 0x28E37500, - 0x28E2A980, 0x28E1DE00, 0x28E11280, - 0x28E04700, 0x28DF7B80, 0x28DEB000, - 0x28DDE480, 0x28DD1900, 0x28DC4D80, - 0x28DB8200, 0x28DAB680, 0x28D9EB00, - 0x28D91F80, 0x28D85400, 0x28D78880, - 0x28D6BD00, 0x28D5F180, 0x28D52600, - 0x28D45A80, 0x28D38F00, 0x28D2C380, - 0x28D1F800, 0x28D12C80, 0x28D06100, - 0x28CF9580, 0x28CECA00, 0x28CDFE80, - 0x28CD3300, 0x28CC6780, 0x28CB9C00, - 0x28CAD080, 0x28CA0500, 0x28C93980, - 0x28C86E00, 0x28C7A280, 0x28C6D700, - 0x28C60B80, 0x28C54000, 0x28C47480, - 0x28C3A900, 0x28C2DD80, 0x28C21200, - 0x28C14680, 0x28C07B00, 0x28BFAF80, - 0x28BEE400, 0x28BE1880, 0x28BD4D00, - 0x28BC8180, 0x28BBB600, 0x28BAEA80, - 0x28BA1F00, 0x28B95380, 0x28B88800, - 0x28B7BC80, 0x28B6F100, 0x28B62580, - 0x28B55A00, 0x28B48E80, 0x28B3C300, - 0x28B2F780, 0x28B22C00, 0x28B16080, - 0x28B09500, 0x28AFC980, 0x28AEFE00, - 0x28AE3280, 0x28AD6700, 0x28AC9B80, - 0x28ABD000, 0x28AB0480, 0x28AA3900, - 0x28A96D80, 0x28A8A200, 0x28A7D680, - 0x28A70B00, 0x28A63F80, 0x28A57400, - 0x28A4A880, 0x28A3DD00, 0x28A31180, - 0x28A24600, 0x28A17A80, 0x28A0AF00, - 0x289FE380, 0x289F1800, 0x289E4C80, - 0x289D8100, 0x289CB580, 0x289BEA00, - 0x289B1E80, 0x289A5300, 0x28998780, - 0x2898BC00, 0x2897F080, 0x28972500, - 0x28965980, 0x28958E00, 0x2894C280, - 0x2893F700, 0x28932B80, 0x28926000, - 0x28919480, 0x2890C900, 0x288FFD80, - 0x288F3200, 0x288E6680, 0x288D9B00, - 0x288CCF80, 0x288C0400, 0x288B3880, - 0x288A6D00, 0x2889A180, 0x2888D600, - 0x28880A80, 0x28873F00, 0x28867380, - 0x2885A800, 0x2884DC80, 0x28841100, - 0x28834580, 0x28827A00, 0x2881AE80, - 0x2880E300, 0x28801780, 0x287F4C00, - 0x287E8080, 0x287DB500, 0x287CE980, - 0x287C1E00, 0x287B5280, 0x287A8700, - 0x2879BB80, 0x2878F000, 0x28782480, - 0x28775900, 0x28768D80, 0x2875C200, - 0x2874F680, 0x28742B00, 0x28735F80, - 0x28729400, 0x2871C880, 0x2870FD00, - 0x28703180, 0x286F6600, 0x286E9A80, - 0x286DCF00, 0x286D0380, 0x286C3800, - 0x286B6C80, 0x286AA100, 0x2869D580, - 0x28690A00, 0x28683E80, 0x28677300, - 0x2866A780, 0x2865DC00, 0x28651080, - 0x28644500, 0x28637980, 0x2862AE00, - 0x2861E280, 0x28611700, 0x28604B80, - 0x285F8000, 0x285EB480, 0x285DE900, - 0x285D1D80, 0x285C5200, 0x285B8680, - 0x285ABB00, 0x2859EF80, 0x28592400, - 0x28585880, 0x28578D00, 0x2856C180, - 0x2855F600, 0x28552A80, 0x28545F00, - 0x28539380, 0x2852C800, 0x2851FC80, - 0x28513100, 0x28506580, 0x284F9A00, - 0x284ECE80, 0x284E0300, 0x284D3780, - 0x284C6C00, 0x284BA080, 0x284AD500, - 0x284A0980, 0x28493E00, 0x28487280, - 0x2847A700, 0x2846DB80, 0x28461000, - 0x28454480, 0x28447900, 0x2843AD80, - 0x2842E200, 0x28421680, 0x28414B00, - 0x28407F80, 0x283FB400, 0x283EE880, - 0x283E1D00, 0x283D5180, 0x283C8600, - 0x283BBA80, 0x283AEF00, 0x283A2380, - 0x28395800, 0x28388C80, 0x2837C100, - 0x2836F580, 0x28362A00, 0x28355E80, - 0x28349300, 0x2833C780, 0x2832FC00, - 0x28323080, 0x28316500, 0x28309980, - 0x282FCE00, 0x282F0280, 0x282E3700, - 0x282D6B80, 0x282CA000, 0x282BD480, - 0x282B0900, 0x282A3D80, 0x28297200, - 0x2828A680, 0x2827DB00, 0x28270F80, - 0x28264400, 0x28257880, 0x2824AD00, - 0x2823E180, 0x28231600, 0x28224A80, - 0x28217F00, 0x2820B380, 0x281FE800, - 0x281F1C80, 0x281E5100, 0x281D8580, - 0x281CBA00, 0x281BEE80, 0x281B2300, - 0x281A5780, 0x28198C00, 0x2818C080, - 0x2817F500, 0x28172980, 0x28165E00, - 0x28159280, 0x2814C700, 0x2813FB80, - 0x28133000, 0x28126480, 0x28119900, - 0x2810CD80, 0x28100200, 0x280F3680, - 0x280E6B00, 0x280D9F80, 0x280CD400, - 0x280C0880, 0x280B3D00, 0x280A7180, - 0x2809A600, 0x2808DA80, 0x28080F00, - 0x28074380, 0x28067800, 0x2805AC80, - 0x2804E100, 0x28041580, 0x28034A00, - 0x28027E80, 0x2801B300, 0x2800E780, - 0x28001C00, 0x27FF5080, 0x27FE8500, - 0x27FDB980, 0x27FCEE00, 0x27FC2280, - 0x27FB5700, 0x27FA8B80, 0x27F9C000, - 0x27F8F480, 0x27F82900, 0x27F75D80, - 0x27F69200, 0x27F5C680, 0x27F4FB00, - 0x27F42F80, 0x27F36400, 0x27F29880, - 0x27F1CD00, 0x27F10180, 0x27F03600, - 0x27EF6A80, 0x27EE9F00, 0x27EDD380, - 0x27ED0800, 0x27EC3C80, 0x27EB7100, - 0x27EAA580, 0x27E9DA00, 0x27E90E80, - 0x27E84300, 0x27E77780, 0x27E6AC00, - 0x27E5E080, 0x27E51500, 0x27E44980, - 0x27E37E00, 0x27E2B280, 0x27E1E700, - 0x27E11B80, 0x27E05000, 0x27DF8480, - 0x27DEB900, 0x27DDED80, 0x27DD2200, - 0x27DC5680, 0x27DB8B00, 0x27DABF80, - 0x27D9F400, 0x27D92880, 0x27D85D00, - 0x27D79180, 0x27D6C600, 0x27D5FA80, - 0x27D52F00, 0x27D46380, 0x27D39800, - 0x27D2CC80, 0x27D20100, 0x27D13580, - 0x27D06A00, 0x27CF9E80, 0x27CED300, - 0x27CE0780, 0x27CD3C00, 0x27CC7080, - 0x27CBA500, 0x27CAD980, 0x27CA0E00, - 0x27C94280, 0x27C87700, 0x27C7AB80, - 0x27C6E000, 0x27C61480, 0x27C54900, - 0x27C47D80, 0x27C3B200, 0x27C2E680, - 0x27C21B00, 0x27C14F80, 0x27C08400, - 0x27BFB880, 0x27BEED00, 0x27BE2180, - 0x27BD5600, 0x27BC8A80, 0x27BBBF00, - 0x27BAF380, 0x27BA2800, 0x27B95C80, - 0x27B89100, 0x27B7C580, 0x27B6FA00, - 0x27B62E80, 0x27B56300, 0x27B49780, - 0x27B3CC00, 0x27B30080, 0x27B23500, - 0x27B16980, 0x27B09E00, 0x27AFD280, - 0x27AF0700, 0x27AE3B80, 0x27AD7000, - 0x27ACA480, 0x27ABD900, 0x27AB0D80, - 0x27AA4200, 0x27A97680, 0x27A8AB00, - 0x27A7DF80, 0x27A71400, 0x27A64880, - 0x27A57D00, 0x27A4B180, 0x27A3E600, - 0x27A31A80, 0x27A24F00, 0x27A18380, - 0x27A0B800, 0x279FEC80, 0x279F2100, - 0x279E5580, 0x279D8A00, 0x279CBE80, - 0x279BF300, 0x279B2780, 0x279A5C00, - 0x27999080, 0x2798C500, 0x2797F980, - 0x27972E00, 0x27966280, 0x27959700, - 0x2794CB80, 0x27940000, 0x27934100, - 0x27928200, 0x2791C300, 0x27910400, - 0x27904500, 0x278F8600, 0x278EC700, - 0x278E0800, 0x278D4900, 0x278C8A00, - 0x278BCB00, 0x278B0C00, 0x278A4D00, - 0x27898E00, 0x2788CF00, 0x27881000, - 0x27875100, 0x27869200, 0x2785D300, - 0x27851400, 0x27845500, 0x27839600, - 0x2782D700, 0x27821800, 0x27815900, - 0x27809A00, 0x277FDB00, 0x277F1C00, - 0x277E5D00, 0x277D9E00, 0x277CDF00, - 0x277C2000, 0x277B6100, 0x277AA200, - 0x2779E300, 0x27792400, 0x27786500, - 0x2777A600, 0x2776E700, 0x27762800, - 0x27756900, 0x2774AA00, 0x2773EB00, - 0x27732C00, 0x27726D00, 0x2771AE00, - 0x2770EF00, 0x27703000, 0x276F7100, - 0x276EB200, 0x276DF300, 0x276D3400, - 0x276C7500, 0x276BB600, 0x276AF700, - 0x276A3800, 0x27697900, 0x2768BA00, - 0x2767FB00, 0x27673C00, 0x27667D00, - 0x2765BE00, 0x2764FF00, 0x27644000, - 0x27638100, 0x2762C200, 0x27620300, - 0x27614400, 0x27608500, 0x275FC600, - 0x275F0700, 0x275E4800, 0x275D8900, - 0x275CCA00, 0x275C0B00, 0x275B4C00, - 0x275A8D00, 0x2759CE00, 0x27590F00, - 0x27585000, 0x27579100, 0x2756D200, - 0x27561300, 0x27555400, 0x27549500, - 0x2753D600, 0x27531700, 0x27525800, - 0x27519900, 0x2750DA00, 0x27501B00, - 0x274F5C00, 0x274E9D00, 0x274DDE00, - 0x274D1F00, 0x274C6000, 0x274BA100, - 0x274AE200, 0x274A2300, 0x27496400, - 0x2748A500, 0x2747E600, 0x27472700, - 0x27466800, 0x2745A900, 0x2744EA00, - 0x27442B00, 0x27436C00, 0x2742AD00, - 0x2741EE00, 0x27412F00, 0x27407000, - 0x273FB100, 0x273EF200, 0x273E3300, - 0x273D7400, 0x273CB500, 0x273BF600, - 0x273B3700, 0x273A7800, 0x2739B900, - 0x2738FA00, 0x27383B00, 0x27377C00, - 0x2736BD00, 0x2735FE00, 0x27353F00, - 0x27348000, 0x2733C100, 0x27330200, - 0x27324300, 0x27318400, 0x2730C500, - 0x27300600, 0x272F4700, 0x272E8800, - 0x272DC900, 0x272D0A00, 0x272C4B00, - 0x272B8C00, 0x272ACD00, 0x272A0E00, - 0x27294F00, 0x27289000, 0x2727D100, - 0x27271200, 0x27265300, 0x27259400, - 0x2724D500, 0x27241600, 0x27235700, - 0x27229800, 0x2721D900, 0x27211A00, - 0x27205B00, 0x271F9C00, 0x271EDD00, - 0x271E1E00, 0x271D5F00, 0x271CA000, - 0x271BE100, 0x271B2200, 0x271A6300, - 0x2719A400, 0x2718E500, 0x27182600, - 0x27176700, 0x2716A800, 0x2715E900, - 0x27152A00, 0x27146B00, 0x2713AC00, - 0x2712ED00, 0x27122E00, 0x27116F00, - 0x2710B000, 0x270FF100, 0x270F3200, - 0x270E7300, 0x270DB400, 0x270CF500, - 0x270C3600, 0x270B7700, 0x270AB800, - 0x2709F900, 0x27093A00, 0x27087B00, - 0x2707BC00, 0x2706FD00, 0x27063E00, - 0x27057F00, 0x2704C000, 0x27040100, - 0x27034200, 0x27028300, 0x2701C400, - 0x27010500, 0x27004600, 0x26FF8700, - 0x26FEC800, 0x26FE0900, 0x26FD4A00, - 0x26FC8B00, 0x26FBCC00, 0x26FB0D00, - 0x26FA4E00, 0x26F98F00, 0x26F8D000, - 0x26F81100, 0x26F75200, 0x26F69300, - 0x26F5D400, 0x26F51500, 0x26F45600, - 0x26F39700, 0x26F2D800, 0x26F21900, - 0x26F15A00, 0x26F09B00, 0x26EFDC00, - 0x26EF1D00, 0x26EE5E00, 0x26ED9F00, - 0x26ECE000, 0x26EC2100, 0x26EB6200, - 0x26EAA300, 0x26E9E400, 0x26E92500, - 0x26E86600, 0x26E7A700, 0x26E6E800, - 0x26E62900, 0x26E56A00, 0x26E4AB00, - 0x26E3EC00, 0x26E32D00, 0x26E26E00, - 0x26E1AF00, 0x26E0F000, 0x26E03100, - 0x26DF7200, 0x26DEB300, 0x26DDF400, - 0x26DD3500, 0x26DC7600, 0x26DBB700, - 0x26DAF800, 0x26DA3900, 0x26D97A00, - 0x26D8BB00, 0x26D7FC00, 0x26D73D00, - 0x26D67E00, 0x26D5BF00, 0x26D50000, - 0x26D44100, 0x26D38200, 0x26D2C300, - 0x26D20400, 0x26D14500, 0x26D08600, - 0x26CFC700, 0x26CF0800, 0x26CE4900, - 0x26CD8A00, 0x26CCCB00, 0x26CC0C00, - 0x26CB4D00, 0x26CA8E00, 0x26C9CF00, - 0x26C91000, 0x26C85100, 0x26C79200, - 0x26C6D300, 0x26C61400, 0x26C55500, - 0x26C49600, 0x26C3D700, 0x26C31800, - 0x26C25900, 0x26C19A00, 0x26C0DB00, - 0x26C01C00, 0x26BF5D00, 0x26BE9E00, - 0x26BDDF00, 0x26BD2000, 0x26BC6100, - 0x26BBA200, 0x26BAE300, 0x26BA2400, - 0x26B96500, 0x26B8A600, 0x26B7E700, - 0x26B72800, 0x26B66900, 0x26B5AA00, - 0x26B4EB00, 0x26B42C00, 0x26B36D00, - 0x26B2AE00, 0x26B1EF00, 0x26B13000, - 0x26B07100, 0x26AFB200, 0x26AEF300, - 0x26AE3400, 0x26AD7500, 0x26ACB600, - 0x26ABF700, 0x26AB3800, 0x26AA7900, - 0x26A9BA00, 0x26A8FB00, 0x26A83C00, - 0x26A77D00, 0x26A6BE00, 0x26A5FF00, - 0x26A54000, 0x26A48100, 0x26A3C200, - 0x26A30300, 0x26A24400, 0x26A18500, - 0x26A0C600, 0x26A00700, 0x269F4800, - 0x269E8900, 0x269DCA00, 0x269D0B00, - 0x269C4C00, 0x269B8D00, 0x269ACE00, - 0x269A0F00, 0x26995000, 0x26989100, - 0x2697D200, 0x26971300, 0x26965400, - 0x26959500, 0x2694D600, 0x26941700, - 0x26935800, 0x26929900, 0x2691DA00, - 0x26911B00, 0x26905C00, 0x268F9D00, - 0x268EDE00, 0x268E1F00, 0x268D6000, - 0x268CA100, 0x268BE200, 0x268B2300, - 0x268A6400, 0x2689A500, 0x2688E600, - 0x26882700, 0x26876800, 0x2686A900, - 0x2685EA00, 0x26852B00, 0x26846C00, - 0x2683AD00, 0x2682EE00, 0x26822F00, - 0x26817000, 0x2680B100, 0x267FF200, - 0x267F3300, 0x267E7400, 0x267DB500, - 0x267CF600, 0x267C3700, 0x267B7800, - 0x267AB900, 0x2679FA00, 0x26793B00, - 0x26787C00, 0x2677BD00, 0x2676FE00, - 0x26763F00, 0x26758000, 0x2674C100, - 0x26740200, 0x26734300, 0x26728400, - 0x2671C500, 0x26710600, 0x26704700, - 0x266F8800, 0x266EC900, 0x266E0A00, - 0x266D4B00, 0x266C8C00, 0x266BCD00, - 0x266B0E00, 0x266A4F00, 0x26699000, - 0x2668D100, 0x26681200, 0x26675300, - 0x26669400, 0x2665D500, 0x26651600, - 0x26645700, 0x26639800, 0x2662D900, - 0x26621A00, 0x26615B00, 0x26609C00, - 0x265FDD00, 0x265F1E00, 0x265E5F00, - 0x265DA000, 0x265CE100, 0x265C2200, - 0x265B6300, 0x265AA400, 0x2659E500, - 0x26592600, 0x26586700, 0x2657A800, - 0x2656E900, 0x26562A00, 0x26556B00, - 0x2654AC00, 0x2653ED00, 0x26532E00, - 0x26526F00, 0x2651B000, 0x2650F100, - 0x26503200, 0x264F7300, 0x264EB400, - 0x264DF500, 0x264D3600, 0x264C7700, - 0x264BB800, 0x264AF900, 0x264A3A00, - 0x26497B00, 0x2648BC00, 0x2647FD00, - 0x26473E00, 0x26467F00, 0x2645C000, - 0x26450100, 0x26444200, 0x26438300, - 0x2642C400, 0x26420500, 0x26414600, - 0x26408700, 0x263FC800, 0x263F0900, - 0x263E4A00, 0x263D8B00, 0x263CCC00, - 0x263C0D00, 0x263B4E00, 0x263A8F00, - 0x2639D000, 0x26391100, 0x26385200, - 0x26379300, 0x2636D400, 0x26361500, - 0x26355600, 0x26349700, 0x2633D800, - 0x26331900, 0x26325A00, 0x26319B00, - 0x2630DC00, 0x26301D00, 0x262F5E00, - 0x262E9F00, 0x262DE000, 0x262D2100, - 0x262C6200, 0x262BA300, 0x262AE400, - 0x262A2500, 0x26296600, 0x2628A700, - 0x2627E800, 0x26272900, 0x26266A00, - 0x2625AB00, 0x2624EC00, 0x26242D00, - 0x26236E00, 0x2622AF00, 0x2621F000, - 0x26213100, 0x26207200, 0x261FB300, - 0x261EF400, 0x261E3500, 0x261D7600, - 0x261CB700, 0x261BF800, 0x261B3900, - 0x261A7A00, 0x2619BB00, 0x2618FC00, - 0x26183D00, 0x26177E00, 0x2616BF00, - 0x26160000, 0x26154100, 0x26148200, - 0x2613C300, 0x26130400, 0x26124500, - 0x26118600, 0x2610C700, 0x26100800, - 0x260F4900, 0x260E8A00, 0x260DCB00, - 0x260D0C00, 0x260C4D00, 0x260B8E00, - 0x260ACF00, 0x260A1000, 0x26095100, - 0x26089200, 0x2607D300, 0x26071400, - 0x26065500, 0x26059600, 0x2604D700, - 0x26041800, 0x26035900, 0x26029A00, - 0x2601DB00, 0x26011C00, 0x26005D00, - 0x25FF9E00, 0x25FEDF00, 0x25FE2000, - 0x25FD6100, 0x25FCA200, 0x25FBE300, - 0x25FB2400, 0x25FA6500, 0x25F9A600, - 0x25F8E700, 0x25F82800, 0x25F76900, - 0x25F6AA00, 0x25F5EB00, 0x25F52C00, - 0x25F46D00, 0x25F3AE00, 0x25F2EF00, - 0x25F23000, 0x25F17100, 0x25F0B200, - 0x25EFF300, 0x25EF3400, 0x25EE7500, - 0x25EDB600, 0x25ECF700, 0x25EC3800, - 0x25EB7900, 0x25EABA00, 0x25E9FB00, - 0x25E93C00, 0x25E87D00, 0x25E7BE00, - 0x25E6FF00, 0x25E64000, 0x25E58100, - 0x25E4C200, 0x25E40300, 0x25E34400, - 0x25E28500, 0x25E1C600, 0x25E10700, - 0x25E04800, 0x25DF8900, 0x25DECA00, - 0x25DE0B00, 0x25DD4C00, 0x25DC8D00, - 0x25DBCE00, 0x25DB0F00, 0x25DA5000, - 0x25D99100, 0x25D8D200, 0x25D81300, - 0x25D75400, 0x25D69500, 0x25D5D600, - 0x25D51700, 0x25D45800, 0x25D39900, - 0x25D2DA00, 0x25D21B00, 0x25D15C00, - 0x25D09D00, 0x25CFDE00, 0x25CF1F00, - 0x25CE6000, 0x25CDA100, 0x25CCE200, - 0x25CC2300, 0x25CB6400, 0x25CAA500, - 0x25C9E600, 0x25C92700, 0x25C86800, - 0x25C7A900, 0x25C6EA00, 0x25C62B00, - 0x25C56C00, 0x25C4AD00, 0x25C3EE00, - 0x25C32F00, 0x25C27000, 0x25C1B100, - 0x25C0F200, 0x25C03300, 0x25BF7400, - 0x25BEB500, 0x25BDF600, 0x25BD3700, - 0x25BC7800, 0x25BBB900, 0x25BAFA00, - 0x25BA3B00, 0x25B97C00, 0x25B8BD00, - 0x25B7FE00, 0x25B73F00, 0x25B68000, - 0x25B5C100, 0x25B50200, 0x25B44300, - 0x25B38400, 0x25B2C500, 0x25B20600, - 0x25B14700, 0x25B08800, 0x25AFC900, - 0x25AF0A00, 0x25AE4B00, 0x25AD8C00, - 0x25ACCD00, 0x25AC0E00, 0x25AB4F00, - 0x25AA9000, 0x25A9D100, 0x25A91200, - 0x25A85300, 0x25A79400, 0x25A6D500, - 0x25A61600, 0x25A55700, 0x25A49800, - 0x25A3D900, 0x25A31A00, 0x25A25B00, - 0x25A19C00, 0x25A0DD00, 0x25A01E00, - 0x259F5F00, 0x259EA000, 0x259DE100, - 0x259D2200, 0x259C6300, 0x259BA400, - 0x259AE500, 0x259A2600, 0x25996700, - 0x2598A800, 0x2597E900, 0x25972A00, - 0x25966B00, 0x2595AC00, 0x2594ED00, - 0x25942E00, 0x25936F00, 0x2592B000, - 0x2591F100, 0x25913200, 0x25907300, - 0x258FB400, 0x258EF500, 0x258E3600, - 0x258D7700, 0x258CB800, 0x258BF900, - 0x258B3A00, 0x258A7B00, 0x2589BC00, - 0x2588FD00, 0x25883E00, 0x25877F00, - 0x2586C000, 0x25860100, 0x25854200, - 0x25848300, 0x2583C400, 0x25830500, - 0x25824600, 0x25818700, 0x2580C800, - 0x25800900, 0x257F4A00, 0x257E8B00, - 0x257DCC00, 0x257D0D00, 0x257C4E00, - 0x257B8F00, 0x257AD000, 0x257A1100, - 0x25795200, 0x25789300, 0x2577D400, - 0x25771500, 0x25765600, 0x25759700, - 0x2574D800, 0x25741900, 0x25735A00, - 0x25729B00, 0x2571DC00, 0x25711D00, - 0x25705E00, 0x256F9F00, 0x256EE000, - 0x256E2100, 0x256D6200, 0x256CA300, - 0x256BE400, 0x256B2500, 0x256A6600, - 0x2569A700, 0x2568E800, 0x25682900, - 0x25676A00, 0x2566AB00, 0x2565EC00, - 0x25652D00, 0x25646E00, 0x2563AF00, - 0x2562F000, 0x25623100, 0x25617200, - 0x2560B300, 0x255FF400, 0x255F3500, - 0x255E7600, 0x255DB700, 0x255CF800, - 0x255C3900, 0x255B7A00, 0x255ABB00, - 0x2559FC00, 0x25593D00, 0x25587E00, - 0x2557BF00, 0x25570000, 0x25564100, - 0x25558200, 0x2554C300, 0x25540400, - 0x25534500, 0x25528600, 0x2551C700, - 0x25510800, 0x25504900, 0x254F8A00, - 0x254ECB00, 0x254E0C00, 0x254D4D00, - 0x254C8E00, 0x254BCF00, 0x254B1000, - 0x254A5100, 0x25499200, 0x2548D300, - 0x25481400, 0x25475500, 0x25469600, - 0x2545D700, 0x25451800, 0x25445900, - 0x25439A00, 0x2542DB00, 0x25421C00, - 0x25415D00, 0x25409E00, 0x253FDF00, - 0x253F2000, 0x253E6100, 0x253DA200, - 0x253CE300, 0x253C2400, 0x253B6500, - 0x253AA600, 0x2539E700, 0x25392800, - 0x25386900, 0x2537AA00, 0x2536EB00, - 0x25362C00, 0x25356D00, 0x2534AE00, - 0x2533EF00, 0x25333000, 0x25327100, - 0x2531B200, 0x2530F300, 0x25303400, - 0x252F7500, 0x252EB600, 0x252DF700, - 0x252D3800, 0x252C7900, 0x252BBA00, - 0x252AFB00, 0x252A3C00, 0x25297D00, - 0x2528BE00, 0x2527FF00, 0x25274000, - 0x25268100, 0x2525C200, 0x25250300, - 0x25244400, 0x25238500, 0x2522C600, - 0x25220700, 0x25214800, 0x25208900, - 0x251FCA00, 0x251F0B00, 0x251E4C00, - 0x251D8D00, 0x251CCE00, 0x251C0F00, - 0x251B5000, 0x251A9100, 0x2519D200, - 0x25191300, 0x25185400, 0x25179500, - 0x2516D600, 0x25161700, 0x25155800, - 0x25149900, 0x2513DA00, 0x25131B00, - 0x25125C00, 0x25119D00, 0x2510DE00, - 0x25101F00, 0x250F6000, 0x250EA100, - 0x250DE200, 0x250D2300, 0x250C6400, - 0x250BA500, 0x250AE600, 0x250A2700, - 0x25096800, 0x2508A900, 0x2507EA00, - 0x25072B00, 0x25066C00, 0x2505AD00, - 0x2504EE00, 0x25042F00, 0x25037000, - 0x2502B100, 0x2501F200, 0x25013300, - 0x25007400, 0x24FFB500, 0x24FEF600, - 0x24FE3700, 0x24FD7800, 0x24FCB900, - 0x24FBFA00, 0x24FB3B00, 0x24FA7C00, - 0x24F9BD00, 0x24F8FE00, 0x24F83F00, - 0x24F78000, 0x24F6C100, 0x24F60200, - 0x24F54300, 0x24F48400, 0x24F3C500, - 0x24F30600, 0x24F24700, 0x24F18800, - 0x24F0C900, 0x24F00A00, 0x24EF4B00, - 0x24EE8C00, 0x24EDCD00, 0x24ED0E00, - 0x24EC4F00, 0x24EB9000, 0x24EAD100, - 0x24EA1200, 0x24E95300, 0x24E89400, - 0x24E7D500, 0x24E71600, 0x24E65700, - 0x24E59800, 0x24E4D900, 0x24E41A00, - 0x24E35B00, 0x24E29C00, 0x24E1DD00, - 0x24E11E00, 0x24E05F00, 0x24DFA000, - 0x24DEE100, 0x24DE2200, 0x24DD6300, - 0x24DCA400, 0x24DBE500, 0x24DB2600, - 0x24DA6700, 0x24D9A800, 0x24D8E900, - 0x24D82A00, 0x24D76B00, 0x24D6AC00, - 0x24D5ED00, 0x24D52E00, 0x24D46F00, - 0x24D3B000, 0x24D2F100, 0x24D23200, - 0x24D17300, 0x24D0B400, 0x24CFF500, - 0x24CF3600, 0x24CE7700, 0x24CDB800, - 0x24CCF900, 0x24CC3A00, 0x24CB7B00, - 0x24CABC00, 0x24C9FD00, 0x24C93E00, - 0x24C87F00, 0x24C7C000, 0x24C70100, - 0x24C64200, 0x24C58300, 0x24C4C400, - 0x24C40500, 0x24C34600, 0x24C28700, - 0x24C1C800, 0x24C10900, 0x24C04A00, - 0x24BF8B00, 0x24BECC00, 0x24BE0D00, - 0x24BD4E00, 0x24BC8F00, 0x24BBD000, - 0x24BB1100, 0x24BA5200, 0x24B99300, - 0x24B8D400, 0x24B81500, 0x24B75600, - 0x24B69700, 0x24B5D800, 0x24B51900, - 0x24B45A00, 0x24B39B00, 0x24B2DC00, - 0x24B21D00, 0x24B15E00, 0x24B09F00, - 0x24AFE000, 0x24AF2100, 0x24AE6200, - 0x24ADA300, 0x24ACE400, 0x24AC2500, - 0x24AB6600, 0x24AAA700, 0x24A9E800, - 0x24A92900, 0x24A86A00, 0x24A7AB00, - 0x24A6EC00, 0x24A62D00, 0x24A56E00, - 0x24A4AF00, 0x24A3F000, 0x24A33100, - 0x24A27200, 0x24A1B300, 0x24A0F400, - 0x24A03500, 0x249F7600, 0x249EB700, - 0x249DF800, 0x249D3900, 0x249C7A00, - 0x249BBB00, 0x249AFC00, 0x249A3D00, - 0x24997E00, 0x2498BF00, 0x24980000, - 0x24974100, 0x24968200, 0x2495C300, - 0x24950400, 0x24944500, 0x24938600, - 0x2492C700, 0x24920800, 0x24914900, - 0x24908A00, 0x248FCB00, 0x248F0C00, - 0x248E4D00, 0x248D8E00, 0x248CCF00, - 0x248C1000, 0x248B5100, 0x248A9200, - 0x2489D300, 0x24891400, 0x24885500, - 0x24879600, 0x2486D700, 0x24861800, - 0x24855900, 0x24849A00, 0x2483DB00, - 0x24831C00, 0x24825D00, 0x24819E00, - 0x2480DF00, 0x24802000, 0x247F6100, - 0x247EA200, 0x247DE300, 0x247D2400, - 0x247C6500, 0x247BA600, 0x247AE700, - 0x247A2800, 0x24796900, 0x2478AA00, - 0x2477EB00, 0x24772C00, 0x24766D00, - 0x2475AE00, 0x2474EF00, 0x24743000, - 0x24737100, 0x2472B200, 0x2471F300, - 0x24713400, 0x24707500, 0x246FB600, - 0x246EF700, 0x246E3800, 0x246D7900, - 0x246CBA00, 0x246BFB00, 0x246B3C00, - 0x246A7D00, 0x2469BE00, 0x2468FF00, - 0x24684000, 0x24678100, 0x2466C200, - 0x24660300, 0x24654400, 0x24648500, - 0x2463C600, 0x24630700, 0x24624800, - 0x24618900, 0x2460CA00, 0x24600B00, - 0x245F4C00, 0x245E8D00, 0x245DCE00, - 0x245D0F00, 0x245C5000, 0x245B9100, - 0x245AD200, 0x245A1300, 0x24595400, - 0x24589500, 0x2457D600, 0x24571700, - 0x24565800, 0x24559900, 0x2454DA00, - 0x24541B00, 0x24535C00, 0x24529D00, - 0x2451DE00, 0x24511F00, 0x24506000, - 0x244FA100, 0x244EE200, 0x244E2300, - 0x244D6400, 0x244CA500, 0x244BE600, - 0x244B2700, 0x244A6800, 0x2449A900, - 0x2448EA00, 0x24482B00, 0x24476C00, - 0x2446AD00, 0x2445EE00, 0x24452F00, - 0x24447000, 0x2443B100, 0x2442F200, - 0x24423300, 0x24417400, 0x2440B500, - 0x243FF600, 0x243F3700, 0x243E7800, - 0x243DB900, 0x243CFA00, 0x243C3B00, - 0x243B7C00, 0x243ABD00, 0x2439FE00, - 0x24393F00, 0x24388000, 0x2437C100, - 0x24370200, 0x24364300, 0x24358400, - 0x2434C500, 0x24340600, 0x24334700, - 0x24328800, 0x2431C900, 0x24310A00, - 0x24304B00, 0x242F8C00, 0x242ECD00, - 0x242E0E00, 0x242D4F00, 0x242C9000, - 0x242BD100, 0x242B1200, 0x242A5300, - 0x24299400, 0x2428D500, 0x24281600, - 0x24275700, 0x24269800, 0x2425D900, - 0x24251A00, 0x24245B00, 0x24239C00, - 0x2422DD00, 0x24221E00, 0x24215F00, - 0x2420A000, 0x241FE100, 0x241F2200, - 0x241E6300, 0x241DA400, 0x241CE500, - 0x241C2600, 0x241B6700, 0x241AA800, - 0x2419E900, 0x24192A00, 0x24186B00, - 0x2417AC00, 0x2416ED00, 0x24162E00, - 0x24156F00, 0x2414B000, 0x2413F100, - 0x24133200, 0x24127300, 0x2411B400, - 0x2410F500, 0x24103600, 0x240F7700, - 0x240EB800, 0x240DF900, 0x240D3A00, - 0x240C7B00, 0x240BBC00, 0x240AFD00, - 0x240A3E00, 0x24097F00, 0x2408C000, - 0x24080100, 0x24074200, 0x24068300, - 0x2405C400, 0x24050500, 0x24044600, - 0x24038700, 0x2402C800, 0x24020900, - 0x24014A00, 0x24008B00, 0x23FFCC00, - 0x23FF0D00, 0x23FE4E00, 0x23FD8F00, - 0x23FCD000, 0x23FC1100, 0x23FB5200, - 0x23FA9300, 0x23F9D400, 0x23F91500, - 0x23F85600, 0x23F79700, 0x23F6D800, - 0x23F61900, 0x23F55A00, 0x23F49B00, - 0x23F3DC00, 0x23F31D00, 0x23F25E00, - 0x23F19F00, 0x23F0E000, 0x23F02100, - 0x23EF6200, 0x23EEA300, 0x23EDE400, - 0x23ED2500, 0x23EC6600, 0x23EBA700, - 0x23EAE800, 0x23EA2900, 0x23E96A00, - 0x23E8AB00, 0x23E7EC00, 0x23E72D00, - 0x23E66E00, 0x23E5AF00, 0x23E4F000, - 0x23E43100, 0x23E37200, 0x23E2B300, - 0x23E1F400, 0x23E13500, 0x23E07600, - 0x23DFB700, 0x23DEF800, 0x23DE3900, - 0x23DD7A00, 0x23DCBB00, 0x23DBFC00, - 0x23DB3D00, 0x23DA7E00, 0x23D9BF00, - 0x23D90000, 0x23D84100, 0x23D78200, - 0x23D6C300, 0x23D60400, 0x23D54500, - 0x23D48600, 0x23D3C700, 0x23D30800, - 0x23D24900, 0x23D18A00, 0x23D0CB00, - 0x23D00C00, 0x23CF4D00, 0x23CE8E00, - 0x23CDCF00, 0x23CD1000, 0x23CC5100, - 0x23CB9200, 0x23CAD300, 0x23CA1400, - 0x23C95500, 0x23C89600, 0x23C7D700, - 0x23C71800, 0x23C65900, 0x23C59A00, - 0x23C4DB00, 0x23C41C00, 0x23C35D00, - 0x23C29E00, 0x23C1DF00, 0x23C12000, - 0x23C06100, 0x23BFA200, 0x23BEE300, - 0x23BE2400, 0x23BD6500, 0x23BCA600, - 0x23BBE700, 0x23BB2800, 0x23BA6900, - 0x23B9AA00, 0x23B8EB00, 0x23B82C00, - 0x23B76D00, 0x23B6AE00, 0x23B5EF00, - 0x23B53000, 0x23B47100, 0x23B3B200, - 0x23B2F300, 0x23B23400, 0x23B17500, - 0x23B0B600, 0x23AFF700, 0x23AF3800, - 0x23AE7900, 0x23ADBA00, 0x23ACFB00, - 0x23AC3C00, 0x23AB7D00, 0x23AABE00, - 0x23A9FF00, 0x23A94000, 0x23A88100, - 0x23A7C200, 0x23A70300, 0x23A64400, - 0x23A58500, 0x23A4C600, 0x23A40700, - 0x23A34800, 0x23A28900, 0x23A1CA00, - 0x23A10B00, 0x23A04C00, 0x239F8D00, - 0x239ECE00, 0x239E0F00, 0x239D5000, - 0x239C9100, 0x239BD200, 0x239B1300, - 0x239A5400, 0x23999500, 0x2398D600, - 0x23981700, 0x23975800, 0x23969900, - 0x2395DA00, 0x23951B00, 0x23945C00, - 0x23939D00, 0x2392DE00, 0x23921F00, - 0x23916000, 0x2390A100, 0x238FE200, - 0x238F2300, 0x238E6400, 0x238DA500, - 0x238CE600, 0x238C2700, 0x238B6800, - 0x238AA900, 0x2389EA00, 0x23892B00, - 0x23886C00, 0x2387AD00, 0x2386EE00, - 0x23862F00, 0x23857000, 0x2384B100, - 0x2383F200, 0x23833300, 0x23827400, - 0x2381B500, 0x2380F600, 0x23803700, - 0x237F7800, 0x237EB900, 0x237DFA00, - 0x237D3B00, 0x237C7C00, 0x237BBD00, - 0x237AFE00, 0x237A3F00, 0x23798000, - 0x2378C100, 0x23780200, 0x23774300, - 0x23768400, 0x2375C500, 0x23750600, - 0x23744700, 0x23738800, 0x2372C900, - 0x23720A00, 0x23714B00, 0x23708C00, - 0x236FCD00, 0x236F0E00, 0x236E4F00, - 0x236D9000, 0x236CD100, 0x236C1200, - 0x236B5300, 0x236A9400, 0x2369D500, - 0x23691600, 0x23685700, 0x23679800, - 0x2366D900, 0x23661A00, 0x23655B00, - 0x23649C00, 0x2363DD00, 0x23631E00, - 0x23625F00, 0x2361A000, 0x2360E100, - 0x23602200, 0x235F6300, 0x235EA400, - 0x235DE500, 0x235D2600, 0x235C6700, - 0x235BA800, 0x235AE900, 0x235A2A00, - 0x23596B00, 0x2358AC00, 0x2357ED00, - 0x23572E00, 0x23566F00, 0x2355B000, - 0x2354F100, 0x23543200, 0x23537300, - 0x2352B400, 0x2351F500, 0x23513600, - 0x23507700, 0x234FB800, 0x234EF900, - 0x234E3A00, 0x234D7B00, 0x234CBC00, - 0x234BFD00, 0x234B3E00, 0x234A7F00, - 0x2349C000, 0x23490100, 0x23484200, - 0x23478300, 0x2346C400, 0x23460500, - 0x23454600, 0x23448700, 0x2343C800, - 0x23430900, 0x23424A00, 0x23418B00, - 0x2340CC00, 0x23400D00, 0x233F4E00, - 0x233E8F00, 0x233DD000, 0x233D1100, - 0x233C5200, 0x233B9300, 0x233AD400, - 0x233A1500, 0x23395600, 0x23389700, - 0x2337D800, 0x23371900, 0x23365A00, - 0x23359B00, 0x2334DC00, 0x23341D00, - 0x23335E00, 0x23329F00, 0x2331E000, - 0x23312100, 0x23306200, 0x232FA300, - 0x232EE400, 0x232E2500, 0x232D6600, - 0x232CA700, 0x232BE800, 0x232B2900, - 0x232A6A00, 0x2329AB00, 0x2328EC00, - 0x23282D00, 0x23276E00, 0x2326AF00, - 0x2325F000, 0x23253100, 0x23247200, - 0x2323B300, 0x2322F400, 0x23223500, - 0x23217600, 0x2320B700, 0x231FF800, - 0x231F3900, 0x231E7A00, 0x231DBB00, - 0x231CFC00, 0x231C3D00, 0x231B7E00, - 0x231ABF00, 0x231A0000, 0x23194100, - 0x23188200, 0x2317C300, 0x23170400, - 0x23164500, 0x23158600, 0x2314C700, - 0x23140800, 0x23134900, 0x23128A00, - 0x2311CB00, 0x23110C00, 0x23104D00, - 0x230F8E00, 0x230ECF00, 0x230E1000, - 0x230D5100, 0x230C9200, 0x230BD300, - 0x230B1400, 0x230A5500, 0x23099600, - 0x2308D700, 0x23081800, 0x23075900, - 0x23069A00, 0x2305DB00, 0x23051C00, - 0x23045D00, 0x23039E00, 0x2302DF00, - 0x23022000, 0x23016100, 0x2300A200, - 0x22FFE300, 0x22FF2400, 0x22FE6500, - 0x22FDA600, 0x22FCE700, 0x22FC2800, - 0x22FB6900, 0x22FAAA00, 0x22F9EB00, - 0x22F92C00, 0x22F86D00, 0x22F7AE00, - 0x22F6EF00, 0x22F63000, 0x22F57100, - 0x22F4B200, 0x22F3F300, 0x22F33400, - 0x22F27500, 0x22F1B600, 0x22F0F700, - 0x22F03800, 0x22EF7900, 0x22EEBA00, - 0x22EDFB00, 0x22ED3C00, 0x22EC7D00, - 0x22EBBE00, 0x22EAFF00, 0x22EA4000, - 0x22E98100, 0x22E8C200, 0x22E80300, - 0x22E74400, 0x22E68500, 0x22E5C600, - 0x22E50700, 0x22E44800, 0x22E38900, - 0x22E2CA00, 0x22E20B00, 0x22E14C00, - 0x22E08D00, 0x22DFCE00, 0x22DF0F00, - 0x22DE5000, 0x22DD9100, 0x22DCD200, - 0x22DC1300, 0x22DB5400, 0x22DA9500, - 0x22D9D600, 0x22D91700, 0x22D85800, - 0x22D79900, 0x22D6DA00, 0x22D61B00, - 0x22D55C00, 0x22D49D00, 0x22D3DE00, - 0x22D31F00, 0x22D26000, 0x22D1A100, - 0x22D0E200, 0x22D02300, 0x22CF6400, - 0x22CEA500, 0x22CDE600, 0x22CD2700, - 0x22CC6800, 0x22CBA900, 0x22CAEA00, - 0x22CA2B00, 0x22C96C00, 0x22C8AD00, - 0x22C7EE00, 0x22C72F00, 0x22C67000, - 0x22C5B100, 0x22C4F200, 0x22C43300, - 0x22C37400, 0x22C2B500, 0x22C1F600, - 0x22C13700, 0x22C07800, 0x22BFB900, - 0x22BEFA00, 0x22BE3B00, 0x22BD7C00, - 0x22BCBD00, 0x22BBFE00, 0x22BB3F00, - 0x22BA8000, 0x22B9C100, 0x22B90200, - 0x22B84300, 0x22B78400, 0x22B6C500, - 0x22B60600, 0x22B54700, 0x22B48800, - 0x22B3C900, 0x22B30A00, 0x22B24B00, - 0x22B18C00, 0x22B0CD00, 0x22B00E00, - 0x22AF4F00, 0x22AE9000, 0x22ADD100, - 0x22AD1200, 0x22AC5300, 0x22AB9400, - 0x22AAD500, 0x22AA1600, 0x22A95700, - 0x22A89800, 0x22A7D900, 0x22A71A00, - 0x22A65B00, 0x22A59C00, 0x22A4DD00, - 0x22A41E00, 0x22A35F00, 0x22A2A000, - 0x22A1E100, 0x22A12200, 0x22A06300, - 0x229FA400, 0x229EE500, 0x229E2600, - 0x229D6700, 0x229CA800, 0x229BE900, - 0x229B2A00, 0x229A6B00, 0x2299AC00, - 0x2298ED00, 0x22982E00, 0x22976F00, - 0x2296B000, 0x2295F100, 0x22953200, - 0x22947300, 0x2293B400, 0x2292F500, - 0x22923600, 0x22917700, 0x2290B800, - 0x228FF900, 0x228F3A00, 0x228E7B00, - 0x228DBC00, 0x228CFD00, 0x228C3E00, - 0x228B7F00, 0x228AC000, 0x228A0100, - 0x22894200, 0x22888300, 0x2287C400, - 0x22870500, 0x22864600, 0x22858700, - 0x2284C800, 0x22840900, 0x22834A00, - 0x22828B00, 0x2281CC00, 0x22810D00, - 0x22804E00, 0x227F8F00, 0x227ED000, - 0x227E1100, 0x227D5200, 0x227C9300, - 0x227BD400, 0x227B1500, 0x227A5600, - 0x22799700, 0x2278D800, 0x22781900, - 0x22775A00, 0x22769B00, 0x2275DC00, - 0x22751D00, 0x22745E00, 0x22739F00, - 0x2272E000, 0x22722100, 0x22716200, - 0x2270A300, 0x226FE400, 0x226F2500, - 0x226E6600, 0x226DA700, 0x226CE800, - 0x226C2900, 0x226B6A00, 0x226AAB00, - 0x2269EC00, 0x22692D00, 0x22686E00, - 0x2267AF00, 0x2266F000, 0x22663100, - 0x22657200, 0x2264B300, 0x2263F400, - 0x22633500, 0x22627600, 0x2261B700, - 0x2260F800, 0x22603900, 0x225F7A00, - 0x225EBB00, 0x225DFC00, 0x225D3D00, - 0x225C7E00, 0x225BBF00, 0x225B0000, - 0x225A4100, 0x22598200, 0x2258C300, - 0x22580400, 0x22574500, 0x22568600, - 0x2255C700, 0x22550800, 0x22544900, - 0x22538A00, 0x2252CB00, 0x22520C00, - 0x22514D00, 0x22508E00, 0x224FCF00, - 0x224F1000, 0x224E5100, 0x224D9200, - 0x224CD300, 0x224C1400, 0x224B5500, - 0x224A9600, 0x2249D700, 0x22491800, - 0x22485900, 0x22479A00, 0x2246DB00, - 0x22461C00, 0x22455D00, 0x22449E00, - 0x2243DF00, 0x22432000, 0x22426100, - 0x2241A200, 0x2240E300, 0x22402400, - 0x223F6500, 0x223EA600, 0x223DE700, - 0x223D2800, 0x223C6900, 0x223BAA00, - 0x223AEB00, 0x223A2C00, 0x22396D00, - 0x2238AE00, 0x2237EF00, 0x22373000, - 0x22367100, 0x2235B200, 0x2234F300, - 0x22343400, 0x22337500, 0x2232B600, - 0x2231F700, 0x22313800, 0x22307900, - 0x222FBA00, 0x222EFB00, 0x222E3C00, - 0x222D7D00, 0x222CBE00, 0x222BFF00, - 0x222B4000, 0x222A8100, 0x2229C200, - 0x22290300, 0x22284400, 0x22278500, - 0x2226C600, 0x22260700, 0x22254800, - 0x22248900, 0x2223CA00, 0x22230B00, - 0x22224C00, 0x22218D00, 0x2220CE00, - 0x22200F00, 0x221F5000, 0x221E9100, - 0x221DD200, 0x221D1300, 0x221C5400, - 0x221B9500, 0x221AD600, 0x221A1700, - 0x22195800, 0x22189900, 0x2217DA00, - 0x22171B00, 0x22165C00, 0x22159D00, - 0x2214DE00, 0x22141F00, 0x22136000, - 0x2212A100, 0x2211E200, 0x22112300, - 0x22106400, 0x220FA500, 0x220EE600, - 0x220E2700, 0x220D6800, 0x220CA900, - 0x220BEA00, 0x220B2B00, 0x220A6C00, - 0x2209AD00, 0x2208EE00, 0x22082F00, - 0x22077000, 0x2206B100, 0x2205F200, - 0x22053300, 0x22047400, 0x2203B500, - 0x2202F600, 0x22023700, 0x22017800, - 0x2200B900, 0x21FFFA00, 0x21FF3B00, - 0x21FE7C00, 0x21FDBD00, 0x21FCFE00, - 0x21FC3F00, 0x21FB8000, 0x21FAC100, - 0x21FA0200, 0x21F94300, 0x21F88400, - 0x21F7C500, 0x21F70600, 0x21F64700, - 0x21F58800, 0x21F4C900, 0x21F40A00, - 0x21F34B00, 0x21F28C00, 0x21F1CD00, - 0x21F10E00, 0x21F04F00, 0x21EF9000, - 0x21EED100, 0x21EE1200, 0x21ED5300, - 0x21EC9400, 0x21EBD500, 0x21EB1600, - 0x21EA5700, 0x21E99800, 0x21E8D900, - 0x21E81A00, 0x21E75B00, 0x21E69C00, - 0x21E5DD00, 0x21E51E00, 0x21E45F00, - 0x21E3A000, 0x21E2E100, 0x21E22200, - 0x21E16300, 0x21E0A400, 0x21DFE500, - 0x21DF2600, 0x21DE6700, 0x21DDA800, - 0x21DCE900, 0x21DC2A00, 0x21DB6B00, - 0x21DAAC00, 0x21D9ED00, 0x21D92E00, - 0x21D86F00, 0x21D7B000, 0x21D6F100, - 0x21D63200, 0x21D57300, 0x21D4B400, - 0x21D3F500, 0x21D33600, 0x21D27700, - 0x21D1B800, 0x21D0F900, 0x21D03A00, - 0x21CF7B00, 0x21CEBC00, 0x21CDFD00, - 0x21CD3E00, 0x21CC7F00, 0x21CBC000, - 0x21CB0100, 0x21CA4200, 0x21C98300, - 0x21C8C400, 0x21C80500, 0x21C74600, - 0x21C68700, 0x21C5C800, 0x21C50900, - 0x21C44A00, 0x21C38B00, 0x21C2CC00, - 0x21C20D00, 0x21C14E00, 0x21C08F00, - 0x21BFD000, 0x21BF1100, 0x21BE5200, - 0x21BD9300, 0x21BCD400, 0x21BC1500, - 0x21BB5600, 0x21BA9700, 0x21B9D800, - 0x21B91900, 0x21B85A00, 0x21B79B00, - 0x21B6DC00, 0x21B61D00, 0x21B55E00, - 0x21B49F00, 0x21B3E000, 0x21B32100, - 0x21B26200, 0x21B1A300, 0x21B0E400, - 0x21B02500, 0x21AF6600, 0x21AEA700, - 0x21ADE800, 0x21AD2900, 0x21AC6A00, - 0x21ABAB00, 0x21AAEC00, 0x21AA2D00, - 0x21A96E00, 0x21A8AF00, 0x21A7F000, - 0x21A73100, 0x21A67200, 0x21A5B300, - 0x21A4F400, 0x21A43500, 0x21A37600, - 0x21A2B700, 0x21A1F800, 0x21A13900, - 0x21A07A00, 0x219FBB00, 0x219EFC00, - 0x219E3D00, 0x219D7E00, 0x219CBF00, - 0x219C0000, 0x219B4C00, 0x219A9800, - 0x2199E400, 0x21993000, 0x21987C00, - 0x2197C800, 0x21971400, 0x21966000, - 0x2195AC00, 0x2194F800, 0x21944400, - 0x21939000, 0x2192DC00, 0x21922800, - 0x21917400, 0x2190C000, 0x21900C00, - 0x218F5800, 0x218EA400, 0x218DF000, - 0x218D3C00, 0x218C8800, 0x218BD400, - 0x218B2000, 0x218A6C00, 0x2189B800, - 0x21890400, 0x21885000, 0x21879C00, - 0x2186E800, 0x21863400, 0x21858000, - 0x2184CC00, 0x21841800, 0x21836400, - 0x2182B000, 0x2181FC00, 0x21814800, - 0x21809400, 0x217FE000, 0x217F2C00, - 0x217E7800, 0x217DC400, 0x217D1000, - 0x217C5C00, 0x217BA800, 0x217AF400, - 0x217A4000, 0x21798C00, 0x2178D800, - 0x21782400, 0x21777000, 0x2176BC00, - 0x21760800, 0x21755400, 0x2174A000, - 0x2173EC00, 0x21733800, 0x21728400, - 0x2171D000, 0x21711C00, 0x21706800, - 0x216FB400, 0x216F0000, 0x216E4C00, - 0x216D9800, 0x216CE400, 0x216C3000, - 0x216B7C00, 0x216AC800, 0x216A1400, - 0x21696000, 0x2168AC00, 0x2167F800, - 0x21674400, 0x21669000, 0x2165DC00, - 0x21652800, 0x21647400, 0x2163C000, - 0x21630C00, 0x21625800, 0x2161A400, - 0x2160F000, 0x21603C00, 0x215F8800, - 0x215ED400, 0x215E2000, 0x215D6C00, - 0x215CB800, 0x215C0400, 0x215B5000, - 0x215A9C00, 0x2159E800, 0x21593400, - 0x21588000, 0x2157CC00, 0x21571800, - 0x21566400, 0x2155B000, 0x2154FC00, - 0x21544800, 0x21539400, 0x2152E000, - 0x21522C00, 0x21517800, 0x2150C400, - 0x21501000, 0x214F5C00, 0x214EA800, - 0x214DF400, 0x214D4000, 0x214C8C00, - 0x214BD800, 0x214B2400, 0x214A7000, - 0x2149BC00, 0x21490800, 0x21485400, - 0x2147A000, 0x2146EC00, 0x21463800, - 0x21458400, 0x2144D000, 0x21441C00, - 0x21436800, 0x2142B400, 0x21420000, - 0x21414C00, 0x21409800, 0x213FE400, - 0x213F3000, 0x213E7C00, 0x213DC800, - 0x213D1400, 0x213C6000, 0x213BAC00, - 0x213AF800, 0x213A4400, 0x21399000, - 0x2138DC00, 0x21382800, 0x21377400, - 0x2136C000, 0x21360C00, 0x21355800, - 0x2134A400, 0x2133F000, 0x21333C00, - 0x21328800, 0x2131D400, 0x21312000, - 0x21306C00, 0x212FB800, 0x212F0400, - 0x212E5000, 0x212D9C00, 0x212CE800, - 0x212C3400, 0x212B8000, 0x212ACC00, - 0x212A1800, 0x21296400, 0x2128B000, - 0x2127FC00, 0x21274800, 0x21269400, - 0x2125E000, 0x21252C00, 0x21247800, - 0x2123C400, 0x21231000, 0x21225C00, - 0x2121A800, 0x2120F400, 0x21204000, - 0x211F8C00, 0x211ED800, 0x211E2400, - 0x211D7000, 0x211CBC00, 0x211C0800, - 0x211B5400, 0x211AA000, 0x2119EC00, - 0x21193800, 0x21188400, 0x2117D000, - 0x21171C00, 0x21166800, 0x2115B400, - 0x21150000, 0x21144C00, 0x21139800, - 0x2112E400, 0x21123000, 0x21117C00, - 0x2110C800, 0x21101400, 0x210F6000, - 0x210EAC00, 0x210DF800, 0x210D4400, - 0x210C9000, 0x210BDC00, 0x210B2800, - 0x210A7400, 0x2109C000, 0x21090C00, - 0x21085800, 0x2107A400, 0x2106F000, - 0x21063C00, 0x21058800, 0x2104D400, - 0x21042000, 0x21036C00, 0x2102B800, - 0x21020400, 0x21015000, 0x21009C00, - 0x20FFE800, 0x20FF3400, 0x20FE8000, - 0x20FDCC00, 0x20FD1800, 0x20FC6400, - 0x20FBB000, 0x20FAFC00, 0x20FA4800, - 0x20F99400, 0x20F8E000, 0x20F82C00, - 0x20F77800, 0x20F6C400, 0x20F61000, - 0x20F55C00, 0x20F4A800, 0x20F3F400, - 0x20F34000, 0x20F28C00, 0x20F1D800, - 0x20F12400, 0x20F07000, 0x20EFBC00, - 0x20EF0800, 0x20EE5400, 0x20EDA000, - 0x20ECEC00, 0x20EC3800, 0x20EB8400, - 0x20EAD000, 0x20EA1C00, 0x20E96800, - 0x20E8B400, 0x20E80000, 0x20E74C00, - 0x20E69800, 0x20E5E400, 0x20E53000, - 0x20E47C00, 0x20E3C800, 0x20E31400, - 0x20E26000, 0x20E1AC00, 0x20E0F800, - 0x20E04400, 0x20DF9000, 0x20DEDC00, - 0x20DE2800, 0x20DD7400, 0x20DCC000, - 0x20DC0C00, 0x20DB5800, 0x20DAA400, - 0x20D9F000, 0x20D93C00, 0x20D88800, - 0x20D7D400, 0x20D72000, 0x20D66C00, - 0x20D5B800, 0x20D50400, 0x20D45000, - 0x20D39C00, 0x20D2E800, 0x20D23400, - 0x20D18000, 0x20D0CC00, 0x20D01800, - 0x20CF6400, 0x20CEB000, 0x20CDFC00, - 0x20CD4800, 0x20CC9400, 0x20CBE000, - 0x20CB2C00, 0x20CA7800, 0x20C9C400, - 0x20C91000, 0x20C85C00, 0x20C7A800, - 0x20C6F400, 0x20C64000, 0x20C58C00, - 0x20C4D800, 0x20C42400, 0x20C37000, - 0x20C2BC00, 0x20C20800, 0x20C15400, - 0x20C0A000, 0x20BFEC00, 0x20BF3800, - 0x20BE8400, 0x20BDD000, 0x20BD1C00, - 0x20BC6800, 0x20BBB400, 0x20BB0000, - 0x20BA4C00, 0x20B99800, 0x20B8E400, - 0x20B83000, 0x20B77C00, 0x20B6C800, - 0x20B61400, 0x20B56000, 0x20B4AC00, - 0x20B3F800, 0x20B34400, 0x20B29000, - 0x20B1DC00, 0x20B12800, 0x20B07400, - 0x20AFC000, 0x20AF0C00, 0x20AE5800, - 0x20ADA400, 0x20ACF000, 0x20AC3C00, - 0x20AB8800, 0x20AAD400, 0x20AA2000, - 0x20A96C00, 0x20A8B800, 0x20A80400, - 0x20A75000, 0x20A69C00, 0x20A5E800, - 0x20A53400, 0x20A48000, 0x20A3CC00, - 0x20A31800, 0x20A26400, 0x20A1B000, - 0x20A0FC00, 0x20A04800, 0x209F9400, - 0x209EE000, 0x209E2C00, 0x209D7800, - 0x209CC400, 0x209C1000, 0x209B5C00, - 0x209AA800, 0x2099F400, 0x20994000, - 0x20988C00, 0x2097D800, 0x20972400, - 0x20967000, 0x2095BC00, 0x20950800, - 0x20945400, 0x2093A000, 0x2092EC00, - 0x20923800, 0x20918400, 0x2090D000, - 0x20901C00, 0x208F6800, 0x208EB400, - 0x208E0000, 0x208D4C00, 0x208C9800, - 0x208BE400, 0x208B3000, 0x208A7C00, - 0x2089C800, 0x20891400, 0x20886000, - 0x2087AC00, 0x2086F800, 0x20864400, - 0x20859000, 0x2084DC00, 0x20842800, - 0x20837400, 0x2082C000, 0x20820C00, - 0x20815800, 0x2080A400, 0x207FF000, - 0x207F3C00, 0x207E8800, 0x207DD400, - 0x207D2000, 0x207C6C00, 0x207BB800, - 0x207B0400, 0x207A5000, 0x20799C00, - 0x2078E800, 0x20783400, 0x20778000, - 0x2076CC00, 0x20761800, 0x20756400, - 0x2074B000, 0x2073FC00, 0x20734800, - 0x20729400, 0x2071E000, 0x20712C00, - 0x20707800, 0x206FC400, 0x206F1000, - 0x206E5C00, 0x206DA800, 0x206CF400, - 0x206C4000, 0x206B8C00, 0x206AD800, - 0x206A2400, 0x20697000, 0x2068BC00, - 0x20680800, 0x20675400, 0x2066A000, - 0x2065EC00, 0x20653800, 0x20648400, - 0x2063D000, 0x20631C00, 0x20626800, - 0x2061B400, 0x20610000, 0x20604C00, - 0x205F9800, 0x205EE400, 0x205E3000, - 0x205D7C00, 0x205CC800, 0x205C1400, - 0x205B6000, 0x205AAC00, 0x2059F800, - 0x20594400, 0x20589000, 0x2057DC00, - 0x20572800, 0x20567400, 0x2055C000, - 0x20550C00, 0x20545800, 0x2053A400, - 0x2052F000, 0x20523C00, 0x20518800, - 0x2050D400, 0x20502000, 0x204F6C00, - 0x204EB800, 0x204E0400, 0x204D5000, - 0x204C9C00, 0x204BE800, 0x204B3400, - 0x204A8000, 0x2049CC00, 0x20491800, - 0x20486400, 0x2047B000, 0x2046FC00, - 0x20464800, 0x20459400, 0x2044E000, - 0x20442C00, 0x20437800, 0x2042C400, - 0x20421000, 0x20415C00, 0x2040A800, - 0x203FF400, 0x203F4000, 0x203E8C00, - 0x203DD800, 0x203D2400, 0x203C7000, - 0x203BBC00, 0x203B0800, 0x203A5400, - 0x2039A000, 0x2038EC00, 0x20383800, - 0x20378400, 0x2036D000, 0x20361C00, - 0x20356800, 0x2034B400, 0x20340000, - 0x20334C00, 0x20329800, 0x2031E400, - 0x20313000, 0x20307C00, 0x202FC800, - 0x202F1400, 0x202E6000, 0x202DAC00, - 0x202CF800, 0x202C4400, 0x202B9000, - 0x202ADC00, 0x202A2800, 0x20297400, - 0x2028C000, 0x20280C00, 0x20275800, - 0x2026A400, 0x2025F000, 0x20253C00, - 0x20248800, 0x2023D400, 0x20232000, - 0x20226C00, 0x2021B800, 0x20210400, - 0x20205000, 0x201F9C00, 0x201EE800, - 0x201E3400, 0x201D8000, 0x201CCC00, - 0x201C1800, 0x201B6400, 0x201AB000, - 0x2019FC00, 0x20194800, 0x20189400, - 0x2017E000, 0x20172C00, 0x20167800, - 0x2015C400, 0x20151000, 0x20145C00, - 0x2013A800, 0x2012F400, 0x20124000, - 0x20118C00, 0x2010D800, 0x20102400, - 0x200F7000, 0x200EBC00, 0x200E0800, - 0x200D5400, 0x200CA000, 0x200BEC00, - 0x200B3800, 0x200A8400, 0x2009D000, - 0x20091C00, 0x20086800, 0x2007B400, - 0x20070000, 0x20064C00, 0x20059800, - 0x2004E400, 0x20043000, 0x20037C00, - 0x2002C800, 0x20021400, 0x20016000, - 0x2000AC00, 0x1FFFF800, 0x1FFF4400, - 0x1FFE9000, 0x1FFDDC00, 0x1FFD2800, - 0x1FFC7400, 0x1FFBC000, 0x1FFB0C00, - 0x1FFA5800, 0x1FF9A400, 0x1FF8F000, - 0x1FF83C00, 0x1FF78800, 0x1FF6D400, - 0x1FF62000, 0x1FF56C00, 0x1FF4B800, - 0x1FF40400, 0x1FF35000, 0x1FF29C00, - 0x1FF1E800, 0x1FF13400, 0x1FF08000, - 0x1FEFCC00, 0x1FEF1800, 0x1FEE6400, - 0x1FEDB000, 0x1FECFC00, 0x1FEC4800, - 0x1FEB9400, 0x1FEAE000, 0x1FEA2C00, - 0x1FE97800, 0x1FE8C400, 0x1FE81000, - 0x1FE75C00, 0x1FE6A800, 0x1FE5F400, - 0x1FE54000, 0x1FE48C00, 0x1FE3D800, - 0x1FE32400, 0x1FE27000, 0x1FE1BC00, - 0x1FE10800, 0x1FE05400, 0x1FDFA000, - 0x1FDEEC00, 0x1FDE3800, 0x1FDD8400, - 0x1FDCD000, 0x1FDC1C00, 0x1FDB6800, - 0x1FDAB400, 0x1FDA0000, 0x1FD94C00, - 0x1FD89800, 0x1FD7E400, 0x1FD73000, - 0x1FD67C00, 0x1FD5C800, 0x1FD51400, - 0x1FD46000, 0x1FD3AC00, 0x1FD2F800, - 0x1FD24400, 0x1FD19000, 0x1FD0DC00, - 0x1FD02800, 0x1FCF7400, 0x1FCEC000, - 0x1FCE0C00, 0x1FCD5800, 0x1FCCA400, - 0x1FCBF000, 0x1FCB3C00, 0x1FCA8800, - 0x1FC9D400, 0x1FC92000, 0x1FC86C00, - 0x1FC7B800, 0x1FC70400, 0x1FC65000, - 0x1FC59C00, 0x1FC4E800, 0x1FC43400, - 0x1FC38000, 0x1FC2CC00, 0x1FC21800, - 0x1FC16400, 0x1FC0B000, 0x1FBFFC00, - 0x1FBF4800, 0x1FBE9400, 0x1FBDE000, - 0x1FBD2C00, 0x1FBC7800, 0x1FBBC400, - 0x1FBB1000, 0x1FBA5C00, 0x1FB9A800, - 0x1FB8F400, 0x1FB84000, 0x1FB78C00, - 0x1FB6D800, 0x1FB62400, 0x1FB57000, - 0x1FB4BC00, 0x1FB40800, 0x1FB35400, - 0x1FB2A000, 0x1FB1EC00, 0x1FB13800, - 0x1FB08400, 0x1FAFD000, 0x1FAF1C00, - 0x1FAE6800, 0x1FADB400, 0x1FAD0000, - 0x1FAC4C00, 0x1FAB9800, 0x1FAAE400, - 0x1FAA3000, 0x1FA97C00, 0x1FA8C800, - 0x1FA81400, 0x1FA76000, 0x1FA6AC00, - 0x1FA5F800, 0x1FA54400, 0x1FA49000, - 0x1FA3DC00, 0x1FA32800, 0x1FA27400, - 0x1FA1C000, 0x1FA10C00, 0x1FA05800, - 0x1F9FA400, 0x1F9EF000, 0x1F9E3C00, - 0x1F9D8800, 0x1F9CD400, 0x1F9C2000, - 0x1F9B6C00, 0x1F9AB800, 0x1F9A0400, - 0x1F995000, 0x1F989C00, 0x1F97E800, - 0x1F973400, 0x1F968000, 0x1F95CC00, - 0x1F951800, 0x1F946400, 0x1F93B000, - 0x1F92FC00, 0x1F924800, 0x1F919400, - 0x1F90E000, 0x1F902C00, 0x1F8F7800, - 0x1F8EC400, 0x1F8E1000, 0x1F8D5C00, - 0x1F8CA800, 0x1F8BF400, 0x1F8B4000, - 0x1F8A8C00, 0x1F89D800, 0x1F892400, - 0x1F887000, 0x1F87BC00, 0x1F870800, - 0x1F865400, 0x1F85A000, 0x1F84EC00, - 0x1F843800, 0x1F838400, 0x1F82D000, - 0x1F821C00, 0x1F816800, 0x1F80B400, - 0x1F800000, 0x1F7F4C00, 0x1F7E9800, - 0x1F7DE400, 0x1F7D3000, 0x1F7C7C00, - 0x1F7BC800, 0x1F7B1400, 0x1F7A6000, - 0x1F79AC00, 0x1F78F800, 0x1F784400, - 0x1F779000, 0x1F76DC00, 0x1F762800, - 0x1F757400, 0x1F74C000, 0x1F740C00, - 0x1F735800, 0x1F72A400, 0x1F71F000, - 0x1F713C00, 0x1F708800, 0x1F6FD400, - 0x1F6F2000, 0x1F6E6C00, 0x1F6DB800, - 0x1F6D0400, 0x1F6C5000, 0x1F6B9C00, - 0x1F6AE800, 0x1F6A3400, 0x1F698000, - 0x1F68CC00, 0x1F681800, 0x1F676400, - 0x1F66B000, 0x1F65FC00, 0x1F654800, - 0x1F649400, 0x1F63E000, 0x1F632C00, - 0x1F627800, 0x1F61C400, 0x1F611000, - 0x1F605C00, 0x1F5FA800, 0x1F5EF400, - 0x1F5E4000, 0x1F5D8C00, 0x1F5CD800, - 0x1F5C2400, 0x1F5B7000, 0x1F5ABC00, - 0x1F5A0800, 0x1F595400, 0x1F58A000, - 0x1F57EC00, 0x1F573800, 0x1F568400, - 0x1F55D000, 0x1F551C00, 0x1F546800, - 0x1F53B400, 0x1F530000, 0x1F524C00, - 0x1F519800, 0x1F50E400, 0x1F503000, - 0x1F4F7C00, 0x1F4EC800, 0x1F4E1400, - 0x1F4D6000, 0x1F4CAC00, 0x1F4BF800, - 0x1F4B4400, 0x1F4A9000, 0x1F49DC00, - 0x1F492800, 0x1F487400, 0x1F47C000, - 0x1F470C00, 0x1F465800, 0x1F45A400, - 0x1F44F000, 0x1F443C00, 0x1F438800, - 0x1F42D400, 0x1F422000, 0x1F416C00, - 0x1F40B800, 0x1F400400, 0x1F3F5000, - 0x1F3E9C00, 0x1F3DE800, 0x1F3D3400, - 0x1F3C8000, 0x1F3BCC00, 0x1F3B1800, - 0x1F3A6400, 0x1F39B000, 0x1F38FC00, - 0x1F384800, 0x1F379400, 0x1F36E000, - 0x1F362C00, 0x1F357800, 0x1F34C400, - 0x1F341000, 0x1F335C00, 0x1F32A800, - 0x1F31F400, 0x1F314000, 0x1F308C00, - 0x1F2FD800, 0x1F2F2400, 0x1F2E7000, - 0x1F2DBC00, 0x1F2D0800, 0x1F2C5400, - 0x1F2BA000, 0x1F2AEC00, 0x1F2A3800, - 0x1F298400, 0x1F28D000, 0x1F281C00, - 0x1F276800, 0x1F26B400, 0x1F260000, - 0x1F254C00, 0x1F249800, 0x1F23E400, - 0x1F233000, 0x1F227C00, 0x1F21C800, - 0x1F211400, 0x1F206000, 0x1F1FAC00, - 0x1F1EF800, 0x1F1E4400, 0x1F1D9000, - 0x1F1CDC00, 0x1F1C2800, 0x1F1B7400, - 0x1F1AC000, 0x1F1A0C00, 0x1F195800, - 0x1F18A400, 0x1F17F000, 0x1F173C00, - 0x1F168800, 0x1F15D400, 0x1F152000, - 0x1F146C00, 0x1F13B800, 0x1F130400, - 0x1F125000, 0x1F119C00, 0x1F10E800, - 0x1F103400, 0x1F0F8000, 0x1F0ECC00, - 0x1F0E1800, 0x1F0D6400, 0x1F0CB000, - 0x1F0BFC00, 0x1F0B4800, 0x1F0A9400, - 0x1F09E000, 0x1F092C00, 0x1F087800, - 0x1F07C400, 0x1F071000, 0x1F065C00, - 0x1F05A800, 0x1F04F400, 0x1F044000, - 0x1F038C00, 0x1F02D800, 0x1F022400, - 0x1F017000, 0x1F00BC00, 0x1F000800, - 0x1EFF5400, 0x1EFEA000, 0x1EFDEC00, - 0x1EFD3800, 0x1EFC8400, 0x1EFBD000, - 0x1EFB1C00, 0x1EFA6800, 0x1EF9B400, - 0x1EF90000, 0x1EF84C00, 0x1EF79800, - 0x1EF6E400, 0x1EF63000, 0x1EF57C00, - 0x1EF4C800, 0x1EF41400, 0x1EF36000, - 0x1EF2AC00, 0x1EF1F800, 0x1EF14400, - 0x1EF09000, 0x1EEFDC00, 0x1EEF2800, - 0x1EEE7400, 0x1EEDC000, 0x1EED0C00, - 0x1EEC5800, 0x1EEBA400, 0x1EEAF000, - 0x1EEA3C00, 0x1EE98800, 0x1EE8D400, - 0x1EE82000, 0x1EE76C00, 0x1EE6B800, - 0x1EE60400, 0x1EE55000, 0x1EE49C00, - 0x1EE3E800, 0x1EE33400, 0x1EE28000, - 0x1EE1CC00, 0x1EE11800, 0x1EE06400, - 0x1EDFB000, 0x1EDEFC00, 0x1EDE4800, - 0x1EDD9400, 0x1EDCE000, 0x1EDC2C00, - 0x1EDB7800, 0x1EDAC400, 0x1EDA1000, - 0x1ED95C00, 0x1ED8A800, 0x1ED7F400, - 0x1ED74000, 0x1ED68C00, 0x1ED5D800, - 0x1ED52400, 0x1ED47000, 0x1ED3BC00, - 0x1ED30800, 0x1ED25400, 0x1ED1A000, - 0x1ED0EC00, 0x1ED03800, 0x1ECF8400, - 0x1ECED000, 0x1ECE1C00, 0x1ECD6800, - 0x1ECCB400, 0x1ECC0000, 0x1ECB4C00, - 0x1ECA9800, 0x1EC9E400, 0x1EC93000, - 0x1EC87C00, 0x1EC7C800, 0x1EC71400, - 0x1EC66000, 0x1EC5AC00, 0x1EC4F800, - 0x1EC44400, 0x1EC39000, 0x1EC2DC00, - 0x1EC22800, 0x1EC17400, 0x1EC0C000, - 0x1EC00C00, 0x1EBF5800, 0x1EBEA400, - 0x1EBDF000, 0x1EBD3C00, 0x1EBC8800, - 0x1EBBD400, 0x1EBB2000, 0x1EBA6C00, - 0x1EB9B800, 0x1EB90400, 0x1EB85000, - 0x1EB79C00, 0x1EB6E800, 0x1EB63400, - 0x1EB58000, 0x1EB4CC00, 0x1EB41800, - 0x1EB36400, 0x1EB2B000, 0x1EB1FC00, - 0x1EB14800, 0x1EB09400, 0x1EAFE000, - 0x1EAF2C00, 0x1EAE7800, 0x1EADC400, - 0x1EAD1000, 0x1EAC5C00, 0x1EABA800, - 0x1EAAF400, 0x1EAA4000, 0x1EA98C00, - 0x1EA8D800, 0x1EA82400, 0x1EA77000, - 0x1EA6BC00, 0x1EA60800, 0x1EA55400, - 0x1EA4A000, 0x1EA3EC00, 0x1EA33800, - 0x1EA28400, 0x1EA1D000, 0x1EA11C00, - 0x1EA06800, 0x1E9FB400, 0x1E9F0000, - 0x1E9E4C00, 0x1E9D9800, 0x1E9CE400, - 0x1E9C3000, 0x1E9B7C00, 0x1E9AC800, - 0x1E9A1400, 0x1E996000, 0x1E98AC00, - 0x1E97F800, 0x1E974400, 0x1E969000, - 0x1E95DC00, 0x1E952800, 0x1E947400, - 0x1E93C000, 0x1E930C00, 0x1E925800, - 0x1E91A400, 0x1E90F000, 0x1E903C00, - 0x1E8F8800, 0x1E8ED400, 0x1E8E2000, - 0x1E8D6C00, 0x1E8CB800, 0x1E8C0400, - 0x1E8B5000, 0x1E8A9C00, 0x1E89E800, - 0x1E893400, 0x1E888000, 0x1E87CC00, - 0x1E871800, 0x1E866400, 0x1E85B000, - 0x1E84FC00, 0x1E844800, 0x1E839400, - 0x1E82E000, 0x1E822C00, 0x1E817800, - 0x1E80C400, 0x1E801000, 0x1E7F5C00, - 0x1E7EA800, 0x1E7DF400, 0x1E7D4000, - 0x1E7C8C00, 0x1E7BD800, 0x1E7B2400, - 0x1E7A7000, 0x1E79BC00, 0x1E790800, - 0x1E785400, 0x1E77A000, 0x1E76EC00, - 0x1E763800, 0x1E758400, 0x1E74D000, - 0x1E741C00, 0x1E736800, 0x1E72B400, - 0x1E720000, 0x1E714C00, 0x1E709800, - 0x1E6FE400, 0x1E6F3000, 0x1E6E7C00, - 0x1E6DC800, 0x1E6D1400, 0x1E6C6000, - 0x1E6BAC00, 0x1E6AF800, 0x1E6A4400, - 0x1E699000, 0x1E68DC00, 0x1E682800, - 0x1E677400, 0x1E66C000, 0x1E660C00, - 0x1E655800, 0x1E64A400, 0x1E63F000, - 0x1E633C00, 0x1E628800, 0x1E61D400, - 0x1E612000, 0x1E606C00, 0x1E5FB800, - 0x1E5F0400, 0x1E5E5000, 0x1E5D9C00, - 0x1E5CE800, 0x1E5C3400, 0x1E5B8000, - 0x1E5ACC00, 0x1E5A1800, 0x1E596400, - 0x1E58B000, 0x1E57FC00, 0x1E574800, - 0x1E569400, 0x1E55E000, 0x1E552C00, - 0x1E547800, 0x1E53C400, 0x1E531000, - 0x1E525C00, 0x1E51A800, 0x1E50F400, - 0x1E504000, 0x1E4F8C00, 0x1E4ED800, - 0x1E4E2400, 0x1E4D7000, 0x1E4CBC00, - 0x1E4C0800, 0x1E4B5400, 0x1E4AA000, - 0x1E49EC00, 0x1E493800, 0x1E488400, - 0x1E47D000, 0x1E471C00, 0x1E466800, - 0x1E45B400, 0x1E450000, 0x1E444C00, - 0x1E439800, 0x1E42E400, 0x1E423000, - 0x1E417C00, 0x1E40C800, 0x1E401400, - 0x1E3F6000, 0x1E3EAC00, 0x1E3DF800, - 0x1E3D4400, 0x1E3C9000, 0x1E3BDC00, - 0x1E3B2800, 0x1E3A7400, 0x1E39C000, - 0x1E390C00, 0x1E385800, 0x1E37A400, - 0x1E36F000, 0x1E363C00, 0x1E358800, - 0x1E34D400, 0x1E342000, 0x1E336C00, - 0x1E32B800, 0x1E320400, 0x1E315000, - 0x1E309C00, 0x1E2FE800, 0x1E2F3400, - 0x1E2E8000, 0x1E2DCC00, 0x1E2D1800, - 0x1E2C6400, 0x1E2BB000, 0x1E2AFC00, - 0x1E2A4800, 0x1E299400, 0x1E28E000, - 0x1E282C00, 0x1E277800, 0x1E26C400, - 0x1E261000, 0x1E255C00, 0x1E24A800, - 0x1E23F400, 0x1E234000, 0x1E228C00, - 0x1E21D800, 0x1E212400, 0x1E207000, - 0x1E1FBC00, 0x1E1F0800, 0x1E1E5400, - 0x1E1DA000, 0x1E1CEC00, 0x1E1C3800, - 0x1E1B8400, 0x1E1AD000, 0x1E1A1C00, - 0x1E196800, 0x1E18B400, 0x1E180000, - 0x1E174C00, 0x1E169800, 0x1E15E400, - 0x1E153000, 0x1E147C00, 0x1E13C800, - 0x1E131400, 0x1E126000, 0x1E11AC00, - 0x1E10F800, 0x1E104400, 0x1E0F9000, - 0x1E0EDC00, 0x1E0E2800, 0x1E0D7400, - 0x1E0CC000, 0x1E0C0C00, 0x1E0B5800, - 0x1E0AA400, 0x1E09F000, 0x1E093C00, - 0x1E088800, 0x1E07D400, 0x1E072000, - 0x1E066C00, 0x1E05B800, 0x1E050400, - 0x1E045000, 0x1E039C00, 0x1E02E800, - 0x1E023400, 0x1E018000, 0x1E00CC00, - 0x1E001800, 0x1DFF6400, 0x1DFEB000, - 0x1DFDFC00, 0x1DFD4800, 0x1DFC9400, - 0x1DFBE000, 0x1DFB2C00, 0x1DFA7800, - 0x1DF9C400, 0x1DF91000, 0x1DF85C00, - 0x1DF7A800, 0x1DF6F400, 0x1DF64000, - 0x1DF58C00, 0x1DF4D800, 0x1DF42400, - 0x1DF37000, 0x1DF2BC00, 0x1DF20800, - 0x1DF15400, 0x1DF0A000, 0x1DEFEC00, - 0x1DEF3800, 0x1DEE8400, 0x1DEDD000, - 0x1DED1C00, 0x1DEC6800, 0x1DEBB400, - 0x1DEB0000, 0x1DEA4C00, 0x1DE99800, - 0x1DE8E400, 0x1DE83000, 0x1DE77C00, - 0x1DE6C800, 0x1DE61400, 0x1DE56000, - 0x1DE4AC00, 0x1DE3F800, 0x1DE34400, - 0x1DE29000, 0x1DE1DC00, 0x1DE12800, - 0x1DE07400, 0x1DDFC000, 0x1DDF0C00, - 0x1DDE5800, 0x1DDDA400, 0x1DDCF000, - 0x1DDC3C00, 0x1DDB8800, 0x1DDAD400, - 0x1DDA2000, 0x1DD96C00, 0x1DD8B800, - 0x1DD80400, 0x1DD75000, 0x1DD69C00, - 0x1DD5E800, 0x1DD53400, 0x1DD48000, - 0x1DD3CC00, 0x1DD31800, 0x1DD26400, - 0x1DD1B000, 0x1DD0FC00, 0x1DD04800, - 0x1DCF9400, 0x1DCEE000, 0x1DCE2C00, - 0x1DCD7800, 0x1DCCC400, 0x1DCC1000, - 0x1DCB5C00, 0x1DCAA800, 0x1DC9F400, - 0x1DC94000, 0x1DC88C00, 0x1DC7D800, - 0x1DC72400, 0x1DC67000, 0x1DC5BC00, - 0x1DC50800, 0x1DC45400, 0x1DC3A000, - 0x1DC2EC00, 0x1DC23800, 0x1DC18400, - 0x1DC0D000, 0x1DC01C00, 0x1DBF6800, - 0x1DBEB400, 0x1DBE0000, 0x1DBD4C00, - 0x1DBC9800, 0x1DBBE400, 0x1DBB3000, - 0x1DBA7C00, 0x1DB9C800, 0x1DB91400, - 0x1DB86000, 0x1DB7AC00, 0x1DB6F800, - 0x1DB64400, 0x1DB59000, 0x1DB4DC00, - 0x1DB42800, 0x1DB37400, 0x1DB2C000, - 0x1DB20C00, 0x1DB15800, 0x1DB0A400, - 0x1DAFF000, 0x1DAF3C00, 0x1DAE8800, - 0x1DADD400, 0x1DAD2000, 0x1DAC6C00, - 0x1DABB800, 0x1DAB0400, 0x1DAA5000, - 0x1DA99C00, 0x1DA8E800, 0x1DA83400, - 0x1DA78000, 0x1DA6CC00, 0x1DA61800, - 0x1DA56400, 0x1DA4B000, 0x1DA3FC00, - 0x1DA34800, 0x1DA29400, 0x1DA1E000, - 0x1DA12C00, 0x1DA07800, 0x1D9FC400, - 0x1D9F1000, 0x1D9E5C00, 0x1D9DA800, - 0x1D9CF400, 0x1D9C4000, 0x1D9B8C00, - 0x1D9AD800, 0x1D9A2400, 0x1D997000, - 0x1D98BC00, 0x1D980800, 0x1D975400, - 0x1D96A000, 0x1D95EC00, 0x1D953800, - 0x1D948400, 0x1D93D000, 0x1D931C00, - 0x1D926800, 0x1D91B400, 0x1D910000, - 0x1D904C00, 0x1D8F9800, 0x1D8EE400, - 0x1D8E3000, 0x1D8D7C00, 0x1D8CC800, - 0x1D8C1400, 0x1D8B6000, 0x1D8AAC00, - 0x1D89F800, 0x1D894400, 0x1D889000, - 0x1D87DC00, 0x1D872800, 0x1D867400, - 0x1D85C000, 0x1D850C00, 0x1D845800, - 0x1D83A400, 0x1D82F000, 0x1D823C00, - 0x1D818800, 0x1D80D400, 0x1D802000, - 0x1D7F6C00, 0x1D7EB800, 0x1D7E0400, - 0x1D7D5000, 0x1D7C9C00, 0x1D7BE800, - 0x1D7B3400, 0x1D7A8000, 0x1D79CC00, - 0x1D791800, 0x1D786400, 0x1D77B000, - 0x1D76FC00, 0x1D764800, 0x1D759400, - 0x1D74E000, 0x1D742C00, 0x1D737800, - 0x1D72C400, 0x1D721000, 0x1D715C00, - 0x1D70A800, 0x1D6FF400, 0x1D6F4000, - 0x1D6E8C00, 0x1D6DD800, 0x1D6D2400, - 0x1D6C7000, 0x1D6BBC00, 0x1D6B0800, - 0x1D6A5400, 0x1D69A000, 0x1D68EC00, - 0x1D683800, 0x1D678400, 0x1D66D000, - 0x1D661C00, 0x1D656800, 0x1D64B400, - 0x1D640000, 0x1D634C00, 0x1D629800, - 0x1D61E400, 0x1D613000, 0x1D607C00, - 0x1D5FC800, 0x1D5F1400, 0x1D5E6000, - 0x1D5DAC00, 0x1D5CF800, 0x1D5C4400, - 0x1D5B9000, 0x1D5ADC00, 0x1D5A2800, - 0x1D597400, 0x1D58C000, 0x1D580C00, - 0x1D575800, 0x1D56A400, 0x1D55F000, - 0x1D553C00, 0x1D548800, 0x1D53D400, - 0x1D532000, 0x1D526C00, 0x1D51B800, - 0x1D510400, 0x1D505000, 0x1D4F9C00, - 0x1D4EE800, 0x1D4E3400, 0x1D4D8000, - 0x1D4CCC00, 0x1D4C1800, 0x1D4B6400, - 0x1D4AB000, 0x1D49FC00, 0x1D494800, - 0x1D489400, 0x1D47E000, 0x1D472C00, - 0x1D467800, 0x1D45C400, 0x1D451000, - 0x1D445C00, 0x1D43A800, 0x1D42F400, - 0x1D424000, 0x1D418C00, 0x1D40D800, - 0x1D402400, 0x1D3F7000, 0x1D3EBC00, - 0x1D3E0800, 0x1D3D5400, 0x1D3CA000, - 0x1D3BEC00, 0x1D3B3800, 0x1D3A8400, - 0x1D39D000, 0x1D391C00, 0x1D386800, - 0x1D37B400, 0x1D370000, 0x1D364C00, - 0x1D359800, 0x1D34E400, 0x1D343000, - 0x1D337C00, 0x1D32C800, 0x1D321400, - 0x1D316000, 0x1D30AC00, 0x1D2FF800, - 0x1D2F4400, 0x1D2E9000, 0x1D2DDC00, - 0x1D2D2800, 0x1D2C7400, 0x1D2BC000, - 0x1D2B0C00, 0x1D2A5800, 0x1D29A400, - 0x1D28F000, 0x1D283C00, 0x1D278800, - 0x1D26D400, 0x1D262000, 0x1D256C00, - 0x1D24B800, 0x1D240400, 0x1D235000, - 0x1D229C00, 0x1D21E800, 0x1D213400, - 0x1D208000, 0x1D1FCC00, 0x1D1F1800, - 0x1D1E6400, 0x1D1DB000, 0x1D1CFC00, - 0x1D1C4800, 0x1D1B9400, 0x1D1AE000, - 0x1D1A2C00, 0x1D197800, 0x1D18C400, - 0x1D181000, 0x1D175C00, 0x1D16A800, - 0x1D15F400, 0x1D154000, 0x1D148C00, - 0x1D13D800, 0x1D132400, 0x1D127000, - 0x1D11BC00, 0x1D110800, 0x1D105400, - 0x1D0FA000, 0x1D0EEC00, 0x1D0E3800, - 0x1D0D8400, 0x1D0CD000, 0x1D0C1C00, - 0x1D0B6800, 0x1D0AB400, 0x1D0A0000, - 0x1D094C00, 0x1D089800, 0x1D07E400, - 0x1D073000, 0x1D067C00, 0x1D05C800, - 0x1D051400, 0x1D046000, 0x1D03AC00, - 0x1D02F800, 0x1D024400, 0x1D019000, - 0x1D00DC00, 0x1D002800, 0x1CFF7400, - 0x1CFEC000, 0x1CFE0C00, 0x1CFD5800, - 0x1CFCA400, 0x1CFBF000, 0x1CFB3C00, - 0x1CFA8800, 0x1CF9D400, 0x1CF92000, - 0x1CF86C00, 0x1CF7B800, 0x1CF70400, - 0x1CF65000, 0x1CF59C00, 0x1CF4E800, - 0x1CF43400, 0x1CF38000, 0x1CF2CC00, - 0x1CF21800, 0x1CF16400, 0x1CF0B000, - 0x1CEFFC00, 0x1CEF4800, 0x1CEE9400, - 0x1CEDE000, 0x1CED2C00, 0x1CEC7800, - 0x1CEBC400, 0x1CEB1000, 0x1CEA5C00, - 0x1CE9A800, 0x1CE8F400, 0x1CE84000, - 0x1CE78C00, 0x1CE6D800, 0x1CE62400, - 0x1CE57000, 0x1CE4BC00, 0x1CE40800, - 0x1CE35400, 0x1CE2A000, 0x1CE1EC00, - 0x1CE13800, 0x1CE08400, 0x1CDFD000, - 0x1CDF1C00, 0x1CDE6800, 0x1CDDB400, - 0x1CDD0000, 0x1CDC4C00, 0x1CDB9800, - 0x1CDAE400, 0x1CDA3000, 0x1CD97C00, - 0x1CD8C800, 0x1CD81400, 0x1CD76000, - 0x1CD6AC00, 0x1CD5F800, 0x1CD54400, - 0x1CD49000, 0x1CD3DC00, 0x1CD32800, - 0x1CD27400, 0x1CD1C000, 0x1CD10C00, - 0x1CD05800, 0x1CCFA400, 0x1CCEF000, - 0x1CCE3C00, 0x1CCD8800, 0x1CCCD400, - 0x1CCC2000, 0x1CCB6C00, 0x1CCAB800, - 0x1CCA0400, 0x1CC95000, 0x1CC89C00, - 0x1CC7E800, 0x1CC73400, 0x1CC68000, - 0x1CC5CC00, 0x1CC51800, 0x1CC46400, - 0x1CC3B000, 0x1CC2FC00, 0x1CC24800, - 0x1CC19400, 0x1CC0E000, 0x1CC02C00, - 0x1CBF7800, 0x1CBEC400, 0x1CBE1000, - 0x1CBD5C00, 0x1CBCA800, 0x1CBBF400, - 0x1CBB4000, 0x1CBA8C00, 0x1CB9D800, - 0x1CB92400, 0x1CB87000, 0x1CB7BC00, - 0x1CB70800, 0x1CB65400, 0x1CB5A000, - 0x1CB4EC00, 0x1CB43800, 0x1CB38400, - 0x1CB2D000, 0x1CB21C00, 0x1CB16800, - 0x1CB0B400, 0x1CB00000, 0x1CAF4C00, - 0x1CAE9800, 0x1CADE400, 0x1CAD3000, - 0x1CAC7C00, 0x1CABC800, 0x1CAB1400, - 0x1CAA6000, 0x1CA9AC00, 0x1CA8F800, - 0x1CA84400, 0x1CA79000, 0x1CA6DC00, - 0x1CA62800, 0x1CA57400, 0x1CA4C000, - 0x1CA40C00, 0x1CA35800, 0x1CA2A400, - 0x1CA1F000, 0x1CA13C00, 0x1CA08800, - 0x1C9FD400, 0x1C9F2000, 0x1C9E6C00, - 0x1C9DB800, 0x1C9D0400, 0x1C9C5000, - 0x1C9B9C00, 0x1C9AE800, 0x1C9A3400, - 0x1C998000, 0x1C98CC00, 0x1C981800, - 0x1C976400, 0x1C96B000, 0x1C95FC00, - 0x1C954800, 0x1C949400, 0x1C93E000, - 0x1C932C00, 0x1C927800, 0x1C91C400, - 0x1C911000, 0x1C905C00, 0x1C8FA800, - 0x1C8EF400, 0x1C8E4000, 0x1C8D8C00, - 0x1C8CD800, 0x1C8C2400, 0x1C8B7000, - 0x1C8ABC00, 0x1C8A0800, 0x1C895400, - 0x1C88A000, 0x1C87EC00, 0x1C873800, - 0x1C868400, 0x1C85D000, 0x1C851C00, - 0x1C846800, 0x1C83B400, 0x1C830000, - 0x1C824C00, 0x1C819800, 0x1C80E400, - 0x1C803000, 0x1C7F7C00, 0x1C7EC800, - 0x1C7E1400, 0x1C7D6000, 0x1C7CAC00, - 0x1C7BF800, 0x1C7B4400, 0x1C7A9000, - 0x1C79DC00, 0x1C792800, 0x1C787400, - 0x1C77C000, 0x1C770C00, 0x1C765800, - 0x1C75A400, 0x1C74F000, 0x1C743C00, - 0x1C738800, 0x1C72D400, 0x1C722000, - 0x1C716C00, 0x1C70B800, 0x1C700400, - 0x1C6F5000, 0x1C6E9C00, 0x1C6DE800, - 0x1C6D3400, 0x1C6C8000, 0x1C6BCC00, - 0x1C6B1800, 0x1C6A6400, 0x1C69B000, - 0x1C68FC00, 0x1C684800, 0x1C679400, - 0x1C66E000, 0x1C662C00, 0x1C657800, - 0x1C64C400, 0x1C641000, 0x1C635C00, - 0x1C62A800, 0x1C61F400, 0x1C614000, - 0x1C608C00, 0x1C5FD800, 0x1C5F2400, - 0x1C5E7000, 0x1C5DBC00, 0x1C5D0800, - 0x1C5C5400, 0x1C5BA000, 0x1C5AEC00, - 0x1C5A3800, 0x1C598400, 0x1C58D000, - 0x1C581C00, 0x1C576800, 0x1C56B400, - 0x1C560000, 0x1C554C00, 0x1C549800, - 0x1C53E400, 0x1C533000, 0x1C527C00, - 0x1C51C800, 0x1C511400, 0x1C506000, - 0x1C4FAC00, 0x1C4EF800, 0x1C4E4400, - 0x1C4D9000, 0x1C4CDC00, 0x1C4C2800, - 0x1C4B7400, 0x1C4AC000, 0x1C4A0C00, - 0x1C495800, 0x1C48A400, 0x1C47F000, - 0x1C473C00, 0x1C468800, 0x1C45D400, - 0x1C452000, 0x1C446C00, 0x1C43B800, - 0x1C430400, 0x1C425000, 0x1C419C00, - 0x1C40E800, 0x1C403400, 0x1C3F8000, - 0x1C3ECC00, 0x1C3E1800, 0x1C3D6400, - 0x1C3CB000, 0x1C3BFC00, 0x1C3B4800, - 0x1C3A9400, 0x1C39E000, 0x1C392C00, - 0x1C387800, 0x1C37C400, 0x1C371000, - 0x1C365C00, 0x1C35A800, 0x1C34F400, - 0x1C344000, 0x1C338C00, 0x1C32D800, - 0x1C322400, 0x1C317000, 0x1C30BC00, - 0x1C300800, 0x1C2F5400, 0x1C2EA000, - 0x1C2DEC00, 0x1C2D3800, 0x1C2C8400, - 0x1C2BD000, 0x1C2B1C00, 0x1C2A6800, - 0x1C29B400, 0x1C290000, 0x1C284C00, - 0x1C279800, 0x1C26E400, 0x1C263000, - 0x1C257C00, 0x1C24C800, 0x1C241400, - 0x1C236000, 0x1C22AC00, 0x1C21F800, - 0x1C214400, 0x1C209000, 0x1C1FDC00, - 0x1C1F2800, 0x1C1E7400, 0x1C1DC000, - 0x1C1D0C00, 0x1C1C5800, 0x1C1BA400, - 0x1C1AF000, 0x1C1A3C00, 0x1C198800, - 0x1C18D400, 0x1C182000, 0x1C176C00, - 0x1C16B800, 0x1C160400, 0x1C155000, - 0x1C149C00, 0x1C13E800, 0x1C133400, - 0x1C128000, 0x1C11CC00, 0x1C111800, - 0x1C106400, 0x1C0FB000, 0x1C0EFC00, - 0x1C0E4800, 0x1C0D9400, 0x1C0CE000, - 0x1C0C2C00, 0x1C0B7800, 0x1C0AC400, - 0x1C0A1000, 0x1C095C00, 0x1C08A800, - 0x1C07F400, 0x1C074000, 0x1C068C00, - 0x1C05D800, 0x1C052400, 0x1C047000, - 0x1C03BC00, 0x1C030800, 0x1C025400, - 0x1C01A000, 0x1C00EC00, 0x1C003800, - 0x1BFF8400, 0x1BFED000, 0x1BFE1C00, - 0x1BFD6800, 0x1BFCB400, 0x1BFC0000, - 0x1BFB5600, 0x1BFAAC00, 0x1BFA0200, - 0x1BF95800, 0x1BF8AE00, 0x1BF80400, - 0x1BF75A00, 0x1BF6B000, 0x1BF60600, - 0x1BF55C00, 0x1BF4B200, 0x1BF40800, - 0x1BF35E00, 0x1BF2B400, 0x1BF20A00, - 0x1BF16000, 0x1BF0B600, 0x1BF00C00, - 0x1BEF6200, 0x1BEEB800, 0x1BEE0E00, - 0x1BED6400, 0x1BECBA00, 0x1BEC1000, - 0x1BEB6600, 0x1BEABC00, 0x1BEA1200, - 0x1BE96800, 0x1BE8BE00, 0x1BE81400, - 0x1BE76A00, 0x1BE6C000, 0x1BE61600, - 0x1BE56C00, 0x1BE4C200, 0x1BE41800, - 0x1BE36E00, 0x1BE2C400, 0x1BE21A00, - 0x1BE17000, 0x1BE0C600, 0x1BE01C00, - 0x1BDF7200, 0x1BDEC800, 0x1BDE1E00, - 0x1BDD7400, 0x1BDCCA00, 0x1BDC2000, - 0x1BDB7600, 0x1BDACC00, 0x1BDA2200, - 0x1BD97800, 0x1BD8CE00, 0x1BD82400, - 0x1BD77A00, 0x1BD6D000, 0x1BD62600, - 0x1BD57C00, 0x1BD4D200, 0x1BD42800, - 0x1BD37E00, 0x1BD2D400, 0x1BD22A00, - 0x1BD18000, 0x1BD0D600, 0x1BD02C00, - 0x1BCF8200, 0x1BCED800, 0x1BCE2E00, - 0x1BCD8400, 0x1BCCDA00, 0x1BCC3000, - 0x1BCB8600, 0x1BCADC00, 0x1BCA3200, - 0x1BC98800, 0x1BC8DE00, 0x1BC83400, - 0x1BC78A00, 0x1BC6E000, 0x1BC63600, - 0x1BC58C00, 0x1BC4E200, 0x1BC43800, - 0x1BC38E00, 0x1BC2E400, 0x1BC23A00, - 0x1BC19000, 0x1BC0E600, 0x1BC03C00, - 0x1BBF9200, 0x1BBEE800, 0x1BBE3E00, - 0x1BBD9400, 0x1BBCEA00, 0x1BBC4000, - 0x1BBB9600, 0x1BBAEC00, 0x1BBA4200, - 0x1BB99800, 0x1BB8EE00, 0x1BB84400, - 0x1BB79A00, 0x1BB6F000, 0x1BB64600, - 0x1BB59C00, 0x1BB4F200, 0x1BB44800, - 0x1BB39E00, 0x1BB2F400, 0x1BB24A00, - 0x1BB1A000, 0x1BB0F600, 0x1BB04C00, - 0x1BAFA200, 0x1BAEF800, 0x1BAE4E00, - 0x1BADA400, 0x1BACFA00, 0x1BAC5000, - 0x1BABA600, 0x1BAAFC00, 0x1BAA5200, - 0x1BA9A800, 0x1BA8FE00, 0x1BA85400, - 0x1BA7AA00, 0x1BA70000, 0x1BA65600, - 0x1BA5AC00, 0x1BA50200, 0x1BA45800, - 0x1BA3AE00, 0x1BA30400, 0x1BA25A00, - 0x1BA1B000, 0x1BA10600, 0x1BA05C00, - 0x1B9FB200, 0x1B9F0800, 0x1B9E5E00, - 0x1B9DB400, 0x1B9D0A00, 0x1B9C6000, - 0x1B9BB600, 0x1B9B0C00, 0x1B9A6200, - 0x1B99B800, 0x1B990E00, 0x1B986400, - 0x1B97BA00, 0x1B971000, 0x1B966600, - 0x1B95BC00, 0x1B951200, 0x1B946800, - 0x1B93BE00, 0x1B931400, 0x1B926A00, - 0x1B91C000, 0x1B911600, 0x1B906C00, - 0x1B8FC200, 0x1B8F1800, 0x1B8E6E00, - 0x1B8DC400, 0x1B8D1A00, 0x1B8C7000, - 0x1B8BC600, 0x1B8B1C00, 0x1B8A7200, - 0x1B89C800, 0x1B891E00, 0x1B887400, - 0x1B87CA00, 0x1B872000, 0x1B867600, - 0x1B85CC00, 0x1B852200, 0x1B847800, - 0x1B83CE00, 0x1B832400, 0x1B827A00, - 0x1B81D000, 0x1B812600, 0x1B807C00, - 0x1B7FD200, 0x1B7F2800, 0x1B7E7E00, - 0x1B7DD400, 0x1B7D2A00, 0x1B7C8000, - 0x1B7BD600, 0x1B7B2C00, 0x1B7A8200, - 0x1B79D800, 0x1B792E00, 0x1B788400, - 0x1B77DA00, 0x1B773000, 0x1B768600, - 0x1B75DC00, 0x1B753200, 0x1B748800, - 0x1B73DE00, 0x1B733400, 0x1B728A00, - 0x1B71E000, 0x1B713600, 0x1B708C00, - 0x1B6FE200, 0x1B6F3800, 0x1B6E8E00, - 0x1B6DE400, 0x1B6D3A00, 0x1B6C9000, - 0x1B6BE600, 0x1B6B3C00, 0x1B6A9200, - 0x1B69E800, 0x1B693E00, 0x1B689400, - 0x1B67EA00, 0x1B674000, 0x1B669600, - 0x1B65EC00, 0x1B654200, 0x1B649800, - 0x1B63EE00, 0x1B634400, 0x1B629A00, - 0x1B61F000, 0x1B614600, 0x1B609C00, - 0x1B5FF200, 0x1B5F4800, 0x1B5E9E00, - 0x1B5DF400, 0x1B5D4A00, 0x1B5CA000, - 0x1B5BF600, 0x1B5B4C00, 0x1B5AA200, - 0x1B59F800, 0x1B594E00, 0x1B58A400, - 0x1B57FA00, 0x1B575000, 0x1B56A600, - 0x1B55FC00, 0x1B555200, 0x1B54A800, - 0x1B53FE00, 0x1B535400, 0x1B52AA00, - 0x1B520000, 0x1B515600, 0x1B50AC00, - 0x1B500200, 0x1B4F5800, 0x1B4EAE00, - 0x1B4E0400, 0x1B4D5A00, 0x1B4CB000, - 0x1B4C0600, 0x1B4B5C00, 0x1B4AB200, - 0x1B4A0800, 0x1B495E00, 0x1B48B400, - 0x1B480A00, 0x1B476000, 0x1B46B600, - 0x1B460C00, 0x1B456200, 0x1B44B800, - 0x1B440E00, 0x1B436400, 0x1B42BA00, - 0x1B421000, 0x1B416600, 0x1B40BC00, - 0x1B401200, 0x1B3F6800, 0x1B3EBE00, - 0x1B3E1400, 0x1B3D6A00, 0x1B3CC000, - 0x1B3C1600, 0x1B3B6C00, 0x1B3AC200, - 0x1B3A1800, 0x1B396E00, 0x1B38C400, - 0x1B381A00, 0x1B377000, 0x1B36C600, - 0x1B361C00, 0x1B357200, 0x1B34C800, - 0x1B341E00, 0x1B337400, 0x1B32CA00, - 0x1B322000, 0x1B317600, 0x1B30CC00, - 0x1B302200, 0x1B2F7800, 0x1B2ECE00, - 0x1B2E2400, 0x1B2D7A00, 0x1B2CD000, - 0x1B2C2600, 0x1B2B7C00, 0x1B2AD200, - 0x1B2A2800, 0x1B297E00, 0x1B28D400, - 0x1B282A00, 0x1B278000, 0x1B26D600, - 0x1B262C00, 0x1B258200, 0x1B24D800, - 0x1B242E00, 0x1B238400, 0x1B22DA00, - 0x1B223000, 0x1B218600, 0x1B20DC00, - 0x1B203200, 0x1B1F8800, 0x1B1EDE00, - 0x1B1E3400, 0x1B1D8A00, 0x1B1CE000, - 0x1B1C3600, 0x1B1B8C00, 0x1B1AE200, - 0x1B1A3800, 0x1B198E00, 0x1B18E400, - 0x1B183A00, 0x1B179000, 0x1B16E600, - 0x1B163C00, 0x1B159200, 0x1B14E800, - 0x1B143E00, 0x1B139400, 0x1B12EA00, - 0x1B124000, 0x1B119600, 0x1B10EC00, - 0x1B104200, 0x1B0F9800, 0x1B0EEE00, - 0x1B0E4400, 0x1B0D9A00, 0x1B0CF000, - 0x1B0C4600, 0x1B0B9C00, 0x1B0AF200, - 0x1B0A4800, 0x1B099E00, 0x1B08F400, - 0x1B084A00, 0x1B07A000, 0x1B06F600, - 0x1B064C00, 0x1B05A200, 0x1B04F800, - 0x1B044E00, 0x1B03A400, 0x1B02FA00, - 0x1B025000, 0x1B01A600, 0x1B00FC00, - 0x1B005200, 0x1AFFA800, 0x1AFEFE00, - 0x1AFE5400, 0x1AFDAA00, 0x1AFD0000, - 0x1AFC5600, 0x1AFBAC00, 0x1AFB0200, - 0x1AFA5800, 0x1AF9AE00, 0x1AF90400, - 0x1AF85A00, 0x1AF7B000, 0x1AF70600, - 0x1AF65C00, 0x1AF5B200, 0x1AF50800, - 0x1AF45E00, 0x1AF3B400, 0x1AF30A00, - 0x1AF26000, 0x1AF1B600, 0x1AF10C00, - 0x1AF06200, 0x1AEFB800, 0x1AEF0E00, - 0x1AEE6400, 0x1AEDBA00, 0x1AED1000, - 0x1AEC6600, 0x1AEBBC00, 0x1AEB1200, - 0x1AEA6800, 0x1AE9BE00, 0x1AE91400, - 0x1AE86A00, 0x1AE7C000, 0x1AE71600, - 0x1AE66C00, 0x1AE5C200, 0x1AE51800, - 0x1AE46E00, 0x1AE3C400, 0x1AE31A00, - 0x1AE27000, 0x1AE1C600, 0x1AE11C00, - 0x1AE07200, 0x1ADFC800, 0x1ADF1E00, - 0x1ADE7400, 0x1ADDCA00, 0x1ADD2000, - 0x1ADC7600, 0x1ADBCC00, 0x1ADB2200, - 0x1ADA7800, 0x1AD9CE00, 0x1AD92400, - 0x1AD87A00, 0x1AD7D000, 0x1AD72600, - 0x1AD67C00, 0x1AD5D200, 0x1AD52800, - 0x1AD47E00, 0x1AD3D400, 0x1AD32A00, - 0x1AD28000, 0x1AD1D600, 0x1AD12C00, - 0x1AD08200, 0x1ACFD800, 0x1ACF2E00, - 0x1ACE8400, 0x1ACDDA00, 0x1ACD3000, - 0x1ACC8600, 0x1ACBDC00, 0x1ACB3200, - 0x1ACA8800, 0x1AC9DE00, 0x1AC93400, - 0x1AC88A00, 0x1AC7E000, 0x1AC73600, - 0x1AC68C00, 0x1AC5E200, 0x1AC53800, - 0x1AC48E00, 0x1AC3E400, 0x1AC33A00, - 0x1AC29000, 0x1AC1E600, 0x1AC13C00, - 0x1AC09200, 0x1ABFE800, 0x1ABF3E00, - 0x1ABE9400, 0x1ABDEA00, 0x1ABD4000, - 0x1ABC9600, 0x1ABBEC00, 0x1ABB4200, - 0x1ABA9800, 0x1AB9EE00, 0x1AB94400, - 0x1AB89A00, 0x1AB7F000, 0x1AB74600, - 0x1AB69C00, 0x1AB5F200, 0x1AB54800, - 0x1AB49E00, 0x1AB3F400, 0x1AB34A00, - 0x1AB2A000, 0x1AB1F600, 0x1AB14C00, - 0x1AB0A200, 0x1AAFF800, 0x1AAF4E00, - 0x1AAEA400, 0x1AADFA00, 0x1AAD5000, - 0x1AACA600, 0x1AABFC00, 0x1AAB5200, - 0x1AAAA800, 0x1AA9FE00, 0x1AA95400, - 0x1AA8AA00, 0x1AA80000, 0x1AA75600, - 0x1AA6AC00, 0x1AA60200, 0x1AA55800, - 0x1AA4AE00, 0x1AA40400, 0x1AA35A00, - 0x1AA2B000, 0x1AA20600, 0x1AA15C00, - 0x1AA0B200, 0x1AA00800, 0x1A9F5E00, - 0x1A9EB400, 0x1A9E0A00, 0x1A9D6000, - 0x1A9CB600, 0x1A9C0C00, 0x1A9B6200, - 0x1A9AB800, 0x1A9A0E00, 0x1A996400, - 0x1A98BA00, 0x1A981000, 0x1A976600, - 0x1A96BC00, 0x1A961200, 0x1A956800, - 0x1A94BE00, 0x1A941400, 0x1A936A00, - 0x1A92C000, 0x1A921600, 0x1A916C00, - 0x1A90C200, 0x1A901800, 0x1A8F6E00, - 0x1A8EC400, 0x1A8E1A00, 0x1A8D7000, - 0x1A8CC600, 0x1A8C1C00, 0x1A8B7200, - 0x1A8AC800, 0x1A8A1E00, 0x1A897400, - 0x1A88CA00, 0x1A882000, 0x1A877600, - 0x1A86CC00, 0x1A862200, 0x1A857800, - 0x1A84CE00, 0x1A842400, 0x1A837A00, - 0x1A82D000, 0x1A822600, 0x1A817C00, - 0x1A80D200, 0x1A802800, 0x1A7F7E00, - 0x1A7ED400, 0x1A7E2A00, 0x1A7D8000, - 0x1A7CD600, 0x1A7C2C00, 0x1A7B8200, - 0x1A7AD800, 0x1A7A2E00, 0x1A798400, - 0x1A78DA00, 0x1A783000, 0x1A778600, - 0x1A76DC00, 0x1A763200, 0x1A758800, - 0x1A74DE00, 0x1A743400, 0x1A738A00, - 0x1A72E000, 0x1A723600, 0x1A718C00, - 0x1A70E200, 0x1A703800, 0x1A6F8E00, - 0x1A6EE400, 0x1A6E3A00, 0x1A6D9000, - 0x1A6CE600, 0x1A6C3C00, 0x1A6B9200, - 0x1A6AE800, 0x1A6A3E00, 0x1A699400, - 0x1A68EA00, 0x1A684000, 0x1A679600, - 0x1A66EC00, 0x1A664200, 0x1A659800, - 0x1A64EE00, 0x1A644400, 0x1A639A00, - 0x1A62F000, 0x1A624600, 0x1A619C00, - 0x1A60F200, 0x1A604800, 0x1A5F9E00, - 0x1A5EF400, 0x1A5E4A00, 0x1A5DA000, - 0x1A5CF600, 0x1A5C4C00, 0x1A5BA200, - 0x1A5AF800, 0x1A5A4E00, 0x1A59A400, - 0x1A58FA00, 0x1A585000, 0x1A57A600, - 0x1A56FC00, 0x1A565200, 0x1A55A800, - 0x1A54FE00, 0x1A545400, 0x1A53AA00, - 0x1A530000, 0x1A525600, 0x1A51AC00, - 0x1A510200, 0x1A505800, 0x1A4FAE00, - 0x1A4F0400, 0x1A4E5A00, 0x1A4DB000, - 0x1A4D0600, 0x1A4C5C00, 0x1A4BB200, - 0x1A4B0800, 0x1A4A5E00, 0x1A49B400, - 0x1A490A00, 0x1A486000, 0x1A47B600, - 0x1A470C00, 0x1A466200, 0x1A45B800, - 0x1A450E00, 0x1A446400, 0x1A43BA00, - 0x1A431000, 0x1A426600, 0x1A41BC00, - 0x1A411200, 0x1A406800, 0x1A3FBE00, - 0x1A3F1400, 0x1A3E6A00, 0x1A3DC000, - 0x1A3D1600, 0x1A3C6C00, 0x1A3BC200, - 0x1A3B1800, 0x1A3A6E00, 0x1A39C400, - 0x1A391A00, 0x1A387000, 0x1A37C600, - 0x1A371C00, 0x1A367200, 0x1A35C800, - 0x1A351E00, 0x1A347400, 0x1A33CA00, - 0x1A332000, 0x1A327600, 0x1A31CC00, - 0x1A312200, 0x1A307800, 0x1A2FCE00, - 0x1A2F2400, 0x1A2E7A00, 0x1A2DD000, - 0x1A2D2600, 0x1A2C7C00, 0x1A2BD200, - 0x1A2B2800, 0x1A2A7E00, 0x1A29D400, - 0x1A292A00, 0x1A288000, 0x1A27D600, - 0x1A272C00, 0x1A268200, 0x1A25D800, - 0x1A252E00, 0x1A248400, 0x1A23DA00, - 0x1A233000, 0x1A228600, 0x1A21DC00, - 0x1A213200, 0x1A208800, 0x1A1FDE00, - 0x1A1F3400, 0x1A1E8A00, 0x1A1DE000, - 0x1A1D3600, 0x1A1C8C00, 0x1A1BE200, - 0x1A1B3800, 0x1A1A8E00, 0x1A19E400, - 0x1A193A00, 0x1A189000, 0x1A17E600, - 0x1A173C00, 0x1A169200, 0x1A15E800, - 0x1A153E00, 0x1A149400, 0x1A13EA00, - 0x1A134000, 0x1A129600, 0x1A11EC00, - 0x1A114200, 0x1A109800, 0x1A0FEE00, - 0x1A0F4400, 0x1A0E9A00, 0x1A0DF000, - 0x1A0D4600, 0x1A0C9C00, 0x1A0BF200, - 0x1A0B4800, 0x1A0A9E00, 0x1A09F400, - 0x1A094A00, 0x1A08A000, 0x1A07F600, - 0x1A074C00, 0x1A06A200, 0x1A05F800, - 0x1A054E00, 0x1A04A400, 0x1A03FA00, - 0x1A035000, 0x1A02A600, 0x1A01FC00, - 0x1A015200, 0x1A00A800, 0x19FFFE00, - 0x19FF5400, 0x19FEAA00, 0x19FE0000, - 0x19FD5600, 0x19FCAC00, 0x19FC0200, - 0x19FB5800, 0x19FAAE00, 0x19FA0400, - 0x19F95A00, 0x19F8B000, 0x19F80600, - 0x19F75C00, 0x19F6B200, 0x19F60800, - 0x19F55E00, 0x19F4B400, 0x19F40A00, - 0x19F36000, 0x19F2B600, 0x19F20C00, - 0x19F16200, 0x19F0B800, 0x19F00E00, - 0x19EF6400, 0x19EEBA00, 0x19EE1000, - 0x19ED6600, 0x19ECBC00, 0x19EC1200, - 0x19EB6800, 0x19EABE00, 0x19EA1400, - 0x19E96A00, 0x19E8C000, 0x19E81600, - 0x19E76C00, 0x19E6C200, 0x19E61800, - 0x19E56E00, 0x19E4C400, 0x19E41A00, - 0x19E37000, 0x19E2C600, 0x19E21C00, - 0x19E17200, 0x19E0C800, 0x19E01E00, - 0x19DF7400, 0x19DECA00, 0x19DE2000, - 0x19DD7600, 0x19DCCC00, 0x19DC2200, - 0x19DB7800, 0x19DACE00, 0x19DA2400, - 0x19D97A00, 0x19D8D000, 0x19D82600, - 0x19D77C00, 0x19D6D200, 0x19D62800, - 0x19D57E00, 0x19D4D400, 0x19D42A00, - 0x19D38000, 0x19D2D600, 0x19D22C00, - 0x19D18200, 0x19D0D800, 0x19D02E00, - 0x19CF8400, 0x19CEDA00, 0x19CE3000, - 0x19CD8600, 0x19CCDC00, 0x19CC3200, - 0x19CB8800, 0x19CADE00, 0x19CA3400, - 0x19C98A00, 0x19C8E000, 0x19C83600, - 0x19C78C00, 0x19C6E200, 0x19C63800, - 0x19C58E00, 0x19C4E400, 0x19C43A00, - 0x19C39000, 0x19C2E600, 0x19C23C00, - 0x19C19200, 0x19C0E800, 0x19C03E00, - 0x19BF9400, 0x19BEEA00, 0x19BE4000, - 0x19BD9600, 0x19BCEC00, 0x19BC4200, - 0x19BB9800, 0x19BAEE00, 0x19BA4400, - 0x19B99A00, 0x19B8F000, 0x19B84600, - 0x19B79C00, 0x19B6F200, 0x19B64800, - 0x19B59E00, 0x19B4F400, 0x19B44A00, - 0x19B3A000, 0x19B2F600, 0x19B24C00, - 0x19B1A200, 0x19B0F800, 0x19B04E00, - 0x19AFA400, 0x19AEFA00, 0x19AE5000, - 0x19ADA600, 0x19ACFC00, 0x19AC5200, - 0x19ABA800, 0x19AAFE00, 0x19AA5400, - 0x19A9AA00, 0x19A90000, 0x19A85600, - 0x19A7AC00, 0x19A70200, 0x19A65800, - 0x19A5AE00, 0x19A50400, 0x19A45A00, - 0x19A3B000, 0x19A30600, 0x19A25C00, - 0x19A1B200, 0x19A10800, 0x19A05E00, - 0x199FB400, 0x199F0A00, 0x199E6000, - 0x199DB600, 0x199D0C00, 0x199C6200, - 0x199BB800, 0x199B0E00, 0x199A6400, - 0x1999BA00, 0x19991000, 0x19986600, - 0x1997BC00, 0x19971200, 0x19966800, - 0x1995BE00, 0x19951400, 0x19946A00, - 0x1993C000, 0x19931600, 0x19926C00, - 0x1991C200, 0x19911800, 0x19906E00, - 0x198FC400, 0x198F1A00, 0x198E7000, - 0x198DC600, 0x198D1C00, 0x198C7200, - 0x198BC800, 0x198B1E00, 0x198A7400, - 0x1989CA00, 0x19892000, 0x19887600, - 0x1987CC00, 0x19872200, 0x19867800, - 0x1985CE00, 0x19852400, 0x19847A00, - 0x1983D000, 0x19832600, 0x19827C00, - 0x1981D200, 0x19812800, 0x19807E00, - 0x197FD400, 0x197F2A00, 0x197E8000, - 0x197DD600, 0x197D2C00, 0x197C8200, - 0x197BD800, 0x197B2E00, 0x197A8400, - 0x1979DA00, 0x19793000, 0x19788600, - 0x1977DC00, 0x19773200, 0x19768800, - 0x1975DE00, 0x19753400, 0x19748A00, - 0x1973E000, 0x19733600, 0x19728C00, - 0x1971E200, 0x19713800, 0x19708E00, - 0x196FE400, 0x196F3A00, 0x196E9000, - 0x196DE600, 0x196D3C00, 0x196C9200, - 0x196BE800, 0x196B3E00, 0x196A9400, - 0x1969EA00, 0x19694000, 0x19689600, - 0x1967EC00, 0x19674200, 0x19669800, - 0x1965EE00, 0x19654400, 0x19649A00, - 0x1963F000, 0x19634600, 0x19629C00, - 0x1961F200, 0x19614800, 0x19609E00, - 0x195FF400, 0x195F4A00, 0x195EA000, - 0x195DF600, 0x195D4C00, 0x195CA200, - 0x195BF800, 0x195B4E00, 0x195AA400, - 0x1959FA00, 0x19595000, 0x1958A600, - 0x1957FC00, 0x19575200, 0x1956A800, - 0x1955FE00, 0x19555400, 0x1954AA00, - 0x19540000, 0x19535600, 0x1952AC00, - 0x19520200, 0x19515800, 0x1950AE00, - 0x19500400, 0x194F5A00, 0x194EB000, - 0x194E0600, 0x194D5C00, 0x194CB200, - 0x194C0800, 0x194B5E00, 0x194AB400, - 0x194A0A00, 0x19496000, 0x1948B600, - 0x19480C00, 0x19476200, 0x1946B800, - 0x19460E00, 0x19456400, 0x1944BA00, - 0x19441000, 0x19436600, 0x1942BC00, - 0x19421200, 0x19416800, 0x1940BE00, - 0x19401400, 0x193F6A00, 0x193EC000, - 0x193E1600, 0x193D6C00, 0x193CC200, - 0x193C1800, 0x193B6E00, 0x193AC400, - 0x193A1A00, 0x19397000, 0x1938C600, - 0x19381C00, 0x19377200, 0x1936C800, - 0x19361E00, 0x19357400, 0x1934CA00, - 0x19342000, 0x19337600, 0x1932CC00, - 0x19322200, 0x19317800, 0x1930CE00, - 0x19302400, 0x192F7A00, 0x192ED000, - 0x192E2600, 0x192D7C00, 0x192CD200, - 0x192C2800, 0x192B7E00, 0x192AD400, - 0x192A2A00, 0x19298000, 0x1928D600, - 0x19282C00, 0x19278200, 0x1926D800, - 0x19262E00, 0x19258400, 0x1924DA00, - 0x19243000, 0x19238600, 0x1922DC00, - 0x19223200, 0x19218800, 0x1920DE00, - 0x19203400, 0x191F8A00, 0x191EE000, - 0x191E3600, 0x191D8C00, 0x191CE200, - 0x191C3800, 0x191B8E00, 0x191AE400, - 0x191A3A00, 0x19199000, 0x1918E600, - 0x19183C00, 0x19179200, 0x1916E800, - 0x19163E00, 0x19159400, 0x1914EA00, - 0x19144000, 0x19139600, 0x1912EC00, - 0x19124200, 0x19119800, 0x1910EE00, - 0x19104400, 0x190F9A00, 0x190EF000, - 0x190E4600, 0x190D9C00, 0x190CF200, - 0x190C4800, 0x190B9E00, 0x190AF400, - 0x190A4A00, 0x1909A000, 0x1908F600, - 0x19084C00, 0x1907A200, 0x1906F800, - 0x19064E00, 0x1905A400, 0x1904FA00, - 0x19045000, 0x1903A600, 0x1902FC00, - 0x19025200, 0x1901A800, 0x1900FE00, - 0x19005400, 0x18FFAA00, 0x18FF0000, - 0x18FE5600, 0x18FDAC00, 0x18FD0200, - 0x18FC5800, 0x18FBAE00, 0x18FB0400, - 0x18FA5A00, 0x18F9B000, 0x18F90600, - 0x18F85C00, 0x18F7B200, 0x18F70800, - 0x18F65E00, 0x18F5B400, 0x18F50A00, - 0x18F46000, 0x18F3B600, 0x18F30C00, - 0x18F26200, 0x18F1B800, 0x18F10E00, - 0x18F06400, 0x18EFBA00, 0x18EF1000, - 0x18EE6600, 0x18EDBC00, 0x18ED1200, - 0x18EC6800, 0x18EBBE00, 0x18EB1400, - 0x18EA6A00, 0x18E9C000, 0x18E91600, - 0x18E86C00, 0x18E7C200, 0x18E71800, - 0x18E66E00, 0x18E5C400, 0x18E51A00, - 0x18E47000, 0x18E3C600, 0x18E31C00, - 0x18E27200, 0x18E1C800, 0x18E11E00, - 0x18E07400, 0x18DFCA00, 0x18DF2000, - 0x18DE7600, 0x18DDCC00, 0x18DD2200, - 0x18DC7800, 0x18DBCE00, 0x18DB2400, - 0x18DA7A00, 0x18D9D000, 0x18D92600, - 0x18D87C00, 0x18D7D200, 0x18D72800, - 0x18D67E00, 0x18D5D400, 0x18D52A00, - 0x18D48000, 0x18D3D600, 0x18D32C00, - 0x18D28200, 0x18D1D800, 0x18D12E00, - 0x18D08400, 0x18CFDA00, 0x18CF3000, - 0x18CE8600, 0x18CDDC00, 0x18CD3200, - 0x18CC8800, 0x18CBDE00, 0x18CB3400, - 0x18CA8A00, 0x18C9E000, 0x18C93600, - 0x18C88C00, 0x18C7E200, 0x18C73800, - 0x18C68E00, 0x18C5E400, 0x18C53A00, - 0x18C49000, 0x18C3E600, 0x18C33C00, - 0x18C29200, 0x18C1E800, 0x18C13E00, - 0x18C09400, 0x18BFEA00, 0x18BF4000, - 0x18BE9600, 0x18BDEC00, 0x18BD4200, - 0x18BC9800, 0x18BBEE00, 0x18BB4400, - 0x18BA9A00, 0x18B9F000, 0x18B94600, - 0x18B89C00, 0x18B7F200, 0x18B74800, - 0x18B69E00, 0x18B5F400, 0x18B54A00, - 0x18B4A000, 0x18B3F600, 0x18B34C00, - 0x18B2A200, 0x18B1F800, 0x18B14E00, - 0x18B0A400, 0x18AFFA00, 0x18AF5000, - 0x18AEA600, 0x18ADFC00, 0x18AD5200, - 0x18ACA800, 0x18ABFE00, 0x18AB5400, - 0x18AAAA00, 0x18AA0000, 0x18A95600, - 0x18A8AC00, 0x18A80200, 0x18A75800, - 0x18A6AE00, 0x18A60400, 0x18A55A00, - 0x18A4B000, 0x18A40600, 0x18A35C00, - 0x18A2B200, 0x18A20800, 0x18A15E00, - 0x18A0B400, 0x18A00A00, 0x189F6000, - 0x189EB600, 0x189E0C00, 0x189D6200, - 0x189CB800, 0x189C0E00, 0x189B6400, - 0x189ABA00, 0x189A1000, 0x18996600, - 0x1898BC00, 0x18981200, 0x18976800, - 0x1896BE00, 0x18961400, 0x18956A00, - 0x1894C000, 0x18941600, 0x18936C00, - 0x1892C200, 0x18921800, 0x18916E00, - 0x1890C400, 0x18901A00, 0x188F7000, - 0x188EC600, 0x188E1C00, 0x188D7200, - 0x188CC800, 0x188C1E00, 0x188B7400, - 0x188ACA00, 0x188A2000, 0x18897600, - 0x1888CC00, 0x18882200, 0x18877800, - 0x1886CE00, 0x18862400, 0x18857A00, - 0x1884D000, 0x18842600, 0x18837C00, - 0x1882D200, 0x18822800, 0x18817E00, - 0x1880D400, 0x18802A00, 0x187F8000, - 0x187ED600, 0x187E2C00, 0x187D8200, - 0x187CD800, 0x187C2E00, 0x187B8400, - 0x187ADA00, 0x187A3000, 0x18798600, - 0x1878DC00, 0x18783200, 0x18778800, - 0x1876DE00, 0x18763400, 0x18758A00, - 0x1874E000, 0x18743600, 0x18738C00, - 0x1872E200, 0x18723800, 0x18718E00, - 0x1870E400, 0x18703A00, 0x186F9000, - 0x186EE600, 0x186E3C00, 0x186D9200, - 0x186CE800, 0x186C3E00, 0x186B9400, - 0x186AEA00, 0x186A4000, 0x18699600, - 0x1868EC00, 0x18684200, 0x18679800, - 0x1866EE00, 0x18664400, 0x18659A00, - 0x1864F000, 0x18644600, 0x18639C00, - 0x1862F200, 0x18624800, 0x18619E00, - 0x1860F400, 0x18604A00, 0x185FA000, - 0x185EF600, 0x185E4C00, 0x185DA200, - 0x185CF800, 0x185C4E00, 0x185BA400, - 0x185AFA00, 0x185A5000, 0x1859A600, - 0x1858FC00, 0x18585200, 0x1857A800, - 0x1856FE00, 0x18565400, 0x1855AA00, - 0x18550000, 0x18545600, 0x1853AC00, - 0x18530200, 0x18525800, 0x1851AE00, - 0x18510400, 0x18505A00, 0x184FB000, - 0x184F0600, 0x184E5C00, 0x184DB200, - 0x184D0800, 0x184C5E00, 0x184BB400, - 0x184B0A00, 0x184A6000, 0x1849B600, - 0x18490C00, 0x18486200, 0x1847B800, - 0x18470E00, 0x18466400, 0x1845BA00, - 0x18451000, 0x18446600, 0x1843BC00, - 0x18431200, 0x18426800, 0x1841BE00, - 0x18411400, 0x18406A00, 0x183FC000, - 0x183F1600, 0x183E6C00, 0x183DC200, - 0x183D1800, 0x183C6E00, 0x183BC400, - 0x183B1A00, 0x183A7000, 0x1839C600, - 0x18391C00, 0x18387200, 0x1837C800, - 0x18371E00, 0x18367400, 0x1835CA00, - 0x18352000, 0x18347600, 0x1833CC00, - 0x18332200, 0x18327800, 0x1831CE00, - 0x18312400, 0x18307A00, 0x182FD000, - 0x182F2600, 0x182E7C00, 0x182DD200, - 0x182D2800, 0x182C7E00, 0x182BD400, - 0x182B2A00, 0x182A8000, 0x1829D600, - 0x18292C00, 0x18288200, 0x1827D800, - 0x18272E00, 0x18268400, 0x1825DA00, - 0x18253000, 0x18248600, 0x1823DC00, - 0x18233200, 0x18228800, 0x1821DE00, - 0x18213400, 0x18208A00, 0x181FE000, - 0x181F3600, 0x181E8C00, 0x181DE200, - 0x181D3800, 0x181C8E00, 0x181BE400, - 0x181B3A00, 0x181A9000, 0x1819E600, - 0x18193C00, 0x18189200, 0x1817E800, - 0x18173E00, 0x18169400, 0x1815EA00, - 0x18154000, 0x18149600, 0x1813EC00, - 0x18134200, 0x18129800, 0x1811EE00, - 0x18114400, 0x18109A00, 0x180FF000, - 0x180F4600, 0x180E9C00, 0x180DF200, - 0x180D4800, 0x180C9E00, 0x180BF400, - 0x180B4A00, 0x180AA000, 0x1809F600, - 0x18094C00, 0x1808A200, 0x1807F800, - 0x18074E00, 0x1806A400, 0x1805FA00, - 0x18055000, 0x1804A600, 0x1803FC00, - 0x18035200, 0x1802A800, 0x1801FE00, - 0x18015400, 0x1800AA00, 0x18000000, - 0x17FF5600, 0x17FEAC00, 0x17FE0200, - 0x17FD5800, 0x17FCAE00, 0x17FC0400, - 0x17FB5A00, 0x17FAB000, 0x17FA0600, - 0x17F95C00, 0x17F8B200, 0x17F80800, - 0x17F75E00, 0x17F6B400, 0x17F60A00, - 0x17F56000, 0x17F4B600, 0x17F40C00, - 0x17F36200, 0x17F2B800, 0x17F20E00, - 0x17F16400, 0x17F0BA00, 0x17F01000, - 0x17EF6600, 0x17EEBC00, 0x17EE1200, - 0x17ED6800, 0x17ECBE00, 0x17EC1400, - 0x17EB6A00, 0x17EAC000, 0x17EA1600, - 0x17E96C00, 0x17E8C200, 0x17E81800, - 0x17E76E00, 0x17E6C400, 0x17E61A00, - 0x17E57000, 0x17E4C600, 0x17E41C00, - 0x17E37200, 0x17E2C800, 0x17E21E00, - 0x17E17400, 0x17E0CA00, 0x17E02000, - 0x17DF7600, 0x17DECC00, 0x17DE2200, - 0x17DD7800, 0x17DCCE00, 0x17DC2400, - 0x17DB7A00, 0x17DAD000, 0x17DA2600, - 0x17D97C00, 0x17D8D200, 0x17D82800, - 0x17D77E00, 0x17D6D400, 0x17D62A00, - 0x17D58000, 0x17D4D600, 0x17D42C00, - 0x17D38200, 0x17D2D800, 0x17D22E00, - 0x17D18400, 0x17D0DA00, 0x17D03000, - 0x17CF8600, 0x17CEDC00, 0x17CE3200, - 0x17CD8800, 0x17CCDE00, 0x17CC3400, - 0x17CB8A00, 0x17CAE000, 0x17CA3600, - 0x17C98C00, 0x17C8E200, 0x17C83800, - 0x17C78E00, 0x17C6E400, 0x17C63A00, - 0x17C59000, 0x17C4E600, 0x17C43C00, - 0x17C39200, 0x17C2E800, 0x17C23E00, - 0x17C19400, 0x17C0EA00, 0x17C04000, - 0x17BF9600, 0x17BEEC00, 0x17BE4200, - 0x17BD9800, 0x17BCEE00, 0x17BC4400, - 0x17BB9A00, 0x17BAF000, 0x17BA4600, - 0x17B99C00, 0x17B8F200, 0x17B84800, - 0x17B79E00, 0x17B6F400, 0x17B64A00, - 0x17B5A000, 0x17B4F600, 0x17B44C00, - 0x17B3A200, 0x17B2F800, 0x17B24E00, - 0x17B1A400, 0x17B0FA00, 0x17B05000, - 0x17AFA600, 0x17AEFC00, 0x17AE5200, - 0x17ADA800, 0x17ACFE00, 0x17AC5400, - 0x17ABAA00, 0x17AB0000, 0x17AA5600, - 0x17A9AC00, 0x17A90200, 0x17A85800, - 0x17A7AE00, 0x17A70400, 0x17A65A00, - 0x17A5B000, 0x17A50600, 0x17A45C00, - 0x17A3B200, 0x17A30800, 0x17A25E00, - 0x17A1B400, 0x17A10A00, 0x17A06000, - 0x179FB600, 0x179F0C00, 0x179E6200, - 0x179DB800, 0x179D0E00, 0x179C6400, - 0x179BBA00, 0x179B1000, 0x179A6600, - 0x1799BC00, 0x17991200, 0x17986800, - 0x1797BE00, 0x17971400, 0x17966A00, - 0x1795C000, 0x17951600, 0x17946C00, - 0x1793C200, 0x17931800, 0x17926E00, - 0x1791C400, 0x17911A00, 0x17907000, - 0x178FC600, 0x178F1C00, 0x178E7200, - 0x178DC800, 0x178D1E00, 0x178C7400, - 0x178BCA00, 0x178B2000, 0x178A7600, - 0x1789CC00, 0x17892200, 0x17887800, - 0x1787CE00, 0x17872400, 0x17867A00, - 0x1785D000, 0x17852600, 0x17847C00, - 0x1783D200, 0x17832800, 0x17827E00, - 0x1781D400, 0x17812A00, 0x17808000, - 0x177FD600, 0x177F2C00, 0x177E8200, - 0x177DD800, 0x177D2E00, 0x177C8400, - 0x177BDA00, 0x177B3000, 0x177A8600, - 0x1779DC00, 0x17793200, 0x17788800, - 0x1777DE00, 0x17773400, 0x17768A00, - 0x1775E000, 0x17753600, 0x17748C00, - 0x1773E200, 0x17733800, 0x17728E00, - 0x1771E400, 0x17713A00, 0x17709000, - 0x176FE600, 0x176F3C00, 0x176E9200, - 0x176DE800, 0x176D3E00, 0x176C9400, - 0x176BEA00, 0x176B4000, 0x176A9600, - 0x1769EC00, 0x17694200, 0x17689800, - 0x1767EE00, 0x17674400, 0x17669A00, - 0x1765F000, 0x17654600, 0x17649C00, - 0x1763F200, 0x17634800, 0x17629E00, - 0x1761F400, 0x17614A00, 0x1760A000, - 0x175FF600, 0x175F4C00, 0x175EA200, - 0x175DF800, 0x175D4E00, 0x175CA400, - 0x175BFA00, 0x175B5000, 0x175AA600, - 0x1759FC00, 0x17595200, 0x1758A800, - 0x1757FE00, 0x17575400, 0x1756AA00, - 0x17560000, 0x17555600, 0x1754AC00, - 0x17540200, 0x17535800, 0x1752AE00, - 0x17520400, 0x17515A00, 0x1750B000, - 0x17500600, 0x174F5C00, 0x174EB200, - 0x174E0800, 0x174D5E00, 0x174CB400, - 0x174C0A00, 0x174B6000, 0x174AB600, - 0x174A0C00, 0x17496200, 0x1748B800, - 0x17480E00, 0x17476400, 0x1746BA00, - 0x17461000, 0x17456600, 0x1744BC00, - 0x17441200, 0x17436800, 0x1742BE00, - 0x17421400, 0x17416A00, 0x1740C000, - 0x17401600, 0x173F6C00, 0x173EC200, - 0x173E1800, 0x173D6E00, 0x173CC400, - 0x173C1A00, 0x173B7000, 0x173AC600, - 0x173A1C00, 0x17397200, 0x1738C800, - 0x17381E00, 0x17377400, 0x1736CA00, - 0x17362000, 0x17357600, 0x1734CC00, - 0x17342200, 0x17337800, 0x1732CE00, - 0x17322400, 0x17317A00, 0x1730D000, - 0x17302600, 0x172F7C00, 0x172ED200, - 0x172E2800, 0x172D7E00, 0x172CD400, - 0x172C2A00, 0x172B8000, 0x172AD600, - 0x172A2C00, 0x17298200, 0x1728D800, - 0x17282E00, 0x17278400, 0x1726DA00, - 0x17263000, 0x17258600, 0x1724DC00, - 0x17243200, 0x17238800, 0x1722DE00, - 0x17223400, 0x17218A00, 0x1720E000, - 0x17203600, 0x171F8C00, 0x171EE200, - 0x171E3800, 0x171D8E00, 0x171CE400, - 0x171C3A00, 0x171B9000, 0x171AE600, - 0x171A3C00, 0x17199200, 0x1718E800, - 0x17183E00, 0x17179400, 0x1716EA00, - 0x17164000, 0x17159600, 0x1714EC00, - 0x17144200, 0x17139800, 0x1712EE00, - 0x17124400, 0x17119A00, 0x1710F000, - 0x17104600, 0x170F9C00, 0x170EF200, - 0x170E4800, 0x170D9E00, 0x170CF400, - 0x170C4A00, 0x170BA000, 0x170AF600, - 0x170A4C00, 0x1709A200, 0x1708F800, - 0x17084E00, 0x1707A400, 0x1706FA00, - 0x17065000, 0x1705A600, 0x1704FC00, - 0x17045200, 0x1703A800, 0x1702FE00, - 0x17025400, 0x1701AA00, 0x17010000, - 0x17005600, 0x16FFAC00, 0x16FF0200, - 0x16FE5800, 0x16FDAE00, 0x16FD0400, - 0x16FC5A00, 0x16FBB000, 0x16FB0600, - 0x16FA5C00, 0x16F9B200, 0x16F90800, - 0x16F85E00, 0x16F7B400, 0x16F70A00, - 0x16F66000, 0x16F5B600, 0x16F50C00, - 0x16F46200, 0x16F3B800, 0x16F30E00, - 0x16F26400, 0x16F1BA00, 0x16F11000, - 0x16F06600, 0x16EFBC00, 0x16EF1200, - 0x16EE6800, 0x16EDBE00, 0x16ED1400, - 0x16EC6A00, 0x16EBC000, 0x16EB1600, - 0x16EA6C00, 0x16E9C200, 0x16E91800, - 0x16E86E00, 0x16E7C400, 0x16E71A00, - 0x16E67000, 0x16E5C600, 0x16E51C00, - 0x16E47200, 0x16E3C800, 0x16E31E00, - 0x16E27400, 0x16E1CA00, 0x16E12000, - 0x16E07600, 0x16DFCC00, 0x16DF2200, - 0x16DE7800, 0x16DDCE00, 0x16DD2400, - 0x16DC7A00, 0x16DBD000, 0x16DB2600, - 0x16DA7C00, 0x16D9D200, 0x16D92800, - 0x16D87E00, 0x16D7D400, 0x16D72A00, - 0x16D68000, 0x16D5D600, 0x16D52C00, - 0x16D48200, 0x16D3D800, 0x16D32E00, - 0x16D28400, 0x16D1DA00, 0x16D13000, - 0x16D08600, 0x16CFDC00, 0x16CF3200, - 0x16CE8800, 0x16CDDE00, 0x16CD3400, - 0x16CC8A00, 0x16CBE000, 0x16CB3600, - 0x16CA8C00, 0x16C9E200, 0x16C93800, - 0x16C88E00, 0x16C7E400, 0x16C73A00, - 0x16C69000, 0x16C5E600, 0x16C53C00, - 0x16C49200, 0x16C3E800, 0x16C33E00, - 0x16C29400, 0x16C1EA00, 0x16C14000, - 0x16C09600, 0x16BFEC00, 0x16BF4200, - 0x16BE9800, 0x16BDEE00, 0x16BD4400, - 0x16BC9A00, 0x16BBF000, 0x16BB4600, - 0x16BA9C00, 0x16B9F200, 0x16B94800, - 0x16B89E00, 0x16B7F400, 0x16B74A00, - 0x16B6A000, 0x16B5F600, 0x16B54C00, - 0x16B4A200, 0x16B3F800, 0x16B34E00, - 0x16B2A400, 0x16B1FA00, 0x16B15000, - 0x16B0A600, 0x16AFFC00, 0x16AF5200, - 0x16AEA800, 0x16ADFE00, 0x16AD5400, - 0x16ACAA00, 0x16AE0000, 0x16AD5F40, - 0x16ACBE80, 0x16AC1DC0, 0x16AB7D00, - 0x16AADC40, 0x16AA3B80, 0x16A99AC0, - 0x16A8FA00, 0x16A85940, 0x16A7B880, - 0x16A717C0, 0x16A67700, 0x16A5D640, - 0x16A53580, 0x16A494C0, 0x16A3F400, - 0x16A35340, 0x16A2B280, 0x16A211C0, - 0x16A17100, 0x16A0D040, 0x16A02F80, - 0x169F8EC0, 0x169EEE00, 0x169E4D40, - 0x169DAC80, 0x169D0BC0, 0x169C6B00, - 0x169BCA40, 0x169B2980, 0x169A88C0, - 0x1699E800, 0x16994740, 0x1698A680, - 0x169805C0, 0x16976500, 0x1696C440, - 0x16962380, 0x169582C0, 0x1694E200, - 0x16944140, 0x1693A080, 0x1692FFC0, - 0x16925F00, 0x1691BE40, 0x16911D80, - 0x16907CC0, 0x168FDC00, 0x168F3B40, - 0x168E9A80, 0x168DF9C0, 0x168D5900, - 0x168CB840, 0x168C1780, 0x168B76C0, - 0x168AD600, 0x168A3540, 0x16899480, - 0x1688F3C0, 0x16885300, 0x1687B240, - 0x16871180, 0x168670C0, 0x1685D000, - 0x16852F40, 0x16848E80, 0x1683EDC0, - 0x16834D00, 0x1682AC40, 0x16820B80, - 0x16816AC0, 0x1680CA00, 0x16802940, - 0x167F8880, 0x167EE7C0, 0x167E4700, - 0x167DA640, 0x167D0580, 0x167C64C0, - 0x167BC400, 0x167B2340, 0x167A8280, - 0x1679E1C0, 0x16794100, 0x1678A040, - 0x1677FF80, 0x16775EC0, 0x1676BE00, - 0x16761D40, 0x16757C80, 0x1674DBC0, - 0x16743B00, 0x16739A40, 0x1672F980, - 0x167258C0, 0x1671B800, 0x16711740, - 0x16707680, 0x166FD5C0, 0x166F3500, - 0x166E9440, 0x166DF380, 0x166D52C0, - 0x166CB200, 0x166C1140, 0x166B7080, - 0x166ACFC0, 0x166A2F00, 0x16698E40, - 0x1668ED80, 0x16684CC0, 0x1667AC00, - 0x16670B40, 0x16666A80, 0x1665C9C0, - 0x16652900, 0x16648840, 0x1663E780, - 0x166346C0, 0x1662A600, 0x16620540, - 0x16616480, 0x1660C3C0, 0x16602300, - 0x165F8240, 0x165EE180, 0x165E40C0, - 0x165DA000, 0x165CFF40, 0x165C5E80, - 0x165BBDC0, 0x165B1D00, 0x165A7C40, - 0x1659DB80, 0x16593AC0, 0x16589A00, - 0x1657F940, 0x16575880, 0x1656B7C0, - 0x16561700, 0x16557640, 0x1654D580, - 0x165434C0, 0x16539400, 0x1652F340, - 0x16525280, 0x1651B1C0, 0x16511100, - 0x16507040, 0x164FCF80, 0x164F2EC0, - 0x164E8E00, 0x164DED40, 0x164D4C80, - 0x164CABC0, 0x164C0B00, 0x164B6A40, - 0x164AC980, 0x164A28C0, 0x16498800, - 0x1648E740, 0x16484680, 0x1647A5C0, - 0x16470500, 0x16466440, 0x1645C380, - 0x164522C0, 0x16448200, 0x1643E140, - 0x16434080, 0x16429FC0, 0x1641FF00, - 0x16415E40, 0x1640BD80, 0x16401CC0, - 0x163F7C00, 0x163EDB40, 0x163E3A80, - 0x163D99C0, 0x163CF900, 0x163C5840, - 0x163BB780, 0x163B16C0, 0x163A7600, - 0x1639D540, 0x16393480, 0x163893C0, - 0x1637F300, 0x16375240, 0x1636B180, - 0x163610C0, 0x16357000, 0x1634CF40, - 0x16342E80, 0x16338DC0, 0x1632ED00, - 0x16324C40, 0x1631AB80, 0x16310AC0, - 0x16306A00, 0x162FC940, 0x162F2880, - 0x162E87C0, 0x162DE700, 0x162D4640, - 0x162CA580, 0x162C04C0, 0x162B6400, - 0x162AC340, 0x162A2280, 0x162981C0, - 0x1628E100, 0x16284040, 0x16279F80, - 0x1626FEC0, 0x16265E00, 0x1625BD40, - 0x16251C80, 0x16247BC0, 0x1623DB00, - 0x16233A40, 0x16229980, 0x1621F8C0, - 0x16215800, 0x1620B740, 0x16201680, - 0x161F75C0, 0x161ED500, 0x161E3440, - 0x161D9380, 0x161CF2C0, 0x161C5200, - 0x161BB140, 0x161B1080, 0x161A6FC0, - 0x1619CF00, 0x16192E40, 0x16188D80, - 0x1617ECC0, 0x16174C00, 0x1616AB40, - 0x16160A80, 0x161569C0, 0x1614C900, - 0x16142840, 0x16138780, 0x1612E6C0, - 0x16124600, 0x1611A540, 0x16110480, - 0x161063C0, 0x160FC300, 0x160F2240, - 0x160E8180, 0x160DE0C0, 0x160D4000, - 0x160C9F40, 0x160BFE80, 0x160B5DC0, - 0x160ABD00, 0x160A1C40, 0x16097B80, - 0x1608DAC0, 0x16083A00, 0x16079940, - 0x1606F880, 0x160657C0, 0x1605B700, - 0x16051640, 0x16047580, 0x1603D4C0, - 0x16033400, 0x16029340, 0x1601F280, - 0x160151C0, 0x1600B100, 0x16001040, - 0x15FF6F80, 0x15FECEC0, 0x15FE2E00, - 0x15FD8D40, 0x15FCEC80, 0x15FC4BC0, - 0x15FBAB00, 0x15FB0A40, 0x15FA6980, - 0x15F9C8C0, 0x15F92800, 0x15F88740, - 0x15F7E680, 0x15F745C0, 0x15F6A500, - 0x15F60440, 0x15F56380, 0x15F4C2C0, - 0x15F42200, 0x15F38140, 0x15F2E080, - 0x15F23FC0, 0x15F19F00, 0x15F0FE40, - 0x15F05D80, 0x15EFBCC0, 0x15EF1C00, - 0x15EE7B40, 0x15EDDA80, 0x15ED39C0, - 0x15EC9900, 0x15EBF840, 0x15EB5780, - 0x15EAB6C0, 0x15EA1600, 0x15E97540, - 0x15E8D480, 0x15E833C0, 0x15E79300, - 0x15E6F240, 0x15E65180, 0x15E5B0C0, - 0x15E51000, 0x15E46F40, 0x15E3CE80, - 0x15E32DC0, 0x15E28D00, 0x15E1EC40, - 0x15E14B80, 0x15E0AAC0, 0x15E00A00, - 0x15DF6940, 0x15DEC880, 0x15DE27C0, - 0x15DD8700, 0x15DCE640, 0x15DC4580, - 0x15DBA4C0, 0x15DB0400, 0x15DA6340, - 0x15D9C280, 0x15D921C0, 0x15D88100, - 0x15D7E040, 0x15D73F80, 0x15D69EC0, - 0x15D5FE00, 0x15D55D40, 0x15D4BC80, - 0x15D41BC0, 0x15D37B00, 0x15D2DA40, - 0x15D23980, 0x15D198C0, 0x15D0F800, - 0x15D05740, 0x15CFB680, 0x15CF15C0, - 0x15CE7500, 0x15CDD440, 0x15CD3380, - 0x15CC92C0, 0x15CBF200, 0x15CB5140, - 0x15CAB080, 0x15CA0FC0, 0x15C96F00, - 0x15C8CE40, 0x15C82D80, 0x15C78CC0, - 0x15C6EC00, 0x15C64B40, 0x15C5AA80, - 0x15C509C0, 0x15C46900, 0x15C3C840, - 0x15C32780, 0x15C286C0, 0x15C1E600, - 0x15C14540, 0x15C0A480, 0x15C003C0, - 0x15BF6300, 0x15BEC240, 0x15BE2180, - 0x15BD80C0, 0x15BCE000, 0x15BC3F40, - 0x15BB9E80, 0x15BAFDC0, 0x15BA5D00, - 0x15B9BC40, 0x15B91B80, 0x15B87AC0, - 0x15B7DA00, 0x15B73940, 0x15B69880, - 0x15B5F7C0, 0x15B55700, 0x15B4B640, - 0x15B41580, 0x15B374C0, 0x15B2D400, - 0x15B23340, 0x15B19280, 0x15B0F1C0, - 0x15B05100, 0x15AFB040, 0x15AF0F80, - 0x15AE6EC0, 0x15ADCE00, 0x15AD2D40, - 0x15AC8C80, 0x15ABEBC0, 0x15AB4B00, - 0x15AAAA40, 0x15AA0980, 0x15A968C0, - 0x15A8C800, 0x15A82740, 0x15A78680, - 0x15A6E5C0, 0x15A64500, 0x15A5A440, - 0x15A50380, 0x15A462C0, 0x15A3C200, - 0x15A32140, 0x15A28080, 0x15A1DFC0, - 0x15A13F00, 0x15A09E40, 0x159FFD80, - 0x159F5CC0, 0x159EBC00, 0x159E1B40, - 0x159D7A80, 0x159CD9C0, 0x159C3900, - 0x159B9840, 0x159AF780, 0x159A56C0, - 0x1599B600, 0x15991540, 0x15987480, - 0x1597D3C0, 0x15973300, 0x15969240, - 0x1595F180, 0x159550C0, 0x1594B000, - 0x15940F40, 0x15936E80, 0x1592CDC0, - 0x15922D00, 0x15918C40, 0x1590EB80, - 0x15904AC0, 0x158FAA00, 0x158F0940, - 0x158E6880, 0x158DC7C0, 0x158D2700, - 0x158C8640, 0x158BE580, 0x158B44C0, - 0x158AA400, 0x158A0340, 0x15896280, - 0x1588C1C0, 0x15882100, 0x15878040, - 0x1586DF80, 0x15863EC0, 0x15859E00, - 0x1584FD40, 0x15845C80, 0x1583BBC0, - 0x15831B00, 0x15827A40, 0x1581D980, - 0x158138C0, 0x15809800, 0x157FF740, - 0x157F5680, 0x157EB5C0, 0x157E1500, - 0x157D7440, 0x157CD380, 0x157C32C0, - 0x157B9200, 0x157AF140, 0x157A5080, - 0x1579AFC0, 0x15790F00, 0x15786E40, - 0x1577CD80, 0x15772CC0, 0x15768C00, - 0x1575EB40, 0x15754A80, 0x1574A9C0, - 0x15740900, 0x15736840, 0x1572C780, - 0x157226C0, 0x15718600, 0x1570E540, - 0x15704480, 0x156FA3C0, 0x156F0300, - 0x156E6240, 0x156DC180, 0x156D20C0, - 0x156C8000, 0x156BDF40, 0x156B3E80, - 0x156A9DC0, 0x1569FD00, 0x15695C40, - 0x1568BB80, 0x15681AC0, 0x15677A00, - 0x1566D940, 0x15663880, 0x156597C0, - 0x1564F700, 0x15645640, 0x1563B580, - 0x156314C0, 0x15627400, 0x1561D340, - 0x15613280, 0x156091C0, 0x155FF100, - 0x155F5040, 0x155EAF80, 0x155E0EC0, - 0x155D6E00, 0x155CCD40, 0x155C2C80, - 0x155B8BC0, 0x155AEB00, 0x155A4A40, - 0x1559A980, 0x155908C0, 0x15586800, - 0x1557C740, 0x15572680, 0x155685C0, - 0x1555E500, 0x15554440, 0x1554A380, - 0x155402C0, 0x15536200, 0x1552C140, - 0x15522080, 0x15517FC0, 0x1550DF00, - 0x15503E40, 0x154F9D80, 0x154EFCC0, - 0x154E5C00, 0x154DBB40, 0x154D1A80, - 0x154C79C0, 0x154BD900, 0x154B3840, - 0x154A9780, 0x1549F6C0, 0x15495600, - 0x1548B540, 0x15481480, 0x154773C0, - 0x1546D300, 0x15463240, 0x15459180, - 0x1544F0C0, 0x15445000, 0x1543AF40, - 0x15430E80, 0x15426DC0, 0x1541CD00, - 0x15412C40, 0x15408B80, 0x153FEAC0, - 0x153F4A00, 0x153EA940, 0x153E0880, - 0x153D67C0, 0x153CC700, 0x153C2640, - 0x153B8580, 0x153AE4C0, 0x153A4400, - 0x1539A340, 0x15390280, 0x153861C0, - 0x1537C100, 0x15372040, 0x15367F80, - 0x1535DEC0, 0x15353E00, 0x15349D40, - 0x1533FC80, 0x15335BC0, 0x1532BB00, - 0x15321A40, 0x15317980, 0x1530D8C0, - 0x15303800, 0x152F9740, 0x152EF680, - 0x152E55C0, 0x152DB500, 0x152D1440, - 0x152C7380, 0x152BD2C0, 0x152B3200, - 0x152A9140, 0x1529F080, 0x15294FC0, - 0x1528AF00, 0x15280E40, 0x15276D80, - 0x1526CCC0, 0x15262C00, 0x15258B40, - 0x1524EA80, 0x152449C0, 0x1523A900, - 0x15230840, 0x15226780, 0x1521C6C0, - 0x15212600, 0x15208540, 0x151FE480, - 0x151F43C0, 0x151EA300, 0x151E0240, - 0x151D6180, 0x151CC0C0, 0x151C2000, - 0x151B7F40, 0x151ADE80, 0x151A3DC0, - 0x15199D00, 0x1518FC40, 0x15185B80, - 0x1517BAC0, 0x15171A00, 0x15167940, - 0x1515D880, 0x151537C0, 0x15149700, - 0x1513F640, 0x15135580, 0x1512B4C0, - 0x15121400, 0x15117340, 0x1510D280, - 0x151031C0, 0x150F9100, 0x150EF040, - 0x150E4F80, 0x150DAEC0, 0x150D0E00, - 0x150C6D40, 0x150BCC80, 0x150B2BC0, - 0x150A8B00, 0x1509EA40, 0x15094980, - 0x1508A8C0, 0x15080800, 0x15076740, - 0x1506C680, 0x150625C0, 0x15058500, - 0x1504E440, 0x15044380, 0x1503A2C0, - 0x15030200, 0x15026140, 0x1501C080, - 0x15011FC0, 0x15007F00, 0x14FFDE40, - 0x14FF3D80, 0x14FE9CC0, 0x14FDFC00, - 0x14FD5B40, 0x14FCBA80, 0x14FC19C0, - 0x14FB7900, 0x14FAD840, 0x14FA3780, - 0x14F996C0, 0x14F8F600, 0x14F85540, - 0x14F7B480, 0x14F713C0, 0x14F67300, - 0x14F5D240, 0x14F53180, 0x14F490C0, - 0x14F3F000, 0x14F34F40, 0x14F2AE80, - 0x14F20DC0, 0x14F16D00, 0x14F0CC40, - 0x14F02B80, 0x14EF8AC0, 0x14EEEA00, - 0x14EE4940, 0x14EDA880, 0x14ED07C0, - 0x14EC6700, 0x14EBC640, 0x14EB2580, - 0x14EA84C0, 0x14E9E400, 0x14E94340, - 0x14E8A280, 0x14E801C0, 0x14E76100, - 0x14E6C040, 0x14E61F80, 0x14E57EC0, - 0x14E4DE00, 0x14E43D40, 0x14E39C80, - 0x14E2FBC0, 0x14E25B00, 0x14E1BA40, - 0x14E11980, 0x14E078C0, 0x14DFD800, - 0x14DF3740, 0x14DE9680, 0x14DDF5C0, - 0x14DD5500, 0x14DCB440, 0x14DC1380, - 0x14DB72C0, 0x14DAD200, 0x14DA3140, - 0x14D99080, 0x14D8EFC0, 0x14D84F00, - 0x14D7AE40, 0x14D70D80, 0x14D66CC0, - 0x14D5CC00, 0x14D52B40, 0x14D48A80, - 0x14D3E9C0, 0x14D34900, 0x14D2A840, - 0x14D20780, 0x14D166C0, 0x14D0C600, - 0x14D02540, 0x14CF8480, 0x14CEE3C0, - 0x14CE4300, 0x14CDA240, 0x14CD0180, - 0x14CC60C0, 0x14CBC000, 0x14CB1F40, - 0x14CA7E80, 0x14C9DDC0, 0x14C93D00, - 0x14C89C40, 0x14C7FB80, 0x14C75AC0, - 0x14C6BA00, 0x14C61940, 0x14C57880, - 0x14C4D7C0, 0x14C43700, 0x14C39640, - 0x14C2F580, 0x14C254C0, 0x14C1B400, - 0x14C11340, 0x14C07280, 0x14BFD1C0, - 0x14BF3100, 0x14BE9040, 0x14BDEF80, - 0x14BD4EC0, 0x14BCAE00, 0x14BC0D40, - 0x14BB6C80, 0x14BACBC0, 0x14BA2B00, - 0x14B98A40, 0x14B8E980, 0x14B848C0, - 0x14B7A800, 0x14B70740, 0x14B66680, - 0x14B5C5C0, 0x14B52500, 0x14B48440, - 0x14B3E380, 0x14B342C0, 0x14B2A200, - 0x14B20140, 0x14B16080, 0x14B0BFC0, - 0x14B01F00, 0x14AF7E40, 0x14AEDD80, - 0x14AE3CC0, 0x14AD9C00, 0x14ACFB40, - 0x14AC5A80, 0x14ABB9C0, 0x14AB1900, - 0x14AA7840, 0x14A9D780, 0x14A936C0, - 0x14A89600, 0x14A7F540, 0x14A75480, - 0x14A6B3C0, 0x14A61300, 0x14A57240, - 0x14A4D180, 0x14A430C0, 0x14A39000, - 0x14A2EF40, 0x14A24E80, 0x14A1ADC0, - 0x14A10D00, 0x14A06C40, 0x149FCB80, - 0x149F2AC0, 0x149E8A00, 0x149DE940, - 0x149D4880, 0x149CA7C0, 0x149C0700, - 0x149B6640, 0x149AC580, 0x149A24C0, - 0x14998400, 0x1498E340, 0x14984280, - 0x1497A1C0, 0x14970100, 0x14966040, - 0x1495BF80, 0x14951EC0, 0x14947E00, - 0x1493DD40, 0x14933C80, 0x14929BC0, - 0x1491FB00, 0x14915A40, 0x1490B980, - 0x149018C0, 0x148F7800, 0x148ED740, - 0x148E3680, 0x148D95C0, 0x148CF500, - 0x148C5440, 0x148BB380, 0x148B12C0, - 0x148A7200, 0x1489D140, 0x14893080, - 0x14888FC0, 0x1487EF00, 0x14874E40, - 0x1486AD80, 0x14860CC0, 0x14856C00, - 0x1484CB40, 0x14842A80, 0x148389C0, - 0x1482E900, 0x14824840, 0x1481A780, - 0x148106C0, 0x14806600, 0x147FC540, - 0x147F2480, 0x147E83C0, 0x147DE300, - 0x147D4240, 0x147CA180, 0x147C00C0, - 0x147B6000, 0x147ABF40, 0x147A1E80, - 0x14797DC0, 0x1478DD00, 0x14783C40, - 0x14779B80, 0x1476FAC0, 0x14765A00, - 0x1475B940, 0x14751880, 0x147477C0, - 0x1473D700, 0x14733640, 0x14729580, - 0x1471F4C0, 0x14715400, 0x1470B340, - 0x14701280, 0x146F71C0, 0x146ED100, - 0x146E3040, 0x146D8F80, 0x146CEEC0, - 0x146C4E00, 0x146BAD40, 0x146B0C80, - 0x146A6BC0, 0x1469CB00, 0x14692A40, - 0x14688980, 0x1467E8C0, 0x14674800, - 0x1466A740, 0x14660680, 0x146565C0, - 0x1464C500, 0x14642440, 0x14638380, - 0x1462E2C0, 0x14624200, 0x1461A140, - 0x14610080, 0x14605FC0, 0x145FBF00, - 0x145F1E40, 0x145E7D80, 0x145DDCC0, - 0x145D3C00, 0x145C9B40, 0x145BFA80, - 0x145B59C0, 0x145AB900, 0x145A1840, - 0x14597780, 0x1458D6C0, 0x14583600, - 0x14579540, 0x1456F480, 0x145653C0, - 0x1455B300, 0x14551240, 0x14547180, - 0x1453D0C0, 0x14533000, 0x14528F40, - 0x1451EE80, 0x14514DC0, 0x1450AD00, - 0x14500C40, 0x144F6B80, 0x144ECAC0, - 0x144E2A00, 0x144D8940, 0x144CE880, - 0x144C47C0, 0x144BA700, 0x144B0640, - 0x144A6580, 0x1449C4C0, 0x14492400, - 0x14488340, 0x1447E280, 0x144741C0, - 0x1446A100, 0x14460040, 0x14455F80, - 0x1444BEC0, 0x14441E00, 0x14437D40, - 0x1442DC80, 0x14423BC0, 0x14419B00, - 0x1440FA40, 0x14405980, 0x143FB8C0, - 0x143F1800, 0x143E7740, 0x143DD680, - 0x143D35C0, 0x143C9500, 0x143BF440, - 0x143B5380, 0x143AB2C0, 0x143A1200, - 0x14397140, 0x1438D080, 0x14382FC0, - 0x14378F00, 0x1436EE40, 0x14364D80, - 0x1435ACC0, 0x14350C00, 0x14346B40, - 0x1433CA80, 0x143329C0, 0x14328900, - 0x1431E840, 0x14314780, 0x1430A6C0, - 0x14300600, 0x142F6540, 0x142EC480, - 0x142E23C0, 0x142D8300, 0x142CE240, - 0x142C4180, 0x142BA0C0, 0x142B0000, - 0x142A5F40, 0x1429BE80, 0x14291DC0, - 0x14287D00, 0x1427DC40, 0x14273B80, - 0x14269AC0, 0x1425FA00, 0x14255940, - 0x1424B880, 0x142417C0, 0x14237700, - 0x1422D640, 0x14223580, 0x142194C0, - 0x1420F400, 0x14205340, 0x141FB280, - 0x141F11C0, 0x141E7100, 0x141DD040, - 0x141D2F80, 0x141C8EC0, 0x141BEE00, - 0x141B4D40, 0x141AAC80, 0x141A0BC0, - 0x14196B00, 0x1418CA40, 0x14182980, - 0x141788C0, 0x1416E800, 0x14164740, - 0x1415A680, 0x141505C0, 0x14146500, - 0x1413C440, 0x14132380, 0x141282C0, - 0x1411E200, 0x14114140, 0x1410A080, - 0x140FFFC0, 0x140F5F00, 0x140EBE40, - 0x140E1D80, 0x140D7CC0, 0x140CDC00, - 0x140C3B40, 0x140B9A80, 0x140AF9C0, - 0x140A5900, 0x1409B840, 0x14091780, - 0x140876C0, 0x1407D600, 0x14073540, - 0x14069480, 0x1405F3C0, 0x14055300, - 0x1404B240, 0x14041180, 0x140370C0, - 0x1402D000, 0x14022F40, 0x14018E80, - 0x1400EDC0, 0x14004D00, 0x13FFAC40, - 0x13FF0B80, 0x13FE6AC0, 0x13FDCA00, - 0x13FD2940, 0x13FC8880, 0x13FBE7C0, - 0x13FB4700, 0x13FAA640, 0x13FA0580, - 0x13F964C0, 0x13F8C400, 0x13F82340, - 0x13F78280, 0x13F6E1C0, 0x13F64100, - 0x13F5A040, 0x13F4FF80, 0x13F45EC0, - 0x13F3BE00, 0x13F31D40, 0x13F27C80, - 0x13F1DBC0, 0x13F13B00, 0x13F09A40, - 0x13EFF980, 0x13EF58C0, 0x13EEB800, - 0x13EE1740, 0x13ED7680, 0x13ECD5C0, - 0x13EC3500, 0x13EB9440, 0x13EAF380, - 0x13EA52C0, 0x13E9B200, 0x13E91140, - 0x13E87080, 0x13E7CFC0, 0x13E72F00, - 0x13E68E40, 0x13E5ED80, 0x13E54CC0, - 0x13E4AC00, 0x13E40B40, 0x13E36A80, - 0x13E2C9C0, 0x13E22900, 0x13E18840, - 0x13E0E780, 0x13E046C0, 0x13DFA600, - 0x13DF0540, 0x13DE6480, 0x13DDC3C0, - 0x13DD2300, 0x13DC8240, 0x13DBE180, - 0x13DB40C0, 0x13DAA000, 0x13D9FF40, - 0x13D95E80, 0x13D8BDC0, 0x13D81D00, - 0x13D77C40, 0x13D6DB80, 0x13D63AC0, - 0x13D59A00, 0x13D4F940, 0x13D45880, - 0x13D3B7C0, 0x13D31700, 0x13D27640, - 0x13D1D580, 0x13D134C0, 0x13D09400, - 0x13CFF340, 0x13CF5280, 0x13CEB1C0, - 0x13CE1100, 0x13CD7040, 0x13CCCF80, - 0x13CC2EC0, 0x13CB8E00, 0x13CAED40, - 0x13CA4C80, 0x13C9ABC0, 0x13C90B00, - 0x13C86A40, 0x13C7C980, 0x13C728C0, - 0x13C68800, 0x13C5E740, 0x13C54680, - 0x13C4A5C0, 0x13C40500, 0x13C36440, - 0x13C2C380, 0x13C222C0, 0x13C18200, - 0x13C0E140, 0x13C04080, 0x13BF9FC0, - 0x13BEFF00, 0x13BE5E40, 0x13BDBD80, - 0x13BD1CC0, 0x13BC7C00, 0x13BBDB40, - 0x13BB3A80, 0x13BA99C0, 0x13B9F900, - 0x13B95840, 0x13B8B780, 0x13B816C0, - 0x13B77600, 0x13B6D540, 0x13B63480, - 0x13B593C0, 0x13B4F300, 0x13B45240, - 0x13B3B180, 0x13B310C0, 0x13B27000, - 0x13B1CF40, 0x13B12E80, 0x13B08DC0, - 0x13AFED00, 0x13AF4C40, 0x13AEAB80, - 0x13AE0AC0, 0x13AD6A00, 0x13ACC940, - 0x13AC2880, 0x13AB87C0, 0x13AAE700, - 0x13AA4640, 0x13A9A580, 0x13A904C0, - 0x13A86400, 0x13A7C340, 0x13A72280, - 0x13A681C0, 0x13A5E100, 0x13A54040, - 0x13A49F80, 0x13A3FEC0, 0x13A35E00, - 0x13A2BD40, 0x13A21C80, 0x13A17BC0, - 0x13A0DB00, 0x13A03A40, 0x139F9980, - 0x139EF8C0, 0x139E5800, 0x139DB740, - 0x139D1680, 0x139C75C0, 0x139BD500, - 0x139B3440, 0x139A9380, 0x1399F2C0, - 0x13995200, 0x1398B140, 0x13981080, - 0x13976FC0, 0x1396CF00, 0x13962E40, - 0x13958D80, 0x1394ECC0, 0x13944C00, - 0x1393AB40, 0x13930A80, 0x139269C0, - 0x1391C900, 0x13912840, 0x13908780, - 0x138FE6C0, 0x138F4600, 0x138EA540, - 0x138E0480, 0x138D63C0, 0x138CC300, - 0x138C2240, 0x138B8180, 0x138AE0C0, - 0x138A4000, 0x13899F40, 0x1388FE80, - 0x13885DC0, 0x1387BD00, 0x13871C40, - 0x13867B80, 0x1385DAC0, 0x13853A00, - 0x13849940, 0x1383F880, 0x138357C0, - 0x1382B700, 0x13821640, 0x13817580, - 0x1380D4C0, 0x13803400, 0x137F9340, - 0x137EF280, 0x137E51C0, 0x137DB100, - 0x137D1040, 0x137C6F80, 0x137BCEC0, - 0x137B2E00, 0x137A8D40, 0x1379EC80, - 0x13794BC0, 0x1378AB00, 0x13780A40, - 0x13776980, 0x1376C8C0, 0x13762800, - 0x13758740, 0x1374E680, 0x137445C0, - 0x1373A500, 0x13730440, 0x13726380, - 0x1371C2C0, 0x13712200, 0x13708140, - 0x136FE080, 0x136F3FC0, 0x136E9F00, - 0x136DFE40, 0x136D5D80, 0x136CBCC0, - 0x136C1C00, 0x136B7B40, 0x136ADA80, - 0x136A39C0, 0x13699900, 0x1368F840, - 0x13685780, 0x1367B6C0, 0x13671600, - 0x13667540, 0x1365D480, 0x136533C0, - 0x13649300, 0x1363F240, 0x13635180, - 0x1362B0C0, 0x13621000, 0x13616F40, - 0x1360CE80, 0x13602DC0, 0x135F8D00, - 0x135EEC40, 0x135E4B80, 0x135DAAC0, - 0x135D0A00, 0x135C6940, 0x135BC880, - 0x135B27C0, 0x135A8700, 0x1359E640, - 0x13594580, 0x1358A4C0, 0x13580400, - 0x13576340, 0x1356C280, 0x135621C0, - 0x13558100, 0x1354E040, 0x13543F80, - 0x13539EC0, 0x1352FE00, 0x13525D40, - 0x1351BC80, 0x13511BC0, 0x13507B00, - 0x134FDA40, 0x134F3980, 0x134E98C0, - 0x134DF800, 0x134D5740, 0x134CB680, - 0x134C15C0, 0x134B7500, 0x134AD440, - 0x134A3380, 0x134992C0, 0x1348F200, - 0x13485140, 0x1347B080, 0x13470FC0, - 0x13466F00, 0x1345CE40, 0x13452D80, - 0x13448CC0, 0x1343EC00, 0x13434B40, - 0x1342AA80, 0x134209C0, 0x13416900, - 0x1340C840, 0x13402780, 0x133F86C0, - 0x133EE600, 0x133E4540, 0x133DA480, - 0x133D03C0, 0x133C6300, 0x133BC240, - 0x133B2180, 0x133A80C0, 0x1339E000, - 0x13393F40, 0x13389E80, 0x1337FDC0, - 0x13375D00, 0x1336BC40, 0x13361B80, - 0x13357AC0, 0x1334DA00, 0x13343940, - 0x13339880, 0x1332F7C0, 0x13325700, - 0x1331B640, 0x13311580, 0x133074C0, - 0x132FD400, 0x132F3340, 0x132E9280, - 0x132DF1C0, 0x132D5100, 0x132CB040, - 0x132C0F80, 0x132B6EC0, 0x132ACE00, - 0x132A2D40, 0x13298C80, 0x1328EBC0, - 0x13284B00, 0x1327AA40, 0x13270980, - 0x132668C0, 0x1325C800, 0x13252740, - 0x13248680, 0x1323E5C0, 0x13234500, - 0x1322A440, 0x13220380, 0x132162C0, - 0x1320C200, 0x13202140, 0x131F8080, - 0x131EDFC0, 0x131E3F00, 0x131D9E40, - 0x131CFD80, 0x131C5CC0, 0x131BBC00, - 0x131B1B40, 0x131A7A80, 0x1319D9C0, - 0x13193900, 0x13189840, 0x1317F780, - 0x131756C0, 0x1316B600, 0x13161540, - 0x13157480, 0x1314D3C0, 0x13143300, - 0x13139240, 0x1312F180, 0x131250C0, - 0x1311B000, 0x13110F40, 0x13106E80, - 0x130FCDC0, 0x130F2D00, 0x130E8C40, - 0x130DEB80, 0x130D4AC0, 0x130CAA00, - 0x130C0940, 0x130B6880, 0x130AC7C0, - 0x130A2700, 0x13098640, 0x1308E580, - 0x130844C0, 0x1307A400, 0x13070340, - 0x13066280, 0x1305C1C0, 0x13052100, - 0x13048040, 0x1303DF80, 0x13033EC0, - 0x13029E00, 0x1301FD40, 0x13015C80, - 0x1300BBC0, 0x13001B00, 0x12FF7A40, - 0x12FED980, 0x12FE38C0, 0x12FD9800, - 0x12FCF740, 0x12FC5680, 0x12FBB5C0, - 0x12FB1500, 0x12FA7440, 0x12F9D380, - 0x12F932C0, 0x12F89200, 0x12F7F140, - 0x12F75080, 0x12F6AFC0, 0x12F60F00, - 0x12F56E40, 0x12F4CD80, 0x12F42CC0, - 0x12F38C00, 0x12F2EB40, 0x12F24A80, - 0x12F1A9C0, 0x12F10900, 0x12F06840, - 0x12EFC780, 0x12EF26C0, 0x12EE8600, - 0x12EDE540, 0x12ED4480, 0x12ECA3C0, - 0x12EC0300, 0x12EB6240, 0x12EAC180, - 0x12EA20C0, 0x12E98000, 0x12E8DF40, - 0x12E83E80, 0x12E79DC0, 0x12E6FD00, - 0x12E65C40, 0x12E5BB80, 0x12E51AC0, - 0x12E47A00, 0x12E3D940, 0x12E33880, - 0x12E297C0, 0x12E1F700, 0x12E15640, - 0x12E0B580, 0x12E014C0, 0x12DF7400, - 0x12DED340, 0x12DE3280, 0x12DD91C0, - 0x12DCF100, 0x12DC5040, 0x12DBAF80, - 0x12DB0EC0, 0x12DA6E00, 0x12D9CD40, - 0x12D92C80, 0x12D88BC0, 0x12D7EB00, - 0x12D74A40, 0x12D6A980, 0x12D608C0, - 0x12D56800, 0x12D4C740, 0x12D42680, - 0x12D385C0, 0x12D2E500, 0x12D24440, - 0x12D1A380, 0x12D102C0, 0x12D06200, - 0x12CFC140, 0x12CF2080, 0x12CE7FC0, - 0x12CDDF00, 0x12CD3E40, 0x12CC9D80, - 0x12CBFCC0, 0x12CB5C00, 0x12CABB40, - 0x12CA1A80, 0x12C979C0, 0x12C8D900, - 0x12C83840, 0x12C79780, 0x12C6F6C0, - 0x12C65600, 0x12C5B540, 0x12C51480, - 0x12C473C0, 0x12C3D300, 0x12C33240, - 0x12C29180, 0x12C1F0C0, 0x12C15000, - 0x12C0AF40, 0x12C00E80, 0x12BF6DC0, - 0x12BECD00, 0x12BE2C40, 0x12BD8B80, - 0x12BCEAC0, 0x12BC4A00, 0x12BBA940, - 0x12BB0880, 0x12BA67C0, 0x12B9C700, - 0x12B92640, 0x12B88580, 0x12B7E4C0, - 0x12B74400, 0x12B6A340, 0x12B60280, - 0x12B561C0, 0x12B4C100, 0x12B42040, - 0x12B37F80, 0x12B2DEC0, 0x12B23E00, - 0x12B19D40, 0x12B0FC80, 0x12B05BC0, - 0x12AFBB00, 0x12AF1A40, 0x12AE7980, - 0x12ADD8C0, 0x12AD3800, 0x12AC9740, - 0x12ABF680, 0x12AB55C0, 0x12AAB500, - 0x12AA1440, 0x12A97380, 0x12A8D2C0, - 0x12A83200, 0x12A79140, 0x12A6F080, - 0x12A64FC0, 0x12A5AF00, 0x12A50E40, - 0x12A46D80, 0x12A3CCC0, 0x12A32C00, - 0x12A28B40, 0x12A1EA80, 0x12A149C0, - 0x12A0A900, 0x12A00840, 0x129F6780, - 0x129EC6C0, 0x129E2600, 0x129D8540, - 0x129CE480, 0x129C43C0, 0x129BA300, - 0x129B0240, 0x129A6180, 0x1299C0C0, - 0x12992000, 0x12987F40, 0x1297DE80, - 0x12973DC0, 0x12969D00, 0x1295FC40, - 0x12955B80, 0x1294BAC0, 0x12941A00, - 0x12937940, 0x1292D880, 0x129237C0, - 0x12919700, 0x1290F640, 0x12905580, - 0x128FB4C0, 0x128F1400, 0x128E7340, - 0x128DD280, 0x128D31C0, 0x128C9100, - 0x128BF040, 0x128B4F80, 0x128AAEC0, - 0x128A0E00, 0x12896D40, 0x1288CC80, - 0x12882BC0, 0x12878B00, 0x1286EA40, - 0x12864980, 0x1285A8C0, 0x12850800, - 0x12846740, 0x1283C680, 0x128325C0, - 0x12828500, 0x1281E440, 0x12814380, - 0x1280A2C0, 0x12800200, 0x127F6140, - 0x127EC080, 0x127E1FC0, 0x127D7F00, - 0x127CDE40, 0x127C3D80, 0x127B9CC0, - 0x127AFC00, 0x127A5B40, 0x1279BA80, - 0x127919C0, 0x12787900, 0x1277D840, - 0x12773780, 0x127696C0, 0x1275F600, - 0x12755540, 0x1274B480, 0x127413C0, - 0x12737300, 0x1272D240, 0x12723180, - 0x127190C0, 0x1270F000, 0x12704F40, - 0x126FAE80, 0x126F0DC0, 0x126E6D00, - 0x126DCC40, 0x126D2B80, 0x126C8AC0, - 0x126BEA00, 0x126B4940, 0x126AA880, - 0x126A07C0, 0x12696700, 0x1268C640, - 0x12682580, 0x126784C0, 0x1266E400, - 0x12664340, 0x1265A280, 0x126501C0, - 0x12646100, 0x1263C040, 0x12631F80, - 0x12627EC0, 0x1261DE00, 0x12613D40, - 0x12609C80, 0x125FFBC0, 0x125F5B00, - 0x125EBA40, 0x125E1980, 0x125D78C0, - 0x125CD800, 0x125C3740, 0x125B9680, - 0x125AF5C0, 0x125A5500, 0x1259B440, - 0x12591380, 0x125872C0, 0x1257D200, - 0x12573140, 0x12569080, 0x1255EFC0, - 0x12554F00, 0x1254AE40, 0x12540D80, - 0x12536CC0, 0x1252CC00, 0x12522B40, - 0x12518A80, 0x1250E9C0, 0x12504900, - 0x124FA840, 0x124F0780, 0x124E66C0, - 0x124DC600, 0x124D2540, 0x124C8480, - 0x124BE3C0, 0x124B4300, 0x124AA240, - 0x124A0180, 0x124960C0, 0x1248C000, - 0x12481F40, 0x12477E80, 0x1246DDC0, - 0x12463D00, 0x12459C40, 0x1244FB80, - 0x12445AC0, 0x1243BA00, 0x12431940, - 0x12427880, 0x1241D7C0, 0x12413700, - 0x12409640, 0x123FF580, 0x123F54C0, - 0x123EB400, 0x123E1340, 0x123D7280, - 0x123CD1C0, 0x123C3100, 0x123B9040, - 0x123AEF80, 0x123A4EC0, 0x1239AE00, - 0x12390D40, 0x12386C80, 0x1237CBC0, - 0x12372B00, 0x12368A40, 0x1235E980, - 0x123548C0, 0x1234A800, 0x12340740, - 0x12336680, 0x1232C5C0, 0x12322500, - 0x12318440, 0x1230E380, 0x123042C0, - 0x122FA200, 0x122F0140, 0x122E6080, - 0x122DBFC0, 0x122D1F00, 0x122C7E40, - 0x122BDD80, 0x122B3CC0, 0x122A9C00, - 0x1229FB40, 0x12295A80, 0x1228B9C0, - 0x12281900, 0x12277840, 0x1226D780, - 0x122636C0, 0x12259600, 0x1224F540, - 0x12245480, 0x1223B3C0, 0x12231300, - 0x12227240, 0x1221D180, 0x122130C0, - 0x12209000, 0x121FEF40, 0x121F4E80, - 0x121EADC0, 0x121E0D00, 0x121D6C40, - 0x121CCB80, 0x121C2AC0, 0x121B8A00, - 0x121AE940, 0x121A4880, 0x1219A7C0, - 0x12190700, 0x12186640, 0x1217C580, - 0x121724C0, 0x12168400, 0x1215E340, - 0x12154280, 0x1214A1C0, 0x12140100, - 0x12136040, 0x1212BF80, 0x12121EC0, - 0x12117E00, 0x1210DD40, 0x12103C80, - 0x120F9BC0, 0x120EFB00, 0x120E5A40, - 0x120DB980, 0x120D18C0, 0x120C7800, - 0x120BD740, 0x120B3680, 0x120A95C0, - 0x1209F500, 0x12095440, 0x1208B380, - 0x120812C0, 0x12077200, 0x1206D140, - 0x12063080, 0x12058FC0, 0x1204EF00, - 0x12044E40, 0x1203AD80, 0x12030CC0, - 0x12026C00, 0x1201CB40, 0x12012A80, - 0x120089C0, 0x11FFE900, 0x11FF4840, - 0x11FEA780, 0x11FE06C0, 0x11FD6600, - 0x11FCC540, 0x11FC2480, 0x11FB83C0, - 0x11FAE300, 0x11FA4240, 0x11F9A180, - 0x11F900C0, 0x11F86000, 0x11F7BF40, - 0x11F71E80, 0x11F67DC0, 0x11F5DD00, - 0x11F53C40, 0x11F49B80, 0x11F3FAC0, - 0x11F35A00, 0x11F2B940, 0x11F21880, - 0x11F177C0, 0x11F0D700, 0x11F03640, - 0x11EF9580, 0x11EEF4C0, 0x11EE5400, - 0x11EDB340, 0x11ED1280, 0x11EC71C0, - 0x11EBD100, 0x11EB3040, 0x11EA8F80, - 0x11E9EEC0, 0x11E94E00, 0x11E8AD40, - 0x11E80C80, 0x11E76BC0, 0x11E6CB00, - 0x11E62A40, 0x11E58980, 0x11E4E8C0, - 0x11E44800, 0x11E3A740, 0x11E30680, - 0x11E265C0, 0x11E1C500, 0x11E12440, - 0x11E08380, 0x11DFE2C0, 0x11DF4200, - 0x11DEA140, 0x11DE0080, 0x11DD5FC0, - 0x11DCBF00, 0x11DC1E40, 0x11DB7D80, - 0x11DADCC0, 0x11DA3C00, 0x11D99B40, - 0x11D8FA80, 0x11D859C0, 0x11D7B900, - 0x11D71840, 0x11D67780, 0x11D5D6C0, - 0x11D53600, 0x11D49540, 0x11D3F480, - 0x11D353C0, 0x11D2B300, 0x11D21240, - 0x11D17180, 0x11D0D0C0, 0x11D03000, - 0x11CF8F40, 0x11CEEE80, 0x11CE4DC0, - 0x11CDAD00, 0x11CD0C40, 0x11CC6B80, - 0x11CBCAC0, 0x11CB2A00, 0x11CA8940, - 0x11C9E880, 0x11C947C0, 0x11C8A700, - 0x11C80640, 0x11C76580, 0x11C6C4C0, - 0x11C62400, 0x11C58340, 0x11C4E280, - 0x11C441C0, 0x11C3A100, 0x11C30040, - 0x11C25F80, 0x11C1BEC0, 0x11C11E00, - 0x11C07D40, 0x11BFDC80, 0x11BF3BC0, - 0x11BE9B00, 0x11BDFA40, 0x11BD5980, - 0x11BCB8C0, 0x11BC1800, 0x11BB7740, - 0x11BAD680, 0x11BA35C0, 0x11B99500, - 0x11B8F440, 0x11B85380, 0x11B7B2C0, - 0x11B71200, 0x11B67140, 0x11B5D080, - 0x11B52FC0, 0x11B48F00, 0x11B3EE40, - 0x11B34D80, 0x11B2ACC0, 0x11B20C00, - 0x11B16B40, 0x11B0CA80, 0x11B029C0, - 0x11AF8900, 0x11AEE840, 0x11AE4780, - 0x11ADA6C0, 0x11AD0600, 0x11AC6540, - 0x11ABC480, 0x11AB23C0, 0x11AA8300, - 0x11A9E240, 0x11A94180, 0x11A8A0C0, - 0x11A80000, 0x11A767C0, 0x11A6CF80, - 0x11A63740, 0x11A59F00, 0x11A506C0, - 0x11A46E80, 0x11A3D640, 0x11A33E00, - 0x11A2A5C0, 0x11A20D80, 0x11A17540, - 0x11A0DD00, 0x11A044C0, 0x119FAC80, - 0x119F1440, 0x119E7C00, 0x119DE3C0, - 0x119D4B80, 0x119CB340, 0x119C1B00, - 0x119B82C0, 0x119AEA80, 0x119A5240, - 0x1199BA00, 0x119921C0, 0x11988980, - 0x1197F140, 0x11975900, 0x1196C0C0, - 0x11962880, 0x11959040, 0x1194F800, - 0x11945FC0, 0x1193C780, 0x11932F40, - 0x11929700, 0x1191FEC0, 0x11916680, - 0x1190CE40, 0x11903600, 0x118F9DC0, - 0x118F0580, 0x118E6D40, 0x118DD500, - 0x118D3CC0, 0x118CA480, 0x118C0C40, - 0x118B7400, 0x118ADBC0, 0x118A4380, - 0x1189AB40, 0x11891300, 0x11887AC0, - 0x1187E280, 0x11874A40, 0x1186B200, - 0x118619C0, 0x11858180, 0x1184E940, - 0x11845100, 0x1183B8C0, 0x11832080, - 0x11828840, 0x1181F000, 0x118157C0, - 0x1180BF80, 0x11802740, 0x117F8F00, - 0x117EF6C0, 0x117E5E80, 0x117DC640, - 0x117D2E00, 0x117C95C0, 0x117BFD80, - 0x117B6540, 0x117ACD00, 0x117A34C0, - 0x11799C80, 0x11790440, 0x11786C00, - 0x1177D3C0, 0x11773B80, 0x1176A340, - 0x11760B00, 0x117572C0, 0x1174DA80, - 0x11744240, 0x1173AA00, 0x117311C0, - 0x11727980, 0x1171E140, 0x11714900, - 0x1170B0C0, 0x11701880, 0x116F8040, - 0x116EE800, 0x116E4FC0, 0x116DB780, - 0x116D1F40, 0x116C8700, 0x116BEEC0, - 0x116B5680, 0x116ABE40, 0x116A2600, - 0x11698DC0, 0x1168F580, 0x11685D40, - 0x1167C500, 0x11672CC0, 0x11669480, - 0x1165FC40, 0x11656400, 0x1164CBC0, - 0x11643380, 0x11639B40, 0x11630300, - 0x11626AC0, 0x1161D280, 0x11613A40, - 0x1160A200, 0x116009C0, 0x115F7180, - 0x115ED940, 0x115E4100, 0x115DA8C0, - 0x115D1080, 0x115C7840, 0x115BE000, - 0x115B47C0, 0x115AAF80, 0x115A1740, - 0x11597F00, 0x1158E6C0, 0x11584E80, - 0x1157B640, 0x11571E00, 0x115685C0, - 0x1155ED80, 0x11555540, 0x1154BD00, - 0x115424C0, 0x11538C80, 0x1152F440, - 0x11525C00, 0x1151C3C0, 0x11512B80, - 0x11509340, 0x114FFB00, 0x114F62C0, - 0x114ECA80, 0x114E3240, 0x114D9A00, - 0x114D01C0, 0x114C6980, 0x114BD140, - 0x114B3900, 0x114AA0C0, 0x114A0880, - 0x11497040, 0x1148D800, 0x11483FC0, - 0x1147A780, 0x11470F40, 0x11467700, - 0x1145DEC0, 0x11454680, 0x1144AE40, - 0x11441600, 0x11437DC0, 0x1142E580, - 0x11424D40, 0x1141B500, 0x11411CC0, - 0x11408480, 0x113FEC40, 0x113F5400, - 0x113EBBC0, 0x113E2380, 0x113D8B40, - 0x113CF300, 0x113C5AC0, 0x113BC280, - 0x113B2A40, 0x113A9200, 0x1139F9C0, - 0x11396180, 0x1138C940, 0x11383100, - 0x113798C0, 0x11370080, 0x11366840, - 0x1135D000, 0x113537C0, 0x11349F80, - 0x11340740, 0x11336F00, 0x1132D6C0, - 0x11323E80, 0x1131A640, 0x11310E00, - 0x113075C0, 0x112FDD80, 0x112F4540, - 0x112EAD00, 0x112E14C0, 0x112D7C80, - 0x112CE440, 0x112C4C00, 0x112BB3C0, - 0x112B1B80, 0x112A8340, 0x1129EB00, - 0x112952C0, 0x1128BA80, 0x11282240, - 0x11278A00, 0x1126F1C0, 0x11265980, - 0x1125C140, 0x11252900, 0x112490C0, - 0x1123F880, 0x11236040, 0x1122C800, - 0x11222FC0, 0x11219780, 0x1120FF40, - 0x11206700, 0x111FCEC0, 0x111F3680, - 0x111E9E40, 0x111E0600, 0x111D6DC0, - 0x111CD580, 0x111C3D40, 0x111BA500, - 0x111B0CC0, 0x111A7480, 0x1119DC40, - 0x11194400, 0x1118ABC0, 0x11181380, - 0x11177B40, 0x1116E300, 0x11164AC0, - 0x1115B280, 0x11151A40, 0x11148200, - 0x1113E9C0, 0x11135180, 0x1112B940, - 0x11122100, 0x111188C0, 0x1110F080, - 0x11105840, 0x110FC000, 0x110F27C0, - 0x110E8F80, 0x110DF740, 0x110D5F00, - 0x110CC6C0, 0x110C2E80, 0x110B9640, - 0x110AFE00, 0x110A65C0, 0x1109CD80, - 0x11093540, 0x11089D00, 0x110804C0, - 0x11076C80, 0x1106D440, 0x11063C00, - 0x1105A3C0, 0x11050B80, 0x11047340, - 0x1103DB00, 0x110342C0, 0x1102AA80, - 0x11021240, 0x11017A00, 0x1100E1C0, - 0x11004980, 0x10FFB140, 0x10FF1900, - 0x10FE80C0, 0x10FDE880, 0x10FD5040, - 0x10FCB800, 0x10FC1FC0, 0x10FB8780, - 0x10FAEF40, 0x10FA5700, 0x10F9BEC0, - 0x10F92680, 0x10F88E40, 0x10F7F600, - 0x10F75DC0, 0x10F6C580, 0x10F62D40, - 0x10F59500, 0x10F4FCC0, 0x10F46480, - 0x10F3CC40, 0x10F33400, 0x10F29BC0, - 0x10F20380, 0x10F16B40, 0x10F0D300, - 0x10F03AC0, 0x10EFA280, 0x10EF0A40, - 0x10EE7200, 0x10EDD9C0, 0x10ED4180, - 0x10ECA940, 0x10EC1100, 0x10EB78C0, - 0x10EAE080, 0x10EA4840, 0x10E9B000, - 0x10E917C0, 0x10E87F80, 0x10E7E740, - 0x10E74F00, 0x10E6B6C0, 0x10E61E80, - 0x10E58640, 0x10E4EE00, 0x10E455C0, - 0x10E3BD80, 0x10E32540, 0x10E28D00, - 0x10E1F4C0, 0x10E15C80, 0x10E0C440, - 0x10E02C00, 0x10DF93C0, 0x10DEFB80, - 0x10DE6340, 0x10DDCB00, 0x10DD32C0, - 0x10DC9A80, 0x10DC0240, 0x10DB6A00, - 0x10DAD1C0, 0x10DA3980, 0x10D9A140, - 0x10D90900, 0x10D870C0, 0x10D7D880, - 0x10D74040, 0x10D6A800, 0x10D60FC0, - 0x10D57780, 0x10D4DF40, 0x10D44700, - 0x10D3AEC0, 0x10D31680, 0x10D27E40, - 0x10D1E600, 0x10D14DC0, 0x10D0B580, - 0x10D01D40, 0x10CF8500, 0x10CEECC0, - 0x10CE5480, 0x10CDBC40, 0x10CD2400, - 0x10CC8BC0, 0x10CBF380, 0x10CB5B40, - 0x10CAC300, 0x10CA2AC0, 0x10C99280, - 0x10C8FA40, 0x10C86200, 0x10C7C9C0, - 0x10C73180, 0x10C69940, 0x10C60100, - 0x10C568C0, 0x10C4D080, 0x10C43840, - 0x10C3A000, 0x10C307C0, 0x10C26F80, - 0x10C1D740, 0x10C13F00, 0x10C0A6C0, - 0x10C00E80, 0x10BF7640, 0x10BEDE00, - 0x10BE45C0, 0x10BDAD80, 0x10BD1540, - 0x10BC7D00, 0x10BBE4C0, 0x10BB4C80, - 0x10BAB440, 0x10BA1C00, 0x10B983C0, - 0x10B8EB80, 0x10B85340, 0x10B7BB00, - 0x10B722C0, 0x10B68A80, 0x10B5F240, - 0x10B55A00, 0x10B4C1C0, 0x10B42980, - 0x10B39140, 0x10B2F900, 0x10B260C0, - 0x10B1C880, 0x10B13040, 0x10B09800, - 0x10AFFFC0, 0x10AF6780, 0x10AECF40, - 0x10AE3700, 0x10AD9EC0, 0x10AD0680, - 0x10AC6E40, 0x10ABD600, 0x10AB3DC0, - 0x10AAA580, 0x10AA0D40, 0x10A97500, - 0x10A8DCC0, 0x10A84480, 0x10A7AC40, - 0x10A71400, 0x10A67BC0, 0x10A5E380, - 0x10A54B40, 0x10A4B300, 0x10A41AC0, - 0x10A38280, 0x10A2EA40, 0x10A25200, - 0x10A1B9C0, 0x10A12180, 0x10A08940, - 0x109FF100, 0x109F58C0, 0x109EC080, - 0x109E2840, 0x109D9000, 0x109CF7C0, - 0x109C5F80, 0x109BC740, 0x109B2F00, - 0x109A96C0, 0x1099FE80, 0x10996640, - 0x1098CE00, 0x109835C0, 0x10979D80, - 0x10970540, 0x10966D00, 0x1095D4C0, - 0x10953C80, 0x1094A440, 0x10940C00, - 0x109373C0, 0x1092DB80, 0x10924340, - 0x1091AB00, 0x109112C0, 0x10907A80, - 0x108FE240, 0x108F4A00, 0x108EB1C0, - 0x108E1980, 0x108D8140, 0x108CE900, - 0x108C50C0, 0x108BB880, 0x108B2040, - 0x108A8800, 0x1089EFC0, 0x10895780, - 0x1088BF40, 0x10882700, 0x10878EC0, - 0x1086F680, 0x10865E40, 0x1085C600, - 0x10852DC0, 0x10849580, 0x1083FD40, - 0x10836500, 0x1082CCC0, 0x10823480, - 0x10819C40, 0x10810400, 0x10806BC0, - 0x107FD380, 0x107F3B40, 0x107EA300, - 0x107E0AC0, 0x107D7280, 0x107CDA40, - 0x107C4200, 0x107BA9C0, 0x107B1180, - 0x107A7940, 0x1079E100, 0x107948C0, - 0x1078B080, 0x10781840, 0x10778000, - 0x1076E7C0, 0x10764F80, 0x1075B740, - 0x10751F00, 0x107486C0, 0x1073EE80, - 0x10735640, 0x1072BE00, 0x107225C0, - 0x10718D80, 0x1070F540, 0x10705D00, - 0x106FC4C0, 0x106F2C80, 0x106E9440, - 0x106DFC00, 0x106D63C0, 0x106CCB80, - 0x106C3340, 0x106B9B00, 0x106B02C0, - 0x106A6A80, 0x1069D240, 0x10693A00, - 0x1068A1C0, 0x10680980, 0x10677140, - 0x1066D900, 0x106640C0, 0x1065A880, - 0x10651040, 0x10647800, 0x1063DFC0, - 0x10634780, 0x1062AF40, 0x10621700, - 0x10617EC0, 0x1060E680, 0x10604E40, - 0x105FB600, 0x105F1DC0, 0x105E8580, - 0x105DED40, 0x105D5500, 0x105CBCC0, - 0x105C2480, 0x105B8C40, 0x105AF400, - 0x105A5BC0, 0x1059C380, 0x10592B40, - 0x10589300, 0x1057FAC0, 0x10576280, - 0x1056CA40, 0x10563200, 0x105599C0, - 0x10550180, 0x10546940, 0x1053D100, - 0x105338C0, 0x1052A080, 0x10520840, - 0x10517000, 0x1050D7C0, 0x10503F80, - 0x104FA740, 0x104F0F00, 0x104E76C0, - 0x104DDE80, 0x104D4640, 0x104CAE00, - 0x104C15C0, 0x104B7D80, 0x104AE540, - 0x104A4D00, 0x1049B4C0, 0x10491C80, - 0x10488440, 0x1047EC00, 0x104753C0, - 0x1046BB80, 0x10462340, 0x10458B00, - 0x1044F2C0, 0x10445A80, 0x1043C240, - 0x10432A00, 0x104291C0, 0x1041F980, - 0x10416140, 0x1040C900, 0x104030C0, - 0x103F9880, 0x103F0040, 0x103E6800, - 0x103DCFC0, 0x103D3780, 0x103C9F40, - 0x103C0700, 0x103B6EC0, 0x103AD680, - 0x103A3E40, 0x1039A600, 0x10390DC0, - 0x10387580, 0x1037DD40, 0x10374500, - 0x1036ACC0, 0x10361480, 0x10357C40, - 0x1034E400, 0x10344BC0, 0x1033B380, - 0x10331B40, 0x10328300, 0x1031EAC0, - 0x10315280, 0x1030BA40, 0x10302200, - 0x102F89C0, 0x102EF180, 0x102E5940, - 0x102DC100, 0x102D28C0, 0x102C9080, - 0x102BF840, 0x102B6000, 0x102AC7C0, - 0x102A2F80, 0x10299740, 0x1028FF00, - 0x102866C0, 0x1027CE80, 0x10273640, - 0x10269E00, 0x102605C0, 0x10256D80, - 0x1024D540, 0x10243D00, 0x1023A4C0, - 0x10230C80, 0x10227440, 0x1021DC00, - 0x102143C0, 0x1020AB80, 0x10201340, - 0x101F7B00, 0x101EE2C0, 0x101E4A80, - 0x101DB240, 0x101D1A00, 0x101C81C0, - 0x101BE980, 0x101B5140, 0x101AB900, - 0x101A20C0, 0x10198880, 0x1018F040, - 0x10185800, 0x1017BFC0, 0x10172780, - 0x10168F40, 0x1015F700, 0x10155EC0, - 0x1014C680, 0x10142E40, 0x10139600, - 0x1012FDC0, 0x10126580, 0x1011CD40, - 0x10113500, 0x10109CC0, 0x10100480, - 0x100F6C40, 0x100ED400, 0x100E3BC0, - 0x100DA380, 0x100D0B40, 0x100C7300, - 0x100BDAC0, 0x100B4280, 0x100AAA40, - 0x100A1200, 0x100979C0, 0x1008E180, - 0x10084940, 0x1007B100, 0x100718C0, - 0x10068080, 0x1005E840, 0x10055000, - 0x1004B7C0, 0x10041F80, 0x10038740, - 0x1002EF00, 0x100256C0, 0x1001BE80, - 0x10012640, 0x10008E00, 0x0FFFF5C0, - 0x0FFF5D80, 0x0FFEC540, 0x0FFE2D00, - 0x0FFD94C0, 0x0FFCFC80, 0x0FFC6440, - 0x0FFBCC00, 0x0FFB33C0, 0x0FFA9B80, - 0x0FFA0340, 0x0FF96B00, 0x0FF8D2C0, - 0x0FF83A80, 0x0FF7A240, 0x0FF70A00, - 0x0FF671C0, 0x0FF5D980, 0x0FF54140, - 0x0FF4A900, 0x0FF410C0, 0x0FF37880, - 0x0FF2E040, 0x0FF24800, 0x0FF1AFC0, - 0x0FF11780, 0x0FF07F40, 0x0FEFE700, - 0x0FEF4EC0, 0x0FEEB680, 0x0FEE1E40, - 0x0FED8600, 0x0FECEDC0, 0x0FEC5580, - 0x0FEBBD40, 0x0FEB2500, 0x0FEA8CC0, - 0x0FE9F480, 0x0FE95C40, 0x0FE8C400, - 0x0FE82BC0, 0x0FE79380, 0x0FE6FB40, - 0x0FE66300, 0x0FE5CAC0, 0x0FE53280, - 0x0FE49A40, 0x0FE40200, 0x0FE369C0, - 0x0FE2D180, 0x0FE23940, 0x0FE1A100, - 0x0FE108C0, 0x0FE07080, 0x0FDFD840, - 0x0FDF4000, 0x0FDEA7C0, 0x0FDE0F80, - 0x0FDD7740, 0x0FDCDF00, 0x0FDC46C0, - 0x0FDBAE80, 0x0FDB1640, 0x0FDA7E00, - 0x0FD9E5C0, 0x0FD94D80, 0x0FD8B540, - 0x0FD81D00, 0x0FD784C0, 0x0FD6EC80, - 0x0FD65440, 0x0FD5BC00, 0x0FD523C0, - 0x0FD48B80, 0x0FD3F340, 0x0FD35B00, - 0x0FD2C2C0, 0x0FD22A80, 0x0FD19240, - 0x0FD0FA00, 0x0FD061C0, 0x0FCFC980, - 0x0FCF3140, 0x0FCE9900, 0x0FCE00C0, - 0x0FCD6880, 0x0FCCD040, 0x0FCC3800, - 0x0FCB9FC0, 0x0FCB0780, 0x0FCA6F40, - 0x0FC9D700, 0x0FC93EC0, 0x0FC8A680, - 0x0FC80E40, 0x0FC77600, 0x0FC6DDC0, - 0x0FC64580, 0x0FC5AD40, 0x0FC51500, - 0x0FC47CC0, 0x0FC3E480, 0x0FC34C40, - 0x0FC2B400, 0x0FC21BC0, 0x0FC18380, - 0x0FC0EB40, 0x0FC05300, 0x0FBFBAC0, - 0x0FBF2280, 0x0FBE8A40, 0x0FBDF200, - 0x0FBD59C0, 0x0FBCC180, 0x0FBC2940, - 0x0FBB9100, 0x0FBAF8C0, 0x0FBA6080, - 0x0FB9C840, 0x0FB93000, 0x0FB897C0, - 0x0FB7FF80, 0x0FB76740, 0x0FB6CF00, - 0x0FB636C0, 0x0FB59E80, 0x0FB50640, - 0x0FB46E00, 0x0FB3D5C0, 0x0FB33D80, - 0x0FB2A540, 0x0FB20D00, 0x0FB174C0, - 0x0FB0DC80, 0x0FB04440, 0x0FAFAC00, - 0x0FAF13C0, 0x0FAE7B80, 0x0FADE340, - 0x0FAD4B00, 0x0FACB2C0, 0x0FAC1A80, - 0x0FAB8240, 0x0FAAEA00, 0x0FAA51C0, - 0x0FA9B980, 0x0FA92140, 0x0FA88900, - 0x0FA7F0C0, 0x0FA75880, 0x0FA6C040, - 0x0FA62800, 0x0FA58FC0, 0x0FA4F780, - 0x0FA45F40, 0x0FA3C700, 0x0FA32EC0, - 0x0FA29680, 0x0FA1FE40, 0x0FA16600, - 0x0FA0CDC0, 0x0FA03580, 0x0F9F9D40, - 0x0F9F0500, 0x0F9E6CC0, 0x0F9DD480, - 0x0F9D3C40, 0x0F9CA400, 0x0F9C0BC0, - 0x0F9B7380, 0x0F9ADB40, 0x0F9A4300, - 0x0F99AAC0, 0x0F991280, 0x0F987A40, - 0x0F97E200, 0x0F9749C0, 0x0F96B180, - 0x0F961940, 0x0F958100, 0x0F94E8C0, - 0x0F945080, 0x0F93B840, 0x0F932000, - 0x0F9287C0, 0x0F91EF80, 0x0F915740, - 0x0F90BF00, 0x0F9026C0, 0x0F8F8E80, - 0x0F8EF640, 0x0F8E5E00, 0x0F8DC5C0, - 0x0F8D2D80, 0x0F8C9540, 0x0F8BFD00, - 0x0F8B64C0, 0x0F8ACC80, 0x0F8A3440, - 0x0F899C00, 0x0F8903C0, 0x0F886B80, - 0x0F87D340, 0x0F873B00, 0x0F86A2C0, - 0x0F860A80, 0x0F857240, 0x0F84DA00, - 0x0F8441C0, 0x0F83A980, 0x0F831140, - 0x0F827900, 0x0F81E0C0, 0x0F814880, - 0x0F80B040, 0x0F801800, 0x0F7F7FC0, - 0x0F7EE780, 0x0F7E4F40, 0x0F7DB700, - 0x0F7D1EC0, 0x0F7C8680, 0x0F7BEE40, - 0x0F7B5600, 0x0F7ABDC0, 0x0F7A2580, - 0x0F798D40, 0x0F78F500, 0x0F785CC0, - 0x0F77C480, 0x0F772C40, 0x0F769400, - 0x0F75FBC0, 0x0F756380, 0x0F74CB40, - 0x0F743300, 0x0F739AC0, 0x0F730280, - 0x0F726A40, 0x0F71D200, 0x0F7139C0, - 0x0F70A180, 0x0F700940, 0x0F6F7100, - 0x0F6ED8C0, 0x0F6E4080, 0x0F6DA840, - 0x0F6D1000, 0x0F6C77C0, 0x0F6BDF80, - 0x0F6B4740, 0x0F6AAF00, 0x0F6A16C0, - 0x0F697E80, 0x0F68E640, 0x0F684E00, - 0x0F67B5C0, 0x0F671D80, 0x0F668540, - 0x0F65ED00, 0x0F6554C0, 0x0F64BC80, - 0x0F642440, 0x0F638C00, 0x0F62F3C0, - 0x0F625B80, 0x0F61C340, 0x0F612B00, - 0x0F6092C0, 0x0F5FFA80, 0x0F5F6240, - 0x0F5ECA00, 0x0F5E31C0, 0x0F5D9980, - 0x0F5D0140, 0x0F5C6900, 0x0F5BD0C0, - 0x0F5B3880, 0x0F5AA040, 0x0F5A0800, - 0x0F596FC0, 0x0F58D780, 0x0F583F40, - 0x0F57A700, 0x0F570EC0, 0x0F567680, - 0x0F55DE40, 0x0F554600, 0x0F54ADC0, - 0x0F541580, 0x0F537D40, 0x0F52E500, - 0x0F524CC0, 0x0F51B480, 0x0F511C40, - 0x0F508400, 0x0F4FEBC0, 0x0F4F5380, - 0x0F4EBB40, 0x0F4E2300, 0x0F4D8AC0, - 0x0F4CF280, 0x0F4C5A40, 0x0F4BC200, - 0x0F4B29C0, 0x0F4A9180, 0x0F49F940, - 0x0F496100, 0x0F48C8C0, 0x0F483080, - 0x0F479840, 0x0F470000, 0x0F4667C0, - 0x0F45CF80, 0x0F453740, 0x0F449F00, - 0x0F4406C0, 0x0F436E80, 0x0F42D640, - 0x0F423E00, 0x0F41A5C0, 0x0F410D80, - 0x0F407540, 0x0F3FDD00, 0x0F3F44C0, - 0x0F3EAC80, 0x0F3E1440, 0x0F3D7C00, - 0x0F3CE3C0, 0x0F3C4B80, 0x0F3BB340, - 0x0F3B1B00, 0x0F3A82C0, 0x0F39EA80, - 0x0F395240, 0x0F38BA00, 0x0F3821C0, - 0x0F378980, 0x0F36F140, 0x0F365900, - 0x0F35C0C0, 0x0F352880, 0x0F349040, - 0x0F33F800, 0x0F335FC0, 0x0F32C780, - 0x0F322F40, 0x0F319700, 0x0F30FEC0, - 0x0F306680, 0x0F2FCE40, 0x0F2F3600, - 0x0F2E9DC0, 0x0F2E0580, 0x0F2D6D40, - 0x0F2CD500, 0x0F2C3CC0, 0x0F2BA480, - 0x0F2B0C40, 0x0F2A7400, 0x0F29DBC0, - 0x0F294380, 0x0F28AB40, 0x0F281300, - 0x0F277AC0, 0x0F26E280, 0x0F264A40, - 0x0F25B200, 0x0F2519C0, 0x0F248180, - 0x0F23E940, 0x0F235100, 0x0F22B8C0, - 0x0F222080, 0x0F218840, 0x0F20F000, - 0x0F2057C0, 0x0F1FBF80, 0x0F1F2740, - 0x0F1E8F00, 0x0F1DF6C0, 0x0F1D5E80, - 0x0F1CC640, 0x0F1C2E00, 0x0F1B95C0, - 0x0F1AFD80, 0x0F1A6540, 0x0F19CD00, - 0x0F1934C0, 0x0F189C80, 0x0F180440, - 0x0F176C00, 0x0F16D3C0, 0x0F163B80, - 0x0F15A340, 0x0F150B00, 0x0F1472C0, - 0x0F13DA80, 0x0F134240, 0x0F12AA00, - 0x0F1211C0, 0x0F117980, 0x0F10E140, - 0x0F104900, 0x0F0FB0C0, 0x0F0F1880, - 0x0F0E8040, 0x0F0DE800, 0x0F0D4FC0, - 0x0F0CB780, 0x0F0C1F40, 0x0F0B8700, - 0x0F0AEEC0, 0x0F0A5680, 0x0F09BE40, - 0x0F092600, 0x0F088DC0, 0x0F07F580, - 0x0F075D40, 0x0F06C500, 0x0F062CC0, - 0x0F059480, 0x0F04FC40, 0x0F046400, - 0x0F03CBC0, 0x0F033380, 0x0F029B40, - 0x0F020300, 0x0F016AC0, 0x0F00D280, - 0x0F003A40, 0x0EFFA200, 0x0EFF09C0, - 0x0EFE7180, 0x0EFDD940, 0x0EFD4100, - 0x0EFCA8C0, 0x0EFC1080, 0x0EFB7840, - 0x0EFAE000, 0x0EFA47C0, 0x0EF9AF80, - 0x0EF91740, 0x0EF87F00, 0x0EF7E6C0, - 0x0EF74E80, 0x0EF6B640, 0x0EF61E00, - 0x0EF585C0, 0x0EF4ED80, 0x0EF45540, - 0x0EF3BD00, 0x0EF324C0, 0x0EF28C80, - 0x0EF1F440, 0x0EF15C00, 0x0EF0C3C0, - 0x0EF02B80, 0x0EEF9340, 0x0EEEFB00, - 0x0EEE62C0, 0x0EEDCA80, 0x0EED3240, - 0x0EEC9A00, 0x0EEC01C0, 0x0EEB6980, - 0x0EEAD140, 0x0EEA3900, 0x0EE9A0C0, - 0x0EE90880, 0x0EE87040, 0x0EE7D800, - 0x0EE73FC0, 0x0EE6A780, 0x0EE60F40, - 0x0EE57700, 0x0EE4DEC0, 0x0EE44680, - 0x0EE3AE40, 0x0EE31600, 0x0EE27DC0, - 0x0EE1E580, 0x0EE14D40, 0x0EE0B500, - 0x0EE01CC0, 0x0EDF8480, 0x0EDEEC40, - 0x0EDE5400, 0x0EDDBBC0, 0x0EDD2380, - 0x0EDC8B40, 0x0EDBF300, 0x0EDB5AC0, - 0x0EDAC280, 0x0EDA2A40, 0x0ED99200, - 0x0ED8F9C0, 0x0ED86180, 0x0ED7C940, - 0x0ED73100, 0x0ED698C0, 0x0ED60080, - 0x0ED56840, 0x0ED4D000, 0x0ED437C0, - 0x0ED39F80, 0x0ED30740, 0x0ED26F00, - 0x0ED1D6C0, 0x0ED13E80, 0x0ED0A640, - 0x0ED00E00, 0x0ECF75C0, 0x0ECEDD80, - 0x0ECE4540, 0x0ECDAD00, 0x0ECD14C0, - 0x0ECC7C80, 0x0ECBE440, 0x0ECB4C00, - 0x0ECAB3C0, 0x0ECA1B80, 0x0EC98340, - 0x0EC8EB00, 0x0EC852C0, 0x0EC7BA80, - 0x0EC72240, 0x0EC68A00, 0x0EC5F1C0, - 0x0EC55980, 0x0EC4C140, 0x0EC42900, - 0x0EC390C0, 0x0EC2F880, 0x0EC26040, - 0x0EC1C800, 0x0EC12FC0, 0x0EC09780, - 0x0EBFFF40, 0x0EBF6700, 0x0EBECEC0, - 0x0EBE3680, 0x0EBD9E40, 0x0EBD0600, - 0x0EBC6DC0, 0x0EBBD580, 0x0EBB3D40, - 0x0EBAA500, 0x0EBA0CC0, 0x0EB97480, - 0x0EB8DC40, 0x0EB84400, 0x0EB7ABC0, - 0x0EB71380, 0x0EB67B40, 0x0EB5E300, - 0x0EB54AC0, 0x0EB4B280, 0x0EB41A40, - 0x0EB38200, 0x0EB2E9C0, 0x0EB25180, - 0x0EB1B940, 0x0EB12100, 0x0EB088C0, - 0x0EAFF080, 0x0EAF5840, 0x0EAEC000, - 0x0EAE27C0, 0x0EAD8F80, 0x0EACF740, - 0x0EAC5F00, 0x0EABC6C0, 0x0EAB2E80, - 0x0EAA9640, 0x0EA9FE00, 0x0EA965C0, - 0x0EA8CD80, 0x0EA83540, 0x0EA79D00, - 0x0EA704C0, 0x0EA66C80, 0x0EA5D440, - 0x0EA53C00, 0x0EA4A3C0, 0x0EA40B80, - 0x0EA37340, 0x0EA2DB00, 0x0EA242C0, - 0x0EA1AA80, 0x0EA11240, 0x0EA07A00, - 0x0E9FE1C0, 0x0E9F4980, 0x0E9EB140, - 0x0E9E1900, 0x0E9D80C0, 0x0E9CE880, - 0x0E9C5040, 0x0E9BB800, 0x0E9B1FC0, - 0x0E9A8780, 0x0E99EF40, 0x0E995700, - 0x0E98BEC0, 0x0E982680, 0x0E978E40, - 0x0E96F600, 0x0E965DC0, 0x0E95C580, - 0x0E952D40, 0x0E949500, 0x0E93FCC0, - 0x0E936480, 0x0E92CC40, 0x0E923400, - 0x0E919BC0, 0x0E910380, 0x0E906B40, - 0x0E8FD300, 0x0E8F3AC0, 0x0E8EA280, - 0x0E8E0A40, 0x0E8D7200, 0x0E8CD9C0, - 0x0E8C4180, 0x0E8BA940, 0x0E8B1100, - 0x0E8A78C0, 0x0E89E080, 0x0E894840, - 0x0E88B000, 0x0E8817C0, 0x0E877F80, - 0x0E86E740, 0x0E864F00, 0x0E85B6C0, - 0x0E851E80, 0x0E848640, 0x0E83EE00, - 0x0E8355C0, 0x0E82BD80, 0x0E822540, - 0x0E818D00, 0x0E80F4C0, 0x0E805C80, - 0x0E7FC440, 0x0E7F2C00, 0x0E7E93C0, - 0x0E7DFB80, 0x0E7D6340, 0x0E7CCB00, - 0x0E7C32C0, 0x0E7B9A80, 0x0E7B0240, - 0x0E7A6A00, 0x0E79D1C0, 0x0E793980, - 0x0E78A140, 0x0E780900, 0x0E7770C0, - 0x0E76D880, 0x0E764040, 0x0E75A800, - 0x0E750FC0, 0x0E747780, 0x0E73DF40, - 0x0E734700, 0x0E72AEC0, 0x0E721680, - 0x0E717E40, 0x0E70E600, 0x0E704DC0, - 0x0E6FB580, 0x0E6F1D40, 0x0E6E8500, - 0x0E6DECC0, 0x0E6D5480, 0x0E6CBC40, - 0x0E6C2400, 0x0E6B8BC0, 0x0E6AF380, - 0x0E6A5B40, 0x0E69C300, 0x0E692AC0, - 0x0E689280, 0x0E67FA40, 0x0E676200, - 0x0E66C9C0, 0x0E663180, 0x0E659940, - 0x0E650100, 0x0E6468C0, 0x0E63D080, - 0x0E633840, 0x0E62A000, 0x0E6207C0, - 0x0E616F80, 0x0E60D740, 0x0E603F00, - 0x0E5FA6C0, 0x0E5F0E80, 0x0E5E7640, - 0x0E5DDE00, 0x0E5D45C0, 0x0E5CAD80, - 0x0E5C1540, 0x0E5B7D00, 0x0E5AE4C0, - 0x0E5A4C80, 0x0E59B440, 0x0E591C00, - 0x0E5883C0, 0x0E57EB80, 0x0E575340, - 0x0E56BB00, 0x0E5622C0, 0x0E558A80, - 0x0E54F240, 0x0E545A00, 0x0E53C1C0, - 0x0E532980, 0x0E529140, 0x0E51F900, - 0x0E5160C0, 0x0E50C880, 0x0E503040, - 0x0E4F9800, 0x0E4EFFC0, 0x0E4E6780, - 0x0E4DCF40, 0x0E4D3700, 0x0E4C9EC0, - 0x0E4C0680, 0x0E4B6E40, 0x0E4AD600, - 0x0E4A3DC0, 0x0E49A580, 0x0E490D40, - 0x0E487500, 0x0E47DCC0, 0x0E474480, - 0x0E46AC40, 0x0E461400, 0x0E457BC0, - 0x0E44E380, 0x0E444B40, 0x0E43B300, - 0x0E431AC0, 0x0E428280, 0x0E41EA40, - 0x0E415200, 0x0E40B9C0, 0x0E402180, - 0x0E3F8940, 0x0E3EF100, 0x0E3E58C0, - 0x0E3DC080, 0x0E3D2840, 0x0E3C9000, - 0x0E3BF7C0, 0x0E3B5F80, 0x0E3AC740, - 0x0E3A2F00, 0x0E3996C0, 0x0E38FE80, - 0x0E386640, 0x0E37CE00, 0x0E3735C0, - 0x0E369D80, 0x0E360540, 0x0E356D00, - 0x0E34D4C0, 0x0E343C80, 0x0E33A440, - 0x0E330C00, 0x0E3273C0, 0x0E31DB80, - 0x0E314340, 0x0E30AB00, 0x0E3012C0, - 0x0E2F7A80, 0x0E2EE240, 0x0E2E4A00, - 0x0E2DB1C0, 0x0E2D1980, 0x0E2C8140, - 0x0E2BE900, 0x0E2B50C0, 0x0E2AB880, - 0x0E2A2040, 0x0E298800, 0x0E28EFC0, - 0x0E285780, 0x0E27BF40, 0x0E272700, - 0x0E268EC0, 0x0E25F680, 0x0E255E40, - 0x0E24C600, 0x0E242DC0, 0x0E239580, - 0x0E22FD40, 0x0E226500, 0x0E21CCC0, - 0x0E213480, 0x0E209C40, 0x0E200400, - 0x0E1F6BC0, 0x0E1ED380, 0x0E1E3B40, - 0x0E1DA300, 0x0E1D0AC0, 0x0E1C7280, - 0x0E1BDA40, 0x0E1B4200, 0x0E1AA9C0, - 0x0E1A1180, 0x0E197940, 0x0E18E100, - 0x0E1848C0, 0x0E17B080, 0x0E171840, - 0x0E168000, 0x0E15E7C0, 0x0E154F80, - 0x0E14B740, 0x0E141F00, 0x0E1386C0, - 0x0E12EE80, 0x0E125640, 0x0E11BE00, - 0x0E1125C0, 0x0E108D80, 0x0E0FF540, - 0x0E0F5D00, 0x0E0EC4C0, 0x0E0E2C80, - 0x0E0D9440, 0x0E0CFC00, 0x0E0C63C0, - 0x0E0BCB80, 0x0E0B3340, 0x0E0A9B00, - 0x0E0A02C0, 0x0E096A80, 0x0E08D240, - 0x0E083A00, 0x0E07A1C0, 0x0E070980, - 0x0E067140, 0x0E05D900, 0x0E0540C0, - 0x0E04A880, 0x0E041040, 0x0E037800, - 0x0E02DFC0, 0x0E024780, 0x0E01AF40, - 0x0E011700, 0x0E007EC0, 0x0DFFE680, - 0x0DFF4E40, 0x0DFEB600, 0x0DFE1DC0, - 0x0DFD8580, 0x0DFCED40, 0x0DFC5500, - 0x0DFBBCC0, 0x0DFB2480, 0x0DFA8C40, - 0x0DF9F400, 0x0DF95BC0, 0x0DF8C380, - 0x0DF82B40, 0x0DF79300, 0x0DF6FAC0, - 0x0DF66280, 0x0DF5CA40, 0x0DF53200, - 0x0DF499C0, 0x0DF40180, 0x0DF36940, - 0x0DF2D100, 0x0DF238C0, 0x0DF1A080, - 0x0DF10840, 0x0DF07000, 0x0DEFD7C0, - 0x0DEF3F80, 0x0DEEA740, 0x0DEE0F00, - 0x0DED76C0, 0x0DECDE80, 0x0DEC4640, - 0x0DEBAE00, 0x0DEB15C0, 0x0DEA7D80, - 0x0DE9E540, 0x0DE94D00, 0x0DE8B4C0, - 0x0DE81C80, 0x0DE78440, 0x0DE6EC00, - 0x0DE653C0, 0x0DE5BB80, 0x0DE52340, - 0x0DE48B00, 0x0DE3F2C0, 0x0DE35A80, - 0x0DE2C240, 0x0DE22A00, 0x0DE191C0, - 0x0DE0F980, 0x0DE06140, 0x0DDFC900, - 0x0DDF30C0, 0x0DDE9880, 0x0DDE0040, - 0x0DDD6800, 0x0DDCCFC0, 0x0DDC3780, - 0x0DDB9F40, 0x0DDB0700, 0x0DDA6EC0, - 0x0DD9D680, 0x0DD93E40, 0x0DD8A600, - 0x0DD80DC0, 0x0DD77580, 0x0DD6DD40, - 0x0DD64500, 0x0DD5ACC0, 0x0DD51480, - 0x0DD47C40, 0x0DD3E400, 0x0DD34BC0, - 0x0DD2B380, 0x0DD21B40, 0x0DD18300, - 0x0DD0EAC0, 0x0DD05280, 0x0DCFBA40, - 0x0DCF2200, 0x0DCE89C0, 0x0DCDF180, - 0x0DCD5940, 0x0DCCC100, 0x0DCC28C0, - 0x0DCB9080, 0x0DCAF840, 0x0DCA6000, - 0x0DC9C7C0, 0x0DC92F80, 0x0DC89740, - 0x0DC7FF00, 0x0DC766C0, 0x0DC6CE80, - 0x0DC63640, 0x0DC59E00, 0x0DC505C0, - 0x0DC46D80, 0x0DC3D540, 0x0DC33D00, - 0x0DC2A4C0, 0x0DC20C80, 0x0DC17440, - 0x0DC0DC00, 0x0DC043C0, 0x0DBFAB80, - 0x0DBF1340, 0x0DBE7B00, 0x0DBDE2C0, - 0x0DBD4A80, 0x0DBCB240, 0x0DBC1A00, - 0x0DBB81C0, 0x0DBAE980, 0x0DBA5140, - 0x0DB9B900, 0x0DB920C0, 0x0DB88880, - 0x0DB7F040, 0x0DB75800, 0x0DB6BFC0, - 0x0DB62780, 0x0DB58F40, 0x0DB4F700, - 0x0DB45EC0, 0x0DB3C680, 0x0DB32E40, - 0x0DB29600, 0x0DB1FDC0, 0x0DB16580, - 0x0DB0CD40, 0x0DB03500, 0x0DAF9CC0, - 0x0DAF0480, 0x0DAE6C40, 0x0DADD400, - 0x0DAD3BC0, 0x0DACA380, 0x0DAC0B40, - 0x0DAB7300, 0x0DAADAC0, 0x0DAA4280, - 0x0DA9AA40, 0x0DA91200, 0x0DA879C0, - 0x0DA7E180, 0x0DA74940, 0x0DA6B100, - 0x0DA618C0, 0x0DA58080, 0x0DA4E840, - 0x0DA45000, 0x0DA3B7C0, 0x0DA31F80, - 0x0DA28740, 0x0DA1EF00, 0x0DA156C0, - 0x0DA0BE80, 0x0DA02640, 0x0D9F8E00, - 0x0D9EF5C0, 0x0D9E5D80, 0x0D9DC540, - 0x0D9D2D00, 0x0D9C94C0, 0x0D9BFC80, - 0x0D9B6440, 0x0D9ACC00, 0x0D9A33C0, - 0x0D999B80, 0x0D990340, 0x0D986B00, - 0x0D97D2C0, 0x0D973A80, 0x0D96A240, - 0x0D960A00, 0x0D9571C0, 0x0D94D980, - 0x0D944140, 0x0D93A900, 0x0D9310C0, - 0x0D927880, 0x0D91E040, 0x0D914800, - 0x0D90AFC0, 0x0D901780, 0x0D8F7F40, - 0x0D8EE700, 0x0D8E4EC0, 0x0D8DB680, - 0x0D8D1E40, 0x0D8C8600, 0x0D8BEDC0, - 0x0D8B5580, 0x0D8ABD40, 0x0D8A2500, - 0x0D898CC0, 0x0D88F480, 0x0D885C40, - 0x0D87C400, 0x0D872BC0, 0x0D869380, - 0x0D85FB40, 0x0D856300, 0x0D84CAC0, - 0x0D843280, 0x0D839A40, 0x0D830200, - 0x0D8269C0, 0x0D81D180, 0x0D813940, - 0x0D80A100, 0x0D8008C0, 0x0D7F7080, - 0x0D7ED840, 0x0D7E4000, 0x0D7DA7C0, - 0x0D7D0F80, 0x0D7C7740, 0x0D7BDF00, - 0x0D7B46C0, 0x0D7AAE80, 0x0D7A1640, - 0x0D797E00, 0x0D78E5C0, 0x0D784D80, - 0x0D77B540, 0x0D771D00, 0x0D7684C0, - 0x0D75EC80, 0x0D755440, 0x0D74BC00, - 0x0D7423C0, 0x0D738B80, 0x0D72F340, - 0x0D725B00, 0x0D71C2C0, 0x0D712A80, - 0x0D709240, 0x0D6FFA00, 0x0D6F61C0, - 0x0D6EC980, 0x0D6E3140, 0x0D6D9900, - 0x0D6D00C0, 0x0D6C6880, 0x0D6BD040, - 0x0D6B3800, 0x0D6A9FC0, 0x0D6A0780, - 0x0D696F40, 0x0D68D700, 0x0D683EC0, - 0x0D67A680, 0x0D670E40, 0x0D667600, - 0x0D65DDC0, 0x0D654580, 0x0D64AD40, - 0x0D641500, 0x0D637CC0, 0x0D62E480, - 0x0D624C40, 0x0D61B400, 0x0D611BC0, - 0x0D608380, 0x0D5FEB40, 0x0D5F5300, - 0x0D5EBAC0, 0x0D5E2280, 0x0D5D8A40, - 0x0D5CF200, 0x0D5C59C0, 0x0D5BC180, - 0x0D5B2940, 0x0D5A9100, 0x0D59F8C0, - 0x0D596080, 0x0D58C840, 0x0D583000, - 0x0D5797C0, 0x0D56FF80, 0x0D566740, - 0x0D55CF00, 0x0D5536C0, 0x0D549E80, - 0x0D540640, 0x0D536E00, 0x0D52D5C0, - 0x0D523D80, 0x0D51A540, 0x0D510D00, - 0x0D5074C0, 0x0D4FDC80, 0x0D4F4440, - 0x0D4EAC00, 0x0D4E13C0, 0x0D4D7B80, - 0x0D4CE340, 0x0D4C4B00, 0x0D4BB2C0, - 0x0D4B1A80, 0x0D4A8240, 0x0D49EA00, - 0x0D4951C0, 0x0D48B980, 0x0D482140, - 0x0D478900, 0x0D46F0C0, 0x0D465880, - 0x0D45C040, 0x0D452800, 0x0D448FC0, - 0x0D43F780, 0x0D435F40, 0x0D42C700, - 0x0D422EC0, 0x0D419680, 0x0D40FE40, - 0x0D406600, 0x0D3FCDC0, 0x0D3F3580, - 0x0D3E9D40, 0x0D3E0500, 0x0D3D6CC0, - 0x0D3CD480, 0x0D3C3C40, 0x0D3BA400, - 0x0D3B0BC0, 0x0D3A7380, 0x0D39DB40, - 0x0D394300, 0x0D38AAC0, 0x0D381280, - 0x0D377A40, 0x0D36E200, 0x0D3649C0, - 0x0D35B180, 0x0D351940, 0x0D348100, - 0x0D33E8C0, 0x0D335080, 0x0D32B840, - 0x0D322000, 0x0D3187C0, 0x0D30EF80, - 0x0D305740, 0x0D2FBF00, 0x0D2F26C0, - 0x0D2E8E80, 0x0D2DF640, 0x0D2D5E00, - 0x0D2CC5C0, 0x0D2C2D80, 0x0D2B9540, - 0x0D2AFD00, 0x0D2A64C0, 0x0D29CC80, - 0x0D293440, 0x0D289C00, 0x0D2803C0, - 0x0D276B80, 0x0D26D340, 0x0D263B00, - 0x0D25A2C0, 0x0D250A80, 0x0D247240, - 0x0D23DA00, 0x0D2341C0, 0x0D22A980, - 0x0D221140, 0x0D217900, 0x0D20E0C0, - 0x0D204880, 0x0D1FB040, 0x0D1F1800, - 0x0D1E7FC0, 0x0D1DE780, 0x0D1D4F40, - 0x0D1CB700, 0x0D1C1EC0, 0x0D1B8680, - 0x0D1AEE40, 0x0D1A5600, 0x0D19BDC0, - 0x0D192580, 0x0D188D40, 0x0D17F500, - 0x0D175CC0, 0x0D16C480, 0x0D162C40, - 0x0D159400, 0x0D14FBC0, 0x0D146380, - 0x0D13CB40, 0x0D133300, 0x0D129AC0, - 0x0D120280, 0x0D116A40, 0x0D10D200, - 0x0D1039C0, 0x0D0FA180, 0x0D0F0940, - 0x0D0E7100, 0x0D0DD8C0, 0x0D0D4080, - 0x0D0CA840, 0x0D0C1000, 0x0D0B77C0, - 0x0D0ADF80, 0x0D0A4740, 0x0D09AF00, - 0x0D0916C0, 0x0D087E80, 0x0D07E640, - 0x0D074E00, 0x0D06B5C0, 0x0D061D80, - 0x0D058540, 0x0D04ED00, 0x0D0454C0, - 0x0D03BC80, 0x0D032440, 0x0D028C00, - 0x0D01F3C0, 0x0D015B80, 0x0D00C340, - 0x0D002B00, 0x0CFF92C0, 0x0CFEFA80, - 0x0CFE6240, 0x0CFDCA00, 0x0CFD31C0, - 0x0CFC9980, 0x0CFC0140, 0x0CFB6900, - 0x0CFAD0C0, 0x0CFA3880, 0x0CF9A040, - 0x0CF90800, 0x0CF86FC0, 0x0CF7D780, - 0x0CF73F40, 0x0CF6A700, 0x0CF60EC0, - 0x0CF57680, 0x0CF4DE40, 0x0CF44600, - 0x0CF3ADC0, 0x0CF31580, 0x0CF27D40, - 0x0CF1E500, 0x0CF14CC0, 0x0CF0B480, - 0x0CF01C40, 0x0CEF8400, 0x0CEEEBC0, - 0x0CEE5380, 0x0CEDBB40, 0x0CED2300, - 0x0CEC8AC0, 0x0CEBF280, 0x0CEB5A40, - 0x0CEAC200, 0x0CEA29C0, 0x0CE99180, - 0x0CE8F940, 0x0CE86100, 0x0CE7C8C0, - 0x0CE73080, 0x0CE69840, 0x0CE60000, - 0x0CE56F40, 0x0CE4DE80, 0x0CE44DC0, - 0x0CE3BD00, 0x0CE32C40, 0x0CE29B80, - 0x0CE20AC0, 0x0CE17A00, 0x0CE0E940, - 0x0CE05880, 0x0CDFC7C0, 0x0CDF3700, - 0x0CDEA640, 0x0CDE1580, 0x0CDD84C0, - 0x0CDCF400, 0x0CDC6340, 0x0CDBD280, - 0x0CDB41C0, 0x0CDAB100, 0x0CDA2040, - 0x0CD98F80, 0x0CD8FEC0, 0x0CD86E00, - 0x0CD7DD40, 0x0CD74C80, 0x0CD6BBC0, - 0x0CD62B00, 0x0CD59A40, 0x0CD50980, - 0x0CD478C0, 0x0CD3E800, 0x0CD35740, - 0x0CD2C680, 0x0CD235C0, 0x0CD1A500, - 0x0CD11440, 0x0CD08380, 0x0CCFF2C0, - 0x0CCF6200, 0x0CCED140, 0x0CCE4080, - 0x0CCDAFC0, 0x0CCD1F00, 0x0CCC8E40, - 0x0CCBFD80, 0x0CCB6CC0, 0x0CCADC00, - 0x0CCA4B40, 0x0CC9BA80, 0x0CC929C0, - 0x0CC89900, 0x0CC80840, 0x0CC77780, - 0x0CC6E6C0, 0x0CC65600, 0x0CC5C540, - 0x0CC53480, 0x0CC4A3C0, 0x0CC41300, - 0x0CC38240, 0x0CC2F180, 0x0CC260C0, - 0x0CC1D000, 0x0CC13F40, 0x0CC0AE80, - 0x0CC01DC0, 0x0CBF8D00, 0x0CBEFC40, - 0x0CBE6B80, 0x0CBDDAC0, 0x0CBD4A00, - 0x0CBCB940, 0x0CBC2880, 0x0CBB97C0, - 0x0CBB0700, 0x0CBA7640, 0x0CB9E580, - 0x0CB954C0, 0x0CB8C400, 0x0CB83340, - 0x0CB7A280, 0x0CB711C0, 0x0CB68100, - 0x0CB5F040, 0x0CB55F80, 0x0CB4CEC0, - 0x0CB43E00, 0x0CB3AD40, 0x0CB31C80, - 0x0CB28BC0, 0x0CB1FB00, 0x0CB16A40, - 0x0CB0D980, 0x0CB048C0, 0x0CAFB800, - 0x0CAF2740, 0x0CAE9680, 0x0CAE05C0, - 0x0CAD7500, 0x0CACE440, 0x0CAC5380, - 0x0CABC2C0, 0x0CAB3200, 0x0CAAA140, - 0x0CAA1080, 0x0CA97FC0, 0x0CA8EF00, - 0x0CA85E40, 0x0CA7CD80, 0x0CA73CC0, - 0x0CA6AC00, 0x0CA61B40, 0x0CA58A80, - 0x0CA4F9C0, 0x0CA46900, 0x0CA3D840, - 0x0CA34780, 0x0CA2B6C0, 0x0CA22600, - 0x0CA19540, 0x0CA10480, 0x0CA073C0, - 0x0C9FE300, 0x0C9F5240, 0x0C9EC180, - 0x0C9E30C0, 0x0C9DA000, 0x0C9D0F40, - 0x0C9C7E80, 0x0C9BEDC0, 0x0C9B5D00, - 0x0C9ACC40, 0x0C9A3B80, 0x0C99AAC0, - 0x0C991A00, 0x0C988940, 0x0C97F880, - 0x0C9767C0, 0x0C96D700, 0x0C964640, - 0x0C95B580, 0x0C9524C0, 0x0C949400, - 0x0C940340, 0x0C937280, 0x0C92E1C0, - 0x0C925100, 0x0C91C040, 0x0C912F80, - 0x0C909EC0, 0x0C900E00, 0x0C8F7D40, - 0x0C8EEC80, 0x0C8E5BC0, 0x0C8DCB00, - 0x0C8D3A40, 0x0C8CA980, 0x0C8C18C0, - 0x0C8B8800, 0x0C8AF740, 0x0C8A6680, - 0x0C89D5C0, 0x0C894500, 0x0C88B440, - 0x0C882380, 0x0C8792C0, 0x0C870200, - 0x0C867140, 0x0C85E080, 0x0C854FC0, - 0x0C84BF00, 0x0C842E40, 0x0C839D80, - 0x0C830CC0, 0x0C827C00, 0x0C81EB40, - 0x0C815A80, 0x0C80C9C0, 0x0C803900, - 0x0C7FA840, 0x0C7F1780, 0x0C7E86C0, - 0x0C7DF600, 0x0C7D6540, 0x0C7CD480, - 0x0C7C43C0, 0x0C7BB300, 0x0C7B2240, - 0x0C7A9180, 0x0C7A00C0, 0x0C797000, - 0x0C78DF40, 0x0C784E80, 0x0C77BDC0, - 0x0C772D00, 0x0C769C40, 0x0C760B80, - 0x0C757AC0, 0x0C74EA00, 0x0C745940, - 0x0C73C880, 0x0C7337C0, 0x0C72A700, - 0x0C721640, 0x0C718580, 0x0C70F4C0, - 0x0C706400, 0x0C6FD340, 0x0C6F4280, - 0x0C6EB1C0, 0x0C6E2100, 0x0C6D9040, - 0x0C6CFF80, 0x0C6C6EC0, 0x0C6BDE00, - 0x0C6B4D40, 0x0C6ABC80, 0x0C6A2BC0, - 0x0C699B00, 0x0C690A40, 0x0C687980, - 0x0C67E8C0, 0x0C675800, 0x0C66C740, - 0x0C663680, 0x0C65A5C0, 0x0C651500, - 0x0C648440, 0x0C63F380, 0x0C6362C0, - 0x0C62D200, 0x0C624140, 0x0C61B080, - 0x0C611FC0, 0x0C608F00, 0x0C5FFE40, - 0x0C5F6D80, 0x0C5EDCC0, 0x0C5E4C00, - 0x0C5DBB40, 0x0C5D2A80, 0x0C5C99C0, - 0x0C5C0900, 0x0C5B7840, 0x0C5AE780, - 0x0C5A56C0, 0x0C59C600, 0x0C593540, - 0x0C58A480, 0x0C5813C0, 0x0C578300, - 0x0C56F240, 0x0C566180, 0x0C55D0C0, - 0x0C554000, 0x0C54AF40, 0x0C541E80, - 0x0C538DC0, 0x0C52FD00, 0x0C526C40, - 0x0C51DB80, 0x0C514AC0, 0x0C50BA00, - 0x0C502940, 0x0C4F9880, 0x0C4F07C0, - 0x0C4E7700, 0x0C4DE640, 0x0C4D5580, - 0x0C4CC4C0, 0x0C4C3400, 0x0C4BA340, - 0x0C4B1280, 0x0C4A81C0, 0x0C49F100, - 0x0C496040, 0x0C48CF80, 0x0C483EC0, - 0x0C47AE00, 0x0C471D40, 0x0C468C80, - 0x0C45FBC0, 0x0C456B00, 0x0C44DA40, - 0x0C444980, 0x0C43B8C0, 0x0C432800, - 0x0C429740, 0x0C420680, 0x0C4175C0, - 0x0C40E500, 0x0C405440, 0x0C3FC380, - 0x0C3F32C0, 0x0C3EA200, 0x0C3E1140, - 0x0C3D8080, 0x0C3CEFC0, 0x0C3C5F00, - 0x0C3BCE40, 0x0C3B3D80, 0x0C3AACC0, - 0x0C3A1C00, 0x0C398B40, 0x0C38FA80, - 0x0C3869C0, 0x0C37D900, 0x0C374840, - 0x0C36B780, 0x0C3626C0, 0x0C359600, - 0x0C350540, 0x0C347480, 0x0C33E3C0, - 0x0C335300, 0x0C32C240, 0x0C323180, - 0x0C31A0C0, 0x0C311000, 0x0C307F40, - 0x0C2FEE80, 0x0C2F5DC0, 0x0C2ECD00, - 0x0C2E3C40, 0x0C2DAB80, 0x0C2D1AC0, - 0x0C2C8A00, 0x0C2BF940, 0x0C2B6880, - 0x0C2AD7C0, 0x0C2A4700, 0x0C29B640, - 0x0C292580, 0x0C2894C0, 0x0C280400, - 0x0C277340, 0x0C26E280, 0x0C2651C0, - 0x0C25C100, 0x0C253040, 0x0C249F80, - 0x0C240EC0, 0x0C237E00, 0x0C22ED40, - 0x0C225C80, 0x0C21CBC0, 0x0C213B00, - 0x0C20AA40, 0x0C201980, 0x0C1F88C0, - 0x0C1EF800, 0x0C1E6740, 0x0C1DD680, - 0x0C1D45C0, 0x0C1CB500, 0x0C1C2440, - 0x0C1B9380, 0x0C1B02C0, 0x0C1A7200, - 0x0C19E140, 0x0C195080, 0x0C18BFC0, - 0x0C182F00, 0x0C179E40, 0x0C170D80, - 0x0C167CC0, 0x0C15EC00, 0x0C155B40, - 0x0C14CA80, 0x0C1439C0, 0x0C13A900, - 0x0C131840, 0x0C128780, 0x0C11F6C0, - 0x0C116600, 0x0C10D540, 0x0C104480, - 0x0C0FB3C0, 0x0C0F2300, 0x0C0E9240, - 0x0C0E0180, 0x0C0D70C0, 0x0C0CE000, - 0x0C0C4F40, 0x0C0BBE80, 0x0C0B2DC0, - 0x0C0A9D00, 0x0C0A0C40, 0x0C097B80, - 0x0C08EAC0, 0x0C085A00, 0x0C07C940, - 0x0C073880, 0x0C06A7C0, 0x0C061700, - 0x0C058640, 0x0C04F580, 0x0C0464C0, - 0x0C03D400, 0x0C034340, 0x0C02B280, - 0x0C0221C0, 0x0C019100, 0x0C010040, - 0x0C006F80, 0x0BFFDEC0, 0x0BFF4E00, - 0x0BFEBD40, 0x0BFE2C80, 0x0BFD9BC0, - 0x0BFD0B00, 0x0BFC7A40, 0x0BFBE980, - 0x0BFB58C0, 0x0BFAC800, 0x0BFA3740, - 0x0BF9A680, 0x0BF915C0, 0x0BF88500, - 0x0BF7F440, 0x0BF76380, 0x0BF6D2C0, - 0x0BF64200, 0x0BF5B140, 0x0BF52080, - 0x0BF48FC0, 0x0BF3FF00, 0x0BF36E40, - 0x0BF2DD80, 0x0BF24CC0, 0x0BF1BC00, - 0x0BF12B40, 0x0BF09A80, 0x0BF009C0, - 0x0BEF7900, 0x0BEEE840, 0x0BEE5780, - 0x0BEDC6C0, 0x0BED3600, 0x0BECA540, - 0x0BEC1480, 0x0BEB83C0, 0x0BEAF300, - 0x0BEA6240, 0x0BE9D180, 0x0BE940C0, - 0x0BE8B000, 0x0BE81F40, 0x0BE78E80, - 0x0BE6FDC0, 0x0BE66D00, 0x0BE5DC40, - 0x0BE54B80, 0x0BE4BAC0, 0x0BE42A00, - 0x0BE39940, 0x0BE30880, 0x0BE277C0, - 0x0BE1E700, 0x0BE15640, 0x0BE0C580, - 0x0BE034C0, 0x0BDFA400, 0x0BDF1340, - 0x0BDE8280, 0x0BDDF1C0, 0x0BDD6100, - 0x0BDCD040, 0x0BDC3F80, 0x0BDBAEC0, - 0x0BDB1E00, 0x0BDA8D40, 0x0BD9FC80, - 0x0BD96BC0, 0x0BD8DB00, 0x0BD84A40, - 0x0BD7B980, 0x0BD728C0, 0x0BD69800, - 0x0BD60740, 0x0BD57680, 0x0BD4E5C0, - 0x0BD45500, 0x0BD3C440, 0x0BD33380, - 0x0BD2A2C0, 0x0BD21200, 0x0BD18140, - 0x0BD0F080, 0x0BD05FC0, 0x0BCFCF00, - 0x0BCF3E40, 0x0BCEAD80, 0x0BCE1CC0, - 0x0BCD8C00, 0x0BCCFB40, 0x0BCC6A80, - 0x0BCBD9C0, 0x0BCB4900, 0x0BCAB840, - 0x0BCA2780, 0x0BC996C0, 0x0BC90600, - 0x0BC87540, 0x0BC7E480, 0x0BC753C0, - 0x0BC6C300, 0x0BC63240, 0x0BC5A180, - 0x0BC510C0, 0x0BC48000, 0x0BC3EF40, - 0x0BC35E80, 0x0BC2CDC0, 0x0BC23D00, - 0x0BC1AC40, 0x0BC11B80, 0x0BC08AC0, - 0x0BBFFA00, 0x0BBF6940, 0x0BBED880, - 0x0BBE47C0, 0x0BBDB700, 0x0BBD2640, - 0x0BBC9580, 0x0BBC04C0, 0x0BBB7400, - 0x0BBAE340, 0x0BBA5280, 0x0BB9C1C0, - 0x0BB93100, 0x0BB8A040, 0x0BB80F80, - 0x0BB77EC0, 0x0BB6EE00, 0x0BB65D40, - 0x0BB5CC80, 0x0BB53BC0, 0x0BB4AB00, - 0x0BB41A40, 0x0BB38980, 0x0BB2F8C0, - 0x0BB26800, 0x0BB1D740, 0x0BB14680, - 0x0BB0B5C0, 0x0BB02500, 0x0BAF9440, - 0x0BAF0380, 0x0BAE72C0, 0x0BADE200, - 0x0BAD5140, 0x0BACC080, 0x0BAC2FC0, - 0x0BAB9F00, 0x0BAB0E40, 0x0BAA7D80, - 0x0BA9ECC0, 0x0BA95C00, 0x0BA8CB40, - 0x0BA83A80, 0x0BA7A9C0, 0x0BA71900, - 0x0BA68840, 0x0BA5F780, 0x0BA566C0, - 0x0BA4D600, 0x0BA44540, 0x0BA3B480, - 0x0BA323C0, 0x0BA29300, 0x0BA20240, - 0x0BA17180, 0x0BA0E0C0, 0x0BA05000, - 0x0B9FBF40, 0x0B9F2E80, 0x0B9E9DC0, - 0x0B9E0D00, 0x0B9D7C40, 0x0B9CEB80, - 0x0B9C5AC0, 0x0B9BCA00, 0x0B9B3940, - 0x0B9AA880, 0x0B9A17C0, 0x0B998700, - 0x0B98F640, 0x0B986580, 0x0B97D4C0, - 0x0B974400, 0x0B96B340, 0x0B962280, - 0x0B9591C0, 0x0B950100, 0x0B947040, - 0x0B93DF80, 0x0B934EC0, 0x0B92BE00, - 0x0B922D40, 0x0B919C80, 0x0B910BC0, - 0x0B907B00, 0x0B8FEA40, 0x0B8F5980, - 0x0B8EC8C0, 0x0B8E3800, 0x0B8DA740, - 0x0B8D1680, 0x0B8C85C0, 0x0B8BF500, - 0x0B8B6440, 0x0B8AD380, 0x0B8A42C0, - 0x0B89B200, 0x0B892140, 0x0B889080, - 0x0B87FFC0, 0x0B876F00, 0x0B86DE40, - 0x0B864D80, 0x0B85BCC0, 0x0B852C00, - 0x0B849B40, 0x0B840A80, 0x0B8379C0, - 0x0B82E900, 0x0B825840, 0x0B81C780, - 0x0B8136C0, 0x0B80A600, 0x0B801540, - 0x0B7F8480, 0x0B7EF3C0, 0x0B7E6300, - 0x0B7DD240, 0x0B7D4180, 0x0B7CB0C0, - 0x0B7C2000, 0x0B7B8F40, 0x0B7AFE80, - 0x0B7A6DC0, 0x0B79DD00, 0x0B794C40, - 0x0B78BB80, 0x0B782AC0, 0x0B779A00, - 0x0B770940, 0x0B767880, 0x0B75E7C0, - 0x0B755700, 0x0B74C640, 0x0B743580, - 0x0B73A4C0, 0x0B731400, 0x0B728340, - 0x0B71F280, 0x0B7161C0, 0x0B70D100, - 0x0B704040, 0x0B6FAF80, 0x0B6F1EC0, - 0x0B6E8E00, 0x0B6DFD40, 0x0B6D6C80, - 0x0B6CDBC0, 0x0B6C4B00, 0x0B6BBA40, - 0x0B6B2980, 0x0B6A98C0, 0x0B6A0800, - 0x0B697740, 0x0B68E680, 0x0B6855C0, - 0x0B67C500, 0x0B673440, 0x0B66A380, - 0x0B6612C0, 0x0B658200, 0x0B64F140, - 0x0B646080, 0x0B63CFC0, 0x0B633F00, - 0x0B62AE40, 0x0B621D80, 0x0B618CC0, - 0x0B60FC00, 0x0B606B40, 0x0B5FDA80, - 0x0B5F49C0, 0x0B5EB900, 0x0B5E2840, - 0x0B5D9780, 0x0B5D06C0, 0x0B5C7600, - 0x0B5BE540, 0x0B5B5480, 0x0B5AC3C0, - 0x0B5A3300, 0x0B59A240, 0x0B591180, - 0x0B5880C0, 0x0B57F000, 0x0B575F40, - 0x0B56CE80, 0x0B563DC0, 0x0B55AD00, - 0x0B551C40, 0x0B548B80, 0x0B53FAC0, - 0x0B536A00, 0x0B52D940, 0x0B524880, - 0x0B51B7C0, 0x0B512700, 0x0B509640, - 0x0B500580, 0x0B4F74C0, 0x0B4EE400, - 0x0B4E5340, 0x0B4DC280, 0x0B4D31C0, - 0x0B4CA100, 0x0B4C1040, 0x0B4B7F80, - 0x0B4AEEC0, 0x0B4A5E00, 0x0B49CD40, - 0x0B493C80, 0x0B48ABC0, 0x0B481B00, - 0x0B478A40, 0x0B46F980, 0x0B4668C0, - 0x0B45D800, 0x0B454740, 0x0B44B680, - 0x0B4425C0, 0x0B439500, 0x0B430440, - 0x0B427380, 0x0B41E2C0, 0x0B415200, - 0x0B40C140, 0x0B403080, 0x0B3F9FC0, - 0x0B3F0F00, 0x0B3E7E40, 0x0B3DED80, - 0x0B3D5CC0, 0x0B3CCC00, 0x0B3C3B40, - 0x0B3BAA80, 0x0B3B19C0, 0x0B3A8900, - 0x0B39F840, 0x0B396780, 0x0B38D6C0, - 0x0B384600, 0x0B37B540, 0x0B372480, - 0x0B3693C0, 0x0B360300, 0x0B357240, - 0x0B34E180, 0x0B3450C0, 0x0B33C000, - 0x0B332F40, 0x0B329E80, 0x0B320DC0, - 0x0B317D00, 0x0B30EC40, 0x0B305B80, - 0x0B2FCAC0, 0x0B2F3A00, 0x0B2EA940, - 0x0B2E1880, 0x0B2D87C0, 0x0B2CF700, - 0x0B2C6640, 0x0B2BD580, 0x0B2B44C0, - 0x0B2AB400, 0x0B2A2340, 0x0B299280, - 0x0B2901C0, 0x0B287100, 0x0B27E040, - 0x0B274F80, 0x0B26BEC0, 0x0B262E00, - 0x0B259D40, 0x0B250C80, 0x0B247BC0, - 0x0B23EB00, 0x0B235A40, 0x0B22C980, - 0x0B2238C0, 0x0B21A800, 0x0B211740, - 0x0B208680, 0x0B1FF5C0, 0x0B1F6500, - 0x0B1ED440, 0x0B1E4380, 0x0B1DB2C0, - 0x0B1D2200, 0x0B1C9140, 0x0B1C0080, - 0x0B1B6FC0, 0x0B1ADF00, 0x0B1A4E40, - 0x0B19BD80, 0x0B192CC0, 0x0B189C00, - 0x0B180B40, 0x0B177A80, 0x0B16E9C0, - 0x0B165900, 0x0B15C840, 0x0B153780, - 0x0B14A6C0, 0x0B141600, 0x0B138540, - 0x0B12F480, 0x0B1263C0, 0x0B11D300, - 0x0B114240, 0x0B10B180, 0x0B1020C0, - 0x0B0F9000, 0x0B0EFF40, 0x0B0E6E80, - 0x0B0DDDC0, 0x0B0D4D00, 0x0B0CBC40, - 0x0B0C2B80, 0x0B0B9AC0, 0x0B0B0A00, - 0x0B0A7940, 0x0B09E880, 0x0B0957C0, - 0x0B08C700, 0x0B083640, 0x0B07A580, - 0x0B0714C0, 0x0B068400, 0x0B05F340, - 0x0B056280, 0x0B04D1C0, 0x0B044100, - 0x0B03B040, 0x0B031F80, 0x0B028EC0, - 0x0B01FE00, 0x0B016D40, 0x0B00DC80, - 0x0B004BC0, 0x0AFFBB00, 0x0AFF2A40, - 0x0AFE9980, 0x0AFE08C0, 0x0AFD7800, - 0x0AFCE740, 0x0AFC5680, 0x0AFBC5C0, - 0x0AFB3500, 0x0AFAA440, 0x0AFA1380, - 0x0AF982C0, 0x0AF8F200, 0x0AF86140, - 0x0AF7D080, 0x0AF73FC0, 0x0AF6AF00, - 0x0AF61E40, 0x0AF58D80, 0x0AF4FCC0, - 0x0AF46C00, 0x0AF3DB40, 0x0AF34A80, - 0x0AF2B9C0, 0x0AF22900, 0x0AF19840, - 0x0AF10780, 0x0AF076C0, 0x0AEFE600, - 0x0AEF5540, 0x0AEEC480, 0x0AEE33C0, - 0x0AEDA300, 0x0AED1240, 0x0AEC8180, - 0x0AEBF0C0, 0x0AEB6000, 0x0AEACF40, - 0x0AEA3E80, 0x0AE9ADC0, 0x0AE91D00, - 0x0AE88C40, 0x0AE7FB80, 0x0AE76AC0, - 0x0AE6DA00, 0x0AE64940, 0x0AE5B880, - 0x0AE527C0, 0x0AE49700, 0x0AE40640, - 0x0AE37580, 0x0AE2E4C0, 0x0AE25400, - 0x0AE1C340, 0x0AE13280, 0x0AE0A1C0, - 0x0AE01100, 0x0ADF8040, 0x0ADEEF80, - 0x0ADE5EC0, 0x0ADDCE00, 0x0ADD3D40, - 0x0ADCAC80, 0x0ADC1BC0, 0x0ADB8B00, - 0x0ADAFA40, 0x0ADA6980, 0x0AD9D8C0, - 0x0AD94800, 0x0AD8B740, 0x0AD82680, - 0x0AD795C0, 0x0AD70500, 0x0AD67440, - 0x0AD5E380, 0x0AD552C0, 0x0AD4C200, - 0x0AD43140, 0x0AD3A080, 0x0AD30FC0, - 0x0AD27F00, 0x0AD1EE40, 0x0AD15D80, - 0x0AD0CCC0, 0x0AD03C00, 0x0ACFAB40, - 0x0ACF1A80, 0x0ACE89C0, 0x0ACDF900, - 0x0ACD6840, 0x0ACCD780, 0x0ACC46C0, - 0x0ACBB600, 0x0ACB2540, 0x0ACA9480, - 0x0ACA03C0, 0x0AC97300, 0x0AC8E240, - 0x0AC85180, 0x0AC7C0C0, 0x0AC73000, - 0x0AC69F40, 0x0AC60E80, 0x0AC57DC0, - 0x0AC4ED00, 0x0AC45C40, 0x0AC3CB80, - 0x0AC33AC0, 0x0AC2AA00, 0x0AC21940, - 0x0AC18880, 0x0AC0F7C0, 0x0AC06700, - 0x0ABFD640, 0x0ABF4580, 0x0ABEB4C0, - 0x0ABE2400, 0x0ABD9340, 0x0ABD0280, - 0x0ABC71C0, 0x0ABBE100, 0x0ABB5040, - 0x0ABABF80, 0x0ABA2EC0, 0x0AB99E00, - 0x0AB90D40, 0x0AB87C80, 0x0AB7EBC0, - 0x0AB75B00, 0x0AB6CA40, 0x0AB63980, - 0x0AB5A8C0, 0x0AB51800, 0x0AB48740, - 0x0AB3F680, 0x0AB365C0, 0x0AB2D500, - 0x0AB24440, 0x0AB1B380, 0x0AB122C0, - 0x0AB09200, 0x0AB00140, 0x0AAF7080, - 0x0AAEDFC0, 0x0AAE4F00, 0x0AADBE40, - 0x0AAD2D80, 0x0AAC9CC0, 0x0AAC0C00, - 0x0AAB7B40, 0x0AAAEA80, 0x0AAA59C0, - 0x0AA9C900, 0x0AA93840, 0x0AA8A780, - 0x0AA816C0, 0x0AA78600, 0x0AA6F540, - 0x0AA66480, 0x0AA5D3C0, 0x0AA54300, - 0x0AA4B240, 0x0AA42180, 0x0AA390C0, - 0x0AA30000, 0x0AA26F40, 0x0AA1DE80, - 0x0AA14DC0, 0x0AA0BD00, 0x0AA02C40, - 0x0A9F9B80, 0x0A9F0AC0, 0x0A9E7A00, - 0x0A9DE940, 0x0A9D5880, 0x0A9CC7C0, - 0x0A9C3700, 0x0A9BA640, 0x0A9B1580, - 0x0A9A84C0, 0x0A99F400, 0x0A996340, - 0x0A98D280, 0x0A9841C0, 0x0A97B100, - 0x0A972040, 0x0A968F80, 0x0A95FEC0, - 0x0A956E00, 0x0A94DD40, 0x0A944C80, - 0x0A93BBC0, 0x0A932B00, 0x0A929A40, - 0x0A920980, 0x0A9178C0, 0x0A90E800, - 0x0A905740, 0x0A8FC680, 0x0A8F35C0, - 0x0A8EA500, 0x0A8E1440, 0x0A8D8380, - 0x0A8CF2C0, 0x0A8C6200, 0x0A8BD140, - 0x0A8B4080, 0x0A8AAFC0, 0x0A8A1F00, - 0x0A898E40, 0x0A88FD80, 0x0A886CC0, - 0x0A87DC00, 0x0A874B40, 0x0A86BA80, - 0x0A8629C0, 0x0A859900, 0x0A850840, - 0x0A847780, 0x0A83E6C0, 0x0A835600, - 0x0A82C540, 0x0A823480, 0x0A81A3C0, - 0x0A811300, 0x0A808240, 0x0A7FF180, - 0x0A7F60C0, 0x0A7ED000, 0x0A7E3F40, - 0x0A7DAE80, 0x0A7D1DC0, 0x0A7C8D00, - 0x0A7BFC40, 0x0A7B6B80, 0x0A7ADAC0, - 0x0A7A4A00, 0x0A79B940, 0x0A792880, - 0x0A7897C0, 0x0A780700, 0x0A777640, - 0x0A76E580, 0x0A7654C0, 0x0A75C400, - 0x0A753340, 0x0A74A280, 0x0A7411C0, - 0x0A738100, 0x0A72F040, 0x0A725F80, - 0x0A71CEC0, 0x0A713E00, 0x0A70AD40, - 0x0A701C80, 0x0A6F8BC0, 0x0A6EFB00, - 0x0A6E6A40, 0x0A6DD980, 0x0A6D48C0, - 0x0A6CB800, 0x0A6C2740, 0x0A6B9680, - 0x0A6B05C0, 0x0A6A7500, 0x0A69E440, - 0x0A695380, 0x0A68C2C0, 0x0A683200, - 0x0A67A140, 0x0A671080, 0x0A667FC0, - 0x0A65EF00, 0x0A655E40, 0x0A64CD80, - 0x0A643CC0, 0x0A63AC00, 0x0A631B40, - 0x0A628A80, 0x0A61F9C0, 0x0A616900, - 0x0A60D840, 0x0A604780, 0x0A5FB6C0, - 0x0A5F2600, 0x0A5E9540, 0x0A5E0480, - 0x0A5D73C0, 0x0A5CE300, 0x0A5C5240, - 0x0A5BC180, 0x0A5B30C0, 0x0A5AA000, - 0x0A5A0F40, 0x0A597E80, 0x0A58EDC0, - 0x0A585D00, 0x0A57CC40, 0x0A573B80, - 0x0A56AAC0, 0x0A561A00, 0x0A558940, - 0x0A54F880, 0x0A5467C0, 0x0A53D700, - 0x0A534640, 0x0A52B580, 0x0A5224C0, - 0x0A519400, 0x0A510340, 0x0A507280, - 0x0A4FE1C0, 0x0A4F5100, 0x0A4EC040, - 0x0A4E2F80, 0x0A4D9EC0, 0x0A4D0E00, - 0x0A4C7D40, 0x0A4BEC80, 0x0A4B5BC0, - 0x0A4ACB00, 0x0A4A3A40, 0x0A49A980, - 0x0A4918C0, 0x0A488800, 0x0A47F740, - 0x0A476680, 0x0A46D5C0, 0x0A464500, - 0x0A45B440, 0x0A452380, 0x0A4492C0, - 0x0A440200, 0x0A437140, 0x0A42E080, - 0x0A424FC0, 0x0A41BF00, 0x0A412E40, - 0x0A409D80, 0x0A400CC0, 0x0A3F7C00, - 0x0A3EEB40, 0x0A3E5A80, 0x0A3DC9C0, - 0x0A3D3900, 0x0A3CA840, 0x0A3C1780, - 0x0A3B86C0, 0x0A3AF600, 0x0A3A6540, - 0x0A39D480, 0x0A3943C0, 0x0A38B300, - 0x0A382240, 0x0A379180, 0x0A3700C0, - 0x0A367000, 0x0A35DF40, 0x0A354E80, - 0x0A34BDC0, 0x0A342D00, 0x0A339C40, - 0x0A330B80, 0x0A327AC0, 0x0A31EA00, - 0x0A315940, 0x0A30C880, 0x0A3037C0, - 0x0A2FA700, 0x0A2F1640, 0x0A2E8580, - 0x0A2DF4C0, 0x0A2D6400, 0x0A2CD340, - 0x0A2C4280, 0x0A2BB1C0, 0x0A2B2100, - 0x0A2A9040, 0x0A29FF80, 0x0A296EC0, - 0x0A28DE00, 0x0A284D40, 0x0A27BC80, - 0x0A272BC0, 0x0A269B00, 0x0A260A40, - 0x0A257980, 0x0A24E8C0, 0x0A245800, - 0x0A23C740, 0x0A233680, 0x0A22A5C0, - 0x0A221500, 0x0A218440, 0x0A20F380, - 0x0A2062C0, 0x0A1FD200, 0x0A1F4140, - 0x0A1EB080, 0x0A1E1FC0, 0x0A1D8F00, - 0x0A1CFE40, 0x0A1C6D80, 0x0A1BDCC0, - 0x0A1B4C00, 0x0A1ABB40, 0x0A1A2A80, - 0x0A1999C0, 0x0A190900, 0x0A187840, - 0x0A17E780, 0x0A1756C0, 0x0A16C600, - 0x0A163540, 0x0A15A480, 0x0A1513C0, - 0x0A148300, 0x0A13F240, 0x0A136180, - 0x0A12D0C0, 0x0A124000, 0x0A11AF40, - 0x0A111E80, 0x0A108DC0, 0x0A0FFD00, - 0x0A0F6C40, 0x0A0EDB80, 0x0A0E4AC0, - 0x0A0DBA00, 0x0A0D2940, 0x0A0C9880, - 0x0A0C07C0, 0x0A0B7700, 0x0A0AE640, - 0x0A0A5580, 0x0A09C4C0, 0x0A093400, - 0x0A08A340, 0x0A081280, 0x0A0781C0, - 0x0A06F100, 0x0A066040, 0x0A05CF80, - 0x0A053EC0, 0x0A04AE00, 0x0A041D40, - 0x0A038C80, 0x0A02FBC0, 0x0A026B00, - 0x0A01DA40, 0x0A014980, 0x0A00B8C0, - 0x0A002800, 0x09FF9740, 0x09FF0680, - 0x09FE75C0, 0x09FDE500, 0x09FD5440, - 0x09FCC380, 0x09FC32C0, 0x09FBA200, - 0x09FB1140, 0x09FA8080, 0x09F9EFC0, - 0x09F95F00, 0x09F8CE40, 0x09F83D80, - 0x09F7ACC0, 0x09F71C00, 0x09F68B40, - 0x09F5FA80, 0x09F569C0, 0x09F4D900, - 0x09F44840, 0x09F3B780, 0x09F326C0, - 0x09F29600, 0x09F20540, 0x09F17480, - 0x09F0E3C0, 0x09F05300, 0x09EFC240, - 0x09EF3180, 0x09EEA0C0, 0x09EE1000, - 0x09ED7F40, 0x09ECEE80, 0x09EC5DC0, - 0x09EBCD00, 0x09EB3C40, 0x09EAAB80, - 0x09EA1AC0, 0x09E98A00, 0x09E8F940, - 0x09E86880, 0x09E7D7C0, 0x09E74700, - 0x09E6B640, 0x09E62580, 0x09E594C0, - 0x09E50400, 0x09E47340, 0x09E3E280, - 0x09E351C0, 0x09E2C100, 0x09E23040, - 0x09E19F80, 0x09E10EC0, 0x09E07E00, - 0x09DFED40, 0x09DF5C80, 0x09DECBC0, - 0x09DE3B00, 0x09DDAA40, 0x09DD1980, - 0x09DC88C0, 0x09DBF800, 0x09DB6740, - 0x09DAD680, 0x09DA45C0, 0x09D9B500, - 0x09D92440, 0x09D89380, 0x09D802C0, - 0x09D77200, 0x09D6E140, 0x09D65080, - 0x09D5BFC0, 0x09D52F00, 0x09D49E40, - 0x09D40D80, 0x09D37CC0, 0x09D2EC00, - 0x09D25B40, 0x09D1CA80, 0x09D139C0, - 0x09D0A900, 0x09D01840, 0x09CF8780, - 0x09CEF6C0, 0x09CE6600, 0x09CDD540, - 0x09CD4480, 0x09CCB3C0, 0x09CC2300, - 0x09CB9240, 0x09CB0180, 0x09CA70C0, - 0x09C9E000, 0x09C94F40, 0x09C8BE80, - 0x09C82DC0, 0x09C79D00, 0x09C70C40, - 0x09C67B80, 0x09C5EAC0, 0x09C55A00, - 0x09C4C940, 0x09C43880, 0x09C3A7C0, - 0x09C31700, 0x09C28640, 0x09C1F580, - 0x09C164C0, 0x09C0D400, 0x09C04340, - 0x09BFB280, 0x09BF21C0, 0x09BE9100, - 0x09BE0040, 0x09BD6F80, 0x09BCDEC0, - 0x09BC4E00, 0x09BBBD40, 0x09BB2C80, - 0x09BA9BC0, 0x09BA0B00, 0x09B97A40, - 0x09B8E980, 0x09B858C0, 0x09B7C800, - 0x09B73740, 0x09B6A680, 0x09B615C0, - 0x09B58500, 0x09B4F440, 0x09B46380, - 0x09B3D2C0, 0x09B34200, 0x09B2B140, - 0x09B22080, 0x09B18FC0, 0x09B0FF00, - 0x09B06E40, 0x09AFDD80, 0x09AF4CC0, - 0x09AEBC00, 0x09AE2B40, 0x09AD9A80, - 0x09AD09C0, 0x09AC7900, 0x09ABE840, - 0x09AB5780, 0x09AAC6C0, 0x09AA3600, - 0x09A9A540, 0x09A91480, 0x09A883C0, - 0x09A7F300, 0x09A76240, 0x09A6D180, - 0x09A640C0, 0x09A5B000, 0x09A51F40, - 0x09A48E80, 0x09A3FDC0, 0x09A36D00, - 0x09A2DC40, 0x09A24B80, 0x09A1BAC0, - 0x09A12A00, 0x09A09940, 0x09A00880, - 0x099F77C0, 0x099EE700, 0x099E5640, - 0x099DC580, 0x099D34C0, 0x099CA400, - 0x099C1340, 0x099B8280, 0x099AF1C0, - 0x099A6100, 0x0999D040, 0x09993F80, - 0x0998AEC0, 0x09981E00, 0x09978D40, - 0x0996FC80, 0x09966BC0, 0x0995DB00, - 0x09954A40, 0x0994B980, 0x099428C0, - 0x09939800, 0x09930740, 0x09927680, - 0x0991E5C0, 0x09915500, 0x0990C440, - 0x09903380, 0x098FA2C0, 0x098F1200, - 0x098E8140, 0x098DF080, 0x098D5FC0, - 0x098CCF00, 0x098C3E40, 0x098BAD80, - 0x098B1CC0, 0x098A8C00, 0x0989FB40, - 0x09896A80, 0x0988D9C0, 0x09884900, - 0x0987B840, 0x09872780, 0x098696C0, - 0x09860600, 0x09857540, 0x0984E480, - 0x098453C0, 0x0983C300, 0x09833240, - 0x0982A180, 0x098210C0, 0x09818000, - 0x0980EF40, 0x09805E80, 0x097FCDC0, - 0x097F3D00, 0x097EAC40, 0x097E1B80, - 0x097D8AC0, 0x097CFA00, 0x097C6940, - 0x097BD880, 0x097B47C0, 0x097AB700, - 0x097A2640, 0x09799580, 0x097904C0, - 0x09787400, 0x0977E340, 0x09775280, - 0x0976C1C0, 0x09763100, 0x0975A040, - 0x09750F80, 0x09747EC0, 0x0973EE00, - 0x09735D40, 0x0972CC80, 0x09723BC0, - 0x0971AB00, 0x09711A40, 0x09708980, - 0x096FF8C0, 0x096F6800, 0x096ED740, - 0x096E4680, 0x096DB5C0, 0x096D2500, - 0x096C9440, 0x096C0380, 0x096B72C0, - 0x096AE200, 0x096A5140, 0x0969C080, - 0x09692FC0, 0x09689F00, 0x09680E40, - 0x09677D80, 0x0966ECC0, 0x09665C00, - 0x0965CB40, 0x09653A80, 0x0964A9C0, - 0x09641900, 0x09638840, 0x0962F780, - 0x096266C0, 0x0961D600, 0x09614540, - 0x0960B480, 0x096023C0, 0x095F9300, - 0x095F0240, 0x095E7180, 0x095DE0C0, - 0x095D5000, 0x095CBF40, 0x095C2E80, - 0x095B9DC0, 0x095B0D00, 0x095A7C40, - 0x0959EB80, 0x09595AC0, 0x0958CA00, - 0x09583940, 0x0957A880, 0x095717C0, - 0x09568700, 0x0955F640, 0x09556580, - 0x0954D4C0, 0x09544400, 0x0953B340, - 0x09532280, 0x095291C0, 0x09520100, - 0x09517040, 0x0950DF80, 0x09504EC0, - 0x094FBE00, 0x094F2D40, 0x094E9C80, - 0x094E0BC0, 0x094D7B00, 0x094CEA40, - 0x094C5980, 0x094BC8C0, 0x094B3800, - 0x094AA740, 0x094A1680, 0x094985C0, - 0x0948F500, 0x09486440, 0x0947D380, - 0x094742C0, 0x0946B200, 0x09462140, - 0x09459080, 0x0944FFC0, 0x09446F00, - 0x0943DE40, 0x09434D80, 0x0942BCC0, - 0x09422C00, 0x09419B40, 0x09410A80, - 0x094079C0, 0x093FE900, 0x093F5840, - 0x093EC780, 0x093E36C0, 0x093DA600, - 0x093D1540, 0x093C8480, 0x093BF3C0, - 0x093B6300, 0x093AD240, 0x093A4180, - 0x0939B0C0, 0x09392000, 0x09388F40, - 0x0937FE80, 0x09376DC0, 0x0936DD00, - 0x09364C40, 0x0935BB80, 0x09352AC0, - 0x09349A00, 0x09340940, 0x09337880, - 0x0932E7C0, 0x09325700, 0x0931C640, - 0x09313580, 0x0930A4C0, 0x09301400, - 0x092F8340, 0x092EF280, 0x092E61C0, - 0x092DD100, 0x092D4040, 0x092CAF80, - 0x092C1EC0, 0x092B8E00, 0x092AFD40, - 0x092A6C80, 0x0929DBC0, 0x09294B00, - 0x0928BA40, 0x09282980, 0x092798C0, - 0x09270800, 0x09267740, 0x0925E680, - 0x092555C0, 0x0924C500, 0x09243440, - 0x0923A380, 0x092312C0, 0x09228200, - 0x0921F140, 0x09216080, 0x0920CFC0, - 0x09203F00, 0x091FAE40, 0x091F1D80, - 0x091E8CC0, 0x091DFC00, 0x091D6B40, - 0x091CDA80, 0x091C49C0, 0x091BB900, - 0x091B2840, 0x091A9780, 0x091A06C0, - 0x09197600, 0x0918E540, 0x09185480, - 0x0917C3C0, 0x09173300, 0x0916A240, - 0x09161180, 0x091580C0, 0x0914F000, - 0x09145F40, 0x0913CE80, 0x09133DC0, - 0x0912AD00, 0x09121C40, 0x09118B80, - 0x0910FAC0, 0x09106A00, 0x090FD940, - 0x090F4880, 0x090EB7C0, 0x090E2700, - 0x090D9640, 0x090D0580, 0x090C74C0, - 0x090BE400, 0x090B5340, 0x090AC280, - 0x090A31C0, 0x0909A100, 0x09091040, - 0x09087F80, 0x0907EEC0, 0x09075E00, - 0x0906CD40, 0x09063C80, 0x0905ABC0, - 0x09051B00, 0x09048A40, 0x0903F980, - 0x090368C0, 0x0902D800, 0x09024740, - 0x0901B680, 0x090125C0, 0x09009500, - 0x09000440, 0x08FF7380, 0x08FEE2C0, - 0x08FE5200, 0x08FDC140, 0x08FD3080, - 0x08FC9FC0, 0x08FC0F00, 0x08FB7E40, - 0x08FAED80, 0x08FA5CC0, 0x08F9CC00, - 0x08F93B40, 0x08F8AA80, 0x08F819C0, - 0x08F78900, 0x08F6F840, 0x08F66780, - 0x08F5D6C0, 0x08F54600, 0x08F4B540, - 0x08F42480, 0x08F393C0, 0x08F30300, - 0x08F27240, 0x08F1E180, 0x08F150C0, - 0x08F0C000, 0x08F02F40, 0x08EF9E80, - 0x08EF0DC0, 0x08EE7D00, 0x08EDEC40, - 0x08ED5B80, 0x08ECCAC0, 0x08EC3A00, - 0x08EBA940, 0x08EB1880, 0x08EA87C0, - 0x08E9F700, 0x08E96640, 0x08E8D580, - 0x08E844C0, 0x08E7B400, 0x08E72340, - 0x08E69280, 0x08E601C0, 0x08E57100, - 0x08E4E040, 0x08E44F80, 0x08E3BEC0, - 0x08E32E00, 0x08E29D40, 0x08E20C80, - 0x08E17BC0, 0x08E0EB00, 0x08E05A40, - 0x08DFC980, 0x08DF38C0, 0x08DEA800, - 0x08DE1740, 0x08DD8680, 0x08DCF5C0, - 0x08DC6500, 0x08DBD440, 0x08DB4380, - 0x08DAB2C0, 0x08DA2200, 0x08D99140, - 0x08D90080, 0x08D86FC0, 0x08D7DF00, - 0x08D74E40, 0x08D6BD80, 0x08D62CC0, - 0x08D59C00, 0x08D50B40, 0x08D47A80, - 0x08D3E9C0, 0x08D35900, 0x08D2C840, - 0x08D23780, 0x08D1A6C0, 0x08D11600, - 0x08D08540, 0x08CFF480, 0x08CF63C0, - 0x08CED300, 0x08CE4240, 0x08CDB180, - 0x08CD20C0, 0x08CC9000, 0x08CBFF40, - 0x08CB6E80, 0x08CADDC0, 0x08CA4D00, - 0x08C9BC40, 0x08C92B80, 0x08C89AC0, - 0x08C80A00, 0x08C77940, 0x08C6E880, - 0x08C657C0, 0x08C5C700, 0x08C53640, - 0x08C4A580, 0x08C414C0, 0x08C38400, - 0x08C2F340, 0x08C26280, 0x08C1D1C0, - 0x08C14100, 0x08C0B040, 0x08C01F80, - 0x08BF8EC0, 0x08BEFE00, 0x08BE6D40, - 0x08BDDC80, 0x08BD4BC0, 0x08BCBB00, - 0x08BC2A40, 0x08BB9980, 0x08BB08C0, - 0x08BA7800, 0x08B9E740, 0x08B95680, - 0x08B8C5C0, 0x08B83500, 0x08B7A440, - 0x08B71380, 0x08B682C0, 0x08B5F200, - 0x08B56140, 0x08B4D080, 0x08B43FC0, - 0x08B3AF00, 0x08B31E40, 0x08B28D80, - 0x08B1FCC0, 0x08B16C00, 0x08B0DB40, - 0x08B04A80, 0x08AFB9C0, 0x08AF2900, - 0x08AE9840, 0x08AE0780, 0x08AD76C0, - 0x08ACE600, 0x08AC5540, 0x08ABC480, - 0x08AB33C0, 0x08AAA300, 0x08AA1240, - 0x08A98180, 0x08A8F0C0, 0x08A86000, - 0x08A7CF40, 0x08A73E80, 0x08A6ADC0, - 0x08A61D00, 0x08A58C40, 0x08A4FB80, - 0x08A46AC0, 0x08A3DA00, 0x08A34940, - 0x08A2B880, 0x08A227C0, 0x08A19700, - 0x08A10640, 0x08A07580, 0x089FE4C0, - 0x089F5400, 0x089EC340, 0x089E3280, - 0x089DA1C0, 0x089D1100, 0x089C8040, - 0x089BEF80, 0x089B5EC0, 0x089ACE00, - 0x089A3D40, 0x0899AC80, 0x08991BC0, - 0x08988B00, 0x0897FA40, 0x08976980, - 0x0896D8C0, 0x08964800, 0x0895B740, - 0x08952680, 0x089495C0, 0x08940500, - 0x08937440, 0x0892E380, 0x089252C0, - 0x0891C200, 0x08913140, 0x0890A080, - 0x08900FC0, 0x088F7F00, 0x088EEE40, - 0x088E5D80, 0x088DCCC0, 0x088D3C00, - 0x088CAB40, 0x088C1A80, 0x088B89C0, - 0x088AF900, 0x088A6840, 0x0889D780, - 0x088946C0, 0x0888B600, 0x08882540, - 0x08879480, 0x088703C0, 0x08867300, - 0x0885E240, 0x08855180, 0x0884C0C0, - 0x08843000, 0x08839F40, 0x08830E80, - 0x08827DC0, 0x0881ED00, 0x08815C40, - 0x0880CB80, 0x08803AC0, 0x087FAA00, - 0x087F1940, 0x087E8880, 0x087DF7C0, - 0x087D6700, 0x087CD640, 0x087C4580, - 0x087BB4C0, 0x087B2400, 0x087A9340, - 0x087A0280, 0x087971C0, 0x0878E100, - 0x08785040, 0x0877BF80, 0x08772EC0, - 0x08769E00, 0x08760D40, 0x08757C80, - 0x0874EBC0, 0x08745B00, 0x0873CA40, - 0x08733980, 0x0872A8C0, 0x08721800, - 0x08718740, 0x0870F680, 0x087065C0, - 0x086FD500, 0x086F4440, 0x086EB380, - 0x086E22C0, 0x086D9200, 0x086D0140, - 0x086C7080, 0x086BDFC0, 0x086B4F00, - 0x086ABE40, 0x086A2D80, 0x08699CC0, - 0x08690C00, 0x08687B40, 0x0867EA80, - 0x086759C0, 0x0866C900, 0x08663840, - 0x0865A780, 0x086516C0, 0x08648600, - 0x0863F540, 0x08636480, 0x0862D3C0, - 0x08624300, 0x0861B240, 0x08612180, - 0x086090C0, 0x08620000, 0x08617680, - 0x0860ED00, 0x08606380, 0x085FDA00, - 0x085F5080, 0x085EC700, 0x085E3D80, - 0x085DB400, 0x085D2A80, 0x085CA100, - 0x085C1780, 0x085B8E00, 0x085B0480, - 0x085A7B00, 0x0859F180, 0x08596800, - 0x0858DE80, 0x08585500, 0x0857CB80, - 0x08574200, 0x0856B880, 0x08562F00, - 0x0855A580, 0x08551C00, 0x08549280, - 0x08540900, 0x08537F80, 0x0852F600, - 0x08526C80, 0x0851E300, 0x08515980, - 0x0850D000, 0x08504680, 0x084FBD00, - 0x084F3380, 0x084EAA00, 0x084E2080, - 0x084D9700, 0x084D0D80, 0x084C8400, - 0x084BFA80, 0x084B7100, 0x084AE780, - 0x084A5E00, 0x0849D480, 0x08494B00, - 0x0848C180, 0x08483800, 0x0847AE80, - 0x08472500, 0x08469B80, 0x08461200, - 0x08458880, 0x0844FF00, 0x08447580, - 0x0843EC00, 0x08436280, 0x0842D900, - 0x08424F80, 0x0841C600, 0x08413C80, - 0x0840B300, 0x08402980, 0x083FA000, - 0x083F1680, 0x083E8D00, 0x083E0380, - 0x083D7A00, 0x083CF080, 0x083C6700, - 0x083BDD80, 0x083B5400, 0x083ACA80, - 0x083A4100, 0x0839B780, 0x08392E00, - 0x0838A480, 0x08381B00, 0x08379180, - 0x08370800, 0x08367E80, 0x0835F500, - 0x08356B80, 0x0834E200, 0x08345880, - 0x0833CF00, 0x08334580, 0x0832BC00, - 0x08323280, 0x0831A900, 0x08311F80, - 0x08309600, 0x08300C80, 0x082F8300, - 0x082EF980, 0x082E7000, 0x082DE680, - 0x082D5D00, 0x082CD380, 0x082C4A00, - 0x082BC080, 0x082B3700, 0x082AAD80, - 0x082A2400, 0x08299A80, 0x08291100, - 0x08288780, 0x0827FE00, 0x08277480, - 0x0826EB00, 0x08266180, 0x0825D800, - 0x08254E80, 0x0824C500, 0x08243B80, - 0x0823B200, 0x08232880, 0x08229F00, - 0x08221580, 0x08218C00, 0x08210280, - 0x08207900, 0x081FEF80, 0x081F6600, - 0x081EDC80, 0x081E5300, 0x081DC980, - 0x081D4000, 0x081CB680, 0x081C2D00, - 0x081BA380, 0x081B1A00, 0x081A9080, - 0x081A0700, 0x08197D80, 0x0818F400, - 0x08186A80, 0x0817E100, 0x08175780, - 0x0816CE00, 0x08164480, 0x0815BB00, - 0x08153180, 0x0814A800, 0x08141E80, - 0x08139500, 0x08130B80, 0x08128200, - 0x0811F880, 0x08116F00, 0x0810E580, - 0x08105C00, 0x080FD280, 0x080F4900, - 0x080EBF80, 0x080E3600, 0x080DAC80, - 0x080D2300, 0x080C9980, 0x080C1000, - 0x080B8680, 0x080AFD00, 0x080A7380, - 0x0809EA00, 0x08096080, 0x0808D700, - 0x08084D80, 0x0807C400, 0x08073A80, - 0x0806B100, 0x08062780, 0x08059E00, - 0x08051480, 0x08048B00, 0x08040180, - 0x08037800, 0x0802EE80, 0x08026500, - 0x0801DB80, 0x08015200, 0x0800C880, - 0x08003F00, 0x07FFB580, 0x07FF2C00, - 0x07FEA280, 0x07FE1900, 0x07FD8F80, - 0x07FD0600, 0x07FC7C80, 0x07FBF300, - 0x07FB6980, 0x07FAE000, 0x07FA5680, - 0x07F9CD00, 0x07F94380, 0x07F8BA00, - 0x07F83080, 0x07F7A700, 0x07F71D80, - 0x07F69400, 0x07F60A80, 0x07F58100, - 0x07F4F780, 0x07F46E00, 0x07F3E480, - 0x07F35B00, 0x07F2D180, 0x07F24800, - 0x07F1BE80, 0x07F13500, 0x07F0AB80, - 0x07F02200, 0x07EF9880, 0x07EF0F00, - 0x07EE8580, 0x07EDFC00, 0x07ED7280, - 0x07ECE900, 0x07EC5F80, 0x07EBD600, - 0x07EB4C80, 0x07EAC300, 0x07EA3980, - 0x07E9B000, 0x07E92680, 0x07E89D00, - 0x07E81380, 0x07E78A00, 0x07E70080, - 0x07E67700, 0x07E5ED80, 0x07E56400, - 0x07E4DA80, 0x07E45100, 0x07E3C780, - 0x07E33E00, 0x07E2B480, 0x07E22B00, - 0x07E1A180, 0x07E11800, 0x07E08E80, - 0x07E00500, 0x07DF7B80, 0x07DEF200, - 0x07DE6880, 0x07DDDF00, 0x07DD5580, - 0x07DCCC00, 0x07DC4280, 0x07DBB900, - 0x07DB2F80, 0x07DAA600, 0x07DA1C80, - 0x07D99300, 0x07D90980, 0x07D88000, - 0x07D7F680, 0x07D76D00, 0x07D6E380, - 0x07D65A00, 0x07D5D080, 0x07D54700, - 0x07D4BD80, 0x07D43400, 0x07D3AA80, - 0x07D32100, 0x07D29780, 0x07D20E00, - 0x07D18480, 0x07D0FB00, 0x07D07180, - 0x07CFE800, 0x07CF5E80, 0x07CED500, - 0x07CE4B80, 0x07CDC200, 0x07CD3880, - 0x07CCAF00, 0x07CC2580, 0x07CB9C00, - 0x07CB1280, 0x07CA8900, 0x07C9FF80, - 0x07C97600, 0x07C8EC80, 0x07C86300, - 0x07C7D980, 0x07C75000, 0x07C6C680, - 0x07C63D00, 0x07C5B380, 0x07C52A00, - 0x07C4A080, 0x07C41700, 0x07C38D80, - 0x07C30400, 0x07C27A80, 0x07C1F100, - 0x07C16780, 0x07C0DE00, 0x07C05480, - 0x07BFCB00, 0x07BF4180, 0x07BEB800, - 0x07BE2E80, 0x07BDA500, 0x07BD1B80, - 0x07BC9200, 0x07BC0880, 0x07BB7F00, - 0x07BAF580, 0x07BA6C00, 0x07B9E280, - 0x07B95900, 0x07B8CF80, 0x07B84600, - 0x07B7BC80, 0x07B73300, 0x07B6A980, - 0x07B62000, 0x07B59680, 0x07B50D00, - 0x07B48380, 0x07B3FA00, 0x07B37080, - 0x07B2E700, 0x07B25D80, 0x07B1D400, - 0x07B14A80, 0x07B0C100, 0x07B03780, - 0x07AFAE00, 0x07AF2480, 0x07AE9B00, - 0x07AE1180, 0x07AD8800, 0x07ACFE80, - 0x07AC7500, 0x07ABEB80, 0x07AB6200, - 0x07AAD880, 0x07AA4F00, 0x07A9C580, - 0x07A93C00, 0x07A8B280, 0x07A82900, - 0x07A79F80, 0x07A71600, 0x07A68C80, - 0x07A60300, 0x07A57980, 0x07A4F000, - 0x07A46680, 0x07A3DD00, 0x07A35380, - 0x07A2CA00, 0x07A24080, 0x07A1B700, - 0x07A12D80, 0x07A0A400, 0x07A01A80, - 0x079F9100, 0x079F0780, 0x079E7E00, - 0x079DF480, 0x079D6B00, 0x079CE180, - 0x079C5800, 0x079BCE80, 0x079B4500, - 0x079ABB80, 0x079A3200, 0x0799A880, - 0x07991F00, 0x07989580, 0x07980C00, - 0x07978280, 0x0796F900, 0x07966F80, - 0x0795E600, 0x07955C80, 0x0794D300, - 0x07944980, 0x0793C000, 0x07933680, - 0x0792AD00, 0x07922380, 0x07919A00, - 0x07911080, 0x07908700, 0x078FFD80, - 0x078F7400, 0x078EEA80, 0x078E6100, - 0x078DD780, 0x078D4E00, 0x078CC480, - 0x078C3B00, 0x078BB180, 0x078B2800, - 0x078A9E80, 0x078A1500, 0x07898B80, - 0x07890200, 0x07887880, 0x0787EF00, - 0x07876580, 0x0786DC00, 0x07865280, - 0x0785C900, 0x07853F80, 0x0784B600, - 0x07842C80, 0x0783A300, 0x07831980, - 0x07829000, 0x07820680, 0x07817D00, - 0x0780F380, 0x07806A00, 0x077FE080, - 0x077F5700, 0x077ECD80, 0x077E4400, - 0x077DBA80, 0x077D3100, 0x077CA780, - 0x077C1E00, 0x077B9480, 0x077B0B00, - 0x077A8180, 0x0779F800, 0x07796E80, - 0x0778E500, 0x07785B80, 0x0777D200, - 0x07774880, 0x0776BF00, 0x07763580, - 0x0775AC00, 0x07752280, 0x07749900, - 0x07740F80, 0x07738600, 0x0772FC80, - 0x07727300, 0x0771E980, 0x07716000, - 0x0770D680, 0x07704D00, 0x076FC380, - 0x076F3A00, 0x076EB080, 0x076E2700, - 0x076D9D80, 0x076D1400, 0x076C8A80, - 0x076C0100, 0x076B7780, 0x076AEE00, - 0x076A6480, 0x0769DB00, 0x07695180, - 0x0768C800, 0x07683E80, 0x0767B500, - 0x07672B80, 0x0766A200, 0x07661880, - 0x07658F00, 0x07650580, 0x07647C00, - 0x0763F280, 0x07636900, 0x0762DF80, - 0x07625600, 0x0761CC80, 0x07614300, - 0x0760B980, 0x07603000, 0x075FA680, - 0x075F1D00, 0x075E9380, 0x075E0A00, - 0x075D8080, 0x075CF700, 0x075C6D80, - 0x075BE400, 0x075B5A80, 0x075AD100, - 0x075A4780, 0x0759BE00, 0x07593480, - 0x0758AB00, 0x07582180, 0x07579800, - 0x07570E80, 0x07568500, 0x0755FB80, - 0x07557200, 0x0754E880, 0x07545F00, - 0x0753D580, 0x07534C00, 0x0752C280, - 0x07523900, 0x0751AF80, 0x07512600, - 0x07509C80, 0x07501300, 0x074F8980, - 0x074F0000, 0x074E7680, 0x074DED00, - 0x074D6380, 0x074CDA00, 0x074C5080, - 0x074BC700, 0x074B3D80, 0x074AB400, - 0x074A2A80, 0x0749A100, 0x07491780, - 0x07488E00, 0x07480480, 0x07477B00, - 0x0746F180, 0x07466800, 0x0745DE80, - 0x07455500, 0x0744CB80, 0x07444200, - 0x0743B880, 0x07432F00, 0x0742A580, - 0x07421C00, 0x07419280, 0x07410900, - 0x07407F80, 0x073FF600, 0x073F6C80, - 0x073EE300, 0x073E5980, 0x073DD000, - 0x073D4680, 0x073CBD00, 0x073C3380, - 0x073BAA00, 0x073B2080, 0x073A9700, - 0x073A0D80, 0x07398400, 0x0738FA80, - 0x07387100, 0x0737E780, 0x07375E00, - 0x0736D480, 0x07364B00, 0x0735C180, - 0x07353800, 0x0734AE80, 0x07342500, - 0x07339B80, 0x07331200, 0x07328880, - 0x0731FF00, 0x07317580, 0x0730EC00, - 0x07306280, 0x072FD900, 0x072F4F80, - 0x072EC600, 0x072E3C80, 0x072DB300, - 0x072D2980, 0x072CA000, 0x072C1680, - 0x072B8D00, 0x072B0380, 0x072A7A00, - 0x0729F080, 0x07296700, 0x0728DD80, - 0x07285400, 0x0727CA80, 0x07274100, - 0x0726B780, 0x07262E00, 0x0725A480, - 0x07251B00, 0x07249180, 0x07240800, - 0x07237E80, 0x0722F500, 0x07226B80, - 0x0721E200, 0x07215880, 0x0720CF00, - 0x07204580, 0x071FBC00, 0x071F3280, - 0x071EA900, 0x071E1F80, 0x071D9600, - 0x071D0C80, 0x071C8300, 0x071BF980, - 0x071B7000, 0x071AE680, 0x071A5D00, - 0x0719D380, 0x07194A00, 0x0718C080, - 0x07183700, 0x0717AD80, 0x07172400, - 0x07169A80, 0x07161100, 0x07158780, - 0x0714FE00, 0x07147480, 0x0713EB00, - 0x07136180, 0x0712D800, 0x07124E80, - 0x0711C500, 0x07113B80, 0x0710B200, - 0x07102880, 0x070F9F00, 0x070F1580, - 0x070E8C00, 0x070E0280, 0x070D7900, - 0x070CEF80, 0x070C6600, 0x070BDC80, - 0x070B5300, 0x070AC980, 0x070A4000, - 0x0709B680, 0x07092D00, 0x0708A380, - 0x07081A00, 0x07079080, 0x07070700, - 0x07067D80, 0x0705F400, 0x07056A80, - 0x0704E100, 0x07045780, 0x0703CE00, - 0x07034480, 0x0702BB00, 0x07023180, - 0x0701A800, 0x07011E80, 0x07009500, - 0x07000B80, 0x06FF8200, 0x06FEF880, - 0x06FE6F00, 0x06FDE580, 0x06FD5C00, - 0x06FCD280, 0x06FC4900, 0x06FBBF80, - 0x06FB3600, 0x06FAAC80, 0x06FA2300, - 0x06F99980, 0x06F91000, 0x06F88680, - 0x06F7FD00, 0x06F77380, 0x06F6EA00, - 0x06F66080, 0x06F5D700, 0x06F54D80, - 0x06F4C400, 0x06F43A80, 0x06F3B100, - 0x06F32780, 0x06F29E00, 0x06F21480, - 0x06F18B00, 0x06F10180, 0x06F07800, - 0x06EFEE80, 0x06EF6500, 0x06EEDB80, - 0x06EE5200, 0x06EDC880, 0x06ED3F00, - 0x06ECB580, 0x06EC2C00, 0x06EBA280, - 0x06EB1900, 0x06EA8F80, 0x06EA0600, - 0x06E97C80, 0x06E8F300, 0x06E86980, - 0x06E7E000, 0x06E75680, 0x06E6CD00, - 0x06E64380, 0x06E5BA00, 0x06E53080, - 0x06E4A700, 0x06E41D80, 0x06E39400, - 0x06E30A80, 0x06E28100, 0x06E1F780, - 0x06E16E00, 0x06E0E480, 0x06E05B00, - 0x06DFD180, 0x06DF4800, 0x06DEBE80, - 0x06DE3500, 0x06DDAB80, 0x06DD2200, - 0x06DC9880, 0x06DC0F00, 0x06DB8580, - 0x06DAFC00, 0x06DA7280, 0x06D9E900, - 0x06D95F80, 0x06D8D600, 0x06D84C80, - 0x06D7C300, 0x06D73980, 0x06D6B000, - 0x06D62680, 0x06D59D00, 0x06D51380, - 0x06D48A00, 0x06D40080, 0x06D37700, - 0x06D2ED80, 0x06D26400, 0x06D1DA80, - 0x06D15100, 0x06D0C780, 0x06D03E00, - 0x06CFB480, 0x06CF2B00, 0x06CEA180, - 0x06CE1800, 0x06CD8E80, 0x06CD0500, - 0x06CC7B80, 0x06CBF200, 0x06CB6880, - 0x06CADF00, 0x06CA5580, 0x06C9CC00, - 0x06C94280, 0x06C8B900, 0x06C82F80, - 0x06C7A600, 0x06C71C80, 0x06C69300, - 0x06C60980, 0x06C58000, 0x06C4F680, - 0x06C46D00, 0x06C3E380, 0x06C35A00, - 0x06C2D080, 0x06C24700, 0x06C1BD80, - 0x06C13400, 0x06C0AA80, 0x06C02100, - 0x06BF9780, 0x06BF0E00, 0x06BE8480, - 0x06BDFB00, 0x06BD7180, 0x06BCE800, - 0x06BC5E80, 0x06BBD500, 0x06BB4B80, - 0x06BAC200, 0x06BA3880, 0x06B9AF00, - 0x06B92580, 0x06B89C00, 0x06B81280, - 0x06B78900, 0x06B6FF80, 0x06B67600, - 0x06B5EC80, 0x06B56300, 0x06B4D980, - 0x06B45000, 0x06B3C680, 0x06B33D00, - 0x06B2B380, 0x06B22A00, 0x06B1A080, - 0x06B11700, 0x06B08D80, 0x06B00400, - 0x06AF7A80, 0x06AEF100, 0x06AE6780, - 0x06ADDE00, 0x06AD5480, 0x06ACCB00, - 0x06AC4180, 0x06ABB800, 0x06AB2E80, - 0x06AAA500, 0x06AA1B80, 0x06A99200, - 0x06A90880, 0x06A87F00, 0x06A7F580, - 0x06A76C00, 0x06A6E280, 0x06A65900, - 0x06A5CF80, 0x06A54600, 0x06A4BC80, - 0x06A43300, 0x06A3A980, 0x06A32000, - 0x06A29680, 0x06A20D00, 0x06A18380, - 0x06A0FA00, 0x06A07080, 0x069FE700, - 0x069F5D80, 0x069ED400, 0x069E4A80, - 0x069DC100, 0x069D3780, 0x069CAE00, - 0x069C2480, 0x069B9B00, 0x069B1180, - 0x069A8800, 0x0699FE80, 0x06997500, - 0x0698EB80, 0x06986200, 0x0697D880, - 0x06974F00, 0x0696C580, 0x06963C00, - 0x0695B280, 0x06952900, 0x06949F80, - 0x06941600, 0x06938C80, 0x06930300, - 0x06927980, 0x0691F000, 0x06916680, - 0x0690DD00, 0x06905380, 0x068FCA00, - 0x068F4080, 0x068EB700, 0x068E2D80, - 0x068DA400, 0x068D1A80, 0x068C9100, - 0x068C0780, 0x068B7E00, 0x068AF480, - 0x068A6B00, 0x0689E180, 0x06895800, - 0x0688CE80, 0x06884500, 0x0687BB80, - 0x06873200, 0x0686A880, 0x06861F00, - 0x06859580, 0x06850C00, 0x06848280, - 0x0683F900, 0x06836F80, 0x0682E600, - 0x06825C80, 0x0681D300, 0x06814980, - 0x0680C000, 0x06803680, 0x067FAD00, - 0x067F2380, 0x067E9A00, 0x067E1080, - 0x067D8700, 0x067CFD80, 0x067C7400, - 0x067BEA80, 0x067B6100, 0x067AD780, - 0x067A4E00, 0x0679C480, 0x06793B00, - 0x0678B180, 0x06782800, 0x06779E80, - 0x06771500, 0x06768B80, 0x06760200, - 0x06757880, 0x0674EF00, 0x06746580, - 0x0673DC00, 0x06735280, 0x0672C900, - 0x06723F80, 0x0671B600, 0x06712C80, - 0x0670A300, 0x06701980, 0x066F9000, - 0x066F0680, 0x066E7D00, 0x066DF380, - 0x066D6A00, 0x066CE080, 0x066C5700, - 0x066BCD80, 0x066B4400, 0x066ABA80, - 0x066A3100, 0x0669A780, 0x06691E00, - 0x06689480, 0x06680B00, 0x06678180, - 0x0666F800, 0x06666E80, 0x0665E500, - 0x06655B80, 0x0664D200, 0x06644880, - 0x0663BF00, 0x06633580, 0x0662AC00, - 0x06622280, 0x06619900, 0x06610F80, - 0x06608600, 0x065FFC80, 0x065F7300, - 0x065EE980, 0x065E6000, 0x065DD680, - 0x065D4D00, 0x065CC380, 0x065C3A00, - 0x065BB080, 0x065B2700, 0x065A9D80, - 0x065A1400, 0x06598A80, 0x06590100, - 0x06587780, 0x0657EE00, 0x06576480, - 0x0656DB00, 0x06565180, 0x0655C800, - 0x06553E80, 0x0654B500, 0x06542B80, - 0x0653A200, 0x06531880, 0x06528F00, - 0x06520580, 0x06517C00, 0x0650F280, - 0x06506900, 0x064FDF80, 0x064F5600, - 0x064ECC80, 0x064E4300, 0x064DB980, - 0x064D3000, 0x064CA680, 0x064C1D00, - 0x064B9380, 0x064B0A00, 0x064A8080, - 0x0649F700, 0x06496D80, 0x0648E400, - 0x06485A80, 0x0647D100, 0x06474780, - 0x0646BE00, 0x06463480, 0x0645AB00, - 0x06452180, 0x06449800, 0x06440E80, - 0x06438500, 0x0642FB80, 0x06427200, - 0x0641E880, 0x06415F00, 0x0640D580, - 0x06404C00, 0x063FC280, 0x063F3900, - 0x063EAF80, 0x063E2600, 0x063D9C80, - 0x063D1300, 0x063C8980, 0x063C0000, - 0x063B7680, 0x063AED00, 0x063A6380, - 0x0639DA00, 0x06395080, 0x0638C700, - 0x06383D80, 0x0637B400, 0x06372A80, - 0x0636A100, 0x06361780, 0x06358E00, - 0x06350480, 0x06347B00, 0x0633F180, - 0x06336800, 0x0632DE80, 0x06325500, - 0x0631CB80, 0x06314200, 0x0630B880, - 0x06302F00, 0x062FA580, 0x062F1C00, - 0x062E9280, 0x062E0900, 0x062D7F80, - 0x062CF600, 0x062C6C80, 0x062BE300, - 0x062B5980, 0x062AD000, 0x062A4680, - 0x0629BD00, 0x06293380, 0x0628AA00, - 0x06282080, 0x06279700, 0x06270D80, - 0x06268400, 0x0625FA80, 0x06257100, - 0x0624E780, 0x06245E00, 0x0623D480, - 0x06234B00, 0x0622C180, 0x06223800, - 0x0621AE80, 0x06212500, 0x06209B80, - 0x06201200, 0x061F8880, 0x061EFF00, - 0x061E7580, 0x061DEC00, 0x061D6280, - 0x061CD900, 0x061C4F80, 0x061BC600, - 0x061B3C80, 0x061AB300, 0x061A2980, - 0x0619A000, 0x06191680, 0x06188D00, - 0x06180380, 0x06177A00, 0x0616F080, - 0x06166700, 0x0615DD80, 0x06155400, - 0x0614CA80, 0x06144100, 0x0613B780, - 0x06132E00, 0x0612A480, 0x06121B00, - 0x06119180, 0x06110800, 0x06107E80, - 0x060FF500, 0x060F6B80, 0x060EE200, - 0x060E5880, 0x060DCF00, 0x060D4580, - 0x060CBC00, 0x060C3280, 0x060BA900, - 0x060B1F80, 0x060A9600, 0x060A0C80, - 0x06098300, 0x0608F980, 0x06087000, - 0x0607E680, 0x06075D00, 0x0606D380, - 0x06064A00, 0x0605C080, 0x06053700, - 0x0604AD80, 0x06042400, 0x06039A80, - 0x06031100, 0x06028780, 0x0601FE00, - 0x06017480, 0x0600EB00, 0x06006180, - 0x05FFD800, 0x05FF4E80, 0x05FEC500, - 0x05FE3B80, 0x05FDB200, 0x05FD2880, - 0x05FC9F00, 0x05FC1580, 0x05FB8C00, - 0x05FB0280, 0x05FA7900, 0x05F9EF80, - 0x05F96600, 0x05F8DC80, 0x05F85300, - 0x05F7C980, 0x05F74000, 0x05F6B680, - 0x05F62D00, 0x05F5A380, 0x05F51A00, - 0x05F49080, 0x05F40700, 0x05F37D80, - 0x05F2F400, 0x05F26A80, 0x05F1E100, - 0x05F15780, 0x05F0CE00, 0x05F04480, - 0x05EFBB00, 0x05EF3180, 0x05EEA800, - 0x05EE1E80, 0x05ED9500, 0x05ED0B80, - 0x05EC8200, 0x05EBF880, 0x05EB6F00, - 0x05EAE580, 0x05EA5C00, 0x05E9D280, - 0x05E94900, 0x05E8BF80, 0x05E83600, - 0x05E7AC80, 0x05E72300, 0x05E69980, - 0x05E61000, 0x05E58680, 0x05E4FD00, - 0x05E47380, 0x05E3EA00, 0x05E36080, - 0x05E2D700, 0x05E24D80, 0x05E1C400, - 0x05E13A80, 0x05E0B100, 0x05E02780, - 0x05DF9E00, 0x05DF1480, 0x05DE8B00, - 0x05DE0180, 0x05DD7800, 0x05DCEE80, - 0x05DC6500, 0x05DBDB80, 0x05DB5200, - 0x05DAC880, 0x05DA3F00, 0x05D9B580, - 0x05D92C00, 0x05D8A280, 0x05D81900, - 0x05D78F80, 0x05D70600, 0x05D67C80, - 0x05D5F300, 0x05D56980, 0x05D4E000, - 0x05D45680, 0x05D3CD00, 0x05D34380, - 0x05D2BA00, 0x05D23080, 0x05D1A700, - 0x05D11D80, 0x05D09400, 0x05D00A80, - 0x05CF8100, 0x05CEF780, 0x05CE6E00, - 0x05CDE480, 0x05CD5B00, 0x05CCD180, - 0x05CC4800, 0x05CBBE80, 0x05CB3500, - 0x05CAAB80, 0x05CA2200, 0x05C99880, - 0x05C90F00, 0x05C88580, 0x05C7FC00, - 0x05C77280, 0x05C6E900, 0x05C65F80, - 0x05C5D600, 0x05C54C80, 0x05C4C300, - 0x05C43980, 0x05C3B000, 0x05C32680, - 0x05C29D00, 0x05C21380, 0x05C18A00, - 0x05C10080, 0x05C07700, 0x05BFED80, - 0x05BF6400, 0x05BEDA80, 0x05BE5100, - 0x05BDC780, 0x05BD3E00, 0x05BCB480, - 0x05BC2B00, 0x05BBA180, 0x05BB1800, - 0x05BA8E80, 0x05BA0500, 0x05B97B80, - 0x05B8F200, 0x05B86880, 0x05B7DF00, - 0x05B75580, 0x05B6CC00, 0x05B64280, - 0x05B5B900, 0x05B52F80, 0x05B4A600, - 0x05B41C80, 0x05B39300, 0x05B30980, - 0x05B28000, 0x05B1F680, 0x05B16D00, - 0x05B0E380, 0x05B05A00, 0x05AFD080, - 0x05AF4700, 0x05AEBD80, 0x05AE3400, - 0x05ADAA80, 0x05AD2100, 0x05AC9780, - 0x05AC0E00, 0x05AB8480, 0x05AAFB00, - 0x05AA7180, 0x05A9E800, 0x05A95E80, - 0x05A8D500, 0x05A84B80, 0x05A7C200, - 0x05A73880, 0x05A6AF00, 0x05A62580, - 0x05A59C00, 0x05A51280, 0x05A48900, - 0x05A3FF80, 0x05A37600, 0x05A2EC80, - 0x05A26300, 0x05A1D980, 0x05A15000, - 0x05A0C680, 0x05A03D00, 0x059FB380, - 0x059F2A00, 0x059EA080, 0x059E1700, - 0x059D8D80, 0x059D0400, 0x059C7A80, - 0x059BF100, 0x059B6780, 0x059ADE00, - 0x059A5480, 0x0599CB00, 0x05994180, - 0x0598B800, 0x05982E80, 0x0597A500, - 0x05971B80, 0x05969200, 0x05960880, - 0x05957F00, 0x0594F580, 0x05946C00, - 0x0593E280, 0x05935900, 0x0592CF80, - 0x05924600, 0x0591BC80, 0x05913300, - 0x0590A980, 0x05902000, 0x058F9680, - 0x058F0D00, 0x058E8380, 0x058DFA00, - 0x058D7080, 0x058CE700, 0x058C5D80, - 0x058BD400, 0x058B4A80, 0x058AC100, - 0x058A3780, 0x0589AE00, 0x05892480, - 0x05889B00, 0x05881180, 0x05878800, - 0x0586FE80, 0x05867500, 0x0585EB80, - 0x05856200, 0x0584D880, 0x05844F00, - 0x0583C580, 0x05833C00, 0x0582B280, - 0x05822900, 0x05819F80, 0x05811600, - 0x05808C80, 0x05800300, 0x057F7980, - 0x057EF000, 0x057E6680, 0x057DDD00, - 0x057D5380, 0x057CCA00, 0x057C4080, - 0x057BB700, 0x057B2D80, 0x057AA400, - 0x057A1A80, 0x05799100, 0x05790780, - 0x05787E00, 0x0577F480, 0x05776B00, - 0x0576E180, 0x05765800, 0x0575CE80, - 0x05754500, 0x0574BB80, 0x05743200, - 0x0573A880, 0x05731F00, 0x05729580, - 0x05720C00, 0x05718280, 0x0570F900, - 0x05706F80, 0x056FE600, 0x056F5C80, - 0x056ED300, 0x056E4980, 0x056DC000, - 0x056D3680, 0x056CAD00, 0x056C2380, - 0x056B9A00, 0x056B1080, 0x056A8700, - 0x0569FD80, 0x05697400, 0x0568EA80, - 0x05686100, 0x0567D780, 0x05674E00, - 0x0566C480, 0x05663B00, 0x0565B180, - 0x05652800, 0x05649E80, 0x05641500, - 0x05638B80, 0x05630200, 0x05627880, - 0x0561EF00, 0x05616580, 0x0560DC00, - 0x05605280, 0x055FC900, 0x055F3F80, - 0x055EB600, 0x055E2C80, 0x055DA300, - 0x055D1980, 0x055C9000, 0x055C0680, - 0x055B7D00, 0x055AF380, 0x055A6A00, - 0x0559E080, 0x05595700, 0x0558CD80, - 0x05584400, 0x0557BA80, 0x05573100, - 0x0556A780, 0x05561E00, 0x05559480, - 0x05550B00, 0x05548180, 0x0553F800, - 0x05536E80, 0x0552E500, 0x05525B80, - 0x0551D200, 0x05514880, 0x0550BF00, - 0x05503580, 0x054FAC00, 0x054F2280, - 0x054E9900, 0x054E0F80, 0x054D8600, - 0x054CFC80, 0x054C7300, 0x054BE980, - 0x054B6000, 0x054AD680, 0x054A4D00, - 0x0549C380, 0x05493A00, 0x0548B080, - 0x05482700, 0x05479D80, 0x05471400, - 0x05468A80, 0x05460100, 0x05457780, - 0x0544EE00, 0x05446480, 0x0543DB00, - 0x05435180, 0x0542C800, 0x05423E80, - 0x0541B500, 0x05412B80, 0x0540A200, - 0x05401880, 0x053F8F00, 0x053F0580, - 0x053E7C00, 0x053DF280, 0x053D6900, - 0x053CDF80, 0x053C5600, 0x053BCC80, - 0x053B4300, 0x053AB980, 0x053A3000, - 0x0539A680, 0x05391D00, 0x05389380, - 0x05380A00, 0x05378080, 0x0536F700, - 0x05366D80, 0x0535E400, 0x05355A80, - 0x0534D100, 0x05344780, 0x0533BE00, - 0x05333480, 0x0532AB00, 0x05322180, - 0x05319800, 0x05310E80, 0x05308500, - 0x052FFB80, 0x052F7200, 0x052EE880, - 0x052E5F00, 0x052DD580, 0x052D4C00, - 0x052CC280, 0x052C3900, 0x052BAF80, - 0x052B2600, 0x052A9C80, 0x052A1300, - 0x05298980, 0x05290000, 0x05287680, - 0x0527ED00, 0x05276380, 0x0526DA00, - 0x05265080, 0x0525C700, 0x05253D80, - 0x0524B400, 0x05242A80, 0x0523A100, - 0x05231780, 0x05228E00, 0x05220480, - 0x05217B00, 0x0520F180, 0x05206800, - 0x051FDE80, 0x051F5500, 0x051ECB80, - 0x051E4200, 0x051DB880, 0x051D2F00, - 0x051CA580, 0x051C1C00, 0x051B9280, - 0x051B0900, 0x051A7F80, 0x0519F600, - 0x05196C80, 0x0518E300, 0x05185980, - 0x0517D000, 0x05174680, 0x0516BD00, - 0x05163380, 0x0515AA00, 0x05152080, - 0x05149700, 0x05140D80, 0x05138400, - 0x0512FA80, 0x05127100, 0x0511E780, - 0x05115E00, 0x0510D480, 0x05104B00, - 0x050FC180, 0x050F3800, 0x050EAE80, - 0x050E2500, 0x050D9B80, 0x050D1200, - 0x050C8880, 0x050BFF00, 0x050B7580, - 0x050AEC00, 0x050A6280, 0x0509D900, - 0x05094F80, 0x0508C600, 0x05083C80, - 0x0507B300, 0x05072980, 0x0506A000, - 0x05061680, 0x05058D00, 0x05050380, - 0x05047A00, 0x0503F080, 0x05036700, - 0x0502DD80, 0x05025400, 0x0501CA80, - 0x05014100, 0x0500B780, 0x05002E00, - 0x04FFA480, 0x04FF1B00, 0x04FE9180, - 0x04FE0800, 0x04FD7E80, 0x04FCF500, - 0x04FC6B80, 0x04FBE200, 0x04FB5880, - 0x04FACF00, 0x04FA4580, 0x04F9BC00, - 0x04F93280, 0x04F8A900, 0x04F81F80, - 0x04F79600, 0x04F70C80, 0x04F68300, - 0x04F5F980, 0x04F57000, 0x04F4E680, - 0x04F45D00, 0x04F3D380, 0x04F34A00, - 0x04F2C080, 0x04F23700, 0x04F1AD80, - 0x04F12400, 0x04F09A80, 0x04F01100, - 0x04EF8780, 0x04EEFE00, 0x04EE7480, - 0x04EDEB00, 0x04ED6180, 0x04ECD800, - 0x04EC4E80, 0x04EBC500, 0x04EB3B80, - 0x04EAB200, 0x04EA2880, 0x04E99F00, - 0x04E91580, 0x04E88C00, 0x04E80280, - 0x04E77900, 0x04E6EF80, 0x04E66600, - 0x04E5DC80, 0x04E55300, 0x04E4C980, - 0x04E44000, 0x04E3B680, 0x04E32D00, - 0x04E2A380, 0x04E21A00, 0x04E19080, - 0x04E10700, 0x04E07D80, 0x04DFF400, - 0x04DF6A80, 0x04DEE100, 0x04DE5780, - 0x04DDCE00, 0x04DD4480, 0x04DCBB00, - 0x04DC3180, 0x04DBA800, 0x04DB1E80, - 0x04DA9500, 0x04DA0B80, 0x04D98200, - 0x04D8F880, 0x04D86F00, 0x04D7E580, - 0x04D75C00, 0x04D6D280, 0x04D64900, - 0x04D5BF80, 0x04D53600, 0x04D4AC80, - 0x04D42300, 0x04D39980, 0x04D31000, - 0x04D28680, 0x04D1FD00, 0x04D17380, - 0x04D0EA00, 0x04D06080, 0x04CFD700, - 0x04CF4D80, 0x04CEC400, 0x04CE3A80, - 0x04CDB100, 0x04CD2780, 0x04CC9E00, - 0x04CC1480, 0x04CB8B00, 0x04CB0180, - 0x04CA7800, 0x04C9EE80, 0x04C96500, - 0x04C8DB80, 0x04C85200, 0x04C7C880, - 0x04C73F00, 0x04C6B580, 0x04C62C00, - 0x04C5A280, 0x04C51900, 0x04C48F80, - 0x04C40600, 0x04C37C80, 0x04C2F300, - 0x04C26980, 0x04C1E000, 0x04C15680, - 0x04C0CD00, 0x04C04380, 0x04BFBA00, - 0x04BF3080, 0x04BEA700, 0x04BE1D80, - 0x04BD9400, 0x04BD0A80, 0x04BC8100, - 0x04BBF780, 0x04BB6E00, 0x04BAE480, - 0x04BA5B00, 0x04B9D180, 0x04B94800, - 0x04B8BE80, 0x04B83500, 0x04B7AB80, - 0x04B72200, 0x04B69880, 0x04B60F00, - 0x04B58580, 0x04B4FC00, 0x04B47280, - 0x04B3E900, 0x04B35F80, 0x04B2D600, - 0x04B24C80, 0x04B1C300, 0x04B13980, - 0x04B0B000, 0x04B02680, 0x04AF9D00, - 0x04AF1380, 0x04AE8A00, 0x04AE0080, - 0x04AD7700, 0x04ACED80, 0x04AC6400, - 0x04ABDA80, 0x04AB5100, 0x04AAC780, - 0x04AA3E00, 0x04A9B480, 0x04A92B00, - 0x04A8A180, 0x04A81800, 0x04A78E80, - 0x04A70500, 0x04A67B80, 0x04A5F200, - 0x04A56880, 0x04A4DF00, 0x04A45580, - 0x04A3CC00, 0x04A34280, 0x04A2B900, - 0x04A22F80, 0x04A1A600, 0x04A11C80, - 0x04A09300, 0x04A00980, 0x049F8000, - 0x049EF680, 0x049E6D00, 0x049DE380, - 0x049D5A00, 0x049CD080, 0x049C4700, - 0x049BBD80, 0x049B3400, 0x049AAA80, - 0x049A2100, 0x04999780, 0x04990E00, - 0x04988480, 0x0497FB00, 0x04977180, - 0x0496E800, 0x04965E80, 0x0495D500, - 0x04954B80, 0x0494C200, 0x04943880, - 0x0493AF00, 0x04932580, 0x04929C00, - 0x04921280, 0x04918900, 0x0490FF80, - 0x04907600, 0x048FEC80, 0x048F6300, - 0x048ED980, 0x048E5000, 0x048DC680, - 0x048D3D00, 0x048CB380, 0x048C2A00, - 0x048BA080, 0x048B1700, 0x048A8D80, - 0x048A0400, 0x04897A80, 0x0488F100, - 0x04886780, 0x0487DE00, 0x04875480, - 0x0486CB00, 0x04864180, 0x0485B800, - 0x04852E80, 0x0484A500, 0x04841B80, - 0x04839200, 0x04830880, 0x04827F00, - 0x0481F580, 0x04816C00, 0x0480E280, - 0x04805900, 0x047FCF80, 0x047F4600, - 0x047EBC80, 0x047E3300, 0x047DA980, - 0x047D2000, 0x047C9680, 0x047C0D00, - 0x047B8380, 0x047AFA00, 0x047A7080, - 0x0479E700, 0x04795D80, 0x0478D400, - 0x04784A80, 0x0477C100, 0x04773780, - 0x0476AE00, 0x04762480, 0x04759B00, - 0x04751180, 0x04748800, 0x0473FE80, - 0x04737500, 0x0472EB80, 0x04726200, - 0x0471D880, 0x04714F00, 0x0470C580, - 0x04703C00, 0x046FB280, 0x046F2900, - 0x046E9F80, 0x046E1600, 0x046D8C80, - 0x046D0300, 0x046C7980, 0x046BF000, - 0x046B6680, 0x046ADD00, 0x046A5380, - 0x0469CA00, 0x04694080, 0x0468B700, - 0x04682D80, 0x0467A400, 0x04671A80, - 0x04669100, 0x04660780, 0x04657E00, - 0x0464F480, 0x04646B00, 0x0463E180, - 0x04635800, 0x0462CE80, 0x04624500, - 0x0461BB80, 0x04613200, 0x0460A880, - 0x04601F00, 0x045F9580, 0x045F0C00, - 0x045E8280, 0x045DF900, 0x045D6F80, - 0x045CE600, 0x045C5C80, 0x045BD300, - 0x045B4980, 0x045AC000, 0x045A3680, - 0x0459AD00, 0x04592380, 0x04589A00, - 0x04581080, 0x04578700, 0x0456FD80, - 0x04567400, 0x0455EA80, 0x04556100, - 0x0454D780, 0x04544E00, 0x0453C480, - 0x04533B00, 0x0452B180, 0x04522800, - 0x04519E80, 0x04511500, 0x04508B80, - 0x04500200, 0x044F7880, 0x044EEF00, - 0x044E6580, 0x044DDC00, 0x044D5280, - 0x044CC900, 0x044C3F80, 0x044BB600, - 0x044B2C80, 0x044AA300, 0x044A1980, - 0x04499000, 0x04490680, 0x04487D00, - 0x0447F380, 0x04476A00, 0x0446E080, - 0x04465700, 0x0445CD80, 0x04454400, - 0x0444BA80, 0x04443100, 0x0443A780, - 0x04431E00, 0x04429480, 0x04420B00, - 0x04418180, 0x0440F800, 0x04406E80, - 0x043FE500, 0x043F5B80, 0x043ED200, - 0x043E4880, 0x043DBF00, 0x043D3580, - 0x043CAC00, 0x043C2280, 0x043B9900, - 0x043B0F80, 0x043A8600, 0x0439FC80, - 0x04397300, 0x0438E980, 0x04386000, - 0x0437D680, 0x04374D00, 0x0436C380, - 0x04363A00, 0x0435B080, 0x04352700, - 0x04349D80, 0x04341400, 0x04338A80, - 0x04330100, 0x04327780, 0x0431EE00, - 0x04316480, 0x0430DB00, 0x04305180, - 0x042FC800, 0x042F3E80, 0x042EB500, - 0x042E2B80, 0x042DA200, 0x042D1880, - 0x042C8F00, 0x042C0580, 0x042B7C00, - 0x042AF280, 0x042A6900, 0x0429DF80, - 0x04295600, 0x0428CC80, 0x04284300, - 0x0427B980, 0x04273000, 0x0426A680, - 0x04261D00, 0x04259380, 0x04250A00, - 0x04248080, 0x0423F700, 0x04236D80, - 0x0422E400, 0x04225A80, 0x0421D100, - 0x04214780, 0x0420BE00, 0x04203480, - 0x041FAB00, 0x041F2180, 0x041E9800, - 0x041E0E80, 0x041D8500, 0x041CFB80, - 0x041C7200, 0x041BE880, 0x041B5F00, - 0x041AD580, 0x041A4C00, 0x0419C280, - 0x04193900, 0x0418AF80, 0x04182600, - 0x04179C80, 0x04171300, 0x04168980, - 0x04160000, 0x04157D40, 0x0414FA80, - 0x041477C0, 0x0413F500, 0x04137240, - 0x0412EF80, 0x04126CC0, 0x0411EA00, - 0x04116740, 0x0410E480, 0x041061C0, - 0x040FDF00, 0x040F5C40, 0x040ED980, - 0x040E56C0, 0x040DD400, 0x040D5140, - 0x040CCE80, 0x040C4BC0, 0x040BC900, - 0x040B4640, 0x040AC380, 0x040A40C0, - 0x0409BE00, 0x04093B40, 0x0408B880, - 0x040835C0, 0x0407B300, 0x04073040, - 0x0406AD80, 0x04062AC0, 0x0405A800, - 0x04052540, 0x0404A280, 0x04041FC0, - 0x04039D00, 0x04031A40, 0x04029780, - 0x040214C0, 0x04019200, 0x04010F40, - 0x04008C80, 0x040009C0, 0x03FF8700, - 0x03FF0440, 0x03FE8180, 0x03FDFEC0, - 0x03FD7C00, 0x03FCF940, 0x03FC7680, - 0x03FBF3C0, 0x03FB7100, 0x03FAEE40, - 0x03FA6B80, 0x03F9E8C0, 0x03F96600, - 0x03F8E340, 0x03F86080, 0x03F7DDC0, - 0x03F75B00, 0x03F6D840, 0x03F65580, - 0x03F5D2C0, 0x03F55000, 0x03F4CD40, - 0x03F44A80, 0x03F3C7C0, 0x03F34500, - 0x03F2C240, 0x03F23F80, 0x03F1BCC0, - 0x03F13A00, 0x03F0B740, 0x03F03480, - 0x03EFB1C0, 0x03EF2F00, 0x03EEAC40, - 0x03EE2980, 0x03EDA6C0, 0x03ED2400, - 0x03ECA140, 0x03EC1E80, 0x03EB9BC0, - 0x03EB1900, 0x03EA9640, 0x03EA1380, - 0x03E990C0, 0x03E90E00, 0x03E88B40, - 0x03E80880, 0x03E785C0, 0x03E70300, - 0x03E68040, 0x03E5FD80, 0x03E57AC0, - 0x03E4F800, 0x03E47540, 0x03E3F280, - 0x03E36FC0, 0x03E2ED00, 0x03E26A40, - 0x03E1E780, 0x03E164C0, 0x03E0E200, - 0x03E05F40, 0x03DFDC80, 0x03DF59C0, - 0x03DED700, 0x03DE5440, 0x03DDD180, - 0x03DD4EC0, 0x03DCCC00, 0x03DC4940, - 0x03DBC680, 0x03DB43C0, 0x03DAC100, - 0x03DA3E40, 0x03D9BB80, 0x03D938C0, - 0x03D8B600, 0x03D83340, 0x03D7B080, - 0x03D72DC0, 0x03D6AB00, 0x03D62840, - 0x03D5A580, 0x03D522C0, 0x03D4A000, - 0x03D41D40, 0x03D39A80, 0x03D317C0, - 0x03D29500, 0x03D21240, 0x03D18F80, - 0x03D10CC0, 0x03D08A00, 0x03D00740, - 0x03CF8480, 0x03CF01C0, 0x03CE7F00, - 0x03CDFC40, 0x03CD7980, 0x03CCF6C0, - 0x03CC7400, 0x03CBF140, 0x03CB6E80, - 0x03CAEBC0, 0x03CA6900, 0x03C9E640, - 0x03C96380, 0x03C8E0C0, 0x03C85E00, - 0x03C7DB40, 0x03C75880, 0x03C6D5C0, - 0x03C65300, 0x03C5D040, 0x03C54D80, - 0x03C4CAC0, 0x03C44800, 0x03C3C540, - 0x03C34280, 0x03C2BFC0, 0x03C23D00, - 0x03C1BA40, 0x03C13780, 0x03C0B4C0, - 0x03C03200, 0x03BFAF40, 0x03BF2C80, - 0x03BEA9C0, 0x03BE2700, 0x03BDA440, - 0x03BD2180, 0x03BC9EC0, 0x03BC1C00, - 0x03BB9940, 0x03BB1680, 0x03BA93C0, - 0x03BA1100, 0x03B98E40, 0x03B90B80, - 0x03B888C0, 0x03B80600, 0x03B78340, - 0x03B70080, 0x03B67DC0, 0x03B5FB00, - 0x03B57840, 0x03B4F580, 0x03B472C0, - 0x03B3F000, 0x03B36D40, 0x03B2EA80, - 0x03B267C0, 0x03B1E500, 0x03B16240, - 0x03B0DF80, 0x03B05CC0, 0x03AFDA00, - 0x03AF5740, 0x03AED480, 0x03AE51C0, - 0x03ADCF00, 0x03AD4C40, 0x03ACC980, - 0x03AC46C0, 0x03ABC400, 0x03AB4140, - 0x03AABE80, 0x03AA3BC0, 0x03A9B900, - 0x03A93640, 0x03A8B380, 0x03A830C0, - 0x03A7AE00, 0x03A72B40, 0x03A6A880, - 0x03A625C0, 0x03A5A300, 0x03A52040, - 0x03A49D80, 0x03A41AC0, 0x03A39800, - 0x03A31540, 0x03A29280, 0x03A20FC0, - 0x03A18D00, 0x03A10A40, 0x03A08780, - 0x03A004C0, 0x039F8200, 0x039EFF40, - 0x039E7C80, 0x039DF9C0, 0x039D7700, - 0x039CF440, 0x039C7180, 0x039BEEC0, - 0x039B6C00, 0x039AE940, 0x039A6680, - 0x0399E3C0, 0x03996100, 0x0398DE40, - 0x03985B80, 0x0397D8C0, 0x03975600, - 0x0396D340, 0x03965080, 0x0395CDC0, - 0x03954B00, 0x0394C840, 0x03944580, - 0x0393C2C0, 0x03934000, 0x0392BD40, - 0x03923A80, 0x0391B7C0, 0x03913500, - 0x0390B240, 0x03902F80, 0x038FACC0, - 0x038F2A00, 0x038EA740, 0x038E2480, - 0x038DA1C0, 0x038D1F00, 0x038C9C40, - 0x038C1980, 0x038B96C0, 0x038B1400, - 0x038A9140, 0x038A0E80, 0x03898BC0, - 0x03890900, 0x03888640, 0x03880380, - 0x038780C0, 0x0386FE00, 0x03867B40, - 0x0385F880, 0x038575C0, 0x0384F300, - 0x03847040, 0x0383ED80, 0x03836AC0, - 0x0382E800, 0x03826540, 0x0381E280, - 0x03815FC0, 0x0380DD00, 0x03805A40, - 0x037FD780, 0x037F54C0, 0x037ED200, - 0x037E4F40, 0x037DCC80, 0x037D49C0, - 0x037CC700, 0x037C4440, 0x037BC180, - 0x037B3EC0, 0x037ABC00, 0x037A3940, - 0x0379B680, 0x037933C0, 0x0378B100, - 0x03782E40, 0x0377AB80, 0x037728C0, - 0x0376A600, 0x03762340, 0x0375A080, - 0x03751DC0, 0x03749B00, 0x03741840, - 0x03739580, 0x037312C0, 0x03729000, - 0x03720D40, 0x03718A80, 0x037107C0, - 0x03708500, 0x03700240, 0x036F7F80, - 0x036EFCC0, 0x036E7A00, 0x036DF740, - 0x036D7480, 0x036CF1C0, 0x036C6F00, - 0x036BEC40, 0x036B6980, 0x036AE6C0, - 0x036A6400, 0x0369E140, 0x03695E80, - 0x0368DBC0, 0x03685900, 0x0367D640, - 0x03675380, 0x0366D0C0, 0x03664E00, - 0x0365CB40, 0x03654880, 0x0364C5C0, - 0x03644300, 0x0363C040, 0x03633D80, - 0x0362BAC0, 0x03623800, 0x0361B540, - 0x03613280, 0x0360AFC0, 0x03602D00, - 0x035FAA40, 0x035F2780, 0x035EA4C0, - 0x035E2200, 0x035D9F40, 0x035D1C80, - 0x035C99C0, 0x035C1700, 0x035B9440, - 0x035B1180, 0x035A8EC0, 0x035A0C00, - 0x03598940, 0x03590680, 0x035883C0, - 0x03580100, 0x03577E40, 0x0356FB80, - 0x035678C0, 0x0355F600, 0x03557340, - 0x0354F080, 0x03546DC0, 0x0353EB00, - 0x03536840, 0x0352E580, 0x035262C0, - 0x0351E000, 0x03515D40, 0x0350DA80, - 0x035057C0, 0x034FD500, 0x034F5240, - 0x034ECF80, 0x034E4CC0, 0x034DCA00, - 0x034D4740, 0x034CC480, 0x034C41C0, - 0x034BBF00, 0x034B3C40, 0x034AB980, - 0x034A36C0, 0x0349B400, 0x03493140, - 0x0348AE80, 0x03482BC0, 0x0347A900, - 0x03472640, 0x0346A380, 0x034620C0, - 0x03459E00, 0x03451B40, 0x03449880, - 0x034415C0, 0x03439300, 0x03431040, - 0x03428D80, 0x03420AC0, 0x03418800, - 0x03410540, 0x03408280, 0x033FFFC0, - 0x033F7D00, 0x033EFA40, 0x033E7780, - 0x033DF4C0, 0x033D7200, 0x033CEF40, - 0x033C6C80, 0x033BE9C0, 0x033B6700, - 0x033AE440, 0x033A6180, 0x0339DEC0, - 0x03395C00, 0x0338D940, 0x03385680, - 0x0337D3C0, 0x03375100, 0x0336CE40, - 0x03364B80, 0x0335C8C0, 0x03354600, - 0x0334C340, 0x03344080, 0x0333BDC0, - 0x03333B00, 0x0332B840, 0x03323580, - 0x0331B2C0, 0x03313000, 0x0330AD40, - 0x03302A80, 0x032FA7C0, 0x032F2500, - 0x032EA240, 0x032E1F80, 0x032D9CC0, - 0x032D1A00, 0x032C9740, 0x032C1480, - 0x032B91C0, 0x032B0F00, 0x032A8C40, - 0x032A0980, 0x032986C0, 0x03290400, - 0x03288140, 0x0327FE80, 0x03277BC0, - 0x0326F900, 0x03267640, 0x0325F380, - 0x032570C0, 0x0324EE00, 0x03246B40, - 0x0323E880, 0x032365C0, 0x0322E300, - 0x03226040, 0x0321DD80, 0x03215AC0, - 0x0320D800, 0x03205540, 0x031FD280, - 0x031F4FC0, 0x031ECD00, 0x031E4A40, - 0x031DC780, 0x031D44C0, 0x031CC200, - 0x031C3F40, 0x031BBC80, 0x031B39C0, - 0x031AB700, 0x031A3440, 0x0319B180, - 0x03192EC0, 0x0318AC00, 0x03182940, - 0x0317A680, 0x031723C0, 0x0316A100, - 0x03161E40, 0x03159B80, 0x031518C0, - 0x03149600, 0x03141340, 0x03139080, - 0x03130DC0, 0x03128B00, 0x03120840, - 0x03118580, 0x031102C0, 0x03108000, - 0x030FFD40, 0x030F7A80, 0x030EF7C0, - 0x030E7500, 0x030DF240, 0x030D6F80, - 0x030CECC0, 0x030C6A00, 0x030BE740, - 0x030B6480, 0x030AE1C0, 0x030A5F00, - 0x0309DC40, 0x03095980, 0x0308D6C0, - 0x03085400, 0x0307D140, 0x03074E80, - 0x0306CBC0, 0x03064900, 0x0305C640, - 0x03054380, 0x0304C0C0, 0x03043E00, - 0x0303BB40, 0x03033880, 0x0302B5C0, - 0x03023300, 0x0301B040, 0x03012D80, - 0x0300AAC0, 0x03002800, 0x02FFA540, - 0x02FF2280, 0x02FE9FC0, 0x02FE1D00, - 0x02FD9A40, 0x02FD1780, 0x02FC94C0, - 0x02FC1200, 0x02FB8F40, 0x02FB0C80, - 0x02FA89C0, 0x02FA0700, 0x02F98440, - 0x02F90180, 0x02F87EC0, 0x02F7FC00, - 0x02F77940, 0x02F6F680, 0x02F673C0, - 0x02F5F100, 0x02F56E40, 0x02F4EB80, - 0x02F468C0, 0x02F3E600, 0x02F36340, - 0x02F2E080, 0x02F25DC0, 0x02F1DB00, - 0x02F15840, 0x02F0D580, 0x02F052C0, - 0x02EFD000, 0x02EF4D40, 0x02EECA80, - 0x02EE47C0, 0x02EDC500, 0x02ED4240, - 0x02ECBF80, 0x02EC3CC0, 0x02EBBA00, - 0x02EB3740, 0x02EAB480, 0x02EA31C0, - 0x02E9AF00, 0x02E92C40, 0x02E8A980, - 0x02E826C0, 0x02E7A400, 0x02E72140, - 0x02E69E80, 0x02E61BC0, 0x02E59900, - 0x02E51640, 0x02E49380, 0x02E410C0, - 0x02E38E00, 0x02E30B40, 0x02E28880, - 0x02E205C0, 0x02E18300, 0x02E10040, - 0x02E07D80, 0x02DFFAC0, 0x02DF7800, - 0x02DEF540, 0x02DE7280, 0x02DDEFC0, - 0x02DD6D00, 0x02DCEA40, 0x02DC6780, - 0x02DBE4C0, 0x02DB6200, 0x02DADF40, - 0x02DA5C80, 0x02D9D9C0, 0x02D95700, - 0x02D8D440, 0x02D85180, 0x02D7CEC0, - 0x02D74C00, 0x02D6C940, 0x02D64680, - 0x02D5C3C0, 0x02D54100, 0x02D4BE40, - 0x02D43B80, 0x02D3B8C0, 0x02D33600, - 0x02D2B340, 0x02D23080, 0x02D1ADC0, - 0x02D12B00, 0x02D0A840, 0x02D02580, - 0x02CFA2C0, 0x02CF2000, 0x02CE9D40, - 0x02CE1A80, 0x02CD97C0, 0x02CD1500, - 0x02CC9240, 0x02CC0F80, 0x02CB8CC0, - 0x02CB0A00, 0x02CA8740, 0x02CA0480, - 0x02C981C0, 0x02C8FF00, 0x02C87C40, - 0x02C7F980, 0x02C776C0, 0x02C6F400, - 0x02C67140, 0x02C5EE80, 0x02C56BC0, - 0x02C4E900, 0x02C46640, 0x02C3E380, - 0x02C360C0, 0x02C2DE00, 0x02C25B40, - 0x02C1D880, 0x02C155C0, 0x02C0D300, - 0x02C05040, 0x02BFCD80, 0x02BF4AC0, - 0x02BEC800, 0x02BE4540, 0x02BDC280, - 0x02BD3FC0, 0x02BCBD00, 0x02BC3A40, - 0x02BBB780, 0x02BB34C0, 0x02BAB200, - 0x02BA2F40, 0x02B9AC80, 0x02B929C0, - 0x02B8A700, 0x02B82440, 0x02B7A180, - 0x02B71EC0, 0x02B69C00, 0x02B61940, - 0x02B59680, 0x02B513C0, 0x02B49100, - 0x02B40E40, 0x02B38B80, 0x02B308C0, - 0x02B28600, 0x02B20340, 0x02B18080, - 0x02B0FDC0, 0x02B07B00, 0x02AFF840, - 0x02AF7580, 0x02AEF2C0, 0x02AE7000, - 0x02ADED40, 0x02AD6A80, 0x02ACE7C0, - 0x02AC6500, 0x02ABE240, 0x02AB5F80, - 0x02AADCC0, 0x02AA5A00, 0x02A9D740, - 0x02A95480, 0x02A8D1C0, 0x02A84F00, - 0x02A7CC40, 0x02A74980, 0x02A6C6C0, - 0x02A64400, 0x02A5C140, 0x02A53E80, - 0x02A4BBC0, 0x02A43900, 0x02A3B640, - 0x02A33380, 0x02A2B0C0, 0x02A22E00, - 0x02A1AB40, 0x02A12880, 0x02A0A5C0, - 0x02A02300, 0x029FA040, 0x029F1D80, - 0x029E9AC0, 0x029E1800, 0x029D9540, - 0x029D1280, 0x029C8FC0, 0x029C0D00, - 0x029B8A40, 0x029B0780, 0x029A84C0, - 0x029A0200, 0x02997F40, 0x0298FC80, - 0x029879C0, 0x0297F700, 0x02977440, - 0x0296F180, 0x02966EC0, 0x0295EC00, - 0x02956940, 0x0294E680, 0x029463C0, - 0x0293E100, 0x02935E40, 0x0292DB80, - 0x029258C0, 0x0291D600, 0x02915340, - 0x0290D080, 0x02904DC0, 0x028FCB00, - 0x028F4840, 0x028EC580, 0x028E42C0, - 0x028DC000, 0x028D3D40, 0x028CBA80, - 0x028C37C0, 0x028BB500, 0x028B3240, - 0x028AAF80, 0x028A2CC0, 0x0289AA00, - 0x02892740, 0x0288A480, 0x028821C0, - 0x02879F00, 0x02871C40, 0x02869980, - 0x028616C0, 0x02859400, 0x02851140, - 0x02848E80, 0x02840BC0, 0x02838900, - 0x02830640, 0x02828380, 0x028200C0, - 0x02817E00, 0x0280FB40, 0x02807880, - 0x027FF5C0, 0x027F7300, 0x027EF040, - 0x027E6D80, 0x027DEAC0, 0x027D6800, - 0x027CE540, 0x027C6280, 0x027BDFC0, - 0x027B5D00, 0x027ADA40, 0x027A5780, - 0x0279D4C0, 0x02795200, 0x0278CF40, - 0x02784C80, 0x0277C9C0, 0x02774700, - 0x0276C440, 0x02764180, 0x0275BEC0, - 0x02753C00, 0x0274B940, 0x02743680, - 0x0273B3C0, 0x02733100, 0x0272AE40, - 0x02722B80, 0x0271A8C0, 0x02712600, - 0x0270A340, 0x02702080, 0x026F9DC0, - 0x026F1B00, 0x026E9840, 0x026E1580, - 0x026D92C0, 0x026D1000, 0x026C8D40, - 0x026C0A80, 0x026B87C0, 0x026B0500, - 0x026A8240, 0x0269FF80, 0x02697CC0, - 0x0268FA00, 0x02687740, 0x0267F480, - 0x026771C0, 0x0266EF00, 0x02666C40, - 0x0265E980, 0x026566C0, 0x0264E400, - 0x02646140, 0x0263DE80, 0x02635BC0, - 0x0262D900, 0x02625640, 0x0261D380, - 0x026150C0, 0x0260CE00, 0x02604B40, - 0x025FC880, 0x025F45C0, 0x025EC300, - 0x025E4040, 0x025DBD80, 0x025D3AC0, - 0x025CB800, 0x025C3540, 0x025BB280, - 0x025B2FC0, 0x025AAD00, 0x025A2A40, - 0x0259A780, 0x025924C0, 0x0258A200, - 0x02581F40, 0x02579C80, 0x025719C0, - 0x02569700, 0x02561440, 0x02559180, - 0x02550EC0, 0x02548C00, 0x02540940, - 0x02538680, 0x025303C0, 0x02528100, - 0x0251FE40, 0x02517B80, 0x0250F8C0, - 0x02507600, 0x024FF340, 0x024F7080, - 0x024EEDC0, 0x024E6B00, 0x024DE840, - 0x024D6580, 0x024CE2C0, 0x024C6000, - 0x024BDD40, 0x024B5A80, 0x024AD7C0, - 0x024A5500, 0x0249D240, 0x02494F80, - 0x0248CCC0, 0x02484A00, 0x0247C740, - 0x02474480, 0x0246C1C0, 0x02463F00, - 0x0245BC40, 0x02453980, 0x0244B6C0, - 0x02443400, 0x0243B140, 0x02432E80, - 0x0242ABC0, 0x02422900, 0x0241A640, - 0x02412380, 0x0240A0C0, 0x02401E00, - 0x023F9B40, 0x023F1880, 0x023E95C0, - 0x023E1300, 0x023D9040, 0x023D0D80, - 0x023C8AC0, 0x023C0800, 0x023B8540, - 0x023B0280, 0x023A7FC0, 0x0239FD00, - 0x02397A40, 0x0238F780, 0x023874C0, - 0x0237F200, 0x02376F40, 0x0236EC80, - 0x023669C0, 0x0235E700, 0x02356440, - 0x0234E180, 0x02345EC0, 0x0233DC00, - 0x02335940, 0x0232D680, 0x023253C0, - 0x0231D100, 0x02314E40, 0x0230CB80, - 0x023048C0, 0x022FC600, 0x022F4340, - 0x022EC080, 0x022E3DC0, 0x022DBB00, - 0x022D3840, 0x022CB580, 0x022C32C0, - 0x022BB000, 0x022B2D40, 0x022AAA80, - 0x022A27C0, 0x0229A500, 0x02292240, - 0x02289F80, 0x02281CC0, 0x02279A00, - 0x02271740, 0x02269480, 0x022611C0, - 0x02258F00, 0x02250C40, 0x02248980, - 0x022406C0, 0x02238400, 0x02230140, - 0x02227E80, 0x0221FBC0, 0x02217900, - 0x0220F640, 0x02207380, 0x021FF0C0, - 0x021F6E00, 0x021EEB40, 0x021E6880, - 0x021DE5C0, 0x021D6300, 0x021CE040, - 0x021C5D80, 0x021BDAC0, 0x021B5800, - 0x021AD540, 0x021A5280, 0x0219CFC0, - 0x02194D00, 0x0218CA40, 0x02184780, - 0x0217C4C0, 0x02174200, 0x0216BF40, - 0x02163C80, 0x0215B9C0, 0x02153700, - 0x0214B440, 0x02143180, 0x0213AEC0, - 0x02132C00, 0x0212A940, 0x02122680, - 0x0211A3C0, 0x02112100, 0x02109E40, - 0x02101B80, 0x020F98C0, 0x020F1600, - 0x020E9340, 0x020E1080, 0x020D8DC0, - 0x020D0B00, 0x020C8840, 0x020C0580, - 0x020B82C0, 0x020B0000, 0x020A7D40, - 0x0209FA80, 0x020977C0, 0x0208F500, - 0x02087240, 0x0207EF80, 0x02076CC0, - 0x0206EA00, 0x02066740, 0x0205E480, - 0x020561C0, 0x0204DF00, 0x02045C40, - 0x0203D980, 0x020356C0, 0x0202D400, - 0x02025140, 0x0201CE80, 0x02014BC0, - 0x0200C900, 0x02004640, 0x01FFC380, - 0x01FF40C0, 0x01FEBE00, 0x01FE3B40, - 0x01FDB880, 0x01FD35C0, 0x01FCB300, - 0x01FC3040, 0x01FBAD80, 0x01FB2AC0, - 0x01FAA800, 0x01FA2540, 0x01F9A280, - 0x01F91FC0, 0x01F89D00, 0x01F81A40, - 0x01F79780, 0x01F714C0, 0x01F69200, - 0x01F60F40, 0x01F58C80, 0x01F509C0, - 0x01F48700, 0x01F40440, 0x01F38180, - 0x01F2FEC0, 0x01F27C00, 0x01F1F940, - 0x01F17680, 0x01F0F3C0, 0x01F07100, - 0x01EFEE40, 0x01EF6B80, 0x01EEE8C0, - 0x01EE6600, 0x01EDE340, 0x01ED6080, - 0x01ECDDC0, 0x01EC5B00, 0x01EBD840, - 0x01EB5580, 0x01EAD2C0, 0x01EA5000, - 0x01E9CD40, 0x01E94A80, 0x01E8C7C0, - 0x01E84500, 0x01E7C240, 0x01E73F80, - 0x01E6BCC0, 0x01E63A00, 0x01E5B740, - 0x01E53480, 0x01E4B1C0, 0x01E42F00, - 0x01E3AC40, 0x01E32980, 0x01E2A6C0, - 0x01E22400, 0x01E1A140, 0x01E11E80, - 0x01E09BC0, 0x01E01900, 0x01DF9640, - 0x01DF1380, 0x01DE90C0, 0x01DE0E00, - 0x01DD8B40, 0x01DD0880, 0x01DC85C0, - 0x01DC0300, 0x01DB8040, 0x01DAFD80, - 0x01DA7AC0, 0x01D9F800, 0x01D97540, - 0x01D8F280, 0x01D86FC0, 0x01D7ED00, - 0x01D76A40, 0x01D6E780, 0x01D664C0, - 0x01D5E200, 0x01D55F40, 0x01D4DC80, - 0x01D459C0, 0x01D3D700, 0x01D35440, - 0x01D2D180, 0x01D24EC0, 0x01D1CC00, - 0x01D14940, 0x01D0C680, 0x01D043C0, - 0x01CFC100, 0x01CF3E40, 0x01CEBB80, - 0x01CE38C0, 0x01CDB600, 0x01CD3340, - 0x01CCB080, 0x01CC2DC0, 0x01CBAB00, - 0x01CB2840, 0x01CAA580, 0x01CA22C0, - 0x01C9A000, 0x01C91D40, 0x01C89A80, - 0x01C817C0, 0x01C79500, 0x01C71240, - 0x01C68F80, 0x01C60CC0, 0x01C58A00, - 0x01C50740, 0x01C48480, 0x01C401C0, - 0x01C37F00, 0x01C2FC40, 0x01C27980, - 0x01C1F6C0, 0x01C17400, 0x01C0F140, - 0x01C06E80, 0x01BFEBC0, 0x01BF6900, - 0x01BEE640, 0x01BE6380, 0x01BDE0C0, - 0x01BD5E00, 0x01BCDB40, 0x01BC5880, - 0x01BBD5C0, 0x01BB5300, 0x01BAD040, - 0x01BA4D80, 0x01B9CAC0, 0x01B94800, - 0x01B8C540, 0x01B84280, 0x01B7BFC0, - 0x01B73D00, 0x01B6BA40, 0x01B63780, - 0x01B5B4C0, 0x01B53200, 0x01B4AF40, - 0x01B42C80, 0x01B3A9C0, 0x01B32700, - 0x01B2A440, 0x01B22180, 0x01B19EC0, - 0x01B11C00, 0x01B09940, 0x01B01680, - 0x01AF93C0, 0x01AF1100, 0x01AE8E40, - 0x01AE0B80, 0x01AD88C0, 0x01AD0600, - 0x01AC8340, 0x01AC0080, 0x01AB7DC0, - 0x01AAFB00, 0x01AA7840, 0x01A9F580, - 0x01A972C0, 0x01A8F000, 0x01A86D40, - 0x01A7EA80, 0x01A767C0, 0x01A6E500, - 0x01A66240, 0x01A5DF80, 0x01A55CC0, - 0x01A4DA00, 0x01A45740, 0x01A3D480, - 0x01A351C0, 0x01A2CF00, 0x01A24C40, - 0x01A1C980, 0x01A146C0, 0x01A0C400, - 0x01A04140, 0x019FBE80, 0x019F3BC0, - 0x019EB900, 0x019E3640, 0x019DB380, - 0x019D30C0, 0x019CAE00, 0x019C2B40, - 0x019BA880, 0x019B25C0, 0x019AA300, - 0x019A2040, 0x01999D80, 0x01991AC0, - 0x01989800, 0x01981540, 0x01979280, - 0x01970FC0, 0x01968D00, 0x01960A40, - 0x01958780, 0x019504C0, 0x01948200, - 0x0193FF40, 0x01937C80, 0x0192F9C0, - 0x01927700, 0x0191F440, 0x01917180, - 0x0190EEC0, 0x01906C00, 0x018FE940, - 0x018F6680, 0x018EE3C0, 0x018E6100, - 0x018DDE40, 0x018D5B80, 0x018CD8C0, - 0x018C5600, 0x018BD340, 0x018B5080, - 0x018ACDC0, 0x018A4B00, 0x0189C840, - 0x01894580, 0x0188C2C0, 0x01884000, - 0x0187BD40, 0x01873A80, 0x0186B7C0, - 0x01863500, 0x0185B240, 0x01852F80, - 0x0184ACC0, 0x01842A00, 0x0183A740, - 0x01832480, 0x0182A1C0, 0x01821F00, - 0x01819C40, 0x01811980, 0x018096C0, - 0x01801400, 0x017F9140, 0x017F0E80, - 0x017E8BC0, 0x017E0900, 0x017D8640, - 0x017D0380, 0x017C80C0, 0x017BFE00, - 0x017B7B40, 0x017AF880, 0x017A75C0, - 0x0179F300, 0x01797040, 0x0178ED80, - 0x01786AC0, 0x0177E800, 0x01776540, - 0x0176E280, 0x01765FC0, 0x0175DD00, - 0x01755A40, 0x0174D780, 0x017454C0, - 0x0173D200, 0x01734F40, 0x0172CC80, - 0x017249C0, 0x0171C700, 0x01714440, - 0x0170C180, 0x01703EC0, 0x016FBC00, - 0x016F3940, 0x016EB680, 0x016E33C0, - 0x016DB100, 0x016D2E40, 0x016CAB80, - 0x016C28C0, 0x016BA600, 0x016B2340, - 0x016AA080, 0x016A1DC0, 0x01699B00, - 0x01691840, 0x01689580, 0x016812C0, - 0x01679000, 0x01670D40, 0x01668A80, - 0x016607C0, 0x01658500, 0x01650240, - 0x01647F80, 0x0163FCC0, 0x01637A00, - 0x0162F740, 0x01627480, 0x0161F1C0, - 0x01616F00, 0x0160EC40, 0x01606980, - 0x015FE6C0, 0x015F6400, 0x015EE140, - 0x015E5E80, 0x015DDBC0, 0x015D5900, - 0x015CD640, 0x015C5380, 0x015BD0C0, - 0x015B4E00, 0x015ACB40, 0x015A4880, - 0x0159C5C0, 0x01594300, 0x0158C040, - 0x01583D80, 0x0157BAC0, 0x01573800, - 0x0156B540, 0x01563280, 0x0155AFC0, - 0x01552D00, 0x0154AA40, 0x01542780, - 0x0153A4C0, 0x01532200, 0x01529F40, - 0x01521C80, 0x015199C0, 0x01511700, - 0x01509440, 0x01501180, 0x014F8EC0, - 0x014F0C00, 0x014E8940, 0x014E0680, - 0x014D83C0, 0x014D0100, 0x014C7E40, - 0x014BFB80, 0x014B78C0, 0x014AF600, - 0x014A7340, 0x0149F080, 0x01496DC0, - 0x0148EB00, 0x01486840, 0x0147E580, - 0x014762C0, 0x0146E000, 0x01465D40, - 0x0145DA80, 0x014557C0, 0x0144D500, - 0x01445240, 0x0143CF80, 0x01434CC0, - 0x0142CA00, 0x01424740, 0x0141C480, - 0x014141C0, 0x0140BF00, 0x01403C40, - 0x013FB980, 0x013F36C0, 0x013EB400, - 0x013E3140, 0x013DAE80, 0x013D2BC0, - 0x013CA900, 0x013C2640, 0x013BA380, - 0x013B20C0, 0x013A9E00, 0x013A1B40, - 0x01399880, 0x013915C0, 0x01389300, - 0x01381040, 0x01378D80, 0x01370AC0, - 0x01368800, 0x01360540, 0x01358280, - 0x0134FFC0, 0x01347D00, 0x0133FA40, - 0x01337780, 0x0132F4C0, 0x01327200, - 0x0131EF40, 0x01316C80, 0x0130E9C0, - 0x01306700, 0x012FE440, 0x012F6180, - 0x012EDEC0, 0x012E5C00, 0x012DD940, - 0x012D5680, 0x012CD3C0, 0x012C5100, - 0x012BCE40, 0x012B4B80, 0x012AC8C0, - 0x012A4600, 0x0129C340, 0x01294080, - 0x0128BDC0, 0x01283B00, 0x0127B840, - 0x01273580, 0x0126B2C0, 0x01263000, - 0x0125AD40, 0x01252A80, 0x0124A7C0, - 0x01242500, 0x0123A240, 0x01231F80, - 0x01229CC0, 0x01221A00, 0x01219740, - 0x01211480, 0x012091C0, 0x01200F00, - 0x011F8C40, 0x011F0980, 0x011E86C0, - 0x011E0400, 0x011D8140, 0x011CFE80, - 0x011C7BC0, 0x011BF900, 0x011B7640, - 0x011AF380, 0x011A70C0, 0x0119EE00, - 0x01196B40, 0x0118E880, 0x011865C0, - 0x0117E300, 0x01176040, 0x0116DD80, - 0x01165AC0, 0x0115D800, 0x01155540, - 0x0114D280, 0x01144FC0, 0x0113CD00, - 0x01134A40, 0x0112C780, 0x011244C0, - 0x0111C200, 0x01113F40, 0x0110BC80, - 0x011039C0, 0x010FB700, 0x010F3440, - 0x010EB180, 0x010E2EC0, 0x010DAC00, - 0x010D2940, 0x010CA680, 0x010C23C0, - 0x010BA100, 0x010B1E40, 0x010A9B80, - 0x010A18C0, 0x01099600, 0x01091340, - 0x01089080, 0x01080DC0, 0x01078B00, - 0x01070840, 0x01068580, 0x010602C0, - 0x01058000, 0x0104FD40, 0x01047A80, - 0x0103F7C0, 0x01037500, 0x0102F240, - 0x01026F80, 0x0101ECC0, 0x01016A00, - 0x0100E740, 0x01006480, 0x00FFE1C0, - 0x00FF5F00, 0x00FEDC40, 0x00FE5980, - 0x00FDD6C0, 0x00FD5400, 0x00FCD140, - 0x00FC4E80, 0x00FBCBC0, 0x00FB4900, - 0x00FAC640, 0x00FA4380, 0x00F9C0C0, - 0x00F93E00, 0x00F8BB40, 0x00F83880, - 0x00F7B5C0, 0x00F73300, 0x00F6B040, - 0x00F62D80, 0x00F5AAC0, 0x00F52800, - 0x00F4A540, 0x00F42280, 0x00F39FC0, - 0x00F31D00, 0x00F29A40, 0x00F21780, - 0x00F194C0, 0x00F11200, 0x00F08F40, - 0x00F00C80, 0x00EF89C0, 0x00EF0700, - 0x00EE8440, 0x00EE0180, 0x00ED7EC0, - 0x00ECFC00, 0x00EC7940, 0x00EBF680, - 0x00EB73C0, 0x00EAF100, 0x00EA6E40, - 0x00E9EB80, 0x00E968C0, 0x00E8E600, - 0x00E86340, 0x00E7E080, 0x00E75DC0, - 0x00E6DB00, 0x00E65840, 0x00E5D580, - 0x00E552C0, 0x00E4D000, 0x00E44D40, - 0x00E3CA80, 0x00E347C0, 0x00E2C500, - 0x00E24240, 0x00E1BF80, 0x00E13CC0, - 0x00E0BA00, 0x00E03740, 0x00DFB480, - 0x00DF31C0, 0x00DEAF00, 0x00DE2C40, - 0x00DDA980, 0x00DD26C0, 0x00DCA400, - 0x00DC2140, 0x00DB9E80, 0x00DB1BC0, - 0x00DA9900, 0x00DA1640, 0x00D99380, - 0x00D910C0, 0x00D88E00, 0x00D80B40, - 0x00D78880, 0x00D705C0, 0x00D68300, - 0x00D60040, 0x00D57D80, 0x00D4FAC0, - 0x00D47800, 0x00D3F540, 0x00D37280, - 0x00D2EFC0, 0x00D26D00, 0x00D1EA40, - 0x00D16780, 0x00D0E4C0, 0x00D06200, - 0x00CFDF40, 0x00CF5C80, 0x00CED9C0, - 0x00CE5700, 0x00CDD440, 0x00CD5180, - 0x00CCCEC0, 0x00CC4C00, 0x00CBC940, - 0x00CB4680, 0x00CAC3C0, 0x00CA4100, - 0x00C9BE40, 0x00C93B80, 0x00C8B8C0, - 0x00C83600, 0x00C7B340, 0x00C73080, - 0x00C6ADC0, 0x00C62B00, 0x00C5A840, - 0x00C52580, 0x00C4A2C0, 0x00C42000, - 0x00C39D40, 0x00C31A80, 0x00C297C0, - 0x00C21500, 0x00C19240, 0x00C10F80, - 0x00C08CC0, 0x00C00A00, 0x00BF8740, - 0x00BF0480, 0x00BE81C0, 0x00BDFF00, - 0x00BD7C40, 0x00BCF980, 0x00BC76C0, - 0x00BBF400, 0x00BB7140, 0x00BAEE80, - 0x00BA6BC0, 0x00B9E900, 0x00B96640, - 0x00B8E380, 0x00B860C0, 0x00B7DE00, - 0x00B75B40, 0x00B6D880, 0x00B655C0, - 0x00B5D300, 0x00B55040, 0x00B4CD80, - 0x00B44AC0, 0x00B3C800, 0x00B34540, - 0x00B2C280, 0x00B23FC0, 0x00B1BD00, - 0x00B13A40, 0x00B0B780, 0x00B034C0, - 0x00AFB200, 0x00AF2F40, 0x00AEAC80, - 0x00AE29C0, 0x00ADA700, 0x00AD2440, - 0x00ACA180, 0x00AC1EC0, 0x00AB9C00, - 0x00AB1940, 0x00AA9680, 0x00AA13C0, - 0x00A99100, 0x00A90E40, 0x00A88B80, - 0x00A808C0, 0x00A78600, 0x00A70340, - 0x00A68080, 0x00A5FDC0, 0x00A57B00, - 0x00A4F840, 0x00A47580, 0x00A3F2C0, - 0x00A37000, 0x00A2ED40, 0x00A26A80, - 0x00A1E7C0, 0x00A16500, 0x00A0E240, - 0x00A05F80, 0x009FDCC0, 0x009F5A00, - 0x009ED740, 0x009E5480, 0x009DD1C0, - 0x009D4F00, 0x009CCC40, 0x009C4980, - 0x009BC6C0, 0x009B4400, 0x009AC140, - 0x009A3E80, 0x0099BBC0, 0x00993900, - 0x0098B640, 0x00983380, 0x0097B0C0, - 0x00972E00, 0x0096AB40, 0x00962880, - 0x0095A5C0, 0x00952300, 0x0094A040, - 0x00941D80, 0x00939AC0, 0x00931800, - 0x00929540, 0x00921280, 0x00918FC0, - 0x00910D00, 0x00908A40, 0x00900780, - 0x008F84C0, 0x008F0200, 0x008E7F40, - 0x008DFC80, 0x008D79C0, 0x008CF700, - 0x008C7440, 0x008BF180, 0x008B6EC0, - 0x008AEC00, 0x008A6940, 0x0089E680, - 0x008963C0, 0x0088E100, 0x00885E40, - 0x0087DB80, 0x008758C0, 0x0086D600, - 0x00865340, 0x0085D080, 0x00854DC0, - 0x0084CB00, 0x00844840, 0x0083C580, - 0x008342C0, 0x0082C000, 0x00823D40, - 0x0081BA80, 0x008137C0, 0x0080B500, - 0x00803240, 0x007FAF80, 0x007F2CC0, - 0x007EAA00, 0x007E2740, 0x007DA480, - 0x007D21C0, 0x007C9F00, 0x007C1C40, - 0x007B9980, 0x007B16C0, 0x007A9400, - 0x007A1140, 0x00798E80, 0x00790BC0, - 0x00788900, 0x00780640, 0x00778380, - 0x007700C0, 0x00767E00, 0x0075FB40, - 0x00757880, 0x0074F5C0, 0x00747300, - 0x0073F040, 0x00736D80, 0x0072EAC0, - 0x00726800, 0x0071E540, 0x00716280, - 0x0070DFC0, 0x00705D00, 0x006FDA40, - 0x006F5780, 0x006ED4C0, 0x006E5200, - 0x006DCF40, 0x006D4C80, 0x006CC9C0, - 0x006C4700, 0x006BC440, 0x006B4180, - 0x006ABEC0, 0x006A3C00, 0x0069B940, - 0x00693680, 0x0068B3C0, 0x00683100, - 0x0067AE40, 0x00672B80, 0x0066A8C0, - 0x00662600, 0x0065A340, 0x00652080, - 0x00649DC0, 0x00641B00, 0x00639840, - 0x00631580, 0x006292C0, 0x00621000, - 0x00618D40, 0x00610A80, 0x006087C0, - 0x00600500, 0x005F8240, 0x005EFF80, - 0x005E7CC0, 0x005DFA00, 0x005D7740, - 0x005CF480, 0x005C71C0, 0x005BEF00, - 0x005B6C40, 0x005AE980, 0x005A66C0, - 0x0059E400, 0x00596140, 0x0058DE80, - 0x00585BC0, 0x0057D900, 0x00575640, - 0x0056D380, 0x005650C0, 0x0055CE00, - 0x00554B40, 0x0054C880, 0x005445C0, - 0x0053C300, 0x00534040, 0x0052BD80, - 0x00523AC0, 0x0051B800, 0x00513540, - 0x0050B280, 0x00502FC0, 0x004FAD00, - 0x004F2A40, 0x004EA780, 0x004E24C0, - 0x004DA200, 0x004D1F40, 0x004C9C80, - 0x004C19C0, 0x004B9700, 0x004B1440, - 0x004A9180, 0x004A0EC0, 0x00498C00, - 0x00490940, 0x00488680, 0x004803C0, - 0x00478100, 0x0046FE40, 0x00467B80, - 0x0045F8C0, 0x00457600, 0x0044F340, - 0x00447080, 0x0043EDC0, 0x00436B00, - 0x0042E840, 0x00426580, 0x0041E2C0, - 0x00416000, 0x0040DD40, 0x00405A80, - 0x003FD7C0, 0x003F5500, 0x003ED240, - 0x003E4F80, 0x003DCCC0, 0x003D4A00, - 0x003CC740, 0x003C4480, 0x003BC1C0, - 0x003B3F00, 0x003ABC40, 0x003A3980, - 0x0039B6C0, 0x00393400, 0x0038B140, - 0x00382E80, 0x0037ABC0, 0x00372900, - 0x0036A640, 0x00362380, 0x0035A0C0, - 0x00351E00, 0x00349B40, 0x00341880, - 0x003395C0, 0x00331300, 0x00329040, - 0x00320D80, 0x00318AC0, 0x00310800, - 0x00308540, 0x00300280, 0x002F7FC0, - 0x002EFD00, 0x002E7A40, 0x002DF780, - 0x002D74C0, 0x002CF200, 0x002C6F40, - 0x002BEC80, 0x002B69C0, 0x002AE700, - 0x002A6440, 0x0029E180, 0x00295EC0, - 0x0028DC00, 0x00285940, 0x0027D680, - 0x002753C0, 0x0026D100, 0x00264E40, - 0x0025CB80, 0x002548C0, 0x0024C600, - 0x00244340, 0x0023C080, 0x00233DC0, - 0x0022BB00, 0x00223840, 0x0021B580, - 0x002132C0, 0x0020B000, 0x00202D40, - 0x001FAA80, 0x001F27C0, 0x001EA500, - 0x001E2240, 0x001D9F80, 0x001D1CC0, - 0x001C9A00, 0x001C1740, 0x001B9480, - 0x001B11C0, 0x001A8F00, 0x001A0C40, - 0x00198980, 0x001906C0, 0x00188400, - 0x00180140, 0x00177E80, 0x0016FBC0, - 0x00167900, 0x0015F640, 0x00157380, - 0x0014F0C0, 0x00146E00, 0x0013EB40, - 0x00136880, 0x0012E5C0, 0x00126300, - 0x0011E040, 0x00115D80, 0x0010DAC0, - 0x00105800, 0x000FD540, 0x000F5280, - 0x000ECFC0, 0x000E4D00, 0x000DCA40, - 0x000D4780, 0x000CC4C0, 0x000C4200, - 0x000BBF40, 0x000B3C80, 0x000AB9C0, - 0x000A3700, 0x0009B440, 0x00093180, - 0x0008AEC0, 0x00082C00, 0x0007A940, - 0x00072680, 0x0006A3C0, 0x00062100, - 0x00059E40, 0x00051B80, 0x000498C0, - 0x00041600, 0x00039340, 0x00031080, - 0x00028DC0, 0x00020B00, 0x00018840, - 0x00010580, 0x000082C0, 0xFFE80000, - 0xFFE61700, 0xFFE42E00, 0xFFE24500, - 0xFFE05C00, 0xFFDE7300, 0xFFDC8A00, - 0xFFDAA100, 0xFFD8B800, 0xFFD6CF00, - 0xFFD4E600, 0xFFD2FD00, 0xFFD11400, - 0xFFCF2B00, 0xFFCD4200, 0xFFCB5900, - 0xFFC97000, 0xFFC78700, 0xFFC59E00, - 0xFFC3B500, 0xFFC1CC00, 0xFFBFE300, - 0xFFBDFA00, 0xFFBC1100, 0xFFBA2800, - 0xFFB83F00, 0xFFB65600, 0xFFB46D00, - 0xFFB28400, 0xFFB09B00, 0xFFAEB200, - 0xFFACC900, 0xFFAAE000, 0xFFA8F700, - 0xFFA70E00, 0xFFA52500, 0xFFA33C00, - 0xFFA15300, 0xFF9F6A00, 0xFF9D8100, - 0xFF9B9800, 0xFF99AF00, 0xFF97C600, - 0xFF95DD00, 0xFF93F400, 0xFF920B00, - 0xFF902200, 0xFF8E3900, 0xFF8C5000, - 0xFF8A6700, 0xFF887E00, 0xFF869500, - 0xFF84AC00, 0xFF82C300, 0xFF80DA00, - 0xFF7EF100, 0xFF7D0800, 0xFF7B1F00, - 0xFF793600, 0xFF774D00, 0xFF756400, - 0xFF737B00, 0xFF719200, 0xFF6FA900, - 0xFF6DC000, 0xFF6BD700, 0xFF69EE00, - 0xFF680500, 0xFF661C00, 0xFF643300, - 0xFF624A00, 0xFF606100, 0xFF5E7800, - 0xFF5C8F00, 0xFF5AA600, 0xFF58BD00, - 0xFF56D400, 0xFF54EB00, 0xFF530200, - 0xFF511900, 0xFF4F3000, 0xFF4D4700, - 0xFF4B5E00, 0xFF497500, 0xFF478C00, - 0xFF45A300, 0xFF43BA00, 0xFF41D100, - 0xFF3FE800, 0xFF3DFF00, 0xFF3C1600, - 0xFF3A2D00, 0xFF384400, 0xFF365B00, - 0xFF347200, 0xFF328900, 0xFF30A000, - 0xFF2EB700, 0xFF2CCE00, 0xFF2AE500, - 0xFF28FC00, 0xFF271300, 0xFF252A00, - 0xFF234100, 0xFF215800, 0xFF1F6F00, - 0xFF1D8600, 0xFF1B9D00, 0xFF19B400, - 0xFF17CB00, 0xFF15E200, 0xFF13F900, - 0xFF121000, 0xFF102700, 0xFF0E3E00, - 0xFF0C5500, 0xFF0A6C00, 0xFF088300, - 0xFF069A00, 0xFF04B100, 0xFF02C800, - 0xFF00DF00, 0xFEFEF600, 0xFEFD0D00, - 0xFEFB2400, 0xFEF93B00, 0xFEF75200, - 0xFEF56900, 0xFEF38000, 0xFEF19700, - 0xFEEFAE00, 0xFEEDC500, 0xFEEBDC00, - 0xFEE9F300, 0xFEE80A00, 0xFEE62100, - 0xFEE43800, 0xFEE24F00, 0xFEE06600, - 0xFEDE7D00, 0xFEDC9400, 0xFEDAAB00, - 0xFED8C200, 0xFED6D900, 0xFED4F000, - 0xFED30700, 0xFED11E00, 0xFECF3500, - 0xFECD4C00, 0xFECB6300, 0xFEC97A00, - 0xFEC79100, 0xFEC5A800, 0xFEC3BF00, - 0xFEC1D600, 0xFEBFED00, 0xFEBE0400, - 0xFEBC1B00, 0xFEBA3200, 0xFEB84900, - 0xFEB66000, 0xFEB47700, 0xFEB28E00, - 0xFEB0A500, 0xFEAEBC00, 0xFEACD300, - 0xFEAAEA00, 0xFEA90100, 0xFEA71800, - 0xFEA52F00, 0xFEA34600, 0xFEA15D00, - 0xFE9F7400, 0xFE9D8B00, 0xFE9BA200, - 0xFE99B900, 0xFE97D000, 0xFE95E700, - 0xFE93FE00, 0xFE921500, 0xFE902C00, - 0xFE8E4300, 0xFE8C5A00, 0xFE8A7100, - 0xFE888800, 0xFE869F00, 0xFE84B600, - 0xFE82CD00, 0xFE80E400, 0xFE7EFB00, - 0xFE7D1200, 0xFE7B2900, 0xFE794000, - 0xFE775700, 0xFE756E00, 0xFE738500, - 0xFE719C00, 0xFE6FB300, 0xFE6DCA00, - 0xFE6BE100, 0xFE69F800, 0xFE680F00, - 0xFE662600, 0xFE643D00, 0xFE625400, - 0xFE606B00, 0xFE5E8200, 0xFE5C9900, - 0xFE5AB000, 0xFE58C700, 0xFE56DE00, - 0xFE54F500, 0xFE530C00, 0xFE512300, - 0xFE4F3A00, 0xFE4D5100, 0xFE4B6800, - 0xFE497F00, 0xFE479600, 0xFE45AD00, - 0xFE43C400, 0xFE41DB00, 0xFE3FF200, - 0xFE3E0900, 0xFE3C2000, 0xFE3A3700, - 0xFE384E00, 0xFE366500, 0xFE347C00, - 0xFE329300, 0xFE30AA00, 0xFE2EC100, - 0xFE2CD800, 0xFE2AEF00, 0xFE290600, - 0xFE271D00, 0xFE253400, 0xFE234B00, - 0xFE216200, 0xFE1F7900, 0xFE1D9000, - 0xFE1BA700, 0xFE19BE00, 0xFE17D500, - 0xFE15EC00, 0xFE140300, 0xFE121A00, - 0xFE103100, 0xFE0E4800, 0xFE0C5F00, - 0xFE0A7600, 0xFE088D00, 0xFE06A400, - 0xFE04BB00, 0xFE02D200, 0xFE00E900, - 0xFDFF0000, 0xFDFD1700, 0xFDFB2E00, - 0xFDF94500, 0xFDF75C00, 0xFDF57300, - 0xFDF38A00, 0xFDF1A100, 0xFDEFB800, - 0xFDEDCF00, 0xFDEBE600, 0xFDE9FD00, - 0xFDE81400, 0xFDE62B00, 0xFDE44200, - 0xFDE25900, 0xFDE07000, 0xFDDE8700, - 0xFDDC9E00, 0xFDDAB500, 0xFDD8CC00, - 0xFDD6E300, 0xFDD4FA00, 0xFDD31100, - 0xFDD12800, 0xFDCF3F00, 0xFDCD5600, - 0xFDCB6D00, 0xFDC98400, 0xFDC79B00, - 0xFDC5B200, 0xFDC3C900, 0xFDC1E000, - 0xFDBFF700, 0xFDBE0E00, 0xFDBC2500, - 0xFDBA3C00, 0xFDB85300, 0xFDB66A00, - 0xFDB48100, 0xFDB29800, 0xFDB0AF00, - 0xFDAEC600, 0xFDACDD00, 0xFDAAF400, - 0xFDA90B00, 0xFDA72200, 0xFDA53900, - 0xFDA35000, 0xFDA16700, 0xFD9F7E00, - 0xFD9D9500, 0xFD9BAC00, 0xFD99C300, - 0xFD97DA00, 0xFD95F100, 0xFD940800, - 0xFD921F00, 0xFD903600, 0xFD8E4D00, - 0xFD8C6400, 0xFD8A7B00, 0xFD889200, - 0xFD86A900, 0xFD84C000, 0xFD82D700, - 0xFD80EE00, 0xFD7F0500, 0xFD7D1C00, - 0xFD7B3300, 0xFD794A00, 0xFD776100, - 0xFD757800, 0xFD738F00, 0xFD71A600, - 0xFD6FBD00, 0xFD6DD400, 0xFD6BEB00, - 0xFD6A0200, 0xFD681900, 0xFD663000, - 0xFD644700, 0xFD625E00, 0xFD607500, - 0xFD5E8C00, 0xFD5CA300, 0xFD5ABA00, - 0xFD58D100, 0xFD56E800, 0xFD54FF00, - 0xFD531600, 0xFD512D00, 0xFD4F4400, - 0xFD4D5B00, 0xFD4B7200, 0xFD498900, - 0xFD47A000, 0xFD45B700, 0xFD43CE00, - 0xFD41E500, 0xFD3FFC00, 0xFD3E1300, - 0xFD3C2A00, 0xFD3A4100, 0xFD385800, - 0xFD366F00, 0xFD348600, 0xFD329D00, - 0xFD30B400, 0xFD2ECB00, 0xFD2CE200, - 0xFD2AF900, 0xFD291000, 0xFD272700, - 0xFD253E00, 0xFD235500, 0xFD216C00, - 0xFD1F8300, 0xFD1D9A00, 0xFD1BB100, - 0xFD19C800, 0xFD17DF00, 0xFD15F600, - 0xFD140D00, 0xFD122400, 0xFD103B00, - 0xFD0E5200, 0xFD0C6900, 0xFD0A8000, - 0xFD089700, 0xFD06AE00, 0xFD04C500, - 0xFD02DC00, 0xFD00F300, 0xFCFF0A00, - 0xFCFD2100, 0xFCFB3800, 0xFCF94F00, - 0xFCF76600, 0xFCF57D00, 0xFCF39400, - 0xFCF1AB00, 0xFCEFC200, 0xFCEDD900, - 0xFCEBF000, 0xFCEA0700, 0xFCE81E00, - 0xFCE63500, 0xFCE44C00, 0xFCE26300, - 0xFCE07A00, 0xFCDE9100, 0xFCDCA800, - 0xFCDABF00, 0xFCD8D600, 0xFCD6ED00, - 0xFCD50400, 0xFCD31B00, 0xFCD13200, - 0xFCCF4900, 0xFCCD6000, 0xFCCB7700, - 0xFCC98E00, 0xFCC7A500, 0xFCC5BC00, - 0xFCC3D300, 0xFCC1EA00, 0xFCC00100, - 0xFCBE1800, 0xFCBC2F00, 0xFCBA4600, - 0xFCB85D00, 0xFCB67400, 0xFCB48B00, - 0xFCB2A200, 0xFCB0B900, 0xFCAED000, - 0xFCACE700, 0xFCAAFE00, 0xFCA91500, - 0xFCA72C00, 0xFCA54300, 0xFCA35A00, - 0xFCA17100, 0xFC9F8800, 0xFC9D9F00, - 0xFC9BB600, 0xFC99CD00, 0xFC97E400, - 0xFC95FB00, 0xFC941200, 0xFC922900, - 0xFC904000, 0xFC8E5700, 0xFC8C6E00, - 0xFC8A8500, 0xFC889C00, 0xFC86B300, - 0xFC84CA00, 0xFC82E100, 0xFC80F800, - 0xFC7F0F00, 0xFC7D2600, 0xFC7B3D00, - 0xFC795400, 0xFC776B00, 0xFC758200, - 0xFC739900, 0xFC71B000, 0xFC6FC700, - 0xFC6DDE00, 0xFC6BF500, 0xFC6A0C00, - 0xFC682300, 0xFC663A00, 0xFC645100, - 0xFC626800, 0xFC607F00, 0xFC5E9600, - 0xFC5CAD00, 0xFC5AC400, 0xFC58DB00, - 0xFC56F200, 0xFC550900, 0xFC532000, - 0xFC513700, 0xFC4F4E00, 0xFC4D6500, - 0xFC4B7C00, 0xFC499300, 0xFC47AA00, - 0xFC45C100, 0xFC43D800, 0xFC41EF00, - 0xFC400600, 0xFC3E1D00, 0xFC3C3400, - 0xFC3A4B00, 0xFC386200, 0xFC367900, - 0xFC349000, 0xFC32A700, 0xFC30BE00, - 0xFC2ED500, 0xFC2CEC00, 0xFC2B0300, - 0xFC291A00, 0xFC273100, 0xFC254800, - 0xFC235F00, 0xFC217600, 0xFC1F8D00, - 0xFC1DA400, 0xFC1BBB00, 0xFC19D200, - 0xFC17E900, 0xFC160000, 0xFC141700, - 0xFC122E00, 0xFC104500, 0xFC0E5C00, - 0xFC0C7300, 0xFC0A8A00, 0xFC08A100, - 0xFC06B800, 0xFC04CF00, 0xFC02E600, - 0xFC00FD00, 0xFBFF1400, 0xFBFD2B00, - 0xFBFB4200, 0xFBF95900, 0xFBF77000, - 0xFBF58700, 0xFBF39E00, 0xFBF1B500, - 0xFBEFCC00, 0xFBEDE300, 0xFBEBFA00, - 0xFBEA1100, 0xFBE82800, 0xFBE63F00, - 0xFBE45600, 0xFBE26D00, 0xFBE08400, - 0xFBDE9B00, 0xFBDCB200, 0xFBDAC900, - 0xFBD8E000, 0xFBD6F700, 0xFBD50E00, - 0xFBD32500, 0xFBD13C00, 0xFBCF5300, - 0xFBCD6A00, 0xFBCB8100, 0xFBC99800, - 0xFBC7AF00, 0xFBC5C600, 0xFBC3DD00, - 0xFBC1F400, 0xFBC00B00, 0xFBBE2200, - 0xFBBC3900, 0xFBBA5000, 0xFBB86700, - 0xFBB67E00, 0xFBB49500, 0xFBB2AC00, - 0xFBB0C300, 0xFBAEDA00, 0xFBACF100, - 0xFBAB0800, 0xFBA91F00, 0xFBA73600, - 0xFBA54D00, 0xFBA36400, 0xFBA17B00, - 0xFB9F9200, 0xFB9DA900, 0xFB9BC000, - 0xFB99D700, 0xFB97EE00, 0xFB960500, - 0xFB941C00, 0xFB923300, 0xFB904A00, - 0xFB8E6100, 0xFB8C7800, 0xFB8A8F00, - 0xFB88A600, 0xFB86BD00, 0xFB84D400, - 0xFB82EB00, 0xFB810200, 0xFB7F1900, - 0xFB7D3000, 0xFB7B4700, 0xFB795E00, - 0xFB777500, 0xFB758C00, 0xFB73A300, - 0xFB71BA00, 0xFB6FD100, 0xFB6DE800, - 0xFB6BFF00, 0xFB6A1600, 0xFB682D00, - 0xFB664400, 0xFB645B00, 0xFB627200, - 0xFB608900, 0xFB5EA000, 0xFB5CB700, - 0xFB5ACE00, 0xFB58E500, 0xFB56FC00, - 0xFB551300, 0xFB532A00, 0xFB514100, - 0xFB4F5800, 0xFB4D6F00, 0xFB4B8600, - 0xFB499D00, 0xFB47B400, 0xFB45CB00, - 0xFB43E200, 0xFB41F900, 0xFB401000, - 0xFB3E2700, 0xFB3C3E00, 0xFB3A5500, - 0xFB386C00, 0xFB368300, 0xFB349A00, - 0xFB32B100, 0xFB30C800, 0xFB2EDF00, - 0xFB2CF600, 0xFB2B0D00, 0xFB292400, - 0xFB273B00, 0xFB255200, 0xFB236900, - 0xFB218000, 0xFB1F9700, 0xFB1DAE00, - 0xFB1BC500, 0xFB19DC00, 0xFB17F300, - 0xFB160A00, 0xFB142100, 0xFB123800, - 0xFB104F00, 0xFB0E6600, 0xFB0C7D00, - 0xFB0A9400, 0xFB08AB00, 0xFB06C200, - 0xFB04D900, 0xFB02F000, 0xFB010700, - 0xFAFF1E00, 0xFAFD3500, 0xFAFB4C00, - 0xFAF96300, 0xFAF77A00, 0xFAF59100, - 0xFAF3A800, 0xFAF1BF00, 0xFAEFD600, - 0xFAEDED00, 0xFAEC0400, 0xFAEA1B00, - 0xFAE83200, 0xFAE64900, 0xFAE46000, - 0xFAE27700, 0xFAE08E00, 0xFADEA500, - 0xFADCBC00, 0xFADAD300, 0xFAD8EA00, - 0xFAD70100, 0xFAD51800, 0xFAD32F00, - 0xFAD14600, 0xFACF5D00, 0xFACD7400, - 0xFACB8B00, 0xFAC9A200, 0xFAC7B900, - 0xFAC5D000, 0xFAC3E700, 0xFAC1FE00, - 0xFAC01500, 0xFABE2C00, 0xFABC4300, - 0xFABA5A00, 0xFAB87100, 0xFAB68800, - 0xFAB49F00, 0xFAB2B600, 0xFAB0CD00, - 0xFAAEE400, 0xFAACFB00, 0xFAAB1200, - 0xFAA92900, 0xFAA74000, 0xFAA55700, - 0xFAA36E00, 0xFAA18500, 0xFA9F9C00, - 0xFA9DB300, 0xFA9BCA00, 0xFA99E100, - 0xFA97F800, 0xFA960F00, 0xFA942600, - 0xFA923D00, 0xFA905400, 0xFA8E6B00, - 0xFA8C8200, 0xFA8A9900, 0xFA88B000, - 0xFA86C700, 0xFA84DE00, 0xFA82F500, - 0xFA810C00, 0xFA7F2300, 0xFA7D3A00, - 0xFA7B5100, 0xFA796800, 0xFA777F00, - 0xFA759600, 0xFA73AD00, 0xFA71C400, - 0xFA6FDB00, 0xFA6DF200, 0xFA6C0900, - 0xFA6A2000, 0xFA683700, 0xFA664E00, - 0xFA646500, 0xFA627C00, 0xFA609300, - 0xFA5EAA00, 0xFA5CC100, 0xFA5AD800, - 0xFA58EF00, 0xFA570600, 0xFA551D00, - 0xFA533400, 0xFA514B00, 0xFA4F6200, - 0xFA4D7900, 0xFA4B9000, 0xFA49A700, - 0xFA47BE00, 0xFA45D500, 0xFA43EC00, - 0xFA420300, 0xFA401A00, 0xFA3E3100, - 0xFA3C4800, 0xFA3A5F00, 0xFA387600, - 0xFA368D00, 0xFA34A400, 0xFA32BB00, - 0xFA30D200, 0xFA2EE900, 0xFA2D0000, - 0xFA2B1700, 0xFA292E00, 0xFA274500, - 0xFA255C00, 0xFA237300, 0xFA218A00, - 0xFA1FA100, 0xFA1DB800, 0xFA1BCF00, - 0xFA19E600, 0xFA17FD00, 0xFA161400, - 0xFA142B00, 0xFA124200, 0xFA105900, - 0xFA0E7000, 0xFA0C8700, 0xFA0A9E00, - 0xFA08B500, 0xFA06CC00, 0xFA04E300, - 0xFA02FA00, 0xFA011100, 0xF9FF2800, - 0xF9FD3F00, 0xF9FB5600, 0xF9F96D00, - 0xF9F78400, 0xF9F59B00, 0xF9F3B200, - 0xF9F1C900, 0xF9EFE000, 0xF9EDF700, - 0xF9EC0E00, 0xF9EA2500, 0xF9E83C00, - 0xF9E65300, 0xF9E46A00, 0xF9E28100, - 0xF9E09800, 0xF9DEAF00, 0xF9DCC600, - 0xF9DADD00, 0xF9D8F400, 0xF9D70B00, - 0xF9D52200, 0xF9D33900, 0xF9D15000, - 0xF9CF6700, 0xF9CD7E00, 0xF9CB9500, - 0xF9C9AC00, 0xF9C7C300, 0xF9C5DA00, - 0xF9C3F100, 0xF9C20800, 0xF9C01F00, - 0xF9BE3600, 0xF9BC4D00, 0xF9BA6400, - 0xF9B87B00, 0xF9B69200, 0xF9B4A900, - 0xF9B2C000, 0xF9B0D700, 0xF9AEEE00, - 0xF9AD0500, 0xF9AB1C00, 0xF9A93300, - 0xF9A74A00, 0xF9A56100, 0xF9A37800, - 0xF9A18F00, 0xF99FA600, 0xF99DBD00, - 0xF99BD400, 0xF999EB00, 0xF9980200, - 0xF9961900, 0xF9943000, 0xF9924700, - 0xF9905E00, 0xF98E7500, 0xF98C8C00, - 0xF98AA300, 0xF988BA00, 0xF986D100, - 0xF984E800, 0xF982FF00, 0xF9811600, - 0xF97F2D00, 0xF97D4400, 0xF97B5B00, - 0xF9797200, 0xF9778900, 0xF975A000, - 0xF973B700, 0xF971CE00, 0xF96FE500, - 0xF96DFC00, 0xF96C1300, 0xF96A2A00, - 0xF9684100, 0xF9665800, 0xF9646F00, - 0xF9628600, 0xF9609D00, 0xF95EB400, - 0xF95CCB00, 0xF95AE200, 0xF958F900, - 0xF9571000, 0xF9552700, 0xF9533E00, - 0xF9515500, 0xF94F6C00, 0xF94D8300, - 0xF94B9A00, 0xF949B100, 0xF947C800, - 0xF945DF00, 0xF943F600, 0xF9420D00, - 0xF9402400, 0xF93E3B00, 0xF93C5200, - 0xF93A6900, 0xF9388000, 0xF9369700, - 0xF934AE00, 0xF932C500, 0xF930DC00, - 0xF92EF300, 0xF92D0A00, 0xF92B2100, - 0xF9293800, 0xF9274F00, 0xF9256600, - 0xF9237D00, 0xF9219400, 0xF91FAB00, - 0xF91DC200, 0xF91BD900, 0xF919F000, - 0xF9180700, 0xF9161E00, 0xF9143500, - 0xF9124C00, 0xF9106300, 0xF90E7A00, - 0xF90C9100, 0xF90AA800, 0xF908BF00, - 0xF906D600, 0xF904ED00, 0xF9030400, - 0xF9011B00, 0xF8FF3200, 0xF8FD4900, - 0xF8FB6000, 0xF8F97700, 0xF8F78E00, - 0xF8F5A500, 0xF8F3BC00, 0xF8F1D300, - 0xF8EFEA00, 0xF8EE0100, 0xF8EC1800, - 0xF8EA2F00, 0xF8E84600, 0xF8E65D00, - 0xF8E47400, 0xF8E28B00, 0xF8E0A200, - 0xF8DEB900, 0xF8DCD000, 0xF8DAE700, - 0xF8D8FE00, 0xF8D71500, 0xF8D52C00, - 0xF8D34300, 0xF8D15A00, 0xF8CF7100, - 0xF8CD8800, 0xF8CB9F00, 0xF8C9B600, - 0xF8C7CD00, 0xF8C5E400, 0xF8C3FB00, - 0xF8C21200, 0xF8C02900, 0xF8BE4000, - 0xF8BC5700, 0xF8BA6E00, 0xF8B88500, - 0xF8B69C00, 0xF8B4B300, 0xF8B2CA00, - 0xF8B0E100, 0xF8AEF800, 0xF8AD0F00, - 0xF8AB2600, 0xF8A93D00, 0xF8A75400, - 0xF8A56B00, 0xF8A38200, 0xF8A19900, - 0xF89FB000, 0xF89DC700, 0xF89BDE00, - 0xF899F500, 0xF8980C00, 0xF8962300, - 0xF8943A00, 0xF8925100, 0xF8906800, - 0xF88E7F00, 0xF88C9600, 0xF88AAD00, - 0xF888C400, 0xF886DB00, 0xF884F200, - 0xF8830900, 0xF8812000, 0xF87F3700, - 0xF87D4E00, 0xF87B6500, 0xF8797C00, - 0xF8779300, 0xF875AA00, 0xF873C100, - 0xF871D800, 0xF86FEF00, 0xF86E0600, - 0xF86C1D00, 0xF86A3400, 0xF8684B00, - 0xF8666200, 0xF8647900, 0xF8629000, - 0xF860A700, 0xF85EBE00, 0xF85CD500, - 0xF85AEC00, 0xF8590300, 0xF8571A00, - 0xF8553100, 0xF8534800, 0xF8515F00, - 0xF84F7600, 0xF84D8D00, 0xF84BA400, - 0xF849BB00, 0xF847D200, 0xF845E900, - 0xF8440000, 0xF8421700, 0xF8402E00, - 0xF83E4500, 0xF83C5C00, 0xF83A7300, - 0xF8388A00, 0xF836A100, 0xF834B800, - 0xF832CF00, 0xF830E600, 0xF82EFD00, - 0xF82D1400, 0xF82B2B00, 0xF8294200, - 0xF8275900, 0xF8257000, 0xF8238700, - 0xF8219E00, 0xF81FB500, 0xF81DCC00, - 0xF81BE300, 0xF819FA00, 0xF8181100, - 0xF8162800, 0xF8143F00, 0xF8125600, - 0xF8106D00, 0xF80E8400, 0xF80C9B00, - 0xF80AB200, 0xF808C900, 0xF806E000, - 0xF804F700, 0xF8030E00, 0xF8012500, - 0xF7FF3C00, 0xF7FD5300, 0xF7FB6A00, - 0xF7F98100, 0xF7F79800, 0xF7F5AF00, - 0xF7F3C600, 0xF7F1DD00, 0xF7EFF400, - 0xF7EE0B00, 0xF7EC2200, 0xF7EA3900, - 0xF7E85000, 0xF7E66700, 0xF7E47E00, - 0xF7E29500, 0xF7E0AC00, 0xF7DEC300, - 0xF7DCDA00, 0xF7DAF100, 0xF7D90800, - 0xF7D71F00, 0xF7D53600, 0xF7D34D00, - 0xF7D16400, 0xF7CF7B00, 0xF7CD9200, - 0xF7CBA900, 0xF7C9C000, 0xF7C7D700, - 0xF7C5EE00, 0xF7C40500, 0xF7C21C00, - 0xF7C03300, 0xF7BE4A00, 0xF7BC6100, - 0xF7BA7800, 0xF7B88F00, 0xF7B6A600, - 0xF7B4BD00, 0xF7B2D400, 0xF7B0EB00, - 0xF7AF0200, 0xF7AD1900, 0xF7AB3000, - 0xF7A94700, 0xF7A75E00, 0xF7A57500, - 0xF7A38C00, 0xF7A1A300, 0xF79FBA00, - 0xF79DD100, 0xF79BE800, 0xF799FF00, - 0xF7981600, 0xF7962D00, 0xF7944400, - 0xF7925B00, 0xF7907200, 0xF78E8900, - 0xF78CA000, 0xF78AB700, 0xF788CE00, - 0xF786E500, 0xF784FC00, 0xF7831300, - 0xF7812A00, 0xF77F4100, 0xF77D5800, - 0xF77B6F00, 0xF7798600, 0xF7779D00, - 0xF775B400, 0xF773CB00, 0xF771E200, - 0xF76FF900, 0xF76E1000, 0xF76C2700, - 0xF76A3E00, 0xF7685500, 0xF7666C00, - 0xF7648300, 0xF7629A00, 0xF760B100, - 0xF75EC800, 0xF75CDF00, 0xF75AF600, - 0xF7590D00, 0xF7572400, 0xF7553B00, - 0xF7535200, 0xF7516900, 0xF74F8000, - 0xF74D9700, 0xF74BAE00, 0xF749C500, - 0xF747DC00, 0xF745F300, 0xF7440A00, - 0xF7422100, 0xF7403800, 0xF73E4F00, - 0xF73C6600, 0xF73A7D00, 0xF7389400, - 0xF736AB00, 0xF734C200, 0xF732D900, - 0xF730F000, 0xF72F0700, 0xF72D1E00, - 0xF72B3500, 0xF7294C00, 0xF7276300, - 0xF7257A00, 0xF7239100, 0xF721A800, - 0xF71FBF00, 0xF71DD600, 0xF71BED00, - 0xF71A0400, 0xF7181B00, 0xF7163200, - 0xF7144900, 0xF7126000, 0xF7107700, - 0xF70E8E00, 0xF70CA500, 0xF70ABC00, - 0xF708D300, 0xF706EA00, 0xF7050100, - 0xF7031800, 0xF7012F00, 0xF6FF4600, - 0xF6FD5D00, 0xF6FB7400, 0xF6F98B00, - 0xF6F7A200, 0xF6F5B900, 0xF6F3D000, - 0xF6F1E700, 0xF6EFFE00, 0xF6EE1500, - 0xF6EC2C00, 0xF6EA4300, 0xF6E85A00, - 0xF6E67100, 0xF6E48800, 0xF6E29F00, - 0xF6E0B600, 0xF6DECD00, 0xF6DCE400, - 0xF6DAFB00, 0xF6D91200, 0xF6D72900, - 0xF6D54000, 0xF6D35700, 0xF6D16E00, - 0xF6CF8500, 0xF6CD9C00, 0xF6CBB300, - 0xF6C9CA00, 0xF6C7E100, 0xF6C5F800, - 0xF6C40F00, 0xF6C22600, 0xF6C03D00, - 0xF6BE5400, 0xF6BC6B00, 0xF6BA8200, - 0xF6B89900, 0xF6B6B000, 0xF6B4C700, - 0xF6B2DE00, 0xF6B0F500, 0xF6AF0C00, - 0xF6AD2300, 0xF6AB3A00, 0xF6A95100, - 0xF6A76800, 0xF6A57F00, 0xF6A39600, - 0xF6A1AD00, 0xF69FC400, 0xF69DDB00, - 0xF69BF200, 0xF69A0900, 0xF6982000, - 0xF6963700, 0xF6944E00, 0xF6926500, - 0xF6907C00, 0xF68E9300, 0xF68CAA00, - 0xF68AC100, 0xF688D800, 0xF686EF00, - 0xF6850600, 0xF6831D00, 0xF6813400, - 0xF67F4B00, 0xF67D6200, 0xF67B7900, - 0xF6799000, 0xF677A700, 0xF675BE00, - 0xF673D500, 0xF671EC00, 0xF6700300, - 0xF66E1A00, 0xF66C3100, 0xF66A4800, - 0xF6685F00, 0xF6667600, 0xF6648D00, - 0xF662A400, 0xF660BB00, 0xF65ED200, - 0xF65CE900, 0xF65B0000, 0xF6591700, - 0xF6572E00, 0xF6554500, 0xF6535C00, - 0xF6517300, 0xF64F8A00, 0xF64DA100, - 0xF64BB800, 0xF649CF00, 0xF647E600, - 0xF645FD00, 0xF6441400, 0xF6422B00, - 0xF6404200, 0xF63E5900, 0xF63C7000, - 0xF63A8700, 0xF6389E00, 0xF636B500, - 0xF634CC00, 0xF632E300, 0xF630FA00, - 0xF62F1100, 0xF62D2800, 0xF62B3F00, - 0xF6295600, 0xF6276D00, 0xF6258400, - 0xF6239B00, 0xF621B200, 0xF61FC900, - 0xF61DE000, 0xF61BF700, 0xF61A0E00, - 0xF6182500, 0xF6163C00, 0xF6145300, - 0xF6126A00, 0xF6108100, 0xF60E9800, - 0xF60CAF00, 0xF60AC600, 0xF608DD00, - 0xF606F400, 0xF6050B00, 0xF6032200, - 0xF6013900, 0xF5FF5000, 0xF5FD6700, - 0xF5FB7E00, 0xF5F99500, 0xF5F7AC00, - 0xF5F5C300, 0xF5F3DA00, 0xF5F1F100, - 0xF5F00800, 0xF5EE1F00, 0xF5EC3600, - 0xF5EA4D00, 0xF5E86400, 0xF5E67B00, - 0xF5E49200, 0xF5E2A900, 0xF5E0C000, - 0xF5DED700, 0xF5DCEE00, 0xF5DB0500, - 0xF5D91C00, 0xF5D73300, 0xF5D54A00, - 0xF5D36100, 0xF5D17800, 0xF5CF8F00, - 0xF5CDA600, 0xF5CBBD00, 0xF5C9D400, - 0xF5C7EB00, 0xF5C60200, 0xF5C41900, - 0xF5C23000, 0xF5C04700, 0xF5BE5E00, - 0xF5BC7500, 0xF5BA8C00, 0xF5B8A300, - 0xF5B6BA00, 0xF5B4D100, 0xF5B2E800, - 0xF5B0FF00, 0xF5AF1600, 0xF5AD2D00, - 0xF5AB4400, 0xF5A95B00, 0xF5A77200, - 0xF5A58900, 0xF5A3A000, 0xF5A1B700, - 0xF59FCE00, 0xF59DE500, 0xF59BFC00, - 0xF59A1300, 0xF5982A00, 0xF5964100, - 0xF5945800, 0xF5926F00, 0xF5908600, - 0xF58E9D00, 0xF58CB400, 0xF58ACB00, - 0xF588E200, 0xF586F900, 0xF5851000, - 0xF5832700, 0xF5813E00, 0xF57F5500, - 0xF57D6C00, 0xF57B8300, 0xF5799A00, - 0xF577B100, 0xF575C800, 0xF573DF00, - 0xF571F600, 0xF5700D00, 0xF56E2400, - 0xF56C3B00, 0xF56A5200, 0xF5686900, - 0xF5668000, 0xF5649700, 0xF562AE00, - 0xF560C500, 0xF55EDC00, 0xF55CF300, - 0xF55B0A00, 0xF5592100, 0xF5573800, - 0xF5554F00, 0xF5536600, 0xF5517D00, - 0xF54F9400, 0xF54DAB00, 0xF54BC200, - 0xF549D900, 0xF547F000, 0xF5460700, - 0xF5441E00, 0xF5423500, 0xF5404C00, - 0xF53E6300, 0xF53C7A00, 0xF53A9100, - 0xF538A800, 0xF536BF00, 0xF534D600, - 0xF532ED00, 0xF5310400, 0xF52F1B00, - 0xF52D3200, 0xF52B4900, 0xF5296000, - 0xF5277700, 0xF5258E00, 0xF523A500, - 0xF521BC00, 0xF51FD300, 0xF51DEA00, - 0xF51C0100, 0xF51A1800, 0xF5182F00, - 0xF5164600, 0xF5145D00, 0xF5127400, - 0xF5108B00, 0xF50EA200, 0xF50CB900, - 0xF50AD000, 0xF508E700, 0xF506FE00, - 0xF5051500, 0xF5032C00, 0xF5014300, - 0xF4FF5A00, 0xF4FD7100, 0xF4FB8800, - 0xF4F99F00, 0xF4F7B600, 0xF4F5CD00, - 0xF4F3E400, 0xF4F1FB00, 0xF4F01200, - 0xF4EE2900, 0xF4EC4000, 0xF4EA5700, - 0xF4E86E00, 0xF4E68500, 0xF4E49C00, - 0xF4E2B300, 0xF4E0CA00, 0xF4DEE100, - 0xF4DCF800, 0xF4DB0F00, 0xF4D92600, - 0xF4D73D00, 0xF4D55400, 0xF4D36B00, - 0xF4D18200, 0xF4CF9900, 0xF4CDB000, - 0xF4CBC700, 0xF4C9DE00, 0xF4C7F500, - 0xF4C60C00, 0xF4C42300, 0xF4C23A00, - 0xF4C05100, 0xF4BE6800, 0xF4BC7F00, - 0xF4BA9600, 0xF4B8AD00, 0xF4B6C400, - 0xF4B4DB00, 0xF4B2F200, 0xF4B10900, - 0xF4AF2000, 0xF4AD3700, 0xF4AB4E00, - 0xF4A96500, 0xF4A77C00, 0xF4A59300, - 0xF4A3AA00, 0xF4A1C100, 0xF49FD800, - 0xF49DEF00, 0xF49C0600, 0xF49A1D00, - 0xF4983400, 0xF4964B00, 0xF4946200, - 0xF4927900, 0xF4909000, 0xF48EA700, - 0xF48CBE00, 0xF48AD500, 0xF488EC00, - 0xF4870300, 0xF4851A00, 0xF4833100, - 0xF4814800, 0xF47F5F00, 0xF47D7600, - 0xF47B8D00, 0xF479A400, 0xF477BB00, - 0xF475D200, 0xF473E900, 0xF4720000, - 0xF4701700, 0xF46E2E00, 0xF46C4500, - 0xF46A5C00, 0xF4687300, 0xF4668A00, - 0xF464A100, 0xF462B800, 0xF460CF00, - 0xF45EE600, 0xF45CFD00, 0xF45B1400, - 0xF4592B00, 0xF4574200, 0xF4555900, - 0xF4537000, 0xF4518700, 0xF44F9E00, - 0xF44DB500, 0xF44BCC00, 0xF449E300, - 0xF447FA00, 0xF4461100, 0xF4442800, - 0xF4423F00, 0xF4405600, 0xF43E6D00, - 0xF43C8400, 0xF43A9B00, 0xF438B200, - 0xF436C900, 0xF434E000, 0xF432F700, - 0xF4310E00, 0xF42F2500, 0xF42D3C00, - 0xF42B5300, 0xF4296A00, 0xF4278100, - 0xF4259800, 0xF423AF00, 0xF421C600, - 0xF41FDD00, 0xF41DF400, 0xF41C0B00, - 0xF41A2200, 0xF4183900, 0xF4165000, - 0xF4146700, 0xF4127E00, 0xF4109500, - 0xF40EAC00, 0xF40CC300, 0xF40ADA00, - 0xF408F100, 0xF4070800, 0xF4051F00, - 0xF4033600, 0xF4014D00, 0xF3FF6400, - 0xF3FD7B00, 0xF3FB9200, 0xF3F9A900, - 0xF3F7C000, 0xF3F5D700, 0xF3F3EE00, - 0xF3F20500, 0xF3F01C00, 0xF3EE3300, - 0xF3EC4A00, 0xF3EA6100, 0xF3E87800, - 0xF3E68F00, 0xF3E4A600, 0xF3E2BD00, - 0xF3E0D400, 0xF3DEEB00, 0xF3DD0200, - 0xF3DB1900, 0xF3D93000, 0xF3D74700, - 0xF3D55E00, 0xF3D37500, 0xF3D18C00, - 0xF3CFA300, 0xF3CDBA00, 0xF3CBD100, - 0xF3C9E800, 0xF3C7FF00, 0xF3C61600, - 0xF3C42D00, 0xF3C24400, 0xF3C05B00, - 0xF3BE7200, 0xF3BC8900, 0xF3BAA000, - 0xF3B8B700, 0xF3B6CE00, 0xF3B4E500, - 0xF3B2FC00, 0xF3B11300, 0xF3AF2A00, - 0xF3AD4100, 0xF3AB5800, 0xF3A96F00, - 0xF3A78600, 0xF3A59D00, 0xF3A3B400, - 0xF3A1CB00, 0xF39FE200, 0xF39DF900, - 0xF39C1000, 0xF39A2700, 0xF3983E00, - 0xF3965500, 0xF3946C00, 0xF3928300, - 0xF3909A00, 0xF38EB100, 0xF38CC800, - 0xF38ADF00, 0xF388F600, 0xF3870D00, - 0xF3852400, 0xF3833B00, 0xF3815200, - 0xF37F6900, 0xF37D8000, 0xF37B9700, - 0xF379AE00, 0xF377C500, 0xF375DC00, - 0xF373F300, 0xF3720A00, 0xF3702100, - 0xF36E3800, 0xF36C4F00, 0xF36A6600, - 0xF3687D00, 0xF3669400, 0xF364AB00, - 0xF362C200, 0xF360D900, 0xF35EF000, - 0xF35D0700, 0xF35B1E00, 0xF3593500, - 0xF3574C00, 0xF3556300, 0xF3537A00, - 0xF3519100, 0xF34FA800, 0xF34DBF00, - 0xF34BD600, 0xF349ED00, 0xF3480400, - 0xF3461B00, 0xF3443200, 0xF3424900, - 0xF3406000, 0xF33E7700, 0xF33C8E00, - 0xF33AA500, 0xF338BC00, 0xF336D300, - 0xF334EA00, 0xF3330100, 0xF3311800, - 0xF32F2F00, 0xF32D4600, 0xF32B5D00, - 0xF3297400, 0xF3278B00, 0xF325A200, - 0xF323B900, 0xF321D000, 0xF31FE700, - 0xF31DFE00, 0xF31C1500, 0xF31A2C00, - 0xF3184300, 0xF3165A00, 0xF3147100, - 0xF3128800, 0xF3109F00, 0xF30EB600, - 0xF30CCD00, 0xF30AE400, 0xF308FB00, - 0xF3071200, 0xF3052900, 0xF3034000, - 0xF3015700, 0xF2FF6E00, 0xF2FD8500, - 0xF2FB9C00, 0xF2F9B300, 0xF2F7CA00, - 0xF2F5E100, 0xF2F3F800, 0xF2F20F00, - 0xF2F02600, 0xF2EE3D00, 0xF2EC5400, - 0xF2EA6B00, 0xF2E88200, 0xF2E69900, - 0xF2E4B000, 0xF2E2C700, 0xF2E0DE00, - 0xF2DEF500, 0xF2DD0C00, 0xF2DB2300, - 0xF2D93A00, 0xF2D75100, 0xF2D56800, - 0xF2D37F00, 0xF2D19600, 0xF2CFAD00, - 0xF2CDC400, 0xF2CBDB00, 0xF2C9F200, - 0xF2C80900, 0xF2C62000, 0xF2C43700, - 0xF2C24E00, 0xF2C06500, 0xF2BE7C00, - 0xF2BC9300, 0xF2BAAA00, 0xF2B8C100, - 0xF2B6D800, 0xF2B4EF00, 0xF2B30600, - 0xF2B11D00, 0xF2AF3400, 0xF2AD4B00, - 0xF2AB6200, 0xF2A97900, 0xF2A79000, - 0xF2A5A700, 0xF2A3BE00, 0xF2A1D500, - 0xF29FEC00, 0xF29E0300, 0xF29C1A00, - 0xF29A3100, 0xF2984800, 0xF2965F00, - 0xF2947600, 0xF2928D00, 0xF290A400, - 0xF28EBB00, 0xF28CD200, 0xF28AE900, - 0xF2890000, 0xF2871700, 0xF2852E00, - 0xF2834500, 0xF2815C00, 0xF27F7300, - 0xF27D8A00, 0xF27BA100, 0xF279B800, - 0xF277CF00, 0xF275E600, 0xF273FD00, - 0xF2721400, 0xF2702B00, 0xF26E4200, - 0xF26C5900, 0xF26A7000, 0xF2688700, - 0xF2669E00, 0xF264B500, 0xF262CC00, - 0xF260E300, 0xF25EFA00, 0xF25D1100, - 0xF25B2800, 0xF2593F00, 0xF2575600, - 0xF2556D00, 0xF2538400, 0xF2519B00, - 0xF24FB200, 0xF24DC900, 0xF24BE000, - 0xF249F700, 0xF2480E00, 0xF2462500, - 0xF2443C00, 0xF2425300, 0xF2406A00, - 0xF23E8100, 0xF23C9800, 0xF23AAF00, - 0xF238C600, 0xF236DD00, 0xF234F400, - 0xF2330B00, 0xF2312200, 0xF22F3900, - 0xF22D5000, 0xF22B6700, 0xF2297E00, - 0xF2279500, 0xF225AC00, 0xF223C300, - 0xF221DA00, 0xF21FF100, 0xF21E0800, - 0xF21C1F00, 0xF21A3600, 0xF2184D00, - 0xF2166400, 0xF2147B00, 0xF2129200, - 0xF210A900, 0xF20EC000, 0xF20CD700, - 0xF20AEE00, 0xF2090500, 0xF2071C00, - 0xF2053300, 0xF2034A00, 0xF2016100, - 0xF1FF7800, 0xF1FD8F00, 0xF1FBA600, - 0xF1F9BD00, 0xF1F7D400, 0xF1F5EB00, - 0xF1F40200, 0xF1F21900, 0xF1F03000, - 0xF1EE4700, 0xF1EC5E00, 0xF1EA7500, - 0xF1E88C00, 0xF1E6A300, 0xF1E4BA00, - 0xF1E2D100, 0xF1E0E800, 0xF1DEFF00, - 0xF1DD1600, 0xF1DB2D00, 0xF1D94400, - 0xF1D75B00, 0xF1D57200, 0xF1D38900, - 0xF1D1A000, 0xF1CFB700, 0xF1CDCE00, - 0xF1CBE500, 0xF1C9FC00, 0xF1C81300, - 0xF1C62A00, 0xF1C44100, 0xF1C25800, - 0xF1C06F00, 0xF1BE8600, 0xF1BC9D00, - 0xF1BAB400, 0xF1B8CB00, 0xF1B6E200, - 0xF1B4F900, 0xF1B31000, 0xF1B12700, - 0xF1AF3E00, 0xF1AD5500, 0xF1AB6C00, - 0xF1A98300, 0xF1A79A00, 0xF1A5B100, - 0xF1A3C800, 0xF1A1DF00, 0xF19FF600, - 0xF19E0D00, 0xF19C2400, 0xF19A3B00, - 0xF1985200, 0xF1966900, 0xF1948000, - 0xF1929700, 0xF190AE00, 0xF18EC500, - 0xF18CDC00, 0xF18AF300, 0xF1890A00, - 0xF1872100, 0xF1853800, 0xF1834F00, - 0xF1816600, 0xF17F7D00, 0xF17D9400, - 0xF17BAB00, 0xF179C200, 0xF177D900, - 0xF175F000, 0xF1740700, 0xF1721E00, - 0xF1703500, 0xF16E4C00, 0xF16C6300, - 0xF16A7A00, 0xF1689100, 0xF166A800, - 0xF164BF00, 0xF162D600, 0xF160ED00, - 0xF15F0400, 0xF15D1B00, 0xF15B3200, - 0xF1594900, 0xF1576000, 0xF1557700, - 0xF1538E00, 0xF151A500, 0xF14FBC00, - 0xF14DD300, 0xF14BEA00, 0xF14A0100, - 0xF1481800, 0xF1462F00, 0xF1444600, - 0xF1425D00, 0xF1407400, 0xF13E8B00, - 0xF13CA200, 0xF13AB900, 0xF138D000, - 0xF136E700, 0xF134FE00, 0xF1331500, - 0xF1312C00, 0xF12F4300, 0xF12D5A00, - 0xF12B7100, 0xF1298800, 0xF1279F00, - 0xF125B600, 0xF123CD00, 0xF121E400, - 0xF11FFB00, 0xF11E1200, 0xF11C2900, - 0xF11A4000, 0xF1185700, 0xF1166E00, - 0xF1148500, 0xF1129C00, 0xF110B300, - 0xF10ECA00, 0xF10CE100, 0xF10AF800, - 0xF1090F00, 0xF1072600, 0xF1053D00, - 0xF1035400, 0xF1016B00, 0xF0FF8200, - 0xF0FD9900, 0xF0FBB000, 0xF0F9C700, - 0xF0F7DE00, 0xF0F5F500, 0xF0F40C00, - 0xF0F22300, 0xF0F03A00, 0xF0EE5100, - 0xF0EC6800, 0xF0EA7F00, 0xF0E89600, - 0xF0E6AD00, 0xF0E4C400, 0xF0E2DB00, - 0xF0E0F200, 0xF0DF0900, 0xF0DD2000, - 0xF0DB3700, 0xF0D94E00, 0xF0D76500, - 0xF0D57C00, 0xF0D39300, 0xF0D1AA00, - 0xF0CFC100, 0xF0CDD800, 0xF0CBEF00, - 0xF0CA0600, 0xF0C81D00, 0xF0C63400, - 0xF0C44B00, 0xF0C26200, 0xF0C07900, - 0xF0BE9000, 0xF0BCA700, 0xF0BABE00, - 0xF0B8D500, 0xF0B6EC00, 0xF0B50300, - 0xF0B31A00, 0xF0B13100, 0xF0AF4800, - 0xF0AD5F00, 0xF0AB7600, 0xF0A98D00, - 0xF0A7A400, 0xF0A5BB00, 0xF0A3D200, - 0xF0A1E900, 0xF0A40000, 0xF0A24000, - 0xF0A08000, 0xF09EC000, 0xF09D0000, - 0xF09B4000, 0xF0998000, 0xF097C000, - 0xF0960000, 0xF0944000, 0xF0928000, - 0xF090C000, 0xF08F0000, 0xF08D4000, - 0xF08B8000, 0xF089C000, 0xF0880000, - 0xF0864000, 0xF0848000, 0xF082C000, - 0xF0810000, 0xF07F4000, 0xF07D8000, - 0xF07BC000, 0xF07A0000, 0xF0784000, - 0xF0768000, 0xF074C000, 0xF0730000, - 0xF0714000, 0xF06F8000, 0xF06DC000, - 0xF06C0000, 0xF06A4000, 0xF0688000, - 0xF066C000, 0xF0650000, 0xF0634000, - 0xF0618000, 0xF05FC000, 0xF05E0000, - 0xF05C4000, 0xF05A8000, 0xF058C000, - 0xF0570000, 0xF0554000, 0xF0538000, - 0xF051C000, 0xF0500000, 0xF04E4000, - 0xF04C8000, 0xF04AC000, 0xF0490000, - 0xF0474000, 0xF0458000, 0xF043C000, - 0xF0420000, 0xF0404000, 0xF03E8000, - 0xF03CC000, 0xF03B0000, 0xF0394000, - 0xF0378000, 0xF035C000, 0xF0340000, - 0xF0324000, 0xF0308000, 0xF02EC000, - 0xF02D0000, 0xF02B4000, 0xF0298000, - 0xF027C000, 0xF0260000, 0xF0244000, - 0xF0228000, 0xF020C000, 0xF01F0000, - 0xF01D4000, 0xF01B8000, 0xF019C000, - 0xF0180000, 0xF0164000, 0xF0148000, - 0xF012C000, 0xF0110000, 0xF00F4000, - 0xF00D8000, 0xF00BC000, 0xF00A0000, - 0xF0084000, 0xF0068000, 0xF004C000, - 0xF0030000, 0xF0014000, 0xEFFF8000, - 0xEFFDC000, 0xEFFC0000, 0xEFFA4000, - 0xEFF88000, 0xEFF6C000, 0xEFF50000, - 0xEFF34000, 0xEFF18000, 0xEFEFC000, - 0xEFEE0000, 0xEFEC4000, 0xEFEA8000, - 0xEFE8C000, 0xEFE70000, 0xEFE54000, - 0xEFE38000, 0xEFE1C000, 0xEFE00000, - 0xEFDE4000, 0xEFDC8000, 0xEFDAC000, - 0xEFD90000, 0xEFD74000, 0xEFD58000, - 0xEFD3C000, 0xEFD20000, 0xEFD04000, - 0xEFCE8000, 0xEFCCC000, 0xEFCB0000, - 0xEFC94000, 0xEFC78000, 0xEFC5C000, - 0xEFC40000, 0xEFC24000, 0xEFC08000, - 0xEFBEC000, 0xEFBD0000, 0xEFBB4000, - 0xEFB98000, 0xEFB7C000, 0xEFB60000, - 0xEFB44000, 0xEFB28000, 0xEFB0C000, - 0xEFAF0000, 0xEFAD4000, 0xEFAB8000, - 0xEFA9C000, 0xEFA80000, 0xEFA64000, - 0xEFA48000, 0xEFA2C000, 0xEFA10000, - 0xEF9F4000, 0xEF9D8000, 0xEF9BC000, - 0xEF9A0000, 0xEF984000, 0xEF968000, - 0xEF94C000, 0xEF930000, 0xEF914000, - 0xEF8F8000, 0xEF8DC000, 0xEF8C0000, - 0xEF8A4000, 0xEF888000, 0xEF86C000, - 0xEF850000, 0xEF834000, 0xEF818000, - 0xEF7FC000, 0xEF7E0000, 0xEF7C4000, - 0xEF7A8000, 0xEF78C000, 0xEF770000, - 0xEF754000, 0xEF738000, 0xEF71C000, - 0xEF700000, 0xEF6E4000, 0xEF6C8000, - 0xEF6AC000, 0xEF690000, 0xEF674000, - 0xEF658000, 0xEF63C000, 0xEF620000, - 0xEF604000, 0xEF5E8000, 0xEF5CC000, - 0xEF5B0000, 0xEF594000, 0xEF578000, - 0xEF55C000, 0xEF540000, 0xEF524000, - 0xEF508000, 0xEF4EC000, 0xEF4D0000, - 0xEF4B4000, 0xEF498000, 0xEF47C000, - 0xEF460000, 0xEF444000, 0xEF428000, - 0xEF40C000, 0xEF3F0000, 0xEF3D4000, - 0xEF3B8000, 0xEF39C000, 0xEF380000, - 0xEF364000, 0xEF348000, 0xEF32C000, - 0xEF310000, 0xEF2F4000, 0xEF2D8000, - 0xEF2BC000, 0xEF2A0000, 0xEF284000, - 0xEF268000, 0xEF24C000, 0xEF230000, - 0xEF214000, 0xEF1F8000, 0xEF1DC000, - 0xEF1C0000, 0xEF1A4000, 0xEF188000, - 0xEF16C000, 0xEF150000, 0xEF134000, - 0xEF118000, 0xEF0FC000, 0xEF0E0000, - 0xEF0C4000, 0xEF0A8000, 0xEF08C000, - 0xEF070000, 0xEF054000, 0xEF038000, - 0xEF01C000, 0xEF000000, 0xEEFE4000, - 0xEEFC8000, 0xEEFAC000, 0xEEF90000, - 0xEEF74000, 0xEEF58000, 0xEEF3C000, - 0xEEF20000, 0xEEF04000, 0xEEEE8000, - 0xEEECC000, 0xEEEB0000, 0xEEE94000, - 0xEEE78000, 0xEEE5C000, 0xEEE40000, - 0xEEE24000, 0xEEE08000, 0xEEDEC000, - 0xEEDD0000, 0xEEDB4000, 0xEED98000, - 0xEED7C000, 0xEED60000, 0xEED44000, - 0xEED28000, 0xEED0C000, 0xEECF0000, - 0xEECD4000, 0xEECB8000, 0xEEC9C000, - 0xEEC80000, 0xEEC64000, 0xEEC48000, - 0xEEC2C000, 0xEEC10000, 0xEEBF4000, - 0xEEBD8000, 0xEEBBC000, 0xEEBA0000, - 0xEEB84000, 0xEEB68000, 0xEEB4C000, - 0xEEB30000, 0xEEB14000, 0xEEAF8000, - 0xEEADC000, 0xEEAC0000, 0xEEAA4000, - 0xEEA88000, 0xEEA6C000, 0xEEA50000, - 0xEEA34000, 0xEEA18000, 0xEE9FC000, - 0xEE9E0000, 0xEE9C4000, 0xEE9A8000, - 0xEE98C000, 0xEE970000, 0xEE954000, - 0xEE938000, 0xEE91C000, 0xEE900000, - 0xEE8E4000, 0xEE8C8000, 0xEE8AC000, - 0xEE890000, 0xEE874000, 0xEE858000, - 0xEE83C000, 0xEE820000, 0xEE804000, - 0xEE7E8000, 0xEE7CC000, 0xEE7B0000, - 0xEE794000, 0xEE778000, 0xEE75C000, - 0xEE740000, 0xEE724000, 0xEE708000, - 0xEE6EC000, 0xEE6D0000, 0xEE6B4000, - 0xEE698000, 0xEE67C000, 0xEE660000, - 0xEE644000, 0xEE628000, 0xEE60C000, - 0xEE5F0000, 0xEE5D4000, 0xEE5B8000, - 0xEE59C000, 0xEE580000, 0xEE564000, - 0xEE548000, 0xEE52C000, 0xEE510000, - 0xEE4F4000, 0xEE4D8000, 0xEE4BC000, - 0xEE4A0000, 0xEE484000, 0xEE468000, - 0xEE44C000, 0xEE430000, 0xEE414000, - 0xEE3F8000, 0xEE3DC000, 0xEE3C0000, - 0xEE3A4000, 0xEE388000, 0xEE36C000, - 0xEE350000, 0xEE334000, 0xEE318000, - 0xEE2FC000, 0xEE2E0000, 0xEE2C4000, - 0xEE2A8000, 0xEE28C000, 0xEE270000, - 0xEE254000, 0xEE238000, 0xEE21C000, - 0xEE200000, 0xEE1E4000, 0xEE1C8000, - 0xEE1AC000, 0xEE190000, 0xEE174000, - 0xEE158000, 0xEE13C000, 0xEE120000, - 0xEE104000, 0xEE0E8000, 0xEE0CC000, - 0xEE0B0000, 0xEE094000, 0xEE078000, - 0xEE05C000, 0xEE040000, 0xEE024000, - 0xEE008000, 0xEDFEC000, 0xEDFD0000, - 0xEDFB4000, 0xEDF98000, 0xEDF7C000, - 0xEDF60000, 0xEDF44000, 0xEDF28000, - 0xEDF0C000, 0xEDEF0000, 0xEDED4000, - 0xEDEB8000, 0xEDE9C000, 0xEDE80000, - 0xEDE64000, 0xEDE48000, 0xEDE2C000, - 0xEDE10000, 0xEDDF4000, 0xEDDD8000, - 0xEDDBC000, 0xEDDA0000, 0xEDD84000, - 0xEDD68000, 0xEDD4C000, 0xEDD30000, - 0xEDD14000, 0xEDCF8000, 0xEDCDC000, - 0xEDCC0000, 0xEDCA4000, 0xEDC88000, - 0xEDC6C000, 0xEDC50000, 0xEDC34000, - 0xEDC18000, 0xEDBFC000, 0xEDBE0000, - 0xEDBC4000, 0xEDBA8000, 0xEDB8C000, - 0xEDB70000, 0xEDB54000, 0xEDB38000, - 0xEDB1C000, 0xEDB00000, 0xEDAE4000, - 0xEDAC8000, 0xEDAAC000, 0xEDA90000, - 0xEDA74000, 0xEDA58000, 0xEDA3C000, - 0xEDA20000, 0xEDA04000, 0xED9E8000, - 0xED9CC000, 0xED9B0000, 0xED994000, - 0xED978000, 0xED95C000, 0xED940000, - 0xED924000, 0xED908000, 0xED8EC000, - 0xED8D0000, 0xED8B4000, 0xED898000, - 0xED87C000, 0xED860000, 0xED844000, - 0xED828000, 0xED80C000, 0xED7F0000, - 0xED7D4000, 0xED7B8000, 0xED79C000, - 0xED780000, 0xED764000, 0xED748000, - 0xED72C000, 0xED710000, 0xED6F4000, - 0xED6D8000, 0xED6BC000, 0xED6A0000, - 0xED684000, 0xED668000, 0xED64C000, - 0xED630000, 0xED614000, 0xED5F8000, - 0xED5DC000, 0xED5C0000, 0xED5A4000, - 0xED588000, 0xED56C000, 0xED550000, - 0xED534000, 0xED518000, 0xED4FC000, - 0xED4E0000, 0xED4C4000, 0xED4A8000, - 0xED48C000, 0xED470000, 0xED454000, - 0xED438000, 0xED41C000, 0xED400000, - 0xED3E4000, 0xED3C8000, 0xED3AC000, - 0xED390000, 0xED374000, 0xED358000, - 0xED33C000, 0xED320000, 0xED304000, - 0xED2E8000, 0xED2CC000, 0xED2B0000, - 0xED294000, 0xED278000, 0xED25C000, - 0xED240000, 0xED224000, 0xED208000, - 0xED1EC000, 0xED1D0000, 0xED1B4000, - 0xED198000, 0xED17C000, 0xED160000, - 0xED144000, 0xED128000, 0xED10C000, - 0xED0F0000, 0xED0D4000, 0xED0B8000, - 0xED09C000, 0xED080000, 0xED064000, - 0xED048000, 0xED02C000, 0xED010000, - 0xECFF4000, 0xECFD8000, 0xECFBC000, - 0xECFA0000, 0xECF84000, 0xECF68000, - 0xECF4C000, 0xECF30000, 0xECF14000, - 0xECEF8000, 0xECEDC000, 0xECEC0000, - 0xECEA4000, 0xECE88000, 0xECE6C000, - 0xECE50000, 0xECE34000, 0xECE18000, - 0xECDFC000, 0xECDE0000, 0xECDC4000, - 0xECDA8000, 0xECD8C000, 0xECD70000, - 0xECD54000, 0xECD38000, 0xECD1C000, - 0xECD00000, 0xECCE4000, 0xECCC8000, - 0xECCAC000, 0xECC90000, 0xECC74000, - 0xECC58000, 0xECC3C000, 0xECC20000, - 0xECC04000, 0xECBE8000, 0xECBCC000, - 0xECBB0000, 0xECB94000, 0xECB78000, - 0xECB5C000, 0xECB40000, 0xECB24000, - 0xECB08000, 0xECAEC000, 0xECAD0000, - 0xECAB4000, 0xECA98000, 0xECA7C000, - 0xECA60000, 0xECA44000, 0xECA28000, - 0xECA0C000, 0xEC9F0000, 0xEC9D4000, - 0xEC9B8000, 0xEC99C000, 0xEC980000, - 0xEC964000, 0xEC948000, 0xEC92C000, - 0xEC910000, 0xEC8F4000, 0xEC8D8000, - 0xEC8BC000, 0xEC8A0000, 0xEC884000, - 0xEC868000, 0xEC84C000, 0xEC830000, - 0xEC814000, 0xEC7F8000, 0xEC7DC000, - 0xEC7C0000, 0xEC7A4000, 0xEC788000, - 0xEC76C000, 0xEC750000, 0xEC734000, - 0xEC718000, 0xEC6FC000, 0xEC6E0000, - 0xEC6C4000, 0xEC6A8000, 0xEC68C000, - 0xEC670000, 0xEC654000, 0xEC638000, - 0xEC61C000, 0xEC600000, 0xEC5E4000, - 0xEC5C8000, 0xEC5AC000, 0xEC590000, - 0xEC574000, 0xEC558000, 0xEC53C000, - 0xEC520000, 0xEC504000, 0xEC4E8000, - 0xEC4CC000, 0xEC4B0000, 0xEC494000, - 0xEC478000, 0xEC45C000, 0xEC440000, - 0xEC424000, 0xEC408000, 0xEC3EC000, - 0xEC3D0000, 0xEC3B4000, 0xEC398000, - 0xEC37C000, 0xEC360000, 0xEC344000, - 0xEC328000, 0xEC30C000, 0xEC2F0000, - 0xEC2D4000, 0xEC2B8000, 0xEC29C000, - 0xEC280000, 0xEC264000, 0xEC248000, - 0xEC22C000, 0xEC210000, 0xEC1F4000, - 0xEC1D8000, 0xEC1BC000, 0xEC1A0000, - 0xEC184000, 0xEC168000, 0xEC14C000, - 0xEC130000, 0xEC114000, 0xEC0F8000, - 0xEC0DC000, 0xEC0C0000, 0xEC0A4000, - 0xEC088000, 0xEC06C000, 0xEC050000, - 0xEC034000, 0xEC018000, 0xEBFFC000, - 0xEBFE0000, 0xEBFC4000, 0xEBFA8000, - 0xEBF8C000, 0xEBF70000, 0xEBF54000, - 0xEBF38000, 0xEBF1C000, 0xEBF00000, - 0xEBEE4000, 0xEBEC8000, 0xEBEAC000, - 0xEBE90000, 0xEBE74000, 0xEBE58000, - 0xEBE3C000, 0xEBE20000, 0xEBE04000, - 0xEBDE8000, 0xEBDCC000, 0xEBDB0000, - 0xEBD94000, 0xEBD78000, 0xEBD5C000, - 0xEBD40000, 0xEBD24000, 0xEBD08000, - 0xEBCEC000, 0xEBCD0000, 0xEBCB4000, - 0xEBC98000, 0xEBC7C000, 0xEBC60000, - 0xEBC44000, 0xEBC28000, 0xEBC0C000, - 0xEBBF0000, 0xEBBD4000, 0xEBBB8000, - 0xEBB9C000, 0xEBB80000, 0xEBB64000, - 0xEBB48000, 0xEBB2C000, 0xEBB10000, - 0xEBAF4000, 0xEBAD8000, 0xEBABC000, - 0xEBAA0000, 0xEBA84000, 0xEBA68000, - 0xEBA4C000, 0xEBA30000, 0xEBA14000, - 0xEB9F8000, 0xEB9DC000, 0xEB9C0000, - 0xEB9A4000, 0xEB988000, 0xEB96C000, - 0xEB950000, 0xEB934000, 0xEB918000, - 0xEB8FC000, 0xEB8E0000, 0xEB8C4000, - 0xEB8A8000, 0xEB88C000, 0xEB870000, - 0xEB854000, 0xEB838000, 0xEB81C000, - 0xEB800000, 0xEB7E4000, 0xEB7C8000, - 0xEB7AC000, 0xEB790000, 0xEB774000, - 0xEB758000, 0xEB73C000, 0xEB720000, - 0xEB704000, 0xEB6E8000, 0xEB6CC000, - 0xEB6B0000, 0xEB694000, 0xEB678000, - 0xEB65C000, 0xEB640000, 0xEB624000, - 0xEB608000, 0xEB5EC000, 0xEB5D0000, - 0xEB5B4000, 0xEB598000, 0xEB57C000, - 0xEB560000, 0xEB544000, 0xEB528000, - 0xEB50C000, 0xEB4F0000, 0xEB4D4000, - 0xEB4B8000, 0xEB49C000, 0xEB480000, - 0xEB464000, 0xEB448000, 0xEB42C000, - 0xEB410000, 0xEB3F4000, 0xEB3D8000, - 0xEB3BC000, 0xEB3A0000, 0xEB384000, - 0xEB368000, 0xEB34C000, 0xEB330000, - 0xEB314000, 0xEB2F8000, 0xEB2DC000, - 0xEB2C0000, 0xEB2A4000, 0xEB288000, - 0xEB26C000, 0xEB250000, 0xEB234000, - 0xEB218000, 0xEB1FC000, 0xEB1E0000, - 0xEB1C4000, 0xEB1A8000, 0xEB18C000, - 0xEB170000, 0xEB154000, 0xEB138000, - 0xEB11C000, 0xEB100000, 0xEB0E4000, - 0xEB0C8000, 0xEB0AC000, 0xEB090000, - 0xEB074000, 0xEB058000, 0xEB03C000, - 0xEB020000, 0xEB004000, 0xEAFE8000, - 0xEAFCC000, 0xEAFB0000, 0xEAF94000, - 0xEAF78000, 0xEAF5C000, 0xEAF40000, - 0xEAF24000, 0xEAF08000, 0xEAEEC000, - 0xEAED0000, 0xEAEB4000, 0xEAE98000, - 0xEAE7C000, 0xEAE60000, 0xEAE44000, - 0xEAE28000, 0xEAE0C000, 0xEADF0000, - 0xEADD4000, 0xEADB8000, 0xEAD9C000, - 0xEAD80000, 0xEAD64000, 0xEAD48000, - 0xEAD2C000, 0xEAD10000, 0xEACF4000, - 0xEACD8000, 0xEACBC000, 0xEACA0000, - 0xEAC84000, 0xEAC68000, 0xEAC4C000, - 0xEAC30000, 0xEAC14000, 0xEABF8000, - 0xEABDC000, 0xEABC0000, 0xEABA4000, - 0xEAB88000, 0xEAB6C000, 0xEAB50000, - 0xEAB34000, 0xEAB18000, 0xEAAFC000, - 0xEAAE0000, 0xEAAC4000, 0xEAAA8000, - 0xEAA8C000, 0xEAA70000, 0xEAA54000, - 0xEAA38000, 0xEAA1C000, 0xEAA00000, - 0xEA9E4000, 0xEA9C8000, 0xEA9AC000, - 0xEA990000, 0xEA974000, 0xEA958000, - 0xEA93C000, 0xEA920000, 0xEA904000, - 0xEA8E8000, 0xEA8CC000, 0xEA8B0000, - 0xEA894000, 0xEA878000, 0xEA85C000, - 0xEA840000, 0xEA824000, 0xEA808000, - 0xEA7EC000, 0xEA7D0000, 0xEA7B4000, - 0xEA798000, 0xEA77C000, 0xEA760000, - 0xEA744000, 0xEA728000, 0xEA70C000, - 0xEA6F0000, 0xEA6D4000, 0xEA6B8000, - 0xEA69C000, 0xEA680000, 0xEA664000, - 0xEA648000, 0xEA62C000, 0xEA610000, - 0xEA5F4000, 0xEA5D8000, 0xEA5BC000, - 0xEA5A0000, 0xEA584000, 0xEA568000, - 0xEA54C000, 0xEA530000, 0xEA514000, - 0xEA4F8000, 0xEA4DC000, 0xEA4C0000, - 0xEA4A4000, 0xEA488000, 0xEA46C000, - 0xEA450000, 0xEA434000, 0xEA418000, - 0xEA3FC000, 0xEA3E0000, 0xEA3C4000, - 0xEA3A8000, 0xEA38C000, 0xEA370000, - 0xEA354000, 0xEA338000, 0xEA31C000, - 0xEA300000, 0xEA2E4000, 0xEA2C8000, - 0xEA2AC000, 0xEA290000, 0xEA274000, - 0xEA258000, 0xEA23C000, 0xEA220000, - 0xEA204000, 0xEA1E8000, 0xEA1CC000, - 0xEA1B0000, 0xEA194000, 0xEA178000, - 0xEA15C000, 0xEA140000, 0xEA124000, - 0xEA108000, 0xEA0EC000, 0xEA0D0000, - 0xEA0B4000, 0xEA098000, 0xEA07C000, - 0xEA060000, 0xEA044000, 0xEA028000, - 0xEA00C000, 0xE9FF0000, 0xE9FD4000, - 0xE9FB8000, 0xE9F9C000, 0xE9F80000, - 0xE9F64000, 0xE9F48000, 0xE9F2C000, - 0xE9F10000, 0xE9EF4000, 0xE9ED8000, - 0xE9EBC000, 0xE9EA0000, 0xE9E84000, - 0xE9E68000, 0xE9E4C000, 0xE9E30000, - 0xE9E14000, 0xE9DF8000, 0xE9DDC000, - 0xE9DC0000, 0xE9DA4000, 0xE9D88000, - 0xE9D6C000, 0xE9D50000, 0xE9D34000, - 0xE9D18000, 0xE9CFC000, 0xE9CE0000, - 0xE9CC4000, 0xE9CA8000, 0xE9C8C000, - 0xE9C70000, 0xE9C54000, 0xE9C38000, - 0xE9C1C000, 0xE9C00000, 0xE9BE4000, - 0xE9BC8000, 0xE9BAC000, 0xE9B90000, - 0xE9B74000, 0xE9B58000, 0xE9B3C000, - 0xE9B20000, 0xE9B04000, 0xE9AE8000, - 0xE9ACC000, 0xE9AB0000, 0xE9A94000, - 0xE9A78000, 0xE9A5C000, 0xE9A40000, - 0xE9A24000, 0xE9A08000, 0xE99EC000, - 0xE99D0000, 0xE99B4000, 0xE9998000, - 0xE997C000, 0xE9960000, 0xE9944000, - 0xE9928000, 0xE990C000, 0xE98F0000, - 0xE98D4000, 0xE98B8000, 0xE989C000, - 0xE9880000, 0xE9864000, 0xE9848000, - 0xE982C000, 0xE9810000, 0xE97F4000, - 0xE97D8000, 0xE97BC000, 0xE97A0000, - 0xE9784000, 0xE9768000, 0xE974C000, - 0xE9730000, 0xE9714000, 0xE96F8000, - 0xE96DC000, 0xE96C0000, 0xE96A4000, - 0xE9688000, 0xE966C000, 0xE9650000, - 0xE9634000, 0xE9618000, 0xE95FC000, - 0xE95E0000, 0xE95C4000, 0xE95A8000, - 0xE958C000, 0xE9570000, 0xE9554000, - 0xE9538000, 0xE951C000, 0xE9500000, - 0xE94E4000, 0xE94C8000, 0xE94AC000, - 0xE9490000, 0xE9474000, 0xE9458000, - 0xE943C000, 0xE9420000, 0xE9404000, - 0xE93E8000, 0xE93CC000, 0xE93B0000, - 0xE9394000, 0xE9378000, 0xE935C000, - 0xE9340000, 0xE9324000, 0xE9308000, - 0xE92EC000, 0xE92D0000, 0xE92B4000, - 0xE9298000, 0xE927C000, 0xE9260000, - 0xE9244000, 0xE9228000, 0xE920C000, - 0xE91F0000, 0xE91D4000, 0xE91B8000, - 0xE919C000, 0xE9180000, 0xE9164000, - 0xE9148000, 0xE912C000, 0xE9110000, - 0xE90F4000, 0xE90D8000, 0xE90BC000, - 0xE90A0000, 0xE9084000, 0xE9068000, - 0xE904C000, 0xE9030000, 0xE9014000, - 0xE8FF8000, 0xE8FDC000, 0xE8FC0000, - 0xE8FA4000, 0xE8F88000, 0xE8F6C000, - 0xE8F50000, 0xE8F34000, 0xE8F18000, - 0xE8EFC000, 0xE8EE0000, 0xE8EC4000, - 0xE8EA8000, 0xE8E8C000, 0xE8E70000, - 0xE8E54000, 0xE8E38000, 0xE8E1C000, - 0xE8E00000, 0xE8DE4000, 0xE8DC8000, - 0xE8DAC000, 0xE8D90000, 0xE8D74000, - 0xE8D58000, 0xE8D3C000, 0xE8D20000, - 0xE8D04000, 0xE8CE8000, 0xE8CCC000, - 0xE8CB0000, 0xE8C94000, 0xE8C78000, - 0xE8C5C000, 0xE8C40000, 0xE8C24000, - 0xE8C08000, 0xE8BEC000, 0xE8BD0000, - 0xE8BB4000, 0xE8B98000, 0xE8B7C000, - 0xE8B60000, 0xE8B44000, 0xE8B28000, - 0xE8B0C000, 0xE8AF0000, 0xE8AD4000, - 0xE8AB8000, 0xE8A9C000, 0xE8A80000, - 0xE8A64000, 0xE8A48000, 0xE8A2C000, - 0xE8A10000, 0xE89F4000, 0xE89D8000, - 0xE89BC000, 0xE89A0000, 0xE8984000, - 0xE8968000, 0xE894C000, 0xE8930000, - 0xE8914000, 0xE88F8000, 0xE88DC000, - 0xE88C0000, 0xE88A4000, 0xE8888000, - 0xE886C000, 0xE8850000, 0xE8834000, - 0xE8818000, 0xE87FC000, 0xE87E0000, - 0xE87C4000, 0xE87A8000, 0xE878C000, - 0xE8770000, 0xE8754000, 0xE8738000, - 0xE871C000, 0xE8700000, 0xE86E4000, - 0xE86C8000, 0xE86AC000, 0xE8690000, - 0xE8674000, 0xE8658000, 0xE863C000, - 0xE8620000, 0xE8604000, 0xE85E8000, - 0xE85CC000, 0xE85B0000, 0xE8594000, - 0xE8578000, 0xE855C000, 0xE8540000, - 0xE8524000, 0xE8508000, 0xE84EC000, - 0xE84D0000, 0xE84B4000, 0xE8498000, - 0xE847C000, 0xE8460000, 0xE8444000, - 0xE8428000, 0xE840C000, 0xE83F0000, - 0xE83D4000, 0xE83B8000, 0xE839C000, - 0xE8380000, 0xE8364000, 0xE8348000, - 0xE832C000, 0xE8310000, 0xE82F4000, - 0xE82D8000, 0xE82BC000, 0xE82A0000, - 0xE8284000, 0xE8268000, 0xE824C000, - 0xE8230000, 0xE8214000, 0xE81F8000, - 0xE81DC000, 0xE81C0000, 0xE81A4000, - 0xE8188000, 0xE816C000, 0xE8150000, - 0xE8134000, 0xE8118000, 0xE80FC000, - 0xE80E0000, 0xE80C4000, 0xE80A8000, - 0xE808C000, 0xE8070000, 0xE8054000, - 0xE8038000, 0xE801C000, 0xE8000000, - 0xE7FE4000, 0xE7FC8000, 0xE7FAC000, - 0xE7F90000, 0xE7F74000, 0xE7F58000, - 0xE7F3C000, 0xE7F20000, 0xE7F04000, - 0xE7EE8000, 0xE7ECC000, 0xE7EB0000, - 0xE7E94000, 0xE7E78000, 0xE7E5C000, - 0xE7E40000, 0xE7E24000, 0xE7E08000, - 0xE7DEC000, 0xE7DD0000, 0xE7DB4000, - 0xE7D98000, 0xE7D7C000, 0xE7D60000, - 0xE7D44000, 0xE7D28000, 0xE7D0C000, - 0xE7CF0000, 0xE7CD4000, 0xE7CB8000, - 0xE7C9C000, 0xE7C80000, 0xE7C64000, - 0xE7C48000, 0xE7C2C000, 0xE7C10000, - 0xE7BF4000, 0xE7BD8000, 0xE7BBC000, - 0xE7BA0000, 0xE7B84000, 0xE7B68000, - 0xE7B4C000, 0xE7B30000, 0xE7B14000, - 0xE7AF8000, 0xE7ADC000, 0xE7AC0000, - 0xE7AA4000, 0xE7A88000, 0xE7A6C000, - 0xE7A50000, 0xE7A34000, 0xE7A18000, - 0xE79FC000, 0xE79E0000, 0xE79C4000, - 0xE79A8000, 0xE798C000, 0xE7970000, - 0xE7954000, 0xE7938000, 0xE791C000, - 0xE7900000, 0xE78E4000, 0xE78C8000, - 0xE78AC000, 0xE7890000, 0xE7874000, - 0xE7858000, 0xE783C000, 0xE7820000, - 0xE7804000, 0xE77E8000, 0xE77CC000, - 0xE77B0000, 0xE7794000, 0xE7778000, - 0xE775C000, 0xE7740000, 0xE7724000, - 0xE7708000, 0xE76EC000, 0xE76D0000, - 0xE76B4000, 0xE7698000, 0xE767C000, - 0xE7660000, 0xE7644000, 0xE7628000, - 0xE760C000, 0xE75F0000, 0xE75D4000, - 0xE75B8000, 0xE759C000, 0xE7580000, - 0xE7564000, 0xE7548000, 0xE752C000, - 0xE7510000, 0xE74F4000, 0xE74D8000, - 0xE74BC000, 0xE74A0000, 0xE7484000, - 0xE7468000, 0xE744C000, 0xE7430000, - 0xE7414000, 0xE73F8000, 0xE73DC000, - 0xE73C0000, 0xE73A4000, 0xE7388000, - 0xE736C000, 0xE7350000, 0xE7334000, - 0xE7318000, 0xE72FC000, 0xE72E0000, - 0xE72C4000, 0xE72A8000, 0xE728C000, - 0xE7270000, 0xE7254000, 0xE7238000, - 0xE721C000, 0xE7200000, 0xE71E4000, - 0xE71C8000, 0xE71AC000, 0xE7190000, - 0xE7174000, 0xE7158000, 0xE713C000, - 0xE7120000, 0xE7104000, 0xE70E8000, - 0xE70CC000, 0xE70B0000, 0xE7094000, - 0xE7078000, 0xE705C000, 0xE7040000, - 0xE7024000, 0xE7008000, 0xE6FEC000, - 0xE6FD0000, 0xE6FB4000, 0xE6F98000, - 0xE6F7C000, 0xE6F60000, 0xE6F44000, - 0xE6F28000, 0xE6F0C000, 0xE6EF0000, - 0xE6ED4000, 0xE6EB8000, 0xE6E9C000, - 0xE6E80000, 0xE6E64000, 0xE6E48000, - 0xE6E2C000, 0xE6E10000, 0xE6DF4000, - 0xE6DD8000, 0xE6DBC000, 0xE6DA0000, - 0xE6D84000, 0xE6D68000, 0xE6D4C000, - 0xE6D30000, 0xE6D14000, 0xE6CF8000, - 0xE6CDC000, 0xE6CC0000, 0xE6CA4000, - 0xE6C88000, 0xE6C6C000, 0xE6C50000, - 0xE6C34000, 0xE6C18000, 0xE6BFC000, - 0xE6BE0000, 0xE6BC4000, 0xE6BA8000, - 0xE6B8C000, 0xE6B70000, 0xE6B54000, - 0xE6B38000, 0xE6B1C000, 0xE6B00000, - 0xE6AE4000, 0xE6AC8000, 0xE6AAC000, - 0xE6A90000, 0xE6A74000, 0xE6A58000, - 0xE6A3C000, 0xE6A20000, 0xE6A04000, - 0xE69E8000, 0xE69CC000, 0xE69B0000, - 0xE6994000, 0xE6978000, 0xE695C000, - 0xE6940000, 0xE6924000, 0xE6908000, - 0xE68EC000, 0xE68D0000, 0xE68B4000, - 0xE6898000, 0xE687C000, 0xE6860000, - 0xE6844000, 0xE6828000, 0xE680C000, - 0xE67F0000, 0xE67D4000, 0xE67B8000, - 0xE679C000, 0xE6780000, 0xE6764000, - 0xE6748000, 0xE672C000, 0xE6710000, - 0xE66F4000, 0xE66D8000, 0xE66BC000, - 0xE66A0000, 0xE6684000, 0xE6668000, - 0xE664C000, 0xE6630000, 0xE6614000, - 0xE65F8000, 0xE65DC000, 0xE65C0000, - 0xE65A4000, 0xE6588000, 0xE656C000, - 0xE6550000, 0xE6534000, 0xE6518000, - 0xE64FC000, 0xE64E0000, 0xE64C4000, - 0xE64A8000, 0xE648C000, 0xE6470000, - 0xE6454000, 0xE6438000, 0xE641C000, - 0xE6400000, 0xE63E4000, 0xE63C8000, - 0xE63AC000, 0xE6390000, 0xE6374000, - 0xE6358000, 0xE633C000, 0xE6320000, - 0xE6304000, 0xE62E8000, 0xE62CC000, - 0xE62B0000, 0xE6294000, 0xE6278000, - 0xE625C000, 0xE6240000, 0xE6224000, - 0xE6208000, 0xE61EC000, 0xE61D0000, - 0xE61B4000, 0xE6198000, 0xE617C000, - 0xE6160000, 0xE6144000, 0xE6128000, - 0xE610C000, 0xE60F0000, 0xE60D4000, - 0xE60B8000, 0xE609C000, 0xE6080000, - 0xE6064000, 0xE6048000, 0xE602C000, - 0xE6010000, 0xE5FF4000, 0xE5FD8000, - 0xE5FBC000, 0xE5FA0000, 0xE5F84000, - 0xE5F68000, 0xE5F4C000, 0xE5F30000, - 0xE5F14000, 0xE5EF8000, 0xE5EDC000, - 0xE5EC0000, 0xE5EA4000, 0xE5E88000, - 0xE5E6C000, 0xE5E50000, 0xE5E34000, - 0xE5E18000, 0xE5DFC000, 0xE5DE0000, - 0xE5DC4000, 0xE5DA8000, 0xE5D8C000, - 0xE5D70000, 0xE5D54000, 0xE5D38000, - 0xE5D1C000, 0xE5D00000, 0xE5CE4000, - 0xE5CC8000, 0xE5CAC000, 0xE5C90000, - 0xE5C74000, 0xE5C58000, 0xE5C3C000, - 0xE5C20000, 0xE5C04000, 0xE5BE8000, - 0xE5BCC000, 0xE5BB0000, 0xE5B94000, - 0xE5B78000, 0xE5B5C000, 0xE5B40000, - 0xE5B24000, 0xE5B08000, 0xE5AEC000, - 0xE5AD0000, 0xE5AB4000, 0xE5A98000, - 0xE5A7C000, 0xE5A60000, 0xE5A44000, - 0xE5A28000, 0xE5A0C000, 0xE59F0000, - 0xE59D4000, 0xE59B8000, 0xE599C000, - 0xE5980000, 0xE5964000, 0xE5948000, - 0xE592C000, 0xE5910000, 0xE58F4000, - 0xE58D8000, 0xE58BC000, 0xE58A0000, - 0xE5884000, 0xE5868000, 0xE584C000, - 0xE5830000, 0xE5814000, 0xE57F8000, - 0xE57DC000, 0xE57C0000, 0xE57A4000, - 0xE5788000, 0xE576C000, 0xE5750000, - 0xE5734000, 0xE5718000, 0xE56FC000, - 0xE56E0000, 0xE56C4000, 0xE56A8000, - 0xE568C000, 0xE5670000, 0xE5654000, - 0xE5638000, 0xE561C000, 0xE5600000, - 0xE55E4000, 0xE55C8000, 0xE55AC000, - 0xE5590000, 0xE5574000, 0xE5558000, - 0xE553C000, 0xE5520000, 0xE5504000, - 0xE54E8000, 0xE54CC000, 0xE54B0000, - 0xE5494000, 0xE5478000, 0xE545C000, - 0xE5440000, 0xE5424000, 0xE5408000, - 0xE53EC000, 0xE53D0000, 0xE53B4000, - 0xE5398000, 0xE537C000, 0xE5360000, - 0xE5344000, 0xE5328000, 0xE530C000, - 0xE52F0000, 0xE52D4000, 0xE52B8000, - 0xE529C000, 0xE5280000, 0xE5264000, - 0xE5248000, 0xE522C000, 0xE5210000, - 0xE51F4000, 0xE51D8000, 0xE51BC000, - 0xE51A0000, 0xE5184000, 0xE5168000, - 0xE514C000, 0xE5130000, 0xE5114000, - 0xE50F8000, 0xE50DC000, 0xE50C0000, - 0xE50A4000, 0xE5088000, 0xE506C000, - 0xE5050000, 0xE5034000, 0xE5018000, - 0xE4FFC000, 0xE4FE0000, 0xE4FC4000, - 0xE4FA8000, 0xE4F8C000, 0xE4F70000, - 0xE4F54000, 0xE4F38000, 0xE4F1C000, - 0xE4F00000, 0xE4EE4000, 0xE4EC8000, - 0xE4EAC000, 0xE4E90000, 0xE4E74000, - 0xE4E58000, 0xE4E3C000, 0xE4E20000, - 0xE4E04000, 0xE4DE8000, 0xE4DCC000, - 0xE4DB0000, 0xE4D94000, 0xE4D78000, - 0xE4D5C000, 0xE4D40000, 0xE4D24000, - 0xE4D08000, 0xE4CEC000, 0xE4CD0000, - 0xE4CB4000, 0xE4C98000, 0xE4C7C000, - 0xE4C60000, 0xE4C44000, 0xE4C28000, - 0xE4C0C000, 0xE4BF0000, 0xE4BD4000, - 0xE4BB8000, 0xE4B9C000, 0xE4B80000, - 0xE4B64000, 0xE4B48000, 0xE4B2C000, - 0xE4B10000, 0xE4AF4000, 0xE4AD8000, - 0xE4ABC000, 0xE4AA0000, 0xE4A84000, - 0xE4A68000, 0xE4A4C000, 0xE4A30000, - 0xE4A14000, 0xE49F8000, 0xE49DC000, - 0xE49C0000, 0xE49A4000, 0xE4988000, - 0xE496C000, 0xE4950000, 0xE4934000, - 0xE4918000, 0xE48FC000, 0xE48E0000, - 0xE48C4000, 0xE48A8000, 0xE488C000, - 0xE4870000, 0xE4854000, 0xE4838000, - 0xE481C000, 0xE4800000, 0xE47E4000, - 0xE47C8000, 0xE47AC000, 0xE4790000, - 0xE4774000, 0xE4758000, 0xE473C000, - 0xE4720000, 0xE4704000, 0xE46E8000, - 0xE46CC000, 0xE46B0000, 0xE4694000, - 0xE4678000, 0xE465C000, 0xE4640000, - 0xE4624000, 0xE4608000, 0xE45EC000, - 0xE45D0000, 0xE45B4000, 0xE4598000, - 0xE457C000, 0xE4560000, 0xE4544000, - 0xE4528000, 0xE450C000, 0xE44F0000, - 0xE44D4000, 0xE44B8000, 0xE449C000, - 0xE4480000, 0xE4464000, 0xE4448000, - 0xE442C000, 0xE4410000, 0xE43F4000, - 0xE43D8000, 0xE43BC000, 0xE43A0000, - 0xE4384000, 0xE4368000, 0xE434C000, - 0xE4330000, 0xE4314000, 0xE42F8000, - 0xE42DC000, 0xE42C0000, 0xE42A4000, - 0xE4288000, 0xE426C000, 0xE4250000, - 0xE4234000, 0xE4218000, 0xE41FC000, - 0xE41E0000, 0xE41C4000, 0xE41A8000, - 0xE418C000, 0xE4170000, 0xE4154000, - 0xE4138000, 0xE411C000, 0xE4100000, - 0xE40E4000, 0xE40C8000, 0xE40AC000, - 0xE4090000, 0xE4074000, 0xE4058000, - 0xE403C000, 0xE4020000, 0xE4004000, - 0xE3FE8000, 0xE3FCC000, 0xE3FB0000, - 0xE3F94000, 0xE3F78000, 0xE3F5C000, - 0xE3F40000, 0xE3F24000, 0xE3F08000, - 0xE3EEC000, 0xE3ED0000, 0xE3EB4000, - 0xE3E98000, 0xE3E7C000, 0xE3E60000, - 0xE3E44000, 0xE3E28000, 0xE3E0C000, - 0xE3DF0000, 0xE3DD4000, 0xE3DB8000, - 0xE3D9C000, 0xE3D80000, 0xE3D64000, - 0xE3D48000, 0xE3D2C000, 0xE3D10000, - 0xE3CF4000, 0xE3CD8000, 0xE3CBC000, - 0xE3CA0000, 0xE3C84000, 0xE3C68000, - 0xE3C4C000, 0xE3C30000, 0xE3C14000, - 0xE3BF8000, 0xE3BDC000, 0xE3BC0000, - 0xE3BA4000, 0xE3B88000, 0xE3B6C000, - 0xE3B50000, 0xE3B34000, 0xE3B18000, - 0xE3AFC000, 0xE3AE0000, 0xE3AC4000, - 0xE3AA8000, 0xE3A8C000, 0xE3A70000, - 0xE3A54000, 0xE3A38000, 0xE3A1C000, - 0xE3A00000, 0xE39E4000, 0xE39C8000, - 0xE39AC000, 0xE3990000, 0xE3974000, - 0xE3958000, 0xE393C000, 0xE3920000, - 0xE3904000, 0xE38E8000, 0xE38CC000, - 0xE38B0000, 0xE3894000, 0xE3878000, - 0xE385C000, 0xE3840000, 0xE3824000, - 0xE3808000, 0xE37EC000, 0xE37D0000, - 0xE37B4000, 0xE3798000, 0xE377C000, - 0xE3760000, 0xE3744000, 0xE3728000, - 0xE370C000, 0xE36F0000, 0xE36D4000, - 0xE36B8000, 0xE369C000, 0xE3680000, - 0xE3664000, 0xE3648000, 0xE362C000, - 0xE3610000, 0xE35F4000, 0xE35D8000, - 0xE35BC000, 0xE35A0000, 0xE3584000, - 0xE3568000, 0xE354C000, 0xE3530000, - 0xE3514000, 0xE34F8000, 0xE34DC000, - 0xE34C0000, 0xE34A4000, 0xE3488000, - 0xE346C000, 0xE3450000, 0xE3434000, - 0xE3418000, 0xE33FC000, 0xE33E0000, - 0xE33C4000, 0xE33A8000, 0xE338C000, - 0xE3370000, 0xE3354000, 0xE3338000, - 0xE331C000, 0xE3300000, 0xE32E4000, - 0xE32C8000, 0xE32AC000, 0xE3290000, - 0xE3274000, 0xE3258000, 0xE323C000, - 0xE3220000, 0xE3204000, 0xE31E8000, - 0xE31CC000, 0xE31B0000, 0xE3194000, - 0xE3178000, 0xE315C000, 0xE3140000, - 0xE3124000, 0xE3108000, 0xE30EC000, - 0xE30D0000, 0xE30B4000, 0xE3098000, - 0xE307C000, 0xE3060000, 0xE3044000, - 0xE3028000, 0xE300C000, 0xE2FF0000, - 0xE2FD4000, 0xE2FB8000, 0xE2F9C000, - 0xE2F80000, 0xE2F64000, 0xE2F48000, - 0xE2F2C000, 0xE2F10000, 0xE2EF4000, - 0xE2ED8000, 0xE2EBC000, 0xE2EA0000, - 0xE2E84000, 0xE2E68000, 0xE2E4C000, - 0xE2E30000, 0xE2E14000, 0xE2DF8000, - 0xE2DDC000, 0xE2DC0000, 0xE2DA4000, - 0xE2D88000, 0xE2D6C000, 0xE2D50000, - 0xE2D34000, 0xE2D18000, 0xE2CFC000, - 0xE2CE0000, 0xE2CC4000, 0xE2CA8000, - 0xE2C8C000, 0xE2C70000, 0xE2C54000, - 0xE2C38000, 0xE2C1C000, 0xE2C00000, - 0xE2BE4000, 0xE2BC8000, 0xE2BAC000, - 0xE2B90000, 0xE2B74000, 0xE2B58000, - 0xE2B3C000, 0xE2B20000, 0xE2B04000, - 0xE2AE8000, 0xE2ACC000, 0xE2AB0000, - 0xE2A94000, 0xE2A78000, 0xE2A5C000, - 0xE2A80000, 0xE2A66400, 0xE2A4C800, - 0xE2A32C00, 0xE2A19000, 0xE29FF400, - 0xE29E5800, 0xE29CBC00, 0xE29B2000, - 0xE2998400, 0xE297E800, 0xE2964C00, - 0xE294B000, 0xE2931400, 0xE2917800, - 0xE28FDC00, 0xE28E4000, 0xE28CA400, - 0xE28B0800, 0xE2896C00, 0xE287D000, - 0xE2863400, 0xE2849800, 0xE282FC00, - 0xE2816000, 0xE27FC400, 0xE27E2800, - 0xE27C8C00, 0xE27AF000, 0xE2795400, - 0xE277B800, 0xE2761C00, 0xE2748000, - 0xE272E400, 0xE2714800, 0xE26FAC00, - 0xE26E1000, 0xE26C7400, 0xE26AD800, - 0xE2693C00, 0xE267A000, 0xE2660400, - 0xE2646800, 0xE262CC00, 0xE2613000, - 0xE25F9400, 0xE25DF800, 0xE25C5C00, - 0xE25AC000, 0xE2592400, 0xE2578800, - 0xE255EC00, 0xE2545000, 0xE252B400, - 0xE2511800, 0xE24F7C00, 0xE24DE000, - 0xE24C4400, 0xE24AA800, 0xE2490C00, - 0xE2477000, 0xE245D400, 0xE2443800, - 0xE2429C00, 0xE2410000, 0xE23F6400, - 0xE23DC800, 0xE23C2C00, 0xE23A9000, - 0xE238F400, 0xE2375800, 0xE235BC00, - 0xE2342000, 0xE2328400, 0xE230E800, - 0xE22F4C00, 0xE22DB000, 0xE22C1400, - 0xE22A7800, 0xE228DC00, 0xE2274000, - 0xE225A400, 0xE2240800, 0xE2226C00, - 0xE220D000, 0xE21F3400, 0xE21D9800, - 0xE21BFC00, 0xE21A6000, 0xE218C400, - 0xE2172800, 0xE2158C00, 0xE213F000, - 0xE2125400, 0xE210B800, 0xE20F1C00, - 0xE20D8000, 0xE20BE400, 0xE20A4800, - 0xE208AC00, 0xE2071000, 0xE2057400, - 0xE203D800, 0xE2023C00, 0xE200A000, - 0xE1FF0400, 0xE1FD6800, 0xE1FBCC00, - 0xE1FA3000, 0xE1F89400, 0xE1F6F800, - 0xE1F55C00, 0xE1F3C000, 0xE1F22400, - 0xE1F08800, 0xE1EEEC00, 0xE1ED5000, - 0xE1EBB400, 0xE1EA1800, 0xE1E87C00, - 0xE1E6E000, 0xE1E54400, 0xE1E3A800, - 0xE1E20C00, 0xE1E07000, 0xE1DED400, - 0xE1DD3800, 0xE1DB9C00, 0xE1DA0000, - 0xE1D86400, 0xE1D6C800, 0xE1D52C00, - 0xE1D39000, 0xE1D1F400, 0xE1D05800, - 0xE1CEBC00, 0xE1CD2000, 0xE1CB8400, - 0xE1C9E800, 0xE1C84C00, 0xE1C6B000, - 0xE1C51400, 0xE1C37800, 0xE1C1DC00, - 0xE1C04000, 0xE1BEA400, 0xE1BD0800, - 0xE1BB6C00, 0xE1B9D000, 0xE1B83400, - 0xE1B69800, 0xE1B4FC00, 0xE1B36000, - 0xE1B1C400, 0xE1B02800, 0xE1AE8C00, - 0xE1ACF000, 0xE1AB5400, 0xE1A9B800, - 0xE1A81C00, 0xE1A68000, 0xE1A4E400, - 0xE1A34800, 0xE1A1AC00, 0xE1A01000, - 0xE19E7400, 0xE19CD800, 0xE19B3C00, - 0xE199A000, 0xE1980400, 0xE1966800, - 0xE194CC00, 0xE1933000, 0xE1919400, - 0xE18FF800, 0xE18E5C00, 0xE18CC000, - 0xE18B2400, 0xE1898800, 0xE187EC00, - 0xE1865000, 0xE184B400, 0xE1831800, - 0xE1817C00, 0xE17FE000, 0xE17E4400, - 0xE17CA800, 0xE17B0C00, 0xE1797000, - 0xE177D400, 0xE1763800, 0xE1749C00, - 0xE1730000, 0xE1716400, 0xE16FC800, - 0xE16E2C00, 0xE16C9000, 0xE16AF400, - 0xE1695800, 0xE167BC00, 0xE1662000, - 0xE1648400, 0xE162E800, 0xE1614C00, - 0xE15FB000, 0xE15E1400, 0xE15C7800, - 0xE15ADC00, 0xE1594000, 0xE157A400, - 0xE1560800, 0xE1546C00, 0xE152D000, - 0xE1513400, 0xE14F9800, 0xE14DFC00, - 0xE14C6000, 0xE14AC400, 0xE1492800, - 0xE1478C00, 0xE145F000, 0xE1445400, - 0xE142B800, 0xE1411C00, 0xE13F8000, - 0xE13DE400, 0xE13C4800, 0xE13AAC00, - 0xE1391000, 0xE1377400, 0xE135D800, - 0xE1343C00, 0xE132A000, 0xE1310400, - 0xE12F6800, 0xE12DCC00, 0xE12C3000, - 0xE12A9400, 0xE128F800, 0xE1275C00, - 0xE125C000, 0xE1242400, 0xE1228800, - 0xE120EC00, 0xE11F5000, 0xE11DB400, - 0xE11C1800, 0xE11A7C00, 0xE118E000, - 0xE1174400, 0xE115A800, 0xE1140C00, - 0xE1127000, 0xE110D400, 0xE10F3800, - 0xE10D9C00, 0xE10C0000, 0xE10A6400, - 0xE108C800, 0xE1072C00, 0xE1059000, - 0xE103F400, 0xE1025800, 0xE100BC00, - 0xE0FF2000, 0xE0FD8400, 0xE0FBE800, - 0xE0FA4C00, 0xE0F8B000, 0xE0F71400, - 0xE0F57800, 0xE0F3DC00, 0xE0F24000, - 0xE0F0A400, 0xE0EF0800, 0xE0ED6C00, - 0xE0EBD000, 0xE0EA3400, 0xE0E89800, - 0xE0E6FC00, 0xE0E56000, 0xE0E3C400, - 0xE0E22800, 0xE0E08C00, 0xE0DEF000, - 0xE0DD5400, 0xE0DBB800, 0xE0DA1C00, - 0xE0D88000, 0xE0D6E400, 0xE0D54800, - 0xE0D3AC00, 0xE0D21000, 0xE0D07400, - 0xE0CED800, 0xE0CD3C00, 0xE0CBA000, - 0xE0CA0400, 0xE0C86800, 0xE0C6CC00, - 0xE0C53000, 0xE0C39400, 0xE0C1F800, - 0xE0C05C00, 0xE0BEC000, 0xE0BD2400, - 0xE0BB8800, 0xE0B9EC00, 0xE0B85000, - 0xE0B6B400, 0xE0B51800, 0xE0B37C00, - 0xE0B1E000, 0xE0B04400, 0xE0AEA800, - 0xE0AD0C00, 0xE0AB7000, 0xE0A9D400, - 0xE0A83800, 0xE0A69C00, 0xE0A50000, - 0xE0A36400, 0xE0A1C800, 0xE0A02C00, - 0xE09E9000, 0xE09CF400, 0xE09B5800, - 0xE099BC00, 0xE0982000, 0xE0968400, - 0xE094E800, 0xE0934C00, 0xE091B000, - 0xE0901400, 0xE08E7800, 0xE08CDC00, - 0xE08B4000, 0xE089A400, 0xE0880800, - 0xE0866C00, 0xE084D000, 0xE0833400, - 0xE0819800, 0xE07FFC00, 0xE07E6000, - 0xE07CC400, 0xE07B2800, 0xE0798C00, - 0xE077F000, 0xE0765400, 0xE074B800, - 0xE0731C00, 0xE0718000, 0xE06FE400, - 0xE06E4800, 0xE06CAC00, 0xE06B1000, - 0xE0697400, 0xE067D800, 0xE0663C00, - 0xE064A000, 0xE0630400, 0xE0616800, - 0xE05FCC00, 0xE05E3000, 0xE05C9400, - 0xE05AF800, 0xE0595C00, 0xE057C000, - 0xE0562400, 0xE0548800, 0xE052EC00, - 0xE0515000, 0xE04FB400, 0xE04E1800, - 0xE04C7C00, 0xE04AE000, 0xE0494400, - 0xE047A800, 0xE0460C00, 0xE0447000, - 0xE042D400, 0xE0413800, 0xE03F9C00, - 0xE03E0000, 0xE03C6400, 0xE03AC800, - 0xE0392C00, 0xE0379000, 0xE035F400, - 0xE0345800, 0xE032BC00, 0xE0312000, - 0xE02F8400, 0xE02DE800, 0xE02C4C00, - 0xE02AB000, 0xE0291400, 0xE0277800, - 0xE025DC00, 0xE0244000, 0xE022A400, - 0xE0210800, 0xE01F6C00, 0xE01DD000, - 0xE01C3400, 0xE01A9800, 0xE018FC00, - 0xE0176000, 0xE015C400, 0xE0142800, - 0xE0128C00, 0xE010F000, 0xE00F5400, - 0xE00DB800, 0xE00C1C00, 0xE00A8000, - 0xE008E400, 0xE0074800, 0xE005AC00, - 0xE0041000, 0xE0027400, 0xE000D800, - 0xDFFF3C00, 0xDFFDA000, 0xDFFC0400, - 0xDFFA6800, 0xDFF8CC00, 0xDFF73000, - 0xDFF59400, 0xDFF3F800, 0xDFF25C00, - 0xDFF0C000, 0xDFEF2400, 0xDFED8800, - 0xDFEBEC00, 0xDFEA5000, 0xDFE8B400, - 0xDFE71800, 0xDFE57C00, 0xDFE3E000, - 0xDFE24400, 0xDFE0A800, 0xDFDF0C00, - 0xDFDD7000, 0xDFDBD400, 0xDFDA3800, - 0xDFD89C00, 0xDFD70000, 0xDFD56400, - 0xDFD3C800, 0xDFD22C00, 0xDFD09000, - 0xDFCEF400, 0xDFCD5800, 0xDFCBBC00, - 0xDFCA2000, 0xDFC88400, 0xDFC6E800, - 0xDFC54C00, 0xDFC3B000, 0xDFC21400, - 0xDFC07800, 0xDFBEDC00, 0xDFBD4000, - 0xDFBBA400, 0xDFBA0800, 0xDFB86C00, - 0xDFB6D000, 0xDFB53400, 0xDFB39800, - 0xDFB1FC00, 0xDFB06000, 0xDFAEC400, - 0xDFAD2800, 0xDFAB8C00, 0xDFA9F000, - 0xDFA85400, 0xDFA6B800, 0xDFA51C00, - 0xDFA38000, 0xDFA1E400, 0xDFA04800, - 0xDF9EAC00, 0xDF9D1000, 0xDF9B7400, - 0xDF99D800, 0xDF983C00, 0xDF96A000, - 0xDF950400, 0xDF936800, 0xDF91CC00, - 0xDF903000, 0xDF8E9400, 0xDF8CF800, - 0xDF8B5C00, 0xDF89C000, 0xDF882400, - 0xDF868800, 0xDF84EC00, 0xDF835000, - 0xDF81B400, 0xDF801800, 0xDF7E7C00, - 0xDF7CE000, 0xDF7B4400, 0xDF79A800, - 0xDF780C00, 0xDF767000, 0xDF74D400, - 0xDF733800, 0xDF719C00, 0xDF700000, - 0xDF6E6400, 0xDF6CC800, 0xDF6B2C00, - 0xDF699000, 0xDF67F400, 0xDF665800, - 0xDF64BC00, 0xDF632000, 0xDF618400, - 0xDF5FE800, 0xDF5E4C00, 0xDF5CB000, - 0xDF5B1400, 0xDF597800, 0xDF57DC00, - 0xDF564000, 0xDF54A400, 0xDF530800, - 0xDF516C00, 0xDF4FD000, 0xDF4E3400, - 0xDF4C9800, 0xDF4AFC00, 0xDF496000, - 0xDF47C400, 0xDF462800, 0xDF448C00, - 0xDF42F000, 0xDF415400, 0xDF3FB800, - 0xDF3E1C00, 0xDF3C8000, 0xDF3AE400, - 0xDF394800, 0xDF37AC00, 0xDF361000, - 0xDF347400, 0xDF32D800, 0xDF313C00, - 0xDF2FA000, 0xDF2E0400, 0xDF2C6800, - 0xDF2ACC00, 0xDF293000, 0xDF279400, - 0xDF25F800, 0xDF245C00, 0xDF22C000, - 0xDF212400, 0xDF1F8800, 0xDF1DEC00, - 0xDF1C5000, 0xDF1AB400, 0xDF191800, - 0xDF177C00, 0xDF15E000, 0xDF144400, - 0xDF12A800, 0xDF110C00, 0xDF0F7000, - 0xDF0DD400, 0xDF0C3800, 0xDF0A9C00, - 0xDF090000, 0xDF076400, 0xDF05C800, - 0xDF042C00, 0xDF029000, 0xDF00F400, - 0xDEFF5800, 0xDEFDBC00, 0xDEFC2000, - 0xDEFA8400, 0xDEF8E800, 0xDEF74C00, - 0xDEF5B000, 0xDEF41400, 0xDEF27800, - 0xDEF0DC00, 0xDEEF4000, 0xDEEDA400, - 0xDEEC0800, 0xDEEA6C00, 0xDEE8D000, - 0xDEE73400, 0xDEE59800, 0xDEE3FC00, - 0xDEE26000, 0xDEE0C400, 0xDEDF2800, - 0xDEDD8C00, 0xDEDBF000, 0xDEDA5400, - 0xDED8B800, 0xDED71C00, 0xDED58000, - 0xDED3E400, 0xDED24800, 0xDED0AC00, - 0xDECF1000, 0xDECD7400, 0xDECBD800, - 0xDECA3C00, 0xDEC8A000, 0xDEC70400, - 0xDEC56800, 0xDEC3CC00, 0xDEC23000, - 0xDEC09400, 0xDEBEF800, 0xDEBD5C00, - 0xDEBBC000, 0xDEBA2400, 0xDEB88800, - 0xDEB6EC00, 0xDEB55000, 0xDEB3B400, - 0xDEB21800, 0xDEB07C00, 0xDEAEE000, - 0xDEAD4400, 0xDEABA800, 0xDEAA0C00, - 0xDEA87000, 0xDEA6D400, 0xDEA53800, - 0xDEA39C00, 0xDEA20000, 0xDEA06400, - 0xDE9EC800, 0xDE9D2C00, 0xDE9B9000, - 0xDE99F400, 0xDE985800, 0xDE96BC00, - 0xDE952000, 0xDE938400, 0xDE91E800, - 0xDE904C00, 0xDE8EB000, 0xDE8D1400, - 0xDE8B7800, 0xDE89DC00, 0xDE884000, - 0xDE86A400, 0xDE850800, 0xDE836C00, - 0xDE81D000, 0xDE803400, 0xDE7E9800, - 0xDE7CFC00, 0xDE7B6000, 0xDE79C400, - 0xDE782800, 0xDE768C00, 0xDE74F000, - 0xDE735400, 0xDE71B800, 0xDE701C00, - 0xDE6E8000, 0xDE6CE400, 0xDE6B4800, - 0xDE69AC00, 0xDE681000, 0xDE667400, - 0xDE64D800, 0xDE633C00, 0xDE61A000, - 0xDE600400, 0xDE5E6800, 0xDE5CCC00, - 0xDE5B3000, 0xDE599400, 0xDE57F800, - 0xDE565C00, 0xDE54C000, 0xDE532400, - 0xDE518800, 0xDE4FEC00, 0xDE4E5000, - 0xDE4CB400, 0xDE4B1800, 0xDE497C00, - 0xDE47E000, 0xDE464400, 0xDE44A800, - 0xDE430C00, 0xDE417000, 0xDE3FD400, - 0xDE3E3800, 0xDE3C9C00, 0xDE3B0000, - 0xDE396400, 0xDE37C800, 0xDE362C00, - 0xDE349000, 0xDE32F400, 0xDE315800, - 0xDE2FBC00, 0xDE2E2000, 0xDE2C8400, - 0xDE2AE800, 0xDE294C00, 0xDE27B000, - 0xDE261400, 0xDE247800, 0xDE22DC00, - 0xDE214000, 0xDE1FA400, 0xDE1E0800, - 0xDE1C6C00, 0xDE1AD000, 0xDE193400, - 0xDE179800, 0xDE15FC00, 0xDE146000, - 0xDE12C400, 0xDE112800, 0xDE0F8C00, - 0xDE0DF000, 0xDE0C5400, 0xDE0AB800, - 0xDE091C00, 0xDE078000, 0xDE05E400, - 0xDE044800, 0xDE02AC00, 0xDE011000, - 0xDDFF7400, 0xDDFDD800, 0xDDFC3C00, - 0xDDFAA000, 0xDDF90400, 0xDDF76800, - 0xDDF5CC00, 0xDDF43000, 0xDDF29400, - 0xDDF0F800, 0xDDEF5C00, 0xDDEDC000, - 0xDDEC2400, 0xDDEA8800, 0xDDE8EC00, - 0xDDE75000, 0xDDE5B400, 0xDDE41800, - 0xDDE27C00, 0xDDE0E000, 0xDDDF4400, - 0xDDDDA800, 0xDDDC0C00, 0xDDDA7000, - 0xDDD8D400, 0xDDD73800, 0xDDD59C00, - 0xDDD40000, 0xDDD26400, 0xDDD0C800, - 0xDDCF2C00, 0xDDCD9000, 0xDDCBF400, - 0xDDCA5800, 0xDDC8BC00, 0xDDC72000, - 0xDDC58400, 0xDDC3E800, 0xDDC24C00, - 0xDDC0B000, 0xDDBF1400, 0xDDBD7800, - 0xDDBBDC00, 0xDDBA4000, 0xDDB8A400, - 0xDDB70800, 0xDDB56C00, 0xDDB3D000, - 0xDDB23400, 0xDDB09800, 0xDDAEFC00, - 0xDDAD6000, 0xDDABC400, 0xDDAA2800, - 0xDDA88C00, 0xDDA6F000, 0xDDA55400, - 0xDDA3B800, 0xDDA21C00, 0xDDA08000, - 0xDD9EE400, 0xDD9D4800, 0xDD9BAC00, - 0xDD9A1000, 0xDD987400, 0xDD96D800, - 0xDD953C00, 0xDD93A000, 0xDD920400, - 0xDD906800, 0xDD8ECC00, 0xDD8D3000, - 0xDD8B9400, 0xDD89F800, 0xDD885C00, - 0xDD86C000, 0xDD852400, 0xDD838800, - 0xDD81EC00, 0xDD805000, 0xDD7EB400, - 0xDD7D1800, 0xDD7B7C00, 0xDD79E000, - 0xDD784400, 0xDD76A800, 0xDD750C00, - 0xDD737000, 0xDD71D400, 0xDD703800, - 0xDD6E9C00, 0xDD6D0000, 0xDD6B6400, - 0xDD69C800, 0xDD682C00, 0xDD669000, - 0xDD64F400, 0xDD635800, 0xDD61BC00, - 0xDD602000, 0xDD5E8400, 0xDD5CE800, - 0xDD5B4C00, 0xDD59B000, 0xDD581400, - 0xDD567800, 0xDD54DC00, 0xDD534000, - 0xDD51A400, 0xDD500800, 0xDD4E6C00, - 0xDD4CD000, 0xDD4B3400, 0xDD499800, - 0xDD47FC00, 0xDD466000, 0xDD44C400, - 0xDD432800, 0xDD418C00, 0xDD3FF000, - 0xDD3E5400, 0xDD3CB800, 0xDD3B1C00, - 0xDD398000, 0xDD37E400, 0xDD364800, - 0xDD34AC00, 0xDD331000, 0xDD317400, - 0xDD2FD800, 0xDD2E3C00, 0xDD2CA000, - 0xDD2B0400, 0xDD296800, 0xDD27CC00, - 0xDD263000, 0xDD249400, 0xDD22F800, - 0xDD215C00, 0xDD1FC000, 0xDD1E2400, - 0xDD1C8800, 0xDD1AEC00, 0xDD195000, - 0xDD17B400, 0xDD161800, 0xDD147C00, - 0xDD12E000, 0xDD114400, 0xDD0FA800, - 0xDD0E0C00, 0xDD0C7000, 0xDD0AD400, - 0xDD093800, 0xDD079C00, 0xDD060000, - 0xDD046400, 0xDD02C800, 0xDD012C00, - 0xDCFF9000, 0xDCFDF400, 0xDCFC5800, - 0xDCFABC00, 0xDCF92000, 0xDCF78400, - 0xDCF5E800, 0xDCF44C00, 0xDCF2B000, - 0xDCF11400, 0xDCEF7800, 0xDCEDDC00, - 0xDCEC4000, 0xDCEAA400, 0xDCE90800, - 0xDCE76C00, 0xDCE5D000, 0xDCE43400, - 0xDCE29800, 0xDCE0FC00, 0xDCDF6000, - 0xDCDDC400, 0xDCDC2800, 0xDCDA8C00, - 0xDCD8F000, 0xDCD75400, 0xDCD5B800, - 0xDCD41C00, 0xDCD28000, 0xDCD0E400, - 0xDCCF4800, 0xDCCDAC00, 0xDCCC1000, - 0xDCCA7400, 0xDCC8D800, 0xDCC73C00, - 0xDCC5A000, 0xDCC40400, 0xDCC26800, - 0xDCC0CC00, 0xDCBF3000, 0xDCBD9400, - 0xDCBBF800, 0xDCBA5C00, 0xDCB8C000, - 0xDCB72400, 0xDCB58800, 0xDCB3EC00, - 0xDCB25000, 0xDCB0B400, 0xDCAF1800, - 0xDCAD7C00, 0xDCABE000, 0xDCAA4400, - 0xDCA8A800, 0xDCA70C00, 0xDCA57000, - 0xDCA3D400, 0xDCA23800, 0xDCA09C00, - 0xDC9F0000, 0xDC9D6400, 0xDC9BC800, - 0xDC9A2C00, 0xDC989000, 0xDC96F400, - 0xDC955800, 0xDC93BC00, 0xDC922000, - 0xDC908400, 0xDC8EE800, 0xDC8D4C00, - 0xDC8BB000, 0xDC8A1400, 0xDC887800, - 0xDC86DC00, 0xDC854000, 0xDC83A400, - 0xDC820800, 0xDC806C00, 0xDC7ED000, - 0xDC7D3400, 0xDC7B9800, 0xDC79FC00, - 0xDC786000, 0xDC76C400, 0xDC752800, - 0xDC738C00, 0xDC71F000, 0xDC705400, - 0xDC6EB800, 0xDC6D1C00, 0xDC6B8000, - 0xDC69E400, 0xDC684800, 0xDC66AC00, - 0xDC651000, 0xDC637400, 0xDC61D800, - 0xDC603C00, 0xDC5EA000, 0xDC5D0400, - 0xDC5B6800, 0xDC59CC00, 0xDC583000, - 0xDC569400, 0xDC54F800, 0xDC535C00, - 0xDC51C000, 0xDC502400, 0xDC4E8800, - 0xDC4CEC00, 0xDC4B5000, 0xDC49B400, - 0xDC481800, 0xDC467C00, 0xDC44E000, - 0xDC434400, 0xDC41A800, 0xDC400C00, - 0xDC3E7000, 0xDC3CD400, 0xDC3B3800, - 0xDC399C00, 0xDC380000, 0xDC366400, - 0xDC34C800, 0xDC332C00, 0xDC319000, - 0xDC2FF400, 0xDC2E5800, 0xDC2CBC00, - 0xDC2B2000, 0xDC298400, 0xDC27E800, - 0xDC264C00, 0xDC24B000, 0xDC231400, - 0xDC217800, 0xDC1FDC00, 0xDC1E4000, - 0xDC1CA400, 0xDC1B0800, 0xDC196C00, - 0xDC17D000, 0xDC163400, 0xDC149800, - 0xDC12FC00, 0xDC116000, 0xDC0FC400, - 0xDC0E2800, 0xDC0C8C00, 0xDC0AF000, - 0xDC095400, 0xDC07B800, 0xDC061C00, - 0xDC048000, 0xDC02E400, 0xDC014800, - 0xDBFFAC00, 0xDBFE1000, 0xDBFC7400, - 0xDBFAD800, 0xDBF93C00, 0xDBF7A000, - 0xDBF60400, 0xDBF46800, 0xDBF2CC00, - 0xDBF13000, 0xDBEF9400, 0xDBEDF800, - 0xDBEC5C00, 0xDBEAC000, 0xDBE92400, - 0xDBE78800, 0xDBE5EC00, 0xDBE45000, - 0xDBE2B400, 0xDBE11800, 0xDBDF7C00, - 0xDBDDE000, 0xDBDC4400, 0xDBDAA800, - 0xDBD90C00, 0xDBD77000, 0xDBD5D400, - 0xDBD43800, 0xDBD29C00, 0xDBD10000, - 0xDBCF6400, 0xDBCDC800, 0xDBCC2C00, - 0xDBCA9000, 0xDBC8F400, 0xDBC75800, - 0xDBC5BC00, 0xDBC42000, 0xDBC28400, - 0xDBC0E800, 0xDBBF4C00, 0xDBBDB000, - 0xDBBC1400, 0xDBBA7800, 0xDBB8DC00, - 0xDBB74000, 0xDBB5A400, 0xDBB40800, - 0xDBB26C00, 0xDBB0D000, 0xDBAF3400, - 0xDBAD9800, 0xDBABFC00, 0xDBAA6000, - 0xDBA8C400, 0xDBA72800, 0xDBA58C00, - 0xDBA3F000, 0xDBA25400, 0xDBA0B800, - 0xDB9F1C00, 0xDB9D8000, 0xDB9BE400, - 0xDB9A4800, 0xDB98AC00, 0xDB971000, - 0xDB957400, 0xDB93D800, 0xDB923C00, - 0xDB90A000, 0xDB8F0400, 0xDB8D6800, - 0xDB8BCC00, 0xDB8A3000, 0xDB889400, - 0xDB86F800, 0xDB855C00, 0xDB83C000, - 0xDB822400, 0xDB808800, 0xDB7EEC00, - 0xDB7D5000, 0xDB7BB400, 0xDB7A1800, - 0xDB787C00, 0xDB76E000, 0xDB754400, - 0xDB73A800, 0xDB720C00, 0xDB707000, - 0xDB6ED400, 0xDB6D3800, 0xDB6B9C00, - 0xDB6A0000, 0xDB686400, 0xDB66C800, - 0xDB652C00, 0xDB639000, 0xDB61F400, - 0xDB605800, 0xDB5EBC00, 0xDB5D2000, - 0xDB5B8400, 0xDB59E800, 0xDB584C00, - 0xDB56B000, 0xDB551400, 0xDB537800, - 0xDB51DC00, 0xDB504000, 0xDB4EA400, - 0xDB4D0800, 0xDB4B6C00, 0xDB49D000, - 0xDB483400, 0xDB469800, 0xDB44FC00, - 0xDB436000, 0xDB41C400, 0xDB402800, - 0xDB3E8C00, 0xDB3CF000, 0xDB3B5400, - 0xDB39B800, 0xDB381C00, 0xDB368000, - 0xDB34E400, 0xDB334800, 0xDB31AC00, - 0xDB301000, 0xDB2E7400, 0xDB2CD800, - 0xDB2B3C00, 0xDB29A000, 0xDB280400, - 0xDB266800, 0xDB24CC00, 0xDB233000, - 0xDB219400, 0xDB1FF800, 0xDB1E5C00, - 0xDB1CC000, 0xDB1B2400, 0xDB198800, - 0xDB17EC00, 0xDB165000, 0xDB14B400, - 0xDB131800, 0xDB117C00, 0xDB0FE000, - 0xDB0E4400, 0xDB0CA800, 0xDB0B0C00, - 0xDB097000, 0xDB07D400, 0xDB063800, - 0xDB049C00, 0xDB030000, 0xDB016400, - 0xDAFFC800, 0xDAFE2C00, 0xDAFC9000, - 0xDAFAF400, 0xDAF95800, 0xDAF7BC00, - 0xDAF62000, 0xDAF48400, 0xDAF2E800, - 0xDAF14C00, 0xDAEFB000, 0xDAEE1400, - 0xDAEC7800, 0xDAEADC00, 0xDAE94000, - 0xDAE7A400, 0xDAE60800, 0xDAE46C00, - 0xDAE2D000, 0xDAE13400, 0xDADF9800, - 0xDADDFC00, 0xDADC6000, 0xDADAC400, - 0xDAD92800, 0xDAD78C00, 0xDAD5F000, - 0xDAD45400, 0xDAD2B800, 0xDAD11C00, - 0xDACF8000, 0xDACDE400, 0xDACC4800, - 0xDACAAC00, 0xDAC91000, 0xDAC77400, - 0xDAC5D800, 0xDAC43C00, 0xDAC2A000, - 0xDAC10400, 0xDABF6800, 0xDABDCC00, - 0xDABC3000, 0xDABA9400, 0xDAB8F800, - 0xDAB75C00, 0xDAB5C000, 0xDAB42400, - 0xDAB28800, 0xDAB0EC00, 0xDAAF5000, - 0xDAADB400, 0xDAAC1800, 0xDAAA7C00, - 0xDAA8E000, 0xDAA74400, 0xDAA5A800, - 0xDAA40C00, 0xDAA27000, 0xDAA0D400, - 0xDA9F3800, 0xDA9D9C00, 0xDA9C0000, - 0xDA9A6400, 0xDA98C800, 0xDA972C00, - 0xDA959000, 0xDA93F400, 0xDA925800, - 0xDA90BC00, 0xDA8F2000, 0xDA8D8400, - 0xDA8BE800, 0xDA8A4C00, 0xDA88B000, - 0xDA871400, 0xDA857800, 0xDA83DC00, - 0xDA824000, 0xDA80A400, 0xDA7F0800, - 0xDA7D6C00, 0xDA7BD000, 0xDA7A3400, - 0xDA789800, 0xDA76FC00, 0xDA756000, - 0xDA73C400, 0xDA722800, 0xDA708C00, - 0xDA6EF000, 0xDA6D5400, 0xDA6BB800, - 0xDA6A1C00, 0xDA688000, 0xDA66E400, - 0xDA654800, 0xDA63AC00, 0xDA621000, - 0xDA607400, 0xDA5ED800, 0xDA5D3C00, - 0xDA5BA000, 0xDA5A0400, 0xDA586800, - 0xDA56CC00, 0xDA553000, 0xDA539400, - 0xDA51F800, 0xDA505C00, 0xDA4EC000, - 0xDA4D2400, 0xDA4B8800, 0xDA49EC00, - 0xDA485000, 0xDA46B400, 0xDA451800, - 0xDA437C00, 0xDA41E000, 0xDA404400, - 0xDA3EA800, 0xDA3D0C00, 0xDA3B7000, - 0xDA39D400, 0xDA383800, 0xDA369C00, - 0xDA350000, 0xDA336400, 0xDA31C800, - 0xDA302C00, 0xDA2E9000, 0xDA2CF400, - 0xDA2B5800, 0xDA29BC00, 0xDA282000, - 0xDA268400, 0xDA24E800, 0xDA234C00, - 0xDA21B000, 0xDA201400, 0xDA1E7800, - 0xDA1CDC00, 0xDA1B4000, 0xDA19A400, - 0xDA180800, 0xDA166C00, 0xDA14D000, - 0xDA133400, 0xDA119800, 0xDA0FFC00, - 0xDA0E6000, 0xDA0CC400, 0xDA0B2800, - 0xDA098C00, 0xDA07F000, 0xDA065400, - 0xDA04B800, 0xDA031C00, 0xDA018000, - 0xD9FFE400, 0xD9FE4800, 0xD9FCAC00, - 0xD9FB1000, 0xD9F97400, 0xD9F7D800, - 0xD9F63C00, 0xD9F4A000, 0xD9F30400, - 0xD9F16800, 0xD9EFCC00, 0xD9EE3000, - 0xD9EC9400, 0xD9EAF800, 0xD9E95C00, - 0xD9E7C000, 0xD9E62400, 0xD9E48800, - 0xD9E2EC00, 0xD9E15000, 0xD9DFB400, - 0xD9DE1800, 0xD9DC7C00, 0xD9DAE000, - 0xD9D94400, 0xD9D7A800, 0xD9D60C00, - 0xD9D47000, 0xD9D2D400, 0xD9D13800, - 0xD9CF9C00, 0xD9CE0000, 0xD9CC6400, - 0xD9CAC800, 0xD9C92C00, 0xD9C79000, - 0xD9C5F400, 0xD9C45800, 0xD9C2BC00, - 0xD9C12000, 0xD9BF8400, 0xD9BDE800, - 0xD9BC4C00, 0xD9BAB000, 0xD9B91400, - 0xD9B77800, 0xD9B5DC00, 0xD9B44000, - 0xD9B2A400, 0xD9B10800, 0xD9AF6C00, - 0xD9ADD000, 0xD9AC3400, 0xD9AA9800, - 0xD9A8FC00, 0xD9A76000, 0xD9A5C400, - 0xD9A42800, 0xD9A28C00, 0xD9A0F000, - 0xD99F5400, 0xD99DB800, 0xD99C1C00, - 0xD99A8000, 0xD998E400, 0xD9974800, - 0xD995AC00, 0xD9941000, 0xD9927400, - 0xD990D800, 0xD98F3C00, 0xD98DA000, - 0xD98C0400, 0xD98A6800, 0xD988CC00, - 0xD9873000, 0xD9859400, 0xD983F800, - 0xD9825C00, 0xD980C000, 0xD97F2400, - 0xD97D8800, 0xD97BEC00, 0xD97A5000, - 0xD978B400, 0xD9771800, 0xD9757C00, - 0xD973E000, 0xD9724400, 0xD970A800, - 0xD96F0C00, 0xD96D7000, 0xD96BD400, - 0xD96A3800, 0xD9689C00, 0xD9670000, - 0xD9656400, 0xD963C800, 0xD9622C00, - 0xD9609000, 0xD95EF400, 0xD95D5800, - 0xD95BBC00, 0xD95A2000, 0xD9588400, - 0xD956E800, 0xD9554C00, 0xD953B000, - 0xD9521400, 0xD9507800, 0xD94EDC00, - 0xD94D4000, 0xD94BA400, 0xD94A0800, - 0xD9486C00, 0xD946D000, 0xD9453400, - 0xD9439800, 0xD941FC00, 0xD9406000, - 0xD93EC400, 0xD93D2800, 0xD93B8C00, - 0xD939F000, 0xD9385400, 0xD936B800, - 0xD9351C00, 0xD9338000, 0xD931E400, - 0xD9304800, 0xD92EAC00, 0xD92D1000, - 0xD92B7400, 0xD929D800, 0xD9283C00, - 0xD926A000, 0xD9250400, 0xD9236800, - 0xD921CC00, 0xD9203000, 0xD91E9400, - 0xD91CF800, 0xD91B5C00, 0xD919C000, - 0xD9182400, 0xD9168800, 0xD914EC00, - 0xD9135000, 0xD911B400, 0xD9101800, - 0xD90E7C00, 0xD90CE000, 0xD90B4400, - 0xD909A800, 0xD9080C00, 0xD9067000, - 0xD904D400, 0xD9033800, 0xD9019C00, - 0xD9000000, 0xD8FE6400, 0xD8FCC800, - 0xD8FB2C00, 0xD8F99000, 0xD8F7F400, - 0xD8F65800, 0xD8F4BC00, 0xD8F32000, - 0xD8F18400, 0xD8EFE800, 0xD8EE4C00, - 0xD8ECB000, 0xD8EB1400, 0xD8E97800, - 0xD8E7DC00, 0xD8E64000, 0xD8E4A400, - 0xD8E30800, 0xD8E16C00, 0xD8DFD000, - 0xD8DE3400, 0xD8DC9800, 0xD8DAFC00, - 0xD8D96000, 0xD8D7C400, 0xD8D62800, - 0xD8D48C00, 0xD8D2F000, 0xD8D15400, - 0xD8CFB800, 0xD8CE1C00, 0xD8CC8000, - 0xD8CAE400, 0xD8C94800, 0xD8C7AC00, - 0xD8C61000, 0xD8C47400, 0xD8C2D800, - 0xD8C13C00, 0xD8BFA000, 0xD8BE0400, - 0xD8BC6800, 0xD8BACC00, 0xD8B93000, - 0xD8B79400, 0xD8B5F800, 0xD8B45C00, - 0xD8B2C000, 0xD8B12400, 0xD8AF8800, - 0xD8ADEC00, 0xD8AC5000, 0xD8AAB400, - 0xD8A91800, 0xD8A77C00, 0xD8A5E000, - 0xD8A44400, 0xD8A2A800, 0xD8A10C00, - 0xD89F7000, 0xD89DD400, 0xD89C3800, - 0xD89A9C00, 0xD8990000, 0xD8976400, - 0xD895C800, 0xD8942C00, 0xD8929000, - 0xD890F400, 0xD88F5800, 0xD88DBC00, - 0xD88C2000, 0xD88A8400, 0xD888E800, - 0xD8874C00, 0xD885B000, 0xD8841400, - 0xD8827800, 0xD880DC00, 0xD87F4000, - 0xD87DA400, 0xD87C0800, 0xD87A6C00, - 0xD878D000, 0xD8773400, 0xD8759800, - 0xD873FC00, 0xD8726000, 0xD870C400, - 0xD86F2800, 0xD86D8C00, 0xD86BF000, - 0xD86A5400, 0xD868B800, 0xD8671C00, - 0xD8658000, 0xD863E400, 0xD8624800, - 0xD860AC00, 0xD85F1000, 0xD85D7400, - 0xD85BD800, 0xD85A3C00, 0xD858A000, - 0xD8570400, 0xD8556800, 0xD853CC00, - 0xD8523000, 0xD8509400, 0xD84EF800, - 0xD84D5C00, 0xD84BC000, 0xD84A2400, - 0xD8488800, 0xD846EC00, 0xD8455000, - 0xD843B400, 0xD8421800, 0xD8407C00, - 0xD83EE000, 0xD83D4400, 0xD83BA800, - 0xD83A0C00, 0xD8387000, 0xD836D400, - 0xD8353800, 0xD8339C00, 0xD8320000, - 0xD8306400, 0xD82EC800, 0xD82D2C00, - 0xD82B9000, 0xD829F400, 0xD8285800, - 0xD826BC00, 0xD8252000, 0xD8238400, - 0xD821E800, 0xD8204C00, 0xD81EB000, - 0xD81D1400, 0xD81B7800, 0xD819DC00, - 0xD8184000, 0xD816A400, 0xD8150800, - 0xD8136C00, 0xD811D000, 0xD8103400, - 0xD80E9800, 0xD80CFC00, 0xD80B6000, - 0xD809C400, 0xD8082800, 0xD8068C00, - 0xD804F000, 0xD8035400, 0xD801B800, - 0xD8001C00, 0xD7FE8000, 0xD7FCE400, - 0xD7FB4800, 0xD7F9AC00, 0xD7F81000, - 0xD7F67400, 0xD7F4D800, 0xD7F33C00, - 0xD7F1A000, 0xD7F00400, 0xD7EE6800, - 0xD7ECCC00, 0xD7EB3000, 0xD7E99400, - 0xD7E7F800, 0xD7E65C00, 0xD7E4C000, - 0xD7E32400, 0xD7E18800, 0xD7DFEC00, - 0xD7DE5000, 0xD7DCB400, 0xD7DB1800, - 0xD7D97C00, 0xD7D7E000, 0xD7D64400, - 0xD7D4A800, 0xD7D30C00, 0xD7D17000, - 0xD7CFD400, 0xD7CE3800, 0xD7CC9C00, - 0xD7CB0000, 0xD7C96400, 0xD7C7C800, - 0xD7C62C00, 0xD7C49000, 0xD7C2F400, - 0xD7C15800, 0xD7BFBC00, 0xD7BE2000, - 0xD7BC8400, 0xD7BAE800, 0xD7B94C00, - 0xD7B7B000, 0xD7B61400, 0xD7B47800, - 0xD7B2DC00, 0xD7B14000, 0xD7AFA400, - 0xD7AE0800, 0xD7AC6C00, 0xD7AAD000, - 0xD7A93400, 0xD7A79800, 0xD7A5FC00, - 0xD7A46000, 0xD7A2C400, 0xD7A12800, - 0xD79F8C00, 0xD79DF000, 0xD79C5400, - 0xD79AB800, 0xD7991C00, 0xD7978000, - 0xD795E400, 0xD7944800, 0xD792AC00, - 0xD7911000, 0xD78F7400, 0xD78DD800, - 0xD78C3C00, 0xD78AA000, 0xD7890400, - 0xD7876800, 0xD785CC00, 0xD7843000, - 0xD7829400, 0xD780F800, 0xD77F5C00, - 0xD77DC000, 0xD77C2400, 0xD77A8800, - 0xD778EC00, 0xD7775000, 0xD775B400, - 0xD7741800, 0xD7727C00, 0xD770E000, - 0xD76F4400, 0xD76DA800, 0xD76C0C00, - 0xD76A7000, 0xD768D400, 0xD7673800, - 0xD7659C00, 0xD7640000, 0xD7626400, - 0xD760C800, 0xD75F2C00, 0xD75D9000, - 0xD75BF400, 0xD75A5800, 0xD758BC00, - 0xD7572000, 0xD7558400, 0xD753E800, - 0xD7524C00, 0xD750B000, 0xD74F1400, - 0xD74D7800, 0xD74BDC00, 0xD74A4000, - 0xD748A400, 0xD7470800, 0xD7456C00, - 0xD743D000, 0xD7423400, 0xD7409800, - 0xD73EFC00, 0xD73D6000, 0xD73BC400, - 0xD73A2800, 0xD7388C00, 0xD736F000, - 0xD7355400, 0xD733B800, 0xD7321C00, - 0xD7308000, 0xD72EE400, 0xD72D4800, - 0xD72BAC00, 0xD72A1000, 0xD7287400, - 0xD726D800, 0xD7253C00, 0xD723A000, - 0xD7220400, 0xD7206800, 0xD71ECC00, - 0xD71D3000, 0xD71B9400, 0xD719F800, - 0xD7185C00, 0xD716C000, 0xD7152400, - 0xD7138800, 0xD711EC00, 0xD7105000, - 0xD70EB400, 0xD70D1800, 0xD70B7C00, - 0xD709E000, 0xD7084400, 0xD706A800, - 0xD7050C00, 0xD7037000, 0xD701D400, - 0xD7003800, 0xD6FE9C00, 0xD6FD0000, - 0xD6FB6400, 0xD6F9C800, 0xD6F82C00, - 0xD6F69000, 0xD6F4F400, 0xD6F35800, - 0xD6F1BC00, 0xD6F02000, 0xD6EE8400, - 0xD6ECE800, 0xD6EB4C00, 0xD6E9B000, - 0xD6E81400, 0xD6E67800, 0xD6E4DC00, - 0xD6E34000, 0xD6E1A400, 0xD6E00800, - 0xD6DE6C00, 0xD6DCD000, 0xD6DB3400, - 0xD6D99800, 0xD6D7FC00, 0xD6D66000, - 0xD6D4C400, 0xD6D32800, 0xD6D18C00, - 0xD6CFF000, 0xD6CE5400, 0xD6CCB800, - 0xD6CB1C00, 0xD6C98000, 0xD6C7E400, - 0xD6C64800, 0xD6C4AC00, 0xD6C31000, - 0xD6C17400, 0xD6BFD800, 0xD6BE3C00, - 0xD6BCA000, 0xD6BB0400, 0xD6B96800, - 0xD6B7CC00, 0xD6B63000, 0xD6B49400, - 0xD6B2F800, 0xD6B15C00, 0xD6AFC000, - 0xD6AE2400, 0xD6AC8800, 0xD6AAEC00, - 0xD6A95000, 0xD6A7B400, 0xD6A61800, - 0xD6A47C00, 0xD6A2E000, 0xD6A14400, - 0xD69FA800, 0xD69E0C00, 0xD69C7000, - 0xD69AD400, 0xD6993800, 0xD6979C00, - 0xD6960000, 0xD6946400, 0xD692C800, - 0xD6912C00, 0xD68F9000, 0xD68DF400, - 0xD68C5800, 0xD68ABC00, 0xD6892000, - 0xD6878400, 0xD685E800, 0xD6844C00, - 0xD682B000, 0xD6811400, 0xD67F7800, - 0xD67DDC00, 0xD67C4000, 0xD67AA400, - 0xD6790800, 0xD6776C00, 0xD675D000, - 0xD6743400, 0xD6729800, 0xD670FC00, - 0xD66F6000, 0xD66DC400, 0xD66C2800, - 0xD66A8C00, 0xD668F000, 0xD6675400, - 0xD665B800, 0xD6641C00, 0xD6628000, - 0xD660E400, 0xD65F4800, 0xD65DAC00, - 0xD65C1000, 0xD65A7400, 0xD658D800, - 0xD6573C00, 0xD655A000, 0xD6540400, - 0xD6526800, 0xD650CC00, 0xD64F3000, - 0xD64D9400, 0xD64BF800, 0xD64A5C00, - 0xD648C000, 0xD6472400, 0xD6458800, - 0xD643EC00, 0xD6425000, 0xD640B400, - 0xD63F1800, 0xD63D7C00, 0xD63BE000, - 0xD63A4400, 0xD638A800, 0xD6370C00, - 0xD6357000, 0xD633D400, 0xD6323800, - 0xD6309C00, 0xD62F0000, 0xD62D6400, - 0xD62BC800, 0xD62A2C00, 0xD6289000, - 0xD626F400, 0xD6255800, 0xD623BC00, - 0xD6222000, 0xD6208400, 0xD61EE800, - 0xD61D4C00, 0xD61BB000, 0xD61A1400, - 0xD6187800, 0xD616DC00, 0xD6154000, - 0xD613A400, 0xD6120800, 0xD6106C00, - 0xD60ED000, 0xD60D3400, 0xD60B9800, - 0xD609FC00, 0xD6086000, 0xD606C400, - 0xD6052800, 0xD6038C00, 0xD601F000, - 0xD6005400, 0xD5FEB800, 0xD5FD1C00, - 0xD5FB8000, 0xD5F9E400, 0xD5F84800, - 0xD5F6AC00, 0xD5F51000, 0xD5F37400, - 0xD5F1D800, 0xD5F03C00, 0xD5EEA000, - 0xD5ED0400, 0xD5EB6800, 0xD5E9CC00, - 0xD5E83000, 0xD5E69400, 0xD5E4F800, - 0xD5E35C00, 0xD5E1C000, 0xD5E02400, - 0xD5DE8800, 0xD5DCEC00, 0xD5DB5000, - 0xD5D9B400, 0xD5D81800, 0xD5D67C00, - 0xD5D4E000, 0xD5D34400, 0xD5D1A800, - 0xD5D00C00, 0xD5CE7000, 0xD5CCD400, - 0xD5CB3800, 0xD5C99C00, 0xD5C80000, - 0xD5C68380, 0xD5C50700, 0xD5C38A80, - 0xD5C20E00, 0xD5C09180, 0xD5BF1500, - 0xD5BD9880, 0xD5BC1C00, 0xD5BA9F80, - 0xD5B92300, 0xD5B7A680, 0xD5B62A00, - 0xD5B4AD80, 0xD5B33100, 0xD5B1B480, - 0xD5B03800, 0xD5AEBB80, 0xD5AD3F00, - 0xD5ABC280, 0xD5AA4600, 0xD5A8C980, - 0xD5A74D00, 0xD5A5D080, 0xD5A45400, - 0xD5A2D780, 0xD5A15B00, 0xD59FDE80, - 0xD59E6200, 0xD59CE580, 0xD59B6900, - 0xD599EC80, 0xD5987000, 0xD596F380, - 0xD5957700, 0xD593FA80, 0xD5927E00, - 0xD5910180, 0xD58F8500, 0xD58E0880, - 0xD58C8C00, 0xD58B0F80, 0xD5899300, - 0xD5881680, 0xD5869A00, 0xD5851D80, - 0xD583A100, 0xD5822480, 0xD580A800, - 0xD57F2B80, 0xD57DAF00, 0xD57C3280, - 0xD57AB600, 0xD5793980, 0xD577BD00, - 0xD5764080, 0xD574C400, 0xD5734780, - 0xD571CB00, 0xD5704E80, 0xD56ED200, - 0xD56D5580, 0xD56BD900, 0xD56A5C80, - 0xD568E000, 0xD5676380, 0xD565E700, - 0xD5646A80, 0xD562EE00, 0xD5617180, - 0xD55FF500, 0xD55E7880, 0xD55CFC00, - 0xD55B7F80, 0xD55A0300, 0xD5588680, - 0xD5570A00, 0xD5558D80, 0xD5541100, - 0xD5529480, 0xD5511800, 0xD54F9B80, - 0xD54E1F00, 0xD54CA280, 0xD54B2600, - 0xD549A980, 0xD5482D00, 0xD546B080, - 0xD5453400, 0xD543B780, 0xD5423B00, - 0xD540BE80, 0xD53F4200, 0xD53DC580, - 0xD53C4900, 0xD53ACC80, 0xD5395000, - 0xD537D380, 0xD5365700, 0xD534DA80, - 0xD5335E00, 0xD531E180, 0xD5306500, - 0xD52EE880, 0xD52D6C00, 0xD52BEF80, - 0xD52A7300, 0xD528F680, 0xD5277A00, - 0xD525FD80, 0xD5248100, 0xD5230480, - 0xD5218800, 0xD5200B80, 0xD51E8F00, - 0xD51D1280, 0xD51B9600, 0xD51A1980, - 0xD5189D00, 0xD5172080, 0xD515A400, - 0xD5142780, 0xD512AB00, 0xD5112E80, - 0xD50FB200, 0xD50E3580, 0xD50CB900, - 0xD50B3C80, 0xD509C000, 0xD5084380, - 0xD506C700, 0xD5054A80, 0xD503CE00, - 0xD5025180, 0xD500D500, 0xD4FF5880, - 0xD4FDDC00, 0xD4FC5F80, 0xD4FAE300, - 0xD4F96680, 0xD4F7EA00, 0xD4F66D80, - 0xD4F4F100, 0xD4F37480, 0xD4F1F800, - 0xD4F07B80, 0xD4EEFF00, 0xD4ED8280, - 0xD4EC0600, 0xD4EA8980, 0xD4E90D00, - 0xD4E79080, 0xD4E61400, 0xD4E49780, - 0xD4E31B00, 0xD4E19E80, 0xD4E02200, - 0xD4DEA580, 0xD4DD2900, 0xD4DBAC80, - 0xD4DA3000, 0xD4D8B380, 0xD4D73700, - 0xD4D5BA80, 0xD4D43E00, 0xD4D2C180, - 0xD4D14500, 0xD4CFC880, 0xD4CE4C00, - 0xD4CCCF80, 0xD4CB5300, 0xD4C9D680, - 0xD4C85A00, 0xD4C6DD80, 0xD4C56100, - 0xD4C3E480, 0xD4C26800, 0xD4C0EB80, - 0xD4BF6F00, 0xD4BDF280, 0xD4BC7600, - 0xD4BAF980, 0xD4B97D00, 0xD4B80080, - 0xD4B68400, 0xD4B50780, 0xD4B38B00, - 0xD4B20E80, 0xD4B09200, 0xD4AF1580, - 0xD4AD9900, 0xD4AC1C80, 0xD4AAA000, - 0xD4A92380, 0xD4A7A700, 0xD4A62A80, - 0xD4A4AE00, 0xD4A33180, 0xD4A1B500, - 0xD4A03880, 0xD49EBC00, 0xD49D3F80, - 0xD49BC300, 0xD49A4680, 0xD498CA00, - 0xD4974D80, 0xD495D100, 0xD4945480, - 0xD492D800, 0xD4915B80, 0xD48FDF00, - 0xD48E6280, 0xD48CE600, 0xD48B6980, - 0xD489ED00, 0xD4887080, 0xD486F400, - 0xD4857780, 0xD483FB00, 0xD4827E80, - 0xD4810200, 0xD47F8580, 0xD47E0900, - 0xD47C8C80, 0xD47B1000, 0xD4799380, - 0xD4781700, 0xD4769A80, 0xD4751E00, - 0xD473A180, 0xD4722500, 0xD470A880, - 0xD46F2C00, 0xD46DAF80, 0xD46C3300, - 0xD46AB680, 0xD4693A00, 0xD467BD80, - 0xD4664100, 0xD464C480, 0xD4634800, - 0xD461CB80, 0xD4604F00, 0xD45ED280, - 0xD45D5600, 0xD45BD980, 0xD45A5D00, - 0xD458E080, 0xD4576400, 0xD455E780, - 0xD4546B00, 0xD452EE80, 0xD4517200, - 0xD44FF580, 0xD44E7900, 0xD44CFC80, - 0xD44B8000, 0xD44A0380, 0xD4488700, - 0xD4470A80, 0xD4458E00, 0xD4441180, - 0xD4429500, 0xD4411880, 0xD43F9C00, - 0xD43E1F80, 0xD43CA300, 0xD43B2680, - 0xD439AA00, 0xD4382D80, 0xD436B100, - 0xD4353480, 0xD433B800, 0xD4323B80, - 0xD430BF00, 0xD42F4280, 0xD42DC600, - 0xD42C4980, 0xD42ACD00, 0xD4295080, - 0xD427D400, 0xD4265780, 0xD424DB00, - 0xD4235E80, 0xD421E200, 0xD4206580, - 0xD41EE900, 0xD41D6C80, 0xD41BF000, - 0xD41A7380, 0xD418F700, 0xD4177A80, - 0xD415FE00, 0xD4148180, 0xD4130500, - 0xD4118880, 0xD4100C00, 0xD40E8F80, - 0xD40D1300, 0xD40B9680, 0xD40A1A00, - 0xD4089D80, 0xD4072100, 0xD405A480, - 0xD4042800, 0xD402AB80, 0xD4012F00, - 0xD3FFB280, 0xD3FE3600, 0xD3FCB980, - 0xD3FB3D00, 0xD3F9C080, 0xD3F84400, - 0xD3F6C780, 0xD3F54B00, 0xD3F3CE80, - 0xD3F25200, 0xD3F0D580, 0xD3EF5900, - 0xD3EDDC80, 0xD3EC6000, 0xD3EAE380, - 0xD3E96700, 0xD3E7EA80, 0xD3E66E00, - 0xD3E4F180, 0xD3E37500, 0xD3E1F880, - 0xD3E07C00, 0xD3DEFF80, 0xD3DD8300, - 0xD3DC0680, 0xD3DA8A00, 0xD3D90D80, - 0xD3D79100, 0xD3D61480, 0xD3D49800, - 0xD3D31B80, 0xD3D19F00, 0xD3D02280, - 0xD3CEA600, 0xD3CD2980, 0xD3CBAD00, - 0xD3CA3080, 0xD3C8B400, 0xD3C73780, - 0xD3C5BB00, 0xD3C43E80, 0xD3C2C200, - 0xD3C14580, 0xD3BFC900, 0xD3BE4C80, - 0xD3BCD000, 0xD3BB5380, 0xD3B9D700, - 0xD3B85A80, 0xD3B6DE00, 0xD3B56180, - 0xD3B3E500, 0xD3B26880, 0xD3B0EC00, - 0xD3AF6F80, 0xD3ADF300, 0xD3AC7680, - 0xD3AAFA00, 0xD3A97D80, 0xD3A80100, - 0xD3A68480, 0xD3A50800, 0xD3A38B80, - 0xD3A20F00, 0xD3A09280, 0xD39F1600, - 0xD39D9980, 0xD39C1D00, 0xD39AA080, - 0xD3992400, 0xD397A780, 0xD3962B00, - 0xD394AE80, 0xD3933200, 0xD391B580, - 0xD3903900, 0xD38EBC80, 0xD38D4000, - 0xD38BC380, 0xD38A4700, 0xD388CA80, - 0xD3874E00, 0xD385D180, 0xD3845500, - 0xD382D880, 0xD3815C00, 0xD37FDF80, - 0xD37E6300, 0xD37CE680, 0xD37B6A00, - 0xD379ED80, 0xD3787100, 0xD376F480, - 0xD3757800, 0xD373FB80, 0xD3727F00, - 0xD3710280, 0xD36F8600, 0xD36E0980, - 0xD36C8D00, 0xD36B1080, 0xD3699400, - 0xD3681780, 0xD3669B00, 0xD3651E80, - 0xD363A200, 0xD3622580, 0xD360A900, - 0xD35F2C80, 0xD35DB000, 0xD35C3380, - 0xD35AB700, 0xD3593A80, 0xD357BE00, - 0xD3564180, 0xD354C500, 0xD3534880, - 0xD351CC00, 0xD3504F80, 0xD34ED300, - 0xD34D5680, 0xD34BDA00, 0xD34A5D80, - 0xD348E100, 0xD3476480, 0xD345E800, - 0xD3446B80, 0xD342EF00, 0xD3417280, - 0xD33FF600, 0xD33E7980, 0xD33CFD00, - 0xD33B8080, 0xD33A0400, 0xD3388780, - 0xD3370B00, 0xD3358E80, 0xD3341200, - 0xD3329580, 0xD3311900, 0xD32F9C80, - 0xD32E2000, 0xD32CA380, 0xD32B2700, - 0xD329AA80, 0xD3282E00, 0xD326B180, - 0xD3253500, 0xD323B880, 0xD3223C00, - 0xD320BF80, 0xD31F4300, 0xD31DC680, - 0xD31C4A00, 0xD31ACD80, 0xD3195100, - 0xD317D480, 0xD3165800, 0xD314DB80, - 0xD3135F00, 0xD311E280, 0xD3106600, - 0xD30EE980, 0xD30D6D00, 0xD30BF080, - 0xD30A7400, 0xD308F780, 0xD3077B00, - 0xD305FE80, 0xD3048200, 0xD3030580, - 0xD3018900, 0xD3000C80, 0xD2FE9000, - 0xD2FD1380, 0xD2FB9700, 0xD2FA1A80, - 0xD2F89E00, 0xD2F72180, 0xD2F5A500, - 0xD2F42880, 0xD2F2AC00, 0xD2F12F80, - 0xD2EFB300, 0xD2EE3680, 0xD2ECBA00, - 0xD2EB3D80, 0xD2E9C100, 0xD2E84480, - 0xD2E6C800, 0xD2E54B80, 0xD2E3CF00, - 0xD2E25280, 0xD2E0D600, 0xD2DF5980, - 0xD2DDDD00, 0xD2DC6080, 0xD2DAE400, - 0xD2D96780, 0xD2D7EB00, 0xD2D66E80, - 0xD2D4F200, 0xD2D37580, 0xD2D1F900, - 0xD2D07C80, 0xD2CF0000, 0xD2CD8380, - 0xD2CC0700, 0xD2CA8A80, 0xD2C90E00, - 0xD2C79180, 0xD2C61500, 0xD2C49880, - 0xD2C31C00, 0xD2C19F80, 0xD2C02300, - 0xD2BEA680, 0xD2BD2A00, 0xD2BBAD80, - 0xD2BA3100, 0xD2B8B480, 0xD2B73800, - 0xD2B5BB80, 0xD2B43F00, 0xD2B2C280, - 0xD2B14600, 0xD2AFC980, 0xD2AE4D00, - 0xD2ACD080, 0xD2AB5400, 0xD2A9D780, - 0xD2A85B00, 0xD2A6DE80, 0xD2A56200, - 0xD2A3E580, 0xD2A26900, 0xD2A0EC80, - 0xD29F7000, 0xD29DF380, 0xD29C7700, - 0xD29AFA80, 0xD2997E00, 0xD2980180, - 0xD2968500, 0xD2950880, 0xD2938C00, - 0xD2920F80, 0xD2909300, 0xD28F1680, - 0xD28D9A00, 0xD28C1D80, 0xD28AA100, - 0xD2892480, 0xD287A800, 0xD2862B80, - 0xD284AF00, 0xD2833280, 0xD281B600, - 0xD2803980, 0xD27EBD00, 0xD27D4080, - 0xD27BC400, 0xD27A4780, 0xD278CB00, - 0xD2774E80, 0xD275D200, 0xD2745580, - 0xD272D900, 0xD2715C80, 0xD26FE000, - 0xD26E6380, 0xD26CE700, 0xD26B6A80, - 0xD269EE00, 0xD2687180, 0xD266F500, - 0xD2657880, 0xD263FC00, 0xD2627F80, - 0xD2610300, 0xD25F8680, 0xD25E0A00, - 0xD25C8D80, 0xD25B1100, 0xD2599480, - 0xD2581800, 0xD2569B80, 0xD2551F00, - 0xD253A280, 0xD2522600, 0xD250A980, - 0xD24F2D00, 0xD24DB080, 0xD24C3400, - 0xD24AB780, 0xD2493B00, 0xD247BE80, - 0xD2464200, 0xD244C580, 0xD2434900, - 0xD241CC80, 0xD2405000, 0xD23ED380, - 0xD23D5700, 0xD23BDA80, 0xD23A5E00, - 0xD238E180, 0xD2376500, 0xD235E880, - 0xD2346C00, 0xD232EF80, 0xD2317300, - 0xD22FF680, 0xD22E7A00, 0xD22CFD80, - 0xD22B8100, 0xD22A0480, 0xD2288800, - 0xD2270B80, 0xD2258F00, 0xD2241280, - 0xD2229600, 0xD2211980, 0xD21F9D00, - 0xD21E2080, 0xD21CA400, 0xD21B2780, - 0xD219AB00, 0xD2182E80, 0xD216B200, - 0xD2153580, 0xD213B900, 0xD2123C80, - 0xD210C000, 0xD20F4380, 0xD20DC700, - 0xD20C4A80, 0xD20ACE00, 0xD2095180, - 0xD207D500, 0xD2065880, 0xD204DC00, - 0xD2035F80, 0xD201E300, 0xD2006680, - 0xD1FEEA00, 0xD1FD6D80, 0xD1FBF100, - 0xD1FA7480, 0xD1F8F800, 0xD1F77B80, - 0xD1F5FF00, 0xD1F48280, 0xD1F30600, - 0xD1F18980, 0xD1F00D00, 0xD1EE9080, - 0xD1ED1400, 0xD1EB9780, 0xD1EA1B00, - 0xD1E89E80, 0xD1E72200, 0xD1E5A580, - 0xD1E42900, 0xD1E2AC80, 0xD1E13000, - 0xD1DFB380, 0xD1DE3700, 0xD1DCBA80, - 0xD1DB3E00, 0xD1D9C180, 0xD1D84500, - 0xD1D6C880, 0xD1D54C00, 0xD1D3CF80, - 0xD1D25300, 0xD1D0D680, 0xD1CF5A00, - 0xD1CDDD80, 0xD1CC6100, 0xD1CAE480, - 0xD1C96800, 0xD1C7EB80, 0xD1C66F00, - 0xD1C4F280, 0xD1C37600, 0xD1C1F980, - 0xD1C07D00, 0xD1BF0080, 0xD1BD8400, - 0xD1BC0780, 0xD1BA8B00, 0xD1B90E80, - 0xD1B79200, 0xD1B61580, 0xD1B49900, - 0xD1B31C80, 0xD1B1A000, 0xD1B02380, - 0xD1AEA700, 0xD1AD2A80, 0xD1ABAE00, - 0xD1AA3180, 0xD1A8B500, 0xD1A73880, - 0xD1A5BC00, 0xD1A43F80, 0xD1A2C300, - 0xD1A14680, 0xD19FCA00, 0xD19E4D80, - 0xD19CD100, 0xD19B5480, 0xD199D800, - 0xD1985B80, 0xD196DF00, 0xD1956280, - 0xD193E600, 0xD1926980, 0xD190ED00, - 0xD18F7080, 0xD18DF400, 0xD18C7780, - 0xD18AFB00, 0xD1897E80, 0xD1880200, - 0xD1868580, 0xD1850900, 0xD1838C80, - 0xD1821000, 0xD1809380, 0xD17F1700, - 0xD17D9A80, 0xD17C1E00, 0xD17AA180, - 0xD1792500, 0xD177A880, 0xD1762C00, - 0xD174AF80, 0xD1733300, 0xD171B680, - 0xD1703A00, 0xD16EBD80, 0xD16D4100, - 0xD16BC480, 0xD16A4800, 0xD168CB80, - 0xD1674F00, 0xD165D280, 0xD1645600, - 0xD162D980, 0xD1615D00, 0xD15FE080, - 0xD15E6400, 0xD15CE780, 0xD15B6B00, - 0xD159EE80, 0xD1587200, 0xD156F580, - 0xD1557900, 0xD153FC80, 0xD1528000, - 0xD1510380, 0xD14F8700, 0xD14E0A80, - 0xD14C8E00, 0xD14B1180, 0xD1499500, - 0xD1481880, 0xD1469C00, 0xD1451F80, - 0xD143A300, 0xD1422680, 0xD140AA00, - 0xD13F2D80, 0xD13DB100, 0xD13C3480, - 0xD13AB800, 0xD1393B80, 0xD137BF00, - 0xD1364280, 0xD134C600, 0xD1334980, - 0xD131CD00, 0xD1305080, 0xD12ED400, - 0xD12D5780, 0xD12BDB00, 0xD12A5E80, - 0xD128E200, 0xD1276580, 0xD125E900, - 0xD1246C80, 0xD122F000, 0xD1217380, - 0xD11FF700, 0xD11E7A80, 0xD11CFE00, - 0xD11B8180, 0xD11A0500, 0xD1188880, - 0xD1170C00, 0xD1158F80, 0xD1141300, - 0xD1129680, 0xD1111A00, 0xD10F9D80, - 0xD10E2100, 0xD10CA480, 0xD10B2800, - 0xD109AB80, 0xD1082F00, 0xD106B280, - 0xD1053600, 0xD103B980, 0xD1023D00, - 0xD100C080, 0xD0FF4400, 0xD0FDC780, - 0xD0FC4B00, 0xD0FACE80, 0xD0F95200, - 0xD0F7D580, 0xD0F65900, 0xD0F4DC80, - 0xD0F36000, 0xD0F1E380, 0xD0F06700, - 0xD0EEEA80, 0xD0ED6E00, 0xD0EBF180, - 0xD0EA7500, 0xD0E8F880, 0xD0E77C00, - 0xD0E5FF80, 0xD0E48300, 0xD0E30680, - 0xD0E18A00, 0xD0E00D80, 0xD0DE9100, - 0xD0DD1480, 0xD0DB9800, 0xD0DA1B80, - 0xD0D89F00, 0xD0D72280, 0xD0D5A600, - 0xD0D42980, 0xD0D2AD00, 0xD0D13080, - 0xD0CFB400, 0xD0CE3780, 0xD0CCBB00, - 0xD0CB3E80, 0xD0C9C200, 0xD0C84580, - 0xD0C6C900, 0xD0C54C80, 0xD0C3D000, - 0xD0C25380, 0xD0C0D700, 0xD0BF5A80, - 0xD0BDDE00, 0xD0BC6180, 0xD0BAE500, - 0xD0B96880, 0xD0B7EC00, 0xD0B66F80, - 0xD0B4F300, 0xD0B37680, 0xD0B1FA00, - 0xD0B07D80, 0xD0AF0100, 0xD0AD8480, - 0xD0AC0800, 0xD0AA8B80, 0xD0A90F00, - 0xD0A79280, 0xD0A61600, 0xD0A49980, - 0xD0A31D00, 0xD0A1A080, 0xD0A02400, - 0xD09EA780, 0xD09D2B00, 0xD09BAE80, - 0xD09A3200, 0xD098B580, 0xD0973900, - 0xD095BC80, 0xD0944000, 0xD092C380, - 0xD0914700, 0xD08FCA80, 0xD08E4E00, - 0xD08CD180, 0xD08B5500, 0xD089D880, - 0xD0885C00, 0xD086DF80, 0xD0856300, - 0xD083E680, 0xD0826A00, 0xD080ED80, - 0xD07F7100, 0xD07DF480, 0xD07C7800, - 0xD07AFB80, 0xD0797F00, 0xD0780280, - 0xD0768600, 0xD0750980, 0xD0738D00, - 0xD0721080, 0xD0709400, 0xD06F1780, - 0xD06D9B00, 0xD06C1E80, 0xD06AA200, - 0xD0692580, 0xD067A900, 0xD0662C80, - 0xD064B000, 0xD0633380, 0xD061B700, - 0xD0603A80, 0xD05EBE00, 0xD05D4180, - 0xD05BC500, 0xD05A4880, 0xD058CC00, - 0xD0574F80, 0xD055D300, 0xD0545680, - 0xD052DA00, 0xD0515D80, 0xD04FE100, - 0xD04E6480, 0xD04CE800, 0xD04B6B80, - 0xD049EF00, 0xD0487280, 0xD046F600, - 0xD0457980, 0xD043FD00, 0xD0428080, - 0xD0410400, 0xD03F8780, 0xD03E0B00, - 0xD03C8E80, 0xD03B1200, 0xD0399580, - 0xD0381900, 0xD0369C80, 0xD0352000, - 0xD033A380, 0xD0322700, 0xD030AA80, - 0xD02F2E00, 0xD02DB180, 0xD02C3500, - 0xD02AB880, 0xD0293C00, 0xD027BF80, - 0xD0264300, 0xD024C680, 0xD0234A00, - 0xD021CD80, 0xD0205100, 0xD01ED480, - 0xD01D5800, 0xD01BDB80, 0xD01A5F00, - 0xD018E280, 0xD0176600, 0xD015E980, - 0xD0146D00, 0xD012F080, 0xD0117400, - 0xD00FF780, 0xD00E7B00, 0xD00CFE80, - 0xD00B8200, 0xD00A0580, 0xD0088900, - 0xD0070C80, 0xD0059000, 0xD0041380, - 0xD0029700, 0xD0011A80, 0xCFFF9E00, - 0xCFFE2180, 0xCFFCA500, 0xCFFB2880, - 0xCFF9AC00, 0xCFF82F80, 0xCFF6B300, - 0xCFF53680, 0xCFF3BA00, 0xCFF23D80, - 0xCFF0C100, 0xCFEF4480, 0xCFEDC800, - 0xCFEC4B80, 0xCFEACF00, 0xCFE95280, - 0xCFE7D600, 0xCFE65980, 0xCFE4DD00, - 0xCFE36080, 0xCFE1E400, 0xCFE06780, - 0xCFDEEB00, 0xCFDD6E80, 0xCFDBF200, - 0xCFDA7580, 0xCFD8F900, 0xCFD77C80, - 0xCFD60000, 0xCFD48380, 0xCFD30700, - 0xCFD18A80, 0xCFD00E00, 0xCFCE9180, - 0xCFCD1500, 0xCFCB9880, 0xCFCA1C00, - 0xCFC89F80, 0xCFC72300, 0xCFC5A680, - 0xCFC42A00, 0xCFC2AD80, 0xCFC13100, - 0xCFBFB480, 0xCFBE3800, 0xCFBCBB80, - 0xCFBB3F00, 0xCFB9C280, 0xCFB84600, - 0xCFB6C980, 0xCFB54D00, 0xCFB3D080, - 0xCFB25400, 0xCFB0D780, 0xCFAF5B00, - 0xCFADDE80, 0xCFAC6200, 0xCFAAE580, - 0xCFA96900, 0xCFA7EC80, 0xCFA67000, - 0xCFA4F380, 0xCFA37700, 0xCFA1FA80, - 0xCFA07E00, 0xCF9F0180, 0xCF9D8500, - 0xCF9C0880, 0xCF9A8C00, 0xCF990F80, - 0xCF979300, 0xCF961680, 0xCF949A00, - 0xCF931D80, 0xCF91A100, 0xCF902480, - 0xCF8EA800, 0xCF8D2B80, 0xCF8BAF00, - 0xCF8A3280, 0xCF88B600, 0xCF873980, - 0xCF85BD00, 0xCF844080, 0xCF82C400, - 0xCF814780, 0xCF7FCB00, 0xCF7E4E80, - 0xCF7CD200, 0xCF7B5580, 0xCF79D900, - 0xCF785C80, 0xCF76E000, 0xCF756380, - 0xCF73E700, 0xCF726A80, 0xCF70EE00, - 0xCF6F7180, 0xCF6DF500, 0xCF6C7880, - 0xCF6AFC00, 0xCF697F80, 0xCF680300, - 0xCF668680, 0xCF650A00, 0xCF638D80, - 0xCF621100, 0xCF609480, 0xCF5F1800, - 0xCF5D9B80, 0xCF5C1F00, 0xCF5AA280, - 0xCF592600, 0xCF57A980, 0xCF562D00, - 0xCF54B080, 0xCF533400, 0xCF51B780, - 0xCF503B00, 0xCF4EBE80, 0xCF4D4200, - 0xCF4BC580, 0xCF4A4900, 0xCF48CC80, - 0xCF475000, 0xCF45D380, 0xCF445700, - 0xCF42DA80, 0xCF415E00, 0xCF3FE180, - 0xCF3E6500, 0xCF3CE880, 0xCF3B6C00, - 0xCF39EF80, 0xCF387300, 0xCF36F680, - 0xCF357A00, 0xCF33FD80, 0xCF328100, - 0xCF310480, 0xCF2F8800, 0xCF2E0B80, - 0xCF2C8F00, 0xCF2B1280, 0xCF299600, - 0xCF281980, 0xCF269D00, 0xCF252080, - 0xCF23A400, 0xCF222780, 0xCF20AB00, - 0xCF1F2E80, 0xCF1DB200, 0xCF1C3580, - 0xCF1AB900, 0xCF193C80, 0xCF17C000, - 0xCF164380, 0xCF14C700, 0xCF134A80, - 0xCF11CE00, 0xCF105180, 0xCF0ED500, - 0xCF0D5880, 0xCF0BDC00, 0xCF0A5F80, - 0xCF08E300, 0xCF076680, 0xCF05EA00, - 0xCF046D80, 0xCF02F100, 0xCF017480, - 0xCEFFF800, 0xCEFE7B80, 0xCEFCFF00, - 0xCEFB8280, 0xCEFA0600, 0xCEF88980, - 0xCEF70D00, 0xCEF59080, 0xCEF41400, - 0xCEF29780, 0xCEF11B00, 0xCEEF9E80, - 0xCEEE2200, 0xCEECA580, 0xCEEB2900, - 0xCEE9AC80, 0xCEE83000, 0xCEE6B380, - 0xCEE53700, 0xCEE3BA80, 0xCEE23E00, - 0xCEE0C180, 0xCEDF4500, 0xCEDDC880, - 0xCEDC4C00, 0xCEDACF80, 0xCED95300, - 0xCED7D680, 0xCED65A00, 0xCED4DD80, - 0xCED36100, 0xCED1E480, 0xCED06800, - 0xCECEEB80, 0xCECD6F00, 0xCECBF280, - 0xCECA7600, 0xCEC8F980, 0xCEC77D00, - 0xCEC60080, 0xCEC48400, 0xCEC30780, - 0xCEC18B00, 0xCEC00E80, 0xCEBE9200, - 0xCEBD1580, 0xCEBB9900, 0xCEBA1C80, - 0xCEB8A000, 0xCEB72380, 0xCEB5A700, - 0xCEB42A80, 0xCEB2AE00, 0xCEB13180, - 0xCEAFB500, 0xCEAE3880, 0xCEACBC00, - 0xCEAB3F80, 0xCEA9C300, 0xCEA84680, - 0xCEA6CA00, 0xCEA54D80, 0xCEA3D100, - 0xCEA25480, 0xCEA0D800, 0xCE9F5B80, - 0xCE9DDF00, 0xCE9C6280, 0xCE9AE600, - 0xCE996980, 0xCE97ED00, 0xCE967080, - 0xCE94F400, 0xCE937780, 0xCE91FB00, - 0xCE907E80, 0xCE8F0200, 0xCE8D8580, - 0xCE8C0900, 0xCE8A8C80, 0xCE891000, - 0xCE879380, 0xCE861700, 0xCE849A80, - 0xCE831E00, 0xCE81A180, 0xCE802500, - 0xCE7EA880, 0xCE7D2C00, 0xCE7BAF80, - 0xCE7A3300, 0xCE78B680, 0xCE773A00, - 0xCE75BD80, 0xCE744100, 0xCE72C480, - 0xCE714800, 0xCE6FCB80, 0xCE6E4F00, - 0xCE6CD280, 0xCE6B5600, 0xCE69D980, - 0xCE685D00, 0xCE66E080, 0xCE656400, - 0xCE63E780, 0xCE626B00, 0xCE60EE80, - 0xCE5F7200, 0xCE5DF580, 0xCE5C7900, - 0xCE5AFC80, 0xCE598000, 0xCE580380, - 0xCE568700, 0xCE550A80, 0xCE538E00, - 0xCE521180, 0xCE509500, 0xCE4F1880, - 0xCE4D9C00, 0xCE4C1F80, 0xCE4AA300, - 0xCE492680, 0xCE47AA00, 0xCE462D80, - 0xCE44B100, 0xCE433480, 0xCE41B800, - 0xCE403B80, 0xCE3EBF00, 0xCE3D4280, - 0xCE3BC600, 0xCE3A4980, 0xCE38CD00, - 0xCE375080, 0xCE35D400, 0xCE345780, - 0xCE32DB00, 0xCE315E80, 0xCE2FE200, - 0xCE2E6580, 0xCE2CE900, 0xCE2B6C80, - 0xCE29F000, 0xCE287380, 0xCE26F700, - 0xCE257A80, 0xCE23FE00, 0xCE228180, - 0xCE210500, 0xCE1F8880, 0xCE1E0C00, - 0xCE1C8F80, 0xCE1B1300, 0xCE199680, - 0xCE181A00, 0xCE169D80, 0xCE152100, - 0xCE13A480, 0xCE122800, 0xCE10AB80, - 0xCE0F2F00, 0xCE0DB280, 0xCE0C3600, - 0xCE0AB980, 0xCE093D00, 0xCE07C080, - 0xCE064400, 0xCE04C780, 0xCE034B00, - 0xCE01CE80, 0xCE005200, 0xCDFED580, - 0xCDFD5900, 0xCDFBDC80, 0xCDFA6000, - 0xCDF8E380, 0xCDF76700, 0xCDF5EA80, - 0xCDF46E00, 0xCDF2F180, 0xCDF17500, - 0xCDEFF880, 0xCDEE7C00, 0xCDECFF80, - 0xCDEB8300, 0xCDEA0680, 0xCDE88A00, - 0xCDE70D80, 0xCDE59100, 0xCDE41480, - 0xCDE29800, 0xCDE11B80, 0xCDDF9F00, - 0xCDDE2280, 0xCDDCA600, 0xCDDB2980, - 0xCDD9AD00, 0xCDD83080, 0xCDD6B400, - 0xCDD53780, 0xCDD3BB00, 0xCDD23E80, - 0xCDD0C200, 0xCDCF4580, 0xCDCDC900, - 0xCDCC4C80, 0xCDCAD000, 0xCDC95380, - 0xCDC7D700, 0xCDC65A80, 0xCDC4DE00, - 0xCDC36180, 0xCDC1E500, 0xCDC06880, - 0xCDBEEC00, 0xCDBD6F80, 0xCDBBF300, - 0xCDBA7680, 0xCDB8FA00, 0xCDB77D80, - 0xCDB60100, 0xCDB48480, 0xCDB30800, - 0xCDB18B80, 0xCDB00F00, 0xCDAE9280, - 0xCDAD1600, 0xCDAB9980, 0xCDAA1D00, - 0xCDA8A080, 0xCDA72400, 0xCDA5A780, - 0xCDA42B00, 0xCDA2AE80, 0xCDA13200, - 0xCD9FB580, 0xCD9E3900, 0xCD9CBC80, - 0xCD9B4000, 0xCD99C380, 0xCD984700, - 0xCD96CA80, 0xCD954E00, 0xCD93D180, - 0xCD925500, 0xCD90D880, 0xCD8F5C00, - 0xCD8DDF80, 0xCD8C6300, 0xCD8AE680, - 0xCD896A00, 0xCD87ED80, 0xCD867100, - 0xCD84F480, 0xCD837800, 0xCD81FB80, - 0xCD807F00, 0xCD7F0280, 0xCD7D8600, - 0xCD7C0980, 0xCD7A8D00, 0xCD791080, - 0xCD779400, 0xCD761780, 0xCD749B00, - 0xCD731E80, 0xCD71A200, 0xCD702580, - 0xCD6EA900, 0xCD6D2C80, 0xCD6BB000, - 0xCD6A3380, 0xCD68B700, 0xCD673A80, - 0xCD65BE00, 0xCD644180, 0xCD62C500, - 0xCD614880, 0xCD5FCC00, 0xCD5E4F80, - 0xCD5CD300, 0xCD5B5680, 0xCD59DA00, - 0xCD585D80, 0xCD56E100, 0xCD556480, - 0xCD53E800, 0xCD526B80, 0xCD50EF00, - 0xCD4F7280, 0xCD4DF600, 0xCD4C7980, - 0xCD4AFD00, 0xCD498080, 0xCD480400, - 0xCD468780, 0xCD450B00, 0xCD438E80, - 0xCD421200, 0xCD409580, 0xCD3F1900, - 0xCD3D9C80, 0xCD3C2000, 0xCD3AA380, - 0xCD392700, 0xCD37AA80, 0xCD362E00, - 0xCD34B180, 0xCD333500, 0xCD31B880, - 0xCD303C00, 0xCD2EBF80, 0xCD2D4300, - 0xCD2BC680, 0xCD2A4A00, 0xCD28CD80, - 0xCD275100, 0xCD25D480, 0xCD245800, - 0xCD22DB80, 0xCD215F00, 0xCD1FE280, - 0xCD1E6600, 0xCD1CE980, 0xCD1B6D00, - 0xCD19F080, 0xCD187400, 0xCD16F780, - 0xCD157B00, 0xCD13FE80, 0xCD128200, - 0xCD110580, 0xCD0F8900, 0xCD0E0C80, - 0xCD0C9000, 0xCD0B1380, 0xCD099700, - 0xCD081A80, 0xCD069E00, 0xCD052180, - 0xCD03A500, 0xCD022880, 0xCD00AC00, - 0xCCFF2F80, 0xCCFDB300, 0xCCFC3680, - 0xCCFABA00, 0xCCF93D80, 0xCCF7C100, - 0xCCF64480, 0xCCF4C800, 0xCCF34B80, - 0xCCF1CF00, 0xCCF05280, 0xCCEED600, - 0xCCED5980, 0xCCEBDD00, 0xCCEA6080, - 0xCCE8E400, 0xCCE76780, 0xCCE5EB00, - 0xCCE46E80, 0xCCE2F200, 0xCCE17580, - 0xCCDFF900, 0xCCDE7C80, 0xCCDD0000, - 0xCCDB8380, 0xCCDA0700, 0xCCD88A80, - 0xCCD70E00, 0xCCD59180, 0xCCD41500, - 0xCCD29880, 0xCCD11C00, 0xCCCF9F80, - 0xCCCE2300, 0xCCCCA680, 0xCCCB2A00, - 0xCCC9AD80, 0xCCC83100, 0xCCC6B480, - 0xCCC53800, 0xCCC3BB80, 0xCCC23F00, - 0xCCC0C280, 0xCCBF4600, 0xCCBDC980, - 0xCCBC4D00, 0xCCBAD080, 0xCCB95400, - 0xCCB7D780, 0xCCB65B00, 0xCCB4DE80, - 0xCCB36200, 0xCCB1E580, 0xCCB06900, - 0xCCAEEC80, 0xCCAD7000, 0xCCABF380, - 0xCCAA7700, 0xCCA8FA80, 0xCCA77E00, - 0xCCA60180, 0xCCA48500, 0xCCA30880, - 0xCCA18C00, 0xCCA00F80, 0xCC9E9300, - 0xCC9D1680, 0xCC9B9A00, 0xCC9A1D80, - 0xCC98A100, 0xCC972480, 0xCC95A800, - 0xCC942B80, 0xCC92AF00, 0xCC913280, - 0xCC8FB600, 0xCC8E3980, 0xCC8CBD00, - 0xCC8B4080, 0xCC89C400, 0xCC884780, - 0xCC86CB00, 0xCC854E80, 0xCC83D200, - 0xCC825580, 0xCC80D900, 0xCC7F5C80, - 0xCC7DE000, 0xCC7C6380, 0xCC7AE700, - 0xCC796A80, 0xCC77EE00, 0xCC767180, - 0xCC74F500, 0xCC737880, 0xCC71FC00, - 0xCC707F80, 0xCC6F0300, 0xCC6D8680, - 0xCC6C0A00, 0xCC6A8D80, 0xCC691100, - 0xCC679480, 0xCC661800, 0xCC649B80, - 0xCC631F00, 0xCC61A280, 0xCC602600, - 0xCC5EA980, 0xCC5D2D00, 0xCC5BB080, - 0xCC5A3400, 0xCC58B780, 0xCC573B00, - 0xCC55BE80, 0xCC544200, 0xCC52C580, - 0xCC514900, 0xCC4FCC80, 0xCC4E5000, - 0xCC4CD380, 0xCC4B5700, 0xCC49DA80, - 0xCC485E00, 0xCC46E180, 0xCC456500, - 0xCC43E880, 0xCC426C00, 0xCC40EF80, - 0xCC3F7300, 0xCC3DF680, 0xCC3C7A00, - 0xCC3AFD80, 0xCC398100, 0xCC380480, - 0xCC368800, 0xCC350B80, 0xCC338F00, - 0xCC321280, 0xCC309600, 0xCC2F1980, - 0xCC2D9D00, 0xCC2C2080, 0xCC2AA400, - 0xCC292780, 0xCC27AB00, 0xCC262E80, - 0xCC24B200, 0xCC233580, 0xCC21B900, - 0xCC203C80, 0xCC1EC000, 0xCC1D4380, - 0xCC1BC700, 0xCC1A4A80, 0xCC18CE00, - 0xCC175180, 0xCC15D500, 0xCC145880, - 0xCC12DC00, 0xCC115F80, 0xCC0FE300, - 0xCC0E6680, 0xCC0CEA00, 0xCC0B6D80, - 0xCC09F100, 0xCC087480, 0xCC06F800, - 0xCC057B80, 0xCC03FF00, 0xCC028280, - 0xCC010600, 0xCBFF8980, 0xCBFE0D00, - 0xCBFC9080, 0xCBFB1400, 0xCBF99780, - 0xCBF81B00, 0xCBF69E80, 0xCBF52200, - 0xCBF3A580, 0xCBF22900, 0xCBF0AC80, - 0xCBEF3000, 0xCBEDB380, 0xCBEC3700, - 0xCBEABA80, 0xCBE93E00, 0xCBE7C180, - 0xCBE64500, 0xCBE4C880, 0xCBE34C00, - 0xCBE1CF80, 0xCBE05300, 0xCBDED680, - 0xCBDD5A00, 0xCBDBDD80, 0xCBDA6100, - 0xCBD8E480, 0xCBD76800, 0xCBD5EB80, - 0xCBD46F00, 0xCBD2F280, 0xCBD17600, - 0xCBCFF980, 0xCBCE7D00, 0xCBCD0080, - 0xCBCB8400, 0xCBCA0780, 0xCBC88B00, - 0xCBC70E80, 0xCBC59200, 0xCBC41580, - 0xCBC29900, 0xCBC11C80, 0xCBBFA000, - 0xCBBE2380, 0xCBBCA700, 0xCBBB2A80, - 0xCBB9AE00, 0xCBB83180, 0xCBB6B500, - 0xCBB53880, 0xCBB3BC00, 0xCBB23F80, - 0xCBB0C300, 0xCBAF4680, 0xCBADCA00, - 0xCBAC4D80, 0xCBAAD100, 0xCBA95480, - 0xCBA7D800, 0xCBA65B80, 0xCBA4DF00, - 0xCBA36280, 0xCBA1E600, 0xCBA06980, - 0xCB9EED00, 0xCB9D7080, 0xCB9BF400, - 0xCB9A7780, 0xCB98FB00, 0xCB977E80, - 0xCB960200, 0xCB948580, 0xCB930900, - 0xCB918C80, 0xCB901000, 0xCB8E9380, - 0xCB8D1700, 0xCB8B9A80, 0xCB8A1E00, - 0xCB88A180, 0xCB872500, 0xCB85A880, - 0xCB842C00, 0xCB82AF80, 0xCB813300, - 0xCB7FB680, 0xCB7E3A00, 0xCB7CBD80, - 0xCB7B4100, 0xCB79C480, 0xCB784800, - 0xCB76CB80, 0xCB754F00, 0xCB73D280, - 0xCB725600, 0xCB70D980, 0xCB6F5D00, - 0xCB6DE080, 0xCB6C6400, 0xCB6AE780, - 0xCB696B00, 0xCB67EE80, 0xCB667200, - 0xCB64F580, 0xCB637900, 0xCB61FC80, - 0xCB608000, 0xCB5F0380, 0xCB5D8700, - 0xCB5C0A80, 0xCB5A8E00, 0xCB591180, - 0xCB579500, 0xCB561880, 0xCB549C00, - 0xCB531F80, 0xCB51A300, 0xCB502680, - 0xCB4EAA00, 0xCB4D2D80, 0xCB4BB100, - 0xCB4A3480, 0xCB48B800, 0xCB473B80, - 0xCB45BF00, 0xCB444280, 0xCB42C600, - 0xCB414980, 0xCB3FCD00, 0xCB3E5080, - 0xCB3CD400, 0xCB3B5780, 0xCB39DB00, - 0xCB385E80, 0xCB36E200, 0xCB356580, - 0xCB33E900, 0xCB326C80, 0xCB30F000, - 0xCB2F7380, 0xCB2DF700, 0xCB2C7A80, - 0xCB2AFE00, 0xCB298180, 0xCB280500, - 0xCB268880, 0xCB250C00, 0xCB238F80, - 0xCB221300, 0xCB209680, 0xCB1F1A00, - 0xCB1D9D80, 0xCB1C2100, 0xCB1AA480, - 0xCB192800, 0xCB17AB80, 0xCB162F00, - 0xCB14B280, 0xCB133600, 0xCB11B980, - 0xCB103D00, 0xCB0EC080, 0xCB0D4400, - 0xCB0BC780, 0xCB0A4B00, 0xCB08CE80, - 0xCB075200, 0xCB05D580, 0xCB045900, - 0xCB02DC80, 0xCB016000, 0xCAFFE380, - 0xCAFE6700, 0xCAFCEA80, 0xCAFB6E00, - 0xCAF9F180, 0xCAF87500, 0xCAF6F880, - 0xCAF57C00, 0xCAF3FF80, 0xCAF28300, - 0xCAF10680, 0xCAEF8A00, 0xCAEE0D80, - 0xCAEC9100, 0xCAEB1480, 0xCAE99800, - 0xCAE81B80, 0xCAE69F00, 0xCAE52280, - 0xCAE3A600, 0xCAE22980, 0xCAE0AD00, - 0xCADF3080, 0xCADDB400, 0xCADC3780, - 0xCADABB00, 0xCAD93E80, 0xCAD7C200, - 0xCAD64580, 0xCAD4C900, 0xCAD34C80, - 0xCAD1D000, 0xCAD05380, 0xCACED700, - 0xCACD5A80, 0xCACBDE00, 0xCACA6180, - 0xCAC8E500, 0xCAC76880, 0xCAC5EC00, - 0xCAC46F80, 0xCAC2F300, 0xCAC17680, - 0xCABFFA00, 0xCABE7D80, 0xCABD0100, - 0xCABB8480, 0xCABA0800, 0xCAB88B80, - 0xCAB70F00, 0xCAB59280, 0xCAB41600, - 0xCAB29980, 0xCAB11D00, 0xCAAFA080, - 0xCAAE2400, 0xCAACA780, 0xCAAB2B00, - 0xCAA9AE80, 0xCAA83200, 0xCAA6B580, - 0xCAA53900, 0xCAA3BC80, 0xCAA24000, - 0xCAA0C380, 0xCA9F4700, 0xCA9DCA80, - 0xCA9C4E00, 0xCA9AD180, 0xCA995500, - 0xCA97D880, 0xCA965C00, 0xCA94DF80, - 0xCA936300, 0xCA91E680, 0xCA906A00, - 0xCA8EED80, 0xCA8D7100, 0xCA8BF480, - 0xCA8A7800, 0xCA88FB80, 0xCA877F00, - 0xCA860280, 0xCA848600, 0xCA830980, - 0xCA818D00, 0xCA801080, 0xCA7E9400, - 0xCA7D1780, 0xCA7B9B00, 0xCA7A1E80, - 0xCA78A200, 0xCA772580, 0xCA75A900, - 0xCA742C80, 0xCA72B000, 0xCA713380, - 0xCA6FB700, 0xCA6E3A80, 0xCA6CBE00, - 0xCA6B4180, 0xCA69C500, 0xCA684880, - 0xCA66CC00, 0xCA654F80, 0xCA63D300, - 0xCA625680, 0xCA60DA00, 0xCA5F5D80, - 0xCA5DE100, 0xCA5C6480, 0xCA5AE800, - 0xCA596B80, 0xCA57EF00, 0xCA567280, - 0xCA54F600, 0xCA537980, 0xCA51FD00, - 0xCA508080, 0xCA4F0400, 0xCA4D8780, - 0xCA4C0B00, 0xCA4A8E80, 0xCA491200, - 0xCA479580, 0xCA461900, 0xCA449C80, - 0xCA432000, 0xCA41A380, 0xCA402700, - 0xCA3EAA80, 0xCA3D2E00, 0xCA3BB180, - 0xCA3A3500, 0xCA38B880, 0xCA373C00, - 0xCA35BF80, 0xCA344300, 0xCA32C680, - 0xCA314A00, 0xCA2FCD80, 0xCA2E5100, - 0xCA2CD480, 0xCA2B5800, 0xCA29DB80, - 0xCA285F00, 0xCA26E280, 0xCA256600, - 0xCA23E980, 0xCA226D00, 0xCA20F080, - 0xCA1F7400, 0xCA1DF780, 0xCA1C7B00, - 0xCA1AFE80, 0xCA198200, 0xCA180580, - 0xCA168900, 0xCA150C80, 0xCA139000, - 0xCA121380, 0xCA109700, 0xCA0F1A80, - 0xCA0D9E00, 0xCA0C2180, 0xCA0AA500, - 0xCA092880, 0xCA07AC00, 0xCA062F80, - 0xCA04B300, 0xCA033680, 0xCA01BA00, - 0xCA003D80, 0xC9FEC100, 0xC9FD4480, - 0xC9FBC800, 0xC9FA4B80, 0xC9F8CF00, - 0xC9F75280, 0xC9F5D600, 0xC9F45980, - 0xC9F2DD00, 0xC9F16080, 0xC9EFE400, - 0xC9EE6780, 0xC9ECEB00, 0xC9EB6E80, - 0xC9E9F200, 0xC9E87580, 0xC9E6F900, - 0xC9E57C80, 0xC9E40000, 0xC9E29F00, - 0xC9E13E00, 0xC9DFDD00, 0xC9DE7C00, - 0xC9DD1B00, 0xC9DBBA00, 0xC9DA5900, - 0xC9D8F800, 0xC9D79700, 0xC9D63600, - 0xC9D4D500, 0xC9D37400, 0xC9D21300, - 0xC9D0B200, 0xC9CF5100, 0xC9CDF000, - 0xC9CC8F00, 0xC9CB2E00, 0xC9C9CD00, - 0xC9C86C00, 0xC9C70B00, 0xC9C5AA00, - 0xC9C44900, 0xC9C2E800, 0xC9C18700, - 0xC9C02600, 0xC9BEC500, 0xC9BD6400, - 0xC9BC0300, 0xC9BAA200, 0xC9B94100, - 0xC9B7E000, 0xC9B67F00, 0xC9B51E00, - 0xC9B3BD00, 0xC9B25C00, 0xC9B0FB00, - 0xC9AF9A00, 0xC9AE3900, 0xC9ACD800, - 0xC9AB7700, 0xC9AA1600, 0xC9A8B500, - 0xC9A75400, 0xC9A5F300, 0xC9A49200, - 0xC9A33100, 0xC9A1D000, 0xC9A06F00, - 0xC99F0E00, 0xC99DAD00, 0xC99C4C00, - 0xC99AEB00, 0xC9998A00, 0xC9982900, - 0xC996C800, 0xC9956700, 0xC9940600, - 0xC992A500, 0xC9914400, 0xC98FE300, - 0xC98E8200, 0xC98D2100, 0xC98BC000, - 0xC98A5F00, 0xC988FE00, 0xC9879D00, - 0xC9863C00, 0xC984DB00, 0xC9837A00, - 0xC9821900, 0xC980B800, 0xC97F5700, - 0xC97DF600, 0xC97C9500, 0xC97B3400, - 0xC979D300, 0xC9787200, 0xC9771100, - 0xC975B000, 0xC9744F00, 0xC972EE00, - 0xC9718D00, 0xC9702C00, 0xC96ECB00, - 0xC96D6A00, 0xC96C0900, 0xC96AA800, - 0xC9694700, 0xC967E600, 0xC9668500, - 0xC9652400, 0xC963C300, 0xC9626200, - 0xC9610100, 0xC95FA000, 0xC95E3F00, - 0xC95CDE00, 0xC95B7D00, 0xC95A1C00, - 0xC958BB00, 0xC9575A00, 0xC955F900, - 0xC9549800, 0xC9533700, 0xC951D600, - 0xC9507500, 0xC94F1400, 0xC94DB300, - 0xC94C5200, 0xC94AF100, 0xC9499000, - 0xC9482F00, 0xC946CE00, 0xC9456D00, - 0xC9440C00, 0xC942AB00, 0xC9414A00, - 0xC93FE900, 0xC93E8800, 0xC93D2700, - 0xC93BC600, 0xC93A6500, 0xC9390400, - 0xC937A300, 0xC9364200, 0xC934E100, - 0xC9338000, 0xC9321F00, 0xC930BE00, - 0xC92F5D00, 0xC92DFC00, 0xC92C9B00, - 0xC92B3A00, 0xC929D900, 0xC9287800, - 0xC9271700, 0xC925B600, 0xC9245500, - 0xC922F400, 0xC9219300, 0xC9203200, - 0xC91ED100, 0xC91D7000, 0xC91C0F00, - 0xC91AAE00, 0xC9194D00, 0xC917EC00, - 0xC9168B00, 0xC9152A00, 0xC913C900, - 0xC9126800, 0xC9110700, 0xC90FA600, - 0xC90E4500, 0xC90CE400, 0xC90B8300, - 0xC90A2200, 0xC908C100, 0xC9076000, - 0xC905FF00, 0xC9049E00, 0xC9033D00, - 0xC901DC00, 0xC9007B00, 0xC8FF1A00, - 0xC8FDB900, 0xC8FC5800, 0xC8FAF700, - 0xC8F99600, 0xC8F83500, 0xC8F6D400, - 0xC8F57300, 0xC8F41200, 0xC8F2B100, - 0xC8F15000, 0xC8EFEF00, 0xC8EE8E00, - 0xC8ED2D00, 0xC8EBCC00, 0xC8EA6B00, - 0xC8E90A00, 0xC8E7A900, 0xC8E64800, - 0xC8E4E700, 0xC8E38600, 0xC8E22500, - 0xC8E0C400, 0xC8DF6300, 0xC8DE0200, - 0xC8DCA100, 0xC8DB4000, 0xC8D9DF00, - 0xC8D87E00, 0xC8D71D00, 0xC8D5BC00, - 0xC8D45B00, 0xC8D2FA00, 0xC8D19900, - 0xC8D03800, 0xC8CED700, 0xC8CD7600, - 0xC8CC1500, 0xC8CAB400, 0xC8C95300, - 0xC8C7F200, 0xC8C69100, 0xC8C53000, - 0xC8C3CF00, 0xC8C26E00, 0xC8C10D00, - 0xC8BFAC00, 0xC8BE4B00, 0xC8BCEA00, - 0xC8BB8900, 0xC8BA2800, 0xC8B8C700, - 0xC8B76600, 0xC8B60500, 0xC8B4A400, - 0xC8B34300, 0xC8B1E200, 0xC8B08100, - 0xC8AF2000, 0xC8ADBF00, 0xC8AC5E00, - 0xC8AAFD00, 0xC8A99C00, 0xC8A83B00, - 0xC8A6DA00, 0xC8A57900, 0xC8A41800, - 0xC8A2B700, 0xC8A15600, 0xC89FF500, - 0xC89E9400, 0xC89D3300, 0xC89BD200, - 0xC89A7100, 0xC8991000, 0xC897AF00, - 0xC8964E00, 0xC894ED00, 0xC8938C00, - 0xC8922B00, 0xC890CA00, 0xC88F6900, - 0xC88E0800, 0xC88CA700, 0xC88B4600, - 0xC889E500, 0xC8888400, 0xC8872300, - 0xC885C200, 0xC8846100, 0xC8830000, - 0xC8819F00, 0xC8803E00, 0xC87EDD00, - 0xC87D7C00, 0xC87C1B00, 0xC87ABA00, - 0xC8795900, 0xC877F800, 0xC8769700, - 0xC8753600, 0xC873D500, 0xC8727400, - 0xC8711300, 0xC86FB200, 0xC86E5100, - 0xC86CF000, 0xC86B8F00, 0xC86A2E00, - 0xC868CD00, 0xC8676C00, 0xC8660B00, - 0xC864AA00, 0xC8634900, 0xC861E800, - 0xC8608700, 0xC85F2600, 0xC85DC500, - 0xC85C6400, 0xC85B0300, 0xC859A200, - 0xC8584100, 0xC856E000, 0xC8557F00, - 0xC8541E00, 0xC852BD00, 0xC8515C00, - 0xC84FFB00, 0xC84E9A00, 0xC84D3900, - 0xC84BD800, 0xC84A7700, 0xC8491600, - 0xC847B500, 0xC8465400, 0xC844F300, - 0xC8439200, 0xC8423100, 0xC840D000, - 0xC83F6F00, 0xC83E0E00, 0xC83CAD00, - 0xC83B4C00, 0xC839EB00, 0xC8388A00, - 0xC8372900, 0xC835C800, 0xC8346700, - 0xC8330600, 0xC831A500, 0xC8304400, - 0xC82EE300, 0xC82D8200, 0xC82C2100, - 0xC82AC000, 0xC8295F00, 0xC827FE00, - 0xC8269D00, 0xC8253C00, 0xC823DB00, - 0xC8227A00, 0xC8211900, 0xC81FB800, - 0xC81E5700, 0xC81CF600, 0xC81B9500, - 0xC81A3400, 0xC818D300, 0xC8177200, - 0xC8161100, 0xC814B000, 0xC8134F00, - 0xC811EE00, 0xC8108D00, 0xC80F2C00, - 0xC80DCB00, 0xC80C6A00, 0xC80B0900, - 0xC809A800, 0xC8084700, 0xC806E600, - 0xC8058500, 0xC8042400, 0xC802C300, - 0xC8016200, 0xC8000100, 0xC7FEA000, - 0xC7FD3F00, 0xC7FBDE00, 0xC7FA7D00, - 0xC7F91C00, 0xC7F7BB00, 0xC7F65A00, - 0xC7F4F900, 0xC7F39800, 0xC7F23700, - 0xC7F0D600, 0xC7EF7500, 0xC7EE1400, - 0xC7ECB300, 0xC7EB5200, 0xC7E9F100, - 0xC7E89000, 0xC7E72F00, 0xC7E5CE00, - 0xC7E46D00, 0xC7E30C00, 0xC7E1AB00, - 0xC7E04A00, 0xC7DEE900, 0xC7DD8800, - 0xC7DC2700, 0xC7DAC600, 0xC7D96500, - 0xC7D80400, 0xC7D6A300, 0xC7D54200, - 0xC7D3E100, 0xC7D28000, 0xC7D11F00, - 0xC7CFBE00, 0xC7CE5D00, 0xC7CCFC00, - 0xC7CB9B00, 0xC7CA3A00, 0xC7C8D900, - 0xC7C77800, 0xC7C61700, 0xC7C4B600, - 0xC7C35500, 0xC7C1F400, 0xC7C09300, - 0xC7BF3200, 0xC7BDD100, 0xC7BC7000, - 0xC7BB0F00, 0xC7B9AE00, 0xC7B84D00, - 0xC7B6EC00, 0xC7B58B00, 0xC7B42A00, - 0xC7B2C900, 0xC7B16800, 0xC7B00700, - 0xC7AEA600, 0xC7AD4500, 0xC7ABE400, - 0xC7AA8300, 0xC7A92200, 0xC7A7C100, - 0xC7A66000, 0xC7A4FF00, 0xC7A39E00, - 0xC7A23D00, 0xC7A0DC00, 0xC79F7B00, - 0xC79E1A00, 0xC79CB900, 0xC79B5800, - 0xC799F700, 0xC7989600, 0xC7973500, - 0xC795D400, 0xC7947300, 0xC7931200, - 0xC791B100, 0xC7905000, 0xC78EEF00, - 0xC78D8E00, 0xC78C2D00, 0xC78ACC00, - 0xC7896B00, 0xC7880A00, 0xC786A900, - 0xC7854800, 0xC783E700, 0xC7828600, - 0xC7812500, 0xC77FC400, 0xC77E6300, - 0xC77D0200, 0xC77BA100, 0xC77A4000, - 0xC778DF00, 0xC7777E00, 0xC7761D00, - 0xC774BC00, 0xC7735B00, 0xC771FA00, - 0xC7709900, 0xC76F3800, 0xC76DD700, - 0xC76C7600, 0xC76B1500, 0xC769B400, - 0xC7685300, 0xC766F200, 0xC7659100, - 0xC7643000, 0xC762CF00, 0xC7616E00, - 0xC7600D00, 0xC75EAC00, 0xC75D4B00, - 0xC75BEA00, 0xC75A8900, 0xC7592800, - 0xC757C700, 0xC7566600, 0xC7550500, - 0xC753A400, 0xC7524300, 0xC750E200, - 0xC74F8100, 0xC74E2000, 0xC74CBF00, - 0xC74B5E00, 0xC749FD00, 0xC7489C00, - 0xC7473B00, 0xC745DA00, 0xC7447900, - 0xC7431800, 0xC741B700, 0xC7405600, - 0xC73EF500, 0xC73D9400, 0xC73C3300, - 0xC73AD200, 0xC7397100, 0xC7381000, - 0xC736AF00, 0xC7354E00, 0xC733ED00, - 0xC7328C00, 0xC7312B00, 0xC72FCA00, - 0xC72E6900, 0xC72D0800, 0xC72BA700, - 0xC72A4600, 0xC728E500, 0xC7278400, - 0xC7262300, 0xC724C200, 0xC7236100, - 0xC7220000, 0xC7209F00, 0xC71F3E00, - 0xC71DDD00, 0xC71C7C00, 0xC71B1B00, - 0xC719BA00, 0xC7185900, 0xC716F800, - 0xC7159700, 0xC7143600, 0xC712D500, - 0xC7117400, 0xC7101300, 0xC70EB200, - 0xC70D5100, 0xC70BF000, 0xC70A8F00, - 0xC7092E00, 0xC707CD00, 0xC7066C00, - 0xC7050B00, 0xC703AA00, 0xC7024900, - 0xC700E800, 0xC6FF8700, 0xC6FE2600, - 0xC6FCC500, 0xC6FB6400, 0xC6FA0300, - 0xC6F8A200, 0xC6F74100, 0xC6F5E000, - 0xC6F47F00, 0xC6F31E00, 0xC6F1BD00, - 0xC6F05C00, 0xC6EEFB00, 0xC6ED9A00, - 0xC6EC3900, 0xC6EAD800, 0xC6E97700, - 0xC6E81600, 0xC6E6B500, 0xC6E55400, - 0xC6E3F300, 0xC6E29200, 0xC6E13100, - 0xC6DFD000, 0xC6DE6F00, 0xC6DD0E00, - 0xC6DBAD00, 0xC6DA4C00, 0xC6D8EB00, - 0xC6D78A00, 0xC6D62900, 0xC6D4C800, - 0xC6D36700, 0xC6D20600, 0xC6D0A500, - 0xC6CF4400, 0xC6CDE300, 0xC6CC8200, - 0xC6CB2100, 0xC6C9C000, 0xC6C85F00, - 0xC6C6FE00, 0xC6C59D00, 0xC6C43C00, - 0xC6C2DB00, 0xC6C17A00, 0xC6C01900, - 0xC6BEB800, 0xC6BD5700, 0xC6BBF600, - 0xC6BA9500, 0xC6B93400, 0xC6B7D300, - 0xC6B67200, 0xC6B51100, 0xC6B3B000, - 0xC6B24F00, 0xC6B0EE00, 0xC6AF8D00, - 0xC6AE2C00, 0xC6ACCB00, 0xC6AB6A00, - 0xC6AA0900, 0xC6A8A800, 0xC6A74700, - 0xC6A5E600, 0xC6A48500, 0xC6A32400, - 0xC6A1C300, 0xC6A06200, 0xC69F0100, - 0xC69DA000, 0xC69C3F00, 0xC69ADE00, - 0xC6997D00, 0xC6981C00, 0xC696BB00, - 0xC6955A00, 0xC693F900, 0xC6929800, - 0xC6913700, 0xC68FD600, 0xC68E7500, - 0xC68D1400, 0xC68BB300, 0xC68A5200, - 0xC688F100, 0xC6879000, 0xC6862F00, - 0xC684CE00, 0xC6836D00, 0xC6820C00, - 0xC680AB00, 0xC67F4A00, 0xC67DE900, - 0xC67C8800, 0xC67B2700, 0xC679C600, - 0xC6786500, 0xC6770400, 0xC675A300, - 0xC6744200, 0xC672E100, 0xC6718000, - 0xC6701F00, 0xC66EBE00, 0xC66D5D00, - 0xC66BFC00, 0xC66A9B00, 0xC6693A00, - 0xC667D900, 0xC6667800, 0xC6651700, - 0xC663B600, 0xC6625500, 0xC660F400, - 0xC65F9300, 0xC65E3200, 0xC65CD100, - 0xC65B7000, 0xC65A0F00, 0xC658AE00, - 0xC6574D00, 0xC655EC00, 0xC6548B00, - 0xC6532A00, 0xC651C900, 0xC6506800, - 0xC64F0700, 0xC64DA600, 0xC64C4500, - 0xC64AE400, 0xC6498300, 0xC6482200, - 0xC646C100, 0xC6456000, 0xC643FF00, - 0xC6429E00, 0xC6413D00, 0xC63FDC00, - 0xC63E7B00, 0xC63D1A00, 0xC63BB900, - 0xC63A5800, 0xC638F700, 0xC6379600, - 0xC6363500, 0xC634D400, 0xC6337300, - 0xC6321200, 0xC630B100, 0xC62F5000, - 0xC62DEF00, 0xC62C8E00, 0xC62B2D00, - 0xC629CC00, 0xC6286B00, 0xC6270A00, - 0xC625A900, 0xC6244800, 0xC622E700, - 0xC6218600, 0xC6202500, 0xC61EC400, - 0xC61D6300, 0xC61C0200, 0xC61AA100, - 0xC6194000, 0xC617DF00, 0xC6167E00, - 0xC6151D00, 0xC613BC00, 0xC6125B00, - 0xC610FA00, 0xC60F9900, 0xC60E3800, - 0xC60CD700, 0xC60B7600, 0xC60A1500, - 0xC608B400, 0xC6075300, 0xC605F200, - 0xC6049100, 0xC6033000, 0xC601CF00, - 0xC6006E00, 0xC5FF0D00, 0xC5FDAC00, - 0xC5FC4B00, 0xC5FAEA00, 0xC5F98900, - 0xC5F82800, 0xC5F6C700, 0xC5F56600, - 0xC5F40500, 0xC5F2A400, 0xC5F14300, - 0xC5EFE200, 0xC5EE8100, 0xC5ED2000, - 0xC5EBBF00, 0xC5EA5E00, 0xC5E8FD00, - 0xC5E79C00, 0xC5E63B00, 0xC5E4DA00, - 0xC5E37900, 0xC5E21800, 0xC5E0B700, - 0xC5DF5600, 0xC5DDF500, 0xC5DC9400, - 0xC5DB3300, 0xC5D9D200, 0xC5D87100, - 0xC5D71000, 0xC5D5AF00, 0xC5D44E00, - 0xC5D2ED00, 0xC5D18C00, 0xC5D02B00, - 0xC5CECA00, 0xC5CD6900, 0xC5CC0800, - 0xC5CAA700, 0xC5C94600, 0xC5C7E500, - 0xC5C68400, 0xC5C52300, 0xC5C3C200, - 0xC5C26100, 0xC5C10000, 0xC5BF9F00, - 0xC5BE3E00, 0xC5BCDD00, 0xC5BB7C00, - 0xC5BA1B00, 0xC5B8BA00, 0xC5B75900, - 0xC5B5F800, 0xC5B49700, 0xC5B33600, - 0xC5B1D500, 0xC5B07400, 0xC5AF1300, - 0xC5ADB200, 0xC5AC5100, 0xC5AAF000, - 0xC5A98F00, 0xC5A82E00, 0xC5A6CD00, - 0xC5A56C00, 0xC5A40B00, 0xC5A2AA00, - 0xC5A14900, 0xC59FE800, 0xC59E8700, - 0xC59D2600, 0xC59BC500, 0xC59A6400, - 0xC5990300, 0xC597A200, 0xC5964100, - 0xC594E000, 0xC5937F00, 0xC5921E00, - 0xC590BD00, 0xC58F5C00, 0xC58DFB00, - 0xC58C9A00, 0xC58B3900, 0xC589D800, - 0xC5887700, 0xC5871600, 0xC585B500, - 0xC5845400, 0xC582F300, 0xC5819200, - 0xC5803100, 0xC57ED000, 0xC57D6F00, - 0xC57C0E00, 0xC57AAD00, 0xC5794C00, - 0xC577EB00, 0xC5768A00, 0xC5752900, - 0xC573C800, 0xC5726700, 0xC5710600, - 0xC56FA500, 0xC56E4400, 0xC56CE300, - 0xC56B8200, 0xC56A2100, 0xC568C000, - 0xC5675F00, 0xC565FE00, 0xC5649D00, - 0xC5633C00, 0xC561DB00, 0xC5607A00, - 0xC55F1900, 0xC55DB800, 0xC55C5700, - 0xC55AF600, 0xC5599500, 0xC5583400, - 0xC556D300, 0xC5557200, 0xC5541100, - 0xC552B000, 0xC5514F00, 0xC54FEE00, - 0xC54E8D00, 0xC54D2C00, 0xC54BCB00, - 0xC54A6A00, 0xC5490900, 0xC547A800, - 0xC5464700, 0xC544E600, 0xC5438500, - 0xC5422400, 0xC540C300, 0xC53F6200, - 0xC53E0100, 0xC53CA000, 0xC53B3F00, - 0xC539DE00, 0xC5387D00, 0xC5371C00, - 0xC535BB00, 0xC5345A00, 0xC532F900, - 0xC5319800, 0xC5303700, 0xC52ED600, - 0xC52D7500, 0xC52C1400, 0xC52AB300, - 0xC5295200, 0xC527F100, 0xC5269000, - 0xC5252F00, 0xC523CE00, 0xC5226D00, - 0xC5210C00, 0xC51FAB00, 0xC51E4A00, - 0xC51CE900, 0xC51B8800, 0xC51A2700, - 0xC518C600, 0xC5176500, 0xC5160400, - 0xC514A300, 0xC5134200, 0xC511E100, - 0xC5108000, 0xC50F1F00, 0xC50DBE00, - 0xC50C5D00, 0xC50AFC00, 0xC5099B00, - 0xC5083A00, 0xC506D900, 0xC5057800, - 0xC5041700, 0xC502B600, 0xC5015500, - 0xC4FFF400, 0xC4FE9300, 0xC4FD3200, - 0xC4FBD100, 0xC4FA7000, 0xC4F90F00, - 0xC4F7AE00, 0xC4F64D00, 0xC4F4EC00, - 0xC4F38B00, 0xC4F22A00, 0xC4F0C900, - 0xC4EF6800, 0xC4EE0700, 0xC4ECA600, - 0xC4EB4500, 0xC4E9E400, 0xC4E88300, - 0xC4E72200, 0xC4E5C100, 0xC4E46000, - 0xC4E2FF00, 0xC4E19E00, 0xC4E03D00, - 0xC4DEDC00, 0xC4DD7B00, 0xC4DC1A00, - 0xC4DAB900, 0xC4D95800, 0xC4D7F700, - 0xC4D69600, 0xC4D53500, 0xC4D3D400, - 0xC4D27300, 0xC4D11200, 0xC4CFB100, - 0xC4CE5000, 0xC4CCEF00, 0xC4CB8E00, - 0xC4CA2D00, 0xC4C8CC00, 0xC4C76B00, - 0xC4C60A00, 0xC4C4A900, 0xC4C34800, - 0xC4C1E700, 0xC4C08600, 0xC4BF2500, - 0xC4BDC400, 0xC4BC6300, 0xC4BB0200, - 0xC4B9A100, 0xC4B84000, 0xC4B6DF00, - 0xC4B57E00, 0xC4B41D00, 0xC4B2BC00, - 0xC4B15B00, 0xC4AFFA00, 0xC4AE9900, - 0xC4AD3800, 0xC4ABD700, 0xC4AA7600, - 0xC4A91500, 0xC4A7B400, 0xC4A65300, - 0xC4A4F200, 0xC4A39100, 0xC4A23000, - 0xC4A0CF00, 0xC49F6E00, 0xC49E0D00, - 0xC49CAC00, 0xC49B4B00, 0xC499EA00, - 0xC4988900, 0xC4972800, 0xC495C700, - 0xC4946600, 0xC4930500, 0xC491A400, - 0xC4904300, 0xC48EE200, 0xC48D8100, - 0xC48C2000, 0xC48ABF00, 0xC4895E00, - 0xC487FD00, 0xC4869C00, 0xC4853B00, - 0xC483DA00, 0xC4827900, 0xC4811800, - 0xC47FB700, 0xC47E5600, 0xC47CF500, - 0xC47B9400, 0xC47A3300, 0xC478D200, - 0xC4777100, 0xC4761000, 0xC474AF00, - 0xC4734E00, 0xC471ED00, 0xC4708C00, - 0xC46F2B00, 0xC46DCA00, 0xC46C6900, - 0xC46B0800, 0xC469A700, 0xC4684600, - 0xC466E500, 0xC4658400, 0xC4642300, - 0xC462C200, 0xC4616100, 0xC4600000, - 0xC45E9F00, 0xC45D3E00, 0xC45BDD00, - 0xC45A7C00, 0xC4591B00, 0xC457BA00, - 0xC4565900, 0xC454F800, 0xC4539700, - 0xC4523600, 0xC450D500, 0xC44F7400, - 0xC44E1300, 0xC44CB200, 0xC44B5100, - 0xC449F000, 0xC4488F00, 0xC4472E00, - 0xC445CD00, 0xC4446C00, 0xC4430B00, - 0xC441AA00, 0xC4404900, 0xC43EE800, - 0xC43D8700, 0xC43C2600, 0xC43AC500, - 0xC4396400, 0xC4380300, 0xC436A200, - 0xC4354100, 0xC433E000, 0xC4327F00, - 0xC4311E00, 0xC42FBD00, 0xC42E5C00, - 0xC42CFB00, 0xC42B9A00, 0xC42A3900, - 0xC428D800, 0xC4277700, 0xC4261600, - 0xC424B500, 0xC4235400, 0xC421F300, - 0xC4209200, 0xC41F3100, 0xC41DD000, - 0xC41C6F00, 0xC41B0E00, 0xC419AD00, - 0xC4184C00, 0xC416EB00, 0xC4158A00, - 0xC4142900, 0xC412C800, 0xC4116700, - 0xC4100600, 0xC40EA500, 0xC40D4400, - 0xC40BE300, 0xC40A8200, 0xC4092100, - 0xC407C000, 0xC4065F00, 0xC404FE00, - 0xC4039D00, 0xC4023C00, 0xC400DB00, - 0xC3FF7A00, 0xC3FE1900, 0xC3FCB800, - 0xC3FB5700, 0xC3F9F600, 0xC3F89500, - 0xC3F73400, 0xC3F5D300, 0xC3F47200, - 0xC3F31100, 0xC3F1B000, 0xC3F04F00, - 0xC3EEEE00, 0xC3ED8D00, 0xC3EC2C00, - 0xC3EACB00, 0xC3E96A00, 0xC3E80900, - 0xC3E6A800, 0xC3E54700, 0xC3E3E600, - 0xC3E28500, 0xC3E12400, 0xC3DFC300, - 0xC3DE6200, 0xC3DD0100, 0xC3DBA000, - 0xC3DA3F00, 0xC3D8DE00, 0xC3D77D00, - 0xC3D61C00, 0xC3D4BB00, 0xC3D35A00, - 0xC3D1F900, 0xC3D09800, 0xC3CF3700, - 0xC3CDD600, 0xC3CC7500, 0xC3CB1400, - 0xC3C9B300, 0xC3C85200, 0xC3C6F100, - 0xC3C59000, 0xC3C42F00, 0xC3C2CE00, - 0xC3C16D00, 0xC3C00C00, 0xC3BEAB00, - 0xC3BD4A00, 0xC3BBE900, 0xC3BA8800, - 0xC3B92700, 0xC3B7C600, 0xC3B66500, - 0xC3B50400, 0xC3B3A300, 0xC3B24200, - 0xC3B0E100, 0xC3AF8000, 0xC3AE1F00, - 0xC3ACBE00, 0xC3AB5D00, 0xC3A9FC00, - 0xC3A89B00, 0xC3A73A00, 0xC3A5D900, - 0xC3A47800, 0xC3A31700, 0xC3A1B600, - 0xC3A05500, 0xC39EF400, 0xC39D9300, - 0xC39C3200, 0xC39AD100, 0xC3997000, - 0xC3980F00, 0xC396AE00, 0xC3954D00, - 0xC393EC00, 0xC3928B00, 0xC3912A00, - 0xC38FC900, 0xC38E6800, 0xC38D0700, - 0xC38BA600, 0xC38A4500, 0xC388E400, - 0xC3878300, 0xC3862200, 0xC384C100, - 0xC3836000, 0xC381FF00, 0xC3809E00, - 0xC37F3D00, 0xC37DDC00, 0xC37C7B00, - 0xC37B1A00, 0xC379B900, 0xC3785800, - 0xC376F700, 0xC3759600, 0xC3743500, - 0xC372D400, 0xC3717300, 0xC3701200, - 0xC36EB100, 0xC36D5000, 0xC36BEF00, - 0xC36A8E00, 0xC3692D00, 0xC367CC00, - 0xC3666B00, 0xC3650A00, 0xC363A900, - 0xC3624800, 0xC360E700, 0xC35F8600, - 0xC35E2500, 0xC35CC400, 0xC35B6300, - 0xC35A0200, 0xC358A100, 0xC3574000, - 0xC355DF00, 0xC3547E00, 0xC3531D00, - 0xC351BC00, 0xC3505B00, 0xC34EFA00, - 0xC34D9900, 0xC34C3800, 0xC34AD700, - 0xC3497600, 0xC3481500, 0xC346B400, - 0xC3455300, 0xC343F200, 0xC3429100, - 0xC3413000, 0xC33FCF00, 0xC33E6E00, - 0xC33D0D00, 0xC33BAC00, 0xC33A4B00, - 0xC338EA00, 0xC3378900, 0xC3362800, - 0xC334C700, 0xC3336600, 0xC3320500, - 0xC330A400, 0xC32F4300, 0xC32DE200, - 0xC32C8100, 0xC32B2000, 0xC329BF00, - 0xC3285E00, 0xC326FD00, 0xC3259C00, - 0xC3243B00, 0xC322DA00, 0xC3217900, - 0xC3201800, 0xC31EB700, 0xC31D5600, - 0xC31BF500, 0xC31A9400, 0xC3193300, - 0xC317D200, 0xC3167100, 0xC3151000, - 0xC313AF00, 0xC3124E00, 0xC310ED00, - 0xC30F8C00, 0xC30E2B00, 0xC30CCA00, - 0xC30B6900, 0xC30A0800, 0xC308A700, - 0xC3074600, 0xC305E500, 0xC3048400, - 0xC3032300, 0xC301C200, 0xC3006100, - 0xC2FF0000, 0xC2FD9F00, 0xC2FC3E00, - 0xC2FADD00, 0xC2F97C00, 0xC2F81B00, - 0xC2F6BA00, 0xC2F55900, 0xC2F3F800, - 0xC2F29700, 0xC2F13600, 0xC2EFD500, - 0xC2EE7400, 0xC2ED1300, 0xC2EBB200, - 0xC2EA5100, 0xC2E8F000, 0xC2E78F00, - 0xC2E62E00, 0xC2E4CD00, 0xC2E36C00, - 0xC2E20B00, 0xC2E0AA00, 0xC2DF4900, - 0xC2DDE800, 0xC2DC8700, 0xC2DB2600, - 0xC2D9C500, 0xC2D86400, 0xC2D70300, - 0xC2D5A200, 0xC2D44100, 0xC2D2E000, - 0xC2D17F00, 0xC2D01E00, 0xC2CEBD00, - 0xC2CD5C00, 0xC2CBFB00, 0xC2CA9A00, - 0xC2C93900, 0xC2C7D800, 0xC2C67700, - 0xC2C51600, 0xC2C3B500, 0xC2C25400, - 0xC2C0F300, 0xC2BF9200, 0xC2BE3100, - 0xC2BCD000, 0xC2BB6F00, 0xC2BA0E00, - 0xC2B8AD00, 0xC2B74C00, 0xC2B5EB00, - 0xC2B48A00, 0xC2B32900, 0xC2B1C800, - 0xC2B06700, 0xC2AF0600, 0xC2ADA500, - 0xC2AC4400, 0xC2AAE300, 0xC2A98200, - 0xC2A82100, 0xC2A6C000, 0xC2A55F00, - 0xC2A3FE00, 0xC2A29D00, 0xC2A13C00, - 0xC29FDB00, 0xC29E7A00, 0xC29D1900, - 0xC29BB800, 0xC29A5700, 0xC298F600, - 0xC2979500, 0xC2963400, 0xC294D300, - 0xC2937200, 0xC2921100, 0xC290B000, - 0xC28F4F00, 0xC28DEE00, 0xC28C8D00, - 0xC28B2C00, 0xC289CB00, 0xC2886A00, - 0xC2870900, 0xC285A800, 0xC2844700, - 0xC282E600, 0xC2818500, 0xC2802400, - 0xC27EC300, 0xC27D6200, 0xC27C0100, - 0xC27AA000, 0xC2793F00, 0xC277DE00, - 0xC2767D00, 0xC2751C00, 0xC273BB00, - 0xC2725A00, 0xC270F900, 0xC26F9800, - 0xC26E3700, 0xC26CD600, 0xC26B7500, - 0xC26A1400, 0xC268B300, 0xC2675200, - 0xC265F100, 0xC2649000, 0xC2632F00, - 0xC261CE00, 0xC2606D00, 0xC25F0C00, - 0xC25DAB00, 0xC25C4A00, 0xC25AE900, - 0xC2598800, 0xC2582700, 0xC256C600, - 0xC2556500, 0xC2540400, 0xC252A300, - 0xC2514200, 0xC24FE100, 0xC24E8000, - 0xC24D1F00, 0xC24BBE00, 0xC24A5D00, - 0xC248FC00, 0xC2479B00, 0xC2463A00, - 0xC244D900, 0xC2437800, 0xC2421700, - 0xC240B600, 0xC23F5500, 0xC23DF400, - 0xC23C9300, 0xC23B3200, 0xC239D100, - 0xC2387000, 0xC2370F00, 0xC235AE00, - 0xC2344D00, 0xC232EC00, 0xC2318B00, - 0xC2302A00, 0xC22EC900, 0xC22D6800, - 0xC22C0700, 0xC22AA600, 0xC2294500, - 0xC227E400, 0xC2268300, 0xC2252200, - 0xC223C100, 0xC2226000, 0xC220FF00, - 0xC21F9E00, 0xC21E3D00, 0xC21CDC00, - 0xC21B7B00, 0xC21A1A00, 0xC218B900, - 0xC2175800, 0xC215F700, 0xC2149600, - 0xC2133500, 0xC211D400, 0xC2107300, - 0xC20F1200, 0xC20DB100, 0xC20C5000, - 0xC20AEF00, 0xC2098E00, 0xC2082D00, - 0xC206CC00, 0xC2056B00, 0xC2040A00, - 0xC202A900, 0xC2014800, 0xC1FFE700, - 0xC1FE8600, 0xC1FD2500, 0xC1FBC400, - 0xC1FA6300, 0xC1F90200, 0xC1F7A100, - 0xC1F64000, 0xC1F4DF00, 0xC1F37E00, - 0xC1F21D00, 0xC1F0BC00, 0xC1EF5B00, - 0xC1EDFA00, 0xC1EC9900, 0xC1EB3800, - 0xC1E9D700, 0xC1E87600, 0xC1E71500, - 0xC1E5B400, 0xC1E45300, 0xC1E2F200, - 0xC1E19100, 0xC1E03000, 0xC1DECF00, - 0xC1DD6E00, 0xC1DC0D00, 0xC1DAAC00, - 0xC1D94B00, 0xC1D7EA00, 0xC1D68900, - 0xC1D52800, 0xC1D3C700, 0xC1D26600, - 0xC1D10500, 0xC1CFA400, 0xC1CE4300, - 0xC1CCE200, 0xC1CB8100, 0xC1CA2000, - 0xC1C8BF00, 0xC1C75E00, 0xC1C5FD00, - 0xC1C49C00, 0xC1C33B00, 0xC1C1DA00, - 0xC1C07900, 0xC1BF1800, 0xC1BDB700, - 0xC1BC5600, 0xC1BAF500, 0xC1B99400, - 0xC1B83300, 0xC1B6D200, 0xC1B57100, - 0xC1B41000, 0xC1B2AF00, 0xC1B14E00, - 0xC1AFED00, 0xC1AE8C00, 0xC1AD2B00, - 0xC1ABCA00, 0xC1AA6900, 0xC1A90800, - 0xC1A7A700, 0xC1A64600, 0xC1A4E500, - 0xC1A38400, 0xC1A22300, 0xC1A0C200, - 0xC19F6100, 0xC19E0000, 0xC19C9F00, - 0xC19B3E00, 0xC199DD00, 0xC1987C00, - 0xC1971B00, 0xC195BA00, 0xC1945900, - 0xC192F800, 0xC1919700, 0xC1903600, - 0xC18ED500, 0xC18D7400, 0xC18C1300, - 0xC18AB200, 0xC1895100, 0xC187F000, - 0xC1868F00, 0xC1852E00, 0xC183CD00, - 0xC1826C00, 0xC1810B00, 0xC17FAA00, - 0xC17E4900, 0xC17CE800, 0xC17B8700, - 0xC17A2600, 0xC178C500, 0xC1776400, - 0xC1760300, 0xC174A200, 0xC1734100, - 0xC171E000, 0xC1707F00, 0xC16F1E00, - 0xC16DBD00, 0xC16C5C00, 0xC16AFB00, - 0xC1699A00, 0xC1683900, 0xC166D800, - 0xC1657700, 0xC1641600, 0xC162B500, - 0xC1615400, 0xC15FF300, 0xC15E9200, - 0xC15D3100, 0xC15BD000, 0xC15A6F00, - 0xC1590E00, 0xC157AD00, 0xC1564C00, - 0xC154EB00, 0xC1538A00, 0xC1522900, - 0xC150C800, 0xC14F6700, 0xC14E0600, - 0xC14CA500, 0xC14B4400, 0xC149E300, - 0xC1488200, 0xC1472100, 0xC145C000, - 0xC1445F00, 0xC142FE00, 0xC1419D00, - 0xC1403C00, 0xC13EDB00, 0xC13D7A00, - 0xC13C1900, 0xC13AB800, 0xC1395700, - 0xC137F600, 0xC1369500, 0xC1353400, - 0xC133D300, 0xC1327200, 0xC1311100, - 0xC12FB000, 0xC12E4F00, 0xC12CEE00, - 0xC12B8D00, 0xC12A2C00, 0xC128CB00, - 0xC1276A00, 0xC1260900, 0xC124A800, - 0xC1234700, 0xC121E600, 0xC1208500, - 0xC11F2400, 0xC11DC300, 0xC11C6200, - 0xC11B0100, 0xC119A000, 0xC1183F00, - 0xC116DE00, 0xC1157D00, 0xC1141C00, - 0xC112BB00, 0xC1115A00, 0xC10FF900, - 0xC10E9800, 0xC10D3700, 0xC10BD600, - 0xC10A7500, 0xC1091400, 0xC107B300, - 0xC1065200, 0xC104F100, 0xC1039000, - 0xC1022F00, 0xC100CE00, 0xC0FF6D00, - 0xC0FE0C00, 0xC0FCAB00, 0xC0FB4A00, - 0xC0F9E900, 0xC0F88800, 0xC0F72700, - 0xC0F5C600, 0xC0F46500, 0xC0F30400, - 0xC0F1A300, 0xC0F04200, 0xC0EEE100, - 0xC0ED8000, 0xC0EC1F00, 0xC0EABE00, - 0xC0E95D00, 0xC0E7FC00, 0xC0E69B00, - 0xC0E53A00, 0xC0E3D900, 0xC0E27800, - 0xC0E11700, 0xC0DFB600, 0xC0DE5500, - 0xC0DCF400, 0xC0DB9300, 0xC0DA3200, - 0xC0D8D100, 0xC0D77000, 0xC0D60F00, - 0xC0D4AE00, 0xC0D34D00, 0xC0D1EC00, - 0xC0D08B00, 0xC0CF2A00, 0xC0CDC900, - 0xC0CC6800, 0xC0CB0700, 0xC0C9A600, - 0xC0C84500, 0xC0C6E400, 0xC0C58300, - 0xC0C42200, 0xC0C2C100, 0xC0C16000, - 0xC0BFFF00, 0xC0BE9E00, 0xC0BD3D00, - 0xC0BBDC00, 0xC0BA7B00, 0xC0B91A00, - 0xC0B7B900, 0xC0B65800, 0xC0B4F700, - 0xC0B39600, 0xC0B23500, 0xC0B0D400, - 0xC0AF7300, 0xC0AE1200, 0xC0ACB100, - 0xC0AB5000, 0xC0A9EF00, 0xC0A88E00, - 0xC0A72D00, 0xC0A5CC00, 0xC0A46B00, - 0xC0A30A00, 0xC0A1A900, 0xC0A04800, - 0xC09EE700, 0xC09D8600, 0xC09C2500, - 0xC09AC400, 0xC0996300, 0xC0980200, - 0xC096A100, 0xC0954000, 0xC093DF00, - 0xC0927E00, 0xC0911D00, 0xC08FBC00, - 0xC08E5B00, 0xC08CFA00, 0xC08B9900, - 0xC08A3800, 0xC088D700, 0xC0877600, - 0xC0861500, 0xC084B400, 0xC0835300, - 0xC081F200, 0xC0809100, 0xC07F3000, - 0xC07DCF00, 0xC07C6E00, 0xC07B0D00, - 0xC079AC00, 0xC0784B00, 0xC076EA00, - 0xC0758900, 0xC0742800, 0xC072C700, - 0xC0716600, 0xC0700500, 0xC06EA400, - 0xC06D4300, 0xC06BE200, 0xC06A8100, - 0xC0692000, 0xC067BF00, 0xC0665E00, - 0xC064FD00, 0xC0639C00, 0xC0623B00, - 0xC060DA00, 0xC05F7900, 0xC05E1800, - 0xC05CB700, 0xC05B5600, 0xC059F500, - 0xC0589400, 0xC0573300, 0xC055D200, - 0xC0547100, 0xC0531000, 0xC051AF00, - 0xC0504E00, 0xC04EED00, 0xC04D8C00, - 0xC04C2B00, 0xC04ACA00, 0xC0496900, - 0xC0480800, 0xC046A700, 0xC0454600, - 0xC043E500, 0xC0428400, 0xC0412300, - 0xC03FC200, 0xC03E6100, 0xC03D0000, - 0xC03B9F00, 0xC03A3E00, 0xC038DD00, - 0xC0377C00, 0xC0361B00, 0xC034BA00, - 0xC0335900, 0xC031F800, 0xC0309700, - 0xC02F3600, 0xC02DD500, 0xC02C7400, - 0xC02B1300, 0xC029B200, 0xC0285100, - 0xC026F000, 0xC0258F00, 0xC0242E00, - 0xC022CD00, 0xC0216C00, 0xC0200B00, - 0xC01EAA00, 0xC01D4900, 0xC01BE800, - 0xC01A8700, 0xC0192600, 0xC017C500, - 0xC0166400, 0xC0150300, 0xC013A200, - 0xC0124100, 0xC010E000, 0xC00F7F00, - 0xC00E1E00, 0xC00CBD00, 0xC00B5C00, - 0xC009FB00, 0xC0089A00, 0xC0073900, - 0xC005D800, 0xC0047700, 0xC0031600, - 0xC001B500, 0xC0005400, 0xBFFEF300, - 0xBFFD9200, 0xBFFC3100, 0xBFFAD000, - 0xBFF96F00, 0xBFF80E00, 0xBFF6AD00, - 0xBFF54C00, 0xBFF3EB00, 0xBFF28A00, - 0xBFF12900, 0xBFEFC800, 0xBFEE6700, - 0xBFED0600, 0xBFEBA500, 0xBFEA4400, - 0xBFE8E300, 0xBFE78200, 0xBFE62100, - 0xBFE4C000, 0xBFE35F00, 0xBFE1FE00, - 0xBFE09D00, 0xBFDF3C00, 0xBFDDDB00, - 0xBFDC7A00, 0xBFDB1900, 0xBFD9B800, - 0xBFD85700, 0xBFD6F600, 0xBFD59500, - 0xBFD43400, 0xBFD2D300, 0xBFD17200, - 0xBFD01100, 0xBFCEB000, 0xBFCD4F00, - 0xBFCBEE00, 0xBFCA8D00, 0xBFC92C00, - 0xBFC7CB00, 0xBFC66A00, 0xBFC50900, - 0xBFC3A800, 0xBFC24700, 0xBFC0E600, - 0xBFBF8500, 0xBFBE2400, 0xBFBCC300, - 0xBFBB6200, 0xBFBA0100, 0xBFB8A000, - 0xBFB73F00, 0xBFB5DE00, 0xBFB47D00, - 0xBFB31C00, 0xBFB1BB00, 0xBFB05A00, - 0xBFAEF900, 0xBFAD9800, 0xBFAC3700, - 0xBFAAD600, 0xBFA97500, 0xBFA81400, - 0xBFA6B300, 0xBFA55200, 0xBFA3F100, - 0xBFA29000, 0xBFA12F00, 0xBF9FCE00, - 0xBF9E6D00, 0xBF9D0C00, 0xBF9BAB00, - 0xBF9A4A00, 0xBF98E900, 0xBF978800, - 0xBF962700, 0xBF94C600, 0xBF936500, - 0xBF920400, 0xBF90A300, 0xBF8F4200, - 0xBF8DE100, 0xBF8C8000, 0xBF8B1F00, - 0xBF89BE00, 0xBF885D00, 0xBF86FC00, - 0xBF859B00, 0xBF843A00, 0xBF82D900, - 0xBF817800, 0xBF801700, 0xBF7EB600, - 0xBF7D5500, 0xBF7BF400, 0xBF7A9300, - 0xBF793200, 0xBF77D100, 0xBF767000, - 0xBF750F00, 0xBF73AE00, 0xBF724D00, - 0xBF70EC00, 0xBF6F8B00, 0xBF6E2A00, - 0xBF6CC900, 0xBF6B6800, 0xBF6A0700, - 0xBF68A600, 0xBF674500, 0xBF65E400, - 0xBF648300, 0xBF632200, 0xBF61C100, - 0xBF606000, 0xBF5EFF00, 0xBF5D9E00, - 0xBF5C3D00, 0xBF5ADC00, 0xBF597B00, - 0xBF581A00, 0xBF56B900, 0xBF555800, - 0xBF53F700, 0xBF529600, 0xBF513500, - 0xBF4FD400, 0xBF4E7300, 0xBF4D1200, - 0xBF4BB100, 0xBF4A5000, 0xBF48EF00, - 0xBF478E00, 0xBF462D00, 0xBF44CC00, - 0xBF436B00, 0xBF420A00, 0xBF40A900, - 0xBF3F4800, 0xBF3DE700, 0xBF3C8600, - 0xBF3B2500, 0xBF39C400, 0xBF386300, - 0xBF370200, 0xBF35A100, 0xBF344000, - 0xBF32DF00, 0xBF317E00, 0xBF301D00, - 0xBF2EBC00, 0xBF2D5B00, 0xBF2BFA00, - 0xBF2A9900, 0xBF293800, 0xBF27D700, - 0xBF267600, 0xBF251500, 0xBF23B400, - 0xBF225300, 0xBF20F200, 0xBF1F9100, - 0xBF1E3000, 0xBF1CCF00, 0xBF1B6E00, - 0xBF1A0D00, 0xBF18AC00, 0xBF174B00, - 0xBF15EA00, 0xBF148900, 0xBF132800, - 0xBF11C700, 0xBF106600, 0xBF0F0500, - 0xBF0DA400, 0xBF0C4300, 0xBF0AE200, - 0xBF098100, 0xBF082000, 0xBF06BF00, - 0xBF055E00, 0xBF03FD00, 0xBF029C00, - 0xBF013B00, 0xBEFFDA00, 0xBEFE7900, - 0xBEFD1800, 0xBEFBB700, 0xBEFA5600, - 0xBEF8F500, 0xBEF79400, 0xBEF63300, - 0xBEF4D200, 0xBEF37100, 0xBEF21000, - 0xBEF0AF00, 0xBEEF4E00, 0xBEEDED00, - 0xBEEC8C00, 0xBEEB2B00, 0xBEE9CA00, - 0xBEE86900, 0xBEE70800, 0xBEE5A700, - 0xBEE44600, 0xBEE2E500, 0xBEE18400, - 0xBEE02300, 0xBEDEC200, 0xBEDD6100, - 0xBEDC0000, 0xBEDAB700, 0xBED96E00, - 0xBED82500, 0xBED6DC00, 0xBED59300, - 0xBED44A00, 0xBED30100, 0xBED1B800, - 0xBED06F00, 0xBECF2600, 0xBECDDD00, - 0xBECC9400, 0xBECB4B00, 0xBECA0200, - 0xBEC8B900, 0xBEC77000, 0xBEC62700, - 0xBEC4DE00, 0xBEC39500, 0xBEC24C00, - 0xBEC10300, 0xBEBFBA00, 0xBEBE7100, - 0xBEBD2800, 0xBEBBDF00, 0xBEBA9600, - 0xBEB94D00, 0xBEB80400, 0xBEB6BB00, - 0xBEB57200, 0xBEB42900, 0xBEB2E000, - 0xBEB19700, 0xBEB04E00, 0xBEAF0500, - 0xBEADBC00, 0xBEAC7300, 0xBEAB2A00, - 0xBEA9E100, 0xBEA89800, 0xBEA74F00, - 0xBEA60600, 0xBEA4BD00, 0xBEA37400, - 0xBEA22B00, 0xBEA0E200, 0xBE9F9900, - 0xBE9E5000, 0xBE9D0700, 0xBE9BBE00, - 0xBE9A7500, 0xBE992C00, 0xBE97E300, - 0xBE969A00, 0xBE955100, 0xBE940800, - 0xBE92BF00, 0xBE917600, 0xBE902D00, - 0xBE8EE400, 0xBE8D9B00, 0xBE8C5200, - 0xBE8B0900, 0xBE89C000, 0xBE887700, - 0xBE872E00, 0xBE85E500, 0xBE849C00, - 0xBE835300, 0xBE820A00, 0xBE80C100, - 0xBE7F7800, 0xBE7E2F00, 0xBE7CE600, - 0xBE7B9D00, 0xBE7A5400, 0xBE790B00, - 0xBE77C200, 0xBE767900, 0xBE753000, - 0xBE73E700, 0xBE729E00, 0xBE715500, - 0xBE700C00, 0xBE6EC300, 0xBE6D7A00, - 0xBE6C3100, 0xBE6AE800, 0xBE699F00, - 0xBE685600, 0xBE670D00, 0xBE65C400, - 0xBE647B00, 0xBE633200, 0xBE61E900, - 0xBE60A000, 0xBE5F5700, 0xBE5E0E00, - 0xBE5CC500, 0xBE5B7C00, 0xBE5A3300, - 0xBE58EA00, 0xBE57A100, 0xBE565800, - 0xBE550F00, 0xBE53C600, 0xBE527D00, - 0xBE513400, 0xBE4FEB00, 0xBE4EA200, - 0xBE4D5900, 0xBE4C1000, 0xBE4AC700, - 0xBE497E00, 0xBE483500, 0xBE46EC00, - 0xBE45A300, 0xBE445A00, 0xBE431100, - 0xBE41C800, 0xBE407F00, 0xBE3F3600, - 0xBE3DED00, 0xBE3CA400, 0xBE3B5B00, - 0xBE3A1200, 0xBE38C900, 0xBE378000, - 0xBE363700, 0xBE34EE00, 0xBE33A500, - 0xBE325C00, 0xBE311300, 0xBE2FCA00, - 0xBE2E8100, 0xBE2D3800, 0xBE2BEF00, - 0xBE2AA600, 0xBE295D00, 0xBE281400, - 0xBE26CB00, 0xBE258200, 0xBE243900, - 0xBE22F000, 0xBE21A700, 0xBE205E00, - 0xBE1F1500, 0xBE1DCC00, 0xBE1C8300, - 0xBE1B3A00, 0xBE19F100, 0xBE18A800, - 0xBE175F00, 0xBE161600, 0xBE14CD00, - 0xBE138400, 0xBE123B00, 0xBE10F200, - 0xBE0FA900, 0xBE0E6000, 0xBE0D1700, - 0xBE0BCE00, 0xBE0A8500, 0xBE093C00, - 0xBE07F300, 0xBE06AA00, 0xBE056100, - 0xBE041800, 0xBE02CF00, 0xBE018600, - 0xBE003D00, 0xBDFEF400, 0xBDFDAB00, - 0xBDFC6200, 0xBDFB1900, 0xBDF9D000, - 0xBDF88700, 0xBDF73E00, 0xBDF5F500, - 0xBDF4AC00, 0xBDF36300, 0xBDF21A00, - 0xBDF0D100, 0xBDEF8800, 0xBDEE3F00, - 0xBDECF600, 0xBDEBAD00, 0xBDEA6400, - 0xBDE91B00, 0xBDE7D200, 0xBDE68900, - 0xBDE54000, 0xBDE3F700, 0xBDE2AE00, - 0xBDE16500, 0xBDE01C00, 0xBDDED300, - 0xBDDD8A00, 0xBDDC4100, 0xBDDAF800, - 0xBDD9AF00, 0xBDD86600, 0xBDD71D00, - 0xBDD5D400, 0xBDD48B00, 0xBDD34200, - 0xBDD1F900, 0xBDD0B000, 0xBDCF6700, - 0xBDCE1E00, 0xBDCCD500, 0xBDCB8C00, - 0xBDCA4300, 0xBDC8FA00, 0xBDC7B100, - 0xBDC66800, 0xBDC51F00, 0xBDC3D600, - 0xBDC28D00, 0xBDC14400, 0xBDBFFB00, - 0xBDBEB200, 0xBDBD6900, 0xBDBC2000, - 0xBDBAD700, 0xBDB98E00, 0xBDB84500, - 0xBDB6FC00, 0xBDB5B300, 0xBDB46A00, - 0xBDB32100, 0xBDB1D800, 0xBDB08F00, - 0xBDAF4600, 0xBDADFD00, 0xBDACB400, - 0xBDAB6B00, 0xBDAA2200, 0xBDA8D900, - 0xBDA79000, 0xBDA64700, 0xBDA4FE00, - 0xBDA3B500, 0xBDA26C00, 0xBDA12300, - 0xBD9FDA00, 0xBD9E9100, 0xBD9D4800, - 0xBD9BFF00, 0xBD9AB600, 0xBD996D00, - 0xBD982400, 0xBD96DB00, 0xBD959200, - 0xBD944900, 0xBD930000, 0xBD91B700, - 0xBD906E00, 0xBD8F2500, 0xBD8DDC00, - 0xBD8C9300, 0xBD8B4A00, 0xBD8A0100, - 0xBD88B800, 0xBD876F00, 0xBD862600, - 0xBD84DD00, 0xBD839400, 0xBD824B00, - 0xBD810200, 0xBD7FB900, 0xBD7E7000, - 0xBD7D2700, 0xBD7BDE00, 0xBD7A9500, - 0xBD794C00, 0xBD780300, 0xBD76BA00, - 0xBD757100, 0xBD742800, 0xBD72DF00, - 0xBD719600, 0xBD704D00, 0xBD6F0400, - 0xBD6DBB00, 0xBD6C7200, 0xBD6B2900, - 0xBD69E000, 0xBD689700, 0xBD674E00, - 0xBD660500, 0xBD64BC00, 0xBD637300, - 0xBD622A00, 0xBD60E100, 0xBD5F9800, - 0xBD5E4F00, 0xBD5D0600, 0xBD5BBD00, - 0xBD5A7400, 0xBD592B00, 0xBD57E200, - 0xBD569900, 0xBD555000, 0xBD540700, - 0xBD52BE00, 0xBD517500, 0xBD502C00, - 0xBD4EE300, 0xBD4D9A00, 0xBD4C5100, - 0xBD4B0800, 0xBD49BF00, 0xBD487600, - 0xBD472D00, 0xBD45E400, 0xBD449B00, - 0xBD435200, 0xBD420900, 0xBD40C000, - 0xBD3F7700, 0xBD3E2E00, 0xBD3CE500, - 0xBD3B9C00, 0xBD3A5300, 0xBD390A00, - 0xBD37C100, 0xBD367800, 0xBD352F00, - 0xBD33E600, 0xBD329D00, 0xBD315400, - 0xBD300B00, 0xBD2EC200, 0xBD2D7900, - 0xBD2C3000, 0xBD2AE700, 0xBD299E00, - 0xBD285500, 0xBD270C00, 0xBD25C300, - 0xBD247A00, 0xBD233100, 0xBD21E800, - 0xBD209F00, 0xBD1F5600, 0xBD1E0D00, - 0xBD1CC400, 0xBD1B7B00, 0xBD1A3200, - 0xBD18E900, 0xBD17A000, 0xBD165700, - 0xBD150E00, 0xBD13C500, 0xBD127C00, - 0xBD113300, 0xBD0FEA00, 0xBD0EA100, - 0xBD0D5800, 0xBD0C0F00, 0xBD0AC600, - 0xBD097D00, 0xBD083400, 0xBD06EB00, - 0xBD05A200, 0xBD045900, 0xBD031000, - 0xBD01C700, 0xBD007E00, 0xBCFF3500, - 0xBCFDEC00, 0xBCFCA300, 0xBCFB5A00, - 0xBCFA1100, 0xBCF8C800, 0xBCF77F00, - 0xBCF63600, 0xBCF4ED00, 0xBCF3A400, - 0xBCF25B00, 0xBCF11200, 0xBCEFC900, - 0xBCEE8000, 0xBCED3700, 0xBCEBEE00, - 0xBCEAA500, 0xBCE95C00, 0xBCE81300, - 0xBCE6CA00, 0xBCE58100, 0xBCE43800, - 0xBCE2EF00, 0xBCE1A600, 0xBCE05D00, - 0xBCDF1400, 0xBCDDCB00, 0xBCDC8200, - 0xBCDB3900, 0xBCD9F000, 0xBCD8A700, - 0xBCD75E00, 0xBCD61500, 0xBCD4CC00, - 0xBCD38300, 0xBCD23A00, 0xBCD0F100, - 0xBCCFA800, 0xBCCE5F00, 0xBCCD1600, - 0xBCCBCD00, 0xBCCA8400, 0xBCC93B00, - 0xBCC7F200, 0xBCC6A900, 0xBCC56000, - 0xBCC41700, 0xBCC2CE00, 0xBCC18500, - 0xBCC03C00, 0xBCBEF300, 0xBCBDAA00, - 0xBCBC6100, 0xBCBB1800, 0xBCB9CF00, - 0xBCB88600, 0xBCB73D00, 0xBCB5F400, - 0xBCB4AB00, 0xBCB36200, 0xBCB21900, - 0xBCB0D000, 0xBCAF8700, 0xBCAE3E00, - 0xBCACF500, 0xBCABAC00, 0xBCAA6300, - 0xBCA91A00, 0xBCA7D100, 0xBCA68800, - 0xBCA53F00, 0xBCA3F600, 0xBCA2AD00, - 0xBCA16400, 0xBCA01B00, 0xBC9ED200, - 0xBC9D8900, 0xBC9C4000, 0xBC9AF700, - 0xBC99AE00, 0xBC986500, 0xBC971C00, - 0xBC95D300, 0xBC948A00, 0xBC934100, - 0xBC91F800, 0xBC90AF00, 0xBC8F6600, - 0xBC8E1D00, 0xBC8CD400, 0xBC8B8B00, - 0xBC8A4200, 0xBC88F900, 0xBC87B000, - 0xBC866700, 0xBC851E00, 0xBC83D500, - 0xBC828C00, 0xBC814300, 0xBC7FFA00, - 0xBC7EB100, 0xBC7D6800, 0xBC7C1F00, - 0xBC7AD600, 0xBC798D00, 0xBC784400, - 0xBC76FB00, 0xBC75B200, 0xBC746900, - 0xBC732000, 0xBC71D700, 0xBC708E00, - 0xBC6F4500, 0xBC6DFC00, 0xBC6CB300, - 0xBC6B6A00, 0xBC6A2100, 0xBC68D800, - 0xBC678F00, 0xBC664600, 0xBC64FD00, - 0xBC63B400, 0xBC626B00, 0xBC612200, - 0xBC5FD900, 0xBC5E9000, 0xBC5D4700, - 0xBC5BFE00, 0xBC5AB500, 0xBC596C00, - 0xBC582300, 0xBC56DA00, 0xBC559100, - 0xBC544800, 0xBC52FF00, 0xBC51B600, - 0xBC506D00, 0xBC4F2400, 0xBC4DDB00, - 0xBC4C9200, 0xBC4B4900, 0xBC4A0000, - 0xBC48B700, 0xBC476E00, 0xBC462500, - 0xBC44DC00, 0xBC439300, 0xBC424A00, - 0xBC410100, 0xBC3FB800, 0xBC3E6F00, - 0xBC3D2600, 0xBC3BDD00, 0xBC3A9400, - 0xBC394B00, 0xBC380200, 0xBC36B900, - 0xBC357000, 0xBC342700, 0xBC32DE00, - 0xBC319500, 0xBC304C00, 0xBC2F0300, - 0xBC2DBA00, 0xBC2C7100, 0xBC2B2800, - 0xBC29DF00, 0xBC289600, 0xBC274D00, - 0xBC260400, 0xBC24BB00, 0xBC237200, - 0xBC222900, 0xBC20E000, 0xBC1F9700, - 0xBC1E4E00, 0xBC1D0500, 0xBC1BBC00, - 0xBC1A7300, 0xBC192A00, 0xBC17E100, - 0xBC169800, 0xBC154F00, 0xBC140600, - 0xBC12BD00, 0xBC117400, 0xBC102B00, - 0xBC0EE200, 0xBC0D9900, 0xBC0C5000, - 0xBC0B0700, 0xBC09BE00, 0xBC087500, - 0xBC072C00, 0xBC05E300, 0xBC049A00, - 0xBC035100, 0xBC020800, 0xBC00BF00, - 0xBBFF7600, 0xBBFE2D00, 0xBBFCE400, - 0xBBFB9B00, 0xBBFA5200, 0xBBF90900, - 0xBBF7C000, 0xBBF67700, 0xBBF52E00, - 0xBBF3E500, 0xBBF29C00, 0xBBF15300, - 0xBBF00A00, 0xBBEEC100, 0xBBED7800, - 0xBBEC2F00, 0xBBEAE600, 0xBBE99D00, - 0xBBE85400, 0xBBE70B00, 0xBBE5C200, - 0xBBE47900, 0xBBE33000, 0xBBE1E700, - 0xBBE09E00, 0xBBDF5500, 0xBBDE0C00, - 0xBBDCC300, 0xBBDB7A00, 0xBBDA3100, - 0xBBD8E800, 0xBBD79F00, 0xBBD65600, - 0xBBD50D00, 0xBBD3C400, 0xBBD27B00, - 0xBBD13200, 0xBBCFE900, 0xBBCEA000, - 0xBBCD5700, 0xBBCC0E00, 0xBBCAC500, - 0xBBC97C00, 0xBBC83300, 0xBBC6EA00, - 0xBBC5A100, 0xBBC45800, 0xBBC30F00, - 0xBBC1C600, 0xBBC07D00, 0xBBBF3400, - 0xBBBDEB00, 0xBBBCA200, 0xBBBB5900, - 0xBBBA1000, 0xBBB8C700, 0xBBB77E00, - 0xBBB63500, 0xBBB4EC00, 0xBBB3A300, - 0xBBB25A00, 0xBBB11100, 0xBBAFC800, - 0xBBAE7F00, 0xBBAD3600, 0xBBABED00, - 0xBBAAA400, 0xBBA95B00, 0xBBA81200, - 0xBBA6C900, 0xBBA58000, 0xBBA43700, - 0xBBA2EE00, 0xBBA1A500, 0xBBA05C00, - 0xBB9F1300, 0xBB9DCA00, 0xBB9C8100, - 0xBB9B3800, 0xBB99EF00, 0xBB98A600, - 0xBB975D00, 0xBB961400, 0xBB94CB00, - 0xBB938200, 0xBB923900, 0xBB90F000, - 0xBB8FA700, 0xBB8E5E00, 0xBB8D1500, - 0xBB8BCC00, 0xBB8A8300, 0xBB893A00, - 0xBB87F100, 0xBB86A800, 0xBB855F00, - 0xBB841600, 0xBB82CD00, 0xBB818400, - 0xBB803B00, 0xBB7EF200, 0xBB7DA900, - 0xBB7C6000, 0xBB7B1700, 0xBB79CE00, - 0xBB788500, 0xBB773C00, 0xBB75F300, - 0xBB74AA00, 0xBB736100, 0xBB721800, - 0xBB70CF00, 0xBB6F8600, 0xBB6E3D00, - 0xBB6CF400, 0xBB6BAB00, 0xBB6A6200, - 0xBB691900, 0xBB67D000, 0xBB668700, - 0xBB653E00, 0xBB63F500, 0xBB62AC00, - 0xBB616300, 0xBB601A00, 0xBB5ED100, - 0xBB5D8800, 0xBB5C3F00, 0xBB5AF600, - 0xBB59AD00, 0xBB586400, 0xBB571B00, - 0xBB55D200, 0xBB548900, 0xBB534000, - 0xBB51F700, 0xBB50AE00, 0xBB4F6500, - 0xBB4E1C00, 0xBB4CD300, 0xBB4B8A00, - 0xBB4A4100, 0xBB48F800, 0xBB47AF00, - 0xBB466600, 0xBB451D00, 0xBB43D400, - 0xBB428B00, 0xBB414200, 0xBB3FF900, - 0xBB3EB000, 0xBB3D6700, 0xBB3C1E00, - 0xBB3AD500, 0xBB398C00, 0xBB384300, - 0xBB36FA00, 0xBB35B100, 0xBB346800, - 0xBB331F00, 0xBB31D600, 0xBB308D00, - 0xBB2F4400, 0xBB2DFB00, 0xBB2CB200, - 0xBB2B6900, 0xBB2A2000, 0xBB28D700, - 0xBB278E00, 0xBB264500, 0xBB24FC00, - 0xBB23B300, 0xBB226A00, 0xBB212100, - 0xBB1FD800, 0xBB1E8F00, 0xBB1D4600, - 0xBB1BFD00, 0xBB1AB400, 0xBB196B00, - 0xBB182200, 0xBB16D900, 0xBB159000, - 0xBB144700, 0xBB12FE00, 0xBB11B500, - 0xBB106C00, 0xBB0F2300, 0xBB0DDA00, - 0xBB0C9100, 0xBB0B4800, 0xBB09FF00, - 0xBB08B600, 0xBB076D00, 0xBB062400, - 0xBB04DB00, 0xBB039200, 0xBB024900, - 0xBB010000, 0xBAFFB700, 0xBAFE6E00, - 0xBAFD2500, 0xBAFBDC00, 0xBAFA9300, - 0xBAF94A00, 0xBAF80100, 0xBAF6B800, - 0xBAF56F00, 0xBAF42600, 0xBAF2DD00, - 0xBAF19400, 0xBAF04B00, 0xBAEF0200, - 0xBAEDB900, 0xBAEC7000, 0xBAEB2700, - 0xBAE9DE00, 0xBAE89500, 0xBAE74C00, - 0xBAE60300, 0xBAE4BA00, 0xBAE37100, - 0xBAE22800, 0xBAE0DF00, 0xBADF9600, - 0xBADE4D00, 0xBADD0400, 0xBADBBB00, - 0xBADA7200, 0xBAD92900, 0xBAD7E000, - 0xBAD69700, 0xBAD54E00, 0xBAD40500, - 0xBAD2BC00, 0xBAD17300, 0xBAD02A00, - 0xBACEE100, 0xBACD9800, 0xBACC4F00, - 0xBACB0600, 0xBAC9BD00, 0xBAC87400, - 0xBAC72B00, 0xBAC5E200, 0xBAC49900, - 0xBAC35000, 0xBAC20700, 0xBAC0BE00, - 0xBABF7500, 0xBABE2C00, 0xBABCE300, - 0xBABB9A00, 0xBABA5100, 0xBAB90800, - 0xBAB7BF00, 0xBAB67600, 0xBAB52D00, - 0xBAB3E400, 0xBAB29B00, 0xBAB15200, - 0xBAB00900, 0xBAAEC000, 0xBAAD7700, - 0xBAAC2E00, 0xBAAAE500, 0xBAA99C00, - 0xBAA85300, 0xBAA70A00, 0xBAA5C100, - 0xBAA47800, 0xBAA32F00, 0xBAA1E600, - 0xBAA09D00, 0xBA9F5400, 0xBA9E0B00, - 0xBA9CC200, 0xBA9B7900, 0xBA9A3000, - 0xBA98E700, 0xBA979E00, 0xBA965500, - 0xBA950C00, 0xBA93C300, 0xBA927A00, - 0xBA913100, 0xBA8FE800, 0xBA8E9F00, - 0xBA8D5600, 0xBA8C0D00, 0xBA8AC400, - 0xBA897B00, 0xBA883200, 0xBA86E900, - 0xBA85A000, 0xBA845700, 0xBA830E00, - 0xBA81C500, 0xBA807C00, 0xBA7F3300, - 0xBA7DEA00, 0xBA7CA100, 0xBA7B5800, - 0xBA7A0F00, 0xBA78C600, 0xBA777D00, - 0xBA763400, 0xBA74EB00, 0xBA73A200, - 0xBA725900, 0xBA711000, 0xBA6FC700, - 0xBA6E7E00, 0xBA6D3500, 0xBA6BEC00, - 0xBA6AA300, 0xBA695A00, 0xBA681100, - 0xBA66C800, 0xBA657F00, 0xBA643600, - 0xBA62ED00, 0xBA61A400, 0xBA605B00, - 0xBA5F1200, 0xBA5DC900, 0xBA5C8000, - 0xBA5B3700, 0xBA59EE00, 0xBA58A500, - 0xBA575C00, 0xBA561300, 0xBA54CA00, - 0xBA538100, 0xBA523800, 0xBA50EF00, - 0xBA4FA600, 0xBA4E5D00, 0xBA4D1400, - 0xBA4BCB00, 0xBA4A8200, 0xBA493900, - 0xBA47F000, 0xBA46A700, 0xBA455E00, - 0xBA441500, 0xBA42CC00, 0xBA418300, - 0xBA403A00, 0xBA3EF100, 0xBA3DA800, - 0xBA3C5F00, 0xBA3B1600, 0xBA39CD00, - 0xBA388400, 0xBA373B00, 0xBA35F200, - 0xBA34A900, 0xBA336000, 0xBA321700, - 0xBA30CE00, 0xBA2F8500, 0xBA2E3C00, - 0xBA2CF300, 0xBA2BAA00, 0xBA2A6100, - 0xBA291800, 0xBA27CF00, 0xBA268600, - 0xBA253D00, 0xBA23F400, 0xBA22AB00, - 0xBA216200, 0xBA201900, 0xBA1ED000, - 0xBA1D8700, 0xBA1C3E00, 0xBA1AF500, - 0xBA19AC00, 0xBA186300, 0xBA171A00, - 0xBA15D100, 0xBA148800, 0xBA133F00, - 0xBA11F600, 0xBA10AD00, 0xBA0F6400, - 0xBA0E1B00, 0xBA0CD200, 0xBA0B8900, - 0xBA0A4000, 0xBA08F700, 0xBA07AE00, - 0xBA066500, 0xBA051C00, 0xBA03D300, - 0xBA028A00, 0xBA014100, 0xB9FFF800, - 0xB9FEAF00, 0xB9FD6600, 0xB9FC1D00, - 0xB9FAD400, 0xB9F98B00, 0xB9F84200, - 0xB9F6F900, 0xB9F5B000, 0xB9F46700, - 0xB9F31E00, 0xB9F1D500, 0xB9F08C00, - 0xB9EF4300, 0xB9EDFA00, 0xB9ECB100, - 0xB9EB6800, 0xB9EA1F00, 0xB9E8D600, - 0xB9E78D00, 0xB9E64400, 0xB9E4FB00, - 0xB9E3B200, 0xB9E26900, 0xB9E12000, - 0xB9DFD700, 0xB9DE8E00, 0xB9DD4500, - 0xB9DBFC00, 0xB9DAB300, 0xB9D96A00, - 0xB9D82100, 0xB9D6D800, 0xB9D58F00, - 0xB9D44600, 0xB9D2FD00, 0xB9D1B400, - 0xB9D06B00, 0xB9CF2200, 0xB9CDD900, - 0xB9CC9000, 0xB9CB4700, 0xB9C9FE00, - 0xB9C8B500, 0xB9C76C00, 0xB9C62300, - 0xB9C4DA00, 0xB9C39100, 0xB9C24800, - 0xB9C0FF00, 0xB9BFB600, 0xB9BE6D00, - 0xB9BD2400, 0xB9BBDB00, 0xB9BA9200, - 0xB9B94900, 0xB9B80000, 0xB9B6B700, - 0xB9B56E00, 0xB9B42500, 0xB9B2DC00, - 0xB9B19300, 0xB9B04A00, 0xB9AF0100, - 0xB9ADB800, 0xB9AC6F00, 0xB9AB2600, - 0xB9A9DD00, 0xB9A89400, 0xB9A74B00, - 0xB9A60200, 0xB9A4B900, 0xB9A37000, - 0xB9A22700, 0xB9A0DE00, 0xB99F9500, - 0xB99E4C00, 0xB99D0300, 0xB99BBA00, - 0xB99A7100, 0xB9992800, 0xB997DF00, - 0xB9969600, 0xB9954D00, 0xB9940400, - 0xB992BB00, 0xB9917200, 0xB9902900, - 0xB98EE000, 0xB98D9700, 0xB98C4E00, - 0xB98B0500, 0xB989BC00, 0xB9887300, - 0xB9872A00, 0xB985E100, 0xB9849800, - 0xB9834F00, 0xB9820600, 0xB980BD00, - 0xB97F7400, 0xB97E2B00, 0xB97CE200, - 0xB97B9900, 0xB97A5000, 0xB9790700, - 0xB977BE00, 0xB9767500, 0xB9752C00, - 0xB973E300, 0xB9729A00, 0xB9715100, - 0xB9700800, 0xB96EBF00, 0xB96D7600, - 0xB96C2D00, 0xB96AE400, 0xB9699B00, - 0xB9685200, 0xB9670900, 0xB965C000, - 0xB9647700, 0xB9632E00, 0xB961E500, - 0xB9609C00, 0xB95F5300, 0xB95E0A00, - 0xB95CC100, 0xB95B7800, 0xB95A2F00, - 0xB958E600, 0xB9579D00, 0xB9565400, - 0xB9550B00, 0xB953C200, 0xB9527900, - 0xB9513000, 0xB94FE700, 0xB94E9E00, - 0xB94D5500, 0xB94C0C00, 0xB94AC300, - 0xB9497A00, 0xB9483100, 0xB946E800, - 0xB9459F00, 0xB9445600, 0xB9430D00, - 0xB941C400, 0xB9407B00, 0xB93F3200, - 0xB93DE900, 0xB93CA000, 0xB93B5700, - 0xB93A0E00, 0xB938C500, 0xB9377C00, - 0xB9363300, 0xB934EA00, 0xB933A100, - 0xB9325800, 0xB9310F00, 0xB92FC600, - 0xB92E7D00, 0xB92D3400, 0xB92BEB00, - 0xB92AA200, 0xB9295900, 0xB9281000, - 0xB926C700, 0xB9257E00, 0xB9243500, - 0xB922EC00, 0xB921A300, 0xB9205A00, - 0xB91F1100, 0xB91DC800, 0xB91C7F00, - 0xB91B3600, 0xB919ED00, 0xB918A400, - 0xB9175B00, 0xB9161200, 0xB914C900, - 0xB9138000, 0xB9123700, 0xB910EE00, - 0xB90FA500, 0xB90E5C00, 0xB90D1300, - 0xB90BCA00, 0xB90A8100, 0xB9093800, - 0xB907EF00, 0xB906A600, 0xB9055D00, - 0xB9041400, 0xB902CB00, 0xB9018200, - 0xB9003900, 0xB8FEF000, 0xB8FDA700, - 0xB8FC5E00, 0xB8FB1500, 0xB8F9CC00, - 0xB8F88300, 0xB8F73A00, 0xB8F5F100, - 0xB8F4A800, 0xB8F35F00, 0xB8F21600, - 0xB8F0CD00, 0xB8EF8400, 0xB8EE3B00, - 0xB8ECF200, 0xB8EBA900, 0xB8EA6000, - 0xB8E91700, 0xB8E7CE00, 0xB8E68500, - 0xB8E53C00, 0xB8E3F300, 0xB8E2AA00, - 0xB8E16100, 0xB8E01800, 0xB8DECF00, - 0xB8DD8600, 0xB8DC3D00, 0xB8DAF400, - 0xB8D9AB00, 0xB8D86200, 0xB8D71900, - 0xB8D5D000, 0xB8D48700, 0xB8D33E00, - 0xB8D1F500, 0xB8D0AC00, 0xB8CF6300, - 0xB8CE1A00, 0xB8CCD100, 0xB8CB8800, - 0xB8CA3F00, 0xB8C8F600, 0xB8C7AD00, - 0xB8C66400, 0xB8C51B00, 0xB8C3D200, - 0xB8C28900, 0xB8C14000, 0xB8BFF700, - 0xB8BEAE00, 0xB8BD6500, 0xB8BC1C00, - 0xB8BAD300, 0xB8B98A00, 0xB8B84100, - 0xB8B6F800, 0xB8B5AF00, 0xB8B46600, - 0xB8B31D00, 0xB8B1D400, 0xB8B08B00, - 0xB8AF4200, 0xB8ADF900, 0xB8ACB000, - 0xB8AB6700, 0xB8AA1E00, 0xB8A8D500, - 0xB8A78C00, 0xB8A64300, 0xB8A4FA00, - 0xB8A3B100, 0xB8A26800, 0xB8A11F00, - 0xB89FD600, 0xB89E8D00, 0xB89D4400, - 0xB89BFB00, 0xB89AB200, 0xB8996900, - 0xB8982000, 0xB896D700, 0xB8958E00, - 0xB8944500, 0xB892FC00, 0xB891B300, - 0xB8906A00, 0xB88F2100, 0xB88DD800, - 0xB88C8F00, 0xB88B4600, 0xB889FD00, - 0xB888B400, 0xB8876B00, 0xB8862200, - 0xB884D900, 0xB8839000, 0xB8824700, - 0xB880FE00, 0xB87FB500, 0xB87E6C00, - 0xB87D2300, 0xB87BDA00, 0xB87A9100, - 0xB8794800, 0xB877FF00, 0xB876B600, - 0xB8756D00, 0xB8742400, 0xB872DB00, - 0xB8719200, 0xB8704900, 0xB86F0000, - 0xB86DB700, 0xB86C6E00, 0xB86B2500, - 0xB869DC00, 0xB8689300, 0xB8674A00, - 0xB8660100, 0xB864B800, 0xB8636F00, - 0xB8622600, 0xB860DD00, 0xB85F9400, - 0xB85E4B00, 0xB85D0200, 0xB85BB900, - 0xB85A7000, 0xB8592700, 0xB857DE00, - 0xB8569500, 0xB8554C00, 0xB8540300, - 0xB852BA00, 0xB8517100, 0xB8502800, - 0xB84EDF00, 0xB84D9600, 0xB84C4D00, - 0xB84B0400, 0xB849BB00, 0xB8487200, - 0xB8472900, 0xB845E000, 0xB8449700, - 0xB8434E00, 0xB8420500, 0xB840BC00, - 0xB83F7300, 0xB83E2A00, 0xB83CE100, - 0xB83B9800, 0xB83A4F00, 0xB8390600, - 0xB837BD00, 0xB8367400, 0xB8352B00, - 0xB833E200, 0xB8329900, 0xB8315000, - 0xB8300700, 0xB82EBE00, 0xB82D7500, - 0xB82C2C00, 0xB82AE300, 0xB8299A00, - 0xB8285100, 0xB8270800, 0xB825BF00, - 0xB8247600, 0xB8232D00, 0xB821E400, - 0xB8209B00, 0xB81F5200, 0xB81E0900, - 0xB81CC000, 0xB81B7700, 0xB81A2E00, - 0xB818E500, 0xB8179C00, 0xB8165300, - 0xB8150A00, 0xB813C100, 0xB8127800, - 0xB8112F00, 0xB80FE600, 0xB80E9D00, - 0xB80D5400, 0xB80C0B00, 0xB80AC200, - 0xB8097900, 0xB8083000, 0xB806E700, - 0xB8059E00, 0xB8045500, 0xB8030C00, - 0xB801C300, 0xB8007A00, 0xB7FF3100, - 0xB7FDE800, 0xB7FC9F00, 0xB7FB5600, - 0xB7FA0D00, 0xB7F8C400, 0xB7F77B00, - 0xB7F63200, 0xB7F4E900, 0xB7F3A000, - 0xB7F25700, 0xB7F10E00, 0xB7EFC500, - 0xB7EE7C00, 0xB7ED3300, 0xB7EBEA00, - 0xB7EAA100, 0xB7E95800, 0xB7E80F00, - 0xB7E6C600, 0xB7E57D00, 0xB7E43400, - 0xB7E2EB00, 0xB7E1A200, 0xB7E05900, - 0xB7DF1000, 0xB7DDC700, 0xB7DC7E00, - 0xB7DB3500, 0xB7D9EC00, 0xB7D8A300, - 0xB7D75A00, 0xB7D61100, 0xB7D4C800, - 0xB7D37F00, 0xB7D23600, 0xB7D0ED00, - 0xB7CFA400, 0xB7CE5B00, 0xB7CD1200, - 0xB7CBC900, 0xB7CA8000, 0xB7C93700, - 0xB7C7EE00, 0xB7C6A500, 0xB7C55C00, - 0xB7C41300, 0xB7C2CA00, 0xB7C18100, - 0xB7C03800, 0xB7BEEF00, 0xB7BDA600, - 0xB7BC5D00, 0xB7BB1400, 0xB7B9CB00, - 0xB7B88200, 0xB7B73900, 0xB7B5F000, - 0xB7B4A700, 0xB7B35E00, 0xB7B21500, - 0xB7B0CC00, 0xB7AF8300, 0xB7AE3A00, - 0xB7ACF100, 0xB7ABA800, 0xB7AA5F00, - 0xB7A91600, 0xB7A7CD00, 0xB7A68400, - 0xB7A53B00, 0xB7A3F200, 0xB7A2A900, - 0xB7A16000, 0xB7A01700, 0xB79ECE00, - 0xB79D8500, 0xB79C3C00, 0xB79AF300, - 0xB799AA00, 0xB7986100, 0xB7971800, - 0xB795CF00, 0xB7948600, 0xB7933D00, - 0xB791F400, 0xB790AB00, 0xB78F6200, - 0xB78E1900, 0xB78CD000, 0xB78B8700, - 0xB78A3E00, 0xB788F500, 0xB787AC00, - 0xB7866300, 0xB7851A00, 0xB783D100, - 0xB7828800, 0xB7813F00, 0xB77FF600, - 0xB77EAD00, 0xB77D6400, 0xB77C1B00, - 0xB77AD200, 0xB7798900, 0xB7784000, - 0xB776F700, 0xB775AE00, 0xB7746500, - 0xB7731C00, 0xB771D300, 0xB7708A00, - 0xB76F4100, 0xB76DF800, 0xB76CAF00, - 0xB76B6600, 0xB76A1D00, 0xB768D400, - 0xB7678B00, 0xB7664200, 0xB764F900, - 0xB763B000, 0xB7626700, 0xB7611E00, - 0xB75FD500, 0xB75E8C00, 0xB75D4300, - 0xB75BFA00, 0xB75AB100, 0xB7596800, - 0xB7581F00, 0xB756D600, 0xB7558D00, - 0xB7544400, 0xB752FB00, 0xB751B200, - 0xB7506900, 0xB74F2000, 0xB74DD700, - 0xB74C8E00, 0xB74B4500, 0xB749FC00, - 0xB748B300, 0xB7476A00, 0xB7462100, - 0xB744D800, 0xB7438F00, 0xB7424600, - 0xB740FD00, 0xB73FB400, 0xB73E6B00, - 0xB73D2200, 0xB73BD900, 0xB73A9000, - 0xB7394700, 0xB737FE00, 0xB736B500, - 0xB7356C00, 0xB7342300, 0xB732DA00, - 0xB7319100, 0xB7304800, 0xB72EFF00, - 0xB72DB600, 0xB72C6D00, 0xB72B2400, - 0xB729DB00, 0xB7289200, 0xB7274900, - 0xB7260000, 0xB724B700, 0xB7236E00, - 0xB7222500, 0xB720DC00, 0xB71F9300, - 0xB71E4A00, 0xB71D0100, 0xB71BB800, - 0xB71A6F00, 0xB7192600, 0xB717DD00, - 0xB7169400, 0xB7154B00, 0xB7140200, - 0xB712B900, 0xB7117000, 0xB7102700, - 0xB70EDE00, 0xB70D9500, 0xB70C4C00, - 0xB70B0300, 0xB709BA00, 0xB7087100, - 0xB7072800, 0xB705DF00, 0xB7049600, - 0xB7034D00, 0xB7020400, 0xB700BB00, - 0xB6FF7200, 0xB6FE2900, 0xB6FCE000, - 0xB6FB9700, 0xB6FA4E00, 0xB6F90500, - 0xB6F7BC00, 0xB6F67300, 0xB6F52A00, - 0xB6F3E100, 0xB6F29800, 0xB6F14F00, - 0xB6F00600, 0xB6EEBD00, 0xB6ED7400, - 0xB6EC2B00, 0xB6EAE200, 0xB6E99900, - 0xB6E85000, 0xB6E70700, 0xB6E5BE00, - 0xB6E47500, 0xB6E32C00, 0xB6E1E300, - 0xB6E09A00, 0xB6DF5100, 0xB6DE0800, - 0xB6DCBF00, 0xB6DB7600, 0xB6DA2D00, - 0xB6D8E400, 0xB6D79B00, 0xB6D65200, - 0xB6D50900, 0xB6D3C000, 0xB6D27700, - 0xB6D12E00, 0xB6CFE500, 0xB6CE9C00, - 0xB6CD5300, 0xB6CC0A00, 0xB6CAC100, - 0xB6C97800, 0xB6C82F00, 0xB6C6E600, - 0xB6C59D00, 0xB6C45400, 0xB6C30B00, - 0xB6C1C200, 0xB6C07900, 0xB6BF3000, - 0xB6BDE700, 0xB6BC9E00, 0xB6BB5500, - 0xB6BA0C00, 0xB6B8C300, 0xB6B77A00, - 0xB6B63100, 0xB6B4E800, 0xB6B39F00, - 0xB6B25600, 0xB6B10D00, 0xB6AFC400, - 0xB6AE7B00, 0xB6AD3200, 0xB6ABE900, - 0xB6AAA000, 0xB6A95700, 0xB6A80E00, - 0xB6A6C500, 0xB6A57C00, 0xB6A43300, - 0xB6A2EA00, 0xB6A1A100, 0xB6A05800, - 0xB69F0F00, 0xB69DC600, 0xB69C7D00, - 0xB69B3400, 0xB699EB00, 0xB698A200, - 0xB6975900, 0xB6961000, 0xB694C700, - 0xB6937E00, 0xB6923500, 0xB690EC00, - 0xB68FA300, 0xB68E5A00, 0xB68D1100, - 0xB68BC800, 0xB68A7F00, 0xB6893600, - 0xB687ED00, 0xB686A400, 0xB6855B00, - 0xB6841200, 0xB682C900, 0xB6818000, - 0xB6803700, 0xB67EEE00, 0xB67DA500, - 0xB67C5C00, 0xB67B1300, 0xB679CA00, - 0xB6788100, 0xB6773800, 0xB675EF00, - 0xB674A600, 0xB6735D00, 0xB6721400, - 0xB670CB00, 0xB66F8200, 0xB66E3900, - 0xB66CF000, 0xB66BA700, 0xB66A5E00, - 0xB6691500, 0xB667CC00, 0xB6668300, - 0xB6653A00, 0xB663F100, 0xB662A800, - 0xB6615F00, 0xB6601600, 0xB65ECD00, - 0xB65D8400, 0xB65C3B00, 0xB65AF200, - 0xB659A900, 0xB6586000, 0xB6571700, - 0xB655CE00, 0xB6548500, 0xB6533C00, - 0xB651F300, 0xB650AA00, 0xB64F6100, - 0xB64E1800, 0xB64CCF00, 0xB64B8600, - 0xB64A3D00, 0xB648F400, 0xB647AB00, - 0xB6466200, 0xB6451900, 0xB643D000, - 0xB6428700, 0xB6413E00, 0xB63FF500, - 0xB63EAC00, 0xB63D6300, 0xB63C1A00, - 0xB63AD100, 0xB6398800, 0xB6383F00, - 0xB636F600, 0xB635AD00, 0xB6346400, - 0xB6331B00, 0xB631D200, 0xB6308900, - 0xB62F4000, 0xB62DF700, 0xB62CAE00, - 0xB62B6500, 0xB62A1C00, 0xB628D300, - 0xB6278A00, 0xB6264100, 0xB624F800, - 0xB623AF00, 0xB6226600, 0xB6211D00, - 0xB61FD400, 0xB61E8B00, 0xB61D4200, - 0xB61BF900, 0xB61AB000, 0xB6196700, - 0xB6181E00, 0xB616D500, 0xB6158C00, - 0xB6144300, 0xB612FA00, 0xB611B100, - 0xB6106800, 0xB60F1F00, 0xB60DD600, - 0xB60C8D00, 0xB60B4400, 0xB609FB00, - 0xB608B200, 0xB6076900, 0xB6062000, - 0xB604D700, 0xB6038E00, 0xB6024500, - 0xB600FC00, 0xB5FFB300, 0xB5FE6A00, - 0xB5FD2100, 0xB5FBD800, 0xB5FA8F00, - 0xB5F94600, 0xB5F7FD00, 0xB5F6B400, - 0xB5F56B00, 0xB5F42200, 0xB5F2D900, - 0xB5F19000, 0xB5F04700, 0xB5EEFE00, - 0xB5EDB500, 0xB5EC6C00, 0xB5EB2300, - 0xB5E9DA00, 0xB5E89100, 0xB5E74800, - 0xB5E5FF00, 0xB5E4B600, 0xB5E36D00, - 0xB5E22400, 0xB5E0DB00, 0xB5DF9200, - 0xB5DE4900, 0xB5DD0000, 0xB5DBB700, - 0xB5DA6E00, 0xB5D92500, 0xB5D7DC00, - 0xB5D69300, 0xB5D54A00, 0xB5D40100, - 0xB5D2B800, 0xB5D16F00, 0xB5D02600, - 0xB5CEDD00, 0xB5CD9400, 0xB5CC4B00, - 0xB5CB0200, 0xB5C9B900, 0xB5C87000, - 0xB5C72700, 0xB5C5DE00, 0xB5C49500, - 0xB5C34C00, 0xB5C20300, 0xB5C0BA00, - 0xB5BF7100, 0xB5BE2800, 0xB5BCDF00, - 0xB5BB9600, 0xB5BA4D00, 0xB5B90400, - 0xB5B7BB00, 0xB5B67200, 0xB5B52900, - 0xB5B3E000, 0xB5B29700, 0xB5B14E00, - 0xB5B00500, 0xB5AEBC00, 0xB5AD7300, - 0xB5AC2A00, 0xB5AAE100, 0xB5A99800, - 0xB5A84F00, 0xB5A70600, 0xB5A5BD00, - 0xB5A47400, 0xB5A32B00, 0xB5A1E200, - 0xB5A09900, 0xB59F5000, 0xB59E0700, - 0xB59CBE00, 0xB59B7500, 0xB59A2C00, - 0xB598E300, 0xB5979A00, 0xB5965100, - 0xB5950800, 0xB593BF00, 0xB5927600, - 0xB5912D00, 0xB58FE400, 0xB58E9B00, - 0xB58D5200, 0xB58C0900, 0xB58AC000, - 0xB5897700, 0xB5882E00, 0xB586E500, - 0xB5859C00, 0xB5845300, 0xB5830A00, - 0xB581C100, 0xB5807800, 0xB57F2F00, - 0xB57DE600, 0xB57C9D00, 0xB57B5400, - 0xB57A0B00, 0xB578C200, 0xB5777900, - 0xB5763000, 0xB574E700, 0xB5739E00, - 0xB5725500, 0xB5710C00, 0xB56FC300, - 0xB56E7A00, 0xB56D3100, 0xB56BE800, - 0xB56A9F00, 0xB5695600, 0xB5680D00, - 0xB566C400, 0xB5657B00, 0xB5643200, - 0xB562E900, 0xB561A000, 0xB5605700, - 0xB55F0E00, 0xB55DC500, 0xB55C7C00, - 0xB55B3300, 0xB559EA00, 0xB558A100, - 0xB5575800, 0xB5560F00, 0xB554C600, - 0xB5537D00, 0xB5523400, 0xB550EB00, - 0xB54FA200, 0xB54E5900, 0xB54D1000, - 0xB54BC700, 0xB54A7E00, 0xB5493500, - 0xB547EC00, 0xB546A300, 0xB5455A00, - 0xB5441100, 0xB542C800, 0xB5417F00, - 0xB5403600, 0xB53EED00, 0xB53DA400, - 0xB53C5B00, 0xB53B1200, 0xB539C900, - 0xB5388000, 0xB5373700, 0xB535EE00, - 0xB534A500, 0xB5335C00, 0xB5321300, - 0xB530CA00, 0xB52F8100, 0xB52E3800, - 0xB52CEF00, 0xB52BA600, 0xB52A5D00, - 0xB5291400, 0xB527CB00, 0xB5268200, - 0xB5253900, 0xB523F000, 0xB522A700, - 0xB5215E00, 0xB5201500, 0xB51ECC00, - 0xB51D8300, 0xB51C3A00, 0xB51AF100, - 0xB519A800, 0xB5185F00, 0xB5171600, - 0xB515CD00, 0xB5148400, 0xB5133B00, - 0xB511F200, 0xB510A900, 0xB50F6000, - 0xB50E1700, 0xB50CCE00, 0xB50B8500, - 0xB50A3C00, 0xB508F300, 0xB507AA00, - 0xB5066100, 0xB5051800, 0xB503CF00, - 0xB5028600, 0xB5013D00, 0xB4FFF400, - 0xB4FEAB00, 0xB4FD6200, 0xB4FC1900, - 0xB4FAD000, 0xB4F98700, 0xB4F83E00, - 0xB4F6F500, 0xB4F5AC00, 0xB4F46300, - 0xB4F31A00, 0xB4F1D100, 0xB4F08800, - 0xB4EF3F00, 0xB4EDF600, 0xB4ECAD00, - 0xB4EB6400, 0xB4EA1B00, 0xB4E8D200, - 0xB4E78900, 0xB4E64000, 0xB4E4F700, - 0xB4E3AE00, 0xB4E26500, 0xB4E11C00, - 0xB4DFD300, 0xB4DE8A00, 0xB4DD4100, - 0xB4DBF800, 0xB4DAAF00, 0xB4D96600, - 0xB4D81D00, 0xB4D6D400, 0xB4D58B00, - 0xB4D44200, 0xB4D2F900, 0xB4D1B000, - 0xB4D06700, 0xB4CF1E00, 0xB4CDD500, - 0xB4CC8C00, 0xB4CB4300, 0xB4C9FA00, - 0xB4C8B100, 0xB4C76800, 0xB4C61F00, - 0xB4C4D600, 0xB4C38D00, 0xB4C24400, - 0xB4C0FB00, 0xB4BFB200, 0xB4BE6900, - 0xB4BD2000, 0xB4BBD700, 0xB4BA8E00, - 0xB4B94500, 0xB4B7FC00, 0xB4B6B300, - 0xB4B56A00, 0xB4B42100, 0xB4B2D800, - 0xB4B18F00, 0xB4B04600, 0xB4AEFD00, - 0xB4ADB400, 0xB4AC6B00, 0xB4AB2200, - 0xB4A9D900, 0xB4A89000, 0xB4A74700, - 0xB4A5FE00, 0xB4A4B500, 0xB4A36C00, - 0xB4A22300, 0xB4A0DA00, 0xB49F9100, - 0xB49E4800, 0xB49CFF00, 0xB49BB600, - 0xB49A6D00, 0xB4992400, 0xB497DB00, - 0xB4969200, 0xB4954900, 0xB4980000, - 0xB496CD00, 0xB4959A00, 0xB4946700, - 0xB4933400, 0xB4920100, 0xB490CE00, - 0xB48F9B00, 0xB48E6800, 0xB48D3500, - 0xB48C0200, 0xB48ACF00, 0xB4899C00, - 0xB4886900, 0xB4873600, 0xB4860300, - 0xB484D000, 0xB4839D00, 0xB4826A00, - 0xB4813700, 0xB4800400, 0xB47ED100, - 0xB47D9E00, 0xB47C6B00, 0xB47B3800, - 0xB47A0500, 0xB478D200, 0xB4779F00, - 0xB4766C00, 0xB4753900, 0xB4740600, - 0xB472D300, 0xB471A000, 0xB4706D00, - 0xB46F3A00, 0xB46E0700, 0xB46CD400, - 0xB46BA100, 0xB46A6E00, 0xB4693B00, - 0xB4680800, 0xB466D500, 0xB465A200, - 0xB4646F00, 0xB4633C00, 0xB4620900, - 0xB460D600, 0xB45FA300, 0xB45E7000, - 0xB45D3D00, 0xB45C0A00, 0xB45AD700, - 0xB459A400, 0xB4587100, 0xB4573E00, - 0xB4560B00, 0xB454D800, 0xB453A500, - 0xB4527200, 0xB4513F00, 0xB4500C00, - 0xB44ED900, 0xB44DA600, 0xB44C7300, - 0xB44B4000, 0xB44A0D00, 0xB448DA00, - 0xB447A700, 0xB4467400, 0xB4454100, - 0xB4440E00, 0xB442DB00, 0xB441A800, - 0xB4407500, 0xB43F4200, 0xB43E0F00, - 0xB43CDC00, 0xB43BA900, 0xB43A7600, - 0xB4394300, 0xB4381000, 0xB436DD00, - 0xB435AA00, 0xB4347700, 0xB4334400, - 0xB4321100, 0xB430DE00, 0xB42FAB00, - 0xB42E7800, 0xB42D4500, 0xB42C1200, - 0xB42ADF00, 0xB429AC00, 0xB4287900, - 0xB4274600, 0xB4261300, 0xB424E000, - 0xB423AD00, 0xB4227A00, 0xB4214700, - 0xB4201400, 0xB41EE100, 0xB41DAE00, - 0xB41C7B00, 0xB41B4800, 0xB41A1500, - 0xB418E200, 0xB417AF00, 0xB4167C00, - 0xB4154900, 0xB4141600, 0xB412E300, - 0xB411B000, 0xB4107D00, 0xB40F4A00, - 0xB40E1700, 0xB40CE400, 0xB40BB100, - 0xB40A7E00, 0xB4094B00, 0xB4081800, - 0xB406E500, 0xB405B200, 0xB4047F00, - 0xB4034C00, 0xB4021900, 0xB400E600, - 0xB3FFB300, 0xB3FE8000, 0xB3FD4D00, - 0xB3FC1A00, 0xB3FAE700, 0xB3F9B400, - 0xB3F88100, 0xB3F74E00, 0xB3F61B00, - 0xB3F4E800, 0xB3F3B500, 0xB3F28200, - 0xB3F14F00, 0xB3F01C00, 0xB3EEE900, - 0xB3EDB600, 0xB3EC8300, 0xB3EB5000, - 0xB3EA1D00, 0xB3E8EA00, 0xB3E7B700, - 0xB3E68400, 0xB3E55100, 0xB3E41E00, - 0xB3E2EB00, 0xB3E1B800, 0xB3E08500, - 0xB3DF5200, 0xB3DE1F00, 0xB3DCEC00, - 0xB3DBB900, 0xB3DA8600, 0xB3D95300, - 0xB3D82000, 0xB3D6ED00, 0xB3D5BA00, - 0xB3D48700, 0xB3D35400, 0xB3D22100, - 0xB3D0EE00, 0xB3CFBB00, 0xB3CE8800, - 0xB3CD5500, 0xB3CC2200, 0xB3CAEF00, - 0xB3C9BC00, 0xB3C88900, 0xB3C75600, - 0xB3C62300, 0xB3C4F000, 0xB3C3BD00, - 0xB3C28A00, 0xB3C15700, 0xB3C02400, - 0xB3BEF100, 0xB3BDBE00, 0xB3BC8B00, - 0xB3BB5800, 0xB3BA2500, 0xB3B8F200, - 0xB3B7BF00, 0xB3B68C00, 0xB3B55900, - 0xB3B42600, 0xB3B2F300, 0xB3B1C000, - 0xB3B08D00, 0xB3AF5A00, 0xB3AE2700, - 0xB3ACF400, 0xB3ABC100, 0xB3AA8E00, - 0xB3A95B00, 0xB3A82800, 0xB3A6F500, - 0xB3A5C200, 0xB3A48F00, 0xB3A35C00, - 0xB3A22900, 0xB3A0F600, 0xB39FC300, - 0xB39E9000, 0xB39D5D00, 0xB39C2A00, - 0xB39AF700, 0xB399C400, 0xB3989100, - 0xB3975E00, 0xB3962B00, 0xB394F800, - 0xB393C500, 0xB3929200, 0xB3915F00, - 0xB3902C00, 0xB38EF900, 0xB38DC600, - 0xB38C9300, 0xB38B6000, 0xB38A2D00, - 0xB388FA00, 0xB387C700, 0xB3869400, - 0xB3856100, 0xB3842E00, 0xB382FB00, - 0xB381C800, 0xB3809500, 0xB37F6200, - 0xB37E2F00, 0xB37CFC00, 0xB37BC900, - 0xB37A9600, 0xB3796300, 0xB3783000, - 0xB376FD00, 0xB375CA00, 0xB3749700, - 0xB3736400, 0xB3723100, 0xB370FE00, - 0xB36FCB00, 0xB36E9800, 0xB36D6500, - 0xB36C3200, 0xB36AFF00, 0xB369CC00, - 0xB3689900, 0xB3676600, 0xB3663300, - 0xB3650000, 0xB363CD00, 0xB3629A00, - 0xB3616700, 0xB3603400, 0xB35F0100, - 0xB35DCE00, 0xB35C9B00, 0xB35B6800, - 0xB35A3500, 0xB3590200, 0xB357CF00, - 0xB3569C00, 0xB3556900, 0xB3543600, - 0xB3530300, 0xB351D000, 0xB3509D00, - 0xB34F6A00, 0xB34E3700, 0xB34D0400, - 0xB34BD100, 0xB34A9E00, 0xB3496B00, - 0xB3483800, 0xB3470500, 0xB345D200, - 0xB3449F00, 0xB3436C00, 0xB3423900, - 0xB3410600, 0xB33FD300, 0xB33EA000, - 0xB33D6D00, 0xB33C3A00, 0xB33B0700, - 0xB339D400, 0xB338A100, 0xB3376E00, - 0xB3363B00, 0xB3350800, 0xB333D500, - 0xB332A200, 0xB3316F00, 0xB3303C00, - 0xB32F0900, 0xB32DD600, 0xB32CA300, - 0xB32B7000, 0xB32A3D00, 0xB3290A00, - 0xB327D700, 0xB326A400, 0xB3257100, - 0xB3243E00, 0xB3230B00, 0xB321D800, - 0xB320A500, 0xB31F7200, 0xB31E3F00, - 0xB31D0C00, 0xB31BD900, 0xB31AA600, - 0xB3197300, 0xB3184000, 0xB3170D00, - 0xB315DA00, 0xB314A700, 0xB3137400, - 0xB3124100, 0xB3110E00, 0xB30FDB00, - 0xB30EA800, 0xB30D7500, 0xB30C4200, - 0xB30B0F00, 0xB309DC00, 0xB308A900, - 0xB3077600, 0xB3064300, 0xB3051000, - 0xB303DD00, 0xB302AA00, 0xB3017700, - 0xB3004400, 0xB2FF1100, 0xB2FDDE00, - 0xB2FCAB00, 0xB2FB7800, 0xB2FA4500, - 0xB2F91200, 0xB2F7DF00, 0xB2F6AC00, - 0xB2F57900, 0xB2F44600, 0xB2F31300, - 0xB2F1E000, 0xB2F0AD00, 0xB2EF7A00, - 0xB2EE4700, 0xB2ED1400, 0xB2EBE100, - 0xB2EAAE00, 0xB2E97B00, 0xB2E84800, - 0xB2E71500, 0xB2E5E200, 0xB2E4AF00, - 0xB2E37C00, 0xB2E24900, 0xB2E11600, - 0xB2DFE300, 0xB2DEB000, 0xB2DD7D00, - 0xB2DC4A00, 0xB2DB1700, 0xB2D9E400, - 0xB2D8B100, 0xB2D77E00, 0xB2D64B00, - 0xB2D51800, 0xB2D3E500, 0xB2D2B200, - 0xB2D17F00, 0xB2D04C00, 0xB2CF1900, - 0xB2CDE600, 0xB2CCB300, 0xB2CB8000, - 0xB2CA4D00, 0xB2C91A00, 0xB2C7E700, - 0xB2C6B400, 0xB2C58100, 0xB2C44E00, - 0xB2C31B00, 0xB2C1E800, 0xB2C0B500, - 0xB2BF8200, 0xB2BE4F00, 0xB2BD1C00, - 0xB2BBE900, 0xB2BAB600, 0xB2B98300, - 0xB2B85000, 0xB2B71D00, 0xB2B5EA00, - 0xB2B4B700, 0xB2B38400, 0xB2B25100, - 0xB2B11E00, 0xB2AFEB00, 0xB2AEB800, - 0xB2AD8500, 0xB2AC5200, 0xB2AB1F00, - 0xB2A9EC00, 0xB2A8B900, 0xB2A78600, - 0xB2A65300, 0xB2A52000, 0xB2A3ED00, - 0xB2A2BA00, 0xB2A18700, 0xB2A05400, - 0xB29F2100, 0xB29DEE00, 0xB29CBB00, - 0xB29B8800, 0xB29A5500, 0xB2992200, - 0xB297EF00, 0xB296BC00, 0xB2958900, - 0xB2945600, 0xB2932300, 0xB291F000, - 0xB290BD00, 0xB28F8A00, 0xB28E5700, - 0xB28D2400, 0xB28BF100, 0xB28ABE00, - 0xB2898B00, 0xB2885800, 0xB2872500, - 0xB285F200, 0xB284BF00, 0xB2838C00, - 0xB2825900, 0xB2812600, 0xB27FF300, - 0xB27EC000, 0xB27D8D00, 0xB27C5A00, - 0xB27B2700, 0xB279F400, 0xB278C100, - 0xB2778E00, 0xB2765B00, 0xB2752800, - 0xB273F500, 0xB272C200, 0xB2718F00, - 0xB2705C00, 0xB26F2900, 0xB26DF600, - 0xB26CC300, 0xB26B9000, 0xB26A5D00, - 0xB2692A00, 0xB267F700, 0xB266C400, - 0xB2659100, 0xB2645E00, 0xB2632B00, - 0xB261F800, 0xB260C500, 0xB25F9200, - 0xB25E5F00, 0xB25D2C00, 0xB25BF900, - 0xB25AC600, 0xB2599300, 0xB2586000, - 0xB2572D00, 0xB255FA00, 0xB254C700, - 0xB2539400, 0xB2526100, 0xB2512E00, - 0xB24FFB00, 0xB24EC800, 0xB24D9500, - 0xB24C6200, 0xB24B2F00, 0xB249FC00, - 0xB248C900, 0xB2479600, 0xB2466300, - 0xB2453000, 0xB243FD00, 0xB242CA00, - 0xB2419700, 0xB2406400, 0xB23F3100, - 0xB23DFE00, 0xB23CCB00, 0xB23B9800, - 0xB23A6500, 0xB2393200, 0xB237FF00, - 0xB236CC00, 0xB2359900, 0xB2346600, - 0xB2333300, 0xB2320000, 0xB230CD00, - 0xB22F9A00, 0xB22E6700, 0xB22D3400, - 0xB22C0100, 0xB22ACE00, 0xB2299B00, - 0xB2286800, 0xB2273500, 0xB2260200, - 0xB224CF00, 0xB2239C00, 0xB2226900, - 0xB2213600, 0xB2200300, 0xB21ED000, - 0xB21D9D00, 0xB21C6A00, 0xB21B3700, - 0xB21A0400, 0xB218D100, 0xB2179E00, - 0xB2166B00, 0xB2153800, 0xB2140500, - 0xB212D200, 0xB2119F00, 0xB2106C00, - 0xB20F3900, 0xB20E0600, 0xB20CD300, - 0xB20BA000, 0xB20A6D00, 0xB2093A00, - 0xB2080700, 0xB206D400, 0xB205A100, - 0xB2046E00, 0xB2033B00, 0xB2020800, - 0xB200D500, 0xB1FFA200, 0xB1FE6F00, - 0xB1FD3C00, 0xB1FC0900, 0xB1FAD600, - 0xB1F9A300, 0xB1F87000, 0xB1F73D00, - 0xB1F60A00, 0xB1F4D700, 0xB1F3A400, - 0xB1F27100, 0xB1F13E00, 0xB1F00B00, - 0xB1EED800, 0xB1EDA500, 0xB1EC7200, - 0xB1EB3F00, 0xB1EA0C00, 0xB1E8D900, - 0xB1E7A600, 0xB1E67300, 0xB1E54000, - 0xB1E40D00, 0xB1E2DA00, 0xB1E1A700, - 0xB1E07400, 0xB1DF4100, 0xB1DE0E00, - 0xB1DCDB00, 0xB1DBA800, 0xB1DA7500, - 0xB1D94200, 0xB1D80F00, 0xB1D6DC00, - 0xB1D5A900, 0xB1D47600, 0xB1D34300, - 0xB1D21000, 0xB1D0DD00, 0xB1CFAA00, - 0xB1CE7700, 0xB1CD4400, 0xB1CC1100, - 0xB1CADE00, 0xB1C9AB00, 0xB1C87800, - 0xB1C74500, 0xB1C61200, 0xB1C4DF00, - 0xB1C3AC00, 0xB1C27900, 0xB1C14600, - 0xB1C01300, 0xB1BEE000, 0xB1BDAD00, - 0xB1BC7A00, 0xB1BB4700, 0xB1BA1400, - 0xB1B8E100, 0xB1B7AE00, 0xB1B67B00, - 0xB1B54800, 0xB1B41500, 0xB1B2E200, - 0xB1B1AF00, 0xB1B07C00, 0xB1AF4900, - 0xB1AE1600, 0xB1ACE300, 0xB1ABB000, - 0xB1AA7D00, 0xB1A94A00, 0xB1A81700, - 0xB1A6E400, 0xB1A5B100, 0xB1A47E00, - 0xB1A34B00, 0xB1A21800, 0xB1A0E500, - 0xB19FB200, 0xB19E7F00, 0xB19D4C00, - 0xB19C1900, 0xB19AE600, 0xB199B300, - 0xB1988000, 0xB1974D00, 0xB1961A00, - 0xB194E700, 0xB193B400, 0xB1928100, - 0xB1914E00, 0xB1901B00, 0xB18EE800, - 0xB18DB500, 0xB18C8200, 0xB18B4F00, - 0xB18A1C00, 0xB188E900, 0xB187B600, - 0xB1868300, 0xB1855000, 0xB1841D00, - 0xB182EA00, 0xB181B700, 0xB1808400, - 0xB17F5100, 0xB17E1E00, 0xB17CEB00, - 0xB17BB800, 0xB17A8500, 0xB1795200, - 0xB1781F00, 0xB176EC00, 0xB175B900, - 0xB1748600, 0xB1735300, 0xB1722000, - 0xB170ED00, 0xB16FBA00, 0xB16E8700, - 0xB16D5400, 0xB16C2100, 0xB16AEE00, - 0xB169BB00, 0xB1688800, 0xB1675500, - 0xB1662200, 0xB164EF00, 0xB163BC00, - 0xB1628900, 0xB1615600, 0xB1602300, - 0xB15EF000, 0xB15DBD00, 0xB15C8A00, - 0xB15B5700, 0xB15A2400, 0xB158F100, - 0xB157BE00, 0xB1568B00, 0xB1555800, - 0xB1542500, 0xB152F200, 0xB151BF00, - 0xB1508C00, 0xB14F5900, 0xB14E2600, - 0xB14CF300, 0xB14BC000, 0xB14A8D00, - 0xB1495A00, 0xB1482700, 0xB146F400, - 0xB145C100, 0xB1448E00, 0xB1435B00, - 0xB1422800, 0xB140F500, 0xB13FC200, - 0xB13E8F00, 0xB13D5C00, 0xB13C2900, - 0xB13AF600, 0xB139C300, 0xB1389000, - 0xB1375D00, 0xB1362A00, 0xB134F700, - 0xB133C400, 0xB1329100, 0xB1315E00, - 0xB1302B00, 0xB12EF800, 0xB12DC500, - 0xB12C9200, 0xB12B5F00, 0xB12A2C00, - 0xB128F900, 0xB127C600, 0xB1269300, - 0xB1256000, 0xB1242D00, 0xB122FA00, - 0xB121C700, 0xB1209400, 0xB11F6100, - 0xB11E2E00, 0xB11CFB00, 0xB11BC800, - 0xB11A9500, 0xB1196200, 0xB1182F00, - 0xB116FC00, 0xB115C900, 0xB1149600, - 0xB1136300, 0xB1123000, 0xB110FD00, - 0xB10FCA00, 0xB10E9700, 0xB10D6400, - 0xB10C3100, 0xB10AFE00, 0xB109CB00, - 0xB1089800, 0xB1076500, 0xB1063200, - 0xB104FF00, 0xB103CC00, 0xB1029900, - 0xB1016600, 0xB1003300, 0xB0FF0000, - 0xB0FDCD00, 0xB0FC9A00, 0xB0FB6700, - 0xB0FA3400, 0xB0F90100, 0xB0F7CE00, - 0xB0F69B00, 0xB0F56800, 0xB0F43500, - 0xB0F30200, 0xB0F1CF00, 0xB0F09C00, - 0xB0EF6900, 0xB0EE3600, 0xB0ED0300, - 0xB0EBD000, 0xB0EA9D00, 0xB0E96A00, - 0xB0E83700, 0xB0E70400, 0xB0E5D100, - 0xB0E49E00, 0xB0E36B00, 0xB0E23800, - 0xB0E10500, 0xB0DFD200, 0xB0DE9F00, - 0xB0DD6C00, 0xB0DC3900, 0xB0DB0600, - 0xB0D9D300, 0xB0D8A000, 0xB0D76D00, - 0xB0D63A00, 0xB0D50700, 0xB0D3D400, - 0xB0D2A100, 0xB0D16E00, 0xB0D03B00, - 0xB0CF0800, 0xB0CDD500, 0xB0CCA200, - 0xB0CB6F00, 0xB0CA3C00, 0xB0C90900, - 0xB0C7D600, 0xB0C6A300, 0xB0C57000, - 0xB0C43D00, 0xB0C30A00, 0xB0C1D700, - 0xB0C0A400, 0xB0BF7100, 0xB0BE3E00, - 0xB0BD0B00, 0xB0BBD800, 0xB0BAA500, - 0xB0B97200, 0xB0B83F00, 0xB0B70C00, - 0xB0B5D900, 0xB0B4A600, 0xB0B37300, - 0xB0B24000, 0xB0B10D00, 0xB0AFDA00, - 0xB0AEA700, 0xB0AD7400, 0xB0AC4100, - 0xB0AB0E00, 0xB0A9DB00, 0xB0A8A800, - 0xB0A77500, 0xB0A64200, 0xB0A50F00, - 0xB0A3DC00, 0xB0A2A900, 0xB0A17600, - 0xB0A04300, 0xB09F1000, 0xB09DDD00, - 0xB09CAA00, 0xB09B7700, 0xB09A4400, - 0xB0991100, 0xB097DE00, 0xB096AB00, - 0xB0957800, 0xB0944500, 0xB0931200, - 0xB091DF00, 0xB090AC00, 0xB08F7900, - 0xB08E4600, 0xB08D1300, 0xB08BE000, - 0xB08AAD00, 0xB0897A00, 0xB0884700, - 0xB0871400, 0xB085E100, 0xB084AE00, - 0xB0837B00, 0xB0824800, 0xB0811500, - 0xB07FE200, 0xB07EAF00, 0xB07D7C00, - 0xB07C4900, 0xB07B1600, 0xB079E300, - 0xB078B000, 0xB0777D00, 0xB0764A00, - 0xB0751700, 0xB073E400, 0xB072B100, - 0xB0717E00, 0xB0704B00, 0xB06F1800, - 0xB06DE500, 0xB06CB200, 0xB06B7F00, - 0xB06A4C00, 0xB0691900, 0xB067E600, - 0xB066B300, 0xB0658000, 0xB0644D00, - 0xB0631A00, 0xB061E700, 0xB060B400, - 0xB05F8100, 0xB05E4E00, 0xB05D1B00, - 0xB05BE800, 0xB05AB500, 0xB0598200, - 0xB0584F00, 0xB0571C00, 0xB055E900, - 0xB054B600, 0xB0538300, 0xB0525000, - 0xB0511D00, 0xB04FEA00, 0xB04EB700, - 0xB04D8400, 0xB04C5100, 0xB04B1E00, - 0xB049EB00, 0xB048B800, 0xB0478500, - 0xB0465200, 0xB0451F00, 0xB043EC00, - 0xB042B900, 0xB0418600, 0xB0405300, - 0xB03F2000, 0xB03DED00, 0xB03CBA00, - 0xB03B8700, 0xB03A5400, 0xB0392100, - 0xB037EE00, 0xB036BB00, 0xB0358800, - 0xB0345500, 0xB0332200, 0xB031EF00, - 0xB030BC00, 0xB02F8900, 0xB02E5600, - 0xB02D2300, 0xB02BF000, 0xB02ABD00, - 0xB0298A00, 0xB0285700, 0xB0272400, - 0xB025F100, 0xB024BE00, 0xB0238B00, - 0xB0225800, 0xB0212500, 0xB01FF200, - 0xB01EBF00, 0xB01D8C00, 0xB01C5900, - 0xB01B2600, 0xB019F300, 0xB018C000, - 0xB0178D00, 0xB0165A00, 0xB0152700, - 0xB013F400, 0xB012C100, 0xB0118E00, - 0xB0105B00, 0xB00F2800, 0xB00DF500, - 0xB00CC200, 0xB00B8F00, 0xB00A5C00, - 0xB0092900, 0xB007F600, 0xB006C300, - 0xB0059000, 0xB0045D00, 0xB0032A00, - 0xB001F700, 0xB000C400, 0xAFFF9100, - 0xAFFE5E00, 0xAFFD2B00, 0xAFFBF800, - 0xAFFAC500, 0xAFF99200, 0xAFF85F00, - 0xAFF72C00, 0xAFF5F900, 0xAFF4C600, - 0xAFF39300, 0xAFF26000, 0xAFF12D00, - 0xAFEFFA00, 0xAFEEC700, 0xAFED9400, - 0xAFEC6100, 0xAFEB2E00, 0xAFE9FB00, - 0xAFE8C800, 0xAFE79500, 0xAFE66200, - 0xAFE52F00, 0xAFE3FC00, 0xAFE2C900, - 0xAFE19600, 0xAFE06300, 0xAFDF3000, - 0xAFDDFD00, 0xAFDCCA00, 0xAFDB9700, - 0xAFDA6400, 0xAFD93100, 0xAFD7FE00, - 0xAFD6CB00, 0xAFD59800, 0xAFD46500, - 0xAFD33200, 0xAFD1FF00, 0xAFD0CC00, - 0xAFCF9900, 0xAFCE6600, 0xAFCD3300, - 0xAFCC0000, 0xAFCACD00, 0xAFC99A00, - 0xAFC86700, 0xAFC73400, 0xAFC60100, - 0xAFC4CE00, 0xAFC39B00, 0xAFC26800, - 0xAFC13500, 0xAFC00200, 0xAFBECF00, - 0xAFBD9C00, 0xAFBC6900, 0xAFBB3600, - 0xAFBA0300, 0xAFB8D000, 0xAFB79D00, - 0xAFB66A00, 0xAFB53700, 0xAFB40400, - 0xAFB2D100, 0xAFB19E00, 0xAFB06B00, - 0xAFAF3800, 0xAFAE0500, 0xAFACD200, - 0xAFAB9F00, 0xAFAA6C00, 0xAFA93900, - 0xAFA80600, 0xAFA6D300, 0xAFA5A000, - 0xAFA46D00, 0xAFA33A00, 0xAFA20700, - 0xAFA0D400, 0xAF9FA100, 0xAF9E6E00, - 0xAF9D3B00, 0xAF9C0800, 0xAF9AD500, - 0xAF99A200, 0xAF986F00, 0xAF973C00, - 0xAF960900, 0xAF94D600, 0xAF93A300, - 0xAF927000, 0xAF913D00, 0xAF900A00, - 0xAF8ED700, 0xAF8DA400, 0xAF8C7100, - 0xAF8B3E00, 0xAF8A0B00, 0xAF88D800, - 0xAF87A500, 0xAF867200, 0xAF853F00, - 0xAF840C00, 0xAF82D900, 0xAF81A600, - 0xAF807300, 0xAF7F4000, 0xAF7E0D00, - 0xAF7CDA00, 0xAF7BA700, 0xAF7A7400, - 0xAF794100, 0xAF780E00, 0xAF76DB00, - 0xAF75A800, 0xAF747500, 0xAF734200, - 0xAF720F00, 0xAF70DC00, 0xAF6FA900, - 0xAF6E7600, 0xAF6D4300, 0xAF6C1000, - 0xAF6ADD00, 0xAF69AA00, 0xAF687700, - 0xAF674400, 0xAF661100, 0xAF64DE00, - 0xAF63AB00, 0xAF627800, 0xAF614500, - 0xAF601200, 0xAF5EDF00, 0xAF5DAC00, - 0xAF5C7900, 0xAF5B4600, 0xAF5A1300, - 0xAF58E000, 0xAF57AD00, 0xAF567A00, - 0xAF554700, 0xAF541400, 0xAF52E100, - 0xAF51AE00, 0xAF507B00, 0xAF4F4800, - 0xAF4E1500, 0xAF4CE200, 0xAF4BAF00, - 0xAF4A7C00, 0xAF494900, 0xAF481600, - 0xAF46E300, 0xAF45B000, 0xAF447D00, - 0xAF434A00, 0xAF421700, 0xAF40E400, - 0xAF3FB100, 0xAF3E7E00, 0xAF3D4B00, - 0xAF3C1800, 0xAF3AE500, 0xAF39B200, - 0xAF387F00, 0xAF374C00, 0xAF361900, - 0xAF34E600, 0xAF33B300, 0xAF328000, - 0xAF314D00, 0xAF301A00, 0xAF2EE700, - 0xAF2DB400, 0xAF2C8100, 0xAF2B4E00, - 0xAF2A1B00, 0xAF28E800, 0xAF27B500, - 0xAF268200, 0xAF254F00, 0xAF241C00, - 0xAF22E900, 0xAF21B600, 0xAF208300, - 0xAF1F5000, 0xAF1E1D00, 0xAF1CEA00, - 0xAF1BB700, 0xAF1A8400, 0xAF195100, - 0xAF181E00, 0xAF16EB00, 0xAF15B800, - 0xAF148500, 0xAF135200, 0xAF121F00, - 0xAF10EC00, 0xAF0FB900, 0xAF0E8600, - 0xAF0D5300, 0xAF0C2000, 0xAF0AED00, - 0xAF09BA00, 0xAF088700, 0xAF075400, - 0xAF062100, 0xAF04EE00, 0xAF03BB00, - 0xAF028800, 0xAF015500, 0xAF002200, - 0xAEFEEF00, 0xAEFDBC00, 0xAEFC8900, - 0xAEFB5600, 0xAEFA2300, 0xAEF8F000, - 0xAEF7BD00, 0xAEF68A00, 0xAEF55700, - 0xAEF42400, 0xAEF2F100, 0xAEF1BE00, - 0xAEF08B00, 0xAEEF5800, 0xAEEE2500, - 0xAEECF200, 0xAEEBBF00, 0xAEEA8C00, - 0xAEE95900, 0xAEE82600, 0xAEE6F300, - 0xAEE5C000, 0xAEE48D00, 0xAEE35A00, - 0xAEE22700, 0xAEE0F400, 0xAEDFC100, - 0xAEDE8E00, 0xAEDD5B00, 0xAEDC2800, - 0xAEDAF500, 0xAED9C200, 0xAED88F00, - 0xAED75C00, 0xAED62900, 0xAED4F600, - 0xAED3C300, 0xAED29000, 0xAED15D00, - 0xAED02A00, 0xAECEF700, 0xAECDC400, - 0xAECC9100, 0xAECB5E00, 0xAECA2B00, - 0xAEC8F800, 0xAEC7C500, 0xAEC69200, - 0xAEC55F00, 0xAEC42C00, 0xAEC2F900, - 0xAEC1C600, 0xAEC09300, 0xAEBF6000, - 0xAEBE2D00, 0xAEBCFA00, 0xAEBBC700, - 0xAEBA9400, 0xAEB96100, 0xAEB82E00, - 0xAEB6FB00, 0xAEB5C800, 0xAEB49500, - 0xAEB36200, 0xAEB22F00, 0xAEB0FC00, - 0xAEAFC900, 0xAEAE9600, 0xAEAD6300, - 0xAEAC3000, 0xAEAAFD00, 0xAEA9CA00, - 0xAEA89700, 0xAEA76400, 0xAEA63100, - 0xAEA4FE00, 0xAEA3CB00, 0xAEA29800, - 0xAEA16500, 0xAEA03200, 0xAE9EFF00, - 0xAE9DCC00, 0xAE9C9900, 0xAE9B6600, - 0xAE9A3300, 0xAE990000, 0xAE97CD00, - 0xAE969A00, 0xAE956700, 0xAE943400, - 0xAE930100, 0xAE91CE00, 0xAE909B00, - 0xAE8F6800, 0xAE8E3500, 0xAE8D0200, - 0xAE8BCF00, 0xAE8A9C00, 0xAE896900, - 0xAE883600, 0xAE870300, 0xAE85D000, - 0xAE849D00, 0xAE836A00, 0xAE823700, - 0xAE810400, 0xAE7FD100, 0xAE7E9E00, - 0xAE7D6B00, 0xAE7C3800, 0xAE7B0500, - 0xAE79D200, 0xAE789F00, 0xAE776C00, - 0xAE763900, 0xAE750600, 0xAE73D300, - 0xAE72A000, 0xAE716D00, 0xAE703A00, - 0xAE6F0700, 0xAE6DD400, 0xAE6CA100, - 0xAE6B6E00, 0xAE6A3B00, 0xAE690800, - 0xAE67D500, 0xAE66A200, 0xAE656F00, - 0xAE643C00, 0xAE630900, 0xAE61D600, - 0xAE60A300, 0xAE5F7000, 0xAE5E3D00, - 0xAE5D0A00, 0xAE5BD700, 0xAE5AA400, - 0xAE597100, 0xAE583E00, 0xAE570B00, - 0xAE55D800, 0xAE54A500, 0xAE537200, - 0xAE523F00, 0xAE510C00, 0xAE4FD900, - 0xAE4EA600, 0xAE4D7300, 0xAE4C4000, - 0xAE4B0D00, 0xAE49DA00, 0xAE48A700, - 0xAE477400, 0xAE464100, 0xAE450E00, - 0xAE43DB00, 0xAE42A800, 0xAE417500, - 0xAE404200, 0xAE3F0F00, 0xAE3DDC00, - 0xAE3CA900, 0xAE3B7600, 0xAE3A4300, - 0xAE391000, 0xAE37DD00, 0xAE36AA00, - 0xAE357700, 0xAE344400, 0xAE331100, - 0xAE31DE00, 0xAE30AB00, 0xAE2F7800, - 0xAE2E4500, 0xAE2D1200, 0xAE2BDF00, - 0xAE2AAC00, 0xAE297900, 0xAE284600, - 0xAE271300, 0xAE25E000, 0xAE24AD00, - 0xAE237A00, 0xAE224700, 0xAE211400, - 0xAE1FE100, 0xAE1EAE00, 0xAE1D7B00, - 0xAE1C4800, 0xAE1B1500, 0xAE19E200, - 0xAE18AF00, 0xAE177C00, 0xAE164900, - 0xAE151600, 0xAE13E300, 0xAE12B000, - 0xAE117D00, 0xAE104A00, 0xAE0F1700, - 0xAE0DE400, 0xAE0CB100, 0xAE0B7E00, - 0xAE0A4B00, 0xAE091800, 0xAE07E500, - 0xAE06B200, 0xAE057F00, 0xAE044C00, - 0xAE031900, 0xAE01E600, 0xAE00B300, - 0xADFF8000, 0xADFE4D00, 0xADFD1A00, - 0xADFBE700, 0xADFAB400, 0xADF98100, - 0xADF84E00, 0xADF71B00, 0xADF5E800, - 0xADF4B500, 0xADF38200, 0xADF24F00, - 0xADF11C00, 0xADEFE900, 0xADEEB600, - 0xADED8300, 0xADEC5000, 0xADEB1D00, - 0xADE9EA00, 0xADE8B700, 0xADE78400, - 0xADE65100, 0xADE51E00, 0xADE3EB00, - 0xADE2B800, 0xADE18500, 0xADE05200, - 0xADDF1F00, 0xADDDEC00, 0xADDCB900, - 0xADDB8600, 0xADDA5300, 0xADD92000, - 0xADD7ED00, 0xADD6BA00, 0xADD58700, - 0xADD45400, 0xADD32100, 0xADD1EE00, - 0xADD0BB00, 0xADCF8800, 0xADCE5500, - 0xADCD2200, 0xADCBEF00, 0xADCABC00, - 0xADC98900, 0xADC85600, 0xADC72300, - 0xADC5F000, 0xADC4BD00, 0xADC38A00, - 0xADC25700, 0xADC12400, 0xADBFF100, - 0xADBEBE00, 0xADBD8B00, 0xADBC5800, - 0xADBB2500, 0xADB9F200, 0xADB8BF00, - 0xADB78C00, 0xADB65900, 0xADB52600, - 0xADB3F300, 0xADB2C000, 0xADB18D00, - 0xADB05A00, 0xADAF2700, 0xADADF400, - 0xADACC100, 0xADAB8E00, 0xADAA5B00, - 0xADA92800, 0xADA7F500, 0xADA6C200, - 0xADA58F00, 0xADA45C00, 0xADA32900, - 0xADA1F600, 0xADA0C300, 0xAD9F9000, - 0xAD9E5D00, 0xAD9D2A00, 0xAD9BF700, - 0xAD9AC400, 0xAD999100, 0xAD985E00, - 0xAD972B00, 0xAD95F800, 0xAD94C500, - 0xAD939200, 0xAD925F00, 0xAD912C00, - 0xAD8FF900, 0xAD8EC600, 0xAD8D9300, - 0xAD8C6000, 0xAD8B2D00, 0xAD89FA00, - 0xAD88C700, 0xAD879400, 0xAD866100, - 0xAD852E00, 0xAD83FB00, 0xAD82C800, - 0xAD819500, 0xAD806200, 0xAD7F2F00, - 0xAD7DFC00, 0xAD7CC900, 0xAD7B9600, - 0xAD7A6300, 0xAD793000, 0xAD77FD00, - 0xAD76CA00, 0xAD759700, 0xAD746400, - 0xAD733100, 0xAD71FE00, 0xAD70CB00, - 0xAD6F9800, 0xAD6E6500, 0xAD6D3200, - 0xAD6BFF00, 0xAD6ACC00, 0xAD699900, - 0xAD686600, 0xAD673300, 0xAD660000, - 0xAD64CD00, 0xAD639A00, 0xAD626700, - 0xAD613400, 0xAD600100, 0xAD5ECE00, - 0xAD5D9B00, 0xAD5C6800, 0xAD5B3500, - 0xAD5A0200, 0xAD58CF00, 0xAD579C00, - 0xAD566900, 0xAD553600, 0xAD540300, - 0xAD52D000, 0xAD519D00, 0xAD506A00, - 0xAD4F3700, 0xAD4E0400, 0xAD4CD100, - 0xAD4B9E00, 0xAD4A6B00, 0xAD493800, - 0xAD480500, 0xAD46D200, 0xAD459F00, - 0xAD446C00, 0xAD433900, 0xAD420600, - 0xAD40D300, 0xAD3FA000, 0xAD3E6D00, - 0xAD3D3A00, 0xAD3C0700, 0xAD3AD400, - 0xAD39A100, 0xAD386E00, 0xAD373B00, - 0xAD360800, 0xAD34D500, 0xAD33A200, - 0xAD326F00, 0xAD313C00, 0xAD300900, - 0xAD2ED600, 0xAD2DA300, 0xAD2C7000, - 0xAD2B3D00, 0xAD2A0A00, 0xAD28D700, - 0xAD27A400, 0xAD267100, 0xAD253E00, - 0xAD240B00, 0xAD22D800, 0xAD21A500, - 0xAD207200, 0xAD1F3F00, 0xAD1E0C00, - 0xAD1CD900, 0xAD1BA600, 0xAD1A7300, - 0xAD194000, 0xAD180D00, 0xAD16DA00, - 0xAD15A700, 0xAD147400, 0xAD134100, - 0xAD120E00, 0xAD10DB00, 0xAD0FA800, - 0xAD0E7500, 0xAD0D4200, 0xAD0C0F00, - 0xAD0ADC00, 0xAD09A900, 0xAD087600, - 0xAD074300, 0xAD061000, 0xAD04DD00, - 0xAD03AA00, 0xAD027700, 0xAD014400, - 0xAD001100, 0xACFEDE00, 0xACFDAB00, - 0xACFC7800, 0xACFB4500, 0xACFA1200, - 0xACF8DF00, 0xACF7AC00, 0xACF67900, - 0xACF54600, 0xACF41300, 0xACF2E000, - 0xACF1AD00, 0xACF07A00, 0xACEF4700, - 0xACEE1400, 0xACECE100, 0xACEBAE00, - 0xACEA7B00, 0xACE94800, 0xACE81500, - 0xACE6E200, 0xACE5AF00, 0xACE47C00, - 0xACE34900, 0xACE21600, 0xACE0E300, - 0xACDFB000, 0xACDE7D00, 0xACDD4A00, - 0xACDC1700, 0xACDAE400, 0xACD9B100, - 0xACD87E00, 0xACD74B00, 0xACD61800, - 0xACD4E500, 0xACD3B200, 0xACD27F00, - 0xACD14C00, 0xACD01900, 0xACCEE600, - 0xACCDB300, 0xACCC8000, 0xACCB4D00, - 0xACCA1A00, 0xACC8E700, 0xACC7B400, - 0xACC68100, 0xACC54E00, 0xACC41B00, - 0xACC2E800, 0xACC1B500, 0xACC08200, - 0xACBF4F00, 0xACBE1C00, 0xACBCE900, - 0xACBBB600, 0xACBA8300, 0xACB95000, - 0xACB81D00, 0xACB6EA00, 0xACB5B700, - 0xACB48400, 0xACB35100, 0xACB21E00, - 0xACB0EB00, 0xACAFB800, 0xACAE8500, - 0xACAD5200, 0xACAC1F00, 0xACAAEC00, - 0xACA9B900, 0xACA88600, 0xACA75300, - 0xACA62000, 0xACA4ED00, 0xACA3BA00, - 0xACA28700, 0xACA15400, 0xACA02100, - 0xAC9EEE00, 0xAC9DBB00, 0xAC9C8800, - 0xAC9B5500, 0xAC9A2200, 0xAC98EF00, - 0xAC97BC00, 0xAC968900, 0xAC955600, - 0xAC942300, 0xAC92F000, 0xAC91BD00, - 0xAC908A00, 0xAC8F5700, 0xAC8E2400, - 0xAC8CF100, 0xAC8BBE00, 0xAC8A8B00, - 0xAC895800, 0xAC882500, 0xAC86F200, - 0xAC85BF00, 0xAC848C00, 0xAC835900, - 0xAC822600, 0xAC80F300, 0xAC7FC000, - 0xAC7E8D00, 0xAC7D5A00, 0xAC7C2700, - 0xAC7AF400, 0xAC79C100, 0xAC788E00, - 0xAC775B00, 0xAC762800, 0xAC74F500, - 0xAC73C200, 0xAC728F00, 0xAC715C00, - 0xAC702900, 0xAC6EF600, 0xAC6DC300, - 0xAC6C9000, 0xAC6B5D00, 0xAC6A2A00, - 0xAC68F700, 0xAC67C400, 0xAC669100, - 0xAC655E00, 0xAC642B00, 0xAC62F800, - 0xAC61C500, 0xAC609200, 0xAC5F5F00, - 0xAC5E2C00, 0xAC5CF900, 0xAC5BC600, - 0xAC5A9300, 0xAC596000, 0xAC582D00, - 0xAC56FA00, 0xAC55C700, 0xAC549400, - 0xAC536100, 0xAC522E00, 0xAC50FB00, - 0xAC4FC800, 0xAC4E9500, 0xAC4D6200, - 0xAC4C2F00, 0xAC4AFC00, 0xAC49C900, - 0xAC489600, 0xAC476300, 0xAC463000, - 0xAC44FD00, 0xAC43CA00, 0xAC429700, - 0xAC416400, 0xAC403100, 0xAC3EFE00, - 0xAC3DCB00, 0xAC3C9800, 0xAC3B6500, - 0xAC3A3200, 0xAC38FF00, 0xAC37CC00, - 0xAC369900, 0xAC356600, 0xAC343300, - 0xAC330000, 0xAC31CD00, 0xAC309A00, - 0xAC2F6700, 0xAC2E3400, 0xAC2D0100, - 0xAC2BCE00, 0xAC2A9B00, 0xAC296800, - 0xAC283500, 0xAC270200, 0xAC25CF00, - 0xAC249C00, 0xAC236900, 0xAC223600, - 0xAC210300, 0xAC1FD000, 0xAC1E9D00, - 0xAC1D6A00, 0xAC1C3700, 0xAC1B0400, - 0xAC19D100, 0xAC189E00, 0xAC176B00, - 0xAC163800, 0xAC150500, 0xAC13D200, - 0xAC129F00, 0xAC116C00, 0xAC103900, - 0xAC0F0600, 0xAC0DD300, 0xAC0CA000, - 0xAC0B6D00, 0xAC0A3A00, 0xAC090700, - 0xAC07D400, 0xAC06A100, 0xAC056E00, - 0xAC043B00, 0xAC030800, 0xAC01D500, - 0xAC00A200, 0xABFF6F00, 0xABFE3C00, - 0xABFD0900, 0xABFBD600, 0xABFAA300, - 0xABF97000, 0xABF83D00, 0xABF70A00, - 0xABF5D700, 0xABF4A400, 0xABF37100, - 0xABF23E00, 0xABF10B00, 0xABEFD800, - 0xABEEA500, 0xABED7200, 0xABEC3F00, - 0xABEB0C00, 0xABE9D900, 0xABE8A600, - 0xABE77300, 0xABE64000, 0xABE50D00, - 0xABE3DA00, 0xABE2A700, 0xABE17400, - 0xABE04100, 0xABDF0E00, 0xABDDDB00, - 0xABDCA800, 0xABDB7500, 0xABDA4200, - 0xABD90F00, 0xABD7DC00, 0xABD6A900, - 0xABD57600, 0xABD44300, 0xABD31000, - 0xABD1DD00, 0xABD0AA00, 0xABCF7700, - 0xABCE4400, 0xABCD1100, 0xABCBDE00, - 0xABCAAB00, 0xABC97800, 0xABC84500, - 0xABC71200, 0xABC5DF00, 0xABC4AC00, - 0xABC37900, 0xABC24600, 0xABC11300, - 0xABBFE000, 0xABBEAD00, 0xABBD7A00, - 0xABBC4700, 0xABBB1400, 0xABB9E100, - 0xABB8AE00, 0xABB77B00, 0xABB64800, - 0xABB51500, 0xABB3E200, 0xABB2AF00, - 0xABB17C00, 0xABB04900, 0xABAF1600, - 0xABADE300, 0xABACB000, 0xABAB7D00, - 0xABAA4A00, 0xABA91700, 0xABA7E400, - 0xABA6B100, 0xABA57E00, 0xABA44B00, - 0xABA31800, 0xABA1E500, 0xABA0B200, - 0xAB9F7F00, 0xAB9E4C00, 0xAB9D1900, - 0xAB9BE600, 0xAB9AB300, 0xAB998000, - 0xAB984D00, 0xAB971A00, 0xAB95E700, - 0xAB94B400, 0xAB938100, 0xAB924E00, - 0xAB911B00, 0xAB8FE800, 0xAB8EB500, - 0xAB8D8200, 0xAB8C4F00, 0xAB8B1C00, - 0xAB89E900, 0xAB88B600, 0xAB878300, - 0xAB865000, 0xAB851D00, 0xAB83EA00, - 0xAB82B700, 0xAB818400, 0xAB805100, - 0xAB7F1E00, 0xAB7DEB00, 0xAB7CB800, - 0xAB7B8500, 0xAB7A5200, 0xAB791F00, - 0xAB77EC00, 0xAB76B900, 0xAB758600, - 0xAB745300, 0xAB732000, 0xAB71ED00, - 0xAB70BA00, 0xAB6F8700, 0xAB6E5400, - 0xAB6D2100, 0xAB6BEE00, 0xAB6ABB00, - 0xAB698800, 0xAB685500, 0xAB672200, - 0xAB65EF00, 0xAB64BC00, 0xAB638900, - 0xAB625600, 0xAB612300, 0xAB5FF000, - 0xAB5EBD00, 0xAB5D8A00, 0xAB5C5700, - 0xAB5B2400, 0xAB59F100, 0xAB58BE00, - 0xAB578B00, 0xAB565800, 0xAB552500, - 0xAB53F200, 0xAB52BF00, 0xAB518C00, - 0xAB505900, 0xAB4F2600, 0xAB4DF300, - 0xAB4CC000, 0xAB4B8D00, 0xAB4A5A00, - 0xAB492700, 0xAB47F400, 0xAB46C100, - 0xAB458E00, 0xAB445B00, 0xAB432800, - 0xAB41F500, 0xAB40C200, 0xAB3F8F00, - 0xAB3E5C00, 0xAB3D2900, 0xAB3BF600, - 0xAB3AC300, 0xAB399000, 0xAB385D00, - 0xAB372A00, 0xAB35F700, 0xAB34C400, - 0xAB339100, 0xAB325E00, 0xAB312B00, - 0xAB2FF800, 0xAB2EC500, 0xAB2D9200, - 0xAB2C5F00, 0xAB2B2C00, 0xAB29F900, - 0xAB28C600, 0xAB279300, 0xAB266000, - 0xAB252D00, 0xAB23FA00, 0xAB22C700, - 0xAB219400, 0xAB206100, 0xAB1F2E00, - 0xAB1DFB00, 0xAB1CC800, 0xAB1B9500, - 0xAB1A6200, 0xAB192F00, 0xAB17FC00, - 0xAB16C900, 0xAB159600, 0xAB146300, - 0xAB133000, 0xAB11FD00, 0xAB10CA00, - 0xAB0F9700, 0xAB0E6400, 0xAB0D3100, - 0xAB0BFE00, 0xAB0ACB00, 0xAB099800, - 0xAB086500, 0xAB073200, 0xAB05FF00, - 0xAB04CC00, 0xAB039900, 0xAB026600, - 0xAB013300, 0xAB000000, 0xAAFEE080, - 0xAAFDC100, 0xAAFCA180, 0xAAFB8200, - 0xAAFA6280, 0xAAF94300, 0xAAF82380, - 0xAAF70400, 0xAAF5E480, 0xAAF4C500, - 0xAAF3A580, 0xAAF28600, 0xAAF16680, - 0xAAF04700, 0xAAEF2780, 0xAAEE0800, - 0xAAECE880, 0xAAEBC900, 0xAAEAA980, - 0xAAE98A00, 0xAAE86A80, 0xAAE74B00, - 0xAAE62B80, 0xAAE50C00, 0xAAE3EC80, - 0xAAE2CD00, 0xAAE1AD80, 0xAAE08E00, - 0xAADF6E80, 0xAADE4F00, 0xAADD2F80, - 0xAADC1000, 0xAADAF080, 0xAAD9D100, - 0xAAD8B180, 0xAAD79200, 0xAAD67280, - 0xAAD55300, 0xAAD43380, 0xAAD31400, - 0xAAD1F480, 0xAAD0D500, 0xAACFB580, - 0xAACE9600, 0xAACD7680, 0xAACC5700, - 0xAACB3780, 0xAACA1800, 0xAAC8F880, - 0xAAC7D900, 0xAAC6B980, 0xAAC59A00, - 0xAAC47A80, 0xAAC35B00, 0xAAC23B80, - 0xAAC11C00, 0xAABFFC80, 0xAABEDD00, - 0xAABDBD80, 0xAABC9E00, 0xAABB7E80, - 0xAABA5F00, 0xAAB93F80, 0xAAB82000, - 0xAAB70080, 0xAAB5E100, 0xAAB4C180, - 0xAAB3A200, 0xAAB28280, 0xAAB16300, - 0xAAB04380, 0xAAAF2400, 0xAAAE0480, - 0xAAACE500, 0xAAABC580, 0xAAAAA600, - 0xAAA98680, 0xAAA86700, 0xAAA74780, - 0xAAA62800, 0xAAA50880, 0xAAA3E900, - 0xAAA2C980, 0xAAA1AA00, 0xAAA08A80, - 0xAA9F6B00, 0xAA9E4B80, 0xAA9D2C00, - 0xAA9C0C80, 0xAA9AED00, 0xAA99CD80, - 0xAA98AE00, 0xAA978E80, 0xAA966F00, - 0xAA954F80, 0xAA943000, 0xAA931080, - 0xAA91F100, 0xAA90D180, 0xAA8FB200, - 0xAA8E9280, 0xAA8D7300, 0xAA8C5380, - 0xAA8B3400, 0xAA8A1480, 0xAA88F500, - 0xAA87D580, 0xAA86B600, 0xAA859680, - 0xAA847700, 0xAA835780, 0xAA823800, - 0xAA811880, 0xAA7FF900, 0xAA7ED980, - 0xAA7DBA00, 0xAA7C9A80, 0xAA7B7B00, - 0xAA7A5B80, 0xAA793C00, 0xAA781C80, - 0xAA76FD00, 0xAA75DD80, 0xAA74BE00, - 0xAA739E80, 0xAA727F00, 0xAA715F80, - 0xAA704000, 0xAA6F2080, 0xAA6E0100, - 0xAA6CE180, 0xAA6BC200, 0xAA6AA280, - 0xAA698300, 0xAA686380, 0xAA674400, - 0xAA662480, 0xAA650500, 0xAA63E580, - 0xAA62C600, 0xAA61A680, 0xAA608700, - 0xAA5F6780, 0xAA5E4800, 0xAA5D2880, - 0xAA5C0900, 0xAA5AE980, 0xAA59CA00, - 0xAA58AA80, 0xAA578B00, 0xAA566B80, - 0xAA554C00, 0xAA542C80, 0xAA530D00, - 0xAA51ED80, 0xAA50CE00, 0xAA4FAE80, - 0xAA4E8F00, 0xAA4D6F80, 0xAA4C5000, - 0xAA4B3080, 0xAA4A1100, 0xAA48F180, - 0xAA47D200, 0xAA46B280, 0xAA459300, - 0xAA447380, 0xAA435400, 0xAA423480, - 0xAA411500, 0xAA3FF580, 0xAA3ED600, - 0xAA3DB680, 0xAA3C9700, 0xAA3B7780, - 0xAA3A5800, 0xAA393880, 0xAA381900, - 0xAA36F980, 0xAA35DA00, 0xAA34BA80, - 0xAA339B00, 0xAA327B80, 0xAA315C00, - 0xAA303C80, 0xAA2F1D00, 0xAA2DFD80, - 0xAA2CDE00, 0xAA2BBE80, 0xAA2A9F00, - 0xAA297F80, 0xAA286000, 0xAA274080, - 0xAA262100, 0xAA250180, 0xAA23E200, - 0xAA22C280, 0xAA21A300, 0xAA208380, - 0xAA1F6400, 0xAA1E4480, 0xAA1D2500, - 0xAA1C0580, 0xAA1AE600, 0xAA19C680, - 0xAA18A700, 0xAA178780, 0xAA166800, - 0xAA154880, 0xAA142900, 0xAA130980, - 0xAA11EA00, 0xAA10CA80, 0xAA0FAB00, - 0xAA0E8B80, 0xAA0D6C00, 0xAA0C4C80, - 0xAA0B2D00, 0xAA0A0D80, 0xAA08EE00, - 0xAA07CE80, 0xAA06AF00, 0xAA058F80, - 0xAA047000, 0xAA035080, 0xAA023100, - 0xAA011180, 0xA9FFF200, 0xA9FED280, - 0xA9FDB300, 0xA9FC9380, 0xA9FB7400, - 0xA9FA5480, 0xA9F93500, 0xA9F81580, - 0xA9F6F600, 0xA9F5D680, 0xA9F4B700, - 0xA9F39780, 0xA9F27800, 0xA9F15880, - 0xA9F03900, 0xA9EF1980, 0xA9EDFA00, - 0xA9ECDA80, 0xA9EBBB00, 0xA9EA9B80, - 0xA9E97C00, 0xA9E85C80, 0xA9E73D00, - 0xA9E61D80, 0xA9E4FE00, 0xA9E3DE80, - 0xA9E2BF00, 0xA9E19F80, 0xA9E08000, - 0xA9DF6080, 0xA9DE4100, 0xA9DD2180, - 0xA9DC0200, 0xA9DAE280, 0xA9D9C300, - 0xA9D8A380, 0xA9D78400, 0xA9D66480, - 0xA9D54500, 0xA9D42580, 0xA9D30600, - 0xA9D1E680, 0xA9D0C700, 0xA9CFA780, - 0xA9CE8800, 0xA9CD6880, 0xA9CC4900, - 0xA9CB2980, 0xA9CA0A00, 0xA9C8EA80, - 0xA9C7CB00, 0xA9C6AB80, 0xA9C58C00, - 0xA9C46C80, 0xA9C34D00, 0xA9C22D80, - 0xA9C10E00, 0xA9BFEE80, 0xA9BECF00, - 0xA9BDAF80, 0xA9BC9000, 0xA9BB7080, - 0xA9BA5100, 0xA9B93180, 0xA9B81200, - 0xA9B6F280, 0xA9B5D300, 0xA9B4B380, - 0xA9B39400, 0xA9B27480, 0xA9B15500, - 0xA9B03580, 0xA9AF1600, 0xA9ADF680, - 0xA9ACD700, 0xA9ABB780, 0xA9AA9800, - 0xA9A97880, 0xA9A85900, 0xA9A73980, - 0xA9A61A00, 0xA9A4FA80, 0xA9A3DB00, - 0xA9A2BB80, 0xA9A19C00, 0xA9A07C80, - 0xA99F5D00, 0xA99E3D80, 0xA99D1E00, - 0xA99BFE80, 0xA99ADF00, 0xA999BF80, - 0xA998A000, 0xA9978080, 0xA9966100, - 0xA9954180, 0xA9942200, 0xA9930280, - 0xA991E300, 0xA990C380, 0xA98FA400, - 0xA98E8480, 0xA98D6500, 0xA98C4580, - 0xA98B2600, 0xA98A0680, 0xA988E700, - 0xA987C780, 0xA986A800, 0xA9858880, - 0xA9846900, 0xA9834980, 0xA9822A00, - 0xA9810A80, 0xA97FEB00, 0xA97ECB80, - 0xA97DAC00, 0xA97C8C80, 0xA97B6D00, - 0xA97A4D80, 0xA9792E00, 0xA9780E80, - 0xA976EF00, 0xA975CF80, 0xA974B000, - 0xA9739080, 0xA9727100, 0xA9715180, - 0xA9703200, 0xA96F1280, 0xA96DF300, - 0xA96CD380, 0xA96BB400, 0xA96A9480, - 0xA9697500, 0xA9685580, 0xA9673600, - 0xA9661680, 0xA964F700, 0xA963D780, - 0xA962B800, 0xA9619880, 0xA9607900, - 0xA95F5980, 0xA95E3A00, 0xA95D1A80, - 0xA95BFB00, 0xA95ADB80, 0xA959BC00, - 0xA9589C80, 0xA9577D00, 0xA9565D80, - 0xA9553E00, 0xA9541E80, 0xA952FF00, - 0xA951DF80, 0xA950C000, 0xA94FA080, - 0xA94E8100, 0xA94D6180, 0xA94C4200, - 0xA94B2280, 0xA94A0300, 0xA948E380, - 0xA947C400, 0xA946A480, 0xA9458500, - 0xA9446580, 0xA9434600, 0xA9422680, - 0xA9410700, 0xA93FE780, 0xA93EC800, - 0xA93DA880, 0xA93C8900, 0xA93B6980, - 0xA93A4A00, 0xA9392A80, 0xA9380B00, - 0xA936EB80, 0xA935CC00, 0xA934AC80, - 0xA9338D00, 0xA9326D80, 0xA9314E00, - 0xA9302E80, 0xA92F0F00, 0xA92DEF80, - 0xA92CD000, 0xA92BB080, 0xA92A9100, - 0xA9297180, 0xA9285200, 0xA9273280, - 0xA9261300, 0xA924F380, 0xA923D400, - 0xA922B480, 0xA9219500, 0xA9207580, - 0xA91F5600, 0xA91E3680, 0xA91D1700, - 0xA91BF780, 0xA91AD800, 0xA919B880, - 0xA9189900, 0xA9177980, 0xA9165A00, - 0xA9153A80, 0xA9141B00, 0xA912FB80, - 0xA911DC00, 0xA910BC80, 0xA90F9D00, - 0xA90E7D80, 0xA90D5E00, 0xA90C3E80, - 0xA90B1F00, 0xA909FF80, 0xA908E000, - 0xA907C080, 0xA906A100, 0xA9058180, - 0xA9046200, 0xA9034280, 0xA9022300, - 0xA9010380, 0xA8FFE400, 0xA8FEC480, - 0xA8FDA500, 0xA8FC8580, 0xA8FB6600, - 0xA8FA4680, 0xA8F92700, 0xA8F80780, - 0xA8F6E800, 0xA8F5C880, 0xA8F4A900, - 0xA8F38980, 0xA8F26A00, 0xA8F14A80, - 0xA8F02B00, 0xA8EF0B80, 0xA8EDEC00, - 0xA8ECCC80, 0xA8EBAD00, 0xA8EA8D80, - 0xA8E96E00, 0xA8E84E80, 0xA8E72F00, - 0xA8E60F80, 0xA8E4F000, 0xA8E3D080, - 0xA8E2B100, 0xA8E19180, 0xA8E07200, - 0xA8DF5280, 0xA8DE3300, 0xA8DD1380, - 0xA8DBF400, 0xA8DAD480, 0xA8D9B500, - 0xA8D89580, 0xA8D77600, 0xA8D65680, - 0xA8D53700, 0xA8D41780, 0xA8D2F800, - 0xA8D1D880, 0xA8D0B900, 0xA8CF9980, - 0xA8CE7A00, 0xA8CD5A80, 0xA8CC3B00, - 0xA8CB1B80, 0xA8C9FC00, 0xA8C8DC80, - 0xA8C7BD00, 0xA8C69D80, 0xA8C57E00, - 0xA8C45E80, 0xA8C33F00, 0xA8C21F80, - 0xA8C10000, 0xA8BFE080, 0xA8BEC100, - 0xA8BDA180, 0xA8BC8200, 0xA8BB6280, - 0xA8BA4300, 0xA8B92380, 0xA8B80400, - 0xA8B6E480, 0xA8B5C500, 0xA8B4A580, - 0xA8B38600, 0xA8B26680, 0xA8B14700, - 0xA8B02780, 0xA8AF0800, 0xA8ADE880, - 0xA8ACC900, 0xA8ABA980, 0xA8AA8A00, - 0xA8A96A80, 0xA8A84B00, 0xA8A72B80, - 0xA8A60C00, 0xA8A4EC80, 0xA8A3CD00, - 0xA8A2AD80, 0xA8A18E00, 0xA8A06E80, - 0xA89F4F00, 0xA89E2F80, 0xA89D1000, - 0xA89BF080, 0xA89AD100, 0xA899B180, - 0xA8989200, 0xA8977280, 0xA8965300, - 0xA8953380, 0xA8941400, 0xA892F480, - 0xA891D500, 0xA890B580, 0xA88F9600, - 0xA88E7680, 0xA88D5700, 0xA88C3780, - 0xA88B1800, 0xA889F880, 0xA888D900, - 0xA887B980, 0xA8869A00, 0xA8857A80, - 0xA8845B00, 0xA8833B80, 0xA8821C00, - 0xA880FC80, 0xA87FDD00, 0xA87EBD80, - 0xA87D9E00, 0xA87C7E80, 0xA87B5F00, - 0xA87A3F80, 0xA8792000, 0xA8780080, - 0xA876E100, 0xA875C180, 0xA874A200, - 0xA8738280, 0xA8726300, 0xA8714380, - 0xA8702400, 0xA86F0480, 0xA86DE500, - 0xA86CC580, 0xA86BA600, 0xA86A8680, - 0xA8696700, 0xA8684780, 0xA8672800, - 0xA8660880, 0xA864E900, 0xA863C980, - 0xA862AA00, 0xA8618A80, 0xA8606B00, - 0xA85F4B80, 0xA85E2C00, 0xA85D0C80, - 0xA85BED00, 0xA85ACD80, 0xA859AE00, - 0xA8588E80, 0xA8576F00, 0xA8564F80, - 0xA8553000, 0xA8541080, 0xA852F100, - 0xA851D180, 0xA850B200, 0xA84F9280, - 0xA84E7300, 0xA84D5380, 0xA84C3400, - 0xA84B1480, 0xA849F500, 0xA848D580, - 0xA847B600, 0xA8469680, 0xA8457700, - 0xA8445780, 0xA8433800, 0xA8421880, - 0xA840F900, 0xA83FD980, 0xA83EBA00, - 0xA83D9A80, 0xA83C7B00, 0xA83B5B80, - 0xA83A3C00, 0xA8391C80, 0xA837FD00, - 0xA836DD80, 0xA835BE00, 0xA8349E80, - 0xA8337F00, 0xA8325F80, 0xA8314000, - 0xA8302080, 0xA82F0100, 0xA82DE180, - 0xA82CC200, 0xA82BA280, 0xA82A8300, - 0xA8296380, 0xA8284400, 0xA8272480, - 0xA8260500, 0xA824E580, 0xA823C600, - 0xA822A680, 0xA8218700, 0xA8206780, - 0xA81F4800, 0xA81E2880, 0xA81D0900, - 0xA81BE980, 0xA81ACA00, 0xA819AA80, - 0xA8188B00, 0xA8176B80, 0xA8164C00, - 0xA8152C80, 0xA8140D00, 0xA812ED80, - 0xA811CE00, 0xA810AE80, 0xA80F8F00, - 0xA80E6F80, 0xA80D5000, 0xA80C3080, - 0xA80B1100, 0xA809F180, 0xA808D200, - 0xA807B280, 0xA8069300, 0xA8057380, - 0xA8045400, 0xA8033480, 0xA8021500, - 0xA800F580, 0xA7FFD600, 0xA7FEB680, - 0xA7FD9700, 0xA7FC7780, 0xA7FB5800, - 0xA7FA3880, 0xA7F91900, 0xA7F7F980, - 0xA7F6DA00, 0xA7F5BA80, 0xA7F49B00, - 0xA7F37B80, 0xA7F25C00, 0xA7F13C80, - 0xA7F01D00, 0xA7EEFD80, 0xA7EDDE00, - 0xA7ECBE80, 0xA7EB9F00, 0xA7EA7F80, - 0xA7E96000, 0xA7E84080, 0xA7E72100, - 0xA7E60180, 0xA7E4E200, 0xA7E3C280, - 0xA7E2A300, 0xA7E18380, 0xA7E06400, - 0xA7DF4480, 0xA7DE2500, 0xA7DD0580, - 0xA7DBE600, 0xA7DAC680, 0xA7D9A700, - 0xA7D88780, 0xA7D76800, 0xA7D64880, - 0xA7D52900, 0xA7D40980, 0xA7D2EA00, - 0xA7D1CA80, 0xA7D0AB00, 0xA7CF8B80, - 0xA7CE6C00, 0xA7CD4C80, 0xA7CC2D00, - 0xA7CB0D80, 0xA7C9EE00, 0xA7C8CE80, - 0xA7C7AF00, 0xA7C68F80, 0xA7C57000, - 0xA7C45080, 0xA7C33100, 0xA7C21180, - 0xA7C0F200, 0xA7BFD280, 0xA7BEB300, - 0xA7BD9380, 0xA7BC7400, 0xA7BB5480, - 0xA7BA3500, 0xA7B91580, 0xA7B7F600, - 0xA7B6D680, 0xA7B5B700, 0xA7B49780, - 0xA7B37800, 0xA7B25880, 0xA7B13900, - 0xA7B01980, 0xA7AEFA00, 0xA7ADDA80, - 0xA7ACBB00, 0xA7AB9B80, 0xA7AA7C00, - 0xA7A95C80, 0xA7A83D00, 0xA7A71D80, - 0xA7A5FE00, 0xA7A4DE80, 0xA7A3BF00, - 0xA7A29F80, 0xA7A18000, 0xA7A06080, - 0xA79F4100, 0xA79E2180, 0xA79D0200, - 0xA79BE280, 0xA79AC300, 0xA799A380, - 0xA7988400, 0xA7976480, 0xA7964500, - 0xA7952580, 0xA7940600, 0xA792E680, - 0xA791C700, 0xA790A780, 0xA78F8800, - 0xA78E6880, 0xA78D4900, 0xA78C2980, - 0xA78B0A00, 0xA789EA80, 0xA788CB00, - 0xA787AB80, 0xA7868C00, 0xA7856C80, - 0xA7844D00, 0xA7832D80, 0xA7820E00, - 0xA780EE80, 0xA77FCF00, 0xA77EAF80, - 0xA77D9000, 0xA77C7080, 0xA77B5100, - 0xA77A3180, 0xA7791200, 0xA777F280, - 0xA776D300, 0xA775B380, 0xA7749400, - 0xA7737480, 0xA7725500, 0xA7713580, - 0xA7701600, 0xA76EF680, 0xA76DD700, - 0xA76CB780, 0xA76B9800, 0xA76A7880, - 0xA7695900, 0xA7683980, 0xA7671A00, - 0xA765FA80, 0xA764DB00, 0xA763BB80, - 0xA7629C00, 0xA7617C80, 0xA7605D00, - 0xA75F3D80, 0xA75E1E00, 0xA75CFE80, - 0xA75BDF00, 0xA75ABF80, 0xA759A000, - 0xA7588080, 0xA7576100, 0xA7564180, - 0xA7552200, 0xA7540280, 0xA752E300, - 0xA751C380, 0xA750A400, 0xA74F8480, - 0xA74E6500, 0xA74D4580, 0xA74C2600, - 0xA74B0680, 0xA749E700, 0xA748C780, - 0xA747A800, 0xA7468880, 0xA7456900, - 0xA7444980, 0xA7432A00, 0xA7420A80, - 0xA740EB00, 0xA73FCB80, 0xA73EAC00, - 0xA73D8C80, 0xA73C6D00, 0xA73B4D80, - 0xA73A2E00, 0xA7390E80, 0xA737EF00, - 0xA736CF80, 0xA735B000, 0xA7349080, - 0xA7337100, 0xA7325180, 0xA7313200, - 0xA7301280, 0xA72EF300, 0xA72DD380, - 0xA72CB400, 0xA72B9480, 0xA72A7500, - 0xA7295580, 0xA7283600, 0xA7271680, - 0xA725F700, 0xA724D780, 0xA723B800, - 0xA7229880, 0xA7217900, 0xA7205980, - 0xA71F3A00, 0xA71E1A80, 0xA71CFB00, - 0xA71BDB80, 0xA71ABC00, 0xA7199C80, - 0xA7187D00, 0xA7175D80, 0xA7163E00, - 0xA7151E80, 0xA713FF00, 0xA712DF80, - 0xA711C000, 0xA710A080, 0xA70F8100, - 0xA70E6180, 0xA70D4200, 0xA70C2280, - 0xA70B0300, 0xA709E380, 0xA708C400, - 0xA707A480, 0xA7068500, 0xA7056580, - 0xA7044600, 0xA7032680, 0xA7020700, - 0xA700E780, 0xA6FFC800, 0xA6FEA880, - 0xA6FD8900, 0xA6FC6980, 0xA6FB4A00, - 0xA6FA2A80, 0xA6F90B00, 0xA6F7EB80, - 0xA6F6CC00, 0xA6F5AC80, 0xA6F48D00, - 0xA6F36D80, 0xA6F24E00, 0xA6F12E80, - 0xA6F00F00, 0xA6EEEF80, 0xA6EDD000, - 0xA6ECB080, 0xA6EB9100, 0xA6EA7180, - 0xA6E95200, 0xA6E83280, 0xA6E71300, - 0xA6E5F380, 0xA6E4D400, 0xA6E3B480, - 0xA6E29500, 0xA6E17580, 0xA6E05600, - 0xA6DF3680, 0xA6DE1700, 0xA6DCF780, - 0xA6DBD800, 0xA6DAB880, 0xA6D99900, - 0xA6D87980, 0xA6D75A00, 0xA6D63A80, - 0xA6D51B00, 0xA6D3FB80, 0xA6D2DC00, - 0xA6D1BC80, 0xA6D09D00, 0xA6CF7D80, - 0xA6CE5E00, 0xA6CD3E80, 0xA6CC1F00, - 0xA6CAFF80, 0xA6C9E000, 0xA6C8C080, - 0xA6C7A100, 0xA6C68180, 0xA6C56200, - 0xA6C44280, 0xA6C32300, 0xA6C20380, - 0xA6C0E400, 0xA6BFC480, 0xA6BEA500, - 0xA6BD8580, 0xA6BC6600, 0xA6BB4680, - 0xA6BA2700, 0xA6B90780, 0xA6B7E800, - 0xA6B6C880, 0xA6B5A900, 0xA6B48980, - 0xA6B36A00, 0xA6B24A80, 0xA6B12B00, - 0xA6B00B80, 0xA6AEEC00, 0xA6ADCC80, - 0xA6ACAD00, 0xA6AB8D80, 0xA6AA6E00, - 0xA6A94E80, 0xA6A82F00, 0xA6A70F80, - 0xA6A5F000, 0xA6A4D080, 0xA6A3B100, - 0xA6A29180, 0xA6A17200, 0xA6A05280, - 0xA69F3300, 0xA69E1380, 0xA69CF400, - 0xA69BD480, 0xA69AB500, 0xA6999580, - 0xA6987600, 0xA6975680, 0xA6963700, - 0xA6951780, 0xA693F800, 0xA692D880, - 0xA691B900, 0xA6909980, 0xA68F7A00, - 0xA68E5A80, 0xA68D3B00, 0xA68C1B80, - 0xA68AFC00, 0xA689DC80, 0xA688BD00, - 0xA6879D80, 0xA6867E00, 0xA6855E80, - 0xA6843F00, 0xA6831F80, 0xA6820000, - 0xA680E080, 0xA67FC100, 0xA67EA180, - 0xA67D8200, 0xA67C6280, 0xA67B4300, - 0xA67A2380, 0xA6790400, 0xA677E480, - 0xA676C500, 0xA675A580, 0xA6748600, - 0xA6736680, 0xA6724700, 0xA6712780, - 0xA6700800, 0xA66EE880, 0xA66DC900, - 0xA66CA980, 0xA66B8A00, 0xA66A6A80, - 0xA6694B00, 0xA6682B80, 0xA6670C00, - 0xA665EC80, 0xA664CD00, 0xA663AD80, - 0xA6628E00, 0xA6616E80, 0xA6604F00, - 0xA65F2F80, 0xA65E1000, 0xA65CF080, - 0xA65BD100, 0xA65AB180, 0xA6599200, - 0xA6587280, 0xA6575300, 0xA6563380, - 0xA6551400, 0xA653F480, 0xA652D500, - 0xA651B580, 0xA6509600, 0xA64F7680, - 0xA64E5700, 0xA64D3780, 0xA64C1800, - 0xA64AF880, 0xA649D900, 0xA648B980, - 0xA6479A00, 0xA6467A80, 0xA6455B00, - 0xA6443B80, 0xA6431C00, 0xA641FC80, - 0xA640DD00, 0xA63FBD80, 0xA63E9E00, - 0xA63D7E80, 0xA63C5F00, 0xA63B3F80, - 0xA63A2000, 0xA6390080, 0xA637E100, - 0xA636C180, 0xA635A200, 0xA6348280, - 0xA6336300, 0xA6324380, 0xA6312400, - 0xA6300480, 0xA62EE500, 0xA62DC580, - 0xA62CA600, 0xA62B8680, 0xA62A6700, - 0xA6294780, 0xA6282800, 0xA6270880, - 0xA625E900, 0xA624C980, 0xA623AA00, - 0xA6228A80, 0xA6216B00, 0xA6204B80, - 0xA61F2C00, 0xA61E0C80, 0xA61CED00, - 0xA61BCD80, 0xA61AAE00, 0xA6198E80, - 0xA6186F00, 0xA6174F80, 0xA6163000, - 0xA6151080, 0xA613F100, 0xA612D180, - 0xA611B200, 0xA6109280, 0xA60F7300, - 0xA60E5380, 0xA60D3400, 0xA60C1480, - 0xA60AF500, 0xA609D580, 0xA608B600, - 0xA6079680, 0xA6067700, 0xA6055780, - 0xA6043800, 0xA6031880, 0xA601F900, - 0xA600D980, 0xA5FFBA00, 0xA5FE9A80, - 0xA5FD7B00, 0xA5FC5B80, 0xA5FB3C00, - 0xA5FA1C80, 0xA5F8FD00, 0xA5F7DD80, - 0xA5F6BE00, 0xA5F59E80, 0xA5F47F00, - 0xA5F35F80, 0xA5F24000, 0xA5F12080, - 0xA5F00100, 0xA5EEE180, 0xA5EDC200, - 0xA5ECA280, 0xA5EB8300, 0xA5EA6380, - 0xA5E94400, 0xA5E82480, 0xA5E70500, - 0xA5E5E580, 0xA5E4C600, 0xA5E3A680, - 0xA5E28700, 0xA5E16780, 0xA5E04800, - 0xA5DF2880, 0xA5DE0900, 0xA5DCE980, - 0xA5DBCA00, 0xA5DAAA80, 0xA5D98B00, - 0xA5D86B80, 0xA5D74C00, 0xA5D62C80, - 0xA5D50D00, 0xA5D3ED80, 0xA5D2CE00, - 0xA5D1AE80, 0xA5D08F00, 0xA5CF6F80, - 0xA5CE5000, 0xA5CD3080, 0xA5CC1100, - 0xA5CAF180, 0xA5C9D200, 0xA5C8B280, - 0xA5C79300, 0xA5C67380, 0xA5C55400, - 0xA5C43480, 0xA5C31500, 0xA5C1F580, - 0xA5C0D600, 0xA5BFB680, 0xA5BE9700, - 0xA5BD7780, 0xA5BC5800, 0xA5BB3880, - 0xA5BA1900, 0xA5B8F980, 0xA5B7DA00, - 0xA5B6BA80, 0xA5B59B00, 0xA5B47B80, - 0xA5B35C00, 0xA5B23C80, 0xA5B11D00, - 0xA5AFFD80, 0xA5AEDE00, 0xA5ADBE80, - 0xA5AC9F00, 0xA5AB7F80, 0xA5AA6000, - 0xA5A94080, 0xA5A82100, 0xA5A70180, - 0xA5A5E200, 0xA5A4C280, 0xA5A3A300, - 0xA5A28380, 0xA5A16400, 0xA5A04480, - 0xA59F2500, 0xA59E0580, 0xA59CE600, - 0xA59BC680, 0xA59AA700, 0xA5998780, - 0xA5986800, 0xA5974880, 0xA5962900, - 0xA5950980, 0xA593EA00, 0xA592CA80, - 0xA591AB00, 0xA5908B80, 0xA58F6C00, - 0xA58E4C80, 0xA58D2D00, 0xA58C0D80, - 0xA58AEE00, 0xA589CE80, 0xA588AF00, - 0xA5878F80, 0xA5867000, 0xA5855080, - 0xA5843100, 0xA5831180, 0xA581F200, - 0xA580D280, 0xA57FB300, 0xA57E9380, - 0xA57D7400, 0xA57C5480, 0xA57B3500, - 0xA57A1580, 0xA578F600, 0xA577D680, - 0xA576B700, 0xA5759780, 0xA5747800, - 0xA5735880, 0xA5723900, 0xA5711980, - 0xA56FFA00, 0xA56EDA80, 0xA56DBB00, - 0xA56C9B80, 0xA56B7C00, 0xA56A5C80, - 0xA5693D00, 0xA5681D80, 0xA566FE00, - 0xA565DE80, 0xA564BF00, 0xA5639F80, - 0xA5628000, 0xA5616080, 0xA5604100, - 0xA55F2180, 0xA55E0200, 0xA55CE280, - 0xA55BC300, 0xA55AA380, 0xA5598400, - 0xA5586480, 0xA5574500, 0xA5562580, - 0xA5550600, 0xA553E680, 0xA552C700, - 0xA551A780, 0xA5508800, 0xA54F6880, - 0xA54E4900, 0xA54D2980, 0xA54C0A00, - 0xA54AEA80, 0xA549CB00, 0xA548AB80, - 0xA5478C00, 0xA5466C80, 0xA5454D00, - 0xA5442D80, 0xA5430E00, 0xA541EE80, - 0xA540CF00, 0xA53FAF80, 0xA53E9000, - 0xA53D7080, 0xA53C5100, 0xA53B3180, - 0xA53A1200, 0xA538F280, 0xA537D300, - 0xA536B380, 0xA5359400, 0xA5347480, - 0xA5335500, 0xA5323580, 0xA5311600, - 0xA52FF680, 0xA52ED700, 0xA52DB780, - 0xA52C9800, 0xA52B7880, 0xA52A5900, - 0xA5293980, 0xA5281A00, 0xA526FA80, - 0xA525DB00, 0xA524BB80, 0xA5239C00, - 0xA5227C80, 0xA5215D00, 0xA5203D80, - 0xA51F1E00, 0xA51DFE80, 0xA51CDF00, - 0xA51BBF80, 0xA51AA000, 0xA5198080, - 0xA5186100, 0xA5174180, 0xA5162200, - 0xA5150280, 0xA513E300, 0xA512C380, - 0xA511A400, 0xA5108480, 0xA50F6500, - 0xA50E4580, 0xA50D2600, 0xA50C0680, - 0xA50AE700, 0xA509C780, 0xA508A800, - 0xA5078880, 0xA5066900, 0xA5054980, - 0xA5042A00, 0xA5030A80, 0xA501EB00, - 0xA500CB80, 0xA4FFAC00, 0xA4FE8C80, - 0xA4FD6D00, 0xA4FC4D80, 0xA4FB2E00, - 0xA4FA0E80, 0xA4F8EF00, 0xA4F7CF80, - 0xA4F6B000, 0xA4F59080, 0xA4F47100, - 0xA4F35180, 0xA4F23200, 0xA4F11280, - 0xA4EFF300, 0xA4EED380, 0xA4EDB400, - 0xA4EC9480, 0xA4EB7500, 0xA4EA5580, - 0xA4E93600, 0xA4E81680, 0xA4E6F700, - 0xA4E5D780, 0xA4E4B800, 0xA4E39880, - 0xA4E27900, 0xA4E15980, 0xA4E03A00, - 0xA4DF1A80, 0xA4DDFB00, 0xA4DCDB80, - 0xA4DBBC00, 0xA4DA9C80, 0xA4D97D00, - 0xA4D85D80, 0xA4D73E00, 0xA4D61E80, - 0xA4D4FF00, 0xA4D3DF80, 0xA4D2C000, - 0xA4D1A080, 0xA4D08100, 0xA4CF6180, - 0xA4CE4200, 0xA4CD2280, 0xA4CC0300, - 0xA4CAE380, 0xA4C9C400, 0xA4C8A480, - 0xA4C78500, 0xA4C66580, 0xA4C54600, - 0xA4C42680, 0xA4C30700, 0xA4C1E780, - 0xA4C0C800, 0xA4BFA880, 0xA4BE8900, - 0xA4BD6980, 0xA4BC4A00, 0xA4BB2A80, - 0xA4BA0B00, 0xA4B8EB80, 0xA4B7CC00, - 0xA4B6AC80, 0xA4B58D00, 0xA4B46D80, - 0xA4B34E00, 0xA4B22E80, 0xA4B10F00, - 0xA4AFEF80, 0xA4AED000, 0xA4ADB080, - 0xA4AC9100, 0xA4AB7180, 0xA4AA5200, - 0xA4A93280, 0xA4A81300, 0xA4A6F380, - 0xA4A5D400, 0xA4A4B480, 0xA4A39500, - 0xA4A27580, 0xA4A15600, 0xA4A03680, - 0xA49F1700, 0xA49DF780, 0xA49CD800, - 0xA49BB880, 0xA49A9900, 0xA4997980, - 0xA4985A00, 0xA4973A80, 0xA4961B00, - 0xA494FB80, 0xA493DC00, 0xA492BC80, - 0xA4919D00, 0xA4907D80, 0xA48F5E00, - 0xA48E3E80, 0xA48D1F00, 0xA48BFF80, - 0xA48AE000, 0xA489C080, 0xA488A100, - 0xA4878180, 0xA4866200, 0xA4854280, - 0xA4842300, 0xA4830380, 0xA481E400, - 0xA480C480, 0xA47FA500, 0xA47E8580, - 0xA47D6600, 0xA47C4680, 0xA47B2700, - 0xA47A0780, 0xA478E800, 0xA477C880, - 0xA476A900, 0xA4758980, 0xA4746A00, - 0xA4734A80, 0xA4722B00, 0xA4710B80, - 0xA46FEC00, 0xA46ECC80, 0xA46DAD00, - 0xA46C8D80, 0xA46B6E00, 0xA46A4E80, - 0xA4692F00, 0xA4680F80, 0xA466F000, - 0xA465D080, 0xA464B100, 0xA4639180, - 0xA4627200, 0xA4615280, 0xA4603300, - 0xA45F1380, 0xA45DF400, 0xA45CD480, - 0xA45BB500, 0xA45A9580, 0xA4597600, - 0xA4585680, 0xA4573700, 0xA4561780, - 0xA454F800, 0xA453D880, 0xA452B900, - 0xA4519980, 0xA4507A00, 0xA44F5A80, - 0xA44E3B00, 0xA44D1B80, 0xA44BFC00, - 0xA44ADC80, 0xA449BD00, 0xA4489D80, - 0xA4477E00, 0xA4465E80, 0xA4453F00, - 0xA4441F80, 0xA4430000, 0xA441E080, - 0xA440C100, 0xA43FA180, 0xA43E8200, - 0xA43D6280, 0xA43C4300, 0xA43B2380, - 0xA43A0400, 0xA438E480, 0xA437C500, - 0xA436A580, 0xA4358600, 0xA4346680, - 0xA4334700, 0xA4322780, 0xA4310800, - 0xA42FE880, 0xA42EC900, 0xA42DA980, - 0xA42C8A00, 0xA42B6A80, 0xA42A4B00, - 0xA4292B80, 0xA4280C00, 0xA426EC80, - 0xA425CD00, 0xA424AD80, 0xA4238E00, - 0xA4226E80, 0xA4214F00, 0xA4202F80, - 0xA41F1000, 0xA41DF080, 0xA41CD100, - 0xA41BB180, 0xA41A9200, 0xA4197280, - 0xA4185300, 0xA4173380, 0xA4161400, - 0xA414F480, 0xA413D500, 0xA412B580, - 0xA4119600, 0xA4107680, 0xA40F5700, - 0xA40E3780, 0xA40D1800, 0xA40BF880, - 0xA40AD900, 0xA409B980, 0xA4089A00, - 0xA4077A80, 0xA4065B00, 0xA4053B80, - 0xA4041C00, 0xA402FC80, 0xA401DD00, - 0xA400BD80, 0xA3FF9E00, 0xA3FE7E80, - 0xA3FD5F00, 0xA3FC3F80, 0xA3FB2000, - 0xA3FA0080, 0xA3F8E100, 0xA3F7C180, - 0xA3F6A200, 0xA3F58280, 0xA3F46300, - 0xA3F34380, 0xA3F22400, 0xA3F10480, - 0xA3EFE500, 0xA3EEC580, 0xA3EDA600, - 0xA3EC8680, 0xA3EB6700, 0xA3EA4780, - 0xA3E92800, 0xA3E80880, 0xA3E6E900, - 0xA3E5C980, 0xA3E4AA00, 0xA3E38A80, - 0xA3E26B00, 0xA3E14B80, 0xA3E02C00, - 0xA3DF0C80, 0xA3DDED00, 0xA3DCCD80, - 0xA3DBAE00, 0xA3DA8E80, 0xA3D96F00, - 0xA3D84F80, 0xA3D73000, 0xA3D61080, - 0xA3D4F100, 0xA3D3D180, 0xA3D2B200, - 0xA3D19280, 0xA3D07300, 0xA3CF5380, - 0xA3CE3400, 0xA3CD1480, 0xA3CBF500, - 0xA3CAD580, 0xA3C9B600, 0xA3C89680, - 0xA3C77700, 0xA3C65780, 0xA3C53800, - 0xA3C41880, 0xA3C2F900, 0xA3C1D980, - 0xA3C0BA00, 0xA3BF9A80, 0xA3BE7B00, - 0xA3BD5B80, 0xA3BC3C00, 0xA3BB1C80, - 0xA3B9FD00, 0xA3B8DD80, 0xA3B7BE00, - 0xA3B69E80, 0xA3B57F00, 0xA3B45F80, - 0xA3B34000, 0xA3B22080, 0xA3B10100, - 0xA3AFE180, 0xA3AEC200, 0xA3ADA280, - 0xA3AC8300, 0xA3AB6380, 0xA3AA4400, - 0xA3A92480, 0xA3A80500, 0xA3A6E580, - 0xA3A5C600, 0xA3A4A680, 0xA3A38700, - 0xA3A26780, 0xA3A14800, 0xA3A02880, - 0xA39F0900, 0xA39DE980, 0xA39CCA00, - 0xA39BAA80, 0xA39A8B00, 0xA3996B80, - 0xA3984C00, 0xA3972C80, 0xA3960D00, - 0xA394ED80, 0xA393CE00, 0xA392AE80, - 0xA3918F00, 0xA3906F80, 0xA38F5000, - 0xA38E3080, 0xA38D1100, 0xA38BF180, - 0xA38AD200, 0xA389B280, 0xA3889300, - 0xA3877380, 0xA3865400, 0xA3853480, - 0xA3841500, 0xA382F580, 0xA381D600, - 0xA380B680, 0xA37F9700, 0xA37E7780, - 0xA37D5800, 0xA37C3880, 0xA37B1900, - 0xA379F980, 0xA378DA00, 0xA377BA80, - 0xA3769B00, 0xA3757B80, 0xA3745C00, - 0xA3733C80, 0xA3721D00, 0xA370FD80, - 0xA36FDE00, 0xA36EBE80, 0xA36D9F00, - 0xA36C7F80, 0xA36B6000, 0xA36A4080, - 0xA3692100, 0xA3680180, 0xA366E200, - 0xA365C280, 0xA364A300, 0xA3638380, - 0xA3626400, 0xA3614480, 0xA3602500, - 0xA35F0580, 0xA35DE600, 0xA35CC680, - 0xA35BA700, 0xA35A8780, 0xA3596800, - 0xA3584880, 0xA3572900, 0xA3560980, - 0xA354EA00, 0xA353CA80, 0xA352AB00, - 0xA3518B80, 0xA3506C00, 0xA34F4C80, - 0xA34E2D00, 0xA34D0D80, 0xA34BEE00, - 0xA34ACE80, 0xA349AF00, 0xA3488F80, - 0xA3477000, 0xA3465080, 0xA3453100, - 0xA3441180, 0xA342F200, 0xA341D280, - 0xA340B300, 0xA33F9380, 0xA33E7400, - 0xA33D5480, 0xA33C3500, 0xA33B1580, - 0xA339F600, 0xA338D680, 0xA337B700, - 0xA3369780, 0xA3357800, 0xA3345880, - 0xA3333900, 0xA3321980, 0xA330FA00, - 0xA32FDA80, 0xA32EBB00, 0xA32D9B80, - 0xA32C7C00, 0xA32B5C80, 0xA32A3D00, - 0xA3291D80, 0xA327FE00, 0xA326DE80, - 0xA325BF00, 0xA3249F80, 0xA3238000, - 0xA3226080, 0xA3214100, 0xA3202180, - 0xA31F0200, 0xA31DE280, 0xA31CC300, - 0xA31BA380, 0xA31A8400, 0xA3196480, - 0xA3184500, 0xA3172580, 0xA3160600, - 0xA314E680, 0xA313C700, 0xA312A780, - 0xA3118800, 0xA3106880, 0xA30F4900, - 0xA30E2980, 0xA30D0A00, 0xA30BEA80, - 0xA30ACB00, 0xA309AB80, 0xA3088C00, - 0xA3076C80, 0xA3064D00, 0xA3052D80, - 0xA3040E00, 0xA302EE80, 0xA301CF00, - 0xA300AF80, 0xA2FF9000, 0xA2FE7080, - 0xA2FD5100, 0xA2FC3180, 0xA2FB1200, - 0xA2F9F280, 0xA2F8D300, 0xA2F7B380, - 0xA2F69400, 0xA2F57480, 0xA2F45500, - 0xA2F33580, 0xA2F21600, 0xA2F0F680, - 0xA2EFD700, 0xA2EEB780, 0xA2ED9800, - 0xA2EC7880, 0xA2EB5900, 0xA2EA3980, - 0xA2E91A00, 0xA2E7FA80, 0xA2E6DB00, - 0xA2E5BB80, 0xA2E49C00, 0xA2E37C80, - 0xA2E25D00, 0xA2E13D80, 0xA2E01E00, - 0xA2DEFE80, 0xA2DDDF00, 0xA2DCBF80, - 0xA2DBA000, 0xA2DA8080, 0xA2D96100, - 0xA2D84180, 0xA2D72200, 0xA2D60280, - 0xA2D4E300, 0xA2D3C380, 0xA2D2A400, - 0xA2D18480, 0xA2D06500, 0xA2CF4580, - 0xA2CE2600, 0xA2CD0680, 0xA2CBE700, - 0xA2CAC780, 0xA2C9A800, 0xA2C88880, - 0xA2C76900, 0xA2C64980, 0xA2C52A00, - 0xA2C40A80, 0xA2C2EB00, 0xA2C1CB80, - 0xA2C0AC00, 0xA2BF8C80, 0xA2BE6D00, - 0xA2BD4D80, 0xA2BC2E00, 0xA2BB0E80, - 0xA2B9EF00, 0xA2B8CF80, 0xA2B7B000, - 0xA2B69080, 0xA2B57100, 0xA2B45180, - 0xA2B33200, 0xA2B21280, 0xA2B0F300, - 0xA2AFD380, 0xA2AEB400, 0xA2AD9480, - 0xA2AC7500, 0xA2AB5580, 0xA2AA3600, - 0xA2A91680, 0xA2A7F700, 0xA2A6D780, - 0xA2A5B800, 0xA2A49880, 0xA2A37900, - 0xA2A25980, 0xA2A13A00, 0xA2A01A80, - 0xA29EFB00, 0xA29DDB80, 0xA29CBC00, - 0xA29B9C80, 0xA29A7D00, 0xA2995D80, - 0xA2983E00, 0xA2971E80, 0xA295FF00, - 0xA294DF80, 0xA293C000, 0xA292A080, - 0xA2918100, 0xA2906180, 0xA28F4200, - 0xA28E2280, 0xA28D0300, 0xA28BE380, - 0xA28AC400, 0xA289A480, 0xA2888500, - 0xA2876580, 0xA2864600, 0xA2852680, - 0xA2840700, 0xA282E780, 0xA281C800, - 0xA280A880, 0xA27F8900, 0xA27E6980, - 0xA27D4A00, 0xA27C2A80, 0xA27B0B00, - 0xA279EB80, 0xA278CC00, 0xA277AC80, - 0xA2768D00, 0xA2756D80, 0xA2744E00, - 0xA2732E80, 0xA2720F00, 0xA270EF80, - 0xA26FD000, 0xA26EB080, 0xA26D9100, - 0xA26C7180, 0xA26B5200, 0xA26A3280, - 0xA2691300, 0xA267F380, 0xA266D400, - 0xA265B480, 0xA2649500, 0xA2637580, - 0xA2625600, 0xA2613680, 0xA2601700, - 0xA25EF780, 0xA25DD800, 0xA25CB880, - 0xA25B9900, 0xA25A7980, 0xA2595A00, - 0xA2583A80, 0xA2571B00, 0xA255FB80, - 0xA254DC00, 0xA253BC80, 0xA2529D00, - 0xA2517D80, 0xA2505E00, 0xA24F3E80, - 0xA24E1F00, 0xA24CFF80, 0xA24BE000, - 0xA24AC080, 0xA249A100, 0xA2488180, - 0xA2476200, 0xA2464280, 0xA2452300, - 0xA2440380, 0xA242E400, 0xA241C480, - 0xA240A500, 0xA23F8580, 0xA23E6600, - 0xA23D4680, 0xA23C2700, 0xA23B0780, - 0xA239E800, 0xA238C880, 0xA237A900, - 0xA2368980, 0xA2356A00, 0xA2344A80, - 0xA2332B00, 0xA2320B80, 0xA230EC00, - 0xA22FCC80, 0xA22EAD00, 0xA22D8D80, - 0xA22C6E00, 0xA22B4E80, 0xA22A2F00, - 0xA2290F80, 0xA227F000, 0xA226D080, - 0xA225B100, 0xA2249180, 0xA2237200, - 0xA2225280, 0xA2213300, 0xA2201380, - 0xA21EF400, 0xA21DD480, 0xA21CB500, - 0xA21B9580, 0xA21A7600, 0xA2195680, - 0xA2183700, 0xA2171780, 0xA215F800, - 0xA214D880, 0xA213B900, 0xA2129980, - 0xA2117A00, 0xA2105A80, 0xA20F3B00, - 0xA20E1B80, 0xA20CFC00, 0xA20BDC80, - 0xA20ABD00, 0xA2099D80, 0xA2087E00, - 0xA2075E80, 0xA2063F00, 0xA2051F80, - 0xA2040000, 0xA202F180, 0xA201E300, - 0xA200D480, 0xA1FFC600, 0xA1FEB780, - 0xA1FDA900, 0xA1FC9A80, 0xA1FB8C00, - 0xA1FA7D80, 0xA1F96F00, 0xA1F86080, - 0xA1F75200, 0xA1F64380, 0xA1F53500, - 0xA1F42680, 0xA1F31800, 0xA1F20980, - 0xA1F0FB00, 0xA1EFEC80, 0xA1EEDE00, - 0xA1EDCF80, 0xA1ECC100, 0xA1EBB280, - 0xA1EAA400, 0xA1E99580, 0xA1E88700, - 0xA1E77880, 0xA1E66A00, 0xA1E55B80, - 0xA1E44D00, 0xA1E33E80, 0xA1E23000, - 0xA1E12180, 0xA1E01300, 0xA1DF0480, - 0xA1DDF600, 0xA1DCE780, 0xA1DBD900, - 0xA1DACA80, 0xA1D9BC00, 0xA1D8AD80, - 0xA1D79F00, 0xA1D69080, 0xA1D58200, - 0xA1D47380, 0xA1D36500, 0xA1D25680, - 0xA1D14800, 0xA1D03980, 0xA1CF2B00, - 0xA1CE1C80, 0xA1CD0E00, 0xA1CBFF80, - 0xA1CAF100, 0xA1C9E280, 0xA1C8D400, - 0xA1C7C580, 0xA1C6B700, 0xA1C5A880, - 0xA1C49A00, 0xA1C38B80, 0xA1C27D00, - 0xA1C16E80, 0xA1C06000, 0xA1BF5180, - 0xA1BE4300, 0xA1BD3480, 0xA1BC2600, - 0xA1BB1780, 0xA1BA0900, 0xA1B8FA80, - 0xA1B7EC00, 0xA1B6DD80, 0xA1B5CF00, - 0xA1B4C080, 0xA1B3B200, 0xA1B2A380, - 0xA1B19500, 0xA1B08680, 0xA1AF7800, - 0xA1AE6980, 0xA1AD5B00, 0xA1AC4C80, - 0xA1AB3E00, 0xA1AA2F80, 0xA1A92100, - 0xA1A81280, 0xA1A70400, 0xA1A5F580, - 0xA1A4E700, 0xA1A3D880, 0xA1A2CA00, - 0xA1A1BB80, 0xA1A0AD00, 0xA19F9E80, - 0xA19E9000, 0xA19D8180, 0xA19C7300, - 0xA19B6480, 0xA19A5600, 0xA1994780, - 0xA1983900, 0xA1972A80, 0xA1961C00, - 0xA1950D80, 0xA193FF00, 0xA192F080, - 0xA191E200, 0xA190D380, 0xA18FC500, - 0xA18EB680, 0xA18DA800, 0xA18C9980, - 0xA18B8B00, 0xA18A7C80, 0xA1896E00, - 0xA1885F80, 0xA1875100, 0xA1864280, - 0xA1853400, 0xA1842580, 0xA1831700, - 0xA1820880, 0xA180FA00, 0xA17FEB80, - 0xA17EDD00, 0xA17DCE80, 0xA17CC000, - 0xA17BB180, 0xA17AA300, 0xA1799480, - 0xA1788600, 0xA1777780, 0xA1766900, - 0xA1755A80, 0xA1744C00, 0xA1733D80, - 0xA1722F00, 0xA1712080, 0xA1701200, - 0xA16F0380, 0xA16DF500, 0xA16CE680, - 0xA16BD800, 0xA16AC980, 0xA169BB00, - 0xA168AC80, 0xA1679E00, 0xA1668F80, - 0xA1658100, 0xA1647280, 0xA1636400, - 0xA1625580, 0xA1614700, 0xA1603880, - 0xA15F2A00, 0xA15E1B80, 0xA15D0D00, - 0xA15BFE80, 0xA15AF000, 0xA159E180, - 0xA158D300, 0xA157C480, 0xA156B600, - 0xA155A780, 0xA1549900, 0xA1538A80, - 0xA1527C00, 0xA1516D80, 0xA1505F00, - 0xA14F5080, 0xA14E4200, 0xA14D3380, - 0xA14C2500, 0xA14B1680, 0xA14A0800, - 0xA148F980, 0xA147EB00, 0xA146DC80, - 0xA145CE00, 0xA144BF80, 0xA143B100, - 0xA142A280, 0xA1419400, 0xA1408580, - 0xA13F7700, 0xA13E6880, 0xA13D5A00, - 0xA13C4B80, 0xA13B3D00, 0xA13A2E80, - 0xA1392000, 0xA1381180, 0xA1370300, - 0xA135F480, 0xA134E600, 0xA133D780, - 0xA132C900, 0xA131BA80, 0xA130AC00, - 0xA12F9D80, 0xA12E8F00, 0xA12D8080, - 0xA12C7200, 0xA12B6380, 0xA12A5500, - 0xA1294680, 0xA1283800, 0xA1272980, - 0xA1261B00, 0xA1250C80, 0xA123FE00, - 0xA122EF80, 0xA121E100, 0xA120D280, - 0xA11FC400, 0xA11EB580, 0xA11DA700, - 0xA11C9880, 0xA11B8A00, 0xA11A7B80, - 0xA1196D00, 0xA1185E80, 0xA1175000, - 0xA1164180, 0xA1153300, 0xA1142480, - 0xA1131600, 0xA1120780, 0xA110F900, - 0xA10FEA80, 0xA10EDC00, 0xA10DCD80, - 0xA10CBF00, 0xA10BB080, 0xA10AA200, - 0xA1099380, 0xA1088500, 0xA1077680, - 0xA1066800, 0xA1055980, 0xA1044B00, - 0xA1033C80, 0xA1022E00, 0xA1011F80, - 0xA1001100, 0xA0FF0280, 0xA0FDF400, - 0xA0FCE580, 0xA0FBD700, 0xA0FAC880, - 0xA0F9BA00, 0xA0F8AB80, 0xA0F79D00, - 0xA0F68E80, 0xA0F58000, 0xA0F47180, - 0xA0F36300, 0xA0F25480, 0xA0F14600, - 0xA0F03780, 0xA0EF2900, 0xA0EE1A80, - 0xA0ED0C00, 0xA0EBFD80, 0xA0EAEF00, - 0xA0E9E080, 0xA0E8D200, 0xA0E7C380, - 0xA0E6B500, 0xA0E5A680, 0xA0E49800, - 0xA0E38980, 0xA0E27B00, 0xA0E16C80, - 0xA0E05E00, 0xA0DF4F80, 0xA0DE4100, - 0xA0DD3280, 0xA0DC2400, 0xA0DB1580, - 0xA0DA0700, 0xA0D8F880, 0xA0D7EA00, - 0xA0D6DB80, 0xA0D5CD00, 0xA0D4BE80, - 0xA0D3B000, 0xA0D2A180, 0xA0D19300, - 0xA0D08480, 0xA0CF7600, 0xA0CE6780, - 0xA0CD5900, 0xA0CC4A80, 0xA0CB3C00, - 0xA0CA2D80, 0xA0C91F00, 0xA0C81080, - 0xA0C70200, 0xA0C5F380, 0xA0C4E500, - 0xA0C3D680, 0xA0C2C800, 0xA0C1B980, - 0xA0C0AB00, 0xA0BF9C80, 0xA0BE8E00, - 0xA0BD7F80, 0xA0BC7100, 0xA0BB6280, - 0xA0BA5400, 0xA0B94580, 0xA0B83700, - 0xA0B72880, 0xA0B61A00, 0xA0B50B80, - 0xA0B3FD00, 0xA0B2EE80, 0xA0B1E000, - 0xA0B0D180, 0xA0AFC300, 0xA0AEB480, - 0xA0ADA600, 0xA0AC9780, 0xA0AB8900, - 0xA0AA7A80, 0xA0A96C00, 0xA0A85D80, - 0xA0A74F00, 0xA0A64080, 0xA0A53200, - 0xA0A42380, 0xA0A31500, 0xA0A20680, - 0xA0A0F800, 0xA09FE980, 0xA09EDB00, - 0xA09DCC80, 0xA09CBE00, 0xA09BAF80, - 0xA09AA100, 0xA0999280, 0xA0988400, - 0xA0977580, 0xA0966700, 0xA0955880, - 0xA0944A00, 0xA0933B80, 0xA0922D00, - 0xA0911E80, 0xA0901000, 0xA08F0180, - 0xA08DF300, 0xA08CE480, 0xA08BD600, - 0xA08AC780, 0xA089B900, 0xA088AA80, - 0xA0879C00, 0xA0868D80, 0xA0857F00, - 0xA0847080, 0xA0836200, 0xA0825380, - 0xA0814500, 0xA0803680, 0xA07F2800, - 0xA07E1980, 0xA07D0B00, 0xA07BFC80, - 0xA07AEE00, 0xA079DF80, 0xA078D100, - 0xA077C280, 0xA076B400, 0xA075A580, - 0xA0749700, 0xA0738880, 0xA0727A00, - 0xA0716B80, 0xA0705D00, 0xA06F4E80, - 0xA06E4000, 0xA06D3180, 0xA06C2300, - 0xA06B1480, 0xA06A0600, 0xA068F780, - 0xA067E900, 0xA066DA80, 0xA065CC00, - 0xA064BD80, 0xA063AF00, 0xA062A080, - 0xA0619200, 0xA0608380, 0xA05F7500, - 0xA05E6680, 0xA05D5800, 0xA05C4980, - 0xA05B3B00, 0xA05A2C80, 0xA0591E00, - 0xA0580F80, 0xA0570100, 0xA055F280, - 0xA054E400, 0xA053D580, 0xA052C700, - 0xA051B880, 0xA050AA00, 0xA04F9B80, - 0xA04E8D00, 0xA04D7E80, 0xA04C7000, - 0xA04B6180, 0xA04A5300, 0xA0494480, - 0xA0483600, 0xA0472780, 0xA0461900, - 0xA0450A80, 0xA043FC00, 0xA042ED80, - 0xA041DF00, 0xA040D080, 0xA03FC200, - 0xA03EB380, 0xA03DA500, 0xA03C9680, - 0xA03B8800, 0xA03A7980, 0xA0396B00, - 0xA0385C80, 0xA0374E00, 0xA0363F80, - 0xA0353100, 0xA0342280, 0xA0331400, - 0xA0320580, 0xA030F700, 0xA02FE880, - 0xA02EDA00, 0xA02DCB80, 0xA02CBD00, - 0xA02BAE80, 0xA02AA000, 0xA0299180, - 0xA0288300, 0xA0277480, 0xA0266600, - 0xA0255780, 0xA0244900, 0xA0233A80, - 0xA0222C00, 0xA0211D80, 0xA0200F00, - 0xA01F0080, 0xA01DF200, 0xA01CE380, - 0xA01BD500, 0xA01AC680, 0xA019B800, - 0xA018A980, 0xA0179B00, 0xA0168C80, - 0xA0157E00, 0xA0146F80, 0xA0136100, - 0xA0125280, 0xA0114400, 0xA0103580, - 0xA00F2700, 0xA00E1880, 0xA00D0A00, - 0xA00BFB80, 0xA00AED00, 0xA009DE80, - 0xA008D000, 0xA007C180, 0xA006B300, - 0xA005A480, 0xA0049600, 0xA0038780, - 0xA0027900, 0xA0016A80, 0xA0005C00, - 0x9FFF4D80, 0x9FFE3F00, 0x9FFD3080, - 0x9FFC2200, 0x9FFB1380, 0x9FFA0500, - 0x9FF8F680, 0x9FF7E800, 0x9FF6D980, - 0x9FF5CB00, 0x9FF4BC80, 0x9FF3AE00, - 0x9FF29F80, 0x9FF19100, 0x9FF08280, - 0x9FEF7400, 0x9FEE6580, 0x9FED5700, - 0x9FEC4880, 0x9FEB3A00, 0x9FEA2B80, - 0x9FE91D00, 0x9FE80E80, 0x9FE70000, - 0x9FE5F180, 0x9FE4E300, 0x9FE3D480, - 0x9FE2C600, 0x9FE1B780, 0x9FE0A900, - 0x9FDF9A80, 0x9FDE8C00, 0x9FDD7D80, - 0x9FDC6F00, 0x9FDB6080, 0x9FDA5200, - 0x9FD94380, 0x9FD83500, 0x9FD72680, - 0x9FD61800, 0x9FD50980, 0x9FD3FB00, - 0x9FD2EC80, 0x9FD1DE00, 0x9FD0CF80, - 0x9FCFC100, 0x9FCEB280, 0x9FCDA400, - 0x9FCC9580, 0x9FCB8700, 0x9FCA7880, - 0x9FC96A00, 0x9FC85B80, 0x9FC74D00, - 0x9FC63E80, 0x9FC53000, 0x9FC42180, - 0x9FC31300, 0x9FC20480, 0x9FC0F600, - 0x9FBFE780, 0x9FBED900, 0x9FBDCA80, - 0x9FBCBC00, 0x9FBBAD80, 0x9FBA9F00, - 0x9FB99080, 0x9FB88200, 0x9FB77380, - 0x9FB66500, 0x9FB55680, 0x9FB44800, - 0x9FB33980, 0x9FB22B00, 0x9FB11C80, - 0x9FB00E00, 0x9FAEFF80, 0x9FADF100, - 0x9FACE280, 0x9FABD400, 0x9FAAC580, - 0x9FA9B700, 0x9FA8A880, 0x9FA79A00, - 0x9FA68B80, 0x9FA57D00, 0x9FA46E80, - 0x9FA36000, 0x9FA25180, 0x9FA14300, - 0x9FA03480, 0x9F9F2600, 0x9F9E1780, - 0x9F9D0900, 0x9F9BFA80, 0x9F9AEC00, - 0x9F99DD80, 0x9F98CF00, 0x9F97C080, - 0x9F96B200, 0x9F95A380, 0x9F949500, - 0x9F938680, 0x9F927800, 0x9F916980, - 0x9F905B00, 0x9F8F4C80, 0x9F8E3E00, - 0x9F8D2F80, 0x9F8C2100, 0x9F8B1280, - 0x9F8A0400, 0x9F88F580, 0x9F87E700, - 0x9F86D880, 0x9F85CA00, 0x9F84BB80, - 0x9F83AD00, 0x9F829E80, 0x9F819000, - 0x9F808180, 0x9F7F7300, 0x9F7E6480, - 0x9F7D5600, 0x9F7C4780, 0x9F7B3900, - 0x9F7A2A80, 0x9F791C00, 0x9F780D80, - 0x9F76FF00, 0x9F75F080, 0x9F74E200, - 0x9F73D380, 0x9F72C500, 0x9F71B680, - 0x9F70A800, 0x9F6F9980, 0x9F6E8B00, - 0x9F6D7C80, 0x9F6C6E00, 0x9F6B5F80, - 0x9F6A5100, 0x9F694280, 0x9F683400, - 0x9F672580, 0x9F661700, 0x9F650880, - 0x9F63FA00, 0x9F62EB80, 0x9F61DD00, - 0x9F60CE80, 0x9F5FC000, 0x9F5EB180, - 0x9F5DA300, 0x9F5C9480, 0x9F5B8600, - 0x9F5A7780, 0x9F596900, 0x9F585A80, - 0x9F574C00, 0x9F563D80, 0x9F552F00, - 0x9F542080, 0x9F531200, 0x9F520380, - 0x9F50F500, 0x9F4FE680, 0x9F4ED800, - 0x9F4DC980, 0x9F4CBB00, 0x9F4BAC80, - 0x9F4A9E00, 0x9F498F80, 0x9F488100, - 0x9F477280, 0x9F466400, 0x9F455580, - 0x9F444700, 0x9F433880, 0x9F422A00, - 0x9F411B80, 0x9F400D00, 0x9F3EFE80, - 0x9F3DF000, 0x9F3CE180, 0x9F3BD300, - 0x9F3AC480, 0x9F39B600, 0x9F38A780, - 0x9F379900, 0x9F368A80, 0x9F357C00, - 0x9F346D80, 0x9F335F00, 0x9F325080, - 0x9F314200, 0x9F303380, 0x9F2F2500, - 0x9F2E1680, 0x9F2D0800, 0x9F2BF980, - 0x9F2AEB00, 0x9F29DC80, 0x9F28CE00, - 0x9F27BF80, 0x9F26B100, 0x9F25A280, - 0x9F249400, 0x9F238580, 0x9F227700, - 0x9F216880, 0x9F205A00, 0x9F1F4B80, - 0x9F1E3D00, 0x9F1D2E80, 0x9F1C2000, - 0x9F1B1180, 0x9F1A0300, 0x9F18F480, - 0x9F17E600, 0x9F16D780, 0x9F15C900, - 0x9F14BA80, 0x9F13AC00, 0x9F129D80, - 0x9F118F00, 0x9F108080, 0x9F0F7200, - 0x9F0E6380, 0x9F0D5500, 0x9F0C4680, - 0x9F0B3800, 0x9F0A2980, 0x9F091B00, - 0x9F080C80, 0x9F06FE00, 0x9F05EF80, - 0x9F04E100, 0x9F03D280, 0x9F02C400, - 0x9F01B580, 0x9F00A700, 0x9EFF9880, - 0x9EFE8A00, 0x9EFD7B80, 0x9EFC6D00, - 0x9EFB5E80, 0x9EFA5000, 0x9EF94180, - 0x9EF83300, 0x9EF72480, 0x9EF61600, - 0x9EF50780, 0x9EF3F900, 0x9EF2EA80, - 0x9EF1DC00, 0x9EF0CD80, 0x9EEFBF00, - 0x9EEEB080, 0x9EEDA200, 0x9EEC9380, - 0x9EEB8500, 0x9EEA7680, 0x9EE96800, - 0x9EE85980, 0x9EE74B00, 0x9EE63C80, - 0x9EE52E00, 0x9EE41F80, 0x9EE31100, - 0x9EE20280, 0x9EE0F400, 0x9EDFE580, - 0x9EDED700, 0x9EDDC880, 0x9EDCBA00, - 0x9EDBAB80, 0x9EDA9D00, 0x9ED98E80, - 0x9ED88000, 0x9ED77180, 0x9ED66300, - 0x9ED55480, 0x9ED44600, 0x9ED33780, - 0x9ED22900, 0x9ED11A80, 0x9ED00C00, - 0x9ECEFD80, 0x9ECDEF00, 0x9ECCE080, - 0x9ECBD200, 0x9ECAC380, 0x9EC9B500, - 0x9EC8A680, 0x9EC79800, 0x9EC68980, - 0x9EC57B00, 0x9EC46C80, 0x9EC35E00, - 0x9EC24F80, 0x9EC14100, 0x9EC03280, - 0x9EBF2400, 0x9EBE1580, 0x9EBD0700, - 0x9EBBF880, 0x9EBAEA00, 0x9EB9DB80, - 0x9EB8CD00, 0x9EB7BE80, 0x9EB6B000, - 0x9EB5A180, 0x9EB49300, 0x9EB38480, - 0x9EB27600, 0x9EB16780, 0x9EB05900, - 0x9EAF4A80, 0x9EAE3C00, 0x9EAD2D80, - 0x9EAC1F00, 0x9EAB1080, 0x9EAA0200, - 0x9EA8F380, 0x9EA7E500, 0x9EA6D680, - 0x9EA5C800, 0x9EA4B980, 0x9EA3AB00, - 0x9EA29C80, 0x9EA18E00, 0x9EA07F80, - 0x9E9F7100, 0x9E9E6280, 0x9E9D5400, - 0x9E9C4580, 0x9E9B3700, 0x9E9A2880, - 0x9E991A00, 0x9E980B80, 0x9E96FD00, - 0x9E95EE80, 0x9E94E000, 0x9E93D180, - 0x9E92C300, 0x9E91B480, 0x9E90A600, - 0x9E8F9780, 0x9E8E8900, 0x9E8D7A80, - 0x9E8C6C00, 0x9E8B5D80, 0x9E8A4F00, - 0x9E894080, 0x9E883200, 0x9E872380, - 0x9E861500, 0x9E850680, 0x9E83F800, - 0x9E82E980, 0x9E81DB00, 0x9E80CC80, - 0x9E7FBE00, 0x9E7EAF80, 0x9E7DA100, - 0x9E7C9280, 0x9E7B8400, 0x9E7A7580, - 0x9E796700, 0x9E785880, 0x9E774A00, - 0x9E763B80, 0x9E752D00, 0x9E741E80, - 0x9E731000, 0x9E720180, 0x9E70F300, - 0x9E6FE480, 0x9E6ED600, 0x9E6DC780, - 0x9E6CB900, 0x9E6BAA80, 0x9E6A9C00, - 0x9E698D80, 0x9E687F00, 0x9E677080, - 0x9E666200, 0x9E655380, 0x9E644500, - 0x9E633680, 0x9E622800, 0x9E611980, - 0x9E600B00, 0x9E5EFC80, 0x9E5DEE00, - 0x9E5CDF80, 0x9E5BD100, 0x9E5AC280, - 0x9E59B400, 0x9E58A580, 0x9E579700, - 0x9E568880, 0x9E557A00, 0x9E546B80, - 0x9E535D00, 0x9E524E80, 0x9E514000, - 0x9E503180, 0x9E4F2300, 0x9E4E1480, - 0x9E4D0600, 0x9E4BF780, 0x9E4AE900, - 0x9E49DA80, 0x9E48CC00, 0x9E47BD80, - 0x9E46AF00, 0x9E45A080, 0x9E449200, - 0x9E438380, 0x9E427500, 0x9E416680, - 0x9E405800, 0x9E3F4980, 0x9E3E3B00, - 0x9E3D2C80, 0x9E3C1E00, 0x9E3B0F80, - 0x9E3A0100, 0x9E38F280, 0x9E37E400, - 0x9E36D580, 0x9E35C700, 0x9E34B880, - 0x9E33AA00, 0x9E329B80, 0x9E318D00, - 0x9E307E80, 0x9E2F7000, 0x9E2E6180, - 0x9E2D5300, 0x9E2C4480, 0x9E2B3600, - 0x9E2A2780, 0x9E291900, 0x9E280A80, - 0x9E26FC00, 0x9E25ED80, 0x9E24DF00, - 0x9E23D080, 0x9E22C200, 0x9E21B380, - 0x9E20A500, 0x9E1F9680, 0x9E1E8800, - 0x9E1D7980, 0x9E1C6B00, 0x9E1B5C80, - 0x9E1A4E00, 0x9E193F80, 0x9E183100, - 0x9E172280, 0x9E161400, 0x9E150580, - 0x9E13F700, 0x9E12E880, 0x9E11DA00, - 0x9E10CB80, 0x9E0FBD00, 0x9E0EAE80, - 0x9E0DA000, 0x9E0C9180, 0x9E0B8300, - 0x9E0A7480, 0x9E096600, 0x9E085780, - 0x9E074900, 0x9E063A80, 0x9E052C00, - 0x9E041D80, 0x9E030F00, 0x9E020080, - 0x9E00F200, 0x9DFFE380, 0x9DFED500, - 0x9DFDC680, 0x9DFCB800, 0x9DFBA980, - 0x9DFA9B00, 0x9DF98C80, 0x9DF87E00, - 0x9DF76F80, 0x9DF66100, 0x9DF55280, - 0x9DF44400, 0x9DF33580, 0x9DF22700, - 0x9DF11880, 0x9DF00A00, 0x9DEEFB80, - 0x9DEDED00, 0x9DECDE80, 0x9DEBD000, - 0x9DEAC180, 0x9DE9B300, 0x9DE8A480, - 0x9DE79600, 0x9DE68780, 0x9DE57900, - 0x9DE46A80, 0x9DE35C00, 0x9DE24D80, - 0x9DE13F00, 0x9DE03080, 0x9DDF2200, - 0x9DDE1380, 0x9DDD0500, 0x9DDBF680, - 0x9DDAE800, 0x9DD9D980, 0x9DD8CB00, - 0x9DD7BC80, 0x9DD6AE00, 0x9DD59F80, - 0x9DD49100, 0x9DD38280, 0x9DD27400, - 0x9DD16580, 0x9DD05700, 0x9DCF4880, - 0x9DCE3A00, 0x9DCD2B80, 0x9DCC1D00, - 0x9DCB0E80, 0x9DCA0000, 0x9DC8F180, - 0x9DC7E300, 0x9DC6D480, 0x9DC5C600, - 0x9DC4B780, 0x9DC3A900, 0x9DC29A80, - 0x9DC18C00, 0x9DC07D80, 0x9DBF6F00, - 0x9DBE6080, 0x9DBD5200, 0x9DBC4380, - 0x9DBB3500, 0x9DBA2680, 0x9DB91800, - 0x9DB80980, 0x9DB6FB00, 0x9DB5EC80, - 0x9DB4DE00, 0x9DB3CF80, 0x9DB2C100, - 0x9DB1B280, 0x9DB0A400, 0x9DAF9580, - 0x9DAE8700, 0x9DAD7880, 0x9DAC6A00, - 0x9DAB5B80, 0x9DAA4D00, 0x9DA93E80, - 0x9DA83000, 0x9DA72180, 0x9DA61300, - 0x9DA50480, 0x9DA3F600, 0x9DA2E780, - 0x9DA1D900, 0x9DA0CA80, 0x9D9FBC00, - 0x9D9EAD80, 0x9D9D9F00, 0x9D9C9080, - 0x9D9B8200, 0x9D9A7380, 0x9D996500, - 0x9D985680, 0x9D974800, 0x9D963980, - 0x9D952B00, 0x9D941C80, 0x9D930E00, - 0x9D91FF80, 0x9D90F100, 0x9D8FE280, - 0x9D8ED400, 0x9D8DC580, 0x9D8CB700, - 0x9D8BA880, 0x9D8A9A00, 0x9D898B80, - 0x9D887D00, 0x9D876E80, 0x9D866000, - 0x9D855180, 0x9D844300, 0x9D833480, - 0x9D822600, 0x9D811780, 0x9D800900, - 0x9D7EFA80, 0x9D7DEC00, 0x9D7CDD80, - 0x9D7BCF00, 0x9D7AC080, 0x9D79B200, - 0x9D78A380, 0x9D779500, 0x9D768680, - 0x9D757800, 0x9D746980, 0x9D735B00, - 0x9D724C80, 0x9D713E00, 0x9D702F80, - 0x9D6F2100, 0x9D6E1280, 0x9D6D0400, - 0x9D6BF580, 0x9D6AE700, 0x9D69D880, - 0x9D68CA00, 0x9D67BB80, 0x9D66AD00, - 0x9D659E80, 0x9D649000, 0x9D638180, - 0x9D627300, 0x9D616480, 0x9D605600, - 0x9D5F4780, 0x9D5E3900, 0x9D5D2A80, - 0x9D5C1C00, 0x9D5B0D80, 0x9D59FF00, - 0x9D58F080, 0x9D57E200, 0x9D56D380, - 0x9D55C500, 0x9D54B680, 0x9D53A800, - 0x9D529980, 0x9D518B00, 0x9D507C80, - 0x9D4F6E00, 0x9D4E5F80, 0x9D4D5100, - 0x9D4C4280, 0x9D4B3400, 0x9D4A2580, - 0x9D491700, 0x9D480880, 0x9D46FA00, - 0x9D45EB80, 0x9D44DD00, 0x9D43CE80, - 0x9D42C000, 0x9D41B180, 0x9D40A300, - 0x9D3F9480, 0x9D3E8600, 0x9D3D7780, - 0x9D3C6900, 0x9D3B5A80, 0x9D3A4C00, - 0x9D393D80, 0x9D382F00, 0x9D372080, - 0x9D361200, 0x9D350380, 0x9D33F500, - 0x9D32E680, 0x9D31D800, 0x9D30C980, - 0x9D2FBB00, 0x9D2EAC80, 0x9D2D9E00, - 0x9D2C8F80, 0x9D2B8100, 0x9D2A7280, - 0x9D296400, 0x9D285580, 0x9D274700, - 0x9D263880, 0x9D252A00, 0x9D241B80, - 0x9D230D00, 0x9D21FE80, 0x9D20F000, - 0x9D1FE180, 0x9D1ED300, 0x9D1DC480, - 0x9D1CB600, 0x9D1BA780, 0x9D1A9900, - 0x9D198A80, 0x9D187C00, 0x9D176D80, - 0x9D165F00, 0x9D155080, 0x9D144200, - 0x9D133380, 0x9D122500, 0x9D111680, - 0x9D100800, 0x9D0EF980, 0x9D0DEB00, - 0x9D0CDC80, 0x9D0BCE00, 0x9D0ABF80, - 0x9D09B100, 0x9D08A280, 0x9D079400, - 0x9D068580, 0x9D057700, 0x9D046880, - 0x9D035A00, 0x9D024B80, 0x9D013D00, - 0x9D002E80, 0x9CFF2000, 0x9CFE1180, - 0x9CFD0300, 0x9CFBF480, 0x9CFAE600, - 0x9CF9D780, 0x9CF8C900, 0x9CF7BA80, - 0x9CF6AC00, 0x9CF59D80, 0x9CF48F00, - 0x9CF38080, 0x9CF27200, 0x9CF16380, - 0x9CF05500, 0x9CEF4680, 0x9CEE3800, - 0x9CED2980, 0x9CEC1B00, 0x9CEB0C80, - 0x9CE9FE00, 0x9CE8EF80, 0x9CE7E100, - 0x9CE6D280, 0x9CE5C400, 0x9CE4B580, - 0x9CE3A700, 0x9CE29880, 0x9CE18A00, - 0x9CE07B80, 0x9CDF6D00, 0x9CDE5E80, - 0x9CDD5000, 0x9CDC4180, 0x9CDB3300, - 0x9CDA2480, 0x9CD91600, 0x9CD80780, - 0x9CD6F900, 0x9CD5EA80, 0x9CD4DC00, - 0x9CD3CD80, 0x9CD2BF00, 0x9CD1B080, - 0x9CD0A200, 0x9CCF9380, 0x9CCE8500, - 0x9CCD7680, 0x9CCC6800, 0x9CCB5980, - 0x9CCA4B00, 0x9CC93C80, 0x9CC82E00, - 0x9CC71F80, 0x9CC61100, 0x9CC50280, - 0x9CC3F400, 0x9CC2E580, 0x9CC1D700, - 0x9CC0C880, 0x9CBFBA00, 0x9CBEAB80, - 0x9CBD9D00, 0x9CBC8E80, 0x9CBB8000, - 0x9CBA7180, 0x9CB96300, 0x9CB85480, - 0x9CB74600, 0x9CB63780, 0x9CB52900, - 0x9CB41A80, 0x9CB30C00, 0x9CB1FD80, - 0x9CB0EF00, 0x9CAFE080, 0x9CAED200, - 0x9CADC380, 0x9CACB500, 0x9CABA680, - 0x9CAA9800, 0x9CA98980, 0x9CA87B00, - 0x9CA76C80, 0x9CA65E00, 0x9CA54F80, - 0x9CA44100, 0x9CA33280, 0x9CA22400, - 0x9CA11580, 0x9CA00700, 0x9C9EF880, - 0x9C9DEA00, 0x9C9CDB80, 0x9C9BCD00, - 0x9C9ABE80, 0x9C99B000, 0x9C98A180, - 0x9C979300, 0x9C968480, 0x9C957600, - 0x9C946780, 0x9C935900, 0x9C924A80, - 0x9C913C00, 0x9C902D80, 0x9C8F1F00, - 0x9C8E1080, 0x9C8D0200, 0x9C8BF380, - 0x9C8AE500, 0x9C89D680, 0x9C88C800, - 0x9C87B980, 0x9C86AB00, 0x9C859C80, - 0x9C848E00, 0x9C837F80, 0x9C827100, - 0x9C816280, 0x9C805400, 0x9C7F4580, - 0x9C7E3700, 0x9C7D2880, 0x9C7C1A00, - 0x9C7B0B80, 0x9C79FD00, 0x9C78EE80, - 0x9C77E000, 0x9C76D180, 0x9C75C300, - 0x9C74B480, 0x9C73A600, 0x9C729780, - 0x9C718900, 0x9C707A80, 0x9C6F6C00, - 0x9C6E5D80, 0x9C6D4F00, 0x9C6C4080, - 0x9C6B3200, 0x9C6A2380, 0x9C691500, - 0x9C680680, 0x9C66F800, 0x9C65E980, - 0x9C64DB00, 0x9C63CC80, 0x9C62BE00, - 0x9C61AF80, 0x9C60A100, 0x9C5F9280, - 0x9C5E8400, 0x9C5D7580, 0x9C5C6700, - 0x9C5B5880, 0x9C5A4A00, 0x9C593B80, - 0x9C582D00, 0x9C571E80, 0x9C561000, - 0x9C550180, 0x9C53F300, 0x9C52E480, - 0x9C51D600, 0x9C50C780, 0x9C4FB900, - 0x9C4EAA80, 0x9C4D9C00, 0x9C4C8D80, - 0x9C4B7F00, 0x9C4A7080, 0x9C496200, - 0x9C485380, 0x9C474500, 0x9C463680, - 0x9C452800, 0x9C441980, 0x9C430B00, - 0x9C41FC80, 0x9C40EE00, 0x9C3FDF80, - 0x9C3ED100, 0x9C3DC280, 0x9C3CB400, - 0x9C3BA580, 0x9C3A9700, 0x9C398880, - 0x9C387A00, 0x9C376B80, 0x9C365D00, - 0x9C354E80, 0x9C344000, 0x9C333180, - 0x9C322300, 0x9C311480, 0x9C300600, - 0x9C2EF780, 0x9C2DE900, 0x9C2CDA80, - 0x9C2BCC00, 0x9C2ABD80, 0x9C29AF00, - 0x9C28A080, 0x9C279200, 0x9C268380, - 0x9C257500, 0x9C246680, 0x9C235800, - 0x9C224980, 0x9C213B00, 0x9C202C80, - 0x9C1F1E00, 0x9C1E0F80, 0x9C1D0100, - 0x9C1BF280, 0x9C1AE400, 0x9C19D580, - 0x9C18C700, 0x9C17B880, 0x9C16AA00, - 0x9C159B80, 0x9C148D00, 0x9C137E80, - 0x9C127000, 0x9C116180, 0x9C105300, - 0x9C0F4480, 0x9C0E3600, 0x9C0D2780, - 0x9C0C1900, 0x9C0B0A80, 0x9C09FC00, - 0x9C08ED80, 0x9C07DF00, 0x9C06D080, - 0x9C05C200, 0x9C04B380, 0x9C03A500, - 0x9C029680, 0x9C018800, 0x9C007980, - 0x9BFF6B00, 0x9BFE5C80, 0x9BFD4E00, - 0x9BFC3F80, 0x9BFB3100, 0x9BFA2280, - 0x9BF91400, 0x9BF80580, 0x9BF6F700, - 0x9BF5E880, 0x9BF4DA00, 0x9BF3CB80, - 0x9BF2BD00, 0x9BF1AE80, 0x9BF0A000, - 0x9BEF9180, 0x9BEE8300, 0x9BED7480, - 0x9BEC6600, 0x9BEB5780, 0x9BEA4900, - 0x9BE93A80, 0x9BE82C00, 0x9BE71D80, - 0x9BE60F00, 0x9BE50080, 0x9BE3F200, - 0x9BE2E380, 0x9BE1D500, 0x9BE0C680, - 0x9BDFB800, 0x9BDEA980, 0x9BDD9B00, - 0x9BDC8C80, 0x9BDB7E00, 0x9BDA6F80, - 0x9BD96100, 0x9BD85280, 0x9BD74400, - 0x9BD63580, 0x9BD52700, 0x9BD41880, - 0x9BD30A00, 0x9BD1FB80, 0x9BD0ED00, - 0x9BCFDE80, 0x9BCED000, 0x9BCDC180, - 0x9BCCB300, 0x9BCBA480, 0x9BCA9600, - 0x9BC98780, 0x9BC87900, 0x9BC76A80, - 0x9BC65C00, 0x9BC54D80, 0x9BC43F00, - 0x9BC33080, 0x9BC22200, 0x9BC11380, - 0x9BC00500, 0x9BBEF680, 0x9BBDE800, - 0x9BBCD980, 0x9BBBCB00, 0x9BBABC80, - 0x9BB9AE00, 0x9BB89F80, 0x9BB79100, - 0x9BB68280, 0x9BB57400, 0x9BB46580, - 0x9BB35700, 0x9BB24880, 0x9BB13A00, - 0x9BB02B80, 0x9BAF1D00, 0x9BAE0E80, - 0x9BAD0000, 0x9BABF180, 0x9BAAE300, - 0x9BA9D480, 0x9BA8C600, 0x9BA7B780, - 0x9BA6A900, 0x9BA59A80, 0x9BA48C00, - 0x9BA37D80, 0x9BA26F00, 0x9BA16080, - 0x9BA05200, 0x9B9F4380, 0x9B9E3500, - 0x9B9D2680, 0x9B9C1800, 0x9B9B0980, - 0x9B99FB00, 0x9B98EC80, 0x9B97DE00, - 0x9B96CF80, 0x9B95C100, 0x9B94B280, - 0x9B93A400, 0x9B929580, 0x9B918700, - 0x9B907880, 0x9B8F6A00, 0x9B8E5B80, - 0x9B8D4D00, 0x9B8C3E80, 0x9B8B3000, - 0x9B8A2180, 0x9B891300, 0x9B880480, - 0x9B86F600, 0x9B85E780, 0x9B84D900, - 0x9B83CA80, 0x9B82BC00, 0x9B81AD80, - 0x9B809F00, 0x9B7F9080, 0x9B7E8200, - 0x9B7D7380, 0x9B7C6500, 0x9B7B5680, - 0x9B7A4800, 0x9B793980, 0x9B782B00, - 0x9B771C80, 0x9B760E00, 0x9B74FF80, - 0x9B73F100, 0x9B72E280, 0x9B71D400, - 0x9B70C580, 0x9B6FB700, 0x9B6EA880, - 0x9B6D9A00, 0x9B6C8B80, 0x9B6B7D00, - 0x9B6A6E80, 0x9B696000, 0x9B685180, - 0x9B674300, 0x9B663480, 0x9B652600, - 0x9B641780, 0x9B630900, 0x9B61FA80, - 0x9B60EC00, 0x9B5FDD80, 0x9B5ECF00, - 0x9B5DC080, 0x9B5CB200, 0x9B5BA380, - 0x9B5A9500, 0x9B598680, 0x9B587800, - 0x9B576980, 0x9B565B00, 0x9B554C80, - 0x9B543E00, 0x9B532F80, 0x9B522100, - 0x9B511280, 0x9B500400, 0x9B4EF580, - 0x9B4DE700, 0x9B4CD880, 0x9B4BCA00, - 0x9B4ABB80, 0x9B49AD00, 0x9B489E80, - 0x9B479000, 0x9B468180, 0x9B457300, - 0x9B446480, 0x9B435600, 0x9B424780, - 0x9B413900, 0x9B402A80, 0x9B3F1C00, - 0x9B3E0D80, 0x9B3CFF00, 0x9B3BF080, - 0x9B3AE200, 0x9B39D380, 0x9B38C500, - 0x9B37B680, 0x9B36A800, 0x9B359980, - 0x9B348B00, 0x9B337C80, 0x9B326E00, - 0x9B315F80, 0x9B305100, 0x9B2F4280, - 0x9B2E3400, 0x9B2D2580, 0x9B2C1700, - 0x9B2B0880, 0x9B29FA00, 0x9B28EB80, - 0x9B27DD00, 0x9B26CE80, 0x9B25C000, - 0x9B24B180, 0x9B23A300, 0x9B229480, - 0x9B218600, 0x9B207780, 0x9B1F6900, - 0x9B1E5A80, 0x9B1D4C00, 0x9B1C3D80, - 0x9B1B2F00, 0x9B1A2080, 0x9B191200, - 0x9B180380, 0x9B16F500, 0x9B15E680, - 0x9B14D800, 0x9B13C980, 0x9B12BB00, - 0x9B11AC80, 0x9B109E00, 0x9B0F8F80, - 0x9B0E8100, 0x9B0D7280, 0x9B0C6400, - 0x9B0B5580, 0x9B0A4700, 0x9B093880, - 0x9B082A00, 0x9B071B80, 0x9B060D00, - 0x9B04FE80, 0x9B03F000, 0x9B02E180, - 0x9B01D300, 0x9B00C480, 0x9AFFB600, - 0x9AFEA780, 0x9AFD9900, 0x9AFC8A80, - 0x9AFB7C00, 0x9AFA6D80, 0x9AF95F00, - 0x9AF85080, 0x9AF74200, 0x9AF63380, - 0x9AF52500, 0x9AF41680, 0x9AF30800, - 0x9AF1F980, 0x9AF0EB00, 0x9AEFDC80, - 0x9AEECE00, 0x9AEDBF80, 0x9AECB100, - 0x9AEBA280, 0x9AEA9400, 0x9AE98580, - 0x9AE87700, 0x9AE76880, 0x9AE65A00, - 0x9AE54B80, 0x9AE43D00, 0x9AE32E80, - 0x9AE22000, 0x9AE11180, 0x9AE00300, - 0x9ADEF480, 0x9ADDE600, 0x9ADCD780, - 0x9ADBC900, 0x9ADABA80, 0x9AD9AC00, - 0x9AD89D80, 0x9AD78F00, 0x9AD68080, - 0x9AD57200, 0x9AD46380, 0x9AD35500, - 0x9AD24680, 0x9AD13800, 0x9AD02980, - 0x9ACF1B00, 0x9ACE0C80, 0x9ACCFE00, - 0x9ACBEF80, 0x9ACAE100, 0x9AC9D280, - 0x9AC8C400, 0x9AC7B580, 0x9AC6A700, - 0x9AC59880, 0x9AC48A00, 0x9AC37B80, - 0x9AC26D00, 0x9AC15E80, 0x9AC05000, - 0x9ABF4180, 0x9ABE3300, 0x9ABD2480, - 0x9ABC1600, 0x9ABB0780, 0x9AB9F900, - 0x9AB8EA80, 0x9AB7DC00, 0x9AB6CD80, - 0x9AB5BF00, 0x9AB4B080, 0x9AB3A200, - 0x9AB29380, 0x9AB18500, 0x9AB07680, - 0x9AAF6800, 0x9AAE5980, 0x9AAD4B00, - 0x9AAC3C80, 0x9AAB2E00, 0x9AAA1F80, - 0x9AA91100, 0x9AA80280, 0x9AA6F400, - 0x9AA5E580, 0x9AA4D700, 0x9AA3C880, - 0x9AA2BA00, 0x9AA1AB80, 0x9AA09D00, - 0x9A9F8E80, 0x9A9E8000, 0x9A9D7180, - 0x9A9C6300, 0x9A9B5480, 0x9A9A4600, - 0x9A993780, 0x9A982900, 0x9A971A80, - 0x9A960C00, 0x9A94FD80, 0x9A93EF00, - 0x9A92E080, 0x9A91D200, 0x9A90C380, - 0x9A8FB500, 0x9A8EA680, 0x9A8D9800, - 0x9A8C8980, 0x9A8B7B00, 0x9A8A6C80, - 0x9A895E00, 0x9A884F80, 0x9A874100, - 0x9A863280, 0x9A852400, 0x9A841580, - 0x9A830700, 0x9A81F880, 0x9A80EA00, - 0x9A7FDB80, 0x9A7ECD00, 0x9A7DBE80, - 0x9A7CB000, 0x9A7BA180, 0x9A7A9300, - 0x9A798480, 0x9A787600, 0x9A776780, - 0x9A765900, 0x9A754A80, 0x9A743C00, - 0x9A732D80, 0x9A721F00, 0x9A711080, - 0x9A700200, 0x9A6EF380, 0x9A6DE500, - 0x9A6CD680, 0x9A6BC800, 0x9A6AB980, - 0x9A69AB00, 0x9A689C80, 0x9A678E00, - 0x9A667F80, 0x9A657100, 0x9A646280, - 0x9A635400, 0x9A624580, 0x9A613700, - 0x9A602880, 0x9A5F1A00, 0x9A5E0B80, - 0x9A5CFD00, 0x9A5BEE80, 0x9A5AE000, - 0x9A59D180, 0x9A58C300, 0x9A57B480, - 0x9A56A600, 0x9A559780, 0x9A548900, - 0x9A537A80, 0x9A526C00, 0x9A515D80, - 0x9A504F00, 0x9A4F4080, 0x9A4E3200, - 0x9A4D2380, 0x9A4C1500, 0x9A4B0680, - 0x9A49F800, 0x9A48E980, 0x9A47DB00, - 0x9A46CC80, 0x9A45BE00, 0x9A44AF80, - 0x9A43A100, 0x9A429280, 0x9A418400, - 0x9A407580, 0x9A3F6700, 0x9A3E5880, - 0x9A3D4A00, 0x9A3C3B80, 0x9A3B2D00, - 0x9A3A1E80, 0x9A391000, 0x9A380180, - 0x9A36F300, 0x9A35E480, 0x9A34D600, - 0x9A33C780, 0x9A32B900, 0x9A31AA80, - 0x9A309C00, 0x9A2F8D80, 0x9A2E7F00, - 0x9A2D7080, 0x9A2C6200, 0x9A2B5380, - 0x9A2A4500, 0x9A293680, 0x9A282800, - 0x9A271980, 0x9A260B00, 0x9A24FC80, - 0x9A23EE00, 0x9A22DF80, 0x9A21D100, - 0x9A20C280, 0x9A1FB400, 0x9A1EA580, - 0x9A1D9700, 0x9A1C8880, 0x9A1B7A00, - 0x9A1A6B80, 0x9A195D00, 0x9A184E80, - 0x9A174000, 0x9A163180, 0x9A152300, - 0x9A141480, 0x9A130600, 0x9A11F780, - 0x9A10E900, 0x9A0FDA80, 0x9A0ECC00, - 0x9A0DBD80, 0x9A0CAF00, 0x9A0BA080, - 0x9A0A9200, 0x9A098380, 0x9A087500, - 0x9A076680, 0x9A065800, 0x9A054980, - 0x9A043B00, 0x9A032C80, 0x9A021E00, - 0x9A010F80, 0x9A000100, 0x99FEF280, - 0x99FDE400, 0x99FCD580, 0x99FBC700, - 0x99FAB880, 0x99F9AA00, 0x99F89B80, - 0x99F78D00, 0x99F67E80, 0x99F57000, - 0x99F46180, 0x99F35300, 0x99F24480, - 0x99F13600, 0x99F02780, 0x99EF1900, - 0x99EE0A80, 0x99ECFC00, 0x99EBED80, - 0x99EADF00, 0x99E9D080, 0x99E8C200, - 0x99E7B380, 0x99E6A500, 0x99E59680, - 0x99E48800, 0x99E37980, 0x99E26B00, - 0x99E15C80, 0x99E04E00, 0x99DF3F80, - 0x99DE3100, 0x99DD2280, 0x99DC1400, - 0x99DB0580, 0x99D9F700, 0x99D8E880, - 0x99D7DA00, 0x99D6CB80, 0x99D5BD00, - 0x99D4AE80, 0x99D3A000, 0x99D29180, - 0x99D18300, 0x99D07480, 0x99CF6600, - 0x99CE5780, 0x99CD4900, 0x99CC3A80, - 0x99CB2C00, 0x99CA1D80, 0x99C90F00, - 0x99C80080, 0x99C6F200, 0x99C5E380, - 0x99C4D500, 0x99C3C680, 0x99C2B800, - 0x99C1A980, 0x99C09B00, 0x99BF8C80, - 0x99BE7E00, 0x99BD6F80, 0x99BC6100, - 0x99BB5280, 0x99BA4400, 0x99B93580, - 0x99B82700, 0x99B71880, 0x99B60A00, - 0x99B4FB80, 0x99B3ED00, 0x99B2DE80, - 0x99B1D000, 0x99B0C180, 0x99AFB300, - 0x99AEA480, 0x99AD9600, 0x99AC8780, - 0x99AB7900, 0x99AA6A80, 0x99A95C00, - 0x99A84D80, 0x99A73F00, 0x99A63080, - 0x99A52200, 0x99A41380, 0x99A30500, - 0x99A1F680, 0x99A0E800, 0x999FD980, - 0x999ECB00, 0x999DBC80, 0x999CAE00, - 0x999B9F80, 0x999A9100, 0x99998280, - 0x99987400, 0x99976580, 0x99965700, - 0x99954880, 0x99943A00, 0x99932B80, - 0x99921D00, 0x99910E80, 0x99940000, - 0x99930180, 0x99920300, 0x99910480, - 0x99900600, 0x998F0780, 0x998E0900, - 0x998D0A80, 0x998C0C00, 0x998B0D80, - 0x998A0F00, 0x99891080, 0x99881200, - 0x99871380, 0x99861500, 0x99851680, - 0x99841800, 0x99831980, 0x99821B00, - 0x99811C80, 0x99801E00, 0x997F1F80, - 0x997E2100, 0x997D2280, 0x997C2400, - 0x997B2580, 0x997A2700, 0x99792880, - 0x99782A00, 0x99772B80, 0x99762D00, - 0x99752E80, 0x99743000, 0x99733180, - 0x99723300, 0x99713480, 0x99703600, - 0x996F3780, 0x996E3900, 0x996D3A80, - 0x996C3C00, 0x996B3D80, 0x996A3F00, - 0x99694080, 0x99684200, 0x99674380, - 0x99664500, 0x99654680, 0x99644800, - 0x99634980, 0x99624B00, 0x99614C80, - 0x99604E00, 0x995F4F80, 0x995E5100, - 0x995D5280, 0x995C5400, 0x995B5580, - 0x995A5700, 0x99595880, 0x99585A00, - 0x99575B80, 0x99565D00, 0x99555E80, - 0x99546000, 0x99536180, 0x99526300, - 0x99516480, 0x99506600, 0x994F6780, - 0x994E6900, 0x994D6A80, 0x994C6C00, - 0x994B6D80, 0x994A6F00, 0x99497080, - 0x99487200, 0x99477380, 0x99467500, - 0x99457680, 0x99447800, 0x99437980, - 0x99427B00, 0x99417C80, 0x99407E00, - 0x993F7F80, 0x993E8100, 0x993D8280, - 0x993C8400, 0x993B8580, 0x993A8700, - 0x99398880, 0x99388A00, 0x99378B80, - 0x99368D00, 0x99358E80, 0x99349000, - 0x99339180, 0x99329300, 0x99319480, - 0x99309600, 0x992F9780, 0x992E9900, - 0x992D9A80, 0x992C9C00, 0x992B9D80, - 0x992A9F00, 0x9929A080, 0x9928A200, - 0x9927A380, 0x9926A500, 0x9925A680, - 0x9924A800, 0x9923A980, 0x9922AB00, - 0x9921AC80, 0x9920AE00, 0x991FAF80, - 0x991EB100, 0x991DB280, 0x991CB400, - 0x991BB580, 0x991AB700, 0x9919B880, - 0x9918BA00, 0x9917BB80, 0x9916BD00, - 0x9915BE80, 0x9914C000, 0x9913C180, - 0x9912C300, 0x9911C480, 0x9910C600, - 0x990FC780, 0x990EC900, 0x990DCA80, - 0x990CCC00, 0x990BCD80, 0x990ACF00, - 0x9909D080, 0x9908D200, 0x9907D380, - 0x9906D500, 0x9905D680, 0x9904D800, - 0x9903D980, 0x9902DB00, 0x9901DC80, - 0x9900DE00, 0x98FFDF80, 0x98FEE100, - 0x98FDE280, 0x98FCE400, 0x98FBE580, - 0x98FAE700, 0x98F9E880, 0x98F8EA00, - 0x98F7EB80, 0x98F6ED00, 0x98F5EE80, - 0x98F4F000, 0x98F3F180, 0x98F2F300, - 0x98F1F480, 0x98F0F600, 0x98EFF780, - 0x98EEF900, 0x98EDFA80, 0x98ECFC00, - 0x98EBFD80, 0x98EAFF00, 0x98EA0080, - 0x98E90200, 0x98E80380, 0x98E70500, - 0x98E60680, 0x98E50800, 0x98E40980, - 0x98E30B00, 0x98E20C80, 0x98E10E00, - 0x98E00F80, 0x98DF1100, 0x98DE1280, - 0x98DD1400, 0x98DC1580, 0x98DB1700, - 0x98DA1880, 0x98D91A00, 0x98D81B80, - 0x98D71D00, 0x98D61E80, 0x98D52000, - 0x98D42180, 0x98D32300, 0x98D22480, - 0x98D12600, 0x98D02780, 0x98CF2900, - 0x98CE2A80, 0x98CD2C00, 0x98CC2D80, - 0x98CB2F00, 0x98CA3080, 0x98C93200, - 0x98C83380, 0x98C73500, 0x98C63680, - 0x98C53800, 0x98C43980, 0x98C33B00, - 0x98C23C80, 0x98C13E00, 0x98C03F80, - 0x98BF4100, 0x98BE4280, 0x98BD4400, - 0x98BC4580, 0x98BB4700, 0x98BA4880, - 0x98B94A00, 0x98B84B80, 0x98B74D00, - 0x98B64E80, 0x98B55000, 0x98B45180, - 0x98B35300, 0x98B25480, 0x98B15600, - 0x98B05780, 0x98AF5900, 0x98AE5A80, - 0x98AD5C00, 0x98AC5D80, 0x98AB5F00, - 0x98AA6080, 0x98A96200, 0x98A86380, - 0x98A76500, 0x98A66680, 0x98A56800, - 0x98A46980, 0x98A36B00, 0x98A26C80, - 0x98A16E00, 0x98A06F80, 0x989F7100, - 0x989E7280, 0x989D7400, 0x989C7580, - 0x989B7700, 0x989A7880, 0x98997A00, - 0x98987B80, 0x98977D00, 0x98967E80, - 0x98958000, 0x98948180, 0x98938300, - 0x98928480, 0x98918600, 0x98908780, - 0x988F8900, 0x988E8A80, 0x988D8C00, - 0x988C8D80, 0x988B8F00, 0x988A9080, - 0x98899200, 0x98889380, 0x98879500, - 0x98869680, 0x98859800, 0x98849980, - 0x98839B00, 0x98829C80, 0x98819E00, - 0x98809F80, 0x987FA100, 0x987EA280, - 0x987DA400, 0x987CA580, 0x987BA700, - 0x987AA880, 0x9879AA00, 0x9878AB80, - 0x9877AD00, 0x9876AE80, 0x9875B000, - 0x9874B180, 0x9873B300, 0x9872B480, - 0x9871B600, 0x9870B780, 0x986FB900, - 0x986EBA80, 0x986DBC00, 0x986CBD80, - 0x986BBF00, 0x986AC080, 0x9869C200, - 0x9868C380, 0x9867C500, 0x9866C680, - 0x9865C800, 0x9864C980, 0x9863CB00, - 0x9862CC80, 0x9861CE00, 0x9860CF80, - 0x985FD100, 0x985ED280, 0x985DD400, - 0x985CD580, 0x985BD700, 0x985AD880, - 0x9859DA00, 0x9858DB80, 0x9857DD00, - 0x9856DE80, 0x9855E000, 0x9854E180, - 0x9853E300, 0x9852E480, 0x9851E600, - 0x9850E780, 0x984FE900, 0x984EEA80, - 0x984DEC00, 0x984CED80, 0x984BEF00, - 0x984AF080, 0x9849F200, 0x9848F380, - 0x9847F500, 0x9846F680, 0x9845F800, - 0x9844F980, 0x9843FB00, 0x9842FC80, - 0x9841FE00, 0x9840FF80, 0x98400100, - 0x983F0280, 0x983E0400, 0x983D0580, - 0x983C0700, 0x983B0880, 0x983A0A00, - 0x98390B80, 0x98380D00, 0x98370E80, - 0x98361000, 0x98351180, 0x98341300, - 0x98331480, 0x98321600, 0x98311780, - 0x98301900, 0x982F1A80, 0x982E1C00, - 0x982D1D80, 0x982C1F00, 0x982B2080, - 0x982A2200, 0x98292380, 0x98282500, - 0x98272680, 0x98262800, 0x98252980, - 0x98242B00, 0x98232C80, 0x98222E00, - 0x98212F80, 0x98203100, 0x981F3280, - 0x981E3400, 0x981D3580, 0x981C3700, - 0x981B3880, 0x981A3A00, 0x98193B80, - 0x98183D00, 0x98173E80, 0x98164000, - 0x98154180, 0x98144300, 0x98134480, - 0x98124600, 0x98114780, 0x98104900, - 0x980F4A80, 0x980E4C00, 0x980D4D80, - 0x980C4F00, 0x980B5080, 0x980A5200, - 0x98095380, 0x98085500, 0x98075680, - 0x98065800, 0x98055980, 0x98045B00, - 0x98035C80, 0x98025E00, 0x98015F80, - 0x98006100, 0x97FF6280, 0x97FE6400, - 0x97FD6580, 0x97FC6700, 0x97FB6880, - 0x97FA6A00, 0x97F96B80, 0x97F86D00, - 0x97F76E80, 0x97F67000, 0x97F57180, - 0x97F47300, 0x97F37480, 0x97F27600, - 0x97F17780, 0x97F07900, 0x97EF7A80, - 0x97EE7C00, 0x97ED7D80, 0x97EC7F00, - 0x97EB8080, 0x97EA8200, 0x97E98380, - 0x97E88500, 0x97E78680, 0x97E68800, - 0x97E58980, 0x97E48B00, 0x97E38C80, - 0x97E28E00, 0x97E18F80, 0x97E09100, - 0x97DF9280, 0x97DE9400, 0x97DD9580, - 0x97DC9700, 0x97DB9880, 0x97DA9A00, - 0x97D99B80, 0x97D89D00, 0x97D79E80, - 0x97D6A000, 0x97D5A180, 0x97D4A300, - 0x97D3A480, 0x97D2A600, 0x97D1A780, - 0x97D0A900, 0x97CFAA80, 0x97CEAC00, - 0x97CDAD80, 0x97CCAF00, 0x97CBB080, - 0x97CAB200, 0x97C9B380, 0x97C8B500, - 0x97C7B680, 0x97C6B800, 0x97C5B980, - 0x97C4BB00, 0x97C3BC80, 0x97C2BE00, - 0x97C1BF80, 0x97C0C100, 0x97BFC280, - 0x97BEC400, 0x97BDC580, 0x97BCC700, - 0x97BBC880, 0x97BACA00, 0x97B9CB80, - 0x97B8CD00, 0x97B7CE80, 0x97B6D000, - 0x97B5D180, 0x97B4D300, 0x97B3D480, - 0x97B2D600, 0x97B1D780, 0x97B0D900, - 0x97AFDA80, 0x97AEDC00, 0x97ADDD80, - 0x97ACDF00, 0x97ABE080, 0x97AAE200, - 0x97A9E380, 0x97A8E500, 0x97A7E680, - 0x97A6E800, 0x97A5E980, 0x97A4EB00, - 0x97A3EC80, 0x97A2EE00, 0x97A1EF80, - 0x97A0F100, 0x979FF280, 0x979EF400, - 0x979DF580, 0x979CF700, 0x979BF880, - 0x979AFA00, 0x9799FB80, 0x9798FD00, - 0x9797FE80, 0x97970000, 0x97960180, - 0x97950300, 0x97940480, 0x97930600, - 0x97920780, 0x97910900, 0x97900A80, - 0x978F0C00, 0x978E0D80, 0x978D0F00, - 0x978C1080, 0x978B1200, 0x978A1380, - 0x97891500, 0x97881680, 0x97871800, - 0x97861980, 0x97851B00, 0x97841C80, - 0x97831E00, 0x97821F80, 0x97812100, - 0x97802280, 0x977F2400, 0x977E2580, - 0x977D2700, 0x977C2880, 0x977B2A00, - 0x977A2B80, 0x97792D00, 0x97782E80, - 0x97773000, 0x97763180, 0x97753300, - 0x97743480, 0x97733600, 0x97723780, - 0x97713900, 0x97703A80, 0x976F3C00, - 0x976E3D80, 0x976D3F00, 0x976C4080, - 0x976B4200, 0x976A4380, 0x97694500, - 0x97684680, 0x97674800, 0x97664980, - 0x97654B00, 0x97644C80, 0x97634E00, - 0x97624F80, 0x97615100, 0x97605280, - 0x975F5400, 0x975E5580, 0x975D5700, - 0x975C5880, 0x975B5A00, 0x975A5B80, - 0x97595D00, 0x97585E80, 0x97576000, - 0x97566180, 0x97556300, 0x97546480, - 0x97536600, 0x97526780, 0x97516900, - 0x97506A80, 0x974F6C00, 0x974E6D80, - 0x974D6F00, 0x974C7080, 0x974B7200, - 0x974A7380, 0x97497500, 0x97487680, - 0x97477800, 0x97467980, 0x97457B00, - 0x97447C80, 0x97437E00, 0x97427F80, - 0x97418100, 0x97408280, 0x973F8400, - 0x973E8580, 0x973D8700, 0x973C8880, - 0x973B8A00, 0x973A8B80, 0x97398D00, - 0x97388E80, 0x97379000, 0x97369180, - 0x97359300, 0x97349480, 0x97339600, - 0x97329780, 0x97319900, 0x97309A80, - 0x972F9C00, 0x972E9D80, 0x972D9F00, - 0x972CA080, 0x972BA200, 0x972AA380, - 0x9729A500, 0x9728A680, 0x9727A800, - 0x9726A980, 0x9725AB00, 0x9724AC80, - 0x9723AE00, 0x9722AF80, 0x9721B100, - 0x9720B280, 0x971FB400, 0x971EB580, - 0x971DB700, 0x971CB880, 0x971BBA00, - 0x971ABB80, 0x9719BD00, 0x9718BE80, - 0x9717C000, 0x9716C180, 0x9715C300, - 0x9714C480, 0x9713C600, 0x9712C780, - 0x9711C900, 0x9710CA80, 0x970FCC00, - 0x970ECD80, 0x970DCF00, 0x970CD080, - 0x970BD200, 0x970AD380, 0x9709D500, - 0x9708D680, 0x9707D800, 0x9706D980, - 0x9705DB00, 0x9704DC80, 0x9703DE00, - 0x9702DF80, 0x9701E100, 0x9700E280, - 0x96FFE400, 0x96FEE580, 0x96FDE700, - 0x96FCE880, 0x96FBEA00, 0x96FAEB80, - 0x96F9ED00, 0x96F8EE80, 0x96F7F000, - 0x96F6F180, 0x96F5F300, 0x96F4F480, - 0x96F3F600, 0x96F2F780, 0x96F1F900, - 0x96F0FA80, 0x96EFFC00, 0x96EEFD80, - 0x96EDFF00, 0x96ED0080, 0x96EC0200, - 0x96EB0380, 0x96EA0500, 0x96E90680, - 0x96E80800, 0x96E70980, 0x96E60B00, - 0x96E50C80, 0x96E40E00, 0x96E30F80, - 0x96E21100, 0x96E11280, 0x96E01400, - 0x96DF1580, 0x96DE1700, 0x96DD1880, - 0x96DC1A00, 0x96DB1B80, 0x96DA1D00, - 0x96D91E80, 0x96D82000, 0x96D72180, - 0x96D62300, 0x96D52480, 0x96D42600, - 0x96D32780, 0x96D22900, 0x96D12A80, - 0x96D02C00, 0x96CF2D80, 0x96CE2F00, - 0x96CD3080, 0x96CC3200, 0x96CB3380, - 0x96CA3500, 0x96C93680, 0x96C83800, - 0x96C73980, 0x96C63B00, 0x96C53C80, - 0x96C43E00, 0x96C33F80, 0x96C24100, - 0x96C14280, 0x96C04400, 0x96BF4580, - 0x96BE4700, 0x96BD4880, 0x96BC4A00, - 0x96BB4B80, 0x96BA4D00, 0x96B94E80, - 0x96B85000, 0x96B75180, 0x96B65300, - 0x96B55480, 0x96B45600, 0x96B35780, - 0x96B25900, 0x96B15A80, 0x96B05C00, - 0x96AF5D80, 0x96AE5F00, 0x96AD6080, - 0x96AC6200, 0x96AB6380, 0x96AA6500, - 0x96A96680, 0x96A86800, 0x96A76980, - 0x96A66B00, 0x96A56C80, 0x96A46E00, - 0x96A36F80, 0x96A27100, 0x96A17280, - 0x96A07400, 0x969F7580, 0x969E7700, - 0x969D7880, 0x969C7A00, 0x969B7B80, - 0x969A7D00, 0x96997E80, 0x96988000, - 0x96978180, 0x96968300, 0x96958480, - 0x96948600, 0x96938780, 0x96928900, - 0x96918A80, 0x96908C00, 0x968F8D80, - 0x968E8F00, 0x968D9080, 0x968C9200, - 0x968B9380, 0x968A9500, 0x96899680, - 0x96889800, 0x96879980, 0x96869B00, - 0x96859C80, 0x96849E00, 0x96839F80, - 0x9682A100, 0x9681A280, 0x9680A400, - 0x967FA580, 0x967EA700, 0x967DA880, - 0x967CAA00, 0x967BAB80, 0x967AAD00, - 0x9679AE80, 0x9678B000, 0x9677B180, - 0x9676B300, 0x9675B480, 0x9674B600, - 0x9673B780, 0x9672B900, 0x9671BA80, - 0x9670BC00, 0x966FBD80, 0x966EBF00, - 0x966DC080, 0x966CC200, 0x966BC380, - 0x966AC500, 0x9669C680, 0x9668C800, - 0x9667C980, 0x9666CB00, 0x9665CC80, - 0x9664CE00, 0x9663CF80, 0x9662D100, - 0x9661D280, 0x9660D400, 0x965FD580, - 0x965ED700, 0x965DD880, 0x965CDA00, - 0x965BDB80, 0x965ADD00, 0x9659DE80, - 0x9658E000, 0x9657E180, 0x9656E300, - 0x9655E480, 0x9654E600, 0x9653E780, - 0x9652E900, 0x9651EA80, 0x9650EC00, - 0x964FED80, 0x964EEF00, 0x964DF080, - 0x964CF200, 0x964BF380, 0x964AF500, - 0x9649F680, 0x9648F800, 0x9647F980, - 0x9646FB00, 0x9645FC80, 0x9644FE00, - 0x9643FF80, 0x96430100, 0x96420280, - 0x96410400, 0x96400580, 0x963F0700, - 0x963E0880, 0x963D0A00, 0x963C0B80, - 0x963B0D00, 0x963A0E80, 0x96391000, - 0x96381180, 0x96371300, 0x96361480, - 0x96351600, 0x96341780, 0x96331900, - 0x96321A80, 0x96311C00, 0x96301D80, - 0x962F1F00, 0x962E2080, 0x962D2200, - 0x962C2380, 0x962B2500, 0x962A2680, - 0x96292800, 0x96282980, 0x96272B00, - 0x96262C80, 0x96252E00, 0x96242F80, - 0x96233100, 0x96223280, 0x96213400, - 0x96203580, 0x961F3700, 0x961E3880, - 0x961D3A00, 0x961C3B80, 0x961B3D00, - 0x961A3E80, 0x96194000, 0x96184180, - 0x96174300, 0x96164480, 0x96154600, - 0x96144780, 0x96134900, 0x96124A80, - 0x96114C00, 0x96104D80, 0x960F4F00, - 0x960E5080, 0x960D5200, 0x960C5380, - 0x960B5500, 0x960A5680, 0x96095800, - 0x96085980, 0x96075B00, 0x96065C80, - 0x96055E00, 0x96045F80, 0x96036100, - 0x96026280, 0x96016400, 0x96006580, - 0x95FF6700, 0x95FE6880, 0x95FD6A00, - 0x95FC6B80, 0x95FB6D00, 0x95FA6E80, - 0x95F97000, 0x95F87180, 0x95F77300, - 0x95F67480, 0x95F57600, 0x95F47780, - 0x95F37900, 0x95F27A80, 0x95F17C00, - 0x95F07D80, 0x95EF7F00, 0x95EE8080, - 0x95ED8200, 0x95EC8380, 0x95EB8500, - 0x95EA8680, 0x95E98800, 0x95E88980, - 0x95E78B00, 0x95E68C80, 0x95E58E00, - 0x95E48F80, 0x95E39100, 0x95E29280, - 0x95E19400, 0x95E09580, 0x95DF9700, - 0x95DE9880, 0x95DD9A00, 0x95DC9B80, - 0x95DB9D00, 0x95DA9E80, 0x95D9A000, - 0x95D8A180, 0x95D7A300, 0x95D6A480, - 0x95D5A600, 0x95D4A780, 0x95D3A900, - 0x95D2AA80, 0x95D1AC00, 0x95D0AD80, - 0x95CFAF00, 0x95CEB080, 0x95CDB200, - 0x95CCB380, 0x95CBB500, 0x95CAB680, - 0x95C9B800, 0x95C8B980, 0x95C7BB00, - 0x95C6BC80, 0x95C5BE00, 0x95C4BF80, - 0x95C3C100, 0x95C2C280, 0x95C1C400, - 0x95C0C580, 0x95BFC700, 0x95BEC880, - 0x95BDCA00, 0x95BCCB80, 0x95BBCD00, - 0x95BACE80, 0x95B9D000, 0x95B8D180, - 0x95B7D300, 0x95B6D480, 0x95B5D600, - 0x95B4D780, 0x95B3D900, 0x95B2DA80, - 0x95B1DC00, 0x95B0DD80, 0x95AFDF00, - 0x95AEE080, 0x95ADE200, 0x95ACE380, - 0x95ABE500, 0x95AAE680, 0x95A9E800, - 0x95A8E980, 0x95A7EB00, 0x95A6EC80, - 0x95A5EE00, 0x95A4EF80, 0x95A3F100, - 0x95A2F280, 0x95A1F400, 0x95A0F580, - 0x959FF700, 0x959EF880, 0x959DFA00, - 0x959CFB80, 0x959BFD00, 0x959AFE80, - 0x959A0000, 0x95990180, 0x95980300, - 0x95970480, 0x95960600, 0x95950780, - 0x95940900, 0x95930A80, 0x95920C00, - 0x95910D80, 0x95900F00, 0x958F1080, - 0x958E1200, 0x958D1380, 0x958C1500, - 0x958B1680, 0x958A1800, 0x95891980, - 0x95881B00, 0x95871C80, 0x95861E00, - 0x95851F80, 0x95842100, 0x95832280, - 0x95822400, 0x95812580, 0x95802700, - 0x957F2880, 0x957E2A00, 0x957D2B80, - 0x957C2D00, 0x957B2E80, 0x957A3000, - 0x95793180, 0x95783300, 0x95773480, - 0x95763600, 0x95753780, 0x95743900, - 0x95733A80, 0x95723C00, 0x95713D80, - 0x95703F00, 0x956F4080, 0x956E4200, - 0x956D4380, 0x956C4500, 0x956B4680, - 0x956A4800, 0x95694980, 0x95684B00, - 0x95674C80, 0x95664E00, 0x95654F80, - 0x95645100, 0x95635280, 0x95625400, - 0x95615580, 0x95605700, 0x955F5880, - 0x955E5A00, 0x955D5B80, 0x955C5D00, - 0x955B5E80, 0x955A6000, 0x95596180, - 0x95586300, 0x95576480, 0x95566600, - 0x95556780, 0x95546900, 0x95536A80, - 0x95526C00, 0x95516D80, 0x95506F00, - 0x954F7080, 0x954E7200, 0x954D7380, - 0x954C7500, 0x954B7680, 0x954A7800, - 0x95497980, 0x95487B00, 0x95477C80, - 0x95467E00, 0x95457F80, 0x95448100, - 0x95438280, 0x95428400, 0x95418580, - 0x95408700, 0x953F8880, 0x953E8A00, - 0x953D8B80, 0x953C8D00, 0x953B8E80, - 0x953A9000, 0x95399180, 0x95389300, - 0x95379480, 0x95369600, 0x95359780, - 0x95349900, 0x95339A80, 0x95329C00, - 0x95319D80, 0x95309F00, 0x952FA080, - 0x952EA200, 0x952DA380, 0x952CA500, - 0x952BA680, 0x952AA800, 0x9529A980, - 0x9528AB00, 0x9527AC80, 0x9526AE00, - 0x9525AF80, 0x9524B100, 0x9523B280, - 0x9522B400, 0x9521B580, 0x9520B700, - 0x951FB880, 0x951EBA00, 0x951DBB80, - 0x951CBD00, 0x951BBE80, 0x951AC000, - 0x9519C180, 0x9518C300, 0x9517C480, - 0x9516C600, 0x9515C780, 0x9514C900, - 0x9513CA80, 0x9512CC00, 0x9511CD80, - 0x9510CF00, 0x950FD080, 0x950ED200, - 0x950DD380, 0x950CD500, 0x950BD680, - 0x950AD800, 0x9509D980, 0x9508DB00, - 0x9507DC80, 0x9506DE00, 0x9505DF80, - 0x9504E100, 0x9503E280, 0x9502E400, - 0x9501E580, 0x9500E700, 0x94FFE880, - 0x94FEEA00, 0x94FDEB80, 0x94FCED00, - 0x94FBEE80, 0x94FAF000, 0x94F9F180, - 0x94F8F300, 0x94F7F480, 0x94F6F600, - 0x94F5F780, 0x94F4F900, 0x94F3FA80, - 0x94F2FC00, 0x94F1FD80, 0x94F0FF00, - 0x94F00080, 0x94EF0200, 0x94EE0380, - 0x94ED0500, 0x94EC0680, 0x94EB0800, - 0x94EA0980, 0x94E90B00, 0x94E80C80, - 0x94E70E00, 0x94E60F80, 0x94E51100, - 0x94E41280, 0x94E31400, 0x94E21580, - 0x94E11700, 0x94E01880, 0x94DF1A00, - 0x94DE1B80, 0x94DD1D00, 0x94DC1E80, - 0x94DB2000, 0x94DA2180, 0x94D92300, - 0x94D82480, 0x94D72600, 0x94D62780, - 0x94D52900, 0x94D42A80, 0x94D32C00, - 0x94D22D80, 0x94D12F00, 0x94D03080, - 0x94CF3200, 0x94CE3380, 0x94CD3500, - 0x94CC3680, 0x94CB3800, 0x94CA3980, - 0x94C93B00, 0x94C83C80, 0x94C73E00, - 0x94C63F80, 0x94C54100, 0x94C44280, - 0x94C34400, 0x94C24580, 0x94C14700, - 0x94C04880, 0x94BF4A00, 0x94BE4B80, - 0x94BD4D00, 0x94BC4E80, 0x94BB5000, - 0x94BA5180, 0x94B95300, 0x94B85480, - 0x94B75600, 0x94B65780, 0x94B55900, - 0x94B45A80, 0x94B35C00, 0x94B25D80, - 0x94B15F00, 0x94B06080, 0x94AF6200, - 0x94AE6380, 0x94AD6500, 0x94AC6680, - 0x94AB6800, 0x94AA6980, 0x94A96B00, - 0x94A86C80, 0x94A76E00, 0x94A66F80, - 0x94A57100, 0x94A47280, 0x94A37400, - 0x94A27580, 0x94A17700, 0x94A07880, - 0x949F7A00, 0x949E7B80, 0x949D7D00, - 0x949C7E80, 0x949B8000, 0x949A8180, - 0x94998300, 0x94988480, 0x94978600, - 0x94968780, 0x94958900, 0x94948A80, - 0x94938C00, 0x94928D80, 0x94918F00, - 0x94909080, 0x948F9200, 0x948E9380, - 0x948D9500, 0x948C9680, 0x948B9800, - 0x948A9980, 0x94899B00, 0x94889C80, - 0x94879E00, 0x94869F80, 0x9485A100, - 0x9484A280, 0x9483A400, 0x9482A580, - 0x9481A700, 0x9480A880, 0x947FAA00, - 0x947EAB80, 0x947DAD00, 0x947CAE80, - 0x947BB000, 0x947AB180, 0x9479B300, - 0x9478B480, 0x9477B600, 0x9476B780, - 0x9475B900, 0x9474BA80, 0x9473BC00, - 0x9472BD80, 0x9471BF00, 0x9470C080, - 0x946FC200, 0x946EC380, 0x946DC500, - 0x946CC680, 0x946BC800, 0x946AC980, - 0x9469CB00, 0x9468CC80, 0x9467CE00, - 0x9466CF80, 0x9465D100, 0x9464D280, - 0x9463D400, 0x9462D580, 0x9461D700, - 0x9460D880, 0x945FDA00, 0x945EDB80, - 0x945DDD00, 0x945CDE80, 0x945BE000, - 0x945AE180, 0x9459E300, 0x9458E480, - 0x9457E600, 0x9456E780, 0x9455E900, - 0x9454EA80, 0x9453EC00, 0x9452ED80, - 0x9451EF00, 0x9450F080, 0x944FF200, - 0x944EF380, 0x944DF500, 0x944CF680, - 0x944BF800, 0x944AF980, 0x9449FB00, - 0x9448FC80, 0x9447FE00, 0x9446FF80, - 0x94460100, 0x94450280, 0x94440400, - 0x94430580, 0x94420700, 0x94410880, - 0x94400A00, 0x943F0B80, 0x943E0D00, - 0x943D0E80, 0x943C1000, 0x943B1180, - 0x943A1300, 0x94391480, 0x94381600, - 0x94371780, 0x94361900, 0x94351A80, - 0x94341C00, 0x94331D80, 0x94321F00, - 0x94312080, 0x94302200, 0x942F2380, - 0x942E2500, 0x942D2680, 0x942C2800, - 0x942B2980, 0x942A2B00, 0x94292C80, - 0x94282E00, 0x94272F80, 0x94263100, - 0x94253280, 0x94243400, 0x94233580, - 0x94223700, 0x94213880, 0x94203A00, - 0x941F3B80, 0x941E3D00, 0x941D3E80, - 0x941C4000, 0x941B4180, 0x941A4300, - 0x94194480, 0x94184600, 0x94174780, - 0x94164900, 0x94154A80, 0x94144C00, - 0x94134D80, 0x94124F00, 0x94115080, - 0x94105200, 0x940F5380, 0x940E5500, - 0x940D5680, 0x940C5800, 0x940B5980, - 0x940A5B00, 0x94095C80, 0x94085E00, - 0x94075F80, 0x94066100, 0x94056280, - 0x94046400, 0x94036580, 0x94026700, - 0x94016880, 0x94006A00, 0x93FF6B80, - 0x93FE6D00, 0x93FD6E80, 0x93FC7000, - 0x93FB7180, 0x93FA7300, 0x93F97480, - 0x93F87600, 0x93F77780, 0x93F67900, - 0x93F57A80, 0x93F47C00, 0x93F37D80, - 0x93F27F00, 0x93F18080, 0x93F08200, - 0x93EF8380, 0x93EE8500, 0x93ED8680, - 0x93EC8800, 0x93EB8980, 0x93EA8B00, - 0x93E98C80, 0x93E88E00, 0x93E78F80, - 0x93E69100, 0x93E59280, 0x93E49400, - 0x93E39580, 0x93E29700, 0x93E19880, - 0x93E09A00, 0x93DF9B80, 0x93DE9D00, - 0x93DD9E80, 0x93DCA000, 0x93DBA180, - 0x93DAA300, 0x93D9A480, 0x93D8A600, - 0x93D7A780, 0x93D6A900, 0x93D5AA80, - 0x93D4AC00, 0x93D3AD80, 0x93D2AF00, - 0x93D1B080, 0x93D0B200, 0x93CFB380, - 0x93CEB500, 0x93CDB680, 0x93CCB800, - 0x93CBB980, 0x93CABB00, 0x93C9BC80, - 0x93C8BE00, 0x93C7BF80, 0x93C6C100, - 0x93C5C280, 0x93C4C400, 0x93C3C580, - 0x93C2C700, 0x93C1C880, 0x93C0CA00, - 0x93BFCB80, 0x93BECD00, 0x93BDCE80, - 0x93BCD000, 0x93BBD180, 0x93BAD300, - 0x93B9D480, 0x93B8D600, 0x93B7D780, - 0x93B6D900, 0x93B5DA80, 0x93B4DC00, - 0x93B3DD80, 0x93B2DF00, 0x93B1E080, - 0x93B0E200, 0x93AFE380, 0x93AEE500, - 0x93ADE680, 0x93ACE800, 0x93ABE980, - 0x93AAEB00, 0x93A9EC80, 0x93A8EE00, - 0x93A7EF80, 0x93A6F100, 0x93A5F280, - 0x93A4F400, 0x93A3F580, 0x93A2F700, - 0x93A1F880, 0x93A0FA00, 0x939FFB80, - 0x939EFD00, 0x939DFE80, 0x939D0000, - 0x939C0180, 0x939B0300, 0x939A0480, - 0x93990600, 0x93980780, 0x93970900, - 0x93960A80, 0x93950C00, 0x93940D80, - 0x93930F00, 0x93921080, 0x93911200, - 0x93901380, 0x938F1500, 0x938E1680, - 0x938D1800, 0x938C1980, 0x938B1B00, - 0x938A1C80, 0x93891E00, 0x93881F80, - 0x93872100, 0x93862280, 0x93852400, - 0x93842580, 0x93832700, 0x93822880, - 0x93812A00, 0x93802B80, 0x937F2D00, - 0x937E2E80, 0x937D3000, 0x937C3180, - 0x937B3300, 0x937A3480, 0x93793600, - 0x93783780, 0x93773900, 0x93763A80, - 0x93753C00, 0x93743D80, 0x93733F00, - 0x93724080, 0x93714200, 0x93704380, - 0x936F4500, 0x936E4680, 0x936D4800, - 0x936C4980, 0x936B4B00, 0x936A4C80, - 0x93694E00, 0x93684F80, 0x93675100, - 0x93665280, 0x93655400, 0x93645580, - 0x93635700, 0x93625880, 0x93615A00, - 0x93605B80, 0x935F5D00, 0x935E5E80, - 0x935D6000, 0x935C6180, 0x935B6300, - 0x935A6480, 0x93596600, 0x93586780, - 0x93576900, 0x93566A80, 0x93556C00, - 0x93546D80, 0x93536F00, 0x93527080, - 0x93517200, 0x93507380, 0x934F7500, - 0x934E7680, 0x934D7800, 0x934C7980, - 0x934B7B00, 0x934A7C80, 0x93497E00, - 0x93487F80, 0x93478100, 0x93468280, - 0x93458400, 0x93448580, 0x93438700, - 0x93428880, 0x93418A00, 0x93408B80, - 0x933F8D00, 0x933E8E80, 0x933D9000, - 0x933C9180, 0x933B9300, 0x933A9480, - 0x93399600, 0x93389780, 0x93379900, - 0x93369A80, 0x93359C00, 0x93349D80, - 0x93339F00, 0x9332A080, 0x9331A200, - 0x9330A380, 0x932FA500, 0x932EA680, - 0x932DA800, 0x932CA980, 0x932BAB00, - 0x932AAC80, 0x9329AE00, 0x9328AF80, - 0x9327B100, 0x9326B280, 0x9325B400, - 0x9324B580, 0x9323B700, 0x9322B880, - 0x9321BA00, 0x9320BB80, 0x931FBD00, - 0x931EBE80, 0x931DC000, 0x931CC180, - 0x931BC300, 0x931AC480, 0x9319C600, - 0x9318C780, 0x9317C900, 0x9316CA80, - 0x9315CC00, 0x9314CD80, 0x9313CF00, - 0x9312D080, 0x9311D200, 0x9310D380, - 0x930FD500, 0x930ED680, 0x930DD800, - 0x930CD980, 0x930BDB00, 0x930ADC80, - 0x9309DE00, 0x9308DF80, 0x9307E100, - 0x9306E280, 0x9305E400, 0x9304E580, - 0x9303E700, 0x9302E880, 0x9301EA00, - 0x9300EB80, 0x92FFED00, 0x92FEEE80, - 0x92FDF000, 0x92FCF180, 0x92FBF300, - 0x92FAF480, 0x92F9F600, 0x92F8F780, - 0x92F7F900, 0x92F6FA80, 0x92F5FC00, - 0x92F4FD80, 0x92F3FF00, 0x92F30080, - 0x92F20200, 0x92F10380, 0x92F00500, - 0x92EF0680, 0x92EE0800, 0x92ED0980, - 0x92EC0B00, 0x92EB0C80, 0x92EA0E00, - 0x92E90F80, 0x92E81100, 0x92E71280, - 0x92E61400, 0x92E51580, 0x92E41700, - 0x92E31880, 0x92E21A00, 0x92E11B80, - 0x92E01D00, 0x92DF1E80, 0x92DE2000, - 0x92DD2180, 0x92DC2300, 0x92DB2480, - 0x92DA2600, 0x92D92780, 0x92D82900, - 0x92D72A80, 0x92D62C00, 0x92D52D80, - 0x92D42F00, 0x92D33080, 0x92D23200, - 0x92D13380, 0x92D03500, 0x92CF3680, - 0x92CE3800, 0x92CD3980, 0x92CC3B00, - 0x92CB3C80, 0x92CA3E00, 0x92C93F80, - 0x92C84100, 0x92C74280, 0x92C64400, - 0x92C54580, 0x92C44700, 0x92C34880, - 0x92C24A00, 0x92C14B80, 0x92C04D00, - 0x92BF4E80, 0x92BE5000, 0x92BD5180, - 0x92BC5300, 0x92BB5480, 0x92BA5600, - 0x92B95780, 0x92B85900, 0x92B75A80, - 0x92B65C00, 0x92B55D80, 0x92B45F00, - 0x92B36080, 0x92B26200, 0x92B16380, - 0x92B06500, 0x92AF6680, 0x92AE6800, - 0x92AD6980, 0x92AC6B00, 0x92AB6C80, - 0x92AA6E00, 0x92A96F80, 0x92A87100, - 0x92A77280, 0x92A67400, 0x92A57580, - 0x92A47700, 0x92A37880, 0x92A27A00, - 0x92A17B80, 0x92A07D00, 0x929F7E80, - 0x929E8000, 0x929D8180, 0x929C8300, - 0x929B8480, 0x929A8600, 0x92998780, - 0x92988900, 0x92978A80, 0x92968C00, - 0x92958D80, 0x92948F00, 0x92939080, - 0x92929200, 0x92919380, 0x92909500, - 0x928F9680, 0x928E9800, 0x928D9980, - 0x928C9B00, 0x928B9C80, 0x928A9E00, - 0x92899F80, 0x9288A100, 0x9287A280, - 0x9286A400, 0x9285A580, 0x9284A700, - 0x9283A880, 0x9282AA00, 0x9281AB80, - 0x9280AD00, 0x927FAE80, 0x927EB000, - 0x927DB180, 0x927CB300, 0x927BB480, - 0x927AB600, 0x9279B780, 0x9278B900, - 0x9277BA80, 0x9276BC00, 0x9275BD80, - 0x9274BF00, 0x9273C080, 0x9272C200, - 0x9271C380, 0x9270C500, 0x926FC680, - 0x926EC800, 0x926DC980, 0x926CCB00, - 0x926BCC80, 0x926ACE00, 0x9269CF80, - 0x9268D100, 0x9267D280, 0x9266D400, - 0x9265D580, 0x9264D700, 0x9263D880, - 0x9262DA00, 0x9261DB80, 0x9260DD00, - 0x925FDE80, 0x925EE000, 0x925DE180, - 0x925CE300, 0x925BE480, 0x925AE600, - 0x9259E780, 0x9258E900, 0x9257EA80, - 0x9256EC00, 0x9255ED80, 0x9254EF00, - 0x9253F080, 0x9252F200, 0x9251F380, - 0x9250F500, 0x924FF680, 0x924EF800, - 0x924DF980, 0x924CFB00, 0x924BFC80, - 0x924AFE00, 0x9249FF80, 0x92490100, - 0x92480280, 0x92470400, 0x92460580, - 0x92450700, 0x92440880, 0x92430A00, - 0x92420B80, 0x92410D00, 0x92400E80, - 0x923F1000, 0x923E1180, 0x923D1300, - 0x923C1480, 0x923B1600, 0x923A1780, - 0x92391900, 0x92381A80, 0x92371C00, - 0x92361D80, 0x92351F00, 0x92342080, - 0x92332200, 0x92322380, 0x92312500, - 0x92302680, 0x922F2800, 0x922E2980, - 0x922D2B00, 0x922C2C80, 0x922B2E00, - 0x922A2F80, 0x92293100, 0x92283280, - 0x92273400, 0x92263580, 0x92253700, - 0x92243880, 0x92233A00, 0x92223B80, - 0x92213D00, 0x92203E80, 0x921F4000, - 0x921E4180, 0x921D4300, 0x921C4480, - 0x921B4600, 0x921A4780, 0x92194900, - 0x92184A80, 0x92174C00, 0x92164D80, - 0x92154F00, 0x92145080, 0x92135200, - 0x92125380, 0x92115500, 0x92105680, - 0x920F5800, 0x920E5980, 0x920D5B00, - 0x920C5C80, 0x920B5E00, 0x920A5F80, - 0x92096100, 0x92086280, 0x92076400, - 0x92066580, 0x92056700, 0x92046880, - 0x92036A00, 0x92026B80, 0x92016D00, - 0x92006E80, 0x91FF7000, 0x91FE7180, - 0x91FD7300, 0x91FC7480, 0x91FB7600, - 0x91FA7780, 0x91F97900, 0x91F87A80, - 0x91F77C00, 0x91F67D80, 0x91F57F00, - 0x91F48080, 0x91F38200, 0x91F28380, - 0x91F18500, 0x91F08680, 0x91EF8800, - 0x91EE8980, 0x91ED8B00, 0x91EC8C80, - 0x91EB8E00, 0x91EA8F80, 0x91E99100, - 0x91E89280, 0x91E79400, 0x91E69580, - 0x91E59700, 0x91E49880, 0x91E39A00, - 0x91E29B80, 0x91E19D00, 0x91E09E80, - 0x91DFA000, 0x91DEA180, 0x91DDA300, - 0x91DCA480, 0x91DBA600, 0x91DAA780, - 0x91D9A900, 0x91D8AA80, 0x91D7AC00, - 0x91D6AD80, 0x91D5AF00, 0x91D4B080, - 0x91D3B200, 0x91D2B380, 0x91D1B500, - 0x91D0B680, 0x91CFB800, 0x91CEB980, - 0x91CDBB00, 0x91CCBC80, 0x91CBBE00, - 0x91CABF80, 0x91C9C100, 0x91C8C280, - 0x91C7C400, 0x91C6C580, 0x91C5C700, - 0x91C4C880, 0x91C3CA00, 0x91C2CB80, - 0x91C1CD00, 0x91C0CE80, 0x91BFD000, - 0x91BED180, 0x91BDD300, 0x91BCD480, - 0x91BBD600, 0x91BAD780, 0x91B9D900, - 0x91B8DA80, 0x91B7DC00, 0x91B6DD80, - 0x91B5DF00, 0x91B4E080, 0x91B3E200, - 0x91B2E380, 0x91B1E500, 0x91B0E680, - 0x91AFE800, 0x91AEE980, 0x91ADEB00, - 0x91ACEC80, 0x91ABEE00, 0x91AAEF80, - 0x91A9F100, 0x91A8F280, 0x91A7F400, - 0x91A6F580, 0x91A5F700, 0x91A4F880, - 0x91A3FA00, 0x91A2FB80, 0x91A1FD00, - 0x91A0FE80, 0x91A00000, 0x919F0F80, - 0x919E1F00, 0x919D2E80, 0x919C3E00, - 0x919B4D80, 0x919A5D00, 0x91996C80, - 0x91987C00, 0x91978B80, 0x91969B00, - 0x9195AA80, 0x9194BA00, 0x9193C980, - 0x9192D900, 0x9191E880, 0x9190F800, - 0x91900780, 0x918F1700, 0x918E2680, - 0x918D3600, 0x918C4580, 0x918B5500, - 0x918A6480, 0x91897400, 0x91888380, - 0x91879300, 0x9186A280, 0x9185B200, - 0x9184C180, 0x9183D100, 0x9182E080, - 0x9181F000, 0x9180FF80, 0x91800F00, - 0x917F1E80, 0x917E2E00, 0x917D3D80, - 0x917C4D00, 0x917B5C80, 0x917A6C00, - 0x91797B80, 0x91788B00, 0x91779A80, - 0x9176AA00, 0x9175B980, 0x9174C900, - 0x9173D880, 0x9172E800, 0x9171F780, - 0x91710700, 0x91701680, 0x916F2600, - 0x916E3580, 0x916D4500, 0x916C5480, - 0x916B6400, 0x916A7380, 0x91698300, - 0x91689280, 0x9167A200, 0x9166B180, - 0x9165C100, 0x9164D080, 0x9163E000, - 0x9162EF80, 0x9161FF00, 0x91610E80, - 0x91601E00, 0x915F2D80, 0x915E3D00, - 0x915D4C80, 0x915C5C00, 0x915B6B80, - 0x915A7B00, 0x91598A80, 0x91589A00, - 0x9157A980, 0x9156B900, 0x9155C880, - 0x9154D800, 0x9153E780, 0x9152F700, - 0x91520680, 0x91511600, 0x91502580, - 0x914F3500, 0x914E4480, 0x914D5400, - 0x914C6380, 0x914B7300, 0x914A8280, - 0x91499200, 0x9148A180, 0x9147B100, - 0x9146C080, 0x9145D000, 0x9144DF80, - 0x9143EF00, 0x9142FE80, 0x91420E00, - 0x91411D80, 0x91402D00, 0x913F3C80, - 0x913E4C00, 0x913D5B80, 0x913C6B00, - 0x913B7A80, 0x913A8A00, 0x91399980, - 0x9138A900, 0x9137B880, 0x9136C800, - 0x9135D780, 0x9134E700, 0x9133F680, - 0x91330600, 0x91321580, 0x91312500, - 0x91303480, 0x912F4400, 0x912E5380, - 0x912D6300, 0x912C7280, 0x912B8200, - 0x912A9180, 0x9129A100, 0x9128B080, - 0x9127C000, 0x9126CF80, 0x9125DF00, - 0x9124EE80, 0x9123FE00, 0x91230D80, - 0x91221D00, 0x91212C80, 0x91203C00, - 0x911F4B80, 0x911E5B00, 0x911D6A80, - 0x911C7A00, 0x911B8980, 0x911A9900, - 0x9119A880, 0x9118B800, 0x9117C780, - 0x9116D700, 0x9115E680, 0x9114F600, - 0x91140580, 0x91131500, 0x91122480, - 0x91113400, 0x91104380, 0x910F5300, - 0x910E6280, 0x910D7200, 0x910C8180, - 0x910B9100, 0x910AA080, 0x9109B000, - 0x9108BF80, 0x9107CF00, 0x9106DE80, - 0x9105EE00, 0x9104FD80, 0x91040D00, - 0x91031C80, 0x91022C00, 0x91013B80, - 0x91004B00, 0x90FF5A80, 0x90FE6A00, - 0x90FD7980, 0x90FC8900, 0x90FB9880, - 0x90FAA800, 0x90F9B780, 0x90F8C700, - 0x90F7D680, 0x90F6E600, 0x90F5F580, - 0x90F50500, 0x90F41480, 0x90F32400, - 0x90F23380, 0x90F14300, 0x90F05280, - 0x90EF6200, 0x90EE7180, 0x90ED8100, - 0x90EC9080, 0x90EBA000, 0x90EAAF80, - 0x90E9BF00, 0x90E8CE80, 0x90E7DE00, - 0x90E6ED80, 0x90E5FD00, 0x90E50C80, - 0x90E41C00, 0x90E32B80, 0x90E23B00, - 0x90E14A80, 0x90E05A00, 0x90DF6980, - 0x90DE7900, 0x90DD8880, 0x90DC9800, - 0x90DBA780, 0x90DAB700, 0x90D9C680, - 0x90D8D600, 0x90D7E580, 0x90D6F500, - 0x90D60480, 0x90D51400, 0x90D42380, - 0x90D33300, 0x90D24280, 0x90D15200, - 0x90D06180, 0x90CF7100, 0x90CE8080, - 0x90CD9000, 0x90CC9F80, 0x90CBAF00, - 0x90CABE80, 0x90C9CE00, 0x90C8DD80, - 0x90C7ED00, 0x90C6FC80, 0x90C60C00, - 0x90C51B80, 0x90C42B00, 0x90C33A80, - 0x90C24A00, 0x90C15980, 0x90C06900, - 0x90BF7880, 0x90BE8800, 0x90BD9780, - 0x90BCA700, 0x90BBB680, 0x90BAC600, - 0x90B9D580, 0x90B8E500, 0x90B7F480, - 0x90B70400, 0x90B61380, 0x90B52300, - 0x90B43280, 0x90B34200, 0x90B25180, - 0x90B16100, 0x90B07080, 0x90AF8000, - 0x90AE8F80, 0x90AD9F00, 0x90ACAE80, - 0x90ABBE00, 0x90AACD80, 0x90A9DD00, - 0x90A8EC80, 0x90A7FC00, 0x90A70B80, - 0x90A61B00, 0x90A52A80, 0x90A43A00, - 0x90A34980, 0x90A25900, 0x90A16880, - 0x90A07800, 0x909F8780, 0x909E9700, - 0x909DA680, 0x909CB600, 0x909BC580, - 0x909AD500, 0x9099E480, 0x9098F400, - 0x90980380, 0x90971300, 0x90962280, - 0x90953200, 0x90944180, 0x90935100, - 0x90926080, 0x90917000, 0x90907F80, - 0x908F8F00, 0x908E9E80, 0x908DAE00, - 0x908CBD80, 0x908BCD00, 0x908ADC80, - 0x9089EC00, 0x9088FB80, 0x90880B00, - 0x90871A80, 0x90862A00, 0x90853980, - 0x90844900, 0x90835880, 0x90826800, - 0x90817780, 0x90808700, 0x907F9680, - 0x907EA600, 0x907DB580, 0x907CC500, - 0x907BD480, 0x907AE400, 0x9079F380, - 0x90790300, 0x90781280, 0x90772200, - 0x90763180, 0x90754100, 0x90745080, - 0x90736000, 0x90726F80, 0x90717F00, - 0x90708E80, 0x906F9E00, 0x906EAD80, - 0x906DBD00, 0x906CCC80, 0x906BDC00, - 0x906AEB80, 0x9069FB00, 0x90690A80, - 0x90681A00, 0x90672980, 0x90663900, - 0x90654880, 0x90645800, 0x90636780, - 0x90627700, 0x90618680, 0x90609600, - 0x905FA580, 0x905EB500, 0x905DC480, - 0x905CD400, 0x905BE380, 0x905AF300, - 0x905A0280, 0x90591200, 0x90582180, - 0x90573100, 0x90564080, 0x90555000, - 0x90545F80, 0x90536F00, 0x90527E80, - 0x90518E00, 0x90509D80, 0x904FAD00, - 0x904EBC80, 0x904DCC00, 0x904CDB80, - 0x904BEB00, 0x904AFA80, 0x904A0A00, - 0x90491980, 0x90482900, 0x90473880, - 0x90464800, 0x90455780, 0x90446700, - 0x90437680, 0x90428600, 0x90419580, - 0x9040A500, 0x903FB480, 0x903EC400, - 0x903DD380, 0x903CE300, 0x903BF280, - 0x903B0200, 0x903A1180, 0x90392100, - 0x90383080, 0x90374000, 0x90364F80, - 0x90355F00, 0x90346E80, 0x90337E00, - 0x90328D80, 0x90319D00, 0x9030AC80, - 0x902FBC00, 0x902ECB80, 0x902DDB00, - 0x902CEA80, 0x902BFA00, 0x902B0980, - 0x902A1900, 0x90292880, 0x90283800, - 0x90274780, 0x90265700, 0x90256680, - 0x90247600, 0x90238580, 0x90229500, - 0x9021A480, 0x9020B400, 0x901FC380, - 0x901ED300, 0x901DE280, 0x901CF200, - 0x901C0180, 0x901B1100, 0x901A2080, - 0x90193000, 0x90183F80, 0x90174F00, - 0x90165E80, 0x90156E00, 0x90147D80, - 0x90138D00, 0x90129C80, 0x9011AC00, - 0x9010BB80, 0x900FCB00, 0x900EDA80, - 0x900DEA00, 0x900CF980, 0x900C0900, - 0x900B1880, 0x900A2800, 0x90093780, - 0x90084700, 0x90075680, 0x90066600, - 0x90057580, 0x90048500, 0x90039480, - 0x9002A400, 0x9001B380, 0x9000C300, - 0x8FFFD280, 0x8FFEE200, 0x8FFDF180, - 0x8FFD0100, 0x8FFC1080, 0x8FFB2000, - 0x8FFA2F80, 0x8FF93F00, 0x8FF84E80, - 0x8FF75E00, 0x8FF66D80, 0x8FF57D00, - 0x8FF48C80, 0x8FF39C00, 0x8FF2AB80, - 0x8FF1BB00, 0x8FF0CA80, 0x8FEFDA00, - 0x8FEEE980, 0x8FEDF900, 0x8FED0880, - 0x8FEC1800, 0x8FEB2780, 0x8FEA3700, - 0x8FE94680, 0x8FE85600, 0x8FE76580, - 0x8FE67500, 0x8FE58480, 0x8FE49400, - 0x8FE3A380, 0x8FE2B300, 0x8FE1C280, - 0x8FE0D200, 0x8FDFE180, 0x8FDEF100, - 0x8FDE0080, 0x8FDD1000, 0x8FDC1F80, - 0x8FDB2F00, 0x8FDA3E80, 0x8FD94E00, - 0x8FD85D80, 0x8FD76D00, 0x8FD67C80, - 0x8FD58C00, 0x8FD49B80, 0x8FD3AB00, - 0x8FD2BA80, 0x8FD1CA00, 0x8FD0D980, - 0x8FCFE900, 0x8FCEF880, 0x8FCE0800, - 0x8FCD1780, 0x8FCC2700, 0x8FCB3680, - 0x8FCA4600, 0x8FC95580, 0x8FC86500, - 0x8FC77480, 0x8FC68400, 0x8FC59380, - 0x8FC4A300, 0x8FC3B280, 0x8FC2C200, - 0x8FC1D180, 0x8FC0E100, 0x8FBFF080, - 0x8FBF0000, 0x8FBE0F80, 0x8FBD1F00, - 0x8FBC2E80, 0x8FBB3E00, 0x8FBA4D80, - 0x8FB95D00, 0x8FB86C80, 0x8FB77C00, - 0x8FB68B80, 0x8FB59B00, 0x8FB4AA80, - 0x8FB3BA00, 0x8FB2C980, 0x8FB1D900, - 0x8FB0E880, 0x8FAFF800, 0x8FAF0780, - 0x8FAE1700, 0x8FAD2680, 0x8FAC3600, - 0x8FAB4580, 0x8FAA5500, 0x8FA96480, - 0x8FA87400, 0x8FA78380, 0x8FA69300, - 0x8FA5A280, 0x8FA4B200, 0x8FA3C180, - 0x8FA2D100, 0x8FA1E080, 0x8FA0F000, - 0x8F9FFF80, 0x8F9F0F00, 0x8F9E1E80, - 0x8F9D2E00, 0x8F9C3D80, 0x8F9B4D00, - 0x8F9A5C80, 0x8F996C00, 0x8F987B80, - 0x8F978B00, 0x8F969A80, 0x8F95AA00, - 0x8F94B980, 0x8F93C900, 0x8F92D880, - 0x8F91E800, 0x8F90F780, 0x8F900700, - 0x8F8F1680, 0x8F8E2600, 0x8F8D3580, - 0x8F8C4500, 0x8F8B5480, 0x8F8A6400, - 0x8F897380, 0x8F888300, 0x8F879280, - 0x8F86A200, 0x8F85B180, 0x8F84C100, - 0x8F83D080, 0x8F82E000, 0x8F81EF80, - 0x8F80FF00, 0x8F800E80, 0x8F7F1E00, - 0x8F7E2D80, 0x8F7D3D00, 0x8F7C4C80, - 0x8F7B5C00, 0x8F7A6B80, 0x8F797B00, - 0x8F788A80, 0x8F779A00, 0x8F76A980, - 0x8F75B900, 0x8F74C880, 0x8F73D800, - 0x8F72E780, 0x8F71F700, 0x8F710680, - 0x8F701600, 0x8F6F2580, 0x8F6E3500, - 0x8F6D4480, 0x8F6C5400, 0x8F6B6380, - 0x8F6A7300, 0x8F698280, 0x8F689200, - 0x8F67A180, 0x8F66B100, 0x8F65C080, - 0x8F64D000, 0x8F63DF80, 0x8F62EF00, - 0x8F61FE80, 0x8F610E00, 0x8F601D80, - 0x8F5F2D00, 0x8F5E3C80, 0x8F5D4C00, - 0x8F5C5B80, 0x8F5B6B00, 0x8F5A7A80, - 0x8F598A00, 0x8F589980, 0x8F57A900, - 0x8F56B880, 0x8F55C800, 0x8F54D780, - 0x8F53E700, 0x8F52F680, 0x8F520600, - 0x8F511580, 0x8F502500, 0x8F4F3480, - 0x8F4E4400, 0x8F4D5380, 0x8F4C6300, - 0x8F4B7280, 0x8F4A8200, 0x8F499180, - 0x8F48A100, 0x8F47B080, 0x8F46C000, - 0x8F45CF80, 0x8F44DF00, 0x8F43EE80, - 0x8F42FE00, 0x8F420D80, 0x8F411D00, - 0x8F402C80, 0x8F3F3C00, 0x8F3E4B80, - 0x8F3D5B00, 0x8F3C6A80, 0x8F3B7A00, - 0x8F3A8980, 0x8F399900, 0x8F38A880, - 0x8F37B800, 0x8F36C780, 0x8F35D700, - 0x8F34E680, 0x8F33F600, 0x8F330580, - 0x8F321500, 0x8F312480, 0x8F303400, - 0x8F2F4380, 0x8F2E5300, 0x8F2D6280, - 0x8F2C7200, 0x8F2B8180, 0x8F2A9100, - 0x8F29A080, 0x8F28B000, 0x8F27BF80, - 0x8F26CF00, 0x8F25DE80, 0x8F24EE00, - 0x8F23FD80, 0x8F230D00, 0x8F221C80, - 0x8F212C00, 0x8F203B80, 0x8F1F4B00, - 0x8F1E5A80, 0x8F1D6A00, 0x8F1C7980, - 0x8F1B8900, 0x8F1A9880, 0x8F19A800, - 0x8F18B780, 0x8F17C700, 0x8F16D680, - 0x8F15E600, 0x8F14F580, 0x8F140500, - 0x8F131480, 0x8F122400, 0x8F113380, - 0x8F104300, 0x8F0F5280, 0x8F0E6200, - 0x8F0D7180, 0x8F0C8100, 0x8F0B9080, - 0x8F0AA000, 0x8F09AF80, 0x8F08BF00, - 0x8F07CE80, 0x8F06DE00, 0x8F05ED80, - 0x8F04FD00, 0x8F040C80, 0x8F031C00, - 0x8F022B80, 0x8F013B00, 0x8F004A80, - 0x8EFF5A00, 0x8EFE6980, 0x8EFD7900, - 0x8EFC8880, 0x8EFB9800, 0x8EFAA780, - 0x8EF9B700, 0x8EF8C680, 0x8EF7D600, - 0x8EF6E580, 0x8EF5F500, 0x8EF50480, - 0x8EF41400, 0x8EF32380, 0x8EF23300, - 0x8EF14280, 0x8EF05200, 0x8EEF6180, - 0x8EEE7100, 0x8EED8080, 0x8EEC9000, - 0x8EEB9F80, 0x8EEAAF00, 0x8EE9BE80, - 0x8EE8CE00, 0x8EE7DD80, 0x8EE6ED00, - 0x8EE5FC80, 0x8EE50C00, 0x8EE41B80, - 0x8EE32B00, 0x8EE23A80, 0x8EE14A00, - 0x8EE05980, 0x8EDF6900, 0x8EDE7880, - 0x8EDD8800, 0x8EDC9780, 0x8EDBA700, - 0x8EDAB680, 0x8ED9C600, 0x8ED8D580, - 0x8ED7E500, 0x8ED6F480, 0x8ED60400, - 0x8ED51380, 0x8ED42300, 0x8ED33280, - 0x8ED24200, 0x8ED15180, 0x8ED06100, - 0x8ECF7080, 0x8ECE8000, 0x8ECD8F80, - 0x8ECC9F00, 0x8ECBAE80, 0x8ECABE00, - 0x8EC9CD80, 0x8EC8DD00, 0x8EC7EC80, - 0x8EC6FC00, 0x8EC60B80, 0x8EC51B00, - 0x8EC42A80, 0x8EC33A00, 0x8EC24980, - 0x8EC15900, 0x8EC06880, 0x8EBF7800, - 0x8EBE8780, 0x8EBD9700, 0x8EBCA680, - 0x8EBBB600, 0x8EBAC580, 0x8EB9D500, - 0x8EB8E480, 0x8EB7F400, 0x8EB70380, - 0x8EB61300, 0x8EB52280, 0x8EB43200, - 0x8EB34180, 0x8EB25100, 0x8EB16080, - 0x8EB07000, 0x8EAF7F80, 0x8EAE8F00, - 0x8EAD9E80, 0x8EACAE00, 0x8EABBD80, - 0x8EAACD00, 0x8EA9DC80, 0x8EA8EC00, - 0x8EA7FB80, 0x8EA70B00, 0x8EA61A80, - 0x8EA52A00, 0x8EA43980, 0x8EA34900, - 0x8EA25880, 0x8EA16800, 0x8EA07780, - 0x8E9F8700, 0x8E9E9680, 0x8E9DA600, - 0x8E9CB580, 0x8E9BC500, 0x8E9AD480, - 0x8E99E400, 0x8E98F380, 0x8E980300, - 0x8E971280, 0x8E962200, 0x8E953180, - 0x8E944100, 0x8E935080, 0x8E926000, - 0x8E916F80, 0x8E907F00, 0x8E8F8E80, - 0x8E8E9E00, 0x8E8DAD80, 0x8E8CBD00, - 0x8E8BCC80, 0x8E8ADC00, 0x8E89EB80, - 0x8E88FB00, 0x8E880A80, 0x8E871A00, - 0x8E862980, 0x8E853900, 0x8E844880, - 0x8E835800, 0x8E826780, 0x8E817700, - 0x8E808680, 0x8E7F9600, 0x8E7EA580, - 0x8E7DB500, 0x8E7CC480, 0x8E7BD400, - 0x8E7AE380, 0x8E79F300, 0x8E790280, - 0x8E781200, 0x8E772180, 0x8E763100, - 0x8E754080, 0x8E745000, 0x8E735F80, - 0x8E726F00, 0x8E717E80, 0x8E708E00, - 0x8E6F9D80, 0x8E6EAD00, 0x8E6DBC80, - 0x8E6CCC00, 0x8E6BDB80, 0x8E6AEB00, - 0x8E69FA80, 0x8E690A00, 0x8E681980, - 0x8E672900, 0x8E663880, 0x8E654800, - 0x8E645780, 0x8E636700, 0x8E627680, - 0x8E618600, 0x8E609580, 0x8E5FA500, - 0x8E5EB480, 0x8E5DC400, 0x8E5CD380, - 0x8E5BE300, 0x8E5AF280, 0x8E5A0200, - 0x8E591180, 0x8E582100, 0x8E573080, - 0x8E564000, 0x8E554F80, 0x8E545F00, - 0x8E536E80, 0x8E527E00, 0x8E518D80, - 0x8E509D00, 0x8E4FAC80, 0x8E4EBC00, - 0x8E4DCB80, 0x8E4CDB00, 0x8E4BEA80, - 0x8E4AFA00, 0x8E4A0980, 0x8E491900, - 0x8E482880, 0x8E473800, 0x8E464780, - 0x8E455700, 0x8E446680, 0x8E437600, - 0x8E428580, 0x8E419500, 0x8E40A480, - 0x8E3FB400, 0x8E3EC380, 0x8E3DD300, - 0x8E3CE280, 0x8E3BF200, 0x8E3B0180, - 0x8E3A1100, 0x8E392080, 0x8E383000, - 0x8E373F80, 0x8E364F00, 0x8E355E80, - 0x8E346E00, 0x8E337D80, 0x8E328D00, - 0x8E319C80, 0x8E30AC00, 0x8E2FBB80, - 0x8E2ECB00, 0x8E2DDA80, 0x8E2CEA00, - 0x8E2BF980, 0x8E2B0900, 0x8E2A1880, - 0x8E292800, 0x8E283780, 0x8E274700, - 0x8E265680, 0x8E256600, 0x8E247580, - 0x8E238500, 0x8E229480, 0x8E21A400, - 0x8E20B380, 0x8E1FC300, 0x8E1ED280, - 0x8E1DE200, 0x8E1CF180, 0x8E1C0100, - 0x8E1B1080, 0x8E1A2000, 0x8E192F80, - 0x8E183F00, 0x8E174E80, 0x8E165E00, - 0x8E156D80, 0x8E147D00, 0x8E138C80, - 0x8E129C00, 0x8E11AB80, 0x8E10BB00, - 0x8E0FCA80, 0x8E0EDA00, 0x8E0DE980, - 0x8E0CF900, 0x8E0C0880, 0x8E0B1800, - 0x8E0A2780, 0x8E093700, 0x8E084680, - 0x8E075600, 0x8E066580, 0x8E057500, - 0x8E048480, 0x8E039400, 0x8E02A380, - 0x8E01B300, 0x8E00C280, 0x8DFFD200, - 0x8DFEE180, 0x8DFDF100, 0x8DFD0080, - 0x8DFC1000, 0x8DFB1F80, 0x8DFA2F00, - 0x8DF93E80, 0x8DF84E00, 0x8DF75D80, - 0x8DF66D00, 0x8DF57C80, 0x8DF48C00, - 0x8DF39B80, 0x8DF2AB00, 0x8DF1BA80, - 0x8DF0CA00, 0x8DEFD980, 0x8DEEE900, - 0x8DEDF880, 0x8DED0800, 0x8DEC1780, - 0x8DEB2700, 0x8DEA3680, 0x8DE94600, - 0x8DE85580, 0x8DE76500, 0x8DE67480, - 0x8DE58400, 0x8DE49380, 0x8DE3A300, - 0x8DE2B280, 0x8DE1C200, 0x8DE0D180, - 0x8DDFE100, 0x8DDEF080, 0x8DDE0000, - 0x8DDD0F80, 0x8DDC1F00, 0x8DDB2E80, - 0x8DDA3E00, 0x8DD94D80, 0x8DD85D00, - 0x8DD76C80, 0x8DD67C00, 0x8DD58B80, - 0x8DD49B00, 0x8DD3AA80, 0x8DD2BA00, - 0x8DD1C980, 0x8DD0D900, 0x8DCFE880, - 0x8DCEF800, 0x8DCE0780, 0x8DCD1700, - 0x8DCC2680, 0x8DCB3600, 0x8DCA4580, - 0x8DC95500, 0x8DC86480, 0x8DC77400, - 0x8DC68380, 0x8DC59300, 0x8DC4A280, - 0x8DC3B200, 0x8DC2C180, 0x8DC1D100, - 0x8DC0E080, 0x8DBFF000, 0x8DBEFF80, - 0x8DBE0F00, 0x8DBD1E80, 0x8DBC2E00, - 0x8DBB3D80, 0x8DBA4D00, 0x8DB95C80, - 0x8DB86C00, 0x8DB77B80, 0x8DB68B00, - 0x8DB59A80, 0x8DB4AA00, 0x8DB3B980, - 0x8DB2C900, 0x8DB1D880, 0x8DB0E800, - 0x8DAFF780, 0x8DAF0700, 0x8DAE1680, - 0x8DAD2600, 0x8DAC3580, 0x8DAB4500, - 0x8DAA5480, 0x8DA96400, 0x8DA87380, - 0x8DA78300, 0x8DA69280, 0x8DA5A200, - 0x8DA4B180, 0x8DA3C100, 0x8DA2D080, - 0x8DA1E000, 0x8DA0EF80, 0x8D9FFF00, - 0x8D9F0E80, 0x8D9E1E00, 0x8D9D2D80, - 0x8D9C3D00, 0x8D9B4C80, 0x8D9A5C00, - 0x8D996B80, 0x8D987B00, 0x8D978A80, - 0x8D969A00, 0x8D95A980, 0x8D94B900, - 0x8D93C880, 0x8D92D800, 0x8D91E780, - 0x8D90F700, 0x8D900680, 0x8D8F1600, - 0x8D8E2580, 0x8D8D3500, 0x8D8C4480, - 0x8D8B5400, 0x8D8A6380, 0x8D897300, - 0x8D888280, 0x8D879200, 0x8D86A180, - 0x8D85B100, 0x8D84C080, 0x8D83D000, - 0x8D82DF80, 0x8D81EF00, 0x8D80FE80, - 0x8D800E00, 0x8D7F1D80, 0x8D7E2D00, - 0x8D7D3C80, 0x8D7C4C00, 0x8D7B5B80, - 0x8D7A6B00, 0x8D797A80, 0x8D788A00, - 0x8D779980, 0x8D76A900, 0x8D75B880, - 0x8D74C800, 0x8D73D780, 0x8D72E700, - 0x8D71F680, 0x8D710600, 0x8D701580, - 0x8D6F2500, 0x8D6E3480, 0x8D6D4400, - 0x8D6C5380, 0x8D6B6300, 0x8D6A7280, - 0x8D698200, 0x8D689180, 0x8D67A100, - 0x8D66B080, 0x8D65C000, 0x8D64CF80, - 0x8D63DF00, 0x8D62EE80, 0x8D61FE00, - 0x8D610D80, 0x8D601D00, 0x8D5F2C80, - 0x8D5E3C00, 0x8D5D4B80, 0x8D5C5B00, - 0x8D5B6A80, 0x8D5A7A00, 0x8D598980, - 0x8D589900, 0x8D57A880, 0x8D56B800, - 0x8D55C780, 0x8D54D700, 0x8D53E680, - 0x8D52F600, 0x8D520580, 0x8D511500, - 0x8D502480, 0x8D4F3400, 0x8D4E4380, - 0x8D4D5300, 0x8D4C6280, 0x8D4B7200, - 0x8D4A8180, 0x8D499100, 0x8D48A080, - 0x8D47B000, 0x8D46BF80, 0x8D45CF00, - 0x8D44DE80, 0x8D43EE00, 0x8D42FD80, - 0x8D420D00, 0x8D411C80, 0x8D402C00, - 0x8D3F3B80, 0x8D3E4B00, 0x8D3D5A80, - 0x8D3C6A00, 0x8D3B7980, 0x8D3A8900, - 0x8D399880, 0x8D38A800, 0x8D37B780, - 0x8D36C700, 0x8D35D680, 0x8D34E600, - 0x8D33F580, 0x8D330500, 0x8D321480, - 0x8D312400, 0x8D303380, 0x8D2F4300, - 0x8D2E5280, 0x8D2D6200, 0x8D2C7180, - 0x8D2B8100, 0x8D2A9080, 0x8D29A000, - 0x8D28AF80, 0x8D27BF00, 0x8D26CE80, - 0x8D25DE00, 0x8D24ED80, 0x8D23FD00, - 0x8D230C80, 0x8D221C00, 0x8D212B80, - 0x8D203B00, 0x8D1F4A80, 0x8D1E5A00, - 0x8D1D6980, 0x8D1C7900, 0x8D1B8880, - 0x8D1A9800, 0x8D19A780, 0x8D18B700, - 0x8D17C680, 0x8D16D600, 0x8D15E580, - 0x8D14F500, 0x8D140480, 0x8D131400, - 0x8D122380, 0x8D113300, 0x8D104280, - 0x8D0F5200, 0x8D0E6180, 0x8D0D7100, - 0x8D0C8080, 0x8D0B9000, 0x8D0A9F80, - 0x8D09AF00, 0x8D08BE80, 0x8D07CE00, - 0x8D06DD80, 0x8D05ED00, 0x8D04FC80, - 0x8D040C00, 0x8D031B80, 0x8D022B00, - 0x8D013A80, 0x8D004A00, 0x8CFF5980, - 0x8CFE6900, 0x8CFD7880, 0x8CFC8800, - 0x8CFB9780, 0x8CFAA700, 0x8CF9B680, - 0x8CF8C600, 0x8CF7D580, 0x8CF6E500, - 0x8CF5F480, 0x8CF50400, 0x8CF41380, - 0x8CF32300, 0x8CF23280, 0x8CF14200, - 0x8CF05180, 0x8CEF6100, 0x8CEE7080, - 0x8CED8000, 0x8CEC8F80, 0x8CEB9F00, - 0x8CEAAE80, 0x8CE9BE00, 0x8CE8CD80, - 0x8CE7DD00, 0x8CE6EC80, 0x8CE5FC00, - 0x8CE50B80, 0x8CE41B00, 0x8CE32A80, - 0x8CE23A00, 0x8CE14980, 0x8CE05900, - 0x8CDF6880, 0x8CDE7800, 0x8CDD8780, - 0x8CDC9700, 0x8CDBA680, 0x8CDAB600, - 0x8CD9C580, 0x8CD8D500, 0x8CD7E480, - 0x8CD6F400, 0x8CD60380, 0x8CD51300, - 0x8CD42280, 0x8CD33200, 0x8CD24180, - 0x8CD15100, 0x8CD06080, 0x8CCF7000, - 0x8CCE7F80, 0x8CCD8F00, 0x8CCC9E80, - 0x8CCBAE00, 0x8CCABD80, 0x8CC9CD00, - 0x8CC8DC80, 0x8CC7EC00, 0x8CC6FB80, - 0x8CC60B00, 0x8CC51A80, 0x8CC42A00, - 0x8CC33980, 0x8CC24900, 0x8CC15880, - 0x8CC06800, 0x8CBF7780, 0x8CBE8700, - 0x8CBD9680, 0x8CBCA600, 0x8CBBB580, - 0x8CBAC500, 0x8CB9D480, 0x8CB8E400, - 0x8CB7F380, 0x8CB70300, 0x8CB61280, - 0x8CB52200, 0x8CB43180, 0x8CB34100, - 0x8CB25080, 0x8CB16000, 0x8CB06F80, - 0x8CAF7F00, 0x8CAE8E80, 0x8CAD9E00, - 0x8CACAD80, 0x8CABBD00, 0x8CAACC80, - 0x8CA9DC00, 0x8CA8EB80, 0x8CA7FB00, - 0x8CA70A80, 0x8CA61A00, 0x8CA52980, - 0x8CA43900, 0x8CA34880, 0x8CA25800, - 0x8CA16780, 0x8CA07700, 0x8C9F8680, - 0x8C9E9600, 0x8C9DA580, 0x8C9CB500, - 0x8C9BC480, 0x8C9AD400, 0x8C99E380, - 0x8C98F300, 0x8C980280, 0x8C971200, - 0x8C962180, 0x8C953100, 0x8C944080, - 0x8C935000, 0x8C925F80, 0x8C916F00, - 0x8C907E80, 0x8C8F8E00, 0x8C8E9D80, - 0x8C8DAD00, 0x8C8CBC80, 0x8C8BCC00, - 0x8C8ADB80, 0x8C89EB00, 0x8C88FA80, - 0x8C880A00, 0x8C871980, 0x8C862900, - 0x8C853880, 0x8C844800, 0x8C835780, - 0x8C826700, 0x8C817680, 0x8C808600, - 0x8C7F9580, 0x8C7EA500, 0x8C7DB480, - 0x8C7CC400, 0x8C7BD380, 0x8C7AE300, - 0x8C79F280, 0x8C790200, 0x8C781180, - 0x8C772100, 0x8C763080, 0x8C754000, - 0x8C744F80, 0x8C735F00, 0x8C726E80, - 0x8C717E00, 0x8C708D80, 0x8C6F9D00, - 0x8C6EAC80, 0x8C6DBC00, 0x8C6CCB80, - 0x8C6BDB00, 0x8C6AEA80, 0x8C69FA00, - 0x8C690980, 0x8C681900, 0x8C672880, - 0x8C663800, 0x8C654780, 0x8C645700, - 0x8C636680, 0x8C627600, 0x8C618580, - 0x8C609500, 0x8C5FA480, 0x8C5EB400, - 0x8C5DC380, 0x8C5CD300, 0x8C5BE280, - 0x8C5AF200, 0x8C5A0180, 0x8C591100, - 0x8C582080, 0x8C573000, 0x8C563F80, - 0x8C554F00, 0x8C545E80, 0x8C536E00, - 0x8C527D80, 0x8C518D00, 0x8C509C80, - 0x8C4FAC00, 0x8C4EBB80, 0x8C4DCB00, - 0x8C4CDA80, 0x8C4BEA00, 0x8C4AF980, - 0x8C4A0900, 0x8C491880, 0x8C482800, - 0x8C473780, 0x8C464700, 0x8C455680, - 0x8C446600, 0x8C437580, 0x8C428500, - 0x8C419480, 0x8C40A400, 0x8C3FB380, - 0x8C3EC300, 0x8C3DD280, 0x8C3CE200, - 0x8C3BF180, 0x8C3B0100, 0x8C3A1080, - 0x8C392000, 0x8C382F80, 0x8C373F00, - 0x8C364E80, 0x8C355E00, 0x8C346D80, - 0x8C337D00, 0x8C328C80, 0x8C319C00, - 0x8C30AB80, 0x8C2FBB00, 0x8C2ECA80, - 0x8C2DDA00, 0x8C2CE980, 0x8C2BF900, - 0x8C2B0880, 0x8C2A1800, 0x8C292780, - 0x8C283700, 0x8C274680, 0x8C265600, - 0x8C256580, 0x8C247500, 0x8C238480, - 0x8C229400, 0x8C21A380, 0x8C20B300, - 0x8C1FC280, 0x8C1ED200, 0x8C1DE180, - 0x8C1CF100, 0x8C1C0080, 0x8C1B1000, - 0x8C1A1F80, 0x8C192F00, 0x8C183E80, - 0x8C174E00, 0x8C165D80, 0x8C156D00, - 0x8C147C80, 0x8C138C00, 0x8C129B80, - 0x8C11AB00, 0x8C10BA80, 0x8C0FCA00, - 0x8C0ED980, 0x8C0DE900, 0x8C0CF880, - 0x8C0C0800, 0x8C0B1780, 0x8C0A2700, - 0x8C093680, 0x8C084600, 0x8C075580, - 0x8C066500, 0x8C057480, 0x8C048400, - 0x8C039380, 0x8C02A300, 0x8C01B280, - 0x8C00C200, 0x8BFFD180, 0x8BFEE100, - 0x8BFDF080, 0x8BFD0000, 0x8BFC0F80, - 0x8BFB1F00, 0x8BFA2E80, 0x8BF93E00, - 0x8BF84D80, 0x8BF75D00, 0x8BF66C80, - 0x8BF57C00, 0x8BF48B80, 0x8BF39B00, - 0x8BF2AA80, 0x8BF1BA00, 0x8BF0C980, - 0x8BEFD900, 0x8BEEE880, 0x8BEDF800, - 0x8BED0780, 0x8BEC1700, 0x8BEB2680, - 0x8BEA3600, 0x8BE94580, 0x8BE85500, - 0x8BE76480, 0x8BE67400, 0x8BE58380, - 0x8BE49300, 0x8BE3A280, 0x8BE2B200, - 0x8BE1C180, 0x8BE0D100, 0x8BDFE080, - 0x8BDEF000, 0x8BDDFF80, 0x8BDD0F00, - 0x8BDC1E80, 0x8BDB2E00, 0x8BDA3D80, - 0x8BD94D00, 0x8BD85C80, 0x8BD76C00, - 0x8BD67B80, 0x8BD58B00, 0x8BD49A80, - 0x8BD3AA00, 0x8BD2B980, 0x8BD1C900, - 0x8BD0D880, 0x8BCFE800, 0x8BCEF780, - 0x8BCE0700, 0x8BCD1680, 0x8BCC2600, - 0x8BCB3580, 0x8BCA4500, 0x8BC95480, - 0x8BC86400, 0x8BC77380, 0x8BC68300, - 0x8BC59280, 0x8BC4A200, 0x8BC3B180, - 0x8BC2C100, 0x8BC1D080, 0x8BC0E000, - 0x8BBFEF80, 0x8BBEFF00, 0x8BBE0E80, - 0x8BBD1E00, 0x8BBC2D80, 0x8BBB3D00, - 0x8BBA4C80, 0x8BB95C00, 0x8BB86B80, - 0x8BB77B00, 0x8BB68A80, 0x8BB59A00, - 0x8BB4A980, 0x8BB3B900, 0x8BB2C880, - 0x8BB1D800, 0x8BB0E780, 0x8BAFF700, - 0x8BAF0680, 0x8BAE1600, 0x8BAD2580, - 0x8BAC3500, 0x8BAB4480, 0x8BAA5400, - 0x8BA96380, 0x8BA87300, 0x8BA78280, - 0x8BA69200, 0x8BA5A180, 0x8BA4B100, - 0x8BA3C080, 0x8BA2D000, 0x8BA1DF80, - 0x8BA0EF00, 0x8B9FFE80, 0x8B9F0E00, - 0x8B9E1D80, 0x8B9D2D00, 0x8B9C3C80, - 0x8B9B4C00, 0x8B9A5B80, 0x8B996B00, - 0x8B987A80, 0x8B978A00, 0x8B969980, - 0x8B95A900, 0x8B94B880, 0x8B93C800, - 0x8B92D780, 0x8B91E700, 0x8B90F680, - 0x8B900600, 0x8B8F1580, 0x8B8E2500, - 0x8B8D3480, 0x8B8C4400, 0x8B8B5380, - 0x8B8A6300, 0x8B897280, 0x8B888200, - 0x8B879180, 0x8B86A100, 0x8B85B080, - 0x8B84C000, 0x8B83CF80, 0x8B82DF00, - 0x8B81EE80, 0x8B80FE00, 0x8B800D80, - 0x8B7F1D00, 0x8B7E2C80, 0x8B7D3C00, - 0x8B7C4B80, 0x8B7B5B00, 0x8B7A6A80, - 0x8B797A00, 0x8B788980, 0x8B779900, - 0x8B76A880, 0x8B75B800, 0x8B74C780, - 0x8B73D700, 0x8B72E680, 0x8B71F600, - 0x8B710580, 0x8B701500, 0x8B6F2480, - 0x8B6E3400, 0x8B6D4380, 0x8B6C5300, - 0x8B6B6280, 0x8B6A7200, 0x8B698180, - 0x8B689100, 0x8B67A080, 0x8B66B000, - 0x8B65BF80, 0x8B64CF00, 0x8B63DE80, - 0x8B62EE00, 0x8B61FD80, 0x8B610D00, - 0x8B601C80, 0x8B5F2C00, 0x8B5E3B80, - 0x8B5D4B00, 0x8B5C5A80, 0x8B5B6A00, - 0x8B5A7980, 0x8B598900, 0x8B589880, - 0x8B57A800, 0x8B56B780, 0x8B55C700, - 0x8B54D680, 0x8B53E600, 0x8B52F580, - 0x8B520500, 0x8B511480, 0x8B502400, - 0x8B4F3380, 0x8B4E4300, 0x8B4D5280, - 0x8B4C6200, 0x8B4B7180, 0x8B4A8100, - 0x8B499080, 0x8B48A000, 0x8B47AF80, - 0x8B46BF00, 0x8B45CE80, 0x8B44DE00, - 0x8B43ED80, 0x8B42FD00, 0x8B420C80, - 0x8B411C00, 0x8B402B80, 0x8B3F3B00, - 0x8B3E4A80, 0x8B3D5A00, 0x8B3C6980, - 0x8B3B7900, 0x8B3A8880, 0x8B399800, - 0x8B38A780, 0x8B37B700, 0x8B36C680, - 0x8B35D600, 0x8B34E580, 0x8B33F500, - 0x8B330480, 0x8B321400, 0x8B312380, - 0x8B303300, 0x8B2F4280, 0x8B2E5200, - 0x8B2D6180, 0x8B2C7100, 0x8B2B8080, - 0x8B2A9000, 0x8B299F80, 0x8B28AF00, - 0x8B27BE80, 0x8B26CE00, 0x8B25DD80, - 0x8B24ED00, 0x8B23FC80, 0x8B230C00, - 0x8B221B80, 0x8B212B00, 0x8B203A80, - 0x8B1F4A00, 0x8B1E5980, 0x8B1D6900, - 0x8B1C7880, 0x8B1B8800, 0x8B1A9780, - 0x8B19A700, 0x8B18B680, 0x8B17C600, - 0x8B16D580, 0x8B15E500, 0x8B14F480, - 0x8B140400, 0x8B131380, 0x8B122300, - 0x8B113280, 0x8B104200, 0x8B0F5180, - 0x8B0E6100, 0x8B0D7080, 0x8B0C8000, - 0x8B0B8F80, 0x8B0A9F00, 0x8B09AE80, - 0x8B08BE00, 0x8B07CD80, 0x8B06DD00, - 0x8B05EC80, 0x8B04FC00, 0x8B040B80, - 0x8B031B00, 0x8B022A80, 0x8B013A00, - 0x8B004980, 0x8AFF5900, 0x8AFE6880, - 0x8AFD7800, 0x8AFC8780, 0x8AFB9700, - 0x8AFAA680, 0x8AF9B600, 0x8AF8C580, - 0x8AF7D500, 0x8AF6E480, 0x8AF5F400, - 0x8AF50380, 0x8AF41300, 0x8AF32280, - 0x8AF23200, 0x8AF14180, 0x8AF05100, - 0x8AEF6080, 0x8AEE7000, 0x8AED7F80, - 0x8AEC8F00, 0x8AEB9E80, 0x8AEAAE00, - 0x8AE9BD80, 0x8AE8CD00, 0x8AE7DC80, - 0x8AE6EC00, 0x8AE5FB80, 0x8AE50B00, - 0x8AE41A80, 0x8AE32A00, 0x8AE23980, - 0x8AE14900, 0x8AE05880, 0x8ADF6800, - 0x8ADE7780, 0x8ADD8700, 0x8ADC9680, - 0x8ADBA600, 0x8ADAB580, 0x8AD9C500, - 0x8AD8D480, 0x8AD7E400, 0x8AD6F380, - 0x8AD60300, 0x8AD51280, 0x8AD42200, - 0x8AD33180, 0x8AD24100, 0x8AD15080, - 0x8AD06000, 0x8ACF6F80, 0x8ACE7F00, - 0x8ACD8E80, 0x8ACC9E00, 0x8ACBAD80, - 0x8ACABD00, 0x8AC9CC80, 0x8AC8DC00, - 0x8AC7EB80, 0x8AC6FB00, 0x8AC60A80, - 0x8AC51A00, 0x8AC42980, 0x8AC33900, - 0x8AC24880, 0x8AC15800, 0x8AC06780, - 0x8ABF7700, 0x8ABE8680, 0x8ABD9600, - 0x8ABCA580, 0x8ABBB500, 0x8ABAC480, - 0x8AB9D400, 0x8AB8E380, 0x8AB7F300, - 0x8AB70280, 0x8AB61200, 0x8AB52180, - 0x8AB43100, 0x8AB34080, 0x8AB25000, - 0x8AB15F80, 0x8AB06F00, 0x8AAF7E80, - 0x8AAE8E00, 0x8AAD9D80, 0x8AACAD00, - 0x8AABBC80, 0x8AAACC00, 0x8AA9DB80, - 0x8AA8EB00, 0x8AA7FA80, 0x8AA70A00, - 0x8AA61980, 0x8AA52900, 0x8AA43880, - 0x8AA34800, 0x8AA25780, 0x8AA16700, - 0x8AA07680, 0x8A9F8600, 0x8A9E9580, - 0x8A9DA500, 0x8A9CB480, 0x8A9BC400, - 0x8A9AD380, 0x8A99E300, 0x8A98F280, - 0x8A980200, 0x8A971180, 0x8A962100, - 0x8A953080, 0x8A944000, 0x8A934F80, - 0x8A925F00, 0x8A916E80, 0x8A907E00, - 0x8A8F8D80, 0x8A8E9D00, 0x8A8DAC80, - 0x8A8CBC00, 0x8A8BCB80, 0x8A8ADB00, - 0x8A89EA80, 0x8A88FA00, 0x8A880980, - 0x8A871900, 0x8A862880, 0x8A853800, - 0x8A844780, 0x8A835700, 0x8A826680, - 0x8A817600, 0x8A808580, 0x8A7F9500, - 0x8A7EA480, 0x8A7DB400, 0x8A7CC380, - 0x8A7BD300, 0x8A7AE280, 0x8A79F200, - 0x8A790180, 0x8A781100, 0x8A772080, - 0x8A763000, 0x8A753F80, 0x8A744F00, - 0x8A735E80, 0x8A726E00, 0x8A717D80, - 0x8A708D00, 0x8A6F9C80, 0x8A6EAC00, - 0x8A6DBB80, 0x8A6CCB00, 0x8A6BDA80, - 0x8A6AEA00, 0x8A69F980, 0x8A690900, - 0x8A681880, 0x8A672800, 0x8A663780, - 0x8A654700, 0x8A645680, 0x8A636600, - 0x8A627580, 0x8A618500, 0x8A609480, - 0x8A5FA400, 0x8A5EB380, 0x8A5DC300, - 0x8A5CD280, 0x8A5BE200, 0x8A5AF180, - 0x8A5A0100, 0x8A591080, 0x8A582000, - 0x8A572F80, 0x8A563F00, 0x8A554E80, - 0x8A545E00, 0x8A536D80, 0x8A527D00, - 0x8A518C80, 0x8A509C00, 0x8A4FAB80, - 0x8A4EBB00, 0x8A4DCA80, 0x8A4CDA00, - 0x8A4BE980, 0x8A4AF900, 0x8A4A0880, - 0x8A491800, 0x8A482780, 0x8A473700, - 0x8A464680, 0x8A455600, 0x8A446580, - 0x8A437500, 0x8A428480, 0x8A419400, - 0x8A40A380, 0x8A3FB300, 0x8A3EC280, - 0x8A3DD200, 0x8A3CE180, 0x8A3BF100, - 0x8A3B0080, 0x8A3A1000, 0x8A391F80, - 0x8A382F00, 0x8A373E80, 0x8A364E00, - 0x8A355D80, 0x8A346D00, 0x8A337C80, - 0x8A328C00, 0x8A319B80, 0x8A30AB00, - 0x8A2FBA80, 0x8A2ECA00, 0x8A2DD980, - 0x8A2CE900, 0x8A2BF880, 0x8A2B0800, - 0x8A2A1780, 0x8A292700, 0x8A283680, - 0x8A274600, 0x8A265580, 0x8A256500, - 0x8A247480, 0x8A238400, 0x8A229380, - 0x8A21A300, 0x8A20B280, 0x8A1FC200, - 0x8A1ED180, 0x8A1DE100, 0x8A1CF080, - 0x8A1C0000, 0x8A1B1C80, 0x8A1A3900, - 0x8A195580, 0x8A187200, 0x8A178E80, - 0x8A16AB00, 0x8A15C780, 0x8A14E400, - 0x8A140080, 0x8A131D00, 0x8A123980, - 0x8A115600, 0x8A107280, 0x8A0F8F00, - 0x8A0EAB80, 0x8A0DC800, 0x8A0CE480, - 0x8A0C0100, 0x8A0B1D80, 0x8A0A3A00, - 0x8A095680, 0x8A087300, 0x8A078F80, - 0x8A06AC00, 0x8A05C880, 0x8A04E500, - 0x8A040180, 0x8A031E00, 0x8A023A80, - 0x8A015700, 0x8A007380, 0x89FF9000, - 0x89FEAC80, 0x89FDC900, 0x89FCE580, - 0x89FC0200, 0x89FB1E80, 0x89FA3B00, - 0x89F95780, 0x89F87400, 0x89F79080, - 0x89F6AD00, 0x89F5C980, 0x89F4E600, - 0x89F40280, 0x89F31F00, 0x89F23B80, - 0x89F15800, 0x89F07480, 0x89EF9100, - 0x89EEAD80, 0x89EDCA00, 0x89ECE680, - 0x89EC0300, 0x89EB1F80, 0x89EA3C00, - 0x89E95880, 0x89E87500, 0x89E79180, - 0x89E6AE00, 0x89E5CA80, 0x89E4E700, - 0x89E40380, 0x89E32000, 0x89E23C80, - 0x89E15900, 0x89E07580, 0x89DF9200, - 0x89DEAE80, 0x89DDCB00, 0x89DCE780, - 0x89DC0400, 0x89DB2080, 0x89DA3D00, - 0x89D95980, 0x89D87600, 0x89D79280, - 0x89D6AF00, 0x89D5CB80, 0x89D4E800, - 0x89D40480, 0x89D32100, 0x89D23D80, - 0x89D15A00, 0x89D07680, 0x89CF9300, - 0x89CEAF80, 0x89CDCC00, 0x89CCE880, - 0x89CC0500, 0x89CB2180, 0x89CA3E00, - 0x89C95A80, 0x89C87700, 0x89C79380, - 0x89C6B000, 0x89C5CC80, 0x89C4E900, - 0x89C40580, 0x89C32200, 0x89C23E80, - 0x89C15B00, 0x89C07780, 0x89BF9400, - 0x89BEB080, 0x89BDCD00, 0x89BCE980, - 0x89BC0600, 0x89BB2280, 0x89BA3F00, - 0x89B95B80, 0x89B87800, 0x89B79480, - 0x89B6B100, 0x89B5CD80, 0x89B4EA00, - 0x89B40680, 0x89B32300, 0x89B23F80, - 0x89B15C00, 0x89B07880, 0x89AF9500, - 0x89AEB180, 0x89ADCE00, 0x89ACEA80, - 0x89AC0700, 0x89AB2380, 0x89AA4000, - 0x89A95C80, 0x89A87900, 0x89A79580, - 0x89A6B200, 0x89A5CE80, 0x89A4EB00, - 0x89A40780, 0x89A32400, 0x89A24080, - 0x89A15D00, 0x89A07980, 0x899F9600, - 0x899EB280, 0x899DCF00, 0x899CEB80, - 0x899C0800, 0x899B2480, 0x899A4100, - 0x89995D80, 0x89987A00, 0x89979680, - 0x8996B300, 0x8995CF80, 0x8994EC00, - 0x89940880, 0x89932500, 0x89924180, - 0x89915E00, 0x89907A80, 0x898F9700, - 0x898EB380, 0x898DD000, 0x898CEC80, - 0x898C0900, 0x898B2580, 0x898A4200, - 0x89895E80, 0x89887B00, 0x89879780, - 0x8986B400, 0x8985D080, 0x8984ED00, - 0x89840980, 0x89832600, 0x89824280, - 0x89815F00, 0x89807B80, 0x897F9800, - 0x897EB480, 0x897DD100, 0x897CED80, - 0x897C0A00, 0x897B2680, 0x897A4300, - 0x89795F80, 0x89787C00, 0x89779880, - 0x8976B500, 0x8975D180, 0x8974EE00, - 0x89740A80, 0x89732700, 0x89724380, - 0x89716000, 0x89707C80, 0x896F9900, - 0x896EB580, 0x896DD200, 0x896CEE80, - 0x896C0B00, 0x896B2780, 0x896A4400, - 0x89696080, 0x89687D00, 0x89679980, - 0x8966B600, 0x8965D280, 0x8964EF00, - 0x89640B80, 0x89632800, 0x89624480, - 0x89616100, 0x89607D80, 0x895F9A00, - 0x895EB680, 0x895DD300, 0x895CEF80, - 0x895C0C00, 0x895B2880, 0x895A4500, - 0x89596180, 0x89587E00, 0x89579A80, - 0x8956B700, 0x8955D380, 0x8954F000, - 0x89540C80, 0x89532900, 0x89524580, - 0x89516200, 0x89507E80, 0x894F9B00, - 0x894EB780, 0x894DD400, 0x894CF080, - 0x894C0D00, 0x894B2980, 0x894A4600, - 0x89496280, 0x89487F00, 0x89479B80, - 0x8946B800, 0x8945D480, 0x8944F100, - 0x89440D80, 0x89432A00, 0x89424680, - 0x89416300, 0x89407F80, 0x893F9C00, - 0x893EB880, 0x893DD500, 0x893CF180, - 0x893C0E00, 0x893B2A80, 0x893A4700, - 0x89396380, 0x89388000, 0x89379C80, - 0x8936B900, 0x8935D580, 0x8934F200, - 0x89340E80, 0x89332B00, 0x89324780, - 0x89316400, 0x89308080, 0x892F9D00, - 0x892EB980, 0x892DD600, 0x892CF280, - 0x892C0F00, 0x892B2B80, 0x892A4800, - 0x89296480, 0x89288100, 0x89279D80, - 0x8926BA00, 0x8925D680, 0x8924F300, - 0x89240F80, 0x89232C00, 0x89224880, - 0x89216500, 0x89208180, 0x891F9E00, - 0x891EBA80, 0x891DD700, 0x891CF380, - 0x891C1000, 0x891B2C80, 0x891A4900, - 0x89196580, 0x89188200, 0x89179E80, - 0x8916BB00, 0x8915D780, 0x8914F400, - 0x89141080, 0x89132D00, 0x89124980, - 0x89116600, 0x89108280, 0x890F9F00, - 0x890EBB80, 0x890DD800, 0x890CF480, - 0x890C1100, 0x890B2D80, 0x890A4A00, - 0x89096680, 0x89088300, 0x89079F80, - 0x8906BC00, 0x8905D880, 0x8904F500, - 0x89041180, 0x89032E00, 0x89024A80, - 0x89016700, 0x89008380, 0x88FFA000, - 0x88FEBC80, 0x88FDD900, 0x88FCF580, - 0x88FC1200, 0x88FB2E80, 0x88FA4B00, - 0x88F96780, 0x88F88400, 0x88F7A080, - 0x88F6BD00, 0x88F5D980, 0x88F4F600, - 0x88F41280, 0x88F32F00, 0x88F24B80, - 0x88F16800, 0x88F08480, 0x88EFA100, - 0x88EEBD80, 0x88EDDA00, 0x88ECF680, - 0x88EC1300, 0x88EB2F80, 0x88EA4C00, - 0x88E96880, 0x88E88500, 0x88E7A180, - 0x88E6BE00, 0x88E5DA80, 0x88E4F700, - 0x88E41380, 0x88E33000, 0x88E24C80, - 0x88E16900, 0x88E08580, 0x88DFA200, - 0x88DEBE80, 0x88DDDB00, 0x88DCF780, - 0x88DC1400, 0x88DB3080, 0x88DA4D00, - 0x88D96980, 0x88D88600, 0x88D7A280, - 0x88D6BF00, 0x88D5DB80, 0x88D4F800, - 0x88D41480, 0x88D33100, 0x88D24D80, - 0x88D16A00, 0x88D08680, 0x88CFA300, - 0x88CEBF80, 0x88CDDC00, 0x88CCF880, - 0x88CC1500, 0x88CB3180, 0x88CA4E00, - 0x88C96A80, 0x88C88700, 0x88C7A380, - 0x88C6C000, 0x88C5DC80, 0x88C4F900, - 0x88C41580, 0x88C33200, 0x88C24E80, - 0x88C16B00, 0x88C08780, 0x88BFA400, - 0x88BEC080, 0x88BDDD00, 0x88BCF980, - 0x88BC1600, 0x88BB3280, 0x88BA4F00, - 0x88B96B80, 0x88B88800, 0x88B7A480, - 0x88B6C100, 0x88B5DD80, 0x88B4FA00, - 0x88B41680, 0x88B33300, 0x88B24F80, - 0x88B16C00, 0x88B08880, 0x88AFA500, - 0x88AEC180, 0x88ADDE00, 0x88ACFA80, - 0x88AC1700, 0x88AB3380, 0x88AA5000, - 0x88A96C80, 0x88A88900, 0x88A7A580, - 0x88A6C200, 0x88A5DE80, 0x88A4FB00, - 0x88A41780, 0x88A33400, 0x88A25080, - 0x88A16D00, 0x88A08980, 0x889FA600, - 0x889EC280, 0x889DDF00, 0x889CFB80, - 0x889C1800, 0x889B3480, 0x889A5100, - 0x88996D80, 0x88988A00, 0x8897A680, - 0x8896C300, 0x8895DF80, 0x8894FC00, - 0x88941880, 0x88933500, 0x88925180, - 0x88916E00, 0x88908A80, 0x888FA700, - 0x888EC380, 0x888DE000, 0x888CFC80, - 0x888C1900, 0x888B3580, 0x888A5200, - 0x88896E80, 0x88888B00, 0x8887A780, - 0x8886C400, 0x8885E080, 0x8884FD00, - 0x88841980, 0x88833600, 0x88825280, - 0x88816F00, 0x88808B80, 0x887FA800, - 0x887EC480, 0x887DE100, 0x887CFD80, - 0x887C1A00, 0x887B3680, 0x887A5300, - 0x88796F80, 0x88788C00, 0x8877A880, - 0x8876C500, 0x8875E180, 0x8874FE00, - 0x88741A80, 0x88733700, 0x88725380, - 0x88717000, 0x88708C80, 0x886FA900, - 0x886EC580, 0x886DE200, 0x886CFE80, - 0x886C1B00, 0x886B3780, 0x886A5400, - 0x88697080, 0x88688D00, 0x8867A980, - 0x8866C600, 0x8865E280, 0x8864FF00, - 0x88641B80, 0x88633800, 0x88625480, - 0x88617100, 0x88608D80, 0x885FAA00, - 0x885EC680, 0x885DE300, 0x885CFF80, - 0x885C1C00, 0x885B3880, 0x885A5500, - 0x88597180, 0x88588E00, 0x8857AA80, - 0x8856C700, 0x8855E380, 0x88550000, - 0x88541C80, 0x88533900, 0x88525580, - 0x88517200, 0x88508E80, 0x884FAB00, - 0x884EC780, 0x884DE400, 0x884D0080, - 0x884C1D00, 0x884B3980, 0x884A5600, - 0x88497280, 0x88488F00, 0x8847AB80, - 0x8846C800, 0x8845E480, 0x88450100, - 0x88441D80, 0x88433A00, 0x88425680, - 0x88417300, 0x88408F80, 0x883FAC00, - 0x883EC880, 0x883DE500, 0x883D0180, - 0x883C1E00, 0x883B3A80, 0x883A5700, - 0x88397380, 0x88389000, 0x8837AC80, - 0x8836C900, 0x8835E580, 0x88350200, - 0x88341E80, 0x88333B00, 0x88325780, - 0x88317400, 0x88309080, 0x882FAD00, - 0x882EC980, 0x882DE600, 0x882D0280, - 0x882C1F00, 0x882B3B80, 0x882A5800, - 0x88297480, 0x88289100, 0x8827AD80, - 0x8826CA00, 0x8825E680, 0x88250300, - 0x88241F80, 0x88233C00, 0x88225880, - 0x88217500, 0x88209180, 0x881FAE00, - 0x881ECA80, 0x881DE700, 0x881D0380, - 0x881C2000, 0x881B3C80, 0x881A5900, - 0x88197580, 0x88189200, 0x8817AE80, - 0x8816CB00, 0x8815E780, 0x88150400, - 0x88142080, 0x88133D00, 0x88125980, - 0x88117600, 0x88109280, 0x880FAF00, - 0x880ECB80, 0x880DE800, 0x880D0480, - 0x880C2100, 0x880B3D80, 0x880A5A00, - 0x88097680, 0x88089300, 0x8807AF80, - 0x8806CC00, 0x8805E880, 0x88050500, - 0x88042180, 0x88033E00, 0x88025A80, - 0x88017700, 0x88009380, 0x87FFB000, - 0x87FECC80, 0x87FDE900, 0x87FD0580, - 0x87FC2200, 0x87FB3E80, 0x87FA5B00, - 0x87F97780, 0x87F89400, 0x87F7B080, - 0x87F6CD00, 0x87F5E980, 0x87F50600, - 0x87F42280, 0x87F33F00, 0x87F25B80, - 0x87F17800, 0x87F09480, 0x87EFB100, - 0x87EECD80, 0x87EDEA00, 0x87ED0680, - 0x87EC2300, 0x87EB3F80, 0x87EA5C00, - 0x87E97880, 0x87E89500, 0x87E7B180, - 0x87E6CE00, 0x87E5EA80, 0x87E50700, - 0x87E42380, 0x87E34000, 0x87E25C80, - 0x87E17900, 0x87E09580, 0x87DFB200, - 0x87DECE80, 0x87DDEB00, 0x87DD0780, - 0x87DC2400, 0x87DB4080, 0x87DA5D00, - 0x87D97980, 0x87D89600, 0x87D7B280, - 0x87D6CF00, 0x87D5EB80, 0x87D50800, - 0x87D42480, 0x87D34100, 0x87D25D80, - 0x87D17A00, 0x87D09680, 0x87CFB300, - 0x87CECF80, 0x87CDEC00, 0x87CD0880, - 0x87CC2500, 0x87CB4180, 0x87CA5E00, - 0x87C97A80, 0x87C89700, 0x87C7B380, - 0x87C6D000, 0x87C5EC80, 0x87C50900, - 0x87C42580, 0x87C34200, 0x87C25E80, - 0x87C17B00, 0x87C09780, 0x87BFB400, - 0x87BED080, 0x87BDED00, 0x87BD0980, - 0x87BC2600, 0x87BB4280, 0x87BA5F00, - 0x87B97B80, 0x87B89800, 0x87B7B480, - 0x87B6D100, 0x87B5ED80, 0x87B50A00, - 0x87B42680, 0x87B34300, 0x87B25F80, - 0x87B17C00, 0x87B09880, 0x87AFB500, - 0x87AED180, 0x87ADEE00, 0x87AD0A80, - 0x87AC2700, 0x87AB4380, 0x87AA6000, - 0x87A97C80, 0x87A89900, 0x87A7B580, - 0x87A6D200, 0x87A5EE80, 0x87A50B00, - 0x87A42780, 0x87A34400, 0x87A26080, - 0x87A17D00, 0x87A09980, 0x879FB600, - 0x879ED280, 0x879DEF00, 0x879D0B80, - 0x879C2800, 0x879B4480, 0x879A6100, - 0x87997D80, 0x87989A00, 0x8797B680, - 0x8796D300, 0x8795EF80, 0x87950C00, - 0x87942880, 0x87934500, 0x87926180, - 0x87917E00, 0x87909A80, 0x878FB700, - 0x878ED380, 0x878DF000, 0x878D0C80, - 0x878C2900, 0x878B4580, 0x878A6200, - 0x87897E80, 0x87889B00, 0x8787B780, - 0x8786D400, 0x8785F080, 0x87850D00, - 0x87842980, 0x87834600, 0x87826280, - 0x87817F00, 0x87809B80, 0x877FB800, - 0x877ED480, 0x877DF100, 0x877D0D80, - 0x877C2A00, 0x877B4680, 0x877A6300, - 0x87797F80, 0x87789C00, 0x8777B880, - 0x8776D500, 0x8775F180, 0x87750E00, - 0x87742A80, 0x87734700, 0x87726380, - 0x87718000, 0x87709C80, 0x876FB900, - 0x876ED580, 0x876DF200, 0x876D0E80, - 0x876C2B00, 0x876B4780, 0x876A6400, - 0x87698080, 0x87689D00, 0x8767B980, - 0x8766D600, 0x8765F280, 0x87650F00, - 0x87642B80, 0x87634800, 0x87626480, - 0x87618100, 0x87609D80, 0x875FBA00, - 0x875ED680, 0x875DF300, 0x875D0F80, - 0x875C2C00, 0x875B4880, 0x875A6500, - 0x87598180, 0x87589E00, 0x8757BA80, - 0x8756D700, 0x8755F380, 0x87551000, - 0x87542C80, 0x87534900, 0x87526580, - 0x87518200, 0x87509E80, 0x874FBB00, - 0x874ED780, 0x874DF400, 0x874D1080, - 0x874C2D00, 0x874B4980, 0x874A6600, - 0x87498280, 0x87489F00, 0x8747BB80, - 0x8746D800, 0x8745F480, 0x87451100, - 0x87442D80, 0x87434A00, 0x87426680, - 0x87418300, 0x87409F80, 0x873FBC00, - 0x873ED880, 0x873DF500, 0x873D1180, - 0x873C2E00, 0x873B4A80, 0x873A6700, - 0x87398380, 0x8738A000, 0x8737BC80, - 0x8736D900, 0x8735F580, 0x87351200, - 0x87342E80, 0x87334B00, 0x87326780, - 0x87318400, 0x8730A080, 0x872FBD00, - 0x872ED980, 0x872DF600, 0x872D1280, - 0x872C2F00, 0x872B4B80, 0x872A6800, - 0x87298480, 0x8728A100, 0x8727BD80, - 0x8726DA00, 0x8725F680, 0x87251300, - 0x87242F80, 0x87234C00, 0x87226880, - 0x87218500, 0x8720A180, 0x871FBE00, - 0x871EDA80, 0x871DF700, 0x871D1380, - 0x871C3000, 0x871B4C80, 0x871A6900, - 0x87198580, 0x8718A200, 0x8717BE80, - 0x8716DB00, 0x8715F780, 0x87151400, - 0x87143080, 0x87134D00, 0x87126980, - 0x87118600, 0x8710A280, 0x870FBF00, - 0x870EDB80, 0x870DF800, 0x870D1480, - 0x870C3100, 0x870B4D80, 0x870A6A00, - 0x87098680, 0x8708A300, 0x8707BF80, - 0x8706DC00, 0x8705F880, 0x87051500, - 0x87043180, 0x87034E00, 0x87026A80, - 0x87018700, 0x8700A380, 0x86FFC000, - 0x86FEDC80, 0x86FDF900, 0x86FD1580, - 0x86FC3200, 0x86FB4E80, 0x86FA6B00, - 0x86F98780, 0x86F8A400, 0x86F7C080, - 0x86F6DD00, 0x86F5F980, 0x86F51600, - 0x86F43280, 0x86F34F00, 0x86F26B80, - 0x86F18800, 0x86F0A480, 0x86EFC100, - 0x86EEDD80, 0x86EDFA00, 0x86ED1680, - 0x86EC3300, 0x86EB4F80, 0x86EA6C00, - 0x86E98880, 0x86E8A500, 0x86E7C180, - 0x86E6DE00, 0x86E5FA80, 0x86E51700, - 0x86E43380, 0x86E35000, 0x86E26C80, - 0x86E18900, 0x86E0A580, 0x86DFC200, - 0x86DEDE80, 0x86DDFB00, 0x86DD1780, - 0x86DC3400, 0x86DB5080, 0x86DA6D00, - 0x86D98980, 0x86D8A600, 0x86D7C280, - 0x86D6DF00, 0x86D5FB80, 0x86D51800, - 0x86D43480, 0x86D35100, 0x86D26D80, - 0x86D18A00, 0x86D0A680, 0x86CFC300, - 0x86CEDF80, 0x86CDFC00, 0x86CD1880, - 0x86CC3500, 0x86CB5180, 0x86CA6E00, - 0x86C98A80, 0x86C8A700, 0x86C7C380, - 0x86C6E000, 0x86C5FC80, 0x86C51900, - 0x86C43580, 0x86C35200, 0x86C26E80, - 0x86C18B00, 0x86C0A780, 0x86BFC400, - 0x86BEE080, 0x86BDFD00, 0x86BD1980, - 0x86BC3600, 0x86BB5280, 0x86BA6F00, - 0x86B98B80, 0x86B8A800, 0x86B7C480, - 0x86B6E100, 0x86B5FD80, 0x86B51A00, - 0x86B43680, 0x86B35300, 0x86B26F80, - 0x86B18C00, 0x86B0A880, 0x86AFC500, - 0x86AEE180, 0x86ADFE00, 0x86AD1A80, - 0x86AC3700, 0x86AB5380, 0x86AA7000, - 0x86A98C80, 0x86A8A900, 0x86A7C580, - 0x86A6E200, 0x86A5FE80, 0x86A51B00, - 0x86A43780, 0x86A35400, 0x86A27080, - 0x86A18D00, 0x86A0A980, 0x869FC600, - 0x869EE280, 0x869DFF00, 0x869D1B80, - 0x869C3800, 0x869B5480, 0x869A7100, - 0x86998D80, 0x8698AA00, 0x8697C680, - 0x8696E300, 0x8695FF80, 0x86951C00, - 0x86943880, 0x86935500, 0x86927180, - 0x86918E00, 0x8690AA80, 0x868FC700, - 0x868EE380, 0x868E0000, 0x868D1C80, - 0x868C3900, 0x868B5580, 0x868A7200, - 0x86898E80, 0x8688AB00, 0x8687C780, - 0x8686E400, 0x86860080, 0x86851D00, - 0x86843980, 0x86835600, 0x86827280, - 0x86818F00, 0x8680AB80, 0x867FC800, - 0x867EE480, 0x867E0100, 0x867D1D80, - 0x867C3A00, 0x867B5680, 0x867A7300, - 0x86798F80, 0x8678AC00, 0x8677C880, - 0x8676E500, 0x86760180, 0x86751E00, - 0x86743A80, 0x86735700, 0x86727380, - 0x86719000, 0x8670AC80, 0x866FC900, - 0x866EE580, 0x866E0200, 0x866D1E80, - 0x866C3B00, 0x866B5780, 0x866A7400, - 0x86699080, 0x8668AD00, 0x8667C980, - 0x8666E600, 0x86660280, 0x86651F00, - 0x86643B80, 0x86635800, 0x86627480, - 0x86619100, 0x8660AD80, 0x865FCA00, - 0x865EE680, 0x865E0300, 0x865D1F80, - 0x865C3C00, 0x865B5880, 0x865A7500, - 0x86599180, 0x8658AE00, 0x8657CA80, - 0x8656E700, 0x86560380, 0x86552000, - 0x86543C80, 0x86535900, 0x86527580, - 0x86519200, 0x8650AE80, 0x864FCB00, - 0x864EE780, 0x864E0400, 0x864D2080, - 0x864C3D00, 0x864B5980, 0x864A7600, - 0x86499280, 0x8648AF00, 0x8647CB80, - 0x8646E800, 0x86460480, 0x86452100, - 0x86443D80, 0x86435A00, 0x86427680, - 0x86419300, 0x8640AF80, 0x863FCC00, - 0x863EE880, 0x863E0500, 0x863D2180, - 0x863C3E00, 0x863B5A80, 0x863A7700, - 0x86399380, 0x8638B000, 0x8637CC80, - 0x8636E900, 0x86360580, 0x86352200, - 0x86343E80, 0x86335B00, 0x86327780, - 0x86319400, 0x8630B080, 0x862FCD00, - 0x862EE980, 0x862E0600, 0x862D2280, - 0x862C3F00, 0x862B5B80, 0x862A7800, - 0x86299480, 0x8628B100, 0x8627CD80, - 0x8626EA00, 0x86260680, 0x86252300, - 0x86243F80, 0x86235C00, 0x86227880, - 0x86219500, 0x8620B180, 0x861FCE00, - 0x861EEA80, 0x861E0700, 0x861D2380, - 0x861C4000, 0x861B5C80, 0x861A7900, - 0x86199580, 0x8618B200, 0x8617CE80, - 0x8616EB00, 0x86160780, 0x86152400, - 0x86144080, 0x86135D00, 0x86127980, - 0x86119600, 0x8610B280, 0x860FCF00, - 0x860EEB80, 0x860E0800, 0x860D2480, - 0x860C4100, 0x860B5D80, 0x860A7A00, - 0x86099680, 0x8608B300, 0x8607CF80, - 0x8606EC00, 0x86060880, 0x86052500, - 0x86044180, 0x86035E00, 0x86027A80, - 0x86019700, 0x8600B380, 0x85FFD000, - 0x85FEEC80, 0x85FE0900, 0x85FD2580, - 0x85FC4200, 0x85FB5E80, 0x85FA7B00, - 0x85F99780, 0x85F8B400, 0x85F7D080, - 0x85F6ED00, 0x85F60980, 0x85F52600, - 0x85F44280, 0x85F35F00, 0x85F27B80, - 0x85F19800, 0x85F0B480, 0x85EFD100, - 0x85EEED80, 0x85EE0A00, 0x85ED2680, - 0x85EC4300, 0x85EB5F80, 0x85EA7C00, - 0x85E99880, 0x85E8B500, 0x85E7D180, - 0x85E6EE00, 0x85E60A80, 0x85E52700, - 0x85E44380, 0x85E36000, 0x85E27C80, - 0x85E19900, 0x85E0B580, 0x85DFD200, - 0x85DEEE80, 0x85DE0B00, 0x85DD2780, - 0x85DC4400, 0x85DB6080, 0x85DA7D00, - 0x85D99980, 0x85D8B600, 0x85D7D280, - 0x85D6EF00, 0x85D60B80, 0x85D52800, - 0x85D44480, 0x85D36100, 0x85D27D80, - 0x85D19A00, 0x85D0B680, 0x85CFD300, - 0x85CEEF80, 0x85CE0C00, 0x85CD2880, - 0x85CC4500, 0x85CB6180, 0x85CA7E00, - 0x85C99A80, 0x85C8B700, 0x85C7D380, - 0x85C6F000, 0x85C60C80, 0x85C52900, - 0x85C44580, 0x85C36200, 0x85C27E80, - 0x85C19B00, 0x85C0B780, 0x85BFD400, - 0x85BEF080, 0x85BE0D00, 0x85BD2980, - 0x85BC4600, 0x85BB6280, 0x85BA7F00, - 0x85B99B80, 0x85B8B800, 0x85B7D480, - 0x85B6F100, 0x85B60D80, 0x85B52A00, - 0x85B44680, 0x85B36300, 0x85B27F80, - 0x85B19C00, 0x85B0B880, 0x85AFD500, - 0x85AEF180, 0x85AE0E00, 0x85AD2A80, - 0x85AC4700, 0x85AB6380, 0x85AA8000, - 0x85A99C80, 0x85A8B900, 0x85A7D580, - 0x85A6F200, 0x85A60E80, 0x85A52B00, - 0x85A44780, 0x85A36400, 0x85A28080, - 0x85A19D00, 0x85A0B980, 0x859FD600, - 0x859EF280, 0x859E0F00, 0x859D2B80, - 0x859C4800, 0x859B6480, 0x859A8100, - 0x85999D80, 0x8598BA00, 0x8597D680, - 0x8596F300, 0x85960F80, 0x85952C00, - 0x85944880, 0x85936500, 0x85928180, - 0x85919E00, 0x8590BA80, 0x858FD700, - 0x858EF380, 0x858E1000, 0x858D2C80, - 0x858C4900, 0x858B6580, 0x858A8200, - 0x85899E80, 0x8588BB00, 0x8587D780, - 0x8586F400, 0x85861080, 0x85852D00, - 0x85844980, 0x85836600, 0x85828280, - 0x85819F00, 0x8580BB80, 0x857FD800, - 0x857EF480, 0x857E1100, 0x857D2D80, - 0x857C4A00, 0x857B6680, 0x857A8300, - 0x85799F80, 0x8578BC00, 0x8577D880, - 0x8576F500, 0x85761180, 0x85752E00, - 0x85744A80, 0x85736700, 0x85728380, - 0x8571A000, 0x8570BC80, 0x856FD900, - 0x856EF580, 0x856E1200, 0x856D2E80, - 0x856C4B00, 0x856B6780, 0x856A8400, - 0x8569A080, 0x8568BD00, 0x8567D980, - 0x8566F600, 0x85661280, 0x85652F00, - 0x85644B80, 0x85636800, 0x85628480, - 0x8561A100, 0x8560BD80, 0x855FDA00, - 0x855EF680, 0x855E1300, 0x855D2F80, - 0x855C4C00, 0x855B6880, 0x855A8500, - 0x8559A180, 0x8558BE00, 0x8557DA80, - 0x8556F700, 0x85561380, 0x85553000, - 0x85544C80, 0x85536900, 0x85528580, - 0x8551A200, 0x8550BE80, 0x854FDB00, - 0x854EF780, 0x854E1400, 0x854D3080, - 0x854C4D00, 0x854B6980, 0x854A8600, - 0x8549A280, 0x8548BF00, 0x8547DB80, - 0x8546F800, 0x85461480, 0x85453100, - 0x85444D80, 0x85436A00, 0x85428680, - 0x8541A300, 0x8540BF80, 0x853FDC00, - 0x853EF880, 0x853E1500, 0x853D3180, - 0x853C4E00, 0x853B6A80, 0x853A8700, - 0x8539A380, 0x8538C000, 0x8537DC80, - 0x8536F900, 0x85361580, 0x85353200, - 0x85344E80, 0x85336B00, 0x85328780, - 0x8531A400, 0x8530C080, 0x852FDD00, - 0x852EF980, 0x852E1600, 0x852D3280, - 0x852C4F00, 0x852B6B80, 0x852A8800, - 0x8529A480, 0x8528C100, 0x8527DD80, - 0x8526FA00, 0x85261680, 0x85253300, - 0x85244F80, 0x85236C00, 0x85228880, - 0x8521A500, 0x8520C180, 0x851FDE00, - 0x851EFA80, 0x851E1700, 0x851D3380, - 0x851C5000, 0x851B6C80, 0x851A8900, - 0x8519A580, 0x8518C200, 0x8517DE80, - 0x8516FB00, 0x85161780, 0x85153400, - 0x85145080, 0x85136D00, 0x85128980, - 0x8511A600, 0x8510C280, 0x850FDF00, - 0x850EFB80, 0x850E1800, 0x850D3480, - 0x850C5100, 0x850B6D80, 0x850A8A00, - 0x8509A680, 0x8508C300, 0x8507DF80, - 0x8506FC00, 0x85061880, 0x85053500, - 0x85045180, 0x85036E00, 0x85028A80, - 0x8501A700, 0x8500C380, 0x84FFE000, - 0x84FEFC80, 0x84FE1900, 0x84FD3580, - 0x84FC5200, 0x84FB6E80, 0x84FA8B00, - 0x84F9A780, 0x84F8C400, 0x84F7E080, - 0x84F6FD00, 0x84F61980, 0x84F53600, - 0x84F45280, 0x84F36F00, 0x84F28B80, - 0x84F1A800, 0x84F0C480, 0x84EFE100, - 0x84EEFD80, 0x84EE1A00, 0x84ED3680, - 0x84EC5300, 0x84EB6F80, 0x84EA8C00, - 0x84E9A880, 0x84E8C500, 0x84E7E180, - 0x84E6FE00, 0x84E61A80, 0x84E53700, - 0x84E45380, 0x84E37000, 0x84E28C80, - 0x84E1A900, 0x84E0C580, 0x84DFE200, - 0x84DEFE80, 0x84DE1B00, 0x84DD3780, - 0x84DC5400, 0x84DB7080, 0x84DA8D00, - 0x84D9A980, 0x84D8C600, 0x84D7E280, - 0x84D6FF00, 0x84D61B80, 0x84D53800, - 0x84D45480, 0x84D37100, 0x84D28D80, - 0x84D1AA00, 0x84D0C680, 0x84CFE300, - 0x84CEFF80, 0x84CE1C00, 0x84CD3880, - 0x84CC5500, 0x84CB7180, 0x84CA8E00, - 0x84C9AA80, 0x84C8C700, 0x84C7E380, - 0x84C70000, 0x84C61C80, 0x84C53900, - 0x84C45580, 0x84C37200, 0x84C28E80, - 0x84C1AB00, 0x84C0C780, 0x84BFE400, - 0x84BF0080, 0x84BE1D00, 0x84BD3980, - 0x84BC5600, 0x84BB7280, 0x84BA8F00, - 0x84B9AB80, 0x84B8C800, 0x84B7E480, - 0x84B70100, 0x84B61D80, 0x84B53A00, - 0x84B45680, 0x84B37300, 0x84B28F80, - 0x84B1AC00, 0x84B0C880, 0x84AFE500, - 0x84AF0180, 0x84AE1E00, 0x84AD3A80, - 0x84AC5700, 0x84AB7380, 0x84AA9000, - 0x84A9AC80, 0x84A8C900, 0x84A7E580, - 0x84A70200, 0x84A61E80, 0x84A53B00, - 0x84A45780, 0x84A37400, 0x84A29080, - 0x84A1AD00, 0x84A0C980, 0x849FE600, - 0x849F0280, 0x849E1F00, 0x849D3B80, - 0x849C5800, 0x849B7480, 0x849A9100, - 0x8499AD80, 0x8498CA00, 0x8497E680, - 0x84970300, 0x84961F80, 0x84953C00, - 0x84945880, 0x84937500, 0x84929180, - 0x8491AE00, 0x8490CA80, 0x848FE700, - 0x848F0380, 0x848E2000, 0x848D3C80, - 0x848C5900, 0x848B7580, 0x848A9200, - 0x8489AE80, 0x8488CB00, 0x8487E780, - 0x84870400, 0x84862080, 0x84853D00, - 0x84845980, 0x84837600, 0x84829280, - 0x8481AF00, 0x8480CB80, 0x847FE800, - 0x847F0480, 0x847E2100, 0x847D3D80, - 0x847C5A00, 0x847B7680, 0x847A9300, - 0x8479AF80, 0x8478CC00, 0x8477E880, - 0x84770500, 0x84762180, 0x84753E00, - 0x84745A80, 0x84737700, 0x84729380, - 0x8471B000, 0x8470CC80, 0x846FE900, - 0x846F0580, 0x846E2200, 0x846D3E80, - 0x846C5B00, 0x846B7780, 0x846A9400, - 0x8469B080, 0x8468CD00, 0x8467E980, - 0x84670600, 0x84662280, 0x84653F00, - 0x84645B80, 0x84637800, 0x84629480, - 0x8461B100, 0x8460CD80, 0x845FEA00, - 0x845F0680, 0x845E2300, 0x845D3F80, - 0x845C5C00, 0x845B7880, 0x845A9500, - 0x8459B180, 0x8458CE00, 0x8457EA80, - 0x84570700, 0x84562380, 0x84554000, - 0x84545C80, 0x84537900, 0x84529580, - 0x8451B200, 0x8450CE80, 0x844FEB00, - 0x844F0780, 0x844E2400, 0x844D4080, - 0x844C5D00, 0x844B7980, 0x844A9600, - 0x8449B280, 0x8448CF00, 0x8447EB80, - 0x84470800, 0x84462480, 0x84454100, - 0x84445D80, 0x84437A00, 0x84429680, - 0x8441B300, 0x8440CF80, 0x843FEC00, - 0x843F0880, 0x843E2500, 0x843D4180, - 0x843C5E00, 0x843B7A80, 0x843A9700, - 0x8439B380, 0x8438D000, 0x8437EC80, - 0x84370900, 0x84362580, 0x84354200, - 0x84345E80, 0x84337B00, 0x84329780, - 0x8431B400, 0x8430D080, 0x842FED00, - 0x842F0980, 0x842E2600, 0x842D4280, - 0x842C5F00, 0x842B7B80, 0x842A9800, - 0x8429B480, 0x8428D100, 0x8427ED80, - 0x84270A00, 0x84262680, 0x84254300, - 0x84245F80, 0x84237C00, 0x84229880, - 0x8421B500, 0x8420D180, 0x841FEE00, - 0x841F0A80, 0x841E2700, 0x841D4380, - 0x841C6000, 0x841B7C80, 0x841A9900, - 0x8419B580, 0x8418D200, 0x8417EE80, - 0x84170B00, 0x84162780, 0x84154400, - 0x84146080, 0x84137D00, 0x84129980, - 0x8411B600, 0x8410D280, 0x840FEF00, - 0x840F0B80, 0x840E2800, 0x840D4480, - 0x840C6100, 0x840B7D80, 0x840A9A00, - 0x8409B680, 0x8408D300, 0x8407EF80, - 0x84070C00, 0x84062880, 0x84054500, - 0x84046180, 0x84037E00, 0x84029A80, - 0x8401B700, 0x8400D380, 0x83FFF000, - 0x83FF0C80, 0x83FE2900, 0x83FD4580, - 0x83FC6200, 0x83FB7E80, 0x83FA9B00, - 0x83F9B780, 0x83F8D400, 0x83F7F080, - 0x83F70D00, 0x83F62980, 0x83F54600, - 0x83F46280, 0x83F37F00, 0x83F29B80, - 0x83F1B800, 0x83F0D480, 0x83EFF100, - 0x83EF0D80, 0x83EE2A00, 0x83ED4680, - 0x83EC6300, 0x83EB7F80, 0x83EA9C00, - 0x83E9B880, 0x83E8D500, 0x83E7F180, - 0x83E70E00, 0x83E62A80, 0x83E54700, - 0x83E46380, 0x83E38000, 0x83E29C80, - 0x83E1B900, 0x83E0D580, 0x83DFF200, - 0x83DF0E80, 0x83DE2B00, 0x83DD4780, - 0x83DC6400, 0x83DB8080, 0x83DA9D00, - 0x83D9B980, 0x83D8D600, 0x83D7F280, - 0x83D70F00, 0x83D62B80, 0x83D54800, - 0x83D46480, 0x83D38100, 0x83D29D80, - 0x83D1BA00, 0x83D0D680, 0x83CFF300, - 0x83CF0F80, 0x83CE2C00, 0x83CD4880, - 0x83CC6500, 0x83CB8180, 0x83CA9E00, - 0x83C9BA80, 0x83C8D700, 0x83C7F380, - 0x83C71000, 0x83C62C80, 0x83C54900, - 0x83C46580, 0x83C38200, 0x83C29E80, - 0x83C1BB00, 0x83C0D780, 0x83BFF400, - 0x83BF1080, 0x83BE2D00, 0x83BD4980, - 0x83BC6600, 0x83BB8280, 0x83BA9F00, - 0x83B9BB80, 0x83B8D800, 0x83B7F480, - 0x83B71100, 0x83B62D80, 0x83B54A00, - 0x83B46680, 0x83B38300, 0x83B29F80, - 0x83B1BC00, 0x83B0D880, 0x83AFF500, - 0x83AF1180, 0x83AE2E00, 0x83AD4A80, - 0x83AC6700, 0x83AB8380, 0x83AAA000, - 0x83A9BC80, 0x83A8D900, 0x83A7F580, - 0x83A71200, 0x83A62E80, 0x83A54B00, - 0x83A46780, 0x83A38400, 0x83A2A080, - 0x83A1BD00, 0x83A0D980, 0x839FF600, - 0x839F1280, 0x839E2F00, 0x839D4B80, - 0x839C6800, 0x839B8480, 0x839AA100, - 0x8399BD80, 0x8398DA00, 0x8397F680, - 0x83971300, 0x83962F80, 0x83954C00, - 0x83946880, 0x83938500, 0x8392A180, - 0x8391BE00, 0x8390DA80, 0x838FF700, - 0x838F1380, 0x838E3000, 0x838D4C80, - 0x838C6900, 0x838B8580, 0x838AA200, - 0x8389BE80, 0x8388DB00, 0x8387F780, - 0x83871400, 0x83863080, 0x83854D00, - 0x83846980, 0x83838600, 0x8382A280, - 0x8381BF00, 0x8380DB80, 0x837FF800, - 0x837F1480, 0x837E3100, 0x837D4D80, - 0x837C6A00, 0x837B8680, 0x837AA300, - 0x8379BF80, 0x8378DC00, 0x8377F880, - 0x83771500, 0x83763180, 0x83754E00, - 0x83746A80, 0x83738700, 0x8372A380, - 0x8371C000, 0x8370DC80, 0x836FF900, - 0x836F1580, 0x836E3200, 0x836D4E80, - 0x836C6B00, 0x836B8780, 0x836AA400, - 0x8369C080, 0x8368DD00, 0x8367F980, - 0x83671600, 0x83663280, 0x83654F00, - 0x83646B80, 0x83638800, 0x8362A480, - 0x8361C100, 0x8360DD80, 0x835FFA00, - 0x835F1680, 0x835E3300, 0x835D4F80, - 0x835C6C00, 0x835B8880, 0x835AA500, - 0x8359C180, 0x8358DE00, 0x8357FA80, - 0x83571700, 0x83563380, 0x83555000, - 0x83546C80, 0x83538900, 0x8352A580, - 0x8351C200, 0x8350DE80, 0x834FFB00, - 0x834F1780, 0x834E3400, 0x834D5080, - 0x834C6D00, 0x834B8980, 0x834AA600, - 0x8349C280, 0x8348DF00, 0x8347FB80, - 0x83471800, 0x83463480, 0x83455100, - 0x83446D80, 0x83438A00, 0x8342A680, - 0x8341C300, 0x8340DF80, 0x833FFC00, - 0x833F1880, 0x833E3500, 0x833D5180, - 0x833C6E00, 0x833B8A80, 0x833AA700, - 0x8339C380, 0x8338E000, 0x8337FC80, - 0x83371900, 0x83363580, 0x83355200, - 0x83346E80, 0x83338B00, 0x8332A780, - 0x8331C400, 0x8330E080, 0x832FFD00, - 0x832F1980, 0x832E3600, 0x832D5280, - 0x832C6F00, 0x832B8B80, 0x832AA800, - 0x8329C480, 0x8328E100, 0x8327FD80, - 0x83271A00, 0x83263680, 0x83255300, - 0x83246F80, 0x83238C00, 0x8322A880, - 0x8321C500, 0x8320E180, 0x831FFE00, - 0x831F1A80, 0x831E3700, 0x831D5380, - 0x831C7000, 0x831B8C80, 0x831AA900, - 0x8319C580, 0x8318E200, 0x8317FE80, - 0x83171B00, 0x83163780, 0x83155400, - 0x83147080, 0x83138D00, 0x8312A980, - 0x8311C600, 0x8310E280, 0x830FFF00, - 0x830F1B80, 0x830E3800, 0x830D5480, - 0x830C7100, 0x830B8D80, 0x830AAA00, - 0x8309C680, 0x8308E300, 0x8307FF80, - 0x83071C00, 0x83063880, 0x83055500, - 0x83047180, 0x83038E00, 0x8302AA80, - 0x8301C700, 0x8300E380, 0x83040000, - 0x83032880, 0x83025100, 0x83017980, - 0x8300A200, 0x82FFCA80, 0x82FEF300, - 0x82FE1B80, 0x82FD4400, 0x82FC6C80, - 0x82FB9500, 0x82FABD80, 0x82F9E600, - 0x82F90E80, 0x82F83700, 0x82F75F80, - 0x82F68800, 0x82F5B080, 0x82F4D900, - 0x82F40180, 0x82F32A00, 0x82F25280, - 0x82F17B00, 0x82F0A380, 0x82EFCC00, - 0x82EEF480, 0x82EE1D00, 0x82ED4580, - 0x82EC6E00, 0x82EB9680, 0x82EABF00, - 0x82E9E780, 0x82E91000, 0x82E83880, - 0x82E76100, 0x82E68980, 0x82E5B200, - 0x82E4DA80, 0x82E40300, 0x82E32B80, - 0x82E25400, 0x82E17C80, 0x82E0A500, - 0x82DFCD80, 0x82DEF600, 0x82DE1E80, - 0x82DD4700, 0x82DC6F80, 0x82DB9800, - 0x82DAC080, 0x82D9E900, 0x82D91180, - 0x82D83A00, 0x82D76280, 0x82D68B00, - 0x82D5B380, 0x82D4DC00, 0x82D40480, - 0x82D32D00, 0x82D25580, 0x82D17E00, - 0x82D0A680, 0x82CFCF00, 0x82CEF780, - 0x82CE2000, 0x82CD4880, 0x82CC7100, - 0x82CB9980, 0x82CAC200, 0x82C9EA80, - 0x82C91300, 0x82C83B80, 0x82C76400, - 0x82C68C80, 0x82C5B500, 0x82C4DD80, - 0x82C40600, 0x82C32E80, 0x82C25700, - 0x82C17F80, 0x82C0A800, 0x82BFD080, - 0x82BEF900, 0x82BE2180, 0x82BD4A00, - 0x82BC7280, 0x82BB9B00, 0x82BAC380, - 0x82B9EC00, 0x82B91480, 0x82B83D00, - 0x82B76580, 0x82B68E00, 0x82B5B680, - 0x82B4DF00, 0x82B40780, 0x82B33000, - 0x82B25880, 0x82B18100, 0x82B0A980, - 0x82AFD200, 0x82AEFA80, 0x82AE2300, - 0x82AD4B80, 0x82AC7400, 0x82AB9C80, - 0x82AAC500, 0x82A9ED80, 0x82A91600, - 0x82A83E80, 0x82A76700, 0x82A68F80, - 0x82A5B800, 0x82A4E080, 0x82A40900, - 0x82A33180, 0x82A25A00, 0x82A18280, - 0x82A0AB00, 0x829FD380, 0x829EFC00, - 0x829E2480, 0x829D4D00, 0x829C7580, - 0x829B9E00, 0x829AC680, 0x8299EF00, - 0x82991780, 0x82984000, 0x82976880, - 0x82969100, 0x8295B980, 0x8294E200, - 0x82940A80, 0x82933300, 0x82925B80, - 0x82918400, 0x8290AC80, 0x828FD500, - 0x828EFD80, 0x828E2600, 0x828D4E80, - 0x828C7700, 0x828B9F80, 0x828AC800, - 0x8289F080, 0x82891900, 0x82884180, - 0x82876A00, 0x82869280, 0x8285BB00, - 0x8284E380, 0x82840C00, 0x82833480, - 0x82825D00, 0x82818580, 0x8280AE00, - 0x827FD680, 0x827EFF00, 0x827E2780, - 0x827D5000, 0x827C7880, 0x827BA100, - 0x827AC980, 0x8279F200, 0x82791A80, - 0x82784300, 0x82776B80, 0x82769400, - 0x8275BC80, 0x8274E500, 0x82740D80, - 0x82733600, 0x82725E80, 0x82718700, - 0x8270AF80, 0x826FD800, 0x826F0080, - 0x826E2900, 0x826D5180, 0x826C7A00, - 0x826BA280, 0x826ACB00, 0x8269F380, - 0x82691C00, 0x82684480, 0x82676D00, - 0x82669580, 0x8265BE00, 0x8264E680, - 0x82640F00, 0x82633780, 0x82626000, - 0x82618880, 0x8260B100, 0x825FD980, - 0x825F0200, 0x825E2A80, 0x825D5300, - 0x825C7B80, 0x825BA400, 0x825ACC80, - 0x8259F500, 0x82591D80, 0x82584600, - 0x82576E80, 0x82569700, 0x8255BF80, - 0x8254E800, 0x82541080, 0x82533900, - 0x82526180, 0x82518A00, 0x8250B280, - 0x824FDB00, 0x824F0380, 0x824E2C00, - 0x824D5480, 0x824C7D00, 0x824BA580, - 0x824ACE00, 0x8249F680, 0x82491F00, - 0x82484780, 0x82477000, 0x82469880, - 0x8245C100, 0x8244E980, 0x82441200, - 0x82433A80, 0x82426300, 0x82418B80, - 0x8240B400, 0x823FDC80, 0x823F0500, - 0x823E2D80, 0x823D5600, 0x823C7E80, - 0x823BA700, 0x823ACF80, 0x8239F800, - 0x82392080, 0x82384900, 0x82377180, - 0x82369A00, 0x8235C280, 0x8234EB00, - 0x82341380, 0x82333C00, 0x82326480, - 0x82318D00, 0x8230B580, 0x822FDE00, - 0x822F0680, 0x822E2F00, 0x822D5780, - 0x822C8000, 0x822BA880, 0x822AD100, - 0x8229F980, 0x82292200, 0x82284A80, - 0x82277300, 0x82269B80, 0x8225C400, - 0x8224EC80, 0x82241500, 0x82233D80, - 0x82226600, 0x82218E80, 0x8220B700, - 0x821FDF80, 0x821F0800, 0x821E3080, - 0x821D5900, 0x821C8180, 0x821BAA00, - 0x821AD280, 0x8219FB00, 0x82192380, - 0x82184C00, 0x82177480, 0x82169D00, - 0x8215C580, 0x8214EE00, 0x82141680, - 0x82133F00, 0x82126780, 0x82119000, - 0x8210B880, 0x820FE100, 0x820F0980, - 0x820E3200, 0x820D5A80, 0x820C8300, - 0x820BAB80, 0x820AD400, 0x8209FC80, - 0x82092500, 0x82084D80, 0x82077600, - 0x82069E80, 0x8205C700, 0x8204EF80, - 0x82041800, 0x82034080, 0x82026900, - 0x82019180, 0x8200BA00, 0x81FFE280, - 0x81FF0B00, 0x81FE3380, 0x81FD5C00, - 0x81FC8480, 0x81FBAD00, 0x81FAD580, - 0x81F9FE00, 0x81F92680, 0x81F84F00, - 0x81F77780, 0x81F6A000, 0x81F5C880, - 0x81F4F100, 0x81F41980, 0x81F34200, - 0x81F26A80, 0x81F19300, 0x81F0BB80, - 0x81EFE400, 0x81EF0C80, 0x81EE3500, - 0x81ED5D80, 0x81EC8600, 0x81EBAE80, - 0x81EAD700, 0x81E9FF80, 0x81E92800, - 0x81E85080, 0x81E77900, 0x81E6A180, - 0x81E5CA00, 0x81E4F280, 0x81E41B00, - 0x81E34380, 0x81E26C00, 0x81E19480, - 0x81E0BD00, 0x81DFE580, 0x81DF0E00, - 0x81DE3680, 0x81DD5F00, 0x81DC8780, - 0x81DBB000, 0x81DAD880, 0x81DA0100, - 0x81D92980, 0x81D85200, 0x81D77A80, - 0x81D6A300, 0x81D5CB80, 0x81D4F400, - 0x81D41C80, 0x81D34500, 0x81D26D80, - 0x81D19600, 0x81D0BE80, 0x81CFE700, - 0x81CF0F80, 0x81CE3800, 0x81CD6080, - 0x81CC8900, 0x81CBB180, 0x81CADA00, - 0x81CA0280, 0x81C92B00, 0x81C85380, - 0x81C77C00, 0x81C6A480, 0x81C5CD00, - 0x81C4F580, 0x81C41E00, 0x81C34680, - 0x81C26F00, 0x81C19780, 0x81C0C000, - 0x81BFE880, 0x81BF1100, 0x81BE3980, - 0x81BD6200, 0x81BC8A80, 0x81BBB300, - 0x81BADB80, 0x81BA0400, 0x81B92C80, - 0x81B85500, 0x81B77D80, 0x81B6A600, - 0x81B5CE80, 0x81B4F700, 0x81B41F80, - 0x81B34800, 0x81B27080, 0x81B19900, - 0x81B0C180, 0x81AFEA00, 0x81AF1280, - 0x81AE3B00, 0x81AD6380, 0x81AC8C00, - 0x81ABB480, 0x81AADD00, 0x81AA0580, - 0x81A92E00, 0x81A85680, 0x81A77F00, - 0x81A6A780, 0x81A5D000, 0x81A4F880, - 0x81A42100, 0x81A34980, 0x81A27200, - 0x81A19A80, 0x81A0C300, 0x819FEB80, - 0x819F1400, 0x819E3C80, 0x819D6500, - 0x819C8D80, 0x819BB600, 0x819ADE80, - 0x819A0700, 0x81992F80, 0x81985800, - 0x81978080, 0x8196A900, 0x8195D180, - 0x8194FA00, 0x81942280, 0x81934B00, - 0x81927380, 0x81919C00, 0x8190C480, - 0x818FED00, 0x818F1580, 0x818E3E00, - 0x818D6680, 0x818C8F00, 0x818BB780, - 0x818AE000, 0x818A0880, 0x81893100, - 0x81885980, 0x81878200, 0x8186AA80, - 0x8185D300, 0x8184FB80, 0x81842400, - 0x81834C80, 0x81827500, 0x81819D80, - 0x8180C600, 0x817FEE80, 0x817F1700, - 0x817E3F80, 0x817D6800, 0x817C9080, - 0x817BB900, 0x817AE180, 0x817A0A00, - 0x81793280, 0x81785B00, 0x81778380, - 0x8176AC00, 0x8175D480, 0x8174FD00, - 0x81742580, 0x81734E00, 0x81727680, - 0x81719F00, 0x8170C780, 0x816FF000, - 0x816F1880, 0x816E4100, 0x816D6980, - 0x816C9200, 0x816BBA80, 0x816AE300, - 0x816A0B80, 0x81693400, 0x81685C80, - 0x81678500, 0x8166AD80, 0x8165D600, - 0x8164FE80, 0x81642700, 0x81634F80, - 0x81627800, 0x8161A080, 0x8160C900, - 0x815FF180, 0x815F1A00, 0x815E4280, - 0x815D6B00, 0x815C9380, 0x815BBC00, - 0x815AE480, 0x815A0D00, 0x81593580, - 0x81585E00, 0x81578680, 0x8156AF00, - 0x8155D780, 0x81550000, 0x81542880, - 0x81535100, 0x81527980, 0x8151A200, - 0x8150CA80, 0x814FF300, 0x814F1B80, - 0x814E4400, 0x814D6C80, 0x814C9500, - 0x814BBD80, 0x814AE600, 0x814A0E80, - 0x81493700, 0x81485F80, 0x81478800, - 0x8146B080, 0x8145D900, 0x81450180, - 0x81442A00, 0x81435280, 0x81427B00, - 0x8141A380, 0x8140CC00, 0x813FF480, - 0x813F1D00, 0x813E4580, 0x813D6E00, - 0x813C9680, 0x813BBF00, 0x813AE780, - 0x813A1000, 0x81393880, 0x81386100, - 0x81378980, 0x8136B200, 0x8135DA80, - 0x81350300, 0x81342B80, 0x81335400, - 0x81327C80, 0x8131A500, 0x8130CD80, - 0x812FF600, 0x812F1E80, 0x812E4700, - 0x812D6F80, 0x812C9800, 0x812BC080, - 0x812AE900, 0x812A1180, 0x81293A00, - 0x81286280, 0x81278B00, 0x8126B380, - 0x8125DC00, 0x81250480, 0x81242D00, - 0x81235580, 0x81227E00, 0x8121A680, - 0x8120CF00, 0x811FF780, 0x811F2000, - 0x811E4880, 0x811D7100, 0x811C9980, - 0x811BC200, 0x811AEA80, 0x811A1300, - 0x81193B80, 0x81186400, 0x81178C80, - 0x8116B500, 0x8115DD80, 0x81150600, - 0x81142E80, 0x81135700, 0x81127F80, - 0x8111A800, 0x8110D080, 0x810FF900, - 0x810F2180, 0x810E4A00, 0x810D7280, - 0x810C9B00, 0x810BC380, 0x810AEC00, - 0x810A1480, 0x81093D00, 0x81086580, - 0x81078E00, 0x8106B680, 0x8105DF00, - 0x81050780, 0x81043000, 0x81035880, - 0x81028100, 0x8101A980, 0x8100D200, - 0x80FFFA80, 0x80FF2300, 0x80FE4B80, - 0x80FD7400, 0x80FC9C80, 0x80FBC500, - 0x80FAED80, 0x80FA1600, 0x80F93E80, - 0x80F86700, 0x80F78F80, 0x80F6B800, - 0x80F5E080, 0x80F50900, 0x80F43180, - 0x80F35A00, 0x80F28280, 0x80F1AB00, - 0x80F0D380, 0x80EFFC00, 0x80EF2480, - 0x80EE4D00, 0x80ED7580, 0x80EC9E00, - 0x80EBC680, 0x80EAEF00, 0x80EA1780, - 0x80E94000, 0x80E86880, 0x80E79100, - 0x80E6B980, 0x80E5E200, 0x80E50A80, - 0x80E43300, 0x80E35B80, 0x80E28400, - 0x80E1AC80, 0x80E0D500, 0x80DFFD80, - 0x80DF2600, 0x80DE4E80, 0x80DD7700, - 0x80DC9F80, 0x80DBC800, 0x80DAF080, - 0x80DA1900, 0x80D94180, 0x80D86A00, - 0x80D79280, 0x80D6BB00, 0x80D5E380, - 0x80D50C00, 0x80D43480, 0x80D35D00, - 0x80D28580, 0x80D1AE00, 0x80D0D680, - 0x80CFFF00, 0x80CF2780, 0x80CE5000, - 0x80CD7880, 0x80CCA100, 0x80CBC980, - 0x80CAF200, 0x80CA1A80, 0x80C94300, - 0x80C86B80, 0x80C79400, 0x80C6BC80, - 0x80C5E500, 0x80C50D80, 0x80C43600, - 0x80C35E80, 0x80C28700, 0x80C1AF80, - 0x80C0D800, 0x80C00080, 0x80BF2900, - 0x80BE5180, 0x80BD7A00, 0x80BCA280, - 0x80BBCB00, 0x80BAF380, 0x80BA1C00, - 0x80B94480, 0x80B86D00, 0x80B79580, - 0x80B6BE00, 0x80B5E680, 0x80B50F00, - 0x80B43780, 0x80B36000, 0x80B28880, - 0x80B1B100, 0x80B0D980, 0x80B00200, - 0x80AF2A80, 0x80AE5300, 0x80AD7B80, - 0x80ACA400, 0x80ABCC80, 0x80AAF500, - 0x80AA1D80, 0x80A94600, 0x80A86E80, - 0x80A79700, 0x80A6BF80, 0x80A5E800, - 0x80A51080, 0x80A43900, 0x80A36180, - 0x80A28A00, 0x80A1B280, 0x80A0DB00, - 0x80A00380, 0x809F2C00, 0x809E5480, - 0x809D7D00, 0x809CA580, 0x809BCE00, - 0x809AF680, 0x809A1F00, 0x80994780, - 0x80987000, 0x80979880, 0x8096C100, - 0x8095E980, 0x80951200, 0x80943A80, - 0x80936300, 0x80928B80, 0x8091B400, - 0x8090DC80, 0x80900500, 0x808F2D80, - 0x808E5600, 0x808D7E80, 0x808CA700, - 0x808BCF80, 0x808AF800, 0x808A2080, - 0x80894900, 0x80887180, 0x80879A00, - 0x8086C280, 0x8085EB00, 0x80851380, - 0x80843C00, 0x80836480, 0x80828D00, - 0x8081B580, 0x8080DE00, 0x80800680, - 0x807F2F00, 0x807E5780, 0x807D8000, - 0x807CA880, 0x807BD100, 0x807AF980, - 0x807A2200, 0x80794A80, 0x80787300, - 0x80779B80, 0x8076C400, 0x8075EC80, - 0x80751500, 0x80743D80, 0x80736600, - 0x80728E80, 0x8071B700, 0x8070DF80, - 0x80700800, 0x806F3080, 0x806E5900, - 0x806D8180, 0x806CAA00, 0x806BD280, - 0x806AFB00, 0x806A2380, 0x80694C00, - 0x80687480, 0x80679D00, 0x8066C580, - 0x8065EE00, 0x80651680, 0x80643F00, - 0x80636780, 0x80629000, 0x8061B880, - 0x8060E100, 0x80600980, 0x805F3200, - 0x805E5A80, 0x805D8300, 0x805CAB80, - 0x805BD400, 0x805AFC80, 0x805A2500, - 0x80594D80, 0x80587600, 0x80579E80, - 0x8056C700, 0x8055EF80, 0x80551800, - 0x80544080, 0x80536900, 0x80529180, - 0x8051BA00, 0x8050E280, 0x80500B00, - 0x804F3380, 0x804E5C00, 0x804D8480, - 0x804CAD00, 0x804BD580, 0x804AFE00, - 0x804A2680, 0x80494F00, 0x80487780, - 0x8047A000, 0x8046C880, 0x8045F100, - 0x80451980, 0x80444200, 0x80436A80, - 0x80429300, 0x8041BB80, 0x8040E400, - 0x80400C80, 0x803F3500, 0x803E5D80, - 0x803D8600, 0x803CAE80, 0x803BD700, - 0x803AFF80, 0x803A2800, 0x80395080, - 0x80387900, 0x8037A180, 0x8036CA00, - 0x8035F280, 0x80351B00, 0x80344380, - 0x80336C00, 0x80329480, 0x8031BD00, - 0x8030E580, 0x80300E00, 0x802F3680, - 0x802E5F00, 0x802D8780, 0x802CB000, - 0x802BD880, 0x802B0100, 0x802A2980, - 0x80295200, 0x80287A80, 0x8027A300, - 0x8026CB80, 0x8025F400, 0x80251C80, - 0x80244500, 0x80236D80, 0x80229600, - 0x8021BE80, 0x8020E700, 0x80200F80, - 0x801F3800, 0x801E6080, 0x801D8900, - 0x801CB180, 0x801BDA00, 0x801B0280, - 0x801A2B00, 0x80195380, 0x80187C00, - 0x8017A480, 0x8016CD00, 0x8015F580, - 0x80151E00, 0x80144680, 0x80136F00, - 0x80129780, 0x8011C000, 0x8010E880, - 0x80101100, 0x800F3980, 0x800E6200, - 0x800D8A80, 0x800CB300, 0x800BDB80, - 0x800B0400, 0x800A2C80, 0x80095500, - 0x80087D80, 0x8007A600, 0x8006CE80, - 0x8005F700, 0x80051F80, 0x80044800, - 0x80037080, 0x80029900, 0x8001C180, - 0x8000EA00, 0x80001280, 0x7FFF3B00, - 0x7FFE6380, 0x7FFD8C00, 0x7FFCB480, - 0x7FFBDD00, 0x7FFB0580, 0x7FFA2E00, - 0x7FF95680, 0x7FF87F00, 0x7FF7A780, - 0x7FF6D000, 0x7FF5F880, 0x7FF52100, - 0x7FF44980, 0x7FF37200, 0x7FF29A80, - 0x7FF1C300, 0x7FF0EB80, 0x7FF01400, - 0x7FEF3C80, 0x7FEE6500, 0x7FED8D80, - 0x7FECB600, 0x7FEBDE80, 0x7FEB0700, - 0x7FEA2F80, 0x7FE95800, 0x7FE88080, - 0x7FE7A900, 0x7FE6D180, 0x7FE5FA00, - 0x7FE52280, 0x7FE44B00, 0x7FE37380, - 0x7FE29C00, 0x7FE1C480, 0x7FE0ED00, - 0x7FE01580, 0x7FDF3E00, 0x7FDE6680, - 0x7FDD8F00, 0x7FDCB780, 0x7FDBE000, - 0x7FDB0880, 0x7FDA3100, 0x7FD95980, - 0x7FD88200, 0x7FD7AA80, 0x7FD6D300, - 0x7FD5FB80, 0x7FD52400, 0x7FD44C80, - 0x7FD37500, 0x7FD29D80, 0x7FD1C600, - 0x7FD0EE80, 0x7FD01700, 0x7FCF3F80, - 0x7FCE6800, 0x7FCD9080, 0x7FCCB900, - 0x7FCBE180, 0x7FCB0A00, 0x7FCA3280, - 0x7FC95B00, 0x7FC88380, 0x7FC7AC00, - 0x7FC6D480, 0x7FC5FD00, 0x7FC52580, - 0x7FC44E00, 0x7FC37680, 0x7FC29F00, - 0x7FC1C780, 0x7FC0F000, 0x7FC01880, - 0x7FBF4100, 0x7FBE6980, 0x7FBD9200, - 0x7FBCBA80, 0x7FBBE300, 0x7FBB0B80, - 0x7FBA3400, 0x7FB95C80, 0x7FB88500, - 0x7FB7AD80, 0x7FB6D600, 0x7FB5FE80, - 0x7FB52700, 0x7FB44F80, 0x7FB37800, - 0x7FB2A080, 0x7FB1C900, 0x7FB0F180, - 0x7FB01A00, 0x7FAF4280, 0x7FAE6B00, - 0x7FAD9380, 0x7FACBC00, 0x7FABE480, - 0x7FAB0D00, 0x7FAA3580, 0x7FA95E00, - 0x7FA88680, 0x7FA7AF00, 0x7FA6D780, - 0x7FA60000, 0x7FA52880, 0x7FA45100, - 0x7FA37980, 0x7FA2A200, 0x7FA1CA80, - 0x7FA0F300, 0x7FA01B80, 0x7F9F4400, - 0x7F9E6C80, 0x7F9D9500, 0x7F9CBD80, - 0x7F9BE600, 0x7F9B0E80, 0x7F9A3700, - 0x7F995F80, 0x7F988800, 0x7F97B080, - 0x7F96D900, 0x7F960180, 0x7F952A00, - 0x7F945280, 0x7F937B00, 0x7F92A380, - 0x7F91CC00, 0x7F90F480, 0x7F901D00, - 0x7F8F4580, 0x7F8E6E00, 0x7F8D9680, - 0x7F8CBF00, 0x7F8BE780, 0x7F8B1000, - 0x7F8A3880, 0x7F896100, 0x7F888980, - 0x7F87B200, 0x7F86DA80, 0x7F860300, - 0x7F852B80, 0x7F845400, 0x7F837C80, - 0x7F82A500, 0x7F81CD80, 0x7F80F600, - 0x7F801E80, 0x7F7F4700, 0x7F7E6F80, - 0x7F7D9800, 0x7F7CC080, 0x7F7BE900, - 0x7F7B1180, 0x7F7A3A00, 0x7F796280, - 0x7F788B00, 0x7F77B380, 0x7F76DC00, - 0x7F760480, 0x7F752D00, 0x7F745580, - 0x7F737E00, 0x7F72A680, 0x7F71CF00, - 0x7F70F780, 0x7F702000, 0x7F6F4880, - 0x7F6E7100, 0x7F6D9980, 0x7F6CC200, - 0x7F6BEA80, 0x7F6B1300, 0x7F6A3B80, - 0x7F696400, 0x7F688C80, 0x7F67B500, - 0x7F66DD80, 0x7F660600, 0x7F652E80, - 0x7F645700, 0x7F637F80, 0x7F62A800, - 0x7F61D080, 0x7F60F900, 0x7F602180, - 0x7F5F4A00, 0x7F5E7280, 0x7F5D9B00, - 0x7F5CC380, 0x7F5BEC00, 0x7F5B1480, - 0x7F5A3D00, 0x7F596580, 0x7F588E00, - 0x7F57B680, 0x7F56DF00, 0x7F560780, - 0x7F553000, 0x7F545880, 0x7F538100, - 0x7F52A980, 0x7F51D200, 0x7F50FA80, - 0x7F502300, 0x7F4F4B80, 0x7F4E7400, - 0x7F4D9C80, 0x7F4CC500, 0x7F4BED80, - 0x7F4B1600, 0x7F4A3E80, 0x7F496700, - 0x7F488F80, 0x7F47B800, 0x7F46E080, - 0x7F460900, 0x7F453180, 0x7F445A00, - 0x7F438280, 0x7F42AB00, 0x7F41D380, - 0x7F40FC00, 0x7F402480, 0x7F3F4D00, - 0x7F3E7580, 0x7F3D9E00, 0x7F3CC680, - 0x7F3BEF00, 0x7F3B1780, 0x7F3A4000, - 0x7F396880, 0x7F389100, 0x7F37B980, - 0x7F36E200, 0x7F360A80, 0x7F353300, - 0x7F345B80, 0x7F338400, 0x7F32AC80, - 0x7F31D500, 0x7F30FD80, 0x7F302600, - 0x7F2F4E80, 0x7F2E7700, 0x7F2D9F80, - 0x7F2CC800, 0x7F2BF080, 0x7F2B1900, - 0x7F2A4180, 0x7F296A00, 0x7F289280, - 0x7F27BB00, 0x7F26E380, 0x7F260C00, - 0x7F253480, 0x7F245D00, 0x7F238580, - 0x7F22AE00, 0x7F21D680, 0x7F20FF00, - 0x7F202780, 0x7F1F5000, 0x7F1E7880, - 0x7F1DA100, 0x7F1CC980, 0x7F1BF200, - 0x7F1B1A80, 0x7F1A4300, 0x7F196B80, - 0x7F189400, 0x7F17BC80, 0x7F16E500, - 0x7F160D80, 0x7F153600, 0x7F145E80, - 0x7F138700, 0x7F12AF80, 0x7F11D800, - 0x7F110080, 0x7F102900, 0x7F0F5180, - 0x7F0E7A00, 0x7F0DA280, 0x7F0CCB00, - 0x7F0BF380, 0x7F0B1C00, 0x7F0A4480, - 0x7F096D00, 0x7F089580, 0x7F07BE00, - 0x7F06E680, 0x7F060F00, 0x7F053780, - 0x7F046000, 0x7F038880, 0x7F02B100, - 0x7F01D980, 0x7F010200, 0x7F002A80, - 0x7EFF5300, 0x7EFE7B80, 0x7EFDA400, - 0x7EFCCC80, 0x7EFBF500, 0x7EFB1D80, - 0x7EFA4600, 0x7EF96E80, 0x7EF89700, - 0x7EF7BF80, 0x7EF6E800, 0x7EF61080, - 0x7EF53900, 0x7EF46180, 0x7EF38A00, - 0x7EF2B280, 0x7EF1DB00, 0x7EF10380, - 0x7EF02C00, 0x7EEF5480, 0x7EEE7D00, - 0x7EEDA580, 0x7EECCE00, 0x7EEBF680, - 0x7EEB1F00, 0x7EEA4780, 0x7EE97000, - 0x7EE89880, 0x7EE7C100, 0x7EE6E980, - 0x7EE61200, 0x7EE53A80, 0x7EE46300, - 0x7EE38B80, 0x7EE2B400, 0x7EE1DC80, - 0x7EE10500, 0x7EE02D80, 0x7EDF5600, - 0x7EDE7E80, 0x7EDDA700, 0x7EDCCF80, - 0x7EDBF800, 0x7EDB2080, 0x7EDA4900, - 0x7ED97180, 0x7ED89A00, 0x7ED7C280, - 0x7ED6EB00, 0x7ED61380, 0x7ED53C00, - 0x7ED46480, 0x7ED38D00, 0x7ED2B580, - 0x7ED1DE00, 0x7ED10680, 0x7ED02F00, - 0x7ECF5780, 0x7ECE8000, 0x7ECDA880, - 0x7ECCD100, 0x7ECBF980, 0x7ECB2200, - 0x7ECA4A80, 0x7EC97300, 0x7EC89B80, - 0x7EC7C400, 0x7EC6EC80, 0x7EC61500, - 0x7EC53D80, 0x7EC46600, 0x7EC38E80, - 0x7EC2B700, 0x7EC1DF80, 0x7EC10800, - 0x7EC03080, 0x7EBF5900, 0x7EBE8180, - 0x7EBDAA00, 0x7EBCD280, 0x7EBBFB00, - 0x7EBB2380, 0x7EBA4C00, 0x7EB97480, - 0x7EB89D00, 0x7EB7C580, 0x7EB6EE00, - 0x7EB61680, 0x7EB53F00, 0x7EB46780, - 0x7EB39000, 0x7EB2B880, 0x7EB1E100, - 0x7EB10980, 0x7EB03200, 0x7EAF5A80, - 0x7EAE8300, 0x7EADAB80, 0x7EACD400, - 0x7EABFC80, 0x7EAB2500, 0x7EAA4D80, - 0x7EA97600, 0x7EA89E80, 0x7EA7C700, - 0x7EA6EF80, 0x7EA61800, 0x7EA54080, - 0x7EA46900, 0x7EA39180, 0x7EA2BA00, - 0x7EA1E280, 0x7EA10B00, 0x7EA03380, - 0x7E9F5C00, 0x7E9E8480, 0x7E9DAD00, - 0x7E9CD580, 0x7E9BFE00, 0x7E9B2680, - 0x7E9A4F00, 0x7E997780, 0x7E98A000, - 0x7E97C880, 0x7E96F100, 0x7E961980, - 0x7E954200, 0x7E946A80, 0x7E939300, - 0x7E92BB80, 0x7E91E400, 0x7E910C80, - 0x7E903500, 0x7E8F5D80, 0x7E8E8600, - 0x7E8DAE80, 0x7E8CD700, 0x7E8BFF80, - 0x7E8B2800, 0x7E8A5080, 0x7E897900, - 0x7E88A180, 0x7E87CA00, 0x7E86F280, - 0x7E861B00, 0x7E854380, 0x7E846C00, - 0x7E839480, 0x7E82BD00, 0x7E81E580, - 0x7E810E00, 0x7E803680, 0x7E7F5F00, - 0x7E7E8780, 0x7E7DB000, 0x7E7CD880, - 0x7E7C0100, 0x7E7B2980, 0x7E7A5200, - 0x7E797A80, 0x7E78A300, 0x7E77CB80, - 0x7E76F400, 0x7E761C80, 0x7E754500, - 0x7E746D80, 0x7E739600, 0x7E72BE80, - 0x7E71E700, 0x7E710F80, 0x7E703800, - 0x7E6F6080, 0x7E6E8900, 0x7E6DB180, - 0x7E6CDA00, 0x7E6C0280, 0x7E6B2B00, - 0x7E6A5380, 0x7E697C00, 0x7E68A480, - 0x7E67CD00, 0x7E66F580, 0x7E661E00, - 0x7E654680, 0x7E646F00, 0x7E639780, - 0x7E62C000, 0x7E61E880, 0x7E611100, - 0x7E603980, 0x7E5F6200, 0x7E5E8A80, - 0x7E5DB300, 0x7E5CDB80, 0x7E5C0400, - 0x7E5B2C80, 0x7E5A5500, 0x7E597D80, - 0x7E58A600, 0x7E57CE80, 0x7E56F700, - 0x7E561F80, 0x7E554800, 0x7E547080, - 0x7E539900, 0x7E52C180, 0x7E51EA00, - 0x7E511280, 0x7E503B00, 0x7E4F6380, - 0x7E4E8C00, 0x7E4DB480, 0x7E4CDD00, - 0x7E4C0580, 0x7E4B2E00, 0x7E4A5680, - 0x7E497F00, 0x7E48A780, 0x7E47D000, - 0x7E46F880, 0x7E462100, 0x7E454980, - 0x7E447200, 0x7E439A80, 0x7E42C300, - 0x7E41EB80, 0x7E411400, 0x7E403C80, - 0x7E3F6500, 0x7E3E8D80, 0x7E3DB600, - 0x7E3CDE80, 0x7E3C0700, 0x7E3B2F80, - 0x7E3A5800, 0x7E398080, 0x7E38A900, - 0x7E37D180, 0x7E36FA00, 0x7E362280, - 0x7E354B00, 0x7E347380, 0x7E339C00, - 0x7E32C480, 0x7E31ED00, 0x7E311580, - 0x7E303E00, 0x7E2F6680, 0x7E2E8F00, - 0x7E2DB780, 0x7E2CE000, 0x7E2C0880, - 0x7E2B3100, 0x7E2A5980, 0x7E298200, - 0x7E28AA80, 0x7E27D300, 0x7E26FB80, - 0x7E262400, 0x7E254C80, 0x7E247500, - 0x7E239D80, 0x7E22C600, 0x7E21EE80, - 0x7E211700, 0x7E203F80, 0x7E1F6800, - 0x7E1E9080, 0x7E1DB900, 0x7E1CE180, - 0x7E1C0A00, 0x7E1B3280, 0x7E1A5B00, - 0x7E198380, 0x7E18AC00, 0x7E17D480, - 0x7E16FD00, 0x7E162580, 0x7E154E00, - 0x7E147680, 0x7E139F00, 0x7E12C780, - 0x7E11F000, 0x7E111880, 0x7E104100, - 0x7E0F6980, 0x7E0E9200, 0x7E0DBA80, - 0x7E0CE300, 0x7E0C0B80, 0x7E0B3400, - 0x7E0A5C80, 0x7E098500, 0x7E08AD80, - 0x7E07D600, 0x7E06FE80, 0x7E062700, - 0x7E054F80, 0x7E047800, 0x7E03A080, - 0x7E02C900, 0x7E01F180, 0x7E011A00, - 0x7E004280, 0x7DFF6B00, 0x7DFE9380, - 0x7DFDBC00, 0x7DFCE480, 0x7DFC0D00, - 0x7DFB3580, 0x7DFA5E00, 0x7DF98680, - 0x7DF8AF00, 0x7DF7D780, 0x7DF70000, - 0x7DF62880, 0x7DF55100, 0x7DF47980, - 0x7DF3A200, 0x7DF2CA80, 0x7DF1F300, - 0x7DF11B80, 0x7DF04400, 0x7DEF6C80, - 0x7DEE9500, 0x7DEDBD80, 0x7DECE600, - 0x7DEC0E80, 0x7DEB3700, 0x7DEA5F80, - 0x7DE98800, 0x7DE8B080, 0x7DE7D900, - 0x7DE70180, 0x7DE62A00, 0x7DE55280, - 0x7DE47B00, 0x7DE3A380, 0x7DE2CC00, - 0x7DE1F480, 0x7DE11D00, 0x7DE04580, - 0x7DDF6E00, 0x7DDE9680, 0x7DDDBF00, - 0x7DDCE780, 0x7DDC1000, 0x7DDB3880, - 0x7DDA6100, 0x7DD98980, 0x7DD8B200, - 0x7DD7DA80, 0x7DD70300, 0x7DD62B80, - 0x7DD55400, 0x7DD47C80, 0x7DD3A500, - 0x7DD2CD80, 0x7DD1F600, 0x7DD11E80, - 0x7DD04700, 0x7DCF6F80, 0x7DCE9800, - 0x7DCDC080, 0x7DCCE900, 0x7DCC1180, - 0x7DCB3A00, 0x7DCA6280, 0x7DC98B00, - 0x7DC8B380, 0x7DC7DC00, 0x7DC70480, - 0x7DC62D00, 0x7DC55580, 0x7DC47E00, - 0x7DC3A680, 0x7DC2CF00, 0x7DC1F780, - 0x7DC12000, 0x7DC04880, 0x7DBF7100, - 0x7DBE9980, 0x7DBDC200, 0x7DBCEA80, - 0x7DBC1300, 0x7DBB3B80, 0x7DBA6400, - 0x7DB98C80, 0x7DB8B500, 0x7DB7DD80, - 0x7DB70600, 0x7DB62E80, 0x7DB55700, - 0x7DB47F80, 0x7DB3A800, 0x7DB2D080, - 0x7DB1F900, 0x7DB12180, 0x7DB04A00, - 0x7DAF7280, 0x7DAE9B00, 0x7DADC380, - 0x7DACEC00, 0x7DAC1480, 0x7DAB3D00, - 0x7DAA6580, 0x7DA98E00, 0x7DA8B680, - 0x7DA7DF00, 0x7DA70780, 0x7DA63000, - 0x7DA55880, 0x7DA48100, 0x7DA3A980, - 0x7DA2D200, 0x7DA1FA80, 0x7DA12300, - 0x7DA04B80, 0x7D9F7400, 0x7D9E9C80, - 0x7D9DC500, 0x7D9CED80, 0x7D9C1600, - 0x7D9B3E80, 0x7D9A6700, 0x7D998F80, - 0x7D98B800, 0x7D97E080, 0x7D970900, - 0x7D963180, 0x7D955A00, 0x7D948280, - 0x7D93AB00, 0x7D92D380, 0x7D91FC00, - 0x7D912480, 0x7D904D00, 0x7D8F7580, - 0x7D8E9E00, 0x7D8DC680, 0x7D8CEF00, - 0x7D8C1780, 0x7D8B4000, 0x7D8A6880, - 0x7D899100, 0x7D88B980, 0x7D87E200, - 0x7D870A80, 0x7D863300, 0x7D855B80, - 0x7D848400, 0x7D83AC80, 0x7D82D500, - 0x7D81FD80, 0x7D812600, 0x7D804E80, - 0x7D7F7700, 0x7D7E9F80, 0x7D7DC800, - 0x7D7CF080, 0x7D7C1900, 0x7D7B4180, - 0x7D7A6A00, 0x7D799280, 0x7D78BB00, - 0x7D77E380, 0x7D770C00, 0x7D763480, - 0x7D755D00, 0x7D748580, 0x7D73AE00, - 0x7D72D680, 0x7D71FF00, 0x7D712780, - 0x7D705000, 0x7D6F7880, 0x7D6EA100, - 0x7D6DC980, 0x7D6CF200, 0x7D6C1A80, - 0x7D6B4300, 0x7D6A6B80, 0x7D699400, - 0x7D68BC80, 0x7D67E500, 0x7D670D80, - 0x7D663600, 0x7D655E80, 0x7D648700, - 0x7D63AF80, 0x7D62D800, 0x7D620080, - 0x7D612900, 0x7D605180, 0x7D5F7A00, - 0x7D5EA280, 0x7D5DCB00, 0x7D5CF380, - 0x7D5C1C00, 0x7D5B4480, 0x7D5A6D00, - 0x7D599580, 0x7D58BE00, 0x7D57E680, - 0x7D570F00, 0x7D563780, 0x7D556000, - 0x7D548880, 0x7D53B100, 0x7D52D980, - 0x7D520200, 0x7D512A80, 0x7D505300, - 0x7D4F7B80, 0x7D4EA400, 0x7D4DCC80, - 0x7D4CF500, 0x7D4C1D80, 0x7D4B4600, - 0x7D4A6E80, 0x7D499700, 0x7D48BF80, - 0x7D47E800, 0x7D471080, 0x7D463900, - 0x7D456180, 0x7D448A00, 0x7D43B280, - 0x7D42DB00, 0x7D420380, 0x7D412C00, - 0x7D405480, 0x7D3F7D00, 0x7D3EA580, - 0x7D3DCE00, 0x7D3CF680, 0x7D3C1F00, - 0x7D3B4780, 0x7D3A7000, 0x7D399880, - 0x7D38C100, 0x7D37E980, 0x7D371200, - 0x7D363A80, 0x7D356300, 0x7D348B80, - 0x7D33B400, 0x7D32DC80, 0x7D320500, - 0x7D312D80, 0x7D305600, 0x7D2F7E80, - 0x7D2EA700, 0x7D2DCF80, 0x7D2CF800, - 0x7D2C2080, 0x7D2B4900, 0x7D2A7180, - 0x7D299A00, 0x7D28C280, 0x7D27EB00, - 0x7D271380, 0x7D263C00, 0x7D256480, - 0x7D248D00, 0x7D23B580, 0x7D22DE00, - 0x7D220680, 0x7D212F00, 0x7D205780, - 0x7D1F8000, 0x7D1EA880, 0x7D1DD100, - 0x7D1CF980, 0x7D1C2200, 0x7D1B4A80, - 0x7D1A7300, 0x7D199B80, 0x7D18C400, - 0x7D17EC80, 0x7D171500, 0x7D163D80, - 0x7D156600, 0x7D148E80, 0x7D13B700, - 0x7D12DF80, 0x7D120800, 0x7D113080, - 0x7D105900, 0x7D0F8180, 0x7D0EAA00, - 0x7D0DD280, 0x7D0CFB00, 0x7D0C2380, - 0x7D0B4C00, 0x7D0A7480, 0x7D099D00, - 0x7D08C580, 0x7D07EE00, 0x7D071680, - 0x7D063F00, 0x7D056780, 0x7D049000, - 0x7D03B880, 0x7D02E100, 0x7D020980, - 0x7D013200, 0x7D005A80, 0x7CFF8300, - 0x7CFEAB80, 0x7CFDD400, 0x7CFCFC80, - 0x7CFC2500, 0x7CFB4D80, 0x7CFA7600, - 0x7CF99E80, 0x7CF8C700, 0x7CF7EF80, - 0x7CF71800, 0x7CF64080, 0x7CF56900, - 0x7CF49180, 0x7CF3BA00, 0x7CF2E280, - 0x7CF20B00, 0x7CF13380, 0x7CF05C00, - 0x7CEF8480, 0x7CEEAD00, 0x7CEDD580, - 0x7CECFE00, 0x7CEC2680, 0x7CEB4F00, - 0x7CEA7780, 0x7CE9A000, 0x7CE8C880, - 0x7CE7F100, 0x7CE71980, 0x7CE64200, - 0x7CE56A80, 0x7CE49300, 0x7CE3BB80, - 0x7CE2E400, 0x7CE20C80, 0x7CE13500, - 0x7CE05D80, 0x7CDF8600, 0x7CDEAE80, - 0x7CDDD700, 0x7CDCFF80, 0x7CDC2800, - 0x7CDB5080, 0x7CDA7900, 0x7CD9A180, - 0x7CD8CA00, 0x7CD7F280, 0x7CD71B00, - 0x7CD64380, 0x7CD56C00, 0x7CD49480, - 0x7CD3BD00, 0x7CD2E580, 0x7CD20E00, - 0x7CD13680, 0x7CD05F00, 0x7CCF8780, - 0x7CCEB000, 0x7CCDD880, 0x7CCD0100, - 0x7CCC2980, 0x7CCB5200, 0x7CCA7A80, - 0x7CC9A300, 0x7CC8CB80, 0x7CC7F400, - 0x7CC71C80, 0x7CC64500, 0x7CC56D80, - 0x7CC49600, 0x7CC3BE80, 0x7CC2E700, - 0x7CC20F80, 0x7CC13800, 0x7CC06080, - 0x7CBF8900, 0x7CBEB180, 0x7CBDDA00, - 0x7CBD0280, 0x7CBC2B00, 0x7CBB5380, - 0x7CBA7C00, 0x7CB9A480, 0x7CB8CD00, - 0x7CB7F580, 0x7CB71E00, 0x7CB64680, - 0x7CB56F00, 0x7CB49780, 0x7CB3C000, - 0x7CB2E880, 0x7CB21100, 0x7CB13980, - 0x7CB06200, 0x7CAF8A80, 0x7CAEB300, - 0x7CADDB80, 0x7CAD0400, 0x7CAC2C80, - 0x7CAB5500, 0x7CAA7D80, 0x7CA9A600, - 0x7CA8CE80, 0x7CA7F700, 0x7CA71F80, - 0x7CA64800, 0x7CA57080, 0x7CA49900, - 0x7CA3C180, 0x7CA2EA00, 0x7CA21280, - 0x7CA13B00, 0x7CA06380, 0x7C9F8C00, - 0x7C9EB480, 0x7C9DDD00, 0x7C9D0580, - 0x7C9C2E00, 0x7C9B5680, 0x7C9A7F00, - 0x7C99A780, 0x7C98D000, 0x7C97F880, - 0x7C972100, 0x7C964980, 0x7C957200, - 0x7C949A80, 0x7C93C300, 0x7C92EB80, - 0x7C921400, 0x7C913C80, 0x7C906500, - 0x7C8F8D80, 0x7C8EB600, 0x7C8DDE80, - 0x7C8D0700, 0x7C8C2F80, 0x7C8B5800, - 0x7C8A8080, 0x7C89A900, 0x7C88D180, - 0x7C87FA00, 0x7C872280, 0x7C864B00, - 0x7C857380, 0x7C849C00, 0x7C83C480, - 0x7C82ED00, 0x7C821580, 0x7C813E00, - 0x7C806680, 0x7C7F8F00, 0x7C7EB780, - 0x7C7DE000, 0x7C7D0880, 0x7C7C3100, - 0x7C7B5980, 0x7C7A8200, 0x7C79AA80, - 0x7C78D300, 0x7C77FB80, 0x7C772400, - 0x7C764C80, 0x7C757500, 0x7C749D80, - 0x7C73C600, 0x7C72EE80, 0x7C721700, - 0x7C713F80, 0x7C706800, 0x7C6F9080, - 0x7C6EB900, 0x7C6DE180, 0x7C6D0A00, - 0x7C6C3280, 0x7C6B5B00, 0x7C6A8380, - 0x7C69AC00, 0x7C68D480, 0x7C67FD00, - 0x7C672580, 0x7C664E00, 0x7C657680, - 0x7C649F00, 0x7C63C780, 0x7C62F000, - 0x7C621880, 0x7C614100, 0x7C606980, - 0x7C5F9200, 0x7C5EBA80, 0x7C5DE300, - 0x7C5D0B80, 0x7C5C3400, 0x7C5B5C80, - 0x7C5A8500, 0x7C59AD80, 0x7C58D600, - 0x7C57FE80, 0x7C572700, 0x7C564F80, - 0x7C557800, 0x7C54A080, 0x7C53C900, - 0x7C52F180, 0x7C521A00, 0x7C514280, - 0x7C506B00, 0x7C4F9380, 0x7C4EBC00, - 0x7C4DE480, 0x7C4D0D00, 0x7C4C3580, - 0x7C4B5E00, 0x7C4A8680, 0x7C49AF00, - 0x7C48D780, 0x7C480000, 0x7C473380, - 0x7C466700, 0x7C459A80, 0x7C44CE00, - 0x7C440180, 0x7C433500, 0x7C426880, - 0x7C419C00, 0x7C40CF80, 0x7C400300, - 0x7C3F3680, 0x7C3E6A00, 0x7C3D9D80, - 0x7C3CD100, 0x7C3C0480, 0x7C3B3800, - 0x7C3A6B80, 0x7C399F00, 0x7C38D280, - 0x7C380600, 0x7C373980, 0x7C366D00, - 0x7C35A080, 0x7C34D400, 0x7C340780, - 0x7C333B00, 0x7C326E80, 0x7C31A200, - 0x7C30D580, 0x7C300900, 0x7C2F3C80, - 0x7C2E7000, 0x7C2DA380, 0x7C2CD700, - 0x7C2C0A80, 0x7C2B3E00, 0x7C2A7180, - 0x7C29A500, 0x7C28D880, 0x7C280C00, - 0x7C273F80, 0x7C267300, 0x7C25A680, - 0x7C24DA00, 0x7C240D80, 0x7C234100, - 0x7C227480, 0x7C21A800, 0x7C20DB80, - 0x7C200F00, 0x7C1F4280, 0x7C1E7600, - 0x7C1DA980, 0x7C1CDD00, 0x7C1C1080, - 0x7C1B4400, 0x7C1A7780, 0x7C19AB00, - 0x7C18DE80, 0x7C181200, 0x7C174580, - 0x7C167900, 0x7C15AC80, 0x7C14E000, - 0x7C141380, 0x7C134700, 0x7C127A80, - 0x7C11AE00, 0x7C10E180, 0x7C101500, - 0x7C0F4880, 0x7C0E7C00, 0x7C0DAF80, - 0x7C0CE300, 0x7C0C1680, 0x7C0B4A00, - 0x7C0A7D80, 0x7C09B100, 0x7C08E480, - 0x7C081800, 0x7C074B80, 0x7C067F00, - 0x7C05B280, 0x7C04E600, 0x7C041980, - 0x7C034D00, 0x7C028080, 0x7C01B400, - 0x7C00E780, 0x7C001B00, 0x7BFF4E80, - 0x7BFE8200, 0x7BFDB580, 0x7BFCE900, - 0x7BFC1C80, 0x7BFB5000, 0x7BFA8380, - 0x7BF9B700, 0x7BF8EA80, 0x7BF81E00, - 0x7BF75180, 0x7BF68500, 0x7BF5B880, - 0x7BF4EC00, 0x7BF41F80, 0x7BF35300, - 0x7BF28680, 0x7BF1BA00, 0x7BF0ED80, - 0x7BF02100, 0x7BEF5480, 0x7BEE8800, - 0x7BEDBB80, 0x7BECEF00, 0x7BEC2280, - 0x7BEB5600, 0x7BEA8980, 0x7BE9BD00, - 0x7BE8F080, 0x7BE82400, 0x7BE75780, - 0x7BE68B00, 0x7BE5BE80, 0x7BE4F200, - 0x7BE42580, 0x7BE35900, 0x7BE28C80, - 0x7BE1C000, 0x7BE0F380, 0x7BE02700, - 0x7BDF5A80, 0x7BDE8E00, 0x7BDDC180, - 0x7BDCF500, 0x7BDC2880, 0x7BDB5C00, - 0x7BDA8F80, 0x7BD9C300, 0x7BD8F680, - 0x7BD82A00, 0x7BD75D80, 0x7BD69100, - 0x7BD5C480, 0x7BD4F800, 0x7BD42B80, - 0x7BD35F00, 0x7BD29280, 0x7BD1C600, - 0x7BD0F980, 0x7BD02D00, 0x7BCF6080, - 0x7BCE9400, 0x7BCDC780, 0x7BCCFB00, - 0x7BCC2E80, 0x7BCB6200, 0x7BCA9580, - 0x7BC9C900, 0x7BC8FC80, 0x7BC83000, - 0x7BC76380, 0x7BC69700, 0x7BC5CA80, - 0x7BC4FE00, 0x7BC43180, 0x7BC36500, - 0x7BC29880, 0x7BC1CC00, 0x7BC0FF80, - 0x7BC03300, 0x7BBF6680, 0x7BBE9A00, - 0x7BBDCD80, 0x7BBD0100, 0x7BBC3480, - 0x7BBB6800, 0x7BBA9B80, 0x7BB9CF00, - 0x7BB90280, 0x7BB83600, 0x7BB76980, - 0x7BB69D00, 0x7BB5D080, 0x7BB50400, - 0x7BB43780, 0x7BB36B00, 0x7BB29E80, - 0x7BB1D200, 0x7BB10580, 0x7BB03900, - 0x7BAF6C80, 0x7BAEA000, 0x7BADD380, - 0x7BAD0700, 0x7BAC3A80, 0x7BAB6E00, - 0x7BAAA180, 0x7BA9D500, 0x7BA90880, - 0x7BA83C00, 0x7BA76F80, 0x7BA6A300, - 0x7BA5D680, 0x7BA50A00, 0x7BA43D80, - 0x7BA37100, 0x7BA2A480, 0x7BA1D800, - 0x7BA10B80, 0x7BA03F00, 0x7B9F7280, - 0x7B9EA600, 0x7B9DD980, 0x7B9D0D00, - 0x7B9C4080, 0x7B9B7400, 0x7B9AA780, - 0x7B99DB00, 0x7B990E80, 0x7B984200, - 0x7B977580, 0x7B96A900, 0x7B95DC80, - 0x7B951000, 0x7B944380, 0x7B937700, - 0x7B92AA80, 0x7B91DE00, 0x7B911180, - 0x7B904500, 0x7B8F7880, 0x7B8EAC00, - 0x7B8DDF80, 0x7B8D1300, 0x7B8C4680, - 0x7B8B7A00, 0x7B8AAD80, 0x7B89E100, - 0x7B891480, 0x7B884800, 0x7B877B80, - 0x7B86AF00, 0x7B85E280, 0x7B851600, - 0x7B844980, 0x7B837D00, 0x7B82B080, - 0x7B81E400, 0x7B811780, 0x7B804B00, - 0x7B7F7E80, 0x7B7EB200, 0x7B7DE580, - 0x7B7D1900, 0x7B7C4C80, 0x7B7B8000, - 0x7B7AB380, 0x7B79E700, 0x7B791A80, - 0x7B784E00, 0x7B778180, 0x7B76B500, - 0x7B75E880, 0x7B751C00, 0x7B744F80, - 0x7B738300, 0x7B72B680, 0x7B71EA00, - 0x7B711D80, 0x7B705100, 0x7B6F8480, - 0x7B6EB800, 0x7B6DEB80, 0x7B6D1F00, - 0x7B6C5280, 0x7B6B8600, 0x7B6AB980, - 0x7B69ED00, 0x7B692080, 0x7B685400, - 0x7B678780, 0x7B66BB00, 0x7B65EE80, - 0x7B652200, 0x7B645580, 0x7B638900, - 0x7B62BC80, 0x7B61F000, 0x7B612380, - 0x7B605700, 0x7B5F8A80, 0x7B5EBE00, - 0x7B5DF180, 0x7B5D2500, 0x7B5C5880, - 0x7B5B8C00, 0x7B5ABF80, 0x7B59F300, - 0x7B592680, 0x7B585A00, 0x7B578D80, - 0x7B56C100, 0x7B55F480, 0x7B552800, - 0x7B545B80, 0x7B538F00, 0x7B52C280, - 0x7B51F600, 0x7B512980, 0x7B505D00, - 0x7B4F9080, 0x7B4EC400, 0x7B4DF780, - 0x7B4D2B00, 0x7B4C5E80, 0x7B4B9200, - 0x7B4AC580, 0x7B49F900, 0x7B492C80, - 0x7B486000, 0x7B479380, 0x7B46C700, - 0x7B45FA80, 0x7B452E00, 0x7B446180, - 0x7B439500, 0x7B42C880, 0x7B41FC00, - 0x7B412F80, 0x7B406300, 0x7B3F9680, - 0x7B3ECA00, 0x7B3DFD80, 0x7B3D3100, - 0x7B3C6480, 0x7B3B9800, 0x7B3ACB80, - 0x7B39FF00, 0x7B393280, 0x7B386600, - 0x7B379980, 0x7B36CD00, 0x7B360080, - 0x7B353400, 0x7B346780, 0x7B339B00, - 0x7B32CE80, 0x7B320200, 0x7B313580, - 0x7B306900, 0x7B2F9C80, 0x7B2ED000, - 0x7B2E0380, 0x7B2D3700, 0x7B2C6A80, - 0x7B2B9E00, 0x7B2AD180, 0x7B2A0500, - 0x7B293880, 0x7B286C00, 0x7B279F80, - 0x7B26D300, 0x7B260680, 0x7B253A00, - 0x7B246D80, 0x7B23A100, 0x7B22D480, - 0x7B220800, 0x7B213B80, 0x7B206F00, - 0x7B1FA280, 0x7B1ED600, 0x7B1E0980, - 0x7B1D3D00, 0x7B1C7080, 0x7B1BA400, - 0x7B1AD780, 0x7B1A0B00, 0x7B193E80, - 0x7B187200, 0x7B17A580, 0x7B16D900, - 0x7B160C80, 0x7B154000, 0x7B147380, - 0x7B13A700, 0x7B12DA80, 0x7B120E00, - 0x7B114180, 0x7B107500, 0x7B0FA880, - 0x7B0EDC00, 0x7B0E0F80, 0x7B0D4300, - 0x7B0C7680, 0x7B0BAA00, 0x7B0ADD80, - 0x7B0A1100, 0x7B094480, 0x7B087800, - 0x7B07AB80, 0x7B06DF00, 0x7B061280, - 0x7B054600, 0x7B047980, 0x7B03AD00, - 0x7B02E080, 0x7B021400, 0x7B014780, - 0x7B007B00, 0x7AFFAE80, 0x7AFEE200, - 0x7AFE1580, 0x7AFD4900, 0x7AFC7C80, - 0x7AFBB000, 0x7AFAE380, 0x7AFA1700, - 0x7AF94A80, 0x7AF87E00, 0x7AF7B180, - 0x7AF6E500, 0x7AF61880, 0x7AF54C00, - 0x7AF47F80, 0x7AF3B300, 0x7AF2E680, - 0x7AF21A00, 0x7AF14D80, 0x7AF08100, - 0x7AEFB480, 0x7AEEE800, 0x7AEE1B80, - 0x7AED4F00, 0x7AEC8280, 0x7AEBB600, - 0x7AEAE980, 0x7AEA1D00, 0x7AE95080, - 0x7AE88400, 0x7AE7B780, 0x7AE6EB00, - 0x7AE61E80, 0x7AE55200, 0x7AE48580, - 0x7AE3B900, 0x7AE2EC80, 0x7AE22000, - 0x7AE15380, 0x7AE08700, 0x7ADFBA80, - 0x7ADEEE00, 0x7ADE2180, 0x7ADD5500, - 0x7ADC8880, 0x7ADBBC00, 0x7ADAEF80, - 0x7ADA2300, 0x7AD95680, 0x7AD88A00, - 0x7AD7BD80, 0x7AD6F100, 0x7AD62480, - 0x7AD55800, 0x7AD48B80, 0x7AD3BF00, - 0x7AD2F280, 0x7AD22600, 0x7AD15980, - 0x7AD08D00, 0x7ACFC080, 0x7ACEF400, - 0x7ACE2780, 0x7ACD5B00, 0x7ACC8E80, - 0x7ACBC200, 0x7ACAF580, 0x7ACA2900, - 0x7AC95C80, 0x7AC89000, 0x7AC7C380, - 0x7AC6F700, 0x7AC62A80, 0x7AC55E00, - 0x7AC49180, 0x7AC3C500, 0x7AC2F880, - 0x7AC22C00, 0x7AC15F80, 0x7AC09300, - 0x7ABFC680, 0x7ABEFA00, 0x7ABE2D80, - 0x7ABD6100, 0x7ABC9480, 0x7ABBC800, - 0x7ABAFB80, 0x7ABA2F00, 0x7AB96280, - 0x7AB89600, 0x7AB7C980, 0x7AB6FD00, - 0x7AB63080, 0x7AB56400, 0x7AB49780, - 0x7AB3CB00, 0x7AB2FE80, 0x7AB23200, - 0x7AB16580, 0x7AB09900, 0x7AAFCC80, - 0x7AAF0000, 0x7AAE3380, 0x7AAD6700, - 0x7AAC9A80, 0x7AABCE00, 0x7AAB0180, - 0x7AAA3500, 0x7AA96880, 0x7AA89C00, - 0x7AA7CF80, 0x7AA70300, 0x7AA63680, - 0x7AA56A00, 0x7AA49D80, 0x7AA3D100, - 0x7AA30480, 0x7AA23800, 0x7AA16B80, - 0x7AA09F00, 0x7A9FD280, 0x7A9F0600, - 0x7A9E3980, 0x7A9D6D00, 0x7A9CA080, - 0x7A9BD400, 0x7A9B0780, 0x7A9A3B00, - 0x7A996E80, 0x7A98A200, 0x7A97D580, - 0x7A970900, 0x7A963C80, 0x7A957000, - 0x7A94A380, 0x7A93D700, 0x7A930A80, - 0x7A923E00, 0x7A917180, 0x7A90A500, - 0x7A8FD880, 0x7A8F0C00, 0x7A8E3F80, - 0x7A8D7300, 0x7A8CA680, 0x7A8BDA00, - 0x7A8B0D80, 0x7A8A4100, 0x7A897480, - 0x7A88A800, 0x7A87DB80, 0x7A870F00, - 0x7A864280, 0x7A857600, 0x7A84A980, - 0x7A83DD00, 0x7A831080, 0x7A824400, - 0x7A817780, 0x7A80AB00, 0x7A7FDE80, - 0x7A7F1200, 0x7A7E4580, 0x7A7D7900, - 0x7A7CAC80, 0x7A7BE000, 0x7A7B1380, - 0x7A7A4700, 0x7A797A80, 0x7A78AE00, - 0x7A77E180, 0x7A771500, 0x7A764880, - 0x7A757C00, 0x7A74AF80, 0x7A73E300, - 0x7A731680, 0x7A724A00, 0x7A717D80, - 0x7A70B100, 0x7A6FE480, 0x7A6F1800, - 0x7A6E4B80, 0x7A6D7F00, 0x7A6CB280, - 0x7A6BE600, 0x7A6B1980, 0x7A6A4D00, - 0x7A698080, 0x7A68B400, 0x7A67E780, - 0x7A671B00, 0x7A664E80, 0x7A658200, - 0x7A64B580, 0x7A63E900, 0x7A631C80, - 0x7A625000, 0x7A618380, 0x7A60B700, - 0x7A5FEA80, 0x7A5F1E00, 0x7A5E5180, - 0x7A5D8500, 0x7A5CB880, 0x7A5BEC00, - 0x7A5B1F80, 0x7A5A5300, 0x7A598680, - 0x7A58BA00, 0x7A57ED80, 0x7A572100, - 0x7A565480, 0x7A558800, 0x7A54BB80, - 0x7A53EF00, 0x7A532280, 0x7A525600, - 0x7A518980, 0x7A50BD00, 0x7A4FF080, - 0x7A4F2400, 0x7A4E5780, 0x7A4D8B00, - 0x7A4CBE80, 0x7A4BF200, 0x7A4B2580, - 0x7A4A5900, 0x7A498C80, 0x7A48C000, - 0x7A47F380, 0x7A472700, 0x7A465A80, - 0x7A458E00, 0x7A44C180, 0x7A43F500, - 0x7A432880, 0x7A425C00, 0x7A418F80, - 0x7A40C300, 0x7A3FF680, 0x7A3F2A00, - 0x7A3E5D80, 0x7A3D9100, 0x7A3CC480, - 0x7A3BF800, 0x7A3B2B80, 0x7A3A5F00, - 0x7A399280, 0x7A38C600, 0x7A37F980, - 0x7A372D00, 0x7A366080, 0x7A359400, - 0x7A34C780, 0x7A33FB00, 0x7A332E80, - 0x7A326200, 0x7A319580, 0x7A30C900, - 0x7A2FFC80, 0x7A2F3000, 0x7A2E6380, - 0x7A2D9700, 0x7A2CCA80, 0x7A2BFE00, - 0x7A2B3180, 0x7A2A6500, 0x7A299880, - 0x7A28CC00, 0x7A27FF80, 0x7A273300, - 0x7A266680, 0x7A259A00, 0x7A24CD80, - 0x7A240100, 0x7A233480, 0x7A226800, - 0x7A219B80, 0x7A20CF00, 0x7A200280, - 0x7A1F3600, 0x7A1E6980, 0x7A1D9D00, - 0x7A1CD080, 0x7A1C0400, 0x7A1B3780, - 0x7A1A6B00, 0x7A199E80, 0x7A18D200, - 0x7A180580, 0x7A173900, 0x7A166C80, - 0x7A15A000, 0x7A14D380, 0x7A140700, - 0x7A133A80, 0x7A126E00, 0x7A11A180, - 0x7A10D500, 0x7A100880, 0x7A0F3C00, - 0x7A0E6F80, 0x7A0DA300, 0x7A0CD680, - 0x7A0C0A00, 0x7A0B3D80, 0x7A0A7100, - 0x7A09A480, 0x7A08D800, 0x7A080B80, - 0x7A073F00, 0x7A067280, 0x7A05A600, - 0x7A04D980, 0x7A040D00, 0x7A034080, - 0x7A027400, 0x7A01A780, 0x7A00DB00, - 0x7A000E80, 0x79FF4200, 0x79FE7580, - 0x79FDA900, 0x79FCDC80, 0x79FC1000, - 0x79FB4380, 0x79FA7700, 0x79F9AA80, - 0x79F8DE00, 0x79F81180, 0x79F74500, - 0x79F67880, 0x79F5AC00, 0x79F4DF80, - 0x79F41300, 0x79F34680, 0x79F27A00, - 0x79F1AD80, 0x79F0E100, 0x79F01480, - 0x79EF4800, 0x79EE7B80, 0x79EDAF00, - 0x79ECE280, 0x79EC1600, 0x79EB4980, - 0x79EA7D00, 0x79E9B080, 0x79E8E400, - 0x79E81780, 0x79E74B00, 0x79E67E80, - 0x79E5B200, 0x79E4E580, 0x79E41900, - 0x79E34C80, 0x79E28000, 0x79E1B380, - 0x79E0E700, 0x79E01A80, 0x79DF4E00, - 0x79DE8180, 0x79DDB500, 0x79DCE880, - 0x79DC1C00, 0x79DB4F80, 0x79DA8300, - 0x79D9B680, 0x79D8EA00, 0x79D81D80, - 0x79D75100, 0x79D68480, 0x79D5B800, - 0x79D4EB80, 0x79D41F00, 0x79D35280, - 0x79D28600, 0x79D1B980, 0x79D0ED00, - 0x79D02080, 0x79CF5400, 0x79CE8780, - 0x79CDBB00, 0x79CCEE80, 0x79CC2200, - 0x79CB5580, 0x79CA8900, 0x79C9BC80, - 0x79C8F000, 0x79C82380, 0x79C75700, - 0x79C68A80, 0x79C5BE00, 0x79C4F180, - 0x79C42500, 0x79C35880, 0x79C28C00, - 0x79C1BF80, 0x79C0F300, 0x79C02680, - 0x79BF5A00, 0x79BE8D80, 0x79BDC100, - 0x79BCF480, 0x79BC2800, 0x79BB5B80, - 0x79BA8F00, 0x79B9C280, 0x79B8F600, - 0x79B82980, 0x79B75D00, 0x79B69080, - 0x79B5C400, 0x79B4F780, 0x79B42B00, - 0x79B35E80, 0x79B29200, 0x79B1C580, - 0x79B0F900, 0x79B02C80, 0x79AF6000, - 0x79AE9380, 0x79ADC700, 0x79ACFA80, - 0x79AC2E00, 0x79AB6180, 0x79AA9500, - 0x79A9C880, 0x79A8FC00, 0x79A82F80, - 0x79A76300, 0x79A69680, 0x79A5CA00, - 0x79A4FD80, 0x79A43100, 0x79A36480, - 0x79A29800, 0x79A1CB80, 0x79A0FF00, - 0x79A03280, 0x799F6600, 0x799E9980, - 0x799DCD00, 0x799D0080, 0x799C3400, - 0x799B6780, 0x799A9B00, 0x7999CE80, - 0x79990200, 0x79983580, 0x79976900, - 0x79969C80, 0x7995D000, 0x79950380, - 0x79943700, 0x79936A80, 0x79929E00, - 0x7991D180, 0x79910500, 0x79903880, - 0x798F6C00, 0x798E9F80, 0x798DD300, - 0x798D0680, 0x798C3A00, 0x798B6D80, - 0x798AA100, 0x7989D480, 0x79890800, - 0x79883B80, 0x79876F00, 0x7986A280, - 0x7985D600, 0x79850980, 0x79843D00, - 0x79837080, 0x7982A400, 0x7981D780, - 0x79810B00, 0x79803E80, 0x797F7200, - 0x797EA580, 0x797DD900, 0x797D0C80, - 0x797C4000, 0x797B7380, 0x797AA700, - 0x7979DA80, 0x79790E00, 0x79784180, - 0x79777500, 0x7976A880, 0x7975DC00, - 0x79750F80, 0x79744300, 0x79737680, - 0x7972AA00, 0x7971DD80, 0x79711100, - 0x79704480, 0x796F7800, 0x796EAB80, - 0x796DDF00, 0x796D1280, 0x796C4600, - 0x796B7980, 0x796AAD00, 0x7969E080, - 0x79691400, 0x79684780, 0x79677B00, - 0x7966AE80, 0x7965E200, 0x79651580, - 0x79644900, 0x79637C80, 0x7962B000, - 0x7961E380, 0x79611700, 0x79604A80, - 0x795F7E00, 0x795EB180, 0x795DE500, - 0x795D1880, 0x795C4C00, 0x795B7F80, - 0x795AB300, 0x7959E680, 0x79591A00, - 0x79584D80, 0x79578100, 0x7956B480, - 0x7955E800, 0x79551B80, 0x79544F00, - 0x79538280, 0x7952B600, 0x7951E980, - 0x79511D00, 0x79505080, 0x794F8400, - 0x794EB780, 0x794DEB00, 0x794D1E80, - 0x794C5200, 0x794B8580, 0x794AB900, - 0x7949EC80, 0x79492000, 0x79485380, - 0x79478700, 0x7946BA80, 0x7945EE00, - 0x79452180, 0x79445500, 0x79438880, - 0x7942BC00, 0x7941EF80, 0x79412300, - 0x79405680, 0x793F8A00, 0x793EBD80, - 0x793DF100, 0x793D2480, 0x793C5800, - 0x793B8B80, 0x793ABF00, 0x7939F280, - 0x79392600, 0x79385980, 0x79378D00, - 0x7936C080, 0x7935F400, 0x79352780, - 0x79345B00, 0x79338E80, 0x7932C200, - 0x7931F580, 0x79312900, 0x79305C80, - 0x792F9000, 0x792EC380, 0x792DF700, - 0x792D2A80, 0x792C5E00, 0x792B9180, - 0x792AC500, 0x7929F880, 0x79292C00, - 0x79285F80, 0x79279300, 0x7926C680, - 0x7925FA00, 0x79252D80, 0x79246100, - 0x79239480, 0x7922C800, 0x7921FB80, - 0x79212F00, 0x79206280, 0x791F9600, - 0x791EC980, 0x791DFD00, 0x791D3080, - 0x791C6400, 0x791B9780, 0x791ACB00, - 0x7919FE80, 0x79193200, 0x79186580, - 0x79179900, 0x7916CC80, 0x79160000, - 0x79153380, 0x79146700, 0x79139A80, - 0x7912CE00, 0x79120180, 0x79113500, - 0x79106880, 0x790F9C00, 0x790ECF80, - 0x790E0300, 0x790D3680, 0x790C6A00, - 0x790B9D80, 0x790AD100, 0x790A0480, - 0x79093800, 0x79086B80, 0x79079F00, - 0x7906D280, 0x79060600, 0x79053980, - 0x79046D00, 0x7903A080, 0x7902D400, - 0x79020780, 0x79013B00, 0x79006E80, - 0x78FFA200, 0x78FED580, 0x78FE0900, - 0x78FD3C80, 0x78FC7000, 0x78FBA380, - 0x78FAD700, 0x78FA0A80, 0x78F93E00, - 0x78F87180, 0x78F7A500, 0x78F6D880, - 0x78F60C00, 0x78F53F80, 0x78F47300, - 0x78F3A680, 0x78F2DA00, 0x78F20D80, - 0x78F14100, 0x78F07480, 0x78EFA800, - 0x78EEDB80, 0x78EE0F00, 0x78ED4280, - 0x78EC7600, 0x78EBA980, 0x78EADD00, - 0x78EA1080, 0x78E94400, 0x78E87780, - 0x78E7AB00, 0x78E6DE80, 0x78E61200, - 0x78E54580, 0x78E47900, 0x78E3AC80, - 0x78E2E000, 0x78E21380, 0x78E14700, - 0x78E07A80, 0x78DFAE00, 0x78DEE180, - 0x78DE1500, 0x78DD4880, 0x78DC7C00, - 0x78DBAF80, 0x78DAE300, 0x78DA1680, - 0x78D94A00, 0x78D87D80, 0x78D7B100, - 0x78D6E480, 0x78D61800, 0x78D54B80, - 0x78D47F00, 0x78D3B280, 0x78D2E600, - 0x78D21980, 0x78D14D00, 0x78D08080, - 0x78CFB400, 0x78CEE780, 0x78CE1B00, - 0x78CD4E80, 0x78CC8200, 0x78CBB580, - 0x78CAE900, 0x78CA1C80, 0x78C95000, - 0x78C88380, 0x78C7B700, 0x78C6EA80, - 0x78C61E00, 0x78C55180, 0x78C48500, - 0x78C3B880, 0x78C2EC00, 0x78C21F80, - 0x78C15300, 0x78C08680, 0x78BFBA00, - 0x78BEED80, 0x78BE2100, 0x78BD5480, - 0x78BC8800, 0x78BBBB80, 0x78BAEF00, - 0x78BA2280, 0x78B95600, 0x78B88980, - 0x78B7BD00, 0x78B6F080, 0x78B62400, - 0x78B55780, 0x78B48B00, 0x78B3BE80, - 0x78B2F200, 0x78B22580, 0x78B15900, - 0x78B08C80, 0x78AFC000, 0x78AEF380, - 0x78AE2700, 0x78AD5A80, 0x78AC8E00, - 0x78ABC180, 0x78AAF500, 0x78AA2880, - 0x78A95C00, 0x78A88F80, 0x78A7C300, - 0x78A6F680, 0x78A62A00, 0x78A55D80, - 0x78A49100, 0x78A3C480, 0x78A2F800, - 0x78A22B80, 0x78A15F00, 0x78A09280, - 0x789FC600, 0x789EF980, 0x789E2D00, - 0x789D6080, 0x789C9400, 0x789BC780, - 0x789AFB00, 0x789A2E80, 0x78996200, - 0x78989580, 0x7897C900, 0x7896FC80, - 0x78963000, 0x78956380, 0x78949700, - 0x7893CA80, 0x7892FE00, 0x78923180, - 0x78916500, 0x78909880, 0x788FCC00, - 0x788EFF80, 0x788E3300, 0x788D6680, - 0x788C9A00, 0x788BCD80, 0x788B0100, - 0x788A3480, 0x78896800, 0x78889B80, - 0x7887CF00, 0x78870280, 0x78863600, - 0x78856980, 0x78849D00, 0x7883D080, - 0x78830400, 0x78823780, 0x78816B00, - 0x78809E80, 0x787FD200, 0x787F0580, - 0x787E3900, 0x787D6C80, 0x787CA000, - 0x787BD380, 0x787B0700, 0x787A3A80, - 0x78796E00, 0x7878A180, 0x7877D500, - 0x78770880, 0x78763C00, 0x78756F80, - 0x7874A300, 0x7873D680, 0x78730A00, - 0x78723D80, 0x78717100, 0x7870A480, - 0x786FD800, 0x786F0B80, 0x786E3F00, - 0x786D7280, 0x786CA600, 0x786BD980, - 0x786B0D00, 0x786A4080, 0x78697400, - 0x7868A780, 0x7867DB00, 0x78670E80, - 0x78664200, 0x78657580, 0x7864A900, - 0x7863DC80, 0x78631000, 0x78624380, - 0x78617700, 0x7860AA80, 0x785FDE00, - 0x785F1180, 0x785E4500, 0x785D7880, - 0x785CAC00, 0x785BDF80, 0x785B1300, - 0x785A4680, 0x78597A00, 0x7858AD80, - 0x7857E100, 0x78571480, 0x78564800, - 0x78557B80, 0x7854AF00, 0x7853E280, - 0x78531600, 0x78524980, 0x78517D00, - 0x7850B080, 0x784FE400, 0x784F1780, - 0x784E4B00, 0x784D7E80, 0x784CB200, - 0x784BE580, 0x784B1900, 0x784A4C80, - 0x78498000, 0x7848B380, 0x7847E700, - 0x78471A80, 0x78464E00, 0x78458180, - 0x7844B500, 0x7843E880, 0x78431C00, - 0x78424F80, 0x78418300, 0x7840B680, - 0x783FEA00, 0x783F1D80, 0x783E5100, - 0x783D8480, 0x783CB800, 0x783BEB80, - 0x783B1F00, 0x783A5280, 0x78398600, - 0x7838B980, 0x7837ED00, 0x78372080, - 0x78365400, 0x78358780, 0x7834BB00, - 0x7833EE80, 0x78332200, 0x78325580, - 0x78318900, 0x7830BC80, 0x782FF000, - 0x782F2380, 0x782E5700, 0x782D8A80, - 0x782CBE00, 0x782BF180, 0x782B2500, - 0x782A5880, 0x78298C00, 0x7828BF80, - 0x7827F300, 0x78272680, 0x78265A00, - 0x78258D80, 0x7824C100, 0x7823F480, - 0x78232800, 0x78225B80, 0x78218F00, - 0x7820C280, 0x781FF600, 0x781F2980, - 0x781E5D00, 0x781D9080, 0x781CC400, - 0x781BF780, 0x781B2B00, 0x781A5E80, - 0x78199200, 0x7818C580, 0x7817F900, - 0x78172C80, 0x78166000, 0x78159380, - 0x7814C700, 0x7813FA80, 0x78132E00, - 0x78126180, 0x78119500, 0x7810C880, - 0x780FFC00, 0x780F2F80, 0x780E6300, - 0x780D9680, 0x780CCA00, 0x780BFD80, - 0x780B3100, 0x780A6480, 0x78099800, - 0x7808CB80, 0x7807FF00, 0x78073280, - 0x78066600, 0x78059980, 0x7804CD00, - 0x78040080, 0x78033400, 0x78026780, - 0x78019B00, 0x7800CE80, 0x78000200, - 0x77FF3580, 0x77FE6900, 0x77FD9C80, - 0x77FCD000, 0x77FC0380, 0x77FB3700, - 0x77FA6A80, 0x77F99E00, 0x77F8D180, - 0x77F80500, 0x77F73880, 0x77F66C00, - 0x77F59F80, 0x77F4D300, 0x77F40680, - 0x77F33A00, 0x77F26D80, 0x77F1A100, - 0x77F0D480, 0x77F00800, 0x77EF3B80, - 0x77EE6F00, 0x77EDA280, 0x77ECD600, - 0x77EC0980, 0x77EB3D00, 0x77EA7080, - 0x77E9A400, 0x77E8D780, 0x77E80B00, - 0x77E73E80, 0x77E67200, 0x77E5A580, - 0x77E4D900, 0x77E40C80, 0x77E34000, - 0x77E27380, 0x77E1A700, 0x77E0DA80, - 0x77E00E00, 0x77DF4180, 0x77DE7500, - 0x77DDA880, 0x77DCDC00, 0x77DC0F80, - 0x77DB4300, 0x77DA7680, 0x77D9AA00, - 0x77D8DD80, 0x77D81100, 0x77D74480, - 0x77D67800, 0x77D5AB80, 0x77D4DF00, - 0x77D41280, 0x77D34600, 0x77D27980, - 0x77D1AD00, 0x77D0E080, 0x77D01400, - 0x77CF4780, 0x77CE7B00, 0x77CDAE80, - 0x77CCE200, 0x77CC1580, 0x77CB4900, - 0x77CA7C80, 0x77C9B000, 0x77C8E380, - 0x77C81700, 0x77C74A80, 0x77C67E00, - 0x77C5B180, 0x77C4E500, 0x77C41880, - 0x77C34C00, 0x77C27F80, 0x77C1B300, - 0x77C0E680, 0x77C01A00, 0x77BF4D80, - 0x77BE8100, 0x77BDB480, 0x77BCE800, - 0x77BC1B80, 0x77BB4F00, 0x77BA8280, - 0x77B9B600, 0x77B8E980, 0x77B81D00, - 0x77B75080, 0x77B68400, 0x77B5B780, - 0x77B4EB00, 0x77B41E80, 0x77B35200, - 0x77B28580, 0x77B1B900, 0x77B0EC80, - 0x77B02000, 0x77AF5380, 0x77AE8700, - 0x77ADBA80, 0x77ACEE00, 0x77AC2180, - 0x77AB5500, 0x77AA8880, 0x77A9BC00, - 0x77A8EF80, 0x77A82300, 0x77A75680, - 0x77A68A00, 0x77A5BD80, 0x77A4F100, - 0x77A42480, 0x77A35800, 0x77A28B80, - 0x77A1BF00, 0x77A0F280, 0x77A02600, - 0x779F5980, 0x779E8D00, 0x779DC080, - 0x779CF400, 0x779C2780, 0x779B5B00, - 0x779A8E80, 0x7799C200, 0x7798F580, - 0x77982900, 0x77975C80, 0x77969000, - 0x7795C380, 0x7794F700, 0x77942A80, - 0x77935E00, 0x77929180, 0x7791C500, - 0x7790F880, 0x77902C00, 0x778F5F80, - 0x778E9300, 0x778DC680, 0x778CFA00, - 0x778C2D80, 0x778B6100, 0x778A9480, - 0x7789C800, 0x7788FB80, 0x77882F00, - 0x77876280, 0x77869600, 0x7785C980, - 0x7784FD00, 0x77843080, 0x77836400, - 0x77829780, 0x7781CB00, 0x7780FE80, - 0x77803200, 0x777F6580, 0x777E9900, - 0x777DCC80, 0x777D0000, 0x777C3380, - 0x777B6700, 0x777A9A80, 0x7779CE00, - 0x77790180, 0x77783500, 0x77776880, - 0x77769C00, 0x7775CF80, 0x77750300, - 0x77743680, 0x77736A00, 0x77729D80, - 0x7771D100, 0x77710480, 0x77703800, - 0x776F6B80, 0x776E9F00, 0x776DD280, - 0x776D0600, 0x776C3980, 0x776B6D00, - 0x776AA080, 0x7769D400, 0x77690780, - 0x77683B00, 0x77676E80, 0x7766A200, - 0x7765D580, 0x77650900, 0x77643C80, - 0x77637000, 0x7762A380, 0x7761D700, - 0x77610A80, 0x77603E00, 0x775F7180, - 0x775EA500, 0x775DD880, 0x775D0C00, - 0x775C3F80, 0x775B7300, 0x775AA680, - 0x7759DA00, 0x77590D80, 0x77584100, - 0x77577480, 0x7756A800, 0x7755DB80, - 0x77550F00, 0x77544280, 0x77537600, - 0x7752A980, 0x7751DD00, 0x77511080, - 0x77504400, 0x774F7780, 0x774EAB00, - 0x774DDE80, 0x774D1200, 0x774C4580, - 0x774B7900, 0x774AAC80, 0x7749E000, - 0x77491380, 0x77484700, 0x77477A80, - 0x7746AE00, 0x7745E180, 0x77451500, - 0x77444880, 0x77437C00, 0x7742AF80, - 0x7741E300, 0x77411680, 0x77404A00, - 0x773F7D80, 0x773EB100, 0x773DE480, - 0x773D1800, 0x773C4B80, 0x773B7F00, - 0x773AB280, 0x7739E600, 0x77391980, - 0x77384D00, 0x77378080, 0x7736B400, - 0x7735E780, 0x77351B00, 0x77344E80, - 0x77338200, 0x7732B580, 0x7731E900, - 0x77311C80, 0x77305000, 0x772F8380, - 0x772EB700, 0x772DEA80, 0x772D1E00, - 0x772C5180, 0x772B8500, 0x772AB880, - 0x7729EC00, 0x77291F80, 0x77285300, - 0x77278680, 0x7726BA00, 0x7725ED80, - 0x77252100, 0x77245480, 0x77238800, - 0x7722BB80, 0x7721EF00, 0x77212280, - 0x77205600, 0x771F8980, 0x771EBD00, - 0x771DF080, 0x771D2400, 0x771C5780, - 0x771B8B00, 0x771ABE80, 0x7719F200, - 0x77192580, 0x77185900, 0x77178C80, - 0x7716C000, 0x7715F380, 0x77152700, - 0x77145A80, 0x77138E00, 0x7712C180, - 0x7711F500, 0x77112880, 0x77105C00, - 0x770F8F80, 0x770EC300, 0x770DF680, - 0x770D2A00, 0x770C5D80, 0x770B9100, - 0x770AC480, 0x7709F800, 0x77092B80, - 0x77085F00, 0x77079280, 0x7706C600, - 0x7705F980, 0x77052D00, 0x77046080, - 0x77039400, 0x7702C780, 0x7701FB00, - 0x77012E80, 0x77006200, 0x76FF9580, - 0x76FEC900, 0x76FDFC80, 0x76FD3000, - 0x76FC6380, 0x76FB9700, 0x76FACA80, - 0x76F9FE00, 0x76F93180, 0x76F86500, - 0x76F79880, 0x76F6CC00, 0x76F5FF80, - 0x76F53300, 0x76F46680, 0x76F39A00, - 0x76F2CD80, 0x76F20100, 0x76F13480, - 0x76F06800, 0x76EF9B80, 0x76EECF00, - 0x76EE0280, 0x76ED3600, 0x76EC6980, - 0x76EB9D00, 0x76EAD080, 0x76EA0400, - 0x76E93780, 0x76E86B00, 0x76E79E80, - 0x76E6D200, 0x76E60580, 0x76E53900, - 0x76E46C80, 0x76E3A000, 0x76E2D380, - 0x76E20700, 0x76E13A80, 0x76E06E00, - 0x76DFA180, 0x76DED500, 0x76DE0880, - 0x76DD3C00, 0x76DC6F80, 0x76DBA300, - 0x76DAD680, 0x76DA0A00, 0x76D93D80, - 0x76D87100, 0x76D7A480, 0x76D6D800, - 0x76D60B80, 0x76D53F00, 0x76D47280, - 0x76D3A600, 0x76D2D980, 0x76D20D00, - 0x76D14080, 0x76D07400, 0x76CFA780, - 0x76CEDB00, 0x76CE0E80, 0x76CD4200, - 0x76CC7580, 0x76CBA900, 0x76CADC80, - 0x76CA1000, 0x76C94380, 0x76C87700, - 0x76C7AA80, 0x76C6DE00, 0x76C61180, - 0x76C54500, 0x76C47880, 0x76C3AC00, - 0x76C2DF80, 0x76C21300, 0x76C14680, - 0x76C07A00, 0x76BFAD80, 0x76BEE100, - 0x76BE1480, 0x76BD4800, 0x76BC7B80, - 0x76BBAF00, 0x76BAE280, 0x76BA1600, - 0x76B94980, 0x76B87D00, 0x76B7B080, - 0x76B6E400, 0x76B61780, 0x76B54B00, - 0x76B47E80, 0x76B3B200, 0x76B2E580, - 0x76B21900, 0x76B14C80, 0x76B08000, - 0x76AFB380, 0x76AEE700, 0x76AE1A80, - 0x76AD4E00, 0x76AC8180, 0x76ABB500, - 0x76AAE880, 0x76AA1C00, 0x76A94F80, - 0x76A88300, 0x76A7B680, 0x76A6EA00, - 0x76A61D80, 0x76A55100, 0x76A48480, - 0x76A3B800, 0x76A2EB80, 0x76A21F00, - 0x76A15280, 0x76A08600, 0x769FB980, - 0x769EED00, 0x769E2080, 0x769D5400, - 0x769C8780, 0x769BBB00, 0x769AEE80, - 0x769A2200, 0x76995580, 0x76988900, - 0x7697BC80, 0x7696F000, 0x76962380, - 0x76955700, 0x76948A80, 0x7693BE00, - 0x7692F180, 0x76922500, 0x76915880, - 0x76908C00, 0x768FBF80, 0x768EF300, - 0x768E2680, 0x768D5A00, 0x768C8D80, - 0x768BC100, 0x768AF480, 0x768A2800, - 0x76895B80, 0x76888F00, 0x7687C280, - 0x7686F600, 0x76862980, 0x76855D00, - 0x76849080, 0x7683C400, 0x7682F780, - 0x76822B00, 0x76815E80, 0x76809200, - 0x767FC580, 0x767EF900, 0x767E2C80, - 0x767D6000, 0x767C9380, 0x767BC700, - 0x767AFA80, 0x767A2E00, 0x76796180, - 0x76789500, 0x7677C880, 0x7676FC00, - 0x76762F80, 0x76756300, 0x76749680, - 0x7673CA00, 0x7672FD80, 0x76723100, - 0x76716480, 0x76709800, 0x766FCB80, - 0x766EFF00, 0x766E3280, 0x766D6600, - 0x766C9980, 0x766BCD00, 0x766B0080, - 0x766A3400, 0x76696780, 0x76689B00, - 0x7667CE80, 0x76670200, 0x76663580, - 0x76656900, 0x76649C80, 0x7663D000, - 0x76630380, 0x76623700, 0x76616A80, - 0x76609E00, 0x765FD180, 0x765F0500, - 0x765E3880, 0x765D6C00, 0x765C9F80, - 0x765BD300, 0x765B0680, 0x765A3A00, - 0x76596D80, 0x7658A100, 0x7657D480, - 0x76570800, 0x76563B80, 0x76556F00, - 0x7654A280, 0x7653D600, 0x76530980, - 0x76523D00, 0x76517080, 0x7650A400, - 0x764FD780, 0x764F0B00, 0x764E3E80, - 0x764D7200, 0x764CA580, 0x764BD900, - 0x764B0C80, 0x764A4000, 0x76497380, - 0x7648A700, 0x7647DA80, 0x76470E00, - 0x76464180, 0x76457500, 0x7644A880, - 0x7643DC00, 0x76430F80, 0x76424300, - 0x76417680, 0x7640AA00, 0x763FDD80, - 0x763F1100, 0x763E4480, 0x763D7800, - 0x763CAB80, 0x763BDF00, 0x763B1280, - 0x763A4600, 0x76397980, 0x7638AD00, - 0x7637E080, 0x76371400, 0x76364780, - 0x76357B00, 0x7634AE80, 0x7633E200, - 0x76331580, 0x76324900, 0x76317C80, - 0x7630B000, 0x762FE380, 0x762F1700, - 0x762E4A80, 0x762D7E00, 0x762CB180, - 0x762BE500, 0x762B1880, 0x762A4C00, - 0x76297F80, 0x7628B300, 0x7627E680, - 0x76271A00, 0x76264D80, 0x76258100, - 0x7624B480, 0x7623E800, 0x76231B80, - 0x76224F00, 0x76218280, 0x7620B600, - 0x761FE980, 0x761F1D00, 0x761E5080, - 0x761D8400, 0x761CB780, 0x761BEB00, - 0x761B1E80, 0x761A5200, 0x76198580, - 0x7618B900, 0x7617EC80, 0x76172000, - 0x76165380, 0x76158700, 0x7614BA80, - 0x7613EE00, 0x76132180, 0x76125500, - 0x76118880, 0x7610BC00, 0x760FEF80, - 0x760F2300, 0x760E5680, 0x760D8A00, - 0x760CBD80, 0x760BF100, 0x760B2480, - 0x760A5800, 0x76098B80, 0x7608BF00, - 0x7607F280, 0x76072600, 0x76065980, - 0x76058D00, 0x7604C080, 0x7603F400, - 0x76032780, 0x76025B00, 0x76018E80, - 0x7600C200, 0x75FFF580, 0x75FF2900, - 0x75FE5C80, 0x75FD9000, 0x75FCC380, - 0x75FBF700, 0x75FB2A80, 0x75FA5E00, - 0x75F99180, 0x75F8C500, 0x75F7F880, - 0x75F72C00, 0x75F65F80, 0x75F59300, - 0x75F4C680, 0x75F3FA00, 0x75F32D80, - 0x75F26100, 0x75F19480, 0x75F0C800, - 0x75EFFB80, 0x75EF2F00, 0x75EE6280, - 0x75ED9600, 0x75ECC980, 0x75EBFD00, - 0x75EB3080, 0x75EA6400, 0x75E99780, - 0x75E8CB00, 0x75E7FE80, 0x75E73200, - 0x75E66580, 0x75E59900, 0x75E4CC80, - 0x75E40000, 0x75E33D80, 0x75E27B00, - 0x75E1B880, 0x75E0F600, 0x75E03380, - 0x75DF7100, 0x75DEAE80, 0x75DDEC00, - 0x75DD2980, 0x75DC6700, 0x75DBA480, - 0x75DAE200, 0x75DA1F80, 0x75D95D00, - 0x75D89A80, 0x75D7D800, 0x75D71580, - 0x75D65300, 0x75D59080, 0x75D4CE00, - 0x75D40B80, 0x75D34900, 0x75D28680, - 0x75D1C400, 0x75D10180, 0x75D03F00, - 0x75CF7C80, 0x75CEBA00, 0x75CDF780, - 0x75CD3500, 0x75CC7280, 0x75CBB000, - 0x75CAED80, 0x75CA2B00, 0x75C96880, - 0x75C8A600, 0x75C7E380, 0x75C72100, - 0x75C65E80, 0x75C59C00, 0x75C4D980, - 0x75C41700, 0x75C35480, 0x75C29200, - 0x75C1CF80, 0x75C10D00, 0x75C04A80, - 0x75BF8800, 0x75BEC580, 0x75BE0300, - 0x75BD4080, 0x75BC7E00, 0x75BBBB80, - 0x75BAF900, 0x75BA3680, 0x75B97400, - 0x75B8B180, 0x75B7EF00, 0x75B72C80, - 0x75B66A00, 0x75B5A780, 0x75B4E500, - 0x75B42280, 0x75B36000, 0x75B29D80, - 0x75B1DB00, 0x75B11880, 0x75B05600, - 0x75AF9380, 0x75AED100, 0x75AE0E80, - 0x75AD4C00, 0x75AC8980, 0x75ABC700, - 0x75AB0480, 0x75AA4200, 0x75A97F80, - 0x75A8BD00, 0x75A7FA80, 0x75A73800, - 0x75A67580, 0x75A5B300, 0x75A4F080, - 0x75A42E00, 0x75A36B80, 0x75A2A900, - 0x75A1E680, 0x75A12400, 0x75A06180, - 0x759F9F00, 0x759EDC80, 0x759E1A00, - 0x759D5780, 0x759C9500, 0x759BD280, - 0x759B1000, 0x759A4D80, 0x75998B00, - 0x7598C880, 0x75980600, 0x75974380, - 0x75968100, 0x7595BE80, 0x7594FC00, - 0x75943980, 0x75937700, 0x7592B480, - 0x7591F200, 0x75912F80, 0x75906D00, - 0x758FAA80, 0x758EE800, 0x758E2580, - 0x758D6300, 0x758CA080, 0x758BDE00, - 0x758B1B80, 0x758A5900, 0x75899680, - 0x7588D400, 0x75881180, 0x75874F00, - 0x75868C80, 0x7585CA00, 0x75850780, - 0x75844500, 0x75838280, 0x7582C000, - 0x7581FD80, 0x75813B00, 0x75807880, - 0x757FB600, 0x757EF380, 0x757E3100, - 0x757D6E80, 0x757CAC00, 0x757BE980, - 0x757B2700, 0x757A6480, 0x7579A200, - 0x7578DF80, 0x75781D00, 0x75775A80, - 0x75769800, 0x7575D580, 0x75751300, - 0x75745080, 0x75738E00, 0x7572CB80, - 0x75720900, 0x75714680, 0x75708400, - 0x756FC180, 0x756EFF00, 0x756E3C80, - 0x756D7A00, 0x756CB780, 0x756BF500, - 0x756B3280, 0x756A7000, 0x7569AD80, - 0x7568EB00, 0x75682880, 0x75676600, - 0x7566A380, 0x7565E100, 0x75651E80, - 0x75645C00, 0x75639980, 0x7562D700, - 0x75621480, 0x75615200, 0x75608F80, - 0x755FCD00, 0x755F0A80, 0x755E4800, - 0x755D8580, 0x755CC300, 0x755C0080, - 0x755B3E00, 0x755A7B80, 0x7559B900, - 0x7558F680, 0x75583400, 0x75577180, - 0x7556AF00, 0x7555EC80, 0x75552A00, - 0x75546780, 0x7553A500, 0x7552E280, - 0x75522000, 0x75515D80, 0x75509B00, - 0x754FD880, 0x754F1600, 0x754E5380, - 0x754D9100, 0x754CCE80, 0x754C0C00, - 0x754B4980, 0x754A8700, 0x7549C480, - 0x75490200, 0x75483F80, 0x75477D00, - 0x7546BA80, 0x7545F800, 0x75453580, - 0x75447300, 0x7543B080, 0x7542EE00, - 0x75422B80, 0x75416900, 0x7540A680, - 0x753FE400, 0x753F2180, 0x753E5F00, - 0x753D9C80, 0x753CDA00, 0x753C1780, - 0x753B5500, 0x753A9280, 0x7539D000, - 0x75390D80, 0x75384B00, 0x75378880, - 0x7536C600, 0x75360380, 0x75354100, - 0x75347E80, 0x7533BC00, 0x7532F980, - 0x75323700, 0x75317480, 0x7530B200, - 0x752FEF80, 0x752F2D00, 0x752E6A80, - 0x752DA800, 0x752CE580, 0x752C2300, - 0x752B6080, 0x752A9E00, 0x7529DB80, - 0x75291900, 0x75285680, 0x75279400, - 0x7526D180, 0x75260F00, 0x75254C80, - 0x75248A00, 0x7523C780, 0x75230500, - 0x75224280, 0x75218000, 0x7520BD80, - 0x751FFB00, 0x751F3880, 0x751E7600, - 0x751DB380, 0x751CF100, 0x751C2E80, - 0x751B6C00, 0x751AA980, 0x7519E700, - 0x75192480, 0x75186200, 0x75179F80, - 0x7516DD00, 0x75161A80, 0x75155800, - 0x75149580, 0x7513D300, 0x75131080, - 0x75124E00, 0x75118B80, 0x7510C900, - 0x75100680, 0x750F4400, 0x750E8180, - 0x750DBF00, 0x750CFC80, 0x750C3A00, - 0x750B7780, 0x750AB500, 0x7509F280, - 0x75093000, 0x75086D80, 0x7507AB00, - 0x7506E880, 0x75062600, 0x75056380, - 0x7504A100, 0x7503DE80, 0x75031C00, - 0x75025980, 0x75019700, 0x7500D480, - 0x75001200, 0x74FF4F80, 0x74FE8D00, - 0x74FDCA80, 0x74FD0800, 0x74FC4580, - 0x74FB8300, 0x74FAC080, 0x74F9FE00, - 0x74F93B80, 0x74F87900, 0x74F7B680, - 0x74F6F400, 0x74F63180, 0x74F56F00, - 0x74F4AC80, 0x74F3EA00, 0x74F32780, - 0x74F26500, 0x74F1A280, 0x74F0E000, - 0x74F01D80, 0x74EF5B00, 0x74EE9880, - 0x74EDD600, 0x74ED1380, 0x74EC5100, - 0x74EB8E80, 0x74EACC00, 0x74EA0980, - 0x74E94700, 0x74E88480, 0x74E7C200, - 0x74E6FF80, 0x74E63D00, 0x74E57A80, - 0x74E4B800, 0x74E3F580, 0x74E33300, - 0x74E27080, 0x74E1AE00, 0x74E0EB80, - 0x74E02900, 0x74DF6680, 0x74DEA400, - 0x74DDE180, 0x74DD1F00, 0x74DC5C80, - 0x74DB9A00, 0x74DAD780, 0x74DA1500, - 0x74D95280, 0x74D89000, 0x74D7CD80, - 0x74D70B00, 0x74D64880, 0x74D58600, - 0x74D4C380, 0x74D40100, 0x74D33E80, - 0x74D27C00, 0x74D1B980, 0x74D0F700, - 0x74D03480, 0x74CF7200, 0x74CEAF80, - 0x74CDED00, 0x74CD2A80, 0x74CC6800, - 0x74CBA580, 0x74CAE300, 0x74CA2080, - 0x74C95E00, 0x74C89B80, 0x74C7D900, - 0x74C71680, 0x74C65400, 0x74C59180, - 0x74C4CF00, 0x74C40C80, 0x74C34A00, - 0x74C28780, 0x74C1C500, 0x74C10280, - 0x74C04000, 0x74BF7D80, 0x74BEBB00, - 0x74BDF880, 0x74BD3600, 0x74BC7380, - 0x74BBB100, 0x74BAEE80, 0x74BA2C00, - 0x74B96980, 0x74B8A700, 0x74B7E480, - 0x74B72200, 0x74B65F80, 0x74B59D00, - 0x74B4DA80, 0x74B41800, 0x74B35580, - 0x74B29300, 0x74B1D080, 0x74B10E00, - 0x74B04B80, 0x74AF8900, 0x74AEC680, - 0x74AE0400, 0x74AD4180, 0x74AC7F00, - 0x74ABBC80, 0x74AAFA00, 0x74AA3780, - 0x74A97500, 0x74A8B280, 0x74A7F000, - 0x74A72D80, 0x74A66B00, 0x74A5A880, - 0x74A4E600, 0x74A42380, 0x74A36100, - 0x74A29E80, 0x74A1DC00, 0x74A11980, - 0x74A05700, 0x749F9480, 0x749ED200, - 0x749E0F80, 0x749D4D00, 0x749C8A80, - 0x749BC800, 0x749B0580, 0x749A4300, - 0x74998080, 0x7498BE00, 0x7497FB80, - 0x74973900, 0x74967680, 0x7495B400, - 0x7494F180, 0x74942F00, 0x74936C80, - 0x7492AA00, 0x7491E780, 0x74912500, - 0x74906280, 0x748FA000, 0x748EDD80, - 0x748E1B00, 0x748D5880, 0x748C9600, - 0x748BD380, 0x748B1100, 0x748A4E80, - 0x74898C00, 0x7488C980, 0x74880700, - 0x74874480, 0x74868200, 0x7485BF80, - 0x7484FD00, 0x74843A80, 0x74837800, - 0x7482B580, 0x7481F300, 0x74813080, - 0x74806E00, 0x747FAB80, 0x747EE900, - 0x747E2680, 0x747D6400, 0x747CA180, - 0x747BDF00, 0x747B1C80, 0x747A5A00, - 0x74799780, 0x7478D500, 0x74781280, - 0x74775000, 0x74768D80, 0x7475CB00, - 0x74750880, 0x74744600, 0x74738380, - 0x7472C100, 0x7471FE80, 0x74713C00, - 0x74707980, 0x746FB700, 0x746EF480, - 0x746E3200, 0x746D6F80, 0x746CAD00, - 0x746BEA80, 0x746B2800, 0x746A6580, - 0x7469A300, 0x7468E080, 0x74681E00, - 0x74675B80, 0x74669900, 0x7465D680, - 0x74651400, 0x74645180, 0x74638F00, - 0x7462CC80, 0x74620A00, 0x74614780, - 0x74608500, 0x745FC280, 0x745F0000, - 0x745E3D80, 0x745D7B00, 0x745CB880, - 0x745BF600, 0x745B3380, 0x745A7100, - 0x7459AE80, 0x7458EC00, 0x74582980, - 0x74576700, 0x7456A480, 0x7455E200, - 0x74551F80, 0x74545D00, 0x74539A80, - 0x7452D800, 0x74521580, 0x74515300, - 0x74509080, 0x744FCE00, 0x744F0B80, - 0x744E4900, 0x744D8680, 0x744CC400, - 0x744C0180, 0x744B3F00, 0x744A7C80, - 0x7449BA00, 0x7448F780, 0x74483500, - 0x74477280, 0x7446B000, 0x7445ED80, - 0x74452B00, 0x74446880, 0x7443A600, - 0x7442E380, 0x74422100, 0x74415E80, - 0x74409C00, 0x743FD980, 0x743F1700, - 0x743E5480, 0x743D9200, 0x743CCF80, - 0x743C0D00, 0x743B4A80, 0x743A8800, - 0x7439C580, 0x74390300, 0x74384080, - 0x74377E00, 0x7436BB80, 0x7435F900, - 0x74353680, 0x74347400, 0x7433B180, - 0x7432EF00, 0x74322C80, 0x74316A00, - 0x7430A780, 0x742FE500, 0x742F2280, - 0x742E6000, 0x742D9D80, 0x742CDB00, - 0x742C1880, 0x742B5600, 0x742A9380, - 0x7429D100, 0x74290E80, 0x74284C00, - 0x74278980, 0x7426C700, 0x74260480, - 0x74254200, 0x74247F80, 0x7423BD00, - 0x7422FA80, 0x74223800, 0x74217580, - 0x7420B300, 0x741FF080, 0x741F2E00, - 0x741E6B80, 0x741DA900, 0x741CE680, - 0x741C2400, 0x741B6180, 0x741A9F00, - 0x7419DC80, 0x74191A00, 0x74185780, - 0x74179500, 0x7416D280, 0x74161000, - 0x74154D80, 0x74148B00, 0x7413C880, - 0x74130600, 0x74124380, 0x74118100, - 0x7410BE80, 0x740FFC00, 0x740F3980, - 0x740E7700, 0x740DB480, 0x740CF200, - 0x740C2F80, 0x740B6D00, 0x740AAA80, - 0x7409E800, 0x74092580, 0x74086300, - 0x7407A080, 0x7406DE00, 0x74061B80, - 0x74055900, 0x74049680, 0x7403D400, - 0x74031180, 0x74024F00, 0x74018C80, - 0x7400CA00, 0x74000780, 0x73FF4500, - 0x73FE8280, 0x73FDC000, 0x73FCFD80, - 0x73FC3B00, 0x73FB7880, 0x73FAB600, - 0x73F9F380, 0x73F93100, 0x73F86E80, - 0x73F7AC00, 0x73F6E980, 0x73F62700, - 0x73F56480, 0x73F4A200, 0x73F3DF80, - 0x73F31D00, 0x73F25A80, 0x73F19800, - 0x73F0D580, 0x73F01300, 0x73EF5080, - 0x73EE8E00, 0x73EDCB80, 0x73ED0900, - 0x73EC4680, 0x73EB8400, 0x73EAC180, - 0x73E9FF00, 0x73E93C80, 0x73E87A00, - 0x73E7B780, 0x73E6F500, 0x73E63280, - 0x73E57000, 0x73E4AD80, 0x73E3EB00, - 0x73E32880, 0x73E26600, 0x73E1A380, - 0x73E0E100, 0x73E01E80, 0x73DF5C00, - 0x73DE9980, 0x73DDD700, 0x73DD1480, - 0x73DC5200, 0x73DB8F80, 0x73DACD00, - 0x73DA0A80, 0x73D94800, 0x73D88580, - 0x73D7C300, 0x73D70080, 0x73D63E00, - 0x73D57B80, 0x73D4B900, 0x73D3F680, - 0x73D33400, 0x73D27180, 0x73D1AF00, - 0x73D0EC80, 0x73D02A00, 0x73CF6780, - 0x73CEA500, 0x73CDE280, 0x73CD2000, - 0x73CC5D80, 0x73CB9B00, 0x73CAD880, - 0x73CA1600, 0x73C95380, 0x73C89100, - 0x73C7CE80, 0x73C70C00, 0x73C64980, - 0x73C58700, 0x73C4C480, 0x73C40200, - 0x73C33F80, 0x73C27D00, 0x73C1BA80, - 0x73C0F800, 0x73C03580, 0x73BF7300, - 0x73BEB080, 0x73BDEE00, 0x73BD2B80, - 0x73BC6900, 0x73BBA680, 0x73BAE400, - 0x73BA2180, 0x73B95F00, 0x73B89C80, - 0x73B7DA00, 0x73B71780, 0x73B65500, - 0x73B59280, 0x73B4D000, 0x73B40D80, - 0x73B34B00, 0x73B28880, 0x73B1C600, - 0x73B10380, 0x73B04100, 0x73AF7E80, - 0x73AEBC00, 0x73ADF980, 0x73AD3700, - 0x73AC7480, 0x73ABB200, 0x73AAEF80, - 0x73AA2D00, 0x73A96A80, 0x73A8A800, - 0x73A7E580, 0x73A72300, 0x73A66080, - 0x73A59E00, 0x73A4DB80, 0x73A41900, - 0x73A35680, 0x73A29400, 0x73A1D180, - 0x73A10F00, 0x73A04C80, 0x739F8A00, - 0x739EC780, 0x739E0500, 0x739D4280, - 0x739C8000, 0x739BBD80, 0x739AFB00, - 0x739A3880, 0x73997600, 0x7398B380, - 0x7397F100, 0x73972E80, 0x73966C00, - 0x7395A980, 0x7394E700, 0x73942480, - 0x73936200, 0x73929F80, 0x7391DD00, - 0x73911A80, 0x73905800, 0x738F9580, - 0x738ED300, 0x738E1080, 0x738D4E00, - 0x738C8B80, 0x738BC900, 0x738B0680, - 0x738A4400, 0x73898180, 0x7388BF00, - 0x7387FC80, 0x73873A00, 0x73867780, - 0x7385B500, 0x7384F280, 0x73843000, - 0x73836D80, 0x7382AB00, 0x7381E880, - 0x73812600, 0x73806380, 0x737FA100, - 0x737EDE80, 0x737E1C00, 0x737D5980, - 0x737C9700, 0x737BD480, 0x737B1200, - 0x737A4F80, 0x73798D00, 0x7378CA80, - 0x73780800, 0x73774580, 0x73768300, - 0x7375C080, 0x7374FE00, 0x73743B80, - 0x73737900, 0x7372B680, 0x7371F400, - 0x73713180, 0x73706F00, 0x736FAC80, - 0x736EEA00, 0x736E2780, 0x736D6500, - 0x736CA280, 0x736BE000, 0x736B1D80, - 0x736A5B00, 0x73699880, 0x7368D600, - 0x73681380, 0x73675100, 0x73668E80, - 0x7365CC00, 0x73650980, 0x73644700, - 0x73638480, 0x7362C200, 0x7361FF80, - 0x73613D00, 0x73607A80, 0x735FB800, - 0x735EF580, 0x735E3300, 0x735D7080, - 0x735CAE00, 0x735BEB80, 0x735B2900, - 0x735A6680, 0x7359A400, 0x7358E180, - 0x73581F00, 0x73575C80, 0x73569A00, - 0x7355D780, 0x73551500, 0x73545280, - 0x73539000, 0x7352CD80, 0x73520B00, - 0x73514880, 0x73508600, 0x734FC380, - 0x734F0100, 0x734E3E80, 0x734D7C00, - 0x734CB980, 0x734BF700, 0x734B3480, - 0x734A7200, 0x7349AF80, 0x7348ED00, - 0x73482A80, 0x73476800, 0x7346A580, - 0x7345E300, 0x73452080, 0x73445E00, - 0x73439B80, 0x7342D900, 0x73421680, - 0x73415400, 0x73409180, 0x733FCF00, - 0x733F0C80, 0x733E4A00, 0x733D8780, - 0x733CC500, 0x733C0280, 0x733B4000, - 0x733A7D80, 0x7339BB00, 0x7338F880, - 0x73383600, 0x73377380, 0x7336B100, - 0x7335EE80, 0x73352C00, 0x73346980, - 0x7333A700, 0x7332E480, 0x73322200, - 0x73315F80, 0x73309D00, 0x732FDA80, - 0x732F1800, 0x732E5580, 0x732D9300, - 0x732CD080, 0x732C0E00, 0x732B4B80, - 0x732A8900, 0x7329C680, 0x73290400, - 0x73284180, 0x73277F00, 0x7326BC80, - 0x7325FA00, 0x73253780, 0x73247500, - 0x7323B280, 0x7322F000, 0x73222D80, - 0x73216B00, 0x7320A880, 0x731FE600, - 0x731F2380, 0x731E6100, 0x731D9E80, - 0x731CDC00, 0x731C1980, 0x731B5700, - 0x731A9480, 0x7319D200, 0x73190F80, - 0x73184D00, 0x73178A80, 0x7316C800, - 0x73160580, 0x73154300, 0x73148080, - 0x7313BE00, 0x7312FB80, 0x73123900, - 0x73117680, 0x7310B400, 0x730FF180, - 0x730F2F00, 0x730E6C80, 0x730DAA00, - 0x730CE780, 0x730C2500, 0x730B6280, - 0x730AA000, 0x7309DD80, 0x73091B00, - 0x73085880, 0x73079600, 0x7306D380, - 0x73061100, 0x73054E80, 0x73048C00, - 0x7303C980, 0x73030700, 0x73024480, - 0x73018200, 0x7300BF80, 0x72FFFD00, - 0x72FF3A80, 0x72FE7800, 0x72FDB580, - 0x72FCF300, 0x72FC3080, 0x72FB6E00, - 0x72FAAB80, 0x72F9E900, 0x72F92680, - 0x72F86400, 0x72F7A180, 0x72F6DF00, - 0x72F61C80, 0x72F55A00, 0x72F49780, - 0x72F3D500, 0x72F31280, 0x72F25000, - 0x72F18D80, 0x72F0CB00, 0x72F00880, - 0x72EF4600, 0x72EE8380, 0x72EDC100, - 0x72ECFE80, 0x72EC3C00, 0x72EB7980, - 0x72EAB700, 0x72E9F480, 0x72E93200, - 0x72E86F80, 0x72E7AD00, 0x72E6EA80, - 0x72E62800, 0x72E56580, 0x72E4A300, - 0x72E3E080, 0x72E31E00, 0x72E25B80, - 0x72E19900, 0x72E0D680, 0x72E01400, - 0x72DF5180, 0x72DE8F00, 0x72DDCC80, - 0x72DD0A00, 0x72DC4780, 0x72DB8500, - 0x72DAC280, 0x72DA0000, 0x72D93D80, - 0x72D87B00, 0x72D7B880, 0x72D6F600, - 0x72D63380, 0x72D57100, 0x72D4AE80, - 0x72D3EC00, 0x72D32980, 0x72D26700, - 0x72D1A480, 0x72D0E200, 0x72D01F80, - 0x72CF5D00, 0x72CE9A80, 0x72CDD800, - 0x72CD1580, 0x72CC5300, 0x72CB9080, - 0x72CACE00, 0x72CA0B80, 0x72C94900, - 0x72C88680, 0x72C7C400, 0x72C70180, - 0x72C63F00, 0x72C57C80, 0x72C4BA00, - 0x72C3F780, 0x72C33500, 0x72C27280, - 0x72C1B000, 0x72C0ED80, 0x72C02B00, - 0x72BF6880, 0x72BEA600, 0x72BDE380, - 0x72BD2100, 0x72BC5E80, 0x72BB9C00, - 0x72BAD980, 0x72BA1700, 0x72B95480, - 0x72B89200, 0x72B7CF80, 0x72B70D00, - 0x72B64A80, 0x72B58800, 0x72B4C580, - 0x72B40300, 0x72B34080, 0x72B27E00, - 0x72B1BB80, 0x72B0F900, 0x72B03680, - 0x72AF7400, 0x72AEB180, 0x72ADEF00, - 0x72AD2C80, 0x72AC6A00, 0x72ABA780, - 0x72AAE500, 0x72AA2280, 0x72A96000, - 0x72A89D80, 0x72A7DB00, 0x72A71880, - 0x72A65600, 0x72A59380, 0x72A4D100, - 0x72A40E80, 0x72A34C00, 0x72A28980, - 0x72A1C700, 0x72A10480, 0x72A04200, - 0x729F7F80, 0x729EBD00, 0x729DFA80, - 0x729D3800, 0x729C7580, 0x729BB300, - 0x729AF080, 0x729A2E00, 0x72996B80, - 0x7298A900, 0x7297E680, 0x72972400, - 0x72966180, 0x72959F00, 0x7294DC80, - 0x72941A00, 0x72935780, 0x72929500, - 0x7291D280, 0x72911000, 0x72904D80, - 0x728F8B00, 0x728EC880, 0x728E0600, - 0x728D4380, 0x728C8100, 0x728BBE80, - 0x728AFC00, 0x728A3980, 0x72897700, - 0x7288B480, 0x7287F200, 0x72872F80, - 0x72866D00, 0x7285AA80, 0x7284E800, - 0x72842580, 0x72836300, 0x7282A080, - 0x7281DE00, 0x72811B80, 0x72805900, - 0x727F9680, 0x727ED400, 0x727E1180, - 0x727D4F00, 0x727C8C80, 0x727BCA00, - 0x727B0780, 0x727A4500, 0x72798280, - 0x7278C000, 0x7277FD80, 0x72773B00, - 0x72767880, 0x7275B600, 0x7274F380, - 0x72743100, 0x72736E80, 0x7272AC00, - 0x7271E980, 0x72712700, 0x72706480, - 0x726FA200, 0x726EDF80, 0x726E1D00, - 0x726D5A80, 0x726C9800, 0x726BD580, - 0x726B1300, 0x726A5080, 0x72698E00, - 0x7268CB80, 0x72680900, 0x72674680, - 0x72668400, 0x7265C180, 0x7264FF00, - 0x72643C80, 0x72637A00, 0x7262B780, - 0x7261F500, 0x72613280, 0x72607000, - 0x725FAD80, 0x725EEB00, 0x725E2880, - 0x725D6600, 0x725CA380, 0x725BE100, - 0x725B1E80, 0x725A5C00, 0x72599980, - 0x7258D700, 0x72581480, 0x72575200, - 0x72568F80, 0x7255CD00, 0x72550A80, - 0x72544800, 0x72538580, 0x7252C300, - 0x72520080, 0x72513E00, 0x72507B80, - 0x724FB900, 0x724EF680, 0x724E3400, - 0x724D7180, 0x724CAF00, 0x724BEC80, - 0x724B2A00, 0x724A6780, 0x7249A500, - 0x7248E280, 0x72482000, 0x72475D80, - 0x72469B00, 0x7245D880, 0x72451600, - 0x72445380, 0x72439100, 0x7242CE80, - 0x72420C00, 0x72414980, 0x72408700, - 0x723FC480, 0x723F0200, 0x723E3F80, - 0x723D7D00, 0x723CBA80, 0x723BF800, - 0x723B3580, 0x723A7300, 0x7239B080, - 0x7238EE00, 0x72382B80, 0x72376900, - 0x7236A680, 0x7235E400, 0x72352180, - 0x72345F00, 0x72339C80, 0x7232DA00, - 0x72321780, 0x72315500, 0x72309280, - 0x722FD000, 0x722F0D80, 0x722E4B00, - 0x722D8880, 0x722CC600, 0x722C0380, - 0x722B4100, 0x722A7E80, 0x7229BC00, - 0x7228F980, 0x72283700, 0x72277480, - 0x7226B200, 0x7225EF80, 0x72252D00, - 0x72246A80, 0x7223A800, 0x7222E580, - 0x72222300, 0x72216080, 0x72209E00, - 0x721FDB80, 0x721F1900, 0x721E5680, - 0x721D9400, 0x721CD180, 0x721C0F00, - 0x721B4C80, 0x721A8A00, 0x7219C780, - 0x72190500, 0x72184280, 0x72178000, - 0x7216BD80, 0x7215FB00, 0x72153880, - 0x72147600, 0x7213B380, 0x7212F100, - 0x72122E80, 0x72116C00, 0x7210A980, - 0x720FE700, 0x720F2480, 0x720E6200, - 0x720D9F80, 0x720CDD00, 0x720C1A80, - 0x720B5800, 0x720A9580, 0x7209D300, - 0x72091080, 0x72084E00, 0x72078B80, - 0x7206C900, 0x72060680, 0x72054400, - 0x72048180, 0x7203BF00, 0x7202FC80, - 0x72023A00, 0x72017780, 0x7200B500, - 0x71FFF280, 0x71FF3000, 0x71FE6D80, - 0x71FDAB00, 0x71FCE880, 0x71FC2600, - 0x71FB6380, 0x71FAA100, 0x71F9DE80, - 0x71F91C00, 0x71F85980, 0x71F79700, - 0x71F6D480, 0x71F61200, 0x71F54F80, - 0x71F48D00, 0x71F3CA80, 0x71F30800, - 0x71F24580, 0x71F18300, 0x71F0C080, - 0x71EFFE00, 0x71EF3B80, 0x71EE7900, - 0x71EDB680, 0x71ECF400, 0x71EC3180, - 0x71EB6F00, 0x71EAAC80, 0x71E9EA00, - 0x71E92780, 0x71E86500, 0x71E7A280, - 0x71E6E000, 0x71E61D80, 0x71E55B00, - 0x71E49880, 0x71E3D600, 0x71E31380, - 0x71E25100, 0x71E18E80, 0x71E0CC00, - 0x71E00980, 0x71DF4700, 0x71DE8480, - 0x71DDC200, 0x71DCFF80, 0x71DC3D00, - 0x71DB7A80, 0x71DAB800, 0x71D9F580, - 0x71D93300, 0x71D87080, 0x71D7AE00, - 0x71D6EB80, 0x71D62900, 0x71D56680, - 0x71D4A400, 0x71D3E180, 0x71D31F00, - 0x71D25C80, 0x71D19A00, 0x71D0D780, - 0x71D01500, 0x71CF5280, 0x71CE9000, - 0x71CDCD80, 0x71CD0B00, 0x71CC4880, - 0x71CB8600, 0x71CAC380, 0x71CA0100, - 0x71C93E80, 0x71C87C00, 0x71C7B980, - 0x71C6F700, 0x71C63480, 0x71C57200, - 0x71C4AF80, 0x71C3ED00, 0x71C32A80, - 0x71C26800, 0x71C1A580, 0x71C0E300, - 0x71C02080, 0x71BF5E00, 0x71BE9B80, - 0x71BDD900, 0x71BD1680, 0x71BC5400, - 0x71BB9180, 0x71BACF00, 0x71BA0C80, - 0x71B94A00, 0x71B88780, 0x71B7C500, - 0x71B70280, 0x71B64000, 0x71B57D80, - 0x71B4BB00, 0x71B3F880, 0x71B33600, - 0x71B27380, 0x71B1B100, 0x71B0EE80, - 0x71B02C00, 0x71AF6980, 0x71AEA700, - 0x71ADE480, 0x71AD2200, 0x71AC5F80, - 0x71AB9D00, 0x71AADA80, 0x71AA1800, - 0x71A95580, 0x71A89300, 0x71A7D080, - 0x71A70E00, 0x71A64B80, 0x71A58900, - 0x71A4C680, 0x71A40400, 0x71A34180, - 0x71A27F00, 0x71A1BC80, 0x71A0FA00, - 0x71A03780, 0x719F7500, 0x719EB280, - 0x719DF000, 0x719D2D80, 0x719C6B00, - 0x719BA880, 0x719AE600, 0x719A2380, - 0x71996100, 0x71989E80, 0x7197DC00, - 0x71971980, 0x71965700, 0x71959480, - 0x7194D200, 0x71940F80, 0x71934D00, - 0x71928A80, 0x7191C800, 0x71910580, - 0x71904300, 0x718F8080, 0x718EBE00, - 0x718DFB80, 0x718D3900, 0x718C7680, - 0x718BB400, 0x718AF180, 0x718A2F00, - 0x71896C80, 0x7188AA00, 0x7187E780, - 0x71872500, 0x71866280, 0x7185A000, - 0x7184DD80, 0x71841B00, 0x71835880, - 0x71829600, 0x7181D380, 0x71811100, - 0x71804E80, 0x717F8C00, 0x717EC980, - 0x717E0700, 0x717D4480, 0x717C8200, - 0x717BBF80, 0x717AFD00, 0x717A3A80, - 0x71797800, 0x7178B580, 0x7177F300, - 0x71773080, 0x71766E00, 0x7175AB80, - 0x7174E900, 0x71742680, 0x71736400, - 0x7172A180, 0x7171DF00, 0x71711C80, - 0x71705A00, 0x716F9780, 0x716ED500, - 0x716E1280, 0x716D5000, 0x716C8D80, - 0x716BCB00, 0x716B0880, 0x716A4600, - 0x71698380, 0x7168C100, 0x7167FE80, - 0x71673C00, 0x71667980, 0x7165B700, - 0x7164F480, 0x71643200, 0x71636F80, - 0x7162AD00, 0x7161EA80, 0x71612800, - 0x71606580, 0x715FA300, 0x715EE080, - 0x715E1E00, 0x715D5B80, 0x715C9900, - 0x715BD680, 0x715B1400, 0x715A5180, - 0x71598F00, 0x7158CC80, 0x71580A00, - 0x71574780, 0x71568500, 0x7155C280, - 0x71550000, 0x71543D80, 0x71537B00, - 0x7152B880, 0x7151F600, 0x71513380, - 0x71507100, 0x714FAE80, 0x714EEC00, - 0x714E2980, 0x714D6700, 0x714CA480, - 0x714BE200, 0x714B1F80, 0x714A5D00, - 0x71499A80, 0x7148D800, 0x71481580, - 0x71475300, 0x71469080, 0x7145CE00, - 0x71450B80, 0x71444900, 0x71438680, - 0x7142C400, 0x71420180, 0x71413F00, - 0x71407C80, 0x713FBA00, 0x713EF780, - 0x713E3500, 0x713D7280, 0x713CB000, - 0x713BED80, 0x713B2B00, 0x713A6880, - 0x7139A600, 0x7138E380, 0x71382100, - 0x71375E80, 0x71369C00, 0x7135D980, - 0x71351700, 0x71345480, 0x71339200, - 0x7132CF80, 0x71320D00, 0x71314A80, - 0x71308800, 0x712FC580, 0x712F0300, - 0x712E4080, 0x712D7E00, 0x712CBB80, - 0x712BF900, 0x712B3680, 0x712A7400, - 0x7129B180, 0x7128EF00, 0x71282C80, - 0x71276A00, 0x7126A780, 0x7125E500, - 0x71252280, 0x71246000, 0x71239D80, - 0x7122DB00, 0x71221880, 0x71215600, - 0x71209380, 0x711FD100, 0x711F0E80, - 0x711E4C00, 0x711D8980, 0x711CC700, - 0x711C0480, 0x711B4200, 0x711A7F80, - 0x7119BD00, 0x7118FA80, 0x71183800, - 0x71177580, 0x7116B300, 0x7115F080, - 0x71152E00, 0x71146B80, 0x7113A900, - 0x7112E680, 0x71122400, 0x71116180, - 0x71109F00, 0x710FDC80, 0x710F1A00, - 0x710E5780, 0x710D9500, 0x710CD280, - 0x710C1000, 0x710B4D80, 0x710A8B00, - 0x7109C880, 0x71090600, 0x71084380, - 0x71078100, 0x7106BE80, 0x7105FC00, - 0x71053980, 0x71047700, 0x7103B480, - 0x7102F200, 0x71022F80, 0x71016D00, - 0x7100AA80, 0x70FFE800, 0x70FF2580, - 0x70FE6300, 0x70FDA080, 0x70FCDE00, - 0x70FC1B80, 0x70FB5900, 0x70FA9680, - 0x70F9D400, 0x70F91180, 0x70F84F00, - 0x70F78C80, 0x70F6CA00, 0x70F60780, - 0x70F54500, 0x70F48280, 0x70F3C000, - 0x70F2FD80, 0x70F23B00, 0x70F17880, - 0x70F0B600, 0x70EFF380, 0x70EF3100, - 0x70EE6E80, 0x70EDAC00, 0x70ECE980, - 0x70EC2700, 0x70EB6480, 0x70EAA200, - 0x70E9DF80, 0x70E91D00, 0x70E85A80, - 0x70E79800, 0x70E6D580, 0x70E61300, - 0x70E55080, 0x70E48E00, 0x70E3CB80, - 0x70E30900, 0x70E24680, 0x70E18400, - 0x70E0C180, 0x70DFFF00, 0x70DF3C80, - 0x70DE7A00, 0x70DDB780, 0x70DCF500, - 0x70DC3280, 0x70DB7000, 0x70DAAD80, - 0x70D9EB00, 0x70D92880, 0x70D86600, - 0x70D7A380, 0x70D6E100, 0x70D61E80, - 0x70D55C00, 0x70D49980, 0x70D3D700, - 0x70D31480, 0x70D25200, 0x70D18F80, - 0x70D0CD00, 0x70D00A80, 0x70CF4800, - 0x70CE8580, 0x70CDC300, 0x70CD0080, - 0x70CC3E00, 0x70CB7B80, 0x70CAB900, - 0x70C9F680, 0x70C93400, 0x70C87180, - 0x70C7AF00, 0x70C6EC80, 0x70C62A00, - 0x70C56780, 0x70C4A500, 0x70C3E280, - 0x70C32000, 0x70C25D80, 0x70C19B00, - 0x70C0D880, 0x70C01600, 0x70BF5380, - 0x70BE9100, 0x70BDCE80, 0x70BD0C00, - 0x70BC4980, 0x70BB8700, 0x70BAC480, - 0x70BA0200, 0x70B93F80, 0x70B87D00, - 0x70B7BA80, 0x70B6F800, 0x70B63580, - 0x70B57300, 0x70B4B080, 0x70B3EE00, - 0x70B32B80, 0x70B26900, 0x70B1A680, - 0x70B0E400, 0x70B02180, 0x70AF5F00, - 0x70AE9C80, 0x70ADDA00, 0x70AD1780, - 0x70AC5500, 0x70AB9280, 0x70AAD000, - 0x70AA0D80, 0x70A94B00, 0x70A88880, - 0x70A7C600, 0x70A70380, 0x70A64100, - 0x70A57E80, 0x70A4BC00, 0x70A3F980, - 0x70A33700, 0x70A27480, 0x70A1B200, - 0x70A0EF80, 0x70A02D00, 0x709F6A80, - 0x709EA800, 0x709DE580, 0x709D2300, - 0x709C6080, 0x709B9E00, 0x709ADB80, - 0x709A1900, 0x70995680, 0x70989400, - 0x7097D180, 0x70970F00, 0x70964C80, - 0x70958A00, 0x7094C780, 0x70940500, - 0x70934280, 0x70928000, 0x7091BD80, - 0x7090FB00, 0x70903880, 0x708F7600, - 0x708EB380, 0x708DF100, 0x708D2E80, - 0x708C6C00, 0x708BA980, 0x708AE700, - 0x708A2480, 0x70896200, 0x70889F80, - 0x7087DD00, 0x70871A80, 0x70865800, - 0x70859580, 0x7084D300, 0x70841080, - 0x70834E00, 0x70828B80, 0x7081C900, - 0x70810680, 0x70804400, 0x707F8180, - 0x707EBF00, 0x707DFC80, 0x707D3A00, - 0x707C7780, 0x707BB500, 0x707AF280, - 0x707A3000, 0x70796D80, 0x7078AB00, - 0x7077E880, 0x70772600, 0x70766380, - 0x7075A100, 0x7074DE80, 0x70741C00, - 0x70735980, 0x70729700, 0x7071D480, - 0x70711200, 0x70704F80, 0x706F8D00, - 0x706ECA80, 0x706E0800, 0x706D4580, - 0x706C8300, 0x706BC080, 0x706AFE00, - 0x706A3B80, 0x70697900, 0x7068B680, - 0x7067F400, 0x70673180, 0x70666F00, - 0x7065AC80, 0x7064EA00, 0x70642780, - 0x70636500, 0x7062A280, 0x7061E000, - 0x70611D80, 0x70605B00, 0x705F9880, - 0x705ED600, 0x705E1380, 0x705D5100, - 0x705C8E80, 0x705BCC00, 0x705B0980, - 0x705A4700, 0x70598480, 0x7058C200, - 0x7057FF80, 0x70573D00, 0x70567A80, - 0x7055B800, 0x7054F580, 0x70543300, - 0x70537080, 0x7052AE00, 0x7051EB80, - 0x70512900, 0x70506680, 0x704FA400, - 0x704EE180, 0x704E1F00, 0x704D5C80, - 0x704C9A00, 0x704BD780, 0x704B1500, - 0x704A5280, 0x70499000, 0x7048CD80, - 0x70480B00, 0x70474880, 0x70468600, - 0x7045C380, 0x70450100, 0x70443E80, - 0x70437C00, 0x7042B980, 0x7041F700, - 0x70413480, 0x70407200, 0x703FAF80, - 0x703EED00, 0x703E2A80, 0x703D6800, - 0x703CA580, 0x703BE300, 0x703B2080, - 0x703A5E00, 0x70399B80, 0x7038D900, - 0x70381680, 0x70375400, 0x70369180, - 0x7035CF00, 0x70350C80, 0x70344A00, - 0x70338780, 0x7032C500, 0x70320280, - 0x70314000, 0x70307D80, 0x702FBB00, - 0x702EF880, 0x702E3600, 0x702D7380, - 0x702CB100, 0x702BEE80, 0x702B2C00, - 0x702A6980, 0x7029A700, 0x7028E480, - 0x70282200, 0x70275F80, 0x70269D00, - 0x7025DA80, 0x70251800, 0x70245580, - 0x70239300, 0x7022D080, 0x70220E00, - 0x70214B80, 0x70208900, 0x701FC680, - 0x701F0400, 0x701E4180, 0x701D7F00, - 0x701CBC80, 0x701BFA00, 0x701B3780, - 0x701A7500, 0x7019B280, 0x7018F000, - 0x70182D80, 0x70176B00, 0x7016A880, - 0x7015E600, 0x70152380, 0x70146100, - 0x70139E80, 0x7012DC00, 0x70121980, - 0x70115700, 0x70109480, 0x700FD200, - 0x700F0F80, 0x700E4D00, 0x700D8A80, - 0x700CC800, 0x700C0580, 0x700B4300, - 0x700A8080, 0x7009BE00, 0x7008FB80, - 0x70083900, 0x70077680, 0x7006B400, - 0x7005F180, 0x70052F00, 0x70046C80, - 0x7003AA00, 0x7002E780, 0x70022500, - 0x70016280, 0x7000A000, 0x6FFFDD80, - 0x6FFF1B00, 0x6FFE5880, 0x6FFD9600, - 0x6FFCD380, 0x6FFC1100, 0x6FFB4E80, - 0x6FFA8C00, 0x6FF9C980, 0x6FF90700, - 0x6FF84480, 0x6FF78200, 0x6FF6BF80, - 0x6FF5FD00, 0x6FF53A80, 0x6FF47800, - 0x6FF3B580, 0x6FF2F300, 0x6FF23080, - 0x6FF16E00, 0x6FF0AB80, 0x6FEFE900, - 0x6FEF2680, 0x6FEE6400, 0x6FEDA180, - 0x6FECDF00, 0x6FEC1C80, 0x6FEB5A00, - 0x6FEA9780, 0x6FE9D500, 0x6FE91280, - 0x6FE85000, 0x6FE78D80, 0x6FE6CB00, - 0x6FE60880, 0x6FE54600, 0x6FE48380, - 0x6FE3C100, 0x6FE2FE80, 0x6FE23C00, - 0x6FE17980, 0x6FE0B700, 0x6FDFF480, - 0x6FDF3200, 0x6FDE6F80, 0x6FDDAD00, - 0x6FDCEA80, 0x6FDC2800, 0x6FDB6580, - 0x6FDAA300, 0x6FD9E080, 0x6FD91E00, - 0x6FD85B80, 0x6FD79900, 0x6FD6D680, - 0x6FD61400, 0x6FD55180, 0x6FD48F00, - 0x6FD3CC80, 0x6FD30A00, 0x6FD24780, - 0x6FD18500, 0x6FD0C280, 0x6FD00000, - 0x6FCF4680, 0x6FCE8D00, 0x6FCDD380, - 0x6FCD1A00, 0x6FCC6080, 0x6FCBA700, - 0x6FCAED80, 0x6FCA3400, 0x6FC97A80, - 0x6FC8C100, 0x6FC80780, 0x6FC74E00, - 0x6FC69480, 0x6FC5DB00, 0x6FC52180, - 0x6FC46800, 0x6FC3AE80, 0x6FC2F500, - 0x6FC23B80, 0x6FC18200, 0x6FC0C880, - 0x6FC00F00, 0x6FBF5580, 0x6FBE9C00, - 0x6FBDE280, 0x6FBD2900, 0x6FBC6F80, - 0x6FBBB600, 0x6FBAFC80, 0x6FBA4300, - 0x6FB98980, 0x6FB8D000, 0x6FB81680, - 0x6FB75D00, 0x6FB6A380, 0x6FB5EA00, - 0x6FB53080, 0x6FB47700, 0x6FB3BD80, - 0x6FB30400, 0x6FB24A80, 0x6FB19100, - 0x6FB0D780, 0x6FB01E00, 0x6FAF6480, - 0x6FAEAB00, 0x6FADF180, 0x6FAD3800, - 0x6FAC7E80, 0x6FABC500, 0x6FAB0B80, - 0x6FAA5200, 0x6FA99880, 0x6FA8DF00, - 0x6FA82580, 0x6FA76C00, 0x6FA6B280, - 0x6FA5F900, 0x6FA53F80, 0x6FA48600, - 0x6FA3CC80, 0x6FA31300, 0x6FA25980, - 0x6FA1A000, 0x6FA0E680, 0x6FA02D00, - 0x6F9F7380, 0x6F9EBA00, 0x6F9E0080, - 0x6F9D4700, 0x6F9C8D80, 0x6F9BD400, - 0x6F9B1A80, 0x6F9A6100, 0x6F99A780, - 0x6F98EE00, 0x6F983480, 0x6F977B00, - 0x6F96C180, 0x6F960800, 0x6F954E80, - 0x6F949500, 0x6F93DB80, 0x6F932200, - 0x6F926880, 0x6F91AF00, 0x6F90F580, - 0x6F903C00, 0x6F8F8280, 0x6F8EC900, - 0x6F8E0F80, 0x6F8D5600, 0x6F8C9C80, - 0x6F8BE300, 0x6F8B2980, 0x6F8A7000, - 0x6F89B680, 0x6F88FD00, 0x6F884380, - 0x6F878A00, 0x6F86D080, 0x6F861700, - 0x6F855D80, 0x6F84A400, 0x6F83EA80, - 0x6F833100, 0x6F827780, 0x6F81BE00, - 0x6F810480, 0x6F804B00, 0x6F7F9180, - 0x6F7ED800, 0x6F7E1E80, 0x6F7D6500, - 0x6F7CAB80, 0x6F7BF200, 0x6F7B3880, - 0x6F7A7F00, 0x6F79C580, 0x6F790C00, - 0x6F785280, 0x6F779900, 0x6F76DF80, - 0x6F762600, 0x6F756C80, 0x6F74B300, - 0x6F73F980, 0x6F734000, 0x6F728680, - 0x6F71CD00, 0x6F711380, 0x6F705A00, - 0x6F6FA080, 0x6F6EE700, 0x6F6E2D80, - 0x6F6D7400, 0x6F6CBA80, 0x6F6C0100, - 0x6F6B4780, 0x6F6A8E00, 0x6F69D480, - 0x6F691B00, 0x6F686180, 0x6F67A800, - 0x6F66EE80, 0x6F663500, 0x6F657B80, - 0x6F64C200, 0x6F640880, 0x6F634F00, - 0x6F629580, 0x6F61DC00, 0x6F612280, - 0x6F606900, 0x6F5FAF80, 0x6F5EF600, - 0x6F5E3C80, 0x6F5D8300, 0x6F5CC980, - 0x6F5C1000, 0x6F5B5680, 0x6F5A9D00, - 0x6F59E380, 0x6F592A00, 0x6F587080, - 0x6F57B700, 0x6F56FD80, 0x6F564400, - 0x6F558A80, 0x6F54D100, 0x6F541780, - 0x6F535E00, 0x6F52A480, 0x6F51EB00, - 0x6F513180, 0x6F507800, 0x6F4FBE80, - 0x6F4F0500, 0x6F4E4B80, 0x6F4D9200, - 0x6F4CD880, 0x6F4C1F00, 0x6F4B6580, - 0x6F4AAC00, 0x6F49F280, 0x6F493900, - 0x6F487F80, 0x6F47C600, 0x6F470C80, - 0x6F465300, 0x6F459980, 0x6F44E000, - 0x6F442680, 0x6F436D00, 0x6F42B380, - 0x6F41FA00, 0x6F414080, 0x6F408700, - 0x6F3FCD80, 0x6F3F1400, 0x6F3E5A80, - 0x6F3DA100, 0x6F3CE780, 0x6F3C2E00, - 0x6F3B7480, 0x6F3ABB00, 0x6F3A0180, - 0x6F394800, 0x6F388E80, 0x6F37D500, - 0x6F371B80, 0x6F366200, 0x6F35A880, - 0x6F34EF00, 0x6F343580, 0x6F337C00, - 0x6F32C280, 0x6F320900, 0x6F314F80, - 0x6F309600, 0x6F2FDC80, 0x6F2F2300, - 0x6F2E6980, 0x6F2DB000, 0x6F2CF680, - 0x6F2C3D00, 0x6F2B8380, 0x6F2ACA00, - 0x6F2A1080, 0x6F295700, 0x6F289D80, - 0x6F27E400, 0x6F272A80, 0x6F267100, - 0x6F25B780, 0x6F24FE00, 0x6F244480, - 0x6F238B00, 0x6F22D180, 0x6F221800, - 0x6F215E80, 0x6F20A500, 0x6F1FEB80, - 0x6F1F3200, 0x6F1E7880, 0x6F1DBF00, - 0x6F1D0580, 0x6F1C4C00, 0x6F1B9280, - 0x6F1AD900, 0x6F1A1F80, 0x6F196600, - 0x6F18AC80, 0x6F17F300, 0x6F173980, - 0x6F168000, 0x6F15C680, 0x6F150D00, - 0x6F145380, 0x6F139A00, 0x6F12E080, - 0x6F122700, 0x6F116D80, 0x6F10B400, - 0x6F0FFA80, 0x6F0F4100, 0x6F0E8780, - 0x6F0DCE00, 0x6F0D1480, 0x6F0C5B00, - 0x6F0BA180, 0x6F0AE800, 0x6F0A2E80, - 0x6F097500, 0x6F08BB80, 0x6F080200, - 0x6F074880, 0x6F068F00, 0x6F05D580, - 0x6F051C00, 0x6F046280, 0x6F03A900, - 0x6F02EF80, 0x6F023600, 0x6F017C80, - 0x6F00C300, 0x6F000980, 0x6EFF5000, - 0x6EFE9680, 0x6EFDDD00, 0x6EFD2380, - 0x6EFC6A00, 0x6EFBB080, 0x6EFAF700, - 0x6EFA3D80, 0x6EF98400, 0x6EF8CA80, - 0x6EF81100, 0x6EF75780, 0x6EF69E00, - 0x6EF5E480, 0x6EF52B00, 0x6EF47180, - 0x6EF3B800, 0x6EF2FE80, 0x6EF24500, - 0x6EF18B80, 0x6EF0D200, 0x6EF01880, - 0x6EEF5F00, 0x6EEEA580, 0x6EEDEC00, - 0x6EED3280, 0x6EEC7900, 0x6EEBBF80, - 0x6EEB0600, 0x6EEA4C80, 0x6EE99300, - 0x6EE8D980, 0x6EE82000, 0x6EE76680, - 0x6EE6AD00, 0x6EE5F380, 0x6EE53A00, - 0x6EE48080, 0x6EE3C700, 0x6EE30D80, - 0x6EE25400, 0x6EE19A80, 0x6EE0E100, - 0x6EE02780, 0x6EDF6E00, 0x6EDEB480, - 0x6EDDFB00, 0x6EDD4180, 0x6EDC8800, - 0x6EDBCE80, 0x6EDB1500, 0x6EDA5B80, - 0x6ED9A200, 0x6ED8E880, 0x6ED82F00, - 0x6ED77580, 0x6ED6BC00, 0x6ED60280, - 0x6ED54900, 0x6ED48F80, 0x6ED3D600, - 0x6ED31C80, 0x6ED26300, 0x6ED1A980, - 0x6ED0F000, 0x6ED03680, 0x6ECF7D00, - 0x6ECEC380, 0x6ECE0A00, 0x6ECD5080, - 0x6ECC9700, 0x6ECBDD80, 0x6ECB2400, - 0x6ECA6A80, 0x6EC9B100, 0x6EC8F780, - 0x6EC83E00, 0x6EC78480, 0x6EC6CB00, - 0x6EC61180, 0x6EC55800, 0x6EC49E80, - 0x6EC3E500, 0x6EC32B80, 0x6EC27200, - 0x6EC1B880, 0x6EC0FF00, 0x6EC04580, - 0x6EBF8C00, 0x6EBED280, 0x6EBE1900, - 0x6EBD5F80, 0x6EBCA600, 0x6EBBEC80, - 0x6EBB3300, 0x6EBA7980, 0x6EB9C000, - 0x6EB90680, 0x6EB84D00, 0x6EB79380, - 0x6EB6DA00, 0x6EB62080, 0x6EB56700, - 0x6EB4AD80, 0x6EB3F400, 0x6EB33A80, - 0x6EB28100, 0x6EB1C780, 0x6EB10E00, - 0x6EB05480, 0x6EAF9B00, 0x6EAEE180, - 0x6EAE2800, 0x6EAD6E80, 0x6EACB500, - 0x6EABFB80, 0x6EAB4200, 0x6EAA8880, - 0x6EA9CF00, 0x6EA91580, 0x6EA85C00, - 0x6EA7A280, 0x6EA6E900, 0x6EA62F80, - 0x6EA57600, 0x6EA4BC80, 0x6EA40300, - 0x6EA34980, 0x6EA29000, 0x6EA1D680, - 0x6EA11D00, 0x6EA06380, 0x6E9FAA00, - 0x6E9EF080, 0x6E9E3700, 0x6E9D7D80, - 0x6E9CC400, 0x6E9C0A80, 0x6E9B5100, - 0x6E9A9780, 0x6E99DE00, 0x6E992480, - 0x6E986B00, 0x6E97B180, 0x6E96F800, - 0x6E963E80, 0x6E958500, 0x6E94CB80, - 0x6E941200, 0x6E935880, 0x6E929F00, - 0x6E91E580, 0x6E912C00, 0x6E907280, - 0x6E8FB900, 0x6E8EFF80, 0x6E8E4600, - 0x6E8D8C80, 0x6E8CD300, 0x6E8C1980, - 0x6E8B6000, 0x6E8AA680, 0x6E89ED00, - 0x6E893380, 0x6E887A00, 0x6E87C080, - 0x6E870700, 0x6E864D80, 0x6E859400, - 0x6E84DA80, 0x6E842100, 0x6E836780, - 0x6E82AE00, 0x6E81F480, 0x6E813B00, - 0x6E808180, 0x6E7FC800, 0x6E7F0E80, - 0x6E7E5500, 0x6E7D9B80, 0x6E7CE200, - 0x6E7C2880, 0x6E7B6F00, 0x6E7AB580, - 0x6E79FC00, 0x6E794280, 0x6E788900, - 0x6E77CF80, 0x6E771600, 0x6E765C80, - 0x6E75A300, 0x6E74E980, 0x6E743000, - 0x6E737680, 0x6E72BD00, 0x6E720380, - 0x6E714A00, 0x6E709080, 0x6E6FD700, - 0x6E6F1D80, 0x6E6E6400, 0x6E6DAA80, - 0x6E6CF100, 0x6E6C3780, 0x6E6B7E00, - 0x6E6AC480, 0x6E6A0B00, 0x6E695180, - 0x6E689800, 0x6E67DE80, 0x6E672500, - 0x6E666B80, 0x6E65B200, 0x6E64F880, - 0x6E643F00, 0x6E638580, 0x6E62CC00, - 0x6E621280, 0x6E615900, 0x6E609F80, - 0x6E5FE600, 0x6E5F2C80, 0x6E5E7300, - 0x6E5DB980, 0x6E5D0000, 0x6E5C4680, - 0x6E5B8D00, 0x6E5AD380, 0x6E5A1A00, - 0x6E596080, 0x6E58A700, 0x6E57ED80, - 0x6E573400, 0x6E567A80, 0x6E55C100, - 0x6E550780, 0x6E544E00, 0x6E539480, - 0x6E52DB00, 0x6E522180, 0x6E516800, - 0x6E50AE80, 0x6E4FF500, 0x6E4F3B80, - 0x6E4E8200, 0x6E4DC880, 0x6E4D0F00, - 0x6E4C5580, 0x6E4B9C00, 0x6E4AE280, - 0x6E4A2900, 0x6E496F80, 0x6E48B600, - 0x6E47FC80, 0x6E474300, 0x6E468980, - 0x6E45D000, 0x6E451680, 0x6E445D00, - 0x6E43A380, 0x6E42EA00, 0x6E423080, - 0x6E417700, 0x6E40BD80, 0x6E400400, - 0x6E3F4A80, 0x6E3E9100, 0x6E3DD780, - 0x6E3D1E00, 0x6E3C6480, 0x6E3BAB00, - 0x6E3AF180, 0x6E3A3800, 0x6E397E80, - 0x6E38C500, 0x6E380B80, 0x6E375200, - 0x6E369880, 0x6E35DF00, 0x6E352580, - 0x6E346C00, 0x6E33B280, 0x6E32F900, - 0x6E323F80, 0x6E318600, 0x6E30CC80, - 0x6E301300, 0x6E2F5980, 0x6E2EA000, - 0x6E2DE680, 0x6E2D2D00, 0x6E2C7380, - 0x6E2BBA00, 0x6E2B0080, 0x6E2A4700, - 0x6E298D80, 0x6E28D400, 0x6E281A80, - 0x6E276100, 0x6E26A780, 0x6E25EE00, - 0x6E253480, 0x6E247B00, 0x6E23C180, - 0x6E230800, 0x6E224E80, 0x6E219500, - 0x6E20DB80, 0x6E202200, 0x6E1F6880, - 0x6E1EAF00, 0x6E1DF580, 0x6E1D3C00, - 0x6E1C8280, 0x6E1BC900, 0x6E1B0F80, - 0x6E1A5600, 0x6E199C80, 0x6E18E300, - 0x6E182980, 0x6E177000, 0x6E16B680, - 0x6E15FD00, 0x6E154380, 0x6E148A00, - 0x6E13D080, 0x6E131700, 0x6E125D80, - 0x6E11A400, 0x6E10EA80, 0x6E103100, - 0x6E0F7780, 0x6E0EBE00, 0x6E0E0480, - 0x6E0D4B00, 0x6E0C9180, 0x6E0BD800, - 0x6E0B1E80, 0x6E0A6500, 0x6E09AB80, - 0x6E08F200, 0x6E083880, 0x6E077F00, - 0x6E06C580, 0x6E060C00, 0x6E055280, - 0x6E049900, 0x6E03DF80, 0x6E032600, - 0x6E026C80, 0x6E01B300, 0x6E00F980, - 0x6E004000, 0x6DFF8680, 0x6DFECD00, - 0x6DFE1380, 0x6DFD5A00, 0x6DFCA080, - 0x6DFBE700, 0x6DFB2D80, 0x6DFA7400, - 0x6DF9BA80, 0x6DF90100, 0x6DF84780, - 0x6DF78E00, 0x6DF6D480, 0x6DF61B00, - 0x6DF56180, 0x6DF4A800, 0x6DF3EE80, - 0x6DF33500, 0x6DF27B80, 0x6DF1C200, - 0x6DF10880, 0x6DF04F00, 0x6DEF9580, - 0x6DEEDC00, 0x6DEE2280, 0x6DED6900, - 0x6DECAF80, 0x6DEBF600, 0x6DEB3C80, - 0x6DEA8300, 0x6DE9C980, 0x6DE91000, - 0x6DE85680, 0x6DE79D00, 0x6DE6E380, - 0x6DE62A00, 0x6DE57080, 0x6DE4B700, - 0x6DE3FD80, 0x6DE34400, 0x6DE28A80, - 0x6DE1D100, 0x6DE11780, 0x6DE05E00, - 0x6DDFA480, 0x6DDEEB00, 0x6DDE3180, - 0x6DDD7800, 0x6DDCBE80, 0x6DDC0500, - 0x6DDB4B80, 0x6DDA9200, 0x6DD9D880, - 0x6DD91F00, 0x6DD86580, 0x6DD7AC00, - 0x6DD6F280, 0x6DD63900, 0x6DD57F80, - 0x6DD4C600, 0x6DD40C80, 0x6DD35300, - 0x6DD29980, 0x6DD1E000, 0x6DD12680, - 0x6DD06D00, 0x6DCFB380, 0x6DCEFA00, - 0x6DCE4080, 0x6DCD8700, 0x6DCCCD80, - 0x6DCC1400, 0x6DCB5A80, 0x6DCAA100, - 0x6DC9E780, 0x6DC92E00, 0x6DC87480, - 0x6DC7BB00, 0x6DC70180, 0x6DC64800, - 0x6DC58E80, 0x6DC4D500, 0x6DC41B80, - 0x6DC36200, 0x6DC2A880, 0x6DC1EF00, - 0x6DC13580, 0x6DC07C00, 0x6DBFC280, - 0x6DBF0900, 0x6DBE4F80, 0x6DBD9600, - 0x6DBCDC80, 0x6DBC2300, 0x6DBB6980, - 0x6DBAB000, 0x6DB9F680, 0x6DB93D00, - 0x6DB88380, 0x6DB7CA00, 0x6DB71080, - 0x6DB65700, 0x6DB59D80, 0x6DB4E400, - 0x6DB42A80, 0x6DB37100, 0x6DB2B780, - 0x6DB1FE00, 0x6DB14480, 0x6DB08B00, - 0x6DAFD180, 0x6DAF1800, 0x6DAE5E80, - 0x6DADA500, 0x6DACEB80, 0x6DAC3200, - 0x6DAB7880, 0x6DAABF00, 0x6DAA0580, - 0x6DA94C00, 0x6DA89280, 0x6DA7D900, - 0x6DA71F80, 0x6DA66600, 0x6DA5AC80, - 0x6DA4F300, 0x6DA43980, 0x6DA38000, - 0x6DA2C680, 0x6DA20D00, 0x6DA15380, - 0x6DA09A00, 0x6D9FE080, 0x6D9F2700, - 0x6D9E6D80, 0x6D9DB400, 0x6D9CFA80, - 0x6D9C4100, 0x6D9B8780, 0x6D9ACE00, - 0x6D9A1480, 0x6D995B00, 0x6D98A180, - 0x6D97E800, 0x6D972E80, 0x6D967500, - 0x6D95BB80, 0x6D950200, 0x6D944880, - 0x6D938F00, 0x6D92D580, 0x6D921C00, - 0x6D916280, 0x6D90A900, 0x6D8FEF80, - 0x6D8F3600, 0x6D8E7C80, 0x6D8DC300, - 0x6D8D0980, 0x6D8C5000, 0x6D8B9680, - 0x6D8ADD00, 0x6D8A2380, 0x6D896A00, - 0x6D88B080, 0x6D87F700, 0x6D873D80, - 0x6D868400, 0x6D85CA80, 0x6D851100, - 0x6D845780, 0x6D839E00, 0x6D82E480, - 0x6D822B00, 0x6D817180, 0x6D80B800, - 0x6D7FFE80, 0x6D7F4500, 0x6D7E8B80, - 0x6D7DD200, 0x6D7D1880, 0x6D7C5F00, - 0x6D7BA580, 0x6D7AEC00, 0x6D7A3280, - 0x6D797900, 0x6D78BF80, 0x6D780600, - 0x6D774C80, 0x6D769300, 0x6D75D980, - 0x6D752000, 0x6D746680, 0x6D73AD00, - 0x6D72F380, 0x6D723A00, 0x6D718080, - 0x6D70C700, 0x6D700D80, 0x6D6F5400, - 0x6D6E9A80, 0x6D6DE100, 0x6D6D2780, - 0x6D6C6E00, 0x6D6BB480, 0x6D6AFB00, - 0x6D6A4180, 0x6D698800, 0x6D68CE80, - 0x6D681500, 0x6D675B80, 0x6D66A200, - 0x6D65E880, 0x6D652F00, 0x6D647580, - 0x6D63BC00, 0x6D630280, 0x6D624900, - 0x6D618F80, 0x6D60D600, 0x6D601C80, - 0x6D5F6300, 0x6D5EA980, 0x6D5DF000, - 0x6D5D3680, 0x6D5C7D00, 0x6D5BC380, - 0x6D5B0A00, 0x6D5A5080, 0x6D599700, - 0x6D58DD80, 0x6D582400, 0x6D576A80, - 0x6D56B100, 0x6D55F780, 0x6D553E00, - 0x6D548480, 0x6D53CB00, 0x6D531180, - 0x6D525800, 0x6D519E80, 0x6D50E500, - 0x6D502B80, 0x6D4F7200, 0x6D4EB880, - 0x6D4DFF00, 0x6D4D4580, 0x6D4C8C00, - 0x6D4BD280, 0x6D4B1900, 0x6D4A5F80, - 0x6D49A600, 0x6D48EC80, 0x6D483300, - 0x6D477980, 0x6D46C000, 0x6D460680, - 0x6D454D00, 0x6D449380, 0x6D43DA00, - 0x6D432080, 0x6D426700, 0x6D41AD80, - 0x6D40F400, 0x6D403A80, 0x6D3F8100, - 0x6D3EC780, 0x6D3E0E00, 0x6D3D5480, - 0x6D3C9B00, 0x6D3BE180, 0x6D3B2800, - 0x6D3A6E80, 0x6D39B500, 0x6D38FB80, - 0x6D384200, 0x6D378880, 0x6D36CF00, - 0x6D361580, 0x6D355C00, 0x6D34A280, - 0x6D33E900, 0x6D332F80, 0x6D327600, - 0x6D31BC80, 0x6D310300, 0x6D304980, - 0x6D2F9000, 0x6D2ED680, 0x6D2E1D00, - 0x6D2D6380, 0x6D2CAA00, 0x6D2BF080, - 0x6D2B3700, 0x6D2A7D80, 0x6D29C400, - 0x6D290A80, 0x6D285100, 0x6D279780, - 0x6D26DE00, 0x6D262480, 0x6D256B00, - 0x6D24B180, 0x6D23F800, 0x6D233E80, - 0x6D228500, 0x6D21CB80, 0x6D211200, - 0x6D205880, 0x6D1F9F00, 0x6D1EE580, - 0x6D1E2C00, 0x6D1D7280, 0x6D1CB900, - 0x6D1BFF80, 0x6D1B4600, 0x6D1A8C80, - 0x6D19D300, 0x6D191980, 0x6D186000, - 0x6D17A680, 0x6D16ED00, 0x6D163380, - 0x6D157A00, 0x6D14C080, 0x6D140700, - 0x6D134D80, 0x6D129400, 0x6D11DA80, - 0x6D112100, 0x6D106780, 0x6D0FAE00, - 0x6D0EF480, 0x6D0E3B00, 0x6D0D8180, - 0x6D0CC800, 0x6D0C0E80, 0x6D0B5500, - 0x6D0A9B80, 0x6D09E200, 0x6D092880, - 0x6D086F00, 0x6D07B580, 0x6D06FC00, - 0x6D064280, 0x6D058900, 0x6D04CF80, - 0x6D041600, 0x6D035C80, 0x6D02A300, - 0x6D01E980, 0x6D013000, 0x6D007680, - 0x6CFFBD00, 0x6CFF0380, 0x6CFE4A00, - 0x6CFD9080, 0x6CFCD700, 0x6CFC1D80, - 0x6CFB6400, 0x6CFAAA80, 0x6CF9F100, - 0x6CF93780, 0x6CF87E00, 0x6CF7C480, - 0x6CF70B00, 0x6CF65180, 0x6CF59800, - 0x6CF4DE80, 0x6CF42500, 0x6CF36B80, - 0x6CF2B200, 0x6CF1F880, 0x6CF13F00, - 0x6CF08580, 0x6CEFCC00, 0x6CEF1280, - 0x6CEE5900, 0x6CED9F80, 0x6CECE600, - 0x6CEC2C80, 0x6CEB7300, 0x6CEAB980, - 0x6CEA0000, 0x6CE94680, 0x6CE88D00, - 0x6CE7D380, 0x6CE71A00, 0x6CE66080, - 0x6CE5A700, 0x6CE4ED80, 0x6CE43400, - 0x6CE37A80, 0x6CE2C100, 0x6CE20780, - 0x6CE14E00, 0x6CE09480, 0x6CDFDB00, - 0x6CDF2180, 0x6CDE6800, 0x6CDDAE80, - 0x6CDCF500, 0x6CDC3B80, 0x6CDB8200, - 0x6CDAC880, 0x6CDA0F00, 0x6CD95580, - 0x6CD89C00, 0x6CD7E280, 0x6CD72900, - 0x6CD66F80, 0x6CD5B600, 0x6CD4FC80, - 0x6CD44300, 0x6CD38980, 0x6CD2D000, - 0x6CD21680, 0x6CD15D00, 0x6CD0A380, - 0x6CCFEA00, 0x6CCF3080, 0x6CCE7700, - 0x6CCDBD80, 0x6CCD0400, 0x6CCC4A80, - 0x6CCB9100, 0x6CCAD780, 0x6CCA1E00, - 0x6CC96480, 0x6CC8AB00, 0x6CC7F180, - 0x6CC73800, 0x6CC67E80, 0x6CC5C500, - 0x6CC50B80, 0x6CC45200, 0x6CC39880, - 0x6CC2DF00, 0x6CC22580, 0x6CC16C00, - 0x6CC0B280, 0x6CBFF900, 0x6CBF3F80, - 0x6CBE8600, 0x6CBDCC80, 0x6CBD1300, - 0x6CBC5980, 0x6CBBA000, 0x6CBAE680, - 0x6CBA2D00, 0x6CB97380, 0x6CB8BA00, - 0x6CB80080, 0x6CB74700, 0x6CB68D80, - 0x6CB5D400, 0x6CB51A80, 0x6CB46100, - 0x6CB3A780, 0x6CB2EE00, 0x6CB23480, - 0x6CB17B00, 0x6CB0C180, 0x6CB00800, - 0x6CAF4E80, 0x6CAE9500, 0x6CADDB80, - 0x6CAD2200, 0x6CAC6880, 0x6CABAF00, - 0x6CAAF580, 0x6CAA3C00, 0x6CA98280, - 0x6CA8C900, 0x6CA80F80, 0x6CA75600, - 0x6CA69C80, 0x6CA5E300, 0x6CA52980, - 0x6CA47000, 0x6CA3B680, 0x6CA2FD00, - 0x6CA24380, 0x6CA18A00, 0x6CA0D080, - 0x6CA01700, 0x6C9F5D80, 0x6C9EA400, - 0x6C9DEA80, 0x6C9D3100, 0x6C9C7780, - 0x6C9BBE00, 0x6C9B0480, 0x6C9A4B00, - 0x6C999180, 0x6C98D800, 0x6C981E80, - 0x6C976500, 0x6C96AB80, 0x6C95F200, - 0x6C953880, 0x6C947F00, 0x6C93C580, - 0x6C930C00, 0x6C925280, 0x6C919900, - 0x6C90DF80, 0x6C902600, 0x6C8F6C80, - 0x6C8EB300, 0x6C8DF980, 0x6C8D4000, - 0x6C8C8680, 0x6C8BCD00, 0x6C8B1380, - 0x6C8A5A00, 0x6C89A080, 0x6C88E700, - 0x6C882D80, 0x6C877400, 0x6C86BA80, - 0x6C860100, 0x6C854780, 0x6C848E00, - 0x6C83D480, 0x6C831B00, 0x6C826180, - 0x6C81A800, 0x6C80EE80, 0x6C803500, - 0x6C7F7B80, 0x6C7EC200, 0x6C7E0880, - 0x6C7D4F00, 0x6C7C9580, 0x6C7BDC00, - 0x6C7B2280, 0x6C7A6900, 0x6C79AF80, - 0x6C78F600, 0x6C783C80, 0x6C778300, - 0x6C76C980, 0x6C761000, 0x6C755680, - 0x6C749D00, 0x6C73E380, 0x6C732A00, - 0x6C727080, 0x6C71B700, 0x6C70FD80, - 0x6C704400, 0x6C6F8A80, 0x6C6ED100, - 0x6C6E1780, 0x6C6D5E00, 0x6C6CA480, - 0x6C6BEB00, 0x6C6B3180, 0x6C6A7800, - 0x6C69BE80, 0x6C690500, 0x6C684B80, - 0x6C679200, 0x6C66D880, 0x6C661F00, - 0x6C656580, 0x6C64AC00, 0x6C63F280, - 0x6C633900, 0x6C627F80, 0x6C61C600, - 0x6C610C80, 0x6C605300, 0x6C5F9980, - 0x6C5EE000, 0x6C5E2680, 0x6C5D6D00, - 0x6C5CB380, 0x6C5BFA00, 0x6C5B4080, - 0x6C5A8700, 0x6C59CD80, 0x6C591400, - 0x6C585A80, 0x6C57A100, 0x6C56E780, - 0x6C562E00, 0x6C557480, 0x6C54BB00, - 0x6C540180, 0x6C534800, 0x6C528E80, - 0x6C51D500, 0x6C511B80, 0x6C506200, - 0x6C4FA880, 0x6C4EEF00, 0x6C4E3580, - 0x6C4D7C00, 0x6C4CC280, 0x6C4C0900, - 0x6C4B4F80, 0x6C4A9600, 0x6C49DC80, - 0x6C492300, 0x6C486980, 0x6C47B000, - 0x6C46F680, 0x6C463D00, 0x6C458380, - 0x6C44CA00, 0x6C441080, 0x6C435700, - 0x6C429D80, 0x6C41E400, 0x6C412A80, - 0x6C407100, 0x6C3FB780, 0x6C3EFE00, - 0x6C3E4480, 0x6C3D8B00, 0x6C3CD180, - 0x6C3C1800, 0x6C3B5E80, 0x6C3AA500, - 0x6C39EB80, 0x6C393200, 0x6C387880, - 0x6C37BF00, 0x6C370580, 0x6C364C00, - 0x6C359280, 0x6C34D900, 0x6C341F80, - 0x6C336600, 0x6C32AC80, 0x6C31F300, - 0x6C313980, 0x6C308000, 0x6C2FC680, - 0x6C2F0D00, 0x6C2E5380, 0x6C2D9A00, - 0x6C2CE080, 0x6C2C2700, 0x6C2B6D80, - 0x6C2AB400, 0x6C29FA80, 0x6C294100, - 0x6C288780, 0x6C27CE00, 0x6C271480, - 0x6C265B00, 0x6C25A180, 0x6C24E800, - 0x6C242E80, 0x6C237500, 0x6C22BB80, - 0x6C220200, 0x6C214880, 0x6C208F00, - 0x6C1FD580, 0x6C1F1C00, 0x6C1E6280, - 0x6C1DA900, 0x6C1CEF80, 0x6C1C3600, - 0x6C1B7C80, 0x6C1AC300, 0x6C1A0980, - 0x6C195000, 0x6C189680, 0x6C17DD00, - 0x6C172380, 0x6C166A00, 0x6C15B080, - 0x6C14F700, 0x6C143D80, 0x6C138400, - 0x6C12CA80, 0x6C121100, 0x6C115780, - 0x6C109E00, 0x6C0FE480, 0x6C0F2B00, - 0x6C0E7180, 0x6C0DB800, 0x6C0CFE80, - 0x6C0C4500, 0x6C0B8B80, 0x6C0AD200, - 0x6C0A1880, 0x6C095F00, 0x6C08A580, - 0x6C07EC00, 0x6C073280, 0x6C067900, - 0x6C05BF80, 0x6C050600, 0x6C044C80, - 0x6C039300, 0x6C02D980, 0x6C022000, - 0x6C016680, 0x6C00AD00, 0x6BFFF380, - 0x6BFF3A00, 0x6BFE8080, 0x6BFDC700, - 0x6BFD0D80, 0x6BFC5400, 0x6BFB9A80, - 0x6BFAE100, 0x6BFA2780, 0x6BF96E00, - 0x6BF8B480, 0x6BF7FB00, 0x6BF74180, - 0x6BF68800, 0x6BF5CE80, 0x6BF51500, - 0x6BF45B80, 0x6BF3A200, 0x6BF2E880, - 0x6BF22F00, 0x6BF17580, 0x6BF0BC00, - 0x6BF00280, 0x6BEF4900, 0x6BEE8F80, - 0x6BEDD600, 0x6BED1C80, 0x6BEC6300, - 0x6BEBA980, 0x6BEAF000, 0x6BEA3680, - 0x6BE97D00, 0x6BE8C380, 0x6BE80A00, - 0x6BE75080, 0x6BE69700, 0x6BE5DD80, - 0x6BE52400, 0x6BE46A80, 0x6BE3B100, - 0x6BE2F780, 0x6BE23E00, 0x6BE18480, - 0x6BE0CB00, 0x6BE01180, 0x6BDF5800, - 0x6BDE9E80, 0x6BDDE500, 0x6BDD2B80, - 0x6BDC7200, 0x6BDBB880, 0x6BDAFF00, - 0x6BDA4580, 0x6BD98C00, 0x6BD8D280, - 0x6BD81900, 0x6BD75F80, 0x6BD6A600, - 0x6BD5EC80, 0x6BD53300, 0x6BD47980, - 0x6BD3C000, 0x6BD30680, 0x6BD24D00, - 0x6BD19380, 0x6BD0DA00, 0x6BD02080, - 0x6BCF6700, 0x6BCEAD80, 0x6BCDF400, - 0x6BCD3A80, 0x6BCC8100, 0x6BCBC780, - 0x6BCB0E00, 0x6BCA5480, 0x6BC99B00, - 0x6BC8E180, 0x6BC82800, 0x6BC76E80, - 0x6BC6B500, 0x6BC5FB80, 0x6BC54200, - 0x6BC48880, 0x6BC3CF00, 0x6BC31580, - 0x6BC25C00, 0x6BC1A280, 0x6BC0E900, - 0x6BC02F80, 0x6BBF7600, 0x6BBEBC80, - 0x6BBE0300, 0x6BBD4980, 0x6BBC9000, - 0x6BBBD680, 0x6BBB1D00, 0x6BBA6380, - 0x6BB9AA00, 0x6BB8F080, 0x6BB83700, - 0x6BB77D80, 0x6BB6C400, 0x6BB60A80, - 0x6BB55100, 0x6BB49780, 0x6BB3DE00, - 0x6BB32480, 0x6BB26B00, 0x6BB1B180, - 0x6BB0F800, 0x6BB03E80, 0x6BAF8500, - 0x6BAECB80, 0x6BAE1200, 0x6BAD5880, - 0x6BAC9F00, 0x6BABE580, 0x6BAB2C00, - 0x6BAA7280, 0x6BA9B900, 0x6BA8FF80, - 0x6BA84600, 0x6BA78C80, 0x6BA6D300, - 0x6BA61980, 0x6BA56000, 0x6BA4A680, - 0x6BA3ED00, 0x6BA33380, 0x6BA27A00, - 0x6BA1C080, 0x6BA10700, 0x6BA04D80, - 0x6B9F9400, 0x6B9EDA80, 0x6B9E2100, - 0x6B9D6780, 0x6B9CAE00, 0x6B9BF480, - 0x6B9B3B00, 0x6B9A8180, 0x6B99C800, - 0x6B990E80, 0x6B985500, 0x6B979B80, - 0x6B96E200, 0x6B962880, 0x6B956F00, - 0x6B94B580, 0x6B93FC00, 0x6B934280, - 0x6B928900, 0x6B91CF80, 0x6B911600, - 0x6B905C80, 0x6B8FA300, 0x6B8EE980, - 0x6B8E3000, 0x6B8D7680, 0x6B8CBD00, - 0x6B8C0380, 0x6B8B4A00, 0x6B8A9080, - 0x6B89D700, 0x6B891D80, 0x6B886400, - 0x6B87AA80, 0x6B86F100, 0x6B863780, - 0x6B857E00, 0x6B84C480, 0x6B840B00, - 0x6B835180, 0x6B829800, 0x6B81DE80, - 0x6B812500, 0x6B806B80, 0x6B7FB200, - 0x6B7EF880, 0x6B7E3F00, 0x6B7D8580, - 0x6B7CCC00, 0x6B7C1280, 0x6B7B5900, - 0x6B7A9F80, 0x6B79E600, 0x6B792C80, - 0x6B787300, 0x6B77B980, 0x6B770000, - 0x6B764680, 0x6B758D00, 0x6B74D380, - 0x6B741A00, 0x6B736080, 0x6B72A700, - 0x6B71ED80, 0x6B713400, 0x6B707A80, - 0x6B6FC100, 0x6B6F0780, 0x6B6E4E00, - 0x6B6D9480, 0x6B6CDB00, 0x6B6C2180, - 0x6B6B6800, 0x6B6AAE80, 0x6B69F500, - 0x6B693B80, 0x6B688200, 0x6B67C880, - 0x6B670F00, 0x6B665580, 0x6B659C00, - 0x6B64E280, 0x6B642900, 0x6B636F80, - 0x6B62B600, 0x6B61FC80, 0x6B614300, - 0x6B608980, 0x6B5FD000, 0x6B5F1680, - 0x6B5E5D00, 0x6B5DA380, 0x6B5CEA00, - 0x6B5C3080, 0x6B5B7700, 0x6B5ABD80, - 0x6B5A0400, 0x6B594A80, 0x6B589100, - 0x6B57D780, 0x6B571E00, 0x6B566480, - 0x6B55AB00, 0x6B54F180, 0x6B543800, - 0x6B537E80, 0x6B52C500, 0x6B520B80, - 0x6B515200, 0x6B509880, 0x6B4FDF00, - 0x6B4F2580, 0x6B4E6C00, 0x6B4DB280, - 0x6B4CF900, 0x6B4C3F80, 0x6B4B8600, - 0x6B4ACC80, 0x6B4A1300, 0x6B495980, - 0x6B48A000, 0x6B47E680, 0x6B472D00, - 0x6B467380, 0x6B45BA00, 0x6B450080, - 0x6B444700, 0x6B438D80, 0x6B42D400, - 0x6B421A80, 0x6B416100, 0x6B40A780, - 0x6B3FEE00, 0x6B3F3480, 0x6B3E7B00, - 0x6B3DC180, 0x6B3D0800, 0x6B3C4E80, - 0x6B3B9500, 0x6B3ADB80, 0x6B3A2200, - 0x6B396880, 0x6B38AF00, 0x6B37F580, - 0x6B373C00, 0x6B368280, 0x6B35C900, - 0x6B350F80, 0x6B345600, 0x6B339C80, - 0x6B32E300, 0x6B322980, 0x6B317000, - 0x6B30B680, 0x6B2FFD00, 0x6B2F4380, - 0x6B2E8A00, 0x6B2DD080, 0x6B2D1700, - 0x6B2C5D80, 0x6B2BA400, 0x6B2AEA80, - 0x6B2A3100, 0x6B297780, 0x6B28BE00, - 0x6B280480, 0x6B274B00, 0x6B269180, - 0x6B25D800, 0x6B251E80, 0x6B246500, - 0x6B23AB80, 0x6B22F200, 0x6B223880, - 0x6B217F00, 0x6B20C580, 0x6B200C00, - 0x6B1F5280, 0x6B1E9900, 0x6B1DDF80, - 0x6B1D2600, 0x6B1C6C80, 0x6B1BB300, - 0x6B1AF980, 0x6B1A4000, 0x6B198680, - 0x6B18CD00, 0x6B181380, 0x6B175A00, - 0x6B16A080, 0x6B15E700, 0x6B152D80, - 0x6B147400, 0x6B13BA80, 0x6B130100, - 0x6B124780, 0x6B118E00, 0x6B10D480, - 0x6B101B00, 0x6B0F6180, 0x6B0EA800, - 0x6B0DEE80, 0x6B0D3500, 0x6B0C7B80, - 0x6B0BC200, 0x6B0B0880, 0x6B0A4F00, - 0x6B099580, 0x6B08DC00, 0x6B082280, - 0x6B076900, 0x6B06AF80, 0x6B05F600, - 0x6B053C80, 0x6B048300, 0x6B03C980, - 0x6B031000, 0x6B025680, 0x6B019D00, - 0x6B00E380, 0x6B002A00, 0x6AFF7080, - 0x6AFEB700, 0x6AFDFD80, 0x6AFD4400, - 0x6AFC8A80, 0x6AFBD100, 0x6AFB1780, - 0x6AFA5E00, 0x6AF9A480, 0x6AF8EB00, - 0x6AF83180, 0x6AF77800, 0x6AF6BE80, - 0x6AF60500, 0x6AF54B80, 0x6AF49200, - 0x6AF3D880, 0x6AF31F00, 0x6AF26580, - 0x6AF1AC00, 0x6AF0F280, 0x6AF03900, - 0x6AEF7F80, 0x6AEEC600, 0x6AEE0C80, - 0x6AED5300, 0x6AEC9980, 0x6AEBE000, - 0x6AEB2680, 0x6AEA6D00, 0x6AE9B380, - 0x6AE8FA00, 0x6AE84080, 0x6AE78700, - 0x6AE6CD80, 0x6AE61400, 0x6AE55A80, - 0x6AE4A100, 0x6AE3E780, 0x6AE32E00, - 0x6AE27480, 0x6AE1BB00, 0x6AE10180, - 0x6AE04800, 0x6ADF8E80, 0x6ADED500, - 0x6ADE1B80, 0x6ADD6200, 0x6ADCA880, - 0x6ADBEF00, 0x6ADB3580, 0x6ADA7C00, - 0x6AD9C280, 0x6AD90900, 0x6AD84F80, - 0x6AD79600, 0x6AD6DC80, 0x6AD62300, - 0x6AD56980, 0x6AD4B000, 0x6AD3F680, - 0x6AD33D00, 0x6AD28380, 0x6AD1CA00, - 0x6AD11080, 0x6AD05700, 0x6ACF9D80, - 0x6ACEE400, 0x6ACE2A80, 0x6ACD7100, - 0x6ACCB780, 0x6ACBFE00, 0x6ACB4480, - 0x6ACA8B00, 0x6AC9D180, 0x6AC91800, - 0x6AC85E80, 0x6AC7A500, 0x6AC6EB80, - 0x6AC63200, 0x6AC57880, 0x6AC4BF00, - 0x6AC40580, 0x6AC34C00, 0x6AC29280, - 0x6AC1D900, 0x6AC11F80, 0x6AC06600, - 0x6ABFAC80, 0x6ABEF300, 0x6ABE3980, - 0x6ABD8000, 0x6ABCC680, 0x6ABC0D00, - 0x6ABB5380, 0x6ABA9A00, 0x6AB9E080, - 0x6AB92700, 0x6AB86D80, 0x6AB7B400, - 0x6AB6FA80, 0x6AB64100, 0x6AB58780, - 0x6AB4CE00, 0x6AB41480, 0x6AB35B00, - 0x6AB2A180, 0x6AB1E800, 0x6AB12E80, - 0x6AB07500, 0x6AAFBB80, 0x6AAF0200, - 0x6AAE4880, 0x6AAD8F00, 0x6AACD580, - 0x6AAC1C00, 0x6AAB6280, 0x6AAAA900, - 0x6AA9EF80, 0x6AA93600, 0x6AA87C80, - 0x6AA7C300, 0x6AA70980, 0x6AA65000, - 0x6AA59680, 0x6AA4DD00, 0x6AA42380, - 0x6AA36A00, 0x6AA2B080, 0x6AA1F700, - 0x6AA13D80, 0x6AA08400, 0x6A9FCA80, - 0x6A9F1100, 0x6A9E5780, 0x6A9D9E00, - 0x6A9CE480, 0x6A9C2B00, 0x6A9B7180, - 0x6A9AB800, 0x6A99FE80, 0x6A994500, - 0x6A988B80, 0x6A97D200, 0x6A971880, - 0x6A965F00, 0x6A95A580, 0x6A94EC00, - 0x6A943280, 0x6A937900, 0x6A92BF80, - 0x6A920600, 0x6A914C80, 0x6A909300, - 0x6A8FD980, 0x6A8F2000, 0x6A8E6680, - 0x6A8DAD00, 0x6A8CF380, 0x6A8C3A00, - 0x6A8B8080, 0x6A8AC700, 0x6A8A0D80, - 0x6A895400, 0x6A889A80, 0x6A87E100, - 0x6A872780, 0x6A866E00, 0x6A85B480, - 0x6A84FB00, 0x6A844180, 0x6A838800, - 0x6A82CE80, 0x6A821500, 0x6A815B80, - 0x6A80A200, 0x6A7FE880, 0x6A7F2F00, - 0x6A7E7580, 0x6A7DBC00, 0x6A7D0280, - 0x6A7C4900, 0x6A7B8F80, 0x6A7AD600, - 0x6A7A1C80, 0x6A796300, 0x6A78A980, - 0x6A77F000, 0x6A773680, 0x6A767D00, - 0x6A75C380, 0x6A750A00, 0x6A745080, - 0x6A739700, 0x6A72DD80, 0x6A722400, - 0x6A716A80, 0x6A70B100, 0x6A6FF780, - 0x6A6F3E00, 0x6A6E8480, 0x6A6DCB00, - 0x6A6D1180, 0x6A6C5800, 0x6A6B9E80, - 0x6A6AE500, 0x6A6A2B80, 0x6A697200, - 0x6A68B880, 0x6A67FF00, 0x6A674580, - 0x6A668C00, 0x6A65D280, 0x6A651900, - 0x6A645F80, 0x6A63A600, 0x6A62EC80, - 0x6A623300, 0x6A617980, 0x6A60C000, - 0x6A600680, 0x6A5F4D00, 0x6A5E9380, - 0x6A5DDA00, 0x6A5D2080, 0x6A5C6700, - 0x6A5BAD80, 0x6A5AF400, 0x6A5A3A80, - 0x6A598100, 0x6A58C780, 0x6A580E00, - 0x6A575480, 0x6A569B00, 0x6A55E180, - 0x6A552800, 0x6A546E80, 0x6A53B500, - 0x6A52FB80, 0x6A524200, 0x6A518880, - 0x6A50CF00, 0x6A501580, 0x6A4F5C00, - 0x6A4EA280, 0x6A4DE900, 0x6A4D2F80, - 0x6A4C7600, 0x6A4BBC80, 0x6A4B0300, - 0x6A4A4980, 0x6A499000, 0x6A48D680, - 0x6A481D00, 0x6A476380, 0x6A46AA00, - 0x6A45F080, 0x6A453700, 0x6A447D80, - 0x6A43C400, 0x6A430A80, 0x6A425100, - 0x6A419780, 0x6A40DE00, 0x6A402480, - 0x6A3F6B00, 0x6A3EB180, 0x6A3DF800, - 0x6A3D3E80, 0x6A3C8500, 0x6A3BCB80, - 0x6A3B1200, 0x6A3A5880, 0x6A399F00, - 0x6A38E580, 0x6A382C00, 0x6A377280, - 0x6A36B900, 0x6A35FF80, 0x6A354600, - 0x6A348C80, 0x6A33D300, 0x6A331980, - 0x6A326000, 0x6A31A680, 0x6A30ED00, - 0x6A303380, 0x6A2F7A00, 0x6A2EC080, - 0x6A2E0700, 0x6A2D4D80, 0x6A2C9400, - 0x6A2BDA80, 0x6A2B2100, 0x6A2A6780, - 0x6A29AE00, 0x6A28F480, 0x6A283B00, - 0x6A278180, 0x6A26C800, 0x6A260E80, - 0x6A255500, 0x6A249B80, 0x6A23E200, - 0x6A232880, 0x6A226F00, 0x6A21B580, - 0x6A20FC00, 0x6A204280, 0x6A1F8900, - 0x6A1ECF80, 0x6A1E1600, 0x6A1D5C80, - 0x6A1CA300, 0x6A1BE980, 0x6A1B3000, - 0x6A1A7680, 0x6A19BD00, 0x6A190380, - 0x6A184A00, 0x6A179080, 0x6A16D700, - 0x6A161D80, 0x6A156400, 0x6A14AA80, - 0x6A13F100, 0x6A133780, 0x6A127E00, - 0x6A11C480, 0x6A110B00, 0x6A105180, - 0x6A0F9800, 0x6A0EDE80, 0x6A0E2500, - 0x6A0D6B80, 0x6A0CB200, 0x6A0BF880, - 0x6A0B3F00, 0x6A0A8580, 0x6A09CC00, - 0x6A091280, 0x6A085900, 0x6A079F80, - 0x6A06E600, 0x6A062C80, 0x6A057300, - 0x6A04B980 -}; +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// Gekko related unions, structs, ... +// + +#include "LUT_frsqrtex.h" + +const unsigned int frsqrtex_lut[65536] = { + 0x69FA0000, 0x69F8A600, 0x69F74C00, + 0x69F5F200, 0x69F49800, 0x69F33E00, + 0x69F1E400, 0x69F08A00, 0x69EF3000, + 0x69EDD600, 0x69EC7C00, 0x69EB2200, + 0x69E9C800, 0x69E86E00, 0x69E71400, + 0x69E5BA00, 0x69E46000, 0x69E30600, + 0x69E1AC00, 0x69E05200, 0x69DEF800, + 0x69DD9E00, 0x69DC4400, 0x69DAEA00, + 0x69D99000, 0x69D83600, 0x69D6DC00, + 0x69D58200, 0x69D42800, 0x69D2CE00, + 0x69D17400, 0x69D01A00, 0x69CEC000, + 0x69CD6600, 0x69CC0C00, 0x69CAB200, + 0x69C95800, 0x69C7FE00, 0x69C6A400, + 0x69C54A00, 0x69C3F000, 0x69C29600, + 0x69C13C00, 0x69BFE200, 0x69BE8800, + 0x69BD2E00, 0x69BBD400, 0x69BA7A00, + 0x69B92000, 0x69B7C600, 0x69B66C00, + 0x69B51200, 0x69B3B800, 0x69B25E00, + 0x69B10400, 0x69AFAA00, 0x69AE5000, + 0x69ACF600, 0x69AB9C00, 0x69AA4200, + 0x69A8E800, 0x69A78E00, 0x69A63400, + 0x69A4DA00, 0x69A38000, 0x69A22600, + 0x69A0CC00, 0x699F7200, 0x699E1800, + 0x699CBE00, 0x699B6400, 0x699A0A00, + 0x6998B000, 0x69975600, 0x6995FC00, + 0x6994A200, 0x69934800, 0x6991EE00, + 0x69909400, 0x698F3A00, 0x698DE000, + 0x698C8600, 0x698B2C00, 0x6989D200, + 0x69887800, 0x69871E00, 0x6985C400, + 0x69846A00, 0x69831000, 0x6981B600, + 0x69805C00, 0x697F0200, 0x697DA800, + 0x697C4E00, 0x697AF400, 0x69799A00, + 0x69784000, 0x6976E600, 0x69758C00, + 0x69743200, 0x6972D800, 0x69717E00, + 0x69702400, 0x696ECA00, 0x696D7000, + 0x696C1600, 0x696ABC00, 0x69696200, + 0x69680800, 0x6966AE00, 0x69655400, + 0x6963FA00, 0x6962A000, 0x69614600, + 0x695FEC00, 0x695E9200, 0x695D3800, + 0x695BDE00, 0x695A8400, 0x69592A00, + 0x6957D000, 0x69567600, 0x69551C00, + 0x6953C200, 0x69526800, 0x69510E00, + 0x694FB400, 0x694E5A00, 0x694D0000, + 0x694BA600, 0x694A4C00, 0x6948F200, + 0x69479800, 0x69463E00, 0x6944E400, + 0x69438A00, 0x69423000, 0x6940D600, + 0x693F7C00, 0x693E2200, 0x693CC800, + 0x693B6E00, 0x693A1400, 0x6938BA00, + 0x69376000, 0x69360600, 0x6934AC00, + 0x69335200, 0x6931F800, 0x69309E00, + 0x692F4400, 0x692DEA00, 0x692C9000, + 0x692B3600, 0x6929DC00, 0x69288200, + 0x69272800, 0x6925CE00, 0x69247400, + 0x69231A00, 0x6921C000, 0x69206600, + 0x691F0C00, 0x691DB200, 0x691C5800, + 0x691AFE00, 0x6919A400, 0x69184A00, + 0x6916F000, 0x69159600, 0x69143C00, + 0x6912E200, 0x69118800, 0x69102E00, + 0x690ED400, 0x690D7A00, 0x690C2000, + 0x690AC600, 0x69096C00, 0x69081200, + 0x6906B800, 0x69055E00, 0x69040400, + 0x6902AA00, 0x69015000, 0x68FFF600, + 0x68FE9C00, 0x68FD4200, 0x68FBE800, + 0x68FA8E00, 0x68F93400, 0x68F7DA00, + 0x68F68000, 0x68F52600, 0x68F3CC00, + 0x68F27200, 0x68F11800, 0x68EFBE00, + 0x68EE6400, 0x68ED0A00, 0x68EBB000, + 0x68EA5600, 0x68E8FC00, 0x68E7A200, + 0x68E64800, 0x68E4EE00, 0x68E39400, + 0x68E23A00, 0x68E0E000, 0x68DF8600, + 0x68DE2C00, 0x68DCD200, 0x68DB7800, + 0x68DA1E00, 0x68D8C400, 0x68D76A00, + 0x68D61000, 0x68D4B600, 0x68D35C00, + 0x68D20200, 0x68D0A800, 0x68CF4E00, + 0x68CDF400, 0x68CC9A00, 0x68CB4000, + 0x68C9E600, 0x68C88C00, 0x68C73200, + 0x68C5D800, 0x68C47E00, 0x68C32400, + 0x68C1CA00, 0x68C07000, 0x68BF1600, + 0x68BDBC00, 0x68BC6200, 0x68BB0800, + 0x68B9AE00, 0x68B85400, 0x68B6FA00, + 0x68B5A000, 0x68B44600, 0x68B2EC00, + 0x68B19200, 0x68B03800, 0x68AEDE00, + 0x68AD8400, 0x68AC2A00, 0x68AAD000, + 0x68A97600, 0x68A81C00, 0x68A6C200, + 0x68A56800, 0x68A40E00, 0x68A2B400, + 0x68A15A00, 0x68A00000, 0x689EA600, + 0x689D4C00, 0x689BF200, 0x689A9800, + 0x68993E00, 0x6897E400, 0x68968A00, + 0x68953000, 0x6893D600, 0x68927C00, + 0x68912200, 0x688FC800, 0x688E6E00, + 0x688D1400, 0x688BBA00, 0x688A6000, + 0x68890600, 0x6887AC00, 0x68865200, + 0x6884F800, 0x68839E00, 0x68824400, + 0x6880EA00, 0x687F9000, 0x687E3600, + 0x687CDC00, 0x687B8200, 0x687A2800, + 0x6878CE00, 0x68777400, 0x68761A00, + 0x6874C000, 0x68736600, 0x68720C00, + 0x6870B200, 0x686F5800, 0x686DFE00, + 0x686CA400, 0x686B4A00, 0x6869F000, + 0x68689600, 0x68673C00, 0x6865E200, + 0x68648800, 0x68632E00, 0x6861D400, + 0x68607A00, 0x685F2000, 0x685DC600, + 0x685C6C00, 0x685B1200, 0x6859B800, + 0x68585E00, 0x68570400, 0x6855AA00, + 0x68545000, 0x6852F600, 0x68519C00, + 0x68504200, 0x684EE800, 0x684D8E00, + 0x684C3400, 0x684ADA00, 0x68498000, + 0x68482600, 0x6846CC00, 0x68457200, + 0x68441800, 0x6842BE00, 0x68416400, + 0x68400A00, 0x683EB000, 0x683D5600, + 0x683BFC00, 0x683AA200, 0x68394800, + 0x6837EE00, 0x68369400, 0x68353A00, + 0x6833E000, 0x68328600, 0x68312C00, + 0x682FD200, 0x682E7800, 0x682D1E00, + 0x682BC400, 0x682A6A00, 0x68291000, + 0x6827B600, 0x68265C00, 0x68250200, + 0x6823A800, 0x68224E00, 0x6820F400, + 0x681F9A00, 0x681E4000, 0x681CE600, + 0x681B8C00, 0x681A3200, 0x6818D800, + 0x68177E00, 0x68162400, 0x6814CA00, + 0x68137000, 0x68121600, 0x6810BC00, + 0x680F6200, 0x680E0800, 0x680CAE00, + 0x680B5400, 0x6809FA00, 0x6808A000, + 0x68074600, 0x6805EC00, 0x68049200, + 0x68033800, 0x6801DE00, 0x68008400, + 0x67FF2A00, 0x67FDD000, 0x67FC7600, + 0x67FB1C00, 0x67F9C200, 0x67F86800, + 0x67F70E00, 0x67F5B400, 0x67F45A00, + 0x67F30000, 0x67F1A600, 0x67F04C00, + 0x67EEF200, 0x67ED9800, 0x67EC3E00, + 0x67EAE400, 0x67E98A00, 0x67E83000, + 0x67E6D600, 0x67E57C00, 0x67E42200, + 0x67E2C800, 0x67E16E00, 0x67E01400, + 0x67DEBA00, 0x67DD6000, 0x67DC0600, + 0x67DAAC00, 0x67D95200, 0x67D7F800, + 0x67D69E00, 0x67D54400, 0x67D3EA00, + 0x67D29000, 0x67D13600, 0x67CFDC00, + 0x67CE8200, 0x67CD2800, 0x67CBCE00, + 0x67CA7400, 0x67C91A00, 0x67C7C000, + 0x67C66600, 0x67C50C00, 0x67C3B200, + 0x67C25800, 0x67C0FE00, 0x67BFA400, + 0x67BE4A00, 0x67BCF000, 0x67BB9600, + 0x67BA3C00, 0x67B8E200, 0x67B78800, + 0x67B62E00, 0x67B4D400, 0x67B37A00, + 0x67B22000, 0x67B0C600, 0x67AF6C00, + 0x67AE1200, 0x67ACB800, 0x67AB5E00, + 0x67AA0400, 0x67A8AA00, 0x67A75000, + 0x67A5F600, 0x67A49C00, 0x67A34200, + 0x67A1E800, 0x67A08E00, 0x679F3400, + 0x679DDA00, 0x679C8000, 0x679B2600, + 0x6799CC00, 0x67987200, 0x67971800, + 0x6795BE00, 0x67946400, 0x67930A00, + 0x6791B000, 0x67905600, 0x678EFC00, + 0x678DA200, 0x678C4800, 0x678AEE00, + 0x67899400, 0x67883A00, 0x6786E000, + 0x67858600, 0x67842C00, 0x6782D200, + 0x67817800, 0x67801E00, 0x677EC400, + 0x677D6A00, 0x677C1000, 0x677AB600, + 0x67795C00, 0x67780200, 0x6776A800, + 0x67754E00, 0x6773F400, 0x67729A00, + 0x67714000, 0x676FE600, 0x676E8C00, + 0x676D3200, 0x676BD800, 0x676A7E00, + 0x67692400, 0x6767CA00, 0x67667000, + 0x67651600, 0x6763BC00, 0x67626200, + 0x67610800, 0x675FAE00, 0x675E5400, + 0x675CFA00, 0x675BA000, 0x675A4600, + 0x6758EC00, 0x67579200, 0x67563800, + 0x6754DE00, 0x67538400, 0x67522A00, + 0x6750D000, 0x674F7600, 0x674E1C00, + 0x674CC200, 0x674B6800, 0x674A0E00, + 0x6748B400, 0x67475A00, 0x67460000, + 0x6744A600, 0x67434C00, 0x6741F200, + 0x67409800, 0x673F3E00, 0x673DE400, + 0x673C8A00, 0x673B3000, 0x6739D600, + 0x67387C00, 0x67372200, 0x6735C800, + 0x67346E00, 0x67331400, 0x6731BA00, + 0x67306000, 0x672F0600, 0x672DAC00, + 0x672C5200, 0x672AF800, 0x67299E00, + 0x67284400, 0x6726EA00, 0x67259000, + 0x67243600, 0x6722DC00, 0x67218200, + 0x67202800, 0x671ECE00, 0x671D7400, + 0x671C1A00, 0x671AC000, 0x67196600, + 0x67180C00, 0x6716B200, 0x67155800, + 0x6713FE00, 0x6712A400, 0x67114A00, + 0x670FF000, 0x670E9600, 0x670D3C00, + 0x670BE200, 0x670A8800, 0x67092E00, + 0x6707D400, 0x67067A00, 0x67052000, + 0x6703C600, 0x67026C00, 0x67011200, + 0x66FFB800, 0x66FE5E00, 0x66FD0400, + 0x66FBAA00, 0x66FA5000, 0x66F8F600, + 0x66F79C00, 0x66F64200, 0x66F4E800, + 0x66F38E00, 0x66F23400, 0x66F0DA00, + 0x66EF8000, 0x66EE2600, 0x66ECCC00, + 0x66EB7200, 0x66EA1800, 0x66E8BE00, + 0x66E76400, 0x66E60A00, 0x66E4B000, + 0x66E35600, 0x66E1FC00, 0x66E0A200, + 0x66DF4800, 0x66DDEE00, 0x66DC9400, + 0x66DB3A00, 0x66D9E000, 0x66D88600, + 0x66D72C00, 0x66D5D200, 0x66D47800, + 0x66D31E00, 0x66D1C400, 0x66D06A00, + 0x66CF1000, 0x66CDB600, 0x66CC5C00, + 0x66CB0200, 0x66C9A800, 0x66C84E00, + 0x66C6F400, 0x66C59A00, 0x66C44000, + 0x66C2E600, 0x66C18C00, 0x66C03200, + 0x66BED800, 0x66BD7E00, 0x66BC2400, + 0x66BACA00, 0x66B97000, 0x66B81600, + 0x66B6BC00, 0x66B56200, 0x66B40800, + 0x66B2AE00, 0x66B15400, 0x66AFFA00, + 0x66AEA000, 0x66AD4600, 0x66ABEC00, + 0x66AA9200, 0x66A93800, 0x66A7DE00, + 0x66A68400, 0x66A52A00, 0x66A3D000, + 0x66A27600, 0x66A11C00, 0x669FC200, + 0x669E6800, 0x669D0E00, 0x669BB400, + 0x669A5A00, 0x66990000, 0x6697A600, + 0x66964C00, 0x6694F200, 0x66939800, + 0x66923E00, 0x6690E400, 0x668F8A00, + 0x668E3000, 0x668CD600, 0x668B7C00, + 0x668A2200, 0x6688C800, 0x66876E00, + 0x66861400, 0x6684BA00, 0x66836000, + 0x66820600, 0x6680AC00, 0x667F5200, + 0x667DF800, 0x667C9E00, 0x667B4400, + 0x6679EA00, 0x66789000, 0x66773600, + 0x6675DC00, 0x66748200, 0x66732800, + 0x6671CE00, 0x66707400, 0x666F1A00, + 0x666DC000, 0x666C6600, 0x666B0C00, + 0x6669B200, 0x66685800, 0x6666FE00, + 0x6665A400, 0x66644A00, 0x6662F000, + 0x66619600, 0x66603C00, 0x665EE200, + 0x665D8800, 0x665C2E00, 0x665AD400, + 0x66597A00, 0x66582000, 0x6656C600, + 0x66556C00, 0x66541200, 0x6652B800, + 0x66515E00, 0x66500400, 0x664EAA00, + 0x664D5000, 0x664BF600, 0x664A9C00, + 0x66494200, 0x6647E800, 0x66468E00, + 0x66453400, 0x6643DA00, 0x66428000, + 0x66412600, 0x663FCC00, 0x663E7200, + 0x663D1800, 0x663BBE00, 0x663A6400, + 0x66390A00, 0x6637B000, 0x66365600, + 0x6634FC00, 0x6633A200, 0x66324800, + 0x6630EE00, 0x662F9400, 0x662E3A00, + 0x662CE000, 0x662B8600, 0x662A2C00, + 0x6628D200, 0x66277800, 0x66261E00, + 0x6624C400, 0x66236A00, 0x66221000, + 0x6620B600, 0x661F5C00, 0x661E0200, + 0x661CA800, 0x661B4E00, 0x6619F400, + 0x66189A00, 0x66174000, 0x6615E600, + 0x66148C00, 0x66133200, 0x6611D800, + 0x66107E00, 0x660F2400, 0x660DCA00, + 0x660C7000, 0x660B1600, 0x6609BC00, + 0x66086200, 0x66070800, 0x6605AE00, + 0x66045400, 0x6602FA00, 0x6601A000, + 0x66004600, 0x65FEEC00, 0x65FD9200, + 0x65FC3800, 0x65FADE00, 0x65F98400, + 0x65F82A00, 0x65F6D000, 0x65F57600, + 0x65F41C00, 0x65F2C200, 0x65F16800, + 0x65F00E00, 0x65EEB400, 0x65ED5A00, + 0x65EC0000, 0x65EAA600, 0x65E94C00, + 0x65E7F200, 0x65E69800, 0x65E53E00, + 0x65E3E400, 0x65E28A00, 0x65E13000, + 0x65DFD600, 0x65DE7C00, 0x65DD2200, + 0x65DBC800, 0x65DA6E00, 0x65D91400, + 0x65D7BA00, 0x65D66000, 0x65D50600, + 0x65D3AC00, 0x65D25200, 0x65D0F800, + 0x65CF9E00, 0x65CE4400, 0x65CCEA00, + 0x65CB9000, 0x65CA3600, 0x65C8DC00, + 0x65C78200, 0x65C62800, 0x65C4CE00, + 0x65C37400, 0x65C21A00, 0x65C0C000, + 0x65BF6600, 0x65BE0C00, 0x65BCB200, + 0x65BB5800, 0x65B9FE00, 0x65B8A400, + 0x65B74A00, 0x65B5F000, 0x65B49600, + 0x65B33C00, 0x65B1E200, 0x65B08800, + 0x65AF2E00, 0x65ADD400, 0x65AC7A00, + 0x65AB2000, 0x65A9C600, 0x65A86C00, + 0x65A71200, 0x65A5B800, 0x65A45E00, + 0x65A30400, 0x65A1AA00, 0x65A05000, + 0x659EF600, 0x659D9C00, 0x659C4200, + 0x659AE800, 0x65998E00, 0x65983400, + 0x6596DA00, 0x65958000, 0x65942600, + 0x6592CC00, 0x65917200, 0x65901800, + 0x658EBE00, 0x658D6400, 0x658C0A00, + 0x658AB000, 0x65895600, 0x6587FC00, + 0x6586A200, 0x65854800, 0x6583EE00, + 0x65829400, 0x65813A00, 0x657FE000, + 0x657E8600, 0x657D2C00, 0x657BD200, + 0x657A7800, 0x65791E00, 0x6577C400, + 0x65766A00, 0x65751000, 0x6573B600, + 0x65725C00, 0x65710200, 0x656FA800, + 0x656E4E00, 0x656CF400, 0x656B9A00, + 0x656A4000, 0x6568E600, 0x65678C00, + 0x65663200, 0x6564D800, 0x65637E00, + 0x65622400, 0x6560CA00, 0x655F7000, + 0x655E1600, 0x655CBC00, 0x655B6200, + 0x655A0800, 0x6558AE00, 0x65575400, + 0x6555FA00, 0x6554A000, 0x65534600, + 0x6551EC00, 0x65509200, 0x654F3800, + 0x654DDE00, 0x654C8400, 0x654B2A00, + 0x6549D000, 0x65487600, 0x65471C00, + 0x6545C200, 0x65446800, 0x65430E00, + 0x6541B400, 0x65405A00, 0x653F0000, + 0x653DA600, 0x653C4C00, 0x653AF200, + 0x65399800, 0x65383E00, 0x6536E400, + 0x65358A00, 0x65343000, 0x6532D600, + 0x65317C00, 0x65302200, 0x652EC800, + 0x652D6E00, 0x652C1400, 0x652ABA00, + 0x65296000, 0x65280600, 0x6526AC00, + 0x65255200, 0x6523F800, 0x65229E00, + 0x65214400, 0x651FEA00, 0x651E9000, + 0x651D3600, 0x651BDC00, 0x651A8200, + 0x65192800, 0x6517CE00, 0x65167400, + 0x65151A00, 0x6513C000, 0x65126600, + 0x65110C00, 0x650FB200, 0x650E5800, + 0x650CFE00, 0x650BA400, 0x650A4A00, + 0x6508F000, 0x65079600, 0x65063C00, + 0x6504E200, 0x65038800, 0x65022E00, + 0x6500D400, 0x64FF7A00, 0x64FE2000, + 0x64FCC600, 0x64FB6C00, 0x64FA1200, + 0x64F8B800, 0x64F75E00, 0x64F60400, + 0x64F4AA00, 0x64F35000, 0x64F1F600, + 0x64F09C00, 0x64EF4200, 0x64EDE800, + 0x64EC8E00, 0x64EB3400, 0x64E9DA00, + 0x64E88000, 0x64E72600, 0x64E5CC00, + 0x64E47200, 0x64E31800, 0x64E1BE00, + 0x64E06400, 0x64DF0A00, 0x64DDB000, + 0x64DC5600, 0x64DAFC00, 0x64D9A200, + 0x64D84800, 0x64D6EE00, 0x64D59400, + 0x64D43A00, 0x64D2E000, 0x64D18600, + 0x64D02C00, 0x64CED200, 0x64CD7800, + 0x64CC1E00, 0x64CAC400, 0x64C96A00, + 0x64C81000, 0x64C6B600, 0x64C55C00, + 0x64C40200, 0x64C2A800, 0x64C14E00, + 0x64BFF400, 0x64BE9A00, 0x64BD4000, + 0x64BBE600, 0x64BA8C00, 0x64B93200, + 0x64B7D800, 0x64B67E00, 0x64B52400, + 0x64B3CA00, 0x64B27000, 0x64B11600, + 0x64AFBC00, 0x64AE6200, 0x64AD0800, + 0x64ABAE00, 0x64AA5400, 0x64A8FA00, + 0x64A7A000, 0x64A64600, 0x64A4EC00, + 0x64A39200, 0x64A23800, 0x64A0DE00, + 0x649F8400, 0x649E2A00, 0x649CD000, + 0x649B7600, 0x649A1C00, 0x6498C200, + 0x64976800, 0x64960E00, 0x6494B400, + 0x64935A00, 0x64920000, 0x6490A600, + 0x648F4C00, 0x648DF200, 0x648C9800, + 0x648B3E00, 0x6489E400, 0x64888A00, + 0x64873000, 0x6485D600, 0x64847C00, + 0x64832200, 0x6481C800, 0x64806E00, + 0x647F1400, 0x647DBA00, 0x647C6000, + 0x647B0600, 0x6479AC00, 0x64785200, + 0x6476F800, 0x64759E00, 0x64744400, + 0x6472EA00, 0x64719000, 0x64703600, + 0x646EDC00, 0x646D8200, 0x646C2800, + 0x646ACE00, 0x64697400, 0x64681A00, + 0x6466C000, 0x64656600, 0x64640C00, + 0x6462B200, 0x64615800, 0x645FFE00, + 0x645EA400, 0x645D4A00, 0x645BF000, + 0x645A9600, 0x64593C00, 0x6457E200, + 0x64568800, 0x64552E00, 0x6453D400, + 0x64527A00, 0x64512000, 0x644FC600, + 0x644E6C00, 0x644D1200, 0x644BB800, + 0x644A5E00, 0x64490400, 0x6447AA00, + 0x64465000, 0x6444F600, 0x64439C00, + 0x64424200, 0x6440E800, 0x643F8E00, + 0x643E3400, 0x643CDA00, 0x643B8000, + 0x643A2600, 0x6438CC00, 0x64377200, + 0x64361800, 0x6434BE00, 0x64336400, + 0x64320A00, 0x6430B000, 0x642F5600, + 0x642DFC00, 0x642CA200, 0x642B4800, + 0x6429EE00, 0x64289400, 0x64273A00, + 0x6425E000, 0x64248600, 0x64232C00, + 0x6421D200, 0x64207800, 0x641F1E00, + 0x641DC400, 0x641C6A00, 0x641B1000, + 0x6419B600, 0x64185C00, 0x64170200, + 0x6415A800, 0x64144E00, 0x6412F400, + 0x64119A00, 0x64104000, 0x640EE600, + 0x640D8C00, 0x640C3200, 0x640AD800, + 0x64097E00, 0x64082400, 0x6406CA00, + 0x64057000, 0x64041600, 0x6402BC00, + 0x64016200, 0x64000800, 0x63FEAE00, + 0x63FD5400, 0x63FBFA00, 0x63FAA000, + 0x63F94600, 0x63F7EC00, 0x63F69200, + 0x63F53800, 0x63F3DE00, 0x63F28400, + 0x63F12A00, 0x63EFD000, 0x63EE7600, + 0x63ED1C00, 0x63EBC200, 0x63EA6800, + 0x63E90E00, 0x63E7B400, 0x63E65A00, + 0x63E50000, 0x63E3A600, 0x63E24C00, + 0x63E0F200, 0x63DF9800, 0x63DE3E00, + 0x63DCE400, 0x63DB8A00, 0x63DA3000, + 0x63D8D600, 0x63D77C00, 0x63D62200, + 0x63D4C800, 0x63D36E00, 0x63D21400, + 0x63D0BA00, 0x63CF6000, 0x63CE0600, + 0x63CCAC00, 0x63CB5200, 0x63C9F800, + 0x63C89E00, 0x63C74400, 0x63C5EA00, + 0x63C49000, 0x63C33600, 0x63C1DC00, + 0x63C08200, 0x63BF2800, 0x63BDCE00, + 0x63BC7400, 0x63BB1A00, 0x63B9C000, + 0x63B86600, 0x63B70C00, 0x63B5B200, + 0x63B45800, 0x63B2FE00, 0x63B1A400, + 0x63B04A00, 0x63AEF000, 0x63AD9600, + 0x63AC3C00, 0x63AAE200, 0x63A98800, + 0x63A82E00, 0x63A6D400, 0x63A57A00, + 0x63A42000, 0x63A2C600, 0x63A16C00, + 0x63A01200, 0x639EB800, 0x639D5E00, + 0x639C0400, 0x639AAA00, 0x63995000, + 0x6397F600, 0x63969C00, 0x63954200, + 0x6393E800, 0x63928E00, 0x63913400, + 0x638FDA00, 0x638E8000, 0x638D2600, + 0x638BCC00, 0x638A7200, 0x63891800, + 0x6387BE00, 0x63866400, 0x63850A00, + 0x6383B000, 0x63825600, 0x6380FC00, + 0x637FA200, 0x637E4800, 0x637CEE00, + 0x637B9400, 0x637A3A00, 0x6378E000, + 0x63778600, 0x63762C00, 0x6374D200, + 0x63737800, 0x63721E00, 0x6370C400, + 0x636F6A00, 0x636E1000, 0x636CB600, + 0x636B5C00, 0x636A0200, 0x6368A800, + 0x63674E00, 0x6365F400, 0x63649A00, + 0x63634000, 0x6361E600, 0x63608C00, + 0x635F3200, 0x635DD800, 0x635C7E00, + 0x635B2400, 0x6359CA00, 0x63587000, + 0x63571600, 0x6355BC00, 0x63546200, + 0x63530800, 0x6351AE00, 0x63505400, + 0x634EFA00, 0x634DA000, 0x634C4600, + 0x634AEC00, 0x63499200, 0x63483800, + 0x6346DE00, 0x63458400, 0x63442A00, + 0x6342D000, 0x63417600, 0x63401C00, + 0x633EC200, 0x633D6800, 0x633C0E00, + 0x633AB400, 0x63395A00, 0x63380000, + 0x6336A600, 0x63354C00, 0x6333F200, + 0x63329800, 0x63313E00, 0x632FE400, + 0x632E8A00, 0x632D3000, 0x632BD600, + 0x632A7C00, 0x63292200, 0x6327C800, + 0x63266E00, 0x63251400, 0x6323BA00, + 0x63226000, 0x63210600, 0x631FAC00, + 0x631E5200, 0x631CF800, 0x631B9E00, + 0x631A4400, 0x6318EA00, 0x63179000, + 0x63163600, 0x6314DC00, 0x63138200, + 0x63122800, 0x6310CE00, 0x630F7400, + 0x630E1A00, 0x630CC000, 0x630B6600, + 0x630A0C00, 0x6308B200, 0x63075800, + 0x6305FE00, 0x6304A400, 0x63034A00, + 0x6301F000, 0x63009600, 0x62FF3C00, + 0x62FDE200, 0x62FC8800, 0x62FB2E00, + 0x62F9D400, 0x62F87A00, 0x62F72000, + 0x62F5C600, 0x62F46C00, 0x62F31200, + 0x62F1B800, 0x62F05E00, 0x62EF0400, + 0x62EDAA00, 0x62EC5000, 0x62EAF600, + 0x62E99C00, 0x62E84200, 0x62E6E800, + 0x62E58E00, 0x62E43400, 0x62E2DA00, + 0x62E18000, 0x62E02600, 0x62DECC00, + 0x62DD7200, 0x62DC1800, 0x62DABE00, + 0x62D96400, 0x62D80A00, 0x62D6B000, + 0x62D55600, 0x62D3FC00, 0x62D2A200, + 0x62D14800, 0x62CFEE00, 0x62CE9400, + 0x62CD3A00, 0x62CBE000, 0x62CA8600, + 0x62C92C00, 0x62C7D200, 0x62C67800, + 0x62C51E00, 0x62C3C400, 0x62C26A00, + 0x62C11000, 0x62BFB600, 0x62BE5C00, + 0x62BD0200, 0x62BBA800, 0x62BA4E00, + 0x62B8F400, 0x62B79A00, 0x62B64000, + 0x62B4E600, 0x62B38C00, 0x62B23200, + 0x62B0D800, 0x62AF7E00, 0x62AE2400, + 0x62ACCA00, 0x62AB7000, 0x62AA1600, + 0x62A8BC00, 0x62A76200, 0x62A60800, + 0x62A4AE00, 0x62A35400, 0x62A1FA00, + 0x62A0A000, 0x629F4600, 0x629DEC00, + 0x629C9200, 0x629B3800, 0x6299DE00, + 0x62988400, 0x62972A00, 0x6295D000, + 0x62947600, 0x62931C00, 0x6291C200, + 0x62906800, 0x628F0E00, 0x628DB400, + 0x628C5A00, 0x628B0000, 0x6289A600, + 0x62884C00, 0x6286F200, 0x62859800, + 0x62843E00, 0x6282E400, 0x62818A00, + 0x62803000, 0x627ED600, 0x627D7C00, + 0x627C2200, 0x627AC800, 0x62796E00, + 0x62781400, 0x6276BA00, 0x62756000, + 0x62740600, 0x6272AC00, 0x62715200, + 0x626FF800, 0x626E9E00, 0x626D4400, + 0x626BEA00, 0x626A9000, 0x62693600, + 0x6267DC00, 0x62668200, 0x62652800, + 0x6263CE00, 0x62627400, 0x62611A00, + 0x625FC000, 0x625E6600, 0x625D0C00, + 0x625BB200, 0x625A5800, 0x6258FE00, + 0x6257A400, 0x62564A00, 0x6254F000, + 0x62539600, 0x62523C00, 0x6250E200, + 0x624F8800, 0x624E2E00, 0x624CD400, + 0x624B7A00, 0x624A2000, 0x6248C600, + 0x62476C00, 0x62461200, 0x6244B800, + 0x62435E00, 0x62420400, 0x6240AA00, + 0x623F5000, 0x623DF600, 0x623C9C00, + 0x623B4200, 0x6239E800, 0x62388E00, + 0x62373400, 0x6235DA00, 0x62348000, + 0x62332600, 0x6231CC00, 0x62307200, + 0x622F1800, 0x622DBE00, 0x622C6400, + 0x622B0A00, 0x6229B000, 0x62285600, + 0x6226FC00, 0x6225A200, 0x62244800, + 0x6222EE00, 0x62219400, 0x62203A00, + 0x621EE000, 0x621D8600, 0x621C2C00, + 0x621AD200, 0x62197800, 0x62181E00, + 0x6216C400, 0x62156A00, 0x62141000, + 0x6212B600, 0x62115C00, 0x62100200, + 0x620EA800, 0x620D4E00, 0x620BF400, + 0x620A9A00, 0x62094000, 0x6207E600, + 0x62068C00, 0x62053200, 0x6203D800, + 0x62027E00, 0x62012400, 0x61FFCA00, + 0x61FE7000, 0x61FD1600, 0x61FBBC00, + 0x61FA6200, 0x61F90800, 0x61F7AE00, + 0x61F65400, 0x61F4FA00, 0x61F3A000, + 0x61F24600, 0x61F0EC00, 0x61EF9200, + 0x61EE3800, 0x61ECDE00, 0x61EB8400, + 0x61EA2A00, 0x61E8D000, 0x61E77600, + 0x61E61C00, 0x61E4C200, 0x61E36800, + 0x61E20E00, 0x61E0B400, 0x61DF5A00, + 0x61DE0000, 0x61DCA600, 0x61DB4C00, + 0x61D9F200, 0x61D89800, 0x61D73E00, + 0x61D5E400, 0x61D48A00, 0x61D33000, + 0x61D1D600, 0x61D07C00, 0x61CF2200, + 0x61CDC800, 0x61CC6E00, 0x61CB1400, + 0x61C9BA00, 0x61C86000, 0x61C70600, + 0x61C5AC00, 0x61C45200, 0x61C2F800, + 0x61C19E00, 0x61C04400, 0x61BEEA00, + 0x61BD9000, 0x61BC3600, 0x61BADC00, + 0x61B98200, 0x61B82800, 0x61B6CE00, + 0x61B57400, 0x61B41A00, 0x61B2C000, + 0x61B16600, 0x61B00C00, 0x61AEB200, + 0x61AD5800, 0x61ABFE00, 0x61AAA400, + 0x61A94A00, 0x61A7F000, 0x61A69600, + 0x61A53C00, 0x61A3E200, 0x61A28800, + 0x61A12E00, 0x619FD400, 0x619E7A00, + 0x619D2000, 0x619BC600, 0x619A6C00, + 0x61991200, 0x6197B800, 0x61965E00, + 0x61950400, 0x6193AA00, 0x61925000, + 0x6190F600, 0x618F9C00, 0x618E4200, + 0x618CE800, 0x618B8E00, 0x618A3400, + 0x6188DA00, 0x61878000, 0x61862600, + 0x6184CC00, 0x61837200, 0x61821800, + 0x6180BE00, 0x617F6400, 0x617E0A00, + 0x617CB000, 0x617B5600, 0x6179FC00, + 0x6178A200, 0x61774800, 0x6175EE00, + 0x61749400, 0x61733A00, 0x6171E000, + 0x61708600, 0x616F2C00, 0x616DD200, + 0x616C7800, 0x616B1E00, 0x6169C400, + 0x61686A00, 0x61671000, 0x6165B600, + 0x61645C00, 0x61630200, 0x6161A800, + 0x61604E00, 0x615EF400, 0x615D9A00, + 0x615C4000, 0x615AE600, 0x61598C00, + 0x61583200, 0x6156D800, 0x61557E00, + 0x61542400, 0x6152CA00, 0x61517000, + 0x61501600, 0x614EBC00, 0x614D6200, + 0x614C0800, 0x614AAE00, 0x61495400, + 0x6147FA00, 0x6146A000, 0x61454600, + 0x6143EC00, 0x61429200, 0x61413800, + 0x613FDE00, 0x613E8400, 0x613D2A00, + 0x613BD000, 0x613A7600, 0x61391C00, + 0x6137C200, 0x61366800, 0x61350E00, + 0x6133B400, 0x61325A00, 0x61310000, + 0x612FA600, 0x612E4C00, 0x612CF200, + 0x612B9800, 0x612A3E00, 0x6128E400, + 0x61278A00, 0x61263000, 0x6124D600, + 0x61237C00, 0x61222200, 0x6120C800, + 0x611F6E00, 0x611E1400, 0x611CBA00, + 0x611B6000, 0x611A0600, 0x6118AC00, + 0x61175200, 0x6115F800, 0x61149E00, + 0x61134400, 0x6111EA00, 0x61109000, + 0x610F3600, 0x610DDC00, 0x610C8200, + 0x610B2800, 0x6109CE00, 0x61087400, + 0x61071A00, 0x6105C000, 0x61046600, + 0x61030C00, 0x6101B200, 0x61005800, + 0x60FEFE00, 0x60FDA400, 0x60FC4A00, + 0x60FAF000, 0x60F99600, 0x60F83C00, + 0x60F6E200, 0x60F58800, 0x60F42E00, + 0x60F2D400, 0x60F17A00, 0x60F02000, + 0x60EEC600, 0x60ED6C00, 0x60EC1200, + 0x60EAB800, 0x60E95E00, 0x60E80400, + 0x60E6AA00, 0x60E55000, 0x60E3F600, + 0x60E29C00, 0x60E14200, 0x60DFE800, + 0x60DE8E00, 0x60DD3400, 0x60DBDA00, + 0x60DA8000, 0x60D92600, 0x60D7CC00, + 0x60D67200, 0x60D51800, 0x60D3BE00, + 0x60D26400, 0x60D10A00, 0x60CFB000, + 0x60CE5600, 0x60CCFC00, 0x60CBA200, + 0x60CA4800, 0x60C8EE00, 0x60C79400, + 0x60C63A00, 0x60C4E000, 0x60C38600, + 0x60C22C00, 0x60C0D200, 0x60BF7800, + 0x60BE1E00, 0x60BCC400, 0x60BB6A00, + 0x60BA1000, 0x60B8B600, 0x60B75C00, + 0x60B60200, 0x60B4A800, 0x60B34E00, + 0x60B1F400, 0x60B09A00, 0x60AF4000, + 0x60ADE600, 0x60AC8C00, 0x60AB3200, + 0x60A9D800, 0x60A87E00, 0x60A72400, + 0x60A5CA00, 0x60A47000, 0x60A31600, + 0x60A1BC00, 0x60A06200, 0x609F0800, + 0x609DAE00, 0x609C5400, 0x609AFA00, + 0x6099A000, 0x60984600, 0x6096EC00, + 0x60959200, 0x60943800, 0x6092DE00, + 0x60918400, 0x60902A00, 0x608ED000, + 0x608D7600, 0x608C1C00, 0x608AC200, + 0x60896800, 0x60880E00, 0x6086B400, + 0x60855A00, 0x60840000, 0x6082A600, + 0x60814C00, 0x607FF200, 0x607E9800, + 0x607D3E00, 0x607BE400, 0x607A8A00, + 0x60793000, 0x6077D600, 0x60767C00, + 0x60752200, 0x6073C800, 0x60726E00, + 0x60711400, 0x606FBA00, 0x606E6000, + 0x606D0600, 0x606BAC00, 0x606A5200, + 0x6068F800, 0x60679E00, 0x60664400, + 0x6064EA00, 0x60639000, 0x60623600, + 0x6060DC00, 0x605F8200, 0x605E2800, + 0x605CCE00, 0x605B7400, 0x605A1A00, + 0x6058C000, 0x60576600, 0x60560C00, + 0x6054B200, 0x60535800, 0x6051FE00, + 0x6050A400, 0x604F4A00, 0x604DF000, + 0x604C9600, 0x604B3C00, 0x6049E200, + 0x60488800, 0x60472E00, 0x6045D400, + 0x60447A00, 0x60432000, 0x6041C600, + 0x60406C00, 0x603F1200, 0x603DB800, + 0x603C5E00, 0x603B0400, 0x6039AA00, + 0x60385000, 0x6036F600, 0x60359C00, + 0x60344200, 0x6032E800, 0x60318E00, + 0x60303400, 0x602EDA00, 0x602D8000, + 0x602C2600, 0x602ACC00, 0x60297200, + 0x60281800, 0x6026BE00, 0x60256400, + 0x60240A00, 0x6022B000, 0x60215600, + 0x601FFC00, 0x601EA200, 0x601D4800, + 0x601BEE00, 0x601A9400, 0x60193A00, + 0x6017E000, 0x60168600, 0x60152C00, + 0x6013D200, 0x60127800, 0x60111E00, + 0x600FC400, 0x600E6A00, 0x600D1000, + 0x600BB600, 0x600A5C00, 0x60090200, + 0x6007A800, 0x60064E00, 0x6004F400, + 0x60039A00, 0x60024000, 0x6000E600, + 0x5FFF8C00, 0x5FFE3200, 0x5FFCD800, + 0x5FFB7E00, 0x5FFA2400, 0x5FF8CA00, + 0x5FF77000, 0x5FF61600, 0x5FF4BC00, + 0x5FF36200, 0x5FF20800, 0x5FF0AE00, + 0x5FEF5400, 0x5FEDFA00, 0x5FECA000, + 0x5FEB4600, 0x5FE9EC00, 0x5FE89200, + 0x5FE73800, 0x5FE5DE00, 0x5FE48400, + 0x5FE32A00, 0x5FE1D000, 0x5FE07600, + 0x5FDF1C00, 0x5FDDC200, 0x5FDC6800, + 0x5FDB0E00, 0x5FD9B400, 0x5FD85A00, + 0x5FD70000, 0x5FD5A600, 0x5FD44C00, + 0x5FD2F200, 0x5FD19800, 0x5FD03E00, + 0x5FCEE400, 0x5FCD8A00, 0x5FCC3000, + 0x5FCAD600, 0x5FC97C00, 0x5FC82200, + 0x5FC6C800, 0x5FC56E00, 0x5FC41400, + 0x5FC2BA00, 0x5FC16000, 0x5FC00600, + 0x5FBEAC00, 0x5FBD5200, 0x5FBBF800, + 0x5FBA9E00, 0x5FB94400, 0x5FB7EA00, + 0x5FB69000, 0x5FB53600, 0x5FB3DC00, + 0x5FB28200, 0x5FB12800, 0x5FAFCE00, + 0x5FAE7400, 0x5FAD1A00, 0x5FABC000, + 0x5FAA6600, 0x5FA90C00, 0x5FA7B200, + 0x5FA65800, 0x5FA4FE00, 0x5FA3A400, + 0x5FA24A00, 0x5FA0F000, 0x5F9F9600, + 0x5F9E3C00, 0x5F9CE200, 0x5F9B8800, + 0x5F9A2E00, 0x5F98D400, 0x5F977A00, + 0x5F962000, 0x5F94C600, 0x5F936C00, + 0x5F921200, 0x5F90B800, 0x5F8F5E00, + 0x5F8E0400, 0x5F8CAA00, 0x5F8B5000, + 0x5F89F600, 0x5F889C00, 0x5F874200, + 0x5F85E800, 0x5F848E00, 0x5F833400, + 0x5F81DA00, 0x5F808000, 0x5F7F2600, + 0x5F7DCC00, 0x5F7C7200, 0x5F7B1800, + 0x5F79BE00, 0x5F786400, 0x5F770A00, + 0x5F75B000, 0x5F745600, 0x5F72FC00, + 0x5F71A200, 0x5F704800, 0x5F6EEE00, + 0x5F6D9400, 0x5F6C3A00, 0x5F6AE000, + 0x5F698600, 0x5F682C00, 0x5F66D200, + 0x5F657800, 0x5F641E00, 0x5F62C400, + 0x5F616A00, 0x5F601000, 0x5F5EB600, + 0x5F5D5C00, 0x5F5C0200, 0x5F5AA800, + 0x5F594E00, 0x5F57F400, 0x5F569A00, + 0x5F554000, 0x5F53E600, 0x5F528C00, + 0x5F513200, 0x5F4FD800, 0x5F4E7E00, + 0x5F4D2400, 0x5F4BCA00, 0x5F4A7000, + 0x5F491600, 0x5F47BC00, 0x5F466200, + 0x5F450800, 0x5F43AE00, 0x5F425400, + 0x5F40FA00, 0x5F3FA000, 0x5F3E4600, + 0x5F3CEC00, 0x5F3B9200, 0x5F3A3800, + 0x5F38DE00, 0x5F378400, 0x5F362A00, + 0x5F34D000, 0x5F337600, 0x5F321C00, + 0x5F30C200, 0x5F2F6800, 0x5F2E0E00, + 0x5F2CB400, 0x5F2B5A00, 0x5F2E0000, + 0x5F2CC340, 0x5F2B8680, 0x5F2A49C0, + 0x5F290D00, 0x5F27D040, 0x5F269380, + 0x5F2556C0, 0x5F241A00, 0x5F22DD40, + 0x5F21A080, 0x5F2063C0, 0x5F1F2700, + 0x5F1DEA40, 0x5F1CAD80, 0x5F1B70C0, + 0x5F1A3400, 0x5F18F740, 0x5F17BA80, + 0x5F167DC0, 0x5F154100, 0x5F140440, + 0x5F12C780, 0x5F118AC0, 0x5F104E00, + 0x5F0F1140, 0x5F0DD480, 0x5F0C97C0, + 0x5F0B5B00, 0x5F0A1E40, 0x5F08E180, + 0x5F07A4C0, 0x5F066800, 0x5F052B40, + 0x5F03EE80, 0x5F02B1C0, 0x5F017500, + 0x5F003840, 0x5EFEFB80, 0x5EFDBEC0, + 0x5EFC8200, 0x5EFB4540, 0x5EFA0880, + 0x5EF8CBC0, 0x5EF78F00, 0x5EF65240, + 0x5EF51580, 0x5EF3D8C0, 0x5EF29C00, + 0x5EF15F40, 0x5EF02280, 0x5EEEE5C0, + 0x5EEDA900, 0x5EEC6C40, 0x5EEB2F80, + 0x5EE9F2C0, 0x5EE8B600, 0x5EE77940, + 0x5EE63C80, 0x5EE4FFC0, 0x5EE3C300, + 0x5EE28640, 0x5EE14980, 0x5EE00CC0, + 0x5EDED000, 0x5EDD9340, 0x5EDC5680, + 0x5EDB19C0, 0x5ED9DD00, 0x5ED8A040, + 0x5ED76380, 0x5ED626C0, 0x5ED4EA00, + 0x5ED3AD40, 0x5ED27080, 0x5ED133C0, + 0x5ECFF700, 0x5ECEBA40, 0x5ECD7D80, + 0x5ECC40C0, 0x5ECB0400, 0x5EC9C740, + 0x5EC88A80, 0x5EC74DC0, 0x5EC61100, + 0x5EC4D440, 0x5EC39780, 0x5EC25AC0, + 0x5EC11E00, 0x5EBFE140, 0x5EBEA480, + 0x5EBD67C0, 0x5EBC2B00, 0x5EBAEE40, + 0x5EB9B180, 0x5EB874C0, 0x5EB73800, + 0x5EB5FB40, 0x5EB4BE80, 0x5EB381C0, + 0x5EB24500, 0x5EB10840, 0x5EAFCB80, + 0x5EAE8EC0, 0x5EAD5200, 0x5EAC1540, + 0x5EAAD880, 0x5EA99BC0, 0x5EA85F00, + 0x5EA72240, 0x5EA5E580, 0x5EA4A8C0, + 0x5EA36C00, 0x5EA22F40, 0x5EA0F280, + 0x5E9FB5C0, 0x5E9E7900, 0x5E9D3C40, + 0x5E9BFF80, 0x5E9AC2C0, 0x5E998600, + 0x5E984940, 0x5E970C80, 0x5E95CFC0, + 0x5E949300, 0x5E935640, 0x5E921980, + 0x5E90DCC0, 0x5E8FA000, 0x5E8E6340, + 0x5E8D2680, 0x5E8BE9C0, 0x5E8AAD00, + 0x5E897040, 0x5E883380, 0x5E86F6C0, + 0x5E85BA00, 0x5E847D40, 0x5E834080, + 0x5E8203C0, 0x5E80C700, 0x5E7F8A40, + 0x5E7E4D80, 0x5E7D10C0, 0x5E7BD400, + 0x5E7A9740, 0x5E795A80, 0x5E781DC0, + 0x5E76E100, 0x5E75A440, 0x5E746780, + 0x5E732AC0, 0x5E71EE00, 0x5E70B140, + 0x5E6F7480, 0x5E6E37C0, 0x5E6CFB00, + 0x5E6BBE40, 0x5E6A8180, 0x5E6944C0, + 0x5E680800, 0x5E66CB40, 0x5E658E80, + 0x5E6451C0, 0x5E631500, 0x5E61D840, + 0x5E609B80, 0x5E5F5EC0, 0x5E5E2200, + 0x5E5CE540, 0x5E5BA880, 0x5E5A6BC0, + 0x5E592F00, 0x5E57F240, 0x5E56B580, + 0x5E5578C0, 0x5E543C00, 0x5E52FF40, + 0x5E51C280, 0x5E5085C0, 0x5E4F4900, + 0x5E4E0C40, 0x5E4CCF80, 0x5E4B92C0, + 0x5E4A5600, 0x5E491940, 0x5E47DC80, + 0x5E469FC0, 0x5E456300, 0x5E442640, + 0x5E42E980, 0x5E41ACC0, 0x5E407000, + 0x5E3F3340, 0x5E3DF680, 0x5E3CB9C0, + 0x5E3B7D00, 0x5E3A4040, 0x5E390380, + 0x5E37C6C0, 0x5E368A00, 0x5E354D40, + 0x5E341080, 0x5E32D3C0, 0x5E319700, + 0x5E305A40, 0x5E2F1D80, 0x5E2DE0C0, + 0x5E2CA400, 0x5E2B6740, 0x5E2A2A80, + 0x5E28EDC0, 0x5E27B100, 0x5E267440, + 0x5E253780, 0x5E23FAC0, 0x5E22BE00, + 0x5E218140, 0x5E204480, 0x5E1F07C0, + 0x5E1DCB00, 0x5E1C8E40, 0x5E1B5180, + 0x5E1A14C0, 0x5E18D800, 0x5E179B40, + 0x5E165E80, 0x5E1521C0, 0x5E13E500, + 0x5E12A840, 0x5E116B80, 0x5E102EC0, + 0x5E0EF200, 0x5E0DB540, 0x5E0C7880, + 0x5E0B3BC0, 0x5E09FF00, 0x5E08C240, + 0x5E078580, 0x5E0648C0, 0x5E050C00, + 0x5E03CF40, 0x5E029280, 0x5E0155C0, + 0x5E001900, 0x5DFEDC40, 0x5DFD9F80, + 0x5DFC62C0, 0x5DFB2600, 0x5DF9E940, + 0x5DF8AC80, 0x5DF76FC0, 0x5DF63300, + 0x5DF4F640, 0x5DF3B980, 0x5DF27CC0, + 0x5DF14000, 0x5DF00340, 0x5DEEC680, + 0x5DED89C0, 0x5DEC4D00, 0x5DEB1040, + 0x5DE9D380, 0x5DE896C0, 0x5DE75A00, + 0x5DE61D40, 0x5DE4E080, 0x5DE3A3C0, + 0x5DE26700, 0x5DE12A40, 0x5DDFED80, + 0x5DDEB0C0, 0x5DDD7400, 0x5DDC3740, + 0x5DDAFA80, 0x5DD9BDC0, 0x5DD88100, + 0x5DD74440, 0x5DD60780, 0x5DD4CAC0, + 0x5DD38E00, 0x5DD25140, 0x5DD11480, + 0x5DCFD7C0, 0x5DCE9B00, 0x5DCD5E40, + 0x5DCC2180, 0x5DCAE4C0, 0x5DC9A800, + 0x5DC86B40, 0x5DC72E80, 0x5DC5F1C0, + 0x5DC4B500, 0x5DC37840, 0x5DC23B80, + 0x5DC0FEC0, 0x5DBFC200, 0x5DBE8540, + 0x5DBD4880, 0x5DBC0BC0, 0x5DBACF00, + 0x5DB99240, 0x5DB85580, 0x5DB718C0, + 0x5DB5DC00, 0x5DB49F40, 0x5DB36280, + 0x5DB225C0, 0x5DB0E900, 0x5DAFAC40, + 0x5DAE6F80, 0x5DAD32C0, 0x5DABF600, + 0x5DAAB940, 0x5DA97C80, 0x5DA83FC0, + 0x5DA70300, 0x5DA5C640, 0x5DA48980, + 0x5DA34CC0, 0x5DA21000, 0x5DA0D340, + 0x5D9F9680, 0x5D9E59C0, 0x5D9D1D00, + 0x5D9BE040, 0x5D9AA380, 0x5D9966C0, + 0x5D982A00, 0x5D96ED40, 0x5D95B080, + 0x5D9473C0, 0x5D933700, 0x5D91FA40, + 0x5D90BD80, 0x5D8F80C0, 0x5D8E4400, + 0x5D8D0740, 0x5D8BCA80, 0x5D8A8DC0, + 0x5D895100, 0x5D881440, 0x5D86D780, + 0x5D859AC0, 0x5D845E00, 0x5D832140, + 0x5D81E480, 0x5D80A7C0, 0x5D7F6B00, + 0x5D7E2E40, 0x5D7CF180, 0x5D7BB4C0, + 0x5D7A7800, 0x5D793B40, 0x5D77FE80, + 0x5D76C1C0, 0x5D758500, 0x5D744840, + 0x5D730B80, 0x5D71CEC0, 0x5D709200, + 0x5D6F5540, 0x5D6E1880, 0x5D6CDBC0, + 0x5D6B9F00, 0x5D6A6240, 0x5D692580, + 0x5D67E8C0, 0x5D66AC00, 0x5D656F40, + 0x5D643280, 0x5D62F5C0, 0x5D61B900, + 0x5D607C40, 0x5D5F3F80, 0x5D5E02C0, + 0x5D5CC600, 0x5D5B8940, 0x5D5A4C80, + 0x5D590FC0, 0x5D57D300, 0x5D569640, + 0x5D555980, 0x5D541CC0, 0x5D52E000, + 0x5D51A340, 0x5D506680, 0x5D4F29C0, + 0x5D4DED00, 0x5D4CB040, 0x5D4B7380, + 0x5D4A36C0, 0x5D48FA00, 0x5D47BD40, + 0x5D468080, 0x5D4543C0, 0x5D440700, + 0x5D42CA40, 0x5D418D80, 0x5D4050C0, + 0x5D3F1400, 0x5D3DD740, 0x5D3C9A80, + 0x5D3B5DC0, 0x5D3A2100, 0x5D38E440, + 0x5D37A780, 0x5D366AC0, 0x5D352E00, + 0x5D33F140, 0x5D32B480, 0x5D3177C0, + 0x5D303B00, 0x5D2EFE40, 0x5D2DC180, + 0x5D2C84C0, 0x5D2B4800, 0x5D2A0B40, + 0x5D28CE80, 0x5D2791C0, 0x5D265500, + 0x5D251840, 0x5D23DB80, 0x5D229EC0, + 0x5D216200, 0x5D202540, 0x5D1EE880, + 0x5D1DABC0, 0x5D1C6F00, 0x5D1B3240, + 0x5D19F580, 0x5D18B8C0, 0x5D177C00, + 0x5D163F40, 0x5D150280, 0x5D13C5C0, + 0x5D128900, 0x5D114C40, 0x5D100F80, + 0x5D0ED2C0, 0x5D0D9600, 0x5D0C5940, + 0x5D0B1C80, 0x5D09DFC0, 0x5D08A300, + 0x5D076640, 0x5D062980, 0x5D04ECC0, + 0x5D03B000, 0x5D027340, 0x5D013680, + 0x5CFFF9C0, 0x5CFEBD00, 0x5CFD8040, + 0x5CFC4380, 0x5CFB06C0, 0x5CF9CA00, + 0x5CF88D40, 0x5CF75080, 0x5CF613C0, + 0x5CF4D700, 0x5CF39A40, 0x5CF25D80, + 0x5CF120C0, 0x5CEFE400, 0x5CEEA740, + 0x5CED6A80, 0x5CEC2DC0, 0x5CEAF100, + 0x5CE9B440, 0x5CE87780, 0x5CE73AC0, + 0x5CE5FE00, 0x5CE4C140, 0x5CE38480, + 0x5CE247C0, 0x5CE10B00, 0x5CDFCE40, + 0x5CDE9180, 0x5CDD54C0, 0x5CDC1800, + 0x5CDADB40, 0x5CD99E80, 0x5CD861C0, + 0x5CD72500, 0x5CD5E840, 0x5CD4AB80, + 0x5CD36EC0, 0x5CD23200, 0x5CD0F540, + 0x5CCFB880, 0x5CCE7BC0, 0x5CCD3F00, + 0x5CCC0240, 0x5CCAC580, 0x5CC988C0, + 0x5CC84C00, 0x5CC70F40, 0x5CC5D280, + 0x5CC495C0, 0x5CC35900, 0x5CC21C40, + 0x5CC0DF80, 0x5CBFA2C0, 0x5CBE6600, + 0x5CBD2940, 0x5CBBEC80, 0x5CBAAFC0, + 0x5CB97300, 0x5CB83640, 0x5CB6F980, + 0x5CB5BCC0, 0x5CB48000, 0x5CB34340, + 0x5CB20680, 0x5CB0C9C0, 0x5CAF8D00, + 0x5CAE5040, 0x5CAD1380, 0x5CABD6C0, + 0x5CAA9A00, 0x5CA95D40, 0x5CA82080, + 0x5CA6E3C0, 0x5CA5A700, 0x5CA46A40, + 0x5CA32D80, 0x5CA1F0C0, 0x5CA0B400, + 0x5C9F7740, 0x5C9E3A80, 0x5C9CFDC0, + 0x5C9BC100, 0x5C9A8440, 0x5C994780, + 0x5C980AC0, 0x5C96CE00, 0x5C959140, + 0x5C945480, 0x5C9317C0, 0x5C91DB00, + 0x5C909E40, 0x5C8F6180, 0x5C8E24C0, + 0x5C8CE800, 0x5C8BAB40, 0x5C8A6E80, + 0x5C8931C0, 0x5C87F500, 0x5C86B840, + 0x5C857B80, 0x5C843EC0, 0x5C830200, + 0x5C81C540, 0x5C808880, 0x5C7F4BC0, + 0x5C7E0F00, 0x5C7CD240, 0x5C7B9580, + 0x5C7A58C0, 0x5C791C00, 0x5C77DF40, + 0x5C76A280, 0x5C7565C0, 0x5C742900, + 0x5C72EC40, 0x5C71AF80, 0x5C7072C0, + 0x5C6F3600, 0x5C6DF940, 0x5C6CBC80, + 0x5C6B7FC0, 0x5C6A4300, 0x5C690640, + 0x5C67C980, 0x5C668CC0, 0x5C655000, + 0x5C641340, 0x5C62D680, 0x5C6199C0, + 0x5C605D00, 0x5C5F2040, 0x5C5DE380, + 0x5C5CA6C0, 0x5C5B6A00, 0x5C5A2D40, + 0x5C58F080, 0x5C57B3C0, 0x5C567700, + 0x5C553A40, 0x5C53FD80, 0x5C52C0C0, + 0x5C518400, 0x5C504740, 0x5C4F0A80, + 0x5C4DCDC0, 0x5C4C9100, 0x5C4B5440, + 0x5C4A1780, 0x5C48DAC0, 0x5C479E00, + 0x5C466140, 0x5C452480, 0x5C43E7C0, + 0x5C42AB00, 0x5C416E40, 0x5C403180, + 0x5C3EF4C0, 0x5C3DB800, 0x5C3C7B40, + 0x5C3B3E80, 0x5C3A01C0, 0x5C38C500, + 0x5C378840, 0x5C364B80, 0x5C350EC0, + 0x5C33D200, 0x5C329540, 0x5C315880, + 0x5C301BC0, 0x5C2EDF00, 0x5C2DA240, + 0x5C2C6580, 0x5C2B28C0, 0x5C29EC00, + 0x5C28AF40, 0x5C277280, 0x5C2635C0, + 0x5C24F900, 0x5C23BC40, 0x5C227F80, + 0x5C2142C0, 0x5C200600, 0x5C1EC940, + 0x5C1D8C80, 0x5C1C4FC0, 0x5C1B1300, + 0x5C19D640, 0x5C189980, 0x5C175CC0, + 0x5C162000, 0x5C14E340, 0x5C13A680, + 0x5C1269C0, 0x5C112D00, 0x5C0FF040, + 0x5C0EB380, 0x5C0D76C0, 0x5C0C3A00, + 0x5C0AFD40, 0x5C09C080, 0x5C0883C0, + 0x5C074700, 0x5C060A40, 0x5C04CD80, + 0x5C0390C0, 0x5C025400, 0x5C011740, + 0x5BFFDA80, 0x5BFE9DC0, 0x5BFD6100, + 0x5BFC2440, 0x5BFAE780, 0x5BF9AAC0, + 0x5BF86E00, 0x5BF73140, 0x5BF5F480, + 0x5BF4B7C0, 0x5BF37B00, 0x5BF23E40, + 0x5BF10180, 0x5BEFC4C0, 0x5BEE8800, + 0x5BED4B40, 0x5BEC0E80, 0x5BEAD1C0, + 0x5BE99500, 0x5BE85840, 0x5BE71B80, + 0x5BE5DEC0, 0x5BE4A200, 0x5BE36540, + 0x5BE22880, 0x5BE0EBC0, 0x5BDFAF00, + 0x5BDE7240, 0x5BDD3580, 0x5BDBF8C0, + 0x5BDABC00, 0x5BD97F40, 0x5BD84280, + 0x5BD705C0, 0x5BD5C900, 0x5BD48C40, + 0x5BD34F80, 0x5BD212C0, 0x5BD0D600, + 0x5BCF9940, 0x5BCE5C80, 0x5BCD1FC0, + 0x5BCBE300, 0x5BCAA640, 0x5BC96980, + 0x5BC82CC0, 0x5BC6F000, 0x5BC5B340, + 0x5BC47680, 0x5BC339C0, 0x5BC1FD00, + 0x5BC0C040, 0x5BBF8380, 0x5BBE46C0, + 0x5BBD0A00, 0x5BBBCD40, 0x5BBA9080, + 0x5BB953C0, 0x5BB81700, 0x5BB6DA40, + 0x5BB59D80, 0x5BB460C0, 0x5BB32400, + 0x5BB1E740, 0x5BB0AA80, 0x5BAF6DC0, + 0x5BAE3100, 0x5BACF440, 0x5BABB780, + 0x5BAA7AC0, 0x5BA93E00, 0x5BA80140, + 0x5BA6C480, 0x5BA587C0, 0x5BA44B00, + 0x5BA30E40, 0x5BA1D180, 0x5BA094C0, + 0x5B9F5800, 0x5B9E1B40, 0x5B9CDE80, + 0x5B9BA1C0, 0x5B9A6500, 0x5B992840, + 0x5B97EB80, 0x5B96AEC0, 0x5B957200, + 0x5B943540, 0x5B92F880, 0x5B91BBC0, + 0x5B907F00, 0x5B8F4240, 0x5B8E0580, + 0x5B8CC8C0, 0x5B8B8C00, 0x5B8A4F40, + 0x5B891280, 0x5B87D5C0, 0x5B869900, + 0x5B855C40, 0x5B841F80, 0x5B82E2C0, + 0x5B81A600, 0x5B806940, 0x5B7F2C80, + 0x5B7DEFC0, 0x5B7CB300, 0x5B7B7640, + 0x5B7A3980, 0x5B78FCC0, 0x5B77C000, + 0x5B768340, 0x5B754680, 0x5B7409C0, + 0x5B72CD00, 0x5B719040, 0x5B705380, + 0x5B6F16C0, 0x5B6DDA00, 0x5B6C9D40, + 0x5B6B6080, 0x5B6A23C0, 0x5B68E700, + 0x5B67AA40, 0x5B666D80, 0x5B6530C0, + 0x5B63F400, 0x5B62B740, 0x5B617A80, + 0x5B603DC0, 0x5B5F0100, 0x5B5DC440, + 0x5B5C8780, 0x5B5B4AC0, 0x5B5A0E00, + 0x5B58D140, 0x5B579480, 0x5B5657C0, + 0x5B551B00, 0x5B53DE40, 0x5B52A180, + 0x5B5164C0, 0x5B502800, 0x5B4EEB40, + 0x5B4DAE80, 0x5B4C71C0, 0x5B4B3500, + 0x5B49F840, 0x5B48BB80, 0x5B477EC0, + 0x5B464200, 0x5B450540, 0x5B43C880, + 0x5B428BC0, 0x5B414F00, 0x5B401240, + 0x5B3ED580, 0x5B3D98C0, 0x5B3C5C00, + 0x5B3B1F40, 0x5B39E280, 0x5B38A5C0, + 0x5B376900, 0x5B362C40, 0x5B34EF80, + 0x5B33B2C0, 0x5B327600, 0x5B313940, + 0x5B2FFC80, 0x5B2EBFC0, 0x5B2D8300, + 0x5B2C4640, 0x5B2B0980, 0x5B29CCC0, + 0x5B289000, 0x5B275340, 0x5B261680, + 0x5B24D9C0, 0x5B239D00, 0x5B226040, + 0x5B212380, 0x5B1FE6C0, 0x5B1EAA00, + 0x5B1D6D40, 0x5B1C3080, 0x5B1AF3C0, + 0x5B19B700, 0x5B187A40, 0x5B173D80, + 0x5B1600C0, 0x5B14C400, 0x5B138740, + 0x5B124A80, 0x5B110DC0, 0x5B0FD100, + 0x5B0E9440, 0x5B0D5780, 0x5B0C1AC0, + 0x5B0ADE00, 0x5B09A140, 0x5B086480, + 0x5B0727C0, 0x5B05EB00, 0x5B04AE40, + 0x5B037180, 0x5B0234C0, 0x5B00F800, + 0x5AFFBB40, 0x5AFE7E80, 0x5AFD41C0, + 0x5AFC0500, 0x5AFAC840, 0x5AF98B80, + 0x5AF84EC0, 0x5AF71200, 0x5AF5D540, + 0x5AF49880, 0x5AF35BC0, 0x5AF21F00, + 0x5AF0E240, 0x5AEFA580, 0x5AEE68C0, + 0x5AED2C00, 0x5AEBEF40, 0x5AEAB280, + 0x5AE975C0, 0x5AE83900, 0x5AE6FC40, + 0x5AE5BF80, 0x5AE482C0, 0x5AE34600, + 0x5AE20940, 0x5AE0CC80, 0x5ADF8FC0, + 0x5ADE5300, 0x5ADD1640, 0x5ADBD980, + 0x5ADA9CC0, 0x5AD96000, 0x5AD82340, + 0x5AD6E680, 0x5AD5A9C0, 0x5AD46D00, + 0x5AD33040, 0x5AD1F380, 0x5AD0B6C0, + 0x5ACF7A00, 0x5ACE3D40, 0x5ACD0080, + 0x5ACBC3C0, 0x5ACA8700, 0x5AC94A40, + 0x5AC80D80, 0x5AC6D0C0, 0x5AC59400, + 0x5AC45740, 0x5AC31A80, 0x5AC1DDC0, + 0x5AC0A100, 0x5ABF6440, 0x5ABE2780, + 0x5ABCEAC0, 0x5ABBAE00, 0x5ABA7140, + 0x5AB93480, 0x5AB7F7C0, 0x5AB6BB00, + 0x5AB57E40, 0x5AB44180, 0x5AB304C0, + 0x5AB1C800, 0x5AB08B40, 0x5AAF4E80, + 0x5AAE11C0, 0x5AACD500, 0x5AAB9840, + 0x5AAA5B80, 0x5AA91EC0, 0x5AA7E200, + 0x5AA6A540, 0x5AA56880, 0x5AA42BC0, + 0x5AA2EF00, 0x5AA1B240, 0x5AA07580, + 0x5A9F38C0, 0x5A9DFC00, 0x5A9CBF40, + 0x5A9B8280, 0x5A9A45C0, 0x5A990900, + 0x5A97CC40, 0x5A968F80, 0x5A9552C0, + 0x5A941600, 0x5A92D940, 0x5A919C80, + 0x5A905FC0, 0x5A8F2300, 0x5A8DE640, + 0x5A8CA980, 0x5A8B6CC0, 0x5A8A3000, + 0x5A88F340, 0x5A87B680, 0x5A8679C0, + 0x5A853D00, 0x5A840040, 0x5A82C380, + 0x5A8186C0, 0x5A804A00, 0x5A7F0D40, + 0x5A7DD080, 0x5A7C93C0, 0x5A7B5700, + 0x5A7A1A40, 0x5A78DD80, 0x5A77A0C0, + 0x5A766400, 0x5A752740, 0x5A73EA80, + 0x5A72ADC0, 0x5A717100, 0x5A703440, + 0x5A6EF780, 0x5A6DBAC0, 0x5A6C7E00, + 0x5A6B4140, 0x5A6A0480, 0x5A68C7C0, + 0x5A678B00, 0x5A664E40, 0x5A651180, + 0x5A63D4C0, 0x5A629800, 0x5A615B40, + 0x5A601E80, 0x5A5EE1C0, 0x5A5DA500, + 0x5A5C6840, 0x5A5B2B80, 0x5A59EEC0, + 0x5A58B200, 0x5A577540, 0x5A563880, + 0x5A54FBC0, 0x5A53BF00, 0x5A528240, + 0x5A514580, 0x5A5008C0, 0x5A4ECC00, + 0x5A4D8F40, 0x5A4C5280, 0x5A4B15C0, + 0x5A49D900, 0x5A489C40, 0x5A475F80, + 0x5A4622C0, 0x5A44E600, 0x5A43A940, + 0x5A426C80, 0x5A412FC0, 0x5A3FF300, + 0x5A3EB640, 0x5A3D7980, 0x5A3C3CC0, + 0x5A3B0000, 0x5A39C340, 0x5A388680, + 0x5A3749C0, 0x5A360D00, 0x5A34D040, + 0x5A339380, 0x5A3256C0, 0x5A311A00, + 0x5A2FDD40, 0x5A2EA080, 0x5A2D63C0, + 0x5A2C2700, 0x5A2AEA40, 0x5A29AD80, + 0x5A2870C0, 0x5A273400, 0x5A25F740, + 0x5A24BA80, 0x5A237DC0, 0x5A224100, + 0x5A210440, 0x5A1FC780, 0x5A1E8AC0, + 0x5A1D4E00, 0x5A1C1140, 0x5A1AD480, + 0x5A1997C0, 0x5A185B00, 0x5A171E40, + 0x5A15E180, 0x5A14A4C0, 0x5A136800, + 0x5A122B40, 0x5A10EE80, 0x5A0FB1C0, + 0x5A0E7500, 0x5A0D3840, 0x5A0BFB80, + 0x5A0ABEC0, 0x5A098200, 0x5A084540, + 0x5A070880, 0x5A05CBC0, 0x5A048F00, + 0x5A035240, 0x5A021580, 0x5A00D8C0, + 0x59FF9C00, 0x59FE5F40, 0x59FD2280, + 0x59FBE5C0, 0x59FAA900, 0x59F96C40, + 0x59F82F80, 0x59F6F2C0, 0x59F5B600, + 0x59F47940, 0x59F33C80, 0x59F1FFC0, + 0x59F0C300, 0x59EF8640, 0x59EE4980, + 0x59ED0CC0, 0x59EBD000, 0x59EA9340, + 0x59E95680, 0x59E819C0, 0x59E6DD00, + 0x59E5A040, 0x59E46380, 0x59E326C0, + 0x59E1EA00, 0x59E0AD40, 0x59DF7080, + 0x59DE33C0, 0x59DCF700, 0x59DBBA40, + 0x59DA7D80, 0x59D940C0, 0x59D80400, + 0x59D6C740, 0x59D58A80, 0x59D44DC0, + 0x59D31100, 0x59D1D440, 0x59D09780, + 0x59CF5AC0, 0x59CE1E00, 0x59CCE140, + 0x59CBA480, 0x59CA67C0, 0x59C92B00, + 0x59C7EE40, 0x59C6B180, 0x59C574C0, + 0x59C43800, 0x59C2FB40, 0x59C1BE80, + 0x59C081C0, 0x59BF4500, 0x59BE0840, + 0x59BCCB80, 0x59BB8EC0, 0x59BA5200, + 0x59B91540, 0x59B7D880, 0x59B69BC0, + 0x59B55F00, 0x59B42240, 0x59B2E580, + 0x59B1A8C0, 0x59B06C00, 0x59AF2F40, + 0x59ADF280, 0x59ACB5C0, 0x59AB7900, + 0x59AA3C40, 0x59A8FF80, 0x59A7C2C0, + 0x59A68600, 0x59A54940, 0x59A40C80, + 0x59A2CFC0, 0x59A19300, 0x59A05640, + 0x599F1980, 0x599DDCC0, 0x599CA000, + 0x599B6340, 0x599A2680, 0x5998E9C0, + 0x5997AD00, 0x59967040, 0x59953380, + 0x5993F6C0, 0x5992BA00, 0x59917D40, + 0x59904080, 0x598F03C0, 0x598DC700, + 0x598C8A40, 0x598B4D80, 0x598A10C0, + 0x5988D400, 0x59879740, 0x59865A80, + 0x59851DC0, 0x5983E100, 0x5982A440, + 0x59816780, 0x59802AC0, 0x597EEE00, + 0x597DB140, 0x597C7480, 0x597B37C0, + 0x5979FB00, 0x5978BE40, 0x59778180, + 0x597644C0, 0x59750800, 0x5973CB40, + 0x59728E80, 0x597151C0, 0x59701500, + 0x596ED840, 0x596D9B80, 0x596C5EC0, + 0x596B2200, 0x5969E540, 0x5968A880, + 0x59676BC0, 0x59662F00, 0x5964F240, + 0x5963B580, 0x596278C0, 0x59613C00, + 0x595FFF40, 0x595EC280, 0x595D85C0, + 0x595C4900, 0x595B0C40, 0x5959CF80, + 0x595892C0, 0x59575600, 0x59561940, + 0x5954DC80, 0x59539FC0, 0x59526300, + 0x59512640, 0x594FE980, 0x594EACC0, + 0x594D7000, 0x594C3340, 0x594AF680, + 0x5949B9C0, 0x59487D00, 0x59474040, + 0x59460380, 0x5944C6C0, 0x59438A00, + 0x59424D40, 0x59411080, 0x593FD3C0, + 0x593E9700, 0x593D5A40, 0x593C1D80, + 0x593AE0C0, 0x5939A400, 0x59386740, + 0x59372A80, 0x5935EDC0, 0x5934B100, + 0x59337440, 0x59323780, 0x5930FAC0, + 0x592FBE00, 0x592E8140, 0x592D4480, + 0x592C07C0, 0x592ACB00, 0x59298E40, + 0x59285180, 0x592714C0, 0x5925D800, + 0x59249B40, 0x59235E80, 0x592221C0, + 0x5920E500, 0x591FA840, 0x591E6B80, + 0x591D2EC0, 0x591BF200, 0x591AB540, + 0x59197880, 0x59183BC0, 0x5916FF00, + 0x5915C240, 0x59148580, 0x591348C0, + 0x59120C00, 0x5910CF40, 0x590F9280, + 0x590E55C0, 0x590D1900, 0x590BDC40, + 0x590A9F80, 0x590962C0, 0x59082600, + 0x5906E940, 0x5905AC80, 0x59046FC0, + 0x59033300, 0x5901F640, 0x5900B980, + 0x58FF7CC0, 0x58FE4000, 0x58FD0340, + 0x58FBC680, 0x58FA89C0, 0x58F94D00, + 0x58F81040, 0x58F6D380, 0x58F596C0, + 0x58F45A00, 0x58F31D40, 0x58F1E080, + 0x58F0A3C0, 0x58EF6700, 0x58EE2A40, + 0x58ECED80, 0x58EBB0C0, 0x58EA7400, + 0x58E93740, 0x58E7FA80, 0x58E6BDC0, + 0x58E58100, 0x58E44440, 0x58E30780, + 0x58E1CAC0, 0x58E08E00, 0x58DF5140, + 0x58DE1480, 0x58DCD7C0, 0x58DB9B00, + 0x58DA5E40, 0x58D92180, 0x58D7E4C0, + 0x58D6A800, 0x58D56B40, 0x58D42E80, + 0x58D2F1C0, 0x58D1B500, 0x58D07840, + 0x58CF3B80, 0x58CDFEC0, 0x58CCC200, + 0x58CB8540, 0x58CA4880, 0x58C90BC0, + 0x58C7CF00, 0x58C69240, 0x58C55580, + 0x58C418C0, 0x58C2DC00, 0x58C19F40, + 0x58C06280, 0x58BF25C0, 0x58BDE900, + 0x58BCAC40, 0x58BB6F80, 0x58BA32C0, + 0x58B8F600, 0x58B7B940, 0x58B67C80, + 0x58B53FC0, 0x58B40300, 0x58B2C640, + 0x58B18980, 0x58B04CC0, 0x58AF1000, + 0x58ADD340, 0x58AC9680, 0x58AB59C0, + 0x58AA1D00, 0x58A8E040, 0x58A7A380, + 0x58A666C0, 0x58A52A00, 0x58A3ED40, + 0x58A2B080, 0x58A173C0, 0x58A03700, + 0x589EFA40, 0x589DBD80, 0x589C80C0, + 0x589B4400, 0x589A0740, 0x5898CA80, + 0x58978DC0, 0x58965100, 0x58951440, + 0x5893D780, 0x58929AC0, 0x58915E00, + 0x58902140, 0x588EE480, 0x588DA7C0, + 0x588C6B00, 0x588B2E40, 0x5889F180, + 0x5888B4C0, 0x58877800, 0x58863B40, + 0x5884FE80, 0x5883C1C0, 0x58828500, + 0x58814840, 0x58800B80, 0x587ECEC0, + 0x587D9200, 0x587C5540, 0x587B1880, + 0x5879DBC0, 0x58789F00, 0x58776240, + 0x58762580, 0x5874E8C0, 0x5873AC00, + 0x58726F40, 0x58713280, 0x586FF5C0, + 0x586EB900, 0x586D7C40, 0x586C3F80, + 0x586B02C0, 0x5869C600, 0x58688940, + 0x58674C80, 0x58660FC0, 0x5864D300, + 0x58639640, 0x58625980, 0x58611CC0, + 0x585FE000, 0x585EA340, 0x585D6680, + 0x585C29C0, 0x585AED00, 0x5859B040, + 0x58587380, 0x585736C0, 0x5855FA00, + 0x5854BD40, 0x58538080, 0x585243C0, + 0x58510700, 0x584FCA40, 0x584E8D80, + 0x584D50C0, 0x584C1400, 0x584AD740, + 0x58499A80, 0x58485DC0, 0x58472100, + 0x5845E440, 0x5844A780, 0x58436AC0, + 0x58422E00, 0x5840F140, 0x583FB480, + 0x583E77C0, 0x583D3B00, 0x583BFE40, + 0x583AC180, 0x583984C0, 0x58384800, + 0x58370B40, 0x5835CE80, 0x583491C0, + 0x58335500, 0x58321840, 0x5830DB80, + 0x582F9EC0, 0x582E6200, 0x582D2540, + 0x582BE880, 0x582AABC0, 0x58296F00, + 0x58283240, 0x5826F580, 0x5825B8C0, + 0x58247C00, 0x58233F40, 0x58220280, + 0x5820C5C0, 0x581F8900, 0x581E4C40, + 0x581D0F80, 0x581BD2C0, 0x581A9600, + 0x58195940, 0x58181C80, 0x5816DFC0, + 0x5815A300, 0x58146640, 0x58132980, + 0x5811ECC0, 0x5810B000, 0x580F7340, + 0x580E3680, 0x580CF9C0, 0x580BBD00, + 0x580A8040, 0x58094380, 0x580806C0, + 0x5806CA00, 0x58058D40, 0x58045080, + 0x580313C0, 0x5801D700, 0x58009A40, + 0x57FF5D80, 0x57FE20C0, 0x57FCE400, + 0x57FBA740, 0x57FA6A80, 0x57F92DC0, + 0x57F7F100, 0x57F6B440, 0x57F57780, + 0x57F43AC0, 0x57F2FE00, 0x57F1C140, + 0x57F08480, 0x57EF47C0, 0x57EE0B00, + 0x57ECCE40, 0x57EB9180, 0x57EA54C0, + 0x57E91800, 0x57E7DB40, 0x57E69E80, + 0x57E561C0, 0x57E42500, 0x57E2E840, + 0x57E1AB80, 0x57E06EC0, 0x57DF3200, + 0x57DDF540, 0x57DCB880, 0x57DB7BC0, + 0x57DA3F00, 0x57D90240, 0x57D7C580, + 0x57D688C0, 0x57D54C00, 0x57D40F40, + 0x57D2D280, 0x57D195C0, 0x57D05900, + 0x57CF1C40, 0x57CDDF80, 0x57CCA2C0, + 0x57CB6600, 0x57CA2940, 0x57C8EC80, + 0x57C7AFC0, 0x57C67300, 0x57C53640, + 0x57C3F980, 0x57C2BCC0, 0x57C18000, + 0x57C04340, 0x57BF0680, 0x57BDC9C0, + 0x57BC8D00, 0x57BB5040, 0x57BA1380, + 0x57B8D6C0, 0x57B79A00, 0x57B65D40, + 0x57B52080, 0x57B3E3C0, 0x57B2A700, + 0x57B16A40, 0x57B02D80, 0x57AEF0C0, + 0x57ADB400, 0x57AC7740, 0x57AB3A80, + 0x57A9FDC0, 0x57A8C100, 0x57A78440, + 0x57A64780, 0x57A50AC0, 0x57A3CE00, + 0x57A29140, 0x57A15480, 0x57A017C0, + 0x579EDB00, 0x579D9E40, 0x579C6180, + 0x579B24C0, 0x5799E800, 0x5798AB40, + 0x57976E80, 0x579631C0, 0x5794F500, + 0x5793B840, 0x57927B80, 0x57913EC0, + 0x57900200, 0x578EC540, 0x578D8880, + 0x578C4BC0, 0x578B0F00, 0x5789D240, + 0x57889580, 0x578758C0, 0x57861C00, + 0x5784DF40, 0x5783A280, 0x578265C0, + 0x57812900, 0x577FEC40, 0x577EAF80, + 0x577D72C0, 0x577C3600, 0x577AF940, + 0x5779BC80, 0x57787FC0, 0x57774300, + 0x57760640, 0x5774C980, 0x57738CC0, + 0x57725000, 0x57711340, 0x576FD680, + 0x576E99C0, 0x576D5D00, 0x576C2040, + 0x576AE380, 0x5769A6C0, 0x57686A00, + 0x57672D40, 0x5765F080, 0x5764B3C0, + 0x57637700, 0x57623A40, 0x5760FD80, + 0x575FC0C0, 0x575E8400, 0x575D4740, + 0x575C0A80, 0x575ACDC0, 0x57599100, + 0x57585440, 0x57571780, 0x5755DAC0, + 0x57549E00, 0x57536140, 0x57522480, + 0x5750E7C0, 0x574FAB00, 0x574E6E40, + 0x574D3180, 0x574BF4C0, 0x574AB800, + 0x57497B40, 0x57483E80, 0x574701C0, + 0x5745C500, 0x57448840, 0x57434B80, + 0x57420EC0, 0x5740D200, 0x573F9540, + 0x573E5880, 0x573D1BC0, 0x573BDF00, + 0x573AA240, 0x57396580, 0x573828C0, + 0x5736EC00, 0x5735AF40, 0x57347280, + 0x573335C0, 0x5731F900, 0x5730BC40, + 0x572F7F80, 0x572E42C0, 0x572D0600, + 0x572BC940, 0x572A8C80, 0x57294FC0, + 0x57281300, 0x5726D640, 0x57259980, + 0x57245CC0, 0x57232000, 0x5721E340, + 0x5720A680, 0x571F69C0, 0x571E2D00, + 0x571CF040, 0x571BB380, 0x571A76C0, + 0x57193A00, 0x5717FD40, 0x5716C080, + 0x571583C0, 0x57144700, 0x57130A40, + 0x5711CD80, 0x571090C0, 0x570F5400, + 0x570E1740, 0x570CDA80, 0x570B9DC0, + 0x570A6100, 0x57092440, 0x5707E780, + 0x5706AAC0, 0x57056E00, 0x57043140, + 0x5702F480, 0x5701B7C0, 0x57007B00, + 0x56FF3E40, 0x56FE0180, 0x56FCC4C0, + 0x56FB8800, 0x56FA4B40, 0x56F90E80, + 0x56F7D1C0, 0x56F69500, 0x56F55840, + 0x56F41B80, 0x56F2DEC0, 0x56F1A200, + 0x56F06540, 0x56EF2880, 0x56EDEBC0, + 0x56ECAF00, 0x56EB7240, 0x56EA3580, + 0x56E8F8C0, 0x56E7BC00, 0x56E67F40, + 0x56E54280, 0x56E405C0, 0x56E2C900, + 0x56E18C40, 0x56E04F80, 0x56DF12C0, + 0x56DDD600, 0x56DC9940, 0x56DB5C80, + 0x56DA1FC0, 0x56D8E300, 0x56D7A640, + 0x56D66980, 0x56D52CC0, 0x56D3F000, + 0x56D2B340, 0x56D17680, 0x56D039C0, + 0x56CEFD00, 0x56CDC040, 0x56CC8380, + 0x56CB46C0, 0x56CA0A00, 0x56C8CD40, + 0x56C79080, 0x56C653C0, 0x56C51700, + 0x56C3DA40, 0x56C29D80, 0x56C160C0, + 0x56C02400, 0x56BEE740, 0x56BDAA80, + 0x56BC6DC0, 0x56BB3100, 0x56B9F440, + 0x56B8B780, 0x56B77AC0, 0x56B63E00, + 0x56B50140, 0x56B3C480, 0x56B287C0, + 0x56B14B00, 0x56B00E40, 0x56AED180, + 0x56AD94C0, 0x56AC5800, 0x56AB1B40, + 0x56A9DE80, 0x56A8A1C0, 0x56A76500, + 0x56A62840, 0x56A4EB80, 0x56A3AEC0, + 0x56A27200, 0x56A13540, 0x569FF880, + 0x569EBBC0, 0x569D7F00, 0x569C4240, + 0x569B0580, 0x5699C8C0, 0x56988C00, + 0x56974F40, 0x56961280, 0x5694D5C0, + 0x56939900, 0x56925C40, 0x56911F80, + 0x568FE2C0, 0x568EA600, 0x568D6940, + 0x568C2C80, 0x568AEFC0, 0x5689B300, + 0x56887640, 0x56873980, 0x5685FCC0, + 0x5684C000, 0x56838340, 0x56824680, + 0x568109C0, 0x567FCD00, 0x567E9040, + 0x567D5380, 0x567C16C0, 0x567ADA00, + 0x56799D40, 0x56786080, 0x567723C0, + 0x5675E700, 0x5674AA40, 0x56736D80, + 0x567230C0, 0x5670F400, 0x566FB740, + 0x566E7A80, 0x566D3DC0, 0x566C0100, + 0x566AC440, 0x56698780, 0x56684AC0, + 0x56670E00, 0x5665D140, 0x56649480, + 0x566357C0, 0x56621B00, 0x5660DE40, + 0x565FA180, 0x565E64C0, 0x565D2800, + 0x565BEB40, 0x565AAE80, 0x565971C0, + 0x56583500, 0x5656F840, 0x5655BB80, + 0x56547EC0, 0x56534200, 0x56520540, + 0x5650C880, 0x564F8BC0, 0x564E4F00, + 0x564D1240, 0x564BD580, 0x564A98C0, + 0x56495C00, 0x56481F40, 0x5646E280, + 0x5645A5C0, 0x56446900, 0x56432C40, + 0x5641EF80, 0x5640B2C0, 0x563F7600, + 0x563E3940, 0x563CFC80, 0x563BBFC0, + 0x563A8300, 0x56394640, 0x56380980, + 0x5636CCC0, 0x56359000, 0x56345340, + 0x56331680, 0x5631D9C0, 0x56309D00, + 0x562F6040, 0x562E2380, 0x562CE6C0, + 0x562BAA00, 0x562A6D40, 0x56293080, + 0x5627F3C0, 0x5626B700, 0x56257A40, + 0x56243D80, 0x562300C0, 0x5621C400, + 0x56208740, 0x561F4A80, 0x561E0DC0, + 0x561CD100, 0x561B9440, 0x561A5780, + 0x56191AC0, 0x5617DE00, 0x5616A140, + 0x56156480, 0x561427C0, 0x5612EB00, + 0x5611AE40, 0x56107180, 0x560F34C0, + 0x560DF800, 0x560CBB40, 0x560B7E80, + 0x560A41C0, 0x56090500, 0x5607C840, + 0x56068B80, 0x56054EC0, 0x56041200, + 0x5602D540, 0x56019880, 0x56005BC0, + 0x55FF1F00, 0x55FDE240, 0x55FCA580, + 0x55FB68C0, 0x55FA2C00, 0x55F8EF40, + 0x55F7B280, 0x55F675C0, 0x55F53900, + 0x55F3FC40, 0x55F2BF80, 0x55F182C0, + 0x55F04600, 0x55EF0940, 0x55EDCC80, + 0x55EC8FC0, 0x55EB5300, 0x55EA1640, + 0x55E8D980, 0x55E79CC0, 0x55E66000, + 0x55E52340, 0x55E3E680, 0x55E2A9C0, + 0x55E16D00, 0x55E03040, 0x55DEF380, + 0x55DDB6C0, 0x55DC7A00, 0x55DB3D40, + 0x55DA0080, 0x55D8C3C0, 0x55D78700, + 0x55D64A40, 0x55D50D80, 0x55D3D0C0, + 0x55D29400, 0x55D15740, 0x55D01A80, + 0x55CEDDC0, 0x55CDA100, 0x55CC6440, + 0x55CB2780, 0x55C9EAC0, 0x55C8AE00, + 0x55C77140, 0x55C63480, 0x55C4F7C0, + 0x55C3BB00, 0x55C27E40, 0x55C14180, + 0x55C004C0, 0x55BEC800, 0x55BD8B40, + 0x55BC4E80, 0x55BB11C0, 0x55B9D500, + 0x55B89840, 0x55B75B80, 0x55B61EC0, + 0x55B4E200, 0x55B3A540, 0x55B26880, + 0x55B12BC0, 0x55AFEF00, 0x55AEB240, + 0x55AD7580, 0x55AC38C0, 0x55AAFC00, + 0x55A9BF40, 0x55A88280, 0x55A745C0, + 0x55A60900, 0x55A4CC40, 0x55A38F80, + 0x55A252C0, 0x55A11600, 0x559FD940, + 0x559E9C80, 0x559D5FC0, 0x559C2300, + 0x559AE640, 0x5599A980, 0x55986CC0, + 0x55973000, 0x5595F340, 0x5594B680, + 0x559379C0, 0x55923D00, 0x55910040, + 0x558FC380, 0x558E86C0, 0x558D4A00, + 0x558C0D40, 0x558AD080, 0x558993C0, + 0x55885700, 0x55871A40, 0x5585DD80, + 0x5584A0C0, 0x55836400, 0x55822740, + 0x5580EA80, 0x557FADC0, 0x557E7100, + 0x557D3440, 0x557BF780, 0x557ABAC0, + 0x55797E00, 0x55784140, 0x55770480, + 0x5575C7C0, 0x55748B00, 0x55734E40, + 0x55721180, 0x5570D4C0, 0x556F9800, + 0x556E5B40, 0x556D1E80, 0x556BE1C0, + 0x556AA500, 0x55696840, 0x55682B80, + 0x5566EEC0, 0x5565B200, 0x55647540, + 0x55633880, 0x5561FBC0, 0x5560BF00, + 0x555F8240, 0x555E4580, 0x555D08C0, + 0x555BCC00, 0x555A8F40, 0x55595280, + 0x555815C0, 0x5556D900, 0x55559C40, + 0x55545F80, 0x555322C0, 0x5551E600, + 0x5550A940, 0x554F6C80, 0x554E2FC0, + 0x554CF300, 0x554BB640, 0x554A7980, + 0x55493CC0, 0x554A0000, 0x5548DCC0, + 0x5547B980, 0x55469640, 0x55457300, + 0x55444FC0, 0x55432C80, 0x55420940, + 0x5540E600, 0x553FC2C0, 0x553E9F80, + 0x553D7C40, 0x553C5900, 0x553B35C0, + 0x553A1280, 0x5538EF40, 0x5537CC00, + 0x5536A8C0, 0x55358580, 0x55346240, + 0x55333F00, 0x55321BC0, 0x5530F880, + 0x552FD540, 0x552EB200, 0x552D8EC0, + 0x552C6B80, 0x552B4840, 0x552A2500, + 0x552901C0, 0x5527DE80, 0x5526BB40, + 0x55259800, 0x552474C0, 0x55235180, + 0x55222E40, 0x55210B00, 0x551FE7C0, + 0x551EC480, 0x551DA140, 0x551C7E00, + 0x551B5AC0, 0x551A3780, 0x55191440, + 0x5517F100, 0x5516CDC0, 0x5515AA80, + 0x55148740, 0x55136400, 0x551240C0, + 0x55111D80, 0x550FFA40, 0x550ED700, + 0x550DB3C0, 0x550C9080, 0x550B6D40, + 0x550A4A00, 0x550926C0, 0x55080380, + 0x5506E040, 0x5505BD00, 0x550499C0, + 0x55037680, 0x55025340, 0x55013000, + 0x55000CC0, 0x54FEE980, 0x54FDC640, + 0x54FCA300, 0x54FB7FC0, 0x54FA5C80, + 0x54F93940, 0x54F81600, 0x54F6F2C0, + 0x54F5CF80, 0x54F4AC40, 0x54F38900, + 0x54F265C0, 0x54F14280, 0x54F01F40, + 0x54EEFC00, 0x54EDD8C0, 0x54ECB580, + 0x54EB9240, 0x54EA6F00, 0x54E94BC0, + 0x54E82880, 0x54E70540, 0x54E5E200, + 0x54E4BEC0, 0x54E39B80, 0x54E27840, + 0x54E15500, 0x54E031C0, 0x54DF0E80, + 0x54DDEB40, 0x54DCC800, 0x54DBA4C0, + 0x54DA8180, 0x54D95E40, 0x54D83B00, + 0x54D717C0, 0x54D5F480, 0x54D4D140, + 0x54D3AE00, 0x54D28AC0, 0x54D16780, + 0x54D04440, 0x54CF2100, 0x54CDFDC0, + 0x54CCDA80, 0x54CBB740, 0x54CA9400, + 0x54C970C0, 0x54C84D80, 0x54C72A40, + 0x54C60700, 0x54C4E3C0, 0x54C3C080, + 0x54C29D40, 0x54C17A00, 0x54C056C0, + 0x54BF3380, 0x54BE1040, 0x54BCED00, + 0x54BBC9C0, 0x54BAA680, 0x54B98340, + 0x54B86000, 0x54B73CC0, 0x54B61980, + 0x54B4F640, 0x54B3D300, 0x54B2AFC0, + 0x54B18C80, 0x54B06940, 0x54AF4600, + 0x54AE22C0, 0x54ACFF80, 0x54ABDC40, + 0x54AAB900, 0x54A995C0, 0x54A87280, + 0x54A74F40, 0x54A62C00, 0x54A508C0, + 0x54A3E580, 0x54A2C240, 0x54A19F00, + 0x54A07BC0, 0x549F5880, 0x549E3540, + 0x549D1200, 0x549BEEC0, 0x549ACB80, + 0x5499A840, 0x54988500, 0x549761C0, + 0x54963E80, 0x54951B40, 0x5493F800, + 0x5492D4C0, 0x5491B180, 0x54908E40, + 0x548F6B00, 0x548E47C0, 0x548D2480, + 0x548C0140, 0x548ADE00, 0x5489BAC0, + 0x54889780, 0x54877440, 0x54865100, + 0x54852DC0, 0x54840A80, 0x5482E740, + 0x5481C400, 0x5480A0C0, 0x547F7D80, + 0x547E5A40, 0x547D3700, 0x547C13C0, + 0x547AF080, 0x5479CD40, 0x5478AA00, + 0x547786C0, 0x54766380, 0x54754040, + 0x54741D00, 0x5472F9C0, 0x5471D680, + 0x5470B340, 0x546F9000, 0x546E6CC0, + 0x546D4980, 0x546C2640, 0x546B0300, + 0x5469DFC0, 0x5468BC80, 0x54679940, + 0x54667600, 0x546552C0, 0x54642F80, + 0x54630C40, 0x5461E900, 0x5460C5C0, + 0x545FA280, 0x545E7F40, 0x545D5C00, + 0x545C38C0, 0x545B1580, 0x5459F240, + 0x5458CF00, 0x5457ABC0, 0x54568880, + 0x54556540, 0x54544200, 0x54531EC0, + 0x5451FB80, 0x5450D840, 0x544FB500, + 0x544E91C0, 0x544D6E80, 0x544C4B40, + 0x544B2800, 0x544A04C0, 0x5448E180, + 0x5447BE40, 0x54469B00, 0x544577C0, + 0x54445480, 0x54433140, 0x54420E00, + 0x5440EAC0, 0x543FC780, 0x543EA440, + 0x543D8100, 0x543C5DC0, 0x543B3A80, + 0x543A1740, 0x5438F400, 0x5437D0C0, + 0x5436AD80, 0x54358A40, 0x54346700, + 0x543343C0, 0x54322080, 0x5430FD40, + 0x542FDA00, 0x542EB6C0, 0x542D9380, + 0x542C7040, 0x542B4D00, 0x542A29C0, + 0x54290680, 0x5427E340, 0x5426C000, + 0x54259CC0, 0x54247980, 0x54235640, + 0x54223300, 0x54210FC0, 0x541FEC80, + 0x541EC940, 0x541DA600, 0x541C82C0, + 0x541B5F80, 0x541A3C40, 0x54191900, + 0x5417F5C0, 0x5416D280, 0x5415AF40, + 0x54148C00, 0x541368C0, 0x54124580, + 0x54112240, 0x540FFF00, 0x540EDBC0, + 0x540DB880, 0x540C9540, 0x540B7200, + 0x540A4EC0, 0x54092B80, 0x54080840, + 0x5406E500, 0x5405C1C0, 0x54049E80, + 0x54037B40, 0x54025800, 0x540134C0, + 0x54001180, 0x53FEEE40, 0x53FDCB00, + 0x53FCA7C0, 0x53FB8480, 0x53FA6140, + 0x53F93E00, 0x53F81AC0, 0x53F6F780, + 0x53F5D440, 0x53F4B100, 0x53F38DC0, + 0x53F26A80, 0x53F14740, 0x53F02400, + 0x53EF00C0, 0x53EDDD80, 0x53ECBA40, + 0x53EB9700, 0x53EA73C0, 0x53E95080, + 0x53E82D40, 0x53E70A00, 0x53E5E6C0, + 0x53E4C380, 0x53E3A040, 0x53E27D00, + 0x53E159C0, 0x53E03680, 0x53DF1340, + 0x53DDF000, 0x53DCCCC0, 0x53DBA980, + 0x53DA8640, 0x53D96300, 0x53D83FC0, + 0x53D71C80, 0x53D5F940, 0x53D4D600, + 0x53D3B2C0, 0x53D28F80, 0x53D16C40, + 0x53D04900, 0x53CF25C0, 0x53CE0280, + 0x53CCDF40, 0x53CBBC00, 0x53CA98C0, + 0x53C97580, 0x53C85240, 0x53C72F00, + 0x53C60BC0, 0x53C4E880, 0x53C3C540, + 0x53C2A200, 0x53C17EC0, 0x53C05B80, + 0x53BF3840, 0x53BE1500, 0x53BCF1C0, + 0x53BBCE80, 0x53BAAB40, 0x53B98800, + 0x53B864C0, 0x53B74180, 0x53B61E40, + 0x53B4FB00, 0x53B3D7C0, 0x53B2B480, + 0x53B19140, 0x53B06E00, 0x53AF4AC0, + 0x53AE2780, 0x53AD0440, 0x53ABE100, + 0x53AABDC0, 0x53A99A80, 0x53A87740, + 0x53A75400, 0x53A630C0, 0x53A50D80, + 0x53A3EA40, 0x53A2C700, 0x53A1A3C0, + 0x53A08080, 0x539F5D40, 0x539E3A00, + 0x539D16C0, 0x539BF380, 0x539AD040, + 0x5399AD00, 0x539889C0, 0x53976680, + 0x53964340, 0x53952000, 0x5393FCC0, + 0x5392D980, 0x5391B640, 0x53909300, + 0x538F6FC0, 0x538E4C80, 0x538D2940, + 0x538C0600, 0x538AE2C0, 0x5389BF80, + 0x53889C40, 0x53877900, 0x538655C0, + 0x53853280, 0x53840F40, 0x5382EC00, + 0x5381C8C0, 0x5380A580, 0x537F8240, + 0x537E5F00, 0x537D3BC0, 0x537C1880, + 0x537AF540, 0x5379D200, 0x5378AEC0, + 0x53778B80, 0x53766840, 0x53754500, + 0x537421C0, 0x5372FE80, 0x5371DB40, + 0x5370B800, 0x536F94C0, 0x536E7180, + 0x536D4E40, 0x536C2B00, 0x536B07C0, + 0x5369E480, 0x5368C140, 0x53679E00, + 0x53667AC0, 0x53655780, 0x53643440, + 0x53631100, 0x5361EDC0, 0x5360CA80, + 0x535FA740, 0x535E8400, 0x535D60C0, + 0x535C3D80, 0x535B1A40, 0x5359F700, + 0x5358D3C0, 0x5357B080, 0x53568D40, + 0x53556A00, 0x535446C0, 0x53532380, + 0x53520040, 0x5350DD00, 0x534FB9C0, + 0x534E9680, 0x534D7340, 0x534C5000, + 0x534B2CC0, 0x534A0980, 0x5348E640, + 0x5347C300, 0x53469FC0, 0x53457C80, + 0x53445940, 0x53433600, 0x534212C0, + 0x5340EF80, 0x533FCC40, 0x533EA900, + 0x533D85C0, 0x533C6280, 0x533B3F40, + 0x533A1C00, 0x5338F8C0, 0x5337D580, + 0x5336B240, 0x53358F00, 0x53346BC0, + 0x53334880, 0x53322540, 0x53310200, + 0x532FDEC0, 0x532EBB80, 0x532D9840, + 0x532C7500, 0x532B51C0, 0x532A2E80, + 0x53290B40, 0x5327E800, 0x5326C4C0, + 0x5325A180, 0x53247E40, 0x53235B00, + 0x532237C0, 0x53211480, 0x531FF140, + 0x531ECE00, 0x531DAAC0, 0x531C8780, + 0x531B6440, 0x531A4100, 0x53191DC0, + 0x5317FA80, 0x5316D740, 0x5315B400, + 0x531490C0, 0x53136D80, 0x53124A40, + 0x53112700, 0x531003C0, 0x530EE080, + 0x530DBD40, 0x530C9A00, 0x530B76C0, + 0x530A5380, 0x53093040, 0x53080D00, + 0x5306E9C0, 0x5305C680, 0x5304A340, + 0x53038000, 0x53025CC0, 0x53013980, + 0x53001640, 0x52FEF300, 0x52FDCFC0, + 0x52FCAC80, 0x52FB8940, 0x52FA6600, + 0x52F942C0, 0x52F81F80, 0x52F6FC40, + 0x52F5D900, 0x52F4B5C0, 0x52F39280, + 0x52F26F40, 0x52F14C00, 0x52F028C0, + 0x52EF0580, 0x52EDE240, 0x52ECBF00, + 0x52EB9BC0, 0x52EA7880, 0x52E95540, + 0x52E83200, 0x52E70EC0, 0x52E5EB80, + 0x52E4C840, 0x52E3A500, 0x52E281C0, + 0x52E15E80, 0x52E03B40, 0x52DF1800, + 0x52DDF4C0, 0x52DCD180, 0x52DBAE40, + 0x52DA8B00, 0x52D967C0, 0x52D84480, + 0x52D72140, 0x52D5FE00, 0x52D4DAC0, + 0x52D3B780, 0x52D29440, 0x52D17100, + 0x52D04DC0, 0x52CF2A80, 0x52CE0740, + 0x52CCE400, 0x52CBC0C0, 0x52CA9D80, + 0x52C97A40, 0x52C85700, 0x52C733C0, + 0x52C61080, 0x52C4ED40, 0x52C3CA00, + 0x52C2A6C0, 0x52C18380, 0x52C06040, + 0x52BF3D00, 0x52BE19C0, 0x52BCF680, + 0x52BBD340, 0x52BAB000, 0x52B98CC0, + 0x52B86980, 0x52B74640, 0x52B62300, + 0x52B4FFC0, 0x52B3DC80, 0x52B2B940, + 0x52B19600, 0x52B072C0, 0x52AF4F80, + 0x52AE2C40, 0x52AD0900, 0x52ABE5C0, + 0x52AAC280, 0x52A99F40, 0x52A87C00, + 0x52A758C0, 0x52A63580, 0x52A51240, + 0x52A3EF00, 0x52A2CBC0, 0x52A1A880, + 0x52A08540, 0x529F6200, 0x529E3EC0, + 0x529D1B80, 0x529BF840, 0x529AD500, + 0x5299B1C0, 0x52988E80, 0x52976B40, + 0x52964800, 0x529524C0, 0x52940180, + 0x5292DE40, 0x5291BB00, 0x529097C0, + 0x528F7480, 0x528E5140, 0x528D2E00, + 0x528C0AC0, 0x528AE780, 0x5289C440, + 0x5288A100, 0x52877DC0, 0x52865A80, + 0x52853740, 0x52841400, 0x5282F0C0, + 0x5281CD80, 0x5280AA40, 0x527F8700, + 0x527E63C0, 0x527D4080, 0x527C1D40, + 0x527AFA00, 0x5279D6C0, 0x5278B380, + 0x52779040, 0x52766D00, 0x527549C0, + 0x52742680, 0x52730340, 0x5271E000, + 0x5270BCC0, 0x526F9980, 0x526E7640, + 0x526D5300, 0x526C2FC0, 0x526B0C80, + 0x5269E940, 0x5268C600, 0x5267A2C0, + 0x52667F80, 0x52655C40, 0x52643900, + 0x526315C0, 0x5261F280, 0x5260CF40, + 0x525FAC00, 0x525E88C0, 0x525D6580, + 0x525C4240, 0x525B1F00, 0x5259FBC0, + 0x5258D880, 0x5257B540, 0x52569200, + 0x52556EC0, 0x52544B80, 0x52532840, + 0x52520500, 0x5250E1C0, 0x524FBE80, + 0x524E9B40, 0x524D7800, 0x524C54C0, + 0x524B3180, 0x524A0E40, 0x5248EB00, + 0x5247C7C0, 0x5246A480, 0x52458140, + 0x52445E00, 0x52433AC0, 0x52421780, + 0x5240F440, 0x523FD100, 0x523EADC0, + 0x523D8A80, 0x523C6740, 0x523B4400, + 0x523A20C0, 0x5238FD80, 0x5237DA40, + 0x5236B700, 0x523593C0, 0x52347080, + 0x52334D40, 0x52322A00, 0x523106C0, + 0x522FE380, 0x522EC040, 0x522D9D00, + 0x522C79C0, 0x522B5680, 0x522A3340, + 0x52291000, 0x5227ECC0, 0x5226C980, + 0x5225A640, 0x52248300, 0x52235FC0, + 0x52223C80, 0x52211940, 0x521FF600, + 0x521ED2C0, 0x521DAF80, 0x521C8C40, + 0x521B6900, 0x521A45C0, 0x52192280, + 0x5217FF40, 0x5216DC00, 0x5215B8C0, + 0x52149580, 0x52137240, 0x52124F00, + 0x52112BC0, 0x52100880, 0x520EE540, + 0x520DC200, 0x520C9EC0, 0x520B7B80, + 0x520A5840, 0x52093500, 0x520811C0, + 0x5206EE80, 0x5205CB40, 0x5204A800, + 0x520384C0, 0x52026180, 0x52013E40, + 0x52001B00, 0x51FEF7C0, 0x51FDD480, + 0x51FCB140, 0x51FB8E00, 0x51FA6AC0, + 0x51F94780, 0x51F82440, 0x51F70100, + 0x51F5DDC0, 0x51F4BA80, 0x51F39740, + 0x51F27400, 0x51F150C0, 0x51F02D80, + 0x51EF0A40, 0x51EDE700, 0x51ECC3C0, + 0x51EBA080, 0x51EA7D40, 0x51E95A00, + 0x51E836C0, 0x51E71380, 0x51E5F040, + 0x51E4CD00, 0x51E3A9C0, 0x51E28680, + 0x51E16340, 0x51E04000, 0x51DF1CC0, + 0x51DDF980, 0x51DCD640, 0x51DBB300, + 0x51DA8FC0, 0x51D96C80, 0x51D84940, + 0x51D72600, 0x51D602C0, 0x51D4DF80, + 0x51D3BC40, 0x51D29900, 0x51D175C0, + 0x51D05280, 0x51CF2F40, 0x51CE0C00, + 0x51CCE8C0, 0x51CBC580, 0x51CAA240, + 0x51C97F00, 0x51C85BC0, 0x51C73880, + 0x51C61540, 0x51C4F200, 0x51C3CEC0, + 0x51C2AB80, 0x51C18840, 0x51C06500, + 0x51BF41C0, 0x51BE1E80, 0x51BCFB40, + 0x51BBD800, 0x51BAB4C0, 0x51B99180, + 0x51B86E40, 0x51B74B00, 0x51B627C0, + 0x51B50480, 0x51B3E140, 0x51B2BE00, + 0x51B19AC0, 0x51B07780, 0x51AF5440, + 0x51AE3100, 0x51AD0DC0, 0x51ABEA80, + 0x51AAC740, 0x51A9A400, 0x51A880C0, + 0x51A75D80, 0x51A63A40, 0x51A51700, + 0x51A3F3C0, 0x51A2D080, 0x51A1AD40, + 0x51A08A00, 0x519F66C0, 0x519E4380, + 0x519D2040, 0x519BFD00, 0x519AD9C0, + 0x5199B680, 0x51989340, 0x51977000, + 0x51964CC0, 0x51952980, 0x51940640, + 0x5192E300, 0x5191BFC0, 0x51909C80, + 0x518F7940, 0x518E5600, 0x518D32C0, + 0x518C0F80, 0x518AEC40, 0x5189C900, + 0x5188A5C0, 0x51878280, 0x51865F40, + 0x51853C00, 0x518418C0, 0x5182F580, + 0x5181D240, 0x5180AF00, 0x517F8BC0, + 0x517E6880, 0x517D4540, 0x517C2200, + 0x517AFEC0, 0x5179DB80, 0x5178B840, + 0x51779500, 0x517671C0, 0x51754E80, + 0x51742B40, 0x51730800, 0x5171E4C0, + 0x5170C180, 0x516F9E40, 0x516E7B00, + 0x516D57C0, 0x516C3480, 0x516B1140, + 0x5169EE00, 0x5168CAC0, 0x5167A780, + 0x51668440, 0x51656100, 0x51643DC0, + 0x51631A80, 0x5161F740, 0x5160D400, + 0x515FB0C0, 0x515E8D80, 0x515D6A40, + 0x515C4700, 0x515B23C0, 0x515A0080, + 0x5158DD40, 0x5157BA00, 0x515696C0, + 0x51557380, 0x51545040, 0x51532D00, + 0x515209C0, 0x5150E680, 0x514FC340, + 0x514EA000, 0x514D7CC0, 0x514C5980, + 0x514B3640, 0x514A1300, 0x5148EFC0, + 0x5147CC80, 0x5146A940, 0x51458600, + 0x514462C0, 0x51433F80, 0x51421C40, + 0x5140F900, 0x513FD5C0, 0x513EB280, + 0x513D8F40, 0x513C6C00, 0x513B48C0, + 0x513A2580, 0x51390240, 0x5137DF00, + 0x5136BBC0, 0x51359880, 0x51347540, + 0x51335200, 0x51322EC0, 0x51310B80, + 0x512FE840, 0x512EC500, 0x512DA1C0, + 0x512C7E80, 0x512B5B40, 0x512A3800, + 0x512914C0, 0x5127F180, 0x5126CE40, + 0x5125AB00, 0x512487C0, 0x51236480, + 0x51224140, 0x51211E00, 0x511FFAC0, + 0x511ED780, 0x511DB440, 0x511C9100, + 0x511B6DC0, 0x511A4A80, 0x51192740, + 0x51180400, 0x5116E0C0, 0x5115BD80, + 0x51149A40, 0x51137700, 0x511253C0, + 0x51113080, 0x51100D40, 0x510EEA00, + 0x510DC6C0, 0x510CA380, 0x510B8040, + 0x510A5D00, 0x510939C0, 0x51081680, + 0x5106F340, 0x5105D000, 0x5104ACC0, + 0x51038980, 0x51026640, 0x51014300, + 0x51001FC0, 0x50FEFC80, 0x50FDD940, + 0x50FCB600, 0x50FB92C0, 0x50FA6F80, + 0x50F94C40, 0x50F82900, 0x50F705C0, + 0x50F5E280, 0x50F4BF40, 0x50F39C00, + 0x50F278C0, 0x50F15580, 0x50F03240, + 0x50EF0F00, 0x50EDEBC0, 0x50ECC880, + 0x50EBA540, 0x50EA8200, 0x50E95EC0, + 0x50E83B80, 0x50E71840, 0x50E5F500, + 0x50E4D1C0, 0x50E3AE80, 0x50E28B40, + 0x50E16800, 0x50E044C0, 0x50DF2180, + 0x50DDFE40, 0x50DCDB00, 0x50DBB7C0, + 0x50DA9480, 0x50D97140, 0x50D84E00, + 0x50D72AC0, 0x50D60780, 0x50D4E440, + 0x50D3C100, 0x50D29DC0, 0x50D17A80, + 0x50D05740, 0x50CF3400, 0x50CE10C0, + 0x50CCED80, 0x50CBCA40, 0x50CAA700, + 0x50C983C0, 0x50C86080, 0x50C73D40, + 0x50C61A00, 0x50C4F6C0, 0x50C3D380, + 0x50C2B040, 0x50C18D00, 0x50C069C0, + 0x50BF4680, 0x50BE2340, 0x50BD0000, + 0x50BBDCC0, 0x50BAB980, 0x50B99640, + 0x50B87300, 0x50B74FC0, 0x50B62C80, + 0x50B50940, 0x50B3E600, 0x50B2C2C0, + 0x50B19F80, 0x50B07C40, 0x50AF5900, + 0x50AE35C0, 0x50AD1280, 0x50ABEF40, + 0x50AACC00, 0x50A9A8C0, 0x50A88580, + 0x50A76240, 0x50A63F00, 0x50A51BC0, + 0x50A3F880, 0x50A2D540, 0x50A1B200, + 0x50A08EC0, 0x509F6B80, 0x509E4840, + 0x509D2500, 0x509C01C0, 0x509ADE80, + 0x5099BB40, 0x50989800, 0x509774C0, + 0x50965180, 0x50952E40, 0x50940B00, + 0x5092E7C0, 0x5091C480, 0x5090A140, + 0x508F7E00, 0x508E5AC0, 0x508D3780, + 0x508C1440, 0x508AF100, 0x5089CDC0, + 0x5088AA80, 0x50878740, 0x50866400, + 0x508540C0, 0x50841D80, 0x5082FA40, + 0x5081D700, 0x5080B3C0, 0x507F9080, + 0x507E6D40, 0x507D4A00, 0x507C26C0, + 0x507B0380, 0x5079E040, 0x5078BD00, + 0x507799C0, 0x50767680, 0x50755340, + 0x50743000, 0x50730CC0, 0x5071E980, + 0x5070C640, 0x506FA300, 0x506E7FC0, + 0x506D5C80, 0x506C3940, 0x506B1600, + 0x5069F2C0, 0x5068CF80, 0x5067AC40, + 0x50668900, 0x506565C0, 0x50644280, + 0x50631F40, 0x5061FC00, 0x5060D8C0, + 0x505FB580, 0x505E9240, 0x505D6F00, + 0x505C4BC0, 0x505B2880, 0x505A0540, + 0x5058E200, 0x5057BEC0, 0x50569B80, + 0x50557840, 0x50545500, 0x505331C0, + 0x50520E80, 0x5050EB40, 0x504FC800, + 0x504EA4C0, 0x504D8180, 0x504C5E40, + 0x504B3B00, 0x504A17C0, 0x5048F480, + 0x5047D140, 0x5046AE00, 0x50458AC0, + 0x50446780, 0x50434440, 0x50422100, + 0x5040FDC0, 0x503FDA80, 0x503EB740, + 0x503D9400, 0x503C70C0, 0x503B4D80, + 0x503A2A40, 0x50390700, 0x5037E3C0, + 0x5036C080, 0x50359D40, 0x50347A00, + 0x503356C0, 0x50323380, 0x50311040, + 0x502FED00, 0x502EC9C0, 0x502DA680, + 0x502C8340, 0x502B6000, 0x502A3CC0, + 0x50291980, 0x5027F640, 0x5026D300, + 0x5025AFC0, 0x50248C80, 0x50236940, + 0x50224600, 0x502122C0, 0x501FFF80, + 0x501EDC40, 0x501DB900, 0x501C95C0, + 0x501B7280, 0x501A4F40, 0x50192C00, + 0x501808C0, 0x5016E580, 0x5015C240, + 0x50149F00, 0x50137BC0, 0x50125880, + 0x50113540, 0x50101200, 0x500EEEC0, + 0x500DCB80, 0x500CA840, 0x500B8500, + 0x500A61C0, 0x50093E80, 0x50081B40, + 0x5006F800, 0x5005D4C0, 0x5004B180, + 0x50038E40, 0x50026B00, 0x500147C0, + 0x50002480, 0x4FFF0140, 0x4FFDDE00, + 0x4FFCBAC0, 0x4FFB9780, 0x4FFA7440, + 0x4FF95100, 0x4FF82DC0, 0x4FF70A80, + 0x4FF5E740, 0x4FF4C400, 0x4FF3A0C0, + 0x4FF27D80, 0x4FF15A40, 0x4FF03700, + 0x4FEF13C0, 0x4FEDF080, 0x4FECCD40, + 0x4FEBAA00, 0x4FEA86C0, 0x4FE96380, + 0x4FE84040, 0x4FE71D00, 0x4FE5F9C0, + 0x4FE4D680, 0x4FE3B340, 0x4FE29000, + 0x4FE16CC0, 0x4FE04980, 0x4FDF2640, + 0x4FDE0300, 0x4FDCDFC0, 0x4FDBBC80, + 0x4FDA9940, 0x4FD97600, 0x4FD852C0, + 0x4FD72F80, 0x4FD60C40, 0x4FD4E900, + 0x4FD3C5C0, 0x4FD2A280, 0x4FD17F40, + 0x4FD05C00, 0x4FCF38C0, 0x4FCE1580, + 0x4FCCF240, 0x4FCBCF00, 0x4FCAABC0, + 0x4FC98880, 0x4FC86540, 0x4FC74200, + 0x4FC61EC0, 0x4FC4FB80, 0x4FC3D840, + 0x4FC2B500, 0x4FC191C0, 0x4FC06E80, + 0x4FBF4B40, 0x4FBE2800, 0x4FBD04C0, + 0x4FBBE180, 0x4FBABE40, 0x4FB99B00, + 0x4FB877C0, 0x4FB75480, 0x4FB63140, + 0x4FB50E00, 0x4FB3EAC0, 0x4FB2C780, + 0x4FB1A440, 0x4FB08100, 0x4FAF5DC0, + 0x4FAE3A80, 0x4FAD1740, 0x4FABF400, + 0x4FAAD0C0, 0x4FA9AD80, 0x4FA88A40, + 0x4FA76700, 0x4FA643C0, 0x4FA52080, + 0x4FA3FD40, 0x4FA2DA00, 0x4FA1B6C0, + 0x4FA09380, 0x4F9F7040, 0x4F9E4D00, + 0x4F9D29C0, 0x4F9C0680, 0x4F9AE340, + 0x4F99C000, 0x4F989CC0, 0x4F977980, + 0x4F965640, 0x4F953300, 0x4F940FC0, + 0x4F92EC80, 0x4F91C940, 0x4F90A600, + 0x4F8F82C0, 0x4F8E5F80, 0x4F8D3C40, + 0x4F8C1900, 0x4F8AF5C0, 0x4F89D280, + 0x4F88AF40, 0x4F878C00, 0x4F8668C0, + 0x4F854580, 0x4F842240, 0x4F82FF00, + 0x4F81DBC0, 0x4F80B880, 0x4F7F9540, + 0x4F7E7200, 0x4F7D4EC0, 0x4F7C2B80, + 0x4F7B0840, 0x4F79E500, 0x4F78C1C0, + 0x4F779E80, 0x4F767B40, 0x4F755800, + 0x4F7434C0, 0x4F731180, 0x4F71EE40, + 0x4F70CB00, 0x4F6FA7C0, 0x4F6E8480, + 0x4F6D6140, 0x4F6C3E00, 0x4F6B1AC0, + 0x4F69F780, 0x4F68D440, 0x4F67B100, + 0x4F668DC0, 0x4F656A80, 0x4F644740, + 0x4F632400, 0x4F6200C0, 0x4F60DD80, + 0x4F5FBA40, 0x4F5E9700, 0x4F5D73C0, + 0x4F5C5080, 0x4F5B2D40, 0x4F5A0A00, + 0x4F58E6C0, 0x4F57C380, 0x4F56A040, + 0x4F557D00, 0x4F5459C0, 0x4F533680, + 0x4F521340, 0x4F50F000, 0x4F4FCCC0, + 0x4F4EA980, 0x4F4D8640, 0x4F4C6300, + 0x4F4B3FC0, 0x4F4A1C80, 0x4F48F940, + 0x4F47D600, 0x4F46B2C0, 0x4F458F80, + 0x4F446C40, 0x4F434900, 0x4F4225C0, + 0x4F410280, 0x4F3FDF40, 0x4F3EBC00, + 0x4F3D98C0, 0x4F3C7580, 0x4F3B5240, + 0x4F3A2F00, 0x4F390BC0, 0x4F37E880, + 0x4F36C540, 0x4F35A200, 0x4F347EC0, + 0x4F335B80, 0x4F323840, 0x4F311500, + 0x4F2FF1C0, 0x4F2ECE80, 0x4F2DAB40, + 0x4F2C8800, 0x4F2B64C0, 0x4F2A4180, + 0x4F291E40, 0x4F27FB00, 0x4F26D7C0, + 0x4F25B480, 0x4F249140, 0x4F236E00, + 0x4F224AC0, 0x4F212780, 0x4F200440, + 0x4F1EE100, 0x4F1DBDC0, 0x4F1C9A80, + 0x4F1B7740, 0x4F1A5400, 0x4F1930C0, + 0x4F180D80, 0x4F16EA40, 0x4F15C700, + 0x4F14A3C0, 0x4F138080, 0x4F125D40, + 0x4F113A00, 0x4F1016C0, 0x4F0EF380, + 0x4F0DD040, 0x4F0CAD00, 0x4F0B89C0, + 0x4F0A6680, 0x4F094340, 0x4F082000, + 0x4F06FCC0, 0x4F05D980, 0x4F04B640, + 0x4F039300, 0x4F026FC0, 0x4F014C80, + 0x4F002940, 0x4EFF0600, 0x4EFDE2C0, + 0x4EFCBF80, 0x4EFB9C40, 0x4EFA7900, + 0x4EF955C0, 0x4EF83280, 0x4EF70F40, + 0x4EF5EC00, 0x4EF4C8C0, 0x4EF3A580, + 0x4EF28240, 0x4EF15F00, 0x4EF03BC0, + 0x4EEF1880, 0x4EEDF540, 0x4EECD200, + 0x4EEBAEC0, 0x4EEA8B80, 0x4EE96840, + 0x4EE84500, 0x4EE721C0, 0x4EE5FE80, + 0x4EE4DB40, 0x4EE3B800, 0x4EE294C0, + 0x4EE17180, 0x4EE04E40, 0x4EDF2B00, + 0x4EDE07C0, 0x4EDCE480, 0x4EDBC140, + 0x4EDA9E00, 0x4ED97AC0, 0x4ED85780, + 0x4ED73440, 0x4ED61100, 0x4ED4EDC0, + 0x4ED3CA80, 0x4ED2A740, 0x4ED18400, + 0x4ED060C0, 0x4ECF3D80, 0x4ECE1A40, + 0x4ECCF700, 0x4ECBD3C0, 0x4ECAB080, + 0x4EC98D40, 0x4EC86A00, 0x4EC746C0, + 0x4EC62380, 0x4EC50040, 0x4EC3DD00, + 0x4EC2B9C0, 0x4EC19680, 0x4EC07340, + 0x4EBF5000, 0x4EBE2CC0, 0x4EBD0980, + 0x4EBBE640, 0x4EBAC300, 0x4EB99FC0, + 0x4EB87C80, 0x4EB75940, 0x4EB63600, + 0x4EB512C0, 0x4EB3EF80, 0x4EB2CC40, + 0x4EB1A900, 0x4EB085C0, 0x4EAF6280, + 0x4EAE3F40, 0x4EAD1C00, 0x4EABF8C0, + 0x4EAAD580, 0x4EA9B240, 0x4EA88F00, + 0x4EA76BC0, 0x4EA64880, 0x4EA52540, + 0x4EA40200, 0x4EA2DEC0, 0x4EA1BB80, + 0x4EA09840, 0x4E9F7500, 0x4E9E51C0, + 0x4E9D2E80, 0x4E9C0B40, 0x4E9AE800, + 0x4E99C4C0, 0x4E98A180, 0x4E977E40, + 0x4E965B00, 0x4E9537C0, 0x4E941480, + 0x4E92F140, 0x4E91CE00, 0x4E90AAC0, + 0x4E8F8780, 0x4E8E6440, 0x4E8D4100, + 0x4E8C1DC0, 0x4E8AFA80, 0x4E89D740, + 0x4E88B400, 0x4E8790C0, 0x4E866D80, + 0x4E854A40, 0x4E842700, 0x4E8303C0, + 0x4E81E080, 0x4E80BD40, 0x4E7F9A00, + 0x4E7E76C0, 0x4E7D5380, 0x4E7C3040, + 0x4E7B0D00, 0x4E79E9C0, 0x4E78C680, + 0x4E77A340, 0x4E768000, 0x4E755CC0, + 0x4E743980, 0x4E731640, 0x4E71F300, + 0x4E70CFC0, 0x4E6FAC80, 0x4E6E8940, + 0x4E6D6600, 0x4E6C42C0, 0x4E6B1F80, + 0x4E69FC40, 0x4E68D900, 0x4E67B5C0, + 0x4E669280, 0x4E656F40, 0x4E644C00, + 0x4E6328C0, 0x4E620580, 0x4E60E240, + 0x4E5FBF00, 0x4E5E9BC0, 0x4E5D7880, + 0x4E5C5540, 0x4E5B3200, 0x4E5A0EC0, + 0x4E58EB80, 0x4E57C840, 0x4E56A500, + 0x4E5581C0, 0x4E545E80, 0x4E533B40, + 0x4E521800, 0x4E50F4C0, 0x4E4FD180, + 0x4E4EAE40, 0x4E4D8B00, 0x4E4C67C0, + 0x4E4B4480, 0x4E4A2140, 0x4E48FE00, + 0x4E47DAC0, 0x4E46B780, 0x4E459440, + 0x4E447100, 0x4E434DC0, 0x4E422A80, + 0x4E410740, 0x4E3FE400, 0x4E3EC0C0, + 0x4E3D9D80, 0x4E3C7A40, 0x4E3B5700, + 0x4E3A33C0, 0x4E391080, 0x4E37ED40, + 0x4E36CA00, 0x4E35A6C0, 0x4E348380, + 0x4E336040, 0x4E323D00, 0x4E3119C0, + 0x4E2FF680, 0x4E2ED340, 0x4E2DB000, + 0x4E2C8CC0, 0x4E2B6980, 0x4E2A4640, + 0x4E292300, 0x4E27FFC0, 0x4E26DC80, + 0x4E25B940, 0x4E249600, 0x4E2372C0, + 0x4E224F80, 0x4E212C40, 0x4E200900, + 0x4E1EE5C0, 0x4E1DC280, 0x4E1C9F40, + 0x4E1B7C00, 0x4E1A58C0, 0x4E193580, + 0x4E181240, 0x4E16EF00, 0x4E15CBC0, + 0x4E14A880, 0x4E138540, 0x4E126200, + 0x4E113EC0, 0x4E101B80, 0x4E0EF840, + 0x4E0DD500, 0x4E0CB1C0, 0x4E0B8E80, + 0x4E0A6B40, 0x4E094800, 0x4E0824C0, + 0x4E070180, 0x4E05DE40, 0x4E04BB00, + 0x4E0397C0, 0x4E027480, 0x4E015140, + 0x4E002E00, 0x4DFF0AC0, 0x4DFDE780, + 0x4DFCC440, 0x4DFBA100, 0x4DFA7DC0, + 0x4DF95A80, 0x4DF83740, 0x4DF71400, + 0x4DF5F0C0, 0x4DF4CD80, 0x4DF3AA40, + 0x4DF28700, 0x4DF163C0, 0x4DF04080, + 0x4DEF1D40, 0x4DEDFA00, 0x4DECD6C0, + 0x4DEBB380, 0x4DEA9040, 0x4DE96D00, + 0x4DE849C0, 0x4DE72680, 0x4DE60340, + 0x4DE4E000, 0x4DE3BCC0, 0x4DE29980, + 0x4DE17640, 0x4DE05300, 0x4DDF2FC0, + 0x4DDE0C80, 0x4DDCE940, 0x4DDBC600, + 0x4DDAA2C0, 0x4DD97F80, 0x4DD85C40, + 0x4DD73900, 0x4DD615C0, 0x4DD4F280, + 0x4DD3CF40, 0x4DD2AC00, 0x4DD188C0, + 0x4DD06580, 0x4DCF4240, 0x4DCE1F00, + 0x4DCCFBC0, 0x4DCBD880, 0x4DCAB540, + 0x4DC99200, 0x4DC86EC0, 0x4DC74B80, + 0x4DC62840, 0x4DC50500, 0x4DC3E1C0, + 0x4DC2BE80, 0x4DC19B40, 0x4DC07800, + 0x4DBF54C0, 0x4DBE3180, 0x4DBD0E40, + 0x4DBBEB00, 0x4DBAC7C0, 0x4DB9A480, + 0x4DB88140, 0x4DB75E00, 0x4DB63AC0, + 0x4DB51780, 0x4DB3F440, 0x4DB2D100, + 0x4DB1ADC0, 0x4DB08A80, 0x4DAF6740, + 0x4DAE4400, 0x4DAD20C0, 0x4DABFD80, + 0x4DAADA40, 0x4DA9B700, 0x4DA893C0, + 0x4DA77080, 0x4DA64D40, 0x4DA52A00, + 0x4DA406C0, 0x4DA2E380, 0x4DA1C040, + 0x4DA09D00, 0x4D9F79C0, 0x4D9E5680, + 0x4D9D3340, 0x4D9C1000, 0x4D9AECC0, + 0x4D99C980, 0x4D98A640, 0x4D978300, + 0x4D965FC0, 0x4D953C80, 0x4D941940, + 0x4D92F600, 0x4D91D2C0, 0x4D90AF80, + 0x4D8F8C40, 0x4D8E6900, 0x4D8D45C0, + 0x4D8C2280, 0x4D8AFF40, 0x4D89DC00, + 0x4D88B8C0, 0x4D879580, 0x4D867240, + 0x4D854F00, 0x4D842BC0, 0x4D830880, + 0x4D81E540, 0x4D80C200, 0x4D7F9EC0, + 0x4D7E7B80, 0x4D7D5840, 0x4D7C3500, + 0x4D7B11C0, 0x4D79EE80, 0x4D78CB40, + 0x4D77A800, 0x4D7684C0, 0x4D756180, + 0x4D743E40, 0x4D731B00, 0x4D71F7C0, + 0x4D70D480, 0x4D6FB140, 0x4D6E8E00, + 0x4D6D6AC0, 0x4D6C4780, 0x4D6B2440, + 0x4D6A0100, 0x4D68DDC0, 0x4D67BA80, + 0x4D669740, 0x4D657400, 0x4D6450C0, + 0x4D632D80, 0x4D620A40, 0x4D60E700, + 0x4D5FC3C0, 0x4D5EA080, 0x4D5D7D40, + 0x4D5C5A00, 0x4D5B36C0, 0x4D5A1380, + 0x4D58F040, 0x4D57CD00, 0x4D56A9C0, + 0x4D558680, 0x4D546340, 0x4D534000, + 0x4D521CC0, 0x4D50F980, 0x4D4FD640, + 0x4D4EB300, 0x4D4D8FC0, 0x4D4C6C80, + 0x4D4B4940, 0x4D4A2600, 0x4D4902C0, + 0x4D47DF80, 0x4D46BC40, 0x4D459900, + 0x4D4475C0, 0x4D435280, 0x4D422F40, + 0x4D410C00, 0x4D3FE8C0, 0x4D3EC580, + 0x4D3DA240, 0x4D3C7F00, 0x4D3B5BC0, + 0x4D3A3880, 0x4D391540, 0x4D37F200, + 0x4D36CEC0, 0x4D35AB80, 0x4D348840, + 0x4D336500, 0x4D3241C0, 0x4D311E80, + 0x4D2FFB40, 0x4D2ED800, 0x4D2DB4C0, + 0x4D2C9180, 0x4D2B6E40, 0x4D2A4B00, + 0x4D2927C0, 0x4D280480, 0x4D26E140, + 0x4D25BE00, 0x4D249AC0, 0x4D237780, + 0x4D225440, 0x4D213100, 0x4D200DC0, + 0x4D1EEA80, 0x4D1DC740, 0x4D1CA400, + 0x4D1B80C0, 0x4D1A5D80, 0x4D193A40, + 0x4D181700, 0x4D16F3C0, 0x4D15D080, + 0x4D14AD40, 0x4D138A00, 0x4D1266C0, + 0x4D114380, 0x4D102040, 0x4D0EFD00, + 0x4D0DD9C0, 0x4D0CB680, 0x4D0B9340, + 0x4D0A7000, 0x4D094CC0, 0x4D082980, + 0x4D070640, 0x4D05E300, 0x4D04BFC0, + 0x4D039C80, 0x4D027940, 0x4D015600, + 0x4D0032C0, 0x4CFF0F80, 0x4CFDEC40, + 0x4CFCC900, 0x4CFBA5C0, 0x4CFA8280, + 0x4CF95F40, 0x4CF83C00, 0x4CF718C0, + 0x4CF5F580, 0x4CF4D240, 0x4CF3AF00, + 0x4CF28BC0, 0x4CF16880, 0x4CF04540, + 0x4CEF2200, 0x4CEDFEC0, 0x4CECDB80, + 0x4CEBB840, 0x4CEA9500, 0x4CE971C0, + 0x4CE84E80, 0x4CE72B40, 0x4CE60800, + 0x4CE4E4C0, 0x4CE3C180, 0x4CE29E40, + 0x4CE17B00, 0x4CE057C0, 0x4CDF3480, + 0x4CDE1140, 0x4CDCEE00, 0x4CDBCAC0, + 0x4CDAA780, 0x4CD98440, 0x4CD86100, + 0x4CD73DC0, 0x4CD61A80, 0x4CD4F740, + 0x4CD3D400, 0x4CD2B0C0, 0x4CD18D80, + 0x4CD06A40, 0x4CCF4700, 0x4CCE23C0, + 0x4CCD0080, 0x4CCBDD40, 0x4CCABA00, + 0x4CC996C0, 0x4CC87380, 0x4CC75040, + 0x4CC62D00, 0x4CC509C0, 0x4CC3E680, + 0x4CC2C340, 0x4CC1A000, 0x4CC07CC0, + 0x4CBF5980, 0x4CBE3640, 0x4CBD1300, + 0x4CBBEFC0, 0x4CBACC80, 0x4CB9A940, + 0x4CB88600, 0x4CB762C0, 0x4CB63F80, + 0x4CB51C40, 0x4CB3F900, 0x4CB2D5C0, + 0x4CB1B280, 0x4CB08F40, 0x4CAF6C00, + 0x4CAE48C0, 0x4CAD2580, 0x4CAC0240, + 0x4CAADF00, 0x4CA9BBC0, 0x4CA89880, + 0x4CA77540, 0x4CA65200, 0x4CA52EC0, + 0x4CA40B80, 0x4CA2E840, 0x4CA1C500, + 0x4CA0A1C0, 0x4C9F7E80, 0x4C9E5B40, + 0x4C9D3800, 0x4C9C14C0, 0x4C9AF180, + 0x4C99CE40, 0x4C98AB00, 0x4C9787C0, + 0x4C966480, 0x4C954140, 0x4C941E00, + 0x4C92FAC0, 0x4C91D780, 0x4C90B440, + 0x4C8F9100, 0x4C8E6DC0, 0x4C8D4A80, + 0x4C8C2740, 0x4C8B0400, 0x4C89E0C0, + 0x4C88BD80, 0x4C879A40, 0x4C867700, + 0x4C8553C0, 0x4C843080, 0x4C830D40, + 0x4C81EA00, 0x4C80C6C0, 0x4C7FA380, + 0x4C7E8040, 0x4C7D5D00, 0x4C7C39C0, + 0x4C7B1680, 0x4C79F340, 0x4C78D000, + 0x4C77ACC0, 0x4C768980, 0x4C756640, + 0x4C744300, 0x4C731FC0, 0x4C71FC80, + 0x4C70D940, 0x4C6FB600, 0x4C6E92C0, + 0x4C6D6F80, 0x4C6C4C40, 0x4C6B2900, + 0x4C6A05C0, 0x4C68E280, 0x4C67BF40, + 0x4C669C00, 0x4C6578C0, 0x4C645580, + 0x4C633240, 0x4C620F00, 0x4C60EBC0, + 0x4C5FC880, 0x4C5EA540, 0x4C5D8200, + 0x4C5C5EC0, 0x4C5B3B80, 0x4C5A1840, + 0x4C58F500, 0x4C57D1C0, 0x4C56AE80, + 0x4C558B40, 0x4C546800, 0x4C5344C0, + 0x4C522180, 0x4C50FE40, 0x4C4FDB00, + 0x4C4EB7C0, 0x4C4D9480, 0x4C4C7140, + 0x4C4B4E00, 0x4C4A2AC0, 0x4C490780, + 0x4C47E440, 0x4C46C100, 0x4C459DC0, + 0x4C447A80, 0x4C435740, 0x4C423400, + 0x4C4110C0, 0x4C3FED80, 0x4C3ECA40, + 0x4C3DA700, 0x4C3C83C0, 0x4C3B6080, + 0x4C3A3D40, 0x4C391A00, 0x4C37F6C0, + 0x4C36D380, 0x4C35B040, 0x4C348D00, + 0x4C3369C0, 0x4C324680, 0x4C312340, + 0x4C300000, 0x4C2EF2C0, 0x4C2DE580, + 0x4C2CD840, 0x4C2BCB00, 0x4C2ABDC0, + 0x4C29B080, 0x4C28A340, 0x4C279600, + 0x4C2688C0, 0x4C257B80, 0x4C246E40, + 0x4C236100, 0x4C2253C0, 0x4C214680, + 0x4C203940, 0x4C1F2C00, 0x4C1E1EC0, + 0x4C1D1180, 0x4C1C0440, 0x4C1AF700, + 0x4C19E9C0, 0x4C18DC80, 0x4C17CF40, + 0x4C16C200, 0x4C15B4C0, 0x4C14A780, + 0x4C139A40, 0x4C128D00, 0x4C117FC0, + 0x4C107280, 0x4C0F6540, 0x4C0E5800, + 0x4C0D4AC0, 0x4C0C3D80, 0x4C0B3040, + 0x4C0A2300, 0x4C0915C0, 0x4C080880, + 0x4C06FB40, 0x4C05EE00, 0x4C04E0C0, + 0x4C03D380, 0x4C02C640, 0x4C01B900, + 0x4C00ABC0, 0x4BFF9E80, 0x4BFE9140, + 0x4BFD8400, 0x4BFC76C0, 0x4BFB6980, + 0x4BFA5C40, 0x4BF94F00, 0x4BF841C0, + 0x4BF73480, 0x4BF62740, 0x4BF51A00, + 0x4BF40CC0, 0x4BF2FF80, 0x4BF1F240, + 0x4BF0E500, 0x4BEFD7C0, 0x4BEECA80, + 0x4BEDBD40, 0x4BECB000, 0x4BEBA2C0, + 0x4BEA9580, 0x4BE98840, 0x4BE87B00, + 0x4BE76DC0, 0x4BE66080, 0x4BE55340, + 0x4BE44600, 0x4BE338C0, 0x4BE22B80, + 0x4BE11E40, 0x4BE01100, 0x4BDF03C0, + 0x4BDDF680, 0x4BDCE940, 0x4BDBDC00, + 0x4BDACEC0, 0x4BD9C180, 0x4BD8B440, + 0x4BD7A700, 0x4BD699C0, 0x4BD58C80, + 0x4BD47F40, 0x4BD37200, 0x4BD264C0, + 0x4BD15780, 0x4BD04A40, 0x4BCF3D00, + 0x4BCE2FC0, 0x4BCD2280, 0x4BCC1540, + 0x4BCB0800, 0x4BC9FAC0, 0x4BC8ED80, + 0x4BC7E040, 0x4BC6D300, 0x4BC5C5C0, + 0x4BC4B880, 0x4BC3AB40, 0x4BC29E00, + 0x4BC190C0, 0x4BC08380, 0x4BBF7640, + 0x4BBE6900, 0x4BBD5BC0, 0x4BBC4E80, + 0x4BBB4140, 0x4BBA3400, 0x4BB926C0, + 0x4BB81980, 0x4BB70C40, 0x4BB5FF00, + 0x4BB4F1C0, 0x4BB3E480, 0x4BB2D740, + 0x4BB1CA00, 0x4BB0BCC0, 0x4BAFAF80, + 0x4BAEA240, 0x4BAD9500, 0x4BAC87C0, + 0x4BAB7A80, 0x4BAA6D40, 0x4BA96000, + 0x4BA852C0, 0x4BA74580, 0x4BA63840, + 0x4BA52B00, 0x4BA41DC0, 0x4BA31080, + 0x4BA20340, 0x4BA0F600, 0x4B9FE8C0, + 0x4B9EDB80, 0x4B9DCE40, 0x4B9CC100, + 0x4B9BB3C0, 0x4B9AA680, 0x4B999940, + 0x4B988C00, 0x4B977EC0, 0x4B967180, + 0x4B956440, 0x4B945700, 0x4B9349C0, + 0x4B923C80, 0x4B912F40, 0x4B902200, + 0x4B8F14C0, 0x4B8E0780, 0x4B8CFA40, + 0x4B8BED00, 0x4B8ADFC0, 0x4B89D280, + 0x4B88C540, 0x4B87B800, 0x4B86AAC0, + 0x4B859D80, 0x4B849040, 0x4B838300, + 0x4B8275C0, 0x4B816880, 0x4B805B40, + 0x4B7F4E00, 0x4B7E40C0, 0x4B7D3380, + 0x4B7C2640, 0x4B7B1900, 0x4B7A0BC0, + 0x4B78FE80, 0x4B77F140, 0x4B76E400, + 0x4B75D6C0, 0x4B74C980, 0x4B73BC40, + 0x4B72AF00, 0x4B71A1C0, 0x4B709480, + 0x4B6F8740, 0x4B6E7A00, 0x4B6D6CC0, + 0x4B6C5F80, 0x4B6B5240, 0x4B6A4500, + 0x4B6937C0, 0x4B682A80, 0x4B671D40, + 0x4B661000, 0x4B6502C0, 0x4B63F580, + 0x4B62E840, 0x4B61DB00, 0x4B60CDC0, + 0x4B5FC080, 0x4B5EB340, 0x4B5DA600, + 0x4B5C98C0, 0x4B5B8B80, 0x4B5A7E40, + 0x4B597100, 0x4B5863C0, 0x4B575680, + 0x4B564940, 0x4B553C00, 0x4B542EC0, + 0x4B532180, 0x4B521440, 0x4B510700, + 0x4B4FF9C0, 0x4B4EEC80, 0x4B4DDF40, + 0x4B4CD200, 0x4B4BC4C0, 0x4B4AB780, + 0x4B49AA40, 0x4B489D00, 0x4B478FC0, + 0x4B468280, 0x4B457540, 0x4B446800, + 0x4B435AC0, 0x4B424D80, 0x4B414040, + 0x4B403300, 0x4B3F25C0, 0x4B3E1880, + 0x4B3D0B40, 0x4B3BFE00, 0x4B3AF0C0, + 0x4B39E380, 0x4B38D640, 0x4B37C900, + 0x4B36BBC0, 0x4B35AE80, 0x4B34A140, + 0x4B339400, 0x4B3286C0, 0x4B317980, + 0x4B306C40, 0x4B2F5F00, 0x4B2E51C0, + 0x4B2D4480, 0x4B2C3740, 0x4B2B2A00, + 0x4B2A1CC0, 0x4B290F80, 0x4B280240, + 0x4B26F500, 0x4B25E7C0, 0x4B24DA80, + 0x4B23CD40, 0x4B22C000, 0x4B21B2C0, + 0x4B20A580, 0x4B1F9840, 0x4B1E8B00, + 0x4B1D7DC0, 0x4B1C7080, 0x4B1B6340, + 0x4B1A5600, 0x4B1948C0, 0x4B183B80, + 0x4B172E40, 0x4B162100, 0x4B1513C0, + 0x4B140680, 0x4B12F940, 0x4B11EC00, + 0x4B10DEC0, 0x4B0FD180, 0x4B0EC440, + 0x4B0DB700, 0x4B0CA9C0, 0x4B0B9C80, + 0x4B0A8F40, 0x4B098200, 0x4B0874C0, + 0x4B076780, 0x4B065A40, 0x4B054D00, + 0x4B043FC0, 0x4B033280, 0x4B022540, + 0x4B011800, 0x4B000AC0, 0x4AFEFD80, + 0x4AFDF040, 0x4AFCE300, 0x4AFBD5C0, + 0x4AFAC880, 0x4AF9BB40, 0x4AF8AE00, + 0x4AF7A0C0, 0x4AF69380, 0x4AF58640, + 0x4AF47900, 0x4AF36BC0, 0x4AF25E80, + 0x4AF15140, 0x4AF04400, 0x4AEF36C0, + 0x4AEE2980, 0x4AED1C40, 0x4AEC0F00, + 0x4AEB01C0, 0x4AE9F480, 0x4AE8E740, + 0x4AE7DA00, 0x4AE6CCC0, 0x4AE5BF80, + 0x4AE4B240, 0x4AE3A500, 0x4AE297C0, + 0x4AE18A80, 0x4AE07D40, 0x4ADF7000, + 0x4ADE62C0, 0x4ADD5580, 0x4ADC4840, + 0x4ADB3B00, 0x4ADA2DC0, 0x4AD92080, + 0x4AD81340, 0x4AD70600, 0x4AD5F8C0, + 0x4AD4EB80, 0x4AD3DE40, 0x4AD2D100, + 0x4AD1C3C0, 0x4AD0B680, 0x4ACFA940, + 0x4ACE9C00, 0x4ACD8EC0, 0x4ACC8180, + 0x4ACB7440, 0x4ACA6700, 0x4AC959C0, + 0x4AC84C80, 0x4AC73F40, 0x4AC63200, + 0x4AC524C0, 0x4AC41780, 0x4AC30A40, + 0x4AC1FD00, 0x4AC0EFC0, 0x4ABFE280, + 0x4ABED540, 0x4ABDC800, 0x4ABCBAC0, + 0x4ABBAD80, 0x4ABAA040, 0x4AB99300, + 0x4AB885C0, 0x4AB77880, 0x4AB66B40, + 0x4AB55E00, 0x4AB450C0, 0x4AB34380, + 0x4AB23640, 0x4AB12900, 0x4AB01BC0, + 0x4AAF0E80, 0x4AAE0140, 0x4AACF400, + 0x4AABE6C0, 0x4AAAD980, 0x4AA9CC40, + 0x4AA8BF00, 0x4AA7B1C0, 0x4AA6A480, + 0x4AA59740, 0x4AA48A00, 0x4AA37CC0, + 0x4AA26F80, 0x4AA16240, 0x4AA05500, + 0x4A9F47C0, 0x4A9E3A80, 0x4A9D2D40, + 0x4A9C2000, 0x4A9B12C0, 0x4A9A0580, + 0x4A98F840, 0x4A97EB00, 0x4A96DDC0, + 0x4A95D080, 0x4A94C340, 0x4A93B600, + 0x4A92A8C0, 0x4A919B80, 0x4A908E40, + 0x4A8F8100, 0x4A8E73C0, 0x4A8D6680, + 0x4A8C5940, 0x4A8B4C00, 0x4A8A3EC0, + 0x4A893180, 0x4A882440, 0x4A871700, + 0x4A8609C0, 0x4A84FC80, 0x4A83EF40, + 0x4A82E200, 0x4A81D4C0, 0x4A80C780, + 0x4A7FBA40, 0x4A7EAD00, 0x4A7D9FC0, + 0x4A7C9280, 0x4A7B8540, 0x4A7A7800, + 0x4A796AC0, 0x4A785D80, 0x4A775040, + 0x4A764300, 0x4A7535C0, 0x4A742880, + 0x4A731B40, 0x4A720E00, 0x4A7100C0, + 0x4A6FF380, 0x4A6EE640, 0x4A6DD900, + 0x4A6CCBC0, 0x4A6BBE80, 0x4A6AB140, + 0x4A69A400, 0x4A6896C0, 0x4A678980, + 0x4A667C40, 0x4A656F00, 0x4A6461C0, + 0x4A635480, 0x4A624740, 0x4A613A00, + 0x4A602CC0, 0x4A5F1F80, 0x4A5E1240, + 0x4A5D0500, 0x4A5BF7C0, 0x4A5AEA80, + 0x4A59DD40, 0x4A58D000, 0x4A57C2C0, + 0x4A56B580, 0x4A55A840, 0x4A549B00, + 0x4A538DC0, 0x4A528080, 0x4A517340, + 0x4A506600, 0x4A4F58C0, 0x4A4E4B80, + 0x4A4D3E40, 0x4A4C3100, 0x4A4B23C0, + 0x4A4A1680, 0x4A490940, 0x4A47FC00, + 0x4A46EEC0, 0x4A45E180, 0x4A44D440, + 0x4A43C700, 0x4A42B9C0, 0x4A41AC80, + 0x4A409F40, 0x4A3F9200, 0x4A3E84C0, + 0x4A3D7780, 0x4A3C6A40, 0x4A3B5D00, + 0x4A3A4FC0, 0x4A394280, 0x4A383540, + 0x4A372800, 0x4A361AC0, 0x4A350D80, + 0x4A340040, 0x4A32F300, 0x4A31E5C0, + 0x4A30D880, 0x4A2FCB40, 0x4A2EBE00, + 0x4A2DB0C0, 0x4A2CA380, 0x4A2B9640, + 0x4A2A8900, 0x4A297BC0, 0x4A286E80, + 0x4A276140, 0x4A265400, 0x4A2546C0, + 0x4A243980, 0x4A232C40, 0x4A221F00, + 0x4A2111C0, 0x4A200480, 0x4A1EF740, + 0x4A1DEA00, 0x4A1CDCC0, 0x4A1BCF80, + 0x4A1AC240, 0x4A19B500, 0x4A18A7C0, + 0x4A179A80, 0x4A168D40, 0x4A158000, + 0x4A1472C0, 0x4A136580, 0x4A125840, + 0x4A114B00, 0x4A103DC0, 0x4A0F3080, + 0x4A0E2340, 0x4A0D1600, 0x4A0C08C0, + 0x4A0AFB80, 0x4A09EE40, 0x4A08E100, + 0x4A07D3C0, 0x4A06C680, 0x4A05B940, + 0x4A04AC00, 0x4A039EC0, 0x4A029180, + 0x4A018440, 0x4A007700, 0x49FF69C0, + 0x49FE5C80, 0x49FD4F40, 0x49FC4200, + 0x49FB34C0, 0x49FA2780, 0x49F91A40, + 0x49F80D00, 0x49F6FFC0, 0x49F5F280, + 0x49F4E540, 0x49F3D800, 0x49F2CAC0, + 0x49F1BD80, 0x49F0B040, 0x49EFA300, + 0x49EE95C0, 0x49ED8880, 0x49EC7B40, + 0x49EB6E00, 0x49EA60C0, 0x49E95380, + 0x49E84640, 0x49E73900, 0x49E62BC0, + 0x49E51E80, 0x49E41140, 0x49E30400, + 0x49E1F6C0, 0x49E0E980, 0x49DFDC40, + 0x49DECF00, 0x49DDC1C0, 0x49DCB480, + 0x49DBA740, 0x49DA9A00, 0x49D98CC0, + 0x49D87F80, 0x49D77240, 0x49D66500, + 0x49D557C0, 0x49D44A80, 0x49D33D40, + 0x49D23000, 0x49D122C0, 0x49D01580, + 0x49CF0840, 0x49CDFB00, 0x49CCEDC0, + 0x49CBE080, 0x49CAD340, 0x49C9C600, + 0x49C8B8C0, 0x49C7AB80, 0x49C69E40, + 0x49C59100, 0x49C483C0, 0x49C37680, + 0x49C26940, 0x49C15C00, 0x49C04EC0, + 0x49BF4180, 0x49BE3440, 0x49BD2700, + 0x49BC19C0, 0x49BB0C80, 0x49B9FF40, + 0x49B8F200, 0x49B7E4C0, 0x49B6D780, + 0x49B5CA40, 0x49B4BD00, 0x49B3AFC0, + 0x49B2A280, 0x49B19540, 0x49B08800, + 0x49AF7AC0, 0x49AE6D80, 0x49AD6040, + 0x49AC5300, 0x49AB45C0, 0x49AA3880, + 0x49A92B40, 0x49A81E00, 0x49A710C0, + 0x49A60380, 0x49A4F640, 0x49A3E900, + 0x49A2DBC0, 0x49A1CE80, 0x49A0C140, + 0x499FB400, 0x499EA6C0, 0x499D9980, + 0x499C8C40, 0x499B7F00, 0x499A71C0, + 0x49996480, 0x49985740, 0x49974A00, + 0x49963CC0, 0x49952F80, 0x49942240, + 0x49931500, 0x499207C0, 0x4990FA80, + 0x498FED40, 0x498EE000, 0x498DD2C0, + 0x498CC580, 0x498BB840, 0x498AAB00, + 0x49899DC0, 0x49889080, 0x49878340, + 0x49867600, 0x498568C0, 0x49845B80, + 0x49834E40, 0x49824100, 0x498133C0, + 0x49802680, 0x497F1940, 0x497E0C00, + 0x497CFEC0, 0x497BF180, 0x497AE440, + 0x4979D700, 0x4978C9C0, 0x4977BC80, + 0x4976AF40, 0x4975A200, 0x497494C0, + 0x49738780, 0x49727A40, 0x49716D00, + 0x49705FC0, 0x496F5280, 0x496E4540, + 0x496D3800, 0x496C2AC0, 0x496B1D80, + 0x496A1040, 0x49690300, 0x4967F5C0, + 0x4966E880, 0x4965DB40, 0x4964CE00, + 0x4963C0C0, 0x4962B380, 0x4961A640, + 0x49609900, 0x495F8BC0, 0x495E7E80, + 0x495D7140, 0x495C6400, 0x495B56C0, + 0x495A4980, 0x49593C40, 0x49582F00, + 0x495721C0, 0x49561480, 0x49550740, + 0x4953FA00, 0x4952ECC0, 0x4951DF80, + 0x4950D240, 0x494FC500, 0x494EB7C0, + 0x494DAA80, 0x494C9D40, 0x494B9000, + 0x494A82C0, 0x49497580, 0x49486840, + 0x49475B00, 0x49464DC0, 0x49454080, + 0x49443340, 0x49432600, 0x494218C0, + 0x49410B80, 0x493FFE40, 0x493EF100, + 0x493DE3C0, 0x493CD680, 0x493BC940, + 0x493ABC00, 0x4939AEC0, 0x4938A180, + 0x49379440, 0x49368700, 0x493579C0, + 0x49346C80, 0x49335F40, 0x49325200, + 0x493144C0, 0x49303780, 0x492F2A40, + 0x492E1D00, 0x492D0FC0, 0x492C0280, + 0x492AF540, 0x4929E800, 0x4928DAC0, + 0x4927CD80, 0x4926C040, 0x4925B300, + 0x4924A5C0, 0x49239880, 0x49228B40, + 0x49217E00, 0x492070C0, 0x491F6380, + 0x491E5640, 0x491D4900, 0x491C3BC0, + 0x491B2E80, 0x491A2140, 0x49191400, + 0x491806C0, 0x4916F980, 0x4915EC40, + 0x4914DF00, 0x4913D1C0, 0x4912C480, + 0x4911B740, 0x4910AA00, 0x490F9CC0, + 0x490E8F80, 0x490D8240, 0x490C7500, + 0x490B67C0, 0x490A5A80, 0x49094D40, + 0x49084000, 0x490732C0, 0x49062580, + 0x49051840, 0x49040B00, 0x4902FDC0, + 0x4901F080, 0x4900E340, 0x48FFD600, + 0x48FEC8C0, 0x48FDBB80, 0x48FCAE40, + 0x48FBA100, 0x48FA93C0, 0x48F98680, + 0x48F87940, 0x48F76C00, 0x48F65EC0, + 0x48F55180, 0x48F44440, 0x48F33700, + 0x48F229C0, 0x48F11C80, 0x48F00F40, + 0x48EF0200, 0x48EDF4C0, 0x48ECE780, + 0x48EBDA40, 0x48EACD00, 0x48E9BFC0, + 0x48E8B280, 0x48E7A540, 0x48E69800, + 0x48E58AC0, 0x48E47D80, 0x48E37040, + 0x48E26300, 0x48E155C0, 0x48E04880, + 0x48DF3B40, 0x48DE2E00, 0x48DD20C0, + 0x48DC1380, 0x48DB0640, 0x48D9F900, + 0x48D8EBC0, 0x48D7DE80, 0x48D6D140, + 0x48D5C400, 0x48D4B6C0, 0x48D3A980, + 0x48D29C40, 0x48D18F00, 0x48D081C0, + 0x48CF7480, 0x48CE6740, 0x48CD5A00, + 0x48CC4CC0, 0x48CB3F80, 0x48CA3240, + 0x48C92500, 0x48C817C0, 0x48C70A80, + 0x48C5FD40, 0x48C4F000, 0x48C3E2C0, + 0x48C2D580, 0x48C1C840, 0x48C0BB00, + 0x48BFADC0, 0x48BEA080, 0x48BD9340, + 0x48BC8600, 0x48BB78C0, 0x48BA6B80, + 0x48B95E40, 0x48B85100, 0x48B743C0, + 0x48B63680, 0x48B52940, 0x48B41C00, + 0x48B30EC0, 0x48B20180, 0x48B0F440, + 0x48AFE700, 0x48AED9C0, 0x48ADCC80, + 0x48ACBF40, 0x48ABB200, 0x48AAA4C0, + 0x48A99780, 0x48A88A40, 0x48A77D00, + 0x48A66FC0, 0x48A56280, 0x48A45540, + 0x48A34800, 0x48A23AC0, 0x48A12D80, + 0x48A02040, 0x489F1300, 0x489E05C0, + 0x489CF880, 0x489BEB40, 0x489ADE00, + 0x4899D0C0, 0x4898C380, 0x4897B640, + 0x4896A900, 0x48959BC0, 0x48948E80, + 0x48938140, 0x48927400, 0x489166C0, + 0x48905980, 0x488F4C40, 0x488E3F00, + 0x488D31C0, 0x488C2480, 0x488B1740, + 0x488A0A00, 0x4888FCC0, 0x4887EF80, + 0x4886E240, 0x4885D500, 0x4884C7C0, + 0x4883BA80, 0x4882AD40, 0x4881A000, + 0x488092C0, 0x487F8580, 0x487E7840, + 0x487D6B00, 0x487C5DC0, 0x487B5080, + 0x487A4340, 0x48793600, 0x487828C0, + 0x48771B80, 0x48760E40, 0x48750100, + 0x4873F3C0, 0x4872E680, 0x4871D940, + 0x4870CC00, 0x486FBEC0, 0x486EB180, + 0x486DA440, 0x486C9700, 0x486B89C0, + 0x486A7C80, 0x48696F40, 0x48686200, + 0x486754C0, 0x48664780, 0x48653A40, + 0x48642D00, 0x48631FC0, 0x48621280, + 0x48610540, 0x485FF800, 0x485EEAC0, + 0x485DDD80, 0x485CD040, 0x485BC300, + 0x485AB5C0, 0x4859A880, 0x48589B40, + 0x48578E00, 0x485680C0, 0x48557380, + 0x48546640, 0x48535900, 0x48524BC0, + 0x48513E80, 0x48503140, 0x484F2400, + 0x484E16C0, 0x484D0980, 0x484BFC40, + 0x484AEF00, 0x4849E1C0, 0x4848D480, + 0x4847C740, 0x4846BA00, 0x4845ACC0, + 0x48449F80, 0x48439240, 0x48428500, + 0x484177C0, 0x48406A80, 0x483F5D40, + 0x483E5000, 0x483D42C0, 0x483C3580, + 0x483B2840, 0x483A1B00, 0x48390DC0, + 0x48380080, 0x4836F340, 0x4835E600, + 0x4834D8C0, 0x4833CB80, 0x4832BE40, + 0x4831B100, 0x4830A3C0, 0x482F9680, + 0x482E8940, 0x482D7C00, 0x482C6EC0, + 0x482B6180, 0x482A5440, 0x48294700, + 0x482839C0, 0x48272C80, 0x48261F40, + 0x48251200, 0x482404C0, 0x4822F780, + 0x4821EA40, 0x4820DD00, 0x481FCFC0, + 0x481EC280, 0x481DB540, 0x481CA800, + 0x481B9AC0, 0x481A8D80, 0x48198040, + 0x48187300, 0x481765C0, 0x48165880, + 0x48154B40, 0x48143E00, 0x481330C0, + 0x48122380, 0x48111640, 0x48100900, + 0x480EFBC0, 0x480DEE80, 0x480CE140, + 0x480BD400, 0x480AC6C0, 0x4809B980, + 0x4808AC40, 0x48079F00, 0x480691C0, + 0x48058480, 0x48047740, 0x48036A00, + 0x48025CC0, 0x48014F80, 0x48004240, + 0x47FF3500, 0x47FE27C0, 0x47FD1A80, + 0x47FC0D40, 0x47FB0000, 0x47F9F2C0, + 0x47F8E580, 0x47F7D840, 0x47F6CB00, + 0x47F5BDC0, 0x47F4B080, 0x47F3A340, + 0x47F29600, 0x47F188C0, 0x47F07B80, + 0x47EF6E40, 0x47EE6100, 0x47ED53C0, + 0x47EC4680, 0x47EB3940, 0x47EA2C00, + 0x47E91EC0, 0x47E81180, 0x47E70440, + 0x47E5F700, 0x47E4E9C0, 0x47E3DC80, + 0x47E2CF40, 0x47E1C200, 0x47E0B4C0, + 0x47DFA780, 0x47DE9A40, 0x47DD8D00, + 0x47DC7FC0, 0x47DB7280, 0x47DA6540, + 0x47D95800, 0x47D84AC0, 0x47D73D80, + 0x47D63040, 0x47D52300, 0x47D415C0, + 0x47D30880, 0x47D1FB40, 0x47D0EE00, + 0x47CFE0C0, 0x47CED380, 0x47CDC640, + 0x47CCB900, 0x47CBABC0, 0x47CA9E80, + 0x47C99140, 0x47C88400, 0x47C776C0, + 0x47C66980, 0x47C55C40, 0x47C44F00, + 0x47C341C0, 0x47C23480, 0x47C12740, + 0x47C01A00, 0x47BF0CC0, 0x47BDFF80, + 0x47BCF240, 0x47BBE500, 0x47BAD7C0, + 0x47B9CA80, 0x47B8BD40, 0x47B7B000, + 0x47B6A2C0, 0x47B59580, 0x47B48840, + 0x47B37B00, 0x47B26DC0, 0x47B16080, + 0x47B05340, 0x47AF4600, 0x47AE38C0, + 0x47AD2B80, 0x47AC1E40, 0x47AB1100, + 0x47AA03C0, 0x47A8F680, 0x47A7E940, + 0x47A6DC00, 0x47A5CEC0, 0x47A4C180, + 0x47A3B440, 0x47A2A700, 0x47A199C0, + 0x47A08C80, 0x479F7F40, 0x479E7200, + 0x479D64C0, 0x479C5780, 0x479B4A40, + 0x479A3D00, 0x47992FC0, 0x47982280, + 0x47971540, 0x47960800, 0x4794FAC0, + 0x4793ED80, 0x4792E040, 0x4791D300, + 0x4790C5C0, 0x478FB880, 0x478EAB40, + 0x478D9E00, 0x478C90C0, 0x478B8380, + 0x478A7640, 0x47896900, 0x47885BC0, + 0x47874E80, 0x47864140, 0x47853400, + 0x478426C0, 0x47831980, 0x47820C40, + 0x4780FF00, 0x477FF1C0, 0x477EE480, + 0x477DD740, 0x477CCA00, 0x477BBCC0, + 0x477AAF80, 0x4779A240, 0x47789500, + 0x477787C0, 0x47767A80, 0x47756D40, + 0x47746000, 0x477352C0, 0x47724580, + 0x47713840, 0x47702B00, 0x476F1DC0, + 0x476E1080, 0x476D0340, 0x476BF600, + 0x476AE8C0, 0x4769DB80, 0x4768CE40, + 0x4767C100, 0x4766B3C0, 0x4765A680, + 0x47649940, 0x47638C00, 0x47627EC0, + 0x47617180, 0x47606440, 0x475F5700, + 0x475E49C0, 0x475D3C80, 0x475C2F40, + 0x475B2200, 0x475A14C0, 0x47590780, + 0x4757FA40, 0x4756ED00, 0x4755DFC0, + 0x4754D280, 0x4753C540, 0x4752B800, + 0x4751AAC0, 0x47509D80, 0x474F9040, + 0x474E8300, 0x474D75C0, 0x474C6880, + 0x474B5B40, 0x474A4E00, 0x474940C0, + 0x47483380, 0x47472640, 0x47461900, + 0x47450BC0, 0x4743FE80, 0x4742F140, + 0x4741E400, 0x4740D6C0, 0x473FC980, + 0x473EBC40, 0x473DAF00, 0x473CA1C0, + 0x473B9480, 0x473A8740, 0x47397A00, + 0x47386CC0, 0x47375F80, 0x47365240, + 0x47354500, 0x473437C0, 0x47332A80, + 0x47321D40, 0x47311000, 0x473002C0, + 0x472EF580, 0x472DE840, 0x472CDB00, + 0x472BCDC0, 0x472AC080, 0x4729B340, + 0x4728A600, 0x472798C0, 0x47268B80, + 0x47257E40, 0x47247100, 0x472363C0, + 0x47225680, 0x47214940, 0x47203C00, + 0x471F2EC0, 0x471E2180, 0x471D1440, + 0x471C0700, 0x471AF9C0, 0x4719EC80, + 0x4718DF40, 0x4717D200, 0x4716C4C0, + 0x4715B780, 0x4714AA40, 0x47139D00, + 0x47128FC0, 0x47118280, 0x47107540, + 0x470F6800, 0x470E5AC0, 0x470D4D80, + 0x470C4040, 0x470B3300, 0x470A25C0, + 0x47091880, 0x47080B40, 0x4706FE00, + 0x4705F0C0, 0x4704E380, 0x4703D640, + 0x4702C900, 0x4701BBC0, 0x4700AE80, + 0x46FFA140, 0x46FE9400, 0x46FD86C0, + 0x46FC7980, 0x46FB6C40, 0x46FA5F00, + 0x46F951C0, 0x46F84480, 0x46F73740, + 0x46F62A00, 0x46F51CC0, 0x46F40F80, + 0x46F30240, 0x46F1F500, 0x46F0E7C0, + 0x46EFDA80, 0x46EECD40, 0x46EDC000, + 0x46ECB2C0, 0x46EBA580, 0x46EA9840, + 0x46E98B00, 0x46E87DC0, 0x46E77080, + 0x46E66340, 0x46E55600, 0x46E448C0, + 0x46E33B80, 0x46E22E40, 0x46E12100, + 0x46E013C0, 0x46DF0680, 0x46DDF940, + 0x46DCEC00, 0x46DBDEC0, 0x46DAD180, + 0x46D9C440, 0x46D8B700, 0x46D7A9C0, + 0x46D69C80, 0x46D58F40, 0x46D48200, + 0x46D374C0, 0x46D26780, 0x46D15A40, + 0x46D04D00, 0x46CF3FC0, 0x46CE3280, + 0x46CD2540, 0x46CC1800, 0x46CB0AC0, + 0x46C9FD80, 0x46C8F040, 0x46C7E300, + 0x46C6D5C0, 0x46C5C880, 0x46C4BB40, + 0x46C3AE00, 0x46C2A0C0, 0x46C19380, + 0x46C08640, 0x46BF7900, 0x46BE6BC0, + 0x46BD5E80, 0x46BC5140, 0x46BB4400, + 0x46BA36C0, 0x46B92980, 0x46B81C40, + 0x46B70F00, 0x46B601C0, 0x46B4F480, + 0x46B3E740, 0x46B2DA00, 0x46B1CCC0, + 0x46B0BF80, 0x46AFB240, 0x46AEA500, + 0x46AD97C0, 0x46AC8A80, 0x46AB7D40, + 0x46AA7000, 0x46A962C0, 0x46A85580, + 0x46A74840, 0x46A63B00, 0x46A52DC0, + 0x46A42080, 0x46A31340, 0x46A20600, + 0x46A0F8C0, 0x469FEB80, 0x469EDE40, + 0x469DD100, 0x469CC3C0, 0x469BB680, + 0x469AA940, 0x46999C00, 0x46988EC0, + 0x46978180, 0x46967440, 0x46956700, + 0x469459C0, 0x46934C80, 0x46923F40, + 0x46913200, 0x469024C0, 0x468F1780, + 0x468E0A40, 0x468CFD00, 0x468BEFC0, + 0x468AE280, 0x4689D540, 0x4688C800, + 0x4687BAC0, 0x4686AD80, 0x4685A040, + 0x46849300, 0x468385C0, 0x46827880, + 0x46816B40, 0x46805E00, 0x467F50C0, + 0x467E4380, 0x467D3640, 0x467C2900, + 0x467B1BC0, 0x467A0E80, 0x46790140, + 0x4677F400, 0x4676E6C0, 0x4675D980, + 0x4674CC40, 0x4673BF00, 0x4672B1C0, + 0x4671A480, 0x46709740, 0x466F8A00, + 0x466E7CC0, 0x466D6F80, 0x466C6240, + 0x466B5500, 0x466A47C0, 0x46693A80, + 0x46682D40, 0x46672000, 0x466612C0, + 0x46650580, 0x4663F840, 0x4662EB00, + 0x4661DDC0, 0x4660D080, 0x465FC340, + 0x465EB600, 0x465DA8C0, 0x465C9B80, + 0x465B8E40, 0x465A8100, 0x465973C0, + 0x46586680, 0x46575940, 0x46564C00, + 0x46553EC0, 0x46543180, 0x46532440, + 0x46521700, 0x465109C0, 0x464FFC80, + 0x464EEF40, 0x464DE200, 0x464CD4C0, + 0x464BC780, 0x464ABA40, 0x4649AD00, + 0x46489FC0, 0x46479280, 0x46468540, + 0x46457800, 0x46446AC0, 0x46435D80, + 0x46425040, 0x46414300, 0x464035C0, + 0x463F2880, 0x463E1B40, 0x463D0E00, + 0x463C00C0, 0x463AF380, 0x4639E640, + 0x4638D900, 0x4637CBC0, 0x4636BE80, + 0x4635B140, 0x4634A400, 0x463396C0, + 0x46328980, 0x46317C40, 0x46306F00, + 0x462F61C0, 0x462E5480, 0x462D4740, + 0x462C3A00, 0x462B2CC0, 0x462A1F80, + 0x46291240, 0x46280500, 0x4626F7C0, + 0x4625EA80, 0x4624DD40, 0x4623D000, + 0x4622C2C0, 0x4621B580, 0x4620A840, + 0x461F9B00, 0x461E8DC0, 0x461D8080, + 0x461C7340, 0x461B6600, 0x461A58C0, + 0x46194B80, 0x46183E40, 0x46173100, + 0x461623C0, 0x46151680, 0x46140940, + 0x4612FC00, 0x4611EEC0, 0x4610E180, + 0x460FD440, 0x460EC700, 0x460DB9C0, + 0x460CAC80, 0x460B9F40, 0x460A9200, + 0x460984C0, 0x46087780, 0x46076A40, + 0x46065D00, 0x46054FC0, 0x46044280, + 0x46033540, 0x46022800, 0x46011AC0, + 0x46000D80, 0x45FF0040, 0x45FDF300, + 0x45FCE5C0, 0x45FBD880, 0x45FACB40, + 0x45F9BE00, 0x45F8B0C0, 0x45F7A380, + 0x45F69640, 0x45F58900, 0x45F47BC0, + 0x45F36E80, 0x45F26140, 0x45F15400, + 0x45F046C0, 0x45EF3980, 0x45EE2C40, + 0x45ED1F00, 0x45EC11C0, 0x45EB0480, + 0x45E9F740, 0x45E8EA00, 0x45E7DCC0, + 0x45E6CF80, 0x45E5C240, 0x45E4B500, + 0x45E3A7C0, 0x45E29A80, 0x45E18D40, + 0x45E08000, 0x45DF72C0, 0x45DE6580, + 0x45DD5840, 0x45DC4B00, 0x45DB3DC0, + 0x45DA3080, 0x45D92340, 0x45D81600, + 0x45D708C0, 0x45D5FB80, 0x45D4EE40, + 0x45D3E100, 0x45D2D3C0, 0x45D1C680, + 0x45D0B940, 0x45CFAC00, 0x45CE9EC0, + 0x45CD9180, 0x45CC8440, 0x45CB7700, + 0x45CA69C0, 0x45C95C80, 0x45C84F40, + 0x45C74200, 0x45C634C0, 0x45C52780, + 0x45C41A40, 0x45C30D00, 0x45C1FFC0, + 0x45C0F280, 0x45BFE540, 0x45BED800, + 0x45BDCAC0, 0x45BCBD80, 0x45BBB040, + 0x45BAA300, 0x45B995C0, 0x45B88880, + 0x45B77B40, 0x45B66E00, 0x45B560C0, + 0x45B45380, 0x45B34640, 0x45B23900, + 0x45B12BC0, 0x45B01E80, 0x45AF1140, + 0x45AE0400, 0x45ACF6C0, 0x45ABE980, + 0x45AADC40, 0x45A9CF00, 0x45A8C1C0, + 0x45A7B480, 0x45A6A740, 0x45A59A00, + 0x45A48CC0, 0x45A37F80, 0x45A27240, + 0x45A16500, 0x45A057C0, 0x459F4A80, + 0x459E3D40, 0x459D3000, 0x459C22C0, + 0x459B1580, 0x459A0840, 0x4598FB00, + 0x4597EDC0, 0x4596E080, 0x4595D340, + 0x4594C600, 0x4593B8C0, 0x4592AB80, + 0x45919E40, 0x45909100, 0x458F83C0, + 0x458E7680, 0x458D6940, 0x458C5C00, + 0x458B4EC0, 0x458A4180, 0x45893440, + 0x45882700, 0x458719C0, 0x45860C80, + 0x4584FF40, 0x4583F200, 0x4582E4C0, + 0x4581D780, 0x4580CA40, 0x457FBD00, + 0x457EAFC0, 0x457DA280, 0x457C9540, + 0x457B8800, 0x457A7AC0, 0x45796D80, + 0x45786040, 0x45775300, 0x457645C0, + 0x45753880, 0x45742B40, 0x45731E00, + 0x457210C0, 0x45710380, 0x456FF640, + 0x456EE900, 0x456DDBC0, 0x456CCE80, + 0x456BC140, 0x456AB400, 0x4569A6C0, + 0x45689980, 0x45678C40, 0x45667F00, + 0x456571C0, 0x45646480, 0x45635740, + 0x45624A00, 0x45613CC0, 0x45602F80, + 0x455F2240, 0x455E1500, 0x455D07C0, + 0x455BFA80, 0x455AED40, 0x4559E000, + 0x4558D2C0, 0x4557C580, 0x4556B840, + 0x4555AB00, 0x45549DC0, 0x45539080, + 0x45528340, 0x45517600, 0x455068C0, + 0x454F5B80, 0x454E4E40, 0x454D4100, + 0x454C33C0, 0x454B2680, 0x454A1940, + 0x45490C00, 0x4547FEC0, 0x4546F180, + 0x4545E440, 0x4544D700, 0x4543C9C0, + 0x4542BC80, 0x4541AF40, 0x4540A200, + 0x453F94C0, 0x453E8780, 0x453D7A40, + 0x453C6D00, 0x453B5FC0, 0x453A5280, + 0x45394540, 0x45383800, 0x45372AC0, + 0x45361D80, 0x45351040, 0x45340300, + 0x4532F5C0, 0x4531E880, 0x4530DB40, + 0x452FCE00, 0x452EC0C0, 0x452DB380, + 0x452CA640, 0x452B9900, 0x452A8BC0, + 0x45297E80, 0x45287140, 0x45276400, + 0x452656C0, 0x45254980, 0x45243C40, + 0x45232F00, 0x452221C0, 0x45211480, + 0x45200740, 0x451EFA00, 0x451DECC0, + 0x451CDF80, 0x451BD240, 0x451AC500, + 0x4519B7C0, 0x4518AA80, 0x45179D40, + 0x45169000, 0x451582C0, 0x45147580, + 0x45136840, 0x45125B00, 0x45114DC0, + 0x45104080, 0x450F3340, 0x450E2600, + 0x450D18C0, 0x450C0B80, 0x450AFE40, + 0x4509F100, 0x4508E3C0, 0x4507D680, + 0x4506C940, 0x4505BC00, 0x4504AEC0, + 0x4503A180, 0x45029440, 0x45018700, + 0x450079C0, 0x44FF6C80, 0x44FE5F40, + 0x44FD5200, 0x44FC44C0, 0x44FB3780, + 0x44FA2A40, 0x44F91D00, 0x44F80FC0, + 0x44F70280, 0x44F5F540, 0x44F4E800, + 0x44F3DAC0, 0x44F2CD80, 0x44F1C040, + 0x44F0B300, 0x44EFA5C0, 0x44EE9880, + 0x44ED8B40, 0x44EC7E00, 0x44EB70C0, + 0x44EA6380, 0x44E95640, 0x44E84900, + 0x44E73BC0, 0x44E62E80, 0x44E52140, + 0x44E41400, 0x44E306C0, 0x44E1F980, + 0x44E0EC40, 0x44DFDF00, 0x44DED1C0, + 0x44DDC480, 0x44DCB740, 0x44DBAA00, + 0x44DA9CC0, 0x44D98F80, 0x44D88240, + 0x44D77500, 0x44D667C0, 0x44D55A80, + 0x44D44D40, 0x44D34000, 0x44D232C0, + 0x44D12580, 0x44D01840, 0x44CF0B00, + 0x44CDFDC0, 0x44CCF080, 0x44CBE340, + 0x44CAD600, 0x44C9C8C0, 0x44C8BB80, + 0x44C7AE40, 0x44C6A100, 0x44C593C0, + 0x44C48680, 0x44C37940, 0x44C26C00, + 0x44C15EC0, 0x44C05180, 0x44BF4440, + 0x44BE3700, 0x44BD29C0, 0x44BC1C80, + 0x44BB0F40, 0x44BA0200, 0x44B8F4C0, + 0x44B7E780, 0x44B6DA40, 0x44B5CD00, + 0x44B4BFC0, 0x44B3B280, 0x44B2A540, + 0x44B19800, 0x44B08AC0, 0x44AF7D80, + 0x44AE7040, 0x44AD6300, 0x44AC55C0, + 0x44AB4880, 0x44AA3B40, 0x44A92E00, + 0x44A820C0, 0x44A71380, 0x44A60640, + 0x44A4F900, 0x44A3EBC0, 0x44A2DE80, + 0x44A1D140, 0x44A0C400, 0x449FB6C0, + 0x449EA980, 0x449D9C40, 0x449C8F00, + 0x449B81C0, 0x449A7480, 0x44996740, + 0x44985A00, 0x44974CC0, 0x44963F80, + 0x44953240, 0x44942500, 0x449317C0, + 0x44920A80, 0x4490FD40, 0x448FF000, + 0x448EE2C0, 0x448DD580, 0x448CC840, + 0x448BBB00, 0x448AADC0, 0x4489A080, + 0x44889340, 0x44878600, 0x448678C0, + 0x44856B80, 0x44845E40, 0x44835100, + 0x448243C0, 0x44813680, 0x44802940, + 0x447F1C00, 0x447E0EC0, 0x447D0180, + 0x447BF440, 0x447AE700, 0x4479D9C0, + 0x4478CC80, 0x4477BF40, 0x4476B200, + 0x4475A4C0, 0x44749780, 0x44738A40, + 0x44727D00, 0x44716FC0, 0x44706280, + 0x446F5540, 0x446E4800, 0x446D3AC0, + 0x446C2D80, 0x446B2040, 0x446A1300, + 0x446905C0, 0x4467F880, 0x4466EB40, + 0x4465DE00, 0x4464D0C0, 0x4463C380, + 0x4462B640, 0x4461A900, 0x44609BC0, + 0x445F8E80, 0x445E8140, 0x445D7400, + 0x445C66C0, 0x445B5980, 0x445A4C40, + 0x44593F00, 0x445831C0, 0x44572480, + 0x44561740, 0x44550A00, 0x4453FCC0, + 0x4452EF80, 0x4451E240, 0x4450D500, + 0x444FC7C0, 0x444EBA80, 0x444DAD40, + 0x444CA000, 0x444B92C0, 0x444A8580, + 0x44497840, 0x44486B00, 0x44475DC0, + 0x44465080, 0x44454340, 0x44443600, + 0x444328C0, 0x44421B80, 0x44410E40, + 0x44400100, 0x443EF3C0, 0x443DE680, + 0x443CD940, 0x443BCC00, 0x443ABEC0, + 0x4439B180, 0x4438A440, 0x44379700, + 0x443689C0, 0x44357C80, 0x44346F40, + 0x44336200, 0x443254C0, 0x44314780, + 0x44303A40, 0x442F2D00, 0x442E1FC0, + 0x442D1280, 0x442C0540, 0x442AF800, + 0x4429EAC0, 0x4428DD80, 0x4427D040, + 0x4426C300, 0x4425B5C0, 0x4424A880, + 0x44239B40, 0x44228E00, 0x442180C0, + 0x44207380, 0x441F6640, 0x441E5900, + 0x441D4BC0, 0x441C3E80, 0x441B3140, + 0x441A2400, 0x441916C0, 0x44180980, + 0x4416FC40, 0x4415EF00, 0x4414E1C0, + 0x4413D480, 0x4412C740, 0x4411BA00, + 0x4410ACC0, 0x440F9F80, 0x440E9240, + 0x440D8500, 0x440C77C0, 0x440B6A80, + 0x440A5D40, 0x44095000, 0x440842C0, + 0x44073580, 0x44062840, 0x44051B00, + 0x44040DC0, 0x44030080, 0x4401F340, + 0x4400E600, 0x43FFD8C0, 0x43FECB80, + 0x43FDBE40, 0x43FCB100, 0x43FBA3C0, + 0x43FA9680, 0x43F98940, 0x43F87C00, + 0x43F76EC0, 0x43F66180, 0x43F55440, + 0x43F44700, 0x43F339C0, 0x43F22C80, + 0x43F11F40, 0x43F01200, 0x43EF04C0, + 0x43EDF780, 0x43ECEA40, 0x43EBDD00, + 0x43EACFC0, 0x43E9C280, 0x43E8B540, + 0x43E7A800, 0x43E69AC0, 0x43E58D80, + 0x43E48040, 0x43E37300, 0x43E265C0, + 0x43E15880, 0x43E04B40, 0x43DF3E00, + 0x43DE30C0, 0x43DD2380, 0x43DC1640, + 0x43DB0900, 0x43D9FBC0, 0x43D8EE80, + 0x43D7E140, 0x43D6D400, 0x43D5C6C0, + 0x43D4B980, 0x43D3AC40, 0x43D29F00, + 0x43D191C0, 0x43D08480, 0x43CF7740, + 0x43CE6A00, 0x43CD5CC0, 0x43CC4F80, + 0x43CB4240, 0x43CA3500, 0x43C927C0, + 0x43C81A80, 0x43C70D40, 0x43C80000, + 0x43C70640, 0x43C60C80, 0x43C512C0, + 0x43C41900, 0x43C31F40, 0x43C22580, + 0x43C12BC0, 0x43C03200, 0x43BF3840, + 0x43BE3E80, 0x43BD44C0, 0x43BC4B00, + 0x43BB5140, 0x43BA5780, 0x43B95DC0, + 0x43B86400, 0x43B76A40, 0x43B67080, + 0x43B576C0, 0x43B47D00, 0x43B38340, + 0x43B28980, 0x43B18FC0, 0x43B09600, + 0x43AF9C40, 0x43AEA280, 0x43ADA8C0, + 0x43ACAF00, 0x43ABB540, 0x43AABB80, + 0x43A9C1C0, 0x43A8C800, 0x43A7CE40, + 0x43A6D480, 0x43A5DAC0, 0x43A4E100, + 0x43A3E740, 0x43A2ED80, 0x43A1F3C0, + 0x43A0FA00, 0x43A00040, 0x439F0680, + 0x439E0CC0, 0x439D1300, 0x439C1940, + 0x439B1F80, 0x439A25C0, 0x43992C00, + 0x43983240, 0x43973880, 0x43963EC0, + 0x43954500, 0x43944B40, 0x43935180, + 0x439257C0, 0x43915E00, 0x43906440, + 0x438F6A80, 0x438E70C0, 0x438D7700, + 0x438C7D40, 0x438B8380, 0x438A89C0, + 0x43899000, 0x43889640, 0x43879C80, + 0x4386A2C0, 0x4385A900, 0x4384AF40, + 0x4383B580, 0x4382BBC0, 0x4381C200, + 0x4380C840, 0x437FCE80, 0x437ED4C0, + 0x437DDB00, 0x437CE140, 0x437BE780, + 0x437AEDC0, 0x4379F400, 0x4378FA40, + 0x43780080, 0x437706C0, 0x43760D00, + 0x43751340, 0x43741980, 0x43731FC0, + 0x43722600, 0x43712C40, 0x43703280, + 0x436F38C0, 0x436E3F00, 0x436D4540, + 0x436C4B80, 0x436B51C0, 0x436A5800, + 0x43695E40, 0x43686480, 0x43676AC0, + 0x43667100, 0x43657740, 0x43647D80, + 0x436383C0, 0x43628A00, 0x43619040, + 0x43609680, 0x435F9CC0, 0x435EA300, + 0x435DA940, 0x435CAF80, 0x435BB5C0, + 0x435ABC00, 0x4359C240, 0x4358C880, + 0x4357CEC0, 0x4356D500, 0x4355DB40, + 0x4354E180, 0x4353E7C0, 0x4352EE00, + 0x4351F440, 0x4350FA80, 0x435000C0, + 0x434F0700, 0x434E0D40, 0x434D1380, + 0x434C19C0, 0x434B2000, 0x434A2640, + 0x43492C80, 0x434832C0, 0x43473900, + 0x43463F40, 0x43454580, 0x43444BC0, + 0x43435200, 0x43425840, 0x43415E80, + 0x434064C0, 0x433F6B00, 0x433E7140, + 0x433D7780, 0x433C7DC0, 0x433B8400, + 0x433A8A40, 0x43399080, 0x433896C0, + 0x43379D00, 0x4336A340, 0x4335A980, + 0x4334AFC0, 0x4333B600, 0x4332BC40, + 0x4331C280, 0x4330C8C0, 0x432FCF00, + 0x432ED540, 0x432DDB80, 0x432CE1C0, + 0x432BE800, 0x432AEE40, 0x4329F480, + 0x4328FAC0, 0x43280100, 0x43270740, + 0x43260D80, 0x432513C0, 0x43241A00, + 0x43232040, 0x43222680, 0x43212CC0, + 0x43203300, 0x431F3940, 0x431E3F80, + 0x431D45C0, 0x431C4C00, 0x431B5240, + 0x431A5880, 0x43195EC0, 0x43186500, + 0x43176B40, 0x43167180, 0x431577C0, + 0x43147E00, 0x43138440, 0x43128A80, + 0x431190C0, 0x43109700, 0x430F9D40, + 0x430EA380, 0x430DA9C0, 0x430CB000, + 0x430BB640, 0x430ABC80, 0x4309C2C0, + 0x4308C900, 0x4307CF40, 0x4306D580, + 0x4305DBC0, 0x4304E200, 0x4303E840, + 0x4302EE80, 0x4301F4C0, 0x4300FB00, + 0x43000140, 0x42FF0780, 0x42FE0DC0, + 0x42FD1400, 0x42FC1A40, 0x42FB2080, + 0x42FA26C0, 0x42F92D00, 0x42F83340, + 0x42F73980, 0x42F63FC0, 0x42F54600, + 0x42F44C40, 0x42F35280, 0x42F258C0, + 0x42F15F00, 0x42F06540, 0x42EF6B80, + 0x42EE71C0, 0x42ED7800, 0x42EC7E40, + 0x42EB8480, 0x42EA8AC0, 0x42E99100, + 0x42E89740, 0x42E79D80, 0x42E6A3C0, + 0x42E5AA00, 0x42E4B040, 0x42E3B680, + 0x42E2BCC0, 0x42E1C300, 0x42E0C940, + 0x42DFCF80, 0x42DED5C0, 0x42DDDC00, + 0x42DCE240, 0x42DBE880, 0x42DAEEC0, + 0x42D9F500, 0x42D8FB40, 0x42D80180, + 0x42D707C0, 0x42D60E00, 0x42D51440, + 0x42D41A80, 0x42D320C0, 0x42D22700, + 0x42D12D40, 0x42D03380, 0x42CF39C0, + 0x42CE4000, 0x42CD4640, 0x42CC4C80, + 0x42CB52C0, 0x42CA5900, 0x42C95F40, + 0x42C86580, 0x42C76BC0, 0x42C67200, + 0x42C57840, 0x42C47E80, 0x42C384C0, + 0x42C28B00, 0x42C19140, 0x42C09780, + 0x42BF9DC0, 0x42BEA400, 0x42BDAA40, + 0x42BCB080, 0x42BBB6C0, 0x42BABD00, + 0x42B9C340, 0x42B8C980, 0x42B7CFC0, + 0x42B6D600, 0x42B5DC40, 0x42B4E280, + 0x42B3E8C0, 0x42B2EF00, 0x42B1F540, + 0x42B0FB80, 0x42B001C0, 0x42AF0800, + 0x42AE0E40, 0x42AD1480, 0x42AC1AC0, + 0x42AB2100, 0x42AA2740, 0x42A92D80, + 0x42A833C0, 0x42A73A00, 0x42A64040, + 0x42A54680, 0x42A44CC0, 0x42A35300, + 0x42A25940, 0x42A15F80, 0x42A065C0, + 0x429F6C00, 0x429E7240, 0x429D7880, + 0x429C7EC0, 0x429B8500, 0x429A8B40, + 0x42999180, 0x429897C0, 0x42979E00, + 0x4296A440, 0x4295AA80, 0x4294B0C0, + 0x4293B700, 0x4292BD40, 0x4291C380, + 0x4290C9C0, 0x428FD000, 0x428ED640, + 0x428DDC80, 0x428CE2C0, 0x428BE900, + 0x428AEF40, 0x4289F580, 0x4288FBC0, + 0x42880200, 0x42870840, 0x42860E80, + 0x428514C0, 0x42841B00, 0x42832140, + 0x42822780, 0x42812DC0, 0x42803400, + 0x427F3A40, 0x427E4080, 0x427D46C0, + 0x427C4D00, 0x427B5340, 0x427A5980, + 0x42795FC0, 0x42786600, 0x42776C40, + 0x42767280, 0x427578C0, 0x42747F00, + 0x42738540, 0x42728B80, 0x427191C0, + 0x42709800, 0x426F9E40, 0x426EA480, + 0x426DAAC0, 0x426CB100, 0x426BB740, + 0x426ABD80, 0x4269C3C0, 0x4268CA00, + 0x4267D040, 0x4266D680, 0x4265DCC0, + 0x4264E300, 0x4263E940, 0x4262EF80, + 0x4261F5C0, 0x4260FC00, 0x42600240, + 0x425F0880, 0x425E0EC0, 0x425D1500, + 0x425C1B40, 0x425B2180, 0x425A27C0, + 0x42592E00, 0x42583440, 0x42573A80, + 0x425640C0, 0x42554700, 0x42544D40, + 0x42535380, 0x425259C0, 0x42516000, + 0x42506640, 0x424F6C80, 0x424E72C0, + 0x424D7900, 0x424C7F40, 0x424B8580, + 0x424A8BC0, 0x42499200, 0x42489840, + 0x42479E80, 0x4246A4C0, 0x4245AB00, + 0x4244B140, 0x4243B780, 0x4242BDC0, + 0x4241C400, 0x4240CA40, 0x423FD080, + 0x423ED6C0, 0x423DDD00, 0x423CE340, + 0x423BE980, 0x423AEFC0, 0x4239F600, + 0x4238FC40, 0x42380280, 0x423708C0, + 0x42360F00, 0x42351540, 0x42341B80, + 0x423321C0, 0x42322800, 0x42312E40, + 0x42303480, 0x422F3AC0, 0x422E4100, + 0x422D4740, 0x422C4D80, 0x422B53C0, + 0x422A5A00, 0x42296040, 0x42286680, + 0x42276CC0, 0x42267300, 0x42257940, + 0x42247F80, 0x422385C0, 0x42228C00, + 0x42219240, 0x42209880, 0x421F9EC0, + 0x421EA500, 0x421DAB40, 0x421CB180, + 0x421BB7C0, 0x421ABE00, 0x4219C440, + 0x4218CA80, 0x4217D0C0, 0x4216D700, + 0x4215DD40, 0x4214E380, 0x4213E9C0, + 0x4212F000, 0x4211F640, 0x4210FC80, + 0x421002C0, 0x420F0900, 0x420E0F40, + 0x420D1580, 0x420C1BC0, 0x420B2200, + 0x420A2840, 0x42092E80, 0x420834C0, + 0x42073B00, 0x42064140, 0x42054780, + 0x42044DC0, 0x42035400, 0x42025A40, + 0x42016080, 0x420066C0, 0x41FF6D00, + 0x41FE7340, 0x41FD7980, 0x41FC7FC0, + 0x41FB8600, 0x41FA8C40, 0x41F99280, + 0x41F898C0, 0x41F79F00, 0x41F6A540, + 0x41F5AB80, 0x41F4B1C0, 0x41F3B800, + 0x41F2BE40, 0x41F1C480, 0x41F0CAC0, + 0x41EFD100, 0x41EED740, 0x41EDDD80, + 0x41ECE3C0, 0x41EBEA00, 0x41EAF040, + 0x41E9F680, 0x41E8FCC0, 0x41E80300, + 0x41E70940, 0x41E60F80, 0x41E515C0, + 0x41E41C00, 0x41E32240, 0x41E22880, + 0x41E12EC0, 0x41E03500, 0x41DF3B40, + 0x41DE4180, 0x41DD47C0, 0x41DC4E00, + 0x41DB5440, 0x41DA5A80, 0x41D960C0, + 0x41D86700, 0x41D76D40, 0x41D67380, + 0x41D579C0, 0x41D48000, 0x41D38640, + 0x41D28C80, 0x41D192C0, 0x41D09900, + 0x41CF9F40, 0x41CEA580, 0x41CDABC0, + 0x41CCB200, 0x41CBB840, 0x41CABE80, + 0x41C9C4C0, 0x41C8CB00, 0x41C7D140, + 0x41C6D780, 0x41C5DDC0, 0x41C4E400, + 0x41C3EA40, 0x41C2F080, 0x41C1F6C0, + 0x41C0FD00, 0x41C00340, 0x41BF0980, + 0x41BE0FC0, 0x41BD1600, 0x41BC1C40, + 0x41BB2280, 0x41BA28C0, 0x41B92F00, + 0x41B83540, 0x41B73B80, 0x41B641C0, + 0x41B54800, 0x41B44E40, 0x41B35480, + 0x41B25AC0, 0x41B16100, 0x41B06740, + 0x41AF6D80, 0x41AE73C0, 0x41AD7A00, + 0x41AC8040, 0x41AB8680, 0x41AA8CC0, + 0x41A99300, 0x41A89940, 0x41A79F80, + 0x41A6A5C0, 0x41A5AC00, 0x41A4B240, + 0x41A3B880, 0x41A2BEC0, 0x41A1C500, + 0x41A0CB40, 0x419FD180, 0x419ED7C0, + 0x419DDE00, 0x419CE440, 0x419BEA80, + 0x419AF0C0, 0x4199F700, 0x4198FD40, + 0x41980380, 0x419709C0, 0x41961000, + 0x41951640, 0x41941C80, 0x419322C0, + 0x41922900, 0x41912F40, 0x41903580, + 0x418F3BC0, 0x418E4200, 0x418D4840, + 0x418C4E80, 0x418B54C0, 0x418A5B00, + 0x41896140, 0x41886780, 0x41876DC0, + 0x41867400, 0x41857A40, 0x41848080, + 0x418386C0, 0x41828D00, 0x41819340, + 0x41809980, 0x417F9FC0, 0x417EA600, + 0x417DAC40, 0x417CB280, 0x417BB8C0, + 0x417ABF00, 0x4179C540, 0x4178CB80, + 0x4177D1C0, 0x4176D800, 0x4175DE40, + 0x4174E480, 0x4173EAC0, 0x4172F100, + 0x4171F740, 0x4170FD80, 0x417003C0, + 0x416F0A00, 0x416E1040, 0x416D1680, + 0x416C1CC0, 0x416B2300, 0x416A2940, + 0x41692F80, 0x416835C0, 0x41673C00, + 0x41664240, 0x41654880, 0x41644EC0, + 0x41635500, 0x41625B40, 0x41616180, + 0x416067C0, 0x415F6E00, 0x415E7440, + 0x415D7A80, 0x415C80C0, 0x415B8700, + 0x415A8D40, 0x41599380, 0x415899C0, + 0x4157A000, 0x4156A640, 0x4155AC80, + 0x4154B2C0, 0x4153B900, 0x4152BF40, + 0x4151C580, 0x4150CBC0, 0x414FD200, + 0x414ED840, 0x414DDE80, 0x414CE4C0, + 0x414BEB00, 0x414AF140, 0x4149F780, + 0x4148FDC0, 0x41480400, 0x41470A40, + 0x41461080, 0x414516C0, 0x41441D00, + 0x41432340, 0x41422980, 0x41412FC0, + 0x41403600, 0x413F3C40, 0x413E4280, + 0x413D48C0, 0x413C4F00, 0x413B5540, + 0x413A5B80, 0x413961C0, 0x41386800, + 0x41376E40, 0x41367480, 0x41357AC0, + 0x41348100, 0x41338740, 0x41328D80, + 0x413193C0, 0x41309A00, 0x412FA040, + 0x412EA680, 0x412DACC0, 0x412CB300, + 0x412BB940, 0x412ABF80, 0x4129C5C0, + 0x4128CC00, 0x4127D240, 0x4126D880, + 0x4125DEC0, 0x4124E500, 0x4123EB40, + 0x4122F180, 0x4121F7C0, 0x4120FE00, + 0x41200440, 0x411F0A80, 0x411E10C0, + 0x411D1700, 0x411C1D40, 0x411B2380, + 0x411A29C0, 0x41193000, 0x41183640, + 0x41173C80, 0x411642C0, 0x41154900, + 0x41144F40, 0x41135580, 0x41125BC0, + 0x41116200, 0x41106840, 0x410F6E80, + 0x410E74C0, 0x410D7B00, 0x410C8140, + 0x410B8780, 0x410A8DC0, 0x41099400, + 0x41089A40, 0x4107A080, 0x4106A6C0, + 0x4105AD00, 0x4104B340, 0x4103B980, + 0x4102BFC0, 0x4101C600, 0x4100CC40, + 0x40FFD280, 0x40FED8C0, 0x40FDDF00, + 0x40FCE540, 0x40FBEB80, 0x40FAF1C0, + 0x40F9F800, 0x40F8FE40, 0x40F80480, + 0x40F70AC0, 0x40F61100, 0x40F51740, + 0x40F41D80, 0x40F323C0, 0x40F22A00, + 0x40F13040, 0x40F03680, 0x40EF3CC0, + 0x40EE4300, 0x40ED4940, 0x40EC4F80, + 0x40EB55C0, 0x40EA5C00, 0x40E96240, + 0x40E86880, 0x40E76EC0, 0x40E67500, + 0x40E57B40, 0x40E48180, 0x40E387C0, + 0x40E28E00, 0x40E19440, 0x40E09A80, + 0x40DFA0C0, 0x40DEA700, 0x40DDAD40, + 0x40DCB380, 0x40DBB9C0, 0x40DAC000, + 0x40D9C640, 0x40D8CC80, 0x40D7D2C0, + 0x40D6D900, 0x40D5DF40, 0x40D4E580, + 0x40D3EBC0, 0x40D2F200, 0x40D1F840, + 0x40D0FE80, 0x40D004C0, 0x40CF0B00, + 0x40CE1140, 0x40CD1780, 0x40CC1DC0, + 0x40CB2400, 0x40CA2A40, 0x40C93080, + 0x40C836C0, 0x40C73D00, 0x40C64340, + 0x40C54980, 0x40C44FC0, 0x40C35600, + 0x40C25C40, 0x40C16280, 0x40C068C0, + 0x40BF6F00, 0x40BE7540, 0x40BD7B80, + 0x40BC81C0, 0x40BB8800, 0x40BA8E40, + 0x40B99480, 0x40B89AC0, 0x40B7A100, + 0x40B6A740, 0x40B5AD80, 0x40B4B3C0, + 0x40B3BA00, 0x40B2C040, 0x40B1C680, + 0x40B0CCC0, 0x40AFD300, 0x40AED940, + 0x40ADDF80, 0x40ACE5C0, 0x40ABEC00, + 0x40AAF240, 0x40A9F880, 0x40A8FEC0, + 0x40A80500, 0x40A70B40, 0x40A61180, + 0x40A517C0, 0x40A41E00, 0x40A32440, + 0x40A22A80, 0x40A130C0, 0x40A03700, + 0x409F3D40, 0x409E4380, 0x409D49C0, + 0x409C5000, 0x409B5640, 0x409A5C80, + 0x409962C0, 0x40986900, 0x40976F40, + 0x40967580, 0x40957BC0, 0x40948200, + 0x40938840, 0x40928E80, 0x409194C0, + 0x40909B00, 0x408FA140, 0x408EA780, + 0x408DADC0, 0x408CB400, 0x408BBA40, + 0x408AC080, 0x4089C6C0, 0x4088CD00, + 0x4087D340, 0x4086D980, 0x4085DFC0, + 0x4084E600, 0x4083EC40, 0x4082F280, + 0x4081F8C0, 0x4080FF00, 0x40800540, + 0x407F0B80, 0x407E11C0, 0x407D1800, + 0x407C1E40, 0x407B2480, 0x407A2AC0, + 0x40793100, 0x40783740, 0x40773D80, + 0x407643C0, 0x40754A00, 0x40745040, + 0x40735680, 0x40725CC0, 0x40716300, + 0x40706940, 0x406F6F80, 0x406E75C0, + 0x406D7C00, 0x406C8240, 0x406B8880, + 0x406A8EC0, 0x40699500, 0x40689B40, + 0x4067A180, 0x4066A7C0, 0x4065AE00, + 0x4064B440, 0x4063BA80, 0x4062C0C0, + 0x4061C700, 0x4060CD40, 0x405FD380, + 0x405ED9C0, 0x405DE000, 0x405CE640, + 0x405BEC80, 0x405AF2C0, 0x4059F900, + 0x4058FF40, 0x40580580, 0x40570BC0, + 0x40561200, 0x40551840, 0x40541E80, + 0x405324C0, 0x40522B00, 0x40513140, + 0x40503780, 0x404F3DC0, 0x404E4400, + 0x404D4A40, 0x404C5080, 0x404B56C0, + 0x404A5D00, 0x40496340, 0x40486980, + 0x40476FC0, 0x40467600, 0x40457C40, + 0x40448280, 0x404388C0, 0x40428F00, + 0x40419540, 0x40409B80, 0x403FA1C0, + 0x403EA800, 0x403DAE40, 0x403CB480, + 0x403BBAC0, 0x403AC100, 0x4039C740, + 0x4038CD80, 0x4037D3C0, 0x4036DA00, + 0x4035E040, 0x4034E680, 0x4033ECC0, + 0x4032F300, 0x4031F940, 0x4030FF80, + 0x403005C0, 0x402F0C00, 0x402E1240, + 0x402D1880, 0x402C1EC0, 0x402B2500, + 0x402A2B40, 0x40293180, 0x402837C0, + 0x40273E00, 0x40264440, 0x40254A80, + 0x402450C0, 0x40235700, 0x40225D40, + 0x40216380, 0x402069C0, 0x401F7000, + 0x401E7640, 0x401D7C80, 0x401C82C0, + 0x401B8900, 0x401A8F40, 0x40199580, + 0x40189BC0, 0x4017A200, 0x4016A840, + 0x4015AE80, 0x4014B4C0, 0x4013BB00, + 0x4012C140, 0x4011C780, 0x4010CDC0, + 0x400FD400, 0x400EDA40, 0x400DE080, + 0x400CE6C0, 0x400BED00, 0x400AF340, + 0x4009F980, 0x4008FFC0, 0x40080600, + 0x40070C40, 0x40061280, 0x400518C0, + 0x40041F00, 0x40032540, 0x40022B80, + 0x400131C0, 0x40003800, 0x3FFF3E40, + 0x3FFE4480, 0x3FFD4AC0, 0x3FFC5100, + 0x3FFB5740, 0x3FFA5D80, 0x3FF963C0, + 0x3FF86A00, 0x3FF77040, 0x3FF67680, + 0x3FF57CC0, 0x3FF48300, 0x3FF38940, + 0x3FF28F80, 0x3FF195C0, 0x3FF09C00, + 0x3FEFA240, 0x3FEEA880, 0x3FEDAEC0, + 0x3FECB500, 0x3FEBBB40, 0x3FEAC180, + 0x3FE9C7C0, 0x3FE8CE00, 0x3FE7D440, + 0x3FE6DA80, 0x3FE5E0C0, 0x3FE4E700, + 0x3FE3ED40, 0x3FE2F380, 0x3FE1F9C0, + 0x3FE10000, 0x3FE00640, 0x3FDF0C80, + 0x3FDE12C0, 0x3FDD1900, 0x3FDC1F40, + 0x3FDB2580, 0x3FDA2BC0, 0x3FD93200, + 0x3FD83840, 0x3FD73E80, 0x3FD644C0, + 0x3FD54B00, 0x3FD45140, 0x3FD35780, + 0x3FD25DC0, 0x3FD16400, 0x3FD06A40, + 0x3FCF7080, 0x3FCE76C0, 0x3FCD7D00, + 0x3FCC8340, 0x3FCB8980, 0x3FCA8FC0, + 0x3FC99600, 0x3FC89C40, 0x3FC7A280, + 0x3FC6A8C0, 0x3FC5AF00, 0x3FC4B540, + 0x3FC3BB80, 0x3FC2C1C0, 0x3FC1C800, + 0x3FC0CE40, 0x3FBFD480, 0x3FBEDAC0, + 0x3FBDE100, 0x3FBCE740, 0x3FBBED80, + 0x3FBAF3C0, 0x3FB9FA00, 0x3FB90040, + 0x3FB80680, 0x3FB70CC0, 0x3FB61300, + 0x3FB51940, 0x3FB41F80, 0x3FB325C0, + 0x3FB22C00, 0x3FB13240, 0x3FB03880, + 0x3FAF3EC0, 0x3FAE4500, 0x3FAD4B40, + 0x3FAC5180, 0x3FAB57C0, 0x3FAA5E00, + 0x3FA96440, 0x3FA86A80, 0x3FA770C0, + 0x3FA67700, 0x3FA57D40, 0x3FA48380, + 0x3FA389C0, 0x3FA29000, 0x3FA19640, + 0x3FA09C80, 0x3F9FA2C0, 0x3F9EA900, + 0x3F9DAF40, 0x3F9CB580, 0x3F9BBBC0, + 0x3F9AC200, 0x3F99C840, 0x3F98CE80, + 0x3F97D4C0, 0x3F96DB00, 0x3F95E140, + 0x3F94E780, 0x3F93EDC0, 0x3F92F400, + 0x3F91FA40, 0x3F910080, 0x3F9006C0, + 0x3F8F0D00, 0x3F8E1340, 0x3F8D1980, + 0x3F8C1FC0, 0x3F8B2600, 0x3F8A2C40, + 0x3F893280, 0x3F8838C0, 0x3F873F00, + 0x3F864540, 0x3F854B80, 0x3F8451C0, + 0x3F835800, 0x3F825E40, 0x3F816480, + 0x3F806AC0, 0x3F7F7100, 0x3F7E7740, + 0x3F7D7D80, 0x3F7C83C0, 0x3F7B8A00, + 0x3F7A9040, 0x3F799680, 0x3F789CC0, + 0x3F77A300, 0x3F76A940, 0x3F75AF80, + 0x3F74B5C0, 0x3F73BC00, 0x3F72C240, + 0x3F71C880, 0x3F70CEC0, 0x3F6FD500, + 0x3F6EDB40, 0x3F6DE180, 0x3F6CE7C0, + 0x3F6BEE00, 0x3F6AF440, 0x3F69FA80, + 0x3F6900C0, 0x3F680700, 0x3F670D40, + 0x3F661380, 0x3F6519C0, 0x3F642000, + 0x3F632640, 0x3F622C80, 0x3F6132C0, + 0x3F603900, 0x3F5F3F40, 0x3F5E4580, + 0x3F5D4BC0, 0x3F5C5200, 0x3F5B5840, + 0x3F5A5E80, 0x3F5964C0, 0x3F586B00, + 0x3F577140, 0x3F567780, 0x3F557DC0, + 0x3F548400, 0x3F538A40, 0x3F529080, + 0x3F5196C0, 0x3F509D00, 0x3F4FA340, + 0x3F4EA980, 0x3F4DAFC0, 0x3F4CB600, + 0x3F4BBC40, 0x3F4AC280, 0x3F49C8C0, + 0x3F48CF00, 0x3F47D540, 0x3F46DB80, + 0x3F45E1C0, 0x3F44E800, 0x3F43EE40, + 0x3F42F480, 0x3F41FAC0, 0x3F410100, + 0x3F400740, 0x3F3F0D80, 0x3F3E13C0, + 0x3F3D1A00, 0x3F3C2040, 0x3F3B2680, + 0x3F3A2CC0, 0x3F393300, 0x3F383940, + 0x3F373F80, 0x3F3645C0, 0x3F354C00, + 0x3F345240, 0x3F335880, 0x3F325EC0, + 0x3F316500, 0x3F306B40, 0x3F2F7180, + 0x3F2E77C0, 0x3F2D7E00, 0x3F2C8440, + 0x3F2B8A80, 0x3F2A90C0, 0x3F299700, + 0x3F289D40, 0x3F27A380, 0x3F26A9C0, + 0x3F25B000, 0x3F24B640, 0x3F23BC80, + 0x3F22C2C0, 0x3F21C900, 0x3F20CF40, + 0x3F1FD580, 0x3F1EDBC0, 0x3F1DE200, + 0x3F1CE840, 0x3F1BEE80, 0x3F1AF4C0, + 0x3F19FB00, 0x3F190140, 0x3F180780, + 0x3F170DC0, 0x3F161400, 0x3F151A40, + 0x3F142080, 0x3F1326C0, 0x3F122D00, + 0x3F113340, 0x3F103980, 0x3F0F3FC0, + 0x3F0E4600, 0x3F0D4C40, 0x3F0C5280, + 0x3F0B58C0, 0x3F0A5F00, 0x3F096540, + 0x3F086B80, 0x3F0771C0, 0x3F067800, + 0x3F057E40, 0x3F048480, 0x3F038AC0, + 0x3F029100, 0x3F019740, 0x3F009D80, + 0x3EFFA3C0, 0x3EFEAA00, 0x3EFDB040, + 0x3EFCB680, 0x3EFBBCC0, 0x3EFAC300, + 0x3EF9C940, 0x3EF8CF80, 0x3EF7D5C0, + 0x3EF6DC00, 0x3EF5E240, 0x3EF4E880, + 0x3EF3EEC0, 0x3EF2F500, 0x3EF1FB40, + 0x3EF10180, 0x3EF007C0, 0x3EEF0E00, + 0x3EEE1440, 0x3EED1A80, 0x3EEC20C0, + 0x3EEB2700, 0x3EEA2D40, 0x3EE93380, + 0x3EE839C0, 0x3EE74000, 0x3EE64640, + 0x3EE54C80, 0x3EE452C0, 0x3EE35900, + 0x3EE25F40, 0x3EE16580, 0x3EE06BC0, + 0x3EDF7200, 0x3EDE7840, 0x3EDD7E80, + 0x3EDC84C0, 0x3EDB8B00, 0x3EDA9140, + 0x3ED99780, 0x3ED89DC0, 0x3ED7A400, + 0x3ED6AA40, 0x3ED5B080, 0x3ED4B6C0, + 0x3ED3BD00, 0x3ED2C340, 0x3ED1C980, + 0x3ED0CFC0, 0x3ECFD600, 0x3ECEDC40, + 0x3ECDE280, 0x3ECCE8C0, 0x3ECBEF00, + 0x3ECAF540, 0x3EC9FB80, 0x3EC901C0, + 0x3EC80800, 0x3EC70E40, 0x3EC61480, + 0x3EC51AC0, 0x3EC42100, 0x3EC32740, + 0x3EC22D80, 0x3EC133C0, 0x3EC03A00, + 0x3EBF4040, 0x3EBE4680, 0x3EBD4CC0, + 0x3EBC5300, 0x3EBB5940, 0x3EBA5F80, + 0x3EB965C0, 0x3EB86C00, 0x3EB77240, + 0x3EB67880, 0x3EB57EC0, 0x3EB48500, + 0x3EB38B40, 0x3EB29180, 0x3EB197C0, + 0x3EB09E00, 0x3EAFA440, 0x3EAEAA80, + 0x3EADB0C0, 0x3EACB700, 0x3EABBD40, + 0x3EAAC380, 0x3EA9C9C0, 0x3EA8D000, + 0x3EA7D640, 0x3EA6DC80, 0x3EA5E2C0, + 0x3EA4E900, 0x3EA3EF40, 0x3EA2F580, + 0x3EA1FBC0, 0x3EA10200, 0x3EA00840, + 0x3E9F0E80, 0x3E9E14C0, 0x3E9D1B00, + 0x3E9C2140, 0x3E9B2780, 0x3E9A2DC0, + 0x3E993400, 0x3E983A40, 0x3E974080, + 0x3E9646C0, 0x3E954D00, 0x3E945340, + 0x3E935980, 0x3E925FC0, 0x3E916600, + 0x3E906C40, 0x3E8F7280, 0x3E8E78C0, + 0x3E8D7F00, 0x3E8C8540, 0x3E8B8B80, + 0x3E8A91C0, 0x3E899800, 0x3E889E40, + 0x3E87A480, 0x3E86AAC0, 0x3E85B100, + 0x3E84B740, 0x3E83BD80, 0x3E82C3C0, + 0x3E81CA00, 0x3E80D040, 0x3E7FD680, + 0x3E7EDCC0, 0x3E7DE300, 0x3E7CE940, + 0x3E7BEF80, 0x3E7AF5C0, 0x3E79FC00, + 0x3E790240, 0x3E780880, 0x3E770EC0, + 0x3E761500, 0x3E751B40, 0x3E742180, + 0x3E7327C0, 0x3E722E00, 0x3E713440, + 0x3E703A80, 0x3E6F40C0, 0x3E6E4700, + 0x3E6D4D40, 0x3E6C5380, 0x3E6B59C0, + 0x3E6A6000, 0x3E696640, 0x3E686C80, + 0x3E6772C0, 0x3E667900, 0x3E657F40, + 0x3E648580, 0x3E638BC0, 0x3E629200, + 0x3E619840, 0x3E609E80, 0x3E5FA4C0, + 0x3E5EAB00, 0x3E5DB140, 0x3E5CB780, + 0x3E5BBDC0, 0x3E5AC400, 0x3E59CA40, + 0x3E58D080, 0x3E57D6C0, 0x3E56DD00, + 0x3E55E340, 0x3E54E980, 0x3E53EFC0, + 0x3E52F600, 0x3E51FC40, 0x3E510280, + 0x3E5008C0, 0x3E4F0F00, 0x3E4E1540, + 0x3E4D1B80, 0x3E4C21C0, 0x3E4B2800, + 0x3E4A2E40, 0x3E493480, 0x3E483AC0, + 0x3E474100, 0x3E464740, 0x3E454D80, + 0x3E4453C0, 0x3E435A00, 0x3E426040, + 0x3E416680, 0x3E406CC0, 0x3E3F7300, + 0x3E3E7940, 0x3E3D7F80, 0x3E3C85C0, + 0x3E3B8C00, 0x3E3A9240, 0x3E399880, + 0x3E389EC0, 0x3E37A500, 0x3E36AB40, + 0x3E35B180, 0x3E34B7C0, 0x3E33BE00, + 0x3E32C440, 0x3E31CA80, 0x3E30D0C0, + 0x3E2FD700, 0x3E2EDD40, 0x3E2DE380, + 0x3E2CE9C0, 0x3E2BF000, 0x3E2AF640, + 0x3E29FC80, 0x3E2902C0, 0x3E280900, + 0x3E270F40, 0x3E261580, 0x3E251BC0, + 0x3E242200, 0x3E232840, 0x3E222E80, + 0x3E2134C0, 0x3E203B00, 0x3E1F4140, + 0x3E1E4780, 0x3E1D4DC0, 0x3E1C5400, + 0x3E1B5A40, 0x3E1A6080, 0x3E1966C0, + 0x3E186D00, 0x3E177340, 0x3E167980, + 0x3E157FC0, 0x3E148600, 0x3E138C40, + 0x3E129280, 0x3E1198C0, 0x3E109F00, + 0x3E0FA540, 0x3E0EAB80, 0x3E0DB1C0, + 0x3E0CB800, 0x3E0BBE40, 0x3E0AC480, + 0x3E09CAC0, 0x3E08D100, 0x3E07D740, + 0x3E06DD80, 0x3E05E3C0, 0x3E04EA00, + 0x3E03F040, 0x3E02F680, 0x3E01FCC0, + 0x3E010300, 0x3E000940, 0x3DFF0F80, + 0x3DFE15C0, 0x3DFD1C00, 0x3DFC2240, + 0x3DFB2880, 0x3DFA2EC0, 0x3DF93500, + 0x3DF83B40, 0x3DF74180, 0x3DF647C0, + 0x3DF54E00, 0x3DF45440, 0x3DF35A80, + 0x3DF260C0, 0x3DF16700, 0x3DF06D40, + 0x3DEF7380, 0x3DEE79C0, 0x3DED8000, + 0x3DEC8640, 0x3DEB8C80, 0x3DEA92C0, + 0x3DE99900, 0x3DE89F40, 0x3DE7A580, + 0x3DE6ABC0, 0x3DE5B200, 0x3DE4B840, + 0x3DE3BE80, 0x3DE2C4C0, 0x3DE1CB00, + 0x3DE0D140, 0x3DDFD780, 0x3DDEDDC0, + 0x3DDDE400, 0x3DDCEA40, 0x3DDBF080, + 0x3DDAF6C0, 0x3DD9FD00, 0x3DD90340, + 0x3DD80980, 0x3DD70FC0, 0x3DD61600, + 0x3DD51C40, 0x3DD42280, 0x3DD328C0, + 0x3DD22F00, 0x3DD13540, 0x3DD03B80, + 0x3DCF41C0, 0x3DCE4800, 0x3DCD4E40, + 0x3DCC5480, 0x3DCB5AC0, 0x3DCA6100, + 0x3DC96740, 0x3DC86D80, 0x3DC773C0, + 0x3DC67A00, 0x3DC58040, 0x3DC48680, + 0x3DC38CC0, 0x3DC29300, 0x3DC19940, + 0x3DC09F80, 0x3DBFA5C0, 0x3DBEAC00, + 0x3DBDB240, 0x3DBCB880, 0x3DBBBEC0, + 0x3DBAC500, 0x3DB9CB40, 0x3DB8D180, + 0x3DB7D7C0, 0x3DB6DE00, 0x3DB5E440, + 0x3DB4EA80, 0x3DB3F0C0, 0x3DB2F700, + 0x3DB1FD40, 0x3DB10380, 0x3DB009C0, + 0x3DAF1000, 0x3DAE1640, 0x3DAD1C80, + 0x3DAC22C0, 0x3DAB2900, 0x3DAA2F40, + 0x3DA93580, 0x3DA83BC0, 0x3DA74200, + 0x3DA64840, 0x3DA54E80, 0x3DA454C0, + 0x3DA35B00, 0x3DA26140, 0x3DA16780, + 0x3DA06DC0, 0x3D9F7400, 0x3D9E7A40, + 0x3D9D8080, 0x3D9C86C0, 0x3D9B8D00, + 0x3D9A9340, 0x3D999980, 0x3D989FC0, + 0x3D97A600, 0x3D96AC40, 0x3D95B280, + 0x3D94B8C0, 0x3D93BF00, 0x3D92C540, + 0x3D91CB80, 0x3D90D1C0, 0x3D8FD800, + 0x3D8EDE40, 0x3D8DE480, 0x3D8CEAC0, + 0x3D8BF100, 0x3D8AF740, 0x3D89FD80, + 0x3D8903C0, 0x3D880A00, 0x3D871040, + 0x3D861680, 0x3D851CC0, 0x3D842300, + 0x3D832940, 0x3D822F80, 0x3D8135C0, + 0x3D803C00, 0x3D7F4240, 0x3D7E4880, + 0x3D7D4EC0, 0x3D7C5500, 0x3D7B5B40, + 0x3D7A6180, 0x3D7967C0, 0x3D786E00, + 0x3D777440, 0x3D767A80, 0x3D7580C0, + 0x3D748700, 0x3D738D40, 0x3D729380, + 0x3D7199C0, 0x3D70A000, 0x3D6FA640, + 0x3D6EAC80, 0x3D6DB2C0, 0x3D6CB900, + 0x3D6BBF40, 0x3D6AC580, 0x3D69CBC0, + 0x3D68D200, 0x3D67D840, 0x3D66DE80, + 0x3D65E4C0, 0x3D64EB00, 0x3D63F140, + 0x3D62F780, 0x3D61FDC0, 0x3D610400, + 0x3D600A40, 0x3D5F1080, 0x3D5E16C0, + 0x3D5D1D00, 0x3D5C2340, 0x3D5B2980, + 0x3D5A2FC0, 0x3D593600, 0x3D583C40, + 0x3D574280, 0x3D5648C0, 0x3D554F00, + 0x3D545540, 0x3D535B80, 0x3D5261C0, + 0x3D516800, 0x3D506E40, 0x3D4F7480, + 0x3D4E7AC0, 0x3D4D8100, 0x3D4C8740, + 0x3D4B8D80, 0x3D4A93C0, 0x3D499A00, + 0x3D48A040, 0x3D47A680, 0x3D46ACC0, + 0x3D45B300, 0x3D44B940, 0x3D43BF80, + 0x3D42C5C0, 0x3D41CC00, 0x3D40D240, + 0x3D3FD880, 0x3D3EDEC0, 0x3D3DE500, + 0x3D3CEB40, 0x3D3BF180, 0x3D3AF7C0, + 0x3D39FE00, 0x3D390440, 0x3D380A80, + 0x3D3710C0, 0x3D361700, 0x3D351D40, + 0x3D342380, 0x3D3329C0, 0x3D323000, + 0x3D313640, 0x3D303C80, 0x3D2F42C0, + 0x3D2E4900, 0x3D2D4F40, 0x3D2C5580, + 0x3D2B5BC0, 0x3D2A6200, 0x3D296840, + 0x3D286E80, 0x3D2774C0, 0x3D267B00, + 0x3D258140, 0x3D248780, 0x3D238DC0, + 0x3D229400, 0x3D219A40, 0x3D20A080, + 0x3D1FA6C0, 0x3D1EAD00, 0x3D1DB340, + 0x3D1CB980, 0x3D1BBFC0, 0x3D1AC600, + 0x3D19CC40, 0x3D18D280, 0x3D17D8C0, + 0x3D16DF00, 0x3D15E540, 0x3D14EB80, + 0x3D13F1C0, 0x3D12F800, 0x3D11FE40, + 0x3D110480, 0x3D100AC0, 0x3D0F1100, + 0x3D0E1740, 0x3D0D1D80, 0x3D0C23C0, + 0x3D0B2A00, 0x3D0A3040, 0x3D093680, + 0x3D083CC0, 0x3D074300, 0x3D064940, + 0x3D054F80, 0x3D0455C0, 0x3D035C00, + 0x3D026240, 0x3D016880, 0x3D006EC0, + 0x3CFF7500, 0x3CFE7B40, 0x3CFD8180, + 0x3CFC87C0, 0x3CFB8E00, 0x3CFA9440, + 0x3CF99A80, 0x3CF8A0C0, 0x3CF7A700, + 0x3CF6AD40, 0x3CF5B380, 0x3CF4B9C0, + 0x3CF3C000, 0x3CF2C640, 0x3CF1CC80, + 0x3CF0D2C0, 0x3CEFD900, 0x3CEEDF40, + 0x3CEDE580, 0x3CECEBC0, 0x3CEBF200, + 0x3CEAF840, 0x3CE9FE80, 0x3CE904C0, + 0x3CE80B00, 0x3CE71140, 0x3CE61780, + 0x3CE51DC0, 0x3CE42400, 0x3CE32A40, + 0x3CE23080, 0x3CE136C0, 0x3CE03D00, + 0x3CDF4340, 0x3CDE4980, 0x3CDD4FC0, + 0x3CDC5600, 0x3CDB5C40, 0x3CDA6280, + 0x3CD968C0, 0x3CD86F00, 0x3CD77540, + 0x3CD67B80, 0x3CD581C0, 0x3CD48800, + 0x3CD38E40, 0x3CD29480, 0x3CD19AC0, + 0x3CD0A100, 0x3CCFA740, 0x3CCEAD80, + 0x3CCDB3C0, 0x3CCCBA00, 0x3CCBC040, + 0x3CCAC680, 0x3CC9CCC0, 0x3CC8D300, + 0x3CC7D940, 0x3CC6DF80, 0x3CC5E5C0, + 0x3CC4EC00, 0x3CC3F240, 0x3CC2F880, + 0x3CC1FEC0, 0x3CC10500, 0x3CC00B40, + 0x3CBF1180, 0x3CBE17C0, 0x3CBD1E00, + 0x3CBC2440, 0x3CBB2A80, 0x3CBA30C0, + 0x3CB93700, 0x3CB83D40, 0x3CB74380, + 0x3CB649C0, 0x3CB55000, 0x3CB45640, + 0x3CB35C80, 0x3CB262C0, 0x3CB16900, + 0x3CB06F40, 0x3CAF7580, 0x3CAE7BC0, + 0x3CAD8200, 0x3CAC8840, 0x3CAB8E80, + 0x3CAA94C0, 0x3CA99B00, 0x3CA8A140, + 0x3CA7A780, 0x3CA6ADC0, 0x3CA5B400, + 0x3CA4BA40, 0x3CA3C080, 0x3CA2C6C0, + 0x3CA1CD00, 0x3CA0D340, 0x3C9FD980, + 0x3C9EDFC0, 0x3C9DE600, 0x3C9CEC40, + 0x3C9BF280, 0x3C9AF8C0, 0x3C99FF00, + 0x3C990540, 0x3C980B80, 0x3C9711C0, + 0x3C961800, 0x3C951E40, 0x3C942480, + 0x3C932AC0, 0x3C923100, 0x3C913740, + 0x3C903D80, 0x3C8F43C0, 0x3C8E4A00, + 0x3C8D5040, 0x3C8C5680, 0x3C8B5CC0, + 0x3C8A6300, 0x3C896940, 0x3C886F80, + 0x3C8775C0, 0x3C867C00, 0x3C858240, + 0x3C848880, 0x3C838EC0, 0x3C829500, + 0x3C819B40, 0x3C80A180, 0x3C7FA7C0, + 0x3C7EAE00, 0x3C7DB440, 0x3C7CBA80, + 0x3C7BC0C0, 0x3C7AC700, 0x3C79CD40, + 0x3C78D380, 0x3C77D9C0, 0x3C76E000, + 0x3C75E640, 0x3C74EC80, 0x3C73F2C0, + 0x3C72F900, 0x3C71FF40, 0x3C710580, + 0x3C700BC0, 0x3C6F1200, 0x3C6E1840, + 0x3C6D1E80, 0x3C6C24C0, 0x3C6B2B00, + 0x3C6A3140, 0x3C693780, 0x3C683DC0, + 0x3C674400, 0x3C664A40, 0x3C655080, + 0x3C6456C0, 0x3C635D00, 0x3C626340, + 0x3C616980, 0x3C606FC0, 0x3C5F7600, + 0x3C5E7C40, 0x3C5D8280, 0x3C5C88C0, + 0x3C5B8F00, 0x3C5A9540, 0x3C599B80, + 0x3C58A1C0, 0x3C57A800, 0x3C56AE40, + 0x3C55B480, 0x3C54BAC0, 0x3C53C100, + 0x3C52C740, 0x3C51CD80, 0x3C50D3C0, + 0x3C4FDA00, 0x3C4EE040, 0x3C4DE680, + 0x3C4CECC0, 0x3C4BF300, 0x3C4AF940, + 0x3C49FF80, 0x3C4905C0, 0x3C480C00, + 0x3C471240, 0x3C461880, 0x3C451EC0, + 0x3C442500, 0x3C432B40, 0x3C423180, + 0x3C4137C0, 0x3C403E00, 0x3C3F4440, + 0x3C3E4A80, 0x3C3D50C0, 0x3C3C5700, + 0x3C3B5D40, 0x3C3A6380, 0x3C3969C0, + 0x3C387000, 0x3C377640, 0x3C367C80, + 0x3C3582C0, 0x3C348900, 0x3C338F40, + 0x3C329580, 0x3C319BC0, 0x3C30A200, + 0x3C2FA840, 0x3C2EAE80, 0x3C2DB4C0, + 0x3C2CBB00, 0x3C2BC140, 0x3C2AC780, + 0x3C29CDC0, 0x3C28D400, 0x3C27DA40, + 0x3C26E080, 0x3C25E6C0, 0x3C24ED00, + 0x3C23F340, 0x3C22F980, 0x3C21FFC0, + 0x3C210600, 0x3C200C40, 0x3C1F1280, + 0x3C1E18C0, 0x3C1D1F00, 0x3C1C2540, + 0x3C1B2B80, 0x3C1A31C0, 0x3C193800, + 0x3C183E40, 0x3C174480, 0x3C164AC0, + 0x3C155100, 0x3C145740, 0x3C135D80, + 0x3C1263C0, 0x3C116A00, 0x3C107040, + 0x3C0F7680, 0x3C0E7CC0, 0x3C0D8300, + 0x3C0C8940, 0x3C0B8F80, 0x3C0A95C0, + 0x3C099C00, 0x3C08A240, 0x3C07A880, + 0x3C06AEC0, 0x3C05B500, 0x3C04BB40, + 0x3C03C180, 0x3C02C7C0, 0x3C01CE00, + 0x3C00D440, 0x3BFFDA80, 0x3BFEE0C0, + 0x3BFDE700, 0x3BFCED40, 0x3BFBF380, + 0x3BFAF9C0, 0x3BFC0000, 0x3BFB1780, + 0x3BFA2F00, 0x3BF94680, 0x3BF85E00, + 0x3BF77580, 0x3BF68D00, 0x3BF5A480, + 0x3BF4BC00, 0x3BF3D380, 0x3BF2EB00, + 0x3BF20280, 0x3BF11A00, 0x3BF03180, + 0x3BEF4900, 0x3BEE6080, 0x3BED7800, + 0x3BEC8F80, 0x3BEBA700, 0x3BEABE80, + 0x3BE9D600, 0x3BE8ED80, 0x3BE80500, + 0x3BE71C80, 0x3BE63400, 0x3BE54B80, + 0x3BE46300, 0x3BE37A80, 0x3BE29200, + 0x3BE1A980, 0x3BE0C100, 0x3BDFD880, + 0x3BDEF000, 0x3BDE0780, 0x3BDD1F00, + 0x3BDC3680, 0x3BDB4E00, 0x3BDA6580, + 0x3BD97D00, 0x3BD89480, 0x3BD7AC00, + 0x3BD6C380, 0x3BD5DB00, 0x3BD4F280, + 0x3BD40A00, 0x3BD32180, 0x3BD23900, + 0x3BD15080, 0x3BD06800, 0x3BCF7F80, + 0x3BCE9700, 0x3BCDAE80, 0x3BCCC600, + 0x3BCBDD80, 0x3BCAF500, 0x3BCA0C80, + 0x3BC92400, 0x3BC83B80, 0x3BC75300, + 0x3BC66A80, 0x3BC58200, 0x3BC49980, + 0x3BC3B100, 0x3BC2C880, 0x3BC1E000, + 0x3BC0F780, 0x3BC00F00, 0x3BBF2680, + 0x3BBE3E00, 0x3BBD5580, 0x3BBC6D00, + 0x3BBB8480, 0x3BBA9C00, 0x3BB9B380, + 0x3BB8CB00, 0x3BB7E280, 0x3BB6FA00, + 0x3BB61180, 0x3BB52900, 0x3BB44080, + 0x3BB35800, 0x3BB26F80, 0x3BB18700, + 0x3BB09E80, 0x3BAFB600, 0x3BAECD80, + 0x3BADE500, 0x3BACFC80, 0x3BAC1400, + 0x3BAB2B80, 0x3BAA4300, 0x3BA95A80, + 0x3BA87200, 0x3BA78980, 0x3BA6A100, + 0x3BA5B880, 0x3BA4D000, 0x3BA3E780, + 0x3BA2FF00, 0x3BA21680, 0x3BA12E00, + 0x3BA04580, 0x3B9F5D00, 0x3B9E7480, + 0x3B9D8C00, 0x3B9CA380, 0x3B9BBB00, + 0x3B9AD280, 0x3B99EA00, 0x3B990180, + 0x3B981900, 0x3B973080, 0x3B964800, + 0x3B955F80, 0x3B947700, 0x3B938E80, + 0x3B92A600, 0x3B91BD80, 0x3B90D500, + 0x3B8FEC80, 0x3B8F0400, 0x3B8E1B80, + 0x3B8D3300, 0x3B8C4A80, 0x3B8B6200, + 0x3B8A7980, 0x3B899100, 0x3B88A880, + 0x3B87C000, 0x3B86D780, 0x3B85EF00, + 0x3B850680, 0x3B841E00, 0x3B833580, + 0x3B824D00, 0x3B816480, 0x3B807C00, + 0x3B7F9380, 0x3B7EAB00, 0x3B7DC280, + 0x3B7CDA00, 0x3B7BF180, 0x3B7B0900, + 0x3B7A2080, 0x3B793800, 0x3B784F80, + 0x3B776700, 0x3B767E80, 0x3B759600, + 0x3B74AD80, 0x3B73C500, 0x3B72DC80, + 0x3B71F400, 0x3B710B80, 0x3B702300, + 0x3B6F3A80, 0x3B6E5200, 0x3B6D6980, + 0x3B6C8100, 0x3B6B9880, 0x3B6AB000, + 0x3B69C780, 0x3B68DF00, 0x3B67F680, + 0x3B670E00, 0x3B662580, 0x3B653D00, + 0x3B645480, 0x3B636C00, 0x3B628380, + 0x3B619B00, 0x3B60B280, 0x3B5FCA00, + 0x3B5EE180, 0x3B5DF900, 0x3B5D1080, + 0x3B5C2800, 0x3B5B3F80, 0x3B5A5700, + 0x3B596E80, 0x3B588600, 0x3B579D80, + 0x3B56B500, 0x3B55CC80, 0x3B54E400, + 0x3B53FB80, 0x3B531300, 0x3B522A80, + 0x3B514200, 0x3B505980, 0x3B4F7100, + 0x3B4E8880, 0x3B4DA000, 0x3B4CB780, + 0x3B4BCF00, 0x3B4AE680, 0x3B49FE00, + 0x3B491580, 0x3B482D00, 0x3B474480, + 0x3B465C00, 0x3B457380, 0x3B448B00, + 0x3B43A280, 0x3B42BA00, 0x3B41D180, + 0x3B40E900, 0x3B400080, 0x3B3F1800, + 0x3B3E2F80, 0x3B3D4700, 0x3B3C5E80, + 0x3B3B7600, 0x3B3A8D80, 0x3B39A500, + 0x3B38BC80, 0x3B37D400, 0x3B36EB80, + 0x3B360300, 0x3B351A80, 0x3B343200, + 0x3B334980, 0x3B326100, 0x3B317880, + 0x3B309000, 0x3B2FA780, 0x3B2EBF00, + 0x3B2DD680, 0x3B2CEE00, 0x3B2C0580, + 0x3B2B1D00, 0x3B2A3480, 0x3B294C00, + 0x3B286380, 0x3B277B00, 0x3B269280, + 0x3B25AA00, 0x3B24C180, 0x3B23D900, + 0x3B22F080, 0x3B220800, 0x3B211F80, + 0x3B203700, 0x3B1F4E80, 0x3B1E6600, + 0x3B1D7D80, 0x3B1C9500, 0x3B1BAC80, + 0x3B1AC400, 0x3B19DB80, 0x3B18F300, + 0x3B180A80, 0x3B172200, 0x3B163980, + 0x3B155100, 0x3B146880, 0x3B138000, + 0x3B129780, 0x3B11AF00, 0x3B10C680, + 0x3B0FDE00, 0x3B0EF580, 0x3B0E0D00, + 0x3B0D2480, 0x3B0C3C00, 0x3B0B5380, + 0x3B0A6B00, 0x3B098280, 0x3B089A00, + 0x3B07B180, 0x3B06C900, 0x3B05E080, + 0x3B04F800, 0x3B040F80, 0x3B032700, + 0x3B023E80, 0x3B015600, 0x3B006D80, + 0x3AFF8500, 0x3AFE9C80, 0x3AFDB400, + 0x3AFCCB80, 0x3AFBE300, 0x3AFAFA80, + 0x3AFA1200, 0x3AF92980, 0x3AF84100, + 0x3AF75880, 0x3AF67000, 0x3AF58780, + 0x3AF49F00, 0x3AF3B680, 0x3AF2CE00, + 0x3AF1E580, 0x3AF0FD00, 0x3AF01480, + 0x3AEF2C00, 0x3AEE4380, 0x3AED5B00, + 0x3AEC7280, 0x3AEB8A00, 0x3AEAA180, + 0x3AE9B900, 0x3AE8D080, 0x3AE7E800, + 0x3AE6FF80, 0x3AE61700, 0x3AE52E80, + 0x3AE44600, 0x3AE35D80, 0x3AE27500, + 0x3AE18C80, 0x3AE0A400, 0x3ADFBB80, + 0x3ADED300, 0x3ADDEA80, 0x3ADD0200, + 0x3ADC1980, 0x3ADB3100, 0x3ADA4880, + 0x3AD96000, 0x3AD87780, 0x3AD78F00, + 0x3AD6A680, 0x3AD5BE00, 0x3AD4D580, + 0x3AD3ED00, 0x3AD30480, 0x3AD21C00, + 0x3AD13380, 0x3AD04B00, 0x3ACF6280, + 0x3ACE7A00, 0x3ACD9180, 0x3ACCA900, + 0x3ACBC080, 0x3ACAD800, 0x3AC9EF80, + 0x3AC90700, 0x3AC81E80, 0x3AC73600, + 0x3AC64D80, 0x3AC56500, 0x3AC47C80, + 0x3AC39400, 0x3AC2AB80, 0x3AC1C300, + 0x3AC0DA80, 0x3ABFF200, 0x3ABF0980, + 0x3ABE2100, 0x3ABD3880, 0x3ABC5000, + 0x3ABB6780, 0x3ABA7F00, 0x3AB99680, + 0x3AB8AE00, 0x3AB7C580, 0x3AB6DD00, + 0x3AB5F480, 0x3AB50C00, 0x3AB42380, + 0x3AB33B00, 0x3AB25280, 0x3AB16A00, + 0x3AB08180, 0x3AAF9900, 0x3AAEB080, + 0x3AADC800, 0x3AACDF80, 0x3AABF700, + 0x3AAB0E80, 0x3AAA2600, 0x3AA93D80, + 0x3AA85500, 0x3AA76C80, 0x3AA68400, + 0x3AA59B80, 0x3AA4B300, 0x3AA3CA80, + 0x3AA2E200, 0x3AA1F980, 0x3AA11100, + 0x3AA02880, 0x3A9F4000, 0x3A9E5780, + 0x3A9D6F00, 0x3A9C8680, 0x3A9B9E00, + 0x3A9AB580, 0x3A99CD00, 0x3A98E480, + 0x3A97FC00, 0x3A971380, 0x3A962B00, + 0x3A954280, 0x3A945A00, 0x3A937180, + 0x3A928900, 0x3A91A080, 0x3A90B800, + 0x3A8FCF80, 0x3A8EE700, 0x3A8DFE80, + 0x3A8D1600, 0x3A8C2D80, 0x3A8B4500, + 0x3A8A5C80, 0x3A897400, 0x3A888B80, + 0x3A87A300, 0x3A86BA80, 0x3A85D200, + 0x3A84E980, 0x3A840100, 0x3A831880, + 0x3A823000, 0x3A814780, 0x3A805F00, + 0x3A7F7680, 0x3A7E8E00, 0x3A7DA580, + 0x3A7CBD00, 0x3A7BD480, 0x3A7AEC00, + 0x3A7A0380, 0x3A791B00, 0x3A783280, + 0x3A774A00, 0x3A766180, 0x3A757900, + 0x3A749080, 0x3A73A800, 0x3A72BF80, + 0x3A71D700, 0x3A70EE80, 0x3A700600, + 0x3A6F1D80, 0x3A6E3500, 0x3A6D4C80, + 0x3A6C6400, 0x3A6B7B80, 0x3A6A9300, + 0x3A69AA80, 0x3A68C200, 0x3A67D980, + 0x3A66F100, 0x3A660880, 0x3A652000, + 0x3A643780, 0x3A634F00, 0x3A626680, + 0x3A617E00, 0x3A609580, 0x3A5FAD00, + 0x3A5EC480, 0x3A5DDC00, 0x3A5CF380, + 0x3A5C0B00, 0x3A5B2280, 0x3A5A3A00, + 0x3A595180, 0x3A586900, 0x3A578080, + 0x3A569800, 0x3A55AF80, 0x3A54C700, + 0x3A53DE80, 0x3A52F600, 0x3A520D80, + 0x3A512500, 0x3A503C80, 0x3A4F5400, + 0x3A4E6B80, 0x3A4D8300, 0x3A4C9A80, + 0x3A4BB200, 0x3A4AC980, 0x3A49E100, + 0x3A48F880, 0x3A481000, 0x3A472780, + 0x3A463F00, 0x3A455680, 0x3A446E00, + 0x3A438580, 0x3A429D00, 0x3A41B480, + 0x3A40CC00, 0x3A3FE380, 0x3A3EFB00, + 0x3A3E1280, 0x3A3D2A00, 0x3A3C4180, + 0x3A3B5900, 0x3A3A7080, 0x3A398800, + 0x3A389F80, 0x3A37B700, 0x3A36CE80, + 0x3A35E600, 0x3A34FD80, 0x3A341500, + 0x3A332C80, 0x3A324400, 0x3A315B80, + 0x3A307300, 0x3A2F8A80, 0x3A2EA200, + 0x3A2DB980, 0x3A2CD100, 0x3A2BE880, + 0x3A2B0000, 0x3A2A1780, 0x3A292F00, + 0x3A284680, 0x3A275E00, 0x3A267580, + 0x3A258D00, 0x3A24A480, 0x3A23BC00, + 0x3A22D380, 0x3A21EB00, 0x3A210280, + 0x3A201A00, 0x3A1F3180, 0x3A1E4900, + 0x3A1D6080, 0x3A1C7800, 0x3A1B8F80, + 0x3A1AA700, 0x3A19BE80, 0x3A18D600, + 0x3A17ED80, 0x3A170500, 0x3A161C80, + 0x3A153400, 0x3A144B80, 0x3A136300, + 0x3A127A80, 0x3A119200, 0x3A10A980, + 0x3A0FC100, 0x3A0ED880, 0x3A0DF000, + 0x3A0D0780, 0x3A0C1F00, 0x3A0B3680, + 0x3A0A4E00, 0x3A096580, 0x3A087D00, + 0x3A079480, 0x3A06AC00, 0x3A05C380, + 0x3A04DB00, 0x3A03F280, 0x3A030A00, + 0x3A022180, 0x3A013900, 0x3A005080, + 0x39FF6800, 0x39FE7F80, 0x39FD9700, + 0x39FCAE80, 0x39FBC600, 0x39FADD80, + 0x39F9F500, 0x39F90C80, 0x39F82400, + 0x39F73B80, 0x39F65300, 0x39F56A80, + 0x39F48200, 0x39F39980, 0x39F2B100, + 0x39F1C880, 0x39F0E000, 0x39EFF780, + 0x39EF0F00, 0x39EE2680, 0x39ED3E00, + 0x39EC5580, 0x39EB6D00, 0x39EA8480, + 0x39E99C00, 0x39E8B380, 0x39E7CB00, + 0x39E6E280, 0x39E5FA00, 0x39E51180, + 0x39E42900, 0x39E34080, 0x39E25800, + 0x39E16F80, 0x39E08700, 0x39DF9E80, + 0x39DEB600, 0x39DDCD80, 0x39DCE500, + 0x39DBFC80, 0x39DB1400, 0x39DA2B80, + 0x39D94300, 0x39D85A80, 0x39D77200, + 0x39D68980, 0x39D5A100, 0x39D4B880, + 0x39D3D000, 0x39D2E780, 0x39D1FF00, + 0x39D11680, 0x39D02E00, 0x39CF4580, + 0x39CE5D00, 0x39CD7480, 0x39CC8C00, + 0x39CBA380, 0x39CABB00, 0x39C9D280, + 0x39C8EA00, 0x39C80180, 0x39C71900, + 0x39C63080, 0x39C54800, 0x39C45F80, + 0x39C37700, 0x39C28E80, 0x39C1A600, + 0x39C0BD80, 0x39BFD500, 0x39BEEC80, + 0x39BE0400, 0x39BD1B80, 0x39BC3300, + 0x39BB4A80, 0x39BA6200, 0x39B97980, + 0x39B89100, 0x39B7A880, 0x39B6C000, + 0x39B5D780, 0x39B4EF00, 0x39B40680, + 0x39B31E00, 0x39B23580, 0x39B14D00, + 0x39B06480, 0x39AF7C00, 0x39AE9380, + 0x39ADAB00, 0x39ACC280, 0x39ABDA00, + 0x39AAF180, 0x39AA0900, 0x39A92080, + 0x39A83800, 0x39A74F80, 0x39A66700, + 0x39A57E80, 0x39A49600, 0x39A3AD80, + 0x39A2C500, 0x39A1DC80, 0x39A0F400, + 0x39A00B80, 0x399F2300, 0x399E3A80, + 0x399D5200, 0x399C6980, 0x399B8100, + 0x399A9880, 0x3999B000, 0x3998C780, + 0x3997DF00, 0x3996F680, 0x39960E00, + 0x39952580, 0x39943D00, 0x39935480, + 0x39926C00, 0x39918380, 0x39909B00, + 0x398FB280, 0x398ECA00, 0x398DE180, + 0x398CF900, 0x398C1080, 0x398B2800, + 0x398A3F80, 0x39895700, 0x39886E80, + 0x39878600, 0x39869D80, 0x3985B500, + 0x3984CC80, 0x3983E400, 0x3982FB80, + 0x39821300, 0x39812A80, 0x39804200, + 0x397F5980, 0x397E7100, 0x397D8880, + 0x397CA000, 0x397BB780, 0x397ACF00, + 0x3979E680, 0x3978FE00, 0x39781580, + 0x39772D00, 0x39764480, 0x39755C00, + 0x39747380, 0x39738B00, 0x3972A280, + 0x3971BA00, 0x3970D180, 0x396FE900, + 0x396F0080, 0x396E1800, 0x396D2F80, + 0x396C4700, 0x396B5E80, 0x396A7600, + 0x39698D80, 0x3968A500, 0x3967BC80, + 0x3966D400, 0x3965EB80, 0x39650300, + 0x39641A80, 0x39633200, 0x39624980, + 0x39616100, 0x39607880, 0x395F9000, + 0x395EA780, 0x395DBF00, 0x395CD680, + 0x395BEE00, 0x395B0580, 0x395A1D00, + 0x39593480, 0x39584C00, 0x39576380, + 0x39567B00, 0x39559280, 0x3954AA00, + 0x3953C180, 0x3952D900, 0x3951F080, + 0x39510800, 0x39501F80, 0x394F3700, + 0x394E4E80, 0x394D6600, 0x394C7D80, + 0x394B9500, 0x394AAC80, 0x3949C400, + 0x3948DB80, 0x3947F300, 0x39470A80, + 0x39462200, 0x39453980, 0x39445100, + 0x39436880, 0x39428000, 0x39419780, + 0x3940AF00, 0x393FC680, 0x393EDE00, + 0x393DF580, 0x393D0D00, 0x393C2480, + 0x393B3C00, 0x393A5380, 0x39396B00, + 0x39388280, 0x39379A00, 0x3936B180, + 0x3935C900, 0x3934E080, 0x3933F800, + 0x39330F80, 0x39322700, 0x39313E80, + 0x39305600, 0x392F6D80, 0x392E8500, + 0x392D9C80, 0x392CB400, 0x392BCB80, + 0x392AE300, 0x3929FA80, 0x39291200, + 0x39282980, 0x39274100, 0x39265880, + 0x39257000, 0x39248780, 0x39239F00, + 0x3922B680, 0x3921CE00, 0x3920E580, + 0x391FFD00, 0x391F1480, 0x391E2C00, + 0x391D4380, 0x391C5B00, 0x391B7280, + 0x391A8A00, 0x3919A180, 0x3918B900, + 0x3917D080, 0x3916E800, 0x3915FF80, + 0x39151700, 0x39142E80, 0x39134600, + 0x39125D80, 0x39117500, 0x39108C80, + 0x390FA400, 0x390EBB80, 0x390DD300, + 0x390CEA80, 0x390C0200, 0x390B1980, + 0x390A3100, 0x39094880, 0x39086000, + 0x39077780, 0x39068F00, 0x3905A680, + 0x3904BE00, 0x3903D580, 0x3902ED00, + 0x39020480, 0x39011C00, 0x39003380, + 0x38FF4B00, 0x38FE6280, 0x38FD7A00, + 0x38FC9180, 0x38FBA900, 0x38FAC080, + 0x38F9D800, 0x38F8EF80, 0x38F80700, + 0x38F71E80, 0x38F63600, 0x38F54D80, + 0x38F46500, 0x38F37C80, 0x38F29400, + 0x38F1AB80, 0x38F0C300, 0x38EFDA80, + 0x38EEF200, 0x38EE0980, 0x38ED2100, + 0x38EC3880, 0x38EB5000, 0x38EA6780, + 0x38E97F00, 0x38E89680, 0x38E7AE00, + 0x38E6C580, 0x38E5DD00, 0x38E4F480, + 0x38E40C00, 0x38E32380, 0x38E23B00, + 0x38E15280, 0x38E06A00, 0x38DF8180, + 0x38DE9900, 0x38DDB080, 0x38DCC800, + 0x38DBDF80, 0x38DAF700, 0x38DA0E80, + 0x38D92600, 0x38D83D80, 0x38D75500, + 0x38D66C80, 0x38D58400, 0x38D49B80, + 0x38D3B300, 0x38D2CA80, 0x38D1E200, + 0x38D0F980, 0x38D01100, 0x38CF2880, + 0x38CE4000, 0x38CD5780, 0x38CC6F00, + 0x38CB8680, 0x38CA9E00, 0x38C9B580, + 0x38C8CD00, 0x38C7E480, 0x38C6FC00, + 0x38C61380, 0x38C52B00, 0x38C44280, + 0x38C35A00, 0x38C27180, 0x38C18900, + 0x38C0A080, 0x38BFB800, 0x38BECF80, + 0x38BDE700, 0x38BCFE80, 0x38BC1600, + 0x38BB2D80, 0x38BA4500, 0x38B95C80, + 0x38B87400, 0x38B78B80, 0x38B6A300, + 0x38B5BA80, 0x38B4D200, 0x38B3E980, + 0x38B30100, 0x38B21880, 0x38B13000, + 0x38B04780, 0x38AF5F00, 0x38AE7680, + 0x38AD8E00, 0x38ACA580, 0x38ABBD00, + 0x38AAD480, 0x38A9EC00, 0x38A90380, + 0x38A81B00, 0x38A73280, 0x38A64A00, + 0x38A56180, 0x38A47900, 0x38A39080, + 0x38A2A800, 0x38A1BF80, 0x38A0D700, + 0x389FEE80, 0x389F0600, 0x389E1D80, + 0x389D3500, 0x389C4C80, 0x389B6400, + 0x389A7B80, 0x38999300, 0x3898AA80, + 0x3897C200, 0x3896D980, 0x3895F100, + 0x38950880, 0x38942000, 0x38933780, + 0x38924F00, 0x38916680, 0x38907E00, + 0x388F9580, 0x388EAD00, 0x388DC480, + 0x388CDC00, 0x388BF380, 0x388B0B00, + 0x388A2280, 0x38893A00, 0x38885180, + 0x38876900, 0x38868080, 0x38859800, + 0x3884AF80, 0x3883C700, 0x3882DE80, + 0x3881F600, 0x38810D80, 0x38802500, + 0x387F3C80, 0x387E5400, 0x387D6B80, + 0x387C8300, 0x387B9A80, 0x387AB200, + 0x3879C980, 0x3878E100, 0x3877F880, + 0x38771000, 0x38762780, 0x38753F00, + 0x38745680, 0x38736E00, 0x38728580, + 0x38719D00, 0x3870B480, 0x386FCC00, + 0x386EE380, 0x386DFB00, 0x386D1280, + 0x386C2A00, 0x386B4180, 0x386A5900, + 0x38697080, 0x38688800, 0x38679F80, + 0x3866B700, 0x3865CE80, 0x3864E600, + 0x3863FD80, 0x38631500, 0x38622C80, + 0x38614400, 0x38605B80, 0x385F7300, + 0x385E8A80, 0x385DA200, 0x385CB980, + 0x385BD100, 0x385AE880, 0x385A0000, + 0x38591780, 0x38582F00, 0x38574680, + 0x38565E00, 0x38557580, 0x38548D00, + 0x3853A480, 0x3852BC00, 0x3851D380, + 0x3850EB00, 0x38500280, 0x384F1A00, + 0x384E3180, 0x384D4900, 0x384C6080, + 0x384B7800, 0x384A8F80, 0x3849A700, + 0x3848BE80, 0x3847D600, 0x3846ED80, + 0x38460500, 0x38451C80, 0x38443400, + 0x38434B80, 0x38426300, 0x38417A80, + 0x38409200, 0x383FA980, 0x383EC100, + 0x383DD880, 0x383CF000, 0x383C0780, + 0x383B1F00, 0x383A3680, 0x38394E00, + 0x38386580, 0x38377D00, 0x38369480, + 0x3835AC00, 0x3834C380, 0x3833DB00, + 0x3832F280, 0x38320A00, 0x38312180, + 0x38303900, 0x382F5080, 0x382E6800, + 0x382D7F80, 0x382C9700, 0x382BAE80, + 0x382AC600, 0x3829DD80, 0x3828F500, + 0x38280C80, 0x38272400, 0x38263B80, + 0x38255300, 0x38246A80, 0x38238200, + 0x38229980, 0x3821B100, 0x3820C880, + 0x381FE000, 0x381EF780, 0x381E0F00, + 0x381D2680, 0x381C3E00, 0x381B5580, + 0x381A6D00, 0x38198480, 0x38189C00, + 0x3817B380, 0x3816CB00, 0x3815E280, + 0x3814FA00, 0x38141180, 0x38132900, + 0x38124080, 0x38115800, 0x38106F80, + 0x380F8700, 0x380E9E80, 0x380DB600, + 0x380CCD80, 0x380BE500, 0x380AFC80, + 0x380A1400, 0x38092B80, 0x38084300, + 0x38075A80, 0x38067200, 0x38058980, + 0x3804A100, 0x3803B880, 0x3802D000, + 0x3801E780, 0x3800FF00, 0x38001680, + 0x37FF2E00, 0x37FE4580, 0x37FD5D00, + 0x37FC7480, 0x37FB8C00, 0x37FAA380, + 0x37F9BB00, 0x37F8D280, 0x37F7EA00, + 0x37F70180, 0x37F61900, 0x37F53080, + 0x37F44800, 0x37F35F80, 0x37F27700, + 0x37F18E80, 0x37F0A600, 0x37EFBD80, + 0x37EED500, 0x37EDEC80, 0x37ED0400, + 0x37EC1B80, 0x37EB3300, 0x37EA4A80, + 0x37E96200, 0x37E87980, 0x37E79100, + 0x37E6A880, 0x37E5C000, 0x37E4D780, + 0x37E3EF00, 0x37E30680, 0x37E21E00, + 0x37E13580, 0x37E04D00, 0x37DF6480, + 0x37DE7C00, 0x37DD9380, 0x37DCAB00, + 0x37DBC280, 0x37DADA00, 0x37D9F180, + 0x37D90900, 0x37D82080, 0x37D73800, + 0x37D64F80, 0x37D56700, 0x37D47E80, + 0x37D39600, 0x37D2AD80, 0x37D1C500, + 0x37D0DC80, 0x37CFF400, 0x37CF0B80, + 0x37CE2300, 0x37CD3A80, 0x37CC5200, + 0x37CB6980, 0x37CA8100, 0x37C99880, + 0x37C8B000, 0x37C7C780, 0x37C6DF00, + 0x37C5F680, 0x37C50E00, 0x37C42580, + 0x37C33D00, 0x37C25480, 0x37C16C00, + 0x37C08380, 0x37BF9B00, 0x37BEB280, + 0x37BDCA00, 0x37BCE180, 0x37BBF900, + 0x37BB1080, 0x37BA2800, 0x37B93F80, + 0x37B85700, 0x37B76E80, 0x37B68600, + 0x37B59D80, 0x37B4B500, 0x37B3CC80, + 0x37B2E400, 0x37B1FB80, 0x37B11300, + 0x37B02A80, 0x37AF4200, 0x37AE5980, + 0x37AD7100, 0x37AC8880, 0x37ABA000, + 0x37AAB780, 0x37A9CF00, 0x37A8E680, + 0x37A7FE00, 0x37A71580, 0x37A62D00, + 0x37A54480, 0x37A45C00, 0x37A37380, + 0x37A28B00, 0x37A1A280, 0x37A0BA00, + 0x379FD180, 0x379EE900, 0x379E0080, + 0x379D1800, 0x379C2F80, 0x379B4700, + 0x379A5E80, 0x37997600, 0x37988D80, + 0x3797A500, 0x3796BC80, 0x3795D400, + 0x3794EB80, 0x37940300, 0x37931A80, + 0x37923200, 0x37914980, 0x37906100, + 0x378F7880, 0x378E9000, 0x378DA780, + 0x378CBF00, 0x378BD680, 0x378AEE00, + 0x378A0580, 0x37891D00, 0x37883480, + 0x37874C00, 0x37866380, 0x37857B00, + 0x37849280, 0x3783AA00, 0x3782C180, + 0x3781D900, 0x3780F080, 0x37800800, + 0x377F1F80, 0x377E3700, 0x377D4E80, + 0x377C6600, 0x377B7D80, 0x377A9500, + 0x3779AC80, 0x3778C400, 0x3777DB80, + 0x3776F300, 0x37760A80, 0x37752200, + 0x37743980, 0x37735100, 0x37726880, + 0x37718000, 0x37709780, 0x376FAF00, + 0x376EC680, 0x376DDE00, 0x376CF580, + 0x376C0D00, 0x376B2480, 0x376A3C00, + 0x37695380, 0x37686B00, 0x37678280, + 0x37669A00, 0x3765B180, 0x3764C900, + 0x3763E080, 0x3762F800, 0x37620F80, + 0x37612700, 0x37603E80, 0x375F5600, + 0x375E6D80, 0x375D8500, 0x375C9C80, + 0x375BB400, 0x375ACB80, 0x3759E300, + 0x3758FA80, 0x37581200, 0x37572980, + 0x37564100, 0x37555880, 0x37547000, + 0x37538780, 0x37529F00, 0x3751B680, + 0x3750CE00, 0x374FE580, 0x374EFD00, + 0x374E1480, 0x374D2C00, 0x374C4380, + 0x374B5B00, 0x374A7280, 0x37498A00, + 0x3748A180, 0x3747B900, 0x3746D080, + 0x3745E800, 0x3744FF80, 0x37441700, + 0x37432E80, 0x37424600, 0x37415D80, + 0x37407500, 0x373F8C80, 0x373EA400, + 0x373DBB80, 0x373CD300, 0x373BEA80, + 0x373B0200, 0x373A1980, 0x37393100, + 0x37384880, 0x37376000, 0x37367780, + 0x37358F00, 0x3734A680, 0x3733BE00, + 0x3732D580, 0x3731ED00, 0x37310480, + 0x37301C00, 0x372F3380, 0x372E4B00, + 0x372D6280, 0x372C7A00, 0x372B9180, + 0x372AA900, 0x3729C080, 0x3728D800, + 0x3727EF80, 0x37270700, 0x37261E80, + 0x37253600, 0x37244D80, 0x37236500, + 0x37227C80, 0x37219400, 0x3720AB80, + 0x371FC300, 0x371EDA80, 0x371DF200, + 0x371D0980, 0x371C2100, 0x371B3880, + 0x371A5000, 0x37196780, 0x37187F00, + 0x37179680, 0x3716AE00, 0x3715C580, + 0x3714DD00, 0x3713F480, 0x37130C00, + 0x37122380, 0x37113B00, 0x37105280, + 0x370F6A00, 0x370E8180, 0x370D9900, + 0x370CB080, 0x370BC800, 0x370ADF80, + 0x3709F700, 0x37090E80, 0x37082600, + 0x37073D80, 0x37065500, 0x37056C80, + 0x37048400, 0x37039B80, 0x3702B300, + 0x3701CA80, 0x3700E200, 0x36FFF980, + 0x36FF1100, 0x36FE2880, 0x36FD4000, + 0x36FC5780, 0x36FB6F00, 0x36FA8680, + 0x36F99E00, 0x36F8B580, 0x36F7CD00, + 0x36F6E480, 0x36F5FC00, 0x36F51380, + 0x36F42B00, 0x36F34280, 0x36F25A00, + 0x36F17180, 0x36F08900, 0x36EFA080, + 0x36EEB800, 0x36EDCF80, 0x36ECE700, + 0x36EBFE80, 0x36EB1600, 0x36EA2D80, + 0x36E94500, 0x36E85C80, 0x36E77400, + 0x36E68B80, 0x36E5A300, 0x36E4BA80, + 0x36E3D200, 0x36E2E980, 0x36E20100, + 0x36E11880, 0x36E03000, 0x36DF4780, + 0x36DE5F00, 0x36DD7680, 0x36DC8E00, + 0x36DBA580, 0x36DABD00, 0x36D9D480, + 0x36D8EC00, 0x36D80380, 0x36D71B00, + 0x36D63280, 0x36D54A00, 0x36D46180, + 0x36D37900, 0x36D29080, 0x36D1A800, + 0x36D0BF80, 0x36CFD700, 0x36CEEE80, + 0x36CE0600, 0x36CD1D80, 0x36CC3500, + 0x36CB4C80, 0x36CA6400, 0x36C97B80, + 0x36C89300, 0x36C7AA80, 0x36C6C200, + 0x36C5D980, 0x36C4F100, 0x36C40880, + 0x36C32000, 0x36C23780, 0x36C14F00, + 0x36C06680, 0x36BF7E00, 0x36BE9580, + 0x36BDAD00, 0x36BCC480, 0x36BBDC00, + 0x36BAF380, 0x36BA0B00, 0x36B92280, + 0x36B83A00, 0x36B75180, 0x36B66900, + 0x36B58080, 0x36B49800, 0x36B3AF80, + 0x36B2C700, 0x36B1DE80, 0x36B0F600, + 0x36B00D80, 0x36AF2500, 0x36AE3C80, + 0x36AD5400, 0x36AC6B80, 0x36AB8300, + 0x36AA9A80, 0x36A9B200, 0x36A8C980, + 0x36A7E100, 0x36A6F880, 0x36A61000, + 0x36A52780, 0x36A43F00, 0x36A35680, + 0x36A26E00, 0x36A18580, 0x36A09D00, + 0x369FB480, 0x369ECC00, 0x369DE380, + 0x369CFB00, 0x369C1280, 0x369B2A00, + 0x369A4180, 0x36995900, 0x36987080, + 0x36978800, 0x36969F80, 0x3695B700, + 0x3694CE80, 0x3693E600, 0x3692FD80, + 0x36921500, 0x36912C80, 0x36904400, + 0x368F5B80, 0x368E7300, 0x368D8A80, + 0x368CA200, 0x368BB980, 0x368AD100, + 0x3689E880, 0x36890000, 0x36881780, + 0x36872F00, 0x36864680, 0x36855E00, + 0x36847580, 0x36838D00, 0x3682A480, + 0x3681BC00, 0x3680D380, 0x367FEB00, + 0x367F0280, 0x367E1A00, 0x367D3180, + 0x367C4900, 0x367B6080, 0x367A7800, + 0x36798F80, 0x3678A700, 0x3677BE80, + 0x3676D600, 0x3675ED80, 0x36750500, + 0x36741C80, 0x36733400, 0x36724B80, + 0x36716300, 0x36707A80, 0x366F9200, + 0x366EA980, 0x366DC100, 0x366CD880, + 0x366BF000, 0x366B0780, 0x366A1F00, + 0x36693680, 0x36684E00, 0x36676580, + 0x36667D00, 0x36659480, 0x3664AC00, + 0x3663C380, 0x3662DB00, 0x3661F280, + 0x36610A00, 0x36602180, 0x365F3900, + 0x365E5080, 0x365D6800, 0x365C7F80, + 0x365B9700, 0x365AAE80, 0x3659C600, + 0x3658DD80, 0x3657F500, 0x36570C80, + 0x36562400, 0x36553B80, 0x36545300, + 0x36536A80, 0x36528200, 0x36519980, + 0x3650B100, 0x364FC880, 0x364EE000, + 0x364DF780, 0x364D0F00, 0x364C2680, + 0x364B3E00, 0x364A5580, 0x36496D00, + 0x36488480, 0x36479C00, 0x3646B380, + 0x3645CB00, 0x3644E280, 0x3643FA00, + 0x36431180, 0x36422900, 0x36414080, + 0x36405800, 0x363F6F80, 0x363E8700, + 0x363D9E80, 0x363CB600, 0x363BCD80, + 0x363AE500, 0x3639FC80, 0x36391400, + 0x36382B80, 0x36374300, 0x36365A80, + 0x36357200, 0x36348980, 0x3633A100, + 0x3632B880, 0x3631D000, 0x3630E780, + 0x362FFF00, 0x362F1680, 0x362E2E00, + 0x362D4580, 0x362C5D00, 0x362B7480, + 0x362A8C00, 0x3629A380, 0x3628BB00, + 0x3627D280, 0x3626EA00, 0x36260180, + 0x36251900, 0x36243080, 0x36234800, + 0x36225F80, 0x36217700, 0x36208E80, + 0x361FA600, 0x361EBD80, 0x361DD500, + 0x361CEC80, 0x361C0400, 0x361B1B80, + 0x361A3300, 0x36194A80, 0x36186200, + 0x36177980, 0x36169100, 0x3615A880, + 0x3614C000, 0x3613D780, 0x3612EF00, + 0x36120680, 0x36111E00, 0x36103580, + 0x360F4D00, 0x360E6480, 0x360D7C00, + 0x360C9380, 0x360BAB00, 0x360AC280, + 0x3609DA00, 0x3608F180, 0x36080900, + 0x36072080, 0x36063800, 0x36054F80, + 0x36046700, 0x36037E80, 0x36029600, + 0x3601AD80, 0x3600C500, 0x35FFDC80, + 0x35FEF400, 0x35FE0B80, 0x35FD2300, + 0x35FC3A80, 0x35FB5200, 0x35FA6980, + 0x35F98100, 0x35F89880, 0x35F7B000, + 0x35F6C780, 0x35F5DF00, 0x35F4F680, + 0x35F40E00, 0x35F32580, 0x35F23D00, + 0x35F15480, 0x35F06C00, 0x35EF8380, + 0x35EE9B00, 0x35EDB280, 0x35ECCA00, + 0x35EBE180, 0x35EAF900, 0x35EA1080, + 0x35E92800, 0x35E83F80, 0x35E75700, + 0x35E66E80, 0x35E58600, 0x35E49D80, + 0x35E3B500, 0x35E2CC80, 0x35E1E400, + 0x35E0FB80, 0x35E01300, 0x35DF2A80, + 0x35DE4200, 0x35DD5980, 0x35DC7100, + 0x35DB8880, 0x35DAA000, 0x35D9B780, + 0x35D8CF00, 0x35D7E680, 0x35D6FE00, + 0x35D61580, 0x35D52D00, 0x35D44480, + 0x35D35C00, 0x35D27380, 0x35D18B00, + 0x35D0A280, 0x35CFBA00, 0x35CED180, + 0x35CDE900, 0x35CD0080, 0x35CC1800, + 0x35CB2F80, 0x35CA4700, 0x35C95E80, + 0x35C87600, 0x35C78D80, 0x35C6A500, + 0x35C5BC80, 0x35C4D400, 0x35C3EB80, + 0x35C30300, 0x35C21A80, 0x35C13200, + 0x35C04980, 0x35BF6100, 0x35BE7880, + 0x35BD9000, 0x35BCA780, 0x35BBBF00, + 0x35BAD680, 0x35B9EE00, 0x35B90580, + 0x35B81D00, 0x35B73480, 0x35B64C00, + 0x35B56380, 0x35B47B00, 0x35B39280, + 0x35B2AA00, 0x35B1C180, 0x35B0D900, + 0x35AFF080, 0x35AF0800, 0x35AE1F80, + 0x35AD3700, 0x35AC4E80, 0x35AB6600, + 0x35AA7D80, 0x35A99500, 0x35A8AC80, + 0x35A7C400, 0x35A6DB80, 0x35A5F300, + 0x35A50A80, 0x35A42200, 0x35A33980, + 0x35A25100, 0x35A16880, 0x35A08000, + 0x359F9780, 0x359EAF00, 0x359DC680, + 0x359CDE00, 0x359BF580, 0x359B0D00, + 0x359A2480, 0x35993C00, 0x35985380, + 0x35976B00, 0x35968280, 0x35959A00, + 0x3594B180, 0x3593C900, 0x3592E080, + 0x3591F800, 0x35910F80, 0x35902700, + 0x358F3E80, 0x358E5600, 0x358D6D80, + 0x358C8500, 0x358B9C80, 0x358AB400, + 0x3589CB80, 0x3588E300, 0x3587FA80, + 0x35871200, 0x35862980, 0x35854100, + 0x35845880, 0x35837000, 0x35828780, + 0x35819F00, 0x3580B680, 0x357FCE00, + 0x357EE580, 0x357DFD00, 0x357D1480, + 0x357C2C00, 0x357B4380, 0x357A5B00, + 0x35797280, 0x35788A00, 0x3577A180, + 0x3576B900, 0x3575D080, 0x3574E800, + 0x3573FF80, 0x35731700, 0x35722E80, + 0x35714600, 0x35705D80, 0x356F7500, + 0x356E8C80, 0x356DA400, 0x356CBB80, + 0x356BD300, 0x356AEA80, 0x356A0200, + 0x35691980, 0x35683100, 0x35674880, + 0x35666000, 0x35657780, 0x35648F00, + 0x3563A680, 0x3562BE00, 0x3561D580, + 0x3560ED00, 0x35600480, 0x355F1C00, + 0x355E3380, 0x355D4B00, 0x355C6280, + 0x355B7A00, 0x355A9180, 0x3559A900, + 0x3558C080, 0x3557D800, 0x3556EF80, + 0x35560700, 0x35551E80, 0x35543600, + 0x35534D80, 0x35526500, 0x35517C80, + 0x35509400, 0x354FAB80, 0x354EC300, + 0x354DDA80, 0x354CF200, 0x354C0980, + 0x354B2100, 0x354A3880, 0x35495000, + 0x35486780, 0x35477F00, 0x35469680, + 0x3545AE00, 0x3544C580, 0x3543DD00, + 0x3542F480, 0x35420C00, 0x35412380, + 0x35403B00, 0x353F5280, 0x353E6A00, + 0x353D8180, 0x353C9900, 0x353BB080, + 0x353AC800, 0x3539DF80, 0x3538F700, + 0x35380E80, 0x35372600, 0x35363D80, + 0x35355500, 0x35346C80, 0x35338400, + 0x35329B80, 0x3531B300, 0x3530CA80, + 0x352FE200, 0x352EF980, 0x352E1100, + 0x352D2880, 0x352C4000, 0x352B5780, + 0x352A6F00, 0x35298680, 0x35289E00, + 0x3527B580, 0x3526CD00, 0x3525E480, + 0x3524FC00, 0x35241380, 0x35232B00, + 0x35224280, 0x35215A00, 0x35207180, + 0x351F8900, 0x351EA080, 0x351DB800, + 0x351CCF80, 0x351BE700, 0x351AFE80, + 0x351A1600, 0x35192D80, 0x35184500, + 0x35175C80, 0x35167400, 0x35158B80, + 0x3514A300, 0x3513BA80, 0x3512D200, + 0x3511E980, 0x35110100, 0x35101880, + 0x350F3000, 0x350E4780, 0x350D5F00, + 0x350C7680, 0x350B8E00, 0x350AA580, + 0x3509BD00, 0x3508D480, 0x3507EC00, + 0x35070380, 0x35061B00, 0x35053280, + 0x35044A00, 0x35036180, 0x35027900, + 0x35019080, 0x3500A800, 0x34FFBF80, + 0x34FED700, 0x34FDEE80, 0x34FD0600, + 0x34FC1D80, 0x34FB3500, 0x34FA4C80, + 0x34F96400, 0x34F87B80, 0x34F79300, + 0x34F6AA80, 0x34F5C200, 0x34F4D980, + 0x34F3F100, 0x34F30880, 0x34F22000, + 0x34F13780, 0x34F04F00, 0x34EF6680, + 0x34EE7E00, 0x34ED9580, 0x34ECAD00, + 0x34EBC480, 0x34EADC00, 0x34E9F380, + 0x34E90B00, 0x34E82280, 0x34E73A00, + 0x34E65180, 0x34E56900, 0x34E48080, + 0x34E39800, 0x34E2AF80, 0x34E1C700, + 0x34E0DE80, 0x34DFF600, 0x34DF0D80, + 0x34DE2500, 0x34DD3C80, 0x34DC5400, + 0x34DB6B80, 0x34DA8300, 0x34D99A80, + 0x34D8B200, 0x34D7C980, 0x34D6E100, + 0x34D5F880, 0x34D51000, 0x34D42780, + 0x34D33F00, 0x34D25680, 0x34D16E00, + 0x34D08580, 0x34CF9D00, 0x34CEB480, + 0x34CDCC00, 0x34CCE380, 0x34CBFB00, + 0x34CB1280, 0x34CA2A00, 0x34C94180, + 0x34C85900, 0x34C77080, 0x34C68800, + 0x34C59F80, 0x34C4B700, 0x34C3CE80, + 0x34C2E600, 0x34C1FD80, 0x34C11500, + 0x34C02C80, 0x34BF4400, 0x34BE5B80, + 0x34BD7300, 0x34BC8A80, 0x34BBA200, + 0x34BAB980, 0x34B9D100, 0x34B8E880, + 0x34B80000, 0x34B726C0, 0x34B64D80, + 0x34B57440, 0x34B49B00, 0x34B3C1C0, + 0x34B2E880, 0x34B20F40, 0x34B13600, + 0x34B05CC0, 0x34AF8380, 0x34AEAA40, + 0x34ADD100, 0x34ACF7C0, 0x34AC1E80, + 0x34AB4540, 0x34AA6C00, 0x34A992C0, + 0x34A8B980, 0x34A7E040, 0x34A70700, + 0x34A62DC0, 0x34A55480, 0x34A47B40, + 0x34A3A200, 0x34A2C8C0, 0x34A1EF80, + 0x34A11640, 0x34A03D00, 0x349F63C0, + 0x349E8A80, 0x349DB140, 0x349CD800, + 0x349BFEC0, 0x349B2580, 0x349A4C40, + 0x34997300, 0x349899C0, 0x3497C080, + 0x3496E740, 0x34960E00, 0x349534C0, + 0x34945B80, 0x34938240, 0x3492A900, + 0x3491CFC0, 0x3490F680, 0x34901D40, + 0x348F4400, 0x348E6AC0, 0x348D9180, + 0x348CB840, 0x348BDF00, 0x348B05C0, + 0x348A2C80, 0x34895340, 0x34887A00, + 0x3487A0C0, 0x3486C780, 0x3485EE40, + 0x34851500, 0x34843BC0, 0x34836280, + 0x34828940, 0x3481B000, 0x3480D6C0, + 0x347FFD80, 0x347F2440, 0x347E4B00, + 0x347D71C0, 0x347C9880, 0x347BBF40, + 0x347AE600, 0x347A0CC0, 0x34793380, + 0x34785A40, 0x34778100, 0x3476A7C0, + 0x3475CE80, 0x3474F540, 0x34741C00, + 0x347342C0, 0x34726980, 0x34719040, + 0x3470B700, 0x346FDDC0, 0x346F0480, + 0x346E2B40, 0x346D5200, 0x346C78C0, + 0x346B9F80, 0x346AC640, 0x3469ED00, + 0x346913C0, 0x34683A80, 0x34676140, + 0x34668800, 0x3465AEC0, 0x3464D580, + 0x3463FC40, 0x34632300, 0x346249C0, + 0x34617080, 0x34609740, 0x345FBE00, + 0x345EE4C0, 0x345E0B80, 0x345D3240, + 0x345C5900, 0x345B7FC0, 0x345AA680, + 0x3459CD40, 0x3458F400, 0x34581AC0, + 0x34574180, 0x34566840, 0x34558F00, + 0x3454B5C0, 0x3453DC80, 0x34530340, + 0x34522A00, 0x345150C0, 0x34507780, + 0x344F9E40, 0x344EC500, 0x344DEBC0, + 0x344D1280, 0x344C3940, 0x344B6000, + 0x344A86C0, 0x3449AD80, 0x3448D440, + 0x3447FB00, 0x344721C0, 0x34464880, + 0x34456F40, 0x34449600, 0x3443BCC0, + 0x3442E380, 0x34420A40, 0x34413100, + 0x344057C0, 0x343F7E80, 0x343EA540, + 0x343DCC00, 0x343CF2C0, 0x343C1980, + 0x343B4040, 0x343A6700, 0x34398DC0, + 0x3438B480, 0x3437DB40, 0x34370200, + 0x343628C0, 0x34354F80, 0x34347640, + 0x34339D00, 0x3432C3C0, 0x3431EA80, + 0x34311140, 0x34303800, 0x342F5EC0, + 0x342E8580, 0x342DAC40, 0x342CD300, + 0x342BF9C0, 0x342B2080, 0x342A4740, + 0x34296E00, 0x342894C0, 0x3427BB80, + 0x3426E240, 0x34260900, 0x34252FC0, + 0x34245680, 0x34237D40, 0x3422A400, + 0x3421CAC0, 0x3420F180, 0x34201840, + 0x341F3F00, 0x341E65C0, 0x341D8C80, + 0x341CB340, 0x341BDA00, 0x341B00C0, + 0x341A2780, 0x34194E40, 0x34187500, + 0x34179BC0, 0x3416C280, 0x3415E940, + 0x34151000, 0x341436C0, 0x34135D80, + 0x34128440, 0x3411AB00, 0x3410D1C0, + 0x340FF880, 0x340F1F40, 0x340E4600, + 0x340D6CC0, 0x340C9380, 0x340BBA40, + 0x340AE100, 0x340A07C0, 0x34092E80, + 0x34085540, 0x34077C00, 0x3406A2C0, + 0x3405C980, 0x3404F040, 0x34041700, + 0x34033DC0, 0x34026480, 0x34018B40, + 0x3400B200, 0x33FFD8C0, 0x33FEFF80, + 0x33FE2640, 0x33FD4D00, 0x33FC73C0, + 0x33FB9A80, 0x33FAC140, 0x33F9E800, + 0x33F90EC0, 0x33F83580, 0x33F75C40, + 0x33F68300, 0x33F5A9C0, 0x33F4D080, + 0x33F3F740, 0x33F31E00, 0x33F244C0, + 0x33F16B80, 0x33F09240, 0x33EFB900, + 0x33EEDFC0, 0x33EE0680, 0x33ED2D40, + 0x33EC5400, 0x33EB7AC0, 0x33EAA180, + 0x33E9C840, 0x33E8EF00, 0x33E815C0, + 0x33E73C80, 0x33E66340, 0x33E58A00, + 0x33E4B0C0, 0x33E3D780, 0x33E2FE40, + 0x33E22500, 0x33E14BC0, 0x33E07280, + 0x33DF9940, 0x33DEC000, 0x33DDE6C0, + 0x33DD0D80, 0x33DC3440, 0x33DB5B00, + 0x33DA81C0, 0x33D9A880, 0x33D8CF40, + 0x33D7F600, 0x33D71CC0, 0x33D64380, + 0x33D56A40, 0x33D49100, 0x33D3B7C0, + 0x33D2DE80, 0x33D20540, 0x33D12C00, + 0x33D052C0, 0x33CF7980, 0x33CEA040, + 0x33CDC700, 0x33CCEDC0, 0x33CC1480, + 0x33CB3B40, 0x33CA6200, 0x33C988C0, + 0x33C8AF80, 0x33C7D640, 0x33C6FD00, + 0x33C623C0, 0x33C54A80, 0x33C47140, + 0x33C39800, 0x33C2BEC0, 0x33C1E580, + 0x33C10C40, 0x33C03300, 0x33BF59C0, + 0x33BE8080, 0x33BDA740, 0x33BCCE00, + 0x33BBF4C0, 0x33BB1B80, 0x33BA4240, + 0x33B96900, 0x33B88FC0, 0x33B7B680, + 0x33B6DD40, 0x33B60400, 0x33B52AC0, + 0x33B45180, 0x33B37840, 0x33B29F00, + 0x33B1C5C0, 0x33B0EC80, 0x33B01340, + 0x33AF3A00, 0x33AE60C0, 0x33AD8780, + 0x33ACAE40, 0x33ABD500, 0x33AAFBC0, + 0x33AA2280, 0x33A94940, 0x33A87000, + 0x33A796C0, 0x33A6BD80, 0x33A5E440, + 0x33A50B00, 0x33A431C0, 0x33A35880, + 0x33A27F40, 0x33A1A600, 0x33A0CCC0, + 0x339FF380, 0x339F1A40, 0x339E4100, + 0x339D67C0, 0x339C8E80, 0x339BB540, + 0x339ADC00, 0x339A02C0, 0x33992980, + 0x33985040, 0x33977700, 0x33969DC0, + 0x3395C480, 0x3394EB40, 0x33941200, + 0x339338C0, 0x33925F80, 0x33918640, + 0x3390AD00, 0x338FD3C0, 0x338EFA80, + 0x338E2140, 0x338D4800, 0x338C6EC0, + 0x338B9580, 0x338ABC40, 0x3389E300, + 0x338909C0, 0x33883080, 0x33875740, + 0x33867E00, 0x3385A4C0, 0x3384CB80, + 0x3383F240, 0x33831900, 0x33823FC0, + 0x33816680, 0x33808D40, 0x337FB400, + 0x337EDAC0, 0x337E0180, 0x337D2840, + 0x337C4F00, 0x337B75C0, 0x337A9C80, + 0x3379C340, 0x3378EA00, 0x337810C0, + 0x33773780, 0x33765E40, 0x33758500, + 0x3374ABC0, 0x3373D280, 0x3372F940, + 0x33722000, 0x337146C0, 0x33706D80, + 0x336F9440, 0x336EBB00, 0x336DE1C0, + 0x336D0880, 0x336C2F40, 0x336B5600, + 0x336A7CC0, 0x3369A380, 0x3368CA40, + 0x3367F100, 0x336717C0, 0x33663E80, + 0x33656540, 0x33648C00, 0x3363B2C0, + 0x3362D980, 0x33620040, 0x33612700, + 0x33604DC0, 0x335F7480, 0x335E9B40, + 0x335DC200, 0x335CE8C0, 0x335C0F80, + 0x335B3640, 0x335A5D00, 0x335983C0, + 0x3358AA80, 0x3357D140, 0x3356F800, + 0x33561EC0, 0x33554580, 0x33546C40, + 0x33539300, 0x3352B9C0, 0x3351E080, + 0x33510740, 0x33502E00, 0x334F54C0, + 0x334E7B80, 0x334DA240, 0x334CC900, + 0x334BEFC0, 0x334B1680, 0x334A3D40, + 0x33496400, 0x33488AC0, 0x3347B180, + 0x3346D840, 0x3345FF00, 0x334525C0, + 0x33444C80, 0x33437340, 0x33429A00, + 0x3341C0C0, 0x3340E780, 0x33400E40, + 0x333F3500, 0x333E5BC0, 0x333D8280, + 0x333CA940, 0x333BD000, 0x333AF6C0, + 0x333A1D80, 0x33394440, 0x33386B00, + 0x333791C0, 0x3336B880, 0x3335DF40, + 0x33350600, 0x33342CC0, 0x33335380, + 0x33327A40, 0x3331A100, 0x3330C7C0, + 0x332FEE80, 0x332F1540, 0x332E3C00, + 0x332D62C0, 0x332C8980, 0x332BB040, + 0x332AD700, 0x3329FDC0, 0x33292480, + 0x33284B40, 0x33277200, 0x332698C0, + 0x3325BF80, 0x3324E640, 0x33240D00, + 0x332333C0, 0x33225A80, 0x33218140, + 0x3320A800, 0x331FCEC0, 0x331EF580, + 0x331E1C40, 0x331D4300, 0x331C69C0, + 0x331B9080, 0x331AB740, 0x3319DE00, + 0x331904C0, 0x33182B80, 0x33175240, + 0x33167900, 0x33159FC0, 0x3314C680, + 0x3313ED40, 0x33131400, 0x33123AC0, + 0x33116180, 0x33108840, 0x330FAF00, + 0x330ED5C0, 0x330DFC80, 0x330D2340, + 0x330C4A00, 0x330B70C0, 0x330A9780, + 0x3309BE40, 0x3308E500, 0x33080BC0, + 0x33073280, 0x33065940, 0x33058000, + 0x3304A6C0, 0x3303CD80, 0x3302F440, + 0x33021B00, 0x330141C0, 0x33006880, + 0x32FF8F40, 0x32FEB600, 0x32FDDCC0, + 0x32FD0380, 0x32FC2A40, 0x32FB5100, + 0x32FA77C0, 0x32F99E80, 0x32F8C540, + 0x32F7EC00, 0x32F712C0, 0x32F63980, + 0x32F56040, 0x32F48700, 0x32F3ADC0, + 0x32F2D480, 0x32F1FB40, 0x32F12200, + 0x32F048C0, 0x32EF6F80, 0x32EE9640, + 0x32EDBD00, 0x32ECE3C0, 0x32EC0A80, + 0x32EB3140, 0x32EA5800, 0x32E97EC0, + 0x32E8A580, 0x32E7CC40, 0x32E6F300, + 0x32E619C0, 0x32E54080, 0x32E46740, + 0x32E38E00, 0x32E2B4C0, 0x32E1DB80, + 0x32E10240, 0x32E02900, 0x32DF4FC0, + 0x32DE7680, 0x32DD9D40, 0x32DCC400, + 0x32DBEAC0, 0x32DB1180, 0x32DA3840, + 0x32D95F00, 0x32D885C0, 0x32D7AC80, + 0x32D6D340, 0x32D5FA00, 0x32D520C0, + 0x32D44780, 0x32D36E40, 0x32D29500, + 0x32D1BBC0, 0x32D0E280, 0x32D00940, + 0x32CF3000, 0x32CE56C0, 0x32CD7D80, + 0x32CCA440, 0x32CBCB00, 0x32CAF1C0, + 0x32CA1880, 0x32C93F40, 0x32C86600, + 0x32C78CC0, 0x32C6B380, 0x32C5DA40, + 0x32C50100, 0x32C427C0, 0x32C34E80, + 0x32C27540, 0x32C19C00, 0x32C0C2C0, + 0x32BFE980, 0x32BF1040, 0x32BE3700, + 0x32BD5DC0, 0x32BC8480, 0x32BBAB40, + 0x32BAD200, 0x32B9F8C0, 0x32B91F80, + 0x32B84640, 0x32B76D00, 0x32B693C0, + 0x32B5BA80, 0x32B4E140, 0x32B40800, + 0x32B32EC0, 0x32B25580, 0x32B17C40, + 0x32B0A300, 0x32AFC9C0, 0x32AEF080, + 0x32AE1740, 0x32AD3E00, 0x32AC64C0, + 0x32AB8B80, 0x32AAB240, 0x32A9D900, + 0x32A8FFC0, 0x32A82680, 0x32A74D40, + 0x32A67400, 0x32A59AC0, 0x32A4C180, + 0x32A3E840, 0x32A30F00, 0x32A235C0, + 0x32A15C80, 0x32A08340, 0x329FAA00, + 0x329ED0C0, 0x329DF780, 0x329D1E40, + 0x329C4500, 0x329B6BC0, 0x329A9280, + 0x3299B940, 0x3298E000, 0x329806C0, + 0x32972D80, 0x32965440, 0x32957B00, + 0x3294A1C0, 0x3293C880, 0x3292EF40, + 0x32921600, 0x32913CC0, 0x32906380, + 0x328F8A40, 0x328EB100, 0x328DD7C0, + 0x328CFE80, 0x328C2540, 0x328B4C00, + 0x328A72C0, 0x32899980, 0x3288C040, + 0x3287E700, 0x32870DC0, 0x32863480, + 0x32855B40, 0x32848200, 0x3283A8C0, + 0x3282CF80, 0x3281F640, 0x32811D00, + 0x328043C0, 0x327F6A80, 0x327E9140, + 0x327DB800, 0x327CDEC0, 0x327C0580, + 0x327B2C40, 0x327A5300, 0x327979C0, + 0x3278A080, 0x3277C740, 0x3276EE00, + 0x327614C0, 0x32753B80, 0x32746240, + 0x32738900, 0x3272AFC0, 0x3271D680, + 0x3270FD40, 0x32702400, 0x326F4AC0, + 0x326E7180, 0x326D9840, 0x326CBF00, + 0x326BE5C0, 0x326B0C80, 0x326A3340, + 0x32695A00, 0x326880C0, 0x3267A780, + 0x3266CE40, 0x3265F500, 0x32651BC0, + 0x32644280, 0x32636940, 0x32629000, + 0x3261B6C0, 0x3260DD80, 0x32600440, + 0x325F2B00, 0x325E51C0, 0x325D7880, + 0x325C9F40, 0x325BC600, 0x325AECC0, + 0x325A1380, 0x32593A40, 0x32586100, + 0x325787C0, 0x3256AE80, 0x3255D540, + 0x3254FC00, 0x325422C0, 0x32534980, + 0x32527040, 0x32519700, 0x3250BDC0, + 0x324FE480, 0x324F0B40, 0x324E3200, + 0x324D58C0, 0x324C7F80, 0x324BA640, + 0x324ACD00, 0x3249F3C0, 0x32491A80, + 0x32484140, 0x32476800, 0x32468EC0, + 0x3245B580, 0x3244DC40, 0x32440300, + 0x324329C0, 0x32425080, 0x32417740, + 0x32409E00, 0x323FC4C0, 0x323EEB80, + 0x323E1240, 0x323D3900, 0x323C5FC0, + 0x323B8680, 0x323AAD40, 0x3239D400, + 0x3238FAC0, 0x32382180, 0x32374840, + 0x32366F00, 0x323595C0, 0x3234BC80, + 0x3233E340, 0x32330A00, 0x323230C0, + 0x32315780, 0x32307E40, 0x322FA500, + 0x322ECBC0, 0x322DF280, 0x322D1940, + 0x322C4000, 0x322B66C0, 0x322A8D80, + 0x3229B440, 0x3228DB00, 0x322801C0, + 0x32272880, 0x32264F40, 0x32257600, + 0x32249CC0, 0x3223C380, 0x3222EA40, + 0x32221100, 0x322137C0, 0x32205E80, + 0x321F8540, 0x321EAC00, 0x321DD2C0, + 0x321CF980, 0x321C2040, 0x321B4700, + 0x321A6DC0, 0x32199480, 0x3218BB40, + 0x3217E200, 0x321708C0, 0x32162F80, + 0x32155640, 0x32147D00, 0x3213A3C0, + 0x3212CA80, 0x3211F140, 0x32111800, + 0x32103EC0, 0x320F6580, 0x320E8C40, + 0x320DB300, 0x320CD9C0, 0x320C0080, + 0x320B2740, 0x320A4E00, 0x320974C0, + 0x32089B80, 0x3207C240, 0x3206E900, + 0x32060FC0, 0x32053680, 0x32045D40, + 0x32038400, 0x3202AAC0, 0x3201D180, + 0x3200F840, 0x32001F00, 0x31FF45C0, + 0x31FE6C80, 0x31FD9340, 0x31FCBA00, + 0x31FBE0C0, 0x31FB0780, 0x31FA2E40, + 0x31F95500, 0x31F87BC0, 0x31F7A280, + 0x31F6C940, 0x31F5F000, 0x31F516C0, + 0x31F43D80, 0x31F36440, 0x31F28B00, + 0x31F1B1C0, 0x31F0D880, 0x31EFFF40, + 0x31EF2600, 0x31EE4CC0, 0x31ED7380, + 0x31EC9A40, 0x31EBC100, 0x31EAE7C0, + 0x31EA0E80, 0x31E93540, 0x31E85C00, + 0x31E782C0, 0x31E6A980, 0x31E5D040, + 0x31E4F700, 0x31E41DC0, 0x31E34480, + 0x31E26B40, 0x31E19200, 0x31E0B8C0, + 0x31DFDF80, 0x31DF0640, 0x31DE2D00, + 0x31DD53C0, 0x31DC7A80, 0x31DBA140, + 0x31DAC800, 0x31D9EEC0, 0x31D91580, + 0x31D83C40, 0x31D76300, 0x31D689C0, + 0x31D5B080, 0x31D4D740, 0x31D3FE00, + 0x31D324C0, 0x31D24B80, 0x31D17240, + 0x31D09900, 0x31CFBFC0, 0x31CEE680, + 0x31CE0D40, 0x31CD3400, 0x31CC5AC0, + 0x31CB8180, 0x31CAA840, 0x31C9CF00, + 0x31C8F5C0, 0x31C81C80, 0x31C74340, + 0x31C66A00, 0x31C590C0, 0x31C4B780, + 0x31C3DE40, 0x31C30500, 0x31C22BC0, + 0x31C15280, 0x31C07940, 0x31BFA000, + 0x31BEC6C0, 0x31BDED80, 0x31BD1440, + 0x31BC3B00, 0x31BB61C0, 0x31BA8880, + 0x31B9AF40, 0x31B8D600, 0x31B7FCC0, + 0x31B72380, 0x31B64A40, 0x31B57100, + 0x31B497C0, 0x31B3BE80, 0x31B2E540, + 0x31B20C00, 0x31B132C0, 0x31B05980, + 0x31AF8040, 0x31AEA700, 0x31ADCDC0, + 0x31ACF480, 0x31AC1B40, 0x31AB4200, + 0x31AA68C0, 0x31A98F80, 0x31A8B640, + 0x31A7DD00, 0x31A703C0, 0x31A62A80, + 0x31A55140, 0x31A47800, 0x31A39EC0, + 0x31A2C580, 0x31A1EC40, 0x31A11300, + 0x31A039C0, 0x319F6080, 0x319E8740, + 0x319DAE00, 0x319CD4C0, 0x319BFB80, + 0x319B2240, 0x319A4900, 0x31996FC0, + 0x31989680, 0x3197BD40, 0x3196E400, + 0x31960AC0, 0x31953180, 0x31945840, + 0x31937F00, 0x3192A5C0, 0x3191CC80, + 0x3190F340, 0x31901A00, 0x318F40C0, + 0x318E6780, 0x318D8E40, 0x318CB500, + 0x318BDBC0, 0x318B0280, 0x318A2940, + 0x31895000, 0x318876C0, 0x31879D80, + 0x3186C440, 0x3185EB00, 0x318511C0, + 0x31843880, 0x31835F40, 0x31828600, + 0x3181ACC0, 0x3180D380, 0x317FFA40, + 0x317F2100, 0x317E47C0, 0x317D6E80, + 0x317C9540, 0x317BBC00, 0x317AE2C0, + 0x317A0980, 0x31793040, 0x31785700, + 0x31777DC0, 0x3176A480, 0x3175CB40, + 0x3174F200, 0x317418C0, 0x31733F80, + 0x31726640, 0x31718D00, 0x3170B3C0, + 0x316FDA80, 0x316F0140, 0x316E2800, + 0x316D4EC0, 0x316C7580, 0x316B9C40, + 0x316AC300, 0x3169E9C0, 0x31691080, + 0x31683740, 0x31675E00, 0x316684C0, + 0x3165AB80, 0x3164D240, 0x3163F900, + 0x31631FC0, 0x31624680, 0x31616D40, + 0x31609400, 0x315FBAC0, 0x315EE180, + 0x315E0840, 0x315D2F00, 0x315C55C0, + 0x315B7C80, 0x315AA340, 0x3159CA00, + 0x3158F0C0, 0x31581780, 0x31573E40, + 0x31566500, 0x31558BC0, 0x3154B280, + 0x3153D940, 0x31530000, 0x315226C0, + 0x31514D80, 0x31507440, 0x314F9B00, + 0x314EC1C0, 0x314DE880, 0x314D0F40, + 0x314C3600, 0x314B5CC0, 0x314A8380, + 0x3149AA40, 0x3148D100, 0x3147F7C0, + 0x31471E80, 0x31464540, 0x31456C00, + 0x314492C0, 0x3143B980, 0x3142E040, + 0x31420700, 0x31412DC0, 0x31405480, + 0x313F7B40, 0x313EA200, 0x313DC8C0, + 0x313CEF80, 0x313C1640, 0x313B3D00, + 0x313A63C0, 0x31398A80, 0x3138B140, + 0x3137D800, 0x3136FEC0, 0x31362580, + 0x31354C40, 0x31347300, 0x313399C0, + 0x3132C080, 0x3131E740, 0x31310E00, + 0x313034C0, 0x312F5B80, 0x312E8240, + 0x312DA900, 0x312CCFC0, 0x312BF680, + 0x312B1D40, 0x312A4400, 0x31296AC0, + 0x31289180, 0x3127B840, 0x3126DF00, + 0x312605C0, 0x31252C80, 0x31245340, + 0x31237A00, 0x3122A0C0, 0x3121C780, + 0x3120EE40, 0x31201500, 0x311F3BC0, + 0x311E6280, 0x311D8940, 0x311CB000, + 0x311BD6C0, 0x311AFD80, 0x311A2440, + 0x31194B00, 0x311871C0, 0x31179880, + 0x3116BF40, 0x3115E600, 0x31150CC0, + 0x31143380, 0x31135A40, 0x31128100, + 0x3111A7C0, 0x3110CE80, 0x310FF540, + 0x310F1C00, 0x310E42C0, 0x310D6980, + 0x310C9040, 0x310BB700, 0x310ADDC0, + 0x310A0480, 0x31092B40, 0x31085200, + 0x310778C0, 0x31069F80, 0x3105C640, + 0x3104ED00, 0x310413C0, 0x31033A80, + 0x31026140, 0x31018800, 0x3100AEC0, + 0x30FFD580, 0x30FEFC40, 0x30FE2300, + 0x30FD49C0, 0x30FC7080, 0x30FB9740, + 0x30FABE00, 0x30F9E4C0, 0x30F90B80, + 0x30F83240, 0x30F75900, 0x30F67FC0, + 0x30F5A680, 0x30F4CD40, 0x30F3F400, + 0x30F31AC0, 0x30F24180, 0x30F16840, + 0x30F08F00, 0x30EFB5C0, 0x30EEDC80, + 0x30EE0340, 0x30ED2A00, 0x30EC50C0, + 0x30EB7780, 0x30EA9E40, 0x30E9C500, + 0x30E8EBC0, 0x30E81280, 0x30E73940, + 0x30E66000, 0x30E586C0, 0x30E4AD80, + 0x30E3D440, 0x30E2FB00, 0x30E221C0, + 0x30E14880, 0x30E06F40, 0x30DF9600, + 0x30DEBCC0, 0x30DDE380, 0x30DD0A40, + 0x30DC3100, 0x30DB57C0, 0x30DA7E80, + 0x30D9A540, 0x30D8CC00, 0x30D7F2C0, + 0x30D71980, 0x30D64040, 0x30D56700, + 0x30D48DC0, 0x30D3B480, 0x30D2DB40, + 0x30D20200, 0x30D128C0, 0x30D04F80, + 0x30CF7640, 0x30CE9D00, 0x30CDC3C0, + 0x30CCEA80, 0x30CC1140, 0x30CB3800, + 0x30CA5EC0, 0x30C98580, 0x30C8AC40, + 0x30C7D300, 0x30C6F9C0, 0x30C62080, + 0x30C54740, 0x30C46E00, 0x30C394C0, + 0x30C2BB80, 0x30C1E240, 0x30C10900, + 0x30C02FC0, 0x30BF5680, 0x30BE7D40, + 0x30BDA400, 0x30BCCAC0, 0x30BBF180, + 0x30BB1840, 0x30BA3F00, 0x30B965C0, + 0x30B88C80, 0x30B7B340, 0x30B6DA00, + 0x30B600C0, 0x30B52780, 0x30B44E40, + 0x30B37500, 0x30B29BC0, 0x30B1C280, + 0x30B0E940, 0x30B01000, 0x30AF36C0, + 0x30AE5D80, 0x30AD8440, 0x30ACAB00, + 0x30ABD1C0, 0x30AAF880, 0x30AA1F40, + 0x30A94600, 0x30A86CC0, 0x30A79380, + 0x30A6BA40, 0x30A5E100, 0x30A507C0, + 0x30A42E80, 0x30A35540, 0x30A27C00, + 0x30A1A2C0, 0x30A0C980, 0x309FF040, + 0x309F1700, 0x309E3DC0, 0x309D6480, + 0x309C8B40, 0x309BB200, 0x309AD8C0, + 0x3099FF80, 0x30992640, 0x30984D00, + 0x309773C0, 0x30969A80, 0x3095C140, + 0x3094E800, 0x30940EC0, 0x30933580, + 0x30925C40, 0x30918300, 0x3090A9C0, + 0x308FD080, 0x308EF740, 0x308E1E00, + 0x308D44C0, 0x308C6B80, 0x308B9240, + 0x308AB900, 0x3089DFC0, 0x30890680, + 0x30882D40, 0x30875400, 0x30867AC0, + 0x3085A180, 0x3084C840, 0x3083EF00, + 0x308315C0, 0x30823C80, 0x30816340, + 0x30808A00, 0x307FB0C0, 0x307ED780, + 0x307DFE40, 0x307D2500, 0x307C4BC0, + 0x307B7280, 0x307A9940, 0x3079C000, + 0x3078E6C0, 0x30780D80, 0x30773440, + 0x30765B00, 0x307581C0, 0x3074A880, + 0x3073CF40, 0x3072F600, 0x30721CC0, + 0x30714380, 0x30706A40, 0x306F9100, + 0x306EB7C0, 0x306DDE80, 0x306D0540, + 0x306C2C00, 0x306B52C0, 0x306A7980, + 0x3069A040, 0x3068C700, 0x3067EDC0, + 0x30671480, 0x30663B40, 0x30656200, + 0x306488C0, 0x3063AF80, 0x3062D640, + 0x3061FD00, 0x306123C0, 0x30604A80, + 0x305F7140, 0x305E9800, 0x305DBEC0, + 0x305CE580, 0x305C0C40, 0x305B3300, + 0x305A59C0, 0x30598080, 0x3058A740, + 0x3057CE00, 0x3056F4C0, 0x30561B80, + 0x30554240, 0x30546900, 0x30538FC0, + 0x3052B680, 0x3051DD40, 0x30510400, + 0x30502AC0, 0x304F5180, 0x304E7840, + 0x304D9F00, 0x304CC5C0, 0x304BEC80, + 0x304B1340, 0x304A3A00, 0x304960C0, + 0x30488780, 0x3047AE40, 0x3046D500, + 0x3045FBC0, 0x30452280, 0x30444940, + 0x30437000, 0x304296C0, 0x3041BD80, + 0x3040E440, 0x30400B00, 0x303F31C0, + 0x303E5880, 0x303D7F40, 0x303CA600, + 0x303BCCC0, 0x303AF380, 0x303A1A40, + 0x30394100, 0x303867C0, 0x30378E80, + 0x3036B540, 0x3035DC00, 0x303502C0, + 0x30342980, 0x30335040, 0x30327700, + 0x30319DC0, 0x3030C480, 0x302FEB40, + 0x302F1200, 0x302E38C0, 0x302D5F80, + 0x302C8640, 0x302BAD00, 0x302AD3C0, + 0x3029FA80, 0x30292140, 0x30284800, + 0x30276EC0, 0x30269580, 0x3025BC40, + 0x3024E300, 0x302409C0, 0x30233080, + 0x30225740, 0x30217E00, 0x3020A4C0, + 0x301FCB80, 0x301EF240, 0x301E1900, + 0x301D3FC0, 0x301C6680, 0x301B8D40, + 0x301AB400, 0x3019DAC0, 0x30190180, + 0x30182840, 0x30174F00, 0x301675C0, + 0x30159C80, 0x3014C340, 0x3013EA00, + 0x301310C0, 0x30123780, 0x30115E40, + 0x30108500, 0x300FABC0, 0x300ED280, + 0x300DF940, 0x300D2000, 0x300C46C0, + 0x300B6D80, 0x300A9440, 0x3009BB00, + 0x3008E1C0, 0x30080880, 0x30072F40, + 0x30065600, 0x30057CC0, 0x3004A380, + 0x3003CA40, 0x3002F100, 0x300217C0, + 0x30013E80, 0x30006540, 0x2FFF8C00, + 0x2FFEB2C0, 0x2FFDD980, 0x2FFD0040, + 0x2FFC2700, 0x2FFB4DC0, 0x2FFA7480, + 0x2FF99B40, 0x2FF8C200, 0x2FF7E8C0, + 0x2FF70F80, 0x2FF63640, 0x2FF55D00, + 0x2FF483C0, 0x2FF3AA80, 0x2FF2D140, + 0x2FF1F800, 0x2FF11EC0, 0x2FF04580, + 0x2FEF6C40, 0x2FEE9300, 0x2FEDB9C0, + 0x2FECE080, 0x2FEC0740, 0x2FEB2E00, + 0x2FEA54C0, 0x2FE97B80, 0x2FE8A240, + 0x2FE7C900, 0x2FE6EFC0, 0x2FE61680, + 0x2FE53D40, 0x2FE46400, 0x2FE38AC0, + 0x2FE2B180, 0x2FE1D840, 0x2FE0FF00, + 0x2FE025C0, 0x2FDF4C80, 0x2FDE7340, + 0x2FDD9A00, 0x2FDCC0C0, 0x2FDBE780, + 0x2FDB0E40, 0x2FDA3500, 0x2FD95BC0, + 0x2FD88280, 0x2FD7A940, 0x2FD6D000, + 0x2FD5F6C0, 0x2FD51D80, 0x2FD44440, + 0x2FD36B00, 0x2FD291C0, 0x2FD1B880, + 0x2FD0DF40, 0x2FD00600, 0x2FCF2CC0, + 0x2FCE5380, 0x2FCD7A40, 0x2FCCA100, + 0x2FCBC7C0, 0x2FCAEE80, 0x2FCA1540, + 0x2FC93C00, 0x2FC862C0, 0x2FC78980, + 0x2FC6B040, 0x2FC5D700, 0x2FC4FDC0, + 0x2FC42480, 0x2FC34B40, 0x2FC27200, + 0x2FC198C0, 0x2FC0BF80, 0x2FBFE640, + 0x2FBF0D00, 0x2FBE33C0, 0x2FBD5A80, + 0x2FBC8140, 0x2FBBA800, 0x2FBACEC0, + 0x2FB9F580, 0x2FB91C40, 0x2FB84300, + 0x2FB769C0, 0x2FB69080, 0x2FB5B740, + 0x2FB4DE00, 0x2FB404C0, 0x2FB32B80, + 0x2FB25240, 0x2FB17900, 0x2FB09FC0, + 0x2FAFC680, 0x2FAEED40, 0x2FAE1400, + 0x2FAD3AC0, 0x2FAC6180, 0x2FAB8840, + 0x2FAAAF00, 0x2FA9D5C0, 0x2FA8FC80, + 0x2FA82340, 0x2FA74A00, 0x2FA670C0, + 0x2FA59780, 0x2FA4BE40, 0x2FA3E500, + 0x2FA30BC0, 0x2FA23280, 0x2FA15940, + 0x2FA08000, 0x2F9FA6C0, 0x2F9ECD80, + 0x2F9DF440, 0x2F9D1B00, 0x2F9C41C0, + 0x2F9B6880, 0x2F9A8F40, 0x2F99B600, + 0x2F98DCC0, 0x2F980380, 0x2F972A40, + 0x2F965100, 0x2F9577C0, 0x2F949E80, + 0x2F93C540, 0x2F92EC00, 0x2F9212C0, + 0x2F913980, 0x2F906040, 0x2F8F8700, + 0x2F8EADC0, 0x2F8DD480, 0x2F8CFB40, + 0x2F8C2200, 0x2F8B48C0, 0x2F8A6F80, + 0x2F899640, 0x2F88BD00, 0x2F87E3C0, + 0x2F870A80, 0x2F863140, 0x2F855800, + 0x2F847EC0, 0x2F83A580, 0x2F82CC40, + 0x2F81F300, 0x2F8119C0, 0x2F804080, + 0x2F7F6740, 0x2F7E8E00, 0x2F7DB4C0, + 0x2F7CDB80, 0x2F7C0240, 0x2F7B2900, + 0x2F7A4FC0, 0x2F797680, 0x2F789D40, + 0x2F77C400, 0x2F76EAC0, 0x2F761180, + 0x2F753840, 0x2F745F00, 0x2F7385C0, + 0x2F72AC80, 0x2F71D340, 0x2F70FA00, + 0x2F7020C0, 0x2F6F4780, 0x2F6E6E40, + 0x2F6D9500, 0x2F6CBBC0, 0x2F6BE280, + 0x2F6B0940, 0x2F6A3000, 0x2F6956C0, + 0x2F687D80, 0x2F67A440, 0x2F66CB00, + 0x2F65F1C0, 0x2F651880, 0x2F643F40, + 0x2F636600, 0x2F628CC0, 0x2F61B380, + 0x2F60DA40, 0x2F600100, 0x2F5F27C0, + 0x2F5E4E80, 0x2F5D7540, 0x2F5C9C00, + 0x2F5BC2C0, 0x2F5AE980, 0x2F5A1040, + 0x2F593700, 0x2F585DC0, 0x2F578480, + 0x2F56AB40, 0x2F55D200, 0x2F54F8C0, + 0x2F541F80, 0x2F534640, 0x2F526D00, + 0x2F5193C0, 0x2F50BA80, 0x2F4FE140, + 0x2F4F0800, 0x2F4E2EC0, 0x2F4D5580, + 0x2F4C7C40, 0x2F4BA300, 0x2F4AC9C0, + 0x2F49F080, 0x2F491740, 0x2F483E00, + 0x2F4764C0, 0x2F468B80, 0x2F45B240, + 0x2F44D900, 0x2F43FFC0, 0x2F432680, + 0x2F424D40, 0x2F417400, 0x2F409AC0, + 0x2F3FC180, 0x2F3EE840, 0x2F3E0F00, + 0x2F3D35C0, 0x2F3C5C80, 0x2F3B8340, + 0x2F3AAA00, 0x2F39D0C0, 0x2F38F780, + 0x2F381E40, 0x2F374500, 0x2F366BC0, + 0x2F359280, 0x2F34B940, 0x2F33E000, + 0x2F3306C0, 0x2F322D80, 0x2F315440, + 0x2F307B00, 0x2F2FA1C0, 0x2F2EC880, + 0x2F2DEF40, 0x2F2D1600, 0x2F2C3CC0, + 0x2F2B6380, 0x2F2A8A40, 0x2F29B100, + 0x2F28D7C0, 0x2F27FE80, 0x2F272540, + 0x2F264C00, 0x2F2572C0, 0x2F249980, + 0x2F23C040, 0x2F22E700, 0x2F220DC0, + 0x2F213480, 0x2F205B40, 0x2F1F8200, + 0x2F1EA8C0, 0x2F1DCF80, 0x2F1CF640, + 0x2F1C1D00, 0x2F1B43C0, 0x2F1A6A80, + 0x2F199140, 0x2F18B800, 0x2F17DEC0, + 0x2F170580, 0x2F162C40, 0x2F155300, + 0x2F1479C0, 0x2F13A080, 0x2F12C740, + 0x2F11EE00, 0x2F1114C0, 0x2F103B80, + 0x2F0F6240, 0x2F0E8900, 0x2F0DAFC0, + 0x2F0CD680, 0x2F0BFD40, 0x2F0B2400, + 0x2F0A4AC0, 0x2F097180, 0x2F089840, + 0x2F07BF00, 0x2F06E5C0, 0x2F060C80, + 0x2F053340, 0x2F045A00, 0x2F0380C0, + 0x2F02A780, 0x2F01CE40, 0x2F00F500, + 0x2F001BC0, 0x2EFF4280, 0x2EFE6940, + 0x2EFD9000, 0x2EFCB6C0, 0x2EFBDD80, + 0x2EFB0440, 0x2EFA2B00, 0x2EF951C0, + 0x2EF87880, 0x2EF79F40, 0x2EF6C600, + 0x2EF5ECC0, 0x2EF51380, 0x2EF43A40, + 0x2EF36100, 0x2EF287C0, 0x2EF1AE80, + 0x2EF0D540, 0x2EEFFC00, 0x2EEF22C0, + 0x2EEE4980, 0x2EED7040, 0x2EEC9700, + 0x2EEBBDC0, 0x2EEAE480, 0x2EEA0B40, + 0x2EE93200, 0x2EE858C0, 0x2EE77F80, + 0x2EE6A640, 0x2EE5CD00, 0x2EE4F3C0, + 0x2EE41A80, 0x2EE34140, 0x2EE26800, + 0x2EE18EC0, 0x2EE0B580, 0x2EDFDC40, + 0x2EDF0300, 0x2EDE29C0, 0x2EDD5080, + 0x2EDC7740, 0x2EDB9E00, 0x2EDAC4C0, + 0x2ED9EB80, 0x2ED91240, 0x2ED83900, + 0x2ED75FC0, 0x2ED68680, 0x2ED5AD40, + 0x2ED4D400, 0x2ED3FAC0, 0x2ED32180, + 0x2ED24840, 0x2ED16F00, 0x2ED095C0, + 0x2ECFBC80, 0x2ECEE340, 0x2ECE0A00, + 0x2ECD30C0, 0x2ECC5780, 0x2ECB7E40, + 0x2ECAA500, 0x2EC9CBC0, 0x2EC8F280, + 0x2EC81940, 0x2EC74000, 0x2EC666C0, + 0x2EC58D80, 0x2EC4B440, 0x2EC3DB00, + 0x2EC301C0, 0x2EC22880, 0x2EC14F40, + 0x2EC07600, 0x2EBF9CC0, 0x2EBEC380, + 0x2EBDEA40, 0x2EBD1100, 0x2EBC37C0, + 0x2EBB5E80, 0x2EBA8540, 0x2EB9AC00, + 0x2EB8D2C0, 0x2EB7F980, 0x2EB72040, + 0x2EB64700, 0x2EB56DC0, 0x2EB49480, + 0x2EB3BB40, 0x2EB2E200, 0x2EB208C0, + 0x2EB12F80, 0x2EB05640, 0x2EAF7D00, + 0x2EAEA3C0, 0x2EADCA80, 0x2EACF140, + 0x2EAC1800, 0x2EAB3EC0, 0x2EAA6580, + 0x2EA98C40, 0x2EA8B300, 0x2EA7D9C0, + 0x2EA70080, 0x2EA62740, 0x2EA54E00, + 0x2EA474C0, 0x2EA39B80, 0x2EA2C240, + 0x2EA1E900, 0x2EA10FC0, 0x2EA03680, + 0x2E9F5D40, 0x2E9E8400, 0x2E9DAAC0, + 0x2E9CD180, 0x2E9BF840, 0x2E9B1F00, + 0x2E9A45C0, 0x2E996C80, 0x2E989340, + 0x2E97BA00, 0x2E96E0C0, 0x2E960780, + 0x2E952E40, 0x2E945500, 0x2E937BC0, + 0x2E92A280, 0x2E91C940, 0x2E90F000, + 0x2E9016C0, 0x2E8F3D80, 0x2E8E6440, + 0x2E8D8B00, 0x2E8CB1C0, 0x2E8BD880, + 0x2E8AFF40, 0x2E8A2600, 0x2E894CC0, + 0x2E887380, 0x2E879A40, 0x2E86C100, + 0x2E85E7C0, 0x2E850E80, 0x2E843540, + 0x2E835C00, 0x2E8282C0, 0x2E81A980, + 0x2E80D040, 0x2E7FF700, 0x2E7F1DC0, + 0x2E7E4480, 0x2E7D6B40, 0x2E7C9200, + 0x2E7BB8C0, 0x2E7ADF80, 0x2E7A0640, + 0x2E792D00, 0x2E7853C0, 0x2E777A80, + 0x2E76A140, 0x2E75C800, 0x2E74EEC0, + 0x2E741580, 0x2E733C40, 0x2E726300, + 0x2E7189C0, 0x2E70B080, 0x2E6FD740, + 0x2E6EFE00, 0x2E6E24C0, 0x2E6D4B80, + 0x2E6C7240, 0x2E6B9900, 0x2E6ABFC0, + 0x2E69E680, 0x2E690D40, 0x2E683400, + 0x2E675AC0, 0x2E668180, 0x2E65A840, + 0x2E64CF00, 0x2E63F5C0, 0x2E631C80, + 0x2E624340, 0x2E616A00, 0x2E6090C0, + 0x2E5FB780, 0x2E5EDE40, 0x2E5E0500, + 0x2E5D2BC0, 0x2E5C5280, 0x2E5B7940, + 0x2E5AA000, 0x2E59C6C0, 0x2E58ED80, + 0x2E581440, 0x2E573B00, 0x2E5661C0, + 0x2E558880, 0x2E54AF40, 0x2E53D600, + 0x2E52FCC0, 0x2E522380, 0x2E514A40, + 0x2E507100, 0x2E4F97C0, 0x2E4EBE80, + 0x2E4DE540, 0x2E4D0C00, 0x2E4C32C0, + 0x2E4B5980, 0x2E4A8040, 0x2E49A700, + 0x2E48CDC0, 0x2E47F480, 0x2E471B40, + 0x2E464200, 0x2E4568C0, 0x2E448F80, + 0x2E43B640, 0x2E42DD00, 0x2E4203C0, + 0x2E412A80, 0x2E405140, 0x2E3F7800, + 0x2E3E9EC0, 0x2E3DC580, 0x2E3CEC40, + 0x2E3C1300, 0x2E3B39C0, 0x2E3A6080, + 0x2E398740, 0x2E38AE00, 0x2E37D4C0, + 0x2E36FB80, 0x2E362240, 0x2E354900, + 0x2E346FC0, 0x2E339680, 0x2E32BD40, + 0x2E31E400, 0x2E310AC0, 0x2E303180, + 0x2E2F5840, 0x2E2E7F00, 0x2E2DA5C0, + 0x2E2CCC80, 0x2E2BF340, 0x2E2B1A00, + 0x2E2A40C0, 0x2E296780, 0x2E288E40, + 0x2E27B500, 0x2E26DBC0, 0x2E260280, + 0x2E252940, 0x2E245000, 0x2E2376C0, + 0x2E229D80, 0x2E21C440, 0x2E20EB00, + 0x2E2011C0, 0x2E1F3880, 0x2E1E5F40, + 0x2E1D8600, 0x2E1CACC0, 0x2E1BD380, + 0x2E1AFA40, 0x2E1A2100, 0x2E1947C0, + 0x2E186E80, 0x2E179540, 0x2E16BC00, + 0x2E15E2C0, 0x2E150980, 0x2E143040, + 0x2E135700, 0x2E127DC0, 0x2E11A480, + 0x2E10CB40, 0x2E0FF200, 0x2E0F18C0, + 0x2E0E3F80, 0x2E0D6640, 0x2E0C8D00, + 0x2E0BB3C0, 0x2E0ADA80, 0x2E0A0140, + 0x2E092800, 0x2E084EC0, 0x2E077580, + 0x2E069C40, 0x2E05C300, 0x2E04E9C0, + 0x2E041080, 0x2E033740, 0x2E025E00, + 0x2E0184C0, 0x2E00AB80, 0x2DFFD240, + 0x2DFEF900, 0x2DFE1FC0, 0x2DFD4680, + 0x2DFC6D40, 0x2DFB9400, 0x2DFABAC0, + 0x2DF9E180, 0x2DF90840, 0x2DF82F00, + 0x2DF755C0, 0x2DF67C80, 0x2DF5A340, + 0x2DF4CA00, 0x2DF3F0C0, 0x2DF31780, + 0x2DF23E40, 0x2DF16500, 0x2DF08BC0, + 0x2DEFB280, 0x2DEED940, 0x2DF00000, + 0x2DEF3480, 0x2DEE6900, 0x2DED9D80, + 0x2DECD200, 0x2DEC0680, 0x2DEB3B00, + 0x2DEA6F80, 0x2DE9A400, 0x2DE8D880, + 0x2DE80D00, 0x2DE74180, 0x2DE67600, + 0x2DE5AA80, 0x2DE4DF00, 0x2DE41380, + 0x2DE34800, 0x2DE27C80, 0x2DE1B100, + 0x2DE0E580, 0x2DE01A00, 0x2DDF4E80, + 0x2DDE8300, 0x2DDDB780, 0x2DDCEC00, + 0x2DDC2080, 0x2DDB5500, 0x2DDA8980, + 0x2DD9BE00, 0x2DD8F280, 0x2DD82700, + 0x2DD75B80, 0x2DD69000, 0x2DD5C480, + 0x2DD4F900, 0x2DD42D80, 0x2DD36200, + 0x2DD29680, 0x2DD1CB00, 0x2DD0FF80, + 0x2DD03400, 0x2DCF6880, 0x2DCE9D00, + 0x2DCDD180, 0x2DCD0600, 0x2DCC3A80, + 0x2DCB6F00, 0x2DCAA380, 0x2DC9D800, + 0x2DC90C80, 0x2DC84100, 0x2DC77580, + 0x2DC6AA00, 0x2DC5DE80, 0x2DC51300, + 0x2DC44780, 0x2DC37C00, 0x2DC2B080, + 0x2DC1E500, 0x2DC11980, 0x2DC04E00, + 0x2DBF8280, 0x2DBEB700, 0x2DBDEB80, + 0x2DBD2000, 0x2DBC5480, 0x2DBB8900, + 0x2DBABD80, 0x2DB9F200, 0x2DB92680, + 0x2DB85B00, 0x2DB78F80, 0x2DB6C400, + 0x2DB5F880, 0x2DB52D00, 0x2DB46180, + 0x2DB39600, 0x2DB2CA80, 0x2DB1FF00, + 0x2DB13380, 0x2DB06800, 0x2DAF9C80, + 0x2DAED100, 0x2DAE0580, 0x2DAD3A00, + 0x2DAC6E80, 0x2DABA300, 0x2DAAD780, + 0x2DAA0C00, 0x2DA94080, 0x2DA87500, + 0x2DA7A980, 0x2DA6DE00, 0x2DA61280, + 0x2DA54700, 0x2DA47B80, 0x2DA3B000, + 0x2DA2E480, 0x2DA21900, 0x2DA14D80, + 0x2DA08200, 0x2D9FB680, 0x2D9EEB00, + 0x2D9E1F80, 0x2D9D5400, 0x2D9C8880, + 0x2D9BBD00, 0x2D9AF180, 0x2D9A2600, + 0x2D995A80, 0x2D988F00, 0x2D97C380, + 0x2D96F800, 0x2D962C80, 0x2D956100, + 0x2D949580, 0x2D93CA00, 0x2D92FE80, + 0x2D923300, 0x2D916780, 0x2D909C00, + 0x2D8FD080, 0x2D8F0500, 0x2D8E3980, + 0x2D8D6E00, 0x2D8CA280, 0x2D8BD700, + 0x2D8B0B80, 0x2D8A4000, 0x2D897480, + 0x2D88A900, 0x2D87DD80, 0x2D871200, + 0x2D864680, 0x2D857B00, 0x2D84AF80, + 0x2D83E400, 0x2D831880, 0x2D824D00, + 0x2D818180, 0x2D80B600, 0x2D7FEA80, + 0x2D7F1F00, 0x2D7E5380, 0x2D7D8800, + 0x2D7CBC80, 0x2D7BF100, 0x2D7B2580, + 0x2D7A5A00, 0x2D798E80, 0x2D78C300, + 0x2D77F780, 0x2D772C00, 0x2D766080, + 0x2D759500, 0x2D74C980, 0x2D73FE00, + 0x2D733280, 0x2D726700, 0x2D719B80, + 0x2D70D000, 0x2D700480, 0x2D6F3900, + 0x2D6E6D80, 0x2D6DA200, 0x2D6CD680, + 0x2D6C0B00, 0x2D6B3F80, 0x2D6A7400, + 0x2D69A880, 0x2D68DD00, 0x2D681180, + 0x2D674600, 0x2D667A80, 0x2D65AF00, + 0x2D64E380, 0x2D641800, 0x2D634C80, + 0x2D628100, 0x2D61B580, 0x2D60EA00, + 0x2D601E80, 0x2D5F5300, 0x2D5E8780, + 0x2D5DBC00, 0x2D5CF080, 0x2D5C2500, + 0x2D5B5980, 0x2D5A8E00, 0x2D59C280, + 0x2D58F700, 0x2D582B80, 0x2D576000, + 0x2D569480, 0x2D55C900, 0x2D54FD80, + 0x2D543200, 0x2D536680, 0x2D529B00, + 0x2D51CF80, 0x2D510400, 0x2D503880, + 0x2D4F6D00, 0x2D4EA180, 0x2D4DD600, + 0x2D4D0A80, 0x2D4C3F00, 0x2D4B7380, + 0x2D4AA800, 0x2D49DC80, 0x2D491100, + 0x2D484580, 0x2D477A00, 0x2D46AE80, + 0x2D45E300, 0x2D451780, 0x2D444C00, + 0x2D438080, 0x2D42B500, 0x2D41E980, + 0x2D411E00, 0x2D405280, 0x2D3F8700, + 0x2D3EBB80, 0x2D3DF000, 0x2D3D2480, + 0x2D3C5900, 0x2D3B8D80, 0x2D3AC200, + 0x2D39F680, 0x2D392B00, 0x2D385F80, + 0x2D379400, 0x2D36C880, 0x2D35FD00, + 0x2D353180, 0x2D346600, 0x2D339A80, + 0x2D32CF00, 0x2D320380, 0x2D313800, + 0x2D306C80, 0x2D2FA100, 0x2D2ED580, + 0x2D2E0A00, 0x2D2D3E80, 0x2D2C7300, + 0x2D2BA780, 0x2D2ADC00, 0x2D2A1080, + 0x2D294500, 0x2D287980, 0x2D27AE00, + 0x2D26E280, 0x2D261700, 0x2D254B80, + 0x2D248000, 0x2D23B480, 0x2D22E900, + 0x2D221D80, 0x2D215200, 0x2D208680, + 0x2D1FBB00, 0x2D1EEF80, 0x2D1E2400, + 0x2D1D5880, 0x2D1C8D00, 0x2D1BC180, + 0x2D1AF600, 0x2D1A2A80, 0x2D195F00, + 0x2D189380, 0x2D17C800, 0x2D16FC80, + 0x2D163100, 0x2D156580, 0x2D149A00, + 0x2D13CE80, 0x2D130300, 0x2D123780, + 0x2D116C00, 0x2D10A080, 0x2D0FD500, + 0x2D0F0980, 0x2D0E3E00, 0x2D0D7280, + 0x2D0CA700, 0x2D0BDB80, 0x2D0B1000, + 0x2D0A4480, 0x2D097900, 0x2D08AD80, + 0x2D07E200, 0x2D071680, 0x2D064B00, + 0x2D057F80, 0x2D04B400, 0x2D03E880, + 0x2D031D00, 0x2D025180, 0x2D018600, + 0x2D00BA80, 0x2CFFEF00, 0x2CFF2380, + 0x2CFE5800, 0x2CFD8C80, 0x2CFCC100, + 0x2CFBF580, 0x2CFB2A00, 0x2CFA5E80, + 0x2CF99300, 0x2CF8C780, 0x2CF7FC00, + 0x2CF73080, 0x2CF66500, 0x2CF59980, + 0x2CF4CE00, 0x2CF40280, 0x2CF33700, + 0x2CF26B80, 0x2CF1A000, 0x2CF0D480, + 0x2CF00900, 0x2CEF3D80, 0x2CEE7200, + 0x2CEDA680, 0x2CECDB00, 0x2CEC0F80, + 0x2CEB4400, 0x2CEA7880, 0x2CE9AD00, + 0x2CE8E180, 0x2CE81600, 0x2CE74A80, + 0x2CE67F00, 0x2CE5B380, 0x2CE4E800, + 0x2CE41C80, 0x2CE35100, 0x2CE28580, + 0x2CE1BA00, 0x2CE0EE80, 0x2CE02300, + 0x2CDF5780, 0x2CDE8C00, 0x2CDDC080, + 0x2CDCF500, 0x2CDC2980, 0x2CDB5E00, + 0x2CDA9280, 0x2CD9C700, 0x2CD8FB80, + 0x2CD83000, 0x2CD76480, 0x2CD69900, + 0x2CD5CD80, 0x2CD50200, 0x2CD43680, + 0x2CD36B00, 0x2CD29F80, 0x2CD1D400, + 0x2CD10880, 0x2CD03D00, 0x2CCF7180, + 0x2CCEA600, 0x2CCDDA80, 0x2CCD0F00, + 0x2CCC4380, 0x2CCB7800, 0x2CCAAC80, + 0x2CC9E100, 0x2CC91580, 0x2CC84A00, + 0x2CC77E80, 0x2CC6B300, 0x2CC5E780, + 0x2CC51C00, 0x2CC45080, 0x2CC38500, + 0x2CC2B980, 0x2CC1EE00, 0x2CC12280, + 0x2CC05700, 0x2CBF8B80, 0x2CBEC000, + 0x2CBDF480, 0x2CBD2900, 0x2CBC5D80, + 0x2CBB9200, 0x2CBAC680, 0x2CB9FB00, + 0x2CB92F80, 0x2CB86400, 0x2CB79880, + 0x2CB6CD00, 0x2CB60180, 0x2CB53600, + 0x2CB46A80, 0x2CB39F00, 0x2CB2D380, + 0x2CB20800, 0x2CB13C80, 0x2CB07100, + 0x2CAFA580, 0x2CAEDA00, 0x2CAE0E80, + 0x2CAD4300, 0x2CAC7780, 0x2CABAC00, + 0x2CAAE080, 0x2CAA1500, 0x2CA94980, + 0x2CA87E00, 0x2CA7B280, 0x2CA6E700, + 0x2CA61B80, 0x2CA55000, 0x2CA48480, + 0x2CA3B900, 0x2CA2ED80, 0x2CA22200, + 0x2CA15680, 0x2CA08B00, 0x2C9FBF80, + 0x2C9EF400, 0x2C9E2880, 0x2C9D5D00, + 0x2C9C9180, 0x2C9BC600, 0x2C9AFA80, + 0x2C9A2F00, 0x2C996380, 0x2C989800, + 0x2C97CC80, 0x2C970100, 0x2C963580, + 0x2C956A00, 0x2C949E80, 0x2C93D300, + 0x2C930780, 0x2C923C00, 0x2C917080, + 0x2C90A500, 0x2C8FD980, 0x2C8F0E00, + 0x2C8E4280, 0x2C8D7700, 0x2C8CAB80, + 0x2C8BE000, 0x2C8B1480, 0x2C8A4900, + 0x2C897D80, 0x2C88B200, 0x2C87E680, + 0x2C871B00, 0x2C864F80, 0x2C858400, + 0x2C84B880, 0x2C83ED00, 0x2C832180, + 0x2C825600, 0x2C818A80, 0x2C80BF00, + 0x2C7FF380, 0x2C7F2800, 0x2C7E5C80, + 0x2C7D9100, 0x2C7CC580, 0x2C7BFA00, + 0x2C7B2E80, 0x2C7A6300, 0x2C799780, + 0x2C78CC00, 0x2C780080, 0x2C773500, + 0x2C766980, 0x2C759E00, 0x2C74D280, + 0x2C740700, 0x2C733B80, 0x2C727000, + 0x2C71A480, 0x2C70D900, 0x2C700D80, + 0x2C6F4200, 0x2C6E7680, 0x2C6DAB00, + 0x2C6CDF80, 0x2C6C1400, 0x2C6B4880, + 0x2C6A7D00, 0x2C69B180, 0x2C68E600, + 0x2C681A80, 0x2C674F00, 0x2C668380, + 0x2C65B800, 0x2C64EC80, 0x2C642100, + 0x2C635580, 0x2C628A00, 0x2C61BE80, + 0x2C60F300, 0x2C602780, 0x2C5F5C00, + 0x2C5E9080, 0x2C5DC500, 0x2C5CF980, + 0x2C5C2E00, 0x2C5B6280, 0x2C5A9700, + 0x2C59CB80, 0x2C590000, 0x2C583480, + 0x2C576900, 0x2C569D80, 0x2C55D200, + 0x2C550680, 0x2C543B00, 0x2C536F80, + 0x2C52A400, 0x2C51D880, 0x2C510D00, + 0x2C504180, 0x2C4F7600, 0x2C4EAA80, + 0x2C4DDF00, 0x2C4D1380, 0x2C4C4800, + 0x2C4B7C80, 0x2C4AB100, 0x2C49E580, + 0x2C491A00, 0x2C484E80, 0x2C478300, + 0x2C46B780, 0x2C45EC00, 0x2C452080, + 0x2C445500, 0x2C438980, 0x2C42BE00, + 0x2C41F280, 0x2C412700, 0x2C405B80, + 0x2C3F9000, 0x2C3EC480, 0x2C3DF900, + 0x2C3D2D80, 0x2C3C6200, 0x2C3B9680, + 0x2C3ACB00, 0x2C39FF80, 0x2C393400, + 0x2C386880, 0x2C379D00, 0x2C36D180, + 0x2C360600, 0x2C353A80, 0x2C346F00, + 0x2C33A380, 0x2C32D800, 0x2C320C80, + 0x2C314100, 0x2C307580, 0x2C2FAA00, + 0x2C2EDE80, 0x2C2E1300, 0x2C2D4780, + 0x2C2C7C00, 0x2C2BB080, 0x2C2AE500, + 0x2C2A1980, 0x2C294E00, 0x2C288280, + 0x2C27B700, 0x2C26EB80, 0x2C262000, + 0x2C255480, 0x2C248900, 0x2C23BD80, + 0x2C22F200, 0x2C222680, 0x2C215B00, + 0x2C208F80, 0x2C1FC400, 0x2C1EF880, + 0x2C1E2D00, 0x2C1D6180, 0x2C1C9600, + 0x2C1BCA80, 0x2C1AFF00, 0x2C1A3380, + 0x2C196800, 0x2C189C80, 0x2C17D100, + 0x2C170580, 0x2C163A00, 0x2C156E80, + 0x2C14A300, 0x2C13D780, 0x2C130C00, + 0x2C124080, 0x2C117500, 0x2C10A980, + 0x2C0FDE00, 0x2C0F1280, 0x2C0E4700, + 0x2C0D7B80, 0x2C0CB000, 0x2C0BE480, + 0x2C0B1900, 0x2C0A4D80, 0x2C098200, + 0x2C08B680, 0x2C07EB00, 0x2C071F80, + 0x2C065400, 0x2C058880, 0x2C04BD00, + 0x2C03F180, 0x2C032600, 0x2C025A80, + 0x2C018F00, 0x2C00C380, 0x2BFFF800, + 0x2BFF2C80, 0x2BFE6100, 0x2BFD9580, + 0x2BFCCA00, 0x2BFBFE80, 0x2BFB3300, + 0x2BFA6780, 0x2BF99C00, 0x2BF8D080, + 0x2BF80500, 0x2BF73980, 0x2BF66E00, + 0x2BF5A280, 0x2BF4D700, 0x2BF40B80, + 0x2BF34000, 0x2BF27480, 0x2BF1A900, + 0x2BF0DD80, 0x2BF01200, 0x2BEF4680, + 0x2BEE7B00, 0x2BEDAF80, 0x2BECE400, + 0x2BEC1880, 0x2BEB4D00, 0x2BEA8180, + 0x2BE9B600, 0x2BE8EA80, 0x2BE81F00, + 0x2BE75380, 0x2BE68800, 0x2BE5BC80, + 0x2BE4F100, 0x2BE42580, 0x2BE35A00, + 0x2BE28E80, 0x2BE1C300, 0x2BE0F780, + 0x2BE02C00, 0x2BDF6080, 0x2BDE9500, + 0x2BDDC980, 0x2BDCFE00, 0x2BDC3280, + 0x2BDB6700, 0x2BDA9B80, 0x2BD9D000, + 0x2BD90480, 0x2BD83900, 0x2BD76D80, + 0x2BD6A200, 0x2BD5D680, 0x2BD50B00, + 0x2BD43F80, 0x2BD37400, 0x2BD2A880, + 0x2BD1DD00, 0x2BD11180, 0x2BD04600, + 0x2BCF7A80, 0x2BCEAF00, 0x2BCDE380, + 0x2BCD1800, 0x2BCC4C80, 0x2BCB8100, + 0x2BCAB580, 0x2BC9EA00, 0x2BC91E80, + 0x2BC85300, 0x2BC78780, 0x2BC6BC00, + 0x2BC5F080, 0x2BC52500, 0x2BC45980, + 0x2BC38E00, 0x2BC2C280, 0x2BC1F700, + 0x2BC12B80, 0x2BC06000, 0x2BBF9480, + 0x2BBEC900, 0x2BBDFD80, 0x2BBD3200, + 0x2BBC6680, 0x2BBB9B00, 0x2BBACF80, + 0x2BBA0400, 0x2BB93880, 0x2BB86D00, + 0x2BB7A180, 0x2BB6D600, 0x2BB60A80, + 0x2BB53F00, 0x2BB47380, 0x2BB3A800, + 0x2BB2DC80, 0x2BB21100, 0x2BB14580, + 0x2BB07A00, 0x2BAFAE80, 0x2BAEE300, + 0x2BAE1780, 0x2BAD4C00, 0x2BAC8080, + 0x2BABB500, 0x2BAAE980, 0x2BAA1E00, + 0x2BA95280, 0x2BA88700, 0x2BA7BB80, + 0x2BA6F000, 0x2BA62480, 0x2BA55900, + 0x2BA48D80, 0x2BA3C200, 0x2BA2F680, + 0x2BA22B00, 0x2BA15F80, 0x2BA09400, + 0x2B9FC880, 0x2B9EFD00, 0x2B9E3180, + 0x2B9D6600, 0x2B9C9A80, 0x2B9BCF00, + 0x2B9B0380, 0x2B9A3800, 0x2B996C80, + 0x2B98A100, 0x2B97D580, 0x2B970A00, + 0x2B963E80, 0x2B957300, 0x2B94A780, + 0x2B93DC00, 0x2B931080, 0x2B924500, + 0x2B917980, 0x2B90AE00, 0x2B8FE280, + 0x2B8F1700, 0x2B8E4B80, 0x2B8D8000, + 0x2B8CB480, 0x2B8BE900, 0x2B8B1D80, + 0x2B8A5200, 0x2B898680, 0x2B88BB00, + 0x2B87EF80, 0x2B872400, 0x2B865880, + 0x2B858D00, 0x2B84C180, 0x2B83F600, + 0x2B832A80, 0x2B825F00, 0x2B819380, + 0x2B80C800, 0x2B7FFC80, 0x2B7F3100, + 0x2B7E6580, 0x2B7D9A00, 0x2B7CCE80, + 0x2B7C0300, 0x2B7B3780, 0x2B7A6C00, + 0x2B79A080, 0x2B78D500, 0x2B780980, + 0x2B773E00, 0x2B767280, 0x2B75A700, + 0x2B74DB80, 0x2B741000, 0x2B734480, + 0x2B727900, 0x2B71AD80, 0x2B70E200, + 0x2B701680, 0x2B6F4B00, 0x2B6E7F80, + 0x2B6DB400, 0x2B6CE880, 0x2B6C1D00, + 0x2B6B5180, 0x2B6A8600, 0x2B69BA80, + 0x2B68EF00, 0x2B682380, 0x2B675800, + 0x2B668C80, 0x2B65C100, 0x2B64F580, + 0x2B642A00, 0x2B635E80, 0x2B629300, + 0x2B61C780, 0x2B60FC00, 0x2B603080, + 0x2B5F6500, 0x2B5E9980, 0x2B5DCE00, + 0x2B5D0280, 0x2B5C3700, 0x2B5B6B80, + 0x2B5AA000, 0x2B59D480, 0x2B590900, + 0x2B583D80, 0x2B577200, 0x2B56A680, + 0x2B55DB00, 0x2B550F80, 0x2B544400, + 0x2B537880, 0x2B52AD00, 0x2B51E180, + 0x2B511600, 0x2B504A80, 0x2B4F7F00, + 0x2B4EB380, 0x2B4DE800, 0x2B4D1C80, + 0x2B4C5100, 0x2B4B8580, 0x2B4ABA00, + 0x2B49EE80, 0x2B492300, 0x2B485780, + 0x2B478C00, 0x2B46C080, 0x2B45F500, + 0x2B452980, 0x2B445E00, 0x2B439280, + 0x2B42C700, 0x2B41FB80, 0x2B413000, + 0x2B406480, 0x2B3F9900, 0x2B3ECD80, + 0x2B3E0200, 0x2B3D3680, 0x2B3C6B00, + 0x2B3B9F80, 0x2B3AD400, 0x2B3A0880, + 0x2B393D00, 0x2B387180, 0x2B37A600, + 0x2B36DA80, 0x2B360F00, 0x2B354380, + 0x2B347800, 0x2B33AC80, 0x2B32E100, + 0x2B321580, 0x2B314A00, 0x2B307E80, + 0x2B2FB300, 0x2B2EE780, 0x2B2E1C00, + 0x2B2D5080, 0x2B2C8500, 0x2B2BB980, + 0x2B2AEE00, 0x2B2A2280, 0x2B295700, + 0x2B288B80, 0x2B27C000, 0x2B26F480, + 0x2B262900, 0x2B255D80, 0x2B249200, + 0x2B23C680, 0x2B22FB00, 0x2B222F80, + 0x2B216400, 0x2B209880, 0x2B1FCD00, + 0x2B1F0180, 0x2B1E3600, 0x2B1D6A80, + 0x2B1C9F00, 0x2B1BD380, 0x2B1B0800, + 0x2B1A3C80, 0x2B197100, 0x2B18A580, + 0x2B17DA00, 0x2B170E80, 0x2B164300, + 0x2B157780, 0x2B14AC00, 0x2B13E080, + 0x2B131500, 0x2B124980, 0x2B117E00, + 0x2B10B280, 0x2B0FE700, 0x2B0F1B80, + 0x2B0E5000, 0x2B0D8480, 0x2B0CB900, + 0x2B0BED80, 0x2B0B2200, 0x2B0A5680, + 0x2B098B00, 0x2B08BF80, 0x2B07F400, + 0x2B072880, 0x2B065D00, 0x2B059180, + 0x2B04C600, 0x2B03FA80, 0x2B032F00, + 0x2B026380, 0x2B019800, 0x2B00CC80, + 0x2B000100, 0x2AFF3580, 0x2AFE6A00, + 0x2AFD9E80, 0x2AFCD300, 0x2AFC0780, + 0x2AFB3C00, 0x2AFA7080, 0x2AF9A500, + 0x2AF8D980, 0x2AF80E00, 0x2AF74280, + 0x2AF67700, 0x2AF5AB80, 0x2AF4E000, + 0x2AF41480, 0x2AF34900, 0x2AF27D80, + 0x2AF1B200, 0x2AF0E680, 0x2AF01B00, + 0x2AEF4F80, 0x2AEE8400, 0x2AEDB880, + 0x2AECED00, 0x2AEC2180, 0x2AEB5600, + 0x2AEA8A80, 0x2AE9BF00, 0x2AE8F380, + 0x2AE82800, 0x2AE75C80, 0x2AE69100, + 0x2AE5C580, 0x2AE4FA00, 0x2AE42E80, + 0x2AE36300, 0x2AE29780, 0x2AE1CC00, + 0x2AE10080, 0x2AE03500, 0x2ADF6980, + 0x2ADE9E00, 0x2ADDD280, 0x2ADD0700, + 0x2ADC3B80, 0x2ADB7000, 0x2ADAA480, + 0x2AD9D900, 0x2AD90D80, 0x2AD84200, + 0x2AD77680, 0x2AD6AB00, 0x2AD5DF80, + 0x2AD51400, 0x2AD44880, 0x2AD37D00, + 0x2AD2B180, 0x2AD1E600, 0x2AD11A80, + 0x2AD04F00, 0x2ACF8380, 0x2ACEB800, + 0x2ACDEC80, 0x2ACD2100, 0x2ACC5580, + 0x2ACB8A00, 0x2ACABE80, 0x2AC9F300, + 0x2AC92780, 0x2AC85C00, 0x2AC79080, + 0x2AC6C500, 0x2AC5F980, 0x2AC52E00, + 0x2AC46280, 0x2AC39700, 0x2AC2CB80, + 0x2AC20000, 0x2AC13480, 0x2AC06900, + 0x2ABF9D80, 0x2ABED200, 0x2ABE0680, + 0x2ABD3B00, 0x2ABC6F80, 0x2ABBA400, + 0x2ABAD880, 0x2ABA0D00, 0x2AB94180, + 0x2AB87600, 0x2AB7AA80, 0x2AB6DF00, + 0x2AB61380, 0x2AB54800, 0x2AB47C80, + 0x2AB3B100, 0x2AB2E580, 0x2AB21A00, + 0x2AB14E80, 0x2AB08300, 0x2AAFB780, + 0x2AAEEC00, 0x2AAE2080, 0x2AAD5500, + 0x2AAC8980, 0x2AABBE00, 0x2AAAF280, + 0x2AAA2700, 0x2AA95B80, 0x2AA89000, + 0x2AA7C480, 0x2AA6F900, 0x2AA62D80, + 0x2AA56200, 0x2AA49680, 0x2AA3CB00, + 0x2AA2FF80, 0x2AA23400, 0x2AA16880, + 0x2AA09D00, 0x2A9FD180, 0x2A9F0600, + 0x2A9E3A80, 0x2A9D6F00, 0x2A9CA380, + 0x2A9BD800, 0x2A9B0C80, 0x2A9A4100, + 0x2A997580, 0x2A98AA00, 0x2A97DE80, + 0x2A971300, 0x2A964780, 0x2A957C00, + 0x2A94B080, 0x2A93E500, 0x2A931980, + 0x2A924E00, 0x2A918280, 0x2A90B700, + 0x2A8FEB80, 0x2A8F2000, 0x2A8E5480, + 0x2A8D8900, 0x2A8CBD80, 0x2A8BF200, + 0x2A8B2680, 0x2A8A5B00, 0x2A898F80, + 0x2A88C400, 0x2A87F880, 0x2A872D00, + 0x2A866180, 0x2A859600, 0x2A84CA80, + 0x2A83FF00, 0x2A833380, 0x2A826800, + 0x2A819C80, 0x2A80D100, 0x2A800580, + 0x2A7F3A00, 0x2A7E6E80, 0x2A7DA300, + 0x2A7CD780, 0x2A7C0C00, 0x2A7B4080, + 0x2A7A7500, 0x2A79A980, 0x2A78DE00, + 0x2A781280, 0x2A774700, 0x2A767B80, + 0x2A75B000, 0x2A74E480, 0x2A741900, + 0x2A734D80, 0x2A728200, 0x2A71B680, + 0x2A70EB00, 0x2A701F80, 0x2A6F5400, + 0x2A6E8880, 0x2A6DBD00, 0x2A6CF180, + 0x2A6C2600, 0x2A6B5A80, 0x2A6A8F00, + 0x2A69C380, 0x2A68F800, 0x2A682C80, + 0x2A676100, 0x2A669580, 0x2A65CA00, + 0x2A64FE80, 0x2A643300, 0x2A636780, + 0x2A629C00, 0x2A61D080, 0x2A610500, + 0x2A603980, 0x2A5F6E00, 0x2A5EA280, + 0x2A5DD700, 0x2A5D0B80, 0x2A5C4000, + 0x2A5B7480, 0x2A5AA900, 0x2A59DD80, + 0x2A591200, 0x2A584680, 0x2A577B00, + 0x2A56AF80, 0x2A55E400, 0x2A551880, + 0x2A544D00, 0x2A538180, 0x2A52B600, + 0x2A51EA80, 0x2A511F00, 0x2A505380, + 0x2A4F8800, 0x2A4EBC80, 0x2A4DF100, + 0x2A4D2580, 0x2A4C5A00, 0x2A4B8E80, + 0x2A4AC300, 0x2A49F780, 0x2A492C00, + 0x2A486080, 0x2A479500, 0x2A46C980, + 0x2A45FE00, 0x2A453280, 0x2A446700, + 0x2A439B80, 0x2A42D000, 0x2A420480, + 0x2A413900, 0x2A406D80, 0x2A3FA200, + 0x2A3ED680, 0x2A3E0B00, 0x2A3D3F80, + 0x2A3C7400, 0x2A3BA880, 0x2A3ADD00, + 0x2A3A1180, 0x2A394600, 0x2A387A80, + 0x2A37AF00, 0x2A36E380, 0x2A361800, + 0x2A354C80, 0x2A348100, 0x2A33B580, + 0x2A32EA00, 0x2A321E80, 0x2A315300, + 0x2A308780, 0x2A2FBC00, 0x2A2EF080, + 0x2A2E2500, 0x2A2D5980, 0x2A2C8E00, + 0x2A2BC280, 0x2A2AF700, 0x2A2A2B80, + 0x2A296000, 0x2A289480, 0x2A27C900, + 0x2A26FD80, 0x2A263200, 0x2A256680, + 0x2A249B00, 0x2A23CF80, 0x2A230400, + 0x2A223880, 0x2A216D00, 0x2A20A180, + 0x2A1FD600, 0x2A1F0A80, 0x2A1E3F00, + 0x2A1D7380, 0x2A1CA800, 0x2A1BDC80, + 0x2A1B1100, 0x2A1A4580, 0x2A197A00, + 0x2A18AE80, 0x2A17E300, 0x2A171780, + 0x2A164C00, 0x2A158080, 0x2A14B500, + 0x2A13E980, 0x2A131E00, 0x2A125280, + 0x2A118700, 0x2A10BB80, 0x2A0FF000, + 0x2A0F2480, 0x2A0E5900, 0x2A0D8D80, + 0x2A0CC200, 0x2A0BF680, 0x2A0B2B00, + 0x2A0A5F80, 0x2A099400, 0x2A08C880, + 0x2A07FD00, 0x2A073180, 0x2A066600, + 0x2A059A80, 0x2A04CF00, 0x2A040380, + 0x2A033800, 0x2A026C80, 0x2A01A100, + 0x2A00D580, 0x2A000A00, 0x29FF3E80, + 0x29FE7300, 0x29FDA780, 0x29FCDC00, + 0x29FC1080, 0x29FB4500, 0x29FA7980, + 0x29F9AE00, 0x29F8E280, 0x29F81700, + 0x29F74B80, 0x29F68000, 0x29F5B480, + 0x29F4E900, 0x29F41D80, 0x29F35200, + 0x29F28680, 0x29F1BB00, 0x29F0EF80, + 0x29F02400, 0x29EF5880, 0x29EE8D00, + 0x29EDC180, 0x29ECF600, 0x29EC2A80, + 0x29EB5F00, 0x29EA9380, 0x29E9C800, + 0x29E8FC80, 0x29E83100, 0x29E76580, + 0x29E69A00, 0x29E5CE80, 0x29E50300, + 0x29E43780, 0x29E36C00, 0x29E2A080, + 0x29E1D500, 0x29E10980, 0x29E03E00, + 0x29DF7280, 0x29DEA700, 0x29DDDB80, + 0x29DD1000, 0x29DC4480, 0x29DB7900, + 0x29DAAD80, 0x29D9E200, 0x29D91680, + 0x29D84B00, 0x29D77F80, 0x29D6B400, + 0x29D5E880, 0x29D51D00, 0x29D45180, + 0x29D38600, 0x29D2BA80, 0x29D1EF00, + 0x29D12380, 0x29D05800, 0x29CF8C80, + 0x29CEC100, 0x29CDF580, 0x29CD2A00, + 0x29CC5E80, 0x29CB9300, 0x29CAC780, + 0x29C9FC00, 0x29C93080, 0x29C86500, + 0x29C79980, 0x29C6CE00, 0x29C60280, + 0x29C53700, 0x29C46B80, 0x29C3A000, + 0x29C2D480, 0x29C20900, 0x29C13D80, + 0x29C07200, 0x29BFA680, 0x29BEDB00, + 0x29BE0F80, 0x29BD4400, 0x29BC7880, + 0x29BBAD00, 0x29BAE180, 0x29BA1600, + 0x29B94A80, 0x29B87F00, 0x29B7B380, + 0x29B6E800, 0x29B61C80, 0x29B55100, + 0x29B48580, 0x29B3BA00, 0x29B2EE80, + 0x29B22300, 0x29B15780, 0x29B08C00, + 0x29AFC080, 0x29AEF500, 0x29AE2980, + 0x29AD5E00, 0x29AC9280, 0x29ABC700, + 0x29AAFB80, 0x29AA3000, 0x29A96480, + 0x29A89900, 0x29A7CD80, 0x29A70200, + 0x29A63680, 0x29A56B00, 0x29A49F80, + 0x29A3D400, 0x29A30880, 0x29A23D00, + 0x29A17180, 0x29A0A600, 0x299FDA80, + 0x299F0F00, 0x299E4380, 0x299D7800, + 0x299CAC80, 0x299BE100, 0x299B1580, + 0x299A4A00, 0x29997E80, 0x2998B300, + 0x2997E780, 0x29971C00, 0x29965080, + 0x29958500, 0x2994B980, 0x2993EE00, + 0x29932280, 0x29925700, 0x29918B80, + 0x2990C000, 0x298FF480, 0x298F2900, + 0x298E5D80, 0x298D9200, 0x298CC680, + 0x298BFB00, 0x298B2F80, 0x298A6400, + 0x29899880, 0x2988CD00, 0x29880180, + 0x29873600, 0x29866A80, 0x29859F00, + 0x2984D380, 0x29840800, 0x29833C80, + 0x29827100, 0x2981A580, 0x2980DA00, + 0x29800E80, 0x297F4300, 0x297E7780, + 0x297DAC00, 0x297CE080, 0x297C1500, + 0x297B4980, 0x297A7E00, 0x2979B280, + 0x2978E700, 0x29781B80, 0x29775000, + 0x29768480, 0x2975B900, 0x2974ED80, + 0x29742200, 0x29735680, 0x29728B00, + 0x2971BF80, 0x2970F400, 0x29702880, + 0x296F5D00, 0x296E9180, 0x296DC600, + 0x296CFA80, 0x296C2F00, 0x296B6380, + 0x296A9800, 0x2969CC80, 0x29690100, + 0x29683580, 0x29676A00, 0x29669E80, + 0x2965D300, 0x29650780, 0x29643C00, + 0x29637080, 0x2962A500, 0x2961D980, + 0x29610E00, 0x29604280, 0x295F7700, + 0x295EAB80, 0x295DE000, 0x295D1480, + 0x295C4900, 0x295B7D80, 0x295AB200, + 0x2959E680, 0x29591B00, 0x29584F80, + 0x29578400, 0x2956B880, 0x2955ED00, + 0x29552180, 0x29545600, 0x29538A80, + 0x2952BF00, 0x2951F380, 0x29512800, + 0x29505C80, 0x294F9100, 0x294EC580, + 0x294DFA00, 0x294D2E80, 0x294C6300, + 0x294B9780, 0x294ACC00, 0x294A0080, + 0x29493500, 0x29486980, 0x29479E00, + 0x2946D280, 0x29460700, 0x29453B80, + 0x29447000, 0x2943A480, 0x2942D900, + 0x29420D80, 0x29414200, 0x29407680, + 0x293FAB00, 0x293EDF80, 0x293E1400, + 0x293D4880, 0x293C7D00, 0x293BB180, + 0x293AE600, 0x293A1A80, 0x29394F00, + 0x29388380, 0x2937B800, 0x2936EC80, + 0x29362100, 0x29355580, 0x29348A00, + 0x2933BE80, 0x2932F300, 0x29322780, + 0x29315C00, 0x29309080, 0x292FC500, + 0x292EF980, 0x292E2E00, 0x292D6280, + 0x292C9700, 0x292BCB80, 0x292B0000, + 0x292A3480, 0x29296900, 0x29289D80, + 0x2927D200, 0x29270680, 0x29263B00, + 0x29256F80, 0x2924A400, 0x2923D880, + 0x29230D00, 0x29224180, 0x29217600, + 0x2920AA80, 0x291FDF00, 0x291F1380, + 0x291E4800, 0x291D7C80, 0x291CB100, + 0x291BE580, 0x291B1A00, 0x291A4E80, + 0x29198300, 0x2918B780, 0x2917EC00, + 0x29172080, 0x29165500, 0x29158980, + 0x2914BE00, 0x2913F280, 0x29132700, + 0x29125B80, 0x29119000, 0x2910C480, + 0x290FF900, 0x290F2D80, 0x290E6200, + 0x290D9680, 0x290CCB00, 0x290BFF80, + 0x290B3400, 0x290A6880, 0x29099D00, + 0x2908D180, 0x29080600, 0x29073A80, + 0x29066F00, 0x2905A380, 0x2904D800, + 0x29040C80, 0x29034100, 0x29027580, + 0x2901AA00, 0x2900DE80, 0x29001300, + 0x28FF4780, 0x28FE7C00, 0x28FDB080, + 0x28FCE500, 0x28FC1980, 0x28FB4E00, + 0x28FA8280, 0x28F9B700, 0x28F8EB80, + 0x28F82000, 0x28F75480, 0x28F68900, + 0x28F5BD80, 0x28F4F200, 0x28F42680, + 0x28F35B00, 0x28F28F80, 0x28F1C400, + 0x28F0F880, 0x28F02D00, 0x28EF6180, + 0x28EE9600, 0x28EDCA80, 0x28ECFF00, + 0x28EC3380, 0x28EB6800, 0x28EA9C80, + 0x28E9D100, 0x28E90580, 0x28E83A00, + 0x28E76E80, 0x28E6A300, 0x28E5D780, + 0x28E50C00, 0x28E44080, 0x28E37500, + 0x28E2A980, 0x28E1DE00, 0x28E11280, + 0x28E04700, 0x28DF7B80, 0x28DEB000, + 0x28DDE480, 0x28DD1900, 0x28DC4D80, + 0x28DB8200, 0x28DAB680, 0x28D9EB00, + 0x28D91F80, 0x28D85400, 0x28D78880, + 0x28D6BD00, 0x28D5F180, 0x28D52600, + 0x28D45A80, 0x28D38F00, 0x28D2C380, + 0x28D1F800, 0x28D12C80, 0x28D06100, + 0x28CF9580, 0x28CECA00, 0x28CDFE80, + 0x28CD3300, 0x28CC6780, 0x28CB9C00, + 0x28CAD080, 0x28CA0500, 0x28C93980, + 0x28C86E00, 0x28C7A280, 0x28C6D700, + 0x28C60B80, 0x28C54000, 0x28C47480, + 0x28C3A900, 0x28C2DD80, 0x28C21200, + 0x28C14680, 0x28C07B00, 0x28BFAF80, + 0x28BEE400, 0x28BE1880, 0x28BD4D00, + 0x28BC8180, 0x28BBB600, 0x28BAEA80, + 0x28BA1F00, 0x28B95380, 0x28B88800, + 0x28B7BC80, 0x28B6F100, 0x28B62580, + 0x28B55A00, 0x28B48E80, 0x28B3C300, + 0x28B2F780, 0x28B22C00, 0x28B16080, + 0x28B09500, 0x28AFC980, 0x28AEFE00, + 0x28AE3280, 0x28AD6700, 0x28AC9B80, + 0x28ABD000, 0x28AB0480, 0x28AA3900, + 0x28A96D80, 0x28A8A200, 0x28A7D680, + 0x28A70B00, 0x28A63F80, 0x28A57400, + 0x28A4A880, 0x28A3DD00, 0x28A31180, + 0x28A24600, 0x28A17A80, 0x28A0AF00, + 0x289FE380, 0x289F1800, 0x289E4C80, + 0x289D8100, 0x289CB580, 0x289BEA00, + 0x289B1E80, 0x289A5300, 0x28998780, + 0x2898BC00, 0x2897F080, 0x28972500, + 0x28965980, 0x28958E00, 0x2894C280, + 0x2893F700, 0x28932B80, 0x28926000, + 0x28919480, 0x2890C900, 0x288FFD80, + 0x288F3200, 0x288E6680, 0x288D9B00, + 0x288CCF80, 0x288C0400, 0x288B3880, + 0x288A6D00, 0x2889A180, 0x2888D600, + 0x28880A80, 0x28873F00, 0x28867380, + 0x2885A800, 0x2884DC80, 0x28841100, + 0x28834580, 0x28827A00, 0x2881AE80, + 0x2880E300, 0x28801780, 0x287F4C00, + 0x287E8080, 0x287DB500, 0x287CE980, + 0x287C1E00, 0x287B5280, 0x287A8700, + 0x2879BB80, 0x2878F000, 0x28782480, + 0x28775900, 0x28768D80, 0x2875C200, + 0x2874F680, 0x28742B00, 0x28735F80, + 0x28729400, 0x2871C880, 0x2870FD00, + 0x28703180, 0x286F6600, 0x286E9A80, + 0x286DCF00, 0x286D0380, 0x286C3800, + 0x286B6C80, 0x286AA100, 0x2869D580, + 0x28690A00, 0x28683E80, 0x28677300, + 0x2866A780, 0x2865DC00, 0x28651080, + 0x28644500, 0x28637980, 0x2862AE00, + 0x2861E280, 0x28611700, 0x28604B80, + 0x285F8000, 0x285EB480, 0x285DE900, + 0x285D1D80, 0x285C5200, 0x285B8680, + 0x285ABB00, 0x2859EF80, 0x28592400, + 0x28585880, 0x28578D00, 0x2856C180, + 0x2855F600, 0x28552A80, 0x28545F00, + 0x28539380, 0x2852C800, 0x2851FC80, + 0x28513100, 0x28506580, 0x284F9A00, + 0x284ECE80, 0x284E0300, 0x284D3780, + 0x284C6C00, 0x284BA080, 0x284AD500, + 0x284A0980, 0x28493E00, 0x28487280, + 0x2847A700, 0x2846DB80, 0x28461000, + 0x28454480, 0x28447900, 0x2843AD80, + 0x2842E200, 0x28421680, 0x28414B00, + 0x28407F80, 0x283FB400, 0x283EE880, + 0x283E1D00, 0x283D5180, 0x283C8600, + 0x283BBA80, 0x283AEF00, 0x283A2380, + 0x28395800, 0x28388C80, 0x2837C100, + 0x2836F580, 0x28362A00, 0x28355E80, + 0x28349300, 0x2833C780, 0x2832FC00, + 0x28323080, 0x28316500, 0x28309980, + 0x282FCE00, 0x282F0280, 0x282E3700, + 0x282D6B80, 0x282CA000, 0x282BD480, + 0x282B0900, 0x282A3D80, 0x28297200, + 0x2828A680, 0x2827DB00, 0x28270F80, + 0x28264400, 0x28257880, 0x2824AD00, + 0x2823E180, 0x28231600, 0x28224A80, + 0x28217F00, 0x2820B380, 0x281FE800, + 0x281F1C80, 0x281E5100, 0x281D8580, + 0x281CBA00, 0x281BEE80, 0x281B2300, + 0x281A5780, 0x28198C00, 0x2818C080, + 0x2817F500, 0x28172980, 0x28165E00, + 0x28159280, 0x2814C700, 0x2813FB80, + 0x28133000, 0x28126480, 0x28119900, + 0x2810CD80, 0x28100200, 0x280F3680, + 0x280E6B00, 0x280D9F80, 0x280CD400, + 0x280C0880, 0x280B3D00, 0x280A7180, + 0x2809A600, 0x2808DA80, 0x28080F00, + 0x28074380, 0x28067800, 0x2805AC80, + 0x2804E100, 0x28041580, 0x28034A00, + 0x28027E80, 0x2801B300, 0x2800E780, + 0x28001C00, 0x27FF5080, 0x27FE8500, + 0x27FDB980, 0x27FCEE00, 0x27FC2280, + 0x27FB5700, 0x27FA8B80, 0x27F9C000, + 0x27F8F480, 0x27F82900, 0x27F75D80, + 0x27F69200, 0x27F5C680, 0x27F4FB00, + 0x27F42F80, 0x27F36400, 0x27F29880, + 0x27F1CD00, 0x27F10180, 0x27F03600, + 0x27EF6A80, 0x27EE9F00, 0x27EDD380, + 0x27ED0800, 0x27EC3C80, 0x27EB7100, + 0x27EAA580, 0x27E9DA00, 0x27E90E80, + 0x27E84300, 0x27E77780, 0x27E6AC00, + 0x27E5E080, 0x27E51500, 0x27E44980, + 0x27E37E00, 0x27E2B280, 0x27E1E700, + 0x27E11B80, 0x27E05000, 0x27DF8480, + 0x27DEB900, 0x27DDED80, 0x27DD2200, + 0x27DC5680, 0x27DB8B00, 0x27DABF80, + 0x27D9F400, 0x27D92880, 0x27D85D00, + 0x27D79180, 0x27D6C600, 0x27D5FA80, + 0x27D52F00, 0x27D46380, 0x27D39800, + 0x27D2CC80, 0x27D20100, 0x27D13580, + 0x27D06A00, 0x27CF9E80, 0x27CED300, + 0x27CE0780, 0x27CD3C00, 0x27CC7080, + 0x27CBA500, 0x27CAD980, 0x27CA0E00, + 0x27C94280, 0x27C87700, 0x27C7AB80, + 0x27C6E000, 0x27C61480, 0x27C54900, + 0x27C47D80, 0x27C3B200, 0x27C2E680, + 0x27C21B00, 0x27C14F80, 0x27C08400, + 0x27BFB880, 0x27BEED00, 0x27BE2180, + 0x27BD5600, 0x27BC8A80, 0x27BBBF00, + 0x27BAF380, 0x27BA2800, 0x27B95C80, + 0x27B89100, 0x27B7C580, 0x27B6FA00, + 0x27B62E80, 0x27B56300, 0x27B49780, + 0x27B3CC00, 0x27B30080, 0x27B23500, + 0x27B16980, 0x27B09E00, 0x27AFD280, + 0x27AF0700, 0x27AE3B80, 0x27AD7000, + 0x27ACA480, 0x27ABD900, 0x27AB0D80, + 0x27AA4200, 0x27A97680, 0x27A8AB00, + 0x27A7DF80, 0x27A71400, 0x27A64880, + 0x27A57D00, 0x27A4B180, 0x27A3E600, + 0x27A31A80, 0x27A24F00, 0x27A18380, + 0x27A0B800, 0x279FEC80, 0x279F2100, + 0x279E5580, 0x279D8A00, 0x279CBE80, + 0x279BF300, 0x279B2780, 0x279A5C00, + 0x27999080, 0x2798C500, 0x2797F980, + 0x27972E00, 0x27966280, 0x27959700, + 0x2794CB80, 0x27940000, 0x27934100, + 0x27928200, 0x2791C300, 0x27910400, + 0x27904500, 0x278F8600, 0x278EC700, + 0x278E0800, 0x278D4900, 0x278C8A00, + 0x278BCB00, 0x278B0C00, 0x278A4D00, + 0x27898E00, 0x2788CF00, 0x27881000, + 0x27875100, 0x27869200, 0x2785D300, + 0x27851400, 0x27845500, 0x27839600, + 0x2782D700, 0x27821800, 0x27815900, + 0x27809A00, 0x277FDB00, 0x277F1C00, + 0x277E5D00, 0x277D9E00, 0x277CDF00, + 0x277C2000, 0x277B6100, 0x277AA200, + 0x2779E300, 0x27792400, 0x27786500, + 0x2777A600, 0x2776E700, 0x27762800, + 0x27756900, 0x2774AA00, 0x2773EB00, + 0x27732C00, 0x27726D00, 0x2771AE00, + 0x2770EF00, 0x27703000, 0x276F7100, + 0x276EB200, 0x276DF300, 0x276D3400, + 0x276C7500, 0x276BB600, 0x276AF700, + 0x276A3800, 0x27697900, 0x2768BA00, + 0x2767FB00, 0x27673C00, 0x27667D00, + 0x2765BE00, 0x2764FF00, 0x27644000, + 0x27638100, 0x2762C200, 0x27620300, + 0x27614400, 0x27608500, 0x275FC600, + 0x275F0700, 0x275E4800, 0x275D8900, + 0x275CCA00, 0x275C0B00, 0x275B4C00, + 0x275A8D00, 0x2759CE00, 0x27590F00, + 0x27585000, 0x27579100, 0x2756D200, + 0x27561300, 0x27555400, 0x27549500, + 0x2753D600, 0x27531700, 0x27525800, + 0x27519900, 0x2750DA00, 0x27501B00, + 0x274F5C00, 0x274E9D00, 0x274DDE00, + 0x274D1F00, 0x274C6000, 0x274BA100, + 0x274AE200, 0x274A2300, 0x27496400, + 0x2748A500, 0x2747E600, 0x27472700, + 0x27466800, 0x2745A900, 0x2744EA00, + 0x27442B00, 0x27436C00, 0x2742AD00, + 0x2741EE00, 0x27412F00, 0x27407000, + 0x273FB100, 0x273EF200, 0x273E3300, + 0x273D7400, 0x273CB500, 0x273BF600, + 0x273B3700, 0x273A7800, 0x2739B900, + 0x2738FA00, 0x27383B00, 0x27377C00, + 0x2736BD00, 0x2735FE00, 0x27353F00, + 0x27348000, 0x2733C100, 0x27330200, + 0x27324300, 0x27318400, 0x2730C500, + 0x27300600, 0x272F4700, 0x272E8800, + 0x272DC900, 0x272D0A00, 0x272C4B00, + 0x272B8C00, 0x272ACD00, 0x272A0E00, + 0x27294F00, 0x27289000, 0x2727D100, + 0x27271200, 0x27265300, 0x27259400, + 0x2724D500, 0x27241600, 0x27235700, + 0x27229800, 0x2721D900, 0x27211A00, + 0x27205B00, 0x271F9C00, 0x271EDD00, + 0x271E1E00, 0x271D5F00, 0x271CA000, + 0x271BE100, 0x271B2200, 0x271A6300, + 0x2719A400, 0x2718E500, 0x27182600, + 0x27176700, 0x2716A800, 0x2715E900, + 0x27152A00, 0x27146B00, 0x2713AC00, + 0x2712ED00, 0x27122E00, 0x27116F00, + 0x2710B000, 0x270FF100, 0x270F3200, + 0x270E7300, 0x270DB400, 0x270CF500, + 0x270C3600, 0x270B7700, 0x270AB800, + 0x2709F900, 0x27093A00, 0x27087B00, + 0x2707BC00, 0x2706FD00, 0x27063E00, + 0x27057F00, 0x2704C000, 0x27040100, + 0x27034200, 0x27028300, 0x2701C400, + 0x27010500, 0x27004600, 0x26FF8700, + 0x26FEC800, 0x26FE0900, 0x26FD4A00, + 0x26FC8B00, 0x26FBCC00, 0x26FB0D00, + 0x26FA4E00, 0x26F98F00, 0x26F8D000, + 0x26F81100, 0x26F75200, 0x26F69300, + 0x26F5D400, 0x26F51500, 0x26F45600, + 0x26F39700, 0x26F2D800, 0x26F21900, + 0x26F15A00, 0x26F09B00, 0x26EFDC00, + 0x26EF1D00, 0x26EE5E00, 0x26ED9F00, + 0x26ECE000, 0x26EC2100, 0x26EB6200, + 0x26EAA300, 0x26E9E400, 0x26E92500, + 0x26E86600, 0x26E7A700, 0x26E6E800, + 0x26E62900, 0x26E56A00, 0x26E4AB00, + 0x26E3EC00, 0x26E32D00, 0x26E26E00, + 0x26E1AF00, 0x26E0F000, 0x26E03100, + 0x26DF7200, 0x26DEB300, 0x26DDF400, + 0x26DD3500, 0x26DC7600, 0x26DBB700, + 0x26DAF800, 0x26DA3900, 0x26D97A00, + 0x26D8BB00, 0x26D7FC00, 0x26D73D00, + 0x26D67E00, 0x26D5BF00, 0x26D50000, + 0x26D44100, 0x26D38200, 0x26D2C300, + 0x26D20400, 0x26D14500, 0x26D08600, + 0x26CFC700, 0x26CF0800, 0x26CE4900, + 0x26CD8A00, 0x26CCCB00, 0x26CC0C00, + 0x26CB4D00, 0x26CA8E00, 0x26C9CF00, + 0x26C91000, 0x26C85100, 0x26C79200, + 0x26C6D300, 0x26C61400, 0x26C55500, + 0x26C49600, 0x26C3D700, 0x26C31800, + 0x26C25900, 0x26C19A00, 0x26C0DB00, + 0x26C01C00, 0x26BF5D00, 0x26BE9E00, + 0x26BDDF00, 0x26BD2000, 0x26BC6100, + 0x26BBA200, 0x26BAE300, 0x26BA2400, + 0x26B96500, 0x26B8A600, 0x26B7E700, + 0x26B72800, 0x26B66900, 0x26B5AA00, + 0x26B4EB00, 0x26B42C00, 0x26B36D00, + 0x26B2AE00, 0x26B1EF00, 0x26B13000, + 0x26B07100, 0x26AFB200, 0x26AEF300, + 0x26AE3400, 0x26AD7500, 0x26ACB600, + 0x26ABF700, 0x26AB3800, 0x26AA7900, + 0x26A9BA00, 0x26A8FB00, 0x26A83C00, + 0x26A77D00, 0x26A6BE00, 0x26A5FF00, + 0x26A54000, 0x26A48100, 0x26A3C200, + 0x26A30300, 0x26A24400, 0x26A18500, + 0x26A0C600, 0x26A00700, 0x269F4800, + 0x269E8900, 0x269DCA00, 0x269D0B00, + 0x269C4C00, 0x269B8D00, 0x269ACE00, + 0x269A0F00, 0x26995000, 0x26989100, + 0x2697D200, 0x26971300, 0x26965400, + 0x26959500, 0x2694D600, 0x26941700, + 0x26935800, 0x26929900, 0x2691DA00, + 0x26911B00, 0x26905C00, 0x268F9D00, + 0x268EDE00, 0x268E1F00, 0x268D6000, + 0x268CA100, 0x268BE200, 0x268B2300, + 0x268A6400, 0x2689A500, 0x2688E600, + 0x26882700, 0x26876800, 0x2686A900, + 0x2685EA00, 0x26852B00, 0x26846C00, + 0x2683AD00, 0x2682EE00, 0x26822F00, + 0x26817000, 0x2680B100, 0x267FF200, + 0x267F3300, 0x267E7400, 0x267DB500, + 0x267CF600, 0x267C3700, 0x267B7800, + 0x267AB900, 0x2679FA00, 0x26793B00, + 0x26787C00, 0x2677BD00, 0x2676FE00, + 0x26763F00, 0x26758000, 0x2674C100, + 0x26740200, 0x26734300, 0x26728400, + 0x2671C500, 0x26710600, 0x26704700, + 0x266F8800, 0x266EC900, 0x266E0A00, + 0x266D4B00, 0x266C8C00, 0x266BCD00, + 0x266B0E00, 0x266A4F00, 0x26699000, + 0x2668D100, 0x26681200, 0x26675300, + 0x26669400, 0x2665D500, 0x26651600, + 0x26645700, 0x26639800, 0x2662D900, + 0x26621A00, 0x26615B00, 0x26609C00, + 0x265FDD00, 0x265F1E00, 0x265E5F00, + 0x265DA000, 0x265CE100, 0x265C2200, + 0x265B6300, 0x265AA400, 0x2659E500, + 0x26592600, 0x26586700, 0x2657A800, + 0x2656E900, 0x26562A00, 0x26556B00, + 0x2654AC00, 0x2653ED00, 0x26532E00, + 0x26526F00, 0x2651B000, 0x2650F100, + 0x26503200, 0x264F7300, 0x264EB400, + 0x264DF500, 0x264D3600, 0x264C7700, + 0x264BB800, 0x264AF900, 0x264A3A00, + 0x26497B00, 0x2648BC00, 0x2647FD00, + 0x26473E00, 0x26467F00, 0x2645C000, + 0x26450100, 0x26444200, 0x26438300, + 0x2642C400, 0x26420500, 0x26414600, + 0x26408700, 0x263FC800, 0x263F0900, + 0x263E4A00, 0x263D8B00, 0x263CCC00, + 0x263C0D00, 0x263B4E00, 0x263A8F00, + 0x2639D000, 0x26391100, 0x26385200, + 0x26379300, 0x2636D400, 0x26361500, + 0x26355600, 0x26349700, 0x2633D800, + 0x26331900, 0x26325A00, 0x26319B00, + 0x2630DC00, 0x26301D00, 0x262F5E00, + 0x262E9F00, 0x262DE000, 0x262D2100, + 0x262C6200, 0x262BA300, 0x262AE400, + 0x262A2500, 0x26296600, 0x2628A700, + 0x2627E800, 0x26272900, 0x26266A00, + 0x2625AB00, 0x2624EC00, 0x26242D00, + 0x26236E00, 0x2622AF00, 0x2621F000, + 0x26213100, 0x26207200, 0x261FB300, + 0x261EF400, 0x261E3500, 0x261D7600, + 0x261CB700, 0x261BF800, 0x261B3900, + 0x261A7A00, 0x2619BB00, 0x2618FC00, + 0x26183D00, 0x26177E00, 0x2616BF00, + 0x26160000, 0x26154100, 0x26148200, + 0x2613C300, 0x26130400, 0x26124500, + 0x26118600, 0x2610C700, 0x26100800, + 0x260F4900, 0x260E8A00, 0x260DCB00, + 0x260D0C00, 0x260C4D00, 0x260B8E00, + 0x260ACF00, 0x260A1000, 0x26095100, + 0x26089200, 0x2607D300, 0x26071400, + 0x26065500, 0x26059600, 0x2604D700, + 0x26041800, 0x26035900, 0x26029A00, + 0x2601DB00, 0x26011C00, 0x26005D00, + 0x25FF9E00, 0x25FEDF00, 0x25FE2000, + 0x25FD6100, 0x25FCA200, 0x25FBE300, + 0x25FB2400, 0x25FA6500, 0x25F9A600, + 0x25F8E700, 0x25F82800, 0x25F76900, + 0x25F6AA00, 0x25F5EB00, 0x25F52C00, + 0x25F46D00, 0x25F3AE00, 0x25F2EF00, + 0x25F23000, 0x25F17100, 0x25F0B200, + 0x25EFF300, 0x25EF3400, 0x25EE7500, + 0x25EDB600, 0x25ECF700, 0x25EC3800, + 0x25EB7900, 0x25EABA00, 0x25E9FB00, + 0x25E93C00, 0x25E87D00, 0x25E7BE00, + 0x25E6FF00, 0x25E64000, 0x25E58100, + 0x25E4C200, 0x25E40300, 0x25E34400, + 0x25E28500, 0x25E1C600, 0x25E10700, + 0x25E04800, 0x25DF8900, 0x25DECA00, + 0x25DE0B00, 0x25DD4C00, 0x25DC8D00, + 0x25DBCE00, 0x25DB0F00, 0x25DA5000, + 0x25D99100, 0x25D8D200, 0x25D81300, + 0x25D75400, 0x25D69500, 0x25D5D600, + 0x25D51700, 0x25D45800, 0x25D39900, + 0x25D2DA00, 0x25D21B00, 0x25D15C00, + 0x25D09D00, 0x25CFDE00, 0x25CF1F00, + 0x25CE6000, 0x25CDA100, 0x25CCE200, + 0x25CC2300, 0x25CB6400, 0x25CAA500, + 0x25C9E600, 0x25C92700, 0x25C86800, + 0x25C7A900, 0x25C6EA00, 0x25C62B00, + 0x25C56C00, 0x25C4AD00, 0x25C3EE00, + 0x25C32F00, 0x25C27000, 0x25C1B100, + 0x25C0F200, 0x25C03300, 0x25BF7400, + 0x25BEB500, 0x25BDF600, 0x25BD3700, + 0x25BC7800, 0x25BBB900, 0x25BAFA00, + 0x25BA3B00, 0x25B97C00, 0x25B8BD00, + 0x25B7FE00, 0x25B73F00, 0x25B68000, + 0x25B5C100, 0x25B50200, 0x25B44300, + 0x25B38400, 0x25B2C500, 0x25B20600, + 0x25B14700, 0x25B08800, 0x25AFC900, + 0x25AF0A00, 0x25AE4B00, 0x25AD8C00, + 0x25ACCD00, 0x25AC0E00, 0x25AB4F00, + 0x25AA9000, 0x25A9D100, 0x25A91200, + 0x25A85300, 0x25A79400, 0x25A6D500, + 0x25A61600, 0x25A55700, 0x25A49800, + 0x25A3D900, 0x25A31A00, 0x25A25B00, + 0x25A19C00, 0x25A0DD00, 0x25A01E00, + 0x259F5F00, 0x259EA000, 0x259DE100, + 0x259D2200, 0x259C6300, 0x259BA400, + 0x259AE500, 0x259A2600, 0x25996700, + 0x2598A800, 0x2597E900, 0x25972A00, + 0x25966B00, 0x2595AC00, 0x2594ED00, + 0x25942E00, 0x25936F00, 0x2592B000, + 0x2591F100, 0x25913200, 0x25907300, + 0x258FB400, 0x258EF500, 0x258E3600, + 0x258D7700, 0x258CB800, 0x258BF900, + 0x258B3A00, 0x258A7B00, 0x2589BC00, + 0x2588FD00, 0x25883E00, 0x25877F00, + 0x2586C000, 0x25860100, 0x25854200, + 0x25848300, 0x2583C400, 0x25830500, + 0x25824600, 0x25818700, 0x2580C800, + 0x25800900, 0x257F4A00, 0x257E8B00, + 0x257DCC00, 0x257D0D00, 0x257C4E00, + 0x257B8F00, 0x257AD000, 0x257A1100, + 0x25795200, 0x25789300, 0x2577D400, + 0x25771500, 0x25765600, 0x25759700, + 0x2574D800, 0x25741900, 0x25735A00, + 0x25729B00, 0x2571DC00, 0x25711D00, + 0x25705E00, 0x256F9F00, 0x256EE000, + 0x256E2100, 0x256D6200, 0x256CA300, + 0x256BE400, 0x256B2500, 0x256A6600, + 0x2569A700, 0x2568E800, 0x25682900, + 0x25676A00, 0x2566AB00, 0x2565EC00, + 0x25652D00, 0x25646E00, 0x2563AF00, + 0x2562F000, 0x25623100, 0x25617200, + 0x2560B300, 0x255FF400, 0x255F3500, + 0x255E7600, 0x255DB700, 0x255CF800, + 0x255C3900, 0x255B7A00, 0x255ABB00, + 0x2559FC00, 0x25593D00, 0x25587E00, + 0x2557BF00, 0x25570000, 0x25564100, + 0x25558200, 0x2554C300, 0x25540400, + 0x25534500, 0x25528600, 0x2551C700, + 0x25510800, 0x25504900, 0x254F8A00, + 0x254ECB00, 0x254E0C00, 0x254D4D00, + 0x254C8E00, 0x254BCF00, 0x254B1000, + 0x254A5100, 0x25499200, 0x2548D300, + 0x25481400, 0x25475500, 0x25469600, + 0x2545D700, 0x25451800, 0x25445900, + 0x25439A00, 0x2542DB00, 0x25421C00, + 0x25415D00, 0x25409E00, 0x253FDF00, + 0x253F2000, 0x253E6100, 0x253DA200, + 0x253CE300, 0x253C2400, 0x253B6500, + 0x253AA600, 0x2539E700, 0x25392800, + 0x25386900, 0x2537AA00, 0x2536EB00, + 0x25362C00, 0x25356D00, 0x2534AE00, + 0x2533EF00, 0x25333000, 0x25327100, + 0x2531B200, 0x2530F300, 0x25303400, + 0x252F7500, 0x252EB600, 0x252DF700, + 0x252D3800, 0x252C7900, 0x252BBA00, + 0x252AFB00, 0x252A3C00, 0x25297D00, + 0x2528BE00, 0x2527FF00, 0x25274000, + 0x25268100, 0x2525C200, 0x25250300, + 0x25244400, 0x25238500, 0x2522C600, + 0x25220700, 0x25214800, 0x25208900, + 0x251FCA00, 0x251F0B00, 0x251E4C00, + 0x251D8D00, 0x251CCE00, 0x251C0F00, + 0x251B5000, 0x251A9100, 0x2519D200, + 0x25191300, 0x25185400, 0x25179500, + 0x2516D600, 0x25161700, 0x25155800, + 0x25149900, 0x2513DA00, 0x25131B00, + 0x25125C00, 0x25119D00, 0x2510DE00, + 0x25101F00, 0x250F6000, 0x250EA100, + 0x250DE200, 0x250D2300, 0x250C6400, + 0x250BA500, 0x250AE600, 0x250A2700, + 0x25096800, 0x2508A900, 0x2507EA00, + 0x25072B00, 0x25066C00, 0x2505AD00, + 0x2504EE00, 0x25042F00, 0x25037000, + 0x2502B100, 0x2501F200, 0x25013300, + 0x25007400, 0x24FFB500, 0x24FEF600, + 0x24FE3700, 0x24FD7800, 0x24FCB900, + 0x24FBFA00, 0x24FB3B00, 0x24FA7C00, + 0x24F9BD00, 0x24F8FE00, 0x24F83F00, + 0x24F78000, 0x24F6C100, 0x24F60200, + 0x24F54300, 0x24F48400, 0x24F3C500, + 0x24F30600, 0x24F24700, 0x24F18800, + 0x24F0C900, 0x24F00A00, 0x24EF4B00, + 0x24EE8C00, 0x24EDCD00, 0x24ED0E00, + 0x24EC4F00, 0x24EB9000, 0x24EAD100, + 0x24EA1200, 0x24E95300, 0x24E89400, + 0x24E7D500, 0x24E71600, 0x24E65700, + 0x24E59800, 0x24E4D900, 0x24E41A00, + 0x24E35B00, 0x24E29C00, 0x24E1DD00, + 0x24E11E00, 0x24E05F00, 0x24DFA000, + 0x24DEE100, 0x24DE2200, 0x24DD6300, + 0x24DCA400, 0x24DBE500, 0x24DB2600, + 0x24DA6700, 0x24D9A800, 0x24D8E900, + 0x24D82A00, 0x24D76B00, 0x24D6AC00, + 0x24D5ED00, 0x24D52E00, 0x24D46F00, + 0x24D3B000, 0x24D2F100, 0x24D23200, + 0x24D17300, 0x24D0B400, 0x24CFF500, + 0x24CF3600, 0x24CE7700, 0x24CDB800, + 0x24CCF900, 0x24CC3A00, 0x24CB7B00, + 0x24CABC00, 0x24C9FD00, 0x24C93E00, + 0x24C87F00, 0x24C7C000, 0x24C70100, + 0x24C64200, 0x24C58300, 0x24C4C400, + 0x24C40500, 0x24C34600, 0x24C28700, + 0x24C1C800, 0x24C10900, 0x24C04A00, + 0x24BF8B00, 0x24BECC00, 0x24BE0D00, + 0x24BD4E00, 0x24BC8F00, 0x24BBD000, + 0x24BB1100, 0x24BA5200, 0x24B99300, + 0x24B8D400, 0x24B81500, 0x24B75600, + 0x24B69700, 0x24B5D800, 0x24B51900, + 0x24B45A00, 0x24B39B00, 0x24B2DC00, + 0x24B21D00, 0x24B15E00, 0x24B09F00, + 0x24AFE000, 0x24AF2100, 0x24AE6200, + 0x24ADA300, 0x24ACE400, 0x24AC2500, + 0x24AB6600, 0x24AAA700, 0x24A9E800, + 0x24A92900, 0x24A86A00, 0x24A7AB00, + 0x24A6EC00, 0x24A62D00, 0x24A56E00, + 0x24A4AF00, 0x24A3F000, 0x24A33100, + 0x24A27200, 0x24A1B300, 0x24A0F400, + 0x24A03500, 0x249F7600, 0x249EB700, + 0x249DF800, 0x249D3900, 0x249C7A00, + 0x249BBB00, 0x249AFC00, 0x249A3D00, + 0x24997E00, 0x2498BF00, 0x24980000, + 0x24974100, 0x24968200, 0x2495C300, + 0x24950400, 0x24944500, 0x24938600, + 0x2492C700, 0x24920800, 0x24914900, + 0x24908A00, 0x248FCB00, 0x248F0C00, + 0x248E4D00, 0x248D8E00, 0x248CCF00, + 0x248C1000, 0x248B5100, 0x248A9200, + 0x2489D300, 0x24891400, 0x24885500, + 0x24879600, 0x2486D700, 0x24861800, + 0x24855900, 0x24849A00, 0x2483DB00, + 0x24831C00, 0x24825D00, 0x24819E00, + 0x2480DF00, 0x24802000, 0x247F6100, + 0x247EA200, 0x247DE300, 0x247D2400, + 0x247C6500, 0x247BA600, 0x247AE700, + 0x247A2800, 0x24796900, 0x2478AA00, + 0x2477EB00, 0x24772C00, 0x24766D00, + 0x2475AE00, 0x2474EF00, 0x24743000, + 0x24737100, 0x2472B200, 0x2471F300, + 0x24713400, 0x24707500, 0x246FB600, + 0x246EF700, 0x246E3800, 0x246D7900, + 0x246CBA00, 0x246BFB00, 0x246B3C00, + 0x246A7D00, 0x2469BE00, 0x2468FF00, + 0x24684000, 0x24678100, 0x2466C200, + 0x24660300, 0x24654400, 0x24648500, + 0x2463C600, 0x24630700, 0x24624800, + 0x24618900, 0x2460CA00, 0x24600B00, + 0x245F4C00, 0x245E8D00, 0x245DCE00, + 0x245D0F00, 0x245C5000, 0x245B9100, + 0x245AD200, 0x245A1300, 0x24595400, + 0x24589500, 0x2457D600, 0x24571700, + 0x24565800, 0x24559900, 0x2454DA00, + 0x24541B00, 0x24535C00, 0x24529D00, + 0x2451DE00, 0x24511F00, 0x24506000, + 0x244FA100, 0x244EE200, 0x244E2300, + 0x244D6400, 0x244CA500, 0x244BE600, + 0x244B2700, 0x244A6800, 0x2449A900, + 0x2448EA00, 0x24482B00, 0x24476C00, + 0x2446AD00, 0x2445EE00, 0x24452F00, + 0x24447000, 0x2443B100, 0x2442F200, + 0x24423300, 0x24417400, 0x2440B500, + 0x243FF600, 0x243F3700, 0x243E7800, + 0x243DB900, 0x243CFA00, 0x243C3B00, + 0x243B7C00, 0x243ABD00, 0x2439FE00, + 0x24393F00, 0x24388000, 0x2437C100, + 0x24370200, 0x24364300, 0x24358400, + 0x2434C500, 0x24340600, 0x24334700, + 0x24328800, 0x2431C900, 0x24310A00, + 0x24304B00, 0x242F8C00, 0x242ECD00, + 0x242E0E00, 0x242D4F00, 0x242C9000, + 0x242BD100, 0x242B1200, 0x242A5300, + 0x24299400, 0x2428D500, 0x24281600, + 0x24275700, 0x24269800, 0x2425D900, + 0x24251A00, 0x24245B00, 0x24239C00, + 0x2422DD00, 0x24221E00, 0x24215F00, + 0x2420A000, 0x241FE100, 0x241F2200, + 0x241E6300, 0x241DA400, 0x241CE500, + 0x241C2600, 0x241B6700, 0x241AA800, + 0x2419E900, 0x24192A00, 0x24186B00, + 0x2417AC00, 0x2416ED00, 0x24162E00, + 0x24156F00, 0x2414B000, 0x2413F100, + 0x24133200, 0x24127300, 0x2411B400, + 0x2410F500, 0x24103600, 0x240F7700, + 0x240EB800, 0x240DF900, 0x240D3A00, + 0x240C7B00, 0x240BBC00, 0x240AFD00, + 0x240A3E00, 0x24097F00, 0x2408C000, + 0x24080100, 0x24074200, 0x24068300, + 0x2405C400, 0x24050500, 0x24044600, + 0x24038700, 0x2402C800, 0x24020900, + 0x24014A00, 0x24008B00, 0x23FFCC00, + 0x23FF0D00, 0x23FE4E00, 0x23FD8F00, + 0x23FCD000, 0x23FC1100, 0x23FB5200, + 0x23FA9300, 0x23F9D400, 0x23F91500, + 0x23F85600, 0x23F79700, 0x23F6D800, + 0x23F61900, 0x23F55A00, 0x23F49B00, + 0x23F3DC00, 0x23F31D00, 0x23F25E00, + 0x23F19F00, 0x23F0E000, 0x23F02100, + 0x23EF6200, 0x23EEA300, 0x23EDE400, + 0x23ED2500, 0x23EC6600, 0x23EBA700, + 0x23EAE800, 0x23EA2900, 0x23E96A00, + 0x23E8AB00, 0x23E7EC00, 0x23E72D00, + 0x23E66E00, 0x23E5AF00, 0x23E4F000, + 0x23E43100, 0x23E37200, 0x23E2B300, + 0x23E1F400, 0x23E13500, 0x23E07600, + 0x23DFB700, 0x23DEF800, 0x23DE3900, + 0x23DD7A00, 0x23DCBB00, 0x23DBFC00, + 0x23DB3D00, 0x23DA7E00, 0x23D9BF00, + 0x23D90000, 0x23D84100, 0x23D78200, + 0x23D6C300, 0x23D60400, 0x23D54500, + 0x23D48600, 0x23D3C700, 0x23D30800, + 0x23D24900, 0x23D18A00, 0x23D0CB00, + 0x23D00C00, 0x23CF4D00, 0x23CE8E00, + 0x23CDCF00, 0x23CD1000, 0x23CC5100, + 0x23CB9200, 0x23CAD300, 0x23CA1400, + 0x23C95500, 0x23C89600, 0x23C7D700, + 0x23C71800, 0x23C65900, 0x23C59A00, + 0x23C4DB00, 0x23C41C00, 0x23C35D00, + 0x23C29E00, 0x23C1DF00, 0x23C12000, + 0x23C06100, 0x23BFA200, 0x23BEE300, + 0x23BE2400, 0x23BD6500, 0x23BCA600, + 0x23BBE700, 0x23BB2800, 0x23BA6900, + 0x23B9AA00, 0x23B8EB00, 0x23B82C00, + 0x23B76D00, 0x23B6AE00, 0x23B5EF00, + 0x23B53000, 0x23B47100, 0x23B3B200, + 0x23B2F300, 0x23B23400, 0x23B17500, + 0x23B0B600, 0x23AFF700, 0x23AF3800, + 0x23AE7900, 0x23ADBA00, 0x23ACFB00, + 0x23AC3C00, 0x23AB7D00, 0x23AABE00, + 0x23A9FF00, 0x23A94000, 0x23A88100, + 0x23A7C200, 0x23A70300, 0x23A64400, + 0x23A58500, 0x23A4C600, 0x23A40700, + 0x23A34800, 0x23A28900, 0x23A1CA00, + 0x23A10B00, 0x23A04C00, 0x239F8D00, + 0x239ECE00, 0x239E0F00, 0x239D5000, + 0x239C9100, 0x239BD200, 0x239B1300, + 0x239A5400, 0x23999500, 0x2398D600, + 0x23981700, 0x23975800, 0x23969900, + 0x2395DA00, 0x23951B00, 0x23945C00, + 0x23939D00, 0x2392DE00, 0x23921F00, + 0x23916000, 0x2390A100, 0x238FE200, + 0x238F2300, 0x238E6400, 0x238DA500, + 0x238CE600, 0x238C2700, 0x238B6800, + 0x238AA900, 0x2389EA00, 0x23892B00, + 0x23886C00, 0x2387AD00, 0x2386EE00, + 0x23862F00, 0x23857000, 0x2384B100, + 0x2383F200, 0x23833300, 0x23827400, + 0x2381B500, 0x2380F600, 0x23803700, + 0x237F7800, 0x237EB900, 0x237DFA00, + 0x237D3B00, 0x237C7C00, 0x237BBD00, + 0x237AFE00, 0x237A3F00, 0x23798000, + 0x2378C100, 0x23780200, 0x23774300, + 0x23768400, 0x2375C500, 0x23750600, + 0x23744700, 0x23738800, 0x2372C900, + 0x23720A00, 0x23714B00, 0x23708C00, + 0x236FCD00, 0x236F0E00, 0x236E4F00, + 0x236D9000, 0x236CD100, 0x236C1200, + 0x236B5300, 0x236A9400, 0x2369D500, + 0x23691600, 0x23685700, 0x23679800, + 0x2366D900, 0x23661A00, 0x23655B00, + 0x23649C00, 0x2363DD00, 0x23631E00, + 0x23625F00, 0x2361A000, 0x2360E100, + 0x23602200, 0x235F6300, 0x235EA400, + 0x235DE500, 0x235D2600, 0x235C6700, + 0x235BA800, 0x235AE900, 0x235A2A00, + 0x23596B00, 0x2358AC00, 0x2357ED00, + 0x23572E00, 0x23566F00, 0x2355B000, + 0x2354F100, 0x23543200, 0x23537300, + 0x2352B400, 0x2351F500, 0x23513600, + 0x23507700, 0x234FB800, 0x234EF900, + 0x234E3A00, 0x234D7B00, 0x234CBC00, + 0x234BFD00, 0x234B3E00, 0x234A7F00, + 0x2349C000, 0x23490100, 0x23484200, + 0x23478300, 0x2346C400, 0x23460500, + 0x23454600, 0x23448700, 0x2343C800, + 0x23430900, 0x23424A00, 0x23418B00, + 0x2340CC00, 0x23400D00, 0x233F4E00, + 0x233E8F00, 0x233DD000, 0x233D1100, + 0x233C5200, 0x233B9300, 0x233AD400, + 0x233A1500, 0x23395600, 0x23389700, + 0x2337D800, 0x23371900, 0x23365A00, + 0x23359B00, 0x2334DC00, 0x23341D00, + 0x23335E00, 0x23329F00, 0x2331E000, + 0x23312100, 0x23306200, 0x232FA300, + 0x232EE400, 0x232E2500, 0x232D6600, + 0x232CA700, 0x232BE800, 0x232B2900, + 0x232A6A00, 0x2329AB00, 0x2328EC00, + 0x23282D00, 0x23276E00, 0x2326AF00, + 0x2325F000, 0x23253100, 0x23247200, + 0x2323B300, 0x2322F400, 0x23223500, + 0x23217600, 0x2320B700, 0x231FF800, + 0x231F3900, 0x231E7A00, 0x231DBB00, + 0x231CFC00, 0x231C3D00, 0x231B7E00, + 0x231ABF00, 0x231A0000, 0x23194100, + 0x23188200, 0x2317C300, 0x23170400, + 0x23164500, 0x23158600, 0x2314C700, + 0x23140800, 0x23134900, 0x23128A00, + 0x2311CB00, 0x23110C00, 0x23104D00, + 0x230F8E00, 0x230ECF00, 0x230E1000, + 0x230D5100, 0x230C9200, 0x230BD300, + 0x230B1400, 0x230A5500, 0x23099600, + 0x2308D700, 0x23081800, 0x23075900, + 0x23069A00, 0x2305DB00, 0x23051C00, + 0x23045D00, 0x23039E00, 0x2302DF00, + 0x23022000, 0x23016100, 0x2300A200, + 0x22FFE300, 0x22FF2400, 0x22FE6500, + 0x22FDA600, 0x22FCE700, 0x22FC2800, + 0x22FB6900, 0x22FAAA00, 0x22F9EB00, + 0x22F92C00, 0x22F86D00, 0x22F7AE00, + 0x22F6EF00, 0x22F63000, 0x22F57100, + 0x22F4B200, 0x22F3F300, 0x22F33400, + 0x22F27500, 0x22F1B600, 0x22F0F700, + 0x22F03800, 0x22EF7900, 0x22EEBA00, + 0x22EDFB00, 0x22ED3C00, 0x22EC7D00, + 0x22EBBE00, 0x22EAFF00, 0x22EA4000, + 0x22E98100, 0x22E8C200, 0x22E80300, + 0x22E74400, 0x22E68500, 0x22E5C600, + 0x22E50700, 0x22E44800, 0x22E38900, + 0x22E2CA00, 0x22E20B00, 0x22E14C00, + 0x22E08D00, 0x22DFCE00, 0x22DF0F00, + 0x22DE5000, 0x22DD9100, 0x22DCD200, + 0x22DC1300, 0x22DB5400, 0x22DA9500, + 0x22D9D600, 0x22D91700, 0x22D85800, + 0x22D79900, 0x22D6DA00, 0x22D61B00, + 0x22D55C00, 0x22D49D00, 0x22D3DE00, + 0x22D31F00, 0x22D26000, 0x22D1A100, + 0x22D0E200, 0x22D02300, 0x22CF6400, + 0x22CEA500, 0x22CDE600, 0x22CD2700, + 0x22CC6800, 0x22CBA900, 0x22CAEA00, + 0x22CA2B00, 0x22C96C00, 0x22C8AD00, + 0x22C7EE00, 0x22C72F00, 0x22C67000, + 0x22C5B100, 0x22C4F200, 0x22C43300, + 0x22C37400, 0x22C2B500, 0x22C1F600, + 0x22C13700, 0x22C07800, 0x22BFB900, + 0x22BEFA00, 0x22BE3B00, 0x22BD7C00, + 0x22BCBD00, 0x22BBFE00, 0x22BB3F00, + 0x22BA8000, 0x22B9C100, 0x22B90200, + 0x22B84300, 0x22B78400, 0x22B6C500, + 0x22B60600, 0x22B54700, 0x22B48800, + 0x22B3C900, 0x22B30A00, 0x22B24B00, + 0x22B18C00, 0x22B0CD00, 0x22B00E00, + 0x22AF4F00, 0x22AE9000, 0x22ADD100, + 0x22AD1200, 0x22AC5300, 0x22AB9400, + 0x22AAD500, 0x22AA1600, 0x22A95700, + 0x22A89800, 0x22A7D900, 0x22A71A00, + 0x22A65B00, 0x22A59C00, 0x22A4DD00, + 0x22A41E00, 0x22A35F00, 0x22A2A000, + 0x22A1E100, 0x22A12200, 0x22A06300, + 0x229FA400, 0x229EE500, 0x229E2600, + 0x229D6700, 0x229CA800, 0x229BE900, + 0x229B2A00, 0x229A6B00, 0x2299AC00, + 0x2298ED00, 0x22982E00, 0x22976F00, + 0x2296B000, 0x2295F100, 0x22953200, + 0x22947300, 0x2293B400, 0x2292F500, + 0x22923600, 0x22917700, 0x2290B800, + 0x228FF900, 0x228F3A00, 0x228E7B00, + 0x228DBC00, 0x228CFD00, 0x228C3E00, + 0x228B7F00, 0x228AC000, 0x228A0100, + 0x22894200, 0x22888300, 0x2287C400, + 0x22870500, 0x22864600, 0x22858700, + 0x2284C800, 0x22840900, 0x22834A00, + 0x22828B00, 0x2281CC00, 0x22810D00, + 0x22804E00, 0x227F8F00, 0x227ED000, + 0x227E1100, 0x227D5200, 0x227C9300, + 0x227BD400, 0x227B1500, 0x227A5600, + 0x22799700, 0x2278D800, 0x22781900, + 0x22775A00, 0x22769B00, 0x2275DC00, + 0x22751D00, 0x22745E00, 0x22739F00, + 0x2272E000, 0x22722100, 0x22716200, + 0x2270A300, 0x226FE400, 0x226F2500, + 0x226E6600, 0x226DA700, 0x226CE800, + 0x226C2900, 0x226B6A00, 0x226AAB00, + 0x2269EC00, 0x22692D00, 0x22686E00, + 0x2267AF00, 0x2266F000, 0x22663100, + 0x22657200, 0x2264B300, 0x2263F400, + 0x22633500, 0x22627600, 0x2261B700, + 0x2260F800, 0x22603900, 0x225F7A00, + 0x225EBB00, 0x225DFC00, 0x225D3D00, + 0x225C7E00, 0x225BBF00, 0x225B0000, + 0x225A4100, 0x22598200, 0x2258C300, + 0x22580400, 0x22574500, 0x22568600, + 0x2255C700, 0x22550800, 0x22544900, + 0x22538A00, 0x2252CB00, 0x22520C00, + 0x22514D00, 0x22508E00, 0x224FCF00, + 0x224F1000, 0x224E5100, 0x224D9200, + 0x224CD300, 0x224C1400, 0x224B5500, + 0x224A9600, 0x2249D700, 0x22491800, + 0x22485900, 0x22479A00, 0x2246DB00, + 0x22461C00, 0x22455D00, 0x22449E00, + 0x2243DF00, 0x22432000, 0x22426100, + 0x2241A200, 0x2240E300, 0x22402400, + 0x223F6500, 0x223EA600, 0x223DE700, + 0x223D2800, 0x223C6900, 0x223BAA00, + 0x223AEB00, 0x223A2C00, 0x22396D00, + 0x2238AE00, 0x2237EF00, 0x22373000, + 0x22367100, 0x2235B200, 0x2234F300, + 0x22343400, 0x22337500, 0x2232B600, + 0x2231F700, 0x22313800, 0x22307900, + 0x222FBA00, 0x222EFB00, 0x222E3C00, + 0x222D7D00, 0x222CBE00, 0x222BFF00, + 0x222B4000, 0x222A8100, 0x2229C200, + 0x22290300, 0x22284400, 0x22278500, + 0x2226C600, 0x22260700, 0x22254800, + 0x22248900, 0x2223CA00, 0x22230B00, + 0x22224C00, 0x22218D00, 0x2220CE00, + 0x22200F00, 0x221F5000, 0x221E9100, + 0x221DD200, 0x221D1300, 0x221C5400, + 0x221B9500, 0x221AD600, 0x221A1700, + 0x22195800, 0x22189900, 0x2217DA00, + 0x22171B00, 0x22165C00, 0x22159D00, + 0x2214DE00, 0x22141F00, 0x22136000, + 0x2212A100, 0x2211E200, 0x22112300, + 0x22106400, 0x220FA500, 0x220EE600, + 0x220E2700, 0x220D6800, 0x220CA900, + 0x220BEA00, 0x220B2B00, 0x220A6C00, + 0x2209AD00, 0x2208EE00, 0x22082F00, + 0x22077000, 0x2206B100, 0x2205F200, + 0x22053300, 0x22047400, 0x2203B500, + 0x2202F600, 0x22023700, 0x22017800, + 0x2200B900, 0x21FFFA00, 0x21FF3B00, + 0x21FE7C00, 0x21FDBD00, 0x21FCFE00, + 0x21FC3F00, 0x21FB8000, 0x21FAC100, + 0x21FA0200, 0x21F94300, 0x21F88400, + 0x21F7C500, 0x21F70600, 0x21F64700, + 0x21F58800, 0x21F4C900, 0x21F40A00, + 0x21F34B00, 0x21F28C00, 0x21F1CD00, + 0x21F10E00, 0x21F04F00, 0x21EF9000, + 0x21EED100, 0x21EE1200, 0x21ED5300, + 0x21EC9400, 0x21EBD500, 0x21EB1600, + 0x21EA5700, 0x21E99800, 0x21E8D900, + 0x21E81A00, 0x21E75B00, 0x21E69C00, + 0x21E5DD00, 0x21E51E00, 0x21E45F00, + 0x21E3A000, 0x21E2E100, 0x21E22200, + 0x21E16300, 0x21E0A400, 0x21DFE500, + 0x21DF2600, 0x21DE6700, 0x21DDA800, + 0x21DCE900, 0x21DC2A00, 0x21DB6B00, + 0x21DAAC00, 0x21D9ED00, 0x21D92E00, + 0x21D86F00, 0x21D7B000, 0x21D6F100, + 0x21D63200, 0x21D57300, 0x21D4B400, + 0x21D3F500, 0x21D33600, 0x21D27700, + 0x21D1B800, 0x21D0F900, 0x21D03A00, + 0x21CF7B00, 0x21CEBC00, 0x21CDFD00, + 0x21CD3E00, 0x21CC7F00, 0x21CBC000, + 0x21CB0100, 0x21CA4200, 0x21C98300, + 0x21C8C400, 0x21C80500, 0x21C74600, + 0x21C68700, 0x21C5C800, 0x21C50900, + 0x21C44A00, 0x21C38B00, 0x21C2CC00, + 0x21C20D00, 0x21C14E00, 0x21C08F00, + 0x21BFD000, 0x21BF1100, 0x21BE5200, + 0x21BD9300, 0x21BCD400, 0x21BC1500, + 0x21BB5600, 0x21BA9700, 0x21B9D800, + 0x21B91900, 0x21B85A00, 0x21B79B00, + 0x21B6DC00, 0x21B61D00, 0x21B55E00, + 0x21B49F00, 0x21B3E000, 0x21B32100, + 0x21B26200, 0x21B1A300, 0x21B0E400, + 0x21B02500, 0x21AF6600, 0x21AEA700, + 0x21ADE800, 0x21AD2900, 0x21AC6A00, + 0x21ABAB00, 0x21AAEC00, 0x21AA2D00, + 0x21A96E00, 0x21A8AF00, 0x21A7F000, + 0x21A73100, 0x21A67200, 0x21A5B300, + 0x21A4F400, 0x21A43500, 0x21A37600, + 0x21A2B700, 0x21A1F800, 0x21A13900, + 0x21A07A00, 0x219FBB00, 0x219EFC00, + 0x219E3D00, 0x219D7E00, 0x219CBF00, + 0x219C0000, 0x219B4C00, 0x219A9800, + 0x2199E400, 0x21993000, 0x21987C00, + 0x2197C800, 0x21971400, 0x21966000, + 0x2195AC00, 0x2194F800, 0x21944400, + 0x21939000, 0x2192DC00, 0x21922800, + 0x21917400, 0x2190C000, 0x21900C00, + 0x218F5800, 0x218EA400, 0x218DF000, + 0x218D3C00, 0x218C8800, 0x218BD400, + 0x218B2000, 0x218A6C00, 0x2189B800, + 0x21890400, 0x21885000, 0x21879C00, + 0x2186E800, 0x21863400, 0x21858000, + 0x2184CC00, 0x21841800, 0x21836400, + 0x2182B000, 0x2181FC00, 0x21814800, + 0x21809400, 0x217FE000, 0x217F2C00, + 0x217E7800, 0x217DC400, 0x217D1000, + 0x217C5C00, 0x217BA800, 0x217AF400, + 0x217A4000, 0x21798C00, 0x2178D800, + 0x21782400, 0x21777000, 0x2176BC00, + 0x21760800, 0x21755400, 0x2174A000, + 0x2173EC00, 0x21733800, 0x21728400, + 0x2171D000, 0x21711C00, 0x21706800, + 0x216FB400, 0x216F0000, 0x216E4C00, + 0x216D9800, 0x216CE400, 0x216C3000, + 0x216B7C00, 0x216AC800, 0x216A1400, + 0x21696000, 0x2168AC00, 0x2167F800, + 0x21674400, 0x21669000, 0x2165DC00, + 0x21652800, 0x21647400, 0x2163C000, + 0x21630C00, 0x21625800, 0x2161A400, + 0x2160F000, 0x21603C00, 0x215F8800, + 0x215ED400, 0x215E2000, 0x215D6C00, + 0x215CB800, 0x215C0400, 0x215B5000, + 0x215A9C00, 0x2159E800, 0x21593400, + 0x21588000, 0x2157CC00, 0x21571800, + 0x21566400, 0x2155B000, 0x2154FC00, + 0x21544800, 0x21539400, 0x2152E000, + 0x21522C00, 0x21517800, 0x2150C400, + 0x21501000, 0x214F5C00, 0x214EA800, + 0x214DF400, 0x214D4000, 0x214C8C00, + 0x214BD800, 0x214B2400, 0x214A7000, + 0x2149BC00, 0x21490800, 0x21485400, + 0x2147A000, 0x2146EC00, 0x21463800, + 0x21458400, 0x2144D000, 0x21441C00, + 0x21436800, 0x2142B400, 0x21420000, + 0x21414C00, 0x21409800, 0x213FE400, + 0x213F3000, 0x213E7C00, 0x213DC800, + 0x213D1400, 0x213C6000, 0x213BAC00, + 0x213AF800, 0x213A4400, 0x21399000, + 0x2138DC00, 0x21382800, 0x21377400, + 0x2136C000, 0x21360C00, 0x21355800, + 0x2134A400, 0x2133F000, 0x21333C00, + 0x21328800, 0x2131D400, 0x21312000, + 0x21306C00, 0x212FB800, 0x212F0400, + 0x212E5000, 0x212D9C00, 0x212CE800, + 0x212C3400, 0x212B8000, 0x212ACC00, + 0x212A1800, 0x21296400, 0x2128B000, + 0x2127FC00, 0x21274800, 0x21269400, + 0x2125E000, 0x21252C00, 0x21247800, + 0x2123C400, 0x21231000, 0x21225C00, + 0x2121A800, 0x2120F400, 0x21204000, + 0x211F8C00, 0x211ED800, 0x211E2400, + 0x211D7000, 0x211CBC00, 0x211C0800, + 0x211B5400, 0x211AA000, 0x2119EC00, + 0x21193800, 0x21188400, 0x2117D000, + 0x21171C00, 0x21166800, 0x2115B400, + 0x21150000, 0x21144C00, 0x21139800, + 0x2112E400, 0x21123000, 0x21117C00, + 0x2110C800, 0x21101400, 0x210F6000, + 0x210EAC00, 0x210DF800, 0x210D4400, + 0x210C9000, 0x210BDC00, 0x210B2800, + 0x210A7400, 0x2109C000, 0x21090C00, + 0x21085800, 0x2107A400, 0x2106F000, + 0x21063C00, 0x21058800, 0x2104D400, + 0x21042000, 0x21036C00, 0x2102B800, + 0x21020400, 0x21015000, 0x21009C00, + 0x20FFE800, 0x20FF3400, 0x20FE8000, + 0x20FDCC00, 0x20FD1800, 0x20FC6400, + 0x20FBB000, 0x20FAFC00, 0x20FA4800, + 0x20F99400, 0x20F8E000, 0x20F82C00, + 0x20F77800, 0x20F6C400, 0x20F61000, + 0x20F55C00, 0x20F4A800, 0x20F3F400, + 0x20F34000, 0x20F28C00, 0x20F1D800, + 0x20F12400, 0x20F07000, 0x20EFBC00, + 0x20EF0800, 0x20EE5400, 0x20EDA000, + 0x20ECEC00, 0x20EC3800, 0x20EB8400, + 0x20EAD000, 0x20EA1C00, 0x20E96800, + 0x20E8B400, 0x20E80000, 0x20E74C00, + 0x20E69800, 0x20E5E400, 0x20E53000, + 0x20E47C00, 0x20E3C800, 0x20E31400, + 0x20E26000, 0x20E1AC00, 0x20E0F800, + 0x20E04400, 0x20DF9000, 0x20DEDC00, + 0x20DE2800, 0x20DD7400, 0x20DCC000, + 0x20DC0C00, 0x20DB5800, 0x20DAA400, + 0x20D9F000, 0x20D93C00, 0x20D88800, + 0x20D7D400, 0x20D72000, 0x20D66C00, + 0x20D5B800, 0x20D50400, 0x20D45000, + 0x20D39C00, 0x20D2E800, 0x20D23400, + 0x20D18000, 0x20D0CC00, 0x20D01800, + 0x20CF6400, 0x20CEB000, 0x20CDFC00, + 0x20CD4800, 0x20CC9400, 0x20CBE000, + 0x20CB2C00, 0x20CA7800, 0x20C9C400, + 0x20C91000, 0x20C85C00, 0x20C7A800, + 0x20C6F400, 0x20C64000, 0x20C58C00, + 0x20C4D800, 0x20C42400, 0x20C37000, + 0x20C2BC00, 0x20C20800, 0x20C15400, + 0x20C0A000, 0x20BFEC00, 0x20BF3800, + 0x20BE8400, 0x20BDD000, 0x20BD1C00, + 0x20BC6800, 0x20BBB400, 0x20BB0000, + 0x20BA4C00, 0x20B99800, 0x20B8E400, + 0x20B83000, 0x20B77C00, 0x20B6C800, + 0x20B61400, 0x20B56000, 0x20B4AC00, + 0x20B3F800, 0x20B34400, 0x20B29000, + 0x20B1DC00, 0x20B12800, 0x20B07400, + 0x20AFC000, 0x20AF0C00, 0x20AE5800, + 0x20ADA400, 0x20ACF000, 0x20AC3C00, + 0x20AB8800, 0x20AAD400, 0x20AA2000, + 0x20A96C00, 0x20A8B800, 0x20A80400, + 0x20A75000, 0x20A69C00, 0x20A5E800, + 0x20A53400, 0x20A48000, 0x20A3CC00, + 0x20A31800, 0x20A26400, 0x20A1B000, + 0x20A0FC00, 0x20A04800, 0x209F9400, + 0x209EE000, 0x209E2C00, 0x209D7800, + 0x209CC400, 0x209C1000, 0x209B5C00, + 0x209AA800, 0x2099F400, 0x20994000, + 0x20988C00, 0x2097D800, 0x20972400, + 0x20967000, 0x2095BC00, 0x20950800, + 0x20945400, 0x2093A000, 0x2092EC00, + 0x20923800, 0x20918400, 0x2090D000, + 0x20901C00, 0x208F6800, 0x208EB400, + 0x208E0000, 0x208D4C00, 0x208C9800, + 0x208BE400, 0x208B3000, 0x208A7C00, + 0x2089C800, 0x20891400, 0x20886000, + 0x2087AC00, 0x2086F800, 0x20864400, + 0x20859000, 0x2084DC00, 0x20842800, + 0x20837400, 0x2082C000, 0x20820C00, + 0x20815800, 0x2080A400, 0x207FF000, + 0x207F3C00, 0x207E8800, 0x207DD400, + 0x207D2000, 0x207C6C00, 0x207BB800, + 0x207B0400, 0x207A5000, 0x20799C00, + 0x2078E800, 0x20783400, 0x20778000, + 0x2076CC00, 0x20761800, 0x20756400, + 0x2074B000, 0x2073FC00, 0x20734800, + 0x20729400, 0x2071E000, 0x20712C00, + 0x20707800, 0x206FC400, 0x206F1000, + 0x206E5C00, 0x206DA800, 0x206CF400, + 0x206C4000, 0x206B8C00, 0x206AD800, + 0x206A2400, 0x20697000, 0x2068BC00, + 0x20680800, 0x20675400, 0x2066A000, + 0x2065EC00, 0x20653800, 0x20648400, + 0x2063D000, 0x20631C00, 0x20626800, + 0x2061B400, 0x20610000, 0x20604C00, + 0x205F9800, 0x205EE400, 0x205E3000, + 0x205D7C00, 0x205CC800, 0x205C1400, + 0x205B6000, 0x205AAC00, 0x2059F800, + 0x20594400, 0x20589000, 0x2057DC00, + 0x20572800, 0x20567400, 0x2055C000, + 0x20550C00, 0x20545800, 0x2053A400, + 0x2052F000, 0x20523C00, 0x20518800, + 0x2050D400, 0x20502000, 0x204F6C00, + 0x204EB800, 0x204E0400, 0x204D5000, + 0x204C9C00, 0x204BE800, 0x204B3400, + 0x204A8000, 0x2049CC00, 0x20491800, + 0x20486400, 0x2047B000, 0x2046FC00, + 0x20464800, 0x20459400, 0x2044E000, + 0x20442C00, 0x20437800, 0x2042C400, + 0x20421000, 0x20415C00, 0x2040A800, + 0x203FF400, 0x203F4000, 0x203E8C00, + 0x203DD800, 0x203D2400, 0x203C7000, + 0x203BBC00, 0x203B0800, 0x203A5400, + 0x2039A000, 0x2038EC00, 0x20383800, + 0x20378400, 0x2036D000, 0x20361C00, + 0x20356800, 0x2034B400, 0x20340000, + 0x20334C00, 0x20329800, 0x2031E400, + 0x20313000, 0x20307C00, 0x202FC800, + 0x202F1400, 0x202E6000, 0x202DAC00, + 0x202CF800, 0x202C4400, 0x202B9000, + 0x202ADC00, 0x202A2800, 0x20297400, + 0x2028C000, 0x20280C00, 0x20275800, + 0x2026A400, 0x2025F000, 0x20253C00, + 0x20248800, 0x2023D400, 0x20232000, + 0x20226C00, 0x2021B800, 0x20210400, + 0x20205000, 0x201F9C00, 0x201EE800, + 0x201E3400, 0x201D8000, 0x201CCC00, + 0x201C1800, 0x201B6400, 0x201AB000, + 0x2019FC00, 0x20194800, 0x20189400, + 0x2017E000, 0x20172C00, 0x20167800, + 0x2015C400, 0x20151000, 0x20145C00, + 0x2013A800, 0x2012F400, 0x20124000, + 0x20118C00, 0x2010D800, 0x20102400, + 0x200F7000, 0x200EBC00, 0x200E0800, + 0x200D5400, 0x200CA000, 0x200BEC00, + 0x200B3800, 0x200A8400, 0x2009D000, + 0x20091C00, 0x20086800, 0x2007B400, + 0x20070000, 0x20064C00, 0x20059800, + 0x2004E400, 0x20043000, 0x20037C00, + 0x2002C800, 0x20021400, 0x20016000, + 0x2000AC00, 0x1FFFF800, 0x1FFF4400, + 0x1FFE9000, 0x1FFDDC00, 0x1FFD2800, + 0x1FFC7400, 0x1FFBC000, 0x1FFB0C00, + 0x1FFA5800, 0x1FF9A400, 0x1FF8F000, + 0x1FF83C00, 0x1FF78800, 0x1FF6D400, + 0x1FF62000, 0x1FF56C00, 0x1FF4B800, + 0x1FF40400, 0x1FF35000, 0x1FF29C00, + 0x1FF1E800, 0x1FF13400, 0x1FF08000, + 0x1FEFCC00, 0x1FEF1800, 0x1FEE6400, + 0x1FEDB000, 0x1FECFC00, 0x1FEC4800, + 0x1FEB9400, 0x1FEAE000, 0x1FEA2C00, + 0x1FE97800, 0x1FE8C400, 0x1FE81000, + 0x1FE75C00, 0x1FE6A800, 0x1FE5F400, + 0x1FE54000, 0x1FE48C00, 0x1FE3D800, + 0x1FE32400, 0x1FE27000, 0x1FE1BC00, + 0x1FE10800, 0x1FE05400, 0x1FDFA000, + 0x1FDEEC00, 0x1FDE3800, 0x1FDD8400, + 0x1FDCD000, 0x1FDC1C00, 0x1FDB6800, + 0x1FDAB400, 0x1FDA0000, 0x1FD94C00, + 0x1FD89800, 0x1FD7E400, 0x1FD73000, + 0x1FD67C00, 0x1FD5C800, 0x1FD51400, + 0x1FD46000, 0x1FD3AC00, 0x1FD2F800, + 0x1FD24400, 0x1FD19000, 0x1FD0DC00, + 0x1FD02800, 0x1FCF7400, 0x1FCEC000, + 0x1FCE0C00, 0x1FCD5800, 0x1FCCA400, + 0x1FCBF000, 0x1FCB3C00, 0x1FCA8800, + 0x1FC9D400, 0x1FC92000, 0x1FC86C00, + 0x1FC7B800, 0x1FC70400, 0x1FC65000, + 0x1FC59C00, 0x1FC4E800, 0x1FC43400, + 0x1FC38000, 0x1FC2CC00, 0x1FC21800, + 0x1FC16400, 0x1FC0B000, 0x1FBFFC00, + 0x1FBF4800, 0x1FBE9400, 0x1FBDE000, + 0x1FBD2C00, 0x1FBC7800, 0x1FBBC400, + 0x1FBB1000, 0x1FBA5C00, 0x1FB9A800, + 0x1FB8F400, 0x1FB84000, 0x1FB78C00, + 0x1FB6D800, 0x1FB62400, 0x1FB57000, + 0x1FB4BC00, 0x1FB40800, 0x1FB35400, + 0x1FB2A000, 0x1FB1EC00, 0x1FB13800, + 0x1FB08400, 0x1FAFD000, 0x1FAF1C00, + 0x1FAE6800, 0x1FADB400, 0x1FAD0000, + 0x1FAC4C00, 0x1FAB9800, 0x1FAAE400, + 0x1FAA3000, 0x1FA97C00, 0x1FA8C800, + 0x1FA81400, 0x1FA76000, 0x1FA6AC00, + 0x1FA5F800, 0x1FA54400, 0x1FA49000, + 0x1FA3DC00, 0x1FA32800, 0x1FA27400, + 0x1FA1C000, 0x1FA10C00, 0x1FA05800, + 0x1F9FA400, 0x1F9EF000, 0x1F9E3C00, + 0x1F9D8800, 0x1F9CD400, 0x1F9C2000, + 0x1F9B6C00, 0x1F9AB800, 0x1F9A0400, + 0x1F995000, 0x1F989C00, 0x1F97E800, + 0x1F973400, 0x1F968000, 0x1F95CC00, + 0x1F951800, 0x1F946400, 0x1F93B000, + 0x1F92FC00, 0x1F924800, 0x1F919400, + 0x1F90E000, 0x1F902C00, 0x1F8F7800, + 0x1F8EC400, 0x1F8E1000, 0x1F8D5C00, + 0x1F8CA800, 0x1F8BF400, 0x1F8B4000, + 0x1F8A8C00, 0x1F89D800, 0x1F892400, + 0x1F887000, 0x1F87BC00, 0x1F870800, + 0x1F865400, 0x1F85A000, 0x1F84EC00, + 0x1F843800, 0x1F838400, 0x1F82D000, + 0x1F821C00, 0x1F816800, 0x1F80B400, + 0x1F800000, 0x1F7F4C00, 0x1F7E9800, + 0x1F7DE400, 0x1F7D3000, 0x1F7C7C00, + 0x1F7BC800, 0x1F7B1400, 0x1F7A6000, + 0x1F79AC00, 0x1F78F800, 0x1F784400, + 0x1F779000, 0x1F76DC00, 0x1F762800, + 0x1F757400, 0x1F74C000, 0x1F740C00, + 0x1F735800, 0x1F72A400, 0x1F71F000, + 0x1F713C00, 0x1F708800, 0x1F6FD400, + 0x1F6F2000, 0x1F6E6C00, 0x1F6DB800, + 0x1F6D0400, 0x1F6C5000, 0x1F6B9C00, + 0x1F6AE800, 0x1F6A3400, 0x1F698000, + 0x1F68CC00, 0x1F681800, 0x1F676400, + 0x1F66B000, 0x1F65FC00, 0x1F654800, + 0x1F649400, 0x1F63E000, 0x1F632C00, + 0x1F627800, 0x1F61C400, 0x1F611000, + 0x1F605C00, 0x1F5FA800, 0x1F5EF400, + 0x1F5E4000, 0x1F5D8C00, 0x1F5CD800, + 0x1F5C2400, 0x1F5B7000, 0x1F5ABC00, + 0x1F5A0800, 0x1F595400, 0x1F58A000, + 0x1F57EC00, 0x1F573800, 0x1F568400, + 0x1F55D000, 0x1F551C00, 0x1F546800, + 0x1F53B400, 0x1F530000, 0x1F524C00, + 0x1F519800, 0x1F50E400, 0x1F503000, + 0x1F4F7C00, 0x1F4EC800, 0x1F4E1400, + 0x1F4D6000, 0x1F4CAC00, 0x1F4BF800, + 0x1F4B4400, 0x1F4A9000, 0x1F49DC00, + 0x1F492800, 0x1F487400, 0x1F47C000, + 0x1F470C00, 0x1F465800, 0x1F45A400, + 0x1F44F000, 0x1F443C00, 0x1F438800, + 0x1F42D400, 0x1F422000, 0x1F416C00, + 0x1F40B800, 0x1F400400, 0x1F3F5000, + 0x1F3E9C00, 0x1F3DE800, 0x1F3D3400, + 0x1F3C8000, 0x1F3BCC00, 0x1F3B1800, + 0x1F3A6400, 0x1F39B000, 0x1F38FC00, + 0x1F384800, 0x1F379400, 0x1F36E000, + 0x1F362C00, 0x1F357800, 0x1F34C400, + 0x1F341000, 0x1F335C00, 0x1F32A800, + 0x1F31F400, 0x1F314000, 0x1F308C00, + 0x1F2FD800, 0x1F2F2400, 0x1F2E7000, + 0x1F2DBC00, 0x1F2D0800, 0x1F2C5400, + 0x1F2BA000, 0x1F2AEC00, 0x1F2A3800, + 0x1F298400, 0x1F28D000, 0x1F281C00, + 0x1F276800, 0x1F26B400, 0x1F260000, + 0x1F254C00, 0x1F249800, 0x1F23E400, + 0x1F233000, 0x1F227C00, 0x1F21C800, + 0x1F211400, 0x1F206000, 0x1F1FAC00, + 0x1F1EF800, 0x1F1E4400, 0x1F1D9000, + 0x1F1CDC00, 0x1F1C2800, 0x1F1B7400, + 0x1F1AC000, 0x1F1A0C00, 0x1F195800, + 0x1F18A400, 0x1F17F000, 0x1F173C00, + 0x1F168800, 0x1F15D400, 0x1F152000, + 0x1F146C00, 0x1F13B800, 0x1F130400, + 0x1F125000, 0x1F119C00, 0x1F10E800, + 0x1F103400, 0x1F0F8000, 0x1F0ECC00, + 0x1F0E1800, 0x1F0D6400, 0x1F0CB000, + 0x1F0BFC00, 0x1F0B4800, 0x1F0A9400, + 0x1F09E000, 0x1F092C00, 0x1F087800, + 0x1F07C400, 0x1F071000, 0x1F065C00, + 0x1F05A800, 0x1F04F400, 0x1F044000, + 0x1F038C00, 0x1F02D800, 0x1F022400, + 0x1F017000, 0x1F00BC00, 0x1F000800, + 0x1EFF5400, 0x1EFEA000, 0x1EFDEC00, + 0x1EFD3800, 0x1EFC8400, 0x1EFBD000, + 0x1EFB1C00, 0x1EFA6800, 0x1EF9B400, + 0x1EF90000, 0x1EF84C00, 0x1EF79800, + 0x1EF6E400, 0x1EF63000, 0x1EF57C00, + 0x1EF4C800, 0x1EF41400, 0x1EF36000, + 0x1EF2AC00, 0x1EF1F800, 0x1EF14400, + 0x1EF09000, 0x1EEFDC00, 0x1EEF2800, + 0x1EEE7400, 0x1EEDC000, 0x1EED0C00, + 0x1EEC5800, 0x1EEBA400, 0x1EEAF000, + 0x1EEA3C00, 0x1EE98800, 0x1EE8D400, + 0x1EE82000, 0x1EE76C00, 0x1EE6B800, + 0x1EE60400, 0x1EE55000, 0x1EE49C00, + 0x1EE3E800, 0x1EE33400, 0x1EE28000, + 0x1EE1CC00, 0x1EE11800, 0x1EE06400, + 0x1EDFB000, 0x1EDEFC00, 0x1EDE4800, + 0x1EDD9400, 0x1EDCE000, 0x1EDC2C00, + 0x1EDB7800, 0x1EDAC400, 0x1EDA1000, + 0x1ED95C00, 0x1ED8A800, 0x1ED7F400, + 0x1ED74000, 0x1ED68C00, 0x1ED5D800, + 0x1ED52400, 0x1ED47000, 0x1ED3BC00, + 0x1ED30800, 0x1ED25400, 0x1ED1A000, + 0x1ED0EC00, 0x1ED03800, 0x1ECF8400, + 0x1ECED000, 0x1ECE1C00, 0x1ECD6800, + 0x1ECCB400, 0x1ECC0000, 0x1ECB4C00, + 0x1ECA9800, 0x1EC9E400, 0x1EC93000, + 0x1EC87C00, 0x1EC7C800, 0x1EC71400, + 0x1EC66000, 0x1EC5AC00, 0x1EC4F800, + 0x1EC44400, 0x1EC39000, 0x1EC2DC00, + 0x1EC22800, 0x1EC17400, 0x1EC0C000, + 0x1EC00C00, 0x1EBF5800, 0x1EBEA400, + 0x1EBDF000, 0x1EBD3C00, 0x1EBC8800, + 0x1EBBD400, 0x1EBB2000, 0x1EBA6C00, + 0x1EB9B800, 0x1EB90400, 0x1EB85000, + 0x1EB79C00, 0x1EB6E800, 0x1EB63400, + 0x1EB58000, 0x1EB4CC00, 0x1EB41800, + 0x1EB36400, 0x1EB2B000, 0x1EB1FC00, + 0x1EB14800, 0x1EB09400, 0x1EAFE000, + 0x1EAF2C00, 0x1EAE7800, 0x1EADC400, + 0x1EAD1000, 0x1EAC5C00, 0x1EABA800, + 0x1EAAF400, 0x1EAA4000, 0x1EA98C00, + 0x1EA8D800, 0x1EA82400, 0x1EA77000, + 0x1EA6BC00, 0x1EA60800, 0x1EA55400, + 0x1EA4A000, 0x1EA3EC00, 0x1EA33800, + 0x1EA28400, 0x1EA1D000, 0x1EA11C00, + 0x1EA06800, 0x1E9FB400, 0x1E9F0000, + 0x1E9E4C00, 0x1E9D9800, 0x1E9CE400, + 0x1E9C3000, 0x1E9B7C00, 0x1E9AC800, + 0x1E9A1400, 0x1E996000, 0x1E98AC00, + 0x1E97F800, 0x1E974400, 0x1E969000, + 0x1E95DC00, 0x1E952800, 0x1E947400, + 0x1E93C000, 0x1E930C00, 0x1E925800, + 0x1E91A400, 0x1E90F000, 0x1E903C00, + 0x1E8F8800, 0x1E8ED400, 0x1E8E2000, + 0x1E8D6C00, 0x1E8CB800, 0x1E8C0400, + 0x1E8B5000, 0x1E8A9C00, 0x1E89E800, + 0x1E893400, 0x1E888000, 0x1E87CC00, + 0x1E871800, 0x1E866400, 0x1E85B000, + 0x1E84FC00, 0x1E844800, 0x1E839400, + 0x1E82E000, 0x1E822C00, 0x1E817800, + 0x1E80C400, 0x1E801000, 0x1E7F5C00, + 0x1E7EA800, 0x1E7DF400, 0x1E7D4000, + 0x1E7C8C00, 0x1E7BD800, 0x1E7B2400, + 0x1E7A7000, 0x1E79BC00, 0x1E790800, + 0x1E785400, 0x1E77A000, 0x1E76EC00, + 0x1E763800, 0x1E758400, 0x1E74D000, + 0x1E741C00, 0x1E736800, 0x1E72B400, + 0x1E720000, 0x1E714C00, 0x1E709800, + 0x1E6FE400, 0x1E6F3000, 0x1E6E7C00, + 0x1E6DC800, 0x1E6D1400, 0x1E6C6000, + 0x1E6BAC00, 0x1E6AF800, 0x1E6A4400, + 0x1E699000, 0x1E68DC00, 0x1E682800, + 0x1E677400, 0x1E66C000, 0x1E660C00, + 0x1E655800, 0x1E64A400, 0x1E63F000, + 0x1E633C00, 0x1E628800, 0x1E61D400, + 0x1E612000, 0x1E606C00, 0x1E5FB800, + 0x1E5F0400, 0x1E5E5000, 0x1E5D9C00, + 0x1E5CE800, 0x1E5C3400, 0x1E5B8000, + 0x1E5ACC00, 0x1E5A1800, 0x1E596400, + 0x1E58B000, 0x1E57FC00, 0x1E574800, + 0x1E569400, 0x1E55E000, 0x1E552C00, + 0x1E547800, 0x1E53C400, 0x1E531000, + 0x1E525C00, 0x1E51A800, 0x1E50F400, + 0x1E504000, 0x1E4F8C00, 0x1E4ED800, + 0x1E4E2400, 0x1E4D7000, 0x1E4CBC00, + 0x1E4C0800, 0x1E4B5400, 0x1E4AA000, + 0x1E49EC00, 0x1E493800, 0x1E488400, + 0x1E47D000, 0x1E471C00, 0x1E466800, + 0x1E45B400, 0x1E450000, 0x1E444C00, + 0x1E439800, 0x1E42E400, 0x1E423000, + 0x1E417C00, 0x1E40C800, 0x1E401400, + 0x1E3F6000, 0x1E3EAC00, 0x1E3DF800, + 0x1E3D4400, 0x1E3C9000, 0x1E3BDC00, + 0x1E3B2800, 0x1E3A7400, 0x1E39C000, + 0x1E390C00, 0x1E385800, 0x1E37A400, + 0x1E36F000, 0x1E363C00, 0x1E358800, + 0x1E34D400, 0x1E342000, 0x1E336C00, + 0x1E32B800, 0x1E320400, 0x1E315000, + 0x1E309C00, 0x1E2FE800, 0x1E2F3400, + 0x1E2E8000, 0x1E2DCC00, 0x1E2D1800, + 0x1E2C6400, 0x1E2BB000, 0x1E2AFC00, + 0x1E2A4800, 0x1E299400, 0x1E28E000, + 0x1E282C00, 0x1E277800, 0x1E26C400, + 0x1E261000, 0x1E255C00, 0x1E24A800, + 0x1E23F400, 0x1E234000, 0x1E228C00, + 0x1E21D800, 0x1E212400, 0x1E207000, + 0x1E1FBC00, 0x1E1F0800, 0x1E1E5400, + 0x1E1DA000, 0x1E1CEC00, 0x1E1C3800, + 0x1E1B8400, 0x1E1AD000, 0x1E1A1C00, + 0x1E196800, 0x1E18B400, 0x1E180000, + 0x1E174C00, 0x1E169800, 0x1E15E400, + 0x1E153000, 0x1E147C00, 0x1E13C800, + 0x1E131400, 0x1E126000, 0x1E11AC00, + 0x1E10F800, 0x1E104400, 0x1E0F9000, + 0x1E0EDC00, 0x1E0E2800, 0x1E0D7400, + 0x1E0CC000, 0x1E0C0C00, 0x1E0B5800, + 0x1E0AA400, 0x1E09F000, 0x1E093C00, + 0x1E088800, 0x1E07D400, 0x1E072000, + 0x1E066C00, 0x1E05B800, 0x1E050400, + 0x1E045000, 0x1E039C00, 0x1E02E800, + 0x1E023400, 0x1E018000, 0x1E00CC00, + 0x1E001800, 0x1DFF6400, 0x1DFEB000, + 0x1DFDFC00, 0x1DFD4800, 0x1DFC9400, + 0x1DFBE000, 0x1DFB2C00, 0x1DFA7800, + 0x1DF9C400, 0x1DF91000, 0x1DF85C00, + 0x1DF7A800, 0x1DF6F400, 0x1DF64000, + 0x1DF58C00, 0x1DF4D800, 0x1DF42400, + 0x1DF37000, 0x1DF2BC00, 0x1DF20800, + 0x1DF15400, 0x1DF0A000, 0x1DEFEC00, + 0x1DEF3800, 0x1DEE8400, 0x1DEDD000, + 0x1DED1C00, 0x1DEC6800, 0x1DEBB400, + 0x1DEB0000, 0x1DEA4C00, 0x1DE99800, + 0x1DE8E400, 0x1DE83000, 0x1DE77C00, + 0x1DE6C800, 0x1DE61400, 0x1DE56000, + 0x1DE4AC00, 0x1DE3F800, 0x1DE34400, + 0x1DE29000, 0x1DE1DC00, 0x1DE12800, + 0x1DE07400, 0x1DDFC000, 0x1DDF0C00, + 0x1DDE5800, 0x1DDDA400, 0x1DDCF000, + 0x1DDC3C00, 0x1DDB8800, 0x1DDAD400, + 0x1DDA2000, 0x1DD96C00, 0x1DD8B800, + 0x1DD80400, 0x1DD75000, 0x1DD69C00, + 0x1DD5E800, 0x1DD53400, 0x1DD48000, + 0x1DD3CC00, 0x1DD31800, 0x1DD26400, + 0x1DD1B000, 0x1DD0FC00, 0x1DD04800, + 0x1DCF9400, 0x1DCEE000, 0x1DCE2C00, + 0x1DCD7800, 0x1DCCC400, 0x1DCC1000, + 0x1DCB5C00, 0x1DCAA800, 0x1DC9F400, + 0x1DC94000, 0x1DC88C00, 0x1DC7D800, + 0x1DC72400, 0x1DC67000, 0x1DC5BC00, + 0x1DC50800, 0x1DC45400, 0x1DC3A000, + 0x1DC2EC00, 0x1DC23800, 0x1DC18400, + 0x1DC0D000, 0x1DC01C00, 0x1DBF6800, + 0x1DBEB400, 0x1DBE0000, 0x1DBD4C00, + 0x1DBC9800, 0x1DBBE400, 0x1DBB3000, + 0x1DBA7C00, 0x1DB9C800, 0x1DB91400, + 0x1DB86000, 0x1DB7AC00, 0x1DB6F800, + 0x1DB64400, 0x1DB59000, 0x1DB4DC00, + 0x1DB42800, 0x1DB37400, 0x1DB2C000, + 0x1DB20C00, 0x1DB15800, 0x1DB0A400, + 0x1DAFF000, 0x1DAF3C00, 0x1DAE8800, + 0x1DADD400, 0x1DAD2000, 0x1DAC6C00, + 0x1DABB800, 0x1DAB0400, 0x1DAA5000, + 0x1DA99C00, 0x1DA8E800, 0x1DA83400, + 0x1DA78000, 0x1DA6CC00, 0x1DA61800, + 0x1DA56400, 0x1DA4B000, 0x1DA3FC00, + 0x1DA34800, 0x1DA29400, 0x1DA1E000, + 0x1DA12C00, 0x1DA07800, 0x1D9FC400, + 0x1D9F1000, 0x1D9E5C00, 0x1D9DA800, + 0x1D9CF400, 0x1D9C4000, 0x1D9B8C00, + 0x1D9AD800, 0x1D9A2400, 0x1D997000, + 0x1D98BC00, 0x1D980800, 0x1D975400, + 0x1D96A000, 0x1D95EC00, 0x1D953800, + 0x1D948400, 0x1D93D000, 0x1D931C00, + 0x1D926800, 0x1D91B400, 0x1D910000, + 0x1D904C00, 0x1D8F9800, 0x1D8EE400, + 0x1D8E3000, 0x1D8D7C00, 0x1D8CC800, + 0x1D8C1400, 0x1D8B6000, 0x1D8AAC00, + 0x1D89F800, 0x1D894400, 0x1D889000, + 0x1D87DC00, 0x1D872800, 0x1D867400, + 0x1D85C000, 0x1D850C00, 0x1D845800, + 0x1D83A400, 0x1D82F000, 0x1D823C00, + 0x1D818800, 0x1D80D400, 0x1D802000, + 0x1D7F6C00, 0x1D7EB800, 0x1D7E0400, + 0x1D7D5000, 0x1D7C9C00, 0x1D7BE800, + 0x1D7B3400, 0x1D7A8000, 0x1D79CC00, + 0x1D791800, 0x1D786400, 0x1D77B000, + 0x1D76FC00, 0x1D764800, 0x1D759400, + 0x1D74E000, 0x1D742C00, 0x1D737800, + 0x1D72C400, 0x1D721000, 0x1D715C00, + 0x1D70A800, 0x1D6FF400, 0x1D6F4000, + 0x1D6E8C00, 0x1D6DD800, 0x1D6D2400, + 0x1D6C7000, 0x1D6BBC00, 0x1D6B0800, + 0x1D6A5400, 0x1D69A000, 0x1D68EC00, + 0x1D683800, 0x1D678400, 0x1D66D000, + 0x1D661C00, 0x1D656800, 0x1D64B400, + 0x1D640000, 0x1D634C00, 0x1D629800, + 0x1D61E400, 0x1D613000, 0x1D607C00, + 0x1D5FC800, 0x1D5F1400, 0x1D5E6000, + 0x1D5DAC00, 0x1D5CF800, 0x1D5C4400, + 0x1D5B9000, 0x1D5ADC00, 0x1D5A2800, + 0x1D597400, 0x1D58C000, 0x1D580C00, + 0x1D575800, 0x1D56A400, 0x1D55F000, + 0x1D553C00, 0x1D548800, 0x1D53D400, + 0x1D532000, 0x1D526C00, 0x1D51B800, + 0x1D510400, 0x1D505000, 0x1D4F9C00, + 0x1D4EE800, 0x1D4E3400, 0x1D4D8000, + 0x1D4CCC00, 0x1D4C1800, 0x1D4B6400, + 0x1D4AB000, 0x1D49FC00, 0x1D494800, + 0x1D489400, 0x1D47E000, 0x1D472C00, + 0x1D467800, 0x1D45C400, 0x1D451000, + 0x1D445C00, 0x1D43A800, 0x1D42F400, + 0x1D424000, 0x1D418C00, 0x1D40D800, + 0x1D402400, 0x1D3F7000, 0x1D3EBC00, + 0x1D3E0800, 0x1D3D5400, 0x1D3CA000, + 0x1D3BEC00, 0x1D3B3800, 0x1D3A8400, + 0x1D39D000, 0x1D391C00, 0x1D386800, + 0x1D37B400, 0x1D370000, 0x1D364C00, + 0x1D359800, 0x1D34E400, 0x1D343000, + 0x1D337C00, 0x1D32C800, 0x1D321400, + 0x1D316000, 0x1D30AC00, 0x1D2FF800, + 0x1D2F4400, 0x1D2E9000, 0x1D2DDC00, + 0x1D2D2800, 0x1D2C7400, 0x1D2BC000, + 0x1D2B0C00, 0x1D2A5800, 0x1D29A400, + 0x1D28F000, 0x1D283C00, 0x1D278800, + 0x1D26D400, 0x1D262000, 0x1D256C00, + 0x1D24B800, 0x1D240400, 0x1D235000, + 0x1D229C00, 0x1D21E800, 0x1D213400, + 0x1D208000, 0x1D1FCC00, 0x1D1F1800, + 0x1D1E6400, 0x1D1DB000, 0x1D1CFC00, + 0x1D1C4800, 0x1D1B9400, 0x1D1AE000, + 0x1D1A2C00, 0x1D197800, 0x1D18C400, + 0x1D181000, 0x1D175C00, 0x1D16A800, + 0x1D15F400, 0x1D154000, 0x1D148C00, + 0x1D13D800, 0x1D132400, 0x1D127000, + 0x1D11BC00, 0x1D110800, 0x1D105400, + 0x1D0FA000, 0x1D0EEC00, 0x1D0E3800, + 0x1D0D8400, 0x1D0CD000, 0x1D0C1C00, + 0x1D0B6800, 0x1D0AB400, 0x1D0A0000, + 0x1D094C00, 0x1D089800, 0x1D07E400, + 0x1D073000, 0x1D067C00, 0x1D05C800, + 0x1D051400, 0x1D046000, 0x1D03AC00, + 0x1D02F800, 0x1D024400, 0x1D019000, + 0x1D00DC00, 0x1D002800, 0x1CFF7400, + 0x1CFEC000, 0x1CFE0C00, 0x1CFD5800, + 0x1CFCA400, 0x1CFBF000, 0x1CFB3C00, + 0x1CFA8800, 0x1CF9D400, 0x1CF92000, + 0x1CF86C00, 0x1CF7B800, 0x1CF70400, + 0x1CF65000, 0x1CF59C00, 0x1CF4E800, + 0x1CF43400, 0x1CF38000, 0x1CF2CC00, + 0x1CF21800, 0x1CF16400, 0x1CF0B000, + 0x1CEFFC00, 0x1CEF4800, 0x1CEE9400, + 0x1CEDE000, 0x1CED2C00, 0x1CEC7800, + 0x1CEBC400, 0x1CEB1000, 0x1CEA5C00, + 0x1CE9A800, 0x1CE8F400, 0x1CE84000, + 0x1CE78C00, 0x1CE6D800, 0x1CE62400, + 0x1CE57000, 0x1CE4BC00, 0x1CE40800, + 0x1CE35400, 0x1CE2A000, 0x1CE1EC00, + 0x1CE13800, 0x1CE08400, 0x1CDFD000, + 0x1CDF1C00, 0x1CDE6800, 0x1CDDB400, + 0x1CDD0000, 0x1CDC4C00, 0x1CDB9800, + 0x1CDAE400, 0x1CDA3000, 0x1CD97C00, + 0x1CD8C800, 0x1CD81400, 0x1CD76000, + 0x1CD6AC00, 0x1CD5F800, 0x1CD54400, + 0x1CD49000, 0x1CD3DC00, 0x1CD32800, + 0x1CD27400, 0x1CD1C000, 0x1CD10C00, + 0x1CD05800, 0x1CCFA400, 0x1CCEF000, + 0x1CCE3C00, 0x1CCD8800, 0x1CCCD400, + 0x1CCC2000, 0x1CCB6C00, 0x1CCAB800, + 0x1CCA0400, 0x1CC95000, 0x1CC89C00, + 0x1CC7E800, 0x1CC73400, 0x1CC68000, + 0x1CC5CC00, 0x1CC51800, 0x1CC46400, + 0x1CC3B000, 0x1CC2FC00, 0x1CC24800, + 0x1CC19400, 0x1CC0E000, 0x1CC02C00, + 0x1CBF7800, 0x1CBEC400, 0x1CBE1000, + 0x1CBD5C00, 0x1CBCA800, 0x1CBBF400, + 0x1CBB4000, 0x1CBA8C00, 0x1CB9D800, + 0x1CB92400, 0x1CB87000, 0x1CB7BC00, + 0x1CB70800, 0x1CB65400, 0x1CB5A000, + 0x1CB4EC00, 0x1CB43800, 0x1CB38400, + 0x1CB2D000, 0x1CB21C00, 0x1CB16800, + 0x1CB0B400, 0x1CB00000, 0x1CAF4C00, + 0x1CAE9800, 0x1CADE400, 0x1CAD3000, + 0x1CAC7C00, 0x1CABC800, 0x1CAB1400, + 0x1CAA6000, 0x1CA9AC00, 0x1CA8F800, + 0x1CA84400, 0x1CA79000, 0x1CA6DC00, + 0x1CA62800, 0x1CA57400, 0x1CA4C000, + 0x1CA40C00, 0x1CA35800, 0x1CA2A400, + 0x1CA1F000, 0x1CA13C00, 0x1CA08800, + 0x1C9FD400, 0x1C9F2000, 0x1C9E6C00, + 0x1C9DB800, 0x1C9D0400, 0x1C9C5000, + 0x1C9B9C00, 0x1C9AE800, 0x1C9A3400, + 0x1C998000, 0x1C98CC00, 0x1C981800, + 0x1C976400, 0x1C96B000, 0x1C95FC00, + 0x1C954800, 0x1C949400, 0x1C93E000, + 0x1C932C00, 0x1C927800, 0x1C91C400, + 0x1C911000, 0x1C905C00, 0x1C8FA800, + 0x1C8EF400, 0x1C8E4000, 0x1C8D8C00, + 0x1C8CD800, 0x1C8C2400, 0x1C8B7000, + 0x1C8ABC00, 0x1C8A0800, 0x1C895400, + 0x1C88A000, 0x1C87EC00, 0x1C873800, + 0x1C868400, 0x1C85D000, 0x1C851C00, + 0x1C846800, 0x1C83B400, 0x1C830000, + 0x1C824C00, 0x1C819800, 0x1C80E400, + 0x1C803000, 0x1C7F7C00, 0x1C7EC800, + 0x1C7E1400, 0x1C7D6000, 0x1C7CAC00, + 0x1C7BF800, 0x1C7B4400, 0x1C7A9000, + 0x1C79DC00, 0x1C792800, 0x1C787400, + 0x1C77C000, 0x1C770C00, 0x1C765800, + 0x1C75A400, 0x1C74F000, 0x1C743C00, + 0x1C738800, 0x1C72D400, 0x1C722000, + 0x1C716C00, 0x1C70B800, 0x1C700400, + 0x1C6F5000, 0x1C6E9C00, 0x1C6DE800, + 0x1C6D3400, 0x1C6C8000, 0x1C6BCC00, + 0x1C6B1800, 0x1C6A6400, 0x1C69B000, + 0x1C68FC00, 0x1C684800, 0x1C679400, + 0x1C66E000, 0x1C662C00, 0x1C657800, + 0x1C64C400, 0x1C641000, 0x1C635C00, + 0x1C62A800, 0x1C61F400, 0x1C614000, + 0x1C608C00, 0x1C5FD800, 0x1C5F2400, + 0x1C5E7000, 0x1C5DBC00, 0x1C5D0800, + 0x1C5C5400, 0x1C5BA000, 0x1C5AEC00, + 0x1C5A3800, 0x1C598400, 0x1C58D000, + 0x1C581C00, 0x1C576800, 0x1C56B400, + 0x1C560000, 0x1C554C00, 0x1C549800, + 0x1C53E400, 0x1C533000, 0x1C527C00, + 0x1C51C800, 0x1C511400, 0x1C506000, + 0x1C4FAC00, 0x1C4EF800, 0x1C4E4400, + 0x1C4D9000, 0x1C4CDC00, 0x1C4C2800, + 0x1C4B7400, 0x1C4AC000, 0x1C4A0C00, + 0x1C495800, 0x1C48A400, 0x1C47F000, + 0x1C473C00, 0x1C468800, 0x1C45D400, + 0x1C452000, 0x1C446C00, 0x1C43B800, + 0x1C430400, 0x1C425000, 0x1C419C00, + 0x1C40E800, 0x1C403400, 0x1C3F8000, + 0x1C3ECC00, 0x1C3E1800, 0x1C3D6400, + 0x1C3CB000, 0x1C3BFC00, 0x1C3B4800, + 0x1C3A9400, 0x1C39E000, 0x1C392C00, + 0x1C387800, 0x1C37C400, 0x1C371000, + 0x1C365C00, 0x1C35A800, 0x1C34F400, + 0x1C344000, 0x1C338C00, 0x1C32D800, + 0x1C322400, 0x1C317000, 0x1C30BC00, + 0x1C300800, 0x1C2F5400, 0x1C2EA000, + 0x1C2DEC00, 0x1C2D3800, 0x1C2C8400, + 0x1C2BD000, 0x1C2B1C00, 0x1C2A6800, + 0x1C29B400, 0x1C290000, 0x1C284C00, + 0x1C279800, 0x1C26E400, 0x1C263000, + 0x1C257C00, 0x1C24C800, 0x1C241400, + 0x1C236000, 0x1C22AC00, 0x1C21F800, + 0x1C214400, 0x1C209000, 0x1C1FDC00, + 0x1C1F2800, 0x1C1E7400, 0x1C1DC000, + 0x1C1D0C00, 0x1C1C5800, 0x1C1BA400, + 0x1C1AF000, 0x1C1A3C00, 0x1C198800, + 0x1C18D400, 0x1C182000, 0x1C176C00, + 0x1C16B800, 0x1C160400, 0x1C155000, + 0x1C149C00, 0x1C13E800, 0x1C133400, + 0x1C128000, 0x1C11CC00, 0x1C111800, + 0x1C106400, 0x1C0FB000, 0x1C0EFC00, + 0x1C0E4800, 0x1C0D9400, 0x1C0CE000, + 0x1C0C2C00, 0x1C0B7800, 0x1C0AC400, + 0x1C0A1000, 0x1C095C00, 0x1C08A800, + 0x1C07F400, 0x1C074000, 0x1C068C00, + 0x1C05D800, 0x1C052400, 0x1C047000, + 0x1C03BC00, 0x1C030800, 0x1C025400, + 0x1C01A000, 0x1C00EC00, 0x1C003800, + 0x1BFF8400, 0x1BFED000, 0x1BFE1C00, + 0x1BFD6800, 0x1BFCB400, 0x1BFC0000, + 0x1BFB5600, 0x1BFAAC00, 0x1BFA0200, + 0x1BF95800, 0x1BF8AE00, 0x1BF80400, + 0x1BF75A00, 0x1BF6B000, 0x1BF60600, + 0x1BF55C00, 0x1BF4B200, 0x1BF40800, + 0x1BF35E00, 0x1BF2B400, 0x1BF20A00, + 0x1BF16000, 0x1BF0B600, 0x1BF00C00, + 0x1BEF6200, 0x1BEEB800, 0x1BEE0E00, + 0x1BED6400, 0x1BECBA00, 0x1BEC1000, + 0x1BEB6600, 0x1BEABC00, 0x1BEA1200, + 0x1BE96800, 0x1BE8BE00, 0x1BE81400, + 0x1BE76A00, 0x1BE6C000, 0x1BE61600, + 0x1BE56C00, 0x1BE4C200, 0x1BE41800, + 0x1BE36E00, 0x1BE2C400, 0x1BE21A00, + 0x1BE17000, 0x1BE0C600, 0x1BE01C00, + 0x1BDF7200, 0x1BDEC800, 0x1BDE1E00, + 0x1BDD7400, 0x1BDCCA00, 0x1BDC2000, + 0x1BDB7600, 0x1BDACC00, 0x1BDA2200, + 0x1BD97800, 0x1BD8CE00, 0x1BD82400, + 0x1BD77A00, 0x1BD6D000, 0x1BD62600, + 0x1BD57C00, 0x1BD4D200, 0x1BD42800, + 0x1BD37E00, 0x1BD2D400, 0x1BD22A00, + 0x1BD18000, 0x1BD0D600, 0x1BD02C00, + 0x1BCF8200, 0x1BCED800, 0x1BCE2E00, + 0x1BCD8400, 0x1BCCDA00, 0x1BCC3000, + 0x1BCB8600, 0x1BCADC00, 0x1BCA3200, + 0x1BC98800, 0x1BC8DE00, 0x1BC83400, + 0x1BC78A00, 0x1BC6E000, 0x1BC63600, + 0x1BC58C00, 0x1BC4E200, 0x1BC43800, + 0x1BC38E00, 0x1BC2E400, 0x1BC23A00, + 0x1BC19000, 0x1BC0E600, 0x1BC03C00, + 0x1BBF9200, 0x1BBEE800, 0x1BBE3E00, + 0x1BBD9400, 0x1BBCEA00, 0x1BBC4000, + 0x1BBB9600, 0x1BBAEC00, 0x1BBA4200, + 0x1BB99800, 0x1BB8EE00, 0x1BB84400, + 0x1BB79A00, 0x1BB6F000, 0x1BB64600, + 0x1BB59C00, 0x1BB4F200, 0x1BB44800, + 0x1BB39E00, 0x1BB2F400, 0x1BB24A00, + 0x1BB1A000, 0x1BB0F600, 0x1BB04C00, + 0x1BAFA200, 0x1BAEF800, 0x1BAE4E00, + 0x1BADA400, 0x1BACFA00, 0x1BAC5000, + 0x1BABA600, 0x1BAAFC00, 0x1BAA5200, + 0x1BA9A800, 0x1BA8FE00, 0x1BA85400, + 0x1BA7AA00, 0x1BA70000, 0x1BA65600, + 0x1BA5AC00, 0x1BA50200, 0x1BA45800, + 0x1BA3AE00, 0x1BA30400, 0x1BA25A00, + 0x1BA1B000, 0x1BA10600, 0x1BA05C00, + 0x1B9FB200, 0x1B9F0800, 0x1B9E5E00, + 0x1B9DB400, 0x1B9D0A00, 0x1B9C6000, + 0x1B9BB600, 0x1B9B0C00, 0x1B9A6200, + 0x1B99B800, 0x1B990E00, 0x1B986400, + 0x1B97BA00, 0x1B971000, 0x1B966600, + 0x1B95BC00, 0x1B951200, 0x1B946800, + 0x1B93BE00, 0x1B931400, 0x1B926A00, + 0x1B91C000, 0x1B911600, 0x1B906C00, + 0x1B8FC200, 0x1B8F1800, 0x1B8E6E00, + 0x1B8DC400, 0x1B8D1A00, 0x1B8C7000, + 0x1B8BC600, 0x1B8B1C00, 0x1B8A7200, + 0x1B89C800, 0x1B891E00, 0x1B887400, + 0x1B87CA00, 0x1B872000, 0x1B867600, + 0x1B85CC00, 0x1B852200, 0x1B847800, + 0x1B83CE00, 0x1B832400, 0x1B827A00, + 0x1B81D000, 0x1B812600, 0x1B807C00, + 0x1B7FD200, 0x1B7F2800, 0x1B7E7E00, + 0x1B7DD400, 0x1B7D2A00, 0x1B7C8000, + 0x1B7BD600, 0x1B7B2C00, 0x1B7A8200, + 0x1B79D800, 0x1B792E00, 0x1B788400, + 0x1B77DA00, 0x1B773000, 0x1B768600, + 0x1B75DC00, 0x1B753200, 0x1B748800, + 0x1B73DE00, 0x1B733400, 0x1B728A00, + 0x1B71E000, 0x1B713600, 0x1B708C00, + 0x1B6FE200, 0x1B6F3800, 0x1B6E8E00, + 0x1B6DE400, 0x1B6D3A00, 0x1B6C9000, + 0x1B6BE600, 0x1B6B3C00, 0x1B6A9200, + 0x1B69E800, 0x1B693E00, 0x1B689400, + 0x1B67EA00, 0x1B674000, 0x1B669600, + 0x1B65EC00, 0x1B654200, 0x1B649800, + 0x1B63EE00, 0x1B634400, 0x1B629A00, + 0x1B61F000, 0x1B614600, 0x1B609C00, + 0x1B5FF200, 0x1B5F4800, 0x1B5E9E00, + 0x1B5DF400, 0x1B5D4A00, 0x1B5CA000, + 0x1B5BF600, 0x1B5B4C00, 0x1B5AA200, + 0x1B59F800, 0x1B594E00, 0x1B58A400, + 0x1B57FA00, 0x1B575000, 0x1B56A600, + 0x1B55FC00, 0x1B555200, 0x1B54A800, + 0x1B53FE00, 0x1B535400, 0x1B52AA00, + 0x1B520000, 0x1B515600, 0x1B50AC00, + 0x1B500200, 0x1B4F5800, 0x1B4EAE00, + 0x1B4E0400, 0x1B4D5A00, 0x1B4CB000, + 0x1B4C0600, 0x1B4B5C00, 0x1B4AB200, + 0x1B4A0800, 0x1B495E00, 0x1B48B400, + 0x1B480A00, 0x1B476000, 0x1B46B600, + 0x1B460C00, 0x1B456200, 0x1B44B800, + 0x1B440E00, 0x1B436400, 0x1B42BA00, + 0x1B421000, 0x1B416600, 0x1B40BC00, + 0x1B401200, 0x1B3F6800, 0x1B3EBE00, + 0x1B3E1400, 0x1B3D6A00, 0x1B3CC000, + 0x1B3C1600, 0x1B3B6C00, 0x1B3AC200, + 0x1B3A1800, 0x1B396E00, 0x1B38C400, + 0x1B381A00, 0x1B377000, 0x1B36C600, + 0x1B361C00, 0x1B357200, 0x1B34C800, + 0x1B341E00, 0x1B337400, 0x1B32CA00, + 0x1B322000, 0x1B317600, 0x1B30CC00, + 0x1B302200, 0x1B2F7800, 0x1B2ECE00, + 0x1B2E2400, 0x1B2D7A00, 0x1B2CD000, + 0x1B2C2600, 0x1B2B7C00, 0x1B2AD200, + 0x1B2A2800, 0x1B297E00, 0x1B28D400, + 0x1B282A00, 0x1B278000, 0x1B26D600, + 0x1B262C00, 0x1B258200, 0x1B24D800, + 0x1B242E00, 0x1B238400, 0x1B22DA00, + 0x1B223000, 0x1B218600, 0x1B20DC00, + 0x1B203200, 0x1B1F8800, 0x1B1EDE00, + 0x1B1E3400, 0x1B1D8A00, 0x1B1CE000, + 0x1B1C3600, 0x1B1B8C00, 0x1B1AE200, + 0x1B1A3800, 0x1B198E00, 0x1B18E400, + 0x1B183A00, 0x1B179000, 0x1B16E600, + 0x1B163C00, 0x1B159200, 0x1B14E800, + 0x1B143E00, 0x1B139400, 0x1B12EA00, + 0x1B124000, 0x1B119600, 0x1B10EC00, + 0x1B104200, 0x1B0F9800, 0x1B0EEE00, + 0x1B0E4400, 0x1B0D9A00, 0x1B0CF000, + 0x1B0C4600, 0x1B0B9C00, 0x1B0AF200, + 0x1B0A4800, 0x1B099E00, 0x1B08F400, + 0x1B084A00, 0x1B07A000, 0x1B06F600, + 0x1B064C00, 0x1B05A200, 0x1B04F800, + 0x1B044E00, 0x1B03A400, 0x1B02FA00, + 0x1B025000, 0x1B01A600, 0x1B00FC00, + 0x1B005200, 0x1AFFA800, 0x1AFEFE00, + 0x1AFE5400, 0x1AFDAA00, 0x1AFD0000, + 0x1AFC5600, 0x1AFBAC00, 0x1AFB0200, + 0x1AFA5800, 0x1AF9AE00, 0x1AF90400, + 0x1AF85A00, 0x1AF7B000, 0x1AF70600, + 0x1AF65C00, 0x1AF5B200, 0x1AF50800, + 0x1AF45E00, 0x1AF3B400, 0x1AF30A00, + 0x1AF26000, 0x1AF1B600, 0x1AF10C00, + 0x1AF06200, 0x1AEFB800, 0x1AEF0E00, + 0x1AEE6400, 0x1AEDBA00, 0x1AED1000, + 0x1AEC6600, 0x1AEBBC00, 0x1AEB1200, + 0x1AEA6800, 0x1AE9BE00, 0x1AE91400, + 0x1AE86A00, 0x1AE7C000, 0x1AE71600, + 0x1AE66C00, 0x1AE5C200, 0x1AE51800, + 0x1AE46E00, 0x1AE3C400, 0x1AE31A00, + 0x1AE27000, 0x1AE1C600, 0x1AE11C00, + 0x1AE07200, 0x1ADFC800, 0x1ADF1E00, + 0x1ADE7400, 0x1ADDCA00, 0x1ADD2000, + 0x1ADC7600, 0x1ADBCC00, 0x1ADB2200, + 0x1ADA7800, 0x1AD9CE00, 0x1AD92400, + 0x1AD87A00, 0x1AD7D000, 0x1AD72600, + 0x1AD67C00, 0x1AD5D200, 0x1AD52800, + 0x1AD47E00, 0x1AD3D400, 0x1AD32A00, + 0x1AD28000, 0x1AD1D600, 0x1AD12C00, + 0x1AD08200, 0x1ACFD800, 0x1ACF2E00, + 0x1ACE8400, 0x1ACDDA00, 0x1ACD3000, + 0x1ACC8600, 0x1ACBDC00, 0x1ACB3200, + 0x1ACA8800, 0x1AC9DE00, 0x1AC93400, + 0x1AC88A00, 0x1AC7E000, 0x1AC73600, + 0x1AC68C00, 0x1AC5E200, 0x1AC53800, + 0x1AC48E00, 0x1AC3E400, 0x1AC33A00, + 0x1AC29000, 0x1AC1E600, 0x1AC13C00, + 0x1AC09200, 0x1ABFE800, 0x1ABF3E00, + 0x1ABE9400, 0x1ABDEA00, 0x1ABD4000, + 0x1ABC9600, 0x1ABBEC00, 0x1ABB4200, + 0x1ABA9800, 0x1AB9EE00, 0x1AB94400, + 0x1AB89A00, 0x1AB7F000, 0x1AB74600, + 0x1AB69C00, 0x1AB5F200, 0x1AB54800, + 0x1AB49E00, 0x1AB3F400, 0x1AB34A00, + 0x1AB2A000, 0x1AB1F600, 0x1AB14C00, + 0x1AB0A200, 0x1AAFF800, 0x1AAF4E00, + 0x1AAEA400, 0x1AADFA00, 0x1AAD5000, + 0x1AACA600, 0x1AABFC00, 0x1AAB5200, + 0x1AAAA800, 0x1AA9FE00, 0x1AA95400, + 0x1AA8AA00, 0x1AA80000, 0x1AA75600, + 0x1AA6AC00, 0x1AA60200, 0x1AA55800, + 0x1AA4AE00, 0x1AA40400, 0x1AA35A00, + 0x1AA2B000, 0x1AA20600, 0x1AA15C00, + 0x1AA0B200, 0x1AA00800, 0x1A9F5E00, + 0x1A9EB400, 0x1A9E0A00, 0x1A9D6000, + 0x1A9CB600, 0x1A9C0C00, 0x1A9B6200, + 0x1A9AB800, 0x1A9A0E00, 0x1A996400, + 0x1A98BA00, 0x1A981000, 0x1A976600, + 0x1A96BC00, 0x1A961200, 0x1A956800, + 0x1A94BE00, 0x1A941400, 0x1A936A00, + 0x1A92C000, 0x1A921600, 0x1A916C00, + 0x1A90C200, 0x1A901800, 0x1A8F6E00, + 0x1A8EC400, 0x1A8E1A00, 0x1A8D7000, + 0x1A8CC600, 0x1A8C1C00, 0x1A8B7200, + 0x1A8AC800, 0x1A8A1E00, 0x1A897400, + 0x1A88CA00, 0x1A882000, 0x1A877600, + 0x1A86CC00, 0x1A862200, 0x1A857800, + 0x1A84CE00, 0x1A842400, 0x1A837A00, + 0x1A82D000, 0x1A822600, 0x1A817C00, + 0x1A80D200, 0x1A802800, 0x1A7F7E00, + 0x1A7ED400, 0x1A7E2A00, 0x1A7D8000, + 0x1A7CD600, 0x1A7C2C00, 0x1A7B8200, + 0x1A7AD800, 0x1A7A2E00, 0x1A798400, + 0x1A78DA00, 0x1A783000, 0x1A778600, + 0x1A76DC00, 0x1A763200, 0x1A758800, + 0x1A74DE00, 0x1A743400, 0x1A738A00, + 0x1A72E000, 0x1A723600, 0x1A718C00, + 0x1A70E200, 0x1A703800, 0x1A6F8E00, + 0x1A6EE400, 0x1A6E3A00, 0x1A6D9000, + 0x1A6CE600, 0x1A6C3C00, 0x1A6B9200, + 0x1A6AE800, 0x1A6A3E00, 0x1A699400, + 0x1A68EA00, 0x1A684000, 0x1A679600, + 0x1A66EC00, 0x1A664200, 0x1A659800, + 0x1A64EE00, 0x1A644400, 0x1A639A00, + 0x1A62F000, 0x1A624600, 0x1A619C00, + 0x1A60F200, 0x1A604800, 0x1A5F9E00, + 0x1A5EF400, 0x1A5E4A00, 0x1A5DA000, + 0x1A5CF600, 0x1A5C4C00, 0x1A5BA200, + 0x1A5AF800, 0x1A5A4E00, 0x1A59A400, + 0x1A58FA00, 0x1A585000, 0x1A57A600, + 0x1A56FC00, 0x1A565200, 0x1A55A800, + 0x1A54FE00, 0x1A545400, 0x1A53AA00, + 0x1A530000, 0x1A525600, 0x1A51AC00, + 0x1A510200, 0x1A505800, 0x1A4FAE00, + 0x1A4F0400, 0x1A4E5A00, 0x1A4DB000, + 0x1A4D0600, 0x1A4C5C00, 0x1A4BB200, + 0x1A4B0800, 0x1A4A5E00, 0x1A49B400, + 0x1A490A00, 0x1A486000, 0x1A47B600, + 0x1A470C00, 0x1A466200, 0x1A45B800, + 0x1A450E00, 0x1A446400, 0x1A43BA00, + 0x1A431000, 0x1A426600, 0x1A41BC00, + 0x1A411200, 0x1A406800, 0x1A3FBE00, + 0x1A3F1400, 0x1A3E6A00, 0x1A3DC000, + 0x1A3D1600, 0x1A3C6C00, 0x1A3BC200, + 0x1A3B1800, 0x1A3A6E00, 0x1A39C400, + 0x1A391A00, 0x1A387000, 0x1A37C600, + 0x1A371C00, 0x1A367200, 0x1A35C800, + 0x1A351E00, 0x1A347400, 0x1A33CA00, + 0x1A332000, 0x1A327600, 0x1A31CC00, + 0x1A312200, 0x1A307800, 0x1A2FCE00, + 0x1A2F2400, 0x1A2E7A00, 0x1A2DD000, + 0x1A2D2600, 0x1A2C7C00, 0x1A2BD200, + 0x1A2B2800, 0x1A2A7E00, 0x1A29D400, + 0x1A292A00, 0x1A288000, 0x1A27D600, + 0x1A272C00, 0x1A268200, 0x1A25D800, + 0x1A252E00, 0x1A248400, 0x1A23DA00, + 0x1A233000, 0x1A228600, 0x1A21DC00, + 0x1A213200, 0x1A208800, 0x1A1FDE00, + 0x1A1F3400, 0x1A1E8A00, 0x1A1DE000, + 0x1A1D3600, 0x1A1C8C00, 0x1A1BE200, + 0x1A1B3800, 0x1A1A8E00, 0x1A19E400, + 0x1A193A00, 0x1A189000, 0x1A17E600, + 0x1A173C00, 0x1A169200, 0x1A15E800, + 0x1A153E00, 0x1A149400, 0x1A13EA00, + 0x1A134000, 0x1A129600, 0x1A11EC00, + 0x1A114200, 0x1A109800, 0x1A0FEE00, + 0x1A0F4400, 0x1A0E9A00, 0x1A0DF000, + 0x1A0D4600, 0x1A0C9C00, 0x1A0BF200, + 0x1A0B4800, 0x1A0A9E00, 0x1A09F400, + 0x1A094A00, 0x1A08A000, 0x1A07F600, + 0x1A074C00, 0x1A06A200, 0x1A05F800, + 0x1A054E00, 0x1A04A400, 0x1A03FA00, + 0x1A035000, 0x1A02A600, 0x1A01FC00, + 0x1A015200, 0x1A00A800, 0x19FFFE00, + 0x19FF5400, 0x19FEAA00, 0x19FE0000, + 0x19FD5600, 0x19FCAC00, 0x19FC0200, + 0x19FB5800, 0x19FAAE00, 0x19FA0400, + 0x19F95A00, 0x19F8B000, 0x19F80600, + 0x19F75C00, 0x19F6B200, 0x19F60800, + 0x19F55E00, 0x19F4B400, 0x19F40A00, + 0x19F36000, 0x19F2B600, 0x19F20C00, + 0x19F16200, 0x19F0B800, 0x19F00E00, + 0x19EF6400, 0x19EEBA00, 0x19EE1000, + 0x19ED6600, 0x19ECBC00, 0x19EC1200, + 0x19EB6800, 0x19EABE00, 0x19EA1400, + 0x19E96A00, 0x19E8C000, 0x19E81600, + 0x19E76C00, 0x19E6C200, 0x19E61800, + 0x19E56E00, 0x19E4C400, 0x19E41A00, + 0x19E37000, 0x19E2C600, 0x19E21C00, + 0x19E17200, 0x19E0C800, 0x19E01E00, + 0x19DF7400, 0x19DECA00, 0x19DE2000, + 0x19DD7600, 0x19DCCC00, 0x19DC2200, + 0x19DB7800, 0x19DACE00, 0x19DA2400, + 0x19D97A00, 0x19D8D000, 0x19D82600, + 0x19D77C00, 0x19D6D200, 0x19D62800, + 0x19D57E00, 0x19D4D400, 0x19D42A00, + 0x19D38000, 0x19D2D600, 0x19D22C00, + 0x19D18200, 0x19D0D800, 0x19D02E00, + 0x19CF8400, 0x19CEDA00, 0x19CE3000, + 0x19CD8600, 0x19CCDC00, 0x19CC3200, + 0x19CB8800, 0x19CADE00, 0x19CA3400, + 0x19C98A00, 0x19C8E000, 0x19C83600, + 0x19C78C00, 0x19C6E200, 0x19C63800, + 0x19C58E00, 0x19C4E400, 0x19C43A00, + 0x19C39000, 0x19C2E600, 0x19C23C00, + 0x19C19200, 0x19C0E800, 0x19C03E00, + 0x19BF9400, 0x19BEEA00, 0x19BE4000, + 0x19BD9600, 0x19BCEC00, 0x19BC4200, + 0x19BB9800, 0x19BAEE00, 0x19BA4400, + 0x19B99A00, 0x19B8F000, 0x19B84600, + 0x19B79C00, 0x19B6F200, 0x19B64800, + 0x19B59E00, 0x19B4F400, 0x19B44A00, + 0x19B3A000, 0x19B2F600, 0x19B24C00, + 0x19B1A200, 0x19B0F800, 0x19B04E00, + 0x19AFA400, 0x19AEFA00, 0x19AE5000, + 0x19ADA600, 0x19ACFC00, 0x19AC5200, + 0x19ABA800, 0x19AAFE00, 0x19AA5400, + 0x19A9AA00, 0x19A90000, 0x19A85600, + 0x19A7AC00, 0x19A70200, 0x19A65800, + 0x19A5AE00, 0x19A50400, 0x19A45A00, + 0x19A3B000, 0x19A30600, 0x19A25C00, + 0x19A1B200, 0x19A10800, 0x19A05E00, + 0x199FB400, 0x199F0A00, 0x199E6000, + 0x199DB600, 0x199D0C00, 0x199C6200, + 0x199BB800, 0x199B0E00, 0x199A6400, + 0x1999BA00, 0x19991000, 0x19986600, + 0x1997BC00, 0x19971200, 0x19966800, + 0x1995BE00, 0x19951400, 0x19946A00, + 0x1993C000, 0x19931600, 0x19926C00, + 0x1991C200, 0x19911800, 0x19906E00, + 0x198FC400, 0x198F1A00, 0x198E7000, + 0x198DC600, 0x198D1C00, 0x198C7200, + 0x198BC800, 0x198B1E00, 0x198A7400, + 0x1989CA00, 0x19892000, 0x19887600, + 0x1987CC00, 0x19872200, 0x19867800, + 0x1985CE00, 0x19852400, 0x19847A00, + 0x1983D000, 0x19832600, 0x19827C00, + 0x1981D200, 0x19812800, 0x19807E00, + 0x197FD400, 0x197F2A00, 0x197E8000, + 0x197DD600, 0x197D2C00, 0x197C8200, + 0x197BD800, 0x197B2E00, 0x197A8400, + 0x1979DA00, 0x19793000, 0x19788600, + 0x1977DC00, 0x19773200, 0x19768800, + 0x1975DE00, 0x19753400, 0x19748A00, + 0x1973E000, 0x19733600, 0x19728C00, + 0x1971E200, 0x19713800, 0x19708E00, + 0x196FE400, 0x196F3A00, 0x196E9000, + 0x196DE600, 0x196D3C00, 0x196C9200, + 0x196BE800, 0x196B3E00, 0x196A9400, + 0x1969EA00, 0x19694000, 0x19689600, + 0x1967EC00, 0x19674200, 0x19669800, + 0x1965EE00, 0x19654400, 0x19649A00, + 0x1963F000, 0x19634600, 0x19629C00, + 0x1961F200, 0x19614800, 0x19609E00, + 0x195FF400, 0x195F4A00, 0x195EA000, + 0x195DF600, 0x195D4C00, 0x195CA200, + 0x195BF800, 0x195B4E00, 0x195AA400, + 0x1959FA00, 0x19595000, 0x1958A600, + 0x1957FC00, 0x19575200, 0x1956A800, + 0x1955FE00, 0x19555400, 0x1954AA00, + 0x19540000, 0x19535600, 0x1952AC00, + 0x19520200, 0x19515800, 0x1950AE00, + 0x19500400, 0x194F5A00, 0x194EB000, + 0x194E0600, 0x194D5C00, 0x194CB200, + 0x194C0800, 0x194B5E00, 0x194AB400, + 0x194A0A00, 0x19496000, 0x1948B600, + 0x19480C00, 0x19476200, 0x1946B800, + 0x19460E00, 0x19456400, 0x1944BA00, + 0x19441000, 0x19436600, 0x1942BC00, + 0x19421200, 0x19416800, 0x1940BE00, + 0x19401400, 0x193F6A00, 0x193EC000, + 0x193E1600, 0x193D6C00, 0x193CC200, + 0x193C1800, 0x193B6E00, 0x193AC400, + 0x193A1A00, 0x19397000, 0x1938C600, + 0x19381C00, 0x19377200, 0x1936C800, + 0x19361E00, 0x19357400, 0x1934CA00, + 0x19342000, 0x19337600, 0x1932CC00, + 0x19322200, 0x19317800, 0x1930CE00, + 0x19302400, 0x192F7A00, 0x192ED000, + 0x192E2600, 0x192D7C00, 0x192CD200, + 0x192C2800, 0x192B7E00, 0x192AD400, + 0x192A2A00, 0x19298000, 0x1928D600, + 0x19282C00, 0x19278200, 0x1926D800, + 0x19262E00, 0x19258400, 0x1924DA00, + 0x19243000, 0x19238600, 0x1922DC00, + 0x19223200, 0x19218800, 0x1920DE00, + 0x19203400, 0x191F8A00, 0x191EE000, + 0x191E3600, 0x191D8C00, 0x191CE200, + 0x191C3800, 0x191B8E00, 0x191AE400, + 0x191A3A00, 0x19199000, 0x1918E600, + 0x19183C00, 0x19179200, 0x1916E800, + 0x19163E00, 0x19159400, 0x1914EA00, + 0x19144000, 0x19139600, 0x1912EC00, + 0x19124200, 0x19119800, 0x1910EE00, + 0x19104400, 0x190F9A00, 0x190EF000, + 0x190E4600, 0x190D9C00, 0x190CF200, + 0x190C4800, 0x190B9E00, 0x190AF400, + 0x190A4A00, 0x1909A000, 0x1908F600, + 0x19084C00, 0x1907A200, 0x1906F800, + 0x19064E00, 0x1905A400, 0x1904FA00, + 0x19045000, 0x1903A600, 0x1902FC00, + 0x19025200, 0x1901A800, 0x1900FE00, + 0x19005400, 0x18FFAA00, 0x18FF0000, + 0x18FE5600, 0x18FDAC00, 0x18FD0200, + 0x18FC5800, 0x18FBAE00, 0x18FB0400, + 0x18FA5A00, 0x18F9B000, 0x18F90600, + 0x18F85C00, 0x18F7B200, 0x18F70800, + 0x18F65E00, 0x18F5B400, 0x18F50A00, + 0x18F46000, 0x18F3B600, 0x18F30C00, + 0x18F26200, 0x18F1B800, 0x18F10E00, + 0x18F06400, 0x18EFBA00, 0x18EF1000, + 0x18EE6600, 0x18EDBC00, 0x18ED1200, + 0x18EC6800, 0x18EBBE00, 0x18EB1400, + 0x18EA6A00, 0x18E9C000, 0x18E91600, + 0x18E86C00, 0x18E7C200, 0x18E71800, + 0x18E66E00, 0x18E5C400, 0x18E51A00, + 0x18E47000, 0x18E3C600, 0x18E31C00, + 0x18E27200, 0x18E1C800, 0x18E11E00, + 0x18E07400, 0x18DFCA00, 0x18DF2000, + 0x18DE7600, 0x18DDCC00, 0x18DD2200, + 0x18DC7800, 0x18DBCE00, 0x18DB2400, + 0x18DA7A00, 0x18D9D000, 0x18D92600, + 0x18D87C00, 0x18D7D200, 0x18D72800, + 0x18D67E00, 0x18D5D400, 0x18D52A00, + 0x18D48000, 0x18D3D600, 0x18D32C00, + 0x18D28200, 0x18D1D800, 0x18D12E00, + 0x18D08400, 0x18CFDA00, 0x18CF3000, + 0x18CE8600, 0x18CDDC00, 0x18CD3200, + 0x18CC8800, 0x18CBDE00, 0x18CB3400, + 0x18CA8A00, 0x18C9E000, 0x18C93600, + 0x18C88C00, 0x18C7E200, 0x18C73800, + 0x18C68E00, 0x18C5E400, 0x18C53A00, + 0x18C49000, 0x18C3E600, 0x18C33C00, + 0x18C29200, 0x18C1E800, 0x18C13E00, + 0x18C09400, 0x18BFEA00, 0x18BF4000, + 0x18BE9600, 0x18BDEC00, 0x18BD4200, + 0x18BC9800, 0x18BBEE00, 0x18BB4400, + 0x18BA9A00, 0x18B9F000, 0x18B94600, + 0x18B89C00, 0x18B7F200, 0x18B74800, + 0x18B69E00, 0x18B5F400, 0x18B54A00, + 0x18B4A000, 0x18B3F600, 0x18B34C00, + 0x18B2A200, 0x18B1F800, 0x18B14E00, + 0x18B0A400, 0x18AFFA00, 0x18AF5000, + 0x18AEA600, 0x18ADFC00, 0x18AD5200, + 0x18ACA800, 0x18ABFE00, 0x18AB5400, + 0x18AAAA00, 0x18AA0000, 0x18A95600, + 0x18A8AC00, 0x18A80200, 0x18A75800, + 0x18A6AE00, 0x18A60400, 0x18A55A00, + 0x18A4B000, 0x18A40600, 0x18A35C00, + 0x18A2B200, 0x18A20800, 0x18A15E00, + 0x18A0B400, 0x18A00A00, 0x189F6000, + 0x189EB600, 0x189E0C00, 0x189D6200, + 0x189CB800, 0x189C0E00, 0x189B6400, + 0x189ABA00, 0x189A1000, 0x18996600, + 0x1898BC00, 0x18981200, 0x18976800, + 0x1896BE00, 0x18961400, 0x18956A00, + 0x1894C000, 0x18941600, 0x18936C00, + 0x1892C200, 0x18921800, 0x18916E00, + 0x1890C400, 0x18901A00, 0x188F7000, + 0x188EC600, 0x188E1C00, 0x188D7200, + 0x188CC800, 0x188C1E00, 0x188B7400, + 0x188ACA00, 0x188A2000, 0x18897600, + 0x1888CC00, 0x18882200, 0x18877800, + 0x1886CE00, 0x18862400, 0x18857A00, + 0x1884D000, 0x18842600, 0x18837C00, + 0x1882D200, 0x18822800, 0x18817E00, + 0x1880D400, 0x18802A00, 0x187F8000, + 0x187ED600, 0x187E2C00, 0x187D8200, + 0x187CD800, 0x187C2E00, 0x187B8400, + 0x187ADA00, 0x187A3000, 0x18798600, + 0x1878DC00, 0x18783200, 0x18778800, + 0x1876DE00, 0x18763400, 0x18758A00, + 0x1874E000, 0x18743600, 0x18738C00, + 0x1872E200, 0x18723800, 0x18718E00, + 0x1870E400, 0x18703A00, 0x186F9000, + 0x186EE600, 0x186E3C00, 0x186D9200, + 0x186CE800, 0x186C3E00, 0x186B9400, + 0x186AEA00, 0x186A4000, 0x18699600, + 0x1868EC00, 0x18684200, 0x18679800, + 0x1866EE00, 0x18664400, 0x18659A00, + 0x1864F000, 0x18644600, 0x18639C00, + 0x1862F200, 0x18624800, 0x18619E00, + 0x1860F400, 0x18604A00, 0x185FA000, + 0x185EF600, 0x185E4C00, 0x185DA200, + 0x185CF800, 0x185C4E00, 0x185BA400, + 0x185AFA00, 0x185A5000, 0x1859A600, + 0x1858FC00, 0x18585200, 0x1857A800, + 0x1856FE00, 0x18565400, 0x1855AA00, + 0x18550000, 0x18545600, 0x1853AC00, + 0x18530200, 0x18525800, 0x1851AE00, + 0x18510400, 0x18505A00, 0x184FB000, + 0x184F0600, 0x184E5C00, 0x184DB200, + 0x184D0800, 0x184C5E00, 0x184BB400, + 0x184B0A00, 0x184A6000, 0x1849B600, + 0x18490C00, 0x18486200, 0x1847B800, + 0x18470E00, 0x18466400, 0x1845BA00, + 0x18451000, 0x18446600, 0x1843BC00, + 0x18431200, 0x18426800, 0x1841BE00, + 0x18411400, 0x18406A00, 0x183FC000, + 0x183F1600, 0x183E6C00, 0x183DC200, + 0x183D1800, 0x183C6E00, 0x183BC400, + 0x183B1A00, 0x183A7000, 0x1839C600, + 0x18391C00, 0x18387200, 0x1837C800, + 0x18371E00, 0x18367400, 0x1835CA00, + 0x18352000, 0x18347600, 0x1833CC00, + 0x18332200, 0x18327800, 0x1831CE00, + 0x18312400, 0x18307A00, 0x182FD000, + 0x182F2600, 0x182E7C00, 0x182DD200, + 0x182D2800, 0x182C7E00, 0x182BD400, + 0x182B2A00, 0x182A8000, 0x1829D600, + 0x18292C00, 0x18288200, 0x1827D800, + 0x18272E00, 0x18268400, 0x1825DA00, + 0x18253000, 0x18248600, 0x1823DC00, + 0x18233200, 0x18228800, 0x1821DE00, + 0x18213400, 0x18208A00, 0x181FE000, + 0x181F3600, 0x181E8C00, 0x181DE200, + 0x181D3800, 0x181C8E00, 0x181BE400, + 0x181B3A00, 0x181A9000, 0x1819E600, + 0x18193C00, 0x18189200, 0x1817E800, + 0x18173E00, 0x18169400, 0x1815EA00, + 0x18154000, 0x18149600, 0x1813EC00, + 0x18134200, 0x18129800, 0x1811EE00, + 0x18114400, 0x18109A00, 0x180FF000, + 0x180F4600, 0x180E9C00, 0x180DF200, + 0x180D4800, 0x180C9E00, 0x180BF400, + 0x180B4A00, 0x180AA000, 0x1809F600, + 0x18094C00, 0x1808A200, 0x1807F800, + 0x18074E00, 0x1806A400, 0x1805FA00, + 0x18055000, 0x1804A600, 0x1803FC00, + 0x18035200, 0x1802A800, 0x1801FE00, + 0x18015400, 0x1800AA00, 0x18000000, + 0x17FF5600, 0x17FEAC00, 0x17FE0200, + 0x17FD5800, 0x17FCAE00, 0x17FC0400, + 0x17FB5A00, 0x17FAB000, 0x17FA0600, + 0x17F95C00, 0x17F8B200, 0x17F80800, + 0x17F75E00, 0x17F6B400, 0x17F60A00, + 0x17F56000, 0x17F4B600, 0x17F40C00, + 0x17F36200, 0x17F2B800, 0x17F20E00, + 0x17F16400, 0x17F0BA00, 0x17F01000, + 0x17EF6600, 0x17EEBC00, 0x17EE1200, + 0x17ED6800, 0x17ECBE00, 0x17EC1400, + 0x17EB6A00, 0x17EAC000, 0x17EA1600, + 0x17E96C00, 0x17E8C200, 0x17E81800, + 0x17E76E00, 0x17E6C400, 0x17E61A00, + 0x17E57000, 0x17E4C600, 0x17E41C00, + 0x17E37200, 0x17E2C800, 0x17E21E00, + 0x17E17400, 0x17E0CA00, 0x17E02000, + 0x17DF7600, 0x17DECC00, 0x17DE2200, + 0x17DD7800, 0x17DCCE00, 0x17DC2400, + 0x17DB7A00, 0x17DAD000, 0x17DA2600, + 0x17D97C00, 0x17D8D200, 0x17D82800, + 0x17D77E00, 0x17D6D400, 0x17D62A00, + 0x17D58000, 0x17D4D600, 0x17D42C00, + 0x17D38200, 0x17D2D800, 0x17D22E00, + 0x17D18400, 0x17D0DA00, 0x17D03000, + 0x17CF8600, 0x17CEDC00, 0x17CE3200, + 0x17CD8800, 0x17CCDE00, 0x17CC3400, + 0x17CB8A00, 0x17CAE000, 0x17CA3600, + 0x17C98C00, 0x17C8E200, 0x17C83800, + 0x17C78E00, 0x17C6E400, 0x17C63A00, + 0x17C59000, 0x17C4E600, 0x17C43C00, + 0x17C39200, 0x17C2E800, 0x17C23E00, + 0x17C19400, 0x17C0EA00, 0x17C04000, + 0x17BF9600, 0x17BEEC00, 0x17BE4200, + 0x17BD9800, 0x17BCEE00, 0x17BC4400, + 0x17BB9A00, 0x17BAF000, 0x17BA4600, + 0x17B99C00, 0x17B8F200, 0x17B84800, + 0x17B79E00, 0x17B6F400, 0x17B64A00, + 0x17B5A000, 0x17B4F600, 0x17B44C00, + 0x17B3A200, 0x17B2F800, 0x17B24E00, + 0x17B1A400, 0x17B0FA00, 0x17B05000, + 0x17AFA600, 0x17AEFC00, 0x17AE5200, + 0x17ADA800, 0x17ACFE00, 0x17AC5400, + 0x17ABAA00, 0x17AB0000, 0x17AA5600, + 0x17A9AC00, 0x17A90200, 0x17A85800, + 0x17A7AE00, 0x17A70400, 0x17A65A00, + 0x17A5B000, 0x17A50600, 0x17A45C00, + 0x17A3B200, 0x17A30800, 0x17A25E00, + 0x17A1B400, 0x17A10A00, 0x17A06000, + 0x179FB600, 0x179F0C00, 0x179E6200, + 0x179DB800, 0x179D0E00, 0x179C6400, + 0x179BBA00, 0x179B1000, 0x179A6600, + 0x1799BC00, 0x17991200, 0x17986800, + 0x1797BE00, 0x17971400, 0x17966A00, + 0x1795C000, 0x17951600, 0x17946C00, + 0x1793C200, 0x17931800, 0x17926E00, + 0x1791C400, 0x17911A00, 0x17907000, + 0x178FC600, 0x178F1C00, 0x178E7200, + 0x178DC800, 0x178D1E00, 0x178C7400, + 0x178BCA00, 0x178B2000, 0x178A7600, + 0x1789CC00, 0x17892200, 0x17887800, + 0x1787CE00, 0x17872400, 0x17867A00, + 0x1785D000, 0x17852600, 0x17847C00, + 0x1783D200, 0x17832800, 0x17827E00, + 0x1781D400, 0x17812A00, 0x17808000, + 0x177FD600, 0x177F2C00, 0x177E8200, + 0x177DD800, 0x177D2E00, 0x177C8400, + 0x177BDA00, 0x177B3000, 0x177A8600, + 0x1779DC00, 0x17793200, 0x17788800, + 0x1777DE00, 0x17773400, 0x17768A00, + 0x1775E000, 0x17753600, 0x17748C00, + 0x1773E200, 0x17733800, 0x17728E00, + 0x1771E400, 0x17713A00, 0x17709000, + 0x176FE600, 0x176F3C00, 0x176E9200, + 0x176DE800, 0x176D3E00, 0x176C9400, + 0x176BEA00, 0x176B4000, 0x176A9600, + 0x1769EC00, 0x17694200, 0x17689800, + 0x1767EE00, 0x17674400, 0x17669A00, + 0x1765F000, 0x17654600, 0x17649C00, + 0x1763F200, 0x17634800, 0x17629E00, + 0x1761F400, 0x17614A00, 0x1760A000, + 0x175FF600, 0x175F4C00, 0x175EA200, + 0x175DF800, 0x175D4E00, 0x175CA400, + 0x175BFA00, 0x175B5000, 0x175AA600, + 0x1759FC00, 0x17595200, 0x1758A800, + 0x1757FE00, 0x17575400, 0x1756AA00, + 0x17560000, 0x17555600, 0x1754AC00, + 0x17540200, 0x17535800, 0x1752AE00, + 0x17520400, 0x17515A00, 0x1750B000, + 0x17500600, 0x174F5C00, 0x174EB200, + 0x174E0800, 0x174D5E00, 0x174CB400, + 0x174C0A00, 0x174B6000, 0x174AB600, + 0x174A0C00, 0x17496200, 0x1748B800, + 0x17480E00, 0x17476400, 0x1746BA00, + 0x17461000, 0x17456600, 0x1744BC00, + 0x17441200, 0x17436800, 0x1742BE00, + 0x17421400, 0x17416A00, 0x1740C000, + 0x17401600, 0x173F6C00, 0x173EC200, + 0x173E1800, 0x173D6E00, 0x173CC400, + 0x173C1A00, 0x173B7000, 0x173AC600, + 0x173A1C00, 0x17397200, 0x1738C800, + 0x17381E00, 0x17377400, 0x1736CA00, + 0x17362000, 0x17357600, 0x1734CC00, + 0x17342200, 0x17337800, 0x1732CE00, + 0x17322400, 0x17317A00, 0x1730D000, + 0x17302600, 0x172F7C00, 0x172ED200, + 0x172E2800, 0x172D7E00, 0x172CD400, + 0x172C2A00, 0x172B8000, 0x172AD600, + 0x172A2C00, 0x17298200, 0x1728D800, + 0x17282E00, 0x17278400, 0x1726DA00, + 0x17263000, 0x17258600, 0x1724DC00, + 0x17243200, 0x17238800, 0x1722DE00, + 0x17223400, 0x17218A00, 0x1720E000, + 0x17203600, 0x171F8C00, 0x171EE200, + 0x171E3800, 0x171D8E00, 0x171CE400, + 0x171C3A00, 0x171B9000, 0x171AE600, + 0x171A3C00, 0x17199200, 0x1718E800, + 0x17183E00, 0x17179400, 0x1716EA00, + 0x17164000, 0x17159600, 0x1714EC00, + 0x17144200, 0x17139800, 0x1712EE00, + 0x17124400, 0x17119A00, 0x1710F000, + 0x17104600, 0x170F9C00, 0x170EF200, + 0x170E4800, 0x170D9E00, 0x170CF400, + 0x170C4A00, 0x170BA000, 0x170AF600, + 0x170A4C00, 0x1709A200, 0x1708F800, + 0x17084E00, 0x1707A400, 0x1706FA00, + 0x17065000, 0x1705A600, 0x1704FC00, + 0x17045200, 0x1703A800, 0x1702FE00, + 0x17025400, 0x1701AA00, 0x17010000, + 0x17005600, 0x16FFAC00, 0x16FF0200, + 0x16FE5800, 0x16FDAE00, 0x16FD0400, + 0x16FC5A00, 0x16FBB000, 0x16FB0600, + 0x16FA5C00, 0x16F9B200, 0x16F90800, + 0x16F85E00, 0x16F7B400, 0x16F70A00, + 0x16F66000, 0x16F5B600, 0x16F50C00, + 0x16F46200, 0x16F3B800, 0x16F30E00, + 0x16F26400, 0x16F1BA00, 0x16F11000, + 0x16F06600, 0x16EFBC00, 0x16EF1200, + 0x16EE6800, 0x16EDBE00, 0x16ED1400, + 0x16EC6A00, 0x16EBC000, 0x16EB1600, + 0x16EA6C00, 0x16E9C200, 0x16E91800, + 0x16E86E00, 0x16E7C400, 0x16E71A00, + 0x16E67000, 0x16E5C600, 0x16E51C00, + 0x16E47200, 0x16E3C800, 0x16E31E00, + 0x16E27400, 0x16E1CA00, 0x16E12000, + 0x16E07600, 0x16DFCC00, 0x16DF2200, + 0x16DE7800, 0x16DDCE00, 0x16DD2400, + 0x16DC7A00, 0x16DBD000, 0x16DB2600, + 0x16DA7C00, 0x16D9D200, 0x16D92800, + 0x16D87E00, 0x16D7D400, 0x16D72A00, + 0x16D68000, 0x16D5D600, 0x16D52C00, + 0x16D48200, 0x16D3D800, 0x16D32E00, + 0x16D28400, 0x16D1DA00, 0x16D13000, + 0x16D08600, 0x16CFDC00, 0x16CF3200, + 0x16CE8800, 0x16CDDE00, 0x16CD3400, + 0x16CC8A00, 0x16CBE000, 0x16CB3600, + 0x16CA8C00, 0x16C9E200, 0x16C93800, + 0x16C88E00, 0x16C7E400, 0x16C73A00, + 0x16C69000, 0x16C5E600, 0x16C53C00, + 0x16C49200, 0x16C3E800, 0x16C33E00, + 0x16C29400, 0x16C1EA00, 0x16C14000, + 0x16C09600, 0x16BFEC00, 0x16BF4200, + 0x16BE9800, 0x16BDEE00, 0x16BD4400, + 0x16BC9A00, 0x16BBF000, 0x16BB4600, + 0x16BA9C00, 0x16B9F200, 0x16B94800, + 0x16B89E00, 0x16B7F400, 0x16B74A00, + 0x16B6A000, 0x16B5F600, 0x16B54C00, + 0x16B4A200, 0x16B3F800, 0x16B34E00, + 0x16B2A400, 0x16B1FA00, 0x16B15000, + 0x16B0A600, 0x16AFFC00, 0x16AF5200, + 0x16AEA800, 0x16ADFE00, 0x16AD5400, + 0x16ACAA00, 0x16AE0000, 0x16AD5F40, + 0x16ACBE80, 0x16AC1DC0, 0x16AB7D00, + 0x16AADC40, 0x16AA3B80, 0x16A99AC0, + 0x16A8FA00, 0x16A85940, 0x16A7B880, + 0x16A717C0, 0x16A67700, 0x16A5D640, + 0x16A53580, 0x16A494C0, 0x16A3F400, + 0x16A35340, 0x16A2B280, 0x16A211C0, + 0x16A17100, 0x16A0D040, 0x16A02F80, + 0x169F8EC0, 0x169EEE00, 0x169E4D40, + 0x169DAC80, 0x169D0BC0, 0x169C6B00, + 0x169BCA40, 0x169B2980, 0x169A88C0, + 0x1699E800, 0x16994740, 0x1698A680, + 0x169805C0, 0x16976500, 0x1696C440, + 0x16962380, 0x169582C0, 0x1694E200, + 0x16944140, 0x1693A080, 0x1692FFC0, + 0x16925F00, 0x1691BE40, 0x16911D80, + 0x16907CC0, 0x168FDC00, 0x168F3B40, + 0x168E9A80, 0x168DF9C0, 0x168D5900, + 0x168CB840, 0x168C1780, 0x168B76C0, + 0x168AD600, 0x168A3540, 0x16899480, + 0x1688F3C0, 0x16885300, 0x1687B240, + 0x16871180, 0x168670C0, 0x1685D000, + 0x16852F40, 0x16848E80, 0x1683EDC0, + 0x16834D00, 0x1682AC40, 0x16820B80, + 0x16816AC0, 0x1680CA00, 0x16802940, + 0x167F8880, 0x167EE7C0, 0x167E4700, + 0x167DA640, 0x167D0580, 0x167C64C0, + 0x167BC400, 0x167B2340, 0x167A8280, + 0x1679E1C0, 0x16794100, 0x1678A040, + 0x1677FF80, 0x16775EC0, 0x1676BE00, + 0x16761D40, 0x16757C80, 0x1674DBC0, + 0x16743B00, 0x16739A40, 0x1672F980, + 0x167258C0, 0x1671B800, 0x16711740, + 0x16707680, 0x166FD5C0, 0x166F3500, + 0x166E9440, 0x166DF380, 0x166D52C0, + 0x166CB200, 0x166C1140, 0x166B7080, + 0x166ACFC0, 0x166A2F00, 0x16698E40, + 0x1668ED80, 0x16684CC0, 0x1667AC00, + 0x16670B40, 0x16666A80, 0x1665C9C0, + 0x16652900, 0x16648840, 0x1663E780, + 0x166346C0, 0x1662A600, 0x16620540, + 0x16616480, 0x1660C3C0, 0x16602300, + 0x165F8240, 0x165EE180, 0x165E40C0, + 0x165DA000, 0x165CFF40, 0x165C5E80, + 0x165BBDC0, 0x165B1D00, 0x165A7C40, + 0x1659DB80, 0x16593AC0, 0x16589A00, + 0x1657F940, 0x16575880, 0x1656B7C0, + 0x16561700, 0x16557640, 0x1654D580, + 0x165434C0, 0x16539400, 0x1652F340, + 0x16525280, 0x1651B1C0, 0x16511100, + 0x16507040, 0x164FCF80, 0x164F2EC0, + 0x164E8E00, 0x164DED40, 0x164D4C80, + 0x164CABC0, 0x164C0B00, 0x164B6A40, + 0x164AC980, 0x164A28C0, 0x16498800, + 0x1648E740, 0x16484680, 0x1647A5C0, + 0x16470500, 0x16466440, 0x1645C380, + 0x164522C0, 0x16448200, 0x1643E140, + 0x16434080, 0x16429FC0, 0x1641FF00, + 0x16415E40, 0x1640BD80, 0x16401CC0, + 0x163F7C00, 0x163EDB40, 0x163E3A80, + 0x163D99C0, 0x163CF900, 0x163C5840, + 0x163BB780, 0x163B16C0, 0x163A7600, + 0x1639D540, 0x16393480, 0x163893C0, + 0x1637F300, 0x16375240, 0x1636B180, + 0x163610C0, 0x16357000, 0x1634CF40, + 0x16342E80, 0x16338DC0, 0x1632ED00, + 0x16324C40, 0x1631AB80, 0x16310AC0, + 0x16306A00, 0x162FC940, 0x162F2880, + 0x162E87C0, 0x162DE700, 0x162D4640, + 0x162CA580, 0x162C04C0, 0x162B6400, + 0x162AC340, 0x162A2280, 0x162981C0, + 0x1628E100, 0x16284040, 0x16279F80, + 0x1626FEC0, 0x16265E00, 0x1625BD40, + 0x16251C80, 0x16247BC0, 0x1623DB00, + 0x16233A40, 0x16229980, 0x1621F8C0, + 0x16215800, 0x1620B740, 0x16201680, + 0x161F75C0, 0x161ED500, 0x161E3440, + 0x161D9380, 0x161CF2C0, 0x161C5200, + 0x161BB140, 0x161B1080, 0x161A6FC0, + 0x1619CF00, 0x16192E40, 0x16188D80, + 0x1617ECC0, 0x16174C00, 0x1616AB40, + 0x16160A80, 0x161569C0, 0x1614C900, + 0x16142840, 0x16138780, 0x1612E6C0, + 0x16124600, 0x1611A540, 0x16110480, + 0x161063C0, 0x160FC300, 0x160F2240, + 0x160E8180, 0x160DE0C0, 0x160D4000, + 0x160C9F40, 0x160BFE80, 0x160B5DC0, + 0x160ABD00, 0x160A1C40, 0x16097B80, + 0x1608DAC0, 0x16083A00, 0x16079940, + 0x1606F880, 0x160657C0, 0x1605B700, + 0x16051640, 0x16047580, 0x1603D4C0, + 0x16033400, 0x16029340, 0x1601F280, + 0x160151C0, 0x1600B100, 0x16001040, + 0x15FF6F80, 0x15FECEC0, 0x15FE2E00, + 0x15FD8D40, 0x15FCEC80, 0x15FC4BC0, + 0x15FBAB00, 0x15FB0A40, 0x15FA6980, + 0x15F9C8C0, 0x15F92800, 0x15F88740, + 0x15F7E680, 0x15F745C0, 0x15F6A500, + 0x15F60440, 0x15F56380, 0x15F4C2C0, + 0x15F42200, 0x15F38140, 0x15F2E080, + 0x15F23FC0, 0x15F19F00, 0x15F0FE40, + 0x15F05D80, 0x15EFBCC0, 0x15EF1C00, + 0x15EE7B40, 0x15EDDA80, 0x15ED39C0, + 0x15EC9900, 0x15EBF840, 0x15EB5780, + 0x15EAB6C0, 0x15EA1600, 0x15E97540, + 0x15E8D480, 0x15E833C0, 0x15E79300, + 0x15E6F240, 0x15E65180, 0x15E5B0C0, + 0x15E51000, 0x15E46F40, 0x15E3CE80, + 0x15E32DC0, 0x15E28D00, 0x15E1EC40, + 0x15E14B80, 0x15E0AAC0, 0x15E00A00, + 0x15DF6940, 0x15DEC880, 0x15DE27C0, + 0x15DD8700, 0x15DCE640, 0x15DC4580, + 0x15DBA4C0, 0x15DB0400, 0x15DA6340, + 0x15D9C280, 0x15D921C0, 0x15D88100, + 0x15D7E040, 0x15D73F80, 0x15D69EC0, + 0x15D5FE00, 0x15D55D40, 0x15D4BC80, + 0x15D41BC0, 0x15D37B00, 0x15D2DA40, + 0x15D23980, 0x15D198C0, 0x15D0F800, + 0x15D05740, 0x15CFB680, 0x15CF15C0, + 0x15CE7500, 0x15CDD440, 0x15CD3380, + 0x15CC92C0, 0x15CBF200, 0x15CB5140, + 0x15CAB080, 0x15CA0FC0, 0x15C96F00, + 0x15C8CE40, 0x15C82D80, 0x15C78CC0, + 0x15C6EC00, 0x15C64B40, 0x15C5AA80, + 0x15C509C0, 0x15C46900, 0x15C3C840, + 0x15C32780, 0x15C286C0, 0x15C1E600, + 0x15C14540, 0x15C0A480, 0x15C003C0, + 0x15BF6300, 0x15BEC240, 0x15BE2180, + 0x15BD80C0, 0x15BCE000, 0x15BC3F40, + 0x15BB9E80, 0x15BAFDC0, 0x15BA5D00, + 0x15B9BC40, 0x15B91B80, 0x15B87AC0, + 0x15B7DA00, 0x15B73940, 0x15B69880, + 0x15B5F7C0, 0x15B55700, 0x15B4B640, + 0x15B41580, 0x15B374C0, 0x15B2D400, + 0x15B23340, 0x15B19280, 0x15B0F1C0, + 0x15B05100, 0x15AFB040, 0x15AF0F80, + 0x15AE6EC0, 0x15ADCE00, 0x15AD2D40, + 0x15AC8C80, 0x15ABEBC0, 0x15AB4B00, + 0x15AAAA40, 0x15AA0980, 0x15A968C0, + 0x15A8C800, 0x15A82740, 0x15A78680, + 0x15A6E5C0, 0x15A64500, 0x15A5A440, + 0x15A50380, 0x15A462C0, 0x15A3C200, + 0x15A32140, 0x15A28080, 0x15A1DFC0, + 0x15A13F00, 0x15A09E40, 0x159FFD80, + 0x159F5CC0, 0x159EBC00, 0x159E1B40, + 0x159D7A80, 0x159CD9C0, 0x159C3900, + 0x159B9840, 0x159AF780, 0x159A56C0, + 0x1599B600, 0x15991540, 0x15987480, + 0x1597D3C0, 0x15973300, 0x15969240, + 0x1595F180, 0x159550C0, 0x1594B000, + 0x15940F40, 0x15936E80, 0x1592CDC0, + 0x15922D00, 0x15918C40, 0x1590EB80, + 0x15904AC0, 0x158FAA00, 0x158F0940, + 0x158E6880, 0x158DC7C0, 0x158D2700, + 0x158C8640, 0x158BE580, 0x158B44C0, + 0x158AA400, 0x158A0340, 0x15896280, + 0x1588C1C0, 0x15882100, 0x15878040, + 0x1586DF80, 0x15863EC0, 0x15859E00, + 0x1584FD40, 0x15845C80, 0x1583BBC0, + 0x15831B00, 0x15827A40, 0x1581D980, + 0x158138C0, 0x15809800, 0x157FF740, + 0x157F5680, 0x157EB5C0, 0x157E1500, + 0x157D7440, 0x157CD380, 0x157C32C0, + 0x157B9200, 0x157AF140, 0x157A5080, + 0x1579AFC0, 0x15790F00, 0x15786E40, + 0x1577CD80, 0x15772CC0, 0x15768C00, + 0x1575EB40, 0x15754A80, 0x1574A9C0, + 0x15740900, 0x15736840, 0x1572C780, + 0x157226C0, 0x15718600, 0x1570E540, + 0x15704480, 0x156FA3C0, 0x156F0300, + 0x156E6240, 0x156DC180, 0x156D20C0, + 0x156C8000, 0x156BDF40, 0x156B3E80, + 0x156A9DC0, 0x1569FD00, 0x15695C40, + 0x1568BB80, 0x15681AC0, 0x15677A00, + 0x1566D940, 0x15663880, 0x156597C0, + 0x1564F700, 0x15645640, 0x1563B580, + 0x156314C0, 0x15627400, 0x1561D340, + 0x15613280, 0x156091C0, 0x155FF100, + 0x155F5040, 0x155EAF80, 0x155E0EC0, + 0x155D6E00, 0x155CCD40, 0x155C2C80, + 0x155B8BC0, 0x155AEB00, 0x155A4A40, + 0x1559A980, 0x155908C0, 0x15586800, + 0x1557C740, 0x15572680, 0x155685C0, + 0x1555E500, 0x15554440, 0x1554A380, + 0x155402C0, 0x15536200, 0x1552C140, + 0x15522080, 0x15517FC0, 0x1550DF00, + 0x15503E40, 0x154F9D80, 0x154EFCC0, + 0x154E5C00, 0x154DBB40, 0x154D1A80, + 0x154C79C0, 0x154BD900, 0x154B3840, + 0x154A9780, 0x1549F6C0, 0x15495600, + 0x1548B540, 0x15481480, 0x154773C0, + 0x1546D300, 0x15463240, 0x15459180, + 0x1544F0C0, 0x15445000, 0x1543AF40, + 0x15430E80, 0x15426DC0, 0x1541CD00, + 0x15412C40, 0x15408B80, 0x153FEAC0, + 0x153F4A00, 0x153EA940, 0x153E0880, + 0x153D67C0, 0x153CC700, 0x153C2640, + 0x153B8580, 0x153AE4C0, 0x153A4400, + 0x1539A340, 0x15390280, 0x153861C0, + 0x1537C100, 0x15372040, 0x15367F80, + 0x1535DEC0, 0x15353E00, 0x15349D40, + 0x1533FC80, 0x15335BC0, 0x1532BB00, + 0x15321A40, 0x15317980, 0x1530D8C0, + 0x15303800, 0x152F9740, 0x152EF680, + 0x152E55C0, 0x152DB500, 0x152D1440, + 0x152C7380, 0x152BD2C0, 0x152B3200, + 0x152A9140, 0x1529F080, 0x15294FC0, + 0x1528AF00, 0x15280E40, 0x15276D80, + 0x1526CCC0, 0x15262C00, 0x15258B40, + 0x1524EA80, 0x152449C0, 0x1523A900, + 0x15230840, 0x15226780, 0x1521C6C0, + 0x15212600, 0x15208540, 0x151FE480, + 0x151F43C0, 0x151EA300, 0x151E0240, + 0x151D6180, 0x151CC0C0, 0x151C2000, + 0x151B7F40, 0x151ADE80, 0x151A3DC0, + 0x15199D00, 0x1518FC40, 0x15185B80, + 0x1517BAC0, 0x15171A00, 0x15167940, + 0x1515D880, 0x151537C0, 0x15149700, + 0x1513F640, 0x15135580, 0x1512B4C0, + 0x15121400, 0x15117340, 0x1510D280, + 0x151031C0, 0x150F9100, 0x150EF040, + 0x150E4F80, 0x150DAEC0, 0x150D0E00, + 0x150C6D40, 0x150BCC80, 0x150B2BC0, + 0x150A8B00, 0x1509EA40, 0x15094980, + 0x1508A8C0, 0x15080800, 0x15076740, + 0x1506C680, 0x150625C0, 0x15058500, + 0x1504E440, 0x15044380, 0x1503A2C0, + 0x15030200, 0x15026140, 0x1501C080, + 0x15011FC0, 0x15007F00, 0x14FFDE40, + 0x14FF3D80, 0x14FE9CC0, 0x14FDFC00, + 0x14FD5B40, 0x14FCBA80, 0x14FC19C0, + 0x14FB7900, 0x14FAD840, 0x14FA3780, + 0x14F996C0, 0x14F8F600, 0x14F85540, + 0x14F7B480, 0x14F713C0, 0x14F67300, + 0x14F5D240, 0x14F53180, 0x14F490C0, + 0x14F3F000, 0x14F34F40, 0x14F2AE80, + 0x14F20DC0, 0x14F16D00, 0x14F0CC40, + 0x14F02B80, 0x14EF8AC0, 0x14EEEA00, + 0x14EE4940, 0x14EDA880, 0x14ED07C0, + 0x14EC6700, 0x14EBC640, 0x14EB2580, + 0x14EA84C0, 0x14E9E400, 0x14E94340, + 0x14E8A280, 0x14E801C0, 0x14E76100, + 0x14E6C040, 0x14E61F80, 0x14E57EC0, + 0x14E4DE00, 0x14E43D40, 0x14E39C80, + 0x14E2FBC0, 0x14E25B00, 0x14E1BA40, + 0x14E11980, 0x14E078C0, 0x14DFD800, + 0x14DF3740, 0x14DE9680, 0x14DDF5C0, + 0x14DD5500, 0x14DCB440, 0x14DC1380, + 0x14DB72C0, 0x14DAD200, 0x14DA3140, + 0x14D99080, 0x14D8EFC0, 0x14D84F00, + 0x14D7AE40, 0x14D70D80, 0x14D66CC0, + 0x14D5CC00, 0x14D52B40, 0x14D48A80, + 0x14D3E9C0, 0x14D34900, 0x14D2A840, + 0x14D20780, 0x14D166C0, 0x14D0C600, + 0x14D02540, 0x14CF8480, 0x14CEE3C0, + 0x14CE4300, 0x14CDA240, 0x14CD0180, + 0x14CC60C0, 0x14CBC000, 0x14CB1F40, + 0x14CA7E80, 0x14C9DDC0, 0x14C93D00, + 0x14C89C40, 0x14C7FB80, 0x14C75AC0, + 0x14C6BA00, 0x14C61940, 0x14C57880, + 0x14C4D7C0, 0x14C43700, 0x14C39640, + 0x14C2F580, 0x14C254C0, 0x14C1B400, + 0x14C11340, 0x14C07280, 0x14BFD1C0, + 0x14BF3100, 0x14BE9040, 0x14BDEF80, + 0x14BD4EC0, 0x14BCAE00, 0x14BC0D40, + 0x14BB6C80, 0x14BACBC0, 0x14BA2B00, + 0x14B98A40, 0x14B8E980, 0x14B848C0, + 0x14B7A800, 0x14B70740, 0x14B66680, + 0x14B5C5C0, 0x14B52500, 0x14B48440, + 0x14B3E380, 0x14B342C0, 0x14B2A200, + 0x14B20140, 0x14B16080, 0x14B0BFC0, + 0x14B01F00, 0x14AF7E40, 0x14AEDD80, + 0x14AE3CC0, 0x14AD9C00, 0x14ACFB40, + 0x14AC5A80, 0x14ABB9C0, 0x14AB1900, + 0x14AA7840, 0x14A9D780, 0x14A936C0, + 0x14A89600, 0x14A7F540, 0x14A75480, + 0x14A6B3C0, 0x14A61300, 0x14A57240, + 0x14A4D180, 0x14A430C0, 0x14A39000, + 0x14A2EF40, 0x14A24E80, 0x14A1ADC0, + 0x14A10D00, 0x14A06C40, 0x149FCB80, + 0x149F2AC0, 0x149E8A00, 0x149DE940, + 0x149D4880, 0x149CA7C0, 0x149C0700, + 0x149B6640, 0x149AC580, 0x149A24C0, + 0x14998400, 0x1498E340, 0x14984280, + 0x1497A1C0, 0x14970100, 0x14966040, + 0x1495BF80, 0x14951EC0, 0x14947E00, + 0x1493DD40, 0x14933C80, 0x14929BC0, + 0x1491FB00, 0x14915A40, 0x1490B980, + 0x149018C0, 0x148F7800, 0x148ED740, + 0x148E3680, 0x148D95C0, 0x148CF500, + 0x148C5440, 0x148BB380, 0x148B12C0, + 0x148A7200, 0x1489D140, 0x14893080, + 0x14888FC0, 0x1487EF00, 0x14874E40, + 0x1486AD80, 0x14860CC0, 0x14856C00, + 0x1484CB40, 0x14842A80, 0x148389C0, + 0x1482E900, 0x14824840, 0x1481A780, + 0x148106C0, 0x14806600, 0x147FC540, + 0x147F2480, 0x147E83C0, 0x147DE300, + 0x147D4240, 0x147CA180, 0x147C00C0, + 0x147B6000, 0x147ABF40, 0x147A1E80, + 0x14797DC0, 0x1478DD00, 0x14783C40, + 0x14779B80, 0x1476FAC0, 0x14765A00, + 0x1475B940, 0x14751880, 0x147477C0, + 0x1473D700, 0x14733640, 0x14729580, + 0x1471F4C0, 0x14715400, 0x1470B340, + 0x14701280, 0x146F71C0, 0x146ED100, + 0x146E3040, 0x146D8F80, 0x146CEEC0, + 0x146C4E00, 0x146BAD40, 0x146B0C80, + 0x146A6BC0, 0x1469CB00, 0x14692A40, + 0x14688980, 0x1467E8C0, 0x14674800, + 0x1466A740, 0x14660680, 0x146565C0, + 0x1464C500, 0x14642440, 0x14638380, + 0x1462E2C0, 0x14624200, 0x1461A140, + 0x14610080, 0x14605FC0, 0x145FBF00, + 0x145F1E40, 0x145E7D80, 0x145DDCC0, + 0x145D3C00, 0x145C9B40, 0x145BFA80, + 0x145B59C0, 0x145AB900, 0x145A1840, + 0x14597780, 0x1458D6C0, 0x14583600, + 0x14579540, 0x1456F480, 0x145653C0, + 0x1455B300, 0x14551240, 0x14547180, + 0x1453D0C0, 0x14533000, 0x14528F40, + 0x1451EE80, 0x14514DC0, 0x1450AD00, + 0x14500C40, 0x144F6B80, 0x144ECAC0, + 0x144E2A00, 0x144D8940, 0x144CE880, + 0x144C47C0, 0x144BA700, 0x144B0640, + 0x144A6580, 0x1449C4C0, 0x14492400, + 0x14488340, 0x1447E280, 0x144741C0, + 0x1446A100, 0x14460040, 0x14455F80, + 0x1444BEC0, 0x14441E00, 0x14437D40, + 0x1442DC80, 0x14423BC0, 0x14419B00, + 0x1440FA40, 0x14405980, 0x143FB8C0, + 0x143F1800, 0x143E7740, 0x143DD680, + 0x143D35C0, 0x143C9500, 0x143BF440, + 0x143B5380, 0x143AB2C0, 0x143A1200, + 0x14397140, 0x1438D080, 0x14382FC0, + 0x14378F00, 0x1436EE40, 0x14364D80, + 0x1435ACC0, 0x14350C00, 0x14346B40, + 0x1433CA80, 0x143329C0, 0x14328900, + 0x1431E840, 0x14314780, 0x1430A6C0, + 0x14300600, 0x142F6540, 0x142EC480, + 0x142E23C0, 0x142D8300, 0x142CE240, + 0x142C4180, 0x142BA0C0, 0x142B0000, + 0x142A5F40, 0x1429BE80, 0x14291DC0, + 0x14287D00, 0x1427DC40, 0x14273B80, + 0x14269AC0, 0x1425FA00, 0x14255940, + 0x1424B880, 0x142417C0, 0x14237700, + 0x1422D640, 0x14223580, 0x142194C0, + 0x1420F400, 0x14205340, 0x141FB280, + 0x141F11C0, 0x141E7100, 0x141DD040, + 0x141D2F80, 0x141C8EC0, 0x141BEE00, + 0x141B4D40, 0x141AAC80, 0x141A0BC0, + 0x14196B00, 0x1418CA40, 0x14182980, + 0x141788C0, 0x1416E800, 0x14164740, + 0x1415A680, 0x141505C0, 0x14146500, + 0x1413C440, 0x14132380, 0x141282C0, + 0x1411E200, 0x14114140, 0x1410A080, + 0x140FFFC0, 0x140F5F00, 0x140EBE40, + 0x140E1D80, 0x140D7CC0, 0x140CDC00, + 0x140C3B40, 0x140B9A80, 0x140AF9C0, + 0x140A5900, 0x1409B840, 0x14091780, + 0x140876C0, 0x1407D600, 0x14073540, + 0x14069480, 0x1405F3C0, 0x14055300, + 0x1404B240, 0x14041180, 0x140370C0, + 0x1402D000, 0x14022F40, 0x14018E80, + 0x1400EDC0, 0x14004D00, 0x13FFAC40, + 0x13FF0B80, 0x13FE6AC0, 0x13FDCA00, + 0x13FD2940, 0x13FC8880, 0x13FBE7C0, + 0x13FB4700, 0x13FAA640, 0x13FA0580, + 0x13F964C0, 0x13F8C400, 0x13F82340, + 0x13F78280, 0x13F6E1C0, 0x13F64100, + 0x13F5A040, 0x13F4FF80, 0x13F45EC0, + 0x13F3BE00, 0x13F31D40, 0x13F27C80, + 0x13F1DBC0, 0x13F13B00, 0x13F09A40, + 0x13EFF980, 0x13EF58C0, 0x13EEB800, + 0x13EE1740, 0x13ED7680, 0x13ECD5C0, + 0x13EC3500, 0x13EB9440, 0x13EAF380, + 0x13EA52C0, 0x13E9B200, 0x13E91140, + 0x13E87080, 0x13E7CFC0, 0x13E72F00, + 0x13E68E40, 0x13E5ED80, 0x13E54CC0, + 0x13E4AC00, 0x13E40B40, 0x13E36A80, + 0x13E2C9C0, 0x13E22900, 0x13E18840, + 0x13E0E780, 0x13E046C0, 0x13DFA600, + 0x13DF0540, 0x13DE6480, 0x13DDC3C0, + 0x13DD2300, 0x13DC8240, 0x13DBE180, + 0x13DB40C0, 0x13DAA000, 0x13D9FF40, + 0x13D95E80, 0x13D8BDC0, 0x13D81D00, + 0x13D77C40, 0x13D6DB80, 0x13D63AC0, + 0x13D59A00, 0x13D4F940, 0x13D45880, + 0x13D3B7C0, 0x13D31700, 0x13D27640, + 0x13D1D580, 0x13D134C0, 0x13D09400, + 0x13CFF340, 0x13CF5280, 0x13CEB1C0, + 0x13CE1100, 0x13CD7040, 0x13CCCF80, + 0x13CC2EC0, 0x13CB8E00, 0x13CAED40, + 0x13CA4C80, 0x13C9ABC0, 0x13C90B00, + 0x13C86A40, 0x13C7C980, 0x13C728C0, + 0x13C68800, 0x13C5E740, 0x13C54680, + 0x13C4A5C0, 0x13C40500, 0x13C36440, + 0x13C2C380, 0x13C222C0, 0x13C18200, + 0x13C0E140, 0x13C04080, 0x13BF9FC0, + 0x13BEFF00, 0x13BE5E40, 0x13BDBD80, + 0x13BD1CC0, 0x13BC7C00, 0x13BBDB40, + 0x13BB3A80, 0x13BA99C0, 0x13B9F900, + 0x13B95840, 0x13B8B780, 0x13B816C0, + 0x13B77600, 0x13B6D540, 0x13B63480, + 0x13B593C0, 0x13B4F300, 0x13B45240, + 0x13B3B180, 0x13B310C0, 0x13B27000, + 0x13B1CF40, 0x13B12E80, 0x13B08DC0, + 0x13AFED00, 0x13AF4C40, 0x13AEAB80, + 0x13AE0AC0, 0x13AD6A00, 0x13ACC940, + 0x13AC2880, 0x13AB87C0, 0x13AAE700, + 0x13AA4640, 0x13A9A580, 0x13A904C0, + 0x13A86400, 0x13A7C340, 0x13A72280, + 0x13A681C0, 0x13A5E100, 0x13A54040, + 0x13A49F80, 0x13A3FEC0, 0x13A35E00, + 0x13A2BD40, 0x13A21C80, 0x13A17BC0, + 0x13A0DB00, 0x13A03A40, 0x139F9980, + 0x139EF8C0, 0x139E5800, 0x139DB740, + 0x139D1680, 0x139C75C0, 0x139BD500, + 0x139B3440, 0x139A9380, 0x1399F2C0, + 0x13995200, 0x1398B140, 0x13981080, + 0x13976FC0, 0x1396CF00, 0x13962E40, + 0x13958D80, 0x1394ECC0, 0x13944C00, + 0x1393AB40, 0x13930A80, 0x139269C0, + 0x1391C900, 0x13912840, 0x13908780, + 0x138FE6C0, 0x138F4600, 0x138EA540, + 0x138E0480, 0x138D63C0, 0x138CC300, + 0x138C2240, 0x138B8180, 0x138AE0C0, + 0x138A4000, 0x13899F40, 0x1388FE80, + 0x13885DC0, 0x1387BD00, 0x13871C40, + 0x13867B80, 0x1385DAC0, 0x13853A00, + 0x13849940, 0x1383F880, 0x138357C0, + 0x1382B700, 0x13821640, 0x13817580, + 0x1380D4C0, 0x13803400, 0x137F9340, + 0x137EF280, 0x137E51C0, 0x137DB100, + 0x137D1040, 0x137C6F80, 0x137BCEC0, + 0x137B2E00, 0x137A8D40, 0x1379EC80, + 0x13794BC0, 0x1378AB00, 0x13780A40, + 0x13776980, 0x1376C8C0, 0x13762800, + 0x13758740, 0x1374E680, 0x137445C0, + 0x1373A500, 0x13730440, 0x13726380, + 0x1371C2C0, 0x13712200, 0x13708140, + 0x136FE080, 0x136F3FC0, 0x136E9F00, + 0x136DFE40, 0x136D5D80, 0x136CBCC0, + 0x136C1C00, 0x136B7B40, 0x136ADA80, + 0x136A39C0, 0x13699900, 0x1368F840, + 0x13685780, 0x1367B6C0, 0x13671600, + 0x13667540, 0x1365D480, 0x136533C0, + 0x13649300, 0x1363F240, 0x13635180, + 0x1362B0C0, 0x13621000, 0x13616F40, + 0x1360CE80, 0x13602DC0, 0x135F8D00, + 0x135EEC40, 0x135E4B80, 0x135DAAC0, + 0x135D0A00, 0x135C6940, 0x135BC880, + 0x135B27C0, 0x135A8700, 0x1359E640, + 0x13594580, 0x1358A4C0, 0x13580400, + 0x13576340, 0x1356C280, 0x135621C0, + 0x13558100, 0x1354E040, 0x13543F80, + 0x13539EC0, 0x1352FE00, 0x13525D40, + 0x1351BC80, 0x13511BC0, 0x13507B00, + 0x134FDA40, 0x134F3980, 0x134E98C0, + 0x134DF800, 0x134D5740, 0x134CB680, + 0x134C15C0, 0x134B7500, 0x134AD440, + 0x134A3380, 0x134992C0, 0x1348F200, + 0x13485140, 0x1347B080, 0x13470FC0, + 0x13466F00, 0x1345CE40, 0x13452D80, + 0x13448CC0, 0x1343EC00, 0x13434B40, + 0x1342AA80, 0x134209C0, 0x13416900, + 0x1340C840, 0x13402780, 0x133F86C0, + 0x133EE600, 0x133E4540, 0x133DA480, + 0x133D03C0, 0x133C6300, 0x133BC240, + 0x133B2180, 0x133A80C0, 0x1339E000, + 0x13393F40, 0x13389E80, 0x1337FDC0, + 0x13375D00, 0x1336BC40, 0x13361B80, + 0x13357AC0, 0x1334DA00, 0x13343940, + 0x13339880, 0x1332F7C0, 0x13325700, + 0x1331B640, 0x13311580, 0x133074C0, + 0x132FD400, 0x132F3340, 0x132E9280, + 0x132DF1C0, 0x132D5100, 0x132CB040, + 0x132C0F80, 0x132B6EC0, 0x132ACE00, + 0x132A2D40, 0x13298C80, 0x1328EBC0, + 0x13284B00, 0x1327AA40, 0x13270980, + 0x132668C0, 0x1325C800, 0x13252740, + 0x13248680, 0x1323E5C0, 0x13234500, + 0x1322A440, 0x13220380, 0x132162C0, + 0x1320C200, 0x13202140, 0x131F8080, + 0x131EDFC0, 0x131E3F00, 0x131D9E40, + 0x131CFD80, 0x131C5CC0, 0x131BBC00, + 0x131B1B40, 0x131A7A80, 0x1319D9C0, + 0x13193900, 0x13189840, 0x1317F780, + 0x131756C0, 0x1316B600, 0x13161540, + 0x13157480, 0x1314D3C0, 0x13143300, + 0x13139240, 0x1312F180, 0x131250C0, + 0x1311B000, 0x13110F40, 0x13106E80, + 0x130FCDC0, 0x130F2D00, 0x130E8C40, + 0x130DEB80, 0x130D4AC0, 0x130CAA00, + 0x130C0940, 0x130B6880, 0x130AC7C0, + 0x130A2700, 0x13098640, 0x1308E580, + 0x130844C0, 0x1307A400, 0x13070340, + 0x13066280, 0x1305C1C0, 0x13052100, + 0x13048040, 0x1303DF80, 0x13033EC0, + 0x13029E00, 0x1301FD40, 0x13015C80, + 0x1300BBC0, 0x13001B00, 0x12FF7A40, + 0x12FED980, 0x12FE38C0, 0x12FD9800, + 0x12FCF740, 0x12FC5680, 0x12FBB5C0, + 0x12FB1500, 0x12FA7440, 0x12F9D380, + 0x12F932C0, 0x12F89200, 0x12F7F140, + 0x12F75080, 0x12F6AFC0, 0x12F60F00, + 0x12F56E40, 0x12F4CD80, 0x12F42CC0, + 0x12F38C00, 0x12F2EB40, 0x12F24A80, + 0x12F1A9C0, 0x12F10900, 0x12F06840, + 0x12EFC780, 0x12EF26C0, 0x12EE8600, + 0x12EDE540, 0x12ED4480, 0x12ECA3C0, + 0x12EC0300, 0x12EB6240, 0x12EAC180, + 0x12EA20C0, 0x12E98000, 0x12E8DF40, + 0x12E83E80, 0x12E79DC0, 0x12E6FD00, + 0x12E65C40, 0x12E5BB80, 0x12E51AC0, + 0x12E47A00, 0x12E3D940, 0x12E33880, + 0x12E297C0, 0x12E1F700, 0x12E15640, + 0x12E0B580, 0x12E014C0, 0x12DF7400, + 0x12DED340, 0x12DE3280, 0x12DD91C0, + 0x12DCF100, 0x12DC5040, 0x12DBAF80, + 0x12DB0EC0, 0x12DA6E00, 0x12D9CD40, + 0x12D92C80, 0x12D88BC0, 0x12D7EB00, + 0x12D74A40, 0x12D6A980, 0x12D608C0, + 0x12D56800, 0x12D4C740, 0x12D42680, + 0x12D385C0, 0x12D2E500, 0x12D24440, + 0x12D1A380, 0x12D102C0, 0x12D06200, + 0x12CFC140, 0x12CF2080, 0x12CE7FC0, + 0x12CDDF00, 0x12CD3E40, 0x12CC9D80, + 0x12CBFCC0, 0x12CB5C00, 0x12CABB40, + 0x12CA1A80, 0x12C979C0, 0x12C8D900, + 0x12C83840, 0x12C79780, 0x12C6F6C0, + 0x12C65600, 0x12C5B540, 0x12C51480, + 0x12C473C0, 0x12C3D300, 0x12C33240, + 0x12C29180, 0x12C1F0C0, 0x12C15000, + 0x12C0AF40, 0x12C00E80, 0x12BF6DC0, + 0x12BECD00, 0x12BE2C40, 0x12BD8B80, + 0x12BCEAC0, 0x12BC4A00, 0x12BBA940, + 0x12BB0880, 0x12BA67C0, 0x12B9C700, + 0x12B92640, 0x12B88580, 0x12B7E4C0, + 0x12B74400, 0x12B6A340, 0x12B60280, + 0x12B561C0, 0x12B4C100, 0x12B42040, + 0x12B37F80, 0x12B2DEC0, 0x12B23E00, + 0x12B19D40, 0x12B0FC80, 0x12B05BC0, + 0x12AFBB00, 0x12AF1A40, 0x12AE7980, + 0x12ADD8C0, 0x12AD3800, 0x12AC9740, + 0x12ABF680, 0x12AB55C0, 0x12AAB500, + 0x12AA1440, 0x12A97380, 0x12A8D2C0, + 0x12A83200, 0x12A79140, 0x12A6F080, + 0x12A64FC0, 0x12A5AF00, 0x12A50E40, + 0x12A46D80, 0x12A3CCC0, 0x12A32C00, + 0x12A28B40, 0x12A1EA80, 0x12A149C0, + 0x12A0A900, 0x12A00840, 0x129F6780, + 0x129EC6C0, 0x129E2600, 0x129D8540, + 0x129CE480, 0x129C43C0, 0x129BA300, + 0x129B0240, 0x129A6180, 0x1299C0C0, + 0x12992000, 0x12987F40, 0x1297DE80, + 0x12973DC0, 0x12969D00, 0x1295FC40, + 0x12955B80, 0x1294BAC0, 0x12941A00, + 0x12937940, 0x1292D880, 0x129237C0, + 0x12919700, 0x1290F640, 0x12905580, + 0x128FB4C0, 0x128F1400, 0x128E7340, + 0x128DD280, 0x128D31C0, 0x128C9100, + 0x128BF040, 0x128B4F80, 0x128AAEC0, + 0x128A0E00, 0x12896D40, 0x1288CC80, + 0x12882BC0, 0x12878B00, 0x1286EA40, + 0x12864980, 0x1285A8C0, 0x12850800, + 0x12846740, 0x1283C680, 0x128325C0, + 0x12828500, 0x1281E440, 0x12814380, + 0x1280A2C0, 0x12800200, 0x127F6140, + 0x127EC080, 0x127E1FC0, 0x127D7F00, + 0x127CDE40, 0x127C3D80, 0x127B9CC0, + 0x127AFC00, 0x127A5B40, 0x1279BA80, + 0x127919C0, 0x12787900, 0x1277D840, + 0x12773780, 0x127696C0, 0x1275F600, + 0x12755540, 0x1274B480, 0x127413C0, + 0x12737300, 0x1272D240, 0x12723180, + 0x127190C0, 0x1270F000, 0x12704F40, + 0x126FAE80, 0x126F0DC0, 0x126E6D00, + 0x126DCC40, 0x126D2B80, 0x126C8AC0, + 0x126BEA00, 0x126B4940, 0x126AA880, + 0x126A07C0, 0x12696700, 0x1268C640, + 0x12682580, 0x126784C0, 0x1266E400, + 0x12664340, 0x1265A280, 0x126501C0, + 0x12646100, 0x1263C040, 0x12631F80, + 0x12627EC0, 0x1261DE00, 0x12613D40, + 0x12609C80, 0x125FFBC0, 0x125F5B00, + 0x125EBA40, 0x125E1980, 0x125D78C0, + 0x125CD800, 0x125C3740, 0x125B9680, + 0x125AF5C0, 0x125A5500, 0x1259B440, + 0x12591380, 0x125872C0, 0x1257D200, + 0x12573140, 0x12569080, 0x1255EFC0, + 0x12554F00, 0x1254AE40, 0x12540D80, + 0x12536CC0, 0x1252CC00, 0x12522B40, + 0x12518A80, 0x1250E9C0, 0x12504900, + 0x124FA840, 0x124F0780, 0x124E66C0, + 0x124DC600, 0x124D2540, 0x124C8480, + 0x124BE3C0, 0x124B4300, 0x124AA240, + 0x124A0180, 0x124960C0, 0x1248C000, + 0x12481F40, 0x12477E80, 0x1246DDC0, + 0x12463D00, 0x12459C40, 0x1244FB80, + 0x12445AC0, 0x1243BA00, 0x12431940, + 0x12427880, 0x1241D7C0, 0x12413700, + 0x12409640, 0x123FF580, 0x123F54C0, + 0x123EB400, 0x123E1340, 0x123D7280, + 0x123CD1C0, 0x123C3100, 0x123B9040, + 0x123AEF80, 0x123A4EC0, 0x1239AE00, + 0x12390D40, 0x12386C80, 0x1237CBC0, + 0x12372B00, 0x12368A40, 0x1235E980, + 0x123548C0, 0x1234A800, 0x12340740, + 0x12336680, 0x1232C5C0, 0x12322500, + 0x12318440, 0x1230E380, 0x123042C0, + 0x122FA200, 0x122F0140, 0x122E6080, + 0x122DBFC0, 0x122D1F00, 0x122C7E40, + 0x122BDD80, 0x122B3CC0, 0x122A9C00, + 0x1229FB40, 0x12295A80, 0x1228B9C0, + 0x12281900, 0x12277840, 0x1226D780, + 0x122636C0, 0x12259600, 0x1224F540, + 0x12245480, 0x1223B3C0, 0x12231300, + 0x12227240, 0x1221D180, 0x122130C0, + 0x12209000, 0x121FEF40, 0x121F4E80, + 0x121EADC0, 0x121E0D00, 0x121D6C40, + 0x121CCB80, 0x121C2AC0, 0x121B8A00, + 0x121AE940, 0x121A4880, 0x1219A7C0, + 0x12190700, 0x12186640, 0x1217C580, + 0x121724C0, 0x12168400, 0x1215E340, + 0x12154280, 0x1214A1C0, 0x12140100, + 0x12136040, 0x1212BF80, 0x12121EC0, + 0x12117E00, 0x1210DD40, 0x12103C80, + 0x120F9BC0, 0x120EFB00, 0x120E5A40, + 0x120DB980, 0x120D18C0, 0x120C7800, + 0x120BD740, 0x120B3680, 0x120A95C0, + 0x1209F500, 0x12095440, 0x1208B380, + 0x120812C0, 0x12077200, 0x1206D140, + 0x12063080, 0x12058FC0, 0x1204EF00, + 0x12044E40, 0x1203AD80, 0x12030CC0, + 0x12026C00, 0x1201CB40, 0x12012A80, + 0x120089C0, 0x11FFE900, 0x11FF4840, + 0x11FEA780, 0x11FE06C0, 0x11FD6600, + 0x11FCC540, 0x11FC2480, 0x11FB83C0, + 0x11FAE300, 0x11FA4240, 0x11F9A180, + 0x11F900C0, 0x11F86000, 0x11F7BF40, + 0x11F71E80, 0x11F67DC0, 0x11F5DD00, + 0x11F53C40, 0x11F49B80, 0x11F3FAC0, + 0x11F35A00, 0x11F2B940, 0x11F21880, + 0x11F177C0, 0x11F0D700, 0x11F03640, + 0x11EF9580, 0x11EEF4C0, 0x11EE5400, + 0x11EDB340, 0x11ED1280, 0x11EC71C0, + 0x11EBD100, 0x11EB3040, 0x11EA8F80, + 0x11E9EEC0, 0x11E94E00, 0x11E8AD40, + 0x11E80C80, 0x11E76BC0, 0x11E6CB00, + 0x11E62A40, 0x11E58980, 0x11E4E8C0, + 0x11E44800, 0x11E3A740, 0x11E30680, + 0x11E265C0, 0x11E1C500, 0x11E12440, + 0x11E08380, 0x11DFE2C0, 0x11DF4200, + 0x11DEA140, 0x11DE0080, 0x11DD5FC0, + 0x11DCBF00, 0x11DC1E40, 0x11DB7D80, + 0x11DADCC0, 0x11DA3C00, 0x11D99B40, + 0x11D8FA80, 0x11D859C0, 0x11D7B900, + 0x11D71840, 0x11D67780, 0x11D5D6C0, + 0x11D53600, 0x11D49540, 0x11D3F480, + 0x11D353C0, 0x11D2B300, 0x11D21240, + 0x11D17180, 0x11D0D0C0, 0x11D03000, + 0x11CF8F40, 0x11CEEE80, 0x11CE4DC0, + 0x11CDAD00, 0x11CD0C40, 0x11CC6B80, + 0x11CBCAC0, 0x11CB2A00, 0x11CA8940, + 0x11C9E880, 0x11C947C0, 0x11C8A700, + 0x11C80640, 0x11C76580, 0x11C6C4C0, + 0x11C62400, 0x11C58340, 0x11C4E280, + 0x11C441C0, 0x11C3A100, 0x11C30040, + 0x11C25F80, 0x11C1BEC0, 0x11C11E00, + 0x11C07D40, 0x11BFDC80, 0x11BF3BC0, + 0x11BE9B00, 0x11BDFA40, 0x11BD5980, + 0x11BCB8C0, 0x11BC1800, 0x11BB7740, + 0x11BAD680, 0x11BA35C0, 0x11B99500, + 0x11B8F440, 0x11B85380, 0x11B7B2C0, + 0x11B71200, 0x11B67140, 0x11B5D080, + 0x11B52FC0, 0x11B48F00, 0x11B3EE40, + 0x11B34D80, 0x11B2ACC0, 0x11B20C00, + 0x11B16B40, 0x11B0CA80, 0x11B029C0, + 0x11AF8900, 0x11AEE840, 0x11AE4780, + 0x11ADA6C0, 0x11AD0600, 0x11AC6540, + 0x11ABC480, 0x11AB23C0, 0x11AA8300, + 0x11A9E240, 0x11A94180, 0x11A8A0C0, + 0x11A80000, 0x11A767C0, 0x11A6CF80, + 0x11A63740, 0x11A59F00, 0x11A506C0, + 0x11A46E80, 0x11A3D640, 0x11A33E00, + 0x11A2A5C0, 0x11A20D80, 0x11A17540, + 0x11A0DD00, 0x11A044C0, 0x119FAC80, + 0x119F1440, 0x119E7C00, 0x119DE3C0, + 0x119D4B80, 0x119CB340, 0x119C1B00, + 0x119B82C0, 0x119AEA80, 0x119A5240, + 0x1199BA00, 0x119921C0, 0x11988980, + 0x1197F140, 0x11975900, 0x1196C0C0, + 0x11962880, 0x11959040, 0x1194F800, + 0x11945FC0, 0x1193C780, 0x11932F40, + 0x11929700, 0x1191FEC0, 0x11916680, + 0x1190CE40, 0x11903600, 0x118F9DC0, + 0x118F0580, 0x118E6D40, 0x118DD500, + 0x118D3CC0, 0x118CA480, 0x118C0C40, + 0x118B7400, 0x118ADBC0, 0x118A4380, + 0x1189AB40, 0x11891300, 0x11887AC0, + 0x1187E280, 0x11874A40, 0x1186B200, + 0x118619C0, 0x11858180, 0x1184E940, + 0x11845100, 0x1183B8C0, 0x11832080, + 0x11828840, 0x1181F000, 0x118157C0, + 0x1180BF80, 0x11802740, 0x117F8F00, + 0x117EF6C0, 0x117E5E80, 0x117DC640, + 0x117D2E00, 0x117C95C0, 0x117BFD80, + 0x117B6540, 0x117ACD00, 0x117A34C0, + 0x11799C80, 0x11790440, 0x11786C00, + 0x1177D3C0, 0x11773B80, 0x1176A340, + 0x11760B00, 0x117572C0, 0x1174DA80, + 0x11744240, 0x1173AA00, 0x117311C0, + 0x11727980, 0x1171E140, 0x11714900, + 0x1170B0C0, 0x11701880, 0x116F8040, + 0x116EE800, 0x116E4FC0, 0x116DB780, + 0x116D1F40, 0x116C8700, 0x116BEEC0, + 0x116B5680, 0x116ABE40, 0x116A2600, + 0x11698DC0, 0x1168F580, 0x11685D40, + 0x1167C500, 0x11672CC0, 0x11669480, + 0x1165FC40, 0x11656400, 0x1164CBC0, + 0x11643380, 0x11639B40, 0x11630300, + 0x11626AC0, 0x1161D280, 0x11613A40, + 0x1160A200, 0x116009C0, 0x115F7180, + 0x115ED940, 0x115E4100, 0x115DA8C0, + 0x115D1080, 0x115C7840, 0x115BE000, + 0x115B47C0, 0x115AAF80, 0x115A1740, + 0x11597F00, 0x1158E6C0, 0x11584E80, + 0x1157B640, 0x11571E00, 0x115685C0, + 0x1155ED80, 0x11555540, 0x1154BD00, + 0x115424C0, 0x11538C80, 0x1152F440, + 0x11525C00, 0x1151C3C0, 0x11512B80, + 0x11509340, 0x114FFB00, 0x114F62C0, + 0x114ECA80, 0x114E3240, 0x114D9A00, + 0x114D01C0, 0x114C6980, 0x114BD140, + 0x114B3900, 0x114AA0C0, 0x114A0880, + 0x11497040, 0x1148D800, 0x11483FC0, + 0x1147A780, 0x11470F40, 0x11467700, + 0x1145DEC0, 0x11454680, 0x1144AE40, + 0x11441600, 0x11437DC0, 0x1142E580, + 0x11424D40, 0x1141B500, 0x11411CC0, + 0x11408480, 0x113FEC40, 0x113F5400, + 0x113EBBC0, 0x113E2380, 0x113D8B40, + 0x113CF300, 0x113C5AC0, 0x113BC280, + 0x113B2A40, 0x113A9200, 0x1139F9C0, + 0x11396180, 0x1138C940, 0x11383100, + 0x113798C0, 0x11370080, 0x11366840, + 0x1135D000, 0x113537C0, 0x11349F80, + 0x11340740, 0x11336F00, 0x1132D6C0, + 0x11323E80, 0x1131A640, 0x11310E00, + 0x113075C0, 0x112FDD80, 0x112F4540, + 0x112EAD00, 0x112E14C0, 0x112D7C80, + 0x112CE440, 0x112C4C00, 0x112BB3C0, + 0x112B1B80, 0x112A8340, 0x1129EB00, + 0x112952C0, 0x1128BA80, 0x11282240, + 0x11278A00, 0x1126F1C0, 0x11265980, + 0x1125C140, 0x11252900, 0x112490C0, + 0x1123F880, 0x11236040, 0x1122C800, + 0x11222FC0, 0x11219780, 0x1120FF40, + 0x11206700, 0x111FCEC0, 0x111F3680, + 0x111E9E40, 0x111E0600, 0x111D6DC0, + 0x111CD580, 0x111C3D40, 0x111BA500, + 0x111B0CC0, 0x111A7480, 0x1119DC40, + 0x11194400, 0x1118ABC0, 0x11181380, + 0x11177B40, 0x1116E300, 0x11164AC0, + 0x1115B280, 0x11151A40, 0x11148200, + 0x1113E9C0, 0x11135180, 0x1112B940, + 0x11122100, 0x111188C0, 0x1110F080, + 0x11105840, 0x110FC000, 0x110F27C0, + 0x110E8F80, 0x110DF740, 0x110D5F00, + 0x110CC6C0, 0x110C2E80, 0x110B9640, + 0x110AFE00, 0x110A65C0, 0x1109CD80, + 0x11093540, 0x11089D00, 0x110804C0, + 0x11076C80, 0x1106D440, 0x11063C00, + 0x1105A3C0, 0x11050B80, 0x11047340, + 0x1103DB00, 0x110342C0, 0x1102AA80, + 0x11021240, 0x11017A00, 0x1100E1C0, + 0x11004980, 0x10FFB140, 0x10FF1900, + 0x10FE80C0, 0x10FDE880, 0x10FD5040, + 0x10FCB800, 0x10FC1FC0, 0x10FB8780, + 0x10FAEF40, 0x10FA5700, 0x10F9BEC0, + 0x10F92680, 0x10F88E40, 0x10F7F600, + 0x10F75DC0, 0x10F6C580, 0x10F62D40, + 0x10F59500, 0x10F4FCC0, 0x10F46480, + 0x10F3CC40, 0x10F33400, 0x10F29BC0, + 0x10F20380, 0x10F16B40, 0x10F0D300, + 0x10F03AC0, 0x10EFA280, 0x10EF0A40, + 0x10EE7200, 0x10EDD9C0, 0x10ED4180, + 0x10ECA940, 0x10EC1100, 0x10EB78C0, + 0x10EAE080, 0x10EA4840, 0x10E9B000, + 0x10E917C0, 0x10E87F80, 0x10E7E740, + 0x10E74F00, 0x10E6B6C0, 0x10E61E80, + 0x10E58640, 0x10E4EE00, 0x10E455C0, + 0x10E3BD80, 0x10E32540, 0x10E28D00, + 0x10E1F4C0, 0x10E15C80, 0x10E0C440, + 0x10E02C00, 0x10DF93C0, 0x10DEFB80, + 0x10DE6340, 0x10DDCB00, 0x10DD32C0, + 0x10DC9A80, 0x10DC0240, 0x10DB6A00, + 0x10DAD1C0, 0x10DA3980, 0x10D9A140, + 0x10D90900, 0x10D870C0, 0x10D7D880, + 0x10D74040, 0x10D6A800, 0x10D60FC0, + 0x10D57780, 0x10D4DF40, 0x10D44700, + 0x10D3AEC0, 0x10D31680, 0x10D27E40, + 0x10D1E600, 0x10D14DC0, 0x10D0B580, + 0x10D01D40, 0x10CF8500, 0x10CEECC0, + 0x10CE5480, 0x10CDBC40, 0x10CD2400, + 0x10CC8BC0, 0x10CBF380, 0x10CB5B40, + 0x10CAC300, 0x10CA2AC0, 0x10C99280, + 0x10C8FA40, 0x10C86200, 0x10C7C9C0, + 0x10C73180, 0x10C69940, 0x10C60100, + 0x10C568C0, 0x10C4D080, 0x10C43840, + 0x10C3A000, 0x10C307C0, 0x10C26F80, + 0x10C1D740, 0x10C13F00, 0x10C0A6C0, + 0x10C00E80, 0x10BF7640, 0x10BEDE00, + 0x10BE45C0, 0x10BDAD80, 0x10BD1540, + 0x10BC7D00, 0x10BBE4C0, 0x10BB4C80, + 0x10BAB440, 0x10BA1C00, 0x10B983C0, + 0x10B8EB80, 0x10B85340, 0x10B7BB00, + 0x10B722C0, 0x10B68A80, 0x10B5F240, + 0x10B55A00, 0x10B4C1C0, 0x10B42980, + 0x10B39140, 0x10B2F900, 0x10B260C0, + 0x10B1C880, 0x10B13040, 0x10B09800, + 0x10AFFFC0, 0x10AF6780, 0x10AECF40, + 0x10AE3700, 0x10AD9EC0, 0x10AD0680, + 0x10AC6E40, 0x10ABD600, 0x10AB3DC0, + 0x10AAA580, 0x10AA0D40, 0x10A97500, + 0x10A8DCC0, 0x10A84480, 0x10A7AC40, + 0x10A71400, 0x10A67BC0, 0x10A5E380, + 0x10A54B40, 0x10A4B300, 0x10A41AC0, + 0x10A38280, 0x10A2EA40, 0x10A25200, + 0x10A1B9C0, 0x10A12180, 0x10A08940, + 0x109FF100, 0x109F58C0, 0x109EC080, + 0x109E2840, 0x109D9000, 0x109CF7C0, + 0x109C5F80, 0x109BC740, 0x109B2F00, + 0x109A96C0, 0x1099FE80, 0x10996640, + 0x1098CE00, 0x109835C0, 0x10979D80, + 0x10970540, 0x10966D00, 0x1095D4C0, + 0x10953C80, 0x1094A440, 0x10940C00, + 0x109373C0, 0x1092DB80, 0x10924340, + 0x1091AB00, 0x109112C0, 0x10907A80, + 0x108FE240, 0x108F4A00, 0x108EB1C0, + 0x108E1980, 0x108D8140, 0x108CE900, + 0x108C50C0, 0x108BB880, 0x108B2040, + 0x108A8800, 0x1089EFC0, 0x10895780, + 0x1088BF40, 0x10882700, 0x10878EC0, + 0x1086F680, 0x10865E40, 0x1085C600, + 0x10852DC0, 0x10849580, 0x1083FD40, + 0x10836500, 0x1082CCC0, 0x10823480, + 0x10819C40, 0x10810400, 0x10806BC0, + 0x107FD380, 0x107F3B40, 0x107EA300, + 0x107E0AC0, 0x107D7280, 0x107CDA40, + 0x107C4200, 0x107BA9C0, 0x107B1180, + 0x107A7940, 0x1079E100, 0x107948C0, + 0x1078B080, 0x10781840, 0x10778000, + 0x1076E7C0, 0x10764F80, 0x1075B740, + 0x10751F00, 0x107486C0, 0x1073EE80, + 0x10735640, 0x1072BE00, 0x107225C0, + 0x10718D80, 0x1070F540, 0x10705D00, + 0x106FC4C0, 0x106F2C80, 0x106E9440, + 0x106DFC00, 0x106D63C0, 0x106CCB80, + 0x106C3340, 0x106B9B00, 0x106B02C0, + 0x106A6A80, 0x1069D240, 0x10693A00, + 0x1068A1C0, 0x10680980, 0x10677140, + 0x1066D900, 0x106640C0, 0x1065A880, + 0x10651040, 0x10647800, 0x1063DFC0, + 0x10634780, 0x1062AF40, 0x10621700, + 0x10617EC0, 0x1060E680, 0x10604E40, + 0x105FB600, 0x105F1DC0, 0x105E8580, + 0x105DED40, 0x105D5500, 0x105CBCC0, + 0x105C2480, 0x105B8C40, 0x105AF400, + 0x105A5BC0, 0x1059C380, 0x10592B40, + 0x10589300, 0x1057FAC0, 0x10576280, + 0x1056CA40, 0x10563200, 0x105599C0, + 0x10550180, 0x10546940, 0x1053D100, + 0x105338C0, 0x1052A080, 0x10520840, + 0x10517000, 0x1050D7C0, 0x10503F80, + 0x104FA740, 0x104F0F00, 0x104E76C0, + 0x104DDE80, 0x104D4640, 0x104CAE00, + 0x104C15C0, 0x104B7D80, 0x104AE540, + 0x104A4D00, 0x1049B4C0, 0x10491C80, + 0x10488440, 0x1047EC00, 0x104753C0, + 0x1046BB80, 0x10462340, 0x10458B00, + 0x1044F2C0, 0x10445A80, 0x1043C240, + 0x10432A00, 0x104291C0, 0x1041F980, + 0x10416140, 0x1040C900, 0x104030C0, + 0x103F9880, 0x103F0040, 0x103E6800, + 0x103DCFC0, 0x103D3780, 0x103C9F40, + 0x103C0700, 0x103B6EC0, 0x103AD680, + 0x103A3E40, 0x1039A600, 0x10390DC0, + 0x10387580, 0x1037DD40, 0x10374500, + 0x1036ACC0, 0x10361480, 0x10357C40, + 0x1034E400, 0x10344BC0, 0x1033B380, + 0x10331B40, 0x10328300, 0x1031EAC0, + 0x10315280, 0x1030BA40, 0x10302200, + 0x102F89C0, 0x102EF180, 0x102E5940, + 0x102DC100, 0x102D28C0, 0x102C9080, + 0x102BF840, 0x102B6000, 0x102AC7C0, + 0x102A2F80, 0x10299740, 0x1028FF00, + 0x102866C0, 0x1027CE80, 0x10273640, + 0x10269E00, 0x102605C0, 0x10256D80, + 0x1024D540, 0x10243D00, 0x1023A4C0, + 0x10230C80, 0x10227440, 0x1021DC00, + 0x102143C0, 0x1020AB80, 0x10201340, + 0x101F7B00, 0x101EE2C0, 0x101E4A80, + 0x101DB240, 0x101D1A00, 0x101C81C0, + 0x101BE980, 0x101B5140, 0x101AB900, + 0x101A20C0, 0x10198880, 0x1018F040, + 0x10185800, 0x1017BFC0, 0x10172780, + 0x10168F40, 0x1015F700, 0x10155EC0, + 0x1014C680, 0x10142E40, 0x10139600, + 0x1012FDC0, 0x10126580, 0x1011CD40, + 0x10113500, 0x10109CC0, 0x10100480, + 0x100F6C40, 0x100ED400, 0x100E3BC0, + 0x100DA380, 0x100D0B40, 0x100C7300, + 0x100BDAC0, 0x100B4280, 0x100AAA40, + 0x100A1200, 0x100979C0, 0x1008E180, + 0x10084940, 0x1007B100, 0x100718C0, + 0x10068080, 0x1005E840, 0x10055000, + 0x1004B7C0, 0x10041F80, 0x10038740, + 0x1002EF00, 0x100256C0, 0x1001BE80, + 0x10012640, 0x10008E00, 0x0FFFF5C0, + 0x0FFF5D80, 0x0FFEC540, 0x0FFE2D00, + 0x0FFD94C0, 0x0FFCFC80, 0x0FFC6440, + 0x0FFBCC00, 0x0FFB33C0, 0x0FFA9B80, + 0x0FFA0340, 0x0FF96B00, 0x0FF8D2C0, + 0x0FF83A80, 0x0FF7A240, 0x0FF70A00, + 0x0FF671C0, 0x0FF5D980, 0x0FF54140, + 0x0FF4A900, 0x0FF410C0, 0x0FF37880, + 0x0FF2E040, 0x0FF24800, 0x0FF1AFC0, + 0x0FF11780, 0x0FF07F40, 0x0FEFE700, + 0x0FEF4EC0, 0x0FEEB680, 0x0FEE1E40, + 0x0FED8600, 0x0FECEDC0, 0x0FEC5580, + 0x0FEBBD40, 0x0FEB2500, 0x0FEA8CC0, + 0x0FE9F480, 0x0FE95C40, 0x0FE8C400, + 0x0FE82BC0, 0x0FE79380, 0x0FE6FB40, + 0x0FE66300, 0x0FE5CAC0, 0x0FE53280, + 0x0FE49A40, 0x0FE40200, 0x0FE369C0, + 0x0FE2D180, 0x0FE23940, 0x0FE1A100, + 0x0FE108C0, 0x0FE07080, 0x0FDFD840, + 0x0FDF4000, 0x0FDEA7C0, 0x0FDE0F80, + 0x0FDD7740, 0x0FDCDF00, 0x0FDC46C0, + 0x0FDBAE80, 0x0FDB1640, 0x0FDA7E00, + 0x0FD9E5C0, 0x0FD94D80, 0x0FD8B540, + 0x0FD81D00, 0x0FD784C0, 0x0FD6EC80, + 0x0FD65440, 0x0FD5BC00, 0x0FD523C0, + 0x0FD48B80, 0x0FD3F340, 0x0FD35B00, + 0x0FD2C2C0, 0x0FD22A80, 0x0FD19240, + 0x0FD0FA00, 0x0FD061C0, 0x0FCFC980, + 0x0FCF3140, 0x0FCE9900, 0x0FCE00C0, + 0x0FCD6880, 0x0FCCD040, 0x0FCC3800, + 0x0FCB9FC0, 0x0FCB0780, 0x0FCA6F40, + 0x0FC9D700, 0x0FC93EC0, 0x0FC8A680, + 0x0FC80E40, 0x0FC77600, 0x0FC6DDC0, + 0x0FC64580, 0x0FC5AD40, 0x0FC51500, + 0x0FC47CC0, 0x0FC3E480, 0x0FC34C40, + 0x0FC2B400, 0x0FC21BC0, 0x0FC18380, + 0x0FC0EB40, 0x0FC05300, 0x0FBFBAC0, + 0x0FBF2280, 0x0FBE8A40, 0x0FBDF200, + 0x0FBD59C0, 0x0FBCC180, 0x0FBC2940, + 0x0FBB9100, 0x0FBAF8C0, 0x0FBA6080, + 0x0FB9C840, 0x0FB93000, 0x0FB897C0, + 0x0FB7FF80, 0x0FB76740, 0x0FB6CF00, + 0x0FB636C0, 0x0FB59E80, 0x0FB50640, + 0x0FB46E00, 0x0FB3D5C0, 0x0FB33D80, + 0x0FB2A540, 0x0FB20D00, 0x0FB174C0, + 0x0FB0DC80, 0x0FB04440, 0x0FAFAC00, + 0x0FAF13C0, 0x0FAE7B80, 0x0FADE340, + 0x0FAD4B00, 0x0FACB2C0, 0x0FAC1A80, + 0x0FAB8240, 0x0FAAEA00, 0x0FAA51C0, + 0x0FA9B980, 0x0FA92140, 0x0FA88900, + 0x0FA7F0C0, 0x0FA75880, 0x0FA6C040, + 0x0FA62800, 0x0FA58FC0, 0x0FA4F780, + 0x0FA45F40, 0x0FA3C700, 0x0FA32EC0, + 0x0FA29680, 0x0FA1FE40, 0x0FA16600, + 0x0FA0CDC0, 0x0FA03580, 0x0F9F9D40, + 0x0F9F0500, 0x0F9E6CC0, 0x0F9DD480, + 0x0F9D3C40, 0x0F9CA400, 0x0F9C0BC0, + 0x0F9B7380, 0x0F9ADB40, 0x0F9A4300, + 0x0F99AAC0, 0x0F991280, 0x0F987A40, + 0x0F97E200, 0x0F9749C0, 0x0F96B180, + 0x0F961940, 0x0F958100, 0x0F94E8C0, + 0x0F945080, 0x0F93B840, 0x0F932000, + 0x0F9287C0, 0x0F91EF80, 0x0F915740, + 0x0F90BF00, 0x0F9026C0, 0x0F8F8E80, + 0x0F8EF640, 0x0F8E5E00, 0x0F8DC5C0, + 0x0F8D2D80, 0x0F8C9540, 0x0F8BFD00, + 0x0F8B64C0, 0x0F8ACC80, 0x0F8A3440, + 0x0F899C00, 0x0F8903C0, 0x0F886B80, + 0x0F87D340, 0x0F873B00, 0x0F86A2C0, + 0x0F860A80, 0x0F857240, 0x0F84DA00, + 0x0F8441C0, 0x0F83A980, 0x0F831140, + 0x0F827900, 0x0F81E0C0, 0x0F814880, + 0x0F80B040, 0x0F801800, 0x0F7F7FC0, + 0x0F7EE780, 0x0F7E4F40, 0x0F7DB700, + 0x0F7D1EC0, 0x0F7C8680, 0x0F7BEE40, + 0x0F7B5600, 0x0F7ABDC0, 0x0F7A2580, + 0x0F798D40, 0x0F78F500, 0x0F785CC0, + 0x0F77C480, 0x0F772C40, 0x0F769400, + 0x0F75FBC0, 0x0F756380, 0x0F74CB40, + 0x0F743300, 0x0F739AC0, 0x0F730280, + 0x0F726A40, 0x0F71D200, 0x0F7139C0, + 0x0F70A180, 0x0F700940, 0x0F6F7100, + 0x0F6ED8C0, 0x0F6E4080, 0x0F6DA840, + 0x0F6D1000, 0x0F6C77C0, 0x0F6BDF80, + 0x0F6B4740, 0x0F6AAF00, 0x0F6A16C0, + 0x0F697E80, 0x0F68E640, 0x0F684E00, + 0x0F67B5C0, 0x0F671D80, 0x0F668540, + 0x0F65ED00, 0x0F6554C0, 0x0F64BC80, + 0x0F642440, 0x0F638C00, 0x0F62F3C0, + 0x0F625B80, 0x0F61C340, 0x0F612B00, + 0x0F6092C0, 0x0F5FFA80, 0x0F5F6240, + 0x0F5ECA00, 0x0F5E31C0, 0x0F5D9980, + 0x0F5D0140, 0x0F5C6900, 0x0F5BD0C0, + 0x0F5B3880, 0x0F5AA040, 0x0F5A0800, + 0x0F596FC0, 0x0F58D780, 0x0F583F40, + 0x0F57A700, 0x0F570EC0, 0x0F567680, + 0x0F55DE40, 0x0F554600, 0x0F54ADC0, + 0x0F541580, 0x0F537D40, 0x0F52E500, + 0x0F524CC0, 0x0F51B480, 0x0F511C40, + 0x0F508400, 0x0F4FEBC0, 0x0F4F5380, + 0x0F4EBB40, 0x0F4E2300, 0x0F4D8AC0, + 0x0F4CF280, 0x0F4C5A40, 0x0F4BC200, + 0x0F4B29C0, 0x0F4A9180, 0x0F49F940, + 0x0F496100, 0x0F48C8C0, 0x0F483080, + 0x0F479840, 0x0F470000, 0x0F4667C0, + 0x0F45CF80, 0x0F453740, 0x0F449F00, + 0x0F4406C0, 0x0F436E80, 0x0F42D640, + 0x0F423E00, 0x0F41A5C0, 0x0F410D80, + 0x0F407540, 0x0F3FDD00, 0x0F3F44C0, + 0x0F3EAC80, 0x0F3E1440, 0x0F3D7C00, + 0x0F3CE3C0, 0x0F3C4B80, 0x0F3BB340, + 0x0F3B1B00, 0x0F3A82C0, 0x0F39EA80, + 0x0F395240, 0x0F38BA00, 0x0F3821C0, + 0x0F378980, 0x0F36F140, 0x0F365900, + 0x0F35C0C0, 0x0F352880, 0x0F349040, + 0x0F33F800, 0x0F335FC0, 0x0F32C780, + 0x0F322F40, 0x0F319700, 0x0F30FEC0, + 0x0F306680, 0x0F2FCE40, 0x0F2F3600, + 0x0F2E9DC0, 0x0F2E0580, 0x0F2D6D40, + 0x0F2CD500, 0x0F2C3CC0, 0x0F2BA480, + 0x0F2B0C40, 0x0F2A7400, 0x0F29DBC0, + 0x0F294380, 0x0F28AB40, 0x0F281300, + 0x0F277AC0, 0x0F26E280, 0x0F264A40, + 0x0F25B200, 0x0F2519C0, 0x0F248180, + 0x0F23E940, 0x0F235100, 0x0F22B8C0, + 0x0F222080, 0x0F218840, 0x0F20F000, + 0x0F2057C0, 0x0F1FBF80, 0x0F1F2740, + 0x0F1E8F00, 0x0F1DF6C0, 0x0F1D5E80, + 0x0F1CC640, 0x0F1C2E00, 0x0F1B95C0, + 0x0F1AFD80, 0x0F1A6540, 0x0F19CD00, + 0x0F1934C0, 0x0F189C80, 0x0F180440, + 0x0F176C00, 0x0F16D3C0, 0x0F163B80, + 0x0F15A340, 0x0F150B00, 0x0F1472C0, + 0x0F13DA80, 0x0F134240, 0x0F12AA00, + 0x0F1211C0, 0x0F117980, 0x0F10E140, + 0x0F104900, 0x0F0FB0C0, 0x0F0F1880, + 0x0F0E8040, 0x0F0DE800, 0x0F0D4FC0, + 0x0F0CB780, 0x0F0C1F40, 0x0F0B8700, + 0x0F0AEEC0, 0x0F0A5680, 0x0F09BE40, + 0x0F092600, 0x0F088DC0, 0x0F07F580, + 0x0F075D40, 0x0F06C500, 0x0F062CC0, + 0x0F059480, 0x0F04FC40, 0x0F046400, + 0x0F03CBC0, 0x0F033380, 0x0F029B40, + 0x0F020300, 0x0F016AC0, 0x0F00D280, + 0x0F003A40, 0x0EFFA200, 0x0EFF09C0, + 0x0EFE7180, 0x0EFDD940, 0x0EFD4100, + 0x0EFCA8C0, 0x0EFC1080, 0x0EFB7840, + 0x0EFAE000, 0x0EFA47C0, 0x0EF9AF80, + 0x0EF91740, 0x0EF87F00, 0x0EF7E6C0, + 0x0EF74E80, 0x0EF6B640, 0x0EF61E00, + 0x0EF585C0, 0x0EF4ED80, 0x0EF45540, + 0x0EF3BD00, 0x0EF324C0, 0x0EF28C80, + 0x0EF1F440, 0x0EF15C00, 0x0EF0C3C0, + 0x0EF02B80, 0x0EEF9340, 0x0EEEFB00, + 0x0EEE62C0, 0x0EEDCA80, 0x0EED3240, + 0x0EEC9A00, 0x0EEC01C0, 0x0EEB6980, + 0x0EEAD140, 0x0EEA3900, 0x0EE9A0C0, + 0x0EE90880, 0x0EE87040, 0x0EE7D800, + 0x0EE73FC0, 0x0EE6A780, 0x0EE60F40, + 0x0EE57700, 0x0EE4DEC0, 0x0EE44680, + 0x0EE3AE40, 0x0EE31600, 0x0EE27DC0, + 0x0EE1E580, 0x0EE14D40, 0x0EE0B500, + 0x0EE01CC0, 0x0EDF8480, 0x0EDEEC40, + 0x0EDE5400, 0x0EDDBBC0, 0x0EDD2380, + 0x0EDC8B40, 0x0EDBF300, 0x0EDB5AC0, + 0x0EDAC280, 0x0EDA2A40, 0x0ED99200, + 0x0ED8F9C0, 0x0ED86180, 0x0ED7C940, + 0x0ED73100, 0x0ED698C0, 0x0ED60080, + 0x0ED56840, 0x0ED4D000, 0x0ED437C0, + 0x0ED39F80, 0x0ED30740, 0x0ED26F00, + 0x0ED1D6C0, 0x0ED13E80, 0x0ED0A640, + 0x0ED00E00, 0x0ECF75C0, 0x0ECEDD80, + 0x0ECE4540, 0x0ECDAD00, 0x0ECD14C0, + 0x0ECC7C80, 0x0ECBE440, 0x0ECB4C00, + 0x0ECAB3C0, 0x0ECA1B80, 0x0EC98340, + 0x0EC8EB00, 0x0EC852C0, 0x0EC7BA80, + 0x0EC72240, 0x0EC68A00, 0x0EC5F1C0, + 0x0EC55980, 0x0EC4C140, 0x0EC42900, + 0x0EC390C0, 0x0EC2F880, 0x0EC26040, + 0x0EC1C800, 0x0EC12FC0, 0x0EC09780, + 0x0EBFFF40, 0x0EBF6700, 0x0EBECEC0, + 0x0EBE3680, 0x0EBD9E40, 0x0EBD0600, + 0x0EBC6DC0, 0x0EBBD580, 0x0EBB3D40, + 0x0EBAA500, 0x0EBA0CC0, 0x0EB97480, + 0x0EB8DC40, 0x0EB84400, 0x0EB7ABC0, + 0x0EB71380, 0x0EB67B40, 0x0EB5E300, + 0x0EB54AC0, 0x0EB4B280, 0x0EB41A40, + 0x0EB38200, 0x0EB2E9C0, 0x0EB25180, + 0x0EB1B940, 0x0EB12100, 0x0EB088C0, + 0x0EAFF080, 0x0EAF5840, 0x0EAEC000, + 0x0EAE27C0, 0x0EAD8F80, 0x0EACF740, + 0x0EAC5F00, 0x0EABC6C0, 0x0EAB2E80, + 0x0EAA9640, 0x0EA9FE00, 0x0EA965C0, + 0x0EA8CD80, 0x0EA83540, 0x0EA79D00, + 0x0EA704C0, 0x0EA66C80, 0x0EA5D440, + 0x0EA53C00, 0x0EA4A3C0, 0x0EA40B80, + 0x0EA37340, 0x0EA2DB00, 0x0EA242C0, + 0x0EA1AA80, 0x0EA11240, 0x0EA07A00, + 0x0E9FE1C0, 0x0E9F4980, 0x0E9EB140, + 0x0E9E1900, 0x0E9D80C0, 0x0E9CE880, + 0x0E9C5040, 0x0E9BB800, 0x0E9B1FC0, + 0x0E9A8780, 0x0E99EF40, 0x0E995700, + 0x0E98BEC0, 0x0E982680, 0x0E978E40, + 0x0E96F600, 0x0E965DC0, 0x0E95C580, + 0x0E952D40, 0x0E949500, 0x0E93FCC0, + 0x0E936480, 0x0E92CC40, 0x0E923400, + 0x0E919BC0, 0x0E910380, 0x0E906B40, + 0x0E8FD300, 0x0E8F3AC0, 0x0E8EA280, + 0x0E8E0A40, 0x0E8D7200, 0x0E8CD9C0, + 0x0E8C4180, 0x0E8BA940, 0x0E8B1100, + 0x0E8A78C0, 0x0E89E080, 0x0E894840, + 0x0E88B000, 0x0E8817C0, 0x0E877F80, + 0x0E86E740, 0x0E864F00, 0x0E85B6C0, + 0x0E851E80, 0x0E848640, 0x0E83EE00, + 0x0E8355C0, 0x0E82BD80, 0x0E822540, + 0x0E818D00, 0x0E80F4C0, 0x0E805C80, + 0x0E7FC440, 0x0E7F2C00, 0x0E7E93C0, + 0x0E7DFB80, 0x0E7D6340, 0x0E7CCB00, + 0x0E7C32C0, 0x0E7B9A80, 0x0E7B0240, + 0x0E7A6A00, 0x0E79D1C0, 0x0E793980, + 0x0E78A140, 0x0E780900, 0x0E7770C0, + 0x0E76D880, 0x0E764040, 0x0E75A800, + 0x0E750FC0, 0x0E747780, 0x0E73DF40, + 0x0E734700, 0x0E72AEC0, 0x0E721680, + 0x0E717E40, 0x0E70E600, 0x0E704DC0, + 0x0E6FB580, 0x0E6F1D40, 0x0E6E8500, + 0x0E6DECC0, 0x0E6D5480, 0x0E6CBC40, + 0x0E6C2400, 0x0E6B8BC0, 0x0E6AF380, + 0x0E6A5B40, 0x0E69C300, 0x0E692AC0, + 0x0E689280, 0x0E67FA40, 0x0E676200, + 0x0E66C9C0, 0x0E663180, 0x0E659940, + 0x0E650100, 0x0E6468C0, 0x0E63D080, + 0x0E633840, 0x0E62A000, 0x0E6207C0, + 0x0E616F80, 0x0E60D740, 0x0E603F00, + 0x0E5FA6C0, 0x0E5F0E80, 0x0E5E7640, + 0x0E5DDE00, 0x0E5D45C0, 0x0E5CAD80, + 0x0E5C1540, 0x0E5B7D00, 0x0E5AE4C0, + 0x0E5A4C80, 0x0E59B440, 0x0E591C00, + 0x0E5883C0, 0x0E57EB80, 0x0E575340, + 0x0E56BB00, 0x0E5622C0, 0x0E558A80, + 0x0E54F240, 0x0E545A00, 0x0E53C1C0, + 0x0E532980, 0x0E529140, 0x0E51F900, + 0x0E5160C0, 0x0E50C880, 0x0E503040, + 0x0E4F9800, 0x0E4EFFC0, 0x0E4E6780, + 0x0E4DCF40, 0x0E4D3700, 0x0E4C9EC0, + 0x0E4C0680, 0x0E4B6E40, 0x0E4AD600, + 0x0E4A3DC0, 0x0E49A580, 0x0E490D40, + 0x0E487500, 0x0E47DCC0, 0x0E474480, + 0x0E46AC40, 0x0E461400, 0x0E457BC0, + 0x0E44E380, 0x0E444B40, 0x0E43B300, + 0x0E431AC0, 0x0E428280, 0x0E41EA40, + 0x0E415200, 0x0E40B9C0, 0x0E402180, + 0x0E3F8940, 0x0E3EF100, 0x0E3E58C0, + 0x0E3DC080, 0x0E3D2840, 0x0E3C9000, + 0x0E3BF7C0, 0x0E3B5F80, 0x0E3AC740, + 0x0E3A2F00, 0x0E3996C0, 0x0E38FE80, + 0x0E386640, 0x0E37CE00, 0x0E3735C0, + 0x0E369D80, 0x0E360540, 0x0E356D00, + 0x0E34D4C0, 0x0E343C80, 0x0E33A440, + 0x0E330C00, 0x0E3273C0, 0x0E31DB80, + 0x0E314340, 0x0E30AB00, 0x0E3012C0, + 0x0E2F7A80, 0x0E2EE240, 0x0E2E4A00, + 0x0E2DB1C0, 0x0E2D1980, 0x0E2C8140, + 0x0E2BE900, 0x0E2B50C0, 0x0E2AB880, + 0x0E2A2040, 0x0E298800, 0x0E28EFC0, + 0x0E285780, 0x0E27BF40, 0x0E272700, + 0x0E268EC0, 0x0E25F680, 0x0E255E40, + 0x0E24C600, 0x0E242DC0, 0x0E239580, + 0x0E22FD40, 0x0E226500, 0x0E21CCC0, + 0x0E213480, 0x0E209C40, 0x0E200400, + 0x0E1F6BC0, 0x0E1ED380, 0x0E1E3B40, + 0x0E1DA300, 0x0E1D0AC0, 0x0E1C7280, + 0x0E1BDA40, 0x0E1B4200, 0x0E1AA9C0, + 0x0E1A1180, 0x0E197940, 0x0E18E100, + 0x0E1848C0, 0x0E17B080, 0x0E171840, + 0x0E168000, 0x0E15E7C0, 0x0E154F80, + 0x0E14B740, 0x0E141F00, 0x0E1386C0, + 0x0E12EE80, 0x0E125640, 0x0E11BE00, + 0x0E1125C0, 0x0E108D80, 0x0E0FF540, + 0x0E0F5D00, 0x0E0EC4C0, 0x0E0E2C80, + 0x0E0D9440, 0x0E0CFC00, 0x0E0C63C0, + 0x0E0BCB80, 0x0E0B3340, 0x0E0A9B00, + 0x0E0A02C0, 0x0E096A80, 0x0E08D240, + 0x0E083A00, 0x0E07A1C0, 0x0E070980, + 0x0E067140, 0x0E05D900, 0x0E0540C0, + 0x0E04A880, 0x0E041040, 0x0E037800, + 0x0E02DFC0, 0x0E024780, 0x0E01AF40, + 0x0E011700, 0x0E007EC0, 0x0DFFE680, + 0x0DFF4E40, 0x0DFEB600, 0x0DFE1DC0, + 0x0DFD8580, 0x0DFCED40, 0x0DFC5500, + 0x0DFBBCC0, 0x0DFB2480, 0x0DFA8C40, + 0x0DF9F400, 0x0DF95BC0, 0x0DF8C380, + 0x0DF82B40, 0x0DF79300, 0x0DF6FAC0, + 0x0DF66280, 0x0DF5CA40, 0x0DF53200, + 0x0DF499C0, 0x0DF40180, 0x0DF36940, + 0x0DF2D100, 0x0DF238C0, 0x0DF1A080, + 0x0DF10840, 0x0DF07000, 0x0DEFD7C0, + 0x0DEF3F80, 0x0DEEA740, 0x0DEE0F00, + 0x0DED76C0, 0x0DECDE80, 0x0DEC4640, + 0x0DEBAE00, 0x0DEB15C0, 0x0DEA7D80, + 0x0DE9E540, 0x0DE94D00, 0x0DE8B4C0, + 0x0DE81C80, 0x0DE78440, 0x0DE6EC00, + 0x0DE653C0, 0x0DE5BB80, 0x0DE52340, + 0x0DE48B00, 0x0DE3F2C0, 0x0DE35A80, + 0x0DE2C240, 0x0DE22A00, 0x0DE191C0, + 0x0DE0F980, 0x0DE06140, 0x0DDFC900, + 0x0DDF30C0, 0x0DDE9880, 0x0DDE0040, + 0x0DDD6800, 0x0DDCCFC0, 0x0DDC3780, + 0x0DDB9F40, 0x0DDB0700, 0x0DDA6EC0, + 0x0DD9D680, 0x0DD93E40, 0x0DD8A600, + 0x0DD80DC0, 0x0DD77580, 0x0DD6DD40, + 0x0DD64500, 0x0DD5ACC0, 0x0DD51480, + 0x0DD47C40, 0x0DD3E400, 0x0DD34BC0, + 0x0DD2B380, 0x0DD21B40, 0x0DD18300, + 0x0DD0EAC0, 0x0DD05280, 0x0DCFBA40, + 0x0DCF2200, 0x0DCE89C0, 0x0DCDF180, + 0x0DCD5940, 0x0DCCC100, 0x0DCC28C0, + 0x0DCB9080, 0x0DCAF840, 0x0DCA6000, + 0x0DC9C7C0, 0x0DC92F80, 0x0DC89740, + 0x0DC7FF00, 0x0DC766C0, 0x0DC6CE80, + 0x0DC63640, 0x0DC59E00, 0x0DC505C0, + 0x0DC46D80, 0x0DC3D540, 0x0DC33D00, + 0x0DC2A4C0, 0x0DC20C80, 0x0DC17440, + 0x0DC0DC00, 0x0DC043C0, 0x0DBFAB80, + 0x0DBF1340, 0x0DBE7B00, 0x0DBDE2C0, + 0x0DBD4A80, 0x0DBCB240, 0x0DBC1A00, + 0x0DBB81C0, 0x0DBAE980, 0x0DBA5140, + 0x0DB9B900, 0x0DB920C0, 0x0DB88880, + 0x0DB7F040, 0x0DB75800, 0x0DB6BFC0, + 0x0DB62780, 0x0DB58F40, 0x0DB4F700, + 0x0DB45EC0, 0x0DB3C680, 0x0DB32E40, + 0x0DB29600, 0x0DB1FDC0, 0x0DB16580, + 0x0DB0CD40, 0x0DB03500, 0x0DAF9CC0, + 0x0DAF0480, 0x0DAE6C40, 0x0DADD400, + 0x0DAD3BC0, 0x0DACA380, 0x0DAC0B40, + 0x0DAB7300, 0x0DAADAC0, 0x0DAA4280, + 0x0DA9AA40, 0x0DA91200, 0x0DA879C0, + 0x0DA7E180, 0x0DA74940, 0x0DA6B100, + 0x0DA618C0, 0x0DA58080, 0x0DA4E840, + 0x0DA45000, 0x0DA3B7C0, 0x0DA31F80, + 0x0DA28740, 0x0DA1EF00, 0x0DA156C0, + 0x0DA0BE80, 0x0DA02640, 0x0D9F8E00, + 0x0D9EF5C0, 0x0D9E5D80, 0x0D9DC540, + 0x0D9D2D00, 0x0D9C94C0, 0x0D9BFC80, + 0x0D9B6440, 0x0D9ACC00, 0x0D9A33C0, + 0x0D999B80, 0x0D990340, 0x0D986B00, + 0x0D97D2C0, 0x0D973A80, 0x0D96A240, + 0x0D960A00, 0x0D9571C0, 0x0D94D980, + 0x0D944140, 0x0D93A900, 0x0D9310C0, + 0x0D927880, 0x0D91E040, 0x0D914800, + 0x0D90AFC0, 0x0D901780, 0x0D8F7F40, + 0x0D8EE700, 0x0D8E4EC0, 0x0D8DB680, + 0x0D8D1E40, 0x0D8C8600, 0x0D8BEDC0, + 0x0D8B5580, 0x0D8ABD40, 0x0D8A2500, + 0x0D898CC0, 0x0D88F480, 0x0D885C40, + 0x0D87C400, 0x0D872BC0, 0x0D869380, + 0x0D85FB40, 0x0D856300, 0x0D84CAC0, + 0x0D843280, 0x0D839A40, 0x0D830200, + 0x0D8269C0, 0x0D81D180, 0x0D813940, + 0x0D80A100, 0x0D8008C0, 0x0D7F7080, + 0x0D7ED840, 0x0D7E4000, 0x0D7DA7C0, + 0x0D7D0F80, 0x0D7C7740, 0x0D7BDF00, + 0x0D7B46C0, 0x0D7AAE80, 0x0D7A1640, + 0x0D797E00, 0x0D78E5C0, 0x0D784D80, + 0x0D77B540, 0x0D771D00, 0x0D7684C0, + 0x0D75EC80, 0x0D755440, 0x0D74BC00, + 0x0D7423C0, 0x0D738B80, 0x0D72F340, + 0x0D725B00, 0x0D71C2C0, 0x0D712A80, + 0x0D709240, 0x0D6FFA00, 0x0D6F61C0, + 0x0D6EC980, 0x0D6E3140, 0x0D6D9900, + 0x0D6D00C0, 0x0D6C6880, 0x0D6BD040, + 0x0D6B3800, 0x0D6A9FC0, 0x0D6A0780, + 0x0D696F40, 0x0D68D700, 0x0D683EC0, + 0x0D67A680, 0x0D670E40, 0x0D667600, + 0x0D65DDC0, 0x0D654580, 0x0D64AD40, + 0x0D641500, 0x0D637CC0, 0x0D62E480, + 0x0D624C40, 0x0D61B400, 0x0D611BC0, + 0x0D608380, 0x0D5FEB40, 0x0D5F5300, + 0x0D5EBAC0, 0x0D5E2280, 0x0D5D8A40, + 0x0D5CF200, 0x0D5C59C0, 0x0D5BC180, + 0x0D5B2940, 0x0D5A9100, 0x0D59F8C0, + 0x0D596080, 0x0D58C840, 0x0D583000, + 0x0D5797C0, 0x0D56FF80, 0x0D566740, + 0x0D55CF00, 0x0D5536C0, 0x0D549E80, + 0x0D540640, 0x0D536E00, 0x0D52D5C0, + 0x0D523D80, 0x0D51A540, 0x0D510D00, + 0x0D5074C0, 0x0D4FDC80, 0x0D4F4440, + 0x0D4EAC00, 0x0D4E13C0, 0x0D4D7B80, + 0x0D4CE340, 0x0D4C4B00, 0x0D4BB2C0, + 0x0D4B1A80, 0x0D4A8240, 0x0D49EA00, + 0x0D4951C0, 0x0D48B980, 0x0D482140, + 0x0D478900, 0x0D46F0C0, 0x0D465880, + 0x0D45C040, 0x0D452800, 0x0D448FC0, + 0x0D43F780, 0x0D435F40, 0x0D42C700, + 0x0D422EC0, 0x0D419680, 0x0D40FE40, + 0x0D406600, 0x0D3FCDC0, 0x0D3F3580, + 0x0D3E9D40, 0x0D3E0500, 0x0D3D6CC0, + 0x0D3CD480, 0x0D3C3C40, 0x0D3BA400, + 0x0D3B0BC0, 0x0D3A7380, 0x0D39DB40, + 0x0D394300, 0x0D38AAC0, 0x0D381280, + 0x0D377A40, 0x0D36E200, 0x0D3649C0, + 0x0D35B180, 0x0D351940, 0x0D348100, + 0x0D33E8C0, 0x0D335080, 0x0D32B840, + 0x0D322000, 0x0D3187C0, 0x0D30EF80, + 0x0D305740, 0x0D2FBF00, 0x0D2F26C0, + 0x0D2E8E80, 0x0D2DF640, 0x0D2D5E00, + 0x0D2CC5C0, 0x0D2C2D80, 0x0D2B9540, + 0x0D2AFD00, 0x0D2A64C0, 0x0D29CC80, + 0x0D293440, 0x0D289C00, 0x0D2803C0, + 0x0D276B80, 0x0D26D340, 0x0D263B00, + 0x0D25A2C0, 0x0D250A80, 0x0D247240, + 0x0D23DA00, 0x0D2341C0, 0x0D22A980, + 0x0D221140, 0x0D217900, 0x0D20E0C0, + 0x0D204880, 0x0D1FB040, 0x0D1F1800, + 0x0D1E7FC0, 0x0D1DE780, 0x0D1D4F40, + 0x0D1CB700, 0x0D1C1EC0, 0x0D1B8680, + 0x0D1AEE40, 0x0D1A5600, 0x0D19BDC0, + 0x0D192580, 0x0D188D40, 0x0D17F500, + 0x0D175CC0, 0x0D16C480, 0x0D162C40, + 0x0D159400, 0x0D14FBC0, 0x0D146380, + 0x0D13CB40, 0x0D133300, 0x0D129AC0, + 0x0D120280, 0x0D116A40, 0x0D10D200, + 0x0D1039C0, 0x0D0FA180, 0x0D0F0940, + 0x0D0E7100, 0x0D0DD8C0, 0x0D0D4080, + 0x0D0CA840, 0x0D0C1000, 0x0D0B77C0, + 0x0D0ADF80, 0x0D0A4740, 0x0D09AF00, + 0x0D0916C0, 0x0D087E80, 0x0D07E640, + 0x0D074E00, 0x0D06B5C0, 0x0D061D80, + 0x0D058540, 0x0D04ED00, 0x0D0454C0, + 0x0D03BC80, 0x0D032440, 0x0D028C00, + 0x0D01F3C0, 0x0D015B80, 0x0D00C340, + 0x0D002B00, 0x0CFF92C0, 0x0CFEFA80, + 0x0CFE6240, 0x0CFDCA00, 0x0CFD31C0, + 0x0CFC9980, 0x0CFC0140, 0x0CFB6900, + 0x0CFAD0C0, 0x0CFA3880, 0x0CF9A040, + 0x0CF90800, 0x0CF86FC0, 0x0CF7D780, + 0x0CF73F40, 0x0CF6A700, 0x0CF60EC0, + 0x0CF57680, 0x0CF4DE40, 0x0CF44600, + 0x0CF3ADC0, 0x0CF31580, 0x0CF27D40, + 0x0CF1E500, 0x0CF14CC0, 0x0CF0B480, + 0x0CF01C40, 0x0CEF8400, 0x0CEEEBC0, + 0x0CEE5380, 0x0CEDBB40, 0x0CED2300, + 0x0CEC8AC0, 0x0CEBF280, 0x0CEB5A40, + 0x0CEAC200, 0x0CEA29C0, 0x0CE99180, + 0x0CE8F940, 0x0CE86100, 0x0CE7C8C0, + 0x0CE73080, 0x0CE69840, 0x0CE60000, + 0x0CE56F40, 0x0CE4DE80, 0x0CE44DC0, + 0x0CE3BD00, 0x0CE32C40, 0x0CE29B80, + 0x0CE20AC0, 0x0CE17A00, 0x0CE0E940, + 0x0CE05880, 0x0CDFC7C0, 0x0CDF3700, + 0x0CDEA640, 0x0CDE1580, 0x0CDD84C0, + 0x0CDCF400, 0x0CDC6340, 0x0CDBD280, + 0x0CDB41C0, 0x0CDAB100, 0x0CDA2040, + 0x0CD98F80, 0x0CD8FEC0, 0x0CD86E00, + 0x0CD7DD40, 0x0CD74C80, 0x0CD6BBC0, + 0x0CD62B00, 0x0CD59A40, 0x0CD50980, + 0x0CD478C0, 0x0CD3E800, 0x0CD35740, + 0x0CD2C680, 0x0CD235C0, 0x0CD1A500, + 0x0CD11440, 0x0CD08380, 0x0CCFF2C0, + 0x0CCF6200, 0x0CCED140, 0x0CCE4080, + 0x0CCDAFC0, 0x0CCD1F00, 0x0CCC8E40, + 0x0CCBFD80, 0x0CCB6CC0, 0x0CCADC00, + 0x0CCA4B40, 0x0CC9BA80, 0x0CC929C0, + 0x0CC89900, 0x0CC80840, 0x0CC77780, + 0x0CC6E6C0, 0x0CC65600, 0x0CC5C540, + 0x0CC53480, 0x0CC4A3C0, 0x0CC41300, + 0x0CC38240, 0x0CC2F180, 0x0CC260C0, + 0x0CC1D000, 0x0CC13F40, 0x0CC0AE80, + 0x0CC01DC0, 0x0CBF8D00, 0x0CBEFC40, + 0x0CBE6B80, 0x0CBDDAC0, 0x0CBD4A00, + 0x0CBCB940, 0x0CBC2880, 0x0CBB97C0, + 0x0CBB0700, 0x0CBA7640, 0x0CB9E580, + 0x0CB954C0, 0x0CB8C400, 0x0CB83340, + 0x0CB7A280, 0x0CB711C0, 0x0CB68100, + 0x0CB5F040, 0x0CB55F80, 0x0CB4CEC0, + 0x0CB43E00, 0x0CB3AD40, 0x0CB31C80, + 0x0CB28BC0, 0x0CB1FB00, 0x0CB16A40, + 0x0CB0D980, 0x0CB048C0, 0x0CAFB800, + 0x0CAF2740, 0x0CAE9680, 0x0CAE05C0, + 0x0CAD7500, 0x0CACE440, 0x0CAC5380, + 0x0CABC2C0, 0x0CAB3200, 0x0CAAA140, + 0x0CAA1080, 0x0CA97FC0, 0x0CA8EF00, + 0x0CA85E40, 0x0CA7CD80, 0x0CA73CC0, + 0x0CA6AC00, 0x0CA61B40, 0x0CA58A80, + 0x0CA4F9C0, 0x0CA46900, 0x0CA3D840, + 0x0CA34780, 0x0CA2B6C0, 0x0CA22600, + 0x0CA19540, 0x0CA10480, 0x0CA073C0, + 0x0C9FE300, 0x0C9F5240, 0x0C9EC180, + 0x0C9E30C0, 0x0C9DA000, 0x0C9D0F40, + 0x0C9C7E80, 0x0C9BEDC0, 0x0C9B5D00, + 0x0C9ACC40, 0x0C9A3B80, 0x0C99AAC0, + 0x0C991A00, 0x0C988940, 0x0C97F880, + 0x0C9767C0, 0x0C96D700, 0x0C964640, + 0x0C95B580, 0x0C9524C0, 0x0C949400, + 0x0C940340, 0x0C937280, 0x0C92E1C0, + 0x0C925100, 0x0C91C040, 0x0C912F80, + 0x0C909EC0, 0x0C900E00, 0x0C8F7D40, + 0x0C8EEC80, 0x0C8E5BC0, 0x0C8DCB00, + 0x0C8D3A40, 0x0C8CA980, 0x0C8C18C0, + 0x0C8B8800, 0x0C8AF740, 0x0C8A6680, + 0x0C89D5C0, 0x0C894500, 0x0C88B440, + 0x0C882380, 0x0C8792C0, 0x0C870200, + 0x0C867140, 0x0C85E080, 0x0C854FC0, + 0x0C84BF00, 0x0C842E40, 0x0C839D80, + 0x0C830CC0, 0x0C827C00, 0x0C81EB40, + 0x0C815A80, 0x0C80C9C0, 0x0C803900, + 0x0C7FA840, 0x0C7F1780, 0x0C7E86C0, + 0x0C7DF600, 0x0C7D6540, 0x0C7CD480, + 0x0C7C43C0, 0x0C7BB300, 0x0C7B2240, + 0x0C7A9180, 0x0C7A00C0, 0x0C797000, + 0x0C78DF40, 0x0C784E80, 0x0C77BDC0, + 0x0C772D00, 0x0C769C40, 0x0C760B80, + 0x0C757AC0, 0x0C74EA00, 0x0C745940, + 0x0C73C880, 0x0C7337C0, 0x0C72A700, + 0x0C721640, 0x0C718580, 0x0C70F4C0, + 0x0C706400, 0x0C6FD340, 0x0C6F4280, + 0x0C6EB1C0, 0x0C6E2100, 0x0C6D9040, + 0x0C6CFF80, 0x0C6C6EC0, 0x0C6BDE00, + 0x0C6B4D40, 0x0C6ABC80, 0x0C6A2BC0, + 0x0C699B00, 0x0C690A40, 0x0C687980, + 0x0C67E8C0, 0x0C675800, 0x0C66C740, + 0x0C663680, 0x0C65A5C0, 0x0C651500, + 0x0C648440, 0x0C63F380, 0x0C6362C0, + 0x0C62D200, 0x0C624140, 0x0C61B080, + 0x0C611FC0, 0x0C608F00, 0x0C5FFE40, + 0x0C5F6D80, 0x0C5EDCC0, 0x0C5E4C00, + 0x0C5DBB40, 0x0C5D2A80, 0x0C5C99C0, + 0x0C5C0900, 0x0C5B7840, 0x0C5AE780, + 0x0C5A56C0, 0x0C59C600, 0x0C593540, + 0x0C58A480, 0x0C5813C0, 0x0C578300, + 0x0C56F240, 0x0C566180, 0x0C55D0C0, + 0x0C554000, 0x0C54AF40, 0x0C541E80, + 0x0C538DC0, 0x0C52FD00, 0x0C526C40, + 0x0C51DB80, 0x0C514AC0, 0x0C50BA00, + 0x0C502940, 0x0C4F9880, 0x0C4F07C0, + 0x0C4E7700, 0x0C4DE640, 0x0C4D5580, + 0x0C4CC4C0, 0x0C4C3400, 0x0C4BA340, + 0x0C4B1280, 0x0C4A81C0, 0x0C49F100, + 0x0C496040, 0x0C48CF80, 0x0C483EC0, + 0x0C47AE00, 0x0C471D40, 0x0C468C80, + 0x0C45FBC0, 0x0C456B00, 0x0C44DA40, + 0x0C444980, 0x0C43B8C0, 0x0C432800, + 0x0C429740, 0x0C420680, 0x0C4175C0, + 0x0C40E500, 0x0C405440, 0x0C3FC380, + 0x0C3F32C0, 0x0C3EA200, 0x0C3E1140, + 0x0C3D8080, 0x0C3CEFC0, 0x0C3C5F00, + 0x0C3BCE40, 0x0C3B3D80, 0x0C3AACC0, + 0x0C3A1C00, 0x0C398B40, 0x0C38FA80, + 0x0C3869C0, 0x0C37D900, 0x0C374840, + 0x0C36B780, 0x0C3626C0, 0x0C359600, + 0x0C350540, 0x0C347480, 0x0C33E3C0, + 0x0C335300, 0x0C32C240, 0x0C323180, + 0x0C31A0C0, 0x0C311000, 0x0C307F40, + 0x0C2FEE80, 0x0C2F5DC0, 0x0C2ECD00, + 0x0C2E3C40, 0x0C2DAB80, 0x0C2D1AC0, + 0x0C2C8A00, 0x0C2BF940, 0x0C2B6880, + 0x0C2AD7C0, 0x0C2A4700, 0x0C29B640, + 0x0C292580, 0x0C2894C0, 0x0C280400, + 0x0C277340, 0x0C26E280, 0x0C2651C0, + 0x0C25C100, 0x0C253040, 0x0C249F80, + 0x0C240EC0, 0x0C237E00, 0x0C22ED40, + 0x0C225C80, 0x0C21CBC0, 0x0C213B00, + 0x0C20AA40, 0x0C201980, 0x0C1F88C0, + 0x0C1EF800, 0x0C1E6740, 0x0C1DD680, + 0x0C1D45C0, 0x0C1CB500, 0x0C1C2440, + 0x0C1B9380, 0x0C1B02C0, 0x0C1A7200, + 0x0C19E140, 0x0C195080, 0x0C18BFC0, + 0x0C182F00, 0x0C179E40, 0x0C170D80, + 0x0C167CC0, 0x0C15EC00, 0x0C155B40, + 0x0C14CA80, 0x0C1439C0, 0x0C13A900, + 0x0C131840, 0x0C128780, 0x0C11F6C0, + 0x0C116600, 0x0C10D540, 0x0C104480, + 0x0C0FB3C0, 0x0C0F2300, 0x0C0E9240, + 0x0C0E0180, 0x0C0D70C0, 0x0C0CE000, + 0x0C0C4F40, 0x0C0BBE80, 0x0C0B2DC0, + 0x0C0A9D00, 0x0C0A0C40, 0x0C097B80, + 0x0C08EAC0, 0x0C085A00, 0x0C07C940, + 0x0C073880, 0x0C06A7C0, 0x0C061700, + 0x0C058640, 0x0C04F580, 0x0C0464C0, + 0x0C03D400, 0x0C034340, 0x0C02B280, + 0x0C0221C0, 0x0C019100, 0x0C010040, + 0x0C006F80, 0x0BFFDEC0, 0x0BFF4E00, + 0x0BFEBD40, 0x0BFE2C80, 0x0BFD9BC0, + 0x0BFD0B00, 0x0BFC7A40, 0x0BFBE980, + 0x0BFB58C0, 0x0BFAC800, 0x0BFA3740, + 0x0BF9A680, 0x0BF915C0, 0x0BF88500, + 0x0BF7F440, 0x0BF76380, 0x0BF6D2C0, + 0x0BF64200, 0x0BF5B140, 0x0BF52080, + 0x0BF48FC0, 0x0BF3FF00, 0x0BF36E40, + 0x0BF2DD80, 0x0BF24CC0, 0x0BF1BC00, + 0x0BF12B40, 0x0BF09A80, 0x0BF009C0, + 0x0BEF7900, 0x0BEEE840, 0x0BEE5780, + 0x0BEDC6C0, 0x0BED3600, 0x0BECA540, + 0x0BEC1480, 0x0BEB83C0, 0x0BEAF300, + 0x0BEA6240, 0x0BE9D180, 0x0BE940C0, + 0x0BE8B000, 0x0BE81F40, 0x0BE78E80, + 0x0BE6FDC0, 0x0BE66D00, 0x0BE5DC40, + 0x0BE54B80, 0x0BE4BAC0, 0x0BE42A00, + 0x0BE39940, 0x0BE30880, 0x0BE277C0, + 0x0BE1E700, 0x0BE15640, 0x0BE0C580, + 0x0BE034C0, 0x0BDFA400, 0x0BDF1340, + 0x0BDE8280, 0x0BDDF1C0, 0x0BDD6100, + 0x0BDCD040, 0x0BDC3F80, 0x0BDBAEC0, + 0x0BDB1E00, 0x0BDA8D40, 0x0BD9FC80, + 0x0BD96BC0, 0x0BD8DB00, 0x0BD84A40, + 0x0BD7B980, 0x0BD728C0, 0x0BD69800, + 0x0BD60740, 0x0BD57680, 0x0BD4E5C0, + 0x0BD45500, 0x0BD3C440, 0x0BD33380, + 0x0BD2A2C0, 0x0BD21200, 0x0BD18140, + 0x0BD0F080, 0x0BD05FC0, 0x0BCFCF00, + 0x0BCF3E40, 0x0BCEAD80, 0x0BCE1CC0, + 0x0BCD8C00, 0x0BCCFB40, 0x0BCC6A80, + 0x0BCBD9C0, 0x0BCB4900, 0x0BCAB840, + 0x0BCA2780, 0x0BC996C0, 0x0BC90600, + 0x0BC87540, 0x0BC7E480, 0x0BC753C0, + 0x0BC6C300, 0x0BC63240, 0x0BC5A180, + 0x0BC510C0, 0x0BC48000, 0x0BC3EF40, + 0x0BC35E80, 0x0BC2CDC0, 0x0BC23D00, + 0x0BC1AC40, 0x0BC11B80, 0x0BC08AC0, + 0x0BBFFA00, 0x0BBF6940, 0x0BBED880, + 0x0BBE47C0, 0x0BBDB700, 0x0BBD2640, + 0x0BBC9580, 0x0BBC04C0, 0x0BBB7400, + 0x0BBAE340, 0x0BBA5280, 0x0BB9C1C0, + 0x0BB93100, 0x0BB8A040, 0x0BB80F80, + 0x0BB77EC0, 0x0BB6EE00, 0x0BB65D40, + 0x0BB5CC80, 0x0BB53BC0, 0x0BB4AB00, + 0x0BB41A40, 0x0BB38980, 0x0BB2F8C0, + 0x0BB26800, 0x0BB1D740, 0x0BB14680, + 0x0BB0B5C0, 0x0BB02500, 0x0BAF9440, + 0x0BAF0380, 0x0BAE72C0, 0x0BADE200, + 0x0BAD5140, 0x0BACC080, 0x0BAC2FC0, + 0x0BAB9F00, 0x0BAB0E40, 0x0BAA7D80, + 0x0BA9ECC0, 0x0BA95C00, 0x0BA8CB40, + 0x0BA83A80, 0x0BA7A9C0, 0x0BA71900, + 0x0BA68840, 0x0BA5F780, 0x0BA566C0, + 0x0BA4D600, 0x0BA44540, 0x0BA3B480, + 0x0BA323C0, 0x0BA29300, 0x0BA20240, + 0x0BA17180, 0x0BA0E0C0, 0x0BA05000, + 0x0B9FBF40, 0x0B9F2E80, 0x0B9E9DC0, + 0x0B9E0D00, 0x0B9D7C40, 0x0B9CEB80, + 0x0B9C5AC0, 0x0B9BCA00, 0x0B9B3940, + 0x0B9AA880, 0x0B9A17C0, 0x0B998700, + 0x0B98F640, 0x0B986580, 0x0B97D4C0, + 0x0B974400, 0x0B96B340, 0x0B962280, + 0x0B9591C0, 0x0B950100, 0x0B947040, + 0x0B93DF80, 0x0B934EC0, 0x0B92BE00, + 0x0B922D40, 0x0B919C80, 0x0B910BC0, + 0x0B907B00, 0x0B8FEA40, 0x0B8F5980, + 0x0B8EC8C0, 0x0B8E3800, 0x0B8DA740, + 0x0B8D1680, 0x0B8C85C0, 0x0B8BF500, + 0x0B8B6440, 0x0B8AD380, 0x0B8A42C0, + 0x0B89B200, 0x0B892140, 0x0B889080, + 0x0B87FFC0, 0x0B876F00, 0x0B86DE40, + 0x0B864D80, 0x0B85BCC0, 0x0B852C00, + 0x0B849B40, 0x0B840A80, 0x0B8379C0, + 0x0B82E900, 0x0B825840, 0x0B81C780, + 0x0B8136C0, 0x0B80A600, 0x0B801540, + 0x0B7F8480, 0x0B7EF3C0, 0x0B7E6300, + 0x0B7DD240, 0x0B7D4180, 0x0B7CB0C0, + 0x0B7C2000, 0x0B7B8F40, 0x0B7AFE80, + 0x0B7A6DC0, 0x0B79DD00, 0x0B794C40, + 0x0B78BB80, 0x0B782AC0, 0x0B779A00, + 0x0B770940, 0x0B767880, 0x0B75E7C0, + 0x0B755700, 0x0B74C640, 0x0B743580, + 0x0B73A4C0, 0x0B731400, 0x0B728340, + 0x0B71F280, 0x0B7161C0, 0x0B70D100, + 0x0B704040, 0x0B6FAF80, 0x0B6F1EC0, + 0x0B6E8E00, 0x0B6DFD40, 0x0B6D6C80, + 0x0B6CDBC0, 0x0B6C4B00, 0x0B6BBA40, + 0x0B6B2980, 0x0B6A98C0, 0x0B6A0800, + 0x0B697740, 0x0B68E680, 0x0B6855C0, + 0x0B67C500, 0x0B673440, 0x0B66A380, + 0x0B6612C0, 0x0B658200, 0x0B64F140, + 0x0B646080, 0x0B63CFC0, 0x0B633F00, + 0x0B62AE40, 0x0B621D80, 0x0B618CC0, + 0x0B60FC00, 0x0B606B40, 0x0B5FDA80, + 0x0B5F49C0, 0x0B5EB900, 0x0B5E2840, + 0x0B5D9780, 0x0B5D06C0, 0x0B5C7600, + 0x0B5BE540, 0x0B5B5480, 0x0B5AC3C0, + 0x0B5A3300, 0x0B59A240, 0x0B591180, + 0x0B5880C0, 0x0B57F000, 0x0B575F40, + 0x0B56CE80, 0x0B563DC0, 0x0B55AD00, + 0x0B551C40, 0x0B548B80, 0x0B53FAC0, + 0x0B536A00, 0x0B52D940, 0x0B524880, + 0x0B51B7C0, 0x0B512700, 0x0B509640, + 0x0B500580, 0x0B4F74C0, 0x0B4EE400, + 0x0B4E5340, 0x0B4DC280, 0x0B4D31C0, + 0x0B4CA100, 0x0B4C1040, 0x0B4B7F80, + 0x0B4AEEC0, 0x0B4A5E00, 0x0B49CD40, + 0x0B493C80, 0x0B48ABC0, 0x0B481B00, + 0x0B478A40, 0x0B46F980, 0x0B4668C0, + 0x0B45D800, 0x0B454740, 0x0B44B680, + 0x0B4425C0, 0x0B439500, 0x0B430440, + 0x0B427380, 0x0B41E2C0, 0x0B415200, + 0x0B40C140, 0x0B403080, 0x0B3F9FC0, + 0x0B3F0F00, 0x0B3E7E40, 0x0B3DED80, + 0x0B3D5CC0, 0x0B3CCC00, 0x0B3C3B40, + 0x0B3BAA80, 0x0B3B19C0, 0x0B3A8900, + 0x0B39F840, 0x0B396780, 0x0B38D6C0, + 0x0B384600, 0x0B37B540, 0x0B372480, + 0x0B3693C0, 0x0B360300, 0x0B357240, + 0x0B34E180, 0x0B3450C0, 0x0B33C000, + 0x0B332F40, 0x0B329E80, 0x0B320DC0, + 0x0B317D00, 0x0B30EC40, 0x0B305B80, + 0x0B2FCAC0, 0x0B2F3A00, 0x0B2EA940, + 0x0B2E1880, 0x0B2D87C0, 0x0B2CF700, + 0x0B2C6640, 0x0B2BD580, 0x0B2B44C0, + 0x0B2AB400, 0x0B2A2340, 0x0B299280, + 0x0B2901C0, 0x0B287100, 0x0B27E040, + 0x0B274F80, 0x0B26BEC0, 0x0B262E00, + 0x0B259D40, 0x0B250C80, 0x0B247BC0, + 0x0B23EB00, 0x0B235A40, 0x0B22C980, + 0x0B2238C0, 0x0B21A800, 0x0B211740, + 0x0B208680, 0x0B1FF5C0, 0x0B1F6500, + 0x0B1ED440, 0x0B1E4380, 0x0B1DB2C0, + 0x0B1D2200, 0x0B1C9140, 0x0B1C0080, + 0x0B1B6FC0, 0x0B1ADF00, 0x0B1A4E40, + 0x0B19BD80, 0x0B192CC0, 0x0B189C00, + 0x0B180B40, 0x0B177A80, 0x0B16E9C0, + 0x0B165900, 0x0B15C840, 0x0B153780, + 0x0B14A6C0, 0x0B141600, 0x0B138540, + 0x0B12F480, 0x0B1263C0, 0x0B11D300, + 0x0B114240, 0x0B10B180, 0x0B1020C0, + 0x0B0F9000, 0x0B0EFF40, 0x0B0E6E80, + 0x0B0DDDC0, 0x0B0D4D00, 0x0B0CBC40, + 0x0B0C2B80, 0x0B0B9AC0, 0x0B0B0A00, + 0x0B0A7940, 0x0B09E880, 0x0B0957C0, + 0x0B08C700, 0x0B083640, 0x0B07A580, + 0x0B0714C0, 0x0B068400, 0x0B05F340, + 0x0B056280, 0x0B04D1C0, 0x0B044100, + 0x0B03B040, 0x0B031F80, 0x0B028EC0, + 0x0B01FE00, 0x0B016D40, 0x0B00DC80, + 0x0B004BC0, 0x0AFFBB00, 0x0AFF2A40, + 0x0AFE9980, 0x0AFE08C0, 0x0AFD7800, + 0x0AFCE740, 0x0AFC5680, 0x0AFBC5C0, + 0x0AFB3500, 0x0AFAA440, 0x0AFA1380, + 0x0AF982C0, 0x0AF8F200, 0x0AF86140, + 0x0AF7D080, 0x0AF73FC0, 0x0AF6AF00, + 0x0AF61E40, 0x0AF58D80, 0x0AF4FCC0, + 0x0AF46C00, 0x0AF3DB40, 0x0AF34A80, + 0x0AF2B9C0, 0x0AF22900, 0x0AF19840, + 0x0AF10780, 0x0AF076C0, 0x0AEFE600, + 0x0AEF5540, 0x0AEEC480, 0x0AEE33C0, + 0x0AEDA300, 0x0AED1240, 0x0AEC8180, + 0x0AEBF0C0, 0x0AEB6000, 0x0AEACF40, + 0x0AEA3E80, 0x0AE9ADC0, 0x0AE91D00, + 0x0AE88C40, 0x0AE7FB80, 0x0AE76AC0, + 0x0AE6DA00, 0x0AE64940, 0x0AE5B880, + 0x0AE527C0, 0x0AE49700, 0x0AE40640, + 0x0AE37580, 0x0AE2E4C0, 0x0AE25400, + 0x0AE1C340, 0x0AE13280, 0x0AE0A1C0, + 0x0AE01100, 0x0ADF8040, 0x0ADEEF80, + 0x0ADE5EC0, 0x0ADDCE00, 0x0ADD3D40, + 0x0ADCAC80, 0x0ADC1BC0, 0x0ADB8B00, + 0x0ADAFA40, 0x0ADA6980, 0x0AD9D8C0, + 0x0AD94800, 0x0AD8B740, 0x0AD82680, + 0x0AD795C0, 0x0AD70500, 0x0AD67440, + 0x0AD5E380, 0x0AD552C0, 0x0AD4C200, + 0x0AD43140, 0x0AD3A080, 0x0AD30FC0, + 0x0AD27F00, 0x0AD1EE40, 0x0AD15D80, + 0x0AD0CCC0, 0x0AD03C00, 0x0ACFAB40, + 0x0ACF1A80, 0x0ACE89C0, 0x0ACDF900, + 0x0ACD6840, 0x0ACCD780, 0x0ACC46C0, + 0x0ACBB600, 0x0ACB2540, 0x0ACA9480, + 0x0ACA03C0, 0x0AC97300, 0x0AC8E240, + 0x0AC85180, 0x0AC7C0C0, 0x0AC73000, + 0x0AC69F40, 0x0AC60E80, 0x0AC57DC0, + 0x0AC4ED00, 0x0AC45C40, 0x0AC3CB80, + 0x0AC33AC0, 0x0AC2AA00, 0x0AC21940, + 0x0AC18880, 0x0AC0F7C0, 0x0AC06700, + 0x0ABFD640, 0x0ABF4580, 0x0ABEB4C0, + 0x0ABE2400, 0x0ABD9340, 0x0ABD0280, + 0x0ABC71C0, 0x0ABBE100, 0x0ABB5040, + 0x0ABABF80, 0x0ABA2EC0, 0x0AB99E00, + 0x0AB90D40, 0x0AB87C80, 0x0AB7EBC0, + 0x0AB75B00, 0x0AB6CA40, 0x0AB63980, + 0x0AB5A8C0, 0x0AB51800, 0x0AB48740, + 0x0AB3F680, 0x0AB365C0, 0x0AB2D500, + 0x0AB24440, 0x0AB1B380, 0x0AB122C0, + 0x0AB09200, 0x0AB00140, 0x0AAF7080, + 0x0AAEDFC0, 0x0AAE4F00, 0x0AADBE40, + 0x0AAD2D80, 0x0AAC9CC0, 0x0AAC0C00, + 0x0AAB7B40, 0x0AAAEA80, 0x0AAA59C0, + 0x0AA9C900, 0x0AA93840, 0x0AA8A780, + 0x0AA816C0, 0x0AA78600, 0x0AA6F540, + 0x0AA66480, 0x0AA5D3C0, 0x0AA54300, + 0x0AA4B240, 0x0AA42180, 0x0AA390C0, + 0x0AA30000, 0x0AA26F40, 0x0AA1DE80, + 0x0AA14DC0, 0x0AA0BD00, 0x0AA02C40, + 0x0A9F9B80, 0x0A9F0AC0, 0x0A9E7A00, + 0x0A9DE940, 0x0A9D5880, 0x0A9CC7C0, + 0x0A9C3700, 0x0A9BA640, 0x0A9B1580, + 0x0A9A84C0, 0x0A99F400, 0x0A996340, + 0x0A98D280, 0x0A9841C0, 0x0A97B100, + 0x0A972040, 0x0A968F80, 0x0A95FEC0, + 0x0A956E00, 0x0A94DD40, 0x0A944C80, + 0x0A93BBC0, 0x0A932B00, 0x0A929A40, + 0x0A920980, 0x0A9178C0, 0x0A90E800, + 0x0A905740, 0x0A8FC680, 0x0A8F35C0, + 0x0A8EA500, 0x0A8E1440, 0x0A8D8380, + 0x0A8CF2C0, 0x0A8C6200, 0x0A8BD140, + 0x0A8B4080, 0x0A8AAFC0, 0x0A8A1F00, + 0x0A898E40, 0x0A88FD80, 0x0A886CC0, + 0x0A87DC00, 0x0A874B40, 0x0A86BA80, + 0x0A8629C0, 0x0A859900, 0x0A850840, + 0x0A847780, 0x0A83E6C0, 0x0A835600, + 0x0A82C540, 0x0A823480, 0x0A81A3C0, + 0x0A811300, 0x0A808240, 0x0A7FF180, + 0x0A7F60C0, 0x0A7ED000, 0x0A7E3F40, + 0x0A7DAE80, 0x0A7D1DC0, 0x0A7C8D00, + 0x0A7BFC40, 0x0A7B6B80, 0x0A7ADAC0, + 0x0A7A4A00, 0x0A79B940, 0x0A792880, + 0x0A7897C0, 0x0A780700, 0x0A777640, + 0x0A76E580, 0x0A7654C0, 0x0A75C400, + 0x0A753340, 0x0A74A280, 0x0A7411C0, + 0x0A738100, 0x0A72F040, 0x0A725F80, + 0x0A71CEC0, 0x0A713E00, 0x0A70AD40, + 0x0A701C80, 0x0A6F8BC0, 0x0A6EFB00, + 0x0A6E6A40, 0x0A6DD980, 0x0A6D48C0, + 0x0A6CB800, 0x0A6C2740, 0x0A6B9680, + 0x0A6B05C0, 0x0A6A7500, 0x0A69E440, + 0x0A695380, 0x0A68C2C0, 0x0A683200, + 0x0A67A140, 0x0A671080, 0x0A667FC0, + 0x0A65EF00, 0x0A655E40, 0x0A64CD80, + 0x0A643CC0, 0x0A63AC00, 0x0A631B40, + 0x0A628A80, 0x0A61F9C0, 0x0A616900, + 0x0A60D840, 0x0A604780, 0x0A5FB6C0, + 0x0A5F2600, 0x0A5E9540, 0x0A5E0480, + 0x0A5D73C0, 0x0A5CE300, 0x0A5C5240, + 0x0A5BC180, 0x0A5B30C0, 0x0A5AA000, + 0x0A5A0F40, 0x0A597E80, 0x0A58EDC0, + 0x0A585D00, 0x0A57CC40, 0x0A573B80, + 0x0A56AAC0, 0x0A561A00, 0x0A558940, + 0x0A54F880, 0x0A5467C0, 0x0A53D700, + 0x0A534640, 0x0A52B580, 0x0A5224C0, + 0x0A519400, 0x0A510340, 0x0A507280, + 0x0A4FE1C0, 0x0A4F5100, 0x0A4EC040, + 0x0A4E2F80, 0x0A4D9EC0, 0x0A4D0E00, + 0x0A4C7D40, 0x0A4BEC80, 0x0A4B5BC0, + 0x0A4ACB00, 0x0A4A3A40, 0x0A49A980, + 0x0A4918C0, 0x0A488800, 0x0A47F740, + 0x0A476680, 0x0A46D5C0, 0x0A464500, + 0x0A45B440, 0x0A452380, 0x0A4492C0, + 0x0A440200, 0x0A437140, 0x0A42E080, + 0x0A424FC0, 0x0A41BF00, 0x0A412E40, + 0x0A409D80, 0x0A400CC0, 0x0A3F7C00, + 0x0A3EEB40, 0x0A3E5A80, 0x0A3DC9C0, + 0x0A3D3900, 0x0A3CA840, 0x0A3C1780, + 0x0A3B86C0, 0x0A3AF600, 0x0A3A6540, + 0x0A39D480, 0x0A3943C0, 0x0A38B300, + 0x0A382240, 0x0A379180, 0x0A3700C0, + 0x0A367000, 0x0A35DF40, 0x0A354E80, + 0x0A34BDC0, 0x0A342D00, 0x0A339C40, + 0x0A330B80, 0x0A327AC0, 0x0A31EA00, + 0x0A315940, 0x0A30C880, 0x0A3037C0, + 0x0A2FA700, 0x0A2F1640, 0x0A2E8580, + 0x0A2DF4C0, 0x0A2D6400, 0x0A2CD340, + 0x0A2C4280, 0x0A2BB1C0, 0x0A2B2100, + 0x0A2A9040, 0x0A29FF80, 0x0A296EC0, + 0x0A28DE00, 0x0A284D40, 0x0A27BC80, + 0x0A272BC0, 0x0A269B00, 0x0A260A40, + 0x0A257980, 0x0A24E8C0, 0x0A245800, + 0x0A23C740, 0x0A233680, 0x0A22A5C0, + 0x0A221500, 0x0A218440, 0x0A20F380, + 0x0A2062C0, 0x0A1FD200, 0x0A1F4140, + 0x0A1EB080, 0x0A1E1FC0, 0x0A1D8F00, + 0x0A1CFE40, 0x0A1C6D80, 0x0A1BDCC0, + 0x0A1B4C00, 0x0A1ABB40, 0x0A1A2A80, + 0x0A1999C0, 0x0A190900, 0x0A187840, + 0x0A17E780, 0x0A1756C0, 0x0A16C600, + 0x0A163540, 0x0A15A480, 0x0A1513C0, + 0x0A148300, 0x0A13F240, 0x0A136180, + 0x0A12D0C0, 0x0A124000, 0x0A11AF40, + 0x0A111E80, 0x0A108DC0, 0x0A0FFD00, + 0x0A0F6C40, 0x0A0EDB80, 0x0A0E4AC0, + 0x0A0DBA00, 0x0A0D2940, 0x0A0C9880, + 0x0A0C07C0, 0x0A0B7700, 0x0A0AE640, + 0x0A0A5580, 0x0A09C4C0, 0x0A093400, + 0x0A08A340, 0x0A081280, 0x0A0781C0, + 0x0A06F100, 0x0A066040, 0x0A05CF80, + 0x0A053EC0, 0x0A04AE00, 0x0A041D40, + 0x0A038C80, 0x0A02FBC0, 0x0A026B00, + 0x0A01DA40, 0x0A014980, 0x0A00B8C0, + 0x0A002800, 0x09FF9740, 0x09FF0680, + 0x09FE75C0, 0x09FDE500, 0x09FD5440, + 0x09FCC380, 0x09FC32C0, 0x09FBA200, + 0x09FB1140, 0x09FA8080, 0x09F9EFC0, + 0x09F95F00, 0x09F8CE40, 0x09F83D80, + 0x09F7ACC0, 0x09F71C00, 0x09F68B40, + 0x09F5FA80, 0x09F569C0, 0x09F4D900, + 0x09F44840, 0x09F3B780, 0x09F326C0, + 0x09F29600, 0x09F20540, 0x09F17480, + 0x09F0E3C0, 0x09F05300, 0x09EFC240, + 0x09EF3180, 0x09EEA0C0, 0x09EE1000, + 0x09ED7F40, 0x09ECEE80, 0x09EC5DC0, + 0x09EBCD00, 0x09EB3C40, 0x09EAAB80, + 0x09EA1AC0, 0x09E98A00, 0x09E8F940, + 0x09E86880, 0x09E7D7C0, 0x09E74700, + 0x09E6B640, 0x09E62580, 0x09E594C0, + 0x09E50400, 0x09E47340, 0x09E3E280, + 0x09E351C0, 0x09E2C100, 0x09E23040, + 0x09E19F80, 0x09E10EC0, 0x09E07E00, + 0x09DFED40, 0x09DF5C80, 0x09DECBC0, + 0x09DE3B00, 0x09DDAA40, 0x09DD1980, + 0x09DC88C0, 0x09DBF800, 0x09DB6740, + 0x09DAD680, 0x09DA45C0, 0x09D9B500, + 0x09D92440, 0x09D89380, 0x09D802C0, + 0x09D77200, 0x09D6E140, 0x09D65080, + 0x09D5BFC0, 0x09D52F00, 0x09D49E40, + 0x09D40D80, 0x09D37CC0, 0x09D2EC00, + 0x09D25B40, 0x09D1CA80, 0x09D139C0, + 0x09D0A900, 0x09D01840, 0x09CF8780, + 0x09CEF6C0, 0x09CE6600, 0x09CDD540, + 0x09CD4480, 0x09CCB3C0, 0x09CC2300, + 0x09CB9240, 0x09CB0180, 0x09CA70C0, + 0x09C9E000, 0x09C94F40, 0x09C8BE80, + 0x09C82DC0, 0x09C79D00, 0x09C70C40, + 0x09C67B80, 0x09C5EAC0, 0x09C55A00, + 0x09C4C940, 0x09C43880, 0x09C3A7C0, + 0x09C31700, 0x09C28640, 0x09C1F580, + 0x09C164C0, 0x09C0D400, 0x09C04340, + 0x09BFB280, 0x09BF21C0, 0x09BE9100, + 0x09BE0040, 0x09BD6F80, 0x09BCDEC0, + 0x09BC4E00, 0x09BBBD40, 0x09BB2C80, + 0x09BA9BC0, 0x09BA0B00, 0x09B97A40, + 0x09B8E980, 0x09B858C0, 0x09B7C800, + 0x09B73740, 0x09B6A680, 0x09B615C0, + 0x09B58500, 0x09B4F440, 0x09B46380, + 0x09B3D2C0, 0x09B34200, 0x09B2B140, + 0x09B22080, 0x09B18FC0, 0x09B0FF00, + 0x09B06E40, 0x09AFDD80, 0x09AF4CC0, + 0x09AEBC00, 0x09AE2B40, 0x09AD9A80, + 0x09AD09C0, 0x09AC7900, 0x09ABE840, + 0x09AB5780, 0x09AAC6C0, 0x09AA3600, + 0x09A9A540, 0x09A91480, 0x09A883C0, + 0x09A7F300, 0x09A76240, 0x09A6D180, + 0x09A640C0, 0x09A5B000, 0x09A51F40, + 0x09A48E80, 0x09A3FDC0, 0x09A36D00, + 0x09A2DC40, 0x09A24B80, 0x09A1BAC0, + 0x09A12A00, 0x09A09940, 0x09A00880, + 0x099F77C0, 0x099EE700, 0x099E5640, + 0x099DC580, 0x099D34C0, 0x099CA400, + 0x099C1340, 0x099B8280, 0x099AF1C0, + 0x099A6100, 0x0999D040, 0x09993F80, + 0x0998AEC0, 0x09981E00, 0x09978D40, + 0x0996FC80, 0x09966BC0, 0x0995DB00, + 0x09954A40, 0x0994B980, 0x099428C0, + 0x09939800, 0x09930740, 0x09927680, + 0x0991E5C0, 0x09915500, 0x0990C440, + 0x09903380, 0x098FA2C0, 0x098F1200, + 0x098E8140, 0x098DF080, 0x098D5FC0, + 0x098CCF00, 0x098C3E40, 0x098BAD80, + 0x098B1CC0, 0x098A8C00, 0x0989FB40, + 0x09896A80, 0x0988D9C0, 0x09884900, + 0x0987B840, 0x09872780, 0x098696C0, + 0x09860600, 0x09857540, 0x0984E480, + 0x098453C0, 0x0983C300, 0x09833240, + 0x0982A180, 0x098210C0, 0x09818000, + 0x0980EF40, 0x09805E80, 0x097FCDC0, + 0x097F3D00, 0x097EAC40, 0x097E1B80, + 0x097D8AC0, 0x097CFA00, 0x097C6940, + 0x097BD880, 0x097B47C0, 0x097AB700, + 0x097A2640, 0x09799580, 0x097904C0, + 0x09787400, 0x0977E340, 0x09775280, + 0x0976C1C0, 0x09763100, 0x0975A040, + 0x09750F80, 0x09747EC0, 0x0973EE00, + 0x09735D40, 0x0972CC80, 0x09723BC0, + 0x0971AB00, 0x09711A40, 0x09708980, + 0x096FF8C0, 0x096F6800, 0x096ED740, + 0x096E4680, 0x096DB5C0, 0x096D2500, + 0x096C9440, 0x096C0380, 0x096B72C0, + 0x096AE200, 0x096A5140, 0x0969C080, + 0x09692FC0, 0x09689F00, 0x09680E40, + 0x09677D80, 0x0966ECC0, 0x09665C00, + 0x0965CB40, 0x09653A80, 0x0964A9C0, + 0x09641900, 0x09638840, 0x0962F780, + 0x096266C0, 0x0961D600, 0x09614540, + 0x0960B480, 0x096023C0, 0x095F9300, + 0x095F0240, 0x095E7180, 0x095DE0C0, + 0x095D5000, 0x095CBF40, 0x095C2E80, + 0x095B9DC0, 0x095B0D00, 0x095A7C40, + 0x0959EB80, 0x09595AC0, 0x0958CA00, + 0x09583940, 0x0957A880, 0x095717C0, + 0x09568700, 0x0955F640, 0x09556580, + 0x0954D4C0, 0x09544400, 0x0953B340, + 0x09532280, 0x095291C0, 0x09520100, + 0x09517040, 0x0950DF80, 0x09504EC0, + 0x094FBE00, 0x094F2D40, 0x094E9C80, + 0x094E0BC0, 0x094D7B00, 0x094CEA40, + 0x094C5980, 0x094BC8C0, 0x094B3800, + 0x094AA740, 0x094A1680, 0x094985C0, + 0x0948F500, 0x09486440, 0x0947D380, + 0x094742C0, 0x0946B200, 0x09462140, + 0x09459080, 0x0944FFC0, 0x09446F00, + 0x0943DE40, 0x09434D80, 0x0942BCC0, + 0x09422C00, 0x09419B40, 0x09410A80, + 0x094079C0, 0x093FE900, 0x093F5840, + 0x093EC780, 0x093E36C0, 0x093DA600, + 0x093D1540, 0x093C8480, 0x093BF3C0, + 0x093B6300, 0x093AD240, 0x093A4180, + 0x0939B0C0, 0x09392000, 0x09388F40, + 0x0937FE80, 0x09376DC0, 0x0936DD00, + 0x09364C40, 0x0935BB80, 0x09352AC0, + 0x09349A00, 0x09340940, 0x09337880, + 0x0932E7C0, 0x09325700, 0x0931C640, + 0x09313580, 0x0930A4C0, 0x09301400, + 0x092F8340, 0x092EF280, 0x092E61C0, + 0x092DD100, 0x092D4040, 0x092CAF80, + 0x092C1EC0, 0x092B8E00, 0x092AFD40, + 0x092A6C80, 0x0929DBC0, 0x09294B00, + 0x0928BA40, 0x09282980, 0x092798C0, + 0x09270800, 0x09267740, 0x0925E680, + 0x092555C0, 0x0924C500, 0x09243440, + 0x0923A380, 0x092312C0, 0x09228200, + 0x0921F140, 0x09216080, 0x0920CFC0, + 0x09203F00, 0x091FAE40, 0x091F1D80, + 0x091E8CC0, 0x091DFC00, 0x091D6B40, + 0x091CDA80, 0x091C49C0, 0x091BB900, + 0x091B2840, 0x091A9780, 0x091A06C0, + 0x09197600, 0x0918E540, 0x09185480, + 0x0917C3C0, 0x09173300, 0x0916A240, + 0x09161180, 0x091580C0, 0x0914F000, + 0x09145F40, 0x0913CE80, 0x09133DC0, + 0x0912AD00, 0x09121C40, 0x09118B80, + 0x0910FAC0, 0x09106A00, 0x090FD940, + 0x090F4880, 0x090EB7C0, 0x090E2700, + 0x090D9640, 0x090D0580, 0x090C74C0, + 0x090BE400, 0x090B5340, 0x090AC280, + 0x090A31C0, 0x0909A100, 0x09091040, + 0x09087F80, 0x0907EEC0, 0x09075E00, + 0x0906CD40, 0x09063C80, 0x0905ABC0, + 0x09051B00, 0x09048A40, 0x0903F980, + 0x090368C0, 0x0902D800, 0x09024740, + 0x0901B680, 0x090125C0, 0x09009500, + 0x09000440, 0x08FF7380, 0x08FEE2C0, + 0x08FE5200, 0x08FDC140, 0x08FD3080, + 0x08FC9FC0, 0x08FC0F00, 0x08FB7E40, + 0x08FAED80, 0x08FA5CC0, 0x08F9CC00, + 0x08F93B40, 0x08F8AA80, 0x08F819C0, + 0x08F78900, 0x08F6F840, 0x08F66780, + 0x08F5D6C0, 0x08F54600, 0x08F4B540, + 0x08F42480, 0x08F393C0, 0x08F30300, + 0x08F27240, 0x08F1E180, 0x08F150C0, + 0x08F0C000, 0x08F02F40, 0x08EF9E80, + 0x08EF0DC0, 0x08EE7D00, 0x08EDEC40, + 0x08ED5B80, 0x08ECCAC0, 0x08EC3A00, + 0x08EBA940, 0x08EB1880, 0x08EA87C0, + 0x08E9F700, 0x08E96640, 0x08E8D580, + 0x08E844C0, 0x08E7B400, 0x08E72340, + 0x08E69280, 0x08E601C0, 0x08E57100, + 0x08E4E040, 0x08E44F80, 0x08E3BEC0, + 0x08E32E00, 0x08E29D40, 0x08E20C80, + 0x08E17BC0, 0x08E0EB00, 0x08E05A40, + 0x08DFC980, 0x08DF38C0, 0x08DEA800, + 0x08DE1740, 0x08DD8680, 0x08DCF5C0, + 0x08DC6500, 0x08DBD440, 0x08DB4380, + 0x08DAB2C0, 0x08DA2200, 0x08D99140, + 0x08D90080, 0x08D86FC0, 0x08D7DF00, + 0x08D74E40, 0x08D6BD80, 0x08D62CC0, + 0x08D59C00, 0x08D50B40, 0x08D47A80, + 0x08D3E9C0, 0x08D35900, 0x08D2C840, + 0x08D23780, 0x08D1A6C0, 0x08D11600, + 0x08D08540, 0x08CFF480, 0x08CF63C0, + 0x08CED300, 0x08CE4240, 0x08CDB180, + 0x08CD20C0, 0x08CC9000, 0x08CBFF40, + 0x08CB6E80, 0x08CADDC0, 0x08CA4D00, + 0x08C9BC40, 0x08C92B80, 0x08C89AC0, + 0x08C80A00, 0x08C77940, 0x08C6E880, + 0x08C657C0, 0x08C5C700, 0x08C53640, + 0x08C4A580, 0x08C414C0, 0x08C38400, + 0x08C2F340, 0x08C26280, 0x08C1D1C0, + 0x08C14100, 0x08C0B040, 0x08C01F80, + 0x08BF8EC0, 0x08BEFE00, 0x08BE6D40, + 0x08BDDC80, 0x08BD4BC0, 0x08BCBB00, + 0x08BC2A40, 0x08BB9980, 0x08BB08C0, + 0x08BA7800, 0x08B9E740, 0x08B95680, + 0x08B8C5C0, 0x08B83500, 0x08B7A440, + 0x08B71380, 0x08B682C0, 0x08B5F200, + 0x08B56140, 0x08B4D080, 0x08B43FC0, + 0x08B3AF00, 0x08B31E40, 0x08B28D80, + 0x08B1FCC0, 0x08B16C00, 0x08B0DB40, + 0x08B04A80, 0x08AFB9C0, 0x08AF2900, + 0x08AE9840, 0x08AE0780, 0x08AD76C0, + 0x08ACE600, 0x08AC5540, 0x08ABC480, + 0x08AB33C0, 0x08AAA300, 0x08AA1240, + 0x08A98180, 0x08A8F0C0, 0x08A86000, + 0x08A7CF40, 0x08A73E80, 0x08A6ADC0, + 0x08A61D00, 0x08A58C40, 0x08A4FB80, + 0x08A46AC0, 0x08A3DA00, 0x08A34940, + 0x08A2B880, 0x08A227C0, 0x08A19700, + 0x08A10640, 0x08A07580, 0x089FE4C0, + 0x089F5400, 0x089EC340, 0x089E3280, + 0x089DA1C0, 0x089D1100, 0x089C8040, + 0x089BEF80, 0x089B5EC0, 0x089ACE00, + 0x089A3D40, 0x0899AC80, 0x08991BC0, + 0x08988B00, 0x0897FA40, 0x08976980, + 0x0896D8C0, 0x08964800, 0x0895B740, + 0x08952680, 0x089495C0, 0x08940500, + 0x08937440, 0x0892E380, 0x089252C0, + 0x0891C200, 0x08913140, 0x0890A080, + 0x08900FC0, 0x088F7F00, 0x088EEE40, + 0x088E5D80, 0x088DCCC0, 0x088D3C00, + 0x088CAB40, 0x088C1A80, 0x088B89C0, + 0x088AF900, 0x088A6840, 0x0889D780, + 0x088946C0, 0x0888B600, 0x08882540, + 0x08879480, 0x088703C0, 0x08867300, + 0x0885E240, 0x08855180, 0x0884C0C0, + 0x08843000, 0x08839F40, 0x08830E80, + 0x08827DC0, 0x0881ED00, 0x08815C40, + 0x0880CB80, 0x08803AC0, 0x087FAA00, + 0x087F1940, 0x087E8880, 0x087DF7C0, + 0x087D6700, 0x087CD640, 0x087C4580, + 0x087BB4C0, 0x087B2400, 0x087A9340, + 0x087A0280, 0x087971C0, 0x0878E100, + 0x08785040, 0x0877BF80, 0x08772EC0, + 0x08769E00, 0x08760D40, 0x08757C80, + 0x0874EBC0, 0x08745B00, 0x0873CA40, + 0x08733980, 0x0872A8C0, 0x08721800, + 0x08718740, 0x0870F680, 0x087065C0, + 0x086FD500, 0x086F4440, 0x086EB380, + 0x086E22C0, 0x086D9200, 0x086D0140, + 0x086C7080, 0x086BDFC0, 0x086B4F00, + 0x086ABE40, 0x086A2D80, 0x08699CC0, + 0x08690C00, 0x08687B40, 0x0867EA80, + 0x086759C0, 0x0866C900, 0x08663840, + 0x0865A780, 0x086516C0, 0x08648600, + 0x0863F540, 0x08636480, 0x0862D3C0, + 0x08624300, 0x0861B240, 0x08612180, + 0x086090C0, 0x08620000, 0x08617680, + 0x0860ED00, 0x08606380, 0x085FDA00, + 0x085F5080, 0x085EC700, 0x085E3D80, + 0x085DB400, 0x085D2A80, 0x085CA100, + 0x085C1780, 0x085B8E00, 0x085B0480, + 0x085A7B00, 0x0859F180, 0x08596800, + 0x0858DE80, 0x08585500, 0x0857CB80, + 0x08574200, 0x0856B880, 0x08562F00, + 0x0855A580, 0x08551C00, 0x08549280, + 0x08540900, 0x08537F80, 0x0852F600, + 0x08526C80, 0x0851E300, 0x08515980, + 0x0850D000, 0x08504680, 0x084FBD00, + 0x084F3380, 0x084EAA00, 0x084E2080, + 0x084D9700, 0x084D0D80, 0x084C8400, + 0x084BFA80, 0x084B7100, 0x084AE780, + 0x084A5E00, 0x0849D480, 0x08494B00, + 0x0848C180, 0x08483800, 0x0847AE80, + 0x08472500, 0x08469B80, 0x08461200, + 0x08458880, 0x0844FF00, 0x08447580, + 0x0843EC00, 0x08436280, 0x0842D900, + 0x08424F80, 0x0841C600, 0x08413C80, + 0x0840B300, 0x08402980, 0x083FA000, + 0x083F1680, 0x083E8D00, 0x083E0380, + 0x083D7A00, 0x083CF080, 0x083C6700, + 0x083BDD80, 0x083B5400, 0x083ACA80, + 0x083A4100, 0x0839B780, 0x08392E00, + 0x0838A480, 0x08381B00, 0x08379180, + 0x08370800, 0x08367E80, 0x0835F500, + 0x08356B80, 0x0834E200, 0x08345880, + 0x0833CF00, 0x08334580, 0x0832BC00, + 0x08323280, 0x0831A900, 0x08311F80, + 0x08309600, 0x08300C80, 0x082F8300, + 0x082EF980, 0x082E7000, 0x082DE680, + 0x082D5D00, 0x082CD380, 0x082C4A00, + 0x082BC080, 0x082B3700, 0x082AAD80, + 0x082A2400, 0x08299A80, 0x08291100, + 0x08288780, 0x0827FE00, 0x08277480, + 0x0826EB00, 0x08266180, 0x0825D800, + 0x08254E80, 0x0824C500, 0x08243B80, + 0x0823B200, 0x08232880, 0x08229F00, + 0x08221580, 0x08218C00, 0x08210280, + 0x08207900, 0x081FEF80, 0x081F6600, + 0x081EDC80, 0x081E5300, 0x081DC980, + 0x081D4000, 0x081CB680, 0x081C2D00, + 0x081BA380, 0x081B1A00, 0x081A9080, + 0x081A0700, 0x08197D80, 0x0818F400, + 0x08186A80, 0x0817E100, 0x08175780, + 0x0816CE00, 0x08164480, 0x0815BB00, + 0x08153180, 0x0814A800, 0x08141E80, + 0x08139500, 0x08130B80, 0x08128200, + 0x0811F880, 0x08116F00, 0x0810E580, + 0x08105C00, 0x080FD280, 0x080F4900, + 0x080EBF80, 0x080E3600, 0x080DAC80, + 0x080D2300, 0x080C9980, 0x080C1000, + 0x080B8680, 0x080AFD00, 0x080A7380, + 0x0809EA00, 0x08096080, 0x0808D700, + 0x08084D80, 0x0807C400, 0x08073A80, + 0x0806B100, 0x08062780, 0x08059E00, + 0x08051480, 0x08048B00, 0x08040180, + 0x08037800, 0x0802EE80, 0x08026500, + 0x0801DB80, 0x08015200, 0x0800C880, + 0x08003F00, 0x07FFB580, 0x07FF2C00, + 0x07FEA280, 0x07FE1900, 0x07FD8F80, + 0x07FD0600, 0x07FC7C80, 0x07FBF300, + 0x07FB6980, 0x07FAE000, 0x07FA5680, + 0x07F9CD00, 0x07F94380, 0x07F8BA00, + 0x07F83080, 0x07F7A700, 0x07F71D80, + 0x07F69400, 0x07F60A80, 0x07F58100, + 0x07F4F780, 0x07F46E00, 0x07F3E480, + 0x07F35B00, 0x07F2D180, 0x07F24800, + 0x07F1BE80, 0x07F13500, 0x07F0AB80, + 0x07F02200, 0x07EF9880, 0x07EF0F00, + 0x07EE8580, 0x07EDFC00, 0x07ED7280, + 0x07ECE900, 0x07EC5F80, 0x07EBD600, + 0x07EB4C80, 0x07EAC300, 0x07EA3980, + 0x07E9B000, 0x07E92680, 0x07E89D00, + 0x07E81380, 0x07E78A00, 0x07E70080, + 0x07E67700, 0x07E5ED80, 0x07E56400, + 0x07E4DA80, 0x07E45100, 0x07E3C780, + 0x07E33E00, 0x07E2B480, 0x07E22B00, + 0x07E1A180, 0x07E11800, 0x07E08E80, + 0x07E00500, 0x07DF7B80, 0x07DEF200, + 0x07DE6880, 0x07DDDF00, 0x07DD5580, + 0x07DCCC00, 0x07DC4280, 0x07DBB900, + 0x07DB2F80, 0x07DAA600, 0x07DA1C80, + 0x07D99300, 0x07D90980, 0x07D88000, + 0x07D7F680, 0x07D76D00, 0x07D6E380, + 0x07D65A00, 0x07D5D080, 0x07D54700, + 0x07D4BD80, 0x07D43400, 0x07D3AA80, + 0x07D32100, 0x07D29780, 0x07D20E00, + 0x07D18480, 0x07D0FB00, 0x07D07180, + 0x07CFE800, 0x07CF5E80, 0x07CED500, + 0x07CE4B80, 0x07CDC200, 0x07CD3880, + 0x07CCAF00, 0x07CC2580, 0x07CB9C00, + 0x07CB1280, 0x07CA8900, 0x07C9FF80, + 0x07C97600, 0x07C8EC80, 0x07C86300, + 0x07C7D980, 0x07C75000, 0x07C6C680, + 0x07C63D00, 0x07C5B380, 0x07C52A00, + 0x07C4A080, 0x07C41700, 0x07C38D80, + 0x07C30400, 0x07C27A80, 0x07C1F100, + 0x07C16780, 0x07C0DE00, 0x07C05480, + 0x07BFCB00, 0x07BF4180, 0x07BEB800, + 0x07BE2E80, 0x07BDA500, 0x07BD1B80, + 0x07BC9200, 0x07BC0880, 0x07BB7F00, + 0x07BAF580, 0x07BA6C00, 0x07B9E280, + 0x07B95900, 0x07B8CF80, 0x07B84600, + 0x07B7BC80, 0x07B73300, 0x07B6A980, + 0x07B62000, 0x07B59680, 0x07B50D00, + 0x07B48380, 0x07B3FA00, 0x07B37080, + 0x07B2E700, 0x07B25D80, 0x07B1D400, + 0x07B14A80, 0x07B0C100, 0x07B03780, + 0x07AFAE00, 0x07AF2480, 0x07AE9B00, + 0x07AE1180, 0x07AD8800, 0x07ACFE80, + 0x07AC7500, 0x07ABEB80, 0x07AB6200, + 0x07AAD880, 0x07AA4F00, 0x07A9C580, + 0x07A93C00, 0x07A8B280, 0x07A82900, + 0x07A79F80, 0x07A71600, 0x07A68C80, + 0x07A60300, 0x07A57980, 0x07A4F000, + 0x07A46680, 0x07A3DD00, 0x07A35380, + 0x07A2CA00, 0x07A24080, 0x07A1B700, + 0x07A12D80, 0x07A0A400, 0x07A01A80, + 0x079F9100, 0x079F0780, 0x079E7E00, + 0x079DF480, 0x079D6B00, 0x079CE180, + 0x079C5800, 0x079BCE80, 0x079B4500, + 0x079ABB80, 0x079A3200, 0x0799A880, + 0x07991F00, 0x07989580, 0x07980C00, + 0x07978280, 0x0796F900, 0x07966F80, + 0x0795E600, 0x07955C80, 0x0794D300, + 0x07944980, 0x0793C000, 0x07933680, + 0x0792AD00, 0x07922380, 0x07919A00, + 0x07911080, 0x07908700, 0x078FFD80, + 0x078F7400, 0x078EEA80, 0x078E6100, + 0x078DD780, 0x078D4E00, 0x078CC480, + 0x078C3B00, 0x078BB180, 0x078B2800, + 0x078A9E80, 0x078A1500, 0x07898B80, + 0x07890200, 0x07887880, 0x0787EF00, + 0x07876580, 0x0786DC00, 0x07865280, + 0x0785C900, 0x07853F80, 0x0784B600, + 0x07842C80, 0x0783A300, 0x07831980, + 0x07829000, 0x07820680, 0x07817D00, + 0x0780F380, 0x07806A00, 0x077FE080, + 0x077F5700, 0x077ECD80, 0x077E4400, + 0x077DBA80, 0x077D3100, 0x077CA780, + 0x077C1E00, 0x077B9480, 0x077B0B00, + 0x077A8180, 0x0779F800, 0x07796E80, + 0x0778E500, 0x07785B80, 0x0777D200, + 0x07774880, 0x0776BF00, 0x07763580, + 0x0775AC00, 0x07752280, 0x07749900, + 0x07740F80, 0x07738600, 0x0772FC80, + 0x07727300, 0x0771E980, 0x07716000, + 0x0770D680, 0x07704D00, 0x076FC380, + 0x076F3A00, 0x076EB080, 0x076E2700, + 0x076D9D80, 0x076D1400, 0x076C8A80, + 0x076C0100, 0x076B7780, 0x076AEE00, + 0x076A6480, 0x0769DB00, 0x07695180, + 0x0768C800, 0x07683E80, 0x0767B500, + 0x07672B80, 0x0766A200, 0x07661880, + 0x07658F00, 0x07650580, 0x07647C00, + 0x0763F280, 0x07636900, 0x0762DF80, + 0x07625600, 0x0761CC80, 0x07614300, + 0x0760B980, 0x07603000, 0x075FA680, + 0x075F1D00, 0x075E9380, 0x075E0A00, + 0x075D8080, 0x075CF700, 0x075C6D80, + 0x075BE400, 0x075B5A80, 0x075AD100, + 0x075A4780, 0x0759BE00, 0x07593480, + 0x0758AB00, 0x07582180, 0x07579800, + 0x07570E80, 0x07568500, 0x0755FB80, + 0x07557200, 0x0754E880, 0x07545F00, + 0x0753D580, 0x07534C00, 0x0752C280, + 0x07523900, 0x0751AF80, 0x07512600, + 0x07509C80, 0x07501300, 0x074F8980, + 0x074F0000, 0x074E7680, 0x074DED00, + 0x074D6380, 0x074CDA00, 0x074C5080, + 0x074BC700, 0x074B3D80, 0x074AB400, + 0x074A2A80, 0x0749A100, 0x07491780, + 0x07488E00, 0x07480480, 0x07477B00, + 0x0746F180, 0x07466800, 0x0745DE80, + 0x07455500, 0x0744CB80, 0x07444200, + 0x0743B880, 0x07432F00, 0x0742A580, + 0x07421C00, 0x07419280, 0x07410900, + 0x07407F80, 0x073FF600, 0x073F6C80, + 0x073EE300, 0x073E5980, 0x073DD000, + 0x073D4680, 0x073CBD00, 0x073C3380, + 0x073BAA00, 0x073B2080, 0x073A9700, + 0x073A0D80, 0x07398400, 0x0738FA80, + 0x07387100, 0x0737E780, 0x07375E00, + 0x0736D480, 0x07364B00, 0x0735C180, + 0x07353800, 0x0734AE80, 0x07342500, + 0x07339B80, 0x07331200, 0x07328880, + 0x0731FF00, 0x07317580, 0x0730EC00, + 0x07306280, 0x072FD900, 0x072F4F80, + 0x072EC600, 0x072E3C80, 0x072DB300, + 0x072D2980, 0x072CA000, 0x072C1680, + 0x072B8D00, 0x072B0380, 0x072A7A00, + 0x0729F080, 0x07296700, 0x0728DD80, + 0x07285400, 0x0727CA80, 0x07274100, + 0x0726B780, 0x07262E00, 0x0725A480, + 0x07251B00, 0x07249180, 0x07240800, + 0x07237E80, 0x0722F500, 0x07226B80, + 0x0721E200, 0x07215880, 0x0720CF00, + 0x07204580, 0x071FBC00, 0x071F3280, + 0x071EA900, 0x071E1F80, 0x071D9600, + 0x071D0C80, 0x071C8300, 0x071BF980, + 0x071B7000, 0x071AE680, 0x071A5D00, + 0x0719D380, 0x07194A00, 0x0718C080, + 0x07183700, 0x0717AD80, 0x07172400, + 0x07169A80, 0x07161100, 0x07158780, + 0x0714FE00, 0x07147480, 0x0713EB00, + 0x07136180, 0x0712D800, 0x07124E80, + 0x0711C500, 0x07113B80, 0x0710B200, + 0x07102880, 0x070F9F00, 0x070F1580, + 0x070E8C00, 0x070E0280, 0x070D7900, + 0x070CEF80, 0x070C6600, 0x070BDC80, + 0x070B5300, 0x070AC980, 0x070A4000, + 0x0709B680, 0x07092D00, 0x0708A380, + 0x07081A00, 0x07079080, 0x07070700, + 0x07067D80, 0x0705F400, 0x07056A80, + 0x0704E100, 0x07045780, 0x0703CE00, + 0x07034480, 0x0702BB00, 0x07023180, + 0x0701A800, 0x07011E80, 0x07009500, + 0x07000B80, 0x06FF8200, 0x06FEF880, + 0x06FE6F00, 0x06FDE580, 0x06FD5C00, + 0x06FCD280, 0x06FC4900, 0x06FBBF80, + 0x06FB3600, 0x06FAAC80, 0x06FA2300, + 0x06F99980, 0x06F91000, 0x06F88680, + 0x06F7FD00, 0x06F77380, 0x06F6EA00, + 0x06F66080, 0x06F5D700, 0x06F54D80, + 0x06F4C400, 0x06F43A80, 0x06F3B100, + 0x06F32780, 0x06F29E00, 0x06F21480, + 0x06F18B00, 0x06F10180, 0x06F07800, + 0x06EFEE80, 0x06EF6500, 0x06EEDB80, + 0x06EE5200, 0x06EDC880, 0x06ED3F00, + 0x06ECB580, 0x06EC2C00, 0x06EBA280, + 0x06EB1900, 0x06EA8F80, 0x06EA0600, + 0x06E97C80, 0x06E8F300, 0x06E86980, + 0x06E7E000, 0x06E75680, 0x06E6CD00, + 0x06E64380, 0x06E5BA00, 0x06E53080, + 0x06E4A700, 0x06E41D80, 0x06E39400, + 0x06E30A80, 0x06E28100, 0x06E1F780, + 0x06E16E00, 0x06E0E480, 0x06E05B00, + 0x06DFD180, 0x06DF4800, 0x06DEBE80, + 0x06DE3500, 0x06DDAB80, 0x06DD2200, + 0x06DC9880, 0x06DC0F00, 0x06DB8580, + 0x06DAFC00, 0x06DA7280, 0x06D9E900, + 0x06D95F80, 0x06D8D600, 0x06D84C80, + 0x06D7C300, 0x06D73980, 0x06D6B000, + 0x06D62680, 0x06D59D00, 0x06D51380, + 0x06D48A00, 0x06D40080, 0x06D37700, + 0x06D2ED80, 0x06D26400, 0x06D1DA80, + 0x06D15100, 0x06D0C780, 0x06D03E00, + 0x06CFB480, 0x06CF2B00, 0x06CEA180, + 0x06CE1800, 0x06CD8E80, 0x06CD0500, + 0x06CC7B80, 0x06CBF200, 0x06CB6880, + 0x06CADF00, 0x06CA5580, 0x06C9CC00, + 0x06C94280, 0x06C8B900, 0x06C82F80, + 0x06C7A600, 0x06C71C80, 0x06C69300, + 0x06C60980, 0x06C58000, 0x06C4F680, + 0x06C46D00, 0x06C3E380, 0x06C35A00, + 0x06C2D080, 0x06C24700, 0x06C1BD80, + 0x06C13400, 0x06C0AA80, 0x06C02100, + 0x06BF9780, 0x06BF0E00, 0x06BE8480, + 0x06BDFB00, 0x06BD7180, 0x06BCE800, + 0x06BC5E80, 0x06BBD500, 0x06BB4B80, + 0x06BAC200, 0x06BA3880, 0x06B9AF00, + 0x06B92580, 0x06B89C00, 0x06B81280, + 0x06B78900, 0x06B6FF80, 0x06B67600, + 0x06B5EC80, 0x06B56300, 0x06B4D980, + 0x06B45000, 0x06B3C680, 0x06B33D00, + 0x06B2B380, 0x06B22A00, 0x06B1A080, + 0x06B11700, 0x06B08D80, 0x06B00400, + 0x06AF7A80, 0x06AEF100, 0x06AE6780, + 0x06ADDE00, 0x06AD5480, 0x06ACCB00, + 0x06AC4180, 0x06ABB800, 0x06AB2E80, + 0x06AAA500, 0x06AA1B80, 0x06A99200, + 0x06A90880, 0x06A87F00, 0x06A7F580, + 0x06A76C00, 0x06A6E280, 0x06A65900, + 0x06A5CF80, 0x06A54600, 0x06A4BC80, + 0x06A43300, 0x06A3A980, 0x06A32000, + 0x06A29680, 0x06A20D00, 0x06A18380, + 0x06A0FA00, 0x06A07080, 0x069FE700, + 0x069F5D80, 0x069ED400, 0x069E4A80, + 0x069DC100, 0x069D3780, 0x069CAE00, + 0x069C2480, 0x069B9B00, 0x069B1180, + 0x069A8800, 0x0699FE80, 0x06997500, + 0x0698EB80, 0x06986200, 0x0697D880, + 0x06974F00, 0x0696C580, 0x06963C00, + 0x0695B280, 0x06952900, 0x06949F80, + 0x06941600, 0x06938C80, 0x06930300, + 0x06927980, 0x0691F000, 0x06916680, + 0x0690DD00, 0x06905380, 0x068FCA00, + 0x068F4080, 0x068EB700, 0x068E2D80, + 0x068DA400, 0x068D1A80, 0x068C9100, + 0x068C0780, 0x068B7E00, 0x068AF480, + 0x068A6B00, 0x0689E180, 0x06895800, + 0x0688CE80, 0x06884500, 0x0687BB80, + 0x06873200, 0x0686A880, 0x06861F00, + 0x06859580, 0x06850C00, 0x06848280, + 0x0683F900, 0x06836F80, 0x0682E600, + 0x06825C80, 0x0681D300, 0x06814980, + 0x0680C000, 0x06803680, 0x067FAD00, + 0x067F2380, 0x067E9A00, 0x067E1080, + 0x067D8700, 0x067CFD80, 0x067C7400, + 0x067BEA80, 0x067B6100, 0x067AD780, + 0x067A4E00, 0x0679C480, 0x06793B00, + 0x0678B180, 0x06782800, 0x06779E80, + 0x06771500, 0x06768B80, 0x06760200, + 0x06757880, 0x0674EF00, 0x06746580, + 0x0673DC00, 0x06735280, 0x0672C900, + 0x06723F80, 0x0671B600, 0x06712C80, + 0x0670A300, 0x06701980, 0x066F9000, + 0x066F0680, 0x066E7D00, 0x066DF380, + 0x066D6A00, 0x066CE080, 0x066C5700, + 0x066BCD80, 0x066B4400, 0x066ABA80, + 0x066A3100, 0x0669A780, 0x06691E00, + 0x06689480, 0x06680B00, 0x06678180, + 0x0666F800, 0x06666E80, 0x0665E500, + 0x06655B80, 0x0664D200, 0x06644880, + 0x0663BF00, 0x06633580, 0x0662AC00, + 0x06622280, 0x06619900, 0x06610F80, + 0x06608600, 0x065FFC80, 0x065F7300, + 0x065EE980, 0x065E6000, 0x065DD680, + 0x065D4D00, 0x065CC380, 0x065C3A00, + 0x065BB080, 0x065B2700, 0x065A9D80, + 0x065A1400, 0x06598A80, 0x06590100, + 0x06587780, 0x0657EE00, 0x06576480, + 0x0656DB00, 0x06565180, 0x0655C800, + 0x06553E80, 0x0654B500, 0x06542B80, + 0x0653A200, 0x06531880, 0x06528F00, + 0x06520580, 0x06517C00, 0x0650F280, + 0x06506900, 0x064FDF80, 0x064F5600, + 0x064ECC80, 0x064E4300, 0x064DB980, + 0x064D3000, 0x064CA680, 0x064C1D00, + 0x064B9380, 0x064B0A00, 0x064A8080, + 0x0649F700, 0x06496D80, 0x0648E400, + 0x06485A80, 0x0647D100, 0x06474780, + 0x0646BE00, 0x06463480, 0x0645AB00, + 0x06452180, 0x06449800, 0x06440E80, + 0x06438500, 0x0642FB80, 0x06427200, + 0x0641E880, 0x06415F00, 0x0640D580, + 0x06404C00, 0x063FC280, 0x063F3900, + 0x063EAF80, 0x063E2600, 0x063D9C80, + 0x063D1300, 0x063C8980, 0x063C0000, + 0x063B7680, 0x063AED00, 0x063A6380, + 0x0639DA00, 0x06395080, 0x0638C700, + 0x06383D80, 0x0637B400, 0x06372A80, + 0x0636A100, 0x06361780, 0x06358E00, + 0x06350480, 0x06347B00, 0x0633F180, + 0x06336800, 0x0632DE80, 0x06325500, + 0x0631CB80, 0x06314200, 0x0630B880, + 0x06302F00, 0x062FA580, 0x062F1C00, + 0x062E9280, 0x062E0900, 0x062D7F80, + 0x062CF600, 0x062C6C80, 0x062BE300, + 0x062B5980, 0x062AD000, 0x062A4680, + 0x0629BD00, 0x06293380, 0x0628AA00, + 0x06282080, 0x06279700, 0x06270D80, + 0x06268400, 0x0625FA80, 0x06257100, + 0x0624E780, 0x06245E00, 0x0623D480, + 0x06234B00, 0x0622C180, 0x06223800, + 0x0621AE80, 0x06212500, 0x06209B80, + 0x06201200, 0x061F8880, 0x061EFF00, + 0x061E7580, 0x061DEC00, 0x061D6280, + 0x061CD900, 0x061C4F80, 0x061BC600, + 0x061B3C80, 0x061AB300, 0x061A2980, + 0x0619A000, 0x06191680, 0x06188D00, + 0x06180380, 0x06177A00, 0x0616F080, + 0x06166700, 0x0615DD80, 0x06155400, + 0x0614CA80, 0x06144100, 0x0613B780, + 0x06132E00, 0x0612A480, 0x06121B00, + 0x06119180, 0x06110800, 0x06107E80, + 0x060FF500, 0x060F6B80, 0x060EE200, + 0x060E5880, 0x060DCF00, 0x060D4580, + 0x060CBC00, 0x060C3280, 0x060BA900, + 0x060B1F80, 0x060A9600, 0x060A0C80, + 0x06098300, 0x0608F980, 0x06087000, + 0x0607E680, 0x06075D00, 0x0606D380, + 0x06064A00, 0x0605C080, 0x06053700, + 0x0604AD80, 0x06042400, 0x06039A80, + 0x06031100, 0x06028780, 0x0601FE00, + 0x06017480, 0x0600EB00, 0x06006180, + 0x05FFD800, 0x05FF4E80, 0x05FEC500, + 0x05FE3B80, 0x05FDB200, 0x05FD2880, + 0x05FC9F00, 0x05FC1580, 0x05FB8C00, + 0x05FB0280, 0x05FA7900, 0x05F9EF80, + 0x05F96600, 0x05F8DC80, 0x05F85300, + 0x05F7C980, 0x05F74000, 0x05F6B680, + 0x05F62D00, 0x05F5A380, 0x05F51A00, + 0x05F49080, 0x05F40700, 0x05F37D80, + 0x05F2F400, 0x05F26A80, 0x05F1E100, + 0x05F15780, 0x05F0CE00, 0x05F04480, + 0x05EFBB00, 0x05EF3180, 0x05EEA800, + 0x05EE1E80, 0x05ED9500, 0x05ED0B80, + 0x05EC8200, 0x05EBF880, 0x05EB6F00, + 0x05EAE580, 0x05EA5C00, 0x05E9D280, + 0x05E94900, 0x05E8BF80, 0x05E83600, + 0x05E7AC80, 0x05E72300, 0x05E69980, + 0x05E61000, 0x05E58680, 0x05E4FD00, + 0x05E47380, 0x05E3EA00, 0x05E36080, + 0x05E2D700, 0x05E24D80, 0x05E1C400, + 0x05E13A80, 0x05E0B100, 0x05E02780, + 0x05DF9E00, 0x05DF1480, 0x05DE8B00, + 0x05DE0180, 0x05DD7800, 0x05DCEE80, + 0x05DC6500, 0x05DBDB80, 0x05DB5200, + 0x05DAC880, 0x05DA3F00, 0x05D9B580, + 0x05D92C00, 0x05D8A280, 0x05D81900, + 0x05D78F80, 0x05D70600, 0x05D67C80, + 0x05D5F300, 0x05D56980, 0x05D4E000, + 0x05D45680, 0x05D3CD00, 0x05D34380, + 0x05D2BA00, 0x05D23080, 0x05D1A700, + 0x05D11D80, 0x05D09400, 0x05D00A80, + 0x05CF8100, 0x05CEF780, 0x05CE6E00, + 0x05CDE480, 0x05CD5B00, 0x05CCD180, + 0x05CC4800, 0x05CBBE80, 0x05CB3500, + 0x05CAAB80, 0x05CA2200, 0x05C99880, + 0x05C90F00, 0x05C88580, 0x05C7FC00, + 0x05C77280, 0x05C6E900, 0x05C65F80, + 0x05C5D600, 0x05C54C80, 0x05C4C300, + 0x05C43980, 0x05C3B000, 0x05C32680, + 0x05C29D00, 0x05C21380, 0x05C18A00, + 0x05C10080, 0x05C07700, 0x05BFED80, + 0x05BF6400, 0x05BEDA80, 0x05BE5100, + 0x05BDC780, 0x05BD3E00, 0x05BCB480, + 0x05BC2B00, 0x05BBA180, 0x05BB1800, + 0x05BA8E80, 0x05BA0500, 0x05B97B80, + 0x05B8F200, 0x05B86880, 0x05B7DF00, + 0x05B75580, 0x05B6CC00, 0x05B64280, + 0x05B5B900, 0x05B52F80, 0x05B4A600, + 0x05B41C80, 0x05B39300, 0x05B30980, + 0x05B28000, 0x05B1F680, 0x05B16D00, + 0x05B0E380, 0x05B05A00, 0x05AFD080, + 0x05AF4700, 0x05AEBD80, 0x05AE3400, + 0x05ADAA80, 0x05AD2100, 0x05AC9780, + 0x05AC0E00, 0x05AB8480, 0x05AAFB00, + 0x05AA7180, 0x05A9E800, 0x05A95E80, + 0x05A8D500, 0x05A84B80, 0x05A7C200, + 0x05A73880, 0x05A6AF00, 0x05A62580, + 0x05A59C00, 0x05A51280, 0x05A48900, + 0x05A3FF80, 0x05A37600, 0x05A2EC80, + 0x05A26300, 0x05A1D980, 0x05A15000, + 0x05A0C680, 0x05A03D00, 0x059FB380, + 0x059F2A00, 0x059EA080, 0x059E1700, + 0x059D8D80, 0x059D0400, 0x059C7A80, + 0x059BF100, 0x059B6780, 0x059ADE00, + 0x059A5480, 0x0599CB00, 0x05994180, + 0x0598B800, 0x05982E80, 0x0597A500, + 0x05971B80, 0x05969200, 0x05960880, + 0x05957F00, 0x0594F580, 0x05946C00, + 0x0593E280, 0x05935900, 0x0592CF80, + 0x05924600, 0x0591BC80, 0x05913300, + 0x0590A980, 0x05902000, 0x058F9680, + 0x058F0D00, 0x058E8380, 0x058DFA00, + 0x058D7080, 0x058CE700, 0x058C5D80, + 0x058BD400, 0x058B4A80, 0x058AC100, + 0x058A3780, 0x0589AE00, 0x05892480, + 0x05889B00, 0x05881180, 0x05878800, + 0x0586FE80, 0x05867500, 0x0585EB80, + 0x05856200, 0x0584D880, 0x05844F00, + 0x0583C580, 0x05833C00, 0x0582B280, + 0x05822900, 0x05819F80, 0x05811600, + 0x05808C80, 0x05800300, 0x057F7980, + 0x057EF000, 0x057E6680, 0x057DDD00, + 0x057D5380, 0x057CCA00, 0x057C4080, + 0x057BB700, 0x057B2D80, 0x057AA400, + 0x057A1A80, 0x05799100, 0x05790780, + 0x05787E00, 0x0577F480, 0x05776B00, + 0x0576E180, 0x05765800, 0x0575CE80, + 0x05754500, 0x0574BB80, 0x05743200, + 0x0573A880, 0x05731F00, 0x05729580, + 0x05720C00, 0x05718280, 0x0570F900, + 0x05706F80, 0x056FE600, 0x056F5C80, + 0x056ED300, 0x056E4980, 0x056DC000, + 0x056D3680, 0x056CAD00, 0x056C2380, + 0x056B9A00, 0x056B1080, 0x056A8700, + 0x0569FD80, 0x05697400, 0x0568EA80, + 0x05686100, 0x0567D780, 0x05674E00, + 0x0566C480, 0x05663B00, 0x0565B180, + 0x05652800, 0x05649E80, 0x05641500, + 0x05638B80, 0x05630200, 0x05627880, + 0x0561EF00, 0x05616580, 0x0560DC00, + 0x05605280, 0x055FC900, 0x055F3F80, + 0x055EB600, 0x055E2C80, 0x055DA300, + 0x055D1980, 0x055C9000, 0x055C0680, + 0x055B7D00, 0x055AF380, 0x055A6A00, + 0x0559E080, 0x05595700, 0x0558CD80, + 0x05584400, 0x0557BA80, 0x05573100, + 0x0556A780, 0x05561E00, 0x05559480, + 0x05550B00, 0x05548180, 0x0553F800, + 0x05536E80, 0x0552E500, 0x05525B80, + 0x0551D200, 0x05514880, 0x0550BF00, + 0x05503580, 0x054FAC00, 0x054F2280, + 0x054E9900, 0x054E0F80, 0x054D8600, + 0x054CFC80, 0x054C7300, 0x054BE980, + 0x054B6000, 0x054AD680, 0x054A4D00, + 0x0549C380, 0x05493A00, 0x0548B080, + 0x05482700, 0x05479D80, 0x05471400, + 0x05468A80, 0x05460100, 0x05457780, + 0x0544EE00, 0x05446480, 0x0543DB00, + 0x05435180, 0x0542C800, 0x05423E80, + 0x0541B500, 0x05412B80, 0x0540A200, + 0x05401880, 0x053F8F00, 0x053F0580, + 0x053E7C00, 0x053DF280, 0x053D6900, + 0x053CDF80, 0x053C5600, 0x053BCC80, + 0x053B4300, 0x053AB980, 0x053A3000, + 0x0539A680, 0x05391D00, 0x05389380, + 0x05380A00, 0x05378080, 0x0536F700, + 0x05366D80, 0x0535E400, 0x05355A80, + 0x0534D100, 0x05344780, 0x0533BE00, + 0x05333480, 0x0532AB00, 0x05322180, + 0x05319800, 0x05310E80, 0x05308500, + 0x052FFB80, 0x052F7200, 0x052EE880, + 0x052E5F00, 0x052DD580, 0x052D4C00, + 0x052CC280, 0x052C3900, 0x052BAF80, + 0x052B2600, 0x052A9C80, 0x052A1300, + 0x05298980, 0x05290000, 0x05287680, + 0x0527ED00, 0x05276380, 0x0526DA00, + 0x05265080, 0x0525C700, 0x05253D80, + 0x0524B400, 0x05242A80, 0x0523A100, + 0x05231780, 0x05228E00, 0x05220480, + 0x05217B00, 0x0520F180, 0x05206800, + 0x051FDE80, 0x051F5500, 0x051ECB80, + 0x051E4200, 0x051DB880, 0x051D2F00, + 0x051CA580, 0x051C1C00, 0x051B9280, + 0x051B0900, 0x051A7F80, 0x0519F600, + 0x05196C80, 0x0518E300, 0x05185980, + 0x0517D000, 0x05174680, 0x0516BD00, + 0x05163380, 0x0515AA00, 0x05152080, + 0x05149700, 0x05140D80, 0x05138400, + 0x0512FA80, 0x05127100, 0x0511E780, + 0x05115E00, 0x0510D480, 0x05104B00, + 0x050FC180, 0x050F3800, 0x050EAE80, + 0x050E2500, 0x050D9B80, 0x050D1200, + 0x050C8880, 0x050BFF00, 0x050B7580, + 0x050AEC00, 0x050A6280, 0x0509D900, + 0x05094F80, 0x0508C600, 0x05083C80, + 0x0507B300, 0x05072980, 0x0506A000, + 0x05061680, 0x05058D00, 0x05050380, + 0x05047A00, 0x0503F080, 0x05036700, + 0x0502DD80, 0x05025400, 0x0501CA80, + 0x05014100, 0x0500B780, 0x05002E00, + 0x04FFA480, 0x04FF1B00, 0x04FE9180, + 0x04FE0800, 0x04FD7E80, 0x04FCF500, + 0x04FC6B80, 0x04FBE200, 0x04FB5880, + 0x04FACF00, 0x04FA4580, 0x04F9BC00, + 0x04F93280, 0x04F8A900, 0x04F81F80, + 0x04F79600, 0x04F70C80, 0x04F68300, + 0x04F5F980, 0x04F57000, 0x04F4E680, + 0x04F45D00, 0x04F3D380, 0x04F34A00, + 0x04F2C080, 0x04F23700, 0x04F1AD80, + 0x04F12400, 0x04F09A80, 0x04F01100, + 0x04EF8780, 0x04EEFE00, 0x04EE7480, + 0x04EDEB00, 0x04ED6180, 0x04ECD800, + 0x04EC4E80, 0x04EBC500, 0x04EB3B80, + 0x04EAB200, 0x04EA2880, 0x04E99F00, + 0x04E91580, 0x04E88C00, 0x04E80280, + 0x04E77900, 0x04E6EF80, 0x04E66600, + 0x04E5DC80, 0x04E55300, 0x04E4C980, + 0x04E44000, 0x04E3B680, 0x04E32D00, + 0x04E2A380, 0x04E21A00, 0x04E19080, + 0x04E10700, 0x04E07D80, 0x04DFF400, + 0x04DF6A80, 0x04DEE100, 0x04DE5780, + 0x04DDCE00, 0x04DD4480, 0x04DCBB00, + 0x04DC3180, 0x04DBA800, 0x04DB1E80, + 0x04DA9500, 0x04DA0B80, 0x04D98200, + 0x04D8F880, 0x04D86F00, 0x04D7E580, + 0x04D75C00, 0x04D6D280, 0x04D64900, + 0x04D5BF80, 0x04D53600, 0x04D4AC80, + 0x04D42300, 0x04D39980, 0x04D31000, + 0x04D28680, 0x04D1FD00, 0x04D17380, + 0x04D0EA00, 0x04D06080, 0x04CFD700, + 0x04CF4D80, 0x04CEC400, 0x04CE3A80, + 0x04CDB100, 0x04CD2780, 0x04CC9E00, + 0x04CC1480, 0x04CB8B00, 0x04CB0180, + 0x04CA7800, 0x04C9EE80, 0x04C96500, + 0x04C8DB80, 0x04C85200, 0x04C7C880, + 0x04C73F00, 0x04C6B580, 0x04C62C00, + 0x04C5A280, 0x04C51900, 0x04C48F80, + 0x04C40600, 0x04C37C80, 0x04C2F300, + 0x04C26980, 0x04C1E000, 0x04C15680, + 0x04C0CD00, 0x04C04380, 0x04BFBA00, + 0x04BF3080, 0x04BEA700, 0x04BE1D80, + 0x04BD9400, 0x04BD0A80, 0x04BC8100, + 0x04BBF780, 0x04BB6E00, 0x04BAE480, + 0x04BA5B00, 0x04B9D180, 0x04B94800, + 0x04B8BE80, 0x04B83500, 0x04B7AB80, + 0x04B72200, 0x04B69880, 0x04B60F00, + 0x04B58580, 0x04B4FC00, 0x04B47280, + 0x04B3E900, 0x04B35F80, 0x04B2D600, + 0x04B24C80, 0x04B1C300, 0x04B13980, + 0x04B0B000, 0x04B02680, 0x04AF9D00, + 0x04AF1380, 0x04AE8A00, 0x04AE0080, + 0x04AD7700, 0x04ACED80, 0x04AC6400, + 0x04ABDA80, 0x04AB5100, 0x04AAC780, + 0x04AA3E00, 0x04A9B480, 0x04A92B00, + 0x04A8A180, 0x04A81800, 0x04A78E80, + 0x04A70500, 0x04A67B80, 0x04A5F200, + 0x04A56880, 0x04A4DF00, 0x04A45580, + 0x04A3CC00, 0x04A34280, 0x04A2B900, + 0x04A22F80, 0x04A1A600, 0x04A11C80, + 0x04A09300, 0x04A00980, 0x049F8000, + 0x049EF680, 0x049E6D00, 0x049DE380, + 0x049D5A00, 0x049CD080, 0x049C4700, + 0x049BBD80, 0x049B3400, 0x049AAA80, + 0x049A2100, 0x04999780, 0x04990E00, + 0x04988480, 0x0497FB00, 0x04977180, + 0x0496E800, 0x04965E80, 0x0495D500, + 0x04954B80, 0x0494C200, 0x04943880, + 0x0493AF00, 0x04932580, 0x04929C00, + 0x04921280, 0x04918900, 0x0490FF80, + 0x04907600, 0x048FEC80, 0x048F6300, + 0x048ED980, 0x048E5000, 0x048DC680, + 0x048D3D00, 0x048CB380, 0x048C2A00, + 0x048BA080, 0x048B1700, 0x048A8D80, + 0x048A0400, 0x04897A80, 0x0488F100, + 0x04886780, 0x0487DE00, 0x04875480, + 0x0486CB00, 0x04864180, 0x0485B800, + 0x04852E80, 0x0484A500, 0x04841B80, + 0x04839200, 0x04830880, 0x04827F00, + 0x0481F580, 0x04816C00, 0x0480E280, + 0x04805900, 0x047FCF80, 0x047F4600, + 0x047EBC80, 0x047E3300, 0x047DA980, + 0x047D2000, 0x047C9680, 0x047C0D00, + 0x047B8380, 0x047AFA00, 0x047A7080, + 0x0479E700, 0x04795D80, 0x0478D400, + 0x04784A80, 0x0477C100, 0x04773780, + 0x0476AE00, 0x04762480, 0x04759B00, + 0x04751180, 0x04748800, 0x0473FE80, + 0x04737500, 0x0472EB80, 0x04726200, + 0x0471D880, 0x04714F00, 0x0470C580, + 0x04703C00, 0x046FB280, 0x046F2900, + 0x046E9F80, 0x046E1600, 0x046D8C80, + 0x046D0300, 0x046C7980, 0x046BF000, + 0x046B6680, 0x046ADD00, 0x046A5380, + 0x0469CA00, 0x04694080, 0x0468B700, + 0x04682D80, 0x0467A400, 0x04671A80, + 0x04669100, 0x04660780, 0x04657E00, + 0x0464F480, 0x04646B00, 0x0463E180, + 0x04635800, 0x0462CE80, 0x04624500, + 0x0461BB80, 0x04613200, 0x0460A880, + 0x04601F00, 0x045F9580, 0x045F0C00, + 0x045E8280, 0x045DF900, 0x045D6F80, + 0x045CE600, 0x045C5C80, 0x045BD300, + 0x045B4980, 0x045AC000, 0x045A3680, + 0x0459AD00, 0x04592380, 0x04589A00, + 0x04581080, 0x04578700, 0x0456FD80, + 0x04567400, 0x0455EA80, 0x04556100, + 0x0454D780, 0x04544E00, 0x0453C480, + 0x04533B00, 0x0452B180, 0x04522800, + 0x04519E80, 0x04511500, 0x04508B80, + 0x04500200, 0x044F7880, 0x044EEF00, + 0x044E6580, 0x044DDC00, 0x044D5280, + 0x044CC900, 0x044C3F80, 0x044BB600, + 0x044B2C80, 0x044AA300, 0x044A1980, + 0x04499000, 0x04490680, 0x04487D00, + 0x0447F380, 0x04476A00, 0x0446E080, + 0x04465700, 0x0445CD80, 0x04454400, + 0x0444BA80, 0x04443100, 0x0443A780, + 0x04431E00, 0x04429480, 0x04420B00, + 0x04418180, 0x0440F800, 0x04406E80, + 0x043FE500, 0x043F5B80, 0x043ED200, + 0x043E4880, 0x043DBF00, 0x043D3580, + 0x043CAC00, 0x043C2280, 0x043B9900, + 0x043B0F80, 0x043A8600, 0x0439FC80, + 0x04397300, 0x0438E980, 0x04386000, + 0x0437D680, 0x04374D00, 0x0436C380, + 0x04363A00, 0x0435B080, 0x04352700, + 0x04349D80, 0x04341400, 0x04338A80, + 0x04330100, 0x04327780, 0x0431EE00, + 0x04316480, 0x0430DB00, 0x04305180, + 0x042FC800, 0x042F3E80, 0x042EB500, + 0x042E2B80, 0x042DA200, 0x042D1880, + 0x042C8F00, 0x042C0580, 0x042B7C00, + 0x042AF280, 0x042A6900, 0x0429DF80, + 0x04295600, 0x0428CC80, 0x04284300, + 0x0427B980, 0x04273000, 0x0426A680, + 0x04261D00, 0x04259380, 0x04250A00, + 0x04248080, 0x0423F700, 0x04236D80, + 0x0422E400, 0x04225A80, 0x0421D100, + 0x04214780, 0x0420BE00, 0x04203480, + 0x041FAB00, 0x041F2180, 0x041E9800, + 0x041E0E80, 0x041D8500, 0x041CFB80, + 0x041C7200, 0x041BE880, 0x041B5F00, + 0x041AD580, 0x041A4C00, 0x0419C280, + 0x04193900, 0x0418AF80, 0x04182600, + 0x04179C80, 0x04171300, 0x04168980, + 0x04160000, 0x04157D40, 0x0414FA80, + 0x041477C0, 0x0413F500, 0x04137240, + 0x0412EF80, 0x04126CC0, 0x0411EA00, + 0x04116740, 0x0410E480, 0x041061C0, + 0x040FDF00, 0x040F5C40, 0x040ED980, + 0x040E56C0, 0x040DD400, 0x040D5140, + 0x040CCE80, 0x040C4BC0, 0x040BC900, + 0x040B4640, 0x040AC380, 0x040A40C0, + 0x0409BE00, 0x04093B40, 0x0408B880, + 0x040835C0, 0x0407B300, 0x04073040, + 0x0406AD80, 0x04062AC0, 0x0405A800, + 0x04052540, 0x0404A280, 0x04041FC0, + 0x04039D00, 0x04031A40, 0x04029780, + 0x040214C0, 0x04019200, 0x04010F40, + 0x04008C80, 0x040009C0, 0x03FF8700, + 0x03FF0440, 0x03FE8180, 0x03FDFEC0, + 0x03FD7C00, 0x03FCF940, 0x03FC7680, + 0x03FBF3C0, 0x03FB7100, 0x03FAEE40, + 0x03FA6B80, 0x03F9E8C0, 0x03F96600, + 0x03F8E340, 0x03F86080, 0x03F7DDC0, + 0x03F75B00, 0x03F6D840, 0x03F65580, + 0x03F5D2C0, 0x03F55000, 0x03F4CD40, + 0x03F44A80, 0x03F3C7C0, 0x03F34500, + 0x03F2C240, 0x03F23F80, 0x03F1BCC0, + 0x03F13A00, 0x03F0B740, 0x03F03480, + 0x03EFB1C0, 0x03EF2F00, 0x03EEAC40, + 0x03EE2980, 0x03EDA6C0, 0x03ED2400, + 0x03ECA140, 0x03EC1E80, 0x03EB9BC0, + 0x03EB1900, 0x03EA9640, 0x03EA1380, + 0x03E990C0, 0x03E90E00, 0x03E88B40, + 0x03E80880, 0x03E785C0, 0x03E70300, + 0x03E68040, 0x03E5FD80, 0x03E57AC0, + 0x03E4F800, 0x03E47540, 0x03E3F280, + 0x03E36FC0, 0x03E2ED00, 0x03E26A40, + 0x03E1E780, 0x03E164C0, 0x03E0E200, + 0x03E05F40, 0x03DFDC80, 0x03DF59C0, + 0x03DED700, 0x03DE5440, 0x03DDD180, + 0x03DD4EC0, 0x03DCCC00, 0x03DC4940, + 0x03DBC680, 0x03DB43C0, 0x03DAC100, + 0x03DA3E40, 0x03D9BB80, 0x03D938C0, + 0x03D8B600, 0x03D83340, 0x03D7B080, + 0x03D72DC0, 0x03D6AB00, 0x03D62840, + 0x03D5A580, 0x03D522C0, 0x03D4A000, + 0x03D41D40, 0x03D39A80, 0x03D317C0, + 0x03D29500, 0x03D21240, 0x03D18F80, + 0x03D10CC0, 0x03D08A00, 0x03D00740, + 0x03CF8480, 0x03CF01C0, 0x03CE7F00, + 0x03CDFC40, 0x03CD7980, 0x03CCF6C0, + 0x03CC7400, 0x03CBF140, 0x03CB6E80, + 0x03CAEBC0, 0x03CA6900, 0x03C9E640, + 0x03C96380, 0x03C8E0C0, 0x03C85E00, + 0x03C7DB40, 0x03C75880, 0x03C6D5C0, + 0x03C65300, 0x03C5D040, 0x03C54D80, + 0x03C4CAC0, 0x03C44800, 0x03C3C540, + 0x03C34280, 0x03C2BFC0, 0x03C23D00, + 0x03C1BA40, 0x03C13780, 0x03C0B4C0, + 0x03C03200, 0x03BFAF40, 0x03BF2C80, + 0x03BEA9C0, 0x03BE2700, 0x03BDA440, + 0x03BD2180, 0x03BC9EC0, 0x03BC1C00, + 0x03BB9940, 0x03BB1680, 0x03BA93C0, + 0x03BA1100, 0x03B98E40, 0x03B90B80, + 0x03B888C0, 0x03B80600, 0x03B78340, + 0x03B70080, 0x03B67DC0, 0x03B5FB00, + 0x03B57840, 0x03B4F580, 0x03B472C0, + 0x03B3F000, 0x03B36D40, 0x03B2EA80, + 0x03B267C0, 0x03B1E500, 0x03B16240, + 0x03B0DF80, 0x03B05CC0, 0x03AFDA00, + 0x03AF5740, 0x03AED480, 0x03AE51C0, + 0x03ADCF00, 0x03AD4C40, 0x03ACC980, + 0x03AC46C0, 0x03ABC400, 0x03AB4140, + 0x03AABE80, 0x03AA3BC0, 0x03A9B900, + 0x03A93640, 0x03A8B380, 0x03A830C0, + 0x03A7AE00, 0x03A72B40, 0x03A6A880, + 0x03A625C0, 0x03A5A300, 0x03A52040, + 0x03A49D80, 0x03A41AC0, 0x03A39800, + 0x03A31540, 0x03A29280, 0x03A20FC0, + 0x03A18D00, 0x03A10A40, 0x03A08780, + 0x03A004C0, 0x039F8200, 0x039EFF40, + 0x039E7C80, 0x039DF9C0, 0x039D7700, + 0x039CF440, 0x039C7180, 0x039BEEC0, + 0x039B6C00, 0x039AE940, 0x039A6680, + 0x0399E3C0, 0x03996100, 0x0398DE40, + 0x03985B80, 0x0397D8C0, 0x03975600, + 0x0396D340, 0x03965080, 0x0395CDC0, + 0x03954B00, 0x0394C840, 0x03944580, + 0x0393C2C0, 0x03934000, 0x0392BD40, + 0x03923A80, 0x0391B7C0, 0x03913500, + 0x0390B240, 0x03902F80, 0x038FACC0, + 0x038F2A00, 0x038EA740, 0x038E2480, + 0x038DA1C0, 0x038D1F00, 0x038C9C40, + 0x038C1980, 0x038B96C0, 0x038B1400, + 0x038A9140, 0x038A0E80, 0x03898BC0, + 0x03890900, 0x03888640, 0x03880380, + 0x038780C0, 0x0386FE00, 0x03867B40, + 0x0385F880, 0x038575C0, 0x0384F300, + 0x03847040, 0x0383ED80, 0x03836AC0, + 0x0382E800, 0x03826540, 0x0381E280, + 0x03815FC0, 0x0380DD00, 0x03805A40, + 0x037FD780, 0x037F54C0, 0x037ED200, + 0x037E4F40, 0x037DCC80, 0x037D49C0, + 0x037CC700, 0x037C4440, 0x037BC180, + 0x037B3EC0, 0x037ABC00, 0x037A3940, + 0x0379B680, 0x037933C0, 0x0378B100, + 0x03782E40, 0x0377AB80, 0x037728C0, + 0x0376A600, 0x03762340, 0x0375A080, + 0x03751DC0, 0x03749B00, 0x03741840, + 0x03739580, 0x037312C0, 0x03729000, + 0x03720D40, 0x03718A80, 0x037107C0, + 0x03708500, 0x03700240, 0x036F7F80, + 0x036EFCC0, 0x036E7A00, 0x036DF740, + 0x036D7480, 0x036CF1C0, 0x036C6F00, + 0x036BEC40, 0x036B6980, 0x036AE6C0, + 0x036A6400, 0x0369E140, 0x03695E80, + 0x0368DBC0, 0x03685900, 0x0367D640, + 0x03675380, 0x0366D0C0, 0x03664E00, + 0x0365CB40, 0x03654880, 0x0364C5C0, + 0x03644300, 0x0363C040, 0x03633D80, + 0x0362BAC0, 0x03623800, 0x0361B540, + 0x03613280, 0x0360AFC0, 0x03602D00, + 0x035FAA40, 0x035F2780, 0x035EA4C0, + 0x035E2200, 0x035D9F40, 0x035D1C80, + 0x035C99C0, 0x035C1700, 0x035B9440, + 0x035B1180, 0x035A8EC0, 0x035A0C00, + 0x03598940, 0x03590680, 0x035883C0, + 0x03580100, 0x03577E40, 0x0356FB80, + 0x035678C0, 0x0355F600, 0x03557340, + 0x0354F080, 0x03546DC0, 0x0353EB00, + 0x03536840, 0x0352E580, 0x035262C0, + 0x0351E000, 0x03515D40, 0x0350DA80, + 0x035057C0, 0x034FD500, 0x034F5240, + 0x034ECF80, 0x034E4CC0, 0x034DCA00, + 0x034D4740, 0x034CC480, 0x034C41C0, + 0x034BBF00, 0x034B3C40, 0x034AB980, + 0x034A36C0, 0x0349B400, 0x03493140, + 0x0348AE80, 0x03482BC0, 0x0347A900, + 0x03472640, 0x0346A380, 0x034620C0, + 0x03459E00, 0x03451B40, 0x03449880, + 0x034415C0, 0x03439300, 0x03431040, + 0x03428D80, 0x03420AC0, 0x03418800, + 0x03410540, 0x03408280, 0x033FFFC0, + 0x033F7D00, 0x033EFA40, 0x033E7780, + 0x033DF4C0, 0x033D7200, 0x033CEF40, + 0x033C6C80, 0x033BE9C0, 0x033B6700, + 0x033AE440, 0x033A6180, 0x0339DEC0, + 0x03395C00, 0x0338D940, 0x03385680, + 0x0337D3C0, 0x03375100, 0x0336CE40, + 0x03364B80, 0x0335C8C0, 0x03354600, + 0x0334C340, 0x03344080, 0x0333BDC0, + 0x03333B00, 0x0332B840, 0x03323580, + 0x0331B2C0, 0x03313000, 0x0330AD40, + 0x03302A80, 0x032FA7C0, 0x032F2500, + 0x032EA240, 0x032E1F80, 0x032D9CC0, + 0x032D1A00, 0x032C9740, 0x032C1480, + 0x032B91C0, 0x032B0F00, 0x032A8C40, + 0x032A0980, 0x032986C0, 0x03290400, + 0x03288140, 0x0327FE80, 0x03277BC0, + 0x0326F900, 0x03267640, 0x0325F380, + 0x032570C0, 0x0324EE00, 0x03246B40, + 0x0323E880, 0x032365C0, 0x0322E300, + 0x03226040, 0x0321DD80, 0x03215AC0, + 0x0320D800, 0x03205540, 0x031FD280, + 0x031F4FC0, 0x031ECD00, 0x031E4A40, + 0x031DC780, 0x031D44C0, 0x031CC200, + 0x031C3F40, 0x031BBC80, 0x031B39C0, + 0x031AB700, 0x031A3440, 0x0319B180, + 0x03192EC0, 0x0318AC00, 0x03182940, + 0x0317A680, 0x031723C0, 0x0316A100, + 0x03161E40, 0x03159B80, 0x031518C0, + 0x03149600, 0x03141340, 0x03139080, + 0x03130DC0, 0x03128B00, 0x03120840, + 0x03118580, 0x031102C0, 0x03108000, + 0x030FFD40, 0x030F7A80, 0x030EF7C0, + 0x030E7500, 0x030DF240, 0x030D6F80, + 0x030CECC0, 0x030C6A00, 0x030BE740, + 0x030B6480, 0x030AE1C0, 0x030A5F00, + 0x0309DC40, 0x03095980, 0x0308D6C0, + 0x03085400, 0x0307D140, 0x03074E80, + 0x0306CBC0, 0x03064900, 0x0305C640, + 0x03054380, 0x0304C0C0, 0x03043E00, + 0x0303BB40, 0x03033880, 0x0302B5C0, + 0x03023300, 0x0301B040, 0x03012D80, + 0x0300AAC0, 0x03002800, 0x02FFA540, + 0x02FF2280, 0x02FE9FC0, 0x02FE1D00, + 0x02FD9A40, 0x02FD1780, 0x02FC94C0, + 0x02FC1200, 0x02FB8F40, 0x02FB0C80, + 0x02FA89C0, 0x02FA0700, 0x02F98440, + 0x02F90180, 0x02F87EC0, 0x02F7FC00, + 0x02F77940, 0x02F6F680, 0x02F673C0, + 0x02F5F100, 0x02F56E40, 0x02F4EB80, + 0x02F468C0, 0x02F3E600, 0x02F36340, + 0x02F2E080, 0x02F25DC0, 0x02F1DB00, + 0x02F15840, 0x02F0D580, 0x02F052C0, + 0x02EFD000, 0x02EF4D40, 0x02EECA80, + 0x02EE47C0, 0x02EDC500, 0x02ED4240, + 0x02ECBF80, 0x02EC3CC0, 0x02EBBA00, + 0x02EB3740, 0x02EAB480, 0x02EA31C0, + 0x02E9AF00, 0x02E92C40, 0x02E8A980, + 0x02E826C0, 0x02E7A400, 0x02E72140, + 0x02E69E80, 0x02E61BC0, 0x02E59900, + 0x02E51640, 0x02E49380, 0x02E410C0, + 0x02E38E00, 0x02E30B40, 0x02E28880, + 0x02E205C0, 0x02E18300, 0x02E10040, + 0x02E07D80, 0x02DFFAC0, 0x02DF7800, + 0x02DEF540, 0x02DE7280, 0x02DDEFC0, + 0x02DD6D00, 0x02DCEA40, 0x02DC6780, + 0x02DBE4C0, 0x02DB6200, 0x02DADF40, + 0x02DA5C80, 0x02D9D9C0, 0x02D95700, + 0x02D8D440, 0x02D85180, 0x02D7CEC0, + 0x02D74C00, 0x02D6C940, 0x02D64680, + 0x02D5C3C0, 0x02D54100, 0x02D4BE40, + 0x02D43B80, 0x02D3B8C0, 0x02D33600, + 0x02D2B340, 0x02D23080, 0x02D1ADC0, + 0x02D12B00, 0x02D0A840, 0x02D02580, + 0x02CFA2C0, 0x02CF2000, 0x02CE9D40, + 0x02CE1A80, 0x02CD97C0, 0x02CD1500, + 0x02CC9240, 0x02CC0F80, 0x02CB8CC0, + 0x02CB0A00, 0x02CA8740, 0x02CA0480, + 0x02C981C0, 0x02C8FF00, 0x02C87C40, + 0x02C7F980, 0x02C776C0, 0x02C6F400, + 0x02C67140, 0x02C5EE80, 0x02C56BC0, + 0x02C4E900, 0x02C46640, 0x02C3E380, + 0x02C360C0, 0x02C2DE00, 0x02C25B40, + 0x02C1D880, 0x02C155C0, 0x02C0D300, + 0x02C05040, 0x02BFCD80, 0x02BF4AC0, + 0x02BEC800, 0x02BE4540, 0x02BDC280, + 0x02BD3FC0, 0x02BCBD00, 0x02BC3A40, + 0x02BBB780, 0x02BB34C0, 0x02BAB200, + 0x02BA2F40, 0x02B9AC80, 0x02B929C0, + 0x02B8A700, 0x02B82440, 0x02B7A180, + 0x02B71EC0, 0x02B69C00, 0x02B61940, + 0x02B59680, 0x02B513C0, 0x02B49100, + 0x02B40E40, 0x02B38B80, 0x02B308C0, + 0x02B28600, 0x02B20340, 0x02B18080, + 0x02B0FDC0, 0x02B07B00, 0x02AFF840, + 0x02AF7580, 0x02AEF2C0, 0x02AE7000, + 0x02ADED40, 0x02AD6A80, 0x02ACE7C0, + 0x02AC6500, 0x02ABE240, 0x02AB5F80, + 0x02AADCC0, 0x02AA5A00, 0x02A9D740, + 0x02A95480, 0x02A8D1C0, 0x02A84F00, + 0x02A7CC40, 0x02A74980, 0x02A6C6C0, + 0x02A64400, 0x02A5C140, 0x02A53E80, + 0x02A4BBC0, 0x02A43900, 0x02A3B640, + 0x02A33380, 0x02A2B0C0, 0x02A22E00, + 0x02A1AB40, 0x02A12880, 0x02A0A5C0, + 0x02A02300, 0x029FA040, 0x029F1D80, + 0x029E9AC0, 0x029E1800, 0x029D9540, + 0x029D1280, 0x029C8FC0, 0x029C0D00, + 0x029B8A40, 0x029B0780, 0x029A84C0, + 0x029A0200, 0x02997F40, 0x0298FC80, + 0x029879C0, 0x0297F700, 0x02977440, + 0x0296F180, 0x02966EC0, 0x0295EC00, + 0x02956940, 0x0294E680, 0x029463C0, + 0x0293E100, 0x02935E40, 0x0292DB80, + 0x029258C0, 0x0291D600, 0x02915340, + 0x0290D080, 0x02904DC0, 0x028FCB00, + 0x028F4840, 0x028EC580, 0x028E42C0, + 0x028DC000, 0x028D3D40, 0x028CBA80, + 0x028C37C0, 0x028BB500, 0x028B3240, + 0x028AAF80, 0x028A2CC0, 0x0289AA00, + 0x02892740, 0x0288A480, 0x028821C0, + 0x02879F00, 0x02871C40, 0x02869980, + 0x028616C0, 0x02859400, 0x02851140, + 0x02848E80, 0x02840BC0, 0x02838900, + 0x02830640, 0x02828380, 0x028200C0, + 0x02817E00, 0x0280FB40, 0x02807880, + 0x027FF5C0, 0x027F7300, 0x027EF040, + 0x027E6D80, 0x027DEAC0, 0x027D6800, + 0x027CE540, 0x027C6280, 0x027BDFC0, + 0x027B5D00, 0x027ADA40, 0x027A5780, + 0x0279D4C0, 0x02795200, 0x0278CF40, + 0x02784C80, 0x0277C9C0, 0x02774700, + 0x0276C440, 0x02764180, 0x0275BEC0, + 0x02753C00, 0x0274B940, 0x02743680, + 0x0273B3C0, 0x02733100, 0x0272AE40, + 0x02722B80, 0x0271A8C0, 0x02712600, + 0x0270A340, 0x02702080, 0x026F9DC0, + 0x026F1B00, 0x026E9840, 0x026E1580, + 0x026D92C0, 0x026D1000, 0x026C8D40, + 0x026C0A80, 0x026B87C0, 0x026B0500, + 0x026A8240, 0x0269FF80, 0x02697CC0, + 0x0268FA00, 0x02687740, 0x0267F480, + 0x026771C0, 0x0266EF00, 0x02666C40, + 0x0265E980, 0x026566C0, 0x0264E400, + 0x02646140, 0x0263DE80, 0x02635BC0, + 0x0262D900, 0x02625640, 0x0261D380, + 0x026150C0, 0x0260CE00, 0x02604B40, + 0x025FC880, 0x025F45C0, 0x025EC300, + 0x025E4040, 0x025DBD80, 0x025D3AC0, + 0x025CB800, 0x025C3540, 0x025BB280, + 0x025B2FC0, 0x025AAD00, 0x025A2A40, + 0x0259A780, 0x025924C0, 0x0258A200, + 0x02581F40, 0x02579C80, 0x025719C0, + 0x02569700, 0x02561440, 0x02559180, + 0x02550EC0, 0x02548C00, 0x02540940, + 0x02538680, 0x025303C0, 0x02528100, + 0x0251FE40, 0x02517B80, 0x0250F8C0, + 0x02507600, 0x024FF340, 0x024F7080, + 0x024EEDC0, 0x024E6B00, 0x024DE840, + 0x024D6580, 0x024CE2C0, 0x024C6000, + 0x024BDD40, 0x024B5A80, 0x024AD7C0, + 0x024A5500, 0x0249D240, 0x02494F80, + 0x0248CCC0, 0x02484A00, 0x0247C740, + 0x02474480, 0x0246C1C0, 0x02463F00, + 0x0245BC40, 0x02453980, 0x0244B6C0, + 0x02443400, 0x0243B140, 0x02432E80, + 0x0242ABC0, 0x02422900, 0x0241A640, + 0x02412380, 0x0240A0C0, 0x02401E00, + 0x023F9B40, 0x023F1880, 0x023E95C0, + 0x023E1300, 0x023D9040, 0x023D0D80, + 0x023C8AC0, 0x023C0800, 0x023B8540, + 0x023B0280, 0x023A7FC0, 0x0239FD00, + 0x02397A40, 0x0238F780, 0x023874C0, + 0x0237F200, 0x02376F40, 0x0236EC80, + 0x023669C0, 0x0235E700, 0x02356440, + 0x0234E180, 0x02345EC0, 0x0233DC00, + 0x02335940, 0x0232D680, 0x023253C0, + 0x0231D100, 0x02314E40, 0x0230CB80, + 0x023048C0, 0x022FC600, 0x022F4340, + 0x022EC080, 0x022E3DC0, 0x022DBB00, + 0x022D3840, 0x022CB580, 0x022C32C0, + 0x022BB000, 0x022B2D40, 0x022AAA80, + 0x022A27C0, 0x0229A500, 0x02292240, + 0x02289F80, 0x02281CC0, 0x02279A00, + 0x02271740, 0x02269480, 0x022611C0, + 0x02258F00, 0x02250C40, 0x02248980, + 0x022406C0, 0x02238400, 0x02230140, + 0x02227E80, 0x0221FBC0, 0x02217900, + 0x0220F640, 0x02207380, 0x021FF0C0, + 0x021F6E00, 0x021EEB40, 0x021E6880, + 0x021DE5C0, 0x021D6300, 0x021CE040, + 0x021C5D80, 0x021BDAC0, 0x021B5800, + 0x021AD540, 0x021A5280, 0x0219CFC0, + 0x02194D00, 0x0218CA40, 0x02184780, + 0x0217C4C0, 0x02174200, 0x0216BF40, + 0x02163C80, 0x0215B9C0, 0x02153700, + 0x0214B440, 0x02143180, 0x0213AEC0, + 0x02132C00, 0x0212A940, 0x02122680, + 0x0211A3C0, 0x02112100, 0x02109E40, + 0x02101B80, 0x020F98C0, 0x020F1600, + 0x020E9340, 0x020E1080, 0x020D8DC0, + 0x020D0B00, 0x020C8840, 0x020C0580, + 0x020B82C0, 0x020B0000, 0x020A7D40, + 0x0209FA80, 0x020977C0, 0x0208F500, + 0x02087240, 0x0207EF80, 0x02076CC0, + 0x0206EA00, 0x02066740, 0x0205E480, + 0x020561C0, 0x0204DF00, 0x02045C40, + 0x0203D980, 0x020356C0, 0x0202D400, + 0x02025140, 0x0201CE80, 0x02014BC0, + 0x0200C900, 0x02004640, 0x01FFC380, + 0x01FF40C0, 0x01FEBE00, 0x01FE3B40, + 0x01FDB880, 0x01FD35C0, 0x01FCB300, + 0x01FC3040, 0x01FBAD80, 0x01FB2AC0, + 0x01FAA800, 0x01FA2540, 0x01F9A280, + 0x01F91FC0, 0x01F89D00, 0x01F81A40, + 0x01F79780, 0x01F714C0, 0x01F69200, + 0x01F60F40, 0x01F58C80, 0x01F509C0, + 0x01F48700, 0x01F40440, 0x01F38180, + 0x01F2FEC0, 0x01F27C00, 0x01F1F940, + 0x01F17680, 0x01F0F3C0, 0x01F07100, + 0x01EFEE40, 0x01EF6B80, 0x01EEE8C0, + 0x01EE6600, 0x01EDE340, 0x01ED6080, + 0x01ECDDC0, 0x01EC5B00, 0x01EBD840, + 0x01EB5580, 0x01EAD2C0, 0x01EA5000, + 0x01E9CD40, 0x01E94A80, 0x01E8C7C0, + 0x01E84500, 0x01E7C240, 0x01E73F80, + 0x01E6BCC0, 0x01E63A00, 0x01E5B740, + 0x01E53480, 0x01E4B1C0, 0x01E42F00, + 0x01E3AC40, 0x01E32980, 0x01E2A6C0, + 0x01E22400, 0x01E1A140, 0x01E11E80, + 0x01E09BC0, 0x01E01900, 0x01DF9640, + 0x01DF1380, 0x01DE90C0, 0x01DE0E00, + 0x01DD8B40, 0x01DD0880, 0x01DC85C0, + 0x01DC0300, 0x01DB8040, 0x01DAFD80, + 0x01DA7AC0, 0x01D9F800, 0x01D97540, + 0x01D8F280, 0x01D86FC0, 0x01D7ED00, + 0x01D76A40, 0x01D6E780, 0x01D664C0, + 0x01D5E200, 0x01D55F40, 0x01D4DC80, + 0x01D459C0, 0x01D3D700, 0x01D35440, + 0x01D2D180, 0x01D24EC0, 0x01D1CC00, + 0x01D14940, 0x01D0C680, 0x01D043C0, + 0x01CFC100, 0x01CF3E40, 0x01CEBB80, + 0x01CE38C0, 0x01CDB600, 0x01CD3340, + 0x01CCB080, 0x01CC2DC0, 0x01CBAB00, + 0x01CB2840, 0x01CAA580, 0x01CA22C0, + 0x01C9A000, 0x01C91D40, 0x01C89A80, + 0x01C817C0, 0x01C79500, 0x01C71240, + 0x01C68F80, 0x01C60CC0, 0x01C58A00, + 0x01C50740, 0x01C48480, 0x01C401C0, + 0x01C37F00, 0x01C2FC40, 0x01C27980, + 0x01C1F6C0, 0x01C17400, 0x01C0F140, + 0x01C06E80, 0x01BFEBC0, 0x01BF6900, + 0x01BEE640, 0x01BE6380, 0x01BDE0C0, + 0x01BD5E00, 0x01BCDB40, 0x01BC5880, + 0x01BBD5C0, 0x01BB5300, 0x01BAD040, + 0x01BA4D80, 0x01B9CAC0, 0x01B94800, + 0x01B8C540, 0x01B84280, 0x01B7BFC0, + 0x01B73D00, 0x01B6BA40, 0x01B63780, + 0x01B5B4C0, 0x01B53200, 0x01B4AF40, + 0x01B42C80, 0x01B3A9C0, 0x01B32700, + 0x01B2A440, 0x01B22180, 0x01B19EC0, + 0x01B11C00, 0x01B09940, 0x01B01680, + 0x01AF93C0, 0x01AF1100, 0x01AE8E40, + 0x01AE0B80, 0x01AD88C0, 0x01AD0600, + 0x01AC8340, 0x01AC0080, 0x01AB7DC0, + 0x01AAFB00, 0x01AA7840, 0x01A9F580, + 0x01A972C0, 0x01A8F000, 0x01A86D40, + 0x01A7EA80, 0x01A767C0, 0x01A6E500, + 0x01A66240, 0x01A5DF80, 0x01A55CC0, + 0x01A4DA00, 0x01A45740, 0x01A3D480, + 0x01A351C0, 0x01A2CF00, 0x01A24C40, + 0x01A1C980, 0x01A146C0, 0x01A0C400, + 0x01A04140, 0x019FBE80, 0x019F3BC0, + 0x019EB900, 0x019E3640, 0x019DB380, + 0x019D30C0, 0x019CAE00, 0x019C2B40, + 0x019BA880, 0x019B25C0, 0x019AA300, + 0x019A2040, 0x01999D80, 0x01991AC0, + 0x01989800, 0x01981540, 0x01979280, + 0x01970FC0, 0x01968D00, 0x01960A40, + 0x01958780, 0x019504C0, 0x01948200, + 0x0193FF40, 0x01937C80, 0x0192F9C0, + 0x01927700, 0x0191F440, 0x01917180, + 0x0190EEC0, 0x01906C00, 0x018FE940, + 0x018F6680, 0x018EE3C0, 0x018E6100, + 0x018DDE40, 0x018D5B80, 0x018CD8C0, + 0x018C5600, 0x018BD340, 0x018B5080, + 0x018ACDC0, 0x018A4B00, 0x0189C840, + 0x01894580, 0x0188C2C0, 0x01884000, + 0x0187BD40, 0x01873A80, 0x0186B7C0, + 0x01863500, 0x0185B240, 0x01852F80, + 0x0184ACC0, 0x01842A00, 0x0183A740, + 0x01832480, 0x0182A1C0, 0x01821F00, + 0x01819C40, 0x01811980, 0x018096C0, + 0x01801400, 0x017F9140, 0x017F0E80, + 0x017E8BC0, 0x017E0900, 0x017D8640, + 0x017D0380, 0x017C80C0, 0x017BFE00, + 0x017B7B40, 0x017AF880, 0x017A75C0, + 0x0179F300, 0x01797040, 0x0178ED80, + 0x01786AC0, 0x0177E800, 0x01776540, + 0x0176E280, 0x01765FC0, 0x0175DD00, + 0x01755A40, 0x0174D780, 0x017454C0, + 0x0173D200, 0x01734F40, 0x0172CC80, + 0x017249C0, 0x0171C700, 0x01714440, + 0x0170C180, 0x01703EC0, 0x016FBC00, + 0x016F3940, 0x016EB680, 0x016E33C0, + 0x016DB100, 0x016D2E40, 0x016CAB80, + 0x016C28C0, 0x016BA600, 0x016B2340, + 0x016AA080, 0x016A1DC0, 0x01699B00, + 0x01691840, 0x01689580, 0x016812C0, + 0x01679000, 0x01670D40, 0x01668A80, + 0x016607C0, 0x01658500, 0x01650240, + 0x01647F80, 0x0163FCC0, 0x01637A00, + 0x0162F740, 0x01627480, 0x0161F1C0, + 0x01616F00, 0x0160EC40, 0x01606980, + 0x015FE6C0, 0x015F6400, 0x015EE140, + 0x015E5E80, 0x015DDBC0, 0x015D5900, + 0x015CD640, 0x015C5380, 0x015BD0C0, + 0x015B4E00, 0x015ACB40, 0x015A4880, + 0x0159C5C0, 0x01594300, 0x0158C040, + 0x01583D80, 0x0157BAC0, 0x01573800, + 0x0156B540, 0x01563280, 0x0155AFC0, + 0x01552D00, 0x0154AA40, 0x01542780, + 0x0153A4C0, 0x01532200, 0x01529F40, + 0x01521C80, 0x015199C0, 0x01511700, + 0x01509440, 0x01501180, 0x014F8EC0, + 0x014F0C00, 0x014E8940, 0x014E0680, + 0x014D83C0, 0x014D0100, 0x014C7E40, + 0x014BFB80, 0x014B78C0, 0x014AF600, + 0x014A7340, 0x0149F080, 0x01496DC0, + 0x0148EB00, 0x01486840, 0x0147E580, + 0x014762C0, 0x0146E000, 0x01465D40, + 0x0145DA80, 0x014557C0, 0x0144D500, + 0x01445240, 0x0143CF80, 0x01434CC0, + 0x0142CA00, 0x01424740, 0x0141C480, + 0x014141C0, 0x0140BF00, 0x01403C40, + 0x013FB980, 0x013F36C0, 0x013EB400, + 0x013E3140, 0x013DAE80, 0x013D2BC0, + 0x013CA900, 0x013C2640, 0x013BA380, + 0x013B20C0, 0x013A9E00, 0x013A1B40, + 0x01399880, 0x013915C0, 0x01389300, + 0x01381040, 0x01378D80, 0x01370AC0, + 0x01368800, 0x01360540, 0x01358280, + 0x0134FFC0, 0x01347D00, 0x0133FA40, + 0x01337780, 0x0132F4C0, 0x01327200, + 0x0131EF40, 0x01316C80, 0x0130E9C0, + 0x01306700, 0x012FE440, 0x012F6180, + 0x012EDEC0, 0x012E5C00, 0x012DD940, + 0x012D5680, 0x012CD3C0, 0x012C5100, + 0x012BCE40, 0x012B4B80, 0x012AC8C0, + 0x012A4600, 0x0129C340, 0x01294080, + 0x0128BDC0, 0x01283B00, 0x0127B840, + 0x01273580, 0x0126B2C0, 0x01263000, + 0x0125AD40, 0x01252A80, 0x0124A7C0, + 0x01242500, 0x0123A240, 0x01231F80, + 0x01229CC0, 0x01221A00, 0x01219740, + 0x01211480, 0x012091C0, 0x01200F00, + 0x011F8C40, 0x011F0980, 0x011E86C0, + 0x011E0400, 0x011D8140, 0x011CFE80, + 0x011C7BC0, 0x011BF900, 0x011B7640, + 0x011AF380, 0x011A70C0, 0x0119EE00, + 0x01196B40, 0x0118E880, 0x011865C0, + 0x0117E300, 0x01176040, 0x0116DD80, + 0x01165AC0, 0x0115D800, 0x01155540, + 0x0114D280, 0x01144FC0, 0x0113CD00, + 0x01134A40, 0x0112C780, 0x011244C0, + 0x0111C200, 0x01113F40, 0x0110BC80, + 0x011039C0, 0x010FB700, 0x010F3440, + 0x010EB180, 0x010E2EC0, 0x010DAC00, + 0x010D2940, 0x010CA680, 0x010C23C0, + 0x010BA100, 0x010B1E40, 0x010A9B80, + 0x010A18C0, 0x01099600, 0x01091340, + 0x01089080, 0x01080DC0, 0x01078B00, + 0x01070840, 0x01068580, 0x010602C0, + 0x01058000, 0x0104FD40, 0x01047A80, + 0x0103F7C0, 0x01037500, 0x0102F240, + 0x01026F80, 0x0101ECC0, 0x01016A00, + 0x0100E740, 0x01006480, 0x00FFE1C0, + 0x00FF5F00, 0x00FEDC40, 0x00FE5980, + 0x00FDD6C0, 0x00FD5400, 0x00FCD140, + 0x00FC4E80, 0x00FBCBC0, 0x00FB4900, + 0x00FAC640, 0x00FA4380, 0x00F9C0C0, + 0x00F93E00, 0x00F8BB40, 0x00F83880, + 0x00F7B5C0, 0x00F73300, 0x00F6B040, + 0x00F62D80, 0x00F5AAC0, 0x00F52800, + 0x00F4A540, 0x00F42280, 0x00F39FC0, + 0x00F31D00, 0x00F29A40, 0x00F21780, + 0x00F194C0, 0x00F11200, 0x00F08F40, + 0x00F00C80, 0x00EF89C0, 0x00EF0700, + 0x00EE8440, 0x00EE0180, 0x00ED7EC0, + 0x00ECFC00, 0x00EC7940, 0x00EBF680, + 0x00EB73C0, 0x00EAF100, 0x00EA6E40, + 0x00E9EB80, 0x00E968C0, 0x00E8E600, + 0x00E86340, 0x00E7E080, 0x00E75DC0, + 0x00E6DB00, 0x00E65840, 0x00E5D580, + 0x00E552C0, 0x00E4D000, 0x00E44D40, + 0x00E3CA80, 0x00E347C0, 0x00E2C500, + 0x00E24240, 0x00E1BF80, 0x00E13CC0, + 0x00E0BA00, 0x00E03740, 0x00DFB480, + 0x00DF31C0, 0x00DEAF00, 0x00DE2C40, + 0x00DDA980, 0x00DD26C0, 0x00DCA400, + 0x00DC2140, 0x00DB9E80, 0x00DB1BC0, + 0x00DA9900, 0x00DA1640, 0x00D99380, + 0x00D910C0, 0x00D88E00, 0x00D80B40, + 0x00D78880, 0x00D705C0, 0x00D68300, + 0x00D60040, 0x00D57D80, 0x00D4FAC0, + 0x00D47800, 0x00D3F540, 0x00D37280, + 0x00D2EFC0, 0x00D26D00, 0x00D1EA40, + 0x00D16780, 0x00D0E4C0, 0x00D06200, + 0x00CFDF40, 0x00CF5C80, 0x00CED9C0, + 0x00CE5700, 0x00CDD440, 0x00CD5180, + 0x00CCCEC0, 0x00CC4C00, 0x00CBC940, + 0x00CB4680, 0x00CAC3C0, 0x00CA4100, + 0x00C9BE40, 0x00C93B80, 0x00C8B8C0, + 0x00C83600, 0x00C7B340, 0x00C73080, + 0x00C6ADC0, 0x00C62B00, 0x00C5A840, + 0x00C52580, 0x00C4A2C0, 0x00C42000, + 0x00C39D40, 0x00C31A80, 0x00C297C0, + 0x00C21500, 0x00C19240, 0x00C10F80, + 0x00C08CC0, 0x00C00A00, 0x00BF8740, + 0x00BF0480, 0x00BE81C0, 0x00BDFF00, + 0x00BD7C40, 0x00BCF980, 0x00BC76C0, + 0x00BBF400, 0x00BB7140, 0x00BAEE80, + 0x00BA6BC0, 0x00B9E900, 0x00B96640, + 0x00B8E380, 0x00B860C0, 0x00B7DE00, + 0x00B75B40, 0x00B6D880, 0x00B655C0, + 0x00B5D300, 0x00B55040, 0x00B4CD80, + 0x00B44AC0, 0x00B3C800, 0x00B34540, + 0x00B2C280, 0x00B23FC0, 0x00B1BD00, + 0x00B13A40, 0x00B0B780, 0x00B034C0, + 0x00AFB200, 0x00AF2F40, 0x00AEAC80, + 0x00AE29C0, 0x00ADA700, 0x00AD2440, + 0x00ACA180, 0x00AC1EC0, 0x00AB9C00, + 0x00AB1940, 0x00AA9680, 0x00AA13C0, + 0x00A99100, 0x00A90E40, 0x00A88B80, + 0x00A808C0, 0x00A78600, 0x00A70340, + 0x00A68080, 0x00A5FDC0, 0x00A57B00, + 0x00A4F840, 0x00A47580, 0x00A3F2C0, + 0x00A37000, 0x00A2ED40, 0x00A26A80, + 0x00A1E7C0, 0x00A16500, 0x00A0E240, + 0x00A05F80, 0x009FDCC0, 0x009F5A00, + 0x009ED740, 0x009E5480, 0x009DD1C0, + 0x009D4F00, 0x009CCC40, 0x009C4980, + 0x009BC6C0, 0x009B4400, 0x009AC140, + 0x009A3E80, 0x0099BBC0, 0x00993900, + 0x0098B640, 0x00983380, 0x0097B0C0, + 0x00972E00, 0x0096AB40, 0x00962880, + 0x0095A5C0, 0x00952300, 0x0094A040, + 0x00941D80, 0x00939AC0, 0x00931800, + 0x00929540, 0x00921280, 0x00918FC0, + 0x00910D00, 0x00908A40, 0x00900780, + 0x008F84C0, 0x008F0200, 0x008E7F40, + 0x008DFC80, 0x008D79C0, 0x008CF700, + 0x008C7440, 0x008BF180, 0x008B6EC0, + 0x008AEC00, 0x008A6940, 0x0089E680, + 0x008963C0, 0x0088E100, 0x00885E40, + 0x0087DB80, 0x008758C0, 0x0086D600, + 0x00865340, 0x0085D080, 0x00854DC0, + 0x0084CB00, 0x00844840, 0x0083C580, + 0x008342C0, 0x0082C000, 0x00823D40, + 0x0081BA80, 0x008137C0, 0x0080B500, + 0x00803240, 0x007FAF80, 0x007F2CC0, + 0x007EAA00, 0x007E2740, 0x007DA480, + 0x007D21C0, 0x007C9F00, 0x007C1C40, + 0x007B9980, 0x007B16C0, 0x007A9400, + 0x007A1140, 0x00798E80, 0x00790BC0, + 0x00788900, 0x00780640, 0x00778380, + 0x007700C0, 0x00767E00, 0x0075FB40, + 0x00757880, 0x0074F5C0, 0x00747300, + 0x0073F040, 0x00736D80, 0x0072EAC0, + 0x00726800, 0x0071E540, 0x00716280, + 0x0070DFC0, 0x00705D00, 0x006FDA40, + 0x006F5780, 0x006ED4C0, 0x006E5200, + 0x006DCF40, 0x006D4C80, 0x006CC9C0, + 0x006C4700, 0x006BC440, 0x006B4180, + 0x006ABEC0, 0x006A3C00, 0x0069B940, + 0x00693680, 0x0068B3C0, 0x00683100, + 0x0067AE40, 0x00672B80, 0x0066A8C0, + 0x00662600, 0x0065A340, 0x00652080, + 0x00649DC0, 0x00641B00, 0x00639840, + 0x00631580, 0x006292C0, 0x00621000, + 0x00618D40, 0x00610A80, 0x006087C0, + 0x00600500, 0x005F8240, 0x005EFF80, + 0x005E7CC0, 0x005DFA00, 0x005D7740, + 0x005CF480, 0x005C71C0, 0x005BEF00, + 0x005B6C40, 0x005AE980, 0x005A66C0, + 0x0059E400, 0x00596140, 0x0058DE80, + 0x00585BC0, 0x0057D900, 0x00575640, + 0x0056D380, 0x005650C0, 0x0055CE00, + 0x00554B40, 0x0054C880, 0x005445C0, + 0x0053C300, 0x00534040, 0x0052BD80, + 0x00523AC0, 0x0051B800, 0x00513540, + 0x0050B280, 0x00502FC0, 0x004FAD00, + 0x004F2A40, 0x004EA780, 0x004E24C0, + 0x004DA200, 0x004D1F40, 0x004C9C80, + 0x004C19C0, 0x004B9700, 0x004B1440, + 0x004A9180, 0x004A0EC0, 0x00498C00, + 0x00490940, 0x00488680, 0x004803C0, + 0x00478100, 0x0046FE40, 0x00467B80, + 0x0045F8C0, 0x00457600, 0x0044F340, + 0x00447080, 0x0043EDC0, 0x00436B00, + 0x0042E840, 0x00426580, 0x0041E2C0, + 0x00416000, 0x0040DD40, 0x00405A80, + 0x003FD7C0, 0x003F5500, 0x003ED240, + 0x003E4F80, 0x003DCCC0, 0x003D4A00, + 0x003CC740, 0x003C4480, 0x003BC1C0, + 0x003B3F00, 0x003ABC40, 0x003A3980, + 0x0039B6C0, 0x00393400, 0x0038B140, + 0x00382E80, 0x0037ABC0, 0x00372900, + 0x0036A640, 0x00362380, 0x0035A0C0, + 0x00351E00, 0x00349B40, 0x00341880, + 0x003395C0, 0x00331300, 0x00329040, + 0x00320D80, 0x00318AC0, 0x00310800, + 0x00308540, 0x00300280, 0x002F7FC0, + 0x002EFD00, 0x002E7A40, 0x002DF780, + 0x002D74C0, 0x002CF200, 0x002C6F40, + 0x002BEC80, 0x002B69C0, 0x002AE700, + 0x002A6440, 0x0029E180, 0x00295EC0, + 0x0028DC00, 0x00285940, 0x0027D680, + 0x002753C0, 0x0026D100, 0x00264E40, + 0x0025CB80, 0x002548C0, 0x0024C600, + 0x00244340, 0x0023C080, 0x00233DC0, + 0x0022BB00, 0x00223840, 0x0021B580, + 0x002132C0, 0x0020B000, 0x00202D40, + 0x001FAA80, 0x001F27C0, 0x001EA500, + 0x001E2240, 0x001D9F80, 0x001D1CC0, + 0x001C9A00, 0x001C1740, 0x001B9480, + 0x001B11C0, 0x001A8F00, 0x001A0C40, + 0x00198980, 0x001906C0, 0x00188400, + 0x00180140, 0x00177E80, 0x0016FBC0, + 0x00167900, 0x0015F640, 0x00157380, + 0x0014F0C0, 0x00146E00, 0x0013EB40, + 0x00136880, 0x0012E5C0, 0x00126300, + 0x0011E040, 0x00115D80, 0x0010DAC0, + 0x00105800, 0x000FD540, 0x000F5280, + 0x000ECFC0, 0x000E4D00, 0x000DCA40, + 0x000D4780, 0x000CC4C0, 0x000C4200, + 0x000BBF40, 0x000B3C80, 0x000AB9C0, + 0x000A3700, 0x0009B440, 0x00093180, + 0x0008AEC0, 0x00082C00, 0x0007A940, + 0x00072680, 0x0006A3C0, 0x00062100, + 0x00059E40, 0x00051B80, 0x000498C0, + 0x00041600, 0x00039340, 0x00031080, + 0x00028DC0, 0x00020B00, 0x00018840, + 0x00010580, 0x000082C0, 0xFFE80000, + 0xFFE61700, 0xFFE42E00, 0xFFE24500, + 0xFFE05C00, 0xFFDE7300, 0xFFDC8A00, + 0xFFDAA100, 0xFFD8B800, 0xFFD6CF00, + 0xFFD4E600, 0xFFD2FD00, 0xFFD11400, + 0xFFCF2B00, 0xFFCD4200, 0xFFCB5900, + 0xFFC97000, 0xFFC78700, 0xFFC59E00, + 0xFFC3B500, 0xFFC1CC00, 0xFFBFE300, + 0xFFBDFA00, 0xFFBC1100, 0xFFBA2800, + 0xFFB83F00, 0xFFB65600, 0xFFB46D00, + 0xFFB28400, 0xFFB09B00, 0xFFAEB200, + 0xFFACC900, 0xFFAAE000, 0xFFA8F700, + 0xFFA70E00, 0xFFA52500, 0xFFA33C00, + 0xFFA15300, 0xFF9F6A00, 0xFF9D8100, + 0xFF9B9800, 0xFF99AF00, 0xFF97C600, + 0xFF95DD00, 0xFF93F400, 0xFF920B00, + 0xFF902200, 0xFF8E3900, 0xFF8C5000, + 0xFF8A6700, 0xFF887E00, 0xFF869500, + 0xFF84AC00, 0xFF82C300, 0xFF80DA00, + 0xFF7EF100, 0xFF7D0800, 0xFF7B1F00, + 0xFF793600, 0xFF774D00, 0xFF756400, + 0xFF737B00, 0xFF719200, 0xFF6FA900, + 0xFF6DC000, 0xFF6BD700, 0xFF69EE00, + 0xFF680500, 0xFF661C00, 0xFF643300, + 0xFF624A00, 0xFF606100, 0xFF5E7800, + 0xFF5C8F00, 0xFF5AA600, 0xFF58BD00, + 0xFF56D400, 0xFF54EB00, 0xFF530200, + 0xFF511900, 0xFF4F3000, 0xFF4D4700, + 0xFF4B5E00, 0xFF497500, 0xFF478C00, + 0xFF45A300, 0xFF43BA00, 0xFF41D100, + 0xFF3FE800, 0xFF3DFF00, 0xFF3C1600, + 0xFF3A2D00, 0xFF384400, 0xFF365B00, + 0xFF347200, 0xFF328900, 0xFF30A000, + 0xFF2EB700, 0xFF2CCE00, 0xFF2AE500, + 0xFF28FC00, 0xFF271300, 0xFF252A00, + 0xFF234100, 0xFF215800, 0xFF1F6F00, + 0xFF1D8600, 0xFF1B9D00, 0xFF19B400, + 0xFF17CB00, 0xFF15E200, 0xFF13F900, + 0xFF121000, 0xFF102700, 0xFF0E3E00, + 0xFF0C5500, 0xFF0A6C00, 0xFF088300, + 0xFF069A00, 0xFF04B100, 0xFF02C800, + 0xFF00DF00, 0xFEFEF600, 0xFEFD0D00, + 0xFEFB2400, 0xFEF93B00, 0xFEF75200, + 0xFEF56900, 0xFEF38000, 0xFEF19700, + 0xFEEFAE00, 0xFEEDC500, 0xFEEBDC00, + 0xFEE9F300, 0xFEE80A00, 0xFEE62100, + 0xFEE43800, 0xFEE24F00, 0xFEE06600, + 0xFEDE7D00, 0xFEDC9400, 0xFEDAAB00, + 0xFED8C200, 0xFED6D900, 0xFED4F000, + 0xFED30700, 0xFED11E00, 0xFECF3500, + 0xFECD4C00, 0xFECB6300, 0xFEC97A00, + 0xFEC79100, 0xFEC5A800, 0xFEC3BF00, + 0xFEC1D600, 0xFEBFED00, 0xFEBE0400, + 0xFEBC1B00, 0xFEBA3200, 0xFEB84900, + 0xFEB66000, 0xFEB47700, 0xFEB28E00, + 0xFEB0A500, 0xFEAEBC00, 0xFEACD300, + 0xFEAAEA00, 0xFEA90100, 0xFEA71800, + 0xFEA52F00, 0xFEA34600, 0xFEA15D00, + 0xFE9F7400, 0xFE9D8B00, 0xFE9BA200, + 0xFE99B900, 0xFE97D000, 0xFE95E700, + 0xFE93FE00, 0xFE921500, 0xFE902C00, + 0xFE8E4300, 0xFE8C5A00, 0xFE8A7100, + 0xFE888800, 0xFE869F00, 0xFE84B600, + 0xFE82CD00, 0xFE80E400, 0xFE7EFB00, + 0xFE7D1200, 0xFE7B2900, 0xFE794000, + 0xFE775700, 0xFE756E00, 0xFE738500, + 0xFE719C00, 0xFE6FB300, 0xFE6DCA00, + 0xFE6BE100, 0xFE69F800, 0xFE680F00, + 0xFE662600, 0xFE643D00, 0xFE625400, + 0xFE606B00, 0xFE5E8200, 0xFE5C9900, + 0xFE5AB000, 0xFE58C700, 0xFE56DE00, + 0xFE54F500, 0xFE530C00, 0xFE512300, + 0xFE4F3A00, 0xFE4D5100, 0xFE4B6800, + 0xFE497F00, 0xFE479600, 0xFE45AD00, + 0xFE43C400, 0xFE41DB00, 0xFE3FF200, + 0xFE3E0900, 0xFE3C2000, 0xFE3A3700, + 0xFE384E00, 0xFE366500, 0xFE347C00, + 0xFE329300, 0xFE30AA00, 0xFE2EC100, + 0xFE2CD800, 0xFE2AEF00, 0xFE290600, + 0xFE271D00, 0xFE253400, 0xFE234B00, + 0xFE216200, 0xFE1F7900, 0xFE1D9000, + 0xFE1BA700, 0xFE19BE00, 0xFE17D500, + 0xFE15EC00, 0xFE140300, 0xFE121A00, + 0xFE103100, 0xFE0E4800, 0xFE0C5F00, + 0xFE0A7600, 0xFE088D00, 0xFE06A400, + 0xFE04BB00, 0xFE02D200, 0xFE00E900, + 0xFDFF0000, 0xFDFD1700, 0xFDFB2E00, + 0xFDF94500, 0xFDF75C00, 0xFDF57300, + 0xFDF38A00, 0xFDF1A100, 0xFDEFB800, + 0xFDEDCF00, 0xFDEBE600, 0xFDE9FD00, + 0xFDE81400, 0xFDE62B00, 0xFDE44200, + 0xFDE25900, 0xFDE07000, 0xFDDE8700, + 0xFDDC9E00, 0xFDDAB500, 0xFDD8CC00, + 0xFDD6E300, 0xFDD4FA00, 0xFDD31100, + 0xFDD12800, 0xFDCF3F00, 0xFDCD5600, + 0xFDCB6D00, 0xFDC98400, 0xFDC79B00, + 0xFDC5B200, 0xFDC3C900, 0xFDC1E000, + 0xFDBFF700, 0xFDBE0E00, 0xFDBC2500, + 0xFDBA3C00, 0xFDB85300, 0xFDB66A00, + 0xFDB48100, 0xFDB29800, 0xFDB0AF00, + 0xFDAEC600, 0xFDACDD00, 0xFDAAF400, + 0xFDA90B00, 0xFDA72200, 0xFDA53900, + 0xFDA35000, 0xFDA16700, 0xFD9F7E00, + 0xFD9D9500, 0xFD9BAC00, 0xFD99C300, + 0xFD97DA00, 0xFD95F100, 0xFD940800, + 0xFD921F00, 0xFD903600, 0xFD8E4D00, + 0xFD8C6400, 0xFD8A7B00, 0xFD889200, + 0xFD86A900, 0xFD84C000, 0xFD82D700, + 0xFD80EE00, 0xFD7F0500, 0xFD7D1C00, + 0xFD7B3300, 0xFD794A00, 0xFD776100, + 0xFD757800, 0xFD738F00, 0xFD71A600, + 0xFD6FBD00, 0xFD6DD400, 0xFD6BEB00, + 0xFD6A0200, 0xFD681900, 0xFD663000, + 0xFD644700, 0xFD625E00, 0xFD607500, + 0xFD5E8C00, 0xFD5CA300, 0xFD5ABA00, + 0xFD58D100, 0xFD56E800, 0xFD54FF00, + 0xFD531600, 0xFD512D00, 0xFD4F4400, + 0xFD4D5B00, 0xFD4B7200, 0xFD498900, + 0xFD47A000, 0xFD45B700, 0xFD43CE00, + 0xFD41E500, 0xFD3FFC00, 0xFD3E1300, + 0xFD3C2A00, 0xFD3A4100, 0xFD385800, + 0xFD366F00, 0xFD348600, 0xFD329D00, + 0xFD30B400, 0xFD2ECB00, 0xFD2CE200, + 0xFD2AF900, 0xFD291000, 0xFD272700, + 0xFD253E00, 0xFD235500, 0xFD216C00, + 0xFD1F8300, 0xFD1D9A00, 0xFD1BB100, + 0xFD19C800, 0xFD17DF00, 0xFD15F600, + 0xFD140D00, 0xFD122400, 0xFD103B00, + 0xFD0E5200, 0xFD0C6900, 0xFD0A8000, + 0xFD089700, 0xFD06AE00, 0xFD04C500, + 0xFD02DC00, 0xFD00F300, 0xFCFF0A00, + 0xFCFD2100, 0xFCFB3800, 0xFCF94F00, + 0xFCF76600, 0xFCF57D00, 0xFCF39400, + 0xFCF1AB00, 0xFCEFC200, 0xFCEDD900, + 0xFCEBF000, 0xFCEA0700, 0xFCE81E00, + 0xFCE63500, 0xFCE44C00, 0xFCE26300, + 0xFCE07A00, 0xFCDE9100, 0xFCDCA800, + 0xFCDABF00, 0xFCD8D600, 0xFCD6ED00, + 0xFCD50400, 0xFCD31B00, 0xFCD13200, + 0xFCCF4900, 0xFCCD6000, 0xFCCB7700, + 0xFCC98E00, 0xFCC7A500, 0xFCC5BC00, + 0xFCC3D300, 0xFCC1EA00, 0xFCC00100, + 0xFCBE1800, 0xFCBC2F00, 0xFCBA4600, + 0xFCB85D00, 0xFCB67400, 0xFCB48B00, + 0xFCB2A200, 0xFCB0B900, 0xFCAED000, + 0xFCACE700, 0xFCAAFE00, 0xFCA91500, + 0xFCA72C00, 0xFCA54300, 0xFCA35A00, + 0xFCA17100, 0xFC9F8800, 0xFC9D9F00, + 0xFC9BB600, 0xFC99CD00, 0xFC97E400, + 0xFC95FB00, 0xFC941200, 0xFC922900, + 0xFC904000, 0xFC8E5700, 0xFC8C6E00, + 0xFC8A8500, 0xFC889C00, 0xFC86B300, + 0xFC84CA00, 0xFC82E100, 0xFC80F800, + 0xFC7F0F00, 0xFC7D2600, 0xFC7B3D00, + 0xFC795400, 0xFC776B00, 0xFC758200, + 0xFC739900, 0xFC71B000, 0xFC6FC700, + 0xFC6DDE00, 0xFC6BF500, 0xFC6A0C00, + 0xFC682300, 0xFC663A00, 0xFC645100, + 0xFC626800, 0xFC607F00, 0xFC5E9600, + 0xFC5CAD00, 0xFC5AC400, 0xFC58DB00, + 0xFC56F200, 0xFC550900, 0xFC532000, + 0xFC513700, 0xFC4F4E00, 0xFC4D6500, + 0xFC4B7C00, 0xFC499300, 0xFC47AA00, + 0xFC45C100, 0xFC43D800, 0xFC41EF00, + 0xFC400600, 0xFC3E1D00, 0xFC3C3400, + 0xFC3A4B00, 0xFC386200, 0xFC367900, + 0xFC349000, 0xFC32A700, 0xFC30BE00, + 0xFC2ED500, 0xFC2CEC00, 0xFC2B0300, + 0xFC291A00, 0xFC273100, 0xFC254800, + 0xFC235F00, 0xFC217600, 0xFC1F8D00, + 0xFC1DA400, 0xFC1BBB00, 0xFC19D200, + 0xFC17E900, 0xFC160000, 0xFC141700, + 0xFC122E00, 0xFC104500, 0xFC0E5C00, + 0xFC0C7300, 0xFC0A8A00, 0xFC08A100, + 0xFC06B800, 0xFC04CF00, 0xFC02E600, + 0xFC00FD00, 0xFBFF1400, 0xFBFD2B00, + 0xFBFB4200, 0xFBF95900, 0xFBF77000, + 0xFBF58700, 0xFBF39E00, 0xFBF1B500, + 0xFBEFCC00, 0xFBEDE300, 0xFBEBFA00, + 0xFBEA1100, 0xFBE82800, 0xFBE63F00, + 0xFBE45600, 0xFBE26D00, 0xFBE08400, + 0xFBDE9B00, 0xFBDCB200, 0xFBDAC900, + 0xFBD8E000, 0xFBD6F700, 0xFBD50E00, + 0xFBD32500, 0xFBD13C00, 0xFBCF5300, + 0xFBCD6A00, 0xFBCB8100, 0xFBC99800, + 0xFBC7AF00, 0xFBC5C600, 0xFBC3DD00, + 0xFBC1F400, 0xFBC00B00, 0xFBBE2200, + 0xFBBC3900, 0xFBBA5000, 0xFBB86700, + 0xFBB67E00, 0xFBB49500, 0xFBB2AC00, + 0xFBB0C300, 0xFBAEDA00, 0xFBACF100, + 0xFBAB0800, 0xFBA91F00, 0xFBA73600, + 0xFBA54D00, 0xFBA36400, 0xFBA17B00, + 0xFB9F9200, 0xFB9DA900, 0xFB9BC000, + 0xFB99D700, 0xFB97EE00, 0xFB960500, + 0xFB941C00, 0xFB923300, 0xFB904A00, + 0xFB8E6100, 0xFB8C7800, 0xFB8A8F00, + 0xFB88A600, 0xFB86BD00, 0xFB84D400, + 0xFB82EB00, 0xFB810200, 0xFB7F1900, + 0xFB7D3000, 0xFB7B4700, 0xFB795E00, + 0xFB777500, 0xFB758C00, 0xFB73A300, + 0xFB71BA00, 0xFB6FD100, 0xFB6DE800, + 0xFB6BFF00, 0xFB6A1600, 0xFB682D00, + 0xFB664400, 0xFB645B00, 0xFB627200, + 0xFB608900, 0xFB5EA000, 0xFB5CB700, + 0xFB5ACE00, 0xFB58E500, 0xFB56FC00, + 0xFB551300, 0xFB532A00, 0xFB514100, + 0xFB4F5800, 0xFB4D6F00, 0xFB4B8600, + 0xFB499D00, 0xFB47B400, 0xFB45CB00, + 0xFB43E200, 0xFB41F900, 0xFB401000, + 0xFB3E2700, 0xFB3C3E00, 0xFB3A5500, + 0xFB386C00, 0xFB368300, 0xFB349A00, + 0xFB32B100, 0xFB30C800, 0xFB2EDF00, + 0xFB2CF600, 0xFB2B0D00, 0xFB292400, + 0xFB273B00, 0xFB255200, 0xFB236900, + 0xFB218000, 0xFB1F9700, 0xFB1DAE00, + 0xFB1BC500, 0xFB19DC00, 0xFB17F300, + 0xFB160A00, 0xFB142100, 0xFB123800, + 0xFB104F00, 0xFB0E6600, 0xFB0C7D00, + 0xFB0A9400, 0xFB08AB00, 0xFB06C200, + 0xFB04D900, 0xFB02F000, 0xFB010700, + 0xFAFF1E00, 0xFAFD3500, 0xFAFB4C00, + 0xFAF96300, 0xFAF77A00, 0xFAF59100, + 0xFAF3A800, 0xFAF1BF00, 0xFAEFD600, + 0xFAEDED00, 0xFAEC0400, 0xFAEA1B00, + 0xFAE83200, 0xFAE64900, 0xFAE46000, + 0xFAE27700, 0xFAE08E00, 0xFADEA500, + 0xFADCBC00, 0xFADAD300, 0xFAD8EA00, + 0xFAD70100, 0xFAD51800, 0xFAD32F00, + 0xFAD14600, 0xFACF5D00, 0xFACD7400, + 0xFACB8B00, 0xFAC9A200, 0xFAC7B900, + 0xFAC5D000, 0xFAC3E700, 0xFAC1FE00, + 0xFAC01500, 0xFABE2C00, 0xFABC4300, + 0xFABA5A00, 0xFAB87100, 0xFAB68800, + 0xFAB49F00, 0xFAB2B600, 0xFAB0CD00, + 0xFAAEE400, 0xFAACFB00, 0xFAAB1200, + 0xFAA92900, 0xFAA74000, 0xFAA55700, + 0xFAA36E00, 0xFAA18500, 0xFA9F9C00, + 0xFA9DB300, 0xFA9BCA00, 0xFA99E100, + 0xFA97F800, 0xFA960F00, 0xFA942600, + 0xFA923D00, 0xFA905400, 0xFA8E6B00, + 0xFA8C8200, 0xFA8A9900, 0xFA88B000, + 0xFA86C700, 0xFA84DE00, 0xFA82F500, + 0xFA810C00, 0xFA7F2300, 0xFA7D3A00, + 0xFA7B5100, 0xFA796800, 0xFA777F00, + 0xFA759600, 0xFA73AD00, 0xFA71C400, + 0xFA6FDB00, 0xFA6DF200, 0xFA6C0900, + 0xFA6A2000, 0xFA683700, 0xFA664E00, + 0xFA646500, 0xFA627C00, 0xFA609300, + 0xFA5EAA00, 0xFA5CC100, 0xFA5AD800, + 0xFA58EF00, 0xFA570600, 0xFA551D00, + 0xFA533400, 0xFA514B00, 0xFA4F6200, + 0xFA4D7900, 0xFA4B9000, 0xFA49A700, + 0xFA47BE00, 0xFA45D500, 0xFA43EC00, + 0xFA420300, 0xFA401A00, 0xFA3E3100, + 0xFA3C4800, 0xFA3A5F00, 0xFA387600, + 0xFA368D00, 0xFA34A400, 0xFA32BB00, + 0xFA30D200, 0xFA2EE900, 0xFA2D0000, + 0xFA2B1700, 0xFA292E00, 0xFA274500, + 0xFA255C00, 0xFA237300, 0xFA218A00, + 0xFA1FA100, 0xFA1DB800, 0xFA1BCF00, + 0xFA19E600, 0xFA17FD00, 0xFA161400, + 0xFA142B00, 0xFA124200, 0xFA105900, + 0xFA0E7000, 0xFA0C8700, 0xFA0A9E00, + 0xFA08B500, 0xFA06CC00, 0xFA04E300, + 0xFA02FA00, 0xFA011100, 0xF9FF2800, + 0xF9FD3F00, 0xF9FB5600, 0xF9F96D00, + 0xF9F78400, 0xF9F59B00, 0xF9F3B200, + 0xF9F1C900, 0xF9EFE000, 0xF9EDF700, + 0xF9EC0E00, 0xF9EA2500, 0xF9E83C00, + 0xF9E65300, 0xF9E46A00, 0xF9E28100, + 0xF9E09800, 0xF9DEAF00, 0xF9DCC600, + 0xF9DADD00, 0xF9D8F400, 0xF9D70B00, + 0xF9D52200, 0xF9D33900, 0xF9D15000, + 0xF9CF6700, 0xF9CD7E00, 0xF9CB9500, + 0xF9C9AC00, 0xF9C7C300, 0xF9C5DA00, + 0xF9C3F100, 0xF9C20800, 0xF9C01F00, + 0xF9BE3600, 0xF9BC4D00, 0xF9BA6400, + 0xF9B87B00, 0xF9B69200, 0xF9B4A900, + 0xF9B2C000, 0xF9B0D700, 0xF9AEEE00, + 0xF9AD0500, 0xF9AB1C00, 0xF9A93300, + 0xF9A74A00, 0xF9A56100, 0xF9A37800, + 0xF9A18F00, 0xF99FA600, 0xF99DBD00, + 0xF99BD400, 0xF999EB00, 0xF9980200, + 0xF9961900, 0xF9943000, 0xF9924700, + 0xF9905E00, 0xF98E7500, 0xF98C8C00, + 0xF98AA300, 0xF988BA00, 0xF986D100, + 0xF984E800, 0xF982FF00, 0xF9811600, + 0xF97F2D00, 0xF97D4400, 0xF97B5B00, + 0xF9797200, 0xF9778900, 0xF975A000, + 0xF973B700, 0xF971CE00, 0xF96FE500, + 0xF96DFC00, 0xF96C1300, 0xF96A2A00, + 0xF9684100, 0xF9665800, 0xF9646F00, + 0xF9628600, 0xF9609D00, 0xF95EB400, + 0xF95CCB00, 0xF95AE200, 0xF958F900, + 0xF9571000, 0xF9552700, 0xF9533E00, + 0xF9515500, 0xF94F6C00, 0xF94D8300, + 0xF94B9A00, 0xF949B100, 0xF947C800, + 0xF945DF00, 0xF943F600, 0xF9420D00, + 0xF9402400, 0xF93E3B00, 0xF93C5200, + 0xF93A6900, 0xF9388000, 0xF9369700, + 0xF934AE00, 0xF932C500, 0xF930DC00, + 0xF92EF300, 0xF92D0A00, 0xF92B2100, + 0xF9293800, 0xF9274F00, 0xF9256600, + 0xF9237D00, 0xF9219400, 0xF91FAB00, + 0xF91DC200, 0xF91BD900, 0xF919F000, + 0xF9180700, 0xF9161E00, 0xF9143500, + 0xF9124C00, 0xF9106300, 0xF90E7A00, + 0xF90C9100, 0xF90AA800, 0xF908BF00, + 0xF906D600, 0xF904ED00, 0xF9030400, + 0xF9011B00, 0xF8FF3200, 0xF8FD4900, + 0xF8FB6000, 0xF8F97700, 0xF8F78E00, + 0xF8F5A500, 0xF8F3BC00, 0xF8F1D300, + 0xF8EFEA00, 0xF8EE0100, 0xF8EC1800, + 0xF8EA2F00, 0xF8E84600, 0xF8E65D00, + 0xF8E47400, 0xF8E28B00, 0xF8E0A200, + 0xF8DEB900, 0xF8DCD000, 0xF8DAE700, + 0xF8D8FE00, 0xF8D71500, 0xF8D52C00, + 0xF8D34300, 0xF8D15A00, 0xF8CF7100, + 0xF8CD8800, 0xF8CB9F00, 0xF8C9B600, + 0xF8C7CD00, 0xF8C5E400, 0xF8C3FB00, + 0xF8C21200, 0xF8C02900, 0xF8BE4000, + 0xF8BC5700, 0xF8BA6E00, 0xF8B88500, + 0xF8B69C00, 0xF8B4B300, 0xF8B2CA00, + 0xF8B0E100, 0xF8AEF800, 0xF8AD0F00, + 0xF8AB2600, 0xF8A93D00, 0xF8A75400, + 0xF8A56B00, 0xF8A38200, 0xF8A19900, + 0xF89FB000, 0xF89DC700, 0xF89BDE00, + 0xF899F500, 0xF8980C00, 0xF8962300, + 0xF8943A00, 0xF8925100, 0xF8906800, + 0xF88E7F00, 0xF88C9600, 0xF88AAD00, + 0xF888C400, 0xF886DB00, 0xF884F200, + 0xF8830900, 0xF8812000, 0xF87F3700, + 0xF87D4E00, 0xF87B6500, 0xF8797C00, + 0xF8779300, 0xF875AA00, 0xF873C100, + 0xF871D800, 0xF86FEF00, 0xF86E0600, + 0xF86C1D00, 0xF86A3400, 0xF8684B00, + 0xF8666200, 0xF8647900, 0xF8629000, + 0xF860A700, 0xF85EBE00, 0xF85CD500, + 0xF85AEC00, 0xF8590300, 0xF8571A00, + 0xF8553100, 0xF8534800, 0xF8515F00, + 0xF84F7600, 0xF84D8D00, 0xF84BA400, + 0xF849BB00, 0xF847D200, 0xF845E900, + 0xF8440000, 0xF8421700, 0xF8402E00, + 0xF83E4500, 0xF83C5C00, 0xF83A7300, + 0xF8388A00, 0xF836A100, 0xF834B800, + 0xF832CF00, 0xF830E600, 0xF82EFD00, + 0xF82D1400, 0xF82B2B00, 0xF8294200, + 0xF8275900, 0xF8257000, 0xF8238700, + 0xF8219E00, 0xF81FB500, 0xF81DCC00, + 0xF81BE300, 0xF819FA00, 0xF8181100, + 0xF8162800, 0xF8143F00, 0xF8125600, + 0xF8106D00, 0xF80E8400, 0xF80C9B00, + 0xF80AB200, 0xF808C900, 0xF806E000, + 0xF804F700, 0xF8030E00, 0xF8012500, + 0xF7FF3C00, 0xF7FD5300, 0xF7FB6A00, + 0xF7F98100, 0xF7F79800, 0xF7F5AF00, + 0xF7F3C600, 0xF7F1DD00, 0xF7EFF400, + 0xF7EE0B00, 0xF7EC2200, 0xF7EA3900, + 0xF7E85000, 0xF7E66700, 0xF7E47E00, + 0xF7E29500, 0xF7E0AC00, 0xF7DEC300, + 0xF7DCDA00, 0xF7DAF100, 0xF7D90800, + 0xF7D71F00, 0xF7D53600, 0xF7D34D00, + 0xF7D16400, 0xF7CF7B00, 0xF7CD9200, + 0xF7CBA900, 0xF7C9C000, 0xF7C7D700, + 0xF7C5EE00, 0xF7C40500, 0xF7C21C00, + 0xF7C03300, 0xF7BE4A00, 0xF7BC6100, + 0xF7BA7800, 0xF7B88F00, 0xF7B6A600, + 0xF7B4BD00, 0xF7B2D400, 0xF7B0EB00, + 0xF7AF0200, 0xF7AD1900, 0xF7AB3000, + 0xF7A94700, 0xF7A75E00, 0xF7A57500, + 0xF7A38C00, 0xF7A1A300, 0xF79FBA00, + 0xF79DD100, 0xF79BE800, 0xF799FF00, + 0xF7981600, 0xF7962D00, 0xF7944400, + 0xF7925B00, 0xF7907200, 0xF78E8900, + 0xF78CA000, 0xF78AB700, 0xF788CE00, + 0xF786E500, 0xF784FC00, 0xF7831300, + 0xF7812A00, 0xF77F4100, 0xF77D5800, + 0xF77B6F00, 0xF7798600, 0xF7779D00, + 0xF775B400, 0xF773CB00, 0xF771E200, + 0xF76FF900, 0xF76E1000, 0xF76C2700, + 0xF76A3E00, 0xF7685500, 0xF7666C00, + 0xF7648300, 0xF7629A00, 0xF760B100, + 0xF75EC800, 0xF75CDF00, 0xF75AF600, + 0xF7590D00, 0xF7572400, 0xF7553B00, + 0xF7535200, 0xF7516900, 0xF74F8000, + 0xF74D9700, 0xF74BAE00, 0xF749C500, + 0xF747DC00, 0xF745F300, 0xF7440A00, + 0xF7422100, 0xF7403800, 0xF73E4F00, + 0xF73C6600, 0xF73A7D00, 0xF7389400, + 0xF736AB00, 0xF734C200, 0xF732D900, + 0xF730F000, 0xF72F0700, 0xF72D1E00, + 0xF72B3500, 0xF7294C00, 0xF7276300, + 0xF7257A00, 0xF7239100, 0xF721A800, + 0xF71FBF00, 0xF71DD600, 0xF71BED00, + 0xF71A0400, 0xF7181B00, 0xF7163200, + 0xF7144900, 0xF7126000, 0xF7107700, + 0xF70E8E00, 0xF70CA500, 0xF70ABC00, + 0xF708D300, 0xF706EA00, 0xF7050100, + 0xF7031800, 0xF7012F00, 0xF6FF4600, + 0xF6FD5D00, 0xF6FB7400, 0xF6F98B00, + 0xF6F7A200, 0xF6F5B900, 0xF6F3D000, + 0xF6F1E700, 0xF6EFFE00, 0xF6EE1500, + 0xF6EC2C00, 0xF6EA4300, 0xF6E85A00, + 0xF6E67100, 0xF6E48800, 0xF6E29F00, + 0xF6E0B600, 0xF6DECD00, 0xF6DCE400, + 0xF6DAFB00, 0xF6D91200, 0xF6D72900, + 0xF6D54000, 0xF6D35700, 0xF6D16E00, + 0xF6CF8500, 0xF6CD9C00, 0xF6CBB300, + 0xF6C9CA00, 0xF6C7E100, 0xF6C5F800, + 0xF6C40F00, 0xF6C22600, 0xF6C03D00, + 0xF6BE5400, 0xF6BC6B00, 0xF6BA8200, + 0xF6B89900, 0xF6B6B000, 0xF6B4C700, + 0xF6B2DE00, 0xF6B0F500, 0xF6AF0C00, + 0xF6AD2300, 0xF6AB3A00, 0xF6A95100, + 0xF6A76800, 0xF6A57F00, 0xF6A39600, + 0xF6A1AD00, 0xF69FC400, 0xF69DDB00, + 0xF69BF200, 0xF69A0900, 0xF6982000, + 0xF6963700, 0xF6944E00, 0xF6926500, + 0xF6907C00, 0xF68E9300, 0xF68CAA00, + 0xF68AC100, 0xF688D800, 0xF686EF00, + 0xF6850600, 0xF6831D00, 0xF6813400, + 0xF67F4B00, 0xF67D6200, 0xF67B7900, + 0xF6799000, 0xF677A700, 0xF675BE00, + 0xF673D500, 0xF671EC00, 0xF6700300, + 0xF66E1A00, 0xF66C3100, 0xF66A4800, + 0xF6685F00, 0xF6667600, 0xF6648D00, + 0xF662A400, 0xF660BB00, 0xF65ED200, + 0xF65CE900, 0xF65B0000, 0xF6591700, + 0xF6572E00, 0xF6554500, 0xF6535C00, + 0xF6517300, 0xF64F8A00, 0xF64DA100, + 0xF64BB800, 0xF649CF00, 0xF647E600, + 0xF645FD00, 0xF6441400, 0xF6422B00, + 0xF6404200, 0xF63E5900, 0xF63C7000, + 0xF63A8700, 0xF6389E00, 0xF636B500, + 0xF634CC00, 0xF632E300, 0xF630FA00, + 0xF62F1100, 0xF62D2800, 0xF62B3F00, + 0xF6295600, 0xF6276D00, 0xF6258400, + 0xF6239B00, 0xF621B200, 0xF61FC900, + 0xF61DE000, 0xF61BF700, 0xF61A0E00, + 0xF6182500, 0xF6163C00, 0xF6145300, + 0xF6126A00, 0xF6108100, 0xF60E9800, + 0xF60CAF00, 0xF60AC600, 0xF608DD00, + 0xF606F400, 0xF6050B00, 0xF6032200, + 0xF6013900, 0xF5FF5000, 0xF5FD6700, + 0xF5FB7E00, 0xF5F99500, 0xF5F7AC00, + 0xF5F5C300, 0xF5F3DA00, 0xF5F1F100, + 0xF5F00800, 0xF5EE1F00, 0xF5EC3600, + 0xF5EA4D00, 0xF5E86400, 0xF5E67B00, + 0xF5E49200, 0xF5E2A900, 0xF5E0C000, + 0xF5DED700, 0xF5DCEE00, 0xF5DB0500, + 0xF5D91C00, 0xF5D73300, 0xF5D54A00, + 0xF5D36100, 0xF5D17800, 0xF5CF8F00, + 0xF5CDA600, 0xF5CBBD00, 0xF5C9D400, + 0xF5C7EB00, 0xF5C60200, 0xF5C41900, + 0xF5C23000, 0xF5C04700, 0xF5BE5E00, + 0xF5BC7500, 0xF5BA8C00, 0xF5B8A300, + 0xF5B6BA00, 0xF5B4D100, 0xF5B2E800, + 0xF5B0FF00, 0xF5AF1600, 0xF5AD2D00, + 0xF5AB4400, 0xF5A95B00, 0xF5A77200, + 0xF5A58900, 0xF5A3A000, 0xF5A1B700, + 0xF59FCE00, 0xF59DE500, 0xF59BFC00, + 0xF59A1300, 0xF5982A00, 0xF5964100, + 0xF5945800, 0xF5926F00, 0xF5908600, + 0xF58E9D00, 0xF58CB400, 0xF58ACB00, + 0xF588E200, 0xF586F900, 0xF5851000, + 0xF5832700, 0xF5813E00, 0xF57F5500, + 0xF57D6C00, 0xF57B8300, 0xF5799A00, + 0xF577B100, 0xF575C800, 0xF573DF00, + 0xF571F600, 0xF5700D00, 0xF56E2400, + 0xF56C3B00, 0xF56A5200, 0xF5686900, + 0xF5668000, 0xF5649700, 0xF562AE00, + 0xF560C500, 0xF55EDC00, 0xF55CF300, + 0xF55B0A00, 0xF5592100, 0xF5573800, + 0xF5554F00, 0xF5536600, 0xF5517D00, + 0xF54F9400, 0xF54DAB00, 0xF54BC200, + 0xF549D900, 0xF547F000, 0xF5460700, + 0xF5441E00, 0xF5423500, 0xF5404C00, + 0xF53E6300, 0xF53C7A00, 0xF53A9100, + 0xF538A800, 0xF536BF00, 0xF534D600, + 0xF532ED00, 0xF5310400, 0xF52F1B00, + 0xF52D3200, 0xF52B4900, 0xF5296000, + 0xF5277700, 0xF5258E00, 0xF523A500, + 0xF521BC00, 0xF51FD300, 0xF51DEA00, + 0xF51C0100, 0xF51A1800, 0xF5182F00, + 0xF5164600, 0xF5145D00, 0xF5127400, + 0xF5108B00, 0xF50EA200, 0xF50CB900, + 0xF50AD000, 0xF508E700, 0xF506FE00, + 0xF5051500, 0xF5032C00, 0xF5014300, + 0xF4FF5A00, 0xF4FD7100, 0xF4FB8800, + 0xF4F99F00, 0xF4F7B600, 0xF4F5CD00, + 0xF4F3E400, 0xF4F1FB00, 0xF4F01200, + 0xF4EE2900, 0xF4EC4000, 0xF4EA5700, + 0xF4E86E00, 0xF4E68500, 0xF4E49C00, + 0xF4E2B300, 0xF4E0CA00, 0xF4DEE100, + 0xF4DCF800, 0xF4DB0F00, 0xF4D92600, + 0xF4D73D00, 0xF4D55400, 0xF4D36B00, + 0xF4D18200, 0xF4CF9900, 0xF4CDB000, + 0xF4CBC700, 0xF4C9DE00, 0xF4C7F500, + 0xF4C60C00, 0xF4C42300, 0xF4C23A00, + 0xF4C05100, 0xF4BE6800, 0xF4BC7F00, + 0xF4BA9600, 0xF4B8AD00, 0xF4B6C400, + 0xF4B4DB00, 0xF4B2F200, 0xF4B10900, + 0xF4AF2000, 0xF4AD3700, 0xF4AB4E00, + 0xF4A96500, 0xF4A77C00, 0xF4A59300, + 0xF4A3AA00, 0xF4A1C100, 0xF49FD800, + 0xF49DEF00, 0xF49C0600, 0xF49A1D00, + 0xF4983400, 0xF4964B00, 0xF4946200, + 0xF4927900, 0xF4909000, 0xF48EA700, + 0xF48CBE00, 0xF48AD500, 0xF488EC00, + 0xF4870300, 0xF4851A00, 0xF4833100, + 0xF4814800, 0xF47F5F00, 0xF47D7600, + 0xF47B8D00, 0xF479A400, 0xF477BB00, + 0xF475D200, 0xF473E900, 0xF4720000, + 0xF4701700, 0xF46E2E00, 0xF46C4500, + 0xF46A5C00, 0xF4687300, 0xF4668A00, + 0xF464A100, 0xF462B800, 0xF460CF00, + 0xF45EE600, 0xF45CFD00, 0xF45B1400, + 0xF4592B00, 0xF4574200, 0xF4555900, + 0xF4537000, 0xF4518700, 0xF44F9E00, + 0xF44DB500, 0xF44BCC00, 0xF449E300, + 0xF447FA00, 0xF4461100, 0xF4442800, + 0xF4423F00, 0xF4405600, 0xF43E6D00, + 0xF43C8400, 0xF43A9B00, 0xF438B200, + 0xF436C900, 0xF434E000, 0xF432F700, + 0xF4310E00, 0xF42F2500, 0xF42D3C00, + 0xF42B5300, 0xF4296A00, 0xF4278100, + 0xF4259800, 0xF423AF00, 0xF421C600, + 0xF41FDD00, 0xF41DF400, 0xF41C0B00, + 0xF41A2200, 0xF4183900, 0xF4165000, + 0xF4146700, 0xF4127E00, 0xF4109500, + 0xF40EAC00, 0xF40CC300, 0xF40ADA00, + 0xF408F100, 0xF4070800, 0xF4051F00, + 0xF4033600, 0xF4014D00, 0xF3FF6400, + 0xF3FD7B00, 0xF3FB9200, 0xF3F9A900, + 0xF3F7C000, 0xF3F5D700, 0xF3F3EE00, + 0xF3F20500, 0xF3F01C00, 0xF3EE3300, + 0xF3EC4A00, 0xF3EA6100, 0xF3E87800, + 0xF3E68F00, 0xF3E4A600, 0xF3E2BD00, + 0xF3E0D400, 0xF3DEEB00, 0xF3DD0200, + 0xF3DB1900, 0xF3D93000, 0xF3D74700, + 0xF3D55E00, 0xF3D37500, 0xF3D18C00, + 0xF3CFA300, 0xF3CDBA00, 0xF3CBD100, + 0xF3C9E800, 0xF3C7FF00, 0xF3C61600, + 0xF3C42D00, 0xF3C24400, 0xF3C05B00, + 0xF3BE7200, 0xF3BC8900, 0xF3BAA000, + 0xF3B8B700, 0xF3B6CE00, 0xF3B4E500, + 0xF3B2FC00, 0xF3B11300, 0xF3AF2A00, + 0xF3AD4100, 0xF3AB5800, 0xF3A96F00, + 0xF3A78600, 0xF3A59D00, 0xF3A3B400, + 0xF3A1CB00, 0xF39FE200, 0xF39DF900, + 0xF39C1000, 0xF39A2700, 0xF3983E00, + 0xF3965500, 0xF3946C00, 0xF3928300, + 0xF3909A00, 0xF38EB100, 0xF38CC800, + 0xF38ADF00, 0xF388F600, 0xF3870D00, + 0xF3852400, 0xF3833B00, 0xF3815200, + 0xF37F6900, 0xF37D8000, 0xF37B9700, + 0xF379AE00, 0xF377C500, 0xF375DC00, + 0xF373F300, 0xF3720A00, 0xF3702100, + 0xF36E3800, 0xF36C4F00, 0xF36A6600, + 0xF3687D00, 0xF3669400, 0xF364AB00, + 0xF362C200, 0xF360D900, 0xF35EF000, + 0xF35D0700, 0xF35B1E00, 0xF3593500, + 0xF3574C00, 0xF3556300, 0xF3537A00, + 0xF3519100, 0xF34FA800, 0xF34DBF00, + 0xF34BD600, 0xF349ED00, 0xF3480400, + 0xF3461B00, 0xF3443200, 0xF3424900, + 0xF3406000, 0xF33E7700, 0xF33C8E00, + 0xF33AA500, 0xF338BC00, 0xF336D300, + 0xF334EA00, 0xF3330100, 0xF3311800, + 0xF32F2F00, 0xF32D4600, 0xF32B5D00, + 0xF3297400, 0xF3278B00, 0xF325A200, + 0xF323B900, 0xF321D000, 0xF31FE700, + 0xF31DFE00, 0xF31C1500, 0xF31A2C00, + 0xF3184300, 0xF3165A00, 0xF3147100, + 0xF3128800, 0xF3109F00, 0xF30EB600, + 0xF30CCD00, 0xF30AE400, 0xF308FB00, + 0xF3071200, 0xF3052900, 0xF3034000, + 0xF3015700, 0xF2FF6E00, 0xF2FD8500, + 0xF2FB9C00, 0xF2F9B300, 0xF2F7CA00, + 0xF2F5E100, 0xF2F3F800, 0xF2F20F00, + 0xF2F02600, 0xF2EE3D00, 0xF2EC5400, + 0xF2EA6B00, 0xF2E88200, 0xF2E69900, + 0xF2E4B000, 0xF2E2C700, 0xF2E0DE00, + 0xF2DEF500, 0xF2DD0C00, 0xF2DB2300, + 0xF2D93A00, 0xF2D75100, 0xF2D56800, + 0xF2D37F00, 0xF2D19600, 0xF2CFAD00, + 0xF2CDC400, 0xF2CBDB00, 0xF2C9F200, + 0xF2C80900, 0xF2C62000, 0xF2C43700, + 0xF2C24E00, 0xF2C06500, 0xF2BE7C00, + 0xF2BC9300, 0xF2BAAA00, 0xF2B8C100, + 0xF2B6D800, 0xF2B4EF00, 0xF2B30600, + 0xF2B11D00, 0xF2AF3400, 0xF2AD4B00, + 0xF2AB6200, 0xF2A97900, 0xF2A79000, + 0xF2A5A700, 0xF2A3BE00, 0xF2A1D500, + 0xF29FEC00, 0xF29E0300, 0xF29C1A00, + 0xF29A3100, 0xF2984800, 0xF2965F00, + 0xF2947600, 0xF2928D00, 0xF290A400, + 0xF28EBB00, 0xF28CD200, 0xF28AE900, + 0xF2890000, 0xF2871700, 0xF2852E00, + 0xF2834500, 0xF2815C00, 0xF27F7300, + 0xF27D8A00, 0xF27BA100, 0xF279B800, + 0xF277CF00, 0xF275E600, 0xF273FD00, + 0xF2721400, 0xF2702B00, 0xF26E4200, + 0xF26C5900, 0xF26A7000, 0xF2688700, + 0xF2669E00, 0xF264B500, 0xF262CC00, + 0xF260E300, 0xF25EFA00, 0xF25D1100, + 0xF25B2800, 0xF2593F00, 0xF2575600, + 0xF2556D00, 0xF2538400, 0xF2519B00, + 0xF24FB200, 0xF24DC900, 0xF24BE000, + 0xF249F700, 0xF2480E00, 0xF2462500, + 0xF2443C00, 0xF2425300, 0xF2406A00, + 0xF23E8100, 0xF23C9800, 0xF23AAF00, + 0xF238C600, 0xF236DD00, 0xF234F400, + 0xF2330B00, 0xF2312200, 0xF22F3900, + 0xF22D5000, 0xF22B6700, 0xF2297E00, + 0xF2279500, 0xF225AC00, 0xF223C300, + 0xF221DA00, 0xF21FF100, 0xF21E0800, + 0xF21C1F00, 0xF21A3600, 0xF2184D00, + 0xF2166400, 0xF2147B00, 0xF2129200, + 0xF210A900, 0xF20EC000, 0xF20CD700, + 0xF20AEE00, 0xF2090500, 0xF2071C00, + 0xF2053300, 0xF2034A00, 0xF2016100, + 0xF1FF7800, 0xF1FD8F00, 0xF1FBA600, + 0xF1F9BD00, 0xF1F7D400, 0xF1F5EB00, + 0xF1F40200, 0xF1F21900, 0xF1F03000, + 0xF1EE4700, 0xF1EC5E00, 0xF1EA7500, + 0xF1E88C00, 0xF1E6A300, 0xF1E4BA00, + 0xF1E2D100, 0xF1E0E800, 0xF1DEFF00, + 0xF1DD1600, 0xF1DB2D00, 0xF1D94400, + 0xF1D75B00, 0xF1D57200, 0xF1D38900, + 0xF1D1A000, 0xF1CFB700, 0xF1CDCE00, + 0xF1CBE500, 0xF1C9FC00, 0xF1C81300, + 0xF1C62A00, 0xF1C44100, 0xF1C25800, + 0xF1C06F00, 0xF1BE8600, 0xF1BC9D00, + 0xF1BAB400, 0xF1B8CB00, 0xF1B6E200, + 0xF1B4F900, 0xF1B31000, 0xF1B12700, + 0xF1AF3E00, 0xF1AD5500, 0xF1AB6C00, + 0xF1A98300, 0xF1A79A00, 0xF1A5B100, + 0xF1A3C800, 0xF1A1DF00, 0xF19FF600, + 0xF19E0D00, 0xF19C2400, 0xF19A3B00, + 0xF1985200, 0xF1966900, 0xF1948000, + 0xF1929700, 0xF190AE00, 0xF18EC500, + 0xF18CDC00, 0xF18AF300, 0xF1890A00, + 0xF1872100, 0xF1853800, 0xF1834F00, + 0xF1816600, 0xF17F7D00, 0xF17D9400, + 0xF17BAB00, 0xF179C200, 0xF177D900, + 0xF175F000, 0xF1740700, 0xF1721E00, + 0xF1703500, 0xF16E4C00, 0xF16C6300, + 0xF16A7A00, 0xF1689100, 0xF166A800, + 0xF164BF00, 0xF162D600, 0xF160ED00, + 0xF15F0400, 0xF15D1B00, 0xF15B3200, + 0xF1594900, 0xF1576000, 0xF1557700, + 0xF1538E00, 0xF151A500, 0xF14FBC00, + 0xF14DD300, 0xF14BEA00, 0xF14A0100, + 0xF1481800, 0xF1462F00, 0xF1444600, + 0xF1425D00, 0xF1407400, 0xF13E8B00, + 0xF13CA200, 0xF13AB900, 0xF138D000, + 0xF136E700, 0xF134FE00, 0xF1331500, + 0xF1312C00, 0xF12F4300, 0xF12D5A00, + 0xF12B7100, 0xF1298800, 0xF1279F00, + 0xF125B600, 0xF123CD00, 0xF121E400, + 0xF11FFB00, 0xF11E1200, 0xF11C2900, + 0xF11A4000, 0xF1185700, 0xF1166E00, + 0xF1148500, 0xF1129C00, 0xF110B300, + 0xF10ECA00, 0xF10CE100, 0xF10AF800, + 0xF1090F00, 0xF1072600, 0xF1053D00, + 0xF1035400, 0xF1016B00, 0xF0FF8200, + 0xF0FD9900, 0xF0FBB000, 0xF0F9C700, + 0xF0F7DE00, 0xF0F5F500, 0xF0F40C00, + 0xF0F22300, 0xF0F03A00, 0xF0EE5100, + 0xF0EC6800, 0xF0EA7F00, 0xF0E89600, + 0xF0E6AD00, 0xF0E4C400, 0xF0E2DB00, + 0xF0E0F200, 0xF0DF0900, 0xF0DD2000, + 0xF0DB3700, 0xF0D94E00, 0xF0D76500, + 0xF0D57C00, 0xF0D39300, 0xF0D1AA00, + 0xF0CFC100, 0xF0CDD800, 0xF0CBEF00, + 0xF0CA0600, 0xF0C81D00, 0xF0C63400, + 0xF0C44B00, 0xF0C26200, 0xF0C07900, + 0xF0BE9000, 0xF0BCA700, 0xF0BABE00, + 0xF0B8D500, 0xF0B6EC00, 0xF0B50300, + 0xF0B31A00, 0xF0B13100, 0xF0AF4800, + 0xF0AD5F00, 0xF0AB7600, 0xF0A98D00, + 0xF0A7A400, 0xF0A5BB00, 0xF0A3D200, + 0xF0A1E900, 0xF0A40000, 0xF0A24000, + 0xF0A08000, 0xF09EC000, 0xF09D0000, + 0xF09B4000, 0xF0998000, 0xF097C000, + 0xF0960000, 0xF0944000, 0xF0928000, + 0xF090C000, 0xF08F0000, 0xF08D4000, + 0xF08B8000, 0xF089C000, 0xF0880000, + 0xF0864000, 0xF0848000, 0xF082C000, + 0xF0810000, 0xF07F4000, 0xF07D8000, + 0xF07BC000, 0xF07A0000, 0xF0784000, + 0xF0768000, 0xF074C000, 0xF0730000, + 0xF0714000, 0xF06F8000, 0xF06DC000, + 0xF06C0000, 0xF06A4000, 0xF0688000, + 0xF066C000, 0xF0650000, 0xF0634000, + 0xF0618000, 0xF05FC000, 0xF05E0000, + 0xF05C4000, 0xF05A8000, 0xF058C000, + 0xF0570000, 0xF0554000, 0xF0538000, + 0xF051C000, 0xF0500000, 0xF04E4000, + 0xF04C8000, 0xF04AC000, 0xF0490000, + 0xF0474000, 0xF0458000, 0xF043C000, + 0xF0420000, 0xF0404000, 0xF03E8000, + 0xF03CC000, 0xF03B0000, 0xF0394000, + 0xF0378000, 0xF035C000, 0xF0340000, + 0xF0324000, 0xF0308000, 0xF02EC000, + 0xF02D0000, 0xF02B4000, 0xF0298000, + 0xF027C000, 0xF0260000, 0xF0244000, + 0xF0228000, 0xF020C000, 0xF01F0000, + 0xF01D4000, 0xF01B8000, 0xF019C000, + 0xF0180000, 0xF0164000, 0xF0148000, + 0xF012C000, 0xF0110000, 0xF00F4000, + 0xF00D8000, 0xF00BC000, 0xF00A0000, + 0xF0084000, 0xF0068000, 0xF004C000, + 0xF0030000, 0xF0014000, 0xEFFF8000, + 0xEFFDC000, 0xEFFC0000, 0xEFFA4000, + 0xEFF88000, 0xEFF6C000, 0xEFF50000, + 0xEFF34000, 0xEFF18000, 0xEFEFC000, + 0xEFEE0000, 0xEFEC4000, 0xEFEA8000, + 0xEFE8C000, 0xEFE70000, 0xEFE54000, + 0xEFE38000, 0xEFE1C000, 0xEFE00000, + 0xEFDE4000, 0xEFDC8000, 0xEFDAC000, + 0xEFD90000, 0xEFD74000, 0xEFD58000, + 0xEFD3C000, 0xEFD20000, 0xEFD04000, + 0xEFCE8000, 0xEFCCC000, 0xEFCB0000, + 0xEFC94000, 0xEFC78000, 0xEFC5C000, + 0xEFC40000, 0xEFC24000, 0xEFC08000, + 0xEFBEC000, 0xEFBD0000, 0xEFBB4000, + 0xEFB98000, 0xEFB7C000, 0xEFB60000, + 0xEFB44000, 0xEFB28000, 0xEFB0C000, + 0xEFAF0000, 0xEFAD4000, 0xEFAB8000, + 0xEFA9C000, 0xEFA80000, 0xEFA64000, + 0xEFA48000, 0xEFA2C000, 0xEFA10000, + 0xEF9F4000, 0xEF9D8000, 0xEF9BC000, + 0xEF9A0000, 0xEF984000, 0xEF968000, + 0xEF94C000, 0xEF930000, 0xEF914000, + 0xEF8F8000, 0xEF8DC000, 0xEF8C0000, + 0xEF8A4000, 0xEF888000, 0xEF86C000, + 0xEF850000, 0xEF834000, 0xEF818000, + 0xEF7FC000, 0xEF7E0000, 0xEF7C4000, + 0xEF7A8000, 0xEF78C000, 0xEF770000, + 0xEF754000, 0xEF738000, 0xEF71C000, + 0xEF700000, 0xEF6E4000, 0xEF6C8000, + 0xEF6AC000, 0xEF690000, 0xEF674000, + 0xEF658000, 0xEF63C000, 0xEF620000, + 0xEF604000, 0xEF5E8000, 0xEF5CC000, + 0xEF5B0000, 0xEF594000, 0xEF578000, + 0xEF55C000, 0xEF540000, 0xEF524000, + 0xEF508000, 0xEF4EC000, 0xEF4D0000, + 0xEF4B4000, 0xEF498000, 0xEF47C000, + 0xEF460000, 0xEF444000, 0xEF428000, + 0xEF40C000, 0xEF3F0000, 0xEF3D4000, + 0xEF3B8000, 0xEF39C000, 0xEF380000, + 0xEF364000, 0xEF348000, 0xEF32C000, + 0xEF310000, 0xEF2F4000, 0xEF2D8000, + 0xEF2BC000, 0xEF2A0000, 0xEF284000, + 0xEF268000, 0xEF24C000, 0xEF230000, + 0xEF214000, 0xEF1F8000, 0xEF1DC000, + 0xEF1C0000, 0xEF1A4000, 0xEF188000, + 0xEF16C000, 0xEF150000, 0xEF134000, + 0xEF118000, 0xEF0FC000, 0xEF0E0000, + 0xEF0C4000, 0xEF0A8000, 0xEF08C000, + 0xEF070000, 0xEF054000, 0xEF038000, + 0xEF01C000, 0xEF000000, 0xEEFE4000, + 0xEEFC8000, 0xEEFAC000, 0xEEF90000, + 0xEEF74000, 0xEEF58000, 0xEEF3C000, + 0xEEF20000, 0xEEF04000, 0xEEEE8000, + 0xEEECC000, 0xEEEB0000, 0xEEE94000, + 0xEEE78000, 0xEEE5C000, 0xEEE40000, + 0xEEE24000, 0xEEE08000, 0xEEDEC000, + 0xEEDD0000, 0xEEDB4000, 0xEED98000, + 0xEED7C000, 0xEED60000, 0xEED44000, + 0xEED28000, 0xEED0C000, 0xEECF0000, + 0xEECD4000, 0xEECB8000, 0xEEC9C000, + 0xEEC80000, 0xEEC64000, 0xEEC48000, + 0xEEC2C000, 0xEEC10000, 0xEEBF4000, + 0xEEBD8000, 0xEEBBC000, 0xEEBA0000, + 0xEEB84000, 0xEEB68000, 0xEEB4C000, + 0xEEB30000, 0xEEB14000, 0xEEAF8000, + 0xEEADC000, 0xEEAC0000, 0xEEAA4000, + 0xEEA88000, 0xEEA6C000, 0xEEA50000, + 0xEEA34000, 0xEEA18000, 0xEE9FC000, + 0xEE9E0000, 0xEE9C4000, 0xEE9A8000, + 0xEE98C000, 0xEE970000, 0xEE954000, + 0xEE938000, 0xEE91C000, 0xEE900000, + 0xEE8E4000, 0xEE8C8000, 0xEE8AC000, + 0xEE890000, 0xEE874000, 0xEE858000, + 0xEE83C000, 0xEE820000, 0xEE804000, + 0xEE7E8000, 0xEE7CC000, 0xEE7B0000, + 0xEE794000, 0xEE778000, 0xEE75C000, + 0xEE740000, 0xEE724000, 0xEE708000, + 0xEE6EC000, 0xEE6D0000, 0xEE6B4000, + 0xEE698000, 0xEE67C000, 0xEE660000, + 0xEE644000, 0xEE628000, 0xEE60C000, + 0xEE5F0000, 0xEE5D4000, 0xEE5B8000, + 0xEE59C000, 0xEE580000, 0xEE564000, + 0xEE548000, 0xEE52C000, 0xEE510000, + 0xEE4F4000, 0xEE4D8000, 0xEE4BC000, + 0xEE4A0000, 0xEE484000, 0xEE468000, + 0xEE44C000, 0xEE430000, 0xEE414000, + 0xEE3F8000, 0xEE3DC000, 0xEE3C0000, + 0xEE3A4000, 0xEE388000, 0xEE36C000, + 0xEE350000, 0xEE334000, 0xEE318000, + 0xEE2FC000, 0xEE2E0000, 0xEE2C4000, + 0xEE2A8000, 0xEE28C000, 0xEE270000, + 0xEE254000, 0xEE238000, 0xEE21C000, + 0xEE200000, 0xEE1E4000, 0xEE1C8000, + 0xEE1AC000, 0xEE190000, 0xEE174000, + 0xEE158000, 0xEE13C000, 0xEE120000, + 0xEE104000, 0xEE0E8000, 0xEE0CC000, + 0xEE0B0000, 0xEE094000, 0xEE078000, + 0xEE05C000, 0xEE040000, 0xEE024000, + 0xEE008000, 0xEDFEC000, 0xEDFD0000, + 0xEDFB4000, 0xEDF98000, 0xEDF7C000, + 0xEDF60000, 0xEDF44000, 0xEDF28000, + 0xEDF0C000, 0xEDEF0000, 0xEDED4000, + 0xEDEB8000, 0xEDE9C000, 0xEDE80000, + 0xEDE64000, 0xEDE48000, 0xEDE2C000, + 0xEDE10000, 0xEDDF4000, 0xEDDD8000, + 0xEDDBC000, 0xEDDA0000, 0xEDD84000, + 0xEDD68000, 0xEDD4C000, 0xEDD30000, + 0xEDD14000, 0xEDCF8000, 0xEDCDC000, + 0xEDCC0000, 0xEDCA4000, 0xEDC88000, + 0xEDC6C000, 0xEDC50000, 0xEDC34000, + 0xEDC18000, 0xEDBFC000, 0xEDBE0000, + 0xEDBC4000, 0xEDBA8000, 0xEDB8C000, + 0xEDB70000, 0xEDB54000, 0xEDB38000, + 0xEDB1C000, 0xEDB00000, 0xEDAE4000, + 0xEDAC8000, 0xEDAAC000, 0xEDA90000, + 0xEDA74000, 0xEDA58000, 0xEDA3C000, + 0xEDA20000, 0xEDA04000, 0xED9E8000, + 0xED9CC000, 0xED9B0000, 0xED994000, + 0xED978000, 0xED95C000, 0xED940000, + 0xED924000, 0xED908000, 0xED8EC000, + 0xED8D0000, 0xED8B4000, 0xED898000, + 0xED87C000, 0xED860000, 0xED844000, + 0xED828000, 0xED80C000, 0xED7F0000, + 0xED7D4000, 0xED7B8000, 0xED79C000, + 0xED780000, 0xED764000, 0xED748000, + 0xED72C000, 0xED710000, 0xED6F4000, + 0xED6D8000, 0xED6BC000, 0xED6A0000, + 0xED684000, 0xED668000, 0xED64C000, + 0xED630000, 0xED614000, 0xED5F8000, + 0xED5DC000, 0xED5C0000, 0xED5A4000, + 0xED588000, 0xED56C000, 0xED550000, + 0xED534000, 0xED518000, 0xED4FC000, + 0xED4E0000, 0xED4C4000, 0xED4A8000, + 0xED48C000, 0xED470000, 0xED454000, + 0xED438000, 0xED41C000, 0xED400000, + 0xED3E4000, 0xED3C8000, 0xED3AC000, + 0xED390000, 0xED374000, 0xED358000, + 0xED33C000, 0xED320000, 0xED304000, + 0xED2E8000, 0xED2CC000, 0xED2B0000, + 0xED294000, 0xED278000, 0xED25C000, + 0xED240000, 0xED224000, 0xED208000, + 0xED1EC000, 0xED1D0000, 0xED1B4000, + 0xED198000, 0xED17C000, 0xED160000, + 0xED144000, 0xED128000, 0xED10C000, + 0xED0F0000, 0xED0D4000, 0xED0B8000, + 0xED09C000, 0xED080000, 0xED064000, + 0xED048000, 0xED02C000, 0xED010000, + 0xECFF4000, 0xECFD8000, 0xECFBC000, + 0xECFA0000, 0xECF84000, 0xECF68000, + 0xECF4C000, 0xECF30000, 0xECF14000, + 0xECEF8000, 0xECEDC000, 0xECEC0000, + 0xECEA4000, 0xECE88000, 0xECE6C000, + 0xECE50000, 0xECE34000, 0xECE18000, + 0xECDFC000, 0xECDE0000, 0xECDC4000, + 0xECDA8000, 0xECD8C000, 0xECD70000, + 0xECD54000, 0xECD38000, 0xECD1C000, + 0xECD00000, 0xECCE4000, 0xECCC8000, + 0xECCAC000, 0xECC90000, 0xECC74000, + 0xECC58000, 0xECC3C000, 0xECC20000, + 0xECC04000, 0xECBE8000, 0xECBCC000, + 0xECBB0000, 0xECB94000, 0xECB78000, + 0xECB5C000, 0xECB40000, 0xECB24000, + 0xECB08000, 0xECAEC000, 0xECAD0000, + 0xECAB4000, 0xECA98000, 0xECA7C000, + 0xECA60000, 0xECA44000, 0xECA28000, + 0xECA0C000, 0xEC9F0000, 0xEC9D4000, + 0xEC9B8000, 0xEC99C000, 0xEC980000, + 0xEC964000, 0xEC948000, 0xEC92C000, + 0xEC910000, 0xEC8F4000, 0xEC8D8000, + 0xEC8BC000, 0xEC8A0000, 0xEC884000, + 0xEC868000, 0xEC84C000, 0xEC830000, + 0xEC814000, 0xEC7F8000, 0xEC7DC000, + 0xEC7C0000, 0xEC7A4000, 0xEC788000, + 0xEC76C000, 0xEC750000, 0xEC734000, + 0xEC718000, 0xEC6FC000, 0xEC6E0000, + 0xEC6C4000, 0xEC6A8000, 0xEC68C000, + 0xEC670000, 0xEC654000, 0xEC638000, + 0xEC61C000, 0xEC600000, 0xEC5E4000, + 0xEC5C8000, 0xEC5AC000, 0xEC590000, + 0xEC574000, 0xEC558000, 0xEC53C000, + 0xEC520000, 0xEC504000, 0xEC4E8000, + 0xEC4CC000, 0xEC4B0000, 0xEC494000, + 0xEC478000, 0xEC45C000, 0xEC440000, + 0xEC424000, 0xEC408000, 0xEC3EC000, + 0xEC3D0000, 0xEC3B4000, 0xEC398000, + 0xEC37C000, 0xEC360000, 0xEC344000, + 0xEC328000, 0xEC30C000, 0xEC2F0000, + 0xEC2D4000, 0xEC2B8000, 0xEC29C000, + 0xEC280000, 0xEC264000, 0xEC248000, + 0xEC22C000, 0xEC210000, 0xEC1F4000, + 0xEC1D8000, 0xEC1BC000, 0xEC1A0000, + 0xEC184000, 0xEC168000, 0xEC14C000, + 0xEC130000, 0xEC114000, 0xEC0F8000, + 0xEC0DC000, 0xEC0C0000, 0xEC0A4000, + 0xEC088000, 0xEC06C000, 0xEC050000, + 0xEC034000, 0xEC018000, 0xEBFFC000, + 0xEBFE0000, 0xEBFC4000, 0xEBFA8000, + 0xEBF8C000, 0xEBF70000, 0xEBF54000, + 0xEBF38000, 0xEBF1C000, 0xEBF00000, + 0xEBEE4000, 0xEBEC8000, 0xEBEAC000, + 0xEBE90000, 0xEBE74000, 0xEBE58000, + 0xEBE3C000, 0xEBE20000, 0xEBE04000, + 0xEBDE8000, 0xEBDCC000, 0xEBDB0000, + 0xEBD94000, 0xEBD78000, 0xEBD5C000, + 0xEBD40000, 0xEBD24000, 0xEBD08000, + 0xEBCEC000, 0xEBCD0000, 0xEBCB4000, + 0xEBC98000, 0xEBC7C000, 0xEBC60000, + 0xEBC44000, 0xEBC28000, 0xEBC0C000, + 0xEBBF0000, 0xEBBD4000, 0xEBBB8000, + 0xEBB9C000, 0xEBB80000, 0xEBB64000, + 0xEBB48000, 0xEBB2C000, 0xEBB10000, + 0xEBAF4000, 0xEBAD8000, 0xEBABC000, + 0xEBAA0000, 0xEBA84000, 0xEBA68000, + 0xEBA4C000, 0xEBA30000, 0xEBA14000, + 0xEB9F8000, 0xEB9DC000, 0xEB9C0000, + 0xEB9A4000, 0xEB988000, 0xEB96C000, + 0xEB950000, 0xEB934000, 0xEB918000, + 0xEB8FC000, 0xEB8E0000, 0xEB8C4000, + 0xEB8A8000, 0xEB88C000, 0xEB870000, + 0xEB854000, 0xEB838000, 0xEB81C000, + 0xEB800000, 0xEB7E4000, 0xEB7C8000, + 0xEB7AC000, 0xEB790000, 0xEB774000, + 0xEB758000, 0xEB73C000, 0xEB720000, + 0xEB704000, 0xEB6E8000, 0xEB6CC000, + 0xEB6B0000, 0xEB694000, 0xEB678000, + 0xEB65C000, 0xEB640000, 0xEB624000, + 0xEB608000, 0xEB5EC000, 0xEB5D0000, + 0xEB5B4000, 0xEB598000, 0xEB57C000, + 0xEB560000, 0xEB544000, 0xEB528000, + 0xEB50C000, 0xEB4F0000, 0xEB4D4000, + 0xEB4B8000, 0xEB49C000, 0xEB480000, + 0xEB464000, 0xEB448000, 0xEB42C000, + 0xEB410000, 0xEB3F4000, 0xEB3D8000, + 0xEB3BC000, 0xEB3A0000, 0xEB384000, + 0xEB368000, 0xEB34C000, 0xEB330000, + 0xEB314000, 0xEB2F8000, 0xEB2DC000, + 0xEB2C0000, 0xEB2A4000, 0xEB288000, + 0xEB26C000, 0xEB250000, 0xEB234000, + 0xEB218000, 0xEB1FC000, 0xEB1E0000, + 0xEB1C4000, 0xEB1A8000, 0xEB18C000, + 0xEB170000, 0xEB154000, 0xEB138000, + 0xEB11C000, 0xEB100000, 0xEB0E4000, + 0xEB0C8000, 0xEB0AC000, 0xEB090000, + 0xEB074000, 0xEB058000, 0xEB03C000, + 0xEB020000, 0xEB004000, 0xEAFE8000, + 0xEAFCC000, 0xEAFB0000, 0xEAF94000, + 0xEAF78000, 0xEAF5C000, 0xEAF40000, + 0xEAF24000, 0xEAF08000, 0xEAEEC000, + 0xEAED0000, 0xEAEB4000, 0xEAE98000, + 0xEAE7C000, 0xEAE60000, 0xEAE44000, + 0xEAE28000, 0xEAE0C000, 0xEADF0000, + 0xEADD4000, 0xEADB8000, 0xEAD9C000, + 0xEAD80000, 0xEAD64000, 0xEAD48000, + 0xEAD2C000, 0xEAD10000, 0xEACF4000, + 0xEACD8000, 0xEACBC000, 0xEACA0000, + 0xEAC84000, 0xEAC68000, 0xEAC4C000, + 0xEAC30000, 0xEAC14000, 0xEABF8000, + 0xEABDC000, 0xEABC0000, 0xEABA4000, + 0xEAB88000, 0xEAB6C000, 0xEAB50000, + 0xEAB34000, 0xEAB18000, 0xEAAFC000, + 0xEAAE0000, 0xEAAC4000, 0xEAAA8000, + 0xEAA8C000, 0xEAA70000, 0xEAA54000, + 0xEAA38000, 0xEAA1C000, 0xEAA00000, + 0xEA9E4000, 0xEA9C8000, 0xEA9AC000, + 0xEA990000, 0xEA974000, 0xEA958000, + 0xEA93C000, 0xEA920000, 0xEA904000, + 0xEA8E8000, 0xEA8CC000, 0xEA8B0000, + 0xEA894000, 0xEA878000, 0xEA85C000, + 0xEA840000, 0xEA824000, 0xEA808000, + 0xEA7EC000, 0xEA7D0000, 0xEA7B4000, + 0xEA798000, 0xEA77C000, 0xEA760000, + 0xEA744000, 0xEA728000, 0xEA70C000, + 0xEA6F0000, 0xEA6D4000, 0xEA6B8000, + 0xEA69C000, 0xEA680000, 0xEA664000, + 0xEA648000, 0xEA62C000, 0xEA610000, + 0xEA5F4000, 0xEA5D8000, 0xEA5BC000, + 0xEA5A0000, 0xEA584000, 0xEA568000, + 0xEA54C000, 0xEA530000, 0xEA514000, + 0xEA4F8000, 0xEA4DC000, 0xEA4C0000, + 0xEA4A4000, 0xEA488000, 0xEA46C000, + 0xEA450000, 0xEA434000, 0xEA418000, + 0xEA3FC000, 0xEA3E0000, 0xEA3C4000, + 0xEA3A8000, 0xEA38C000, 0xEA370000, + 0xEA354000, 0xEA338000, 0xEA31C000, + 0xEA300000, 0xEA2E4000, 0xEA2C8000, + 0xEA2AC000, 0xEA290000, 0xEA274000, + 0xEA258000, 0xEA23C000, 0xEA220000, + 0xEA204000, 0xEA1E8000, 0xEA1CC000, + 0xEA1B0000, 0xEA194000, 0xEA178000, + 0xEA15C000, 0xEA140000, 0xEA124000, + 0xEA108000, 0xEA0EC000, 0xEA0D0000, + 0xEA0B4000, 0xEA098000, 0xEA07C000, + 0xEA060000, 0xEA044000, 0xEA028000, + 0xEA00C000, 0xE9FF0000, 0xE9FD4000, + 0xE9FB8000, 0xE9F9C000, 0xE9F80000, + 0xE9F64000, 0xE9F48000, 0xE9F2C000, + 0xE9F10000, 0xE9EF4000, 0xE9ED8000, + 0xE9EBC000, 0xE9EA0000, 0xE9E84000, + 0xE9E68000, 0xE9E4C000, 0xE9E30000, + 0xE9E14000, 0xE9DF8000, 0xE9DDC000, + 0xE9DC0000, 0xE9DA4000, 0xE9D88000, + 0xE9D6C000, 0xE9D50000, 0xE9D34000, + 0xE9D18000, 0xE9CFC000, 0xE9CE0000, + 0xE9CC4000, 0xE9CA8000, 0xE9C8C000, + 0xE9C70000, 0xE9C54000, 0xE9C38000, + 0xE9C1C000, 0xE9C00000, 0xE9BE4000, + 0xE9BC8000, 0xE9BAC000, 0xE9B90000, + 0xE9B74000, 0xE9B58000, 0xE9B3C000, + 0xE9B20000, 0xE9B04000, 0xE9AE8000, + 0xE9ACC000, 0xE9AB0000, 0xE9A94000, + 0xE9A78000, 0xE9A5C000, 0xE9A40000, + 0xE9A24000, 0xE9A08000, 0xE99EC000, + 0xE99D0000, 0xE99B4000, 0xE9998000, + 0xE997C000, 0xE9960000, 0xE9944000, + 0xE9928000, 0xE990C000, 0xE98F0000, + 0xE98D4000, 0xE98B8000, 0xE989C000, + 0xE9880000, 0xE9864000, 0xE9848000, + 0xE982C000, 0xE9810000, 0xE97F4000, + 0xE97D8000, 0xE97BC000, 0xE97A0000, + 0xE9784000, 0xE9768000, 0xE974C000, + 0xE9730000, 0xE9714000, 0xE96F8000, + 0xE96DC000, 0xE96C0000, 0xE96A4000, + 0xE9688000, 0xE966C000, 0xE9650000, + 0xE9634000, 0xE9618000, 0xE95FC000, + 0xE95E0000, 0xE95C4000, 0xE95A8000, + 0xE958C000, 0xE9570000, 0xE9554000, + 0xE9538000, 0xE951C000, 0xE9500000, + 0xE94E4000, 0xE94C8000, 0xE94AC000, + 0xE9490000, 0xE9474000, 0xE9458000, + 0xE943C000, 0xE9420000, 0xE9404000, + 0xE93E8000, 0xE93CC000, 0xE93B0000, + 0xE9394000, 0xE9378000, 0xE935C000, + 0xE9340000, 0xE9324000, 0xE9308000, + 0xE92EC000, 0xE92D0000, 0xE92B4000, + 0xE9298000, 0xE927C000, 0xE9260000, + 0xE9244000, 0xE9228000, 0xE920C000, + 0xE91F0000, 0xE91D4000, 0xE91B8000, + 0xE919C000, 0xE9180000, 0xE9164000, + 0xE9148000, 0xE912C000, 0xE9110000, + 0xE90F4000, 0xE90D8000, 0xE90BC000, + 0xE90A0000, 0xE9084000, 0xE9068000, + 0xE904C000, 0xE9030000, 0xE9014000, + 0xE8FF8000, 0xE8FDC000, 0xE8FC0000, + 0xE8FA4000, 0xE8F88000, 0xE8F6C000, + 0xE8F50000, 0xE8F34000, 0xE8F18000, + 0xE8EFC000, 0xE8EE0000, 0xE8EC4000, + 0xE8EA8000, 0xE8E8C000, 0xE8E70000, + 0xE8E54000, 0xE8E38000, 0xE8E1C000, + 0xE8E00000, 0xE8DE4000, 0xE8DC8000, + 0xE8DAC000, 0xE8D90000, 0xE8D74000, + 0xE8D58000, 0xE8D3C000, 0xE8D20000, + 0xE8D04000, 0xE8CE8000, 0xE8CCC000, + 0xE8CB0000, 0xE8C94000, 0xE8C78000, + 0xE8C5C000, 0xE8C40000, 0xE8C24000, + 0xE8C08000, 0xE8BEC000, 0xE8BD0000, + 0xE8BB4000, 0xE8B98000, 0xE8B7C000, + 0xE8B60000, 0xE8B44000, 0xE8B28000, + 0xE8B0C000, 0xE8AF0000, 0xE8AD4000, + 0xE8AB8000, 0xE8A9C000, 0xE8A80000, + 0xE8A64000, 0xE8A48000, 0xE8A2C000, + 0xE8A10000, 0xE89F4000, 0xE89D8000, + 0xE89BC000, 0xE89A0000, 0xE8984000, + 0xE8968000, 0xE894C000, 0xE8930000, + 0xE8914000, 0xE88F8000, 0xE88DC000, + 0xE88C0000, 0xE88A4000, 0xE8888000, + 0xE886C000, 0xE8850000, 0xE8834000, + 0xE8818000, 0xE87FC000, 0xE87E0000, + 0xE87C4000, 0xE87A8000, 0xE878C000, + 0xE8770000, 0xE8754000, 0xE8738000, + 0xE871C000, 0xE8700000, 0xE86E4000, + 0xE86C8000, 0xE86AC000, 0xE8690000, + 0xE8674000, 0xE8658000, 0xE863C000, + 0xE8620000, 0xE8604000, 0xE85E8000, + 0xE85CC000, 0xE85B0000, 0xE8594000, + 0xE8578000, 0xE855C000, 0xE8540000, + 0xE8524000, 0xE8508000, 0xE84EC000, + 0xE84D0000, 0xE84B4000, 0xE8498000, + 0xE847C000, 0xE8460000, 0xE8444000, + 0xE8428000, 0xE840C000, 0xE83F0000, + 0xE83D4000, 0xE83B8000, 0xE839C000, + 0xE8380000, 0xE8364000, 0xE8348000, + 0xE832C000, 0xE8310000, 0xE82F4000, + 0xE82D8000, 0xE82BC000, 0xE82A0000, + 0xE8284000, 0xE8268000, 0xE824C000, + 0xE8230000, 0xE8214000, 0xE81F8000, + 0xE81DC000, 0xE81C0000, 0xE81A4000, + 0xE8188000, 0xE816C000, 0xE8150000, + 0xE8134000, 0xE8118000, 0xE80FC000, + 0xE80E0000, 0xE80C4000, 0xE80A8000, + 0xE808C000, 0xE8070000, 0xE8054000, + 0xE8038000, 0xE801C000, 0xE8000000, + 0xE7FE4000, 0xE7FC8000, 0xE7FAC000, + 0xE7F90000, 0xE7F74000, 0xE7F58000, + 0xE7F3C000, 0xE7F20000, 0xE7F04000, + 0xE7EE8000, 0xE7ECC000, 0xE7EB0000, + 0xE7E94000, 0xE7E78000, 0xE7E5C000, + 0xE7E40000, 0xE7E24000, 0xE7E08000, + 0xE7DEC000, 0xE7DD0000, 0xE7DB4000, + 0xE7D98000, 0xE7D7C000, 0xE7D60000, + 0xE7D44000, 0xE7D28000, 0xE7D0C000, + 0xE7CF0000, 0xE7CD4000, 0xE7CB8000, + 0xE7C9C000, 0xE7C80000, 0xE7C64000, + 0xE7C48000, 0xE7C2C000, 0xE7C10000, + 0xE7BF4000, 0xE7BD8000, 0xE7BBC000, + 0xE7BA0000, 0xE7B84000, 0xE7B68000, + 0xE7B4C000, 0xE7B30000, 0xE7B14000, + 0xE7AF8000, 0xE7ADC000, 0xE7AC0000, + 0xE7AA4000, 0xE7A88000, 0xE7A6C000, + 0xE7A50000, 0xE7A34000, 0xE7A18000, + 0xE79FC000, 0xE79E0000, 0xE79C4000, + 0xE79A8000, 0xE798C000, 0xE7970000, + 0xE7954000, 0xE7938000, 0xE791C000, + 0xE7900000, 0xE78E4000, 0xE78C8000, + 0xE78AC000, 0xE7890000, 0xE7874000, + 0xE7858000, 0xE783C000, 0xE7820000, + 0xE7804000, 0xE77E8000, 0xE77CC000, + 0xE77B0000, 0xE7794000, 0xE7778000, + 0xE775C000, 0xE7740000, 0xE7724000, + 0xE7708000, 0xE76EC000, 0xE76D0000, + 0xE76B4000, 0xE7698000, 0xE767C000, + 0xE7660000, 0xE7644000, 0xE7628000, + 0xE760C000, 0xE75F0000, 0xE75D4000, + 0xE75B8000, 0xE759C000, 0xE7580000, + 0xE7564000, 0xE7548000, 0xE752C000, + 0xE7510000, 0xE74F4000, 0xE74D8000, + 0xE74BC000, 0xE74A0000, 0xE7484000, + 0xE7468000, 0xE744C000, 0xE7430000, + 0xE7414000, 0xE73F8000, 0xE73DC000, + 0xE73C0000, 0xE73A4000, 0xE7388000, + 0xE736C000, 0xE7350000, 0xE7334000, + 0xE7318000, 0xE72FC000, 0xE72E0000, + 0xE72C4000, 0xE72A8000, 0xE728C000, + 0xE7270000, 0xE7254000, 0xE7238000, + 0xE721C000, 0xE7200000, 0xE71E4000, + 0xE71C8000, 0xE71AC000, 0xE7190000, + 0xE7174000, 0xE7158000, 0xE713C000, + 0xE7120000, 0xE7104000, 0xE70E8000, + 0xE70CC000, 0xE70B0000, 0xE7094000, + 0xE7078000, 0xE705C000, 0xE7040000, + 0xE7024000, 0xE7008000, 0xE6FEC000, + 0xE6FD0000, 0xE6FB4000, 0xE6F98000, + 0xE6F7C000, 0xE6F60000, 0xE6F44000, + 0xE6F28000, 0xE6F0C000, 0xE6EF0000, + 0xE6ED4000, 0xE6EB8000, 0xE6E9C000, + 0xE6E80000, 0xE6E64000, 0xE6E48000, + 0xE6E2C000, 0xE6E10000, 0xE6DF4000, + 0xE6DD8000, 0xE6DBC000, 0xE6DA0000, + 0xE6D84000, 0xE6D68000, 0xE6D4C000, + 0xE6D30000, 0xE6D14000, 0xE6CF8000, + 0xE6CDC000, 0xE6CC0000, 0xE6CA4000, + 0xE6C88000, 0xE6C6C000, 0xE6C50000, + 0xE6C34000, 0xE6C18000, 0xE6BFC000, + 0xE6BE0000, 0xE6BC4000, 0xE6BA8000, + 0xE6B8C000, 0xE6B70000, 0xE6B54000, + 0xE6B38000, 0xE6B1C000, 0xE6B00000, + 0xE6AE4000, 0xE6AC8000, 0xE6AAC000, + 0xE6A90000, 0xE6A74000, 0xE6A58000, + 0xE6A3C000, 0xE6A20000, 0xE6A04000, + 0xE69E8000, 0xE69CC000, 0xE69B0000, + 0xE6994000, 0xE6978000, 0xE695C000, + 0xE6940000, 0xE6924000, 0xE6908000, + 0xE68EC000, 0xE68D0000, 0xE68B4000, + 0xE6898000, 0xE687C000, 0xE6860000, + 0xE6844000, 0xE6828000, 0xE680C000, + 0xE67F0000, 0xE67D4000, 0xE67B8000, + 0xE679C000, 0xE6780000, 0xE6764000, + 0xE6748000, 0xE672C000, 0xE6710000, + 0xE66F4000, 0xE66D8000, 0xE66BC000, + 0xE66A0000, 0xE6684000, 0xE6668000, + 0xE664C000, 0xE6630000, 0xE6614000, + 0xE65F8000, 0xE65DC000, 0xE65C0000, + 0xE65A4000, 0xE6588000, 0xE656C000, + 0xE6550000, 0xE6534000, 0xE6518000, + 0xE64FC000, 0xE64E0000, 0xE64C4000, + 0xE64A8000, 0xE648C000, 0xE6470000, + 0xE6454000, 0xE6438000, 0xE641C000, + 0xE6400000, 0xE63E4000, 0xE63C8000, + 0xE63AC000, 0xE6390000, 0xE6374000, + 0xE6358000, 0xE633C000, 0xE6320000, + 0xE6304000, 0xE62E8000, 0xE62CC000, + 0xE62B0000, 0xE6294000, 0xE6278000, + 0xE625C000, 0xE6240000, 0xE6224000, + 0xE6208000, 0xE61EC000, 0xE61D0000, + 0xE61B4000, 0xE6198000, 0xE617C000, + 0xE6160000, 0xE6144000, 0xE6128000, + 0xE610C000, 0xE60F0000, 0xE60D4000, + 0xE60B8000, 0xE609C000, 0xE6080000, + 0xE6064000, 0xE6048000, 0xE602C000, + 0xE6010000, 0xE5FF4000, 0xE5FD8000, + 0xE5FBC000, 0xE5FA0000, 0xE5F84000, + 0xE5F68000, 0xE5F4C000, 0xE5F30000, + 0xE5F14000, 0xE5EF8000, 0xE5EDC000, + 0xE5EC0000, 0xE5EA4000, 0xE5E88000, + 0xE5E6C000, 0xE5E50000, 0xE5E34000, + 0xE5E18000, 0xE5DFC000, 0xE5DE0000, + 0xE5DC4000, 0xE5DA8000, 0xE5D8C000, + 0xE5D70000, 0xE5D54000, 0xE5D38000, + 0xE5D1C000, 0xE5D00000, 0xE5CE4000, + 0xE5CC8000, 0xE5CAC000, 0xE5C90000, + 0xE5C74000, 0xE5C58000, 0xE5C3C000, + 0xE5C20000, 0xE5C04000, 0xE5BE8000, + 0xE5BCC000, 0xE5BB0000, 0xE5B94000, + 0xE5B78000, 0xE5B5C000, 0xE5B40000, + 0xE5B24000, 0xE5B08000, 0xE5AEC000, + 0xE5AD0000, 0xE5AB4000, 0xE5A98000, + 0xE5A7C000, 0xE5A60000, 0xE5A44000, + 0xE5A28000, 0xE5A0C000, 0xE59F0000, + 0xE59D4000, 0xE59B8000, 0xE599C000, + 0xE5980000, 0xE5964000, 0xE5948000, + 0xE592C000, 0xE5910000, 0xE58F4000, + 0xE58D8000, 0xE58BC000, 0xE58A0000, + 0xE5884000, 0xE5868000, 0xE584C000, + 0xE5830000, 0xE5814000, 0xE57F8000, + 0xE57DC000, 0xE57C0000, 0xE57A4000, + 0xE5788000, 0xE576C000, 0xE5750000, + 0xE5734000, 0xE5718000, 0xE56FC000, + 0xE56E0000, 0xE56C4000, 0xE56A8000, + 0xE568C000, 0xE5670000, 0xE5654000, + 0xE5638000, 0xE561C000, 0xE5600000, + 0xE55E4000, 0xE55C8000, 0xE55AC000, + 0xE5590000, 0xE5574000, 0xE5558000, + 0xE553C000, 0xE5520000, 0xE5504000, + 0xE54E8000, 0xE54CC000, 0xE54B0000, + 0xE5494000, 0xE5478000, 0xE545C000, + 0xE5440000, 0xE5424000, 0xE5408000, + 0xE53EC000, 0xE53D0000, 0xE53B4000, + 0xE5398000, 0xE537C000, 0xE5360000, + 0xE5344000, 0xE5328000, 0xE530C000, + 0xE52F0000, 0xE52D4000, 0xE52B8000, + 0xE529C000, 0xE5280000, 0xE5264000, + 0xE5248000, 0xE522C000, 0xE5210000, + 0xE51F4000, 0xE51D8000, 0xE51BC000, + 0xE51A0000, 0xE5184000, 0xE5168000, + 0xE514C000, 0xE5130000, 0xE5114000, + 0xE50F8000, 0xE50DC000, 0xE50C0000, + 0xE50A4000, 0xE5088000, 0xE506C000, + 0xE5050000, 0xE5034000, 0xE5018000, + 0xE4FFC000, 0xE4FE0000, 0xE4FC4000, + 0xE4FA8000, 0xE4F8C000, 0xE4F70000, + 0xE4F54000, 0xE4F38000, 0xE4F1C000, + 0xE4F00000, 0xE4EE4000, 0xE4EC8000, + 0xE4EAC000, 0xE4E90000, 0xE4E74000, + 0xE4E58000, 0xE4E3C000, 0xE4E20000, + 0xE4E04000, 0xE4DE8000, 0xE4DCC000, + 0xE4DB0000, 0xE4D94000, 0xE4D78000, + 0xE4D5C000, 0xE4D40000, 0xE4D24000, + 0xE4D08000, 0xE4CEC000, 0xE4CD0000, + 0xE4CB4000, 0xE4C98000, 0xE4C7C000, + 0xE4C60000, 0xE4C44000, 0xE4C28000, + 0xE4C0C000, 0xE4BF0000, 0xE4BD4000, + 0xE4BB8000, 0xE4B9C000, 0xE4B80000, + 0xE4B64000, 0xE4B48000, 0xE4B2C000, + 0xE4B10000, 0xE4AF4000, 0xE4AD8000, + 0xE4ABC000, 0xE4AA0000, 0xE4A84000, + 0xE4A68000, 0xE4A4C000, 0xE4A30000, + 0xE4A14000, 0xE49F8000, 0xE49DC000, + 0xE49C0000, 0xE49A4000, 0xE4988000, + 0xE496C000, 0xE4950000, 0xE4934000, + 0xE4918000, 0xE48FC000, 0xE48E0000, + 0xE48C4000, 0xE48A8000, 0xE488C000, + 0xE4870000, 0xE4854000, 0xE4838000, + 0xE481C000, 0xE4800000, 0xE47E4000, + 0xE47C8000, 0xE47AC000, 0xE4790000, + 0xE4774000, 0xE4758000, 0xE473C000, + 0xE4720000, 0xE4704000, 0xE46E8000, + 0xE46CC000, 0xE46B0000, 0xE4694000, + 0xE4678000, 0xE465C000, 0xE4640000, + 0xE4624000, 0xE4608000, 0xE45EC000, + 0xE45D0000, 0xE45B4000, 0xE4598000, + 0xE457C000, 0xE4560000, 0xE4544000, + 0xE4528000, 0xE450C000, 0xE44F0000, + 0xE44D4000, 0xE44B8000, 0xE449C000, + 0xE4480000, 0xE4464000, 0xE4448000, + 0xE442C000, 0xE4410000, 0xE43F4000, + 0xE43D8000, 0xE43BC000, 0xE43A0000, + 0xE4384000, 0xE4368000, 0xE434C000, + 0xE4330000, 0xE4314000, 0xE42F8000, + 0xE42DC000, 0xE42C0000, 0xE42A4000, + 0xE4288000, 0xE426C000, 0xE4250000, + 0xE4234000, 0xE4218000, 0xE41FC000, + 0xE41E0000, 0xE41C4000, 0xE41A8000, + 0xE418C000, 0xE4170000, 0xE4154000, + 0xE4138000, 0xE411C000, 0xE4100000, + 0xE40E4000, 0xE40C8000, 0xE40AC000, + 0xE4090000, 0xE4074000, 0xE4058000, + 0xE403C000, 0xE4020000, 0xE4004000, + 0xE3FE8000, 0xE3FCC000, 0xE3FB0000, + 0xE3F94000, 0xE3F78000, 0xE3F5C000, + 0xE3F40000, 0xE3F24000, 0xE3F08000, + 0xE3EEC000, 0xE3ED0000, 0xE3EB4000, + 0xE3E98000, 0xE3E7C000, 0xE3E60000, + 0xE3E44000, 0xE3E28000, 0xE3E0C000, + 0xE3DF0000, 0xE3DD4000, 0xE3DB8000, + 0xE3D9C000, 0xE3D80000, 0xE3D64000, + 0xE3D48000, 0xE3D2C000, 0xE3D10000, + 0xE3CF4000, 0xE3CD8000, 0xE3CBC000, + 0xE3CA0000, 0xE3C84000, 0xE3C68000, + 0xE3C4C000, 0xE3C30000, 0xE3C14000, + 0xE3BF8000, 0xE3BDC000, 0xE3BC0000, + 0xE3BA4000, 0xE3B88000, 0xE3B6C000, + 0xE3B50000, 0xE3B34000, 0xE3B18000, + 0xE3AFC000, 0xE3AE0000, 0xE3AC4000, + 0xE3AA8000, 0xE3A8C000, 0xE3A70000, + 0xE3A54000, 0xE3A38000, 0xE3A1C000, + 0xE3A00000, 0xE39E4000, 0xE39C8000, + 0xE39AC000, 0xE3990000, 0xE3974000, + 0xE3958000, 0xE393C000, 0xE3920000, + 0xE3904000, 0xE38E8000, 0xE38CC000, + 0xE38B0000, 0xE3894000, 0xE3878000, + 0xE385C000, 0xE3840000, 0xE3824000, + 0xE3808000, 0xE37EC000, 0xE37D0000, + 0xE37B4000, 0xE3798000, 0xE377C000, + 0xE3760000, 0xE3744000, 0xE3728000, + 0xE370C000, 0xE36F0000, 0xE36D4000, + 0xE36B8000, 0xE369C000, 0xE3680000, + 0xE3664000, 0xE3648000, 0xE362C000, + 0xE3610000, 0xE35F4000, 0xE35D8000, + 0xE35BC000, 0xE35A0000, 0xE3584000, + 0xE3568000, 0xE354C000, 0xE3530000, + 0xE3514000, 0xE34F8000, 0xE34DC000, + 0xE34C0000, 0xE34A4000, 0xE3488000, + 0xE346C000, 0xE3450000, 0xE3434000, + 0xE3418000, 0xE33FC000, 0xE33E0000, + 0xE33C4000, 0xE33A8000, 0xE338C000, + 0xE3370000, 0xE3354000, 0xE3338000, + 0xE331C000, 0xE3300000, 0xE32E4000, + 0xE32C8000, 0xE32AC000, 0xE3290000, + 0xE3274000, 0xE3258000, 0xE323C000, + 0xE3220000, 0xE3204000, 0xE31E8000, + 0xE31CC000, 0xE31B0000, 0xE3194000, + 0xE3178000, 0xE315C000, 0xE3140000, + 0xE3124000, 0xE3108000, 0xE30EC000, + 0xE30D0000, 0xE30B4000, 0xE3098000, + 0xE307C000, 0xE3060000, 0xE3044000, + 0xE3028000, 0xE300C000, 0xE2FF0000, + 0xE2FD4000, 0xE2FB8000, 0xE2F9C000, + 0xE2F80000, 0xE2F64000, 0xE2F48000, + 0xE2F2C000, 0xE2F10000, 0xE2EF4000, + 0xE2ED8000, 0xE2EBC000, 0xE2EA0000, + 0xE2E84000, 0xE2E68000, 0xE2E4C000, + 0xE2E30000, 0xE2E14000, 0xE2DF8000, + 0xE2DDC000, 0xE2DC0000, 0xE2DA4000, + 0xE2D88000, 0xE2D6C000, 0xE2D50000, + 0xE2D34000, 0xE2D18000, 0xE2CFC000, + 0xE2CE0000, 0xE2CC4000, 0xE2CA8000, + 0xE2C8C000, 0xE2C70000, 0xE2C54000, + 0xE2C38000, 0xE2C1C000, 0xE2C00000, + 0xE2BE4000, 0xE2BC8000, 0xE2BAC000, + 0xE2B90000, 0xE2B74000, 0xE2B58000, + 0xE2B3C000, 0xE2B20000, 0xE2B04000, + 0xE2AE8000, 0xE2ACC000, 0xE2AB0000, + 0xE2A94000, 0xE2A78000, 0xE2A5C000, + 0xE2A80000, 0xE2A66400, 0xE2A4C800, + 0xE2A32C00, 0xE2A19000, 0xE29FF400, + 0xE29E5800, 0xE29CBC00, 0xE29B2000, + 0xE2998400, 0xE297E800, 0xE2964C00, + 0xE294B000, 0xE2931400, 0xE2917800, + 0xE28FDC00, 0xE28E4000, 0xE28CA400, + 0xE28B0800, 0xE2896C00, 0xE287D000, + 0xE2863400, 0xE2849800, 0xE282FC00, + 0xE2816000, 0xE27FC400, 0xE27E2800, + 0xE27C8C00, 0xE27AF000, 0xE2795400, + 0xE277B800, 0xE2761C00, 0xE2748000, + 0xE272E400, 0xE2714800, 0xE26FAC00, + 0xE26E1000, 0xE26C7400, 0xE26AD800, + 0xE2693C00, 0xE267A000, 0xE2660400, + 0xE2646800, 0xE262CC00, 0xE2613000, + 0xE25F9400, 0xE25DF800, 0xE25C5C00, + 0xE25AC000, 0xE2592400, 0xE2578800, + 0xE255EC00, 0xE2545000, 0xE252B400, + 0xE2511800, 0xE24F7C00, 0xE24DE000, + 0xE24C4400, 0xE24AA800, 0xE2490C00, + 0xE2477000, 0xE245D400, 0xE2443800, + 0xE2429C00, 0xE2410000, 0xE23F6400, + 0xE23DC800, 0xE23C2C00, 0xE23A9000, + 0xE238F400, 0xE2375800, 0xE235BC00, + 0xE2342000, 0xE2328400, 0xE230E800, + 0xE22F4C00, 0xE22DB000, 0xE22C1400, + 0xE22A7800, 0xE228DC00, 0xE2274000, + 0xE225A400, 0xE2240800, 0xE2226C00, + 0xE220D000, 0xE21F3400, 0xE21D9800, + 0xE21BFC00, 0xE21A6000, 0xE218C400, + 0xE2172800, 0xE2158C00, 0xE213F000, + 0xE2125400, 0xE210B800, 0xE20F1C00, + 0xE20D8000, 0xE20BE400, 0xE20A4800, + 0xE208AC00, 0xE2071000, 0xE2057400, + 0xE203D800, 0xE2023C00, 0xE200A000, + 0xE1FF0400, 0xE1FD6800, 0xE1FBCC00, + 0xE1FA3000, 0xE1F89400, 0xE1F6F800, + 0xE1F55C00, 0xE1F3C000, 0xE1F22400, + 0xE1F08800, 0xE1EEEC00, 0xE1ED5000, + 0xE1EBB400, 0xE1EA1800, 0xE1E87C00, + 0xE1E6E000, 0xE1E54400, 0xE1E3A800, + 0xE1E20C00, 0xE1E07000, 0xE1DED400, + 0xE1DD3800, 0xE1DB9C00, 0xE1DA0000, + 0xE1D86400, 0xE1D6C800, 0xE1D52C00, + 0xE1D39000, 0xE1D1F400, 0xE1D05800, + 0xE1CEBC00, 0xE1CD2000, 0xE1CB8400, + 0xE1C9E800, 0xE1C84C00, 0xE1C6B000, + 0xE1C51400, 0xE1C37800, 0xE1C1DC00, + 0xE1C04000, 0xE1BEA400, 0xE1BD0800, + 0xE1BB6C00, 0xE1B9D000, 0xE1B83400, + 0xE1B69800, 0xE1B4FC00, 0xE1B36000, + 0xE1B1C400, 0xE1B02800, 0xE1AE8C00, + 0xE1ACF000, 0xE1AB5400, 0xE1A9B800, + 0xE1A81C00, 0xE1A68000, 0xE1A4E400, + 0xE1A34800, 0xE1A1AC00, 0xE1A01000, + 0xE19E7400, 0xE19CD800, 0xE19B3C00, + 0xE199A000, 0xE1980400, 0xE1966800, + 0xE194CC00, 0xE1933000, 0xE1919400, + 0xE18FF800, 0xE18E5C00, 0xE18CC000, + 0xE18B2400, 0xE1898800, 0xE187EC00, + 0xE1865000, 0xE184B400, 0xE1831800, + 0xE1817C00, 0xE17FE000, 0xE17E4400, + 0xE17CA800, 0xE17B0C00, 0xE1797000, + 0xE177D400, 0xE1763800, 0xE1749C00, + 0xE1730000, 0xE1716400, 0xE16FC800, + 0xE16E2C00, 0xE16C9000, 0xE16AF400, + 0xE1695800, 0xE167BC00, 0xE1662000, + 0xE1648400, 0xE162E800, 0xE1614C00, + 0xE15FB000, 0xE15E1400, 0xE15C7800, + 0xE15ADC00, 0xE1594000, 0xE157A400, + 0xE1560800, 0xE1546C00, 0xE152D000, + 0xE1513400, 0xE14F9800, 0xE14DFC00, + 0xE14C6000, 0xE14AC400, 0xE1492800, + 0xE1478C00, 0xE145F000, 0xE1445400, + 0xE142B800, 0xE1411C00, 0xE13F8000, + 0xE13DE400, 0xE13C4800, 0xE13AAC00, + 0xE1391000, 0xE1377400, 0xE135D800, + 0xE1343C00, 0xE132A000, 0xE1310400, + 0xE12F6800, 0xE12DCC00, 0xE12C3000, + 0xE12A9400, 0xE128F800, 0xE1275C00, + 0xE125C000, 0xE1242400, 0xE1228800, + 0xE120EC00, 0xE11F5000, 0xE11DB400, + 0xE11C1800, 0xE11A7C00, 0xE118E000, + 0xE1174400, 0xE115A800, 0xE1140C00, + 0xE1127000, 0xE110D400, 0xE10F3800, + 0xE10D9C00, 0xE10C0000, 0xE10A6400, + 0xE108C800, 0xE1072C00, 0xE1059000, + 0xE103F400, 0xE1025800, 0xE100BC00, + 0xE0FF2000, 0xE0FD8400, 0xE0FBE800, + 0xE0FA4C00, 0xE0F8B000, 0xE0F71400, + 0xE0F57800, 0xE0F3DC00, 0xE0F24000, + 0xE0F0A400, 0xE0EF0800, 0xE0ED6C00, + 0xE0EBD000, 0xE0EA3400, 0xE0E89800, + 0xE0E6FC00, 0xE0E56000, 0xE0E3C400, + 0xE0E22800, 0xE0E08C00, 0xE0DEF000, + 0xE0DD5400, 0xE0DBB800, 0xE0DA1C00, + 0xE0D88000, 0xE0D6E400, 0xE0D54800, + 0xE0D3AC00, 0xE0D21000, 0xE0D07400, + 0xE0CED800, 0xE0CD3C00, 0xE0CBA000, + 0xE0CA0400, 0xE0C86800, 0xE0C6CC00, + 0xE0C53000, 0xE0C39400, 0xE0C1F800, + 0xE0C05C00, 0xE0BEC000, 0xE0BD2400, + 0xE0BB8800, 0xE0B9EC00, 0xE0B85000, + 0xE0B6B400, 0xE0B51800, 0xE0B37C00, + 0xE0B1E000, 0xE0B04400, 0xE0AEA800, + 0xE0AD0C00, 0xE0AB7000, 0xE0A9D400, + 0xE0A83800, 0xE0A69C00, 0xE0A50000, + 0xE0A36400, 0xE0A1C800, 0xE0A02C00, + 0xE09E9000, 0xE09CF400, 0xE09B5800, + 0xE099BC00, 0xE0982000, 0xE0968400, + 0xE094E800, 0xE0934C00, 0xE091B000, + 0xE0901400, 0xE08E7800, 0xE08CDC00, + 0xE08B4000, 0xE089A400, 0xE0880800, + 0xE0866C00, 0xE084D000, 0xE0833400, + 0xE0819800, 0xE07FFC00, 0xE07E6000, + 0xE07CC400, 0xE07B2800, 0xE0798C00, + 0xE077F000, 0xE0765400, 0xE074B800, + 0xE0731C00, 0xE0718000, 0xE06FE400, + 0xE06E4800, 0xE06CAC00, 0xE06B1000, + 0xE0697400, 0xE067D800, 0xE0663C00, + 0xE064A000, 0xE0630400, 0xE0616800, + 0xE05FCC00, 0xE05E3000, 0xE05C9400, + 0xE05AF800, 0xE0595C00, 0xE057C000, + 0xE0562400, 0xE0548800, 0xE052EC00, + 0xE0515000, 0xE04FB400, 0xE04E1800, + 0xE04C7C00, 0xE04AE000, 0xE0494400, + 0xE047A800, 0xE0460C00, 0xE0447000, + 0xE042D400, 0xE0413800, 0xE03F9C00, + 0xE03E0000, 0xE03C6400, 0xE03AC800, + 0xE0392C00, 0xE0379000, 0xE035F400, + 0xE0345800, 0xE032BC00, 0xE0312000, + 0xE02F8400, 0xE02DE800, 0xE02C4C00, + 0xE02AB000, 0xE0291400, 0xE0277800, + 0xE025DC00, 0xE0244000, 0xE022A400, + 0xE0210800, 0xE01F6C00, 0xE01DD000, + 0xE01C3400, 0xE01A9800, 0xE018FC00, + 0xE0176000, 0xE015C400, 0xE0142800, + 0xE0128C00, 0xE010F000, 0xE00F5400, + 0xE00DB800, 0xE00C1C00, 0xE00A8000, + 0xE008E400, 0xE0074800, 0xE005AC00, + 0xE0041000, 0xE0027400, 0xE000D800, + 0xDFFF3C00, 0xDFFDA000, 0xDFFC0400, + 0xDFFA6800, 0xDFF8CC00, 0xDFF73000, + 0xDFF59400, 0xDFF3F800, 0xDFF25C00, + 0xDFF0C000, 0xDFEF2400, 0xDFED8800, + 0xDFEBEC00, 0xDFEA5000, 0xDFE8B400, + 0xDFE71800, 0xDFE57C00, 0xDFE3E000, + 0xDFE24400, 0xDFE0A800, 0xDFDF0C00, + 0xDFDD7000, 0xDFDBD400, 0xDFDA3800, + 0xDFD89C00, 0xDFD70000, 0xDFD56400, + 0xDFD3C800, 0xDFD22C00, 0xDFD09000, + 0xDFCEF400, 0xDFCD5800, 0xDFCBBC00, + 0xDFCA2000, 0xDFC88400, 0xDFC6E800, + 0xDFC54C00, 0xDFC3B000, 0xDFC21400, + 0xDFC07800, 0xDFBEDC00, 0xDFBD4000, + 0xDFBBA400, 0xDFBA0800, 0xDFB86C00, + 0xDFB6D000, 0xDFB53400, 0xDFB39800, + 0xDFB1FC00, 0xDFB06000, 0xDFAEC400, + 0xDFAD2800, 0xDFAB8C00, 0xDFA9F000, + 0xDFA85400, 0xDFA6B800, 0xDFA51C00, + 0xDFA38000, 0xDFA1E400, 0xDFA04800, + 0xDF9EAC00, 0xDF9D1000, 0xDF9B7400, + 0xDF99D800, 0xDF983C00, 0xDF96A000, + 0xDF950400, 0xDF936800, 0xDF91CC00, + 0xDF903000, 0xDF8E9400, 0xDF8CF800, + 0xDF8B5C00, 0xDF89C000, 0xDF882400, + 0xDF868800, 0xDF84EC00, 0xDF835000, + 0xDF81B400, 0xDF801800, 0xDF7E7C00, + 0xDF7CE000, 0xDF7B4400, 0xDF79A800, + 0xDF780C00, 0xDF767000, 0xDF74D400, + 0xDF733800, 0xDF719C00, 0xDF700000, + 0xDF6E6400, 0xDF6CC800, 0xDF6B2C00, + 0xDF699000, 0xDF67F400, 0xDF665800, + 0xDF64BC00, 0xDF632000, 0xDF618400, + 0xDF5FE800, 0xDF5E4C00, 0xDF5CB000, + 0xDF5B1400, 0xDF597800, 0xDF57DC00, + 0xDF564000, 0xDF54A400, 0xDF530800, + 0xDF516C00, 0xDF4FD000, 0xDF4E3400, + 0xDF4C9800, 0xDF4AFC00, 0xDF496000, + 0xDF47C400, 0xDF462800, 0xDF448C00, + 0xDF42F000, 0xDF415400, 0xDF3FB800, + 0xDF3E1C00, 0xDF3C8000, 0xDF3AE400, + 0xDF394800, 0xDF37AC00, 0xDF361000, + 0xDF347400, 0xDF32D800, 0xDF313C00, + 0xDF2FA000, 0xDF2E0400, 0xDF2C6800, + 0xDF2ACC00, 0xDF293000, 0xDF279400, + 0xDF25F800, 0xDF245C00, 0xDF22C000, + 0xDF212400, 0xDF1F8800, 0xDF1DEC00, + 0xDF1C5000, 0xDF1AB400, 0xDF191800, + 0xDF177C00, 0xDF15E000, 0xDF144400, + 0xDF12A800, 0xDF110C00, 0xDF0F7000, + 0xDF0DD400, 0xDF0C3800, 0xDF0A9C00, + 0xDF090000, 0xDF076400, 0xDF05C800, + 0xDF042C00, 0xDF029000, 0xDF00F400, + 0xDEFF5800, 0xDEFDBC00, 0xDEFC2000, + 0xDEFA8400, 0xDEF8E800, 0xDEF74C00, + 0xDEF5B000, 0xDEF41400, 0xDEF27800, + 0xDEF0DC00, 0xDEEF4000, 0xDEEDA400, + 0xDEEC0800, 0xDEEA6C00, 0xDEE8D000, + 0xDEE73400, 0xDEE59800, 0xDEE3FC00, + 0xDEE26000, 0xDEE0C400, 0xDEDF2800, + 0xDEDD8C00, 0xDEDBF000, 0xDEDA5400, + 0xDED8B800, 0xDED71C00, 0xDED58000, + 0xDED3E400, 0xDED24800, 0xDED0AC00, + 0xDECF1000, 0xDECD7400, 0xDECBD800, + 0xDECA3C00, 0xDEC8A000, 0xDEC70400, + 0xDEC56800, 0xDEC3CC00, 0xDEC23000, + 0xDEC09400, 0xDEBEF800, 0xDEBD5C00, + 0xDEBBC000, 0xDEBA2400, 0xDEB88800, + 0xDEB6EC00, 0xDEB55000, 0xDEB3B400, + 0xDEB21800, 0xDEB07C00, 0xDEAEE000, + 0xDEAD4400, 0xDEABA800, 0xDEAA0C00, + 0xDEA87000, 0xDEA6D400, 0xDEA53800, + 0xDEA39C00, 0xDEA20000, 0xDEA06400, + 0xDE9EC800, 0xDE9D2C00, 0xDE9B9000, + 0xDE99F400, 0xDE985800, 0xDE96BC00, + 0xDE952000, 0xDE938400, 0xDE91E800, + 0xDE904C00, 0xDE8EB000, 0xDE8D1400, + 0xDE8B7800, 0xDE89DC00, 0xDE884000, + 0xDE86A400, 0xDE850800, 0xDE836C00, + 0xDE81D000, 0xDE803400, 0xDE7E9800, + 0xDE7CFC00, 0xDE7B6000, 0xDE79C400, + 0xDE782800, 0xDE768C00, 0xDE74F000, + 0xDE735400, 0xDE71B800, 0xDE701C00, + 0xDE6E8000, 0xDE6CE400, 0xDE6B4800, + 0xDE69AC00, 0xDE681000, 0xDE667400, + 0xDE64D800, 0xDE633C00, 0xDE61A000, + 0xDE600400, 0xDE5E6800, 0xDE5CCC00, + 0xDE5B3000, 0xDE599400, 0xDE57F800, + 0xDE565C00, 0xDE54C000, 0xDE532400, + 0xDE518800, 0xDE4FEC00, 0xDE4E5000, + 0xDE4CB400, 0xDE4B1800, 0xDE497C00, + 0xDE47E000, 0xDE464400, 0xDE44A800, + 0xDE430C00, 0xDE417000, 0xDE3FD400, + 0xDE3E3800, 0xDE3C9C00, 0xDE3B0000, + 0xDE396400, 0xDE37C800, 0xDE362C00, + 0xDE349000, 0xDE32F400, 0xDE315800, + 0xDE2FBC00, 0xDE2E2000, 0xDE2C8400, + 0xDE2AE800, 0xDE294C00, 0xDE27B000, + 0xDE261400, 0xDE247800, 0xDE22DC00, + 0xDE214000, 0xDE1FA400, 0xDE1E0800, + 0xDE1C6C00, 0xDE1AD000, 0xDE193400, + 0xDE179800, 0xDE15FC00, 0xDE146000, + 0xDE12C400, 0xDE112800, 0xDE0F8C00, + 0xDE0DF000, 0xDE0C5400, 0xDE0AB800, + 0xDE091C00, 0xDE078000, 0xDE05E400, + 0xDE044800, 0xDE02AC00, 0xDE011000, + 0xDDFF7400, 0xDDFDD800, 0xDDFC3C00, + 0xDDFAA000, 0xDDF90400, 0xDDF76800, + 0xDDF5CC00, 0xDDF43000, 0xDDF29400, + 0xDDF0F800, 0xDDEF5C00, 0xDDEDC000, + 0xDDEC2400, 0xDDEA8800, 0xDDE8EC00, + 0xDDE75000, 0xDDE5B400, 0xDDE41800, + 0xDDE27C00, 0xDDE0E000, 0xDDDF4400, + 0xDDDDA800, 0xDDDC0C00, 0xDDDA7000, + 0xDDD8D400, 0xDDD73800, 0xDDD59C00, + 0xDDD40000, 0xDDD26400, 0xDDD0C800, + 0xDDCF2C00, 0xDDCD9000, 0xDDCBF400, + 0xDDCA5800, 0xDDC8BC00, 0xDDC72000, + 0xDDC58400, 0xDDC3E800, 0xDDC24C00, + 0xDDC0B000, 0xDDBF1400, 0xDDBD7800, + 0xDDBBDC00, 0xDDBA4000, 0xDDB8A400, + 0xDDB70800, 0xDDB56C00, 0xDDB3D000, + 0xDDB23400, 0xDDB09800, 0xDDAEFC00, + 0xDDAD6000, 0xDDABC400, 0xDDAA2800, + 0xDDA88C00, 0xDDA6F000, 0xDDA55400, + 0xDDA3B800, 0xDDA21C00, 0xDDA08000, + 0xDD9EE400, 0xDD9D4800, 0xDD9BAC00, + 0xDD9A1000, 0xDD987400, 0xDD96D800, + 0xDD953C00, 0xDD93A000, 0xDD920400, + 0xDD906800, 0xDD8ECC00, 0xDD8D3000, + 0xDD8B9400, 0xDD89F800, 0xDD885C00, + 0xDD86C000, 0xDD852400, 0xDD838800, + 0xDD81EC00, 0xDD805000, 0xDD7EB400, + 0xDD7D1800, 0xDD7B7C00, 0xDD79E000, + 0xDD784400, 0xDD76A800, 0xDD750C00, + 0xDD737000, 0xDD71D400, 0xDD703800, + 0xDD6E9C00, 0xDD6D0000, 0xDD6B6400, + 0xDD69C800, 0xDD682C00, 0xDD669000, + 0xDD64F400, 0xDD635800, 0xDD61BC00, + 0xDD602000, 0xDD5E8400, 0xDD5CE800, + 0xDD5B4C00, 0xDD59B000, 0xDD581400, + 0xDD567800, 0xDD54DC00, 0xDD534000, + 0xDD51A400, 0xDD500800, 0xDD4E6C00, + 0xDD4CD000, 0xDD4B3400, 0xDD499800, + 0xDD47FC00, 0xDD466000, 0xDD44C400, + 0xDD432800, 0xDD418C00, 0xDD3FF000, + 0xDD3E5400, 0xDD3CB800, 0xDD3B1C00, + 0xDD398000, 0xDD37E400, 0xDD364800, + 0xDD34AC00, 0xDD331000, 0xDD317400, + 0xDD2FD800, 0xDD2E3C00, 0xDD2CA000, + 0xDD2B0400, 0xDD296800, 0xDD27CC00, + 0xDD263000, 0xDD249400, 0xDD22F800, + 0xDD215C00, 0xDD1FC000, 0xDD1E2400, + 0xDD1C8800, 0xDD1AEC00, 0xDD195000, + 0xDD17B400, 0xDD161800, 0xDD147C00, + 0xDD12E000, 0xDD114400, 0xDD0FA800, + 0xDD0E0C00, 0xDD0C7000, 0xDD0AD400, + 0xDD093800, 0xDD079C00, 0xDD060000, + 0xDD046400, 0xDD02C800, 0xDD012C00, + 0xDCFF9000, 0xDCFDF400, 0xDCFC5800, + 0xDCFABC00, 0xDCF92000, 0xDCF78400, + 0xDCF5E800, 0xDCF44C00, 0xDCF2B000, + 0xDCF11400, 0xDCEF7800, 0xDCEDDC00, + 0xDCEC4000, 0xDCEAA400, 0xDCE90800, + 0xDCE76C00, 0xDCE5D000, 0xDCE43400, + 0xDCE29800, 0xDCE0FC00, 0xDCDF6000, + 0xDCDDC400, 0xDCDC2800, 0xDCDA8C00, + 0xDCD8F000, 0xDCD75400, 0xDCD5B800, + 0xDCD41C00, 0xDCD28000, 0xDCD0E400, + 0xDCCF4800, 0xDCCDAC00, 0xDCCC1000, + 0xDCCA7400, 0xDCC8D800, 0xDCC73C00, + 0xDCC5A000, 0xDCC40400, 0xDCC26800, + 0xDCC0CC00, 0xDCBF3000, 0xDCBD9400, + 0xDCBBF800, 0xDCBA5C00, 0xDCB8C000, + 0xDCB72400, 0xDCB58800, 0xDCB3EC00, + 0xDCB25000, 0xDCB0B400, 0xDCAF1800, + 0xDCAD7C00, 0xDCABE000, 0xDCAA4400, + 0xDCA8A800, 0xDCA70C00, 0xDCA57000, + 0xDCA3D400, 0xDCA23800, 0xDCA09C00, + 0xDC9F0000, 0xDC9D6400, 0xDC9BC800, + 0xDC9A2C00, 0xDC989000, 0xDC96F400, + 0xDC955800, 0xDC93BC00, 0xDC922000, + 0xDC908400, 0xDC8EE800, 0xDC8D4C00, + 0xDC8BB000, 0xDC8A1400, 0xDC887800, + 0xDC86DC00, 0xDC854000, 0xDC83A400, + 0xDC820800, 0xDC806C00, 0xDC7ED000, + 0xDC7D3400, 0xDC7B9800, 0xDC79FC00, + 0xDC786000, 0xDC76C400, 0xDC752800, + 0xDC738C00, 0xDC71F000, 0xDC705400, + 0xDC6EB800, 0xDC6D1C00, 0xDC6B8000, + 0xDC69E400, 0xDC684800, 0xDC66AC00, + 0xDC651000, 0xDC637400, 0xDC61D800, + 0xDC603C00, 0xDC5EA000, 0xDC5D0400, + 0xDC5B6800, 0xDC59CC00, 0xDC583000, + 0xDC569400, 0xDC54F800, 0xDC535C00, + 0xDC51C000, 0xDC502400, 0xDC4E8800, + 0xDC4CEC00, 0xDC4B5000, 0xDC49B400, + 0xDC481800, 0xDC467C00, 0xDC44E000, + 0xDC434400, 0xDC41A800, 0xDC400C00, + 0xDC3E7000, 0xDC3CD400, 0xDC3B3800, + 0xDC399C00, 0xDC380000, 0xDC366400, + 0xDC34C800, 0xDC332C00, 0xDC319000, + 0xDC2FF400, 0xDC2E5800, 0xDC2CBC00, + 0xDC2B2000, 0xDC298400, 0xDC27E800, + 0xDC264C00, 0xDC24B000, 0xDC231400, + 0xDC217800, 0xDC1FDC00, 0xDC1E4000, + 0xDC1CA400, 0xDC1B0800, 0xDC196C00, + 0xDC17D000, 0xDC163400, 0xDC149800, + 0xDC12FC00, 0xDC116000, 0xDC0FC400, + 0xDC0E2800, 0xDC0C8C00, 0xDC0AF000, + 0xDC095400, 0xDC07B800, 0xDC061C00, + 0xDC048000, 0xDC02E400, 0xDC014800, + 0xDBFFAC00, 0xDBFE1000, 0xDBFC7400, + 0xDBFAD800, 0xDBF93C00, 0xDBF7A000, + 0xDBF60400, 0xDBF46800, 0xDBF2CC00, + 0xDBF13000, 0xDBEF9400, 0xDBEDF800, + 0xDBEC5C00, 0xDBEAC000, 0xDBE92400, + 0xDBE78800, 0xDBE5EC00, 0xDBE45000, + 0xDBE2B400, 0xDBE11800, 0xDBDF7C00, + 0xDBDDE000, 0xDBDC4400, 0xDBDAA800, + 0xDBD90C00, 0xDBD77000, 0xDBD5D400, + 0xDBD43800, 0xDBD29C00, 0xDBD10000, + 0xDBCF6400, 0xDBCDC800, 0xDBCC2C00, + 0xDBCA9000, 0xDBC8F400, 0xDBC75800, + 0xDBC5BC00, 0xDBC42000, 0xDBC28400, + 0xDBC0E800, 0xDBBF4C00, 0xDBBDB000, + 0xDBBC1400, 0xDBBA7800, 0xDBB8DC00, + 0xDBB74000, 0xDBB5A400, 0xDBB40800, + 0xDBB26C00, 0xDBB0D000, 0xDBAF3400, + 0xDBAD9800, 0xDBABFC00, 0xDBAA6000, + 0xDBA8C400, 0xDBA72800, 0xDBA58C00, + 0xDBA3F000, 0xDBA25400, 0xDBA0B800, + 0xDB9F1C00, 0xDB9D8000, 0xDB9BE400, + 0xDB9A4800, 0xDB98AC00, 0xDB971000, + 0xDB957400, 0xDB93D800, 0xDB923C00, + 0xDB90A000, 0xDB8F0400, 0xDB8D6800, + 0xDB8BCC00, 0xDB8A3000, 0xDB889400, + 0xDB86F800, 0xDB855C00, 0xDB83C000, + 0xDB822400, 0xDB808800, 0xDB7EEC00, + 0xDB7D5000, 0xDB7BB400, 0xDB7A1800, + 0xDB787C00, 0xDB76E000, 0xDB754400, + 0xDB73A800, 0xDB720C00, 0xDB707000, + 0xDB6ED400, 0xDB6D3800, 0xDB6B9C00, + 0xDB6A0000, 0xDB686400, 0xDB66C800, + 0xDB652C00, 0xDB639000, 0xDB61F400, + 0xDB605800, 0xDB5EBC00, 0xDB5D2000, + 0xDB5B8400, 0xDB59E800, 0xDB584C00, + 0xDB56B000, 0xDB551400, 0xDB537800, + 0xDB51DC00, 0xDB504000, 0xDB4EA400, + 0xDB4D0800, 0xDB4B6C00, 0xDB49D000, + 0xDB483400, 0xDB469800, 0xDB44FC00, + 0xDB436000, 0xDB41C400, 0xDB402800, + 0xDB3E8C00, 0xDB3CF000, 0xDB3B5400, + 0xDB39B800, 0xDB381C00, 0xDB368000, + 0xDB34E400, 0xDB334800, 0xDB31AC00, + 0xDB301000, 0xDB2E7400, 0xDB2CD800, + 0xDB2B3C00, 0xDB29A000, 0xDB280400, + 0xDB266800, 0xDB24CC00, 0xDB233000, + 0xDB219400, 0xDB1FF800, 0xDB1E5C00, + 0xDB1CC000, 0xDB1B2400, 0xDB198800, + 0xDB17EC00, 0xDB165000, 0xDB14B400, + 0xDB131800, 0xDB117C00, 0xDB0FE000, + 0xDB0E4400, 0xDB0CA800, 0xDB0B0C00, + 0xDB097000, 0xDB07D400, 0xDB063800, + 0xDB049C00, 0xDB030000, 0xDB016400, + 0xDAFFC800, 0xDAFE2C00, 0xDAFC9000, + 0xDAFAF400, 0xDAF95800, 0xDAF7BC00, + 0xDAF62000, 0xDAF48400, 0xDAF2E800, + 0xDAF14C00, 0xDAEFB000, 0xDAEE1400, + 0xDAEC7800, 0xDAEADC00, 0xDAE94000, + 0xDAE7A400, 0xDAE60800, 0xDAE46C00, + 0xDAE2D000, 0xDAE13400, 0xDADF9800, + 0xDADDFC00, 0xDADC6000, 0xDADAC400, + 0xDAD92800, 0xDAD78C00, 0xDAD5F000, + 0xDAD45400, 0xDAD2B800, 0xDAD11C00, + 0xDACF8000, 0xDACDE400, 0xDACC4800, + 0xDACAAC00, 0xDAC91000, 0xDAC77400, + 0xDAC5D800, 0xDAC43C00, 0xDAC2A000, + 0xDAC10400, 0xDABF6800, 0xDABDCC00, + 0xDABC3000, 0xDABA9400, 0xDAB8F800, + 0xDAB75C00, 0xDAB5C000, 0xDAB42400, + 0xDAB28800, 0xDAB0EC00, 0xDAAF5000, + 0xDAADB400, 0xDAAC1800, 0xDAAA7C00, + 0xDAA8E000, 0xDAA74400, 0xDAA5A800, + 0xDAA40C00, 0xDAA27000, 0xDAA0D400, + 0xDA9F3800, 0xDA9D9C00, 0xDA9C0000, + 0xDA9A6400, 0xDA98C800, 0xDA972C00, + 0xDA959000, 0xDA93F400, 0xDA925800, + 0xDA90BC00, 0xDA8F2000, 0xDA8D8400, + 0xDA8BE800, 0xDA8A4C00, 0xDA88B000, + 0xDA871400, 0xDA857800, 0xDA83DC00, + 0xDA824000, 0xDA80A400, 0xDA7F0800, + 0xDA7D6C00, 0xDA7BD000, 0xDA7A3400, + 0xDA789800, 0xDA76FC00, 0xDA756000, + 0xDA73C400, 0xDA722800, 0xDA708C00, + 0xDA6EF000, 0xDA6D5400, 0xDA6BB800, + 0xDA6A1C00, 0xDA688000, 0xDA66E400, + 0xDA654800, 0xDA63AC00, 0xDA621000, + 0xDA607400, 0xDA5ED800, 0xDA5D3C00, + 0xDA5BA000, 0xDA5A0400, 0xDA586800, + 0xDA56CC00, 0xDA553000, 0xDA539400, + 0xDA51F800, 0xDA505C00, 0xDA4EC000, + 0xDA4D2400, 0xDA4B8800, 0xDA49EC00, + 0xDA485000, 0xDA46B400, 0xDA451800, + 0xDA437C00, 0xDA41E000, 0xDA404400, + 0xDA3EA800, 0xDA3D0C00, 0xDA3B7000, + 0xDA39D400, 0xDA383800, 0xDA369C00, + 0xDA350000, 0xDA336400, 0xDA31C800, + 0xDA302C00, 0xDA2E9000, 0xDA2CF400, + 0xDA2B5800, 0xDA29BC00, 0xDA282000, + 0xDA268400, 0xDA24E800, 0xDA234C00, + 0xDA21B000, 0xDA201400, 0xDA1E7800, + 0xDA1CDC00, 0xDA1B4000, 0xDA19A400, + 0xDA180800, 0xDA166C00, 0xDA14D000, + 0xDA133400, 0xDA119800, 0xDA0FFC00, + 0xDA0E6000, 0xDA0CC400, 0xDA0B2800, + 0xDA098C00, 0xDA07F000, 0xDA065400, + 0xDA04B800, 0xDA031C00, 0xDA018000, + 0xD9FFE400, 0xD9FE4800, 0xD9FCAC00, + 0xD9FB1000, 0xD9F97400, 0xD9F7D800, + 0xD9F63C00, 0xD9F4A000, 0xD9F30400, + 0xD9F16800, 0xD9EFCC00, 0xD9EE3000, + 0xD9EC9400, 0xD9EAF800, 0xD9E95C00, + 0xD9E7C000, 0xD9E62400, 0xD9E48800, + 0xD9E2EC00, 0xD9E15000, 0xD9DFB400, + 0xD9DE1800, 0xD9DC7C00, 0xD9DAE000, + 0xD9D94400, 0xD9D7A800, 0xD9D60C00, + 0xD9D47000, 0xD9D2D400, 0xD9D13800, + 0xD9CF9C00, 0xD9CE0000, 0xD9CC6400, + 0xD9CAC800, 0xD9C92C00, 0xD9C79000, + 0xD9C5F400, 0xD9C45800, 0xD9C2BC00, + 0xD9C12000, 0xD9BF8400, 0xD9BDE800, + 0xD9BC4C00, 0xD9BAB000, 0xD9B91400, + 0xD9B77800, 0xD9B5DC00, 0xD9B44000, + 0xD9B2A400, 0xD9B10800, 0xD9AF6C00, + 0xD9ADD000, 0xD9AC3400, 0xD9AA9800, + 0xD9A8FC00, 0xD9A76000, 0xD9A5C400, + 0xD9A42800, 0xD9A28C00, 0xD9A0F000, + 0xD99F5400, 0xD99DB800, 0xD99C1C00, + 0xD99A8000, 0xD998E400, 0xD9974800, + 0xD995AC00, 0xD9941000, 0xD9927400, + 0xD990D800, 0xD98F3C00, 0xD98DA000, + 0xD98C0400, 0xD98A6800, 0xD988CC00, + 0xD9873000, 0xD9859400, 0xD983F800, + 0xD9825C00, 0xD980C000, 0xD97F2400, + 0xD97D8800, 0xD97BEC00, 0xD97A5000, + 0xD978B400, 0xD9771800, 0xD9757C00, + 0xD973E000, 0xD9724400, 0xD970A800, + 0xD96F0C00, 0xD96D7000, 0xD96BD400, + 0xD96A3800, 0xD9689C00, 0xD9670000, + 0xD9656400, 0xD963C800, 0xD9622C00, + 0xD9609000, 0xD95EF400, 0xD95D5800, + 0xD95BBC00, 0xD95A2000, 0xD9588400, + 0xD956E800, 0xD9554C00, 0xD953B000, + 0xD9521400, 0xD9507800, 0xD94EDC00, + 0xD94D4000, 0xD94BA400, 0xD94A0800, + 0xD9486C00, 0xD946D000, 0xD9453400, + 0xD9439800, 0xD941FC00, 0xD9406000, + 0xD93EC400, 0xD93D2800, 0xD93B8C00, + 0xD939F000, 0xD9385400, 0xD936B800, + 0xD9351C00, 0xD9338000, 0xD931E400, + 0xD9304800, 0xD92EAC00, 0xD92D1000, + 0xD92B7400, 0xD929D800, 0xD9283C00, + 0xD926A000, 0xD9250400, 0xD9236800, + 0xD921CC00, 0xD9203000, 0xD91E9400, + 0xD91CF800, 0xD91B5C00, 0xD919C000, + 0xD9182400, 0xD9168800, 0xD914EC00, + 0xD9135000, 0xD911B400, 0xD9101800, + 0xD90E7C00, 0xD90CE000, 0xD90B4400, + 0xD909A800, 0xD9080C00, 0xD9067000, + 0xD904D400, 0xD9033800, 0xD9019C00, + 0xD9000000, 0xD8FE6400, 0xD8FCC800, + 0xD8FB2C00, 0xD8F99000, 0xD8F7F400, + 0xD8F65800, 0xD8F4BC00, 0xD8F32000, + 0xD8F18400, 0xD8EFE800, 0xD8EE4C00, + 0xD8ECB000, 0xD8EB1400, 0xD8E97800, + 0xD8E7DC00, 0xD8E64000, 0xD8E4A400, + 0xD8E30800, 0xD8E16C00, 0xD8DFD000, + 0xD8DE3400, 0xD8DC9800, 0xD8DAFC00, + 0xD8D96000, 0xD8D7C400, 0xD8D62800, + 0xD8D48C00, 0xD8D2F000, 0xD8D15400, + 0xD8CFB800, 0xD8CE1C00, 0xD8CC8000, + 0xD8CAE400, 0xD8C94800, 0xD8C7AC00, + 0xD8C61000, 0xD8C47400, 0xD8C2D800, + 0xD8C13C00, 0xD8BFA000, 0xD8BE0400, + 0xD8BC6800, 0xD8BACC00, 0xD8B93000, + 0xD8B79400, 0xD8B5F800, 0xD8B45C00, + 0xD8B2C000, 0xD8B12400, 0xD8AF8800, + 0xD8ADEC00, 0xD8AC5000, 0xD8AAB400, + 0xD8A91800, 0xD8A77C00, 0xD8A5E000, + 0xD8A44400, 0xD8A2A800, 0xD8A10C00, + 0xD89F7000, 0xD89DD400, 0xD89C3800, + 0xD89A9C00, 0xD8990000, 0xD8976400, + 0xD895C800, 0xD8942C00, 0xD8929000, + 0xD890F400, 0xD88F5800, 0xD88DBC00, + 0xD88C2000, 0xD88A8400, 0xD888E800, + 0xD8874C00, 0xD885B000, 0xD8841400, + 0xD8827800, 0xD880DC00, 0xD87F4000, + 0xD87DA400, 0xD87C0800, 0xD87A6C00, + 0xD878D000, 0xD8773400, 0xD8759800, + 0xD873FC00, 0xD8726000, 0xD870C400, + 0xD86F2800, 0xD86D8C00, 0xD86BF000, + 0xD86A5400, 0xD868B800, 0xD8671C00, + 0xD8658000, 0xD863E400, 0xD8624800, + 0xD860AC00, 0xD85F1000, 0xD85D7400, + 0xD85BD800, 0xD85A3C00, 0xD858A000, + 0xD8570400, 0xD8556800, 0xD853CC00, + 0xD8523000, 0xD8509400, 0xD84EF800, + 0xD84D5C00, 0xD84BC000, 0xD84A2400, + 0xD8488800, 0xD846EC00, 0xD8455000, + 0xD843B400, 0xD8421800, 0xD8407C00, + 0xD83EE000, 0xD83D4400, 0xD83BA800, + 0xD83A0C00, 0xD8387000, 0xD836D400, + 0xD8353800, 0xD8339C00, 0xD8320000, + 0xD8306400, 0xD82EC800, 0xD82D2C00, + 0xD82B9000, 0xD829F400, 0xD8285800, + 0xD826BC00, 0xD8252000, 0xD8238400, + 0xD821E800, 0xD8204C00, 0xD81EB000, + 0xD81D1400, 0xD81B7800, 0xD819DC00, + 0xD8184000, 0xD816A400, 0xD8150800, + 0xD8136C00, 0xD811D000, 0xD8103400, + 0xD80E9800, 0xD80CFC00, 0xD80B6000, + 0xD809C400, 0xD8082800, 0xD8068C00, + 0xD804F000, 0xD8035400, 0xD801B800, + 0xD8001C00, 0xD7FE8000, 0xD7FCE400, + 0xD7FB4800, 0xD7F9AC00, 0xD7F81000, + 0xD7F67400, 0xD7F4D800, 0xD7F33C00, + 0xD7F1A000, 0xD7F00400, 0xD7EE6800, + 0xD7ECCC00, 0xD7EB3000, 0xD7E99400, + 0xD7E7F800, 0xD7E65C00, 0xD7E4C000, + 0xD7E32400, 0xD7E18800, 0xD7DFEC00, + 0xD7DE5000, 0xD7DCB400, 0xD7DB1800, + 0xD7D97C00, 0xD7D7E000, 0xD7D64400, + 0xD7D4A800, 0xD7D30C00, 0xD7D17000, + 0xD7CFD400, 0xD7CE3800, 0xD7CC9C00, + 0xD7CB0000, 0xD7C96400, 0xD7C7C800, + 0xD7C62C00, 0xD7C49000, 0xD7C2F400, + 0xD7C15800, 0xD7BFBC00, 0xD7BE2000, + 0xD7BC8400, 0xD7BAE800, 0xD7B94C00, + 0xD7B7B000, 0xD7B61400, 0xD7B47800, + 0xD7B2DC00, 0xD7B14000, 0xD7AFA400, + 0xD7AE0800, 0xD7AC6C00, 0xD7AAD000, + 0xD7A93400, 0xD7A79800, 0xD7A5FC00, + 0xD7A46000, 0xD7A2C400, 0xD7A12800, + 0xD79F8C00, 0xD79DF000, 0xD79C5400, + 0xD79AB800, 0xD7991C00, 0xD7978000, + 0xD795E400, 0xD7944800, 0xD792AC00, + 0xD7911000, 0xD78F7400, 0xD78DD800, + 0xD78C3C00, 0xD78AA000, 0xD7890400, + 0xD7876800, 0xD785CC00, 0xD7843000, + 0xD7829400, 0xD780F800, 0xD77F5C00, + 0xD77DC000, 0xD77C2400, 0xD77A8800, + 0xD778EC00, 0xD7775000, 0xD775B400, + 0xD7741800, 0xD7727C00, 0xD770E000, + 0xD76F4400, 0xD76DA800, 0xD76C0C00, + 0xD76A7000, 0xD768D400, 0xD7673800, + 0xD7659C00, 0xD7640000, 0xD7626400, + 0xD760C800, 0xD75F2C00, 0xD75D9000, + 0xD75BF400, 0xD75A5800, 0xD758BC00, + 0xD7572000, 0xD7558400, 0xD753E800, + 0xD7524C00, 0xD750B000, 0xD74F1400, + 0xD74D7800, 0xD74BDC00, 0xD74A4000, + 0xD748A400, 0xD7470800, 0xD7456C00, + 0xD743D000, 0xD7423400, 0xD7409800, + 0xD73EFC00, 0xD73D6000, 0xD73BC400, + 0xD73A2800, 0xD7388C00, 0xD736F000, + 0xD7355400, 0xD733B800, 0xD7321C00, + 0xD7308000, 0xD72EE400, 0xD72D4800, + 0xD72BAC00, 0xD72A1000, 0xD7287400, + 0xD726D800, 0xD7253C00, 0xD723A000, + 0xD7220400, 0xD7206800, 0xD71ECC00, + 0xD71D3000, 0xD71B9400, 0xD719F800, + 0xD7185C00, 0xD716C000, 0xD7152400, + 0xD7138800, 0xD711EC00, 0xD7105000, + 0xD70EB400, 0xD70D1800, 0xD70B7C00, + 0xD709E000, 0xD7084400, 0xD706A800, + 0xD7050C00, 0xD7037000, 0xD701D400, + 0xD7003800, 0xD6FE9C00, 0xD6FD0000, + 0xD6FB6400, 0xD6F9C800, 0xD6F82C00, + 0xD6F69000, 0xD6F4F400, 0xD6F35800, + 0xD6F1BC00, 0xD6F02000, 0xD6EE8400, + 0xD6ECE800, 0xD6EB4C00, 0xD6E9B000, + 0xD6E81400, 0xD6E67800, 0xD6E4DC00, + 0xD6E34000, 0xD6E1A400, 0xD6E00800, + 0xD6DE6C00, 0xD6DCD000, 0xD6DB3400, + 0xD6D99800, 0xD6D7FC00, 0xD6D66000, + 0xD6D4C400, 0xD6D32800, 0xD6D18C00, + 0xD6CFF000, 0xD6CE5400, 0xD6CCB800, + 0xD6CB1C00, 0xD6C98000, 0xD6C7E400, + 0xD6C64800, 0xD6C4AC00, 0xD6C31000, + 0xD6C17400, 0xD6BFD800, 0xD6BE3C00, + 0xD6BCA000, 0xD6BB0400, 0xD6B96800, + 0xD6B7CC00, 0xD6B63000, 0xD6B49400, + 0xD6B2F800, 0xD6B15C00, 0xD6AFC000, + 0xD6AE2400, 0xD6AC8800, 0xD6AAEC00, + 0xD6A95000, 0xD6A7B400, 0xD6A61800, + 0xD6A47C00, 0xD6A2E000, 0xD6A14400, + 0xD69FA800, 0xD69E0C00, 0xD69C7000, + 0xD69AD400, 0xD6993800, 0xD6979C00, + 0xD6960000, 0xD6946400, 0xD692C800, + 0xD6912C00, 0xD68F9000, 0xD68DF400, + 0xD68C5800, 0xD68ABC00, 0xD6892000, + 0xD6878400, 0xD685E800, 0xD6844C00, + 0xD682B000, 0xD6811400, 0xD67F7800, + 0xD67DDC00, 0xD67C4000, 0xD67AA400, + 0xD6790800, 0xD6776C00, 0xD675D000, + 0xD6743400, 0xD6729800, 0xD670FC00, + 0xD66F6000, 0xD66DC400, 0xD66C2800, + 0xD66A8C00, 0xD668F000, 0xD6675400, + 0xD665B800, 0xD6641C00, 0xD6628000, + 0xD660E400, 0xD65F4800, 0xD65DAC00, + 0xD65C1000, 0xD65A7400, 0xD658D800, + 0xD6573C00, 0xD655A000, 0xD6540400, + 0xD6526800, 0xD650CC00, 0xD64F3000, + 0xD64D9400, 0xD64BF800, 0xD64A5C00, + 0xD648C000, 0xD6472400, 0xD6458800, + 0xD643EC00, 0xD6425000, 0xD640B400, + 0xD63F1800, 0xD63D7C00, 0xD63BE000, + 0xD63A4400, 0xD638A800, 0xD6370C00, + 0xD6357000, 0xD633D400, 0xD6323800, + 0xD6309C00, 0xD62F0000, 0xD62D6400, + 0xD62BC800, 0xD62A2C00, 0xD6289000, + 0xD626F400, 0xD6255800, 0xD623BC00, + 0xD6222000, 0xD6208400, 0xD61EE800, + 0xD61D4C00, 0xD61BB000, 0xD61A1400, + 0xD6187800, 0xD616DC00, 0xD6154000, + 0xD613A400, 0xD6120800, 0xD6106C00, + 0xD60ED000, 0xD60D3400, 0xD60B9800, + 0xD609FC00, 0xD6086000, 0xD606C400, + 0xD6052800, 0xD6038C00, 0xD601F000, + 0xD6005400, 0xD5FEB800, 0xD5FD1C00, + 0xD5FB8000, 0xD5F9E400, 0xD5F84800, + 0xD5F6AC00, 0xD5F51000, 0xD5F37400, + 0xD5F1D800, 0xD5F03C00, 0xD5EEA000, + 0xD5ED0400, 0xD5EB6800, 0xD5E9CC00, + 0xD5E83000, 0xD5E69400, 0xD5E4F800, + 0xD5E35C00, 0xD5E1C000, 0xD5E02400, + 0xD5DE8800, 0xD5DCEC00, 0xD5DB5000, + 0xD5D9B400, 0xD5D81800, 0xD5D67C00, + 0xD5D4E000, 0xD5D34400, 0xD5D1A800, + 0xD5D00C00, 0xD5CE7000, 0xD5CCD400, + 0xD5CB3800, 0xD5C99C00, 0xD5C80000, + 0xD5C68380, 0xD5C50700, 0xD5C38A80, + 0xD5C20E00, 0xD5C09180, 0xD5BF1500, + 0xD5BD9880, 0xD5BC1C00, 0xD5BA9F80, + 0xD5B92300, 0xD5B7A680, 0xD5B62A00, + 0xD5B4AD80, 0xD5B33100, 0xD5B1B480, + 0xD5B03800, 0xD5AEBB80, 0xD5AD3F00, + 0xD5ABC280, 0xD5AA4600, 0xD5A8C980, + 0xD5A74D00, 0xD5A5D080, 0xD5A45400, + 0xD5A2D780, 0xD5A15B00, 0xD59FDE80, + 0xD59E6200, 0xD59CE580, 0xD59B6900, + 0xD599EC80, 0xD5987000, 0xD596F380, + 0xD5957700, 0xD593FA80, 0xD5927E00, + 0xD5910180, 0xD58F8500, 0xD58E0880, + 0xD58C8C00, 0xD58B0F80, 0xD5899300, + 0xD5881680, 0xD5869A00, 0xD5851D80, + 0xD583A100, 0xD5822480, 0xD580A800, + 0xD57F2B80, 0xD57DAF00, 0xD57C3280, + 0xD57AB600, 0xD5793980, 0xD577BD00, + 0xD5764080, 0xD574C400, 0xD5734780, + 0xD571CB00, 0xD5704E80, 0xD56ED200, + 0xD56D5580, 0xD56BD900, 0xD56A5C80, + 0xD568E000, 0xD5676380, 0xD565E700, + 0xD5646A80, 0xD562EE00, 0xD5617180, + 0xD55FF500, 0xD55E7880, 0xD55CFC00, + 0xD55B7F80, 0xD55A0300, 0xD5588680, + 0xD5570A00, 0xD5558D80, 0xD5541100, + 0xD5529480, 0xD5511800, 0xD54F9B80, + 0xD54E1F00, 0xD54CA280, 0xD54B2600, + 0xD549A980, 0xD5482D00, 0xD546B080, + 0xD5453400, 0xD543B780, 0xD5423B00, + 0xD540BE80, 0xD53F4200, 0xD53DC580, + 0xD53C4900, 0xD53ACC80, 0xD5395000, + 0xD537D380, 0xD5365700, 0xD534DA80, + 0xD5335E00, 0xD531E180, 0xD5306500, + 0xD52EE880, 0xD52D6C00, 0xD52BEF80, + 0xD52A7300, 0xD528F680, 0xD5277A00, + 0xD525FD80, 0xD5248100, 0xD5230480, + 0xD5218800, 0xD5200B80, 0xD51E8F00, + 0xD51D1280, 0xD51B9600, 0xD51A1980, + 0xD5189D00, 0xD5172080, 0xD515A400, + 0xD5142780, 0xD512AB00, 0xD5112E80, + 0xD50FB200, 0xD50E3580, 0xD50CB900, + 0xD50B3C80, 0xD509C000, 0xD5084380, + 0xD506C700, 0xD5054A80, 0xD503CE00, + 0xD5025180, 0xD500D500, 0xD4FF5880, + 0xD4FDDC00, 0xD4FC5F80, 0xD4FAE300, + 0xD4F96680, 0xD4F7EA00, 0xD4F66D80, + 0xD4F4F100, 0xD4F37480, 0xD4F1F800, + 0xD4F07B80, 0xD4EEFF00, 0xD4ED8280, + 0xD4EC0600, 0xD4EA8980, 0xD4E90D00, + 0xD4E79080, 0xD4E61400, 0xD4E49780, + 0xD4E31B00, 0xD4E19E80, 0xD4E02200, + 0xD4DEA580, 0xD4DD2900, 0xD4DBAC80, + 0xD4DA3000, 0xD4D8B380, 0xD4D73700, + 0xD4D5BA80, 0xD4D43E00, 0xD4D2C180, + 0xD4D14500, 0xD4CFC880, 0xD4CE4C00, + 0xD4CCCF80, 0xD4CB5300, 0xD4C9D680, + 0xD4C85A00, 0xD4C6DD80, 0xD4C56100, + 0xD4C3E480, 0xD4C26800, 0xD4C0EB80, + 0xD4BF6F00, 0xD4BDF280, 0xD4BC7600, + 0xD4BAF980, 0xD4B97D00, 0xD4B80080, + 0xD4B68400, 0xD4B50780, 0xD4B38B00, + 0xD4B20E80, 0xD4B09200, 0xD4AF1580, + 0xD4AD9900, 0xD4AC1C80, 0xD4AAA000, + 0xD4A92380, 0xD4A7A700, 0xD4A62A80, + 0xD4A4AE00, 0xD4A33180, 0xD4A1B500, + 0xD4A03880, 0xD49EBC00, 0xD49D3F80, + 0xD49BC300, 0xD49A4680, 0xD498CA00, + 0xD4974D80, 0xD495D100, 0xD4945480, + 0xD492D800, 0xD4915B80, 0xD48FDF00, + 0xD48E6280, 0xD48CE600, 0xD48B6980, + 0xD489ED00, 0xD4887080, 0xD486F400, + 0xD4857780, 0xD483FB00, 0xD4827E80, + 0xD4810200, 0xD47F8580, 0xD47E0900, + 0xD47C8C80, 0xD47B1000, 0xD4799380, + 0xD4781700, 0xD4769A80, 0xD4751E00, + 0xD473A180, 0xD4722500, 0xD470A880, + 0xD46F2C00, 0xD46DAF80, 0xD46C3300, + 0xD46AB680, 0xD4693A00, 0xD467BD80, + 0xD4664100, 0xD464C480, 0xD4634800, + 0xD461CB80, 0xD4604F00, 0xD45ED280, + 0xD45D5600, 0xD45BD980, 0xD45A5D00, + 0xD458E080, 0xD4576400, 0xD455E780, + 0xD4546B00, 0xD452EE80, 0xD4517200, + 0xD44FF580, 0xD44E7900, 0xD44CFC80, + 0xD44B8000, 0xD44A0380, 0xD4488700, + 0xD4470A80, 0xD4458E00, 0xD4441180, + 0xD4429500, 0xD4411880, 0xD43F9C00, + 0xD43E1F80, 0xD43CA300, 0xD43B2680, + 0xD439AA00, 0xD4382D80, 0xD436B100, + 0xD4353480, 0xD433B800, 0xD4323B80, + 0xD430BF00, 0xD42F4280, 0xD42DC600, + 0xD42C4980, 0xD42ACD00, 0xD4295080, + 0xD427D400, 0xD4265780, 0xD424DB00, + 0xD4235E80, 0xD421E200, 0xD4206580, + 0xD41EE900, 0xD41D6C80, 0xD41BF000, + 0xD41A7380, 0xD418F700, 0xD4177A80, + 0xD415FE00, 0xD4148180, 0xD4130500, + 0xD4118880, 0xD4100C00, 0xD40E8F80, + 0xD40D1300, 0xD40B9680, 0xD40A1A00, + 0xD4089D80, 0xD4072100, 0xD405A480, + 0xD4042800, 0xD402AB80, 0xD4012F00, + 0xD3FFB280, 0xD3FE3600, 0xD3FCB980, + 0xD3FB3D00, 0xD3F9C080, 0xD3F84400, + 0xD3F6C780, 0xD3F54B00, 0xD3F3CE80, + 0xD3F25200, 0xD3F0D580, 0xD3EF5900, + 0xD3EDDC80, 0xD3EC6000, 0xD3EAE380, + 0xD3E96700, 0xD3E7EA80, 0xD3E66E00, + 0xD3E4F180, 0xD3E37500, 0xD3E1F880, + 0xD3E07C00, 0xD3DEFF80, 0xD3DD8300, + 0xD3DC0680, 0xD3DA8A00, 0xD3D90D80, + 0xD3D79100, 0xD3D61480, 0xD3D49800, + 0xD3D31B80, 0xD3D19F00, 0xD3D02280, + 0xD3CEA600, 0xD3CD2980, 0xD3CBAD00, + 0xD3CA3080, 0xD3C8B400, 0xD3C73780, + 0xD3C5BB00, 0xD3C43E80, 0xD3C2C200, + 0xD3C14580, 0xD3BFC900, 0xD3BE4C80, + 0xD3BCD000, 0xD3BB5380, 0xD3B9D700, + 0xD3B85A80, 0xD3B6DE00, 0xD3B56180, + 0xD3B3E500, 0xD3B26880, 0xD3B0EC00, + 0xD3AF6F80, 0xD3ADF300, 0xD3AC7680, + 0xD3AAFA00, 0xD3A97D80, 0xD3A80100, + 0xD3A68480, 0xD3A50800, 0xD3A38B80, + 0xD3A20F00, 0xD3A09280, 0xD39F1600, + 0xD39D9980, 0xD39C1D00, 0xD39AA080, + 0xD3992400, 0xD397A780, 0xD3962B00, + 0xD394AE80, 0xD3933200, 0xD391B580, + 0xD3903900, 0xD38EBC80, 0xD38D4000, + 0xD38BC380, 0xD38A4700, 0xD388CA80, + 0xD3874E00, 0xD385D180, 0xD3845500, + 0xD382D880, 0xD3815C00, 0xD37FDF80, + 0xD37E6300, 0xD37CE680, 0xD37B6A00, + 0xD379ED80, 0xD3787100, 0xD376F480, + 0xD3757800, 0xD373FB80, 0xD3727F00, + 0xD3710280, 0xD36F8600, 0xD36E0980, + 0xD36C8D00, 0xD36B1080, 0xD3699400, + 0xD3681780, 0xD3669B00, 0xD3651E80, + 0xD363A200, 0xD3622580, 0xD360A900, + 0xD35F2C80, 0xD35DB000, 0xD35C3380, + 0xD35AB700, 0xD3593A80, 0xD357BE00, + 0xD3564180, 0xD354C500, 0xD3534880, + 0xD351CC00, 0xD3504F80, 0xD34ED300, + 0xD34D5680, 0xD34BDA00, 0xD34A5D80, + 0xD348E100, 0xD3476480, 0xD345E800, + 0xD3446B80, 0xD342EF00, 0xD3417280, + 0xD33FF600, 0xD33E7980, 0xD33CFD00, + 0xD33B8080, 0xD33A0400, 0xD3388780, + 0xD3370B00, 0xD3358E80, 0xD3341200, + 0xD3329580, 0xD3311900, 0xD32F9C80, + 0xD32E2000, 0xD32CA380, 0xD32B2700, + 0xD329AA80, 0xD3282E00, 0xD326B180, + 0xD3253500, 0xD323B880, 0xD3223C00, + 0xD320BF80, 0xD31F4300, 0xD31DC680, + 0xD31C4A00, 0xD31ACD80, 0xD3195100, + 0xD317D480, 0xD3165800, 0xD314DB80, + 0xD3135F00, 0xD311E280, 0xD3106600, + 0xD30EE980, 0xD30D6D00, 0xD30BF080, + 0xD30A7400, 0xD308F780, 0xD3077B00, + 0xD305FE80, 0xD3048200, 0xD3030580, + 0xD3018900, 0xD3000C80, 0xD2FE9000, + 0xD2FD1380, 0xD2FB9700, 0xD2FA1A80, + 0xD2F89E00, 0xD2F72180, 0xD2F5A500, + 0xD2F42880, 0xD2F2AC00, 0xD2F12F80, + 0xD2EFB300, 0xD2EE3680, 0xD2ECBA00, + 0xD2EB3D80, 0xD2E9C100, 0xD2E84480, + 0xD2E6C800, 0xD2E54B80, 0xD2E3CF00, + 0xD2E25280, 0xD2E0D600, 0xD2DF5980, + 0xD2DDDD00, 0xD2DC6080, 0xD2DAE400, + 0xD2D96780, 0xD2D7EB00, 0xD2D66E80, + 0xD2D4F200, 0xD2D37580, 0xD2D1F900, + 0xD2D07C80, 0xD2CF0000, 0xD2CD8380, + 0xD2CC0700, 0xD2CA8A80, 0xD2C90E00, + 0xD2C79180, 0xD2C61500, 0xD2C49880, + 0xD2C31C00, 0xD2C19F80, 0xD2C02300, + 0xD2BEA680, 0xD2BD2A00, 0xD2BBAD80, + 0xD2BA3100, 0xD2B8B480, 0xD2B73800, + 0xD2B5BB80, 0xD2B43F00, 0xD2B2C280, + 0xD2B14600, 0xD2AFC980, 0xD2AE4D00, + 0xD2ACD080, 0xD2AB5400, 0xD2A9D780, + 0xD2A85B00, 0xD2A6DE80, 0xD2A56200, + 0xD2A3E580, 0xD2A26900, 0xD2A0EC80, + 0xD29F7000, 0xD29DF380, 0xD29C7700, + 0xD29AFA80, 0xD2997E00, 0xD2980180, + 0xD2968500, 0xD2950880, 0xD2938C00, + 0xD2920F80, 0xD2909300, 0xD28F1680, + 0xD28D9A00, 0xD28C1D80, 0xD28AA100, + 0xD2892480, 0xD287A800, 0xD2862B80, + 0xD284AF00, 0xD2833280, 0xD281B600, + 0xD2803980, 0xD27EBD00, 0xD27D4080, + 0xD27BC400, 0xD27A4780, 0xD278CB00, + 0xD2774E80, 0xD275D200, 0xD2745580, + 0xD272D900, 0xD2715C80, 0xD26FE000, + 0xD26E6380, 0xD26CE700, 0xD26B6A80, + 0xD269EE00, 0xD2687180, 0xD266F500, + 0xD2657880, 0xD263FC00, 0xD2627F80, + 0xD2610300, 0xD25F8680, 0xD25E0A00, + 0xD25C8D80, 0xD25B1100, 0xD2599480, + 0xD2581800, 0xD2569B80, 0xD2551F00, + 0xD253A280, 0xD2522600, 0xD250A980, + 0xD24F2D00, 0xD24DB080, 0xD24C3400, + 0xD24AB780, 0xD2493B00, 0xD247BE80, + 0xD2464200, 0xD244C580, 0xD2434900, + 0xD241CC80, 0xD2405000, 0xD23ED380, + 0xD23D5700, 0xD23BDA80, 0xD23A5E00, + 0xD238E180, 0xD2376500, 0xD235E880, + 0xD2346C00, 0xD232EF80, 0xD2317300, + 0xD22FF680, 0xD22E7A00, 0xD22CFD80, + 0xD22B8100, 0xD22A0480, 0xD2288800, + 0xD2270B80, 0xD2258F00, 0xD2241280, + 0xD2229600, 0xD2211980, 0xD21F9D00, + 0xD21E2080, 0xD21CA400, 0xD21B2780, + 0xD219AB00, 0xD2182E80, 0xD216B200, + 0xD2153580, 0xD213B900, 0xD2123C80, + 0xD210C000, 0xD20F4380, 0xD20DC700, + 0xD20C4A80, 0xD20ACE00, 0xD2095180, + 0xD207D500, 0xD2065880, 0xD204DC00, + 0xD2035F80, 0xD201E300, 0xD2006680, + 0xD1FEEA00, 0xD1FD6D80, 0xD1FBF100, + 0xD1FA7480, 0xD1F8F800, 0xD1F77B80, + 0xD1F5FF00, 0xD1F48280, 0xD1F30600, + 0xD1F18980, 0xD1F00D00, 0xD1EE9080, + 0xD1ED1400, 0xD1EB9780, 0xD1EA1B00, + 0xD1E89E80, 0xD1E72200, 0xD1E5A580, + 0xD1E42900, 0xD1E2AC80, 0xD1E13000, + 0xD1DFB380, 0xD1DE3700, 0xD1DCBA80, + 0xD1DB3E00, 0xD1D9C180, 0xD1D84500, + 0xD1D6C880, 0xD1D54C00, 0xD1D3CF80, + 0xD1D25300, 0xD1D0D680, 0xD1CF5A00, + 0xD1CDDD80, 0xD1CC6100, 0xD1CAE480, + 0xD1C96800, 0xD1C7EB80, 0xD1C66F00, + 0xD1C4F280, 0xD1C37600, 0xD1C1F980, + 0xD1C07D00, 0xD1BF0080, 0xD1BD8400, + 0xD1BC0780, 0xD1BA8B00, 0xD1B90E80, + 0xD1B79200, 0xD1B61580, 0xD1B49900, + 0xD1B31C80, 0xD1B1A000, 0xD1B02380, + 0xD1AEA700, 0xD1AD2A80, 0xD1ABAE00, + 0xD1AA3180, 0xD1A8B500, 0xD1A73880, + 0xD1A5BC00, 0xD1A43F80, 0xD1A2C300, + 0xD1A14680, 0xD19FCA00, 0xD19E4D80, + 0xD19CD100, 0xD19B5480, 0xD199D800, + 0xD1985B80, 0xD196DF00, 0xD1956280, + 0xD193E600, 0xD1926980, 0xD190ED00, + 0xD18F7080, 0xD18DF400, 0xD18C7780, + 0xD18AFB00, 0xD1897E80, 0xD1880200, + 0xD1868580, 0xD1850900, 0xD1838C80, + 0xD1821000, 0xD1809380, 0xD17F1700, + 0xD17D9A80, 0xD17C1E00, 0xD17AA180, + 0xD1792500, 0xD177A880, 0xD1762C00, + 0xD174AF80, 0xD1733300, 0xD171B680, + 0xD1703A00, 0xD16EBD80, 0xD16D4100, + 0xD16BC480, 0xD16A4800, 0xD168CB80, + 0xD1674F00, 0xD165D280, 0xD1645600, + 0xD162D980, 0xD1615D00, 0xD15FE080, + 0xD15E6400, 0xD15CE780, 0xD15B6B00, + 0xD159EE80, 0xD1587200, 0xD156F580, + 0xD1557900, 0xD153FC80, 0xD1528000, + 0xD1510380, 0xD14F8700, 0xD14E0A80, + 0xD14C8E00, 0xD14B1180, 0xD1499500, + 0xD1481880, 0xD1469C00, 0xD1451F80, + 0xD143A300, 0xD1422680, 0xD140AA00, + 0xD13F2D80, 0xD13DB100, 0xD13C3480, + 0xD13AB800, 0xD1393B80, 0xD137BF00, + 0xD1364280, 0xD134C600, 0xD1334980, + 0xD131CD00, 0xD1305080, 0xD12ED400, + 0xD12D5780, 0xD12BDB00, 0xD12A5E80, + 0xD128E200, 0xD1276580, 0xD125E900, + 0xD1246C80, 0xD122F000, 0xD1217380, + 0xD11FF700, 0xD11E7A80, 0xD11CFE00, + 0xD11B8180, 0xD11A0500, 0xD1188880, + 0xD1170C00, 0xD1158F80, 0xD1141300, + 0xD1129680, 0xD1111A00, 0xD10F9D80, + 0xD10E2100, 0xD10CA480, 0xD10B2800, + 0xD109AB80, 0xD1082F00, 0xD106B280, + 0xD1053600, 0xD103B980, 0xD1023D00, + 0xD100C080, 0xD0FF4400, 0xD0FDC780, + 0xD0FC4B00, 0xD0FACE80, 0xD0F95200, + 0xD0F7D580, 0xD0F65900, 0xD0F4DC80, + 0xD0F36000, 0xD0F1E380, 0xD0F06700, + 0xD0EEEA80, 0xD0ED6E00, 0xD0EBF180, + 0xD0EA7500, 0xD0E8F880, 0xD0E77C00, + 0xD0E5FF80, 0xD0E48300, 0xD0E30680, + 0xD0E18A00, 0xD0E00D80, 0xD0DE9100, + 0xD0DD1480, 0xD0DB9800, 0xD0DA1B80, + 0xD0D89F00, 0xD0D72280, 0xD0D5A600, + 0xD0D42980, 0xD0D2AD00, 0xD0D13080, + 0xD0CFB400, 0xD0CE3780, 0xD0CCBB00, + 0xD0CB3E80, 0xD0C9C200, 0xD0C84580, + 0xD0C6C900, 0xD0C54C80, 0xD0C3D000, + 0xD0C25380, 0xD0C0D700, 0xD0BF5A80, + 0xD0BDDE00, 0xD0BC6180, 0xD0BAE500, + 0xD0B96880, 0xD0B7EC00, 0xD0B66F80, + 0xD0B4F300, 0xD0B37680, 0xD0B1FA00, + 0xD0B07D80, 0xD0AF0100, 0xD0AD8480, + 0xD0AC0800, 0xD0AA8B80, 0xD0A90F00, + 0xD0A79280, 0xD0A61600, 0xD0A49980, + 0xD0A31D00, 0xD0A1A080, 0xD0A02400, + 0xD09EA780, 0xD09D2B00, 0xD09BAE80, + 0xD09A3200, 0xD098B580, 0xD0973900, + 0xD095BC80, 0xD0944000, 0xD092C380, + 0xD0914700, 0xD08FCA80, 0xD08E4E00, + 0xD08CD180, 0xD08B5500, 0xD089D880, + 0xD0885C00, 0xD086DF80, 0xD0856300, + 0xD083E680, 0xD0826A00, 0xD080ED80, + 0xD07F7100, 0xD07DF480, 0xD07C7800, + 0xD07AFB80, 0xD0797F00, 0xD0780280, + 0xD0768600, 0xD0750980, 0xD0738D00, + 0xD0721080, 0xD0709400, 0xD06F1780, + 0xD06D9B00, 0xD06C1E80, 0xD06AA200, + 0xD0692580, 0xD067A900, 0xD0662C80, + 0xD064B000, 0xD0633380, 0xD061B700, + 0xD0603A80, 0xD05EBE00, 0xD05D4180, + 0xD05BC500, 0xD05A4880, 0xD058CC00, + 0xD0574F80, 0xD055D300, 0xD0545680, + 0xD052DA00, 0xD0515D80, 0xD04FE100, + 0xD04E6480, 0xD04CE800, 0xD04B6B80, + 0xD049EF00, 0xD0487280, 0xD046F600, + 0xD0457980, 0xD043FD00, 0xD0428080, + 0xD0410400, 0xD03F8780, 0xD03E0B00, + 0xD03C8E80, 0xD03B1200, 0xD0399580, + 0xD0381900, 0xD0369C80, 0xD0352000, + 0xD033A380, 0xD0322700, 0xD030AA80, + 0xD02F2E00, 0xD02DB180, 0xD02C3500, + 0xD02AB880, 0xD0293C00, 0xD027BF80, + 0xD0264300, 0xD024C680, 0xD0234A00, + 0xD021CD80, 0xD0205100, 0xD01ED480, + 0xD01D5800, 0xD01BDB80, 0xD01A5F00, + 0xD018E280, 0xD0176600, 0xD015E980, + 0xD0146D00, 0xD012F080, 0xD0117400, + 0xD00FF780, 0xD00E7B00, 0xD00CFE80, + 0xD00B8200, 0xD00A0580, 0xD0088900, + 0xD0070C80, 0xD0059000, 0xD0041380, + 0xD0029700, 0xD0011A80, 0xCFFF9E00, + 0xCFFE2180, 0xCFFCA500, 0xCFFB2880, + 0xCFF9AC00, 0xCFF82F80, 0xCFF6B300, + 0xCFF53680, 0xCFF3BA00, 0xCFF23D80, + 0xCFF0C100, 0xCFEF4480, 0xCFEDC800, + 0xCFEC4B80, 0xCFEACF00, 0xCFE95280, + 0xCFE7D600, 0xCFE65980, 0xCFE4DD00, + 0xCFE36080, 0xCFE1E400, 0xCFE06780, + 0xCFDEEB00, 0xCFDD6E80, 0xCFDBF200, + 0xCFDA7580, 0xCFD8F900, 0xCFD77C80, + 0xCFD60000, 0xCFD48380, 0xCFD30700, + 0xCFD18A80, 0xCFD00E00, 0xCFCE9180, + 0xCFCD1500, 0xCFCB9880, 0xCFCA1C00, + 0xCFC89F80, 0xCFC72300, 0xCFC5A680, + 0xCFC42A00, 0xCFC2AD80, 0xCFC13100, + 0xCFBFB480, 0xCFBE3800, 0xCFBCBB80, + 0xCFBB3F00, 0xCFB9C280, 0xCFB84600, + 0xCFB6C980, 0xCFB54D00, 0xCFB3D080, + 0xCFB25400, 0xCFB0D780, 0xCFAF5B00, + 0xCFADDE80, 0xCFAC6200, 0xCFAAE580, + 0xCFA96900, 0xCFA7EC80, 0xCFA67000, + 0xCFA4F380, 0xCFA37700, 0xCFA1FA80, + 0xCFA07E00, 0xCF9F0180, 0xCF9D8500, + 0xCF9C0880, 0xCF9A8C00, 0xCF990F80, + 0xCF979300, 0xCF961680, 0xCF949A00, + 0xCF931D80, 0xCF91A100, 0xCF902480, + 0xCF8EA800, 0xCF8D2B80, 0xCF8BAF00, + 0xCF8A3280, 0xCF88B600, 0xCF873980, + 0xCF85BD00, 0xCF844080, 0xCF82C400, + 0xCF814780, 0xCF7FCB00, 0xCF7E4E80, + 0xCF7CD200, 0xCF7B5580, 0xCF79D900, + 0xCF785C80, 0xCF76E000, 0xCF756380, + 0xCF73E700, 0xCF726A80, 0xCF70EE00, + 0xCF6F7180, 0xCF6DF500, 0xCF6C7880, + 0xCF6AFC00, 0xCF697F80, 0xCF680300, + 0xCF668680, 0xCF650A00, 0xCF638D80, + 0xCF621100, 0xCF609480, 0xCF5F1800, + 0xCF5D9B80, 0xCF5C1F00, 0xCF5AA280, + 0xCF592600, 0xCF57A980, 0xCF562D00, + 0xCF54B080, 0xCF533400, 0xCF51B780, + 0xCF503B00, 0xCF4EBE80, 0xCF4D4200, + 0xCF4BC580, 0xCF4A4900, 0xCF48CC80, + 0xCF475000, 0xCF45D380, 0xCF445700, + 0xCF42DA80, 0xCF415E00, 0xCF3FE180, + 0xCF3E6500, 0xCF3CE880, 0xCF3B6C00, + 0xCF39EF80, 0xCF387300, 0xCF36F680, + 0xCF357A00, 0xCF33FD80, 0xCF328100, + 0xCF310480, 0xCF2F8800, 0xCF2E0B80, + 0xCF2C8F00, 0xCF2B1280, 0xCF299600, + 0xCF281980, 0xCF269D00, 0xCF252080, + 0xCF23A400, 0xCF222780, 0xCF20AB00, + 0xCF1F2E80, 0xCF1DB200, 0xCF1C3580, + 0xCF1AB900, 0xCF193C80, 0xCF17C000, + 0xCF164380, 0xCF14C700, 0xCF134A80, + 0xCF11CE00, 0xCF105180, 0xCF0ED500, + 0xCF0D5880, 0xCF0BDC00, 0xCF0A5F80, + 0xCF08E300, 0xCF076680, 0xCF05EA00, + 0xCF046D80, 0xCF02F100, 0xCF017480, + 0xCEFFF800, 0xCEFE7B80, 0xCEFCFF00, + 0xCEFB8280, 0xCEFA0600, 0xCEF88980, + 0xCEF70D00, 0xCEF59080, 0xCEF41400, + 0xCEF29780, 0xCEF11B00, 0xCEEF9E80, + 0xCEEE2200, 0xCEECA580, 0xCEEB2900, + 0xCEE9AC80, 0xCEE83000, 0xCEE6B380, + 0xCEE53700, 0xCEE3BA80, 0xCEE23E00, + 0xCEE0C180, 0xCEDF4500, 0xCEDDC880, + 0xCEDC4C00, 0xCEDACF80, 0xCED95300, + 0xCED7D680, 0xCED65A00, 0xCED4DD80, + 0xCED36100, 0xCED1E480, 0xCED06800, + 0xCECEEB80, 0xCECD6F00, 0xCECBF280, + 0xCECA7600, 0xCEC8F980, 0xCEC77D00, + 0xCEC60080, 0xCEC48400, 0xCEC30780, + 0xCEC18B00, 0xCEC00E80, 0xCEBE9200, + 0xCEBD1580, 0xCEBB9900, 0xCEBA1C80, + 0xCEB8A000, 0xCEB72380, 0xCEB5A700, + 0xCEB42A80, 0xCEB2AE00, 0xCEB13180, + 0xCEAFB500, 0xCEAE3880, 0xCEACBC00, + 0xCEAB3F80, 0xCEA9C300, 0xCEA84680, + 0xCEA6CA00, 0xCEA54D80, 0xCEA3D100, + 0xCEA25480, 0xCEA0D800, 0xCE9F5B80, + 0xCE9DDF00, 0xCE9C6280, 0xCE9AE600, + 0xCE996980, 0xCE97ED00, 0xCE967080, + 0xCE94F400, 0xCE937780, 0xCE91FB00, + 0xCE907E80, 0xCE8F0200, 0xCE8D8580, + 0xCE8C0900, 0xCE8A8C80, 0xCE891000, + 0xCE879380, 0xCE861700, 0xCE849A80, + 0xCE831E00, 0xCE81A180, 0xCE802500, + 0xCE7EA880, 0xCE7D2C00, 0xCE7BAF80, + 0xCE7A3300, 0xCE78B680, 0xCE773A00, + 0xCE75BD80, 0xCE744100, 0xCE72C480, + 0xCE714800, 0xCE6FCB80, 0xCE6E4F00, + 0xCE6CD280, 0xCE6B5600, 0xCE69D980, + 0xCE685D00, 0xCE66E080, 0xCE656400, + 0xCE63E780, 0xCE626B00, 0xCE60EE80, + 0xCE5F7200, 0xCE5DF580, 0xCE5C7900, + 0xCE5AFC80, 0xCE598000, 0xCE580380, + 0xCE568700, 0xCE550A80, 0xCE538E00, + 0xCE521180, 0xCE509500, 0xCE4F1880, + 0xCE4D9C00, 0xCE4C1F80, 0xCE4AA300, + 0xCE492680, 0xCE47AA00, 0xCE462D80, + 0xCE44B100, 0xCE433480, 0xCE41B800, + 0xCE403B80, 0xCE3EBF00, 0xCE3D4280, + 0xCE3BC600, 0xCE3A4980, 0xCE38CD00, + 0xCE375080, 0xCE35D400, 0xCE345780, + 0xCE32DB00, 0xCE315E80, 0xCE2FE200, + 0xCE2E6580, 0xCE2CE900, 0xCE2B6C80, + 0xCE29F000, 0xCE287380, 0xCE26F700, + 0xCE257A80, 0xCE23FE00, 0xCE228180, + 0xCE210500, 0xCE1F8880, 0xCE1E0C00, + 0xCE1C8F80, 0xCE1B1300, 0xCE199680, + 0xCE181A00, 0xCE169D80, 0xCE152100, + 0xCE13A480, 0xCE122800, 0xCE10AB80, + 0xCE0F2F00, 0xCE0DB280, 0xCE0C3600, + 0xCE0AB980, 0xCE093D00, 0xCE07C080, + 0xCE064400, 0xCE04C780, 0xCE034B00, + 0xCE01CE80, 0xCE005200, 0xCDFED580, + 0xCDFD5900, 0xCDFBDC80, 0xCDFA6000, + 0xCDF8E380, 0xCDF76700, 0xCDF5EA80, + 0xCDF46E00, 0xCDF2F180, 0xCDF17500, + 0xCDEFF880, 0xCDEE7C00, 0xCDECFF80, + 0xCDEB8300, 0xCDEA0680, 0xCDE88A00, + 0xCDE70D80, 0xCDE59100, 0xCDE41480, + 0xCDE29800, 0xCDE11B80, 0xCDDF9F00, + 0xCDDE2280, 0xCDDCA600, 0xCDDB2980, + 0xCDD9AD00, 0xCDD83080, 0xCDD6B400, + 0xCDD53780, 0xCDD3BB00, 0xCDD23E80, + 0xCDD0C200, 0xCDCF4580, 0xCDCDC900, + 0xCDCC4C80, 0xCDCAD000, 0xCDC95380, + 0xCDC7D700, 0xCDC65A80, 0xCDC4DE00, + 0xCDC36180, 0xCDC1E500, 0xCDC06880, + 0xCDBEEC00, 0xCDBD6F80, 0xCDBBF300, + 0xCDBA7680, 0xCDB8FA00, 0xCDB77D80, + 0xCDB60100, 0xCDB48480, 0xCDB30800, + 0xCDB18B80, 0xCDB00F00, 0xCDAE9280, + 0xCDAD1600, 0xCDAB9980, 0xCDAA1D00, + 0xCDA8A080, 0xCDA72400, 0xCDA5A780, + 0xCDA42B00, 0xCDA2AE80, 0xCDA13200, + 0xCD9FB580, 0xCD9E3900, 0xCD9CBC80, + 0xCD9B4000, 0xCD99C380, 0xCD984700, + 0xCD96CA80, 0xCD954E00, 0xCD93D180, + 0xCD925500, 0xCD90D880, 0xCD8F5C00, + 0xCD8DDF80, 0xCD8C6300, 0xCD8AE680, + 0xCD896A00, 0xCD87ED80, 0xCD867100, + 0xCD84F480, 0xCD837800, 0xCD81FB80, + 0xCD807F00, 0xCD7F0280, 0xCD7D8600, + 0xCD7C0980, 0xCD7A8D00, 0xCD791080, + 0xCD779400, 0xCD761780, 0xCD749B00, + 0xCD731E80, 0xCD71A200, 0xCD702580, + 0xCD6EA900, 0xCD6D2C80, 0xCD6BB000, + 0xCD6A3380, 0xCD68B700, 0xCD673A80, + 0xCD65BE00, 0xCD644180, 0xCD62C500, + 0xCD614880, 0xCD5FCC00, 0xCD5E4F80, + 0xCD5CD300, 0xCD5B5680, 0xCD59DA00, + 0xCD585D80, 0xCD56E100, 0xCD556480, + 0xCD53E800, 0xCD526B80, 0xCD50EF00, + 0xCD4F7280, 0xCD4DF600, 0xCD4C7980, + 0xCD4AFD00, 0xCD498080, 0xCD480400, + 0xCD468780, 0xCD450B00, 0xCD438E80, + 0xCD421200, 0xCD409580, 0xCD3F1900, + 0xCD3D9C80, 0xCD3C2000, 0xCD3AA380, + 0xCD392700, 0xCD37AA80, 0xCD362E00, + 0xCD34B180, 0xCD333500, 0xCD31B880, + 0xCD303C00, 0xCD2EBF80, 0xCD2D4300, + 0xCD2BC680, 0xCD2A4A00, 0xCD28CD80, + 0xCD275100, 0xCD25D480, 0xCD245800, + 0xCD22DB80, 0xCD215F00, 0xCD1FE280, + 0xCD1E6600, 0xCD1CE980, 0xCD1B6D00, + 0xCD19F080, 0xCD187400, 0xCD16F780, + 0xCD157B00, 0xCD13FE80, 0xCD128200, + 0xCD110580, 0xCD0F8900, 0xCD0E0C80, + 0xCD0C9000, 0xCD0B1380, 0xCD099700, + 0xCD081A80, 0xCD069E00, 0xCD052180, + 0xCD03A500, 0xCD022880, 0xCD00AC00, + 0xCCFF2F80, 0xCCFDB300, 0xCCFC3680, + 0xCCFABA00, 0xCCF93D80, 0xCCF7C100, + 0xCCF64480, 0xCCF4C800, 0xCCF34B80, + 0xCCF1CF00, 0xCCF05280, 0xCCEED600, + 0xCCED5980, 0xCCEBDD00, 0xCCEA6080, + 0xCCE8E400, 0xCCE76780, 0xCCE5EB00, + 0xCCE46E80, 0xCCE2F200, 0xCCE17580, + 0xCCDFF900, 0xCCDE7C80, 0xCCDD0000, + 0xCCDB8380, 0xCCDA0700, 0xCCD88A80, + 0xCCD70E00, 0xCCD59180, 0xCCD41500, + 0xCCD29880, 0xCCD11C00, 0xCCCF9F80, + 0xCCCE2300, 0xCCCCA680, 0xCCCB2A00, + 0xCCC9AD80, 0xCCC83100, 0xCCC6B480, + 0xCCC53800, 0xCCC3BB80, 0xCCC23F00, + 0xCCC0C280, 0xCCBF4600, 0xCCBDC980, + 0xCCBC4D00, 0xCCBAD080, 0xCCB95400, + 0xCCB7D780, 0xCCB65B00, 0xCCB4DE80, + 0xCCB36200, 0xCCB1E580, 0xCCB06900, + 0xCCAEEC80, 0xCCAD7000, 0xCCABF380, + 0xCCAA7700, 0xCCA8FA80, 0xCCA77E00, + 0xCCA60180, 0xCCA48500, 0xCCA30880, + 0xCCA18C00, 0xCCA00F80, 0xCC9E9300, + 0xCC9D1680, 0xCC9B9A00, 0xCC9A1D80, + 0xCC98A100, 0xCC972480, 0xCC95A800, + 0xCC942B80, 0xCC92AF00, 0xCC913280, + 0xCC8FB600, 0xCC8E3980, 0xCC8CBD00, + 0xCC8B4080, 0xCC89C400, 0xCC884780, + 0xCC86CB00, 0xCC854E80, 0xCC83D200, + 0xCC825580, 0xCC80D900, 0xCC7F5C80, + 0xCC7DE000, 0xCC7C6380, 0xCC7AE700, + 0xCC796A80, 0xCC77EE00, 0xCC767180, + 0xCC74F500, 0xCC737880, 0xCC71FC00, + 0xCC707F80, 0xCC6F0300, 0xCC6D8680, + 0xCC6C0A00, 0xCC6A8D80, 0xCC691100, + 0xCC679480, 0xCC661800, 0xCC649B80, + 0xCC631F00, 0xCC61A280, 0xCC602600, + 0xCC5EA980, 0xCC5D2D00, 0xCC5BB080, + 0xCC5A3400, 0xCC58B780, 0xCC573B00, + 0xCC55BE80, 0xCC544200, 0xCC52C580, + 0xCC514900, 0xCC4FCC80, 0xCC4E5000, + 0xCC4CD380, 0xCC4B5700, 0xCC49DA80, + 0xCC485E00, 0xCC46E180, 0xCC456500, + 0xCC43E880, 0xCC426C00, 0xCC40EF80, + 0xCC3F7300, 0xCC3DF680, 0xCC3C7A00, + 0xCC3AFD80, 0xCC398100, 0xCC380480, + 0xCC368800, 0xCC350B80, 0xCC338F00, + 0xCC321280, 0xCC309600, 0xCC2F1980, + 0xCC2D9D00, 0xCC2C2080, 0xCC2AA400, + 0xCC292780, 0xCC27AB00, 0xCC262E80, + 0xCC24B200, 0xCC233580, 0xCC21B900, + 0xCC203C80, 0xCC1EC000, 0xCC1D4380, + 0xCC1BC700, 0xCC1A4A80, 0xCC18CE00, + 0xCC175180, 0xCC15D500, 0xCC145880, + 0xCC12DC00, 0xCC115F80, 0xCC0FE300, + 0xCC0E6680, 0xCC0CEA00, 0xCC0B6D80, + 0xCC09F100, 0xCC087480, 0xCC06F800, + 0xCC057B80, 0xCC03FF00, 0xCC028280, + 0xCC010600, 0xCBFF8980, 0xCBFE0D00, + 0xCBFC9080, 0xCBFB1400, 0xCBF99780, + 0xCBF81B00, 0xCBF69E80, 0xCBF52200, + 0xCBF3A580, 0xCBF22900, 0xCBF0AC80, + 0xCBEF3000, 0xCBEDB380, 0xCBEC3700, + 0xCBEABA80, 0xCBE93E00, 0xCBE7C180, + 0xCBE64500, 0xCBE4C880, 0xCBE34C00, + 0xCBE1CF80, 0xCBE05300, 0xCBDED680, + 0xCBDD5A00, 0xCBDBDD80, 0xCBDA6100, + 0xCBD8E480, 0xCBD76800, 0xCBD5EB80, + 0xCBD46F00, 0xCBD2F280, 0xCBD17600, + 0xCBCFF980, 0xCBCE7D00, 0xCBCD0080, + 0xCBCB8400, 0xCBCA0780, 0xCBC88B00, + 0xCBC70E80, 0xCBC59200, 0xCBC41580, + 0xCBC29900, 0xCBC11C80, 0xCBBFA000, + 0xCBBE2380, 0xCBBCA700, 0xCBBB2A80, + 0xCBB9AE00, 0xCBB83180, 0xCBB6B500, + 0xCBB53880, 0xCBB3BC00, 0xCBB23F80, + 0xCBB0C300, 0xCBAF4680, 0xCBADCA00, + 0xCBAC4D80, 0xCBAAD100, 0xCBA95480, + 0xCBA7D800, 0xCBA65B80, 0xCBA4DF00, + 0xCBA36280, 0xCBA1E600, 0xCBA06980, + 0xCB9EED00, 0xCB9D7080, 0xCB9BF400, + 0xCB9A7780, 0xCB98FB00, 0xCB977E80, + 0xCB960200, 0xCB948580, 0xCB930900, + 0xCB918C80, 0xCB901000, 0xCB8E9380, + 0xCB8D1700, 0xCB8B9A80, 0xCB8A1E00, + 0xCB88A180, 0xCB872500, 0xCB85A880, + 0xCB842C00, 0xCB82AF80, 0xCB813300, + 0xCB7FB680, 0xCB7E3A00, 0xCB7CBD80, + 0xCB7B4100, 0xCB79C480, 0xCB784800, + 0xCB76CB80, 0xCB754F00, 0xCB73D280, + 0xCB725600, 0xCB70D980, 0xCB6F5D00, + 0xCB6DE080, 0xCB6C6400, 0xCB6AE780, + 0xCB696B00, 0xCB67EE80, 0xCB667200, + 0xCB64F580, 0xCB637900, 0xCB61FC80, + 0xCB608000, 0xCB5F0380, 0xCB5D8700, + 0xCB5C0A80, 0xCB5A8E00, 0xCB591180, + 0xCB579500, 0xCB561880, 0xCB549C00, + 0xCB531F80, 0xCB51A300, 0xCB502680, + 0xCB4EAA00, 0xCB4D2D80, 0xCB4BB100, + 0xCB4A3480, 0xCB48B800, 0xCB473B80, + 0xCB45BF00, 0xCB444280, 0xCB42C600, + 0xCB414980, 0xCB3FCD00, 0xCB3E5080, + 0xCB3CD400, 0xCB3B5780, 0xCB39DB00, + 0xCB385E80, 0xCB36E200, 0xCB356580, + 0xCB33E900, 0xCB326C80, 0xCB30F000, + 0xCB2F7380, 0xCB2DF700, 0xCB2C7A80, + 0xCB2AFE00, 0xCB298180, 0xCB280500, + 0xCB268880, 0xCB250C00, 0xCB238F80, + 0xCB221300, 0xCB209680, 0xCB1F1A00, + 0xCB1D9D80, 0xCB1C2100, 0xCB1AA480, + 0xCB192800, 0xCB17AB80, 0xCB162F00, + 0xCB14B280, 0xCB133600, 0xCB11B980, + 0xCB103D00, 0xCB0EC080, 0xCB0D4400, + 0xCB0BC780, 0xCB0A4B00, 0xCB08CE80, + 0xCB075200, 0xCB05D580, 0xCB045900, + 0xCB02DC80, 0xCB016000, 0xCAFFE380, + 0xCAFE6700, 0xCAFCEA80, 0xCAFB6E00, + 0xCAF9F180, 0xCAF87500, 0xCAF6F880, + 0xCAF57C00, 0xCAF3FF80, 0xCAF28300, + 0xCAF10680, 0xCAEF8A00, 0xCAEE0D80, + 0xCAEC9100, 0xCAEB1480, 0xCAE99800, + 0xCAE81B80, 0xCAE69F00, 0xCAE52280, + 0xCAE3A600, 0xCAE22980, 0xCAE0AD00, + 0xCADF3080, 0xCADDB400, 0xCADC3780, + 0xCADABB00, 0xCAD93E80, 0xCAD7C200, + 0xCAD64580, 0xCAD4C900, 0xCAD34C80, + 0xCAD1D000, 0xCAD05380, 0xCACED700, + 0xCACD5A80, 0xCACBDE00, 0xCACA6180, + 0xCAC8E500, 0xCAC76880, 0xCAC5EC00, + 0xCAC46F80, 0xCAC2F300, 0xCAC17680, + 0xCABFFA00, 0xCABE7D80, 0xCABD0100, + 0xCABB8480, 0xCABA0800, 0xCAB88B80, + 0xCAB70F00, 0xCAB59280, 0xCAB41600, + 0xCAB29980, 0xCAB11D00, 0xCAAFA080, + 0xCAAE2400, 0xCAACA780, 0xCAAB2B00, + 0xCAA9AE80, 0xCAA83200, 0xCAA6B580, + 0xCAA53900, 0xCAA3BC80, 0xCAA24000, + 0xCAA0C380, 0xCA9F4700, 0xCA9DCA80, + 0xCA9C4E00, 0xCA9AD180, 0xCA995500, + 0xCA97D880, 0xCA965C00, 0xCA94DF80, + 0xCA936300, 0xCA91E680, 0xCA906A00, + 0xCA8EED80, 0xCA8D7100, 0xCA8BF480, + 0xCA8A7800, 0xCA88FB80, 0xCA877F00, + 0xCA860280, 0xCA848600, 0xCA830980, + 0xCA818D00, 0xCA801080, 0xCA7E9400, + 0xCA7D1780, 0xCA7B9B00, 0xCA7A1E80, + 0xCA78A200, 0xCA772580, 0xCA75A900, + 0xCA742C80, 0xCA72B000, 0xCA713380, + 0xCA6FB700, 0xCA6E3A80, 0xCA6CBE00, + 0xCA6B4180, 0xCA69C500, 0xCA684880, + 0xCA66CC00, 0xCA654F80, 0xCA63D300, + 0xCA625680, 0xCA60DA00, 0xCA5F5D80, + 0xCA5DE100, 0xCA5C6480, 0xCA5AE800, + 0xCA596B80, 0xCA57EF00, 0xCA567280, + 0xCA54F600, 0xCA537980, 0xCA51FD00, + 0xCA508080, 0xCA4F0400, 0xCA4D8780, + 0xCA4C0B00, 0xCA4A8E80, 0xCA491200, + 0xCA479580, 0xCA461900, 0xCA449C80, + 0xCA432000, 0xCA41A380, 0xCA402700, + 0xCA3EAA80, 0xCA3D2E00, 0xCA3BB180, + 0xCA3A3500, 0xCA38B880, 0xCA373C00, + 0xCA35BF80, 0xCA344300, 0xCA32C680, + 0xCA314A00, 0xCA2FCD80, 0xCA2E5100, + 0xCA2CD480, 0xCA2B5800, 0xCA29DB80, + 0xCA285F00, 0xCA26E280, 0xCA256600, + 0xCA23E980, 0xCA226D00, 0xCA20F080, + 0xCA1F7400, 0xCA1DF780, 0xCA1C7B00, + 0xCA1AFE80, 0xCA198200, 0xCA180580, + 0xCA168900, 0xCA150C80, 0xCA139000, + 0xCA121380, 0xCA109700, 0xCA0F1A80, + 0xCA0D9E00, 0xCA0C2180, 0xCA0AA500, + 0xCA092880, 0xCA07AC00, 0xCA062F80, + 0xCA04B300, 0xCA033680, 0xCA01BA00, + 0xCA003D80, 0xC9FEC100, 0xC9FD4480, + 0xC9FBC800, 0xC9FA4B80, 0xC9F8CF00, + 0xC9F75280, 0xC9F5D600, 0xC9F45980, + 0xC9F2DD00, 0xC9F16080, 0xC9EFE400, + 0xC9EE6780, 0xC9ECEB00, 0xC9EB6E80, + 0xC9E9F200, 0xC9E87580, 0xC9E6F900, + 0xC9E57C80, 0xC9E40000, 0xC9E29F00, + 0xC9E13E00, 0xC9DFDD00, 0xC9DE7C00, + 0xC9DD1B00, 0xC9DBBA00, 0xC9DA5900, + 0xC9D8F800, 0xC9D79700, 0xC9D63600, + 0xC9D4D500, 0xC9D37400, 0xC9D21300, + 0xC9D0B200, 0xC9CF5100, 0xC9CDF000, + 0xC9CC8F00, 0xC9CB2E00, 0xC9C9CD00, + 0xC9C86C00, 0xC9C70B00, 0xC9C5AA00, + 0xC9C44900, 0xC9C2E800, 0xC9C18700, + 0xC9C02600, 0xC9BEC500, 0xC9BD6400, + 0xC9BC0300, 0xC9BAA200, 0xC9B94100, + 0xC9B7E000, 0xC9B67F00, 0xC9B51E00, + 0xC9B3BD00, 0xC9B25C00, 0xC9B0FB00, + 0xC9AF9A00, 0xC9AE3900, 0xC9ACD800, + 0xC9AB7700, 0xC9AA1600, 0xC9A8B500, + 0xC9A75400, 0xC9A5F300, 0xC9A49200, + 0xC9A33100, 0xC9A1D000, 0xC9A06F00, + 0xC99F0E00, 0xC99DAD00, 0xC99C4C00, + 0xC99AEB00, 0xC9998A00, 0xC9982900, + 0xC996C800, 0xC9956700, 0xC9940600, + 0xC992A500, 0xC9914400, 0xC98FE300, + 0xC98E8200, 0xC98D2100, 0xC98BC000, + 0xC98A5F00, 0xC988FE00, 0xC9879D00, + 0xC9863C00, 0xC984DB00, 0xC9837A00, + 0xC9821900, 0xC980B800, 0xC97F5700, + 0xC97DF600, 0xC97C9500, 0xC97B3400, + 0xC979D300, 0xC9787200, 0xC9771100, + 0xC975B000, 0xC9744F00, 0xC972EE00, + 0xC9718D00, 0xC9702C00, 0xC96ECB00, + 0xC96D6A00, 0xC96C0900, 0xC96AA800, + 0xC9694700, 0xC967E600, 0xC9668500, + 0xC9652400, 0xC963C300, 0xC9626200, + 0xC9610100, 0xC95FA000, 0xC95E3F00, + 0xC95CDE00, 0xC95B7D00, 0xC95A1C00, + 0xC958BB00, 0xC9575A00, 0xC955F900, + 0xC9549800, 0xC9533700, 0xC951D600, + 0xC9507500, 0xC94F1400, 0xC94DB300, + 0xC94C5200, 0xC94AF100, 0xC9499000, + 0xC9482F00, 0xC946CE00, 0xC9456D00, + 0xC9440C00, 0xC942AB00, 0xC9414A00, + 0xC93FE900, 0xC93E8800, 0xC93D2700, + 0xC93BC600, 0xC93A6500, 0xC9390400, + 0xC937A300, 0xC9364200, 0xC934E100, + 0xC9338000, 0xC9321F00, 0xC930BE00, + 0xC92F5D00, 0xC92DFC00, 0xC92C9B00, + 0xC92B3A00, 0xC929D900, 0xC9287800, + 0xC9271700, 0xC925B600, 0xC9245500, + 0xC922F400, 0xC9219300, 0xC9203200, + 0xC91ED100, 0xC91D7000, 0xC91C0F00, + 0xC91AAE00, 0xC9194D00, 0xC917EC00, + 0xC9168B00, 0xC9152A00, 0xC913C900, + 0xC9126800, 0xC9110700, 0xC90FA600, + 0xC90E4500, 0xC90CE400, 0xC90B8300, + 0xC90A2200, 0xC908C100, 0xC9076000, + 0xC905FF00, 0xC9049E00, 0xC9033D00, + 0xC901DC00, 0xC9007B00, 0xC8FF1A00, + 0xC8FDB900, 0xC8FC5800, 0xC8FAF700, + 0xC8F99600, 0xC8F83500, 0xC8F6D400, + 0xC8F57300, 0xC8F41200, 0xC8F2B100, + 0xC8F15000, 0xC8EFEF00, 0xC8EE8E00, + 0xC8ED2D00, 0xC8EBCC00, 0xC8EA6B00, + 0xC8E90A00, 0xC8E7A900, 0xC8E64800, + 0xC8E4E700, 0xC8E38600, 0xC8E22500, + 0xC8E0C400, 0xC8DF6300, 0xC8DE0200, + 0xC8DCA100, 0xC8DB4000, 0xC8D9DF00, + 0xC8D87E00, 0xC8D71D00, 0xC8D5BC00, + 0xC8D45B00, 0xC8D2FA00, 0xC8D19900, + 0xC8D03800, 0xC8CED700, 0xC8CD7600, + 0xC8CC1500, 0xC8CAB400, 0xC8C95300, + 0xC8C7F200, 0xC8C69100, 0xC8C53000, + 0xC8C3CF00, 0xC8C26E00, 0xC8C10D00, + 0xC8BFAC00, 0xC8BE4B00, 0xC8BCEA00, + 0xC8BB8900, 0xC8BA2800, 0xC8B8C700, + 0xC8B76600, 0xC8B60500, 0xC8B4A400, + 0xC8B34300, 0xC8B1E200, 0xC8B08100, + 0xC8AF2000, 0xC8ADBF00, 0xC8AC5E00, + 0xC8AAFD00, 0xC8A99C00, 0xC8A83B00, + 0xC8A6DA00, 0xC8A57900, 0xC8A41800, + 0xC8A2B700, 0xC8A15600, 0xC89FF500, + 0xC89E9400, 0xC89D3300, 0xC89BD200, + 0xC89A7100, 0xC8991000, 0xC897AF00, + 0xC8964E00, 0xC894ED00, 0xC8938C00, + 0xC8922B00, 0xC890CA00, 0xC88F6900, + 0xC88E0800, 0xC88CA700, 0xC88B4600, + 0xC889E500, 0xC8888400, 0xC8872300, + 0xC885C200, 0xC8846100, 0xC8830000, + 0xC8819F00, 0xC8803E00, 0xC87EDD00, + 0xC87D7C00, 0xC87C1B00, 0xC87ABA00, + 0xC8795900, 0xC877F800, 0xC8769700, + 0xC8753600, 0xC873D500, 0xC8727400, + 0xC8711300, 0xC86FB200, 0xC86E5100, + 0xC86CF000, 0xC86B8F00, 0xC86A2E00, + 0xC868CD00, 0xC8676C00, 0xC8660B00, + 0xC864AA00, 0xC8634900, 0xC861E800, + 0xC8608700, 0xC85F2600, 0xC85DC500, + 0xC85C6400, 0xC85B0300, 0xC859A200, + 0xC8584100, 0xC856E000, 0xC8557F00, + 0xC8541E00, 0xC852BD00, 0xC8515C00, + 0xC84FFB00, 0xC84E9A00, 0xC84D3900, + 0xC84BD800, 0xC84A7700, 0xC8491600, + 0xC847B500, 0xC8465400, 0xC844F300, + 0xC8439200, 0xC8423100, 0xC840D000, + 0xC83F6F00, 0xC83E0E00, 0xC83CAD00, + 0xC83B4C00, 0xC839EB00, 0xC8388A00, + 0xC8372900, 0xC835C800, 0xC8346700, + 0xC8330600, 0xC831A500, 0xC8304400, + 0xC82EE300, 0xC82D8200, 0xC82C2100, + 0xC82AC000, 0xC8295F00, 0xC827FE00, + 0xC8269D00, 0xC8253C00, 0xC823DB00, + 0xC8227A00, 0xC8211900, 0xC81FB800, + 0xC81E5700, 0xC81CF600, 0xC81B9500, + 0xC81A3400, 0xC818D300, 0xC8177200, + 0xC8161100, 0xC814B000, 0xC8134F00, + 0xC811EE00, 0xC8108D00, 0xC80F2C00, + 0xC80DCB00, 0xC80C6A00, 0xC80B0900, + 0xC809A800, 0xC8084700, 0xC806E600, + 0xC8058500, 0xC8042400, 0xC802C300, + 0xC8016200, 0xC8000100, 0xC7FEA000, + 0xC7FD3F00, 0xC7FBDE00, 0xC7FA7D00, + 0xC7F91C00, 0xC7F7BB00, 0xC7F65A00, + 0xC7F4F900, 0xC7F39800, 0xC7F23700, + 0xC7F0D600, 0xC7EF7500, 0xC7EE1400, + 0xC7ECB300, 0xC7EB5200, 0xC7E9F100, + 0xC7E89000, 0xC7E72F00, 0xC7E5CE00, + 0xC7E46D00, 0xC7E30C00, 0xC7E1AB00, + 0xC7E04A00, 0xC7DEE900, 0xC7DD8800, + 0xC7DC2700, 0xC7DAC600, 0xC7D96500, + 0xC7D80400, 0xC7D6A300, 0xC7D54200, + 0xC7D3E100, 0xC7D28000, 0xC7D11F00, + 0xC7CFBE00, 0xC7CE5D00, 0xC7CCFC00, + 0xC7CB9B00, 0xC7CA3A00, 0xC7C8D900, + 0xC7C77800, 0xC7C61700, 0xC7C4B600, + 0xC7C35500, 0xC7C1F400, 0xC7C09300, + 0xC7BF3200, 0xC7BDD100, 0xC7BC7000, + 0xC7BB0F00, 0xC7B9AE00, 0xC7B84D00, + 0xC7B6EC00, 0xC7B58B00, 0xC7B42A00, + 0xC7B2C900, 0xC7B16800, 0xC7B00700, + 0xC7AEA600, 0xC7AD4500, 0xC7ABE400, + 0xC7AA8300, 0xC7A92200, 0xC7A7C100, + 0xC7A66000, 0xC7A4FF00, 0xC7A39E00, + 0xC7A23D00, 0xC7A0DC00, 0xC79F7B00, + 0xC79E1A00, 0xC79CB900, 0xC79B5800, + 0xC799F700, 0xC7989600, 0xC7973500, + 0xC795D400, 0xC7947300, 0xC7931200, + 0xC791B100, 0xC7905000, 0xC78EEF00, + 0xC78D8E00, 0xC78C2D00, 0xC78ACC00, + 0xC7896B00, 0xC7880A00, 0xC786A900, + 0xC7854800, 0xC783E700, 0xC7828600, + 0xC7812500, 0xC77FC400, 0xC77E6300, + 0xC77D0200, 0xC77BA100, 0xC77A4000, + 0xC778DF00, 0xC7777E00, 0xC7761D00, + 0xC774BC00, 0xC7735B00, 0xC771FA00, + 0xC7709900, 0xC76F3800, 0xC76DD700, + 0xC76C7600, 0xC76B1500, 0xC769B400, + 0xC7685300, 0xC766F200, 0xC7659100, + 0xC7643000, 0xC762CF00, 0xC7616E00, + 0xC7600D00, 0xC75EAC00, 0xC75D4B00, + 0xC75BEA00, 0xC75A8900, 0xC7592800, + 0xC757C700, 0xC7566600, 0xC7550500, + 0xC753A400, 0xC7524300, 0xC750E200, + 0xC74F8100, 0xC74E2000, 0xC74CBF00, + 0xC74B5E00, 0xC749FD00, 0xC7489C00, + 0xC7473B00, 0xC745DA00, 0xC7447900, + 0xC7431800, 0xC741B700, 0xC7405600, + 0xC73EF500, 0xC73D9400, 0xC73C3300, + 0xC73AD200, 0xC7397100, 0xC7381000, + 0xC736AF00, 0xC7354E00, 0xC733ED00, + 0xC7328C00, 0xC7312B00, 0xC72FCA00, + 0xC72E6900, 0xC72D0800, 0xC72BA700, + 0xC72A4600, 0xC728E500, 0xC7278400, + 0xC7262300, 0xC724C200, 0xC7236100, + 0xC7220000, 0xC7209F00, 0xC71F3E00, + 0xC71DDD00, 0xC71C7C00, 0xC71B1B00, + 0xC719BA00, 0xC7185900, 0xC716F800, + 0xC7159700, 0xC7143600, 0xC712D500, + 0xC7117400, 0xC7101300, 0xC70EB200, + 0xC70D5100, 0xC70BF000, 0xC70A8F00, + 0xC7092E00, 0xC707CD00, 0xC7066C00, + 0xC7050B00, 0xC703AA00, 0xC7024900, + 0xC700E800, 0xC6FF8700, 0xC6FE2600, + 0xC6FCC500, 0xC6FB6400, 0xC6FA0300, + 0xC6F8A200, 0xC6F74100, 0xC6F5E000, + 0xC6F47F00, 0xC6F31E00, 0xC6F1BD00, + 0xC6F05C00, 0xC6EEFB00, 0xC6ED9A00, + 0xC6EC3900, 0xC6EAD800, 0xC6E97700, + 0xC6E81600, 0xC6E6B500, 0xC6E55400, + 0xC6E3F300, 0xC6E29200, 0xC6E13100, + 0xC6DFD000, 0xC6DE6F00, 0xC6DD0E00, + 0xC6DBAD00, 0xC6DA4C00, 0xC6D8EB00, + 0xC6D78A00, 0xC6D62900, 0xC6D4C800, + 0xC6D36700, 0xC6D20600, 0xC6D0A500, + 0xC6CF4400, 0xC6CDE300, 0xC6CC8200, + 0xC6CB2100, 0xC6C9C000, 0xC6C85F00, + 0xC6C6FE00, 0xC6C59D00, 0xC6C43C00, + 0xC6C2DB00, 0xC6C17A00, 0xC6C01900, + 0xC6BEB800, 0xC6BD5700, 0xC6BBF600, + 0xC6BA9500, 0xC6B93400, 0xC6B7D300, + 0xC6B67200, 0xC6B51100, 0xC6B3B000, + 0xC6B24F00, 0xC6B0EE00, 0xC6AF8D00, + 0xC6AE2C00, 0xC6ACCB00, 0xC6AB6A00, + 0xC6AA0900, 0xC6A8A800, 0xC6A74700, + 0xC6A5E600, 0xC6A48500, 0xC6A32400, + 0xC6A1C300, 0xC6A06200, 0xC69F0100, + 0xC69DA000, 0xC69C3F00, 0xC69ADE00, + 0xC6997D00, 0xC6981C00, 0xC696BB00, + 0xC6955A00, 0xC693F900, 0xC6929800, + 0xC6913700, 0xC68FD600, 0xC68E7500, + 0xC68D1400, 0xC68BB300, 0xC68A5200, + 0xC688F100, 0xC6879000, 0xC6862F00, + 0xC684CE00, 0xC6836D00, 0xC6820C00, + 0xC680AB00, 0xC67F4A00, 0xC67DE900, + 0xC67C8800, 0xC67B2700, 0xC679C600, + 0xC6786500, 0xC6770400, 0xC675A300, + 0xC6744200, 0xC672E100, 0xC6718000, + 0xC6701F00, 0xC66EBE00, 0xC66D5D00, + 0xC66BFC00, 0xC66A9B00, 0xC6693A00, + 0xC667D900, 0xC6667800, 0xC6651700, + 0xC663B600, 0xC6625500, 0xC660F400, + 0xC65F9300, 0xC65E3200, 0xC65CD100, + 0xC65B7000, 0xC65A0F00, 0xC658AE00, + 0xC6574D00, 0xC655EC00, 0xC6548B00, + 0xC6532A00, 0xC651C900, 0xC6506800, + 0xC64F0700, 0xC64DA600, 0xC64C4500, + 0xC64AE400, 0xC6498300, 0xC6482200, + 0xC646C100, 0xC6456000, 0xC643FF00, + 0xC6429E00, 0xC6413D00, 0xC63FDC00, + 0xC63E7B00, 0xC63D1A00, 0xC63BB900, + 0xC63A5800, 0xC638F700, 0xC6379600, + 0xC6363500, 0xC634D400, 0xC6337300, + 0xC6321200, 0xC630B100, 0xC62F5000, + 0xC62DEF00, 0xC62C8E00, 0xC62B2D00, + 0xC629CC00, 0xC6286B00, 0xC6270A00, + 0xC625A900, 0xC6244800, 0xC622E700, + 0xC6218600, 0xC6202500, 0xC61EC400, + 0xC61D6300, 0xC61C0200, 0xC61AA100, + 0xC6194000, 0xC617DF00, 0xC6167E00, + 0xC6151D00, 0xC613BC00, 0xC6125B00, + 0xC610FA00, 0xC60F9900, 0xC60E3800, + 0xC60CD700, 0xC60B7600, 0xC60A1500, + 0xC608B400, 0xC6075300, 0xC605F200, + 0xC6049100, 0xC6033000, 0xC601CF00, + 0xC6006E00, 0xC5FF0D00, 0xC5FDAC00, + 0xC5FC4B00, 0xC5FAEA00, 0xC5F98900, + 0xC5F82800, 0xC5F6C700, 0xC5F56600, + 0xC5F40500, 0xC5F2A400, 0xC5F14300, + 0xC5EFE200, 0xC5EE8100, 0xC5ED2000, + 0xC5EBBF00, 0xC5EA5E00, 0xC5E8FD00, + 0xC5E79C00, 0xC5E63B00, 0xC5E4DA00, + 0xC5E37900, 0xC5E21800, 0xC5E0B700, + 0xC5DF5600, 0xC5DDF500, 0xC5DC9400, + 0xC5DB3300, 0xC5D9D200, 0xC5D87100, + 0xC5D71000, 0xC5D5AF00, 0xC5D44E00, + 0xC5D2ED00, 0xC5D18C00, 0xC5D02B00, + 0xC5CECA00, 0xC5CD6900, 0xC5CC0800, + 0xC5CAA700, 0xC5C94600, 0xC5C7E500, + 0xC5C68400, 0xC5C52300, 0xC5C3C200, + 0xC5C26100, 0xC5C10000, 0xC5BF9F00, + 0xC5BE3E00, 0xC5BCDD00, 0xC5BB7C00, + 0xC5BA1B00, 0xC5B8BA00, 0xC5B75900, + 0xC5B5F800, 0xC5B49700, 0xC5B33600, + 0xC5B1D500, 0xC5B07400, 0xC5AF1300, + 0xC5ADB200, 0xC5AC5100, 0xC5AAF000, + 0xC5A98F00, 0xC5A82E00, 0xC5A6CD00, + 0xC5A56C00, 0xC5A40B00, 0xC5A2AA00, + 0xC5A14900, 0xC59FE800, 0xC59E8700, + 0xC59D2600, 0xC59BC500, 0xC59A6400, + 0xC5990300, 0xC597A200, 0xC5964100, + 0xC594E000, 0xC5937F00, 0xC5921E00, + 0xC590BD00, 0xC58F5C00, 0xC58DFB00, + 0xC58C9A00, 0xC58B3900, 0xC589D800, + 0xC5887700, 0xC5871600, 0xC585B500, + 0xC5845400, 0xC582F300, 0xC5819200, + 0xC5803100, 0xC57ED000, 0xC57D6F00, + 0xC57C0E00, 0xC57AAD00, 0xC5794C00, + 0xC577EB00, 0xC5768A00, 0xC5752900, + 0xC573C800, 0xC5726700, 0xC5710600, + 0xC56FA500, 0xC56E4400, 0xC56CE300, + 0xC56B8200, 0xC56A2100, 0xC568C000, + 0xC5675F00, 0xC565FE00, 0xC5649D00, + 0xC5633C00, 0xC561DB00, 0xC5607A00, + 0xC55F1900, 0xC55DB800, 0xC55C5700, + 0xC55AF600, 0xC5599500, 0xC5583400, + 0xC556D300, 0xC5557200, 0xC5541100, + 0xC552B000, 0xC5514F00, 0xC54FEE00, + 0xC54E8D00, 0xC54D2C00, 0xC54BCB00, + 0xC54A6A00, 0xC5490900, 0xC547A800, + 0xC5464700, 0xC544E600, 0xC5438500, + 0xC5422400, 0xC540C300, 0xC53F6200, + 0xC53E0100, 0xC53CA000, 0xC53B3F00, + 0xC539DE00, 0xC5387D00, 0xC5371C00, + 0xC535BB00, 0xC5345A00, 0xC532F900, + 0xC5319800, 0xC5303700, 0xC52ED600, + 0xC52D7500, 0xC52C1400, 0xC52AB300, + 0xC5295200, 0xC527F100, 0xC5269000, + 0xC5252F00, 0xC523CE00, 0xC5226D00, + 0xC5210C00, 0xC51FAB00, 0xC51E4A00, + 0xC51CE900, 0xC51B8800, 0xC51A2700, + 0xC518C600, 0xC5176500, 0xC5160400, + 0xC514A300, 0xC5134200, 0xC511E100, + 0xC5108000, 0xC50F1F00, 0xC50DBE00, + 0xC50C5D00, 0xC50AFC00, 0xC5099B00, + 0xC5083A00, 0xC506D900, 0xC5057800, + 0xC5041700, 0xC502B600, 0xC5015500, + 0xC4FFF400, 0xC4FE9300, 0xC4FD3200, + 0xC4FBD100, 0xC4FA7000, 0xC4F90F00, + 0xC4F7AE00, 0xC4F64D00, 0xC4F4EC00, + 0xC4F38B00, 0xC4F22A00, 0xC4F0C900, + 0xC4EF6800, 0xC4EE0700, 0xC4ECA600, + 0xC4EB4500, 0xC4E9E400, 0xC4E88300, + 0xC4E72200, 0xC4E5C100, 0xC4E46000, + 0xC4E2FF00, 0xC4E19E00, 0xC4E03D00, + 0xC4DEDC00, 0xC4DD7B00, 0xC4DC1A00, + 0xC4DAB900, 0xC4D95800, 0xC4D7F700, + 0xC4D69600, 0xC4D53500, 0xC4D3D400, + 0xC4D27300, 0xC4D11200, 0xC4CFB100, + 0xC4CE5000, 0xC4CCEF00, 0xC4CB8E00, + 0xC4CA2D00, 0xC4C8CC00, 0xC4C76B00, + 0xC4C60A00, 0xC4C4A900, 0xC4C34800, + 0xC4C1E700, 0xC4C08600, 0xC4BF2500, + 0xC4BDC400, 0xC4BC6300, 0xC4BB0200, + 0xC4B9A100, 0xC4B84000, 0xC4B6DF00, + 0xC4B57E00, 0xC4B41D00, 0xC4B2BC00, + 0xC4B15B00, 0xC4AFFA00, 0xC4AE9900, + 0xC4AD3800, 0xC4ABD700, 0xC4AA7600, + 0xC4A91500, 0xC4A7B400, 0xC4A65300, + 0xC4A4F200, 0xC4A39100, 0xC4A23000, + 0xC4A0CF00, 0xC49F6E00, 0xC49E0D00, + 0xC49CAC00, 0xC49B4B00, 0xC499EA00, + 0xC4988900, 0xC4972800, 0xC495C700, + 0xC4946600, 0xC4930500, 0xC491A400, + 0xC4904300, 0xC48EE200, 0xC48D8100, + 0xC48C2000, 0xC48ABF00, 0xC4895E00, + 0xC487FD00, 0xC4869C00, 0xC4853B00, + 0xC483DA00, 0xC4827900, 0xC4811800, + 0xC47FB700, 0xC47E5600, 0xC47CF500, + 0xC47B9400, 0xC47A3300, 0xC478D200, + 0xC4777100, 0xC4761000, 0xC474AF00, + 0xC4734E00, 0xC471ED00, 0xC4708C00, + 0xC46F2B00, 0xC46DCA00, 0xC46C6900, + 0xC46B0800, 0xC469A700, 0xC4684600, + 0xC466E500, 0xC4658400, 0xC4642300, + 0xC462C200, 0xC4616100, 0xC4600000, + 0xC45E9F00, 0xC45D3E00, 0xC45BDD00, + 0xC45A7C00, 0xC4591B00, 0xC457BA00, + 0xC4565900, 0xC454F800, 0xC4539700, + 0xC4523600, 0xC450D500, 0xC44F7400, + 0xC44E1300, 0xC44CB200, 0xC44B5100, + 0xC449F000, 0xC4488F00, 0xC4472E00, + 0xC445CD00, 0xC4446C00, 0xC4430B00, + 0xC441AA00, 0xC4404900, 0xC43EE800, + 0xC43D8700, 0xC43C2600, 0xC43AC500, + 0xC4396400, 0xC4380300, 0xC436A200, + 0xC4354100, 0xC433E000, 0xC4327F00, + 0xC4311E00, 0xC42FBD00, 0xC42E5C00, + 0xC42CFB00, 0xC42B9A00, 0xC42A3900, + 0xC428D800, 0xC4277700, 0xC4261600, + 0xC424B500, 0xC4235400, 0xC421F300, + 0xC4209200, 0xC41F3100, 0xC41DD000, + 0xC41C6F00, 0xC41B0E00, 0xC419AD00, + 0xC4184C00, 0xC416EB00, 0xC4158A00, + 0xC4142900, 0xC412C800, 0xC4116700, + 0xC4100600, 0xC40EA500, 0xC40D4400, + 0xC40BE300, 0xC40A8200, 0xC4092100, + 0xC407C000, 0xC4065F00, 0xC404FE00, + 0xC4039D00, 0xC4023C00, 0xC400DB00, + 0xC3FF7A00, 0xC3FE1900, 0xC3FCB800, + 0xC3FB5700, 0xC3F9F600, 0xC3F89500, + 0xC3F73400, 0xC3F5D300, 0xC3F47200, + 0xC3F31100, 0xC3F1B000, 0xC3F04F00, + 0xC3EEEE00, 0xC3ED8D00, 0xC3EC2C00, + 0xC3EACB00, 0xC3E96A00, 0xC3E80900, + 0xC3E6A800, 0xC3E54700, 0xC3E3E600, + 0xC3E28500, 0xC3E12400, 0xC3DFC300, + 0xC3DE6200, 0xC3DD0100, 0xC3DBA000, + 0xC3DA3F00, 0xC3D8DE00, 0xC3D77D00, + 0xC3D61C00, 0xC3D4BB00, 0xC3D35A00, + 0xC3D1F900, 0xC3D09800, 0xC3CF3700, + 0xC3CDD600, 0xC3CC7500, 0xC3CB1400, + 0xC3C9B300, 0xC3C85200, 0xC3C6F100, + 0xC3C59000, 0xC3C42F00, 0xC3C2CE00, + 0xC3C16D00, 0xC3C00C00, 0xC3BEAB00, + 0xC3BD4A00, 0xC3BBE900, 0xC3BA8800, + 0xC3B92700, 0xC3B7C600, 0xC3B66500, + 0xC3B50400, 0xC3B3A300, 0xC3B24200, + 0xC3B0E100, 0xC3AF8000, 0xC3AE1F00, + 0xC3ACBE00, 0xC3AB5D00, 0xC3A9FC00, + 0xC3A89B00, 0xC3A73A00, 0xC3A5D900, + 0xC3A47800, 0xC3A31700, 0xC3A1B600, + 0xC3A05500, 0xC39EF400, 0xC39D9300, + 0xC39C3200, 0xC39AD100, 0xC3997000, + 0xC3980F00, 0xC396AE00, 0xC3954D00, + 0xC393EC00, 0xC3928B00, 0xC3912A00, + 0xC38FC900, 0xC38E6800, 0xC38D0700, + 0xC38BA600, 0xC38A4500, 0xC388E400, + 0xC3878300, 0xC3862200, 0xC384C100, + 0xC3836000, 0xC381FF00, 0xC3809E00, + 0xC37F3D00, 0xC37DDC00, 0xC37C7B00, + 0xC37B1A00, 0xC379B900, 0xC3785800, + 0xC376F700, 0xC3759600, 0xC3743500, + 0xC372D400, 0xC3717300, 0xC3701200, + 0xC36EB100, 0xC36D5000, 0xC36BEF00, + 0xC36A8E00, 0xC3692D00, 0xC367CC00, + 0xC3666B00, 0xC3650A00, 0xC363A900, + 0xC3624800, 0xC360E700, 0xC35F8600, + 0xC35E2500, 0xC35CC400, 0xC35B6300, + 0xC35A0200, 0xC358A100, 0xC3574000, + 0xC355DF00, 0xC3547E00, 0xC3531D00, + 0xC351BC00, 0xC3505B00, 0xC34EFA00, + 0xC34D9900, 0xC34C3800, 0xC34AD700, + 0xC3497600, 0xC3481500, 0xC346B400, + 0xC3455300, 0xC343F200, 0xC3429100, + 0xC3413000, 0xC33FCF00, 0xC33E6E00, + 0xC33D0D00, 0xC33BAC00, 0xC33A4B00, + 0xC338EA00, 0xC3378900, 0xC3362800, + 0xC334C700, 0xC3336600, 0xC3320500, + 0xC330A400, 0xC32F4300, 0xC32DE200, + 0xC32C8100, 0xC32B2000, 0xC329BF00, + 0xC3285E00, 0xC326FD00, 0xC3259C00, + 0xC3243B00, 0xC322DA00, 0xC3217900, + 0xC3201800, 0xC31EB700, 0xC31D5600, + 0xC31BF500, 0xC31A9400, 0xC3193300, + 0xC317D200, 0xC3167100, 0xC3151000, + 0xC313AF00, 0xC3124E00, 0xC310ED00, + 0xC30F8C00, 0xC30E2B00, 0xC30CCA00, + 0xC30B6900, 0xC30A0800, 0xC308A700, + 0xC3074600, 0xC305E500, 0xC3048400, + 0xC3032300, 0xC301C200, 0xC3006100, + 0xC2FF0000, 0xC2FD9F00, 0xC2FC3E00, + 0xC2FADD00, 0xC2F97C00, 0xC2F81B00, + 0xC2F6BA00, 0xC2F55900, 0xC2F3F800, + 0xC2F29700, 0xC2F13600, 0xC2EFD500, + 0xC2EE7400, 0xC2ED1300, 0xC2EBB200, + 0xC2EA5100, 0xC2E8F000, 0xC2E78F00, + 0xC2E62E00, 0xC2E4CD00, 0xC2E36C00, + 0xC2E20B00, 0xC2E0AA00, 0xC2DF4900, + 0xC2DDE800, 0xC2DC8700, 0xC2DB2600, + 0xC2D9C500, 0xC2D86400, 0xC2D70300, + 0xC2D5A200, 0xC2D44100, 0xC2D2E000, + 0xC2D17F00, 0xC2D01E00, 0xC2CEBD00, + 0xC2CD5C00, 0xC2CBFB00, 0xC2CA9A00, + 0xC2C93900, 0xC2C7D800, 0xC2C67700, + 0xC2C51600, 0xC2C3B500, 0xC2C25400, + 0xC2C0F300, 0xC2BF9200, 0xC2BE3100, + 0xC2BCD000, 0xC2BB6F00, 0xC2BA0E00, + 0xC2B8AD00, 0xC2B74C00, 0xC2B5EB00, + 0xC2B48A00, 0xC2B32900, 0xC2B1C800, + 0xC2B06700, 0xC2AF0600, 0xC2ADA500, + 0xC2AC4400, 0xC2AAE300, 0xC2A98200, + 0xC2A82100, 0xC2A6C000, 0xC2A55F00, + 0xC2A3FE00, 0xC2A29D00, 0xC2A13C00, + 0xC29FDB00, 0xC29E7A00, 0xC29D1900, + 0xC29BB800, 0xC29A5700, 0xC298F600, + 0xC2979500, 0xC2963400, 0xC294D300, + 0xC2937200, 0xC2921100, 0xC290B000, + 0xC28F4F00, 0xC28DEE00, 0xC28C8D00, + 0xC28B2C00, 0xC289CB00, 0xC2886A00, + 0xC2870900, 0xC285A800, 0xC2844700, + 0xC282E600, 0xC2818500, 0xC2802400, + 0xC27EC300, 0xC27D6200, 0xC27C0100, + 0xC27AA000, 0xC2793F00, 0xC277DE00, + 0xC2767D00, 0xC2751C00, 0xC273BB00, + 0xC2725A00, 0xC270F900, 0xC26F9800, + 0xC26E3700, 0xC26CD600, 0xC26B7500, + 0xC26A1400, 0xC268B300, 0xC2675200, + 0xC265F100, 0xC2649000, 0xC2632F00, + 0xC261CE00, 0xC2606D00, 0xC25F0C00, + 0xC25DAB00, 0xC25C4A00, 0xC25AE900, + 0xC2598800, 0xC2582700, 0xC256C600, + 0xC2556500, 0xC2540400, 0xC252A300, + 0xC2514200, 0xC24FE100, 0xC24E8000, + 0xC24D1F00, 0xC24BBE00, 0xC24A5D00, + 0xC248FC00, 0xC2479B00, 0xC2463A00, + 0xC244D900, 0xC2437800, 0xC2421700, + 0xC240B600, 0xC23F5500, 0xC23DF400, + 0xC23C9300, 0xC23B3200, 0xC239D100, + 0xC2387000, 0xC2370F00, 0xC235AE00, + 0xC2344D00, 0xC232EC00, 0xC2318B00, + 0xC2302A00, 0xC22EC900, 0xC22D6800, + 0xC22C0700, 0xC22AA600, 0xC2294500, + 0xC227E400, 0xC2268300, 0xC2252200, + 0xC223C100, 0xC2226000, 0xC220FF00, + 0xC21F9E00, 0xC21E3D00, 0xC21CDC00, + 0xC21B7B00, 0xC21A1A00, 0xC218B900, + 0xC2175800, 0xC215F700, 0xC2149600, + 0xC2133500, 0xC211D400, 0xC2107300, + 0xC20F1200, 0xC20DB100, 0xC20C5000, + 0xC20AEF00, 0xC2098E00, 0xC2082D00, + 0xC206CC00, 0xC2056B00, 0xC2040A00, + 0xC202A900, 0xC2014800, 0xC1FFE700, + 0xC1FE8600, 0xC1FD2500, 0xC1FBC400, + 0xC1FA6300, 0xC1F90200, 0xC1F7A100, + 0xC1F64000, 0xC1F4DF00, 0xC1F37E00, + 0xC1F21D00, 0xC1F0BC00, 0xC1EF5B00, + 0xC1EDFA00, 0xC1EC9900, 0xC1EB3800, + 0xC1E9D700, 0xC1E87600, 0xC1E71500, + 0xC1E5B400, 0xC1E45300, 0xC1E2F200, + 0xC1E19100, 0xC1E03000, 0xC1DECF00, + 0xC1DD6E00, 0xC1DC0D00, 0xC1DAAC00, + 0xC1D94B00, 0xC1D7EA00, 0xC1D68900, + 0xC1D52800, 0xC1D3C700, 0xC1D26600, + 0xC1D10500, 0xC1CFA400, 0xC1CE4300, + 0xC1CCE200, 0xC1CB8100, 0xC1CA2000, + 0xC1C8BF00, 0xC1C75E00, 0xC1C5FD00, + 0xC1C49C00, 0xC1C33B00, 0xC1C1DA00, + 0xC1C07900, 0xC1BF1800, 0xC1BDB700, + 0xC1BC5600, 0xC1BAF500, 0xC1B99400, + 0xC1B83300, 0xC1B6D200, 0xC1B57100, + 0xC1B41000, 0xC1B2AF00, 0xC1B14E00, + 0xC1AFED00, 0xC1AE8C00, 0xC1AD2B00, + 0xC1ABCA00, 0xC1AA6900, 0xC1A90800, + 0xC1A7A700, 0xC1A64600, 0xC1A4E500, + 0xC1A38400, 0xC1A22300, 0xC1A0C200, + 0xC19F6100, 0xC19E0000, 0xC19C9F00, + 0xC19B3E00, 0xC199DD00, 0xC1987C00, + 0xC1971B00, 0xC195BA00, 0xC1945900, + 0xC192F800, 0xC1919700, 0xC1903600, + 0xC18ED500, 0xC18D7400, 0xC18C1300, + 0xC18AB200, 0xC1895100, 0xC187F000, + 0xC1868F00, 0xC1852E00, 0xC183CD00, + 0xC1826C00, 0xC1810B00, 0xC17FAA00, + 0xC17E4900, 0xC17CE800, 0xC17B8700, + 0xC17A2600, 0xC178C500, 0xC1776400, + 0xC1760300, 0xC174A200, 0xC1734100, + 0xC171E000, 0xC1707F00, 0xC16F1E00, + 0xC16DBD00, 0xC16C5C00, 0xC16AFB00, + 0xC1699A00, 0xC1683900, 0xC166D800, + 0xC1657700, 0xC1641600, 0xC162B500, + 0xC1615400, 0xC15FF300, 0xC15E9200, + 0xC15D3100, 0xC15BD000, 0xC15A6F00, + 0xC1590E00, 0xC157AD00, 0xC1564C00, + 0xC154EB00, 0xC1538A00, 0xC1522900, + 0xC150C800, 0xC14F6700, 0xC14E0600, + 0xC14CA500, 0xC14B4400, 0xC149E300, + 0xC1488200, 0xC1472100, 0xC145C000, + 0xC1445F00, 0xC142FE00, 0xC1419D00, + 0xC1403C00, 0xC13EDB00, 0xC13D7A00, + 0xC13C1900, 0xC13AB800, 0xC1395700, + 0xC137F600, 0xC1369500, 0xC1353400, + 0xC133D300, 0xC1327200, 0xC1311100, + 0xC12FB000, 0xC12E4F00, 0xC12CEE00, + 0xC12B8D00, 0xC12A2C00, 0xC128CB00, + 0xC1276A00, 0xC1260900, 0xC124A800, + 0xC1234700, 0xC121E600, 0xC1208500, + 0xC11F2400, 0xC11DC300, 0xC11C6200, + 0xC11B0100, 0xC119A000, 0xC1183F00, + 0xC116DE00, 0xC1157D00, 0xC1141C00, + 0xC112BB00, 0xC1115A00, 0xC10FF900, + 0xC10E9800, 0xC10D3700, 0xC10BD600, + 0xC10A7500, 0xC1091400, 0xC107B300, + 0xC1065200, 0xC104F100, 0xC1039000, + 0xC1022F00, 0xC100CE00, 0xC0FF6D00, + 0xC0FE0C00, 0xC0FCAB00, 0xC0FB4A00, + 0xC0F9E900, 0xC0F88800, 0xC0F72700, + 0xC0F5C600, 0xC0F46500, 0xC0F30400, + 0xC0F1A300, 0xC0F04200, 0xC0EEE100, + 0xC0ED8000, 0xC0EC1F00, 0xC0EABE00, + 0xC0E95D00, 0xC0E7FC00, 0xC0E69B00, + 0xC0E53A00, 0xC0E3D900, 0xC0E27800, + 0xC0E11700, 0xC0DFB600, 0xC0DE5500, + 0xC0DCF400, 0xC0DB9300, 0xC0DA3200, + 0xC0D8D100, 0xC0D77000, 0xC0D60F00, + 0xC0D4AE00, 0xC0D34D00, 0xC0D1EC00, + 0xC0D08B00, 0xC0CF2A00, 0xC0CDC900, + 0xC0CC6800, 0xC0CB0700, 0xC0C9A600, + 0xC0C84500, 0xC0C6E400, 0xC0C58300, + 0xC0C42200, 0xC0C2C100, 0xC0C16000, + 0xC0BFFF00, 0xC0BE9E00, 0xC0BD3D00, + 0xC0BBDC00, 0xC0BA7B00, 0xC0B91A00, + 0xC0B7B900, 0xC0B65800, 0xC0B4F700, + 0xC0B39600, 0xC0B23500, 0xC0B0D400, + 0xC0AF7300, 0xC0AE1200, 0xC0ACB100, + 0xC0AB5000, 0xC0A9EF00, 0xC0A88E00, + 0xC0A72D00, 0xC0A5CC00, 0xC0A46B00, + 0xC0A30A00, 0xC0A1A900, 0xC0A04800, + 0xC09EE700, 0xC09D8600, 0xC09C2500, + 0xC09AC400, 0xC0996300, 0xC0980200, + 0xC096A100, 0xC0954000, 0xC093DF00, + 0xC0927E00, 0xC0911D00, 0xC08FBC00, + 0xC08E5B00, 0xC08CFA00, 0xC08B9900, + 0xC08A3800, 0xC088D700, 0xC0877600, + 0xC0861500, 0xC084B400, 0xC0835300, + 0xC081F200, 0xC0809100, 0xC07F3000, + 0xC07DCF00, 0xC07C6E00, 0xC07B0D00, + 0xC079AC00, 0xC0784B00, 0xC076EA00, + 0xC0758900, 0xC0742800, 0xC072C700, + 0xC0716600, 0xC0700500, 0xC06EA400, + 0xC06D4300, 0xC06BE200, 0xC06A8100, + 0xC0692000, 0xC067BF00, 0xC0665E00, + 0xC064FD00, 0xC0639C00, 0xC0623B00, + 0xC060DA00, 0xC05F7900, 0xC05E1800, + 0xC05CB700, 0xC05B5600, 0xC059F500, + 0xC0589400, 0xC0573300, 0xC055D200, + 0xC0547100, 0xC0531000, 0xC051AF00, + 0xC0504E00, 0xC04EED00, 0xC04D8C00, + 0xC04C2B00, 0xC04ACA00, 0xC0496900, + 0xC0480800, 0xC046A700, 0xC0454600, + 0xC043E500, 0xC0428400, 0xC0412300, + 0xC03FC200, 0xC03E6100, 0xC03D0000, + 0xC03B9F00, 0xC03A3E00, 0xC038DD00, + 0xC0377C00, 0xC0361B00, 0xC034BA00, + 0xC0335900, 0xC031F800, 0xC0309700, + 0xC02F3600, 0xC02DD500, 0xC02C7400, + 0xC02B1300, 0xC029B200, 0xC0285100, + 0xC026F000, 0xC0258F00, 0xC0242E00, + 0xC022CD00, 0xC0216C00, 0xC0200B00, + 0xC01EAA00, 0xC01D4900, 0xC01BE800, + 0xC01A8700, 0xC0192600, 0xC017C500, + 0xC0166400, 0xC0150300, 0xC013A200, + 0xC0124100, 0xC010E000, 0xC00F7F00, + 0xC00E1E00, 0xC00CBD00, 0xC00B5C00, + 0xC009FB00, 0xC0089A00, 0xC0073900, + 0xC005D800, 0xC0047700, 0xC0031600, + 0xC001B500, 0xC0005400, 0xBFFEF300, + 0xBFFD9200, 0xBFFC3100, 0xBFFAD000, + 0xBFF96F00, 0xBFF80E00, 0xBFF6AD00, + 0xBFF54C00, 0xBFF3EB00, 0xBFF28A00, + 0xBFF12900, 0xBFEFC800, 0xBFEE6700, + 0xBFED0600, 0xBFEBA500, 0xBFEA4400, + 0xBFE8E300, 0xBFE78200, 0xBFE62100, + 0xBFE4C000, 0xBFE35F00, 0xBFE1FE00, + 0xBFE09D00, 0xBFDF3C00, 0xBFDDDB00, + 0xBFDC7A00, 0xBFDB1900, 0xBFD9B800, + 0xBFD85700, 0xBFD6F600, 0xBFD59500, + 0xBFD43400, 0xBFD2D300, 0xBFD17200, + 0xBFD01100, 0xBFCEB000, 0xBFCD4F00, + 0xBFCBEE00, 0xBFCA8D00, 0xBFC92C00, + 0xBFC7CB00, 0xBFC66A00, 0xBFC50900, + 0xBFC3A800, 0xBFC24700, 0xBFC0E600, + 0xBFBF8500, 0xBFBE2400, 0xBFBCC300, + 0xBFBB6200, 0xBFBA0100, 0xBFB8A000, + 0xBFB73F00, 0xBFB5DE00, 0xBFB47D00, + 0xBFB31C00, 0xBFB1BB00, 0xBFB05A00, + 0xBFAEF900, 0xBFAD9800, 0xBFAC3700, + 0xBFAAD600, 0xBFA97500, 0xBFA81400, + 0xBFA6B300, 0xBFA55200, 0xBFA3F100, + 0xBFA29000, 0xBFA12F00, 0xBF9FCE00, + 0xBF9E6D00, 0xBF9D0C00, 0xBF9BAB00, + 0xBF9A4A00, 0xBF98E900, 0xBF978800, + 0xBF962700, 0xBF94C600, 0xBF936500, + 0xBF920400, 0xBF90A300, 0xBF8F4200, + 0xBF8DE100, 0xBF8C8000, 0xBF8B1F00, + 0xBF89BE00, 0xBF885D00, 0xBF86FC00, + 0xBF859B00, 0xBF843A00, 0xBF82D900, + 0xBF817800, 0xBF801700, 0xBF7EB600, + 0xBF7D5500, 0xBF7BF400, 0xBF7A9300, + 0xBF793200, 0xBF77D100, 0xBF767000, + 0xBF750F00, 0xBF73AE00, 0xBF724D00, + 0xBF70EC00, 0xBF6F8B00, 0xBF6E2A00, + 0xBF6CC900, 0xBF6B6800, 0xBF6A0700, + 0xBF68A600, 0xBF674500, 0xBF65E400, + 0xBF648300, 0xBF632200, 0xBF61C100, + 0xBF606000, 0xBF5EFF00, 0xBF5D9E00, + 0xBF5C3D00, 0xBF5ADC00, 0xBF597B00, + 0xBF581A00, 0xBF56B900, 0xBF555800, + 0xBF53F700, 0xBF529600, 0xBF513500, + 0xBF4FD400, 0xBF4E7300, 0xBF4D1200, + 0xBF4BB100, 0xBF4A5000, 0xBF48EF00, + 0xBF478E00, 0xBF462D00, 0xBF44CC00, + 0xBF436B00, 0xBF420A00, 0xBF40A900, + 0xBF3F4800, 0xBF3DE700, 0xBF3C8600, + 0xBF3B2500, 0xBF39C400, 0xBF386300, + 0xBF370200, 0xBF35A100, 0xBF344000, + 0xBF32DF00, 0xBF317E00, 0xBF301D00, + 0xBF2EBC00, 0xBF2D5B00, 0xBF2BFA00, + 0xBF2A9900, 0xBF293800, 0xBF27D700, + 0xBF267600, 0xBF251500, 0xBF23B400, + 0xBF225300, 0xBF20F200, 0xBF1F9100, + 0xBF1E3000, 0xBF1CCF00, 0xBF1B6E00, + 0xBF1A0D00, 0xBF18AC00, 0xBF174B00, + 0xBF15EA00, 0xBF148900, 0xBF132800, + 0xBF11C700, 0xBF106600, 0xBF0F0500, + 0xBF0DA400, 0xBF0C4300, 0xBF0AE200, + 0xBF098100, 0xBF082000, 0xBF06BF00, + 0xBF055E00, 0xBF03FD00, 0xBF029C00, + 0xBF013B00, 0xBEFFDA00, 0xBEFE7900, + 0xBEFD1800, 0xBEFBB700, 0xBEFA5600, + 0xBEF8F500, 0xBEF79400, 0xBEF63300, + 0xBEF4D200, 0xBEF37100, 0xBEF21000, + 0xBEF0AF00, 0xBEEF4E00, 0xBEEDED00, + 0xBEEC8C00, 0xBEEB2B00, 0xBEE9CA00, + 0xBEE86900, 0xBEE70800, 0xBEE5A700, + 0xBEE44600, 0xBEE2E500, 0xBEE18400, + 0xBEE02300, 0xBEDEC200, 0xBEDD6100, + 0xBEDC0000, 0xBEDAB700, 0xBED96E00, + 0xBED82500, 0xBED6DC00, 0xBED59300, + 0xBED44A00, 0xBED30100, 0xBED1B800, + 0xBED06F00, 0xBECF2600, 0xBECDDD00, + 0xBECC9400, 0xBECB4B00, 0xBECA0200, + 0xBEC8B900, 0xBEC77000, 0xBEC62700, + 0xBEC4DE00, 0xBEC39500, 0xBEC24C00, + 0xBEC10300, 0xBEBFBA00, 0xBEBE7100, + 0xBEBD2800, 0xBEBBDF00, 0xBEBA9600, + 0xBEB94D00, 0xBEB80400, 0xBEB6BB00, + 0xBEB57200, 0xBEB42900, 0xBEB2E000, + 0xBEB19700, 0xBEB04E00, 0xBEAF0500, + 0xBEADBC00, 0xBEAC7300, 0xBEAB2A00, + 0xBEA9E100, 0xBEA89800, 0xBEA74F00, + 0xBEA60600, 0xBEA4BD00, 0xBEA37400, + 0xBEA22B00, 0xBEA0E200, 0xBE9F9900, + 0xBE9E5000, 0xBE9D0700, 0xBE9BBE00, + 0xBE9A7500, 0xBE992C00, 0xBE97E300, + 0xBE969A00, 0xBE955100, 0xBE940800, + 0xBE92BF00, 0xBE917600, 0xBE902D00, + 0xBE8EE400, 0xBE8D9B00, 0xBE8C5200, + 0xBE8B0900, 0xBE89C000, 0xBE887700, + 0xBE872E00, 0xBE85E500, 0xBE849C00, + 0xBE835300, 0xBE820A00, 0xBE80C100, + 0xBE7F7800, 0xBE7E2F00, 0xBE7CE600, + 0xBE7B9D00, 0xBE7A5400, 0xBE790B00, + 0xBE77C200, 0xBE767900, 0xBE753000, + 0xBE73E700, 0xBE729E00, 0xBE715500, + 0xBE700C00, 0xBE6EC300, 0xBE6D7A00, + 0xBE6C3100, 0xBE6AE800, 0xBE699F00, + 0xBE685600, 0xBE670D00, 0xBE65C400, + 0xBE647B00, 0xBE633200, 0xBE61E900, + 0xBE60A000, 0xBE5F5700, 0xBE5E0E00, + 0xBE5CC500, 0xBE5B7C00, 0xBE5A3300, + 0xBE58EA00, 0xBE57A100, 0xBE565800, + 0xBE550F00, 0xBE53C600, 0xBE527D00, + 0xBE513400, 0xBE4FEB00, 0xBE4EA200, + 0xBE4D5900, 0xBE4C1000, 0xBE4AC700, + 0xBE497E00, 0xBE483500, 0xBE46EC00, + 0xBE45A300, 0xBE445A00, 0xBE431100, + 0xBE41C800, 0xBE407F00, 0xBE3F3600, + 0xBE3DED00, 0xBE3CA400, 0xBE3B5B00, + 0xBE3A1200, 0xBE38C900, 0xBE378000, + 0xBE363700, 0xBE34EE00, 0xBE33A500, + 0xBE325C00, 0xBE311300, 0xBE2FCA00, + 0xBE2E8100, 0xBE2D3800, 0xBE2BEF00, + 0xBE2AA600, 0xBE295D00, 0xBE281400, + 0xBE26CB00, 0xBE258200, 0xBE243900, + 0xBE22F000, 0xBE21A700, 0xBE205E00, + 0xBE1F1500, 0xBE1DCC00, 0xBE1C8300, + 0xBE1B3A00, 0xBE19F100, 0xBE18A800, + 0xBE175F00, 0xBE161600, 0xBE14CD00, + 0xBE138400, 0xBE123B00, 0xBE10F200, + 0xBE0FA900, 0xBE0E6000, 0xBE0D1700, + 0xBE0BCE00, 0xBE0A8500, 0xBE093C00, + 0xBE07F300, 0xBE06AA00, 0xBE056100, + 0xBE041800, 0xBE02CF00, 0xBE018600, + 0xBE003D00, 0xBDFEF400, 0xBDFDAB00, + 0xBDFC6200, 0xBDFB1900, 0xBDF9D000, + 0xBDF88700, 0xBDF73E00, 0xBDF5F500, + 0xBDF4AC00, 0xBDF36300, 0xBDF21A00, + 0xBDF0D100, 0xBDEF8800, 0xBDEE3F00, + 0xBDECF600, 0xBDEBAD00, 0xBDEA6400, + 0xBDE91B00, 0xBDE7D200, 0xBDE68900, + 0xBDE54000, 0xBDE3F700, 0xBDE2AE00, + 0xBDE16500, 0xBDE01C00, 0xBDDED300, + 0xBDDD8A00, 0xBDDC4100, 0xBDDAF800, + 0xBDD9AF00, 0xBDD86600, 0xBDD71D00, + 0xBDD5D400, 0xBDD48B00, 0xBDD34200, + 0xBDD1F900, 0xBDD0B000, 0xBDCF6700, + 0xBDCE1E00, 0xBDCCD500, 0xBDCB8C00, + 0xBDCA4300, 0xBDC8FA00, 0xBDC7B100, + 0xBDC66800, 0xBDC51F00, 0xBDC3D600, + 0xBDC28D00, 0xBDC14400, 0xBDBFFB00, + 0xBDBEB200, 0xBDBD6900, 0xBDBC2000, + 0xBDBAD700, 0xBDB98E00, 0xBDB84500, + 0xBDB6FC00, 0xBDB5B300, 0xBDB46A00, + 0xBDB32100, 0xBDB1D800, 0xBDB08F00, + 0xBDAF4600, 0xBDADFD00, 0xBDACB400, + 0xBDAB6B00, 0xBDAA2200, 0xBDA8D900, + 0xBDA79000, 0xBDA64700, 0xBDA4FE00, + 0xBDA3B500, 0xBDA26C00, 0xBDA12300, + 0xBD9FDA00, 0xBD9E9100, 0xBD9D4800, + 0xBD9BFF00, 0xBD9AB600, 0xBD996D00, + 0xBD982400, 0xBD96DB00, 0xBD959200, + 0xBD944900, 0xBD930000, 0xBD91B700, + 0xBD906E00, 0xBD8F2500, 0xBD8DDC00, + 0xBD8C9300, 0xBD8B4A00, 0xBD8A0100, + 0xBD88B800, 0xBD876F00, 0xBD862600, + 0xBD84DD00, 0xBD839400, 0xBD824B00, + 0xBD810200, 0xBD7FB900, 0xBD7E7000, + 0xBD7D2700, 0xBD7BDE00, 0xBD7A9500, + 0xBD794C00, 0xBD780300, 0xBD76BA00, + 0xBD757100, 0xBD742800, 0xBD72DF00, + 0xBD719600, 0xBD704D00, 0xBD6F0400, + 0xBD6DBB00, 0xBD6C7200, 0xBD6B2900, + 0xBD69E000, 0xBD689700, 0xBD674E00, + 0xBD660500, 0xBD64BC00, 0xBD637300, + 0xBD622A00, 0xBD60E100, 0xBD5F9800, + 0xBD5E4F00, 0xBD5D0600, 0xBD5BBD00, + 0xBD5A7400, 0xBD592B00, 0xBD57E200, + 0xBD569900, 0xBD555000, 0xBD540700, + 0xBD52BE00, 0xBD517500, 0xBD502C00, + 0xBD4EE300, 0xBD4D9A00, 0xBD4C5100, + 0xBD4B0800, 0xBD49BF00, 0xBD487600, + 0xBD472D00, 0xBD45E400, 0xBD449B00, + 0xBD435200, 0xBD420900, 0xBD40C000, + 0xBD3F7700, 0xBD3E2E00, 0xBD3CE500, + 0xBD3B9C00, 0xBD3A5300, 0xBD390A00, + 0xBD37C100, 0xBD367800, 0xBD352F00, + 0xBD33E600, 0xBD329D00, 0xBD315400, + 0xBD300B00, 0xBD2EC200, 0xBD2D7900, + 0xBD2C3000, 0xBD2AE700, 0xBD299E00, + 0xBD285500, 0xBD270C00, 0xBD25C300, + 0xBD247A00, 0xBD233100, 0xBD21E800, + 0xBD209F00, 0xBD1F5600, 0xBD1E0D00, + 0xBD1CC400, 0xBD1B7B00, 0xBD1A3200, + 0xBD18E900, 0xBD17A000, 0xBD165700, + 0xBD150E00, 0xBD13C500, 0xBD127C00, + 0xBD113300, 0xBD0FEA00, 0xBD0EA100, + 0xBD0D5800, 0xBD0C0F00, 0xBD0AC600, + 0xBD097D00, 0xBD083400, 0xBD06EB00, + 0xBD05A200, 0xBD045900, 0xBD031000, + 0xBD01C700, 0xBD007E00, 0xBCFF3500, + 0xBCFDEC00, 0xBCFCA300, 0xBCFB5A00, + 0xBCFA1100, 0xBCF8C800, 0xBCF77F00, + 0xBCF63600, 0xBCF4ED00, 0xBCF3A400, + 0xBCF25B00, 0xBCF11200, 0xBCEFC900, + 0xBCEE8000, 0xBCED3700, 0xBCEBEE00, + 0xBCEAA500, 0xBCE95C00, 0xBCE81300, + 0xBCE6CA00, 0xBCE58100, 0xBCE43800, + 0xBCE2EF00, 0xBCE1A600, 0xBCE05D00, + 0xBCDF1400, 0xBCDDCB00, 0xBCDC8200, + 0xBCDB3900, 0xBCD9F000, 0xBCD8A700, + 0xBCD75E00, 0xBCD61500, 0xBCD4CC00, + 0xBCD38300, 0xBCD23A00, 0xBCD0F100, + 0xBCCFA800, 0xBCCE5F00, 0xBCCD1600, + 0xBCCBCD00, 0xBCCA8400, 0xBCC93B00, + 0xBCC7F200, 0xBCC6A900, 0xBCC56000, + 0xBCC41700, 0xBCC2CE00, 0xBCC18500, + 0xBCC03C00, 0xBCBEF300, 0xBCBDAA00, + 0xBCBC6100, 0xBCBB1800, 0xBCB9CF00, + 0xBCB88600, 0xBCB73D00, 0xBCB5F400, + 0xBCB4AB00, 0xBCB36200, 0xBCB21900, + 0xBCB0D000, 0xBCAF8700, 0xBCAE3E00, + 0xBCACF500, 0xBCABAC00, 0xBCAA6300, + 0xBCA91A00, 0xBCA7D100, 0xBCA68800, + 0xBCA53F00, 0xBCA3F600, 0xBCA2AD00, + 0xBCA16400, 0xBCA01B00, 0xBC9ED200, + 0xBC9D8900, 0xBC9C4000, 0xBC9AF700, + 0xBC99AE00, 0xBC986500, 0xBC971C00, + 0xBC95D300, 0xBC948A00, 0xBC934100, + 0xBC91F800, 0xBC90AF00, 0xBC8F6600, + 0xBC8E1D00, 0xBC8CD400, 0xBC8B8B00, + 0xBC8A4200, 0xBC88F900, 0xBC87B000, + 0xBC866700, 0xBC851E00, 0xBC83D500, + 0xBC828C00, 0xBC814300, 0xBC7FFA00, + 0xBC7EB100, 0xBC7D6800, 0xBC7C1F00, + 0xBC7AD600, 0xBC798D00, 0xBC784400, + 0xBC76FB00, 0xBC75B200, 0xBC746900, + 0xBC732000, 0xBC71D700, 0xBC708E00, + 0xBC6F4500, 0xBC6DFC00, 0xBC6CB300, + 0xBC6B6A00, 0xBC6A2100, 0xBC68D800, + 0xBC678F00, 0xBC664600, 0xBC64FD00, + 0xBC63B400, 0xBC626B00, 0xBC612200, + 0xBC5FD900, 0xBC5E9000, 0xBC5D4700, + 0xBC5BFE00, 0xBC5AB500, 0xBC596C00, + 0xBC582300, 0xBC56DA00, 0xBC559100, + 0xBC544800, 0xBC52FF00, 0xBC51B600, + 0xBC506D00, 0xBC4F2400, 0xBC4DDB00, + 0xBC4C9200, 0xBC4B4900, 0xBC4A0000, + 0xBC48B700, 0xBC476E00, 0xBC462500, + 0xBC44DC00, 0xBC439300, 0xBC424A00, + 0xBC410100, 0xBC3FB800, 0xBC3E6F00, + 0xBC3D2600, 0xBC3BDD00, 0xBC3A9400, + 0xBC394B00, 0xBC380200, 0xBC36B900, + 0xBC357000, 0xBC342700, 0xBC32DE00, + 0xBC319500, 0xBC304C00, 0xBC2F0300, + 0xBC2DBA00, 0xBC2C7100, 0xBC2B2800, + 0xBC29DF00, 0xBC289600, 0xBC274D00, + 0xBC260400, 0xBC24BB00, 0xBC237200, + 0xBC222900, 0xBC20E000, 0xBC1F9700, + 0xBC1E4E00, 0xBC1D0500, 0xBC1BBC00, + 0xBC1A7300, 0xBC192A00, 0xBC17E100, + 0xBC169800, 0xBC154F00, 0xBC140600, + 0xBC12BD00, 0xBC117400, 0xBC102B00, + 0xBC0EE200, 0xBC0D9900, 0xBC0C5000, + 0xBC0B0700, 0xBC09BE00, 0xBC087500, + 0xBC072C00, 0xBC05E300, 0xBC049A00, + 0xBC035100, 0xBC020800, 0xBC00BF00, + 0xBBFF7600, 0xBBFE2D00, 0xBBFCE400, + 0xBBFB9B00, 0xBBFA5200, 0xBBF90900, + 0xBBF7C000, 0xBBF67700, 0xBBF52E00, + 0xBBF3E500, 0xBBF29C00, 0xBBF15300, + 0xBBF00A00, 0xBBEEC100, 0xBBED7800, + 0xBBEC2F00, 0xBBEAE600, 0xBBE99D00, + 0xBBE85400, 0xBBE70B00, 0xBBE5C200, + 0xBBE47900, 0xBBE33000, 0xBBE1E700, + 0xBBE09E00, 0xBBDF5500, 0xBBDE0C00, + 0xBBDCC300, 0xBBDB7A00, 0xBBDA3100, + 0xBBD8E800, 0xBBD79F00, 0xBBD65600, + 0xBBD50D00, 0xBBD3C400, 0xBBD27B00, + 0xBBD13200, 0xBBCFE900, 0xBBCEA000, + 0xBBCD5700, 0xBBCC0E00, 0xBBCAC500, + 0xBBC97C00, 0xBBC83300, 0xBBC6EA00, + 0xBBC5A100, 0xBBC45800, 0xBBC30F00, + 0xBBC1C600, 0xBBC07D00, 0xBBBF3400, + 0xBBBDEB00, 0xBBBCA200, 0xBBBB5900, + 0xBBBA1000, 0xBBB8C700, 0xBBB77E00, + 0xBBB63500, 0xBBB4EC00, 0xBBB3A300, + 0xBBB25A00, 0xBBB11100, 0xBBAFC800, + 0xBBAE7F00, 0xBBAD3600, 0xBBABED00, + 0xBBAAA400, 0xBBA95B00, 0xBBA81200, + 0xBBA6C900, 0xBBA58000, 0xBBA43700, + 0xBBA2EE00, 0xBBA1A500, 0xBBA05C00, + 0xBB9F1300, 0xBB9DCA00, 0xBB9C8100, + 0xBB9B3800, 0xBB99EF00, 0xBB98A600, + 0xBB975D00, 0xBB961400, 0xBB94CB00, + 0xBB938200, 0xBB923900, 0xBB90F000, + 0xBB8FA700, 0xBB8E5E00, 0xBB8D1500, + 0xBB8BCC00, 0xBB8A8300, 0xBB893A00, + 0xBB87F100, 0xBB86A800, 0xBB855F00, + 0xBB841600, 0xBB82CD00, 0xBB818400, + 0xBB803B00, 0xBB7EF200, 0xBB7DA900, + 0xBB7C6000, 0xBB7B1700, 0xBB79CE00, + 0xBB788500, 0xBB773C00, 0xBB75F300, + 0xBB74AA00, 0xBB736100, 0xBB721800, + 0xBB70CF00, 0xBB6F8600, 0xBB6E3D00, + 0xBB6CF400, 0xBB6BAB00, 0xBB6A6200, + 0xBB691900, 0xBB67D000, 0xBB668700, + 0xBB653E00, 0xBB63F500, 0xBB62AC00, + 0xBB616300, 0xBB601A00, 0xBB5ED100, + 0xBB5D8800, 0xBB5C3F00, 0xBB5AF600, + 0xBB59AD00, 0xBB586400, 0xBB571B00, + 0xBB55D200, 0xBB548900, 0xBB534000, + 0xBB51F700, 0xBB50AE00, 0xBB4F6500, + 0xBB4E1C00, 0xBB4CD300, 0xBB4B8A00, + 0xBB4A4100, 0xBB48F800, 0xBB47AF00, + 0xBB466600, 0xBB451D00, 0xBB43D400, + 0xBB428B00, 0xBB414200, 0xBB3FF900, + 0xBB3EB000, 0xBB3D6700, 0xBB3C1E00, + 0xBB3AD500, 0xBB398C00, 0xBB384300, + 0xBB36FA00, 0xBB35B100, 0xBB346800, + 0xBB331F00, 0xBB31D600, 0xBB308D00, + 0xBB2F4400, 0xBB2DFB00, 0xBB2CB200, + 0xBB2B6900, 0xBB2A2000, 0xBB28D700, + 0xBB278E00, 0xBB264500, 0xBB24FC00, + 0xBB23B300, 0xBB226A00, 0xBB212100, + 0xBB1FD800, 0xBB1E8F00, 0xBB1D4600, + 0xBB1BFD00, 0xBB1AB400, 0xBB196B00, + 0xBB182200, 0xBB16D900, 0xBB159000, + 0xBB144700, 0xBB12FE00, 0xBB11B500, + 0xBB106C00, 0xBB0F2300, 0xBB0DDA00, + 0xBB0C9100, 0xBB0B4800, 0xBB09FF00, + 0xBB08B600, 0xBB076D00, 0xBB062400, + 0xBB04DB00, 0xBB039200, 0xBB024900, + 0xBB010000, 0xBAFFB700, 0xBAFE6E00, + 0xBAFD2500, 0xBAFBDC00, 0xBAFA9300, + 0xBAF94A00, 0xBAF80100, 0xBAF6B800, + 0xBAF56F00, 0xBAF42600, 0xBAF2DD00, + 0xBAF19400, 0xBAF04B00, 0xBAEF0200, + 0xBAEDB900, 0xBAEC7000, 0xBAEB2700, + 0xBAE9DE00, 0xBAE89500, 0xBAE74C00, + 0xBAE60300, 0xBAE4BA00, 0xBAE37100, + 0xBAE22800, 0xBAE0DF00, 0xBADF9600, + 0xBADE4D00, 0xBADD0400, 0xBADBBB00, + 0xBADA7200, 0xBAD92900, 0xBAD7E000, + 0xBAD69700, 0xBAD54E00, 0xBAD40500, + 0xBAD2BC00, 0xBAD17300, 0xBAD02A00, + 0xBACEE100, 0xBACD9800, 0xBACC4F00, + 0xBACB0600, 0xBAC9BD00, 0xBAC87400, + 0xBAC72B00, 0xBAC5E200, 0xBAC49900, + 0xBAC35000, 0xBAC20700, 0xBAC0BE00, + 0xBABF7500, 0xBABE2C00, 0xBABCE300, + 0xBABB9A00, 0xBABA5100, 0xBAB90800, + 0xBAB7BF00, 0xBAB67600, 0xBAB52D00, + 0xBAB3E400, 0xBAB29B00, 0xBAB15200, + 0xBAB00900, 0xBAAEC000, 0xBAAD7700, + 0xBAAC2E00, 0xBAAAE500, 0xBAA99C00, + 0xBAA85300, 0xBAA70A00, 0xBAA5C100, + 0xBAA47800, 0xBAA32F00, 0xBAA1E600, + 0xBAA09D00, 0xBA9F5400, 0xBA9E0B00, + 0xBA9CC200, 0xBA9B7900, 0xBA9A3000, + 0xBA98E700, 0xBA979E00, 0xBA965500, + 0xBA950C00, 0xBA93C300, 0xBA927A00, + 0xBA913100, 0xBA8FE800, 0xBA8E9F00, + 0xBA8D5600, 0xBA8C0D00, 0xBA8AC400, + 0xBA897B00, 0xBA883200, 0xBA86E900, + 0xBA85A000, 0xBA845700, 0xBA830E00, + 0xBA81C500, 0xBA807C00, 0xBA7F3300, + 0xBA7DEA00, 0xBA7CA100, 0xBA7B5800, + 0xBA7A0F00, 0xBA78C600, 0xBA777D00, + 0xBA763400, 0xBA74EB00, 0xBA73A200, + 0xBA725900, 0xBA711000, 0xBA6FC700, + 0xBA6E7E00, 0xBA6D3500, 0xBA6BEC00, + 0xBA6AA300, 0xBA695A00, 0xBA681100, + 0xBA66C800, 0xBA657F00, 0xBA643600, + 0xBA62ED00, 0xBA61A400, 0xBA605B00, + 0xBA5F1200, 0xBA5DC900, 0xBA5C8000, + 0xBA5B3700, 0xBA59EE00, 0xBA58A500, + 0xBA575C00, 0xBA561300, 0xBA54CA00, + 0xBA538100, 0xBA523800, 0xBA50EF00, + 0xBA4FA600, 0xBA4E5D00, 0xBA4D1400, + 0xBA4BCB00, 0xBA4A8200, 0xBA493900, + 0xBA47F000, 0xBA46A700, 0xBA455E00, + 0xBA441500, 0xBA42CC00, 0xBA418300, + 0xBA403A00, 0xBA3EF100, 0xBA3DA800, + 0xBA3C5F00, 0xBA3B1600, 0xBA39CD00, + 0xBA388400, 0xBA373B00, 0xBA35F200, + 0xBA34A900, 0xBA336000, 0xBA321700, + 0xBA30CE00, 0xBA2F8500, 0xBA2E3C00, + 0xBA2CF300, 0xBA2BAA00, 0xBA2A6100, + 0xBA291800, 0xBA27CF00, 0xBA268600, + 0xBA253D00, 0xBA23F400, 0xBA22AB00, + 0xBA216200, 0xBA201900, 0xBA1ED000, + 0xBA1D8700, 0xBA1C3E00, 0xBA1AF500, + 0xBA19AC00, 0xBA186300, 0xBA171A00, + 0xBA15D100, 0xBA148800, 0xBA133F00, + 0xBA11F600, 0xBA10AD00, 0xBA0F6400, + 0xBA0E1B00, 0xBA0CD200, 0xBA0B8900, + 0xBA0A4000, 0xBA08F700, 0xBA07AE00, + 0xBA066500, 0xBA051C00, 0xBA03D300, + 0xBA028A00, 0xBA014100, 0xB9FFF800, + 0xB9FEAF00, 0xB9FD6600, 0xB9FC1D00, + 0xB9FAD400, 0xB9F98B00, 0xB9F84200, + 0xB9F6F900, 0xB9F5B000, 0xB9F46700, + 0xB9F31E00, 0xB9F1D500, 0xB9F08C00, + 0xB9EF4300, 0xB9EDFA00, 0xB9ECB100, + 0xB9EB6800, 0xB9EA1F00, 0xB9E8D600, + 0xB9E78D00, 0xB9E64400, 0xB9E4FB00, + 0xB9E3B200, 0xB9E26900, 0xB9E12000, + 0xB9DFD700, 0xB9DE8E00, 0xB9DD4500, + 0xB9DBFC00, 0xB9DAB300, 0xB9D96A00, + 0xB9D82100, 0xB9D6D800, 0xB9D58F00, + 0xB9D44600, 0xB9D2FD00, 0xB9D1B400, + 0xB9D06B00, 0xB9CF2200, 0xB9CDD900, + 0xB9CC9000, 0xB9CB4700, 0xB9C9FE00, + 0xB9C8B500, 0xB9C76C00, 0xB9C62300, + 0xB9C4DA00, 0xB9C39100, 0xB9C24800, + 0xB9C0FF00, 0xB9BFB600, 0xB9BE6D00, + 0xB9BD2400, 0xB9BBDB00, 0xB9BA9200, + 0xB9B94900, 0xB9B80000, 0xB9B6B700, + 0xB9B56E00, 0xB9B42500, 0xB9B2DC00, + 0xB9B19300, 0xB9B04A00, 0xB9AF0100, + 0xB9ADB800, 0xB9AC6F00, 0xB9AB2600, + 0xB9A9DD00, 0xB9A89400, 0xB9A74B00, + 0xB9A60200, 0xB9A4B900, 0xB9A37000, + 0xB9A22700, 0xB9A0DE00, 0xB99F9500, + 0xB99E4C00, 0xB99D0300, 0xB99BBA00, + 0xB99A7100, 0xB9992800, 0xB997DF00, + 0xB9969600, 0xB9954D00, 0xB9940400, + 0xB992BB00, 0xB9917200, 0xB9902900, + 0xB98EE000, 0xB98D9700, 0xB98C4E00, + 0xB98B0500, 0xB989BC00, 0xB9887300, + 0xB9872A00, 0xB985E100, 0xB9849800, + 0xB9834F00, 0xB9820600, 0xB980BD00, + 0xB97F7400, 0xB97E2B00, 0xB97CE200, + 0xB97B9900, 0xB97A5000, 0xB9790700, + 0xB977BE00, 0xB9767500, 0xB9752C00, + 0xB973E300, 0xB9729A00, 0xB9715100, + 0xB9700800, 0xB96EBF00, 0xB96D7600, + 0xB96C2D00, 0xB96AE400, 0xB9699B00, + 0xB9685200, 0xB9670900, 0xB965C000, + 0xB9647700, 0xB9632E00, 0xB961E500, + 0xB9609C00, 0xB95F5300, 0xB95E0A00, + 0xB95CC100, 0xB95B7800, 0xB95A2F00, + 0xB958E600, 0xB9579D00, 0xB9565400, + 0xB9550B00, 0xB953C200, 0xB9527900, + 0xB9513000, 0xB94FE700, 0xB94E9E00, + 0xB94D5500, 0xB94C0C00, 0xB94AC300, + 0xB9497A00, 0xB9483100, 0xB946E800, + 0xB9459F00, 0xB9445600, 0xB9430D00, + 0xB941C400, 0xB9407B00, 0xB93F3200, + 0xB93DE900, 0xB93CA000, 0xB93B5700, + 0xB93A0E00, 0xB938C500, 0xB9377C00, + 0xB9363300, 0xB934EA00, 0xB933A100, + 0xB9325800, 0xB9310F00, 0xB92FC600, + 0xB92E7D00, 0xB92D3400, 0xB92BEB00, + 0xB92AA200, 0xB9295900, 0xB9281000, + 0xB926C700, 0xB9257E00, 0xB9243500, + 0xB922EC00, 0xB921A300, 0xB9205A00, + 0xB91F1100, 0xB91DC800, 0xB91C7F00, + 0xB91B3600, 0xB919ED00, 0xB918A400, + 0xB9175B00, 0xB9161200, 0xB914C900, + 0xB9138000, 0xB9123700, 0xB910EE00, + 0xB90FA500, 0xB90E5C00, 0xB90D1300, + 0xB90BCA00, 0xB90A8100, 0xB9093800, + 0xB907EF00, 0xB906A600, 0xB9055D00, + 0xB9041400, 0xB902CB00, 0xB9018200, + 0xB9003900, 0xB8FEF000, 0xB8FDA700, + 0xB8FC5E00, 0xB8FB1500, 0xB8F9CC00, + 0xB8F88300, 0xB8F73A00, 0xB8F5F100, + 0xB8F4A800, 0xB8F35F00, 0xB8F21600, + 0xB8F0CD00, 0xB8EF8400, 0xB8EE3B00, + 0xB8ECF200, 0xB8EBA900, 0xB8EA6000, + 0xB8E91700, 0xB8E7CE00, 0xB8E68500, + 0xB8E53C00, 0xB8E3F300, 0xB8E2AA00, + 0xB8E16100, 0xB8E01800, 0xB8DECF00, + 0xB8DD8600, 0xB8DC3D00, 0xB8DAF400, + 0xB8D9AB00, 0xB8D86200, 0xB8D71900, + 0xB8D5D000, 0xB8D48700, 0xB8D33E00, + 0xB8D1F500, 0xB8D0AC00, 0xB8CF6300, + 0xB8CE1A00, 0xB8CCD100, 0xB8CB8800, + 0xB8CA3F00, 0xB8C8F600, 0xB8C7AD00, + 0xB8C66400, 0xB8C51B00, 0xB8C3D200, + 0xB8C28900, 0xB8C14000, 0xB8BFF700, + 0xB8BEAE00, 0xB8BD6500, 0xB8BC1C00, + 0xB8BAD300, 0xB8B98A00, 0xB8B84100, + 0xB8B6F800, 0xB8B5AF00, 0xB8B46600, + 0xB8B31D00, 0xB8B1D400, 0xB8B08B00, + 0xB8AF4200, 0xB8ADF900, 0xB8ACB000, + 0xB8AB6700, 0xB8AA1E00, 0xB8A8D500, + 0xB8A78C00, 0xB8A64300, 0xB8A4FA00, + 0xB8A3B100, 0xB8A26800, 0xB8A11F00, + 0xB89FD600, 0xB89E8D00, 0xB89D4400, + 0xB89BFB00, 0xB89AB200, 0xB8996900, + 0xB8982000, 0xB896D700, 0xB8958E00, + 0xB8944500, 0xB892FC00, 0xB891B300, + 0xB8906A00, 0xB88F2100, 0xB88DD800, + 0xB88C8F00, 0xB88B4600, 0xB889FD00, + 0xB888B400, 0xB8876B00, 0xB8862200, + 0xB884D900, 0xB8839000, 0xB8824700, + 0xB880FE00, 0xB87FB500, 0xB87E6C00, + 0xB87D2300, 0xB87BDA00, 0xB87A9100, + 0xB8794800, 0xB877FF00, 0xB876B600, + 0xB8756D00, 0xB8742400, 0xB872DB00, + 0xB8719200, 0xB8704900, 0xB86F0000, + 0xB86DB700, 0xB86C6E00, 0xB86B2500, + 0xB869DC00, 0xB8689300, 0xB8674A00, + 0xB8660100, 0xB864B800, 0xB8636F00, + 0xB8622600, 0xB860DD00, 0xB85F9400, + 0xB85E4B00, 0xB85D0200, 0xB85BB900, + 0xB85A7000, 0xB8592700, 0xB857DE00, + 0xB8569500, 0xB8554C00, 0xB8540300, + 0xB852BA00, 0xB8517100, 0xB8502800, + 0xB84EDF00, 0xB84D9600, 0xB84C4D00, + 0xB84B0400, 0xB849BB00, 0xB8487200, + 0xB8472900, 0xB845E000, 0xB8449700, + 0xB8434E00, 0xB8420500, 0xB840BC00, + 0xB83F7300, 0xB83E2A00, 0xB83CE100, + 0xB83B9800, 0xB83A4F00, 0xB8390600, + 0xB837BD00, 0xB8367400, 0xB8352B00, + 0xB833E200, 0xB8329900, 0xB8315000, + 0xB8300700, 0xB82EBE00, 0xB82D7500, + 0xB82C2C00, 0xB82AE300, 0xB8299A00, + 0xB8285100, 0xB8270800, 0xB825BF00, + 0xB8247600, 0xB8232D00, 0xB821E400, + 0xB8209B00, 0xB81F5200, 0xB81E0900, + 0xB81CC000, 0xB81B7700, 0xB81A2E00, + 0xB818E500, 0xB8179C00, 0xB8165300, + 0xB8150A00, 0xB813C100, 0xB8127800, + 0xB8112F00, 0xB80FE600, 0xB80E9D00, + 0xB80D5400, 0xB80C0B00, 0xB80AC200, + 0xB8097900, 0xB8083000, 0xB806E700, + 0xB8059E00, 0xB8045500, 0xB8030C00, + 0xB801C300, 0xB8007A00, 0xB7FF3100, + 0xB7FDE800, 0xB7FC9F00, 0xB7FB5600, + 0xB7FA0D00, 0xB7F8C400, 0xB7F77B00, + 0xB7F63200, 0xB7F4E900, 0xB7F3A000, + 0xB7F25700, 0xB7F10E00, 0xB7EFC500, + 0xB7EE7C00, 0xB7ED3300, 0xB7EBEA00, + 0xB7EAA100, 0xB7E95800, 0xB7E80F00, + 0xB7E6C600, 0xB7E57D00, 0xB7E43400, + 0xB7E2EB00, 0xB7E1A200, 0xB7E05900, + 0xB7DF1000, 0xB7DDC700, 0xB7DC7E00, + 0xB7DB3500, 0xB7D9EC00, 0xB7D8A300, + 0xB7D75A00, 0xB7D61100, 0xB7D4C800, + 0xB7D37F00, 0xB7D23600, 0xB7D0ED00, + 0xB7CFA400, 0xB7CE5B00, 0xB7CD1200, + 0xB7CBC900, 0xB7CA8000, 0xB7C93700, + 0xB7C7EE00, 0xB7C6A500, 0xB7C55C00, + 0xB7C41300, 0xB7C2CA00, 0xB7C18100, + 0xB7C03800, 0xB7BEEF00, 0xB7BDA600, + 0xB7BC5D00, 0xB7BB1400, 0xB7B9CB00, + 0xB7B88200, 0xB7B73900, 0xB7B5F000, + 0xB7B4A700, 0xB7B35E00, 0xB7B21500, + 0xB7B0CC00, 0xB7AF8300, 0xB7AE3A00, + 0xB7ACF100, 0xB7ABA800, 0xB7AA5F00, + 0xB7A91600, 0xB7A7CD00, 0xB7A68400, + 0xB7A53B00, 0xB7A3F200, 0xB7A2A900, + 0xB7A16000, 0xB7A01700, 0xB79ECE00, + 0xB79D8500, 0xB79C3C00, 0xB79AF300, + 0xB799AA00, 0xB7986100, 0xB7971800, + 0xB795CF00, 0xB7948600, 0xB7933D00, + 0xB791F400, 0xB790AB00, 0xB78F6200, + 0xB78E1900, 0xB78CD000, 0xB78B8700, + 0xB78A3E00, 0xB788F500, 0xB787AC00, + 0xB7866300, 0xB7851A00, 0xB783D100, + 0xB7828800, 0xB7813F00, 0xB77FF600, + 0xB77EAD00, 0xB77D6400, 0xB77C1B00, + 0xB77AD200, 0xB7798900, 0xB7784000, + 0xB776F700, 0xB775AE00, 0xB7746500, + 0xB7731C00, 0xB771D300, 0xB7708A00, + 0xB76F4100, 0xB76DF800, 0xB76CAF00, + 0xB76B6600, 0xB76A1D00, 0xB768D400, + 0xB7678B00, 0xB7664200, 0xB764F900, + 0xB763B000, 0xB7626700, 0xB7611E00, + 0xB75FD500, 0xB75E8C00, 0xB75D4300, + 0xB75BFA00, 0xB75AB100, 0xB7596800, + 0xB7581F00, 0xB756D600, 0xB7558D00, + 0xB7544400, 0xB752FB00, 0xB751B200, + 0xB7506900, 0xB74F2000, 0xB74DD700, + 0xB74C8E00, 0xB74B4500, 0xB749FC00, + 0xB748B300, 0xB7476A00, 0xB7462100, + 0xB744D800, 0xB7438F00, 0xB7424600, + 0xB740FD00, 0xB73FB400, 0xB73E6B00, + 0xB73D2200, 0xB73BD900, 0xB73A9000, + 0xB7394700, 0xB737FE00, 0xB736B500, + 0xB7356C00, 0xB7342300, 0xB732DA00, + 0xB7319100, 0xB7304800, 0xB72EFF00, + 0xB72DB600, 0xB72C6D00, 0xB72B2400, + 0xB729DB00, 0xB7289200, 0xB7274900, + 0xB7260000, 0xB724B700, 0xB7236E00, + 0xB7222500, 0xB720DC00, 0xB71F9300, + 0xB71E4A00, 0xB71D0100, 0xB71BB800, + 0xB71A6F00, 0xB7192600, 0xB717DD00, + 0xB7169400, 0xB7154B00, 0xB7140200, + 0xB712B900, 0xB7117000, 0xB7102700, + 0xB70EDE00, 0xB70D9500, 0xB70C4C00, + 0xB70B0300, 0xB709BA00, 0xB7087100, + 0xB7072800, 0xB705DF00, 0xB7049600, + 0xB7034D00, 0xB7020400, 0xB700BB00, + 0xB6FF7200, 0xB6FE2900, 0xB6FCE000, + 0xB6FB9700, 0xB6FA4E00, 0xB6F90500, + 0xB6F7BC00, 0xB6F67300, 0xB6F52A00, + 0xB6F3E100, 0xB6F29800, 0xB6F14F00, + 0xB6F00600, 0xB6EEBD00, 0xB6ED7400, + 0xB6EC2B00, 0xB6EAE200, 0xB6E99900, + 0xB6E85000, 0xB6E70700, 0xB6E5BE00, + 0xB6E47500, 0xB6E32C00, 0xB6E1E300, + 0xB6E09A00, 0xB6DF5100, 0xB6DE0800, + 0xB6DCBF00, 0xB6DB7600, 0xB6DA2D00, + 0xB6D8E400, 0xB6D79B00, 0xB6D65200, + 0xB6D50900, 0xB6D3C000, 0xB6D27700, + 0xB6D12E00, 0xB6CFE500, 0xB6CE9C00, + 0xB6CD5300, 0xB6CC0A00, 0xB6CAC100, + 0xB6C97800, 0xB6C82F00, 0xB6C6E600, + 0xB6C59D00, 0xB6C45400, 0xB6C30B00, + 0xB6C1C200, 0xB6C07900, 0xB6BF3000, + 0xB6BDE700, 0xB6BC9E00, 0xB6BB5500, + 0xB6BA0C00, 0xB6B8C300, 0xB6B77A00, + 0xB6B63100, 0xB6B4E800, 0xB6B39F00, + 0xB6B25600, 0xB6B10D00, 0xB6AFC400, + 0xB6AE7B00, 0xB6AD3200, 0xB6ABE900, + 0xB6AAA000, 0xB6A95700, 0xB6A80E00, + 0xB6A6C500, 0xB6A57C00, 0xB6A43300, + 0xB6A2EA00, 0xB6A1A100, 0xB6A05800, + 0xB69F0F00, 0xB69DC600, 0xB69C7D00, + 0xB69B3400, 0xB699EB00, 0xB698A200, + 0xB6975900, 0xB6961000, 0xB694C700, + 0xB6937E00, 0xB6923500, 0xB690EC00, + 0xB68FA300, 0xB68E5A00, 0xB68D1100, + 0xB68BC800, 0xB68A7F00, 0xB6893600, + 0xB687ED00, 0xB686A400, 0xB6855B00, + 0xB6841200, 0xB682C900, 0xB6818000, + 0xB6803700, 0xB67EEE00, 0xB67DA500, + 0xB67C5C00, 0xB67B1300, 0xB679CA00, + 0xB6788100, 0xB6773800, 0xB675EF00, + 0xB674A600, 0xB6735D00, 0xB6721400, + 0xB670CB00, 0xB66F8200, 0xB66E3900, + 0xB66CF000, 0xB66BA700, 0xB66A5E00, + 0xB6691500, 0xB667CC00, 0xB6668300, + 0xB6653A00, 0xB663F100, 0xB662A800, + 0xB6615F00, 0xB6601600, 0xB65ECD00, + 0xB65D8400, 0xB65C3B00, 0xB65AF200, + 0xB659A900, 0xB6586000, 0xB6571700, + 0xB655CE00, 0xB6548500, 0xB6533C00, + 0xB651F300, 0xB650AA00, 0xB64F6100, + 0xB64E1800, 0xB64CCF00, 0xB64B8600, + 0xB64A3D00, 0xB648F400, 0xB647AB00, + 0xB6466200, 0xB6451900, 0xB643D000, + 0xB6428700, 0xB6413E00, 0xB63FF500, + 0xB63EAC00, 0xB63D6300, 0xB63C1A00, + 0xB63AD100, 0xB6398800, 0xB6383F00, + 0xB636F600, 0xB635AD00, 0xB6346400, + 0xB6331B00, 0xB631D200, 0xB6308900, + 0xB62F4000, 0xB62DF700, 0xB62CAE00, + 0xB62B6500, 0xB62A1C00, 0xB628D300, + 0xB6278A00, 0xB6264100, 0xB624F800, + 0xB623AF00, 0xB6226600, 0xB6211D00, + 0xB61FD400, 0xB61E8B00, 0xB61D4200, + 0xB61BF900, 0xB61AB000, 0xB6196700, + 0xB6181E00, 0xB616D500, 0xB6158C00, + 0xB6144300, 0xB612FA00, 0xB611B100, + 0xB6106800, 0xB60F1F00, 0xB60DD600, + 0xB60C8D00, 0xB60B4400, 0xB609FB00, + 0xB608B200, 0xB6076900, 0xB6062000, + 0xB604D700, 0xB6038E00, 0xB6024500, + 0xB600FC00, 0xB5FFB300, 0xB5FE6A00, + 0xB5FD2100, 0xB5FBD800, 0xB5FA8F00, + 0xB5F94600, 0xB5F7FD00, 0xB5F6B400, + 0xB5F56B00, 0xB5F42200, 0xB5F2D900, + 0xB5F19000, 0xB5F04700, 0xB5EEFE00, + 0xB5EDB500, 0xB5EC6C00, 0xB5EB2300, + 0xB5E9DA00, 0xB5E89100, 0xB5E74800, + 0xB5E5FF00, 0xB5E4B600, 0xB5E36D00, + 0xB5E22400, 0xB5E0DB00, 0xB5DF9200, + 0xB5DE4900, 0xB5DD0000, 0xB5DBB700, + 0xB5DA6E00, 0xB5D92500, 0xB5D7DC00, + 0xB5D69300, 0xB5D54A00, 0xB5D40100, + 0xB5D2B800, 0xB5D16F00, 0xB5D02600, + 0xB5CEDD00, 0xB5CD9400, 0xB5CC4B00, + 0xB5CB0200, 0xB5C9B900, 0xB5C87000, + 0xB5C72700, 0xB5C5DE00, 0xB5C49500, + 0xB5C34C00, 0xB5C20300, 0xB5C0BA00, + 0xB5BF7100, 0xB5BE2800, 0xB5BCDF00, + 0xB5BB9600, 0xB5BA4D00, 0xB5B90400, + 0xB5B7BB00, 0xB5B67200, 0xB5B52900, + 0xB5B3E000, 0xB5B29700, 0xB5B14E00, + 0xB5B00500, 0xB5AEBC00, 0xB5AD7300, + 0xB5AC2A00, 0xB5AAE100, 0xB5A99800, + 0xB5A84F00, 0xB5A70600, 0xB5A5BD00, + 0xB5A47400, 0xB5A32B00, 0xB5A1E200, + 0xB5A09900, 0xB59F5000, 0xB59E0700, + 0xB59CBE00, 0xB59B7500, 0xB59A2C00, + 0xB598E300, 0xB5979A00, 0xB5965100, + 0xB5950800, 0xB593BF00, 0xB5927600, + 0xB5912D00, 0xB58FE400, 0xB58E9B00, + 0xB58D5200, 0xB58C0900, 0xB58AC000, + 0xB5897700, 0xB5882E00, 0xB586E500, + 0xB5859C00, 0xB5845300, 0xB5830A00, + 0xB581C100, 0xB5807800, 0xB57F2F00, + 0xB57DE600, 0xB57C9D00, 0xB57B5400, + 0xB57A0B00, 0xB578C200, 0xB5777900, + 0xB5763000, 0xB574E700, 0xB5739E00, + 0xB5725500, 0xB5710C00, 0xB56FC300, + 0xB56E7A00, 0xB56D3100, 0xB56BE800, + 0xB56A9F00, 0xB5695600, 0xB5680D00, + 0xB566C400, 0xB5657B00, 0xB5643200, + 0xB562E900, 0xB561A000, 0xB5605700, + 0xB55F0E00, 0xB55DC500, 0xB55C7C00, + 0xB55B3300, 0xB559EA00, 0xB558A100, + 0xB5575800, 0xB5560F00, 0xB554C600, + 0xB5537D00, 0xB5523400, 0xB550EB00, + 0xB54FA200, 0xB54E5900, 0xB54D1000, + 0xB54BC700, 0xB54A7E00, 0xB5493500, + 0xB547EC00, 0xB546A300, 0xB5455A00, + 0xB5441100, 0xB542C800, 0xB5417F00, + 0xB5403600, 0xB53EED00, 0xB53DA400, + 0xB53C5B00, 0xB53B1200, 0xB539C900, + 0xB5388000, 0xB5373700, 0xB535EE00, + 0xB534A500, 0xB5335C00, 0xB5321300, + 0xB530CA00, 0xB52F8100, 0xB52E3800, + 0xB52CEF00, 0xB52BA600, 0xB52A5D00, + 0xB5291400, 0xB527CB00, 0xB5268200, + 0xB5253900, 0xB523F000, 0xB522A700, + 0xB5215E00, 0xB5201500, 0xB51ECC00, + 0xB51D8300, 0xB51C3A00, 0xB51AF100, + 0xB519A800, 0xB5185F00, 0xB5171600, + 0xB515CD00, 0xB5148400, 0xB5133B00, + 0xB511F200, 0xB510A900, 0xB50F6000, + 0xB50E1700, 0xB50CCE00, 0xB50B8500, + 0xB50A3C00, 0xB508F300, 0xB507AA00, + 0xB5066100, 0xB5051800, 0xB503CF00, + 0xB5028600, 0xB5013D00, 0xB4FFF400, + 0xB4FEAB00, 0xB4FD6200, 0xB4FC1900, + 0xB4FAD000, 0xB4F98700, 0xB4F83E00, + 0xB4F6F500, 0xB4F5AC00, 0xB4F46300, + 0xB4F31A00, 0xB4F1D100, 0xB4F08800, + 0xB4EF3F00, 0xB4EDF600, 0xB4ECAD00, + 0xB4EB6400, 0xB4EA1B00, 0xB4E8D200, + 0xB4E78900, 0xB4E64000, 0xB4E4F700, + 0xB4E3AE00, 0xB4E26500, 0xB4E11C00, + 0xB4DFD300, 0xB4DE8A00, 0xB4DD4100, + 0xB4DBF800, 0xB4DAAF00, 0xB4D96600, + 0xB4D81D00, 0xB4D6D400, 0xB4D58B00, + 0xB4D44200, 0xB4D2F900, 0xB4D1B000, + 0xB4D06700, 0xB4CF1E00, 0xB4CDD500, + 0xB4CC8C00, 0xB4CB4300, 0xB4C9FA00, + 0xB4C8B100, 0xB4C76800, 0xB4C61F00, + 0xB4C4D600, 0xB4C38D00, 0xB4C24400, + 0xB4C0FB00, 0xB4BFB200, 0xB4BE6900, + 0xB4BD2000, 0xB4BBD700, 0xB4BA8E00, + 0xB4B94500, 0xB4B7FC00, 0xB4B6B300, + 0xB4B56A00, 0xB4B42100, 0xB4B2D800, + 0xB4B18F00, 0xB4B04600, 0xB4AEFD00, + 0xB4ADB400, 0xB4AC6B00, 0xB4AB2200, + 0xB4A9D900, 0xB4A89000, 0xB4A74700, + 0xB4A5FE00, 0xB4A4B500, 0xB4A36C00, + 0xB4A22300, 0xB4A0DA00, 0xB49F9100, + 0xB49E4800, 0xB49CFF00, 0xB49BB600, + 0xB49A6D00, 0xB4992400, 0xB497DB00, + 0xB4969200, 0xB4954900, 0xB4980000, + 0xB496CD00, 0xB4959A00, 0xB4946700, + 0xB4933400, 0xB4920100, 0xB490CE00, + 0xB48F9B00, 0xB48E6800, 0xB48D3500, + 0xB48C0200, 0xB48ACF00, 0xB4899C00, + 0xB4886900, 0xB4873600, 0xB4860300, + 0xB484D000, 0xB4839D00, 0xB4826A00, + 0xB4813700, 0xB4800400, 0xB47ED100, + 0xB47D9E00, 0xB47C6B00, 0xB47B3800, + 0xB47A0500, 0xB478D200, 0xB4779F00, + 0xB4766C00, 0xB4753900, 0xB4740600, + 0xB472D300, 0xB471A000, 0xB4706D00, + 0xB46F3A00, 0xB46E0700, 0xB46CD400, + 0xB46BA100, 0xB46A6E00, 0xB4693B00, + 0xB4680800, 0xB466D500, 0xB465A200, + 0xB4646F00, 0xB4633C00, 0xB4620900, + 0xB460D600, 0xB45FA300, 0xB45E7000, + 0xB45D3D00, 0xB45C0A00, 0xB45AD700, + 0xB459A400, 0xB4587100, 0xB4573E00, + 0xB4560B00, 0xB454D800, 0xB453A500, + 0xB4527200, 0xB4513F00, 0xB4500C00, + 0xB44ED900, 0xB44DA600, 0xB44C7300, + 0xB44B4000, 0xB44A0D00, 0xB448DA00, + 0xB447A700, 0xB4467400, 0xB4454100, + 0xB4440E00, 0xB442DB00, 0xB441A800, + 0xB4407500, 0xB43F4200, 0xB43E0F00, + 0xB43CDC00, 0xB43BA900, 0xB43A7600, + 0xB4394300, 0xB4381000, 0xB436DD00, + 0xB435AA00, 0xB4347700, 0xB4334400, + 0xB4321100, 0xB430DE00, 0xB42FAB00, + 0xB42E7800, 0xB42D4500, 0xB42C1200, + 0xB42ADF00, 0xB429AC00, 0xB4287900, + 0xB4274600, 0xB4261300, 0xB424E000, + 0xB423AD00, 0xB4227A00, 0xB4214700, + 0xB4201400, 0xB41EE100, 0xB41DAE00, + 0xB41C7B00, 0xB41B4800, 0xB41A1500, + 0xB418E200, 0xB417AF00, 0xB4167C00, + 0xB4154900, 0xB4141600, 0xB412E300, + 0xB411B000, 0xB4107D00, 0xB40F4A00, + 0xB40E1700, 0xB40CE400, 0xB40BB100, + 0xB40A7E00, 0xB4094B00, 0xB4081800, + 0xB406E500, 0xB405B200, 0xB4047F00, + 0xB4034C00, 0xB4021900, 0xB400E600, + 0xB3FFB300, 0xB3FE8000, 0xB3FD4D00, + 0xB3FC1A00, 0xB3FAE700, 0xB3F9B400, + 0xB3F88100, 0xB3F74E00, 0xB3F61B00, + 0xB3F4E800, 0xB3F3B500, 0xB3F28200, + 0xB3F14F00, 0xB3F01C00, 0xB3EEE900, + 0xB3EDB600, 0xB3EC8300, 0xB3EB5000, + 0xB3EA1D00, 0xB3E8EA00, 0xB3E7B700, + 0xB3E68400, 0xB3E55100, 0xB3E41E00, + 0xB3E2EB00, 0xB3E1B800, 0xB3E08500, + 0xB3DF5200, 0xB3DE1F00, 0xB3DCEC00, + 0xB3DBB900, 0xB3DA8600, 0xB3D95300, + 0xB3D82000, 0xB3D6ED00, 0xB3D5BA00, + 0xB3D48700, 0xB3D35400, 0xB3D22100, + 0xB3D0EE00, 0xB3CFBB00, 0xB3CE8800, + 0xB3CD5500, 0xB3CC2200, 0xB3CAEF00, + 0xB3C9BC00, 0xB3C88900, 0xB3C75600, + 0xB3C62300, 0xB3C4F000, 0xB3C3BD00, + 0xB3C28A00, 0xB3C15700, 0xB3C02400, + 0xB3BEF100, 0xB3BDBE00, 0xB3BC8B00, + 0xB3BB5800, 0xB3BA2500, 0xB3B8F200, + 0xB3B7BF00, 0xB3B68C00, 0xB3B55900, + 0xB3B42600, 0xB3B2F300, 0xB3B1C000, + 0xB3B08D00, 0xB3AF5A00, 0xB3AE2700, + 0xB3ACF400, 0xB3ABC100, 0xB3AA8E00, + 0xB3A95B00, 0xB3A82800, 0xB3A6F500, + 0xB3A5C200, 0xB3A48F00, 0xB3A35C00, + 0xB3A22900, 0xB3A0F600, 0xB39FC300, + 0xB39E9000, 0xB39D5D00, 0xB39C2A00, + 0xB39AF700, 0xB399C400, 0xB3989100, + 0xB3975E00, 0xB3962B00, 0xB394F800, + 0xB393C500, 0xB3929200, 0xB3915F00, + 0xB3902C00, 0xB38EF900, 0xB38DC600, + 0xB38C9300, 0xB38B6000, 0xB38A2D00, + 0xB388FA00, 0xB387C700, 0xB3869400, + 0xB3856100, 0xB3842E00, 0xB382FB00, + 0xB381C800, 0xB3809500, 0xB37F6200, + 0xB37E2F00, 0xB37CFC00, 0xB37BC900, + 0xB37A9600, 0xB3796300, 0xB3783000, + 0xB376FD00, 0xB375CA00, 0xB3749700, + 0xB3736400, 0xB3723100, 0xB370FE00, + 0xB36FCB00, 0xB36E9800, 0xB36D6500, + 0xB36C3200, 0xB36AFF00, 0xB369CC00, + 0xB3689900, 0xB3676600, 0xB3663300, + 0xB3650000, 0xB363CD00, 0xB3629A00, + 0xB3616700, 0xB3603400, 0xB35F0100, + 0xB35DCE00, 0xB35C9B00, 0xB35B6800, + 0xB35A3500, 0xB3590200, 0xB357CF00, + 0xB3569C00, 0xB3556900, 0xB3543600, + 0xB3530300, 0xB351D000, 0xB3509D00, + 0xB34F6A00, 0xB34E3700, 0xB34D0400, + 0xB34BD100, 0xB34A9E00, 0xB3496B00, + 0xB3483800, 0xB3470500, 0xB345D200, + 0xB3449F00, 0xB3436C00, 0xB3423900, + 0xB3410600, 0xB33FD300, 0xB33EA000, + 0xB33D6D00, 0xB33C3A00, 0xB33B0700, + 0xB339D400, 0xB338A100, 0xB3376E00, + 0xB3363B00, 0xB3350800, 0xB333D500, + 0xB332A200, 0xB3316F00, 0xB3303C00, + 0xB32F0900, 0xB32DD600, 0xB32CA300, + 0xB32B7000, 0xB32A3D00, 0xB3290A00, + 0xB327D700, 0xB326A400, 0xB3257100, + 0xB3243E00, 0xB3230B00, 0xB321D800, + 0xB320A500, 0xB31F7200, 0xB31E3F00, + 0xB31D0C00, 0xB31BD900, 0xB31AA600, + 0xB3197300, 0xB3184000, 0xB3170D00, + 0xB315DA00, 0xB314A700, 0xB3137400, + 0xB3124100, 0xB3110E00, 0xB30FDB00, + 0xB30EA800, 0xB30D7500, 0xB30C4200, + 0xB30B0F00, 0xB309DC00, 0xB308A900, + 0xB3077600, 0xB3064300, 0xB3051000, + 0xB303DD00, 0xB302AA00, 0xB3017700, + 0xB3004400, 0xB2FF1100, 0xB2FDDE00, + 0xB2FCAB00, 0xB2FB7800, 0xB2FA4500, + 0xB2F91200, 0xB2F7DF00, 0xB2F6AC00, + 0xB2F57900, 0xB2F44600, 0xB2F31300, + 0xB2F1E000, 0xB2F0AD00, 0xB2EF7A00, + 0xB2EE4700, 0xB2ED1400, 0xB2EBE100, + 0xB2EAAE00, 0xB2E97B00, 0xB2E84800, + 0xB2E71500, 0xB2E5E200, 0xB2E4AF00, + 0xB2E37C00, 0xB2E24900, 0xB2E11600, + 0xB2DFE300, 0xB2DEB000, 0xB2DD7D00, + 0xB2DC4A00, 0xB2DB1700, 0xB2D9E400, + 0xB2D8B100, 0xB2D77E00, 0xB2D64B00, + 0xB2D51800, 0xB2D3E500, 0xB2D2B200, + 0xB2D17F00, 0xB2D04C00, 0xB2CF1900, + 0xB2CDE600, 0xB2CCB300, 0xB2CB8000, + 0xB2CA4D00, 0xB2C91A00, 0xB2C7E700, + 0xB2C6B400, 0xB2C58100, 0xB2C44E00, + 0xB2C31B00, 0xB2C1E800, 0xB2C0B500, + 0xB2BF8200, 0xB2BE4F00, 0xB2BD1C00, + 0xB2BBE900, 0xB2BAB600, 0xB2B98300, + 0xB2B85000, 0xB2B71D00, 0xB2B5EA00, + 0xB2B4B700, 0xB2B38400, 0xB2B25100, + 0xB2B11E00, 0xB2AFEB00, 0xB2AEB800, + 0xB2AD8500, 0xB2AC5200, 0xB2AB1F00, + 0xB2A9EC00, 0xB2A8B900, 0xB2A78600, + 0xB2A65300, 0xB2A52000, 0xB2A3ED00, + 0xB2A2BA00, 0xB2A18700, 0xB2A05400, + 0xB29F2100, 0xB29DEE00, 0xB29CBB00, + 0xB29B8800, 0xB29A5500, 0xB2992200, + 0xB297EF00, 0xB296BC00, 0xB2958900, + 0xB2945600, 0xB2932300, 0xB291F000, + 0xB290BD00, 0xB28F8A00, 0xB28E5700, + 0xB28D2400, 0xB28BF100, 0xB28ABE00, + 0xB2898B00, 0xB2885800, 0xB2872500, + 0xB285F200, 0xB284BF00, 0xB2838C00, + 0xB2825900, 0xB2812600, 0xB27FF300, + 0xB27EC000, 0xB27D8D00, 0xB27C5A00, + 0xB27B2700, 0xB279F400, 0xB278C100, + 0xB2778E00, 0xB2765B00, 0xB2752800, + 0xB273F500, 0xB272C200, 0xB2718F00, + 0xB2705C00, 0xB26F2900, 0xB26DF600, + 0xB26CC300, 0xB26B9000, 0xB26A5D00, + 0xB2692A00, 0xB267F700, 0xB266C400, + 0xB2659100, 0xB2645E00, 0xB2632B00, + 0xB261F800, 0xB260C500, 0xB25F9200, + 0xB25E5F00, 0xB25D2C00, 0xB25BF900, + 0xB25AC600, 0xB2599300, 0xB2586000, + 0xB2572D00, 0xB255FA00, 0xB254C700, + 0xB2539400, 0xB2526100, 0xB2512E00, + 0xB24FFB00, 0xB24EC800, 0xB24D9500, + 0xB24C6200, 0xB24B2F00, 0xB249FC00, + 0xB248C900, 0xB2479600, 0xB2466300, + 0xB2453000, 0xB243FD00, 0xB242CA00, + 0xB2419700, 0xB2406400, 0xB23F3100, + 0xB23DFE00, 0xB23CCB00, 0xB23B9800, + 0xB23A6500, 0xB2393200, 0xB237FF00, + 0xB236CC00, 0xB2359900, 0xB2346600, + 0xB2333300, 0xB2320000, 0xB230CD00, + 0xB22F9A00, 0xB22E6700, 0xB22D3400, + 0xB22C0100, 0xB22ACE00, 0xB2299B00, + 0xB2286800, 0xB2273500, 0xB2260200, + 0xB224CF00, 0xB2239C00, 0xB2226900, + 0xB2213600, 0xB2200300, 0xB21ED000, + 0xB21D9D00, 0xB21C6A00, 0xB21B3700, + 0xB21A0400, 0xB218D100, 0xB2179E00, + 0xB2166B00, 0xB2153800, 0xB2140500, + 0xB212D200, 0xB2119F00, 0xB2106C00, + 0xB20F3900, 0xB20E0600, 0xB20CD300, + 0xB20BA000, 0xB20A6D00, 0xB2093A00, + 0xB2080700, 0xB206D400, 0xB205A100, + 0xB2046E00, 0xB2033B00, 0xB2020800, + 0xB200D500, 0xB1FFA200, 0xB1FE6F00, + 0xB1FD3C00, 0xB1FC0900, 0xB1FAD600, + 0xB1F9A300, 0xB1F87000, 0xB1F73D00, + 0xB1F60A00, 0xB1F4D700, 0xB1F3A400, + 0xB1F27100, 0xB1F13E00, 0xB1F00B00, + 0xB1EED800, 0xB1EDA500, 0xB1EC7200, + 0xB1EB3F00, 0xB1EA0C00, 0xB1E8D900, + 0xB1E7A600, 0xB1E67300, 0xB1E54000, + 0xB1E40D00, 0xB1E2DA00, 0xB1E1A700, + 0xB1E07400, 0xB1DF4100, 0xB1DE0E00, + 0xB1DCDB00, 0xB1DBA800, 0xB1DA7500, + 0xB1D94200, 0xB1D80F00, 0xB1D6DC00, + 0xB1D5A900, 0xB1D47600, 0xB1D34300, + 0xB1D21000, 0xB1D0DD00, 0xB1CFAA00, + 0xB1CE7700, 0xB1CD4400, 0xB1CC1100, + 0xB1CADE00, 0xB1C9AB00, 0xB1C87800, + 0xB1C74500, 0xB1C61200, 0xB1C4DF00, + 0xB1C3AC00, 0xB1C27900, 0xB1C14600, + 0xB1C01300, 0xB1BEE000, 0xB1BDAD00, + 0xB1BC7A00, 0xB1BB4700, 0xB1BA1400, + 0xB1B8E100, 0xB1B7AE00, 0xB1B67B00, + 0xB1B54800, 0xB1B41500, 0xB1B2E200, + 0xB1B1AF00, 0xB1B07C00, 0xB1AF4900, + 0xB1AE1600, 0xB1ACE300, 0xB1ABB000, + 0xB1AA7D00, 0xB1A94A00, 0xB1A81700, + 0xB1A6E400, 0xB1A5B100, 0xB1A47E00, + 0xB1A34B00, 0xB1A21800, 0xB1A0E500, + 0xB19FB200, 0xB19E7F00, 0xB19D4C00, + 0xB19C1900, 0xB19AE600, 0xB199B300, + 0xB1988000, 0xB1974D00, 0xB1961A00, + 0xB194E700, 0xB193B400, 0xB1928100, + 0xB1914E00, 0xB1901B00, 0xB18EE800, + 0xB18DB500, 0xB18C8200, 0xB18B4F00, + 0xB18A1C00, 0xB188E900, 0xB187B600, + 0xB1868300, 0xB1855000, 0xB1841D00, + 0xB182EA00, 0xB181B700, 0xB1808400, + 0xB17F5100, 0xB17E1E00, 0xB17CEB00, + 0xB17BB800, 0xB17A8500, 0xB1795200, + 0xB1781F00, 0xB176EC00, 0xB175B900, + 0xB1748600, 0xB1735300, 0xB1722000, + 0xB170ED00, 0xB16FBA00, 0xB16E8700, + 0xB16D5400, 0xB16C2100, 0xB16AEE00, + 0xB169BB00, 0xB1688800, 0xB1675500, + 0xB1662200, 0xB164EF00, 0xB163BC00, + 0xB1628900, 0xB1615600, 0xB1602300, + 0xB15EF000, 0xB15DBD00, 0xB15C8A00, + 0xB15B5700, 0xB15A2400, 0xB158F100, + 0xB157BE00, 0xB1568B00, 0xB1555800, + 0xB1542500, 0xB152F200, 0xB151BF00, + 0xB1508C00, 0xB14F5900, 0xB14E2600, + 0xB14CF300, 0xB14BC000, 0xB14A8D00, + 0xB1495A00, 0xB1482700, 0xB146F400, + 0xB145C100, 0xB1448E00, 0xB1435B00, + 0xB1422800, 0xB140F500, 0xB13FC200, + 0xB13E8F00, 0xB13D5C00, 0xB13C2900, + 0xB13AF600, 0xB139C300, 0xB1389000, + 0xB1375D00, 0xB1362A00, 0xB134F700, + 0xB133C400, 0xB1329100, 0xB1315E00, + 0xB1302B00, 0xB12EF800, 0xB12DC500, + 0xB12C9200, 0xB12B5F00, 0xB12A2C00, + 0xB128F900, 0xB127C600, 0xB1269300, + 0xB1256000, 0xB1242D00, 0xB122FA00, + 0xB121C700, 0xB1209400, 0xB11F6100, + 0xB11E2E00, 0xB11CFB00, 0xB11BC800, + 0xB11A9500, 0xB1196200, 0xB1182F00, + 0xB116FC00, 0xB115C900, 0xB1149600, + 0xB1136300, 0xB1123000, 0xB110FD00, + 0xB10FCA00, 0xB10E9700, 0xB10D6400, + 0xB10C3100, 0xB10AFE00, 0xB109CB00, + 0xB1089800, 0xB1076500, 0xB1063200, + 0xB104FF00, 0xB103CC00, 0xB1029900, + 0xB1016600, 0xB1003300, 0xB0FF0000, + 0xB0FDCD00, 0xB0FC9A00, 0xB0FB6700, + 0xB0FA3400, 0xB0F90100, 0xB0F7CE00, + 0xB0F69B00, 0xB0F56800, 0xB0F43500, + 0xB0F30200, 0xB0F1CF00, 0xB0F09C00, + 0xB0EF6900, 0xB0EE3600, 0xB0ED0300, + 0xB0EBD000, 0xB0EA9D00, 0xB0E96A00, + 0xB0E83700, 0xB0E70400, 0xB0E5D100, + 0xB0E49E00, 0xB0E36B00, 0xB0E23800, + 0xB0E10500, 0xB0DFD200, 0xB0DE9F00, + 0xB0DD6C00, 0xB0DC3900, 0xB0DB0600, + 0xB0D9D300, 0xB0D8A000, 0xB0D76D00, + 0xB0D63A00, 0xB0D50700, 0xB0D3D400, + 0xB0D2A100, 0xB0D16E00, 0xB0D03B00, + 0xB0CF0800, 0xB0CDD500, 0xB0CCA200, + 0xB0CB6F00, 0xB0CA3C00, 0xB0C90900, + 0xB0C7D600, 0xB0C6A300, 0xB0C57000, + 0xB0C43D00, 0xB0C30A00, 0xB0C1D700, + 0xB0C0A400, 0xB0BF7100, 0xB0BE3E00, + 0xB0BD0B00, 0xB0BBD800, 0xB0BAA500, + 0xB0B97200, 0xB0B83F00, 0xB0B70C00, + 0xB0B5D900, 0xB0B4A600, 0xB0B37300, + 0xB0B24000, 0xB0B10D00, 0xB0AFDA00, + 0xB0AEA700, 0xB0AD7400, 0xB0AC4100, + 0xB0AB0E00, 0xB0A9DB00, 0xB0A8A800, + 0xB0A77500, 0xB0A64200, 0xB0A50F00, + 0xB0A3DC00, 0xB0A2A900, 0xB0A17600, + 0xB0A04300, 0xB09F1000, 0xB09DDD00, + 0xB09CAA00, 0xB09B7700, 0xB09A4400, + 0xB0991100, 0xB097DE00, 0xB096AB00, + 0xB0957800, 0xB0944500, 0xB0931200, + 0xB091DF00, 0xB090AC00, 0xB08F7900, + 0xB08E4600, 0xB08D1300, 0xB08BE000, + 0xB08AAD00, 0xB0897A00, 0xB0884700, + 0xB0871400, 0xB085E100, 0xB084AE00, + 0xB0837B00, 0xB0824800, 0xB0811500, + 0xB07FE200, 0xB07EAF00, 0xB07D7C00, + 0xB07C4900, 0xB07B1600, 0xB079E300, + 0xB078B000, 0xB0777D00, 0xB0764A00, + 0xB0751700, 0xB073E400, 0xB072B100, + 0xB0717E00, 0xB0704B00, 0xB06F1800, + 0xB06DE500, 0xB06CB200, 0xB06B7F00, + 0xB06A4C00, 0xB0691900, 0xB067E600, + 0xB066B300, 0xB0658000, 0xB0644D00, + 0xB0631A00, 0xB061E700, 0xB060B400, + 0xB05F8100, 0xB05E4E00, 0xB05D1B00, + 0xB05BE800, 0xB05AB500, 0xB0598200, + 0xB0584F00, 0xB0571C00, 0xB055E900, + 0xB054B600, 0xB0538300, 0xB0525000, + 0xB0511D00, 0xB04FEA00, 0xB04EB700, + 0xB04D8400, 0xB04C5100, 0xB04B1E00, + 0xB049EB00, 0xB048B800, 0xB0478500, + 0xB0465200, 0xB0451F00, 0xB043EC00, + 0xB042B900, 0xB0418600, 0xB0405300, + 0xB03F2000, 0xB03DED00, 0xB03CBA00, + 0xB03B8700, 0xB03A5400, 0xB0392100, + 0xB037EE00, 0xB036BB00, 0xB0358800, + 0xB0345500, 0xB0332200, 0xB031EF00, + 0xB030BC00, 0xB02F8900, 0xB02E5600, + 0xB02D2300, 0xB02BF000, 0xB02ABD00, + 0xB0298A00, 0xB0285700, 0xB0272400, + 0xB025F100, 0xB024BE00, 0xB0238B00, + 0xB0225800, 0xB0212500, 0xB01FF200, + 0xB01EBF00, 0xB01D8C00, 0xB01C5900, + 0xB01B2600, 0xB019F300, 0xB018C000, + 0xB0178D00, 0xB0165A00, 0xB0152700, + 0xB013F400, 0xB012C100, 0xB0118E00, + 0xB0105B00, 0xB00F2800, 0xB00DF500, + 0xB00CC200, 0xB00B8F00, 0xB00A5C00, + 0xB0092900, 0xB007F600, 0xB006C300, + 0xB0059000, 0xB0045D00, 0xB0032A00, + 0xB001F700, 0xB000C400, 0xAFFF9100, + 0xAFFE5E00, 0xAFFD2B00, 0xAFFBF800, + 0xAFFAC500, 0xAFF99200, 0xAFF85F00, + 0xAFF72C00, 0xAFF5F900, 0xAFF4C600, + 0xAFF39300, 0xAFF26000, 0xAFF12D00, + 0xAFEFFA00, 0xAFEEC700, 0xAFED9400, + 0xAFEC6100, 0xAFEB2E00, 0xAFE9FB00, + 0xAFE8C800, 0xAFE79500, 0xAFE66200, + 0xAFE52F00, 0xAFE3FC00, 0xAFE2C900, + 0xAFE19600, 0xAFE06300, 0xAFDF3000, + 0xAFDDFD00, 0xAFDCCA00, 0xAFDB9700, + 0xAFDA6400, 0xAFD93100, 0xAFD7FE00, + 0xAFD6CB00, 0xAFD59800, 0xAFD46500, + 0xAFD33200, 0xAFD1FF00, 0xAFD0CC00, + 0xAFCF9900, 0xAFCE6600, 0xAFCD3300, + 0xAFCC0000, 0xAFCACD00, 0xAFC99A00, + 0xAFC86700, 0xAFC73400, 0xAFC60100, + 0xAFC4CE00, 0xAFC39B00, 0xAFC26800, + 0xAFC13500, 0xAFC00200, 0xAFBECF00, + 0xAFBD9C00, 0xAFBC6900, 0xAFBB3600, + 0xAFBA0300, 0xAFB8D000, 0xAFB79D00, + 0xAFB66A00, 0xAFB53700, 0xAFB40400, + 0xAFB2D100, 0xAFB19E00, 0xAFB06B00, + 0xAFAF3800, 0xAFAE0500, 0xAFACD200, + 0xAFAB9F00, 0xAFAA6C00, 0xAFA93900, + 0xAFA80600, 0xAFA6D300, 0xAFA5A000, + 0xAFA46D00, 0xAFA33A00, 0xAFA20700, + 0xAFA0D400, 0xAF9FA100, 0xAF9E6E00, + 0xAF9D3B00, 0xAF9C0800, 0xAF9AD500, + 0xAF99A200, 0xAF986F00, 0xAF973C00, + 0xAF960900, 0xAF94D600, 0xAF93A300, + 0xAF927000, 0xAF913D00, 0xAF900A00, + 0xAF8ED700, 0xAF8DA400, 0xAF8C7100, + 0xAF8B3E00, 0xAF8A0B00, 0xAF88D800, + 0xAF87A500, 0xAF867200, 0xAF853F00, + 0xAF840C00, 0xAF82D900, 0xAF81A600, + 0xAF807300, 0xAF7F4000, 0xAF7E0D00, + 0xAF7CDA00, 0xAF7BA700, 0xAF7A7400, + 0xAF794100, 0xAF780E00, 0xAF76DB00, + 0xAF75A800, 0xAF747500, 0xAF734200, + 0xAF720F00, 0xAF70DC00, 0xAF6FA900, + 0xAF6E7600, 0xAF6D4300, 0xAF6C1000, + 0xAF6ADD00, 0xAF69AA00, 0xAF687700, + 0xAF674400, 0xAF661100, 0xAF64DE00, + 0xAF63AB00, 0xAF627800, 0xAF614500, + 0xAF601200, 0xAF5EDF00, 0xAF5DAC00, + 0xAF5C7900, 0xAF5B4600, 0xAF5A1300, + 0xAF58E000, 0xAF57AD00, 0xAF567A00, + 0xAF554700, 0xAF541400, 0xAF52E100, + 0xAF51AE00, 0xAF507B00, 0xAF4F4800, + 0xAF4E1500, 0xAF4CE200, 0xAF4BAF00, + 0xAF4A7C00, 0xAF494900, 0xAF481600, + 0xAF46E300, 0xAF45B000, 0xAF447D00, + 0xAF434A00, 0xAF421700, 0xAF40E400, + 0xAF3FB100, 0xAF3E7E00, 0xAF3D4B00, + 0xAF3C1800, 0xAF3AE500, 0xAF39B200, + 0xAF387F00, 0xAF374C00, 0xAF361900, + 0xAF34E600, 0xAF33B300, 0xAF328000, + 0xAF314D00, 0xAF301A00, 0xAF2EE700, + 0xAF2DB400, 0xAF2C8100, 0xAF2B4E00, + 0xAF2A1B00, 0xAF28E800, 0xAF27B500, + 0xAF268200, 0xAF254F00, 0xAF241C00, + 0xAF22E900, 0xAF21B600, 0xAF208300, + 0xAF1F5000, 0xAF1E1D00, 0xAF1CEA00, + 0xAF1BB700, 0xAF1A8400, 0xAF195100, + 0xAF181E00, 0xAF16EB00, 0xAF15B800, + 0xAF148500, 0xAF135200, 0xAF121F00, + 0xAF10EC00, 0xAF0FB900, 0xAF0E8600, + 0xAF0D5300, 0xAF0C2000, 0xAF0AED00, + 0xAF09BA00, 0xAF088700, 0xAF075400, + 0xAF062100, 0xAF04EE00, 0xAF03BB00, + 0xAF028800, 0xAF015500, 0xAF002200, + 0xAEFEEF00, 0xAEFDBC00, 0xAEFC8900, + 0xAEFB5600, 0xAEFA2300, 0xAEF8F000, + 0xAEF7BD00, 0xAEF68A00, 0xAEF55700, + 0xAEF42400, 0xAEF2F100, 0xAEF1BE00, + 0xAEF08B00, 0xAEEF5800, 0xAEEE2500, + 0xAEECF200, 0xAEEBBF00, 0xAEEA8C00, + 0xAEE95900, 0xAEE82600, 0xAEE6F300, + 0xAEE5C000, 0xAEE48D00, 0xAEE35A00, + 0xAEE22700, 0xAEE0F400, 0xAEDFC100, + 0xAEDE8E00, 0xAEDD5B00, 0xAEDC2800, + 0xAEDAF500, 0xAED9C200, 0xAED88F00, + 0xAED75C00, 0xAED62900, 0xAED4F600, + 0xAED3C300, 0xAED29000, 0xAED15D00, + 0xAED02A00, 0xAECEF700, 0xAECDC400, + 0xAECC9100, 0xAECB5E00, 0xAECA2B00, + 0xAEC8F800, 0xAEC7C500, 0xAEC69200, + 0xAEC55F00, 0xAEC42C00, 0xAEC2F900, + 0xAEC1C600, 0xAEC09300, 0xAEBF6000, + 0xAEBE2D00, 0xAEBCFA00, 0xAEBBC700, + 0xAEBA9400, 0xAEB96100, 0xAEB82E00, + 0xAEB6FB00, 0xAEB5C800, 0xAEB49500, + 0xAEB36200, 0xAEB22F00, 0xAEB0FC00, + 0xAEAFC900, 0xAEAE9600, 0xAEAD6300, + 0xAEAC3000, 0xAEAAFD00, 0xAEA9CA00, + 0xAEA89700, 0xAEA76400, 0xAEA63100, + 0xAEA4FE00, 0xAEA3CB00, 0xAEA29800, + 0xAEA16500, 0xAEA03200, 0xAE9EFF00, + 0xAE9DCC00, 0xAE9C9900, 0xAE9B6600, + 0xAE9A3300, 0xAE990000, 0xAE97CD00, + 0xAE969A00, 0xAE956700, 0xAE943400, + 0xAE930100, 0xAE91CE00, 0xAE909B00, + 0xAE8F6800, 0xAE8E3500, 0xAE8D0200, + 0xAE8BCF00, 0xAE8A9C00, 0xAE896900, + 0xAE883600, 0xAE870300, 0xAE85D000, + 0xAE849D00, 0xAE836A00, 0xAE823700, + 0xAE810400, 0xAE7FD100, 0xAE7E9E00, + 0xAE7D6B00, 0xAE7C3800, 0xAE7B0500, + 0xAE79D200, 0xAE789F00, 0xAE776C00, + 0xAE763900, 0xAE750600, 0xAE73D300, + 0xAE72A000, 0xAE716D00, 0xAE703A00, + 0xAE6F0700, 0xAE6DD400, 0xAE6CA100, + 0xAE6B6E00, 0xAE6A3B00, 0xAE690800, + 0xAE67D500, 0xAE66A200, 0xAE656F00, + 0xAE643C00, 0xAE630900, 0xAE61D600, + 0xAE60A300, 0xAE5F7000, 0xAE5E3D00, + 0xAE5D0A00, 0xAE5BD700, 0xAE5AA400, + 0xAE597100, 0xAE583E00, 0xAE570B00, + 0xAE55D800, 0xAE54A500, 0xAE537200, + 0xAE523F00, 0xAE510C00, 0xAE4FD900, + 0xAE4EA600, 0xAE4D7300, 0xAE4C4000, + 0xAE4B0D00, 0xAE49DA00, 0xAE48A700, + 0xAE477400, 0xAE464100, 0xAE450E00, + 0xAE43DB00, 0xAE42A800, 0xAE417500, + 0xAE404200, 0xAE3F0F00, 0xAE3DDC00, + 0xAE3CA900, 0xAE3B7600, 0xAE3A4300, + 0xAE391000, 0xAE37DD00, 0xAE36AA00, + 0xAE357700, 0xAE344400, 0xAE331100, + 0xAE31DE00, 0xAE30AB00, 0xAE2F7800, + 0xAE2E4500, 0xAE2D1200, 0xAE2BDF00, + 0xAE2AAC00, 0xAE297900, 0xAE284600, + 0xAE271300, 0xAE25E000, 0xAE24AD00, + 0xAE237A00, 0xAE224700, 0xAE211400, + 0xAE1FE100, 0xAE1EAE00, 0xAE1D7B00, + 0xAE1C4800, 0xAE1B1500, 0xAE19E200, + 0xAE18AF00, 0xAE177C00, 0xAE164900, + 0xAE151600, 0xAE13E300, 0xAE12B000, + 0xAE117D00, 0xAE104A00, 0xAE0F1700, + 0xAE0DE400, 0xAE0CB100, 0xAE0B7E00, + 0xAE0A4B00, 0xAE091800, 0xAE07E500, + 0xAE06B200, 0xAE057F00, 0xAE044C00, + 0xAE031900, 0xAE01E600, 0xAE00B300, + 0xADFF8000, 0xADFE4D00, 0xADFD1A00, + 0xADFBE700, 0xADFAB400, 0xADF98100, + 0xADF84E00, 0xADF71B00, 0xADF5E800, + 0xADF4B500, 0xADF38200, 0xADF24F00, + 0xADF11C00, 0xADEFE900, 0xADEEB600, + 0xADED8300, 0xADEC5000, 0xADEB1D00, + 0xADE9EA00, 0xADE8B700, 0xADE78400, + 0xADE65100, 0xADE51E00, 0xADE3EB00, + 0xADE2B800, 0xADE18500, 0xADE05200, + 0xADDF1F00, 0xADDDEC00, 0xADDCB900, + 0xADDB8600, 0xADDA5300, 0xADD92000, + 0xADD7ED00, 0xADD6BA00, 0xADD58700, + 0xADD45400, 0xADD32100, 0xADD1EE00, + 0xADD0BB00, 0xADCF8800, 0xADCE5500, + 0xADCD2200, 0xADCBEF00, 0xADCABC00, + 0xADC98900, 0xADC85600, 0xADC72300, + 0xADC5F000, 0xADC4BD00, 0xADC38A00, + 0xADC25700, 0xADC12400, 0xADBFF100, + 0xADBEBE00, 0xADBD8B00, 0xADBC5800, + 0xADBB2500, 0xADB9F200, 0xADB8BF00, + 0xADB78C00, 0xADB65900, 0xADB52600, + 0xADB3F300, 0xADB2C000, 0xADB18D00, + 0xADB05A00, 0xADAF2700, 0xADADF400, + 0xADACC100, 0xADAB8E00, 0xADAA5B00, + 0xADA92800, 0xADA7F500, 0xADA6C200, + 0xADA58F00, 0xADA45C00, 0xADA32900, + 0xADA1F600, 0xADA0C300, 0xAD9F9000, + 0xAD9E5D00, 0xAD9D2A00, 0xAD9BF700, + 0xAD9AC400, 0xAD999100, 0xAD985E00, + 0xAD972B00, 0xAD95F800, 0xAD94C500, + 0xAD939200, 0xAD925F00, 0xAD912C00, + 0xAD8FF900, 0xAD8EC600, 0xAD8D9300, + 0xAD8C6000, 0xAD8B2D00, 0xAD89FA00, + 0xAD88C700, 0xAD879400, 0xAD866100, + 0xAD852E00, 0xAD83FB00, 0xAD82C800, + 0xAD819500, 0xAD806200, 0xAD7F2F00, + 0xAD7DFC00, 0xAD7CC900, 0xAD7B9600, + 0xAD7A6300, 0xAD793000, 0xAD77FD00, + 0xAD76CA00, 0xAD759700, 0xAD746400, + 0xAD733100, 0xAD71FE00, 0xAD70CB00, + 0xAD6F9800, 0xAD6E6500, 0xAD6D3200, + 0xAD6BFF00, 0xAD6ACC00, 0xAD699900, + 0xAD686600, 0xAD673300, 0xAD660000, + 0xAD64CD00, 0xAD639A00, 0xAD626700, + 0xAD613400, 0xAD600100, 0xAD5ECE00, + 0xAD5D9B00, 0xAD5C6800, 0xAD5B3500, + 0xAD5A0200, 0xAD58CF00, 0xAD579C00, + 0xAD566900, 0xAD553600, 0xAD540300, + 0xAD52D000, 0xAD519D00, 0xAD506A00, + 0xAD4F3700, 0xAD4E0400, 0xAD4CD100, + 0xAD4B9E00, 0xAD4A6B00, 0xAD493800, + 0xAD480500, 0xAD46D200, 0xAD459F00, + 0xAD446C00, 0xAD433900, 0xAD420600, + 0xAD40D300, 0xAD3FA000, 0xAD3E6D00, + 0xAD3D3A00, 0xAD3C0700, 0xAD3AD400, + 0xAD39A100, 0xAD386E00, 0xAD373B00, + 0xAD360800, 0xAD34D500, 0xAD33A200, + 0xAD326F00, 0xAD313C00, 0xAD300900, + 0xAD2ED600, 0xAD2DA300, 0xAD2C7000, + 0xAD2B3D00, 0xAD2A0A00, 0xAD28D700, + 0xAD27A400, 0xAD267100, 0xAD253E00, + 0xAD240B00, 0xAD22D800, 0xAD21A500, + 0xAD207200, 0xAD1F3F00, 0xAD1E0C00, + 0xAD1CD900, 0xAD1BA600, 0xAD1A7300, + 0xAD194000, 0xAD180D00, 0xAD16DA00, + 0xAD15A700, 0xAD147400, 0xAD134100, + 0xAD120E00, 0xAD10DB00, 0xAD0FA800, + 0xAD0E7500, 0xAD0D4200, 0xAD0C0F00, + 0xAD0ADC00, 0xAD09A900, 0xAD087600, + 0xAD074300, 0xAD061000, 0xAD04DD00, + 0xAD03AA00, 0xAD027700, 0xAD014400, + 0xAD001100, 0xACFEDE00, 0xACFDAB00, + 0xACFC7800, 0xACFB4500, 0xACFA1200, + 0xACF8DF00, 0xACF7AC00, 0xACF67900, + 0xACF54600, 0xACF41300, 0xACF2E000, + 0xACF1AD00, 0xACF07A00, 0xACEF4700, + 0xACEE1400, 0xACECE100, 0xACEBAE00, + 0xACEA7B00, 0xACE94800, 0xACE81500, + 0xACE6E200, 0xACE5AF00, 0xACE47C00, + 0xACE34900, 0xACE21600, 0xACE0E300, + 0xACDFB000, 0xACDE7D00, 0xACDD4A00, + 0xACDC1700, 0xACDAE400, 0xACD9B100, + 0xACD87E00, 0xACD74B00, 0xACD61800, + 0xACD4E500, 0xACD3B200, 0xACD27F00, + 0xACD14C00, 0xACD01900, 0xACCEE600, + 0xACCDB300, 0xACCC8000, 0xACCB4D00, + 0xACCA1A00, 0xACC8E700, 0xACC7B400, + 0xACC68100, 0xACC54E00, 0xACC41B00, + 0xACC2E800, 0xACC1B500, 0xACC08200, + 0xACBF4F00, 0xACBE1C00, 0xACBCE900, + 0xACBBB600, 0xACBA8300, 0xACB95000, + 0xACB81D00, 0xACB6EA00, 0xACB5B700, + 0xACB48400, 0xACB35100, 0xACB21E00, + 0xACB0EB00, 0xACAFB800, 0xACAE8500, + 0xACAD5200, 0xACAC1F00, 0xACAAEC00, + 0xACA9B900, 0xACA88600, 0xACA75300, + 0xACA62000, 0xACA4ED00, 0xACA3BA00, + 0xACA28700, 0xACA15400, 0xACA02100, + 0xAC9EEE00, 0xAC9DBB00, 0xAC9C8800, + 0xAC9B5500, 0xAC9A2200, 0xAC98EF00, + 0xAC97BC00, 0xAC968900, 0xAC955600, + 0xAC942300, 0xAC92F000, 0xAC91BD00, + 0xAC908A00, 0xAC8F5700, 0xAC8E2400, + 0xAC8CF100, 0xAC8BBE00, 0xAC8A8B00, + 0xAC895800, 0xAC882500, 0xAC86F200, + 0xAC85BF00, 0xAC848C00, 0xAC835900, + 0xAC822600, 0xAC80F300, 0xAC7FC000, + 0xAC7E8D00, 0xAC7D5A00, 0xAC7C2700, + 0xAC7AF400, 0xAC79C100, 0xAC788E00, + 0xAC775B00, 0xAC762800, 0xAC74F500, + 0xAC73C200, 0xAC728F00, 0xAC715C00, + 0xAC702900, 0xAC6EF600, 0xAC6DC300, + 0xAC6C9000, 0xAC6B5D00, 0xAC6A2A00, + 0xAC68F700, 0xAC67C400, 0xAC669100, + 0xAC655E00, 0xAC642B00, 0xAC62F800, + 0xAC61C500, 0xAC609200, 0xAC5F5F00, + 0xAC5E2C00, 0xAC5CF900, 0xAC5BC600, + 0xAC5A9300, 0xAC596000, 0xAC582D00, + 0xAC56FA00, 0xAC55C700, 0xAC549400, + 0xAC536100, 0xAC522E00, 0xAC50FB00, + 0xAC4FC800, 0xAC4E9500, 0xAC4D6200, + 0xAC4C2F00, 0xAC4AFC00, 0xAC49C900, + 0xAC489600, 0xAC476300, 0xAC463000, + 0xAC44FD00, 0xAC43CA00, 0xAC429700, + 0xAC416400, 0xAC403100, 0xAC3EFE00, + 0xAC3DCB00, 0xAC3C9800, 0xAC3B6500, + 0xAC3A3200, 0xAC38FF00, 0xAC37CC00, + 0xAC369900, 0xAC356600, 0xAC343300, + 0xAC330000, 0xAC31CD00, 0xAC309A00, + 0xAC2F6700, 0xAC2E3400, 0xAC2D0100, + 0xAC2BCE00, 0xAC2A9B00, 0xAC296800, + 0xAC283500, 0xAC270200, 0xAC25CF00, + 0xAC249C00, 0xAC236900, 0xAC223600, + 0xAC210300, 0xAC1FD000, 0xAC1E9D00, + 0xAC1D6A00, 0xAC1C3700, 0xAC1B0400, + 0xAC19D100, 0xAC189E00, 0xAC176B00, + 0xAC163800, 0xAC150500, 0xAC13D200, + 0xAC129F00, 0xAC116C00, 0xAC103900, + 0xAC0F0600, 0xAC0DD300, 0xAC0CA000, + 0xAC0B6D00, 0xAC0A3A00, 0xAC090700, + 0xAC07D400, 0xAC06A100, 0xAC056E00, + 0xAC043B00, 0xAC030800, 0xAC01D500, + 0xAC00A200, 0xABFF6F00, 0xABFE3C00, + 0xABFD0900, 0xABFBD600, 0xABFAA300, + 0xABF97000, 0xABF83D00, 0xABF70A00, + 0xABF5D700, 0xABF4A400, 0xABF37100, + 0xABF23E00, 0xABF10B00, 0xABEFD800, + 0xABEEA500, 0xABED7200, 0xABEC3F00, + 0xABEB0C00, 0xABE9D900, 0xABE8A600, + 0xABE77300, 0xABE64000, 0xABE50D00, + 0xABE3DA00, 0xABE2A700, 0xABE17400, + 0xABE04100, 0xABDF0E00, 0xABDDDB00, + 0xABDCA800, 0xABDB7500, 0xABDA4200, + 0xABD90F00, 0xABD7DC00, 0xABD6A900, + 0xABD57600, 0xABD44300, 0xABD31000, + 0xABD1DD00, 0xABD0AA00, 0xABCF7700, + 0xABCE4400, 0xABCD1100, 0xABCBDE00, + 0xABCAAB00, 0xABC97800, 0xABC84500, + 0xABC71200, 0xABC5DF00, 0xABC4AC00, + 0xABC37900, 0xABC24600, 0xABC11300, + 0xABBFE000, 0xABBEAD00, 0xABBD7A00, + 0xABBC4700, 0xABBB1400, 0xABB9E100, + 0xABB8AE00, 0xABB77B00, 0xABB64800, + 0xABB51500, 0xABB3E200, 0xABB2AF00, + 0xABB17C00, 0xABB04900, 0xABAF1600, + 0xABADE300, 0xABACB000, 0xABAB7D00, + 0xABAA4A00, 0xABA91700, 0xABA7E400, + 0xABA6B100, 0xABA57E00, 0xABA44B00, + 0xABA31800, 0xABA1E500, 0xABA0B200, + 0xAB9F7F00, 0xAB9E4C00, 0xAB9D1900, + 0xAB9BE600, 0xAB9AB300, 0xAB998000, + 0xAB984D00, 0xAB971A00, 0xAB95E700, + 0xAB94B400, 0xAB938100, 0xAB924E00, + 0xAB911B00, 0xAB8FE800, 0xAB8EB500, + 0xAB8D8200, 0xAB8C4F00, 0xAB8B1C00, + 0xAB89E900, 0xAB88B600, 0xAB878300, + 0xAB865000, 0xAB851D00, 0xAB83EA00, + 0xAB82B700, 0xAB818400, 0xAB805100, + 0xAB7F1E00, 0xAB7DEB00, 0xAB7CB800, + 0xAB7B8500, 0xAB7A5200, 0xAB791F00, + 0xAB77EC00, 0xAB76B900, 0xAB758600, + 0xAB745300, 0xAB732000, 0xAB71ED00, + 0xAB70BA00, 0xAB6F8700, 0xAB6E5400, + 0xAB6D2100, 0xAB6BEE00, 0xAB6ABB00, + 0xAB698800, 0xAB685500, 0xAB672200, + 0xAB65EF00, 0xAB64BC00, 0xAB638900, + 0xAB625600, 0xAB612300, 0xAB5FF000, + 0xAB5EBD00, 0xAB5D8A00, 0xAB5C5700, + 0xAB5B2400, 0xAB59F100, 0xAB58BE00, + 0xAB578B00, 0xAB565800, 0xAB552500, + 0xAB53F200, 0xAB52BF00, 0xAB518C00, + 0xAB505900, 0xAB4F2600, 0xAB4DF300, + 0xAB4CC000, 0xAB4B8D00, 0xAB4A5A00, + 0xAB492700, 0xAB47F400, 0xAB46C100, + 0xAB458E00, 0xAB445B00, 0xAB432800, + 0xAB41F500, 0xAB40C200, 0xAB3F8F00, + 0xAB3E5C00, 0xAB3D2900, 0xAB3BF600, + 0xAB3AC300, 0xAB399000, 0xAB385D00, + 0xAB372A00, 0xAB35F700, 0xAB34C400, + 0xAB339100, 0xAB325E00, 0xAB312B00, + 0xAB2FF800, 0xAB2EC500, 0xAB2D9200, + 0xAB2C5F00, 0xAB2B2C00, 0xAB29F900, + 0xAB28C600, 0xAB279300, 0xAB266000, + 0xAB252D00, 0xAB23FA00, 0xAB22C700, + 0xAB219400, 0xAB206100, 0xAB1F2E00, + 0xAB1DFB00, 0xAB1CC800, 0xAB1B9500, + 0xAB1A6200, 0xAB192F00, 0xAB17FC00, + 0xAB16C900, 0xAB159600, 0xAB146300, + 0xAB133000, 0xAB11FD00, 0xAB10CA00, + 0xAB0F9700, 0xAB0E6400, 0xAB0D3100, + 0xAB0BFE00, 0xAB0ACB00, 0xAB099800, + 0xAB086500, 0xAB073200, 0xAB05FF00, + 0xAB04CC00, 0xAB039900, 0xAB026600, + 0xAB013300, 0xAB000000, 0xAAFEE080, + 0xAAFDC100, 0xAAFCA180, 0xAAFB8200, + 0xAAFA6280, 0xAAF94300, 0xAAF82380, + 0xAAF70400, 0xAAF5E480, 0xAAF4C500, + 0xAAF3A580, 0xAAF28600, 0xAAF16680, + 0xAAF04700, 0xAAEF2780, 0xAAEE0800, + 0xAAECE880, 0xAAEBC900, 0xAAEAA980, + 0xAAE98A00, 0xAAE86A80, 0xAAE74B00, + 0xAAE62B80, 0xAAE50C00, 0xAAE3EC80, + 0xAAE2CD00, 0xAAE1AD80, 0xAAE08E00, + 0xAADF6E80, 0xAADE4F00, 0xAADD2F80, + 0xAADC1000, 0xAADAF080, 0xAAD9D100, + 0xAAD8B180, 0xAAD79200, 0xAAD67280, + 0xAAD55300, 0xAAD43380, 0xAAD31400, + 0xAAD1F480, 0xAAD0D500, 0xAACFB580, + 0xAACE9600, 0xAACD7680, 0xAACC5700, + 0xAACB3780, 0xAACA1800, 0xAAC8F880, + 0xAAC7D900, 0xAAC6B980, 0xAAC59A00, + 0xAAC47A80, 0xAAC35B00, 0xAAC23B80, + 0xAAC11C00, 0xAABFFC80, 0xAABEDD00, + 0xAABDBD80, 0xAABC9E00, 0xAABB7E80, + 0xAABA5F00, 0xAAB93F80, 0xAAB82000, + 0xAAB70080, 0xAAB5E100, 0xAAB4C180, + 0xAAB3A200, 0xAAB28280, 0xAAB16300, + 0xAAB04380, 0xAAAF2400, 0xAAAE0480, + 0xAAACE500, 0xAAABC580, 0xAAAAA600, + 0xAAA98680, 0xAAA86700, 0xAAA74780, + 0xAAA62800, 0xAAA50880, 0xAAA3E900, + 0xAAA2C980, 0xAAA1AA00, 0xAAA08A80, + 0xAA9F6B00, 0xAA9E4B80, 0xAA9D2C00, + 0xAA9C0C80, 0xAA9AED00, 0xAA99CD80, + 0xAA98AE00, 0xAA978E80, 0xAA966F00, + 0xAA954F80, 0xAA943000, 0xAA931080, + 0xAA91F100, 0xAA90D180, 0xAA8FB200, + 0xAA8E9280, 0xAA8D7300, 0xAA8C5380, + 0xAA8B3400, 0xAA8A1480, 0xAA88F500, + 0xAA87D580, 0xAA86B600, 0xAA859680, + 0xAA847700, 0xAA835780, 0xAA823800, + 0xAA811880, 0xAA7FF900, 0xAA7ED980, + 0xAA7DBA00, 0xAA7C9A80, 0xAA7B7B00, + 0xAA7A5B80, 0xAA793C00, 0xAA781C80, + 0xAA76FD00, 0xAA75DD80, 0xAA74BE00, + 0xAA739E80, 0xAA727F00, 0xAA715F80, + 0xAA704000, 0xAA6F2080, 0xAA6E0100, + 0xAA6CE180, 0xAA6BC200, 0xAA6AA280, + 0xAA698300, 0xAA686380, 0xAA674400, + 0xAA662480, 0xAA650500, 0xAA63E580, + 0xAA62C600, 0xAA61A680, 0xAA608700, + 0xAA5F6780, 0xAA5E4800, 0xAA5D2880, + 0xAA5C0900, 0xAA5AE980, 0xAA59CA00, + 0xAA58AA80, 0xAA578B00, 0xAA566B80, + 0xAA554C00, 0xAA542C80, 0xAA530D00, + 0xAA51ED80, 0xAA50CE00, 0xAA4FAE80, + 0xAA4E8F00, 0xAA4D6F80, 0xAA4C5000, + 0xAA4B3080, 0xAA4A1100, 0xAA48F180, + 0xAA47D200, 0xAA46B280, 0xAA459300, + 0xAA447380, 0xAA435400, 0xAA423480, + 0xAA411500, 0xAA3FF580, 0xAA3ED600, + 0xAA3DB680, 0xAA3C9700, 0xAA3B7780, + 0xAA3A5800, 0xAA393880, 0xAA381900, + 0xAA36F980, 0xAA35DA00, 0xAA34BA80, + 0xAA339B00, 0xAA327B80, 0xAA315C00, + 0xAA303C80, 0xAA2F1D00, 0xAA2DFD80, + 0xAA2CDE00, 0xAA2BBE80, 0xAA2A9F00, + 0xAA297F80, 0xAA286000, 0xAA274080, + 0xAA262100, 0xAA250180, 0xAA23E200, + 0xAA22C280, 0xAA21A300, 0xAA208380, + 0xAA1F6400, 0xAA1E4480, 0xAA1D2500, + 0xAA1C0580, 0xAA1AE600, 0xAA19C680, + 0xAA18A700, 0xAA178780, 0xAA166800, + 0xAA154880, 0xAA142900, 0xAA130980, + 0xAA11EA00, 0xAA10CA80, 0xAA0FAB00, + 0xAA0E8B80, 0xAA0D6C00, 0xAA0C4C80, + 0xAA0B2D00, 0xAA0A0D80, 0xAA08EE00, + 0xAA07CE80, 0xAA06AF00, 0xAA058F80, + 0xAA047000, 0xAA035080, 0xAA023100, + 0xAA011180, 0xA9FFF200, 0xA9FED280, + 0xA9FDB300, 0xA9FC9380, 0xA9FB7400, + 0xA9FA5480, 0xA9F93500, 0xA9F81580, + 0xA9F6F600, 0xA9F5D680, 0xA9F4B700, + 0xA9F39780, 0xA9F27800, 0xA9F15880, + 0xA9F03900, 0xA9EF1980, 0xA9EDFA00, + 0xA9ECDA80, 0xA9EBBB00, 0xA9EA9B80, + 0xA9E97C00, 0xA9E85C80, 0xA9E73D00, + 0xA9E61D80, 0xA9E4FE00, 0xA9E3DE80, + 0xA9E2BF00, 0xA9E19F80, 0xA9E08000, + 0xA9DF6080, 0xA9DE4100, 0xA9DD2180, + 0xA9DC0200, 0xA9DAE280, 0xA9D9C300, + 0xA9D8A380, 0xA9D78400, 0xA9D66480, + 0xA9D54500, 0xA9D42580, 0xA9D30600, + 0xA9D1E680, 0xA9D0C700, 0xA9CFA780, + 0xA9CE8800, 0xA9CD6880, 0xA9CC4900, + 0xA9CB2980, 0xA9CA0A00, 0xA9C8EA80, + 0xA9C7CB00, 0xA9C6AB80, 0xA9C58C00, + 0xA9C46C80, 0xA9C34D00, 0xA9C22D80, + 0xA9C10E00, 0xA9BFEE80, 0xA9BECF00, + 0xA9BDAF80, 0xA9BC9000, 0xA9BB7080, + 0xA9BA5100, 0xA9B93180, 0xA9B81200, + 0xA9B6F280, 0xA9B5D300, 0xA9B4B380, + 0xA9B39400, 0xA9B27480, 0xA9B15500, + 0xA9B03580, 0xA9AF1600, 0xA9ADF680, + 0xA9ACD700, 0xA9ABB780, 0xA9AA9800, + 0xA9A97880, 0xA9A85900, 0xA9A73980, + 0xA9A61A00, 0xA9A4FA80, 0xA9A3DB00, + 0xA9A2BB80, 0xA9A19C00, 0xA9A07C80, + 0xA99F5D00, 0xA99E3D80, 0xA99D1E00, + 0xA99BFE80, 0xA99ADF00, 0xA999BF80, + 0xA998A000, 0xA9978080, 0xA9966100, + 0xA9954180, 0xA9942200, 0xA9930280, + 0xA991E300, 0xA990C380, 0xA98FA400, + 0xA98E8480, 0xA98D6500, 0xA98C4580, + 0xA98B2600, 0xA98A0680, 0xA988E700, + 0xA987C780, 0xA986A800, 0xA9858880, + 0xA9846900, 0xA9834980, 0xA9822A00, + 0xA9810A80, 0xA97FEB00, 0xA97ECB80, + 0xA97DAC00, 0xA97C8C80, 0xA97B6D00, + 0xA97A4D80, 0xA9792E00, 0xA9780E80, + 0xA976EF00, 0xA975CF80, 0xA974B000, + 0xA9739080, 0xA9727100, 0xA9715180, + 0xA9703200, 0xA96F1280, 0xA96DF300, + 0xA96CD380, 0xA96BB400, 0xA96A9480, + 0xA9697500, 0xA9685580, 0xA9673600, + 0xA9661680, 0xA964F700, 0xA963D780, + 0xA962B800, 0xA9619880, 0xA9607900, + 0xA95F5980, 0xA95E3A00, 0xA95D1A80, + 0xA95BFB00, 0xA95ADB80, 0xA959BC00, + 0xA9589C80, 0xA9577D00, 0xA9565D80, + 0xA9553E00, 0xA9541E80, 0xA952FF00, + 0xA951DF80, 0xA950C000, 0xA94FA080, + 0xA94E8100, 0xA94D6180, 0xA94C4200, + 0xA94B2280, 0xA94A0300, 0xA948E380, + 0xA947C400, 0xA946A480, 0xA9458500, + 0xA9446580, 0xA9434600, 0xA9422680, + 0xA9410700, 0xA93FE780, 0xA93EC800, + 0xA93DA880, 0xA93C8900, 0xA93B6980, + 0xA93A4A00, 0xA9392A80, 0xA9380B00, + 0xA936EB80, 0xA935CC00, 0xA934AC80, + 0xA9338D00, 0xA9326D80, 0xA9314E00, + 0xA9302E80, 0xA92F0F00, 0xA92DEF80, + 0xA92CD000, 0xA92BB080, 0xA92A9100, + 0xA9297180, 0xA9285200, 0xA9273280, + 0xA9261300, 0xA924F380, 0xA923D400, + 0xA922B480, 0xA9219500, 0xA9207580, + 0xA91F5600, 0xA91E3680, 0xA91D1700, + 0xA91BF780, 0xA91AD800, 0xA919B880, + 0xA9189900, 0xA9177980, 0xA9165A00, + 0xA9153A80, 0xA9141B00, 0xA912FB80, + 0xA911DC00, 0xA910BC80, 0xA90F9D00, + 0xA90E7D80, 0xA90D5E00, 0xA90C3E80, + 0xA90B1F00, 0xA909FF80, 0xA908E000, + 0xA907C080, 0xA906A100, 0xA9058180, + 0xA9046200, 0xA9034280, 0xA9022300, + 0xA9010380, 0xA8FFE400, 0xA8FEC480, + 0xA8FDA500, 0xA8FC8580, 0xA8FB6600, + 0xA8FA4680, 0xA8F92700, 0xA8F80780, + 0xA8F6E800, 0xA8F5C880, 0xA8F4A900, + 0xA8F38980, 0xA8F26A00, 0xA8F14A80, + 0xA8F02B00, 0xA8EF0B80, 0xA8EDEC00, + 0xA8ECCC80, 0xA8EBAD00, 0xA8EA8D80, + 0xA8E96E00, 0xA8E84E80, 0xA8E72F00, + 0xA8E60F80, 0xA8E4F000, 0xA8E3D080, + 0xA8E2B100, 0xA8E19180, 0xA8E07200, + 0xA8DF5280, 0xA8DE3300, 0xA8DD1380, + 0xA8DBF400, 0xA8DAD480, 0xA8D9B500, + 0xA8D89580, 0xA8D77600, 0xA8D65680, + 0xA8D53700, 0xA8D41780, 0xA8D2F800, + 0xA8D1D880, 0xA8D0B900, 0xA8CF9980, + 0xA8CE7A00, 0xA8CD5A80, 0xA8CC3B00, + 0xA8CB1B80, 0xA8C9FC00, 0xA8C8DC80, + 0xA8C7BD00, 0xA8C69D80, 0xA8C57E00, + 0xA8C45E80, 0xA8C33F00, 0xA8C21F80, + 0xA8C10000, 0xA8BFE080, 0xA8BEC100, + 0xA8BDA180, 0xA8BC8200, 0xA8BB6280, + 0xA8BA4300, 0xA8B92380, 0xA8B80400, + 0xA8B6E480, 0xA8B5C500, 0xA8B4A580, + 0xA8B38600, 0xA8B26680, 0xA8B14700, + 0xA8B02780, 0xA8AF0800, 0xA8ADE880, + 0xA8ACC900, 0xA8ABA980, 0xA8AA8A00, + 0xA8A96A80, 0xA8A84B00, 0xA8A72B80, + 0xA8A60C00, 0xA8A4EC80, 0xA8A3CD00, + 0xA8A2AD80, 0xA8A18E00, 0xA8A06E80, + 0xA89F4F00, 0xA89E2F80, 0xA89D1000, + 0xA89BF080, 0xA89AD100, 0xA899B180, + 0xA8989200, 0xA8977280, 0xA8965300, + 0xA8953380, 0xA8941400, 0xA892F480, + 0xA891D500, 0xA890B580, 0xA88F9600, + 0xA88E7680, 0xA88D5700, 0xA88C3780, + 0xA88B1800, 0xA889F880, 0xA888D900, + 0xA887B980, 0xA8869A00, 0xA8857A80, + 0xA8845B00, 0xA8833B80, 0xA8821C00, + 0xA880FC80, 0xA87FDD00, 0xA87EBD80, + 0xA87D9E00, 0xA87C7E80, 0xA87B5F00, + 0xA87A3F80, 0xA8792000, 0xA8780080, + 0xA876E100, 0xA875C180, 0xA874A200, + 0xA8738280, 0xA8726300, 0xA8714380, + 0xA8702400, 0xA86F0480, 0xA86DE500, + 0xA86CC580, 0xA86BA600, 0xA86A8680, + 0xA8696700, 0xA8684780, 0xA8672800, + 0xA8660880, 0xA864E900, 0xA863C980, + 0xA862AA00, 0xA8618A80, 0xA8606B00, + 0xA85F4B80, 0xA85E2C00, 0xA85D0C80, + 0xA85BED00, 0xA85ACD80, 0xA859AE00, + 0xA8588E80, 0xA8576F00, 0xA8564F80, + 0xA8553000, 0xA8541080, 0xA852F100, + 0xA851D180, 0xA850B200, 0xA84F9280, + 0xA84E7300, 0xA84D5380, 0xA84C3400, + 0xA84B1480, 0xA849F500, 0xA848D580, + 0xA847B600, 0xA8469680, 0xA8457700, + 0xA8445780, 0xA8433800, 0xA8421880, + 0xA840F900, 0xA83FD980, 0xA83EBA00, + 0xA83D9A80, 0xA83C7B00, 0xA83B5B80, + 0xA83A3C00, 0xA8391C80, 0xA837FD00, + 0xA836DD80, 0xA835BE00, 0xA8349E80, + 0xA8337F00, 0xA8325F80, 0xA8314000, + 0xA8302080, 0xA82F0100, 0xA82DE180, + 0xA82CC200, 0xA82BA280, 0xA82A8300, + 0xA8296380, 0xA8284400, 0xA8272480, + 0xA8260500, 0xA824E580, 0xA823C600, + 0xA822A680, 0xA8218700, 0xA8206780, + 0xA81F4800, 0xA81E2880, 0xA81D0900, + 0xA81BE980, 0xA81ACA00, 0xA819AA80, + 0xA8188B00, 0xA8176B80, 0xA8164C00, + 0xA8152C80, 0xA8140D00, 0xA812ED80, + 0xA811CE00, 0xA810AE80, 0xA80F8F00, + 0xA80E6F80, 0xA80D5000, 0xA80C3080, + 0xA80B1100, 0xA809F180, 0xA808D200, + 0xA807B280, 0xA8069300, 0xA8057380, + 0xA8045400, 0xA8033480, 0xA8021500, + 0xA800F580, 0xA7FFD600, 0xA7FEB680, + 0xA7FD9700, 0xA7FC7780, 0xA7FB5800, + 0xA7FA3880, 0xA7F91900, 0xA7F7F980, + 0xA7F6DA00, 0xA7F5BA80, 0xA7F49B00, + 0xA7F37B80, 0xA7F25C00, 0xA7F13C80, + 0xA7F01D00, 0xA7EEFD80, 0xA7EDDE00, + 0xA7ECBE80, 0xA7EB9F00, 0xA7EA7F80, + 0xA7E96000, 0xA7E84080, 0xA7E72100, + 0xA7E60180, 0xA7E4E200, 0xA7E3C280, + 0xA7E2A300, 0xA7E18380, 0xA7E06400, + 0xA7DF4480, 0xA7DE2500, 0xA7DD0580, + 0xA7DBE600, 0xA7DAC680, 0xA7D9A700, + 0xA7D88780, 0xA7D76800, 0xA7D64880, + 0xA7D52900, 0xA7D40980, 0xA7D2EA00, + 0xA7D1CA80, 0xA7D0AB00, 0xA7CF8B80, + 0xA7CE6C00, 0xA7CD4C80, 0xA7CC2D00, + 0xA7CB0D80, 0xA7C9EE00, 0xA7C8CE80, + 0xA7C7AF00, 0xA7C68F80, 0xA7C57000, + 0xA7C45080, 0xA7C33100, 0xA7C21180, + 0xA7C0F200, 0xA7BFD280, 0xA7BEB300, + 0xA7BD9380, 0xA7BC7400, 0xA7BB5480, + 0xA7BA3500, 0xA7B91580, 0xA7B7F600, + 0xA7B6D680, 0xA7B5B700, 0xA7B49780, + 0xA7B37800, 0xA7B25880, 0xA7B13900, + 0xA7B01980, 0xA7AEFA00, 0xA7ADDA80, + 0xA7ACBB00, 0xA7AB9B80, 0xA7AA7C00, + 0xA7A95C80, 0xA7A83D00, 0xA7A71D80, + 0xA7A5FE00, 0xA7A4DE80, 0xA7A3BF00, + 0xA7A29F80, 0xA7A18000, 0xA7A06080, + 0xA79F4100, 0xA79E2180, 0xA79D0200, + 0xA79BE280, 0xA79AC300, 0xA799A380, + 0xA7988400, 0xA7976480, 0xA7964500, + 0xA7952580, 0xA7940600, 0xA792E680, + 0xA791C700, 0xA790A780, 0xA78F8800, + 0xA78E6880, 0xA78D4900, 0xA78C2980, + 0xA78B0A00, 0xA789EA80, 0xA788CB00, + 0xA787AB80, 0xA7868C00, 0xA7856C80, + 0xA7844D00, 0xA7832D80, 0xA7820E00, + 0xA780EE80, 0xA77FCF00, 0xA77EAF80, + 0xA77D9000, 0xA77C7080, 0xA77B5100, + 0xA77A3180, 0xA7791200, 0xA777F280, + 0xA776D300, 0xA775B380, 0xA7749400, + 0xA7737480, 0xA7725500, 0xA7713580, + 0xA7701600, 0xA76EF680, 0xA76DD700, + 0xA76CB780, 0xA76B9800, 0xA76A7880, + 0xA7695900, 0xA7683980, 0xA7671A00, + 0xA765FA80, 0xA764DB00, 0xA763BB80, + 0xA7629C00, 0xA7617C80, 0xA7605D00, + 0xA75F3D80, 0xA75E1E00, 0xA75CFE80, + 0xA75BDF00, 0xA75ABF80, 0xA759A000, + 0xA7588080, 0xA7576100, 0xA7564180, + 0xA7552200, 0xA7540280, 0xA752E300, + 0xA751C380, 0xA750A400, 0xA74F8480, + 0xA74E6500, 0xA74D4580, 0xA74C2600, + 0xA74B0680, 0xA749E700, 0xA748C780, + 0xA747A800, 0xA7468880, 0xA7456900, + 0xA7444980, 0xA7432A00, 0xA7420A80, + 0xA740EB00, 0xA73FCB80, 0xA73EAC00, + 0xA73D8C80, 0xA73C6D00, 0xA73B4D80, + 0xA73A2E00, 0xA7390E80, 0xA737EF00, + 0xA736CF80, 0xA735B000, 0xA7349080, + 0xA7337100, 0xA7325180, 0xA7313200, + 0xA7301280, 0xA72EF300, 0xA72DD380, + 0xA72CB400, 0xA72B9480, 0xA72A7500, + 0xA7295580, 0xA7283600, 0xA7271680, + 0xA725F700, 0xA724D780, 0xA723B800, + 0xA7229880, 0xA7217900, 0xA7205980, + 0xA71F3A00, 0xA71E1A80, 0xA71CFB00, + 0xA71BDB80, 0xA71ABC00, 0xA7199C80, + 0xA7187D00, 0xA7175D80, 0xA7163E00, + 0xA7151E80, 0xA713FF00, 0xA712DF80, + 0xA711C000, 0xA710A080, 0xA70F8100, + 0xA70E6180, 0xA70D4200, 0xA70C2280, + 0xA70B0300, 0xA709E380, 0xA708C400, + 0xA707A480, 0xA7068500, 0xA7056580, + 0xA7044600, 0xA7032680, 0xA7020700, + 0xA700E780, 0xA6FFC800, 0xA6FEA880, + 0xA6FD8900, 0xA6FC6980, 0xA6FB4A00, + 0xA6FA2A80, 0xA6F90B00, 0xA6F7EB80, + 0xA6F6CC00, 0xA6F5AC80, 0xA6F48D00, + 0xA6F36D80, 0xA6F24E00, 0xA6F12E80, + 0xA6F00F00, 0xA6EEEF80, 0xA6EDD000, + 0xA6ECB080, 0xA6EB9100, 0xA6EA7180, + 0xA6E95200, 0xA6E83280, 0xA6E71300, + 0xA6E5F380, 0xA6E4D400, 0xA6E3B480, + 0xA6E29500, 0xA6E17580, 0xA6E05600, + 0xA6DF3680, 0xA6DE1700, 0xA6DCF780, + 0xA6DBD800, 0xA6DAB880, 0xA6D99900, + 0xA6D87980, 0xA6D75A00, 0xA6D63A80, + 0xA6D51B00, 0xA6D3FB80, 0xA6D2DC00, + 0xA6D1BC80, 0xA6D09D00, 0xA6CF7D80, + 0xA6CE5E00, 0xA6CD3E80, 0xA6CC1F00, + 0xA6CAFF80, 0xA6C9E000, 0xA6C8C080, + 0xA6C7A100, 0xA6C68180, 0xA6C56200, + 0xA6C44280, 0xA6C32300, 0xA6C20380, + 0xA6C0E400, 0xA6BFC480, 0xA6BEA500, + 0xA6BD8580, 0xA6BC6600, 0xA6BB4680, + 0xA6BA2700, 0xA6B90780, 0xA6B7E800, + 0xA6B6C880, 0xA6B5A900, 0xA6B48980, + 0xA6B36A00, 0xA6B24A80, 0xA6B12B00, + 0xA6B00B80, 0xA6AEEC00, 0xA6ADCC80, + 0xA6ACAD00, 0xA6AB8D80, 0xA6AA6E00, + 0xA6A94E80, 0xA6A82F00, 0xA6A70F80, + 0xA6A5F000, 0xA6A4D080, 0xA6A3B100, + 0xA6A29180, 0xA6A17200, 0xA6A05280, + 0xA69F3300, 0xA69E1380, 0xA69CF400, + 0xA69BD480, 0xA69AB500, 0xA6999580, + 0xA6987600, 0xA6975680, 0xA6963700, + 0xA6951780, 0xA693F800, 0xA692D880, + 0xA691B900, 0xA6909980, 0xA68F7A00, + 0xA68E5A80, 0xA68D3B00, 0xA68C1B80, + 0xA68AFC00, 0xA689DC80, 0xA688BD00, + 0xA6879D80, 0xA6867E00, 0xA6855E80, + 0xA6843F00, 0xA6831F80, 0xA6820000, + 0xA680E080, 0xA67FC100, 0xA67EA180, + 0xA67D8200, 0xA67C6280, 0xA67B4300, + 0xA67A2380, 0xA6790400, 0xA677E480, + 0xA676C500, 0xA675A580, 0xA6748600, + 0xA6736680, 0xA6724700, 0xA6712780, + 0xA6700800, 0xA66EE880, 0xA66DC900, + 0xA66CA980, 0xA66B8A00, 0xA66A6A80, + 0xA6694B00, 0xA6682B80, 0xA6670C00, + 0xA665EC80, 0xA664CD00, 0xA663AD80, + 0xA6628E00, 0xA6616E80, 0xA6604F00, + 0xA65F2F80, 0xA65E1000, 0xA65CF080, + 0xA65BD100, 0xA65AB180, 0xA6599200, + 0xA6587280, 0xA6575300, 0xA6563380, + 0xA6551400, 0xA653F480, 0xA652D500, + 0xA651B580, 0xA6509600, 0xA64F7680, + 0xA64E5700, 0xA64D3780, 0xA64C1800, + 0xA64AF880, 0xA649D900, 0xA648B980, + 0xA6479A00, 0xA6467A80, 0xA6455B00, + 0xA6443B80, 0xA6431C00, 0xA641FC80, + 0xA640DD00, 0xA63FBD80, 0xA63E9E00, + 0xA63D7E80, 0xA63C5F00, 0xA63B3F80, + 0xA63A2000, 0xA6390080, 0xA637E100, + 0xA636C180, 0xA635A200, 0xA6348280, + 0xA6336300, 0xA6324380, 0xA6312400, + 0xA6300480, 0xA62EE500, 0xA62DC580, + 0xA62CA600, 0xA62B8680, 0xA62A6700, + 0xA6294780, 0xA6282800, 0xA6270880, + 0xA625E900, 0xA624C980, 0xA623AA00, + 0xA6228A80, 0xA6216B00, 0xA6204B80, + 0xA61F2C00, 0xA61E0C80, 0xA61CED00, + 0xA61BCD80, 0xA61AAE00, 0xA6198E80, + 0xA6186F00, 0xA6174F80, 0xA6163000, + 0xA6151080, 0xA613F100, 0xA612D180, + 0xA611B200, 0xA6109280, 0xA60F7300, + 0xA60E5380, 0xA60D3400, 0xA60C1480, + 0xA60AF500, 0xA609D580, 0xA608B600, + 0xA6079680, 0xA6067700, 0xA6055780, + 0xA6043800, 0xA6031880, 0xA601F900, + 0xA600D980, 0xA5FFBA00, 0xA5FE9A80, + 0xA5FD7B00, 0xA5FC5B80, 0xA5FB3C00, + 0xA5FA1C80, 0xA5F8FD00, 0xA5F7DD80, + 0xA5F6BE00, 0xA5F59E80, 0xA5F47F00, + 0xA5F35F80, 0xA5F24000, 0xA5F12080, + 0xA5F00100, 0xA5EEE180, 0xA5EDC200, + 0xA5ECA280, 0xA5EB8300, 0xA5EA6380, + 0xA5E94400, 0xA5E82480, 0xA5E70500, + 0xA5E5E580, 0xA5E4C600, 0xA5E3A680, + 0xA5E28700, 0xA5E16780, 0xA5E04800, + 0xA5DF2880, 0xA5DE0900, 0xA5DCE980, + 0xA5DBCA00, 0xA5DAAA80, 0xA5D98B00, + 0xA5D86B80, 0xA5D74C00, 0xA5D62C80, + 0xA5D50D00, 0xA5D3ED80, 0xA5D2CE00, + 0xA5D1AE80, 0xA5D08F00, 0xA5CF6F80, + 0xA5CE5000, 0xA5CD3080, 0xA5CC1100, + 0xA5CAF180, 0xA5C9D200, 0xA5C8B280, + 0xA5C79300, 0xA5C67380, 0xA5C55400, + 0xA5C43480, 0xA5C31500, 0xA5C1F580, + 0xA5C0D600, 0xA5BFB680, 0xA5BE9700, + 0xA5BD7780, 0xA5BC5800, 0xA5BB3880, + 0xA5BA1900, 0xA5B8F980, 0xA5B7DA00, + 0xA5B6BA80, 0xA5B59B00, 0xA5B47B80, + 0xA5B35C00, 0xA5B23C80, 0xA5B11D00, + 0xA5AFFD80, 0xA5AEDE00, 0xA5ADBE80, + 0xA5AC9F00, 0xA5AB7F80, 0xA5AA6000, + 0xA5A94080, 0xA5A82100, 0xA5A70180, + 0xA5A5E200, 0xA5A4C280, 0xA5A3A300, + 0xA5A28380, 0xA5A16400, 0xA5A04480, + 0xA59F2500, 0xA59E0580, 0xA59CE600, + 0xA59BC680, 0xA59AA700, 0xA5998780, + 0xA5986800, 0xA5974880, 0xA5962900, + 0xA5950980, 0xA593EA00, 0xA592CA80, + 0xA591AB00, 0xA5908B80, 0xA58F6C00, + 0xA58E4C80, 0xA58D2D00, 0xA58C0D80, + 0xA58AEE00, 0xA589CE80, 0xA588AF00, + 0xA5878F80, 0xA5867000, 0xA5855080, + 0xA5843100, 0xA5831180, 0xA581F200, + 0xA580D280, 0xA57FB300, 0xA57E9380, + 0xA57D7400, 0xA57C5480, 0xA57B3500, + 0xA57A1580, 0xA578F600, 0xA577D680, + 0xA576B700, 0xA5759780, 0xA5747800, + 0xA5735880, 0xA5723900, 0xA5711980, + 0xA56FFA00, 0xA56EDA80, 0xA56DBB00, + 0xA56C9B80, 0xA56B7C00, 0xA56A5C80, + 0xA5693D00, 0xA5681D80, 0xA566FE00, + 0xA565DE80, 0xA564BF00, 0xA5639F80, + 0xA5628000, 0xA5616080, 0xA5604100, + 0xA55F2180, 0xA55E0200, 0xA55CE280, + 0xA55BC300, 0xA55AA380, 0xA5598400, + 0xA5586480, 0xA5574500, 0xA5562580, + 0xA5550600, 0xA553E680, 0xA552C700, + 0xA551A780, 0xA5508800, 0xA54F6880, + 0xA54E4900, 0xA54D2980, 0xA54C0A00, + 0xA54AEA80, 0xA549CB00, 0xA548AB80, + 0xA5478C00, 0xA5466C80, 0xA5454D00, + 0xA5442D80, 0xA5430E00, 0xA541EE80, + 0xA540CF00, 0xA53FAF80, 0xA53E9000, + 0xA53D7080, 0xA53C5100, 0xA53B3180, + 0xA53A1200, 0xA538F280, 0xA537D300, + 0xA536B380, 0xA5359400, 0xA5347480, + 0xA5335500, 0xA5323580, 0xA5311600, + 0xA52FF680, 0xA52ED700, 0xA52DB780, + 0xA52C9800, 0xA52B7880, 0xA52A5900, + 0xA5293980, 0xA5281A00, 0xA526FA80, + 0xA525DB00, 0xA524BB80, 0xA5239C00, + 0xA5227C80, 0xA5215D00, 0xA5203D80, + 0xA51F1E00, 0xA51DFE80, 0xA51CDF00, + 0xA51BBF80, 0xA51AA000, 0xA5198080, + 0xA5186100, 0xA5174180, 0xA5162200, + 0xA5150280, 0xA513E300, 0xA512C380, + 0xA511A400, 0xA5108480, 0xA50F6500, + 0xA50E4580, 0xA50D2600, 0xA50C0680, + 0xA50AE700, 0xA509C780, 0xA508A800, + 0xA5078880, 0xA5066900, 0xA5054980, + 0xA5042A00, 0xA5030A80, 0xA501EB00, + 0xA500CB80, 0xA4FFAC00, 0xA4FE8C80, + 0xA4FD6D00, 0xA4FC4D80, 0xA4FB2E00, + 0xA4FA0E80, 0xA4F8EF00, 0xA4F7CF80, + 0xA4F6B000, 0xA4F59080, 0xA4F47100, + 0xA4F35180, 0xA4F23200, 0xA4F11280, + 0xA4EFF300, 0xA4EED380, 0xA4EDB400, + 0xA4EC9480, 0xA4EB7500, 0xA4EA5580, + 0xA4E93600, 0xA4E81680, 0xA4E6F700, + 0xA4E5D780, 0xA4E4B800, 0xA4E39880, + 0xA4E27900, 0xA4E15980, 0xA4E03A00, + 0xA4DF1A80, 0xA4DDFB00, 0xA4DCDB80, + 0xA4DBBC00, 0xA4DA9C80, 0xA4D97D00, + 0xA4D85D80, 0xA4D73E00, 0xA4D61E80, + 0xA4D4FF00, 0xA4D3DF80, 0xA4D2C000, + 0xA4D1A080, 0xA4D08100, 0xA4CF6180, + 0xA4CE4200, 0xA4CD2280, 0xA4CC0300, + 0xA4CAE380, 0xA4C9C400, 0xA4C8A480, + 0xA4C78500, 0xA4C66580, 0xA4C54600, + 0xA4C42680, 0xA4C30700, 0xA4C1E780, + 0xA4C0C800, 0xA4BFA880, 0xA4BE8900, + 0xA4BD6980, 0xA4BC4A00, 0xA4BB2A80, + 0xA4BA0B00, 0xA4B8EB80, 0xA4B7CC00, + 0xA4B6AC80, 0xA4B58D00, 0xA4B46D80, + 0xA4B34E00, 0xA4B22E80, 0xA4B10F00, + 0xA4AFEF80, 0xA4AED000, 0xA4ADB080, + 0xA4AC9100, 0xA4AB7180, 0xA4AA5200, + 0xA4A93280, 0xA4A81300, 0xA4A6F380, + 0xA4A5D400, 0xA4A4B480, 0xA4A39500, + 0xA4A27580, 0xA4A15600, 0xA4A03680, + 0xA49F1700, 0xA49DF780, 0xA49CD800, + 0xA49BB880, 0xA49A9900, 0xA4997980, + 0xA4985A00, 0xA4973A80, 0xA4961B00, + 0xA494FB80, 0xA493DC00, 0xA492BC80, + 0xA4919D00, 0xA4907D80, 0xA48F5E00, + 0xA48E3E80, 0xA48D1F00, 0xA48BFF80, + 0xA48AE000, 0xA489C080, 0xA488A100, + 0xA4878180, 0xA4866200, 0xA4854280, + 0xA4842300, 0xA4830380, 0xA481E400, + 0xA480C480, 0xA47FA500, 0xA47E8580, + 0xA47D6600, 0xA47C4680, 0xA47B2700, + 0xA47A0780, 0xA478E800, 0xA477C880, + 0xA476A900, 0xA4758980, 0xA4746A00, + 0xA4734A80, 0xA4722B00, 0xA4710B80, + 0xA46FEC00, 0xA46ECC80, 0xA46DAD00, + 0xA46C8D80, 0xA46B6E00, 0xA46A4E80, + 0xA4692F00, 0xA4680F80, 0xA466F000, + 0xA465D080, 0xA464B100, 0xA4639180, + 0xA4627200, 0xA4615280, 0xA4603300, + 0xA45F1380, 0xA45DF400, 0xA45CD480, + 0xA45BB500, 0xA45A9580, 0xA4597600, + 0xA4585680, 0xA4573700, 0xA4561780, + 0xA454F800, 0xA453D880, 0xA452B900, + 0xA4519980, 0xA4507A00, 0xA44F5A80, + 0xA44E3B00, 0xA44D1B80, 0xA44BFC00, + 0xA44ADC80, 0xA449BD00, 0xA4489D80, + 0xA4477E00, 0xA4465E80, 0xA4453F00, + 0xA4441F80, 0xA4430000, 0xA441E080, + 0xA440C100, 0xA43FA180, 0xA43E8200, + 0xA43D6280, 0xA43C4300, 0xA43B2380, + 0xA43A0400, 0xA438E480, 0xA437C500, + 0xA436A580, 0xA4358600, 0xA4346680, + 0xA4334700, 0xA4322780, 0xA4310800, + 0xA42FE880, 0xA42EC900, 0xA42DA980, + 0xA42C8A00, 0xA42B6A80, 0xA42A4B00, + 0xA4292B80, 0xA4280C00, 0xA426EC80, + 0xA425CD00, 0xA424AD80, 0xA4238E00, + 0xA4226E80, 0xA4214F00, 0xA4202F80, + 0xA41F1000, 0xA41DF080, 0xA41CD100, + 0xA41BB180, 0xA41A9200, 0xA4197280, + 0xA4185300, 0xA4173380, 0xA4161400, + 0xA414F480, 0xA413D500, 0xA412B580, + 0xA4119600, 0xA4107680, 0xA40F5700, + 0xA40E3780, 0xA40D1800, 0xA40BF880, + 0xA40AD900, 0xA409B980, 0xA4089A00, + 0xA4077A80, 0xA4065B00, 0xA4053B80, + 0xA4041C00, 0xA402FC80, 0xA401DD00, + 0xA400BD80, 0xA3FF9E00, 0xA3FE7E80, + 0xA3FD5F00, 0xA3FC3F80, 0xA3FB2000, + 0xA3FA0080, 0xA3F8E100, 0xA3F7C180, + 0xA3F6A200, 0xA3F58280, 0xA3F46300, + 0xA3F34380, 0xA3F22400, 0xA3F10480, + 0xA3EFE500, 0xA3EEC580, 0xA3EDA600, + 0xA3EC8680, 0xA3EB6700, 0xA3EA4780, + 0xA3E92800, 0xA3E80880, 0xA3E6E900, + 0xA3E5C980, 0xA3E4AA00, 0xA3E38A80, + 0xA3E26B00, 0xA3E14B80, 0xA3E02C00, + 0xA3DF0C80, 0xA3DDED00, 0xA3DCCD80, + 0xA3DBAE00, 0xA3DA8E80, 0xA3D96F00, + 0xA3D84F80, 0xA3D73000, 0xA3D61080, + 0xA3D4F100, 0xA3D3D180, 0xA3D2B200, + 0xA3D19280, 0xA3D07300, 0xA3CF5380, + 0xA3CE3400, 0xA3CD1480, 0xA3CBF500, + 0xA3CAD580, 0xA3C9B600, 0xA3C89680, + 0xA3C77700, 0xA3C65780, 0xA3C53800, + 0xA3C41880, 0xA3C2F900, 0xA3C1D980, + 0xA3C0BA00, 0xA3BF9A80, 0xA3BE7B00, + 0xA3BD5B80, 0xA3BC3C00, 0xA3BB1C80, + 0xA3B9FD00, 0xA3B8DD80, 0xA3B7BE00, + 0xA3B69E80, 0xA3B57F00, 0xA3B45F80, + 0xA3B34000, 0xA3B22080, 0xA3B10100, + 0xA3AFE180, 0xA3AEC200, 0xA3ADA280, + 0xA3AC8300, 0xA3AB6380, 0xA3AA4400, + 0xA3A92480, 0xA3A80500, 0xA3A6E580, + 0xA3A5C600, 0xA3A4A680, 0xA3A38700, + 0xA3A26780, 0xA3A14800, 0xA3A02880, + 0xA39F0900, 0xA39DE980, 0xA39CCA00, + 0xA39BAA80, 0xA39A8B00, 0xA3996B80, + 0xA3984C00, 0xA3972C80, 0xA3960D00, + 0xA394ED80, 0xA393CE00, 0xA392AE80, + 0xA3918F00, 0xA3906F80, 0xA38F5000, + 0xA38E3080, 0xA38D1100, 0xA38BF180, + 0xA38AD200, 0xA389B280, 0xA3889300, + 0xA3877380, 0xA3865400, 0xA3853480, + 0xA3841500, 0xA382F580, 0xA381D600, + 0xA380B680, 0xA37F9700, 0xA37E7780, + 0xA37D5800, 0xA37C3880, 0xA37B1900, + 0xA379F980, 0xA378DA00, 0xA377BA80, + 0xA3769B00, 0xA3757B80, 0xA3745C00, + 0xA3733C80, 0xA3721D00, 0xA370FD80, + 0xA36FDE00, 0xA36EBE80, 0xA36D9F00, + 0xA36C7F80, 0xA36B6000, 0xA36A4080, + 0xA3692100, 0xA3680180, 0xA366E200, + 0xA365C280, 0xA364A300, 0xA3638380, + 0xA3626400, 0xA3614480, 0xA3602500, + 0xA35F0580, 0xA35DE600, 0xA35CC680, + 0xA35BA700, 0xA35A8780, 0xA3596800, + 0xA3584880, 0xA3572900, 0xA3560980, + 0xA354EA00, 0xA353CA80, 0xA352AB00, + 0xA3518B80, 0xA3506C00, 0xA34F4C80, + 0xA34E2D00, 0xA34D0D80, 0xA34BEE00, + 0xA34ACE80, 0xA349AF00, 0xA3488F80, + 0xA3477000, 0xA3465080, 0xA3453100, + 0xA3441180, 0xA342F200, 0xA341D280, + 0xA340B300, 0xA33F9380, 0xA33E7400, + 0xA33D5480, 0xA33C3500, 0xA33B1580, + 0xA339F600, 0xA338D680, 0xA337B700, + 0xA3369780, 0xA3357800, 0xA3345880, + 0xA3333900, 0xA3321980, 0xA330FA00, + 0xA32FDA80, 0xA32EBB00, 0xA32D9B80, + 0xA32C7C00, 0xA32B5C80, 0xA32A3D00, + 0xA3291D80, 0xA327FE00, 0xA326DE80, + 0xA325BF00, 0xA3249F80, 0xA3238000, + 0xA3226080, 0xA3214100, 0xA3202180, + 0xA31F0200, 0xA31DE280, 0xA31CC300, + 0xA31BA380, 0xA31A8400, 0xA3196480, + 0xA3184500, 0xA3172580, 0xA3160600, + 0xA314E680, 0xA313C700, 0xA312A780, + 0xA3118800, 0xA3106880, 0xA30F4900, + 0xA30E2980, 0xA30D0A00, 0xA30BEA80, + 0xA30ACB00, 0xA309AB80, 0xA3088C00, + 0xA3076C80, 0xA3064D00, 0xA3052D80, + 0xA3040E00, 0xA302EE80, 0xA301CF00, + 0xA300AF80, 0xA2FF9000, 0xA2FE7080, + 0xA2FD5100, 0xA2FC3180, 0xA2FB1200, + 0xA2F9F280, 0xA2F8D300, 0xA2F7B380, + 0xA2F69400, 0xA2F57480, 0xA2F45500, + 0xA2F33580, 0xA2F21600, 0xA2F0F680, + 0xA2EFD700, 0xA2EEB780, 0xA2ED9800, + 0xA2EC7880, 0xA2EB5900, 0xA2EA3980, + 0xA2E91A00, 0xA2E7FA80, 0xA2E6DB00, + 0xA2E5BB80, 0xA2E49C00, 0xA2E37C80, + 0xA2E25D00, 0xA2E13D80, 0xA2E01E00, + 0xA2DEFE80, 0xA2DDDF00, 0xA2DCBF80, + 0xA2DBA000, 0xA2DA8080, 0xA2D96100, + 0xA2D84180, 0xA2D72200, 0xA2D60280, + 0xA2D4E300, 0xA2D3C380, 0xA2D2A400, + 0xA2D18480, 0xA2D06500, 0xA2CF4580, + 0xA2CE2600, 0xA2CD0680, 0xA2CBE700, + 0xA2CAC780, 0xA2C9A800, 0xA2C88880, + 0xA2C76900, 0xA2C64980, 0xA2C52A00, + 0xA2C40A80, 0xA2C2EB00, 0xA2C1CB80, + 0xA2C0AC00, 0xA2BF8C80, 0xA2BE6D00, + 0xA2BD4D80, 0xA2BC2E00, 0xA2BB0E80, + 0xA2B9EF00, 0xA2B8CF80, 0xA2B7B000, + 0xA2B69080, 0xA2B57100, 0xA2B45180, + 0xA2B33200, 0xA2B21280, 0xA2B0F300, + 0xA2AFD380, 0xA2AEB400, 0xA2AD9480, + 0xA2AC7500, 0xA2AB5580, 0xA2AA3600, + 0xA2A91680, 0xA2A7F700, 0xA2A6D780, + 0xA2A5B800, 0xA2A49880, 0xA2A37900, + 0xA2A25980, 0xA2A13A00, 0xA2A01A80, + 0xA29EFB00, 0xA29DDB80, 0xA29CBC00, + 0xA29B9C80, 0xA29A7D00, 0xA2995D80, + 0xA2983E00, 0xA2971E80, 0xA295FF00, + 0xA294DF80, 0xA293C000, 0xA292A080, + 0xA2918100, 0xA2906180, 0xA28F4200, + 0xA28E2280, 0xA28D0300, 0xA28BE380, + 0xA28AC400, 0xA289A480, 0xA2888500, + 0xA2876580, 0xA2864600, 0xA2852680, + 0xA2840700, 0xA282E780, 0xA281C800, + 0xA280A880, 0xA27F8900, 0xA27E6980, + 0xA27D4A00, 0xA27C2A80, 0xA27B0B00, + 0xA279EB80, 0xA278CC00, 0xA277AC80, + 0xA2768D00, 0xA2756D80, 0xA2744E00, + 0xA2732E80, 0xA2720F00, 0xA270EF80, + 0xA26FD000, 0xA26EB080, 0xA26D9100, + 0xA26C7180, 0xA26B5200, 0xA26A3280, + 0xA2691300, 0xA267F380, 0xA266D400, + 0xA265B480, 0xA2649500, 0xA2637580, + 0xA2625600, 0xA2613680, 0xA2601700, + 0xA25EF780, 0xA25DD800, 0xA25CB880, + 0xA25B9900, 0xA25A7980, 0xA2595A00, + 0xA2583A80, 0xA2571B00, 0xA255FB80, + 0xA254DC00, 0xA253BC80, 0xA2529D00, + 0xA2517D80, 0xA2505E00, 0xA24F3E80, + 0xA24E1F00, 0xA24CFF80, 0xA24BE000, + 0xA24AC080, 0xA249A100, 0xA2488180, + 0xA2476200, 0xA2464280, 0xA2452300, + 0xA2440380, 0xA242E400, 0xA241C480, + 0xA240A500, 0xA23F8580, 0xA23E6600, + 0xA23D4680, 0xA23C2700, 0xA23B0780, + 0xA239E800, 0xA238C880, 0xA237A900, + 0xA2368980, 0xA2356A00, 0xA2344A80, + 0xA2332B00, 0xA2320B80, 0xA230EC00, + 0xA22FCC80, 0xA22EAD00, 0xA22D8D80, + 0xA22C6E00, 0xA22B4E80, 0xA22A2F00, + 0xA2290F80, 0xA227F000, 0xA226D080, + 0xA225B100, 0xA2249180, 0xA2237200, + 0xA2225280, 0xA2213300, 0xA2201380, + 0xA21EF400, 0xA21DD480, 0xA21CB500, + 0xA21B9580, 0xA21A7600, 0xA2195680, + 0xA2183700, 0xA2171780, 0xA215F800, + 0xA214D880, 0xA213B900, 0xA2129980, + 0xA2117A00, 0xA2105A80, 0xA20F3B00, + 0xA20E1B80, 0xA20CFC00, 0xA20BDC80, + 0xA20ABD00, 0xA2099D80, 0xA2087E00, + 0xA2075E80, 0xA2063F00, 0xA2051F80, + 0xA2040000, 0xA202F180, 0xA201E300, + 0xA200D480, 0xA1FFC600, 0xA1FEB780, + 0xA1FDA900, 0xA1FC9A80, 0xA1FB8C00, + 0xA1FA7D80, 0xA1F96F00, 0xA1F86080, + 0xA1F75200, 0xA1F64380, 0xA1F53500, + 0xA1F42680, 0xA1F31800, 0xA1F20980, + 0xA1F0FB00, 0xA1EFEC80, 0xA1EEDE00, + 0xA1EDCF80, 0xA1ECC100, 0xA1EBB280, + 0xA1EAA400, 0xA1E99580, 0xA1E88700, + 0xA1E77880, 0xA1E66A00, 0xA1E55B80, + 0xA1E44D00, 0xA1E33E80, 0xA1E23000, + 0xA1E12180, 0xA1E01300, 0xA1DF0480, + 0xA1DDF600, 0xA1DCE780, 0xA1DBD900, + 0xA1DACA80, 0xA1D9BC00, 0xA1D8AD80, + 0xA1D79F00, 0xA1D69080, 0xA1D58200, + 0xA1D47380, 0xA1D36500, 0xA1D25680, + 0xA1D14800, 0xA1D03980, 0xA1CF2B00, + 0xA1CE1C80, 0xA1CD0E00, 0xA1CBFF80, + 0xA1CAF100, 0xA1C9E280, 0xA1C8D400, + 0xA1C7C580, 0xA1C6B700, 0xA1C5A880, + 0xA1C49A00, 0xA1C38B80, 0xA1C27D00, + 0xA1C16E80, 0xA1C06000, 0xA1BF5180, + 0xA1BE4300, 0xA1BD3480, 0xA1BC2600, + 0xA1BB1780, 0xA1BA0900, 0xA1B8FA80, + 0xA1B7EC00, 0xA1B6DD80, 0xA1B5CF00, + 0xA1B4C080, 0xA1B3B200, 0xA1B2A380, + 0xA1B19500, 0xA1B08680, 0xA1AF7800, + 0xA1AE6980, 0xA1AD5B00, 0xA1AC4C80, + 0xA1AB3E00, 0xA1AA2F80, 0xA1A92100, + 0xA1A81280, 0xA1A70400, 0xA1A5F580, + 0xA1A4E700, 0xA1A3D880, 0xA1A2CA00, + 0xA1A1BB80, 0xA1A0AD00, 0xA19F9E80, + 0xA19E9000, 0xA19D8180, 0xA19C7300, + 0xA19B6480, 0xA19A5600, 0xA1994780, + 0xA1983900, 0xA1972A80, 0xA1961C00, + 0xA1950D80, 0xA193FF00, 0xA192F080, + 0xA191E200, 0xA190D380, 0xA18FC500, + 0xA18EB680, 0xA18DA800, 0xA18C9980, + 0xA18B8B00, 0xA18A7C80, 0xA1896E00, + 0xA1885F80, 0xA1875100, 0xA1864280, + 0xA1853400, 0xA1842580, 0xA1831700, + 0xA1820880, 0xA180FA00, 0xA17FEB80, + 0xA17EDD00, 0xA17DCE80, 0xA17CC000, + 0xA17BB180, 0xA17AA300, 0xA1799480, + 0xA1788600, 0xA1777780, 0xA1766900, + 0xA1755A80, 0xA1744C00, 0xA1733D80, + 0xA1722F00, 0xA1712080, 0xA1701200, + 0xA16F0380, 0xA16DF500, 0xA16CE680, + 0xA16BD800, 0xA16AC980, 0xA169BB00, + 0xA168AC80, 0xA1679E00, 0xA1668F80, + 0xA1658100, 0xA1647280, 0xA1636400, + 0xA1625580, 0xA1614700, 0xA1603880, + 0xA15F2A00, 0xA15E1B80, 0xA15D0D00, + 0xA15BFE80, 0xA15AF000, 0xA159E180, + 0xA158D300, 0xA157C480, 0xA156B600, + 0xA155A780, 0xA1549900, 0xA1538A80, + 0xA1527C00, 0xA1516D80, 0xA1505F00, + 0xA14F5080, 0xA14E4200, 0xA14D3380, + 0xA14C2500, 0xA14B1680, 0xA14A0800, + 0xA148F980, 0xA147EB00, 0xA146DC80, + 0xA145CE00, 0xA144BF80, 0xA143B100, + 0xA142A280, 0xA1419400, 0xA1408580, + 0xA13F7700, 0xA13E6880, 0xA13D5A00, + 0xA13C4B80, 0xA13B3D00, 0xA13A2E80, + 0xA1392000, 0xA1381180, 0xA1370300, + 0xA135F480, 0xA134E600, 0xA133D780, + 0xA132C900, 0xA131BA80, 0xA130AC00, + 0xA12F9D80, 0xA12E8F00, 0xA12D8080, + 0xA12C7200, 0xA12B6380, 0xA12A5500, + 0xA1294680, 0xA1283800, 0xA1272980, + 0xA1261B00, 0xA1250C80, 0xA123FE00, + 0xA122EF80, 0xA121E100, 0xA120D280, + 0xA11FC400, 0xA11EB580, 0xA11DA700, + 0xA11C9880, 0xA11B8A00, 0xA11A7B80, + 0xA1196D00, 0xA1185E80, 0xA1175000, + 0xA1164180, 0xA1153300, 0xA1142480, + 0xA1131600, 0xA1120780, 0xA110F900, + 0xA10FEA80, 0xA10EDC00, 0xA10DCD80, + 0xA10CBF00, 0xA10BB080, 0xA10AA200, + 0xA1099380, 0xA1088500, 0xA1077680, + 0xA1066800, 0xA1055980, 0xA1044B00, + 0xA1033C80, 0xA1022E00, 0xA1011F80, + 0xA1001100, 0xA0FF0280, 0xA0FDF400, + 0xA0FCE580, 0xA0FBD700, 0xA0FAC880, + 0xA0F9BA00, 0xA0F8AB80, 0xA0F79D00, + 0xA0F68E80, 0xA0F58000, 0xA0F47180, + 0xA0F36300, 0xA0F25480, 0xA0F14600, + 0xA0F03780, 0xA0EF2900, 0xA0EE1A80, + 0xA0ED0C00, 0xA0EBFD80, 0xA0EAEF00, + 0xA0E9E080, 0xA0E8D200, 0xA0E7C380, + 0xA0E6B500, 0xA0E5A680, 0xA0E49800, + 0xA0E38980, 0xA0E27B00, 0xA0E16C80, + 0xA0E05E00, 0xA0DF4F80, 0xA0DE4100, + 0xA0DD3280, 0xA0DC2400, 0xA0DB1580, + 0xA0DA0700, 0xA0D8F880, 0xA0D7EA00, + 0xA0D6DB80, 0xA0D5CD00, 0xA0D4BE80, + 0xA0D3B000, 0xA0D2A180, 0xA0D19300, + 0xA0D08480, 0xA0CF7600, 0xA0CE6780, + 0xA0CD5900, 0xA0CC4A80, 0xA0CB3C00, + 0xA0CA2D80, 0xA0C91F00, 0xA0C81080, + 0xA0C70200, 0xA0C5F380, 0xA0C4E500, + 0xA0C3D680, 0xA0C2C800, 0xA0C1B980, + 0xA0C0AB00, 0xA0BF9C80, 0xA0BE8E00, + 0xA0BD7F80, 0xA0BC7100, 0xA0BB6280, + 0xA0BA5400, 0xA0B94580, 0xA0B83700, + 0xA0B72880, 0xA0B61A00, 0xA0B50B80, + 0xA0B3FD00, 0xA0B2EE80, 0xA0B1E000, + 0xA0B0D180, 0xA0AFC300, 0xA0AEB480, + 0xA0ADA600, 0xA0AC9780, 0xA0AB8900, + 0xA0AA7A80, 0xA0A96C00, 0xA0A85D80, + 0xA0A74F00, 0xA0A64080, 0xA0A53200, + 0xA0A42380, 0xA0A31500, 0xA0A20680, + 0xA0A0F800, 0xA09FE980, 0xA09EDB00, + 0xA09DCC80, 0xA09CBE00, 0xA09BAF80, + 0xA09AA100, 0xA0999280, 0xA0988400, + 0xA0977580, 0xA0966700, 0xA0955880, + 0xA0944A00, 0xA0933B80, 0xA0922D00, + 0xA0911E80, 0xA0901000, 0xA08F0180, + 0xA08DF300, 0xA08CE480, 0xA08BD600, + 0xA08AC780, 0xA089B900, 0xA088AA80, + 0xA0879C00, 0xA0868D80, 0xA0857F00, + 0xA0847080, 0xA0836200, 0xA0825380, + 0xA0814500, 0xA0803680, 0xA07F2800, + 0xA07E1980, 0xA07D0B00, 0xA07BFC80, + 0xA07AEE00, 0xA079DF80, 0xA078D100, + 0xA077C280, 0xA076B400, 0xA075A580, + 0xA0749700, 0xA0738880, 0xA0727A00, + 0xA0716B80, 0xA0705D00, 0xA06F4E80, + 0xA06E4000, 0xA06D3180, 0xA06C2300, + 0xA06B1480, 0xA06A0600, 0xA068F780, + 0xA067E900, 0xA066DA80, 0xA065CC00, + 0xA064BD80, 0xA063AF00, 0xA062A080, + 0xA0619200, 0xA0608380, 0xA05F7500, + 0xA05E6680, 0xA05D5800, 0xA05C4980, + 0xA05B3B00, 0xA05A2C80, 0xA0591E00, + 0xA0580F80, 0xA0570100, 0xA055F280, + 0xA054E400, 0xA053D580, 0xA052C700, + 0xA051B880, 0xA050AA00, 0xA04F9B80, + 0xA04E8D00, 0xA04D7E80, 0xA04C7000, + 0xA04B6180, 0xA04A5300, 0xA0494480, + 0xA0483600, 0xA0472780, 0xA0461900, + 0xA0450A80, 0xA043FC00, 0xA042ED80, + 0xA041DF00, 0xA040D080, 0xA03FC200, + 0xA03EB380, 0xA03DA500, 0xA03C9680, + 0xA03B8800, 0xA03A7980, 0xA0396B00, + 0xA0385C80, 0xA0374E00, 0xA0363F80, + 0xA0353100, 0xA0342280, 0xA0331400, + 0xA0320580, 0xA030F700, 0xA02FE880, + 0xA02EDA00, 0xA02DCB80, 0xA02CBD00, + 0xA02BAE80, 0xA02AA000, 0xA0299180, + 0xA0288300, 0xA0277480, 0xA0266600, + 0xA0255780, 0xA0244900, 0xA0233A80, + 0xA0222C00, 0xA0211D80, 0xA0200F00, + 0xA01F0080, 0xA01DF200, 0xA01CE380, + 0xA01BD500, 0xA01AC680, 0xA019B800, + 0xA018A980, 0xA0179B00, 0xA0168C80, + 0xA0157E00, 0xA0146F80, 0xA0136100, + 0xA0125280, 0xA0114400, 0xA0103580, + 0xA00F2700, 0xA00E1880, 0xA00D0A00, + 0xA00BFB80, 0xA00AED00, 0xA009DE80, + 0xA008D000, 0xA007C180, 0xA006B300, + 0xA005A480, 0xA0049600, 0xA0038780, + 0xA0027900, 0xA0016A80, 0xA0005C00, + 0x9FFF4D80, 0x9FFE3F00, 0x9FFD3080, + 0x9FFC2200, 0x9FFB1380, 0x9FFA0500, + 0x9FF8F680, 0x9FF7E800, 0x9FF6D980, + 0x9FF5CB00, 0x9FF4BC80, 0x9FF3AE00, + 0x9FF29F80, 0x9FF19100, 0x9FF08280, + 0x9FEF7400, 0x9FEE6580, 0x9FED5700, + 0x9FEC4880, 0x9FEB3A00, 0x9FEA2B80, + 0x9FE91D00, 0x9FE80E80, 0x9FE70000, + 0x9FE5F180, 0x9FE4E300, 0x9FE3D480, + 0x9FE2C600, 0x9FE1B780, 0x9FE0A900, + 0x9FDF9A80, 0x9FDE8C00, 0x9FDD7D80, + 0x9FDC6F00, 0x9FDB6080, 0x9FDA5200, + 0x9FD94380, 0x9FD83500, 0x9FD72680, + 0x9FD61800, 0x9FD50980, 0x9FD3FB00, + 0x9FD2EC80, 0x9FD1DE00, 0x9FD0CF80, + 0x9FCFC100, 0x9FCEB280, 0x9FCDA400, + 0x9FCC9580, 0x9FCB8700, 0x9FCA7880, + 0x9FC96A00, 0x9FC85B80, 0x9FC74D00, + 0x9FC63E80, 0x9FC53000, 0x9FC42180, + 0x9FC31300, 0x9FC20480, 0x9FC0F600, + 0x9FBFE780, 0x9FBED900, 0x9FBDCA80, + 0x9FBCBC00, 0x9FBBAD80, 0x9FBA9F00, + 0x9FB99080, 0x9FB88200, 0x9FB77380, + 0x9FB66500, 0x9FB55680, 0x9FB44800, + 0x9FB33980, 0x9FB22B00, 0x9FB11C80, + 0x9FB00E00, 0x9FAEFF80, 0x9FADF100, + 0x9FACE280, 0x9FABD400, 0x9FAAC580, + 0x9FA9B700, 0x9FA8A880, 0x9FA79A00, + 0x9FA68B80, 0x9FA57D00, 0x9FA46E80, + 0x9FA36000, 0x9FA25180, 0x9FA14300, + 0x9FA03480, 0x9F9F2600, 0x9F9E1780, + 0x9F9D0900, 0x9F9BFA80, 0x9F9AEC00, + 0x9F99DD80, 0x9F98CF00, 0x9F97C080, + 0x9F96B200, 0x9F95A380, 0x9F949500, + 0x9F938680, 0x9F927800, 0x9F916980, + 0x9F905B00, 0x9F8F4C80, 0x9F8E3E00, + 0x9F8D2F80, 0x9F8C2100, 0x9F8B1280, + 0x9F8A0400, 0x9F88F580, 0x9F87E700, + 0x9F86D880, 0x9F85CA00, 0x9F84BB80, + 0x9F83AD00, 0x9F829E80, 0x9F819000, + 0x9F808180, 0x9F7F7300, 0x9F7E6480, + 0x9F7D5600, 0x9F7C4780, 0x9F7B3900, + 0x9F7A2A80, 0x9F791C00, 0x9F780D80, + 0x9F76FF00, 0x9F75F080, 0x9F74E200, + 0x9F73D380, 0x9F72C500, 0x9F71B680, + 0x9F70A800, 0x9F6F9980, 0x9F6E8B00, + 0x9F6D7C80, 0x9F6C6E00, 0x9F6B5F80, + 0x9F6A5100, 0x9F694280, 0x9F683400, + 0x9F672580, 0x9F661700, 0x9F650880, + 0x9F63FA00, 0x9F62EB80, 0x9F61DD00, + 0x9F60CE80, 0x9F5FC000, 0x9F5EB180, + 0x9F5DA300, 0x9F5C9480, 0x9F5B8600, + 0x9F5A7780, 0x9F596900, 0x9F585A80, + 0x9F574C00, 0x9F563D80, 0x9F552F00, + 0x9F542080, 0x9F531200, 0x9F520380, + 0x9F50F500, 0x9F4FE680, 0x9F4ED800, + 0x9F4DC980, 0x9F4CBB00, 0x9F4BAC80, + 0x9F4A9E00, 0x9F498F80, 0x9F488100, + 0x9F477280, 0x9F466400, 0x9F455580, + 0x9F444700, 0x9F433880, 0x9F422A00, + 0x9F411B80, 0x9F400D00, 0x9F3EFE80, + 0x9F3DF000, 0x9F3CE180, 0x9F3BD300, + 0x9F3AC480, 0x9F39B600, 0x9F38A780, + 0x9F379900, 0x9F368A80, 0x9F357C00, + 0x9F346D80, 0x9F335F00, 0x9F325080, + 0x9F314200, 0x9F303380, 0x9F2F2500, + 0x9F2E1680, 0x9F2D0800, 0x9F2BF980, + 0x9F2AEB00, 0x9F29DC80, 0x9F28CE00, + 0x9F27BF80, 0x9F26B100, 0x9F25A280, + 0x9F249400, 0x9F238580, 0x9F227700, + 0x9F216880, 0x9F205A00, 0x9F1F4B80, + 0x9F1E3D00, 0x9F1D2E80, 0x9F1C2000, + 0x9F1B1180, 0x9F1A0300, 0x9F18F480, + 0x9F17E600, 0x9F16D780, 0x9F15C900, + 0x9F14BA80, 0x9F13AC00, 0x9F129D80, + 0x9F118F00, 0x9F108080, 0x9F0F7200, + 0x9F0E6380, 0x9F0D5500, 0x9F0C4680, + 0x9F0B3800, 0x9F0A2980, 0x9F091B00, + 0x9F080C80, 0x9F06FE00, 0x9F05EF80, + 0x9F04E100, 0x9F03D280, 0x9F02C400, + 0x9F01B580, 0x9F00A700, 0x9EFF9880, + 0x9EFE8A00, 0x9EFD7B80, 0x9EFC6D00, + 0x9EFB5E80, 0x9EFA5000, 0x9EF94180, + 0x9EF83300, 0x9EF72480, 0x9EF61600, + 0x9EF50780, 0x9EF3F900, 0x9EF2EA80, + 0x9EF1DC00, 0x9EF0CD80, 0x9EEFBF00, + 0x9EEEB080, 0x9EEDA200, 0x9EEC9380, + 0x9EEB8500, 0x9EEA7680, 0x9EE96800, + 0x9EE85980, 0x9EE74B00, 0x9EE63C80, + 0x9EE52E00, 0x9EE41F80, 0x9EE31100, + 0x9EE20280, 0x9EE0F400, 0x9EDFE580, + 0x9EDED700, 0x9EDDC880, 0x9EDCBA00, + 0x9EDBAB80, 0x9EDA9D00, 0x9ED98E80, + 0x9ED88000, 0x9ED77180, 0x9ED66300, + 0x9ED55480, 0x9ED44600, 0x9ED33780, + 0x9ED22900, 0x9ED11A80, 0x9ED00C00, + 0x9ECEFD80, 0x9ECDEF00, 0x9ECCE080, + 0x9ECBD200, 0x9ECAC380, 0x9EC9B500, + 0x9EC8A680, 0x9EC79800, 0x9EC68980, + 0x9EC57B00, 0x9EC46C80, 0x9EC35E00, + 0x9EC24F80, 0x9EC14100, 0x9EC03280, + 0x9EBF2400, 0x9EBE1580, 0x9EBD0700, + 0x9EBBF880, 0x9EBAEA00, 0x9EB9DB80, + 0x9EB8CD00, 0x9EB7BE80, 0x9EB6B000, + 0x9EB5A180, 0x9EB49300, 0x9EB38480, + 0x9EB27600, 0x9EB16780, 0x9EB05900, + 0x9EAF4A80, 0x9EAE3C00, 0x9EAD2D80, + 0x9EAC1F00, 0x9EAB1080, 0x9EAA0200, + 0x9EA8F380, 0x9EA7E500, 0x9EA6D680, + 0x9EA5C800, 0x9EA4B980, 0x9EA3AB00, + 0x9EA29C80, 0x9EA18E00, 0x9EA07F80, + 0x9E9F7100, 0x9E9E6280, 0x9E9D5400, + 0x9E9C4580, 0x9E9B3700, 0x9E9A2880, + 0x9E991A00, 0x9E980B80, 0x9E96FD00, + 0x9E95EE80, 0x9E94E000, 0x9E93D180, + 0x9E92C300, 0x9E91B480, 0x9E90A600, + 0x9E8F9780, 0x9E8E8900, 0x9E8D7A80, + 0x9E8C6C00, 0x9E8B5D80, 0x9E8A4F00, + 0x9E894080, 0x9E883200, 0x9E872380, + 0x9E861500, 0x9E850680, 0x9E83F800, + 0x9E82E980, 0x9E81DB00, 0x9E80CC80, + 0x9E7FBE00, 0x9E7EAF80, 0x9E7DA100, + 0x9E7C9280, 0x9E7B8400, 0x9E7A7580, + 0x9E796700, 0x9E785880, 0x9E774A00, + 0x9E763B80, 0x9E752D00, 0x9E741E80, + 0x9E731000, 0x9E720180, 0x9E70F300, + 0x9E6FE480, 0x9E6ED600, 0x9E6DC780, + 0x9E6CB900, 0x9E6BAA80, 0x9E6A9C00, + 0x9E698D80, 0x9E687F00, 0x9E677080, + 0x9E666200, 0x9E655380, 0x9E644500, + 0x9E633680, 0x9E622800, 0x9E611980, + 0x9E600B00, 0x9E5EFC80, 0x9E5DEE00, + 0x9E5CDF80, 0x9E5BD100, 0x9E5AC280, + 0x9E59B400, 0x9E58A580, 0x9E579700, + 0x9E568880, 0x9E557A00, 0x9E546B80, + 0x9E535D00, 0x9E524E80, 0x9E514000, + 0x9E503180, 0x9E4F2300, 0x9E4E1480, + 0x9E4D0600, 0x9E4BF780, 0x9E4AE900, + 0x9E49DA80, 0x9E48CC00, 0x9E47BD80, + 0x9E46AF00, 0x9E45A080, 0x9E449200, + 0x9E438380, 0x9E427500, 0x9E416680, + 0x9E405800, 0x9E3F4980, 0x9E3E3B00, + 0x9E3D2C80, 0x9E3C1E00, 0x9E3B0F80, + 0x9E3A0100, 0x9E38F280, 0x9E37E400, + 0x9E36D580, 0x9E35C700, 0x9E34B880, + 0x9E33AA00, 0x9E329B80, 0x9E318D00, + 0x9E307E80, 0x9E2F7000, 0x9E2E6180, + 0x9E2D5300, 0x9E2C4480, 0x9E2B3600, + 0x9E2A2780, 0x9E291900, 0x9E280A80, + 0x9E26FC00, 0x9E25ED80, 0x9E24DF00, + 0x9E23D080, 0x9E22C200, 0x9E21B380, + 0x9E20A500, 0x9E1F9680, 0x9E1E8800, + 0x9E1D7980, 0x9E1C6B00, 0x9E1B5C80, + 0x9E1A4E00, 0x9E193F80, 0x9E183100, + 0x9E172280, 0x9E161400, 0x9E150580, + 0x9E13F700, 0x9E12E880, 0x9E11DA00, + 0x9E10CB80, 0x9E0FBD00, 0x9E0EAE80, + 0x9E0DA000, 0x9E0C9180, 0x9E0B8300, + 0x9E0A7480, 0x9E096600, 0x9E085780, + 0x9E074900, 0x9E063A80, 0x9E052C00, + 0x9E041D80, 0x9E030F00, 0x9E020080, + 0x9E00F200, 0x9DFFE380, 0x9DFED500, + 0x9DFDC680, 0x9DFCB800, 0x9DFBA980, + 0x9DFA9B00, 0x9DF98C80, 0x9DF87E00, + 0x9DF76F80, 0x9DF66100, 0x9DF55280, + 0x9DF44400, 0x9DF33580, 0x9DF22700, + 0x9DF11880, 0x9DF00A00, 0x9DEEFB80, + 0x9DEDED00, 0x9DECDE80, 0x9DEBD000, + 0x9DEAC180, 0x9DE9B300, 0x9DE8A480, + 0x9DE79600, 0x9DE68780, 0x9DE57900, + 0x9DE46A80, 0x9DE35C00, 0x9DE24D80, + 0x9DE13F00, 0x9DE03080, 0x9DDF2200, + 0x9DDE1380, 0x9DDD0500, 0x9DDBF680, + 0x9DDAE800, 0x9DD9D980, 0x9DD8CB00, + 0x9DD7BC80, 0x9DD6AE00, 0x9DD59F80, + 0x9DD49100, 0x9DD38280, 0x9DD27400, + 0x9DD16580, 0x9DD05700, 0x9DCF4880, + 0x9DCE3A00, 0x9DCD2B80, 0x9DCC1D00, + 0x9DCB0E80, 0x9DCA0000, 0x9DC8F180, + 0x9DC7E300, 0x9DC6D480, 0x9DC5C600, + 0x9DC4B780, 0x9DC3A900, 0x9DC29A80, + 0x9DC18C00, 0x9DC07D80, 0x9DBF6F00, + 0x9DBE6080, 0x9DBD5200, 0x9DBC4380, + 0x9DBB3500, 0x9DBA2680, 0x9DB91800, + 0x9DB80980, 0x9DB6FB00, 0x9DB5EC80, + 0x9DB4DE00, 0x9DB3CF80, 0x9DB2C100, + 0x9DB1B280, 0x9DB0A400, 0x9DAF9580, + 0x9DAE8700, 0x9DAD7880, 0x9DAC6A00, + 0x9DAB5B80, 0x9DAA4D00, 0x9DA93E80, + 0x9DA83000, 0x9DA72180, 0x9DA61300, + 0x9DA50480, 0x9DA3F600, 0x9DA2E780, + 0x9DA1D900, 0x9DA0CA80, 0x9D9FBC00, + 0x9D9EAD80, 0x9D9D9F00, 0x9D9C9080, + 0x9D9B8200, 0x9D9A7380, 0x9D996500, + 0x9D985680, 0x9D974800, 0x9D963980, + 0x9D952B00, 0x9D941C80, 0x9D930E00, + 0x9D91FF80, 0x9D90F100, 0x9D8FE280, + 0x9D8ED400, 0x9D8DC580, 0x9D8CB700, + 0x9D8BA880, 0x9D8A9A00, 0x9D898B80, + 0x9D887D00, 0x9D876E80, 0x9D866000, + 0x9D855180, 0x9D844300, 0x9D833480, + 0x9D822600, 0x9D811780, 0x9D800900, + 0x9D7EFA80, 0x9D7DEC00, 0x9D7CDD80, + 0x9D7BCF00, 0x9D7AC080, 0x9D79B200, + 0x9D78A380, 0x9D779500, 0x9D768680, + 0x9D757800, 0x9D746980, 0x9D735B00, + 0x9D724C80, 0x9D713E00, 0x9D702F80, + 0x9D6F2100, 0x9D6E1280, 0x9D6D0400, + 0x9D6BF580, 0x9D6AE700, 0x9D69D880, + 0x9D68CA00, 0x9D67BB80, 0x9D66AD00, + 0x9D659E80, 0x9D649000, 0x9D638180, + 0x9D627300, 0x9D616480, 0x9D605600, + 0x9D5F4780, 0x9D5E3900, 0x9D5D2A80, + 0x9D5C1C00, 0x9D5B0D80, 0x9D59FF00, + 0x9D58F080, 0x9D57E200, 0x9D56D380, + 0x9D55C500, 0x9D54B680, 0x9D53A800, + 0x9D529980, 0x9D518B00, 0x9D507C80, + 0x9D4F6E00, 0x9D4E5F80, 0x9D4D5100, + 0x9D4C4280, 0x9D4B3400, 0x9D4A2580, + 0x9D491700, 0x9D480880, 0x9D46FA00, + 0x9D45EB80, 0x9D44DD00, 0x9D43CE80, + 0x9D42C000, 0x9D41B180, 0x9D40A300, + 0x9D3F9480, 0x9D3E8600, 0x9D3D7780, + 0x9D3C6900, 0x9D3B5A80, 0x9D3A4C00, + 0x9D393D80, 0x9D382F00, 0x9D372080, + 0x9D361200, 0x9D350380, 0x9D33F500, + 0x9D32E680, 0x9D31D800, 0x9D30C980, + 0x9D2FBB00, 0x9D2EAC80, 0x9D2D9E00, + 0x9D2C8F80, 0x9D2B8100, 0x9D2A7280, + 0x9D296400, 0x9D285580, 0x9D274700, + 0x9D263880, 0x9D252A00, 0x9D241B80, + 0x9D230D00, 0x9D21FE80, 0x9D20F000, + 0x9D1FE180, 0x9D1ED300, 0x9D1DC480, + 0x9D1CB600, 0x9D1BA780, 0x9D1A9900, + 0x9D198A80, 0x9D187C00, 0x9D176D80, + 0x9D165F00, 0x9D155080, 0x9D144200, + 0x9D133380, 0x9D122500, 0x9D111680, + 0x9D100800, 0x9D0EF980, 0x9D0DEB00, + 0x9D0CDC80, 0x9D0BCE00, 0x9D0ABF80, + 0x9D09B100, 0x9D08A280, 0x9D079400, + 0x9D068580, 0x9D057700, 0x9D046880, + 0x9D035A00, 0x9D024B80, 0x9D013D00, + 0x9D002E80, 0x9CFF2000, 0x9CFE1180, + 0x9CFD0300, 0x9CFBF480, 0x9CFAE600, + 0x9CF9D780, 0x9CF8C900, 0x9CF7BA80, + 0x9CF6AC00, 0x9CF59D80, 0x9CF48F00, + 0x9CF38080, 0x9CF27200, 0x9CF16380, + 0x9CF05500, 0x9CEF4680, 0x9CEE3800, + 0x9CED2980, 0x9CEC1B00, 0x9CEB0C80, + 0x9CE9FE00, 0x9CE8EF80, 0x9CE7E100, + 0x9CE6D280, 0x9CE5C400, 0x9CE4B580, + 0x9CE3A700, 0x9CE29880, 0x9CE18A00, + 0x9CE07B80, 0x9CDF6D00, 0x9CDE5E80, + 0x9CDD5000, 0x9CDC4180, 0x9CDB3300, + 0x9CDA2480, 0x9CD91600, 0x9CD80780, + 0x9CD6F900, 0x9CD5EA80, 0x9CD4DC00, + 0x9CD3CD80, 0x9CD2BF00, 0x9CD1B080, + 0x9CD0A200, 0x9CCF9380, 0x9CCE8500, + 0x9CCD7680, 0x9CCC6800, 0x9CCB5980, + 0x9CCA4B00, 0x9CC93C80, 0x9CC82E00, + 0x9CC71F80, 0x9CC61100, 0x9CC50280, + 0x9CC3F400, 0x9CC2E580, 0x9CC1D700, + 0x9CC0C880, 0x9CBFBA00, 0x9CBEAB80, + 0x9CBD9D00, 0x9CBC8E80, 0x9CBB8000, + 0x9CBA7180, 0x9CB96300, 0x9CB85480, + 0x9CB74600, 0x9CB63780, 0x9CB52900, + 0x9CB41A80, 0x9CB30C00, 0x9CB1FD80, + 0x9CB0EF00, 0x9CAFE080, 0x9CAED200, + 0x9CADC380, 0x9CACB500, 0x9CABA680, + 0x9CAA9800, 0x9CA98980, 0x9CA87B00, + 0x9CA76C80, 0x9CA65E00, 0x9CA54F80, + 0x9CA44100, 0x9CA33280, 0x9CA22400, + 0x9CA11580, 0x9CA00700, 0x9C9EF880, + 0x9C9DEA00, 0x9C9CDB80, 0x9C9BCD00, + 0x9C9ABE80, 0x9C99B000, 0x9C98A180, + 0x9C979300, 0x9C968480, 0x9C957600, + 0x9C946780, 0x9C935900, 0x9C924A80, + 0x9C913C00, 0x9C902D80, 0x9C8F1F00, + 0x9C8E1080, 0x9C8D0200, 0x9C8BF380, + 0x9C8AE500, 0x9C89D680, 0x9C88C800, + 0x9C87B980, 0x9C86AB00, 0x9C859C80, + 0x9C848E00, 0x9C837F80, 0x9C827100, + 0x9C816280, 0x9C805400, 0x9C7F4580, + 0x9C7E3700, 0x9C7D2880, 0x9C7C1A00, + 0x9C7B0B80, 0x9C79FD00, 0x9C78EE80, + 0x9C77E000, 0x9C76D180, 0x9C75C300, + 0x9C74B480, 0x9C73A600, 0x9C729780, + 0x9C718900, 0x9C707A80, 0x9C6F6C00, + 0x9C6E5D80, 0x9C6D4F00, 0x9C6C4080, + 0x9C6B3200, 0x9C6A2380, 0x9C691500, + 0x9C680680, 0x9C66F800, 0x9C65E980, + 0x9C64DB00, 0x9C63CC80, 0x9C62BE00, + 0x9C61AF80, 0x9C60A100, 0x9C5F9280, + 0x9C5E8400, 0x9C5D7580, 0x9C5C6700, + 0x9C5B5880, 0x9C5A4A00, 0x9C593B80, + 0x9C582D00, 0x9C571E80, 0x9C561000, + 0x9C550180, 0x9C53F300, 0x9C52E480, + 0x9C51D600, 0x9C50C780, 0x9C4FB900, + 0x9C4EAA80, 0x9C4D9C00, 0x9C4C8D80, + 0x9C4B7F00, 0x9C4A7080, 0x9C496200, + 0x9C485380, 0x9C474500, 0x9C463680, + 0x9C452800, 0x9C441980, 0x9C430B00, + 0x9C41FC80, 0x9C40EE00, 0x9C3FDF80, + 0x9C3ED100, 0x9C3DC280, 0x9C3CB400, + 0x9C3BA580, 0x9C3A9700, 0x9C398880, + 0x9C387A00, 0x9C376B80, 0x9C365D00, + 0x9C354E80, 0x9C344000, 0x9C333180, + 0x9C322300, 0x9C311480, 0x9C300600, + 0x9C2EF780, 0x9C2DE900, 0x9C2CDA80, + 0x9C2BCC00, 0x9C2ABD80, 0x9C29AF00, + 0x9C28A080, 0x9C279200, 0x9C268380, + 0x9C257500, 0x9C246680, 0x9C235800, + 0x9C224980, 0x9C213B00, 0x9C202C80, + 0x9C1F1E00, 0x9C1E0F80, 0x9C1D0100, + 0x9C1BF280, 0x9C1AE400, 0x9C19D580, + 0x9C18C700, 0x9C17B880, 0x9C16AA00, + 0x9C159B80, 0x9C148D00, 0x9C137E80, + 0x9C127000, 0x9C116180, 0x9C105300, + 0x9C0F4480, 0x9C0E3600, 0x9C0D2780, + 0x9C0C1900, 0x9C0B0A80, 0x9C09FC00, + 0x9C08ED80, 0x9C07DF00, 0x9C06D080, + 0x9C05C200, 0x9C04B380, 0x9C03A500, + 0x9C029680, 0x9C018800, 0x9C007980, + 0x9BFF6B00, 0x9BFE5C80, 0x9BFD4E00, + 0x9BFC3F80, 0x9BFB3100, 0x9BFA2280, + 0x9BF91400, 0x9BF80580, 0x9BF6F700, + 0x9BF5E880, 0x9BF4DA00, 0x9BF3CB80, + 0x9BF2BD00, 0x9BF1AE80, 0x9BF0A000, + 0x9BEF9180, 0x9BEE8300, 0x9BED7480, + 0x9BEC6600, 0x9BEB5780, 0x9BEA4900, + 0x9BE93A80, 0x9BE82C00, 0x9BE71D80, + 0x9BE60F00, 0x9BE50080, 0x9BE3F200, + 0x9BE2E380, 0x9BE1D500, 0x9BE0C680, + 0x9BDFB800, 0x9BDEA980, 0x9BDD9B00, + 0x9BDC8C80, 0x9BDB7E00, 0x9BDA6F80, + 0x9BD96100, 0x9BD85280, 0x9BD74400, + 0x9BD63580, 0x9BD52700, 0x9BD41880, + 0x9BD30A00, 0x9BD1FB80, 0x9BD0ED00, + 0x9BCFDE80, 0x9BCED000, 0x9BCDC180, + 0x9BCCB300, 0x9BCBA480, 0x9BCA9600, + 0x9BC98780, 0x9BC87900, 0x9BC76A80, + 0x9BC65C00, 0x9BC54D80, 0x9BC43F00, + 0x9BC33080, 0x9BC22200, 0x9BC11380, + 0x9BC00500, 0x9BBEF680, 0x9BBDE800, + 0x9BBCD980, 0x9BBBCB00, 0x9BBABC80, + 0x9BB9AE00, 0x9BB89F80, 0x9BB79100, + 0x9BB68280, 0x9BB57400, 0x9BB46580, + 0x9BB35700, 0x9BB24880, 0x9BB13A00, + 0x9BB02B80, 0x9BAF1D00, 0x9BAE0E80, + 0x9BAD0000, 0x9BABF180, 0x9BAAE300, + 0x9BA9D480, 0x9BA8C600, 0x9BA7B780, + 0x9BA6A900, 0x9BA59A80, 0x9BA48C00, + 0x9BA37D80, 0x9BA26F00, 0x9BA16080, + 0x9BA05200, 0x9B9F4380, 0x9B9E3500, + 0x9B9D2680, 0x9B9C1800, 0x9B9B0980, + 0x9B99FB00, 0x9B98EC80, 0x9B97DE00, + 0x9B96CF80, 0x9B95C100, 0x9B94B280, + 0x9B93A400, 0x9B929580, 0x9B918700, + 0x9B907880, 0x9B8F6A00, 0x9B8E5B80, + 0x9B8D4D00, 0x9B8C3E80, 0x9B8B3000, + 0x9B8A2180, 0x9B891300, 0x9B880480, + 0x9B86F600, 0x9B85E780, 0x9B84D900, + 0x9B83CA80, 0x9B82BC00, 0x9B81AD80, + 0x9B809F00, 0x9B7F9080, 0x9B7E8200, + 0x9B7D7380, 0x9B7C6500, 0x9B7B5680, + 0x9B7A4800, 0x9B793980, 0x9B782B00, + 0x9B771C80, 0x9B760E00, 0x9B74FF80, + 0x9B73F100, 0x9B72E280, 0x9B71D400, + 0x9B70C580, 0x9B6FB700, 0x9B6EA880, + 0x9B6D9A00, 0x9B6C8B80, 0x9B6B7D00, + 0x9B6A6E80, 0x9B696000, 0x9B685180, + 0x9B674300, 0x9B663480, 0x9B652600, + 0x9B641780, 0x9B630900, 0x9B61FA80, + 0x9B60EC00, 0x9B5FDD80, 0x9B5ECF00, + 0x9B5DC080, 0x9B5CB200, 0x9B5BA380, + 0x9B5A9500, 0x9B598680, 0x9B587800, + 0x9B576980, 0x9B565B00, 0x9B554C80, + 0x9B543E00, 0x9B532F80, 0x9B522100, + 0x9B511280, 0x9B500400, 0x9B4EF580, + 0x9B4DE700, 0x9B4CD880, 0x9B4BCA00, + 0x9B4ABB80, 0x9B49AD00, 0x9B489E80, + 0x9B479000, 0x9B468180, 0x9B457300, + 0x9B446480, 0x9B435600, 0x9B424780, + 0x9B413900, 0x9B402A80, 0x9B3F1C00, + 0x9B3E0D80, 0x9B3CFF00, 0x9B3BF080, + 0x9B3AE200, 0x9B39D380, 0x9B38C500, + 0x9B37B680, 0x9B36A800, 0x9B359980, + 0x9B348B00, 0x9B337C80, 0x9B326E00, + 0x9B315F80, 0x9B305100, 0x9B2F4280, + 0x9B2E3400, 0x9B2D2580, 0x9B2C1700, + 0x9B2B0880, 0x9B29FA00, 0x9B28EB80, + 0x9B27DD00, 0x9B26CE80, 0x9B25C000, + 0x9B24B180, 0x9B23A300, 0x9B229480, + 0x9B218600, 0x9B207780, 0x9B1F6900, + 0x9B1E5A80, 0x9B1D4C00, 0x9B1C3D80, + 0x9B1B2F00, 0x9B1A2080, 0x9B191200, + 0x9B180380, 0x9B16F500, 0x9B15E680, + 0x9B14D800, 0x9B13C980, 0x9B12BB00, + 0x9B11AC80, 0x9B109E00, 0x9B0F8F80, + 0x9B0E8100, 0x9B0D7280, 0x9B0C6400, + 0x9B0B5580, 0x9B0A4700, 0x9B093880, + 0x9B082A00, 0x9B071B80, 0x9B060D00, + 0x9B04FE80, 0x9B03F000, 0x9B02E180, + 0x9B01D300, 0x9B00C480, 0x9AFFB600, + 0x9AFEA780, 0x9AFD9900, 0x9AFC8A80, + 0x9AFB7C00, 0x9AFA6D80, 0x9AF95F00, + 0x9AF85080, 0x9AF74200, 0x9AF63380, + 0x9AF52500, 0x9AF41680, 0x9AF30800, + 0x9AF1F980, 0x9AF0EB00, 0x9AEFDC80, + 0x9AEECE00, 0x9AEDBF80, 0x9AECB100, + 0x9AEBA280, 0x9AEA9400, 0x9AE98580, + 0x9AE87700, 0x9AE76880, 0x9AE65A00, + 0x9AE54B80, 0x9AE43D00, 0x9AE32E80, + 0x9AE22000, 0x9AE11180, 0x9AE00300, + 0x9ADEF480, 0x9ADDE600, 0x9ADCD780, + 0x9ADBC900, 0x9ADABA80, 0x9AD9AC00, + 0x9AD89D80, 0x9AD78F00, 0x9AD68080, + 0x9AD57200, 0x9AD46380, 0x9AD35500, + 0x9AD24680, 0x9AD13800, 0x9AD02980, + 0x9ACF1B00, 0x9ACE0C80, 0x9ACCFE00, + 0x9ACBEF80, 0x9ACAE100, 0x9AC9D280, + 0x9AC8C400, 0x9AC7B580, 0x9AC6A700, + 0x9AC59880, 0x9AC48A00, 0x9AC37B80, + 0x9AC26D00, 0x9AC15E80, 0x9AC05000, + 0x9ABF4180, 0x9ABE3300, 0x9ABD2480, + 0x9ABC1600, 0x9ABB0780, 0x9AB9F900, + 0x9AB8EA80, 0x9AB7DC00, 0x9AB6CD80, + 0x9AB5BF00, 0x9AB4B080, 0x9AB3A200, + 0x9AB29380, 0x9AB18500, 0x9AB07680, + 0x9AAF6800, 0x9AAE5980, 0x9AAD4B00, + 0x9AAC3C80, 0x9AAB2E00, 0x9AAA1F80, + 0x9AA91100, 0x9AA80280, 0x9AA6F400, + 0x9AA5E580, 0x9AA4D700, 0x9AA3C880, + 0x9AA2BA00, 0x9AA1AB80, 0x9AA09D00, + 0x9A9F8E80, 0x9A9E8000, 0x9A9D7180, + 0x9A9C6300, 0x9A9B5480, 0x9A9A4600, + 0x9A993780, 0x9A982900, 0x9A971A80, + 0x9A960C00, 0x9A94FD80, 0x9A93EF00, + 0x9A92E080, 0x9A91D200, 0x9A90C380, + 0x9A8FB500, 0x9A8EA680, 0x9A8D9800, + 0x9A8C8980, 0x9A8B7B00, 0x9A8A6C80, + 0x9A895E00, 0x9A884F80, 0x9A874100, + 0x9A863280, 0x9A852400, 0x9A841580, + 0x9A830700, 0x9A81F880, 0x9A80EA00, + 0x9A7FDB80, 0x9A7ECD00, 0x9A7DBE80, + 0x9A7CB000, 0x9A7BA180, 0x9A7A9300, + 0x9A798480, 0x9A787600, 0x9A776780, + 0x9A765900, 0x9A754A80, 0x9A743C00, + 0x9A732D80, 0x9A721F00, 0x9A711080, + 0x9A700200, 0x9A6EF380, 0x9A6DE500, + 0x9A6CD680, 0x9A6BC800, 0x9A6AB980, + 0x9A69AB00, 0x9A689C80, 0x9A678E00, + 0x9A667F80, 0x9A657100, 0x9A646280, + 0x9A635400, 0x9A624580, 0x9A613700, + 0x9A602880, 0x9A5F1A00, 0x9A5E0B80, + 0x9A5CFD00, 0x9A5BEE80, 0x9A5AE000, + 0x9A59D180, 0x9A58C300, 0x9A57B480, + 0x9A56A600, 0x9A559780, 0x9A548900, + 0x9A537A80, 0x9A526C00, 0x9A515D80, + 0x9A504F00, 0x9A4F4080, 0x9A4E3200, + 0x9A4D2380, 0x9A4C1500, 0x9A4B0680, + 0x9A49F800, 0x9A48E980, 0x9A47DB00, + 0x9A46CC80, 0x9A45BE00, 0x9A44AF80, + 0x9A43A100, 0x9A429280, 0x9A418400, + 0x9A407580, 0x9A3F6700, 0x9A3E5880, + 0x9A3D4A00, 0x9A3C3B80, 0x9A3B2D00, + 0x9A3A1E80, 0x9A391000, 0x9A380180, + 0x9A36F300, 0x9A35E480, 0x9A34D600, + 0x9A33C780, 0x9A32B900, 0x9A31AA80, + 0x9A309C00, 0x9A2F8D80, 0x9A2E7F00, + 0x9A2D7080, 0x9A2C6200, 0x9A2B5380, + 0x9A2A4500, 0x9A293680, 0x9A282800, + 0x9A271980, 0x9A260B00, 0x9A24FC80, + 0x9A23EE00, 0x9A22DF80, 0x9A21D100, + 0x9A20C280, 0x9A1FB400, 0x9A1EA580, + 0x9A1D9700, 0x9A1C8880, 0x9A1B7A00, + 0x9A1A6B80, 0x9A195D00, 0x9A184E80, + 0x9A174000, 0x9A163180, 0x9A152300, + 0x9A141480, 0x9A130600, 0x9A11F780, + 0x9A10E900, 0x9A0FDA80, 0x9A0ECC00, + 0x9A0DBD80, 0x9A0CAF00, 0x9A0BA080, + 0x9A0A9200, 0x9A098380, 0x9A087500, + 0x9A076680, 0x9A065800, 0x9A054980, + 0x9A043B00, 0x9A032C80, 0x9A021E00, + 0x9A010F80, 0x9A000100, 0x99FEF280, + 0x99FDE400, 0x99FCD580, 0x99FBC700, + 0x99FAB880, 0x99F9AA00, 0x99F89B80, + 0x99F78D00, 0x99F67E80, 0x99F57000, + 0x99F46180, 0x99F35300, 0x99F24480, + 0x99F13600, 0x99F02780, 0x99EF1900, + 0x99EE0A80, 0x99ECFC00, 0x99EBED80, + 0x99EADF00, 0x99E9D080, 0x99E8C200, + 0x99E7B380, 0x99E6A500, 0x99E59680, + 0x99E48800, 0x99E37980, 0x99E26B00, + 0x99E15C80, 0x99E04E00, 0x99DF3F80, + 0x99DE3100, 0x99DD2280, 0x99DC1400, + 0x99DB0580, 0x99D9F700, 0x99D8E880, + 0x99D7DA00, 0x99D6CB80, 0x99D5BD00, + 0x99D4AE80, 0x99D3A000, 0x99D29180, + 0x99D18300, 0x99D07480, 0x99CF6600, + 0x99CE5780, 0x99CD4900, 0x99CC3A80, + 0x99CB2C00, 0x99CA1D80, 0x99C90F00, + 0x99C80080, 0x99C6F200, 0x99C5E380, + 0x99C4D500, 0x99C3C680, 0x99C2B800, + 0x99C1A980, 0x99C09B00, 0x99BF8C80, + 0x99BE7E00, 0x99BD6F80, 0x99BC6100, + 0x99BB5280, 0x99BA4400, 0x99B93580, + 0x99B82700, 0x99B71880, 0x99B60A00, + 0x99B4FB80, 0x99B3ED00, 0x99B2DE80, + 0x99B1D000, 0x99B0C180, 0x99AFB300, + 0x99AEA480, 0x99AD9600, 0x99AC8780, + 0x99AB7900, 0x99AA6A80, 0x99A95C00, + 0x99A84D80, 0x99A73F00, 0x99A63080, + 0x99A52200, 0x99A41380, 0x99A30500, + 0x99A1F680, 0x99A0E800, 0x999FD980, + 0x999ECB00, 0x999DBC80, 0x999CAE00, + 0x999B9F80, 0x999A9100, 0x99998280, + 0x99987400, 0x99976580, 0x99965700, + 0x99954880, 0x99943A00, 0x99932B80, + 0x99921D00, 0x99910E80, 0x99940000, + 0x99930180, 0x99920300, 0x99910480, + 0x99900600, 0x998F0780, 0x998E0900, + 0x998D0A80, 0x998C0C00, 0x998B0D80, + 0x998A0F00, 0x99891080, 0x99881200, + 0x99871380, 0x99861500, 0x99851680, + 0x99841800, 0x99831980, 0x99821B00, + 0x99811C80, 0x99801E00, 0x997F1F80, + 0x997E2100, 0x997D2280, 0x997C2400, + 0x997B2580, 0x997A2700, 0x99792880, + 0x99782A00, 0x99772B80, 0x99762D00, + 0x99752E80, 0x99743000, 0x99733180, + 0x99723300, 0x99713480, 0x99703600, + 0x996F3780, 0x996E3900, 0x996D3A80, + 0x996C3C00, 0x996B3D80, 0x996A3F00, + 0x99694080, 0x99684200, 0x99674380, + 0x99664500, 0x99654680, 0x99644800, + 0x99634980, 0x99624B00, 0x99614C80, + 0x99604E00, 0x995F4F80, 0x995E5100, + 0x995D5280, 0x995C5400, 0x995B5580, + 0x995A5700, 0x99595880, 0x99585A00, + 0x99575B80, 0x99565D00, 0x99555E80, + 0x99546000, 0x99536180, 0x99526300, + 0x99516480, 0x99506600, 0x994F6780, + 0x994E6900, 0x994D6A80, 0x994C6C00, + 0x994B6D80, 0x994A6F00, 0x99497080, + 0x99487200, 0x99477380, 0x99467500, + 0x99457680, 0x99447800, 0x99437980, + 0x99427B00, 0x99417C80, 0x99407E00, + 0x993F7F80, 0x993E8100, 0x993D8280, + 0x993C8400, 0x993B8580, 0x993A8700, + 0x99398880, 0x99388A00, 0x99378B80, + 0x99368D00, 0x99358E80, 0x99349000, + 0x99339180, 0x99329300, 0x99319480, + 0x99309600, 0x992F9780, 0x992E9900, + 0x992D9A80, 0x992C9C00, 0x992B9D80, + 0x992A9F00, 0x9929A080, 0x9928A200, + 0x9927A380, 0x9926A500, 0x9925A680, + 0x9924A800, 0x9923A980, 0x9922AB00, + 0x9921AC80, 0x9920AE00, 0x991FAF80, + 0x991EB100, 0x991DB280, 0x991CB400, + 0x991BB580, 0x991AB700, 0x9919B880, + 0x9918BA00, 0x9917BB80, 0x9916BD00, + 0x9915BE80, 0x9914C000, 0x9913C180, + 0x9912C300, 0x9911C480, 0x9910C600, + 0x990FC780, 0x990EC900, 0x990DCA80, + 0x990CCC00, 0x990BCD80, 0x990ACF00, + 0x9909D080, 0x9908D200, 0x9907D380, + 0x9906D500, 0x9905D680, 0x9904D800, + 0x9903D980, 0x9902DB00, 0x9901DC80, + 0x9900DE00, 0x98FFDF80, 0x98FEE100, + 0x98FDE280, 0x98FCE400, 0x98FBE580, + 0x98FAE700, 0x98F9E880, 0x98F8EA00, + 0x98F7EB80, 0x98F6ED00, 0x98F5EE80, + 0x98F4F000, 0x98F3F180, 0x98F2F300, + 0x98F1F480, 0x98F0F600, 0x98EFF780, + 0x98EEF900, 0x98EDFA80, 0x98ECFC00, + 0x98EBFD80, 0x98EAFF00, 0x98EA0080, + 0x98E90200, 0x98E80380, 0x98E70500, + 0x98E60680, 0x98E50800, 0x98E40980, + 0x98E30B00, 0x98E20C80, 0x98E10E00, + 0x98E00F80, 0x98DF1100, 0x98DE1280, + 0x98DD1400, 0x98DC1580, 0x98DB1700, + 0x98DA1880, 0x98D91A00, 0x98D81B80, + 0x98D71D00, 0x98D61E80, 0x98D52000, + 0x98D42180, 0x98D32300, 0x98D22480, + 0x98D12600, 0x98D02780, 0x98CF2900, + 0x98CE2A80, 0x98CD2C00, 0x98CC2D80, + 0x98CB2F00, 0x98CA3080, 0x98C93200, + 0x98C83380, 0x98C73500, 0x98C63680, + 0x98C53800, 0x98C43980, 0x98C33B00, + 0x98C23C80, 0x98C13E00, 0x98C03F80, + 0x98BF4100, 0x98BE4280, 0x98BD4400, + 0x98BC4580, 0x98BB4700, 0x98BA4880, + 0x98B94A00, 0x98B84B80, 0x98B74D00, + 0x98B64E80, 0x98B55000, 0x98B45180, + 0x98B35300, 0x98B25480, 0x98B15600, + 0x98B05780, 0x98AF5900, 0x98AE5A80, + 0x98AD5C00, 0x98AC5D80, 0x98AB5F00, + 0x98AA6080, 0x98A96200, 0x98A86380, + 0x98A76500, 0x98A66680, 0x98A56800, + 0x98A46980, 0x98A36B00, 0x98A26C80, + 0x98A16E00, 0x98A06F80, 0x989F7100, + 0x989E7280, 0x989D7400, 0x989C7580, + 0x989B7700, 0x989A7880, 0x98997A00, + 0x98987B80, 0x98977D00, 0x98967E80, + 0x98958000, 0x98948180, 0x98938300, + 0x98928480, 0x98918600, 0x98908780, + 0x988F8900, 0x988E8A80, 0x988D8C00, + 0x988C8D80, 0x988B8F00, 0x988A9080, + 0x98899200, 0x98889380, 0x98879500, + 0x98869680, 0x98859800, 0x98849980, + 0x98839B00, 0x98829C80, 0x98819E00, + 0x98809F80, 0x987FA100, 0x987EA280, + 0x987DA400, 0x987CA580, 0x987BA700, + 0x987AA880, 0x9879AA00, 0x9878AB80, + 0x9877AD00, 0x9876AE80, 0x9875B000, + 0x9874B180, 0x9873B300, 0x9872B480, + 0x9871B600, 0x9870B780, 0x986FB900, + 0x986EBA80, 0x986DBC00, 0x986CBD80, + 0x986BBF00, 0x986AC080, 0x9869C200, + 0x9868C380, 0x9867C500, 0x9866C680, + 0x9865C800, 0x9864C980, 0x9863CB00, + 0x9862CC80, 0x9861CE00, 0x9860CF80, + 0x985FD100, 0x985ED280, 0x985DD400, + 0x985CD580, 0x985BD700, 0x985AD880, + 0x9859DA00, 0x9858DB80, 0x9857DD00, + 0x9856DE80, 0x9855E000, 0x9854E180, + 0x9853E300, 0x9852E480, 0x9851E600, + 0x9850E780, 0x984FE900, 0x984EEA80, + 0x984DEC00, 0x984CED80, 0x984BEF00, + 0x984AF080, 0x9849F200, 0x9848F380, + 0x9847F500, 0x9846F680, 0x9845F800, + 0x9844F980, 0x9843FB00, 0x9842FC80, + 0x9841FE00, 0x9840FF80, 0x98400100, + 0x983F0280, 0x983E0400, 0x983D0580, + 0x983C0700, 0x983B0880, 0x983A0A00, + 0x98390B80, 0x98380D00, 0x98370E80, + 0x98361000, 0x98351180, 0x98341300, + 0x98331480, 0x98321600, 0x98311780, + 0x98301900, 0x982F1A80, 0x982E1C00, + 0x982D1D80, 0x982C1F00, 0x982B2080, + 0x982A2200, 0x98292380, 0x98282500, + 0x98272680, 0x98262800, 0x98252980, + 0x98242B00, 0x98232C80, 0x98222E00, + 0x98212F80, 0x98203100, 0x981F3280, + 0x981E3400, 0x981D3580, 0x981C3700, + 0x981B3880, 0x981A3A00, 0x98193B80, + 0x98183D00, 0x98173E80, 0x98164000, + 0x98154180, 0x98144300, 0x98134480, + 0x98124600, 0x98114780, 0x98104900, + 0x980F4A80, 0x980E4C00, 0x980D4D80, + 0x980C4F00, 0x980B5080, 0x980A5200, + 0x98095380, 0x98085500, 0x98075680, + 0x98065800, 0x98055980, 0x98045B00, + 0x98035C80, 0x98025E00, 0x98015F80, + 0x98006100, 0x97FF6280, 0x97FE6400, + 0x97FD6580, 0x97FC6700, 0x97FB6880, + 0x97FA6A00, 0x97F96B80, 0x97F86D00, + 0x97F76E80, 0x97F67000, 0x97F57180, + 0x97F47300, 0x97F37480, 0x97F27600, + 0x97F17780, 0x97F07900, 0x97EF7A80, + 0x97EE7C00, 0x97ED7D80, 0x97EC7F00, + 0x97EB8080, 0x97EA8200, 0x97E98380, + 0x97E88500, 0x97E78680, 0x97E68800, + 0x97E58980, 0x97E48B00, 0x97E38C80, + 0x97E28E00, 0x97E18F80, 0x97E09100, + 0x97DF9280, 0x97DE9400, 0x97DD9580, + 0x97DC9700, 0x97DB9880, 0x97DA9A00, + 0x97D99B80, 0x97D89D00, 0x97D79E80, + 0x97D6A000, 0x97D5A180, 0x97D4A300, + 0x97D3A480, 0x97D2A600, 0x97D1A780, + 0x97D0A900, 0x97CFAA80, 0x97CEAC00, + 0x97CDAD80, 0x97CCAF00, 0x97CBB080, + 0x97CAB200, 0x97C9B380, 0x97C8B500, + 0x97C7B680, 0x97C6B800, 0x97C5B980, + 0x97C4BB00, 0x97C3BC80, 0x97C2BE00, + 0x97C1BF80, 0x97C0C100, 0x97BFC280, + 0x97BEC400, 0x97BDC580, 0x97BCC700, + 0x97BBC880, 0x97BACA00, 0x97B9CB80, + 0x97B8CD00, 0x97B7CE80, 0x97B6D000, + 0x97B5D180, 0x97B4D300, 0x97B3D480, + 0x97B2D600, 0x97B1D780, 0x97B0D900, + 0x97AFDA80, 0x97AEDC00, 0x97ADDD80, + 0x97ACDF00, 0x97ABE080, 0x97AAE200, + 0x97A9E380, 0x97A8E500, 0x97A7E680, + 0x97A6E800, 0x97A5E980, 0x97A4EB00, + 0x97A3EC80, 0x97A2EE00, 0x97A1EF80, + 0x97A0F100, 0x979FF280, 0x979EF400, + 0x979DF580, 0x979CF700, 0x979BF880, + 0x979AFA00, 0x9799FB80, 0x9798FD00, + 0x9797FE80, 0x97970000, 0x97960180, + 0x97950300, 0x97940480, 0x97930600, + 0x97920780, 0x97910900, 0x97900A80, + 0x978F0C00, 0x978E0D80, 0x978D0F00, + 0x978C1080, 0x978B1200, 0x978A1380, + 0x97891500, 0x97881680, 0x97871800, + 0x97861980, 0x97851B00, 0x97841C80, + 0x97831E00, 0x97821F80, 0x97812100, + 0x97802280, 0x977F2400, 0x977E2580, + 0x977D2700, 0x977C2880, 0x977B2A00, + 0x977A2B80, 0x97792D00, 0x97782E80, + 0x97773000, 0x97763180, 0x97753300, + 0x97743480, 0x97733600, 0x97723780, + 0x97713900, 0x97703A80, 0x976F3C00, + 0x976E3D80, 0x976D3F00, 0x976C4080, + 0x976B4200, 0x976A4380, 0x97694500, + 0x97684680, 0x97674800, 0x97664980, + 0x97654B00, 0x97644C80, 0x97634E00, + 0x97624F80, 0x97615100, 0x97605280, + 0x975F5400, 0x975E5580, 0x975D5700, + 0x975C5880, 0x975B5A00, 0x975A5B80, + 0x97595D00, 0x97585E80, 0x97576000, + 0x97566180, 0x97556300, 0x97546480, + 0x97536600, 0x97526780, 0x97516900, + 0x97506A80, 0x974F6C00, 0x974E6D80, + 0x974D6F00, 0x974C7080, 0x974B7200, + 0x974A7380, 0x97497500, 0x97487680, + 0x97477800, 0x97467980, 0x97457B00, + 0x97447C80, 0x97437E00, 0x97427F80, + 0x97418100, 0x97408280, 0x973F8400, + 0x973E8580, 0x973D8700, 0x973C8880, + 0x973B8A00, 0x973A8B80, 0x97398D00, + 0x97388E80, 0x97379000, 0x97369180, + 0x97359300, 0x97349480, 0x97339600, + 0x97329780, 0x97319900, 0x97309A80, + 0x972F9C00, 0x972E9D80, 0x972D9F00, + 0x972CA080, 0x972BA200, 0x972AA380, + 0x9729A500, 0x9728A680, 0x9727A800, + 0x9726A980, 0x9725AB00, 0x9724AC80, + 0x9723AE00, 0x9722AF80, 0x9721B100, + 0x9720B280, 0x971FB400, 0x971EB580, + 0x971DB700, 0x971CB880, 0x971BBA00, + 0x971ABB80, 0x9719BD00, 0x9718BE80, + 0x9717C000, 0x9716C180, 0x9715C300, + 0x9714C480, 0x9713C600, 0x9712C780, + 0x9711C900, 0x9710CA80, 0x970FCC00, + 0x970ECD80, 0x970DCF00, 0x970CD080, + 0x970BD200, 0x970AD380, 0x9709D500, + 0x9708D680, 0x9707D800, 0x9706D980, + 0x9705DB00, 0x9704DC80, 0x9703DE00, + 0x9702DF80, 0x9701E100, 0x9700E280, + 0x96FFE400, 0x96FEE580, 0x96FDE700, + 0x96FCE880, 0x96FBEA00, 0x96FAEB80, + 0x96F9ED00, 0x96F8EE80, 0x96F7F000, + 0x96F6F180, 0x96F5F300, 0x96F4F480, + 0x96F3F600, 0x96F2F780, 0x96F1F900, + 0x96F0FA80, 0x96EFFC00, 0x96EEFD80, + 0x96EDFF00, 0x96ED0080, 0x96EC0200, + 0x96EB0380, 0x96EA0500, 0x96E90680, + 0x96E80800, 0x96E70980, 0x96E60B00, + 0x96E50C80, 0x96E40E00, 0x96E30F80, + 0x96E21100, 0x96E11280, 0x96E01400, + 0x96DF1580, 0x96DE1700, 0x96DD1880, + 0x96DC1A00, 0x96DB1B80, 0x96DA1D00, + 0x96D91E80, 0x96D82000, 0x96D72180, + 0x96D62300, 0x96D52480, 0x96D42600, + 0x96D32780, 0x96D22900, 0x96D12A80, + 0x96D02C00, 0x96CF2D80, 0x96CE2F00, + 0x96CD3080, 0x96CC3200, 0x96CB3380, + 0x96CA3500, 0x96C93680, 0x96C83800, + 0x96C73980, 0x96C63B00, 0x96C53C80, + 0x96C43E00, 0x96C33F80, 0x96C24100, + 0x96C14280, 0x96C04400, 0x96BF4580, + 0x96BE4700, 0x96BD4880, 0x96BC4A00, + 0x96BB4B80, 0x96BA4D00, 0x96B94E80, + 0x96B85000, 0x96B75180, 0x96B65300, + 0x96B55480, 0x96B45600, 0x96B35780, + 0x96B25900, 0x96B15A80, 0x96B05C00, + 0x96AF5D80, 0x96AE5F00, 0x96AD6080, + 0x96AC6200, 0x96AB6380, 0x96AA6500, + 0x96A96680, 0x96A86800, 0x96A76980, + 0x96A66B00, 0x96A56C80, 0x96A46E00, + 0x96A36F80, 0x96A27100, 0x96A17280, + 0x96A07400, 0x969F7580, 0x969E7700, + 0x969D7880, 0x969C7A00, 0x969B7B80, + 0x969A7D00, 0x96997E80, 0x96988000, + 0x96978180, 0x96968300, 0x96958480, + 0x96948600, 0x96938780, 0x96928900, + 0x96918A80, 0x96908C00, 0x968F8D80, + 0x968E8F00, 0x968D9080, 0x968C9200, + 0x968B9380, 0x968A9500, 0x96899680, + 0x96889800, 0x96879980, 0x96869B00, + 0x96859C80, 0x96849E00, 0x96839F80, + 0x9682A100, 0x9681A280, 0x9680A400, + 0x967FA580, 0x967EA700, 0x967DA880, + 0x967CAA00, 0x967BAB80, 0x967AAD00, + 0x9679AE80, 0x9678B000, 0x9677B180, + 0x9676B300, 0x9675B480, 0x9674B600, + 0x9673B780, 0x9672B900, 0x9671BA80, + 0x9670BC00, 0x966FBD80, 0x966EBF00, + 0x966DC080, 0x966CC200, 0x966BC380, + 0x966AC500, 0x9669C680, 0x9668C800, + 0x9667C980, 0x9666CB00, 0x9665CC80, + 0x9664CE00, 0x9663CF80, 0x9662D100, + 0x9661D280, 0x9660D400, 0x965FD580, + 0x965ED700, 0x965DD880, 0x965CDA00, + 0x965BDB80, 0x965ADD00, 0x9659DE80, + 0x9658E000, 0x9657E180, 0x9656E300, + 0x9655E480, 0x9654E600, 0x9653E780, + 0x9652E900, 0x9651EA80, 0x9650EC00, + 0x964FED80, 0x964EEF00, 0x964DF080, + 0x964CF200, 0x964BF380, 0x964AF500, + 0x9649F680, 0x9648F800, 0x9647F980, + 0x9646FB00, 0x9645FC80, 0x9644FE00, + 0x9643FF80, 0x96430100, 0x96420280, + 0x96410400, 0x96400580, 0x963F0700, + 0x963E0880, 0x963D0A00, 0x963C0B80, + 0x963B0D00, 0x963A0E80, 0x96391000, + 0x96381180, 0x96371300, 0x96361480, + 0x96351600, 0x96341780, 0x96331900, + 0x96321A80, 0x96311C00, 0x96301D80, + 0x962F1F00, 0x962E2080, 0x962D2200, + 0x962C2380, 0x962B2500, 0x962A2680, + 0x96292800, 0x96282980, 0x96272B00, + 0x96262C80, 0x96252E00, 0x96242F80, + 0x96233100, 0x96223280, 0x96213400, + 0x96203580, 0x961F3700, 0x961E3880, + 0x961D3A00, 0x961C3B80, 0x961B3D00, + 0x961A3E80, 0x96194000, 0x96184180, + 0x96174300, 0x96164480, 0x96154600, + 0x96144780, 0x96134900, 0x96124A80, + 0x96114C00, 0x96104D80, 0x960F4F00, + 0x960E5080, 0x960D5200, 0x960C5380, + 0x960B5500, 0x960A5680, 0x96095800, + 0x96085980, 0x96075B00, 0x96065C80, + 0x96055E00, 0x96045F80, 0x96036100, + 0x96026280, 0x96016400, 0x96006580, + 0x95FF6700, 0x95FE6880, 0x95FD6A00, + 0x95FC6B80, 0x95FB6D00, 0x95FA6E80, + 0x95F97000, 0x95F87180, 0x95F77300, + 0x95F67480, 0x95F57600, 0x95F47780, + 0x95F37900, 0x95F27A80, 0x95F17C00, + 0x95F07D80, 0x95EF7F00, 0x95EE8080, + 0x95ED8200, 0x95EC8380, 0x95EB8500, + 0x95EA8680, 0x95E98800, 0x95E88980, + 0x95E78B00, 0x95E68C80, 0x95E58E00, + 0x95E48F80, 0x95E39100, 0x95E29280, + 0x95E19400, 0x95E09580, 0x95DF9700, + 0x95DE9880, 0x95DD9A00, 0x95DC9B80, + 0x95DB9D00, 0x95DA9E80, 0x95D9A000, + 0x95D8A180, 0x95D7A300, 0x95D6A480, + 0x95D5A600, 0x95D4A780, 0x95D3A900, + 0x95D2AA80, 0x95D1AC00, 0x95D0AD80, + 0x95CFAF00, 0x95CEB080, 0x95CDB200, + 0x95CCB380, 0x95CBB500, 0x95CAB680, + 0x95C9B800, 0x95C8B980, 0x95C7BB00, + 0x95C6BC80, 0x95C5BE00, 0x95C4BF80, + 0x95C3C100, 0x95C2C280, 0x95C1C400, + 0x95C0C580, 0x95BFC700, 0x95BEC880, + 0x95BDCA00, 0x95BCCB80, 0x95BBCD00, + 0x95BACE80, 0x95B9D000, 0x95B8D180, + 0x95B7D300, 0x95B6D480, 0x95B5D600, + 0x95B4D780, 0x95B3D900, 0x95B2DA80, + 0x95B1DC00, 0x95B0DD80, 0x95AFDF00, + 0x95AEE080, 0x95ADE200, 0x95ACE380, + 0x95ABE500, 0x95AAE680, 0x95A9E800, + 0x95A8E980, 0x95A7EB00, 0x95A6EC80, + 0x95A5EE00, 0x95A4EF80, 0x95A3F100, + 0x95A2F280, 0x95A1F400, 0x95A0F580, + 0x959FF700, 0x959EF880, 0x959DFA00, + 0x959CFB80, 0x959BFD00, 0x959AFE80, + 0x959A0000, 0x95990180, 0x95980300, + 0x95970480, 0x95960600, 0x95950780, + 0x95940900, 0x95930A80, 0x95920C00, + 0x95910D80, 0x95900F00, 0x958F1080, + 0x958E1200, 0x958D1380, 0x958C1500, + 0x958B1680, 0x958A1800, 0x95891980, + 0x95881B00, 0x95871C80, 0x95861E00, + 0x95851F80, 0x95842100, 0x95832280, + 0x95822400, 0x95812580, 0x95802700, + 0x957F2880, 0x957E2A00, 0x957D2B80, + 0x957C2D00, 0x957B2E80, 0x957A3000, + 0x95793180, 0x95783300, 0x95773480, + 0x95763600, 0x95753780, 0x95743900, + 0x95733A80, 0x95723C00, 0x95713D80, + 0x95703F00, 0x956F4080, 0x956E4200, + 0x956D4380, 0x956C4500, 0x956B4680, + 0x956A4800, 0x95694980, 0x95684B00, + 0x95674C80, 0x95664E00, 0x95654F80, + 0x95645100, 0x95635280, 0x95625400, + 0x95615580, 0x95605700, 0x955F5880, + 0x955E5A00, 0x955D5B80, 0x955C5D00, + 0x955B5E80, 0x955A6000, 0x95596180, + 0x95586300, 0x95576480, 0x95566600, + 0x95556780, 0x95546900, 0x95536A80, + 0x95526C00, 0x95516D80, 0x95506F00, + 0x954F7080, 0x954E7200, 0x954D7380, + 0x954C7500, 0x954B7680, 0x954A7800, + 0x95497980, 0x95487B00, 0x95477C80, + 0x95467E00, 0x95457F80, 0x95448100, + 0x95438280, 0x95428400, 0x95418580, + 0x95408700, 0x953F8880, 0x953E8A00, + 0x953D8B80, 0x953C8D00, 0x953B8E80, + 0x953A9000, 0x95399180, 0x95389300, + 0x95379480, 0x95369600, 0x95359780, + 0x95349900, 0x95339A80, 0x95329C00, + 0x95319D80, 0x95309F00, 0x952FA080, + 0x952EA200, 0x952DA380, 0x952CA500, + 0x952BA680, 0x952AA800, 0x9529A980, + 0x9528AB00, 0x9527AC80, 0x9526AE00, + 0x9525AF80, 0x9524B100, 0x9523B280, + 0x9522B400, 0x9521B580, 0x9520B700, + 0x951FB880, 0x951EBA00, 0x951DBB80, + 0x951CBD00, 0x951BBE80, 0x951AC000, + 0x9519C180, 0x9518C300, 0x9517C480, + 0x9516C600, 0x9515C780, 0x9514C900, + 0x9513CA80, 0x9512CC00, 0x9511CD80, + 0x9510CF00, 0x950FD080, 0x950ED200, + 0x950DD380, 0x950CD500, 0x950BD680, + 0x950AD800, 0x9509D980, 0x9508DB00, + 0x9507DC80, 0x9506DE00, 0x9505DF80, + 0x9504E100, 0x9503E280, 0x9502E400, + 0x9501E580, 0x9500E700, 0x94FFE880, + 0x94FEEA00, 0x94FDEB80, 0x94FCED00, + 0x94FBEE80, 0x94FAF000, 0x94F9F180, + 0x94F8F300, 0x94F7F480, 0x94F6F600, + 0x94F5F780, 0x94F4F900, 0x94F3FA80, + 0x94F2FC00, 0x94F1FD80, 0x94F0FF00, + 0x94F00080, 0x94EF0200, 0x94EE0380, + 0x94ED0500, 0x94EC0680, 0x94EB0800, + 0x94EA0980, 0x94E90B00, 0x94E80C80, + 0x94E70E00, 0x94E60F80, 0x94E51100, + 0x94E41280, 0x94E31400, 0x94E21580, + 0x94E11700, 0x94E01880, 0x94DF1A00, + 0x94DE1B80, 0x94DD1D00, 0x94DC1E80, + 0x94DB2000, 0x94DA2180, 0x94D92300, + 0x94D82480, 0x94D72600, 0x94D62780, + 0x94D52900, 0x94D42A80, 0x94D32C00, + 0x94D22D80, 0x94D12F00, 0x94D03080, + 0x94CF3200, 0x94CE3380, 0x94CD3500, + 0x94CC3680, 0x94CB3800, 0x94CA3980, + 0x94C93B00, 0x94C83C80, 0x94C73E00, + 0x94C63F80, 0x94C54100, 0x94C44280, + 0x94C34400, 0x94C24580, 0x94C14700, + 0x94C04880, 0x94BF4A00, 0x94BE4B80, + 0x94BD4D00, 0x94BC4E80, 0x94BB5000, + 0x94BA5180, 0x94B95300, 0x94B85480, + 0x94B75600, 0x94B65780, 0x94B55900, + 0x94B45A80, 0x94B35C00, 0x94B25D80, + 0x94B15F00, 0x94B06080, 0x94AF6200, + 0x94AE6380, 0x94AD6500, 0x94AC6680, + 0x94AB6800, 0x94AA6980, 0x94A96B00, + 0x94A86C80, 0x94A76E00, 0x94A66F80, + 0x94A57100, 0x94A47280, 0x94A37400, + 0x94A27580, 0x94A17700, 0x94A07880, + 0x949F7A00, 0x949E7B80, 0x949D7D00, + 0x949C7E80, 0x949B8000, 0x949A8180, + 0x94998300, 0x94988480, 0x94978600, + 0x94968780, 0x94958900, 0x94948A80, + 0x94938C00, 0x94928D80, 0x94918F00, + 0x94909080, 0x948F9200, 0x948E9380, + 0x948D9500, 0x948C9680, 0x948B9800, + 0x948A9980, 0x94899B00, 0x94889C80, + 0x94879E00, 0x94869F80, 0x9485A100, + 0x9484A280, 0x9483A400, 0x9482A580, + 0x9481A700, 0x9480A880, 0x947FAA00, + 0x947EAB80, 0x947DAD00, 0x947CAE80, + 0x947BB000, 0x947AB180, 0x9479B300, + 0x9478B480, 0x9477B600, 0x9476B780, + 0x9475B900, 0x9474BA80, 0x9473BC00, + 0x9472BD80, 0x9471BF00, 0x9470C080, + 0x946FC200, 0x946EC380, 0x946DC500, + 0x946CC680, 0x946BC800, 0x946AC980, + 0x9469CB00, 0x9468CC80, 0x9467CE00, + 0x9466CF80, 0x9465D100, 0x9464D280, + 0x9463D400, 0x9462D580, 0x9461D700, + 0x9460D880, 0x945FDA00, 0x945EDB80, + 0x945DDD00, 0x945CDE80, 0x945BE000, + 0x945AE180, 0x9459E300, 0x9458E480, + 0x9457E600, 0x9456E780, 0x9455E900, + 0x9454EA80, 0x9453EC00, 0x9452ED80, + 0x9451EF00, 0x9450F080, 0x944FF200, + 0x944EF380, 0x944DF500, 0x944CF680, + 0x944BF800, 0x944AF980, 0x9449FB00, + 0x9448FC80, 0x9447FE00, 0x9446FF80, + 0x94460100, 0x94450280, 0x94440400, + 0x94430580, 0x94420700, 0x94410880, + 0x94400A00, 0x943F0B80, 0x943E0D00, + 0x943D0E80, 0x943C1000, 0x943B1180, + 0x943A1300, 0x94391480, 0x94381600, + 0x94371780, 0x94361900, 0x94351A80, + 0x94341C00, 0x94331D80, 0x94321F00, + 0x94312080, 0x94302200, 0x942F2380, + 0x942E2500, 0x942D2680, 0x942C2800, + 0x942B2980, 0x942A2B00, 0x94292C80, + 0x94282E00, 0x94272F80, 0x94263100, + 0x94253280, 0x94243400, 0x94233580, + 0x94223700, 0x94213880, 0x94203A00, + 0x941F3B80, 0x941E3D00, 0x941D3E80, + 0x941C4000, 0x941B4180, 0x941A4300, + 0x94194480, 0x94184600, 0x94174780, + 0x94164900, 0x94154A80, 0x94144C00, + 0x94134D80, 0x94124F00, 0x94115080, + 0x94105200, 0x940F5380, 0x940E5500, + 0x940D5680, 0x940C5800, 0x940B5980, + 0x940A5B00, 0x94095C80, 0x94085E00, + 0x94075F80, 0x94066100, 0x94056280, + 0x94046400, 0x94036580, 0x94026700, + 0x94016880, 0x94006A00, 0x93FF6B80, + 0x93FE6D00, 0x93FD6E80, 0x93FC7000, + 0x93FB7180, 0x93FA7300, 0x93F97480, + 0x93F87600, 0x93F77780, 0x93F67900, + 0x93F57A80, 0x93F47C00, 0x93F37D80, + 0x93F27F00, 0x93F18080, 0x93F08200, + 0x93EF8380, 0x93EE8500, 0x93ED8680, + 0x93EC8800, 0x93EB8980, 0x93EA8B00, + 0x93E98C80, 0x93E88E00, 0x93E78F80, + 0x93E69100, 0x93E59280, 0x93E49400, + 0x93E39580, 0x93E29700, 0x93E19880, + 0x93E09A00, 0x93DF9B80, 0x93DE9D00, + 0x93DD9E80, 0x93DCA000, 0x93DBA180, + 0x93DAA300, 0x93D9A480, 0x93D8A600, + 0x93D7A780, 0x93D6A900, 0x93D5AA80, + 0x93D4AC00, 0x93D3AD80, 0x93D2AF00, + 0x93D1B080, 0x93D0B200, 0x93CFB380, + 0x93CEB500, 0x93CDB680, 0x93CCB800, + 0x93CBB980, 0x93CABB00, 0x93C9BC80, + 0x93C8BE00, 0x93C7BF80, 0x93C6C100, + 0x93C5C280, 0x93C4C400, 0x93C3C580, + 0x93C2C700, 0x93C1C880, 0x93C0CA00, + 0x93BFCB80, 0x93BECD00, 0x93BDCE80, + 0x93BCD000, 0x93BBD180, 0x93BAD300, + 0x93B9D480, 0x93B8D600, 0x93B7D780, + 0x93B6D900, 0x93B5DA80, 0x93B4DC00, + 0x93B3DD80, 0x93B2DF00, 0x93B1E080, + 0x93B0E200, 0x93AFE380, 0x93AEE500, + 0x93ADE680, 0x93ACE800, 0x93ABE980, + 0x93AAEB00, 0x93A9EC80, 0x93A8EE00, + 0x93A7EF80, 0x93A6F100, 0x93A5F280, + 0x93A4F400, 0x93A3F580, 0x93A2F700, + 0x93A1F880, 0x93A0FA00, 0x939FFB80, + 0x939EFD00, 0x939DFE80, 0x939D0000, + 0x939C0180, 0x939B0300, 0x939A0480, + 0x93990600, 0x93980780, 0x93970900, + 0x93960A80, 0x93950C00, 0x93940D80, + 0x93930F00, 0x93921080, 0x93911200, + 0x93901380, 0x938F1500, 0x938E1680, + 0x938D1800, 0x938C1980, 0x938B1B00, + 0x938A1C80, 0x93891E00, 0x93881F80, + 0x93872100, 0x93862280, 0x93852400, + 0x93842580, 0x93832700, 0x93822880, + 0x93812A00, 0x93802B80, 0x937F2D00, + 0x937E2E80, 0x937D3000, 0x937C3180, + 0x937B3300, 0x937A3480, 0x93793600, + 0x93783780, 0x93773900, 0x93763A80, + 0x93753C00, 0x93743D80, 0x93733F00, + 0x93724080, 0x93714200, 0x93704380, + 0x936F4500, 0x936E4680, 0x936D4800, + 0x936C4980, 0x936B4B00, 0x936A4C80, + 0x93694E00, 0x93684F80, 0x93675100, + 0x93665280, 0x93655400, 0x93645580, + 0x93635700, 0x93625880, 0x93615A00, + 0x93605B80, 0x935F5D00, 0x935E5E80, + 0x935D6000, 0x935C6180, 0x935B6300, + 0x935A6480, 0x93596600, 0x93586780, + 0x93576900, 0x93566A80, 0x93556C00, + 0x93546D80, 0x93536F00, 0x93527080, + 0x93517200, 0x93507380, 0x934F7500, + 0x934E7680, 0x934D7800, 0x934C7980, + 0x934B7B00, 0x934A7C80, 0x93497E00, + 0x93487F80, 0x93478100, 0x93468280, + 0x93458400, 0x93448580, 0x93438700, + 0x93428880, 0x93418A00, 0x93408B80, + 0x933F8D00, 0x933E8E80, 0x933D9000, + 0x933C9180, 0x933B9300, 0x933A9480, + 0x93399600, 0x93389780, 0x93379900, + 0x93369A80, 0x93359C00, 0x93349D80, + 0x93339F00, 0x9332A080, 0x9331A200, + 0x9330A380, 0x932FA500, 0x932EA680, + 0x932DA800, 0x932CA980, 0x932BAB00, + 0x932AAC80, 0x9329AE00, 0x9328AF80, + 0x9327B100, 0x9326B280, 0x9325B400, + 0x9324B580, 0x9323B700, 0x9322B880, + 0x9321BA00, 0x9320BB80, 0x931FBD00, + 0x931EBE80, 0x931DC000, 0x931CC180, + 0x931BC300, 0x931AC480, 0x9319C600, + 0x9318C780, 0x9317C900, 0x9316CA80, + 0x9315CC00, 0x9314CD80, 0x9313CF00, + 0x9312D080, 0x9311D200, 0x9310D380, + 0x930FD500, 0x930ED680, 0x930DD800, + 0x930CD980, 0x930BDB00, 0x930ADC80, + 0x9309DE00, 0x9308DF80, 0x9307E100, + 0x9306E280, 0x9305E400, 0x9304E580, + 0x9303E700, 0x9302E880, 0x9301EA00, + 0x9300EB80, 0x92FFED00, 0x92FEEE80, + 0x92FDF000, 0x92FCF180, 0x92FBF300, + 0x92FAF480, 0x92F9F600, 0x92F8F780, + 0x92F7F900, 0x92F6FA80, 0x92F5FC00, + 0x92F4FD80, 0x92F3FF00, 0x92F30080, + 0x92F20200, 0x92F10380, 0x92F00500, + 0x92EF0680, 0x92EE0800, 0x92ED0980, + 0x92EC0B00, 0x92EB0C80, 0x92EA0E00, + 0x92E90F80, 0x92E81100, 0x92E71280, + 0x92E61400, 0x92E51580, 0x92E41700, + 0x92E31880, 0x92E21A00, 0x92E11B80, + 0x92E01D00, 0x92DF1E80, 0x92DE2000, + 0x92DD2180, 0x92DC2300, 0x92DB2480, + 0x92DA2600, 0x92D92780, 0x92D82900, + 0x92D72A80, 0x92D62C00, 0x92D52D80, + 0x92D42F00, 0x92D33080, 0x92D23200, + 0x92D13380, 0x92D03500, 0x92CF3680, + 0x92CE3800, 0x92CD3980, 0x92CC3B00, + 0x92CB3C80, 0x92CA3E00, 0x92C93F80, + 0x92C84100, 0x92C74280, 0x92C64400, + 0x92C54580, 0x92C44700, 0x92C34880, + 0x92C24A00, 0x92C14B80, 0x92C04D00, + 0x92BF4E80, 0x92BE5000, 0x92BD5180, + 0x92BC5300, 0x92BB5480, 0x92BA5600, + 0x92B95780, 0x92B85900, 0x92B75A80, + 0x92B65C00, 0x92B55D80, 0x92B45F00, + 0x92B36080, 0x92B26200, 0x92B16380, + 0x92B06500, 0x92AF6680, 0x92AE6800, + 0x92AD6980, 0x92AC6B00, 0x92AB6C80, + 0x92AA6E00, 0x92A96F80, 0x92A87100, + 0x92A77280, 0x92A67400, 0x92A57580, + 0x92A47700, 0x92A37880, 0x92A27A00, + 0x92A17B80, 0x92A07D00, 0x929F7E80, + 0x929E8000, 0x929D8180, 0x929C8300, + 0x929B8480, 0x929A8600, 0x92998780, + 0x92988900, 0x92978A80, 0x92968C00, + 0x92958D80, 0x92948F00, 0x92939080, + 0x92929200, 0x92919380, 0x92909500, + 0x928F9680, 0x928E9800, 0x928D9980, + 0x928C9B00, 0x928B9C80, 0x928A9E00, + 0x92899F80, 0x9288A100, 0x9287A280, + 0x9286A400, 0x9285A580, 0x9284A700, + 0x9283A880, 0x9282AA00, 0x9281AB80, + 0x9280AD00, 0x927FAE80, 0x927EB000, + 0x927DB180, 0x927CB300, 0x927BB480, + 0x927AB600, 0x9279B780, 0x9278B900, + 0x9277BA80, 0x9276BC00, 0x9275BD80, + 0x9274BF00, 0x9273C080, 0x9272C200, + 0x9271C380, 0x9270C500, 0x926FC680, + 0x926EC800, 0x926DC980, 0x926CCB00, + 0x926BCC80, 0x926ACE00, 0x9269CF80, + 0x9268D100, 0x9267D280, 0x9266D400, + 0x9265D580, 0x9264D700, 0x9263D880, + 0x9262DA00, 0x9261DB80, 0x9260DD00, + 0x925FDE80, 0x925EE000, 0x925DE180, + 0x925CE300, 0x925BE480, 0x925AE600, + 0x9259E780, 0x9258E900, 0x9257EA80, + 0x9256EC00, 0x9255ED80, 0x9254EF00, + 0x9253F080, 0x9252F200, 0x9251F380, + 0x9250F500, 0x924FF680, 0x924EF800, + 0x924DF980, 0x924CFB00, 0x924BFC80, + 0x924AFE00, 0x9249FF80, 0x92490100, + 0x92480280, 0x92470400, 0x92460580, + 0x92450700, 0x92440880, 0x92430A00, + 0x92420B80, 0x92410D00, 0x92400E80, + 0x923F1000, 0x923E1180, 0x923D1300, + 0x923C1480, 0x923B1600, 0x923A1780, + 0x92391900, 0x92381A80, 0x92371C00, + 0x92361D80, 0x92351F00, 0x92342080, + 0x92332200, 0x92322380, 0x92312500, + 0x92302680, 0x922F2800, 0x922E2980, + 0x922D2B00, 0x922C2C80, 0x922B2E00, + 0x922A2F80, 0x92293100, 0x92283280, + 0x92273400, 0x92263580, 0x92253700, + 0x92243880, 0x92233A00, 0x92223B80, + 0x92213D00, 0x92203E80, 0x921F4000, + 0x921E4180, 0x921D4300, 0x921C4480, + 0x921B4600, 0x921A4780, 0x92194900, + 0x92184A80, 0x92174C00, 0x92164D80, + 0x92154F00, 0x92145080, 0x92135200, + 0x92125380, 0x92115500, 0x92105680, + 0x920F5800, 0x920E5980, 0x920D5B00, + 0x920C5C80, 0x920B5E00, 0x920A5F80, + 0x92096100, 0x92086280, 0x92076400, + 0x92066580, 0x92056700, 0x92046880, + 0x92036A00, 0x92026B80, 0x92016D00, + 0x92006E80, 0x91FF7000, 0x91FE7180, + 0x91FD7300, 0x91FC7480, 0x91FB7600, + 0x91FA7780, 0x91F97900, 0x91F87A80, + 0x91F77C00, 0x91F67D80, 0x91F57F00, + 0x91F48080, 0x91F38200, 0x91F28380, + 0x91F18500, 0x91F08680, 0x91EF8800, + 0x91EE8980, 0x91ED8B00, 0x91EC8C80, + 0x91EB8E00, 0x91EA8F80, 0x91E99100, + 0x91E89280, 0x91E79400, 0x91E69580, + 0x91E59700, 0x91E49880, 0x91E39A00, + 0x91E29B80, 0x91E19D00, 0x91E09E80, + 0x91DFA000, 0x91DEA180, 0x91DDA300, + 0x91DCA480, 0x91DBA600, 0x91DAA780, + 0x91D9A900, 0x91D8AA80, 0x91D7AC00, + 0x91D6AD80, 0x91D5AF00, 0x91D4B080, + 0x91D3B200, 0x91D2B380, 0x91D1B500, + 0x91D0B680, 0x91CFB800, 0x91CEB980, + 0x91CDBB00, 0x91CCBC80, 0x91CBBE00, + 0x91CABF80, 0x91C9C100, 0x91C8C280, + 0x91C7C400, 0x91C6C580, 0x91C5C700, + 0x91C4C880, 0x91C3CA00, 0x91C2CB80, + 0x91C1CD00, 0x91C0CE80, 0x91BFD000, + 0x91BED180, 0x91BDD300, 0x91BCD480, + 0x91BBD600, 0x91BAD780, 0x91B9D900, + 0x91B8DA80, 0x91B7DC00, 0x91B6DD80, + 0x91B5DF00, 0x91B4E080, 0x91B3E200, + 0x91B2E380, 0x91B1E500, 0x91B0E680, + 0x91AFE800, 0x91AEE980, 0x91ADEB00, + 0x91ACEC80, 0x91ABEE00, 0x91AAEF80, + 0x91A9F100, 0x91A8F280, 0x91A7F400, + 0x91A6F580, 0x91A5F700, 0x91A4F880, + 0x91A3FA00, 0x91A2FB80, 0x91A1FD00, + 0x91A0FE80, 0x91A00000, 0x919F0F80, + 0x919E1F00, 0x919D2E80, 0x919C3E00, + 0x919B4D80, 0x919A5D00, 0x91996C80, + 0x91987C00, 0x91978B80, 0x91969B00, + 0x9195AA80, 0x9194BA00, 0x9193C980, + 0x9192D900, 0x9191E880, 0x9190F800, + 0x91900780, 0x918F1700, 0x918E2680, + 0x918D3600, 0x918C4580, 0x918B5500, + 0x918A6480, 0x91897400, 0x91888380, + 0x91879300, 0x9186A280, 0x9185B200, + 0x9184C180, 0x9183D100, 0x9182E080, + 0x9181F000, 0x9180FF80, 0x91800F00, + 0x917F1E80, 0x917E2E00, 0x917D3D80, + 0x917C4D00, 0x917B5C80, 0x917A6C00, + 0x91797B80, 0x91788B00, 0x91779A80, + 0x9176AA00, 0x9175B980, 0x9174C900, + 0x9173D880, 0x9172E800, 0x9171F780, + 0x91710700, 0x91701680, 0x916F2600, + 0x916E3580, 0x916D4500, 0x916C5480, + 0x916B6400, 0x916A7380, 0x91698300, + 0x91689280, 0x9167A200, 0x9166B180, + 0x9165C100, 0x9164D080, 0x9163E000, + 0x9162EF80, 0x9161FF00, 0x91610E80, + 0x91601E00, 0x915F2D80, 0x915E3D00, + 0x915D4C80, 0x915C5C00, 0x915B6B80, + 0x915A7B00, 0x91598A80, 0x91589A00, + 0x9157A980, 0x9156B900, 0x9155C880, + 0x9154D800, 0x9153E780, 0x9152F700, + 0x91520680, 0x91511600, 0x91502580, + 0x914F3500, 0x914E4480, 0x914D5400, + 0x914C6380, 0x914B7300, 0x914A8280, + 0x91499200, 0x9148A180, 0x9147B100, + 0x9146C080, 0x9145D000, 0x9144DF80, + 0x9143EF00, 0x9142FE80, 0x91420E00, + 0x91411D80, 0x91402D00, 0x913F3C80, + 0x913E4C00, 0x913D5B80, 0x913C6B00, + 0x913B7A80, 0x913A8A00, 0x91399980, + 0x9138A900, 0x9137B880, 0x9136C800, + 0x9135D780, 0x9134E700, 0x9133F680, + 0x91330600, 0x91321580, 0x91312500, + 0x91303480, 0x912F4400, 0x912E5380, + 0x912D6300, 0x912C7280, 0x912B8200, + 0x912A9180, 0x9129A100, 0x9128B080, + 0x9127C000, 0x9126CF80, 0x9125DF00, + 0x9124EE80, 0x9123FE00, 0x91230D80, + 0x91221D00, 0x91212C80, 0x91203C00, + 0x911F4B80, 0x911E5B00, 0x911D6A80, + 0x911C7A00, 0x911B8980, 0x911A9900, + 0x9119A880, 0x9118B800, 0x9117C780, + 0x9116D700, 0x9115E680, 0x9114F600, + 0x91140580, 0x91131500, 0x91122480, + 0x91113400, 0x91104380, 0x910F5300, + 0x910E6280, 0x910D7200, 0x910C8180, + 0x910B9100, 0x910AA080, 0x9109B000, + 0x9108BF80, 0x9107CF00, 0x9106DE80, + 0x9105EE00, 0x9104FD80, 0x91040D00, + 0x91031C80, 0x91022C00, 0x91013B80, + 0x91004B00, 0x90FF5A80, 0x90FE6A00, + 0x90FD7980, 0x90FC8900, 0x90FB9880, + 0x90FAA800, 0x90F9B780, 0x90F8C700, + 0x90F7D680, 0x90F6E600, 0x90F5F580, + 0x90F50500, 0x90F41480, 0x90F32400, + 0x90F23380, 0x90F14300, 0x90F05280, + 0x90EF6200, 0x90EE7180, 0x90ED8100, + 0x90EC9080, 0x90EBA000, 0x90EAAF80, + 0x90E9BF00, 0x90E8CE80, 0x90E7DE00, + 0x90E6ED80, 0x90E5FD00, 0x90E50C80, + 0x90E41C00, 0x90E32B80, 0x90E23B00, + 0x90E14A80, 0x90E05A00, 0x90DF6980, + 0x90DE7900, 0x90DD8880, 0x90DC9800, + 0x90DBA780, 0x90DAB700, 0x90D9C680, + 0x90D8D600, 0x90D7E580, 0x90D6F500, + 0x90D60480, 0x90D51400, 0x90D42380, + 0x90D33300, 0x90D24280, 0x90D15200, + 0x90D06180, 0x90CF7100, 0x90CE8080, + 0x90CD9000, 0x90CC9F80, 0x90CBAF00, + 0x90CABE80, 0x90C9CE00, 0x90C8DD80, + 0x90C7ED00, 0x90C6FC80, 0x90C60C00, + 0x90C51B80, 0x90C42B00, 0x90C33A80, + 0x90C24A00, 0x90C15980, 0x90C06900, + 0x90BF7880, 0x90BE8800, 0x90BD9780, + 0x90BCA700, 0x90BBB680, 0x90BAC600, + 0x90B9D580, 0x90B8E500, 0x90B7F480, + 0x90B70400, 0x90B61380, 0x90B52300, + 0x90B43280, 0x90B34200, 0x90B25180, + 0x90B16100, 0x90B07080, 0x90AF8000, + 0x90AE8F80, 0x90AD9F00, 0x90ACAE80, + 0x90ABBE00, 0x90AACD80, 0x90A9DD00, + 0x90A8EC80, 0x90A7FC00, 0x90A70B80, + 0x90A61B00, 0x90A52A80, 0x90A43A00, + 0x90A34980, 0x90A25900, 0x90A16880, + 0x90A07800, 0x909F8780, 0x909E9700, + 0x909DA680, 0x909CB600, 0x909BC580, + 0x909AD500, 0x9099E480, 0x9098F400, + 0x90980380, 0x90971300, 0x90962280, + 0x90953200, 0x90944180, 0x90935100, + 0x90926080, 0x90917000, 0x90907F80, + 0x908F8F00, 0x908E9E80, 0x908DAE00, + 0x908CBD80, 0x908BCD00, 0x908ADC80, + 0x9089EC00, 0x9088FB80, 0x90880B00, + 0x90871A80, 0x90862A00, 0x90853980, + 0x90844900, 0x90835880, 0x90826800, + 0x90817780, 0x90808700, 0x907F9680, + 0x907EA600, 0x907DB580, 0x907CC500, + 0x907BD480, 0x907AE400, 0x9079F380, + 0x90790300, 0x90781280, 0x90772200, + 0x90763180, 0x90754100, 0x90745080, + 0x90736000, 0x90726F80, 0x90717F00, + 0x90708E80, 0x906F9E00, 0x906EAD80, + 0x906DBD00, 0x906CCC80, 0x906BDC00, + 0x906AEB80, 0x9069FB00, 0x90690A80, + 0x90681A00, 0x90672980, 0x90663900, + 0x90654880, 0x90645800, 0x90636780, + 0x90627700, 0x90618680, 0x90609600, + 0x905FA580, 0x905EB500, 0x905DC480, + 0x905CD400, 0x905BE380, 0x905AF300, + 0x905A0280, 0x90591200, 0x90582180, + 0x90573100, 0x90564080, 0x90555000, + 0x90545F80, 0x90536F00, 0x90527E80, + 0x90518E00, 0x90509D80, 0x904FAD00, + 0x904EBC80, 0x904DCC00, 0x904CDB80, + 0x904BEB00, 0x904AFA80, 0x904A0A00, + 0x90491980, 0x90482900, 0x90473880, + 0x90464800, 0x90455780, 0x90446700, + 0x90437680, 0x90428600, 0x90419580, + 0x9040A500, 0x903FB480, 0x903EC400, + 0x903DD380, 0x903CE300, 0x903BF280, + 0x903B0200, 0x903A1180, 0x90392100, + 0x90383080, 0x90374000, 0x90364F80, + 0x90355F00, 0x90346E80, 0x90337E00, + 0x90328D80, 0x90319D00, 0x9030AC80, + 0x902FBC00, 0x902ECB80, 0x902DDB00, + 0x902CEA80, 0x902BFA00, 0x902B0980, + 0x902A1900, 0x90292880, 0x90283800, + 0x90274780, 0x90265700, 0x90256680, + 0x90247600, 0x90238580, 0x90229500, + 0x9021A480, 0x9020B400, 0x901FC380, + 0x901ED300, 0x901DE280, 0x901CF200, + 0x901C0180, 0x901B1100, 0x901A2080, + 0x90193000, 0x90183F80, 0x90174F00, + 0x90165E80, 0x90156E00, 0x90147D80, + 0x90138D00, 0x90129C80, 0x9011AC00, + 0x9010BB80, 0x900FCB00, 0x900EDA80, + 0x900DEA00, 0x900CF980, 0x900C0900, + 0x900B1880, 0x900A2800, 0x90093780, + 0x90084700, 0x90075680, 0x90066600, + 0x90057580, 0x90048500, 0x90039480, + 0x9002A400, 0x9001B380, 0x9000C300, + 0x8FFFD280, 0x8FFEE200, 0x8FFDF180, + 0x8FFD0100, 0x8FFC1080, 0x8FFB2000, + 0x8FFA2F80, 0x8FF93F00, 0x8FF84E80, + 0x8FF75E00, 0x8FF66D80, 0x8FF57D00, + 0x8FF48C80, 0x8FF39C00, 0x8FF2AB80, + 0x8FF1BB00, 0x8FF0CA80, 0x8FEFDA00, + 0x8FEEE980, 0x8FEDF900, 0x8FED0880, + 0x8FEC1800, 0x8FEB2780, 0x8FEA3700, + 0x8FE94680, 0x8FE85600, 0x8FE76580, + 0x8FE67500, 0x8FE58480, 0x8FE49400, + 0x8FE3A380, 0x8FE2B300, 0x8FE1C280, + 0x8FE0D200, 0x8FDFE180, 0x8FDEF100, + 0x8FDE0080, 0x8FDD1000, 0x8FDC1F80, + 0x8FDB2F00, 0x8FDA3E80, 0x8FD94E00, + 0x8FD85D80, 0x8FD76D00, 0x8FD67C80, + 0x8FD58C00, 0x8FD49B80, 0x8FD3AB00, + 0x8FD2BA80, 0x8FD1CA00, 0x8FD0D980, + 0x8FCFE900, 0x8FCEF880, 0x8FCE0800, + 0x8FCD1780, 0x8FCC2700, 0x8FCB3680, + 0x8FCA4600, 0x8FC95580, 0x8FC86500, + 0x8FC77480, 0x8FC68400, 0x8FC59380, + 0x8FC4A300, 0x8FC3B280, 0x8FC2C200, + 0x8FC1D180, 0x8FC0E100, 0x8FBFF080, + 0x8FBF0000, 0x8FBE0F80, 0x8FBD1F00, + 0x8FBC2E80, 0x8FBB3E00, 0x8FBA4D80, + 0x8FB95D00, 0x8FB86C80, 0x8FB77C00, + 0x8FB68B80, 0x8FB59B00, 0x8FB4AA80, + 0x8FB3BA00, 0x8FB2C980, 0x8FB1D900, + 0x8FB0E880, 0x8FAFF800, 0x8FAF0780, + 0x8FAE1700, 0x8FAD2680, 0x8FAC3600, + 0x8FAB4580, 0x8FAA5500, 0x8FA96480, + 0x8FA87400, 0x8FA78380, 0x8FA69300, + 0x8FA5A280, 0x8FA4B200, 0x8FA3C180, + 0x8FA2D100, 0x8FA1E080, 0x8FA0F000, + 0x8F9FFF80, 0x8F9F0F00, 0x8F9E1E80, + 0x8F9D2E00, 0x8F9C3D80, 0x8F9B4D00, + 0x8F9A5C80, 0x8F996C00, 0x8F987B80, + 0x8F978B00, 0x8F969A80, 0x8F95AA00, + 0x8F94B980, 0x8F93C900, 0x8F92D880, + 0x8F91E800, 0x8F90F780, 0x8F900700, + 0x8F8F1680, 0x8F8E2600, 0x8F8D3580, + 0x8F8C4500, 0x8F8B5480, 0x8F8A6400, + 0x8F897380, 0x8F888300, 0x8F879280, + 0x8F86A200, 0x8F85B180, 0x8F84C100, + 0x8F83D080, 0x8F82E000, 0x8F81EF80, + 0x8F80FF00, 0x8F800E80, 0x8F7F1E00, + 0x8F7E2D80, 0x8F7D3D00, 0x8F7C4C80, + 0x8F7B5C00, 0x8F7A6B80, 0x8F797B00, + 0x8F788A80, 0x8F779A00, 0x8F76A980, + 0x8F75B900, 0x8F74C880, 0x8F73D800, + 0x8F72E780, 0x8F71F700, 0x8F710680, + 0x8F701600, 0x8F6F2580, 0x8F6E3500, + 0x8F6D4480, 0x8F6C5400, 0x8F6B6380, + 0x8F6A7300, 0x8F698280, 0x8F689200, + 0x8F67A180, 0x8F66B100, 0x8F65C080, + 0x8F64D000, 0x8F63DF80, 0x8F62EF00, + 0x8F61FE80, 0x8F610E00, 0x8F601D80, + 0x8F5F2D00, 0x8F5E3C80, 0x8F5D4C00, + 0x8F5C5B80, 0x8F5B6B00, 0x8F5A7A80, + 0x8F598A00, 0x8F589980, 0x8F57A900, + 0x8F56B880, 0x8F55C800, 0x8F54D780, + 0x8F53E700, 0x8F52F680, 0x8F520600, + 0x8F511580, 0x8F502500, 0x8F4F3480, + 0x8F4E4400, 0x8F4D5380, 0x8F4C6300, + 0x8F4B7280, 0x8F4A8200, 0x8F499180, + 0x8F48A100, 0x8F47B080, 0x8F46C000, + 0x8F45CF80, 0x8F44DF00, 0x8F43EE80, + 0x8F42FE00, 0x8F420D80, 0x8F411D00, + 0x8F402C80, 0x8F3F3C00, 0x8F3E4B80, + 0x8F3D5B00, 0x8F3C6A80, 0x8F3B7A00, + 0x8F3A8980, 0x8F399900, 0x8F38A880, + 0x8F37B800, 0x8F36C780, 0x8F35D700, + 0x8F34E680, 0x8F33F600, 0x8F330580, + 0x8F321500, 0x8F312480, 0x8F303400, + 0x8F2F4380, 0x8F2E5300, 0x8F2D6280, + 0x8F2C7200, 0x8F2B8180, 0x8F2A9100, + 0x8F29A080, 0x8F28B000, 0x8F27BF80, + 0x8F26CF00, 0x8F25DE80, 0x8F24EE00, + 0x8F23FD80, 0x8F230D00, 0x8F221C80, + 0x8F212C00, 0x8F203B80, 0x8F1F4B00, + 0x8F1E5A80, 0x8F1D6A00, 0x8F1C7980, + 0x8F1B8900, 0x8F1A9880, 0x8F19A800, + 0x8F18B780, 0x8F17C700, 0x8F16D680, + 0x8F15E600, 0x8F14F580, 0x8F140500, + 0x8F131480, 0x8F122400, 0x8F113380, + 0x8F104300, 0x8F0F5280, 0x8F0E6200, + 0x8F0D7180, 0x8F0C8100, 0x8F0B9080, + 0x8F0AA000, 0x8F09AF80, 0x8F08BF00, + 0x8F07CE80, 0x8F06DE00, 0x8F05ED80, + 0x8F04FD00, 0x8F040C80, 0x8F031C00, + 0x8F022B80, 0x8F013B00, 0x8F004A80, + 0x8EFF5A00, 0x8EFE6980, 0x8EFD7900, + 0x8EFC8880, 0x8EFB9800, 0x8EFAA780, + 0x8EF9B700, 0x8EF8C680, 0x8EF7D600, + 0x8EF6E580, 0x8EF5F500, 0x8EF50480, + 0x8EF41400, 0x8EF32380, 0x8EF23300, + 0x8EF14280, 0x8EF05200, 0x8EEF6180, + 0x8EEE7100, 0x8EED8080, 0x8EEC9000, + 0x8EEB9F80, 0x8EEAAF00, 0x8EE9BE80, + 0x8EE8CE00, 0x8EE7DD80, 0x8EE6ED00, + 0x8EE5FC80, 0x8EE50C00, 0x8EE41B80, + 0x8EE32B00, 0x8EE23A80, 0x8EE14A00, + 0x8EE05980, 0x8EDF6900, 0x8EDE7880, + 0x8EDD8800, 0x8EDC9780, 0x8EDBA700, + 0x8EDAB680, 0x8ED9C600, 0x8ED8D580, + 0x8ED7E500, 0x8ED6F480, 0x8ED60400, + 0x8ED51380, 0x8ED42300, 0x8ED33280, + 0x8ED24200, 0x8ED15180, 0x8ED06100, + 0x8ECF7080, 0x8ECE8000, 0x8ECD8F80, + 0x8ECC9F00, 0x8ECBAE80, 0x8ECABE00, + 0x8EC9CD80, 0x8EC8DD00, 0x8EC7EC80, + 0x8EC6FC00, 0x8EC60B80, 0x8EC51B00, + 0x8EC42A80, 0x8EC33A00, 0x8EC24980, + 0x8EC15900, 0x8EC06880, 0x8EBF7800, + 0x8EBE8780, 0x8EBD9700, 0x8EBCA680, + 0x8EBBB600, 0x8EBAC580, 0x8EB9D500, + 0x8EB8E480, 0x8EB7F400, 0x8EB70380, + 0x8EB61300, 0x8EB52280, 0x8EB43200, + 0x8EB34180, 0x8EB25100, 0x8EB16080, + 0x8EB07000, 0x8EAF7F80, 0x8EAE8F00, + 0x8EAD9E80, 0x8EACAE00, 0x8EABBD80, + 0x8EAACD00, 0x8EA9DC80, 0x8EA8EC00, + 0x8EA7FB80, 0x8EA70B00, 0x8EA61A80, + 0x8EA52A00, 0x8EA43980, 0x8EA34900, + 0x8EA25880, 0x8EA16800, 0x8EA07780, + 0x8E9F8700, 0x8E9E9680, 0x8E9DA600, + 0x8E9CB580, 0x8E9BC500, 0x8E9AD480, + 0x8E99E400, 0x8E98F380, 0x8E980300, + 0x8E971280, 0x8E962200, 0x8E953180, + 0x8E944100, 0x8E935080, 0x8E926000, + 0x8E916F80, 0x8E907F00, 0x8E8F8E80, + 0x8E8E9E00, 0x8E8DAD80, 0x8E8CBD00, + 0x8E8BCC80, 0x8E8ADC00, 0x8E89EB80, + 0x8E88FB00, 0x8E880A80, 0x8E871A00, + 0x8E862980, 0x8E853900, 0x8E844880, + 0x8E835800, 0x8E826780, 0x8E817700, + 0x8E808680, 0x8E7F9600, 0x8E7EA580, + 0x8E7DB500, 0x8E7CC480, 0x8E7BD400, + 0x8E7AE380, 0x8E79F300, 0x8E790280, + 0x8E781200, 0x8E772180, 0x8E763100, + 0x8E754080, 0x8E745000, 0x8E735F80, + 0x8E726F00, 0x8E717E80, 0x8E708E00, + 0x8E6F9D80, 0x8E6EAD00, 0x8E6DBC80, + 0x8E6CCC00, 0x8E6BDB80, 0x8E6AEB00, + 0x8E69FA80, 0x8E690A00, 0x8E681980, + 0x8E672900, 0x8E663880, 0x8E654800, + 0x8E645780, 0x8E636700, 0x8E627680, + 0x8E618600, 0x8E609580, 0x8E5FA500, + 0x8E5EB480, 0x8E5DC400, 0x8E5CD380, + 0x8E5BE300, 0x8E5AF280, 0x8E5A0200, + 0x8E591180, 0x8E582100, 0x8E573080, + 0x8E564000, 0x8E554F80, 0x8E545F00, + 0x8E536E80, 0x8E527E00, 0x8E518D80, + 0x8E509D00, 0x8E4FAC80, 0x8E4EBC00, + 0x8E4DCB80, 0x8E4CDB00, 0x8E4BEA80, + 0x8E4AFA00, 0x8E4A0980, 0x8E491900, + 0x8E482880, 0x8E473800, 0x8E464780, + 0x8E455700, 0x8E446680, 0x8E437600, + 0x8E428580, 0x8E419500, 0x8E40A480, + 0x8E3FB400, 0x8E3EC380, 0x8E3DD300, + 0x8E3CE280, 0x8E3BF200, 0x8E3B0180, + 0x8E3A1100, 0x8E392080, 0x8E383000, + 0x8E373F80, 0x8E364F00, 0x8E355E80, + 0x8E346E00, 0x8E337D80, 0x8E328D00, + 0x8E319C80, 0x8E30AC00, 0x8E2FBB80, + 0x8E2ECB00, 0x8E2DDA80, 0x8E2CEA00, + 0x8E2BF980, 0x8E2B0900, 0x8E2A1880, + 0x8E292800, 0x8E283780, 0x8E274700, + 0x8E265680, 0x8E256600, 0x8E247580, + 0x8E238500, 0x8E229480, 0x8E21A400, + 0x8E20B380, 0x8E1FC300, 0x8E1ED280, + 0x8E1DE200, 0x8E1CF180, 0x8E1C0100, + 0x8E1B1080, 0x8E1A2000, 0x8E192F80, + 0x8E183F00, 0x8E174E80, 0x8E165E00, + 0x8E156D80, 0x8E147D00, 0x8E138C80, + 0x8E129C00, 0x8E11AB80, 0x8E10BB00, + 0x8E0FCA80, 0x8E0EDA00, 0x8E0DE980, + 0x8E0CF900, 0x8E0C0880, 0x8E0B1800, + 0x8E0A2780, 0x8E093700, 0x8E084680, + 0x8E075600, 0x8E066580, 0x8E057500, + 0x8E048480, 0x8E039400, 0x8E02A380, + 0x8E01B300, 0x8E00C280, 0x8DFFD200, + 0x8DFEE180, 0x8DFDF100, 0x8DFD0080, + 0x8DFC1000, 0x8DFB1F80, 0x8DFA2F00, + 0x8DF93E80, 0x8DF84E00, 0x8DF75D80, + 0x8DF66D00, 0x8DF57C80, 0x8DF48C00, + 0x8DF39B80, 0x8DF2AB00, 0x8DF1BA80, + 0x8DF0CA00, 0x8DEFD980, 0x8DEEE900, + 0x8DEDF880, 0x8DED0800, 0x8DEC1780, + 0x8DEB2700, 0x8DEA3680, 0x8DE94600, + 0x8DE85580, 0x8DE76500, 0x8DE67480, + 0x8DE58400, 0x8DE49380, 0x8DE3A300, + 0x8DE2B280, 0x8DE1C200, 0x8DE0D180, + 0x8DDFE100, 0x8DDEF080, 0x8DDE0000, + 0x8DDD0F80, 0x8DDC1F00, 0x8DDB2E80, + 0x8DDA3E00, 0x8DD94D80, 0x8DD85D00, + 0x8DD76C80, 0x8DD67C00, 0x8DD58B80, + 0x8DD49B00, 0x8DD3AA80, 0x8DD2BA00, + 0x8DD1C980, 0x8DD0D900, 0x8DCFE880, + 0x8DCEF800, 0x8DCE0780, 0x8DCD1700, + 0x8DCC2680, 0x8DCB3600, 0x8DCA4580, + 0x8DC95500, 0x8DC86480, 0x8DC77400, + 0x8DC68380, 0x8DC59300, 0x8DC4A280, + 0x8DC3B200, 0x8DC2C180, 0x8DC1D100, + 0x8DC0E080, 0x8DBFF000, 0x8DBEFF80, + 0x8DBE0F00, 0x8DBD1E80, 0x8DBC2E00, + 0x8DBB3D80, 0x8DBA4D00, 0x8DB95C80, + 0x8DB86C00, 0x8DB77B80, 0x8DB68B00, + 0x8DB59A80, 0x8DB4AA00, 0x8DB3B980, + 0x8DB2C900, 0x8DB1D880, 0x8DB0E800, + 0x8DAFF780, 0x8DAF0700, 0x8DAE1680, + 0x8DAD2600, 0x8DAC3580, 0x8DAB4500, + 0x8DAA5480, 0x8DA96400, 0x8DA87380, + 0x8DA78300, 0x8DA69280, 0x8DA5A200, + 0x8DA4B180, 0x8DA3C100, 0x8DA2D080, + 0x8DA1E000, 0x8DA0EF80, 0x8D9FFF00, + 0x8D9F0E80, 0x8D9E1E00, 0x8D9D2D80, + 0x8D9C3D00, 0x8D9B4C80, 0x8D9A5C00, + 0x8D996B80, 0x8D987B00, 0x8D978A80, + 0x8D969A00, 0x8D95A980, 0x8D94B900, + 0x8D93C880, 0x8D92D800, 0x8D91E780, + 0x8D90F700, 0x8D900680, 0x8D8F1600, + 0x8D8E2580, 0x8D8D3500, 0x8D8C4480, + 0x8D8B5400, 0x8D8A6380, 0x8D897300, + 0x8D888280, 0x8D879200, 0x8D86A180, + 0x8D85B100, 0x8D84C080, 0x8D83D000, + 0x8D82DF80, 0x8D81EF00, 0x8D80FE80, + 0x8D800E00, 0x8D7F1D80, 0x8D7E2D00, + 0x8D7D3C80, 0x8D7C4C00, 0x8D7B5B80, + 0x8D7A6B00, 0x8D797A80, 0x8D788A00, + 0x8D779980, 0x8D76A900, 0x8D75B880, + 0x8D74C800, 0x8D73D780, 0x8D72E700, + 0x8D71F680, 0x8D710600, 0x8D701580, + 0x8D6F2500, 0x8D6E3480, 0x8D6D4400, + 0x8D6C5380, 0x8D6B6300, 0x8D6A7280, + 0x8D698200, 0x8D689180, 0x8D67A100, + 0x8D66B080, 0x8D65C000, 0x8D64CF80, + 0x8D63DF00, 0x8D62EE80, 0x8D61FE00, + 0x8D610D80, 0x8D601D00, 0x8D5F2C80, + 0x8D5E3C00, 0x8D5D4B80, 0x8D5C5B00, + 0x8D5B6A80, 0x8D5A7A00, 0x8D598980, + 0x8D589900, 0x8D57A880, 0x8D56B800, + 0x8D55C780, 0x8D54D700, 0x8D53E680, + 0x8D52F600, 0x8D520580, 0x8D511500, + 0x8D502480, 0x8D4F3400, 0x8D4E4380, + 0x8D4D5300, 0x8D4C6280, 0x8D4B7200, + 0x8D4A8180, 0x8D499100, 0x8D48A080, + 0x8D47B000, 0x8D46BF80, 0x8D45CF00, + 0x8D44DE80, 0x8D43EE00, 0x8D42FD80, + 0x8D420D00, 0x8D411C80, 0x8D402C00, + 0x8D3F3B80, 0x8D3E4B00, 0x8D3D5A80, + 0x8D3C6A00, 0x8D3B7980, 0x8D3A8900, + 0x8D399880, 0x8D38A800, 0x8D37B780, + 0x8D36C700, 0x8D35D680, 0x8D34E600, + 0x8D33F580, 0x8D330500, 0x8D321480, + 0x8D312400, 0x8D303380, 0x8D2F4300, + 0x8D2E5280, 0x8D2D6200, 0x8D2C7180, + 0x8D2B8100, 0x8D2A9080, 0x8D29A000, + 0x8D28AF80, 0x8D27BF00, 0x8D26CE80, + 0x8D25DE00, 0x8D24ED80, 0x8D23FD00, + 0x8D230C80, 0x8D221C00, 0x8D212B80, + 0x8D203B00, 0x8D1F4A80, 0x8D1E5A00, + 0x8D1D6980, 0x8D1C7900, 0x8D1B8880, + 0x8D1A9800, 0x8D19A780, 0x8D18B700, + 0x8D17C680, 0x8D16D600, 0x8D15E580, + 0x8D14F500, 0x8D140480, 0x8D131400, + 0x8D122380, 0x8D113300, 0x8D104280, + 0x8D0F5200, 0x8D0E6180, 0x8D0D7100, + 0x8D0C8080, 0x8D0B9000, 0x8D0A9F80, + 0x8D09AF00, 0x8D08BE80, 0x8D07CE00, + 0x8D06DD80, 0x8D05ED00, 0x8D04FC80, + 0x8D040C00, 0x8D031B80, 0x8D022B00, + 0x8D013A80, 0x8D004A00, 0x8CFF5980, + 0x8CFE6900, 0x8CFD7880, 0x8CFC8800, + 0x8CFB9780, 0x8CFAA700, 0x8CF9B680, + 0x8CF8C600, 0x8CF7D580, 0x8CF6E500, + 0x8CF5F480, 0x8CF50400, 0x8CF41380, + 0x8CF32300, 0x8CF23280, 0x8CF14200, + 0x8CF05180, 0x8CEF6100, 0x8CEE7080, + 0x8CED8000, 0x8CEC8F80, 0x8CEB9F00, + 0x8CEAAE80, 0x8CE9BE00, 0x8CE8CD80, + 0x8CE7DD00, 0x8CE6EC80, 0x8CE5FC00, + 0x8CE50B80, 0x8CE41B00, 0x8CE32A80, + 0x8CE23A00, 0x8CE14980, 0x8CE05900, + 0x8CDF6880, 0x8CDE7800, 0x8CDD8780, + 0x8CDC9700, 0x8CDBA680, 0x8CDAB600, + 0x8CD9C580, 0x8CD8D500, 0x8CD7E480, + 0x8CD6F400, 0x8CD60380, 0x8CD51300, + 0x8CD42280, 0x8CD33200, 0x8CD24180, + 0x8CD15100, 0x8CD06080, 0x8CCF7000, + 0x8CCE7F80, 0x8CCD8F00, 0x8CCC9E80, + 0x8CCBAE00, 0x8CCABD80, 0x8CC9CD00, + 0x8CC8DC80, 0x8CC7EC00, 0x8CC6FB80, + 0x8CC60B00, 0x8CC51A80, 0x8CC42A00, + 0x8CC33980, 0x8CC24900, 0x8CC15880, + 0x8CC06800, 0x8CBF7780, 0x8CBE8700, + 0x8CBD9680, 0x8CBCA600, 0x8CBBB580, + 0x8CBAC500, 0x8CB9D480, 0x8CB8E400, + 0x8CB7F380, 0x8CB70300, 0x8CB61280, + 0x8CB52200, 0x8CB43180, 0x8CB34100, + 0x8CB25080, 0x8CB16000, 0x8CB06F80, + 0x8CAF7F00, 0x8CAE8E80, 0x8CAD9E00, + 0x8CACAD80, 0x8CABBD00, 0x8CAACC80, + 0x8CA9DC00, 0x8CA8EB80, 0x8CA7FB00, + 0x8CA70A80, 0x8CA61A00, 0x8CA52980, + 0x8CA43900, 0x8CA34880, 0x8CA25800, + 0x8CA16780, 0x8CA07700, 0x8C9F8680, + 0x8C9E9600, 0x8C9DA580, 0x8C9CB500, + 0x8C9BC480, 0x8C9AD400, 0x8C99E380, + 0x8C98F300, 0x8C980280, 0x8C971200, + 0x8C962180, 0x8C953100, 0x8C944080, + 0x8C935000, 0x8C925F80, 0x8C916F00, + 0x8C907E80, 0x8C8F8E00, 0x8C8E9D80, + 0x8C8DAD00, 0x8C8CBC80, 0x8C8BCC00, + 0x8C8ADB80, 0x8C89EB00, 0x8C88FA80, + 0x8C880A00, 0x8C871980, 0x8C862900, + 0x8C853880, 0x8C844800, 0x8C835780, + 0x8C826700, 0x8C817680, 0x8C808600, + 0x8C7F9580, 0x8C7EA500, 0x8C7DB480, + 0x8C7CC400, 0x8C7BD380, 0x8C7AE300, + 0x8C79F280, 0x8C790200, 0x8C781180, + 0x8C772100, 0x8C763080, 0x8C754000, + 0x8C744F80, 0x8C735F00, 0x8C726E80, + 0x8C717E00, 0x8C708D80, 0x8C6F9D00, + 0x8C6EAC80, 0x8C6DBC00, 0x8C6CCB80, + 0x8C6BDB00, 0x8C6AEA80, 0x8C69FA00, + 0x8C690980, 0x8C681900, 0x8C672880, + 0x8C663800, 0x8C654780, 0x8C645700, + 0x8C636680, 0x8C627600, 0x8C618580, + 0x8C609500, 0x8C5FA480, 0x8C5EB400, + 0x8C5DC380, 0x8C5CD300, 0x8C5BE280, + 0x8C5AF200, 0x8C5A0180, 0x8C591100, + 0x8C582080, 0x8C573000, 0x8C563F80, + 0x8C554F00, 0x8C545E80, 0x8C536E00, + 0x8C527D80, 0x8C518D00, 0x8C509C80, + 0x8C4FAC00, 0x8C4EBB80, 0x8C4DCB00, + 0x8C4CDA80, 0x8C4BEA00, 0x8C4AF980, + 0x8C4A0900, 0x8C491880, 0x8C482800, + 0x8C473780, 0x8C464700, 0x8C455680, + 0x8C446600, 0x8C437580, 0x8C428500, + 0x8C419480, 0x8C40A400, 0x8C3FB380, + 0x8C3EC300, 0x8C3DD280, 0x8C3CE200, + 0x8C3BF180, 0x8C3B0100, 0x8C3A1080, + 0x8C392000, 0x8C382F80, 0x8C373F00, + 0x8C364E80, 0x8C355E00, 0x8C346D80, + 0x8C337D00, 0x8C328C80, 0x8C319C00, + 0x8C30AB80, 0x8C2FBB00, 0x8C2ECA80, + 0x8C2DDA00, 0x8C2CE980, 0x8C2BF900, + 0x8C2B0880, 0x8C2A1800, 0x8C292780, + 0x8C283700, 0x8C274680, 0x8C265600, + 0x8C256580, 0x8C247500, 0x8C238480, + 0x8C229400, 0x8C21A380, 0x8C20B300, + 0x8C1FC280, 0x8C1ED200, 0x8C1DE180, + 0x8C1CF100, 0x8C1C0080, 0x8C1B1000, + 0x8C1A1F80, 0x8C192F00, 0x8C183E80, + 0x8C174E00, 0x8C165D80, 0x8C156D00, + 0x8C147C80, 0x8C138C00, 0x8C129B80, + 0x8C11AB00, 0x8C10BA80, 0x8C0FCA00, + 0x8C0ED980, 0x8C0DE900, 0x8C0CF880, + 0x8C0C0800, 0x8C0B1780, 0x8C0A2700, + 0x8C093680, 0x8C084600, 0x8C075580, + 0x8C066500, 0x8C057480, 0x8C048400, + 0x8C039380, 0x8C02A300, 0x8C01B280, + 0x8C00C200, 0x8BFFD180, 0x8BFEE100, + 0x8BFDF080, 0x8BFD0000, 0x8BFC0F80, + 0x8BFB1F00, 0x8BFA2E80, 0x8BF93E00, + 0x8BF84D80, 0x8BF75D00, 0x8BF66C80, + 0x8BF57C00, 0x8BF48B80, 0x8BF39B00, + 0x8BF2AA80, 0x8BF1BA00, 0x8BF0C980, + 0x8BEFD900, 0x8BEEE880, 0x8BEDF800, + 0x8BED0780, 0x8BEC1700, 0x8BEB2680, + 0x8BEA3600, 0x8BE94580, 0x8BE85500, + 0x8BE76480, 0x8BE67400, 0x8BE58380, + 0x8BE49300, 0x8BE3A280, 0x8BE2B200, + 0x8BE1C180, 0x8BE0D100, 0x8BDFE080, + 0x8BDEF000, 0x8BDDFF80, 0x8BDD0F00, + 0x8BDC1E80, 0x8BDB2E00, 0x8BDA3D80, + 0x8BD94D00, 0x8BD85C80, 0x8BD76C00, + 0x8BD67B80, 0x8BD58B00, 0x8BD49A80, + 0x8BD3AA00, 0x8BD2B980, 0x8BD1C900, + 0x8BD0D880, 0x8BCFE800, 0x8BCEF780, + 0x8BCE0700, 0x8BCD1680, 0x8BCC2600, + 0x8BCB3580, 0x8BCA4500, 0x8BC95480, + 0x8BC86400, 0x8BC77380, 0x8BC68300, + 0x8BC59280, 0x8BC4A200, 0x8BC3B180, + 0x8BC2C100, 0x8BC1D080, 0x8BC0E000, + 0x8BBFEF80, 0x8BBEFF00, 0x8BBE0E80, + 0x8BBD1E00, 0x8BBC2D80, 0x8BBB3D00, + 0x8BBA4C80, 0x8BB95C00, 0x8BB86B80, + 0x8BB77B00, 0x8BB68A80, 0x8BB59A00, + 0x8BB4A980, 0x8BB3B900, 0x8BB2C880, + 0x8BB1D800, 0x8BB0E780, 0x8BAFF700, + 0x8BAF0680, 0x8BAE1600, 0x8BAD2580, + 0x8BAC3500, 0x8BAB4480, 0x8BAA5400, + 0x8BA96380, 0x8BA87300, 0x8BA78280, + 0x8BA69200, 0x8BA5A180, 0x8BA4B100, + 0x8BA3C080, 0x8BA2D000, 0x8BA1DF80, + 0x8BA0EF00, 0x8B9FFE80, 0x8B9F0E00, + 0x8B9E1D80, 0x8B9D2D00, 0x8B9C3C80, + 0x8B9B4C00, 0x8B9A5B80, 0x8B996B00, + 0x8B987A80, 0x8B978A00, 0x8B969980, + 0x8B95A900, 0x8B94B880, 0x8B93C800, + 0x8B92D780, 0x8B91E700, 0x8B90F680, + 0x8B900600, 0x8B8F1580, 0x8B8E2500, + 0x8B8D3480, 0x8B8C4400, 0x8B8B5380, + 0x8B8A6300, 0x8B897280, 0x8B888200, + 0x8B879180, 0x8B86A100, 0x8B85B080, + 0x8B84C000, 0x8B83CF80, 0x8B82DF00, + 0x8B81EE80, 0x8B80FE00, 0x8B800D80, + 0x8B7F1D00, 0x8B7E2C80, 0x8B7D3C00, + 0x8B7C4B80, 0x8B7B5B00, 0x8B7A6A80, + 0x8B797A00, 0x8B788980, 0x8B779900, + 0x8B76A880, 0x8B75B800, 0x8B74C780, + 0x8B73D700, 0x8B72E680, 0x8B71F600, + 0x8B710580, 0x8B701500, 0x8B6F2480, + 0x8B6E3400, 0x8B6D4380, 0x8B6C5300, + 0x8B6B6280, 0x8B6A7200, 0x8B698180, + 0x8B689100, 0x8B67A080, 0x8B66B000, + 0x8B65BF80, 0x8B64CF00, 0x8B63DE80, + 0x8B62EE00, 0x8B61FD80, 0x8B610D00, + 0x8B601C80, 0x8B5F2C00, 0x8B5E3B80, + 0x8B5D4B00, 0x8B5C5A80, 0x8B5B6A00, + 0x8B5A7980, 0x8B598900, 0x8B589880, + 0x8B57A800, 0x8B56B780, 0x8B55C700, + 0x8B54D680, 0x8B53E600, 0x8B52F580, + 0x8B520500, 0x8B511480, 0x8B502400, + 0x8B4F3380, 0x8B4E4300, 0x8B4D5280, + 0x8B4C6200, 0x8B4B7180, 0x8B4A8100, + 0x8B499080, 0x8B48A000, 0x8B47AF80, + 0x8B46BF00, 0x8B45CE80, 0x8B44DE00, + 0x8B43ED80, 0x8B42FD00, 0x8B420C80, + 0x8B411C00, 0x8B402B80, 0x8B3F3B00, + 0x8B3E4A80, 0x8B3D5A00, 0x8B3C6980, + 0x8B3B7900, 0x8B3A8880, 0x8B399800, + 0x8B38A780, 0x8B37B700, 0x8B36C680, + 0x8B35D600, 0x8B34E580, 0x8B33F500, + 0x8B330480, 0x8B321400, 0x8B312380, + 0x8B303300, 0x8B2F4280, 0x8B2E5200, + 0x8B2D6180, 0x8B2C7100, 0x8B2B8080, + 0x8B2A9000, 0x8B299F80, 0x8B28AF00, + 0x8B27BE80, 0x8B26CE00, 0x8B25DD80, + 0x8B24ED00, 0x8B23FC80, 0x8B230C00, + 0x8B221B80, 0x8B212B00, 0x8B203A80, + 0x8B1F4A00, 0x8B1E5980, 0x8B1D6900, + 0x8B1C7880, 0x8B1B8800, 0x8B1A9780, + 0x8B19A700, 0x8B18B680, 0x8B17C600, + 0x8B16D580, 0x8B15E500, 0x8B14F480, + 0x8B140400, 0x8B131380, 0x8B122300, + 0x8B113280, 0x8B104200, 0x8B0F5180, + 0x8B0E6100, 0x8B0D7080, 0x8B0C8000, + 0x8B0B8F80, 0x8B0A9F00, 0x8B09AE80, + 0x8B08BE00, 0x8B07CD80, 0x8B06DD00, + 0x8B05EC80, 0x8B04FC00, 0x8B040B80, + 0x8B031B00, 0x8B022A80, 0x8B013A00, + 0x8B004980, 0x8AFF5900, 0x8AFE6880, + 0x8AFD7800, 0x8AFC8780, 0x8AFB9700, + 0x8AFAA680, 0x8AF9B600, 0x8AF8C580, + 0x8AF7D500, 0x8AF6E480, 0x8AF5F400, + 0x8AF50380, 0x8AF41300, 0x8AF32280, + 0x8AF23200, 0x8AF14180, 0x8AF05100, + 0x8AEF6080, 0x8AEE7000, 0x8AED7F80, + 0x8AEC8F00, 0x8AEB9E80, 0x8AEAAE00, + 0x8AE9BD80, 0x8AE8CD00, 0x8AE7DC80, + 0x8AE6EC00, 0x8AE5FB80, 0x8AE50B00, + 0x8AE41A80, 0x8AE32A00, 0x8AE23980, + 0x8AE14900, 0x8AE05880, 0x8ADF6800, + 0x8ADE7780, 0x8ADD8700, 0x8ADC9680, + 0x8ADBA600, 0x8ADAB580, 0x8AD9C500, + 0x8AD8D480, 0x8AD7E400, 0x8AD6F380, + 0x8AD60300, 0x8AD51280, 0x8AD42200, + 0x8AD33180, 0x8AD24100, 0x8AD15080, + 0x8AD06000, 0x8ACF6F80, 0x8ACE7F00, + 0x8ACD8E80, 0x8ACC9E00, 0x8ACBAD80, + 0x8ACABD00, 0x8AC9CC80, 0x8AC8DC00, + 0x8AC7EB80, 0x8AC6FB00, 0x8AC60A80, + 0x8AC51A00, 0x8AC42980, 0x8AC33900, + 0x8AC24880, 0x8AC15800, 0x8AC06780, + 0x8ABF7700, 0x8ABE8680, 0x8ABD9600, + 0x8ABCA580, 0x8ABBB500, 0x8ABAC480, + 0x8AB9D400, 0x8AB8E380, 0x8AB7F300, + 0x8AB70280, 0x8AB61200, 0x8AB52180, + 0x8AB43100, 0x8AB34080, 0x8AB25000, + 0x8AB15F80, 0x8AB06F00, 0x8AAF7E80, + 0x8AAE8E00, 0x8AAD9D80, 0x8AACAD00, + 0x8AABBC80, 0x8AAACC00, 0x8AA9DB80, + 0x8AA8EB00, 0x8AA7FA80, 0x8AA70A00, + 0x8AA61980, 0x8AA52900, 0x8AA43880, + 0x8AA34800, 0x8AA25780, 0x8AA16700, + 0x8AA07680, 0x8A9F8600, 0x8A9E9580, + 0x8A9DA500, 0x8A9CB480, 0x8A9BC400, + 0x8A9AD380, 0x8A99E300, 0x8A98F280, + 0x8A980200, 0x8A971180, 0x8A962100, + 0x8A953080, 0x8A944000, 0x8A934F80, + 0x8A925F00, 0x8A916E80, 0x8A907E00, + 0x8A8F8D80, 0x8A8E9D00, 0x8A8DAC80, + 0x8A8CBC00, 0x8A8BCB80, 0x8A8ADB00, + 0x8A89EA80, 0x8A88FA00, 0x8A880980, + 0x8A871900, 0x8A862880, 0x8A853800, + 0x8A844780, 0x8A835700, 0x8A826680, + 0x8A817600, 0x8A808580, 0x8A7F9500, + 0x8A7EA480, 0x8A7DB400, 0x8A7CC380, + 0x8A7BD300, 0x8A7AE280, 0x8A79F200, + 0x8A790180, 0x8A781100, 0x8A772080, + 0x8A763000, 0x8A753F80, 0x8A744F00, + 0x8A735E80, 0x8A726E00, 0x8A717D80, + 0x8A708D00, 0x8A6F9C80, 0x8A6EAC00, + 0x8A6DBB80, 0x8A6CCB00, 0x8A6BDA80, + 0x8A6AEA00, 0x8A69F980, 0x8A690900, + 0x8A681880, 0x8A672800, 0x8A663780, + 0x8A654700, 0x8A645680, 0x8A636600, + 0x8A627580, 0x8A618500, 0x8A609480, + 0x8A5FA400, 0x8A5EB380, 0x8A5DC300, + 0x8A5CD280, 0x8A5BE200, 0x8A5AF180, + 0x8A5A0100, 0x8A591080, 0x8A582000, + 0x8A572F80, 0x8A563F00, 0x8A554E80, + 0x8A545E00, 0x8A536D80, 0x8A527D00, + 0x8A518C80, 0x8A509C00, 0x8A4FAB80, + 0x8A4EBB00, 0x8A4DCA80, 0x8A4CDA00, + 0x8A4BE980, 0x8A4AF900, 0x8A4A0880, + 0x8A491800, 0x8A482780, 0x8A473700, + 0x8A464680, 0x8A455600, 0x8A446580, + 0x8A437500, 0x8A428480, 0x8A419400, + 0x8A40A380, 0x8A3FB300, 0x8A3EC280, + 0x8A3DD200, 0x8A3CE180, 0x8A3BF100, + 0x8A3B0080, 0x8A3A1000, 0x8A391F80, + 0x8A382F00, 0x8A373E80, 0x8A364E00, + 0x8A355D80, 0x8A346D00, 0x8A337C80, + 0x8A328C00, 0x8A319B80, 0x8A30AB00, + 0x8A2FBA80, 0x8A2ECA00, 0x8A2DD980, + 0x8A2CE900, 0x8A2BF880, 0x8A2B0800, + 0x8A2A1780, 0x8A292700, 0x8A283680, + 0x8A274600, 0x8A265580, 0x8A256500, + 0x8A247480, 0x8A238400, 0x8A229380, + 0x8A21A300, 0x8A20B280, 0x8A1FC200, + 0x8A1ED180, 0x8A1DE100, 0x8A1CF080, + 0x8A1C0000, 0x8A1B1C80, 0x8A1A3900, + 0x8A195580, 0x8A187200, 0x8A178E80, + 0x8A16AB00, 0x8A15C780, 0x8A14E400, + 0x8A140080, 0x8A131D00, 0x8A123980, + 0x8A115600, 0x8A107280, 0x8A0F8F00, + 0x8A0EAB80, 0x8A0DC800, 0x8A0CE480, + 0x8A0C0100, 0x8A0B1D80, 0x8A0A3A00, + 0x8A095680, 0x8A087300, 0x8A078F80, + 0x8A06AC00, 0x8A05C880, 0x8A04E500, + 0x8A040180, 0x8A031E00, 0x8A023A80, + 0x8A015700, 0x8A007380, 0x89FF9000, + 0x89FEAC80, 0x89FDC900, 0x89FCE580, + 0x89FC0200, 0x89FB1E80, 0x89FA3B00, + 0x89F95780, 0x89F87400, 0x89F79080, + 0x89F6AD00, 0x89F5C980, 0x89F4E600, + 0x89F40280, 0x89F31F00, 0x89F23B80, + 0x89F15800, 0x89F07480, 0x89EF9100, + 0x89EEAD80, 0x89EDCA00, 0x89ECE680, + 0x89EC0300, 0x89EB1F80, 0x89EA3C00, + 0x89E95880, 0x89E87500, 0x89E79180, + 0x89E6AE00, 0x89E5CA80, 0x89E4E700, + 0x89E40380, 0x89E32000, 0x89E23C80, + 0x89E15900, 0x89E07580, 0x89DF9200, + 0x89DEAE80, 0x89DDCB00, 0x89DCE780, + 0x89DC0400, 0x89DB2080, 0x89DA3D00, + 0x89D95980, 0x89D87600, 0x89D79280, + 0x89D6AF00, 0x89D5CB80, 0x89D4E800, + 0x89D40480, 0x89D32100, 0x89D23D80, + 0x89D15A00, 0x89D07680, 0x89CF9300, + 0x89CEAF80, 0x89CDCC00, 0x89CCE880, + 0x89CC0500, 0x89CB2180, 0x89CA3E00, + 0x89C95A80, 0x89C87700, 0x89C79380, + 0x89C6B000, 0x89C5CC80, 0x89C4E900, + 0x89C40580, 0x89C32200, 0x89C23E80, + 0x89C15B00, 0x89C07780, 0x89BF9400, + 0x89BEB080, 0x89BDCD00, 0x89BCE980, + 0x89BC0600, 0x89BB2280, 0x89BA3F00, + 0x89B95B80, 0x89B87800, 0x89B79480, + 0x89B6B100, 0x89B5CD80, 0x89B4EA00, + 0x89B40680, 0x89B32300, 0x89B23F80, + 0x89B15C00, 0x89B07880, 0x89AF9500, + 0x89AEB180, 0x89ADCE00, 0x89ACEA80, + 0x89AC0700, 0x89AB2380, 0x89AA4000, + 0x89A95C80, 0x89A87900, 0x89A79580, + 0x89A6B200, 0x89A5CE80, 0x89A4EB00, + 0x89A40780, 0x89A32400, 0x89A24080, + 0x89A15D00, 0x89A07980, 0x899F9600, + 0x899EB280, 0x899DCF00, 0x899CEB80, + 0x899C0800, 0x899B2480, 0x899A4100, + 0x89995D80, 0x89987A00, 0x89979680, + 0x8996B300, 0x8995CF80, 0x8994EC00, + 0x89940880, 0x89932500, 0x89924180, + 0x89915E00, 0x89907A80, 0x898F9700, + 0x898EB380, 0x898DD000, 0x898CEC80, + 0x898C0900, 0x898B2580, 0x898A4200, + 0x89895E80, 0x89887B00, 0x89879780, + 0x8986B400, 0x8985D080, 0x8984ED00, + 0x89840980, 0x89832600, 0x89824280, + 0x89815F00, 0x89807B80, 0x897F9800, + 0x897EB480, 0x897DD100, 0x897CED80, + 0x897C0A00, 0x897B2680, 0x897A4300, + 0x89795F80, 0x89787C00, 0x89779880, + 0x8976B500, 0x8975D180, 0x8974EE00, + 0x89740A80, 0x89732700, 0x89724380, + 0x89716000, 0x89707C80, 0x896F9900, + 0x896EB580, 0x896DD200, 0x896CEE80, + 0x896C0B00, 0x896B2780, 0x896A4400, + 0x89696080, 0x89687D00, 0x89679980, + 0x8966B600, 0x8965D280, 0x8964EF00, + 0x89640B80, 0x89632800, 0x89624480, + 0x89616100, 0x89607D80, 0x895F9A00, + 0x895EB680, 0x895DD300, 0x895CEF80, + 0x895C0C00, 0x895B2880, 0x895A4500, + 0x89596180, 0x89587E00, 0x89579A80, + 0x8956B700, 0x8955D380, 0x8954F000, + 0x89540C80, 0x89532900, 0x89524580, + 0x89516200, 0x89507E80, 0x894F9B00, + 0x894EB780, 0x894DD400, 0x894CF080, + 0x894C0D00, 0x894B2980, 0x894A4600, + 0x89496280, 0x89487F00, 0x89479B80, + 0x8946B800, 0x8945D480, 0x8944F100, + 0x89440D80, 0x89432A00, 0x89424680, + 0x89416300, 0x89407F80, 0x893F9C00, + 0x893EB880, 0x893DD500, 0x893CF180, + 0x893C0E00, 0x893B2A80, 0x893A4700, + 0x89396380, 0x89388000, 0x89379C80, + 0x8936B900, 0x8935D580, 0x8934F200, + 0x89340E80, 0x89332B00, 0x89324780, + 0x89316400, 0x89308080, 0x892F9D00, + 0x892EB980, 0x892DD600, 0x892CF280, + 0x892C0F00, 0x892B2B80, 0x892A4800, + 0x89296480, 0x89288100, 0x89279D80, + 0x8926BA00, 0x8925D680, 0x8924F300, + 0x89240F80, 0x89232C00, 0x89224880, + 0x89216500, 0x89208180, 0x891F9E00, + 0x891EBA80, 0x891DD700, 0x891CF380, + 0x891C1000, 0x891B2C80, 0x891A4900, + 0x89196580, 0x89188200, 0x89179E80, + 0x8916BB00, 0x8915D780, 0x8914F400, + 0x89141080, 0x89132D00, 0x89124980, + 0x89116600, 0x89108280, 0x890F9F00, + 0x890EBB80, 0x890DD800, 0x890CF480, + 0x890C1100, 0x890B2D80, 0x890A4A00, + 0x89096680, 0x89088300, 0x89079F80, + 0x8906BC00, 0x8905D880, 0x8904F500, + 0x89041180, 0x89032E00, 0x89024A80, + 0x89016700, 0x89008380, 0x88FFA000, + 0x88FEBC80, 0x88FDD900, 0x88FCF580, + 0x88FC1200, 0x88FB2E80, 0x88FA4B00, + 0x88F96780, 0x88F88400, 0x88F7A080, + 0x88F6BD00, 0x88F5D980, 0x88F4F600, + 0x88F41280, 0x88F32F00, 0x88F24B80, + 0x88F16800, 0x88F08480, 0x88EFA100, + 0x88EEBD80, 0x88EDDA00, 0x88ECF680, + 0x88EC1300, 0x88EB2F80, 0x88EA4C00, + 0x88E96880, 0x88E88500, 0x88E7A180, + 0x88E6BE00, 0x88E5DA80, 0x88E4F700, + 0x88E41380, 0x88E33000, 0x88E24C80, + 0x88E16900, 0x88E08580, 0x88DFA200, + 0x88DEBE80, 0x88DDDB00, 0x88DCF780, + 0x88DC1400, 0x88DB3080, 0x88DA4D00, + 0x88D96980, 0x88D88600, 0x88D7A280, + 0x88D6BF00, 0x88D5DB80, 0x88D4F800, + 0x88D41480, 0x88D33100, 0x88D24D80, + 0x88D16A00, 0x88D08680, 0x88CFA300, + 0x88CEBF80, 0x88CDDC00, 0x88CCF880, + 0x88CC1500, 0x88CB3180, 0x88CA4E00, + 0x88C96A80, 0x88C88700, 0x88C7A380, + 0x88C6C000, 0x88C5DC80, 0x88C4F900, + 0x88C41580, 0x88C33200, 0x88C24E80, + 0x88C16B00, 0x88C08780, 0x88BFA400, + 0x88BEC080, 0x88BDDD00, 0x88BCF980, + 0x88BC1600, 0x88BB3280, 0x88BA4F00, + 0x88B96B80, 0x88B88800, 0x88B7A480, + 0x88B6C100, 0x88B5DD80, 0x88B4FA00, + 0x88B41680, 0x88B33300, 0x88B24F80, + 0x88B16C00, 0x88B08880, 0x88AFA500, + 0x88AEC180, 0x88ADDE00, 0x88ACFA80, + 0x88AC1700, 0x88AB3380, 0x88AA5000, + 0x88A96C80, 0x88A88900, 0x88A7A580, + 0x88A6C200, 0x88A5DE80, 0x88A4FB00, + 0x88A41780, 0x88A33400, 0x88A25080, + 0x88A16D00, 0x88A08980, 0x889FA600, + 0x889EC280, 0x889DDF00, 0x889CFB80, + 0x889C1800, 0x889B3480, 0x889A5100, + 0x88996D80, 0x88988A00, 0x8897A680, + 0x8896C300, 0x8895DF80, 0x8894FC00, + 0x88941880, 0x88933500, 0x88925180, + 0x88916E00, 0x88908A80, 0x888FA700, + 0x888EC380, 0x888DE000, 0x888CFC80, + 0x888C1900, 0x888B3580, 0x888A5200, + 0x88896E80, 0x88888B00, 0x8887A780, + 0x8886C400, 0x8885E080, 0x8884FD00, + 0x88841980, 0x88833600, 0x88825280, + 0x88816F00, 0x88808B80, 0x887FA800, + 0x887EC480, 0x887DE100, 0x887CFD80, + 0x887C1A00, 0x887B3680, 0x887A5300, + 0x88796F80, 0x88788C00, 0x8877A880, + 0x8876C500, 0x8875E180, 0x8874FE00, + 0x88741A80, 0x88733700, 0x88725380, + 0x88717000, 0x88708C80, 0x886FA900, + 0x886EC580, 0x886DE200, 0x886CFE80, + 0x886C1B00, 0x886B3780, 0x886A5400, + 0x88697080, 0x88688D00, 0x8867A980, + 0x8866C600, 0x8865E280, 0x8864FF00, + 0x88641B80, 0x88633800, 0x88625480, + 0x88617100, 0x88608D80, 0x885FAA00, + 0x885EC680, 0x885DE300, 0x885CFF80, + 0x885C1C00, 0x885B3880, 0x885A5500, + 0x88597180, 0x88588E00, 0x8857AA80, + 0x8856C700, 0x8855E380, 0x88550000, + 0x88541C80, 0x88533900, 0x88525580, + 0x88517200, 0x88508E80, 0x884FAB00, + 0x884EC780, 0x884DE400, 0x884D0080, + 0x884C1D00, 0x884B3980, 0x884A5600, + 0x88497280, 0x88488F00, 0x8847AB80, + 0x8846C800, 0x8845E480, 0x88450100, + 0x88441D80, 0x88433A00, 0x88425680, + 0x88417300, 0x88408F80, 0x883FAC00, + 0x883EC880, 0x883DE500, 0x883D0180, + 0x883C1E00, 0x883B3A80, 0x883A5700, + 0x88397380, 0x88389000, 0x8837AC80, + 0x8836C900, 0x8835E580, 0x88350200, + 0x88341E80, 0x88333B00, 0x88325780, + 0x88317400, 0x88309080, 0x882FAD00, + 0x882EC980, 0x882DE600, 0x882D0280, + 0x882C1F00, 0x882B3B80, 0x882A5800, + 0x88297480, 0x88289100, 0x8827AD80, + 0x8826CA00, 0x8825E680, 0x88250300, + 0x88241F80, 0x88233C00, 0x88225880, + 0x88217500, 0x88209180, 0x881FAE00, + 0x881ECA80, 0x881DE700, 0x881D0380, + 0x881C2000, 0x881B3C80, 0x881A5900, + 0x88197580, 0x88189200, 0x8817AE80, + 0x8816CB00, 0x8815E780, 0x88150400, + 0x88142080, 0x88133D00, 0x88125980, + 0x88117600, 0x88109280, 0x880FAF00, + 0x880ECB80, 0x880DE800, 0x880D0480, + 0x880C2100, 0x880B3D80, 0x880A5A00, + 0x88097680, 0x88089300, 0x8807AF80, + 0x8806CC00, 0x8805E880, 0x88050500, + 0x88042180, 0x88033E00, 0x88025A80, + 0x88017700, 0x88009380, 0x87FFB000, + 0x87FECC80, 0x87FDE900, 0x87FD0580, + 0x87FC2200, 0x87FB3E80, 0x87FA5B00, + 0x87F97780, 0x87F89400, 0x87F7B080, + 0x87F6CD00, 0x87F5E980, 0x87F50600, + 0x87F42280, 0x87F33F00, 0x87F25B80, + 0x87F17800, 0x87F09480, 0x87EFB100, + 0x87EECD80, 0x87EDEA00, 0x87ED0680, + 0x87EC2300, 0x87EB3F80, 0x87EA5C00, + 0x87E97880, 0x87E89500, 0x87E7B180, + 0x87E6CE00, 0x87E5EA80, 0x87E50700, + 0x87E42380, 0x87E34000, 0x87E25C80, + 0x87E17900, 0x87E09580, 0x87DFB200, + 0x87DECE80, 0x87DDEB00, 0x87DD0780, + 0x87DC2400, 0x87DB4080, 0x87DA5D00, + 0x87D97980, 0x87D89600, 0x87D7B280, + 0x87D6CF00, 0x87D5EB80, 0x87D50800, + 0x87D42480, 0x87D34100, 0x87D25D80, + 0x87D17A00, 0x87D09680, 0x87CFB300, + 0x87CECF80, 0x87CDEC00, 0x87CD0880, + 0x87CC2500, 0x87CB4180, 0x87CA5E00, + 0x87C97A80, 0x87C89700, 0x87C7B380, + 0x87C6D000, 0x87C5EC80, 0x87C50900, + 0x87C42580, 0x87C34200, 0x87C25E80, + 0x87C17B00, 0x87C09780, 0x87BFB400, + 0x87BED080, 0x87BDED00, 0x87BD0980, + 0x87BC2600, 0x87BB4280, 0x87BA5F00, + 0x87B97B80, 0x87B89800, 0x87B7B480, + 0x87B6D100, 0x87B5ED80, 0x87B50A00, + 0x87B42680, 0x87B34300, 0x87B25F80, + 0x87B17C00, 0x87B09880, 0x87AFB500, + 0x87AED180, 0x87ADEE00, 0x87AD0A80, + 0x87AC2700, 0x87AB4380, 0x87AA6000, + 0x87A97C80, 0x87A89900, 0x87A7B580, + 0x87A6D200, 0x87A5EE80, 0x87A50B00, + 0x87A42780, 0x87A34400, 0x87A26080, + 0x87A17D00, 0x87A09980, 0x879FB600, + 0x879ED280, 0x879DEF00, 0x879D0B80, + 0x879C2800, 0x879B4480, 0x879A6100, + 0x87997D80, 0x87989A00, 0x8797B680, + 0x8796D300, 0x8795EF80, 0x87950C00, + 0x87942880, 0x87934500, 0x87926180, + 0x87917E00, 0x87909A80, 0x878FB700, + 0x878ED380, 0x878DF000, 0x878D0C80, + 0x878C2900, 0x878B4580, 0x878A6200, + 0x87897E80, 0x87889B00, 0x8787B780, + 0x8786D400, 0x8785F080, 0x87850D00, + 0x87842980, 0x87834600, 0x87826280, + 0x87817F00, 0x87809B80, 0x877FB800, + 0x877ED480, 0x877DF100, 0x877D0D80, + 0x877C2A00, 0x877B4680, 0x877A6300, + 0x87797F80, 0x87789C00, 0x8777B880, + 0x8776D500, 0x8775F180, 0x87750E00, + 0x87742A80, 0x87734700, 0x87726380, + 0x87718000, 0x87709C80, 0x876FB900, + 0x876ED580, 0x876DF200, 0x876D0E80, + 0x876C2B00, 0x876B4780, 0x876A6400, + 0x87698080, 0x87689D00, 0x8767B980, + 0x8766D600, 0x8765F280, 0x87650F00, + 0x87642B80, 0x87634800, 0x87626480, + 0x87618100, 0x87609D80, 0x875FBA00, + 0x875ED680, 0x875DF300, 0x875D0F80, + 0x875C2C00, 0x875B4880, 0x875A6500, + 0x87598180, 0x87589E00, 0x8757BA80, + 0x8756D700, 0x8755F380, 0x87551000, + 0x87542C80, 0x87534900, 0x87526580, + 0x87518200, 0x87509E80, 0x874FBB00, + 0x874ED780, 0x874DF400, 0x874D1080, + 0x874C2D00, 0x874B4980, 0x874A6600, + 0x87498280, 0x87489F00, 0x8747BB80, + 0x8746D800, 0x8745F480, 0x87451100, + 0x87442D80, 0x87434A00, 0x87426680, + 0x87418300, 0x87409F80, 0x873FBC00, + 0x873ED880, 0x873DF500, 0x873D1180, + 0x873C2E00, 0x873B4A80, 0x873A6700, + 0x87398380, 0x8738A000, 0x8737BC80, + 0x8736D900, 0x8735F580, 0x87351200, + 0x87342E80, 0x87334B00, 0x87326780, + 0x87318400, 0x8730A080, 0x872FBD00, + 0x872ED980, 0x872DF600, 0x872D1280, + 0x872C2F00, 0x872B4B80, 0x872A6800, + 0x87298480, 0x8728A100, 0x8727BD80, + 0x8726DA00, 0x8725F680, 0x87251300, + 0x87242F80, 0x87234C00, 0x87226880, + 0x87218500, 0x8720A180, 0x871FBE00, + 0x871EDA80, 0x871DF700, 0x871D1380, + 0x871C3000, 0x871B4C80, 0x871A6900, + 0x87198580, 0x8718A200, 0x8717BE80, + 0x8716DB00, 0x8715F780, 0x87151400, + 0x87143080, 0x87134D00, 0x87126980, + 0x87118600, 0x8710A280, 0x870FBF00, + 0x870EDB80, 0x870DF800, 0x870D1480, + 0x870C3100, 0x870B4D80, 0x870A6A00, + 0x87098680, 0x8708A300, 0x8707BF80, + 0x8706DC00, 0x8705F880, 0x87051500, + 0x87043180, 0x87034E00, 0x87026A80, + 0x87018700, 0x8700A380, 0x86FFC000, + 0x86FEDC80, 0x86FDF900, 0x86FD1580, + 0x86FC3200, 0x86FB4E80, 0x86FA6B00, + 0x86F98780, 0x86F8A400, 0x86F7C080, + 0x86F6DD00, 0x86F5F980, 0x86F51600, + 0x86F43280, 0x86F34F00, 0x86F26B80, + 0x86F18800, 0x86F0A480, 0x86EFC100, + 0x86EEDD80, 0x86EDFA00, 0x86ED1680, + 0x86EC3300, 0x86EB4F80, 0x86EA6C00, + 0x86E98880, 0x86E8A500, 0x86E7C180, + 0x86E6DE00, 0x86E5FA80, 0x86E51700, + 0x86E43380, 0x86E35000, 0x86E26C80, + 0x86E18900, 0x86E0A580, 0x86DFC200, + 0x86DEDE80, 0x86DDFB00, 0x86DD1780, + 0x86DC3400, 0x86DB5080, 0x86DA6D00, + 0x86D98980, 0x86D8A600, 0x86D7C280, + 0x86D6DF00, 0x86D5FB80, 0x86D51800, + 0x86D43480, 0x86D35100, 0x86D26D80, + 0x86D18A00, 0x86D0A680, 0x86CFC300, + 0x86CEDF80, 0x86CDFC00, 0x86CD1880, + 0x86CC3500, 0x86CB5180, 0x86CA6E00, + 0x86C98A80, 0x86C8A700, 0x86C7C380, + 0x86C6E000, 0x86C5FC80, 0x86C51900, + 0x86C43580, 0x86C35200, 0x86C26E80, + 0x86C18B00, 0x86C0A780, 0x86BFC400, + 0x86BEE080, 0x86BDFD00, 0x86BD1980, + 0x86BC3600, 0x86BB5280, 0x86BA6F00, + 0x86B98B80, 0x86B8A800, 0x86B7C480, + 0x86B6E100, 0x86B5FD80, 0x86B51A00, + 0x86B43680, 0x86B35300, 0x86B26F80, + 0x86B18C00, 0x86B0A880, 0x86AFC500, + 0x86AEE180, 0x86ADFE00, 0x86AD1A80, + 0x86AC3700, 0x86AB5380, 0x86AA7000, + 0x86A98C80, 0x86A8A900, 0x86A7C580, + 0x86A6E200, 0x86A5FE80, 0x86A51B00, + 0x86A43780, 0x86A35400, 0x86A27080, + 0x86A18D00, 0x86A0A980, 0x869FC600, + 0x869EE280, 0x869DFF00, 0x869D1B80, + 0x869C3800, 0x869B5480, 0x869A7100, + 0x86998D80, 0x8698AA00, 0x8697C680, + 0x8696E300, 0x8695FF80, 0x86951C00, + 0x86943880, 0x86935500, 0x86927180, + 0x86918E00, 0x8690AA80, 0x868FC700, + 0x868EE380, 0x868E0000, 0x868D1C80, + 0x868C3900, 0x868B5580, 0x868A7200, + 0x86898E80, 0x8688AB00, 0x8687C780, + 0x8686E400, 0x86860080, 0x86851D00, + 0x86843980, 0x86835600, 0x86827280, + 0x86818F00, 0x8680AB80, 0x867FC800, + 0x867EE480, 0x867E0100, 0x867D1D80, + 0x867C3A00, 0x867B5680, 0x867A7300, + 0x86798F80, 0x8678AC00, 0x8677C880, + 0x8676E500, 0x86760180, 0x86751E00, + 0x86743A80, 0x86735700, 0x86727380, + 0x86719000, 0x8670AC80, 0x866FC900, + 0x866EE580, 0x866E0200, 0x866D1E80, + 0x866C3B00, 0x866B5780, 0x866A7400, + 0x86699080, 0x8668AD00, 0x8667C980, + 0x8666E600, 0x86660280, 0x86651F00, + 0x86643B80, 0x86635800, 0x86627480, + 0x86619100, 0x8660AD80, 0x865FCA00, + 0x865EE680, 0x865E0300, 0x865D1F80, + 0x865C3C00, 0x865B5880, 0x865A7500, + 0x86599180, 0x8658AE00, 0x8657CA80, + 0x8656E700, 0x86560380, 0x86552000, + 0x86543C80, 0x86535900, 0x86527580, + 0x86519200, 0x8650AE80, 0x864FCB00, + 0x864EE780, 0x864E0400, 0x864D2080, + 0x864C3D00, 0x864B5980, 0x864A7600, + 0x86499280, 0x8648AF00, 0x8647CB80, + 0x8646E800, 0x86460480, 0x86452100, + 0x86443D80, 0x86435A00, 0x86427680, + 0x86419300, 0x8640AF80, 0x863FCC00, + 0x863EE880, 0x863E0500, 0x863D2180, + 0x863C3E00, 0x863B5A80, 0x863A7700, + 0x86399380, 0x8638B000, 0x8637CC80, + 0x8636E900, 0x86360580, 0x86352200, + 0x86343E80, 0x86335B00, 0x86327780, + 0x86319400, 0x8630B080, 0x862FCD00, + 0x862EE980, 0x862E0600, 0x862D2280, + 0x862C3F00, 0x862B5B80, 0x862A7800, + 0x86299480, 0x8628B100, 0x8627CD80, + 0x8626EA00, 0x86260680, 0x86252300, + 0x86243F80, 0x86235C00, 0x86227880, + 0x86219500, 0x8620B180, 0x861FCE00, + 0x861EEA80, 0x861E0700, 0x861D2380, + 0x861C4000, 0x861B5C80, 0x861A7900, + 0x86199580, 0x8618B200, 0x8617CE80, + 0x8616EB00, 0x86160780, 0x86152400, + 0x86144080, 0x86135D00, 0x86127980, + 0x86119600, 0x8610B280, 0x860FCF00, + 0x860EEB80, 0x860E0800, 0x860D2480, + 0x860C4100, 0x860B5D80, 0x860A7A00, + 0x86099680, 0x8608B300, 0x8607CF80, + 0x8606EC00, 0x86060880, 0x86052500, + 0x86044180, 0x86035E00, 0x86027A80, + 0x86019700, 0x8600B380, 0x85FFD000, + 0x85FEEC80, 0x85FE0900, 0x85FD2580, + 0x85FC4200, 0x85FB5E80, 0x85FA7B00, + 0x85F99780, 0x85F8B400, 0x85F7D080, + 0x85F6ED00, 0x85F60980, 0x85F52600, + 0x85F44280, 0x85F35F00, 0x85F27B80, + 0x85F19800, 0x85F0B480, 0x85EFD100, + 0x85EEED80, 0x85EE0A00, 0x85ED2680, + 0x85EC4300, 0x85EB5F80, 0x85EA7C00, + 0x85E99880, 0x85E8B500, 0x85E7D180, + 0x85E6EE00, 0x85E60A80, 0x85E52700, + 0x85E44380, 0x85E36000, 0x85E27C80, + 0x85E19900, 0x85E0B580, 0x85DFD200, + 0x85DEEE80, 0x85DE0B00, 0x85DD2780, + 0x85DC4400, 0x85DB6080, 0x85DA7D00, + 0x85D99980, 0x85D8B600, 0x85D7D280, + 0x85D6EF00, 0x85D60B80, 0x85D52800, + 0x85D44480, 0x85D36100, 0x85D27D80, + 0x85D19A00, 0x85D0B680, 0x85CFD300, + 0x85CEEF80, 0x85CE0C00, 0x85CD2880, + 0x85CC4500, 0x85CB6180, 0x85CA7E00, + 0x85C99A80, 0x85C8B700, 0x85C7D380, + 0x85C6F000, 0x85C60C80, 0x85C52900, + 0x85C44580, 0x85C36200, 0x85C27E80, + 0x85C19B00, 0x85C0B780, 0x85BFD400, + 0x85BEF080, 0x85BE0D00, 0x85BD2980, + 0x85BC4600, 0x85BB6280, 0x85BA7F00, + 0x85B99B80, 0x85B8B800, 0x85B7D480, + 0x85B6F100, 0x85B60D80, 0x85B52A00, + 0x85B44680, 0x85B36300, 0x85B27F80, + 0x85B19C00, 0x85B0B880, 0x85AFD500, + 0x85AEF180, 0x85AE0E00, 0x85AD2A80, + 0x85AC4700, 0x85AB6380, 0x85AA8000, + 0x85A99C80, 0x85A8B900, 0x85A7D580, + 0x85A6F200, 0x85A60E80, 0x85A52B00, + 0x85A44780, 0x85A36400, 0x85A28080, + 0x85A19D00, 0x85A0B980, 0x859FD600, + 0x859EF280, 0x859E0F00, 0x859D2B80, + 0x859C4800, 0x859B6480, 0x859A8100, + 0x85999D80, 0x8598BA00, 0x8597D680, + 0x8596F300, 0x85960F80, 0x85952C00, + 0x85944880, 0x85936500, 0x85928180, + 0x85919E00, 0x8590BA80, 0x858FD700, + 0x858EF380, 0x858E1000, 0x858D2C80, + 0x858C4900, 0x858B6580, 0x858A8200, + 0x85899E80, 0x8588BB00, 0x8587D780, + 0x8586F400, 0x85861080, 0x85852D00, + 0x85844980, 0x85836600, 0x85828280, + 0x85819F00, 0x8580BB80, 0x857FD800, + 0x857EF480, 0x857E1100, 0x857D2D80, + 0x857C4A00, 0x857B6680, 0x857A8300, + 0x85799F80, 0x8578BC00, 0x8577D880, + 0x8576F500, 0x85761180, 0x85752E00, + 0x85744A80, 0x85736700, 0x85728380, + 0x8571A000, 0x8570BC80, 0x856FD900, + 0x856EF580, 0x856E1200, 0x856D2E80, + 0x856C4B00, 0x856B6780, 0x856A8400, + 0x8569A080, 0x8568BD00, 0x8567D980, + 0x8566F600, 0x85661280, 0x85652F00, + 0x85644B80, 0x85636800, 0x85628480, + 0x8561A100, 0x8560BD80, 0x855FDA00, + 0x855EF680, 0x855E1300, 0x855D2F80, + 0x855C4C00, 0x855B6880, 0x855A8500, + 0x8559A180, 0x8558BE00, 0x8557DA80, + 0x8556F700, 0x85561380, 0x85553000, + 0x85544C80, 0x85536900, 0x85528580, + 0x8551A200, 0x8550BE80, 0x854FDB00, + 0x854EF780, 0x854E1400, 0x854D3080, + 0x854C4D00, 0x854B6980, 0x854A8600, + 0x8549A280, 0x8548BF00, 0x8547DB80, + 0x8546F800, 0x85461480, 0x85453100, + 0x85444D80, 0x85436A00, 0x85428680, + 0x8541A300, 0x8540BF80, 0x853FDC00, + 0x853EF880, 0x853E1500, 0x853D3180, + 0x853C4E00, 0x853B6A80, 0x853A8700, + 0x8539A380, 0x8538C000, 0x8537DC80, + 0x8536F900, 0x85361580, 0x85353200, + 0x85344E80, 0x85336B00, 0x85328780, + 0x8531A400, 0x8530C080, 0x852FDD00, + 0x852EF980, 0x852E1600, 0x852D3280, + 0x852C4F00, 0x852B6B80, 0x852A8800, + 0x8529A480, 0x8528C100, 0x8527DD80, + 0x8526FA00, 0x85261680, 0x85253300, + 0x85244F80, 0x85236C00, 0x85228880, + 0x8521A500, 0x8520C180, 0x851FDE00, + 0x851EFA80, 0x851E1700, 0x851D3380, + 0x851C5000, 0x851B6C80, 0x851A8900, + 0x8519A580, 0x8518C200, 0x8517DE80, + 0x8516FB00, 0x85161780, 0x85153400, + 0x85145080, 0x85136D00, 0x85128980, + 0x8511A600, 0x8510C280, 0x850FDF00, + 0x850EFB80, 0x850E1800, 0x850D3480, + 0x850C5100, 0x850B6D80, 0x850A8A00, + 0x8509A680, 0x8508C300, 0x8507DF80, + 0x8506FC00, 0x85061880, 0x85053500, + 0x85045180, 0x85036E00, 0x85028A80, + 0x8501A700, 0x8500C380, 0x84FFE000, + 0x84FEFC80, 0x84FE1900, 0x84FD3580, + 0x84FC5200, 0x84FB6E80, 0x84FA8B00, + 0x84F9A780, 0x84F8C400, 0x84F7E080, + 0x84F6FD00, 0x84F61980, 0x84F53600, + 0x84F45280, 0x84F36F00, 0x84F28B80, + 0x84F1A800, 0x84F0C480, 0x84EFE100, + 0x84EEFD80, 0x84EE1A00, 0x84ED3680, + 0x84EC5300, 0x84EB6F80, 0x84EA8C00, + 0x84E9A880, 0x84E8C500, 0x84E7E180, + 0x84E6FE00, 0x84E61A80, 0x84E53700, + 0x84E45380, 0x84E37000, 0x84E28C80, + 0x84E1A900, 0x84E0C580, 0x84DFE200, + 0x84DEFE80, 0x84DE1B00, 0x84DD3780, + 0x84DC5400, 0x84DB7080, 0x84DA8D00, + 0x84D9A980, 0x84D8C600, 0x84D7E280, + 0x84D6FF00, 0x84D61B80, 0x84D53800, + 0x84D45480, 0x84D37100, 0x84D28D80, + 0x84D1AA00, 0x84D0C680, 0x84CFE300, + 0x84CEFF80, 0x84CE1C00, 0x84CD3880, + 0x84CC5500, 0x84CB7180, 0x84CA8E00, + 0x84C9AA80, 0x84C8C700, 0x84C7E380, + 0x84C70000, 0x84C61C80, 0x84C53900, + 0x84C45580, 0x84C37200, 0x84C28E80, + 0x84C1AB00, 0x84C0C780, 0x84BFE400, + 0x84BF0080, 0x84BE1D00, 0x84BD3980, + 0x84BC5600, 0x84BB7280, 0x84BA8F00, + 0x84B9AB80, 0x84B8C800, 0x84B7E480, + 0x84B70100, 0x84B61D80, 0x84B53A00, + 0x84B45680, 0x84B37300, 0x84B28F80, + 0x84B1AC00, 0x84B0C880, 0x84AFE500, + 0x84AF0180, 0x84AE1E00, 0x84AD3A80, + 0x84AC5700, 0x84AB7380, 0x84AA9000, + 0x84A9AC80, 0x84A8C900, 0x84A7E580, + 0x84A70200, 0x84A61E80, 0x84A53B00, + 0x84A45780, 0x84A37400, 0x84A29080, + 0x84A1AD00, 0x84A0C980, 0x849FE600, + 0x849F0280, 0x849E1F00, 0x849D3B80, + 0x849C5800, 0x849B7480, 0x849A9100, + 0x8499AD80, 0x8498CA00, 0x8497E680, + 0x84970300, 0x84961F80, 0x84953C00, + 0x84945880, 0x84937500, 0x84929180, + 0x8491AE00, 0x8490CA80, 0x848FE700, + 0x848F0380, 0x848E2000, 0x848D3C80, + 0x848C5900, 0x848B7580, 0x848A9200, + 0x8489AE80, 0x8488CB00, 0x8487E780, + 0x84870400, 0x84862080, 0x84853D00, + 0x84845980, 0x84837600, 0x84829280, + 0x8481AF00, 0x8480CB80, 0x847FE800, + 0x847F0480, 0x847E2100, 0x847D3D80, + 0x847C5A00, 0x847B7680, 0x847A9300, + 0x8479AF80, 0x8478CC00, 0x8477E880, + 0x84770500, 0x84762180, 0x84753E00, + 0x84745A80, 0x84737700, 0x84729380, + 0x8471B000, 0x8470CC80, 0x846FE900, + 0x846F0580, 0x846E2200, 0x846D3E80, + 0x846C5B00, 0x846B7780, 0x846A9400, + 0x8469B080, 0x8468CD00, 0x8467E980, + 0x84670600, 0x84662280, 0x84653F00, + 0x84645B80, 0x84637800, 0x84629480, + 0x8461B100, 0x8460CD80, 0x845FEA00, + 0x845F0680, 0x845E2300, 0x845D3F80, + 0x845C5C00, 0x845B7880, 0x845A9500, + 0x8459B180, 0x8458CE00, 0x8457EA80, + 0x84570700, 0x84562380, 0x84554000, + 0x84545C80, 0x84537900, 0x84529580, + 0x8451B200, 0x8450CE80, 0x844FEB00, + 0x844F0780, 0x844E2400, 0x844D4080, + 0x844C5D00, 0x844B7980, 0x844A9600, + 0x8449B280, 0x8448CF00, 0x8447EB80, + 0x84470800, 0x84462480, 0x84454100, + 0x84445D80, 0x84437A00, 0x84429680, + 0x8441B300, 0x8440CF80, 0x843FEC00, + 0x843F0880, 0x843E2500, 0x843D4180, + 0x843C5E00, 0x843B7A80, 0x843A9700, + 0x8439B380, 0x8438D000, 0x8437EC80, + 0x84370900, 0x84362580, 0x84354200, + 0x84345E80, 0x84337B00, 0x84329780, + 0x8431B400, 0x8430D080, 0x842FED00, + 0x842F0980, 0x842E2600, 0x842D4280, + 0x842C5F00, 0x842B7B80, 0x842A9800, + 0x8429B480, 0x8428D100, 0x8427ED80, + 0x84270A00, 0x84262680, 0x84254300, + 0x84245F80, 0x84237C00, 0x84229880, + 0x8421B500, 0x8420D180, 0x841FEE00, + 0x841F0A80, 0x841E2700, 0x841D4380, + 0x841C6000, 0x841B7C80, 0x841A9900, + 0x8419B580, 0x8418D200, 0x8417EE80, + 0x84170B00, 0x84162780, 0x84154400, + 0x84146080, 0x84137D00, 0x84129980, + 0x8411B600, 0x8410D280, 0x840FEF00, + 0x840F0B80, 0x840E2800, 0x840D4480, + 0x840C6100, 0x840B7D80, 0x840A9A00, + 0x8409B680, 0x8408D300, 0x8407EF80, + 0x84070C00, 0x84062880, 0x84054500, + 0x84046180, 0x84037E00, 0x84029A80, + 0x8401B700, 0x8400D380, 0x83FFF000, + 0x83FF0C80, 0x83FE2900, 0x83FD4580, + 0x83FC6200, 0x83FB7E80, 0x83FA9B00, + 0x83F9B780, 0x83F8D400, 0x83F7F080, + 0x83F70D00, 0x83F62980, 0x83F54600, + 0x83F46280, 0x83F37F00, 0x83F29B80, + 0x83F1B800, 0x83F0D480, 0x83EFF100, + 0x83EF0D80, 0x83EE2A00, 0x83ED4680, + 0x83EC6300, 0x83EB7F80, 0x83EA9C00, + 0x83E9B880, 0x83E8D500, 0x83E7F180, + 0x83E70E00, 0x83E62A80, 0x83E54700, + 0x83E46380, 0x83E38000, 0x83E29C80, + 0x83E1B900, 0x83E0D580, 0x83DFF200, + 0x83DF0E80, 0x83DE2B00, 0x83DD4780, + 0x83DC6400, 0x83DB8080, 0x83DA9D00, + 0x83D9B980, 0x83D8D600, 0x83D7F280, + 0x83D70F00, 0x83D62B80, 0x83D54800, + 0x83D46480, 0x83D38100, 0x83D29D80, + 0x83D1BA00, 0x83D0D680, 0x83CFF300, + 0x83CF0F80, 0x83CE2C00, 0x83CD4880, + 0x83CC6500, 0x83CB8180, 0x83CA9E00, + 0x83C9BA80, 0x83C8D700, 0x83C7F380, + 0x83C71000, 0x83C62C80, 0x83C54900, + 0x83C46580, 0x83C38200, 0x83C29E80, + 0x83C1BB00, 0x83C0D780, 0x83BFF400, + 0x83BF1080, 0x83BE2D00, 0x83BD4980, + 0x83BC6600, 0x83BB8280, 0x83BA9F00, + 0x83B9BB80, 0x83B8D800, 0x83B7F480, + 0x83B71100, 0x83B62D80, 0x83B54A00, + 0x83B46680, 0x83B38300, 0x83B29F80, + 0x83B1BC00, 0x83B0D880, 0x83AFF500, + 0x83AF1180, 0x83AE2E00, 0x83AD4A80, + 0x83AC6700, 0x83AB8380, 0x83AAA000, + 0x83A9BC80, 0x83A8D900, 0x83A7F580, + 0x83A71200, 0x83A62E80, 0x83A54B00, + 0x83A46780, 0x83A38400, 0x83A2A080, + 0x83A1BD00, 0x83A0D980, 0x839FF600, + 0x839F1280, 0x839E2F00, 0x839D4B80, + 0x839C6800, 0x839B8480, 0x839AA100, + 0x8399BD80, 0x8398DA00, 0x8397F680, + 0x83971300, 0x83962F80, 0x83954C00, + 0x83946880, 0x83938500, 0x8392A180, + 0x8391BE00, 0x8390DA80, 0x838FF700, + 0x838F1380, 0x838E3000, 0x838D4C80, + 0x838C6900, 0x838B8580, 0x838AA200, + 0x8389BE80, 0x8388DB00, 0x8387F780, + 0x83871400, 0x83863080, 0x83854D00, + 0x83846980, 0x83838600, 0x8382A280, + 0x8381BF00, 0x8380DB80, 0x837FF800, + 0x837F1480, 0x837E3100, 0x837D4D80, + 0x837C6A00, 0x837B8680, 0x837AA300, + 0x8379BF80, 0x8378DC00, 0x8377F880, + 0x83771500, 0x83763180, 0x83754E00, + 0x83746A80, 0x83738700, 0x8372A380, + 0x8371C000, 0x8370DC80, 0x836FF900, + 0x836F1580, 0x836E3200, 0x836D4E80, + 0x836C6B00, 0x836B8780, 0x836AA400, + 0x8369C080, 0x8368DD00, 0x8367F980, + 0x83671600, 0x83663280, 0x83654F00, + 0x83646B80, 0x83638800, 0x8362A480, + 0x8361C100, 0x8360DD80, 0x835FFA00, + 0x835F1680, 0x835E3300, 0x835D4F80, + 0x835C6C00, 0x835B8880, 0x835AA500, + 0x8359C180, 0x8358DE00, 0x8357FA80, + 0x83571700, 0x83563380, 0x83555000, + 0x83546C80, 0x83538900, 0x8352A580, + 0x8351C200, 0x8350DE80, 0x834FFB00, + 0x834F1780, 0x834E3400, 0x834D5080, + 0x834C6D00, 0x834B8980, 0x834AA600, + 0x8349C280, 0x8348DF00, 0x8347FB80, + 0x83471800, 0x83463480, 0x83455100, + 0x83446D80, 0x83438A00, 0x8342A680, + 0x8341C300, 0x8340DF80, 0x833FFC00, + 0x833F1880, 0x833E3500, 0x833D5180, + 0x833C6E00, 0x833B8A80, 0x833AA700, + 0x8339C380, 0x8338E000, 0x8337FC80, + 0x83371900, 0x83363580, 0x83355200, + 0x83346E80, 0x83338B00, 0x8332A780, + 0x8331C400, 0x8330E080, 0x832FFD00, + 0x832F1980, 0x832E3600, 0x832D5280, + 0x832C6F00, 0x832B8B80, 0x832AA800, + 0x8329C480, 0x8328E100, 0x8327FD80, + 0x83271A00, 0x83263680, 0x83255300, + 0x83246F80, 0x83238C00, 0x8322A880, + 0x8321C500, 0x8320E180, 0x831FFE00, + 0x831F1A80, 0x831E3700, 0x831D5380, + 0x831C7000, 0x831B8C80, 0x831AA900, + 0x8319C580, 0x8318E200, 0x8317FE80, + 0x83171B00, 0x83163780, 0x83155400, + 0x83147080, 0x83138D00, 0x8312A980, + 0x8311C600, 0x8310E280, 0x830FFF00, + 0x830F1B80, 0x830E3800, 0x830D5480, + 0x830C7100, 0x830B8D80, 0x830AAA00, + 0x8309C680, 0x8308E300, 0x8307FF80, + 0x83071C00, 0x83063880, 0x83055500, + 0x83047180, 0x83038E00, 0x8302AA80, + 0x8301C700, 0x8300E380, 0x83040000, + 0x83032880, 0x83025100, 0x83017980, + 0x8300A200, 0x82FFCA80, 0x82FEF300, + 0x82FE1B80, 0x82FD4400, 0x82FC6C80, + 0x82FB9500, 0x82FABD80, 0x82F9E600, + 0x82F90E80, 0x82F83700, 0x82F75F80, + 0x82F68800, 0x82F5B080, 0x82F4D900, + 0x82F40180, 0x82F32A00, 0x82F25280, + 0x82F17B00, 0x82F0A380, 0x82EFCC00, + 0x82EEF480, 0x82EE1D00, 0x82ED4580, + 0x82EC6E00, 0x82EB9680, 0x82EABF00, + 0x82E9E780, 0x82E91000, 0x82E83880, + 0x82E76100, 0x82E68980, 0x82E5B200, + 0x82E4DA80, 0x82E40300, 0x82E32B80, + 0x82E25400, 0x82E17C80, 0x82E0A500, + 0x82DFCD80, 0x82DEF600, 0x82DE1E80, + 0x82DD4700, 0x82DC6F80, 0x82DB9800, + 0x82DAC080, 0x82D9E900, 0x82D91180, + 0x82D83A00, 0x82D76280, 0x82D68B00, + 0x82D5B380, 0x82D4DC00, 0x82D40480, + 0x82D32D00, 0x82D25580, 0x82D17E00, + 0x82D0A680, 0x82CFCF00, 0x82CEF780, + 0x82CE2000, 0x82CD4880, 0x82CC7100, + 0x82CB9980, 0x82CAC200, 0x82C9EA80, + 0x82C91300, 0x82C83B80, 0x82C76400, + 0x82C68C80, 0x82C5B500, 0x82C4DD80, + 0x82C40600, 0x82C32E80, 0x82C25700, + 0x82C17F80, 0x82C0A800, 0x82BFD080, + 0x82BEF900, 0x82BE2180, 0x82BD4A00, + 0x82BC7280, 0x82BB9B00, 0x82BAC380, + 0x82B9EC00, 0x82B91480, 0x82B83D00, + 0x82B76580, 0x82B68E00, 0x82B5B680, + 0x82B4DF00, 0x82B40780, 0x82B33000, + 0x82B25880, 0x82B18100, 0x82B0A980, + 0x82AFD200, 0x82AEFA80, 0x82AE2300, + 0x82AD4B80, 0x82AC7400, 0x82AB9C80, + 0x82AAC500, 0x82A9ED80, 0x82A91600, + 0x82A83E80, 0x82A76700, 0x82A68F80, + 0x82A5B800, 0x82A4E080, 0x82A40900, + 0x82A33180, 0x82A25A00, 0x82A18280, + 0x82A0AB00, 0x829FD380, 0x829EFC00, + 0x829E2480, 0x829D4D00, 0x829C7580, + 0x829B9E00, 0x829AC680, 0x8299EF00, + 0x82991780, 0x82984000, 0x82976880, + 0x82969100, 0x8295B980, 0x8294E200, + 0x82940A80, 0x82933300, 0x82925B80, + 0x82918400, 0x8290AC80, 0x828FD500, + 0x828EFD80, 0x828E2600, 0x828D4E80, + 0x828C7700, 0x828B9F80, 0x828AC800, + 0x8289F080, 0x82891900, 0x82884180, + 0x82876A00, 0x82869280, 0x8285BB00, + 0x8284E380, 0x82840C00, 0x82833480, + 0x82825D00, 0x82818580, 0x8280AE00, + 0x827FD680, 0x827EFF00, 0x827E2780, + 0x827D5000, 0x827C7880, 0x827BA100, + 0x827AC980, 0x8279F200, 0x82791A80, + 0x82784300, 0x82776B80, 0x82769400, + 0x8275BC80, 0x8274E500, 0x82740D80, + 0x82733600, 0x82725E80, 0x82718700, + 0x8270AF80, 0x826FD800, 0x826F0080, + 0x826E2900, 0x826D5180, 0x826C7A00, + 0x826BA280, 0x826ACB00, 0x8269F380, + 0x82691C00, 0x82684480, 0x82676D00, + 0x82669580, 0x8265BE00, 0x8264E680, + 0x82640F00, 0x82633780, 0x82626000, + 0x82618880, 0x8260B100, 0x825FD980, + 0x825F0200, 0x825E2A80, 0x825D5300, + 0x825C7B80, 0x825BA400, 0x825ACC80, + 0x8259F500, 0x82591D80, 0x82584600, + 0x82576E80, 0x82569700, 0x8255BF80, + 0x8254E800, 0x82541080, 0x82533900, + 0x82526180, 0x82518A00, 0x8250B280, + 0x824FDB00, 0x824F0380, 0x824E2C00, + 0x824D5480, 0x824C7D00, 0x824BA580, + 0x824ACE00, 0x8249F680, 0x82491F00, + 0x82484780, 0x82477000, 0x82469880, + 0x8245C100, 0x8244E980, 0x82441200, + 0x82433A80, 0x82426300, 0x82418B80, + 0x8240B400, 0x823FDC80, 0x823F0500, + 0x823E2D80, 0x823D5600, 0x823C7E80, + 0x823BA700, 0x823ACF80, 0x8239F800, + 0x82392080, 0x82384900, 0x82377180, + 0x82369A00, 0x8235C280, 0x8234EB00, + 0x82341380, 0x82333C00, 0x82326480, + 0x82318D00, 0x8230B580, 0x822FDE00, + 0x822F0680, 0x822E2F00, 0x822D5780, + 0x822C8000, 0x822BA880, 0x822AD100, + 0x8229F980, 0x82292200, 0x82284A80, + 0x82277300, 0x82269B80, 0x8225C400, + 0x8224EC80, 0x82241500, 0x82233D80, + 0x82226600, 0x82218E80, 0x8220B700, + 0x821FDF80, 0x821F0800, 0x821E3080, + 0x821D5900, 0x821C8180, 0x821BAA00, + 0x821AD280, 0x8219FB00, 0x82192380, + 0x82184C00, 0x82177480, 0x82169D00, + 0x8215C580, 0x8214EE00, 0x82141680, + 0x82133F00, 0x82126780, 0x82119000, + 0x8210B880, 0x820FE100, 0x820F0980, + 0x820E3200, 0x820D5A80, 0x820C8300, + 0x820BAB80, 0x820AD400, 0x8209FC80, + 0x82092500, 0x82084D80, 0x82077600, + 0x82069E80, 0x8205C700, 0x8204EF80, + 0x82041800, 0x82034080, 0x82026900, + 0x82019180, 0x8200BA00, 0x81FFE280, + 0x81FF0B00, 0x81FE3380, 0x81FD5C00, + 0x81FC8480, 0x81FBAD00, 0x81FAD580, + 0x81F9FE00, 0x81F92680, 0x81F84F00, + 0x81F77780, 0x81F6A000, 0x81F5C880, + 0x81F4F100, 0x81F41980, 0x81F34200, + 0x81F26A80, 0x81F19300, 0x81F0BB80, + 0x81EFE400, 0x81EF0C80, 0x81EE3500, + 0x81ED5D80, 0x81EC8600, 0x81EBAE80, + 0x81EAD700, 0x81E9FF80, 0x81E92800, + 0x81E85080, 0x81E77900, 0x81E6A180, + 0x81E5CA00, 0x81E4F280, 0x81E41B00, + 0x81E34380, 0x81E26C00, 0x81E19480, + 0x81E0BD00, 0x81DFE580, 0x81DF0E00, + 0x81DE3680, 0x81DD5F00, 0x81DC8780, + 0x81DBB000, 0x81DAD880, 0x81DA0100, + 0x81D92980, 0x81D85200, 0x81D77A80, + 0x81D6A300, 0x81D5CB80, 0x81D4F400, + 0x81D41C80, 0x81D34500, 0x81D26D80, + 0x81D19600, 0x81D0BE80, 0x81CFE700, + 0x81CF0F80, 0x81CE3800, 0x81CD6080, + 0x81CC8900, 0x81CBB180, 0x81CADA00, + 0x81CA0280, 0x81C92B00, 0x81C85380, + 0x81C77C00, 0x81C6A480, 0x81C5CD00, + 0x81C4F580, 0x81C41E00, 0x81C34680, + 0x81C26F00, 0x81C19780, 0x81C0C000, + 0x81BFE880, 0x81BF1100, 0x81BE3980, + 0x81BD6200, 0x81BC8A80, 0x81BBB300, + 0x81BADB80, 0x81BA0400, 0x81B92C80, + 0x81B85500, 0x81B77D80, 0x81B6A600, + 0x81B5CE80, 0x81B4F700, 0x81B41F80, + 0x81B34800, 0x81B27080, 0x81B19900, + 0x81B0C180, 0x81AFEA00, 0x81AF1280, + 0x81AE3B00, 0x81AD6380, 0x81AC8C00, + 0x81ABB480, 0x81AADD00, 0x81AA0580, + 0x81A92E00, 0x81A85680, 0x81A77F00, + 0x81A6A780, 0x81A5D000, 0x81A4F880, + 0x81A42100, 0x81A34980, 0x81A27200, + 0x81A19A80, 0x81A0C300, 0x819FEB80, + 0x819F1400, 0x819E3C80, 0x819D6500, + 0x819C8D80, 0x819BB600, 0x819ADE80, + 0x819A0700, 0x81992F80, 0x81985800, + 0x81978080, 0x8196A900, 0x8195D180, + 0x8194FA00, 0x81942280, 0x81934B00, + 0x81927380, 0x81919C00, 0x8190C480, + 0x818FED00, 0x818F1580, 0x818E3E00, + 0x818D6680, 0x818C8F00, 0x818BB780, + 0x818AE000, 0x818A0880, 0x81893100, + 0x81885980, 0x81878200, 0x8186AA80, + 0x8185D300, 0x8184FB80, 0x81842400, + 0x81834C80, 0x81827500, 0x81819D80, + 0x8180C600, 0x817FEE80, 0x817F1700, + 0x817E3F80, 0x817D6800, 0x817C9080, + 0x817BB900, 0x817AE180, 0x817A0A00, + 0x81793280, 0x81785B00, 0x81778380, + 0x8176AC00, 0x8175D480, 0x8174FD00, + 0x81742580, 0x81734E00, 0x81727680, + 0x81719F00, 0x8170C780, 0x816FF000, + 0x816F1880, 0x816E4100, 0x816D6980, + 0x816C9200, 0x816BBA80, 0x816AE300, + 0x816A0B80, 0x81693400, 0x81685C80, + 0x81678500, 0x8166AD80, 0x8165D600, + 0x8164FE80, 0x81642700, 0x81634F80, + 0x81627800, 0x8161A080, 0x8160C900, + 0x815FF180, 0x815F1A00, 0x815E4280, + 0x815D6B00, 0x815C9380, 0x815BBC00, + 0x815AE480, 0x815A0D00, 0x81593580, + 0x81585E00, 0x81578680, 0x8156AF00, + 0x8155D780, 0x81550000, 0x81542880, + 0x81535100, 0x81527980, 0x8151A200, + 0x8150CA80, 0x814FF300, 0x814F1B80, + 0x814E4400, 0x814D6C80, 0x814C9500, + 0x814BBD80, 0x814AE600, 0x814A0E80, + 0x81493700, 0x81485F80, 0x81478800, + 0x8146B080, 0x8145D900, 0x81450180, + 0x81442A00, 0x81435280, 0x81427B00, + 0x8141A380, 0x8140CC00, 0x813FF480, + 0x813F1D00, 0x813E4580, 0x813D6E00, + 0x813C9680, 0x813BBF00, 0x813AE780, + 0x813A1000, 0x81393880, 0x81386100, + 0x81378980, 0x8136B200, 0x8135DA80, + 0x81350300, 0x81342B80, 0x81335400, + 0x81327C80, 0x8131A500, 0x8130CD80, + 0x812FF600, 0x812F1E80, 0x812E4700, + 0x812D6F80, 0x812C9800, 0x812BC080, + 0x812AE900, 0x812A1180, 0x81293A00, + 0x81286280, 0x81278B00, 0x8126B380, + 0x8125DC00, 0x81250480, 0x81242D00, + 0x81235580, 0x81227E00, 0x8121A680, + 0x8120CF00, 0x811FF780, 0x811F2000, + 0x811E4880, 0x811D7100, 0x811C9980, + 0x811BC200, 0x811AEA80, 0x811A1300, + 0x81193B80, 0x81186400, 0x81178C80, + 0x8116B500, 0x8115DD80, 0x81150600, + 0x81142E80, 0x81135700, 0x81127F80, + 0x8111A800, 0x8110D080, 0x810FF900, + 0x810F2180, 0x810E4A00, 0x810D7280, + 0x810C9B00, 0x810BC380, 0x810AEC00, + 0x810A1480, 0x81093D00, 0x81086580, + 0x81078E00, 0x8106B680, 0x8105DF00, + 0x81050780, 0x81043000, 0x81035880, + 0x81028100, 0x8101A980, 0x8100D200, + 0x80FFFA80, 0x80FF2300, 0x80FE4B80, + 0x80FD7400, 0x80FC9C80, 0x80FBC500, + 0x80FAED80, 0x80FA1600, 0x80F93E80, + 0x80F86700, 0x80F78F80, 0x80F6B800, + 0x80F5E080, 0x80F50900, 0x80F43180, + 0x80F35A00, 0x80F28280, 0x80F1AB00, + 0x80F0D380, 0x80EFFC00, 0x80EF2480, + 0x80EE4D00, 0x80ED7580, 0x80EC9E00, + 0x80EBC680, 0x80EAEF00, 0x80EA1780, + 0x80E94000, 0x80E86880, 0x80E79100, + 0x80E6B980, 0x80E5E200, 0x80E50A80, + 0x80E43300, 0x80E35B80, 0x80E28400, + 0x80E1AC80, 0x80E0D500, 0x80DFFD80, + 0x80DF2600, 0x80DE4E80, 0x80DD7700, + 0x80DC9F80, 0x80DBC800, 0x80DAF080, + 0x80DA1900, 0x80D94180, 0x80D86A00, + 0x80D79280, 0x80D6BB00, 0x80D5E380, + 0x80D50C00, 0x80D43480, 0x80D35D00, + 0x80D28580, 0x80D1AE00, 0x80D0D680, + 0x80CFFF00, 0x80CF2780, 0x80CE5000, + 0x80CD7880, 0x80CCA100, 0x80CBC980, + 0x80CAF200, 0x80CA1A80, 0x80C94300, + 0x80C86B80, 0x80C79400, 0x80C6BC80, + 0x80C5E500, 0x80C50D80, 0x80C43600, + 0x80C35E80, 0x80C28700, 0x80C1AF80, + 0x80C0D800, 0x80C00080, 0x80BF2900, + 0x80BE5180, 0x80BD7A00, 0x80BCA280, + 0x80BBCB00, 0x80BAF380, 0x80BA1C00, + 0x80B94480, 0x80B86D00, 0x80B79580, + 0x80B6BE00, 0x80B5E680, 0x80B50F00, + 0x80B43780, 0x80B36000, 0x80B28880, + 0x80B1B100, 0x80B0D980, 0x80B00200, + 0x80AF2A80, 0x80AE5300, 0x80AD7B80, + 0x80ACA400, 0x80ABCC80, 0x80AAF500, + 0x80AA1D80, 0x80A94600, 0x80A86E80, + 0x80A79700, 0x80A6BF80, 0x80A5E800, + 0x80A51080, 0x80A43900, 0x80A36180, + 0x80A28A00, 0x80A1B280, 0x80A0DB00, + 0x80A00380, 0x809F2C00, 0x809E5480, + 0x809D7D00, 0x809CA580, 0x809BCE00, + 0x809AF680, 0x809A1F00, 0x80994780, + 0x80987000, 0x80979880, 0x8096C100, + 0x8095E980, 0x80951200, 0x80943A80, + 0x80936300, 0x80928B80, 0x8091B400, + 0x8090DC80, 0x80900500, 0x808F2D80, + 0x808E5600, 0x808D7E80, 0x808CA700, + 0x808BCF80, 0x808AF800, 0x808A2080, + 0x80894900, 0x80887180, 0x80879A00, + 0x8086C280, 0x8085EB00, 0x80851380, + 0x80843C00, 0x80836480, 0x80828D00, + 0x8081B580, 0x8080DE00, 0x80800680, + 0x807F2F00, 0x807E5780, 0x807D8000, + 0x807CA880, 0x807BD100, 0x807AF980, + 0x807A2200, 0x80794A80, 0x80787300, + 0x80779B80, 0x8076C400, 0x8075EC80, + 0x80751500, 0x80743D80, 0x80736600, + 0x80728E80, 0x8071B700, 0x8070DF80, + 0x80700800, 0x806F3080, 0x806E5900, + 0x806D8180, 0x806CAA00, 0x806BD280, + 0x806AFB00, 0x806A2380, 0x80694C00, + 0x80687480, 0x80679D00, 0x8066C580, + 0x8065EE00, 0x80651680, 0x80643F00, + 0x80636780, 0x80629000, 0x8061B880, + 0x8060E100, 0x80600980, 0x805F3200, + 0x805E5A80, 0x805D8300, 0x805CAB80, + 0x805BD400, 0x805AFC80, 0x805A2500, + 0x80594D80, 0x80587600, 0x80579E80, + 0x8056C700, 0x8055EF80, 0x80551800, + 0x80544080, 0x80536900, 0x80529180, + 0x8051BA00, 0x8050E280, 0x80500B00, + 0x804F3380, 0x804E5C00, 0x804D8480, + 0x804CAD00, 0x804BD580, 0x804AFE00, + 0x804A2680, 0x80494F00, 0x80487780, + 0x8047A000, 0x8046C880, 0x8045F100, + 0x80451980, 0x80444200, 0x80436A80, + 0x80429300, 0x8041BB80, 0x8040E400, + 0x80400C80, 0x803F3500, 0x803E5D80, + 0x803D8600, 0x803CAE80, 0x803BD700, + 0x803AFF80, 0x803A2800, 0x80395080, + 0x80387900, 0x8037A180, 0x8036CA00, + 0x8035F280, 0x80351B00, 0x80344380, + 0x80336C00, 0x80329480, 0x8031BD00, + 0x8030E580, 0x80300E00, 0x802F3680, + 0x802E5F00, 0x802D8780, 0x802CB000, + 0x802BD880, 0x802B0100, 0x802A2980, + 0x80295200, 0x80287A80, 0x8027A300, + 0x8026CB80, 0x8025F400, 0x80251C80, + 0x80244500, 0x80236D80, 0x80229600, + 0x8021BE80, 0x8020E700, 0x80200F80, + 0x801F3800, 0x801E6080, 0x801D8900, + 0x801CB180, 0x801BDA00, 0x801B0280, + 0x801A2B00, 0x80195380, 0x80187C00, + 0x8017A480, 0x8016CD00, 0x8015F580, + 0x80151E00, 0x80144680, 0x80136F00, + 0x80129780, 0x8011C000, 0x8010E880, + 0x80101100, 0x800F3980, 0x800E6200, + 0x800D8A80, 0x800CB300, 0x800BDB80, + 0x800B0400, 0x800A2C80, 0x80095500, + 0x80087D80, 0x8007A600, 0x8006CE80, + 0x8005F700, 0x80051F80, 0x80044800, + 0x80037080, 0x80029900, 0x8001C180, + 0x8000EA00, 0x80001280, 0x7FFF3B00, + 0x7FFE6380, 0x7FFD8C00, 0x7FFCB480, + 0x7FFBDD00, 0x7FFB0580, 0x7FFA2E00, + 0x7FF95680, 0x7FF87F00, 0x7FF7A780, + 0x7FF6D000, 0x7FF5F880, 0x7FF52100, + 0x7FF44980, 0x7FF37200, 0x7FF29A80, + 0x7FF1C300, 0x7FF0EB80, 0x7FF01400, + 0x7FEF3C80, 0x7FEE6500, 0x7FED8D80, + 0x7FECB600, 0x7FEBDE80, 0x7FEB0700, + 0x7FEA2F80, 0x7FE95800, 0x7FE88080, + 0x7FE7A900, 0x7FE6D180, 0x7FE5FA00, + 0x7FE52280, 0x7FE44B00, 0x7FE37380, + 0x7FE29C00, 0x7FE1C480, 0x7FE0ED00, + 0x7FE01580, 0x7FDF3E00, 0x7FDE6680, + 0x7FDD8F00, 0x7FDCB780, 0x7FDBE000, + 0x7FDB0880, 0x7FDA3100, 0x7FD95980, + 0x7FD88200, 0x7FD7AA80, 0x7FD6D300, + 0x7FD5FB80, 0x7FD52400, 0x7FD44C80, + 0x7FD37500, 0x7FD29D80, 0x7FD1C600, + 0x7FD0EE80, 0x7FD01700, 0x7FCF3F80, + 0x7FCE6800, 0x7FCD9080, 0x7FCCB900, + 0x7FCBE180, 0x7FCB0A00, 0x7FCA3280, + 0x7FC95B00, 0x7FC88380, 0x7FC7AC00, + 0x7FC6D480, 0x7FC5FD00, 0x7FC52580, + 0x7FC44E00, 0x7FC37680, 0x7FC29F00, + 0x7FC1C780, 0x7FC0F000, 0x7FC01880, + 0x7FBF4100, 0x7FBE6980, 0x7FBD9200, + 0x7FBCBA80, 0x7FBBE300, 0x7FBB0B80, + 0x7FBA3400, 0x7FB95C80, 0x7FB88500, + 0x7FB7AD80, 0x7FB6D600, 0x7FB5FE80, + 0x7FB52700, 0x7FB44F80, 0x7FB37800, + 0x7FB2A080, 0x7FB1C900, 0x7FB0F180, + 0x7FB01A00, 0x7FAF4280, 0x7FAE6B00, + 0x7FAD9380, 0x7FACBC00, 0x7FABE480, + 0x7FAB0D00, 0x7FAA3580, 0x7FA95E00, + 0x7FA88680, 0x7FA7AF00, 0x7FA6D780, + 0x7FA60000, 0x7FA52880, 0x7FA45100, + 0x7FA37980, 0x7FA2A200, 0x7FA1CA80, + 0x7FA0F300, 0x7FA01B80, 0x7F9F4400, + 0x7F9E6C80, 0x7F9D9500, 0x7F9CBD80, + 0x7F9BE600, 0x7F9B0E80, 0x7F9A3700, + 0x7F995F80, 0x7F988800, 0x7F97B080, + 0x7F96D900, 0x7F960180, 0x7F952A00, + 0x7F945280, 0x7F937B00, 0x7F92A380, + 0x7F91CC00, 0x7F90F480, 0x7F901D00, + 0x7F8F4580, 0x7F8E6E00, 0x7F8D9680, + 0x7F8CBF00, 0x7F8BE780, 0x7F8B1000, + 0x7F8A3880, 0x7F896100, 0x7F888980, + 0x7F87B200, 0x7F86DA80, 0x7F860300, + 0x7F852B80, 0x7F845400, 0x7F837C80, + 0x7F82A500, 0x7F81CD80, 0x7F80F600, + 0x7F801E80, 0x7F7F4700, 0x7F7E6F80, + 0x7F7D9800, 0x7F7CC080, 0x7F7BE900, + 0x7F7B1180, 0x7F7A3A00, 0x7F796280, + 0x7F788B00, 0x7F77B380, 0x7F76DC00, + 0x7F760480, 0x7F752D00, 0x7F745580, + 0x7F737E00, 0x7F72A680, 0x7F71CF00, + 0x7F70F780, 0x7F702000, 0x7F6F4880, + 0x7F6E7100, 0x7F6D9980, 0x7F6CC200, + 0x7F6BEA80, 0x7F6B1300, 0x7F6A3B80, + 0x7F696400, 0x7F688C80, 0x7F67B500, + 0x7F66DD80, 0x7F660600, 0x7F652E80, + 0x7F645700, 0x7F637F80, 0x7F62A800, + 0x7F61D080, 0x7F60F900, 0x7F602180, + 0x7F5F4A00, 0x7F5E7280, 0x7F5D9B00, + 0x7F5CC380, 0x7F5BEC00, 0x7F5B1480, + 0x7F5A3D00, 0x7F596580, 0x7F588E00, + 0x7F57B680, 0x7F56DF00, 0x7F560780, + 0x7F553000, 0x7F545880, 0x7F538100, + 0x7F52A980, 0x7F51D200, 0x7F50FA80, + 0x7F502300, 0x7F4F4B80, 0x7F4E7400, + 0x7F4D9C80, 0x7F4CC500, 0x7F4BED80, + 0x7F4B1600, 0x7F4A3E80, 0x7F496700, + 0x7F488F80, 0x7F47B800, 0x7F46E080, + 0x7F460900, 0x7F453180, 0x7F445A00, + 0x7F438280, 0x7F42AB00, 0x7F41D380, + 0x7F40FC00, 0x7F402480, 0x7F3F4D00, + 0x7F3E7580, 0x7F3D9E00, 0x7F3CC680, + 0x7F3BEF00, 0x7F3B1780, 0x7F3A4000, + 0x7F396880, 0x7F389100, 0x7F37B980, + 0x7F36E200, 0x7F360A80, 0x7F353300, + 0x7F345B80, 0x7F338400, 0x7F32AC80, + 0x7F31D500, 0x7F30FD80, 0x7F302600, + 0x7F2F4E80, 0x7F2E7700, 0x7F2D9F80, + 0x7F2CC800, 0x7F2BF080, 0x7F2B1900, + 0x7F2A4180, 0x7F296A00, 0x7F289280, + 0x7F27BB00, 0x7F26E380, 0x7F260C00, + 0x7F253480, 0x7F245D00, 0x7F238580, + 0x7F22AE00, 0x7F21D680, 0x7F20FF00, + 0x7F202780, 0x7F1F5000, 0x7F1E7880, + 0x7F1DA100, 0x7F1CC980, 0x7F1BF200, + 0x7F1B1A80, 0x7F1A4300, 0x7F196B80, + 0x7F189400, 0x7F17BC80, 0x7F16E500, + 0x7F160D80, 0x7F153600, 0x7F145E80, + 0x7F138700, 0x7F12AF80, 0x7F11D800, + 0x7F110080, 0x7F102900, 0x7F0F5180, + 0x7F0E7A00, 0x7F0DA280, 0x7F0CCB00, + 0x7F0BF380, 0x7F0B1C00, 0x7F0A4480, + 0x7F096D00, 0x7F089580, 0x7F07BE00, + 0x7F06E680, 0x7F060F00, 0x7F053780, + 0x7F046000, 0x7F038880, 0x7F02B100, + 0x7F01D980, 0x7F010200, 0x7F002A80, + 0x7EFF5300, 0x7EFE7B80, 0x7EFDA400, + 0x7EFCCC80, 0x7EFBF500, 0x7EFB1D80, + 0x7EFA4600, 0x7EF96E80, 0x7EF89700, + 0x7EF7BF80, 0x7EF6E800, 0x7EF61080, + 0x7EF53900, 0x7EF46180, 0x7EF38A00, + 0x7EF2B280, 0x7EF1DB00, 0x7EF10380, + 0x7EF02C00, 0x7EEF5480, 0x7EEE7D00, + 0x7EEDA580, 0x7EECCE00, 0x7EEBF680, + 0x7EEB1F00, 0x7EEA4780, 0x7EE97000, + 0x7EE89880, 0x7EE7C100, 0x7EE6E980, + 0x7EE61200, 0x7EE53A80, 0x7EE46300, + 0x7EE38B80, 0x7EE2B400, 0x7EE1DC80, + 0x7EE10500, 0x7EE02D80, 0x7EDF5600, + 0x7EDE7E80, 0x7EDDA700, 0x7EDCCF80, + 0x7EDBF800, 0x7EDB2080, 0x7EDA4900, + 0x7ED97180, 0x7ED89A00, 0x7ED7C280, + 0x7ED6EB00, 0x7ED61380, 0x7ED53C00, + 0x7ED46480, 0x7ED38D00, 0x7ED2B580, + 0x7ED1DE00, 0x7ED10680, 0x7ED02F00, + 0x7ECF5780, 0x7ECE8000, 0x7ECDA880, + 0x7ECCD100, 0x7ECBF980, 0x7ECB2200, + 0x7ECA4A80, 0x7EC97300, 0x7EC89B80, + 0x7EC7C400, 0x7EC6EC80, 0x7EC61500, + 0x7EC53D80, 0x7EC46600, 0x7EC38E80, + 0x7EC2B700, 0x7EC1DF80, 0x7EC10800, + 0x7EC03080, 0x7EBF5900, 0x7EBE8180, + 0x7EBDAA00, 0x7EBCD280, 0x7EBBFB00, + 0x7EBB2380, 0x7EBA4C00, 0x7EB97480, + 0x7EB89D00, 0x7EB7C580, 0x7EB6EE00, + 0x7EB61680, 0x7EB53F00, 0x7EB46780, + 0x7EB39000, 0x7EB2B880, 0x7EB1E100, + 0x7EB10980, 0x7EB03200, 0x7EAF5A80, + 0x7EAE8300, 0x7EADAB80, 0x7EACD400, + 0x7EABFC80, 0x7EAB2500, 0x7EAA4D80, + 0x7EA97600, 0x7EA89E80, 0x7EA7C700, + 0x7EA6EF80, 0x7EA61800, 0x7EA54080, + 0x7EA46900, 0x7EA39180, 0x7EA2BA00, + 0x7EA1E280, 0x7EA10B00, 0x7EA03380, + 0x7E9F5C00, 0x7E9E8480, 0x7E9DAD00, + 0x7E9CD580, 0x7E9BFE00, 0x7E9B2680, + 0x7E9A4F00, 0x7E997780, 0x7E98A000, + 0x7E97C880, 0x7E96F100, 0x7E961980, + 0x7E954200, 0x7E946A80, 0x7E939300, + 0x7E92BB80, 0x7E91E400, 0x7E910C80, + 0x7E903500, 0x7E8F5D80, 0x7E8E8600, + 0x7E8DAE80, 0x7E8CD700, 0x7E8BFF80, + 0x7E8B2800, 0x7E8A5080, 0x7E897900, + 0x7E88A180, 0x7E87CA00, 0x7E86F280, + 0x7E861B00, 0x7E854380, 0x7E846C00, + 0x7E839480, 0x7E82BD00, 0x7E81E580, + 0x7E810E00, 0x7E803680, 0x7E7F5F00, + 0x7E7E8780, 0x7E7DB000, 0x7E7CD880, + 0x7E7C0100, 0x7E7B2980, 0x7E7A5200, + 0x7E797A80, 0x7E78A300, 0x7E77CB80, + 0x7E76F400, 0x7E761C80, 0x7E754500, + 0x7E746D80, 0x7E739600, 0x7E72BE80, + 0x7E71E700, 0x7E710F80, 0x7E703800, + 0x7E6F6080, 0x7E6E8900, 0x7E6DB180, + 0x7E6CDA00, 0x7E6C0280, 0x7E6B2B00, + 0x7E6A5380, 0x7E697C00, 0x7E68A480, + 0x7E67CD00, 0x7E66F580, 0x7E661E00, + 0x7E654680, 0x7E646F00, 0x7E639780, + 0x7E62C000, 0x7E61E880, 0x7E611100, + 0x7E603980, 0x7E5F6200, 0x7E5E8A80, + 0x7E5DB300, 0x7E5CDB80, 0x7E5C0400, + 0x7E5B2C80, 0x7E5A5500, 0x7E597D80, + 0x7E58A600, 0x7E57CE80, 0x7E56F700, + 0x7E561F80, 0x7E554800, 0x7E547080, + 0x7E539900, 0x7E52C180, 0x7E51EA00, + 0x7E511280, 0x7E503B00, 0x7E4F6380, + 0x7E4E8C00, 0x7E4DB480, 0x7E4CDD00, + 0x7E4C0580, 0x7E4B2E00, 0x7E4A5680, + 0x7E497F00, 0x7E48A780, 0x7E47D000, + 0x7E46F880, 0x7E462100, 0x7E454980, + 0x7E447200, 0x7E439A80, 0x7E42C300, + 0x7E41EB80, 0x7E411400, 0x7E403C80, + 0x7E3F6500, 0x7E3E8D80, 0x7E3DB600, + 0x7E3CDE80, 0x7E3C0700, 0x7E3B2F80, + 0x7E3A5800, 0x7E398080, 0x7E38A900, + 0x7E37D180, 0x7E36FA00, 0x7E362280, + 0x7E354B00, 0x7E347380, 0x7E339C00, + 0x7E32C480, 0x7E31ED00, 0x7E311580, + 0x7E303E00, 0x7E2F6680, 0x7E2E8F00, + 0x7E2DB780, 0x7E2CE000, 0x7E2C0880, + 0x7E2B3100, 0x7E2A5980, 0x7E298200, + 0x7E28AA80, 0x7E27D300, 0x7E26FB80, + 0x7E262400, 0x7E254C80, 0x7E247500, + 0x7E239D80, 0x7E22C600, 0x7E21EE80, + 0x7E211700, 0x7E203F80, 0x7E1F6800, + 0x7E1E9080, 0x7E1DB900, 0x7E1CE180, + 0x7E1C0A00, 0x7E1B3280, 0x7E1A5B00, + 0x7E198380, 0x7E18AC00, 0x7E17D480, + 0x7E16FD00, 0x7E162580, 0x7E154E00, + 0x7E147680, 0x7E139F00, 0x7E12C780, + 0x7E11F000, 0x7E111880, 0x7E104100, + 0x7E0F6980, 0x7E0E9200, 0x7E0DBA80, + 0x7E0CE300, 0x7E0C0B80, 0x7E0B3400, + 0x7E0A5C80, 0x7E098500, 0x7E08AD80, + 0x7E07D600, 0x7E06FE80, 0x7E062700, + 0x7E054F80, 0x7E047800, 0x7E03A080, + 0x7E02C900, 0x7E01F180, 0x7E011A00, + 0x7E004280, 0x7DFF6B00, 0x7DFE9380, + 0x7DFDBC00, 0x7DFCE480, 0x7DFC0D00, + 0x7DFB3580, 0x7DFA5E00, 0x7DF98680, + 0x7DF8AF00, 0x7DF7D780, 0x7DF70000, + 0x7DF62880, 0x7DF55100, 0x7DF47980, + 0x7DF3A200, 0x7DF2CA80, 0x7DF1F300, + 0x7DF11B80, 0x7DF04400, 0x7DEF6C80, + 0x7DEE9500, 0x7DEDBD80, 0x7DECE600, + 0x7DEC0E80, 0x7DEB3700, 0x7DEA5F80, + 0x7DE98800, 0x7DE8B080, 0x7DE7D900, + 0x7DE70180, 0x7DE62A00, 0x7DE55280, + 0x7DE47B00, 0x7DE3A380, 0x7DE2CC00, + 0x7DE1F480, 0x7DE11D00, 0x7DE04580, + 0x7DDF6E00, 0x7DDE9680, 0x7DDDBF00, + 0x7DDCE780, 0x7DDC1000, 0x7DDB3880, + 0x7DDA6100, 0x7DD98980, 0x7DD8B200, + 0x7DD7DA80, 0x7DD70300, 0x7DD62B80, + 0x7DD55400, 0x7DD47C80, 0x7DD3A500, + 0x7DD2CD80, 0x7DD1F600, 0x7DD11E80, + 0x7DD04700, 0x7DCF6F80, 0x7DCE9800, + 0x7DCDC080, 0x7DCCE900, 0x7DCC1180, + 0x7DCB3A00, 0x7DCA6280, 0x7DC98B00, + 0x7DC8B380, 0x7DC7DC00, 0x7DC70480, + 0x7DC62D00, 0x7DC55580, 0x7DC47E00, + 0x7DC3A680, 0x7DC2CF00, 0x7DC1F780, + 0x7DC12000, 0x7DC04880, 0x7DBF7100, + 0x7DBE9980, 0x7DBDC200, 0x7DBCEA80, + 0x7DBC1300, 0x7DBB3B80, 0x7DBA6400, + 0x7DB98C80, 0x7DB8B500, 0x7DB7DD80, + 0x7DB70600, 0x7DB62E80, 0x7DB55700, + 0x7DB47F80, 0x7DB3A800, 0x7DB2D080, + 0x7DB1F900, 0x7DB12180, 0x7DB04A00, + 0x7DAF7280, 0x7DAE9B00, 0x7DADC380, + 0x7DACEC00, 0x7DAC1480, 0x7DAB3D00, + 0x7DAA6580, 0x7DA98E00, 0x7DA8B680, + 0x7DA7DF00, 0x7DA70780, 0x7DA63000, + 0x7DA55880, 0x7DA48100, 0x7DA3A980, + 0x7DA2D200, 0x7DA1FA80, 0x7DA12300, + 0x7DA04B80, 0x7D9F7400, 0x7D9E9C80, + 0x7D9DC500, 0x7D9CED80, 0x7D9C1600, + 0x7D9B3E80, 0x7D9A6700, 0x7D998F80, + 0x7D98B800, 0x7D97E080, 0x7D970900, + 0x7D963180, 0x7D955A00, 0x7D948280, + 0x7D93AB00, 0x7D92D380, 0x7D91FC00, + 0x7D912480, 0x7D904D00, 0x7D8F7580, + 0x7D8E9E00, 0x7D8DC680, 0x7D8CEF00, + 0x7D8C1780, 0x7D8B4000, 0x7D8A6880, + 0x7D899100, 0x7D88B980, 0x7D87E200, + 0x7D870A80, 0x7D863300, 0x7D855B80, + 0x7D848400, 0x7D83AC80, 0x7D82D500, + 0x7D81FD80, 0x7D812600, 0x7D804E80, + 0x7D7F7700, 0x7D7E9F80, 0x7D7DC800, + 0x7D7CF080, 0x7D7C1900, 0x7D7B4180, + 0x7D7A6A00, 0x7D799280, 0x7D78BB00, + 0x7D77E380, 0x7D770C00, 0x7D763480, + 0x7D755D00, 0x7D748580, 0x7D73AE00, + 0x7D72D680, 0x7D71FF00, 0x7D712780, + 0x7D705000, 0x7D6F7880, 0x7D6EA100, + 0x7D6DC980, 0x7D6CF200, 0x7D6C1A80, + 0x7D6B4300, 0x7D6A6B80, 0x7D699400, + 0x7D68BC80, 0x7D67E500, 0x7D670D80, + 0x7D663600, 0x7D655E80, 0x7D648700, + 0x7D63AF80, 0x7D62D800, 0x7D620080, + 0x7D612900, 0x7D605180, 0x7D5F7A00, + 0x7D5EA280, 0x7D5DCB00, 0x7D5CF380, + 0x7D5C1C00, 0x7D5B4480, 0x7D5A6D00, + 0x7D599580, 0x7D58BE00, 0x7D57E680, + 0x7D570F00, 0x7D563780, 0x7D556000, + 0x7D548880, 0x7D53B100, 0x7D52D980, + 0x7D520200, 0x7D512A80, 0x7D505300, + 0x7D4F7B80, 0x7D4EA400, 0x7D4DCC80, + 0x7D4CF500, 0x7D4C1D80, 0x7D4B4600, + 0x7D4A6E80, 0x7D499700, 0x7D48BF80, + 0x7D47E800, 0x7D471080, 0x7D463900, + 0x7D456180, 0x7D448A00, 0x7D43B280, + 0x7D42DB00, 0x7D420380, 0x7D412C00, + 0x7D405480, 0x7D3F7D00, 0x7D3EA580, + 0x7D3DCE00, 0x7D3CF680, 0x7D3C1F00, + 0x7D3B4780, 0x7D3A7000, 0x7D399880, + 0x7D38C100, 0x7D37E980, 0x7D371200, + 0x7D363A80, 0x7D356300, 0x7D348B80, + 0x7D33B400, 0x7D32DC80, 0x7D320500, + 0x7D312D80, 0x7D305600, 0x7D2F7E80, + 0x7D2EA700, 0x7D2DCF80, 0x7D2CF800, + 0x7D2C2080, 0x7D2B4900, 0x7D2A7180, + 0x7D299A00, 0x7D28C280, 0x7D27EB00, + 0x7D271380, 0x7D263C00, 0x7D256480, + 0x7D248D00, 0x7D23B580, 0x7D22DE00, + 0x7D220680, 0x7D212F00, 0x7D205780, + 0x7D1F8000, 0x7D1EA880, 0x7D1DD100, + 0x7D1CF980, 0x7D1C2200, 0x7D1B4A80, + 0x7D1A7300, 0x7D199B80, 0x7D18C400, + 0x7D17EC80, 0x7D171500, 0x7D163D80, + 0x7D156600, 0x7D148E80, 0x7D13B700, + 0x7D12DF80, 0x7D120800, 0x7D113080, + 0x7D105900, 0x7D0F8180, 0x7D0EAA00, + 0x7D0DD280, 0x7D0CFB00, 0x7D0C2380, + 0x7D0B4C00, 0x7D0A7480, 0x7D099D00, + 0x7D08C580, 0x7D07EE00, 0x7D071680, + 0x7D063F00, 0x7D056780, 0x7D049000, + 0x7D03B880, 0x7D02E100, 0x7D020980, + 0x7D013200, 0x7D005A80, 0x7CFF8300, + 0x7CFEAB80, 0x7CFDD400, 0x7CFCFC80, + 0x7CFC2500, 0x7CFB4D80, 0x7CFA7600, + 0x7CF99E80, 0x7CF8C700, 0x7CF7EF80, + 0x7CF71800, 0x7CF64080, 0x7CF56900, + 0x7CF49180, 0x7CF3BA00, 0x7CF2E280, + 0x7CF20B00, 0x7CF13380, 0x7CF05C00, + 0x7CEF8480, 0x7CEEAD00, 0x7CEDD580, + 0x7CECFE00, 0x7CEC2680, 0x7CEB4F00, + 0x7CEA7780, 0x7CE9A000, 0x7CE8C880, + 0x7CE7F100, 0x7CE71980, 0x7CE64200, + 0x7CE56A80, 0x7CE49300, 0x7CE3BB80, + 0x7CE2E400, 0x7CE20C80, 0x7CE13500, + 0x7CE05D80, 0x7CDF8600, 0x7CDEAE80, + 0x7CDDD700, 0x7CDCFF80, 0x7CDC2800, + 0x7CDB5080, 0x7CDA7900, 0x7CD9A180, + 0x7CD8CA00, 0x7CD7F280, 0x7CD71B00, + 0x7CD64380, 0x7CD56C00, 0x7CD49480, + 0x7CD3BD00, 0x7CD2E580, 0x7CD20E00, + 0x7CD13680, 0x7CD05F00, 0x7CCF8780, + 0x7CCEB000, 0x7CCDD880, 0x7CCD0100, + 0x7CCC2980, 0x7CCB5200, 0x7CCA7A80, + 0x7CC9A300, 0x7CC8CB80, 0x7CC7F400, + 0x7CC71C80, 0x7CC64500, 0x7CC56D80, + 0x7CC49600, 0x7CC3BE80, 0x7CC2E700, + 0x7CC20F80, 0x7CC13800, 0x7CC06080, + 0x7CBF8900, 0x7CBEB180, 0x7CBDDA00, + 0x7CBD0280, 0x7CBC2B00, 0x7CBB5380, + 0x7CBA7C00, 0x7CB9A480, 0x7CB8CD00, + 0x7CB7F580, 0x7CB71E00, 0x7CB64680, + 0x7CB56F00, 0x7CB49780, 0x7CB3C000, + 0x7CB2E880, 0x7CB21100, 0x7CB13980, + 0x7CB06200, 0x7CAF8A80, 0x7CAEB300, + 0x7CADDB80, 0x7CAD0400, 0x7CAC2C80, + 0x7CAB5500, 0x7CAA7D80, 0x7CA9A600, + 0x7CA8CE80, 0x7CA7F700, 0x7CA71F80, + 0x7CA64800, 0x7CA57080, 0x7CA49900, + 0x7CA3C180, 0x7CA2EA00, 0x7CA21280, + 0x7CA13B00, 0x7CA06380, 0x7C9F8C00, + 0x7C9EB480, 0x7C9DDD00, 0x7C9D0580, + 0x7C9C2E00, 0x7C9B5680, 0x7C9A7F00, + 0x7C99A780, 0x7C98D000, 0x7C97F880, + 0x7C972100, 0x7C964980, 0x7C957200, + 0x7C949A80, 0x7C93C300, 0x7C92EB80, + 0x7C921400, 0x7C913C80, 0x7C906500, + 0x7C8F8D80, 0x7C8EB600, 0x7C8DDE80, + 0x7C8D0700, 0x7C8C2F80, 0x7C8B5800, + 0x7C8A8080, 0x7C89A900, 0x7C88D180, + 0x7C87FA00, 0x7C872280, 0x7C864B00, + 0x7C857380, 0x7C849C00, 0x7C83C480, + 0x7C82ED00, 0x7C821580, 0x7C813E00, + 0x7C806680, 0x7C7F8F00, 0x7C7EB780, + 0x7C7DE000, 0x7C7D0880, 0x7C7C3100, + 0x7C7B5980, 0x7C7A8200, 0x7C79AA80, + 0x7C78D300, 0x7C77FB80, 0x7C772400, + 0x7C764C80, 0x7C757500, 0x7C749D80, + 0x7C73C600, 0x7C72EE80, 0x7C721700, + 0x7C713F80, 0x7C706800, 0x7C6F9080, + 0x7C6EB900, 0x7C6DE180, 0x7C6D0A00, + 0x7C6C3280, 0x7C6B5B00, 0x7C6A8380, + 0x7C69AC00, 0x7C68D480, 0x7C67FD00, + 0x7C672580, 0x7C664E00, 0x7C657680, + 0x7C649F00, 0x7C63C780, 0x7C62F000, + 0x7C621880, 0x7C614100, 0x7C606980, + 0x7C5F9200, 0x7C5EBA80, 0x7C5DE300, + 0x7C5D0B80, 0x7C5C3400, 0x7C5B5C80, + 0x7C5A8500, 0x7C59AD80, 0x7C58D600, + 0x7C57FE80, 0x7C572700, 0x7C564F80, + 0x7C557800, 0x7C54A080, 0x7C53C900, + 0x7C52F180, 0x7C521A00, 0x7C514280, + 0x7C506B00, 0x7C4F9380, 0x7C4EBC00, + 0x7C4DE480, 0x7C4D0D00, 0x7C4C3580, + 0x7C4B5E00, 0x7C4A8680, 0x7C49AF00, + 0x7C48D780, 0x7C480000, 0x7C473380, + 0x7C466700, 0x7C459A80, 0x7C44CE00, + 0x7C440180, 0x7C433500, 0x7C426880, + 0x7C419C00, 0x7C40CF80, 0x7C400300, + 0x7C3F3680, 0x7C3E6A00, 0x7C3D9D80, + 0x7C3CD100, 0x7C3C0480, 0x7C3B3800, + 0x7C3A6B80, 0x7C399F00, 0x7C38D280, + 0x7C380600, 0x7C373980, 0x7C366D00, + 0x7C35A080, 0x7C34D400, 0x7C340780, + 0x7C333B00, 0x7C326E80, 0x7C31A200, + 0x7C30D580, 0x7C300900, 0x7C2F3C80, + 0x7C2E7000, 0x7C2DA380, 0x7C2CD700, + 0x7C2C0A80, 0x7C2B3E00, 0x7C2A7180, + 0x7C29A500, 0x7C28D880, 0x7C280C00, + 0x7C273F80, 0x7C267300, 0x7C25A680, + 0x7C24DA00, 0x7C240D80, 0x7C234100, + 0x7C227480, 0x7C21A800, 0x7C20DB80, + 0x7C200F00, 0x7C1F4280, 0x7C1E7600, + 0x7C1DA980, 0x7C1CDD00, 0x7C1C1080, + 0x7C1B4400, 0x7C1A7780, 0x7C19AB00, + 0x7C18DE80, 0x7C181200, 0x7C174580, + 0x7C167900, 0x7C15AC80, 0x7C14E000, + 0x7C141380, 0x7C134700, 0x7C127A80, + 0x7C11AE00, 0x7C10E180, 0x7C101500, + 0x7C0F4880, 0x7C0E7C00, 0x7C0DAF80, + 0x7C0CE300, 0x7C0C1680, 0x7C0B4A00, + 0x7C0A7D80, 0x7C09B100, 0x7C08E480, + 0x7C081800, 0x7C074B80, 0x7C067F00, + 0x7C05B280, 0x7C04E600, 0x7C041980, + 0x7C034D00, 0x7C028080, 0x7C01B400, + 0x7C00E780, 0x7C001B00, 0x7BFF4E80, + 0x7BFE8200, 0x7BFDB580, 0x7BFCE900, + 0x7BFC1C80, 0x7BFB5000, 0x7BFA8380, + 0x7BF9B700, 0x7BF8EA80, 0x7BF81E00, + 0x7BF75180, 0x7BF68500, 0x7BF5B880, + 0x7BF4EC00, 0x7BF41F80, 0x7BF35300, + 0x7BF28680, 0x7BF1BA00, 0x7BF0ED80, + 0x7BF02100, 0x7BEF5480, 0x7BEE8800, + 0x7BEDBB80, 0x7BECEF00, 0x7BEC2280, + 0x7BEB5600, 0x7BEA8980, 0x7BE9BD00, + 0x7BE8F080, 0x7BE82400, 0x7BE75780, + 0x7BE68B00, 0x7BE5BE80, 0x7BE4F200, + 0x7BE42580, 0x7BE35900, 0x7BE28C80, + 0x7BE1C000, 0x7BE0F380, 0x7BE02700, + 0x7BDF5A80, 0x7BDE8E00, 0x7BDDC180, + 0x7BDCF500, 0x7BDC2880, 0x7BDB5C00, + 0x7BDA8F80, 0x7BD9C300, 0x7BD8F680, + 0x7BD82A00, 0x7BD75D80, 0x7BD69100, + 0x7BD5C480, 0x7BD4F800, 0x7BD42B80, + 0x7BD35F00, 0x7BD29280, 0x7BD1C600, + 0x7BD0F980, 0x7BD02D00, 0x7BCF6080, + 0x7BCE9400, 0x7BCDC780, 0x7BCCFB00, + 0x7BCC2E80, 0x7BCB6200, 0x7BCA9580, + 0x7BC9C900, 0x7BC8FC80, 0x7BC83000, + 0x7BC76380, 0x7BC69700, 0x7BC5CA80, + 0x7BC4FE00, 0x7BC43180, 0x7BC36500, + 0x7BC29880, 0x7BC1CC00, 0x7BC0FF80, + 0x7BC03300, 0x7BBF6680, 0x7BBE9A00, + 0x7BBDCD80, 0x7BBD0100, 0x7BBC3480, + 0x7BBB6800, 0x7BBA9B80, 0x7BB9CF00, + 0x7BB90280, 0x7BB83600, 0x7BB76980, + 0x7BB69D00, 0x7BB5D080, 0x7BB50400, + 0x7BB43780, 0x7BB36B00, 0x7BB29E80, + 0x7BB1D200, 0x7BB10580, 0x7BB03900, + 0x7BAF6C80, 0x7BAEA000, 0x7BADD380, + 0x7BAD0700, 0x7BAC3A80, 0x7BAB6E00, + 0x7BAAA180, 0x7BA9D500, 0x7BA90880, + 0x7BA83C00, 0x7BA76F80, 0x7BA6A300, + 0x7BA5D680, 0x7BA50A00, 0x7BA43D80, + 0x7BA37100, 0x7BA2A480, 0x7BA1D800, + 0x7BA10B80, 0x7BA03F00, 0x7B9F7280, + 0x7B9EA600, 0x7B9DD980, 0x7B9D0D00, + 0x7B9C4080, 0x7B9B7400, 0x7B9AA780, + 0x7B99DB00, 0x7B990E80, 0x7B984200, + 0x7B977580, 0x7B96A900, 0x7B95DC80, + 0x7B951000, 0x7B944380, 0x7B937700, + 0x7B92AA80, 0x7B91DE00, 0x7B911180, + 0x7B904500, 0x7B8F7880, 0x7B8EAC00, + 0x7B8DDF80, 0x7B8D1300, 0x7B8C4680, + 0x7B8B7A00, 0x7B8AAD80, 0x7B89E100, + 0x7B891480, 0x7B884800, 0x7B877B80, + 0x7B86AF00, 0x7B85E280, 0x7B851600, + 0x7B844980, 0x7B837D00, 0x7B82B080, + 0x7B81E400, 0x7B811780, 0x7B804B00, + 0x7B7F7E80, 0x7B7EB200, 0x7B7DE580, + 0x7B7D1900, 0x7B7C4C80, 0x7B7B8000, + 0x7B7AB380, 0x7B79E700, 0x7B791A80, + 0x7B784E00, 0x7B778180, 0x7B76B500, + 0x7B75E880, 0x7B751C00, 0x7B744F80, + 0x7B738300, 0x7B72B680, 0x7B71EA00, + 0x7B711D80, 0x7B705100, 0x7B6F8480, + 0x7B6EB800, 0x7B6DEB80, 0x7B6D1F00, + 0x7B6C5280, 0x7B6B8600, 0x7B6AB980, + 0x7B69ED00, 0x7B692080, 0x7B685400, + 0x7B678780, 0x7B66BB00, 0x7B65EE80, + 0x7B652200, 0x7B645580, 0x7B638900, + 0x7B62BC80, 0x7B61F000, 0x7B612380, + 0x7B605700, 0x7B5F8A80, 0x7B5EBE00, + 0x7B5DF180, 0x7B5D2500, 0x7B5C5880, + 0x7B5B8C00, 0x7B5ABF80, 0x7B59F300, + 0x7B592680, 0x7B585A00, 0x7B578D80, + 0x7B56C100, 0x7B55F480, 0x7B552800, + 0x7B545B80, 0x7B538F00, 0x7B52C280, + 0x7B51F600, 0x7B512980, 0x7B505D00, + 0x7B4F9080, 0x7B4EC400, 0x7B4DF780, + 0x7B4D2B00, 0x7B4C5E80, 0x7B4B9200, + 0x7B4AC580, 0x7B49F900, 0x7B492C80, + 0x7B486000, 0x7B479380, 0x7B46C700, + 0x7B45FA80, 0x7B452E00, 0x7B446180, + 0x7B439500, 0x7B42C880, 0x7B41FC00, + 0x7B412F80, 0x7B406300, 0x7B3F9680, + 0x7B3ECA00, 0x7B3DFD80, 0x7B3D3100, + 0x7B3C6480, 0x7B3B9800, 0x7B3ACB80, + 0x7B39FF00, 0x7B393280, 0x7B386600, + 0x7B379980, 0x7B36CD00, 0x7B360080, + 0x7B353400, 0x7B346780, 0x7B339B00, + 0x7B32CE80, 0x7B320200, 0x7B313580, + 0x7B306900, 0x7B2F9C80, 0x7B2ED000, + 0x7B2E0380, 0x7B2D3700, 0x7B2C6A80, + 0x7B2B9E00, 0x7B2AD180, 0x7B2A0500, + 0x7B293880, 0x7B286C00, 0x7B279F80, + 0x7B26D300, 0x7B260680, 0x7B253A00, + 0x7B246D80, 0x7B23A100, 0x7B22D480, + 0x7B220800, 0x7B213B80, 0x7B206F00, + 0x7B1FA280, 0x7B1ED600, 0x7B1E0980, + 0x7B1D3D00, 0x7B1C7080, 0x7B1BA400, + 0x7B1AD780, 0x7B1A0B00, 0x7B193E80, + 0x7B187200, 0x7B17A580, 0x7B16D900, + 0x7B160C80, 0x7B154000, 0x7B147380, + 0x7B13A700, 0x7B12DA80, 0x7B120E00, + 0x7B114180, 0x7B107500, 0x7B0FA880, + 0x7B0EDC00, 0x7B0E0F80, 0x7B0D4300, + 0x7B0C7680, 0x7B0BAA00, 0x7B0ADD80, + 0x7B0A1100, 0x7B094480, 0x7B087800, + 0x7B07AB80, 0x7B06DF00, 0x7B061280, + 0x7B054600, 0x7B047980, 0x7B03AD00, + 0x7B02E080, 0x7B021400, 0x7B014780, + 0x7B007B00, 0x7AFFAE80, 0x7AFEE200, + 0x7AFE1580, 0x7AFD4900, 0x7AFC7C80, + 0x7AFBB000, 0x7AFAE380, 0x7AFA1700, + 0x7AF94A80, 0x7AF87E00, 0x7AF7B180, + 0x7AF6E500, 0x7AF61880, 0x7AF54C00, + 0x7AF47F80, 0x7AF3B300, 0x7AF2E680, + 0x7AF21A00, 0x7AF14D80, 0x7AF08100, + 0x7AEFB480, 0x7AEEE800, 0x7AEE1B80, + 0x7AED4F00, 0x7AEC8280, 0x7AEBB600, + 0x7AEAE980, 0x7AEA1D00, 0x7AE95080, + 0x7AE88400, 0x7AE7B780, 0x7AE6EB00, + 0x7AE61E80, 0x7AE55200, 0x7AE48580, + 0x7AE3B900, 0x7AE2EC80, 0x7AE22000, + 0x7AE15380, 0x7AE08700, 0x7ADFBA80, + 0x7ADEEE00, 0x7ADE2180, 0x7ADD5500, + 0x7ADC8880, 0x7ADBBC00, 0x7ADAEF80, + 0x7ADA2300, 0x7AD95680, 0x7AD88A00, + 0x7AD7BD80, 0x7AD6F100, 0x7AD62480, + 0x7AD55800, 0x7AD48B80, 0x7AD3BF00, + 0x7AD2F280, 0x7AD22600, 0x7AD15980, + 0x7AD08D00, 0x7ACFC080, 0x7ACEF400, + 0x7ACE2780, 0x7ACD5B00, 0x7ACC8E80, + 0x7ACBC200, 0x7ACAF580, 0x7ACA2900, + 0x7AC95C80, 0x7AC89000, 0x7AC7C380, + 0x7AC6F700, 0x7AC62A80, 0x7AC55E00, + 0x7AC49180, 0x7AC3C500, 0x7AC2F880, + 0x7AC22C00, 0x7AC15F80, 0x7AC09300, + 0x7ABFC680, 0x7ABEFA00, 0x7ABE2D80, + 0x7ABD6100, 0x7ABC9480, 0x7ABBC800, + 0x7ABAFB80, 0x7ABA2F00, 0x7AB96280, + 0x7AB89600, 0x7AB7C980, 0x7AB6FD00, + 0x7AB63080, 0x7AB56400, 0x7AB49780, + 0x7AB3CB00, 0x7AB2FE80, 0x7AB23200, + 0x7AB16580, 0x7AB09900, 0x7AAFCC80, + 0x7AAF0000, 0x7AAE3380, 0x7AAD6700, + 0x7AAC9A80, 0x7AABCE00, 0x7AAB0180, + 0x7AAA3500, 0x7AA96880, 0x7AA89C00, + 0x7AA7CF80, 0x7AA70300, 0x7AA63680, + 0x7AA56A00, 0x7AA49D80, 0x7AA3D100, + 0x7AA30480, 0x7AA23800, 0x7AA16B80, + 0x7AA09F00, 0x7A9FD280, 0x7A9F0600, + 0x7A9E3980, 0x7A9D6D00, 0x7A9CA080, + 0x7A9BD400, 0x7A9B0780, 0x7A9A3B00, + 0x7A996E80, 0x7A98A200, 0x7A97D580, + 0x7A970900, 0x7A963C80, 0x7A957000, + 0x7A94A380, 0x7A93D700, 0x7A930A80, + 0x7A923E00, 0x7A917180, 0x7A90A500, + 0x7A8FD880, 0x7A8F0C00, 0x7A8E3F80, + 0x7A8D7300, 0x7A8CA680, 0x7A8BDA00, + 0x7A8B0D80, 0x7A8A4100, 0x7A897480, + 0x7A88A800, 0x7A87DB80, 0x7A870F00, + 0x7A864280, 0x7A857600, 0x7A84A980, + 0x7A83DD00, 0x7A831080, 0x7A824400, + 0x7A817780, 0x7A80AB00, 0x7A7FDE80, + 0x7A7F1200, 0x7A7E4580, 0x7A7D7900, + 0x7A7CAC80, 0x7A7BE000, 0x7A7B1380, + 0x7A7A4700, 0x7A797A80, 0x7A78AE00, + 0x7A77E180, 0x7A771500, 0x7A764880, + 0x7A757C00, 0x7A74AF80, 0x7A73E300, + 0x7A731680, 0x7A724A00, 0x7A717D80, + 0x7A70B100, 0x7A6FE480, 0x7A6F1800, + 0x7A6E4B80, 0x7A6D7F00, 0x7A6CB280, + 0x7A6BE600, 0x7A6B1980, 0x7A6A4D00, + 0x7A698080, 0x7A68B400, 0x7A67E780, + 0x7A671B00, 0x7A664E80, 0x7A658200, + 0x7A64B580, 0x7A63E900, 0x7A631C80, + 0x7A625000, 0x7A618380, 0x7A60B700, + 0x7A5FEA80, 0x7A5F1E00, 0x7A5E5180, + 0x7A5D8500, 0x7A5CB880, 0x7A5BEC00, + 0x7A5B1F80, 0x7A5A5300, 0x7A598680, + 0x7A58BA00, 0x7A57ED80, 0x7A572100, + 0x7A565480, 0x7A558800, 0x7A54BB80, + 0x7A53EF00, 0x7A532280, 0x7A525600, + 0x7A518980, 0x7A50BD00, 0x7A4FF080, + 0x7A4F2400, 0x7A4E5780, 0x7A4D8B00, + 0x7A4CBE80, 0x7A4BF200, 0x7A4B2580, + 0x7A4A5900, 0x7A498C80, 0x7A48C000, + 0x7A47F380, 0x7A472700, 0x7A465A80, + 0x7A458E00, 0x7A44C180, 0x7A43F500, + 0x7A432880, 0x7A425C00, 0x7A418F80, + 0x7A40C300, 0x7A3FF680, 0x7A3F2A00, + 0x7A3E5D80, 0x7A3D9100, 0x7A3CC480, + 0x7A3BF800, 0x7A3B2B80, 0x7A3A5F00, + 0x7A399280, 0x7A38C600, 0x7A37F980, + 0x7A372D00, 0x7A366080, 0x7A359400, + 0x7A34C780, 0x7A33FB00, 0x7A332E80, + 0x7A326200, 0x7A319580, 0x7A30C900, + 0x7A2FFC80, 0x7A2F3000, 0x7A2E6380, + 0x7A2D9700, 0x7A2CCA80, 0x7A2BFE00, + 0x7A2B3180, 0x7A2A6500, 0x7A299880, + 0x7A28CC00, 0x7A27FF80, 0x7A273300, + 0x7A266680, 0x7A259A00, 0x7A24CD80, + 0x7A240100, 0x7A233480, 0x7A226800, + 0x7A219B80, 0x7A20CF00, 0x7A200280, + 0x7A1F3600, 0x7A1E6980, 0x7A1D9D00, + 0x7A1CD080, 0x7A1C0400, 0x7A1B3780, + 0x7A1A6B00, 0x7A199E80, 0x7A18D200, + 0x7A180580, 0x7A173900, 0x7A166C80, + 0x7A15A000, 0x7A14D380, 0x7A140700, + 0x7A133A80, 0x7A126E00, 0x7A11A180, + 0x7A10D500, 0x7A100880, 0x7A0F3C00, + 0x7A0E6F80, 0x7A0DA300, 0x7A0CD680, + 0x7A0C0A00, 0x7A0B3D80, 0x7A0A7100, + 0x7A09A480, 0x7A08D800, 0x7A080B80, + 0x7A073F00, 0x7A067280, 0x7A05A600, + 0x7A04D980, 0x7A040D00, 0x7A034080, + 0x7A027400, 0x7A01A780, 0x7A00DB00, + 0x7A000E80, 0x79FF4200, 0x79FE7580, + 0x79FDA900, 0x79FCDC80, 0x79FC1000, + 0x79FB4380, 0x79FA7700, 0x79F9AA80, + 0x79F8DE00, 0x79F81180, 0x79F74500, + 0x79F67880, 0x79F5AC00, 0x79F4DF80, + 0x79F41300, 0x79F34680, 0x79F27A00, + 0x79F1AD80, 0x79F0E100, 0x79F01480, + 0x79EF4800, 0x79EE7B80, 0x79EDAF00, + 0x79ECE280, 0x79EC1600, 0x79EB4980, + 0x79EA7D00, 0x79E9B080, 0x79E8E400, + 0x79E81780, 0x79E74B00, 0x79E67E80, + 0x79E5B200, 0x79E4E580, 0x79E41900, + 0x79E34C80, 0x79E28000, 0x79E1B380, + 0x79E0E700, 0x79E01A80, 0x79DF4E00, + 0x79DE8180, 0x79DDB500, 0x79DCE880, + 0x79DC1C00, 0x79DB4F80, 0x79DA8300, + 0x79D9B680, 0x79D8EA00, 0x79D81D80, + 0x79D75100, 0x79D68480, 0x79D5B800, + 0x79D4EB80, 0x79D41F00, 0x79D35280, + 0x79D28600, 0x79D1B980, 0x79D0ED00, + 0x79D02080, 0x79CF5400, 0x79CE8780, + 0x79CDBB00, 0x79CCEE80, 0x79CC2200, + 0x79CB5580, 0x79CA8900, 0x79C9BC80, + 0x79C8F000, 0x79C82380, 0x79C75700, + 0x79C68A80, 0x79C5BE00, 0x79C4F180, + 0x79C42500, 0x79C35880, 0x79C28C00, + 0x79C1BF80, 0x79C0F300, 0x79C02680, + 0x79BF5A00, 0x79BE8D80, 0x79BDC100, + 0x79BCF480, 0x79BC2800, 0x79BB5B80, + 0x79BA8F00, 0x79B9C280, 0x79B8F600, + 0x79B82980, 0x79B75D00, 0x79B69080, + 0x79B5C400, 0x79B4F780, 0x79B42B00, + 0x79B35E80, 0x79B29200, 0x79B1C580, + 0x79B0F900, 0x79B02C80, 0x79AF6000, + 0x79AE9380, 0x79ADC700, 0x79ACFA80, + 0x79AC2E00, 0x79AB6180, 0x79AA9500, + 0x79A9C880, 0x79A8FC00, 0x79A82F80, + 0x79A76300, 0x79A69680, 0x79A5CA00, + 0x79A4FD80, 0x79A43100, 0x79A36480, + 0x79A29800, 0x79A1CB80, 0x79A0FF00, + 0x79A03280, 0x799F6600, 0x799E9980, + 0x799DCD00, 0x799D0080, 0x799C3400, + 0x799B6780, 0x799A9B00, 0x7999CE80, + 0x79990200, 0x79983580, 0x79976900, + 0x79969C80, 0x7995D000, 0x79950380, + 0x79943700, 0x79936A80, 0x79929E00, + 0x7991D180, 0x79910500, 0x79903880, + 0x798F6C00, 0x798E9F80, 0x798DD300, + 0x798D0680, 0x798C3A00, 0x798B6D80, + 0x798AA100, 0x7989D480, 0x79890800, + 0x79883B80, 0x79876F00, 0x7986A280, + 0x7985D600, 0x79850980, 0x79843D00, + 0x79837080, 0x7982A400, 0x7981D780, + 0x79810B00, 0x79803E80, 0x797F7200, + 0x797EA580, 0x797DD900, 0x797D0C80, + 0x797C4000, 0x797B7380, 0x797AA700, + 0x7979DA80, 0x79790E00, 0x79784180, + 0x79777500, 0x7976A880, 0x7975DC00, + 0x79750F80, 0x79744300, 0x79737680, + 0x7972AA00, 0x7971DD80, 0x79711100, + 0x79704480, 0x796F7800, 0x796EAB80, + 0x796DDF00, 0x796D1280, 0x796C4600, + 0x796B7980, 0x796AAD00, 0x7969E080, + 0x79691400, 0x79684780, 0x79677B00, + 0x7966AE80, 0x7965E200, 0x79651580, + 0x79644900, 0x79637C80, 0x7962B000, + 0x7961E380, 0x79611700, 0x79604A80, + 0x795F7E00, 0x795EB180, 0x795DE500, + 0x795D1880, 0x795C4C00, 0x795B7F80, + 0x795AB300, 0x7959E680, 0x79591A00, + 0x79584D80, 0x79578100, 0x7956B480, + 0x7955E800, 0x79551B80, 0x79544F00, + 0x79538280, 0x7952B600, 0x7951E980, + 0x79511D00, 0x79505080, 0x794F8400, + 0x794EB780, 0x794DEB00, 0x794D1E80, + 0x794C5200, 0x794B8580, 0x794AB900, + 0x7949EC80, 0x79492000, 0x79485380, + 0x79478700, 0x7946BA80, 0x7945EE00, + 0x79452180, 0x79445500, 0x79438880, + 0x7942BC00, 0x7941EF80, 0x79412300, + 0x79405680, 0x793F8A00, 0x793EBD80, + 0x793DF100, 0x793D2480, 0x793C5800, + 0x793B8B80, 0x793ABF00, 0x7939F280, + 0x79392600, 0x79385980, 0x79378D00, + 0x7936C080, 0x7935F400, 0x79352780, + 0x79345B00, 0x79338E80, 0x7932C200, + 0x7931F580, 0x79312900, 0x79305C80, + 0x792F9000, 0x792EC380, 0x792DF700, + 0x792D2A80, 0x792C5E00, 0x792B9180, + 0x792AC500, 0x7929F880, 0x79292C00, + 0x79285F80, 0x79279300, 0x7926C680, + 0x7925FA00, 0x79252D80, 0x79246100, + 0x79239480, 0x7922C800, 0x7921FB80, + 0x79212F00, 0x79206280, 0x791F9600, + 0x791EC980, 0x791DFD00, 0x791D3080, + 0x791C6400, 0x791B9780, 0x791ACB00, + 0x7919FE80, 0x79193200, 0x79186580, + 0x79179900, 0x7916CC80, 0x79160000, + 0x79153380, 0x79146700, 0x79139A80, + 0x7912CE00, 0x79120180, 0x79113500, + 0x79106880, 0x790F9C00, 0x790ECF80, + 0x790E0300, 0x790D3680, 0x790C6A00, + 0x790B9D80, 0x790AD100, 0x790A0480, + 0x79093800, 0x79086B80, 0x79079F00, + 0x7906D280, 0x79060600, 0x79053980, + 0x79046D00, 0x7903A080, 0x7902D400, + 0x79020780, 0x79013B00, 0x79006E80, + 0x78FFA200, 0x78FED580, 0x78FE0900, + 0x78FD3C80, 0x78FC7000, 0x78FBA380, + 0x78FAD700, 0x78FA0A80, 0x78F93E00, + 0x78F87180, 0x78F7A500, 0x78F6D880, + 0x78F60C00, 0x78F53F80, 0x78F47300, + 0x78F3A680, 0x78F2DA00, 0x78F20D80, + 0x78F14100, 0x78F07480, 0x78EFA800, + 0x78EEDB80, 0x78EE0F00, 0x78ED4280, + 0x78EC7600, 0x78EBA980, 0x78EADD00, + 0x78EA1080, 0x78E94400, 0x78E87780, + 0x78E7AB00, 0x78E6DE80, 0x78E61200, + 0x78E54580, 0x78E47900, 0x78E3AC80, + 0x78E2E000, 0x78E21380, 0x78E14700, + 0x78E07A80, 0x78DFAE00, 0x78DEE180, + 0x78DE1500, 0x78DD4880, 0x78DC7C00, + 0x78DBAF80, 0x78DAE300, 0x78DA1680, + 0x78D94A00, 0x78D87D80, 0x78D7B100, + 0x78D6E480, 0x78D61800, 0x78D54B80, + 0x78D47F00, 0x78D3B280, 0x78D2E600, + 0x78D21980, 0x78D14D00, 0x78D08080, + 0x78CFB400, 0x78CEE780, 0x78CE1B00, + 0x78CD4E80, 0x78CC8200, 0x78CBB580, + 0x78CAE900, 0x78CA1C80, 0x78C95000, + 0x78C88380, 0x78C7B700, 0x78C6EA80, + 0x78C61E00, 0x78C55180, 0x78C48500, + 0x78C3B880, 0x78C2EC00, 0x78C21F80, + 0x78C15300, 0x78C08680, 0x78BFBA00, + 0x78BEED80, 0x78BE2100, 0x78BD5480, + 0x78BC8800, 0x78BBBB80, 0x78BAEF00, + 0x78BA2280, 0x78B95600, 0x78B88980, + 0x78B7BD00, 0x78B6F080, 0x78B62400, + 0x78B55780, 0x78B48B00, 0x78B3BE80, + 0x78B2F200, 0x78B22580, 0x78B15900, + 0x78B08C80, 0x78AFC000, 0x78AEF380, + 0x78AE2700, 0x78AD5A80, 0x78AC8E00, + 0x78ABC180, 0x78AAF500, 0x78AA2880, + 0x78A95C00, 0x78A88F80, 0x78A7C300, + 0x78A6F680, 0x78A62A00, 0x78A55D80, + 0x78A49100, 0x78A3C480, 0x78A2F800, + 0x78A22B80, 0x78A15F00, 0x78A09280, + 0x789FC600, 0x789EF980, 0x789E2D00, + 0x789D6080, 0x789C9400, 0x789BC780, + 0x789AFB00, 0x789A2E80, 0x78996200, + 0x78989580, 0x7897C900, 0x7896FC80, + 0x78963000, 0x78956380, 0x78949700, + 0x7893CA80, 0x7892FE00, 0x78923180, + 0x78916500, 0x78909880, 0x788FCC00, + 0x788EFF80, 0x788E3300, 0x788D6680, + 0x788C9A00, 0x788BCD80, 0x788B0100, + 0x788A3480, 0x78896800, 0x78889B80, + 0x7887CF00, 0x78870280, 0x78863600, + 0x78856980, 0x78849D00, 0x7883D080, + 0x78830400, 0x78823780, 0x78816B00, + 0x78809E80, 0x787FD200, 0x787F0580, + 0x787E3900, 0x787D6C80, 0x787CA000, + 0x787BD380, 0x787B0700, 0x787A3A80, + 0x78796E00, 0x7878A180, 0x7877D500, + 0x78770880, 0x78763C00, 0x78756F80, + 0x7874A300, 0x7873D680, 0x78730A00, + 0x78723D80, 0x78717100, 0x7870A480, + 0x786FD800, 0x786F0B80, 0x786E3F00, + 0x786D7280, 0x786CA600, 0x786BD980, + 0x786B0D00, 0x786A4080, 0x78697400, + 0x7868A780, 0x7867DB00, 0x78670E80, + 0x78664200, 0x78657580, 0x7864A900, + 0x7863DC80, 0x78631000, 0x78624380, + 0x78617700, 0x7860AA80, 0x785FDE00, + 0x785F1180, 0x785E4500, 0x785D7880, + 0x785CAC00, 0x785BDF80, 0x785B1300, + 0x785A4680, 0x78597A00, 0x7858AD80, + 0x7857E100, 0x78571480, 0x78564800, + 0x78557B80, 0x7854AF00, 0x7853E280, + 0x78531600, 0x78524980, 0x78517D00, + 0x7850B080, 0x784FE400, 0x784F1780, + 0x784E4B00, 0x784D7E80, 0x784CB200, + 0x784BE580, 0x784B1900, 0x784A4C80, + 0x78498000, 0x7848B380, 0x7847E700, + 0x78471A80, 0x78464E00, 0x78458180, + 0x7844B500, 0x7843E880, 0x78431C00, + 0x78424F80, 0x78418300, 0x7840B680, + 0x783FEA00, 0x783F1D80, 0x783E5100, + 0x783D8480, 0x783CB800, 0x783BEB80, + 0x783B1F00, 0x783A5280, 0x78398600, + 0x7838B980, 0x7837ED00, 0x78372080, + 0x78365400, 0x78358780, 0x7834BB00, + 0x7833EE80, 0x78332200, 0x78325580, + 0x78318900, 0x7830BC80, 0x782FF000, + 0x782F2380, 0x782E5700, 0x782D8A80, + 0x782CBE00, 0x782BF180, 0x782B2500, + 0x782A5880, 0x78298C00, 0x7828BF80, + 0x7827F300, 0x78272680, 0x78265A00, + 0x78258D80, 0x7824C100, 0x7823F480, + 0x78232800, 0x78225B80, 0x78218F00, + 0x7820C280, 0x781FF600, 0x781F2980, + 0x781E5D00, 0x781D9080, 0x781CC400, + 0x781BF780, 0x781B2B00, 0x781A5E80, + 0x78199200, 0x7818C580, 0x7817F900, + 0x78172C80, 0x78166000, 0x78159380, + 0x7814C700, 0x7813FA80, 0x78132E00, + 0x78126180, 0x78119500, 0x7810C880, + 0x780FFC00, 0x780F2F80, 0x780E6300, + 0x780D9680, 0x780CCA00, 0x780BFD80, + 0x780B3100, 0x780A6480, 0x78099800, + 0x7808CB80, 0x7807FF00, 0x78073280, + 0x78066600, 0x78059980, 0x7804CD00, + 0x78040080, 0x78033400, 0x78026780, + 0x78019B00, 0x7800CE80, 0x78000200, + 0x77FF3580, 0x77FE6900, 0x77FD9C80, + 0x77FCD000, 0x77FC0380, 0x77FB3700, + 0x77FA6A80, 0x77F99E00, 0x77F8D180, + 0x77F80500, 0x77F73880, 0x77F66C00, + 0x77F59F80, 0x77F4D300, 0x77F40680, + 0x77F33A00, 0x77F26D80, 0x77F1A100, + 0x77F0D480, 0x77F00800, 0x77EF3B80, + 0x77EE6F00, 0x77EDA280, 0x77ECD600, + 0x77EC0980, 0x77EB3D00, 0x77EA7080, + 0x77E9A400, 0x77E8D780, 0x77E80B00, + 0x77E73E80, 0x77E67200, 0x77E5A580, + 0x77E4D900, 0x77E40C80, 0x77E34000, + 0x77E27380, 0x77E1A700, 0x77E0DA80, + 0x77E00E00, 0x77DF4180, 0x77DE7500, + 0x77DDA880, 0x77DCDC00, 0x77DC0F80, + 0x77DB4300, 0x77DA7680, 0x77D9AA00, + 0x77D8DD80, 0x77D81100, 0x77D74480, + 0x77D67800, 0x77D5AB80, 0x77D4DF00, + 0x77D41280, 0x77D34600, 0x77D27980, + 0x77D1AD00, 0x77D0E080, 0x77D01400, + 0x77CF4780, 0x77CE7B00, 0x77CDAE80, + 0x77CCE200, 0x77CC1580, 0x77CB4900, + 0x77CA7C80, 0x77C9B000, 0x77C8E380, + 0x77C81700, 0x77C74A80, 0x77C67E00, + 0x77C5B180, 0x77C4E500, 0x77C41880, + 0x77C34C00, 0x77C27F80, 0x77C1B300, + 0x77C0E680, 0x77C01A00, 0x77BF4D80, + 0x77BE8100, 0x77BDB480, 0x77BCE800, + 0x77BC1B80, 0x77BB4F00, 0x77BA8280, + 0x77B9B600, 0x77B8E980, 0x77B81D00, + 0x77B75080, 0x77B68400, 0x77B5B780, + 0x77B4EB00, 0x77B41E80, 0x77B35200, + 0x77B28580, 0x77B1B900, 0x77B0EC80, + 0x77B02000, 0x77AF5380, 0x77AE8700, + 0x77ADBA80, 0x77ACEE00, 0x77AC2180, + 0x77AB5500, 0x77AA8880, 0x77A9BC00, + 0x77A8EF80, 0x77A82300, 0x77A75680, + 0x77A68A00, 0x77A5BD80, 0x77A4F100, + 0x77A42480, 0x77A35800, 0x77A28B80, + 0x77A1BF00, 0x77A0F280, 0x77A02600, + 0x779F5980, 0x779E8D00, 0x779DC080, + 0x779CF400, 0x779C2780, 0x779B5B00, + 0x779A8E80, 0x7799C200, 0x7798F580, + 0x77982900, 0x77975C80, 0x77969000, + 0x7795C380, 0x7794F700, 0x77942A80, + 0x77935E00, 0x77929180, 0x7791C500, + 0x7790F880, 0x77902C00, 0x778F5F80, + 0x778E9300, 0x778DC680, 0x778CFA00, + 0x778C2D80, 0x778B6100, 0x778A9480, + 0x7789C800, 0x7788FB80, 0x77882F00, + 0x77876280, 0x77869600, 0x7785C980, + 0x7784FD00, 0x77843080, 0x77836400, + 0x77829780, 0x7781CB00, 0x7780FE80, + 0x77803200, 0x777F6580, 0x777E9900, + 0x777DCC80, 0x777D0000, 0x777C3380, + 0x777B6700, 0x777A9A80, 0x7779CE00, + 0x77790180, 0x77783500, 0x77776880, + 0x77769C00, 0x7775CF80, 0x77750300, + 0x77743680, 0x77736A00, 0x77729D80, + 0x7771D100, 0x77710480, 0x77703800, + 0x776F6B80, 0x776E9F00, 0x776DD280, + 0x776D0600, 0x776C3980, 0x776B6D00, + 0x776AA080, 0x7769D400, 0x77690780, + 0x77683B00, 0x77676E80, 0x7766A200, + 0x7765D580, 0x77650900, 0x77643C80, + 0x77637000, 0x7762A380, 0x7761D700, + 0x77610A80, 0x77603E00, 0x775F7180, + 0x775EA500, 0x775DD880, 0x775D0C00, + 0x775C3F80, 0x775B7300, 0x775AA680, + 0x7759DA00, 0x77590D80, 0x77584100, + 0x77577480, 0x7756A800, 0x7755DB80, + 0x77550F00, 0x77544280, 0x77537600, + 0x7752A980, 0x7751DD00, 0x77511080, + 0x77504400, 0x774F7780, 0x774EAB00, + 0x774DDE80, 0x774D1200, 0x774C4580, + 0x774B7900, 0x774AAC80, 0x7749E000, + 0x77491380, 0x77484700, 0x77477A80, + 0x7746AE00, 0x7745E180, 0x77451500, + 0x77444880, 0x77437C00, 0x7742AF80, + 0x7741E300, 0x77411680, 0x77404A00, + 0x773F7D80, 0x773EB100, 0x773DE480, + 0x773D1800, 0x773C4B80, 0x773B7F00, + 0x773AB280, 0x7739E600, 0x77391980, + 0x77384D00, 0x77378080, 0x7736B400, + 0x7735E780, 0x77351B00, 0x77344E80, + 0x77338200, 0x7732B580, 0x7731E900, + 0x77311C80, 0x77305000, 0x772F8380, + 0x772EB700, 0x772DEA80, 0x772D1E00, + 0x772C5180, 0x772B8500, 0x772AB880, + 0x7729EC00, 0x77291F80, 0x77285300, + 0x77278680, 0x7726BA00, 0x7725ED80, + 0x77252100, 0x77245480, 0x77238800, + 0x7722BB80, 0x7721EF00, 0x77212280, + 0x77205600, 0x771F8980, 0x771EBD00, + 0x771DF080, 0x771D2400, 0x771C5780, + 0x771B8B00, 0x771ABE80, 0x7719F200, + 0x77192580, 0x77185900, 0x77178C80, + 0x7716C000, 0x7715F380, 0x77152700, + 0x77145A80, 0x77138E00, 0x7712C180, + 0x7711F500, 0x77112880, 0x77105C00, + 0x770F8F80, 0x770EC300, 0x770DF680, + 0x770D2A00, 0x770C5D80, 0x770B9100, + 0x770AC480, 0x7709F800, 0x77092B80, + 0x77085F00, 0x77079280, 0x7706C600, + 0x7705F980, 0x77052D00, 0x77046080, + 0x77039400, 0x7702C780, 0x7701FB00, + 0x77012E80, 0x77006200, 0x76FF9580, + 0x76FEC900, 0x76FDFC80, 0x76FD3000, + 0x76FC6380, 0x76FB9700, 0x76FACA80, + 0x76F9FE00, 0x76F93180, 0x76F86500, + 0x76F79880, 0x76F6CC00, 0x76F5FF80, + 0x76F53300, 0x76F46680, 0x76F39A00, + 0x76F2CD80, 0x76F20100, 0x76F13480, + 0x76F06800, 0x76EF9B80, 0x76EECF00, + 0x76EE0280, 0x76ED3600, 0x76EC6980, + 0x76EB9D00, 0x76EAD080, 0x76EA0400, + 0x76E93780, 0x76E86B00, 0x76E79E80, + 0x76E6D200, 0x76E60580, 0x76E53900, + 0x76E46C80, 0x76E3A000, 0x76E2D380, + 0x76E20700, 0x76E13A80, 0x76E06E00, + 0x76DFA180, 0x76DED500, 0x76DE0880, + 0x76DD3C00, 0x76DC6F80, 0x76DBA300, + 0x76DAD680, 0x76DA0A00, 0x76D93D80, + 0x76D87100, 0x76D7A480, 0x76D6D800, + 0x76D60B80, 0x76D53F00, 0x76D47280, + 0x76D3A600, 0x76D2D980, 0x76D20D00, + 0x76D14080, 0x76D07400, 0x76CFA780, + 0x76CEDB00, 0x76CE0E80, 0x76CD4200, + 0x76CC7580, 0x76CBA900, 0x76CADC80, + 0x76CA1000, 0x76C94380, 0x76C87700, + 0x76C7AA80, 0x76C6DE00, 0x76C61180, + 0x76C54500, 0x76C47880, 0x76C3AC00, + 0x76C2DF80, 0x76C21300, 0x76C14680, + 0x76C07A00, 0x76BFAD80, 0x76BEE100, + 0x76BE1480, 0x76BD4800, 0x76BC7B80, + 0x76BBAF00, 0x76BAE280, 0x76BA1600, + 0x76B94980, 0x76B87D00, 0x76B7B080, + 0x76B6E400, 0x76B61780, 0x76B54B00, + 0x76B47E80, 0x76B3B200, 0x76B2E580, + 0x76B21900, 0x76B14C80, 0x76B08000, + 0x76AFB380, 0x76AEE700, 0x76AE1A80, + 0x76AD4E00, 0x76AC8180, 0x76ABB500, + 0x76AAE880, 0x76AA1C00, 0x76A94F80, + 0x76A88300, 0x76A7B680, 0x76A6EA00, + 0x76A61D80, 0x76A55100, 0x76A48480, + 0x76A3B800, 0x76A2EB80, 0x76A21F00, + 0x76A15280, 0x76A08600, 0x769FB980, + 0x769EED00, 0x769E2080, 0x769D5400, + 0x769C8780, 0x769BBB00, 0x769AEE80, + 0x769A2200, 0x76995580, 0x76988900, + 0x7697BC80, 0x7696F000, 0x76962380, + 0x76955700, 0x76948A80, 0x7693BE00, + 0x7692F180, 0x76922500, 0x76915880, + 0x76908C00, 0x768FBF80, 0x768EF300, + 0x768E2680, 0x768D5A00, 0x768C8D80, + 0x768BC100, 0x768AF480, 0x768A2800, + 0x76895B80, 0x76888F00, 0x7687C280, + 0x7686F600, 0x76862980, 0x76855D00, + 0x76849080, 0x7683C400, 0x7682F780, + 0x76822B00, 0x76815E80, 0x76809200, + 0x767FC580, 0x767EF900, 0x767E2C80, + 0x767D6000, 0x767C9380, 0x767BC700, + 0x767AFA80, 0x767A2E00, 0x76796180, + 0x76789500, 0x7677C880, 0x7676FC00, + 0x76762F80, 0x76756300, 0x76749680, + 0x7673CA00, 0x7672FD80, 0x76723100, + 0x76716480, 0x76709800, 0x766FCB80, + 0x766EFF00, 0x766E3280, 0x766D6600, + 0x766C9980, 0x766BCD00, 0x766B0080, + 0x766A3400, 0x76696780, 0x76689B00, + 0x7667CE80, 0x76670200, 0x76663580, + 0x76656900, 0x76649C80, 0x7663D000, + 0x76630380, 0x76623700, 0x76616A80, + 0x76609E00, 0x765FD180, 0x765F0500, + 0x765E3880, 0x765D6C00, 0x765C9F80, + 0x765BD300, 0x765B0680, 0x765A3A00, + 0x76596D80, 0x7658A100, 0x7657D480, + 0x76570800, 0x76563B80, 0x76556F00, + 0x7654A280, 0x7653D600, 0x76530980, + 0x76523D00, 0x76517080, 0x7650A400, + 0x764FD780, 0x764F0B00, 0x764E3E80, + 0x764D7200, 0x764CA580, 0x764BD900, + 0x764B0C80, 0x764A4000, 0x76497380, + 0x7648A700, 0x7647DA80, 0x76470E00, + 0x76464180, 0x76457500, 0x7644A880, + 0x7643DC00, 0x76430F80, 0x76424300, + 0x76417680, 0x7640AA00, 0x763FDD80, + 0x763F1100, 0x763E4480, 0x763D7800, + 0x763CAB80, 0x763BDF00, 0x763B1280, + 0x763A4600, 0x76397980, 0x7638AD00, + 0x7637E080, 0x76371400, 0x76364780, + 0x76357B00, 0x7634AE80, 0x7633E200, + 0x76331580, 0x76324900, 0x76317C80, + 0x7630B000, 0x762FE380, 0x762F1700, + 0x762E4A80, 0x762D7E00, 0x762CB180, + 0x762BE500, 0x762B1880, 0x762A4C00, + 0x76297F80, 0x7628B300, 0x7627E680, + 0x76271A00, 0x76264D80, 0x76258100, + 0x7624B480, 0x7623E800, 0x76231B80, + 0x76224F00, 0x76218280, 0x7620B600, + 0x761FE980, 0x761F1D00, 0x761E5080, + 0x761D8400, 0x761CB780, 0x761BEB00, + 0x761B1E80, 0x761A5200, 0x76198580, + 0x7618B900, 0x7617EC80, 0x76172000, + 0x76165380, 0x76158700, 0x7614BA80, + 0x7613EE00, 0x76132180, 0x76125500, + 0x76118880, 0x7610BC00, 0x760FEF80, + 0x760F2300, 0x760E5680, 0x760D8A00, + 0x760CBD80, 0x760BF100, 0x760B2480, + 0x760A5800, 0x76098B80, 0x7608BF00, + 0x7607F280, 0x76072600, 0x76065980, + 0x76058D00, 0x7604C080, 0x7603F400, + 0x76032780, 0x76025B00, 0x76018E80, + 0x7600C200, 0x75FFF580, 0x75FF2900, + 0x75FE5C80, 0x75FD9000, 0x75FCC380, + 0x75FBF700, 0x75FB2A80, 0x75FA5E00, + 0x75F99180, 0x75F8C500, 0x75F7F880, + 0x75F72C00, 0x75F65F80, 0x75F59300, + 0x75F4C680, 0x75F3FA00, 0x75F32D80, + 0x75F26100, 0x75F19480, 0x75F0C800, + 0x75EFFB80, 0x75EF2F00, 0x75EE6280, + 0x75ED9600, 0x75ECC980, 0x75EBFD00, + 0x75EB3080, 0x75EA6400, 0x75E99780, + 0x75E8CB00, 0x75E7FE80, 0x75E73200, + 0x75E66580, 0x75E59900, 0x75E4CC80, + 0x75E40000, 0x75E33D80, 0x75E27B00, + 0x75E1B880, 0x75E0F600, 0x75E03380, + 0x75DF7100, 0x75DEAE80, 0x75DDEC00, + 0x75DD2980, 0x75DC6700, 0x75DBA480, + 0x75DAE200, 0x75DA1F80, 0x75D95D00, + 0x75D89A80, 0x75D7D800, 0x75D71580, + 0x75D65300, 0x75D59080, 0x75D4CE00, + 0x75D40B80, 0x75D34900, 0x75D28680, + 0x75D1C400, 0x75D10180, 0x75D03F00, + 0x75CF7C80, 0x75CEBA00, 0x75CDF780, + 0x75CD3500, 0x75CC7280, 0x75CBB000, + 0x75CAED80, 0x75CA2B00, 0x75C96880, + 0x75C8A600, 0x75C7E380, 0x75C72100, + 0x75C65E80, 0x75C59C00, 0x75C4D980, + 0x75C41700, 0x75C35480, 0x75C29200, + 0x75C1CF80, 0x75C10D00, 0x75C04A80, + 0x75BF8800, 0x75BEC580, 0x75BE0300, + 0x75BD4080, 0x75BC7E00, 0x75BBBB80, + 0x75BAF900, 0x75BA3680, 0x75B97400, + 0x75B8B180, 0x75B7EF00, 0x75B72C80, + 0x75B66A00, 0x75B5A780, 0x75B4E500, + 0x75B42280, 0x75B36000, 0x75B29D80, + 0x75B1DB00, 0x75B11880, 0x75B05600, + 0x75AF9380, 0x75AED100, 0x75AE0E80, + 0x75AD4C00, 0x75AC8980, 0x75ABC700, + 0x75AB0480, 0x75AA4200, 0x75A97F80, + 0x75A8BD00, 0x75A7FA80, 0x75A73800, + 0x75A67580, 0x75A5B300, 0x75A4F080, + 0x75A42E00, 0x75A36B80, 0x75A2A900, + 0x75A1E680, 0x75A12400, 0x75A06180, + 0x759F9F00, 0x759EDC80, 0x759E1A00, + 0x759D5780, 0x759C9500, 0x759BD280, + 0x759B1000, 0x759A4D80, 0x75998B00, + 0x7598C880, 0x75980600, 0x75974380, + 0x75968100, 0x7595BE80, 0x7594FC00, + 0x75943980, 0x75937700, 0x7592B480, + 0x7591F200, 0x75912F80, 0x75906D00, + 0x758FAA80, 0x758EE800, 0x758E2580, + 0x758D6300, 0x758CA080, 0x758BDE00, + 0x758B1B80, 0x758A5900, 0x75899680, + 0x7588D400, 0x75881180, 0x75874F00, + 0x75868C80, 0x7585CA00, 0x75850780, + 0x75844500, 0x75838280, 0x7582C000, + 0x7581FD80, 0x75813B00, 0x75807880, + 0x757FB600, 0x757EF380, 0x757E3100, + 0x757D6E80, 0x757CAC00, 0x757BE980, + 0x757B2700, 0x757A6480, 0x7579A200, + 0x7578DF80, 0x75781D00, 0x75775A80, + 0x75769800, 0x7575D580, 0x75751300, + 0x75745080, 0x75738E00, 0x7572CB80, + 0x75720900, 0x75714680, 0x75708400, + 0x756FC180, 0x756EFF00, 0x756E3C80, + 0x756D7A00, 0x756CB780, 0x756BF500, + 0x756B3280, 0x756A7000, 0x7569AD80, + 0x7568EB00, 0x75682880, 0x75676600, + 0x7566A380, 0x7565E100, 0x75651E80, + 0x75645C00, 0x75639980, 0x7562D700, + 0x75621480, 0x75615200, 0x75608F80, + 0x755FCD00, 0x755F0A80, 0x755E4800, + 0x755D8580, 0x755CC300, 0x755C0080, + 0x755B3E00, 0x755A7B80, 0x7559B900, + 0x7558F680, 0x75583400, 0x75577180, + 0x7556AF00, 0x7555EC80, 0x75552A00, + 0x75546780, 0x7553A500, 0x7552E280, + 0x75522000, 0x75515D80, 0x75509B00, + 0x754FD880, 0x754F1600, 0x754E5380, + 0x754D9100, 0x754CCE80, 0x754C0C00, + 0x754B4980, 0x754A8700, 0x7549C480, + 0x75490200, 0x75483F80, 0x75477D00, + 0x7546BA80, 0x7545F800, 0x75453580, + 0x75447300, 0x7543B080, 0x7542EE00, + 0x75422B80, 0x75416900, 0x7540A680, + 0x753FE400, 0x753F2180, 0x753E5F00, + 0x753D9C80, 0x753CDA00, 0x753C1780, + 0x753B5500, 0x753A9280, 0x7539D000, + 0x75390D80, 0x75384B00, 0x75378880, + 0x7536C600, 0x75360380, 0x75354100, + 0x75347E80, 0x7533BC00, 0x7532F980, + 0x75323700, 0x75317480, 0x7530B200, + 0x752FEF80, 0x752F2D00, 0x752E6A80, + 0x752DA800, 0x752CE580, 0x752C2300, + 0x752B6080, 0x752A9E00, 0x7529DB80, + 0x75291900, 0x75285680, 0x75279400, + 0x7526D180, 0x75260F00, 0x75254C80, + 0x75248A00, 0x7523C780, 0x75230500, + 0x75224280, 0x75218000, 0x7520BD80, + 0x751FFB00, 0x751F3880, 0x751E7600, + 0x751DB380, 0x751CF100, 0x751C2E80, + 0x751B6C00, 0x751AA980, 0x7519E700, + 0x75192480, 0x75186200, 0x75179F80, + 0x7516DD00, 0x75161A80, 0x75155800, + 0x75149580, 0x7513D300, 0x75131080, + 0x75124E00, 0x75118B80, 0x7510C900, + 0x75100680, 0x750F4400, 0x750E8180, + 0x750DBF00, 0x750CFC80, 0x750C3A00, + 0x750B7780, 0x750AB500, 0x7509F280, + 0x75093000, 0x75086D80, 0x7507AB00, + 0x7506E880, 0x75062600, 0x75056380, + 0x7504A100, 0x7503DE80, 0x75031C00, + 0x75025980, 0x75019700, 0x7500D480, + 0x75001200, 0x74FF4F80, 0x74FE8D00, + 0x74FDCA80, 0x74FD0800, 0x74FC4580, + 0x74FB8300, 0x74FAC080, 0x74F9FE00, + 0x74F93B80, 0x74F87900, 0x74F7B680, + 0x74F6F400, 0x74F63180, 0x74F56F00, + 0x74F4AC80, 0x74F3EA00, 0x74F32780, + 0x74F26500, 0x74F1A280, 0x74F0E000, + 0x74F01D80, 0x74EF5B00, 0x74EE9880, + 0x74EDD600, 0x74ED1380, 0x74EC5100, + 0x74EB8E80, 0x74EACC00, 0x74EA0980, + 0x74E94700, 0x74E88480, 0x74E7C200, + 0x74E6FF80, 0x74E63D00, 0x74E57A80, + 0x74E4B800, 0x74E3F580, 0x74E33300, + 0x74E27080, 0x74E1AE00, 0x74E0EB80, + 0x74E02900, 0x74DF6680, 0x74DEA400, + 0x74DDE180, 0x74DD1F00, 0x74DC5C80, + 0x74DB9A00, 0x74DAD780, 0x74DA1500, + 0x74D95280, 0x74D89000, 0x74D7CD80, + 0x74D70B00, 0x74D64880, 0x74D58600, + 0x74D4C380, 0x74D40100, 0x74D33E80, + 0x74D27C00, 0x74D1B980, 0x74D0F700, + 0x74D03480, 0x74CF7200, 0x74CEAF80, + 0x74CDED00, 0x74CD2A80, 0x74CC6800, + 0x74CBA580, 0x74CAE300, 0x74CA2080, + 0x74C95E00, 0x74C89B80, 0x74C7D900, + 0x74C71680, 0x74C65400, 0x74C59180, + 0x74C4CF00, 0x74C40C80, 0x74C34A00, + 0x74C28780, 0x74C1C500, 0x74C10280, + 0x74C04000, 0x74BF7D80, 0x74BEBB00, + 0x74BDF880, 0x74BD3600, 0x74BC7380, + 0x74BBB100, 0x74BAEE80, 0x74BA2C00, + 0x74B96980, 0x74B8A700, 0x74B7E480, + 0x74B72200, 0x74B65F80, 0x74B59D00, + 0x74B4DA80, 0x74B41800, 0x74B35580, + 0x74B29300, 0x74B1D080, 0x74B10E00, + 0x74B04B80, 0x74AF8900, 0x74AEC680, + 0x74AE0400, 0x74AD4180, 0x74AC7F00, + 0x74ABBC80, 0x74AAFA00, 0x74AA3780, + 0x74A97500, 0x74A8B280, 0x74A7F000, + 0x74A72D80, 0x74A66B00, 0x74A5A880, + 0x74A4E600, 0x74A42380, 0x74A36100, + 0x74A29E80, 0x74A1DC00, 0x74A11980, + 0x74A05700, 0x749F9480, 0x749ED200, + 0x749E0F80, 0x749D4D00, 0x749C8A80, + 0x749BC800, 0x749B0580, 0x749A4300, + 0x74998080, 0x7498BE00, 0x7497FB80, + 0x74973900, 0x74967680, 0x7495B400, + 0x7494F180, 0x74942F00, 0x74936C80, + 0x7492AA00, 0x7491E780, 0x74912500, + 0x74906280, 0x748FA000, 0x748EDD80, + 0x748E1B00, 0x748D5880, 0x748C9600, + 0x748BD380, 0x748B1100, 0x748A4E80, + 0x74898C00, 0x7488C980, 0x74880700, + 0x74874480, 0x74868200, 0x7485BF80, + 0x7484FD00, 0x74843A80, 0x74837800, + 0x7482B580, 0x7481F300, 0x74813080, + 0x74806E00, 0x747FAB80, 0x747EE900, + 0x747E2680, 0x747D6400, 0x747CA180, + 0x747BDF00, 0x747B1C80, 0x747A5A00, + 0x74799780, 0x7478D500, 0x74781280, + 0x74775000, 0x74768D80, 0x7475CB00, + 0x74750880, 0x74744600, 0x74738380, + 0x7472C100, 0x7471FE80, 0x74713C00, + 0x74707980, 0x746FB700, 0x746EF480, + 0x746E3200, 0x746D6F80, 0x746CAD00, + 0x746BEA80, 0x746B2800, 0x746A6580, + 0x7469A300, 0x7468E080, 0x74681E00, + 0x74675B80, 0x74669900, 0x7465D680, + 0x74651400, 0x74645180, 0x74638F00, + 0x7462CC80, 0x74620A00, 0x74614780, + 0x74608500, 0x745FC280, 0x745F0000, + 0x745E3D80, 0x745D7B00, 0x745CB880, + 0x745BF600, 0x745B3380, 0x745A7100, + 0x7459AE80, 0x7458EC00, 0x74582980, + 0x74576700, 0x7456A480, 0x7455E200, + 0x74551F80, 0x74545D00, 0x74539A80, + 0x7452D800, 0x74521580, 0x74515300, + 0x74509080, 0x744FCE00, 0x744F0B80, + 0x744E4900, 0x744D8680, 0x744CC400, + 0x744C0180, 0x744B3F00, 0x744A7C80, + 0x7449BA00, 0x7448F780, 0x74483500, + 0x74477280, 0x7446B000, 0x7445ED80, + 0x74452B00, 0x74446880, 0x7443A600, + 0x7442E380, 0x74422100, 0x74415E80, + 0x74409C00, 0x743FD980, 0x743F1700, + 0x743E5480, 0x743D9200, 0x743CCF80, + 0x743C0D00, 0x743B4A80, 0x743A8800, + 0x7439C580, 0x74390300, 0x74384080, + 0x74377E00, 0x7436BB80, 0x7435F900, + 0x74353680, 0x74347400, 0x7433B180, + 0x7432EF00, 0x74322C80, 0x74316A00, + 0x7430A780, 0x742FE500, 0x742F2280, + 0x742E6000, 0x742D9D80, 0x742CDB00, + 0x742C1880, 0x742B5600, 0x742A9380, + 0x7429D100, 0x74290E80, 0x74284C00, + 0x74278980, 0x7426C700, 0x74260480, + 0x74254200, 0x74247F80, 0x7423BD00, + 0x7422FA80, 0x74223800, 0x74217580, + 0x7420B300, 0x741FF080, 0x741F2E00, + 0x741E6B80, 0x741DA900, 0x741CE680, + 0x741C2400, 0x741B6180, 0x741A9F00, + 0x7419DC80, 0x74191A00, 0x74185780, + 0x74179500, 0x7416D280, 0x74161000, + 0x74154D80, 0x74148B00, 0x7413C880, + 0x74130600, 0x74124380, 0x74118100, + 0x7410BE80, 0x740FFC00, 0x740F3980, + 0x740E7700, 0x740DB480, 0x740CF200, + 0x740C2F80, 0x740B6D00, 0x740AAA80, + 0x7409E800, 0x74092580, 0x74086300, + 0x7407A080, 0x7406DE00, 0x74061B80, + 0x74055900, 0x74049680, 0x7403D400, + 0x74031180, 0x74024F00, 0x74018C80, + 0x7400CA00, 0x74000780, 0x73FF4500, + 0x73FE8280, 0x73FDC000, 0x73FCFD80, + 0x73FC3B00, 0x73FB7880, 0x73FAB600, + 0x73F9F380, 0x73F93100, 0x73F86E80, + 0x73F7AC00, 0x73F6E980, 0x73F62700, + 0x73F56480, 0x73F4A200, 0x73F3DF80, + 0x73F31D00, 0x73F25A80, 0x73F19800, + 0x73F0D580, 0x73F01300, 0x73EF5080, + 0x73EE8E00, 0x73EDCB80, 0x73ED0900, + 0x73EC4680, 0x73EB8400, 0x73EAC180, + 0x73E9FF00, 0x73E93C80, 0x73E87A00, + 0x73E7B780, 0x73E6F500, 0x73E63280, + 0x73E57000, 0x73E4AD80, 0x73E3EB00, + 0x73E32880, 0x73E26600, 0x73E1A380, + 0x73E0E100, 0x73E01E80, 0x73DF5C00, + 0x73DE9980, 0x73DDD700, 0x73DD1480, + 0x73DC5200, 0x73DB8F80, 0x73DACD00, + 0x73DA0A80, 0x73D94800, 0x73D88580, + 0x73D7C300, 0x73D70080, 0x73D63E00, + 0x73D57B80, 0x73D4B900, 0x73D3F680, + 0x73D33400, 0x73D27180, 0x73D1AF00, + 0x73D0EC80, 0x73D02A00, 0x73CF6780, + 0x73CEA500, 0x73CDE280, 0x73CD2000, + 0x73CC5D80, 0x73CB9B00, 0x73CAD880, + 0x73CA1600, 0x73C95380, 0x73C89100, + 0x73C7CE80, 0x73C70C00, 0x73C64980, + 0x73C58700, 0x73C4C480, 0x73C40200, + 0x73C33F80, 0x73C27D00, 0x73C1BA80, + 0x73C0F800, 0x73C03580, 0x73BF7300, + 0x73BEB080, 0x73BDEE00, 0x73BD2B80, + 0x73BC6900, 0x73BBA680, 0x73BAE400, + 0x73BA2180, 0x73B95F00, 0x73B89C80, + 0x73B7DA00, 0x73B71780, 0x73B65500, + 0x73B59280, 0x73B4D000, 0x73B40D80, + 0x73B34B00, 0x73B28880, 0x73B1C600, + 0x73B10380, 0x73B04100, 0x73AF7E80, + 0x73AEBC00, 0x73ADF980, 0x73AD3700, + 0x73AC7480, 0x73ABB200, 0x73AAEF80, + 0x73AA2D00, 0x73A96A80, 0x73A8A800, + 0x73A7E580, 0x73A72300, 0x73A66080, + 0x73A59E00, 0x73A4DB80, 0x73A41900, + 0x73A35680, 0x73A29400, 0x73A1D180, + 0x73A10F00, 0x73A04C80, 0x739F8A00, + 0x739EC780, 0x739E0500, 0x739D4280, + 0x739C8000, 0x739BBD80, 0x739AFB00, + 0x739A3880, 0x73997600, 0x7398B380, + 0x7397F100, 0x73972E80, 0x73966C00, + 0x7395A980, 0x7394E700, 0x73942480, + 0x73936200, 0x73929F80, 0x7391DD00, + 0x73911A80, 0x73905800, 0x738F9580, + 0x738ED300, 0x738E1080, 0x738D4E00, + 0x738C8B80, 0x738BC900, 0x738B0680, + 0x738A4400, 0x73898180, 0x7388BF00, + 0x7387FC80, 0x73873A00, 0x73867780, + 0x7385B500, 0x7384F280, 0x73843000, + 0x73836D80, 0x7382AB00, 0x7381E880, + 0x73812600, 0x73806380, 0x737FA100, + 0x737EDE80, 0x737E1C00, 0x737D5980, + 0x737C9700, 0x737BD480, 0x737B1200, + 0x737A4F80, 0x73798D00, 0x7378CA80, + 0x73780800, 0x73774580, 0x73768300, + 0x7375C080, 0x7374FE00, 0x73743B80, + 0x73737900, 0x7372B680, 0x7371F400, + 0x73713180, 0x73706F00, 0x736FAC80, + 0x736EEA00, 0x736E2780, 0x736D6500, + 0x736CA280, 0x736BE000, 0x736B1D80, + 0x736A5B00, 0x73699880, 0x7368D600, + 0x73681380, 0x73675100, 0x73668E80, + 0x7365CC00, 0x73650980, 0x73644700, + 0x73638480, 0x7362C200, 0x7361FF80, + 0x73613D00, 0x73607A80, 0x735FB800, + 0x735EF580, 0x735E3300, 0x735D7080, + 0x735CAE00, 0x735BEB80, 0x735B2900, + 0x735A6680, 0x7359A400, 0x7358E180, + 0x73581F00, 0x73575C80, 0x73569A00, + 0x7355D780, 0x73551500, 0x73545280, + 0x73539000, 0x7352CD80, 0x73520B00, + 0x73514880, 0x73508600, 0x734FC380, + 0x734F0100, 0x734E3E80, 0x734D7C00, + 0x734CB980, 0x734BF700, 0x734B3480, + 0x734A7200, 0x7349AF80, 0x7348ED00, + 0x73482A80, 0x73476800, 0x7346A580, + 0x7345E300, 0x73452080, 0x73445E00, + 0x73439B80, 0x7342D900, 0x73421680, + 0x73415400, 0x73409180, 0x733FCF00, + 0x733F0C80, 0x733E4A00, 0x733D8780, + 0x733CC500, 0x733C0280, 0x733B4000, + 0x733A7D80, 0x7339BB00, 0x7338F880, + 0x73383600, 0x73377380, 0x7336B100, + 0x7335EE80, 0x73352C00, 0x73346980, + 0x7333A700, 0x7332E480, 0x73322200, + 0x73315F80, 0x73309D00, 0x732FDA80, + 0x732F1800, 0x732E5580, 0x732D9300, + 0x732CD080, 0x732C0E00, 0x732B4B80, + 0x732A8900, 0x7329C680, 0x73290400, + 0x73284180, 0x73277F00, 0x7326BC80, + 0x7325FA00, 0x73253780, 0x73247500, + 0x7323B280, 0x7322F000, 0x73222D80, + 0x73216B00, 0x7320A880, 0x731FE600, + 0x731F2380, 0x731E6100, 0x731D9E80, + 0x731CDC00, 0x731C1980, 0x731B5700, + 0x731A9480, 0x7319D200, 0x73190F80, + 0x73184D00, 0x73178A80, 0x7316C800, + 0x73160580, 0x73154300, 0x73148080, + 0x7313BE00, 0x7312FB80, 0x73123900, + 0x73117680, 0x7310B400, 0x730FF180, + 0x730F2F00, 0x730E6C80, 0x730DAA00, + 0x730CE780, 0x730C2500, 0x730B6280, + 0x730AA000, 0x7309DD80, 0x73091B00, + 0x73085880, 0x73079600, 0x7306D380, + 0x73061100, 0x73054E80, 0x73048C00, + 0x7303C980, 0x73030700, 0x73024480, + 0x73018200, 0x7300BF80, 0x72FFFD00, + 0x72FF3A80, 0x72FE7800, 0x72FDB580, + 0x72FCF300, 0x72FC3080, 0x72FB6E00, + 0x72FAAB80, 0x72F9E900, 0x72F92680, + 0x72F86400, 0x72F7A180, 0x72F6DF00, + 0x72F61C80, 0x72F55A00, 0x72F49780, + 0x72F3D500, 0x72F31280, 0x72F25000, + 0x72F18D80, 0x72F0CB00, 0x72F00880, + 0x72EF4600, 0x72EE8380, 0x72EDC100, + 0x72ECFE80, 0x72EC3C00, 0x72EB7980, + 0x72EAB700, 0x72E9F480, 0x72E93200, + 0x72E86F80, 0x72E7AD00, 0x72E6EA80, + 0x72E62800, 0x72E56580, 0x72E4A300, + 0x72E3E080, 0x72E31E00, 0x72E25B80, + 0x72E19900, 0x72E0D680, 0x72E01400, + 0x72DF5180, 0x72DE8F00, 0x72DDCC80, + 0x72DD0A00, 0x72DC4780, 0x72DB8500, + 0x72DAC280, 0x72DA0000, 0x72D93D80, + 0x72D87B00, 0x72D7B880, 0x72D6F600, + 0x72D63380, 0x72D57100, 0x72D4AE80, + 0x72D3EC00, 0x72D32980, 0x72D26700, + 0x72D1A480, 0x72D0E200, 0x72D01F80, + 0x72CF5D00, 0x72CE9A80, 0x72CDD800, + 0x72CD1580, 0x72CC5300, 0x72CB9080, + 0x72CACE00, 0x72CA0B80, 0x72C94900, + 0x72C88680, 0x72C7C400, 0x72C70180, + 0x72C63F00, 0x72C57C80, 0x72C4BA00, + 0x72C3F780, 0x72C33500, 0x72C27280, + 0x72C1B000, 0x72C0ED80, 0x72C02B00, + 0x72BF6880, 0x72BEA600, 0x72BDE380, + 0x72BD2100, 0x72BC5E80, 0x72BB9C00, + 0x72BAD980, 0x72BA1700, 0x72B95480, + 0x72B89200, 0x72B7CF80, 0x72B70D00, + 0x72B64A80, 0x72B58800, 0x72B4C580, + 0x72B40300, 0x72B34080, 0x72B27E00, + 0x72B1BB80, 0x72B0F900, 0x72B03680, + 0x72AF7400, 0x72AEB180, 0x72ADEF00, + 0x72AD2C80, 0x72AC6A00, 0x72ABA780, + 0x72AAE500, 0x72AA2280, 0x72A96000, + 0x72A89D80, 0x72A7DB00, 0x72A71880, + 0x72A65600, 0x72A59380, 0x72A4D100, + 0x72A40E80, 0x72A34C00, 0x72A28980, + 0x72A1C700, 0x72A10480, 0x72A04200, + 0x729F7F80, 0x729EBD00, 0x729DFA80, + 0x729D3800, 0x729C7580, 0x729BB300, + 0x729AF080, 0x729A2E00, 0x72996B80, + 0x7298A900, 0x7297E680, 0x72972400, + 0x72966180, 0x72959F00, 0x7294DC80, + 0x72941A00, 0x72935780, 0x72929500, + 0x7291D280, 0x72911000, 0x72904D80, + 0x728F8B00, 0x728EC880, 0x728E0600, + 0x728D4380, 0x728C8100, 0x728BBE80, + 0x728AFC00, 0x728A3980, 0x72897700, + 0x7288B480, 0x7287F200, 0x72872F80, + 0x72866D00, 0x7285AA80, 0x7284E800, + 0x72842580, 0x72836300, 0x7282A080, + 0x7281DE00, 0x72811B80, 0x72805900, + 0x727F9680, 0x727ED400, 0x727E1180, + 0x727D4F00, 0x727C8C80, 0x727BCA00, + 0x727B0780, 0x727A4500, 0x72798280, + 0x7278C000, 0x7277FD80, 0x72773B00, + 0x72767880, 0x7275B600, 0x7274F380, + 0x72743100, 0x72736E80, 0x7272AC00, + 0x7271E980, 0x72712700, 0x72706480, + 0x726FA200, 0x726EDF80, 0x726E1D00, + 0x726D5A80, 0x726C9800, 0x726BD580, + 0x726B1300, 0x726A5080, 0x72698E00, + 0x7268CB80, 0x72680900, 0x72674680, + 0x72668400, 0x7265C180, 0x7264FF00, + 0x72643C80, 0x72637A00, 0x7262B780, + 0x7261F500, 0x72613280, 0x72607000, + 0x725FAD80, 0x725EEB00, 0x725E2880, + 0x725D6600, 0x725CA380, 0x725BE100, + 0x725B1E80, 0x725A5C00, 0x72599980, + 0x7258D700, 0x72581480, 0x72575200, + 0x72568F80, 0x7255CD00, 0x72550A80, + 0x72544800, 0x72538580, 0x7252C300, + 0x72520080, 0x72513E00, 0x72507B80, + 0x724FB900, 0x724EF680, 0x724E3400, + 0x724D7180, 0x724CAF00, 0x724BEC80, + 0x724B2A00, 0x724A6780, 0x7249A500, + 0x7248E280, 0x72482000, 0x72475D80, + 0x72469B00, 0x7245D880, 0x72451600, + 0x72445380, 0x72439100, 0x7242CE80, + 0x72420C00, 0x72414980, 0x72408700, + 0x723FC480, 0x723F0200, 0x723E3F80, + 0x723D7D00, 0x723CBA80, 0x723BF800, + 0x723B3580, 0x723A7300, 0x7239B080, + 0x7238EE00, 0x72382B80, 0x72376900, + 0x7236A680, 0x7235E400, 0x72352180, + 0x72345F00, 0x72339C80, 0x7232DA00, + 0x72321780, 0x72315500, 0x72309280, + 0x722FD000, 0x722F0D80, 0x722E4B00, + 0x722D8880, 0x722CC600, 0x722C0380, + 0x722B4100, 0x722A7E80, 0x7229BC00, + 0x7228F980, 0x72283700, 0x72277480, + 0x7226B200, 0x7225EF80, 0x72252D00, + 0x72246A80, 0x7223A800, 0x7222E580, + 0x72222300, 0x72216080, 0x72209E00, + 0x721FDB80, 0x721F1900, 0x721E5680, + 0x721D9400, 0x721CD180, 0x721C0F00, + 0x721B4C80, 0x721A8A00, 0x7219C780, + 0x72190500, 0x72184280, 0x72178000, + 0x7216BD80, 0x7215FB00, 0x72153880, + 0x72147600, 0x7213B380, 0x7212F100, + 0x72122E80, 0x72116C00, 0x7210A980, + 0x720FE700, 0x720F2480, 0x720E6200, + 0x720D9F80, 0x720CDD00, 0x720C1A80, + 0x720B5800, 0x720A9580, 0x7209D300, + 0x72091080, 0x72084E00, 0x72078B80, + 0x7206C900, 0x72060680, 0x72054400, + 0x72048180, 0x7203BF00, 0x7202FC80, + 0x72023A00, 0x72017780, 0x7200B500, + 0x71FFF280, 0x71FF3000, 0x71FE6D80, + 0x71FDAB00, 0x71FCE880, 0x71FC2600, + 0x71FB6380, 0x71FAA100, 0x71F9DE80, + 0x71F91C00, 0x71F85980, 0x71F79700, + 0x71F6D480, 0x71F61200, 0x71F54F80, + 0x71F48D00, 0x71F3CA80, 0x71F30800, + 0x71F24580, 0x71F18300, 0x71F0C080, + 0x71EFFE00, 0x71EF3B80, 0x71EE7900, + 0x71EDB680, 0x71ECF400, 0x71EC3180, + 0x71EB6F00, 0x71EAAC80, 0x71E9EA00, + 0x71E92780, 0x71E86500, 0x71E7A280, + 0x71E6E000, 0x71E61D80, 0x71E55B00, + 0x71E49880, 0x71E3D600, 0x71E31380, + 0x71E25100, 0x71E18E80, 0x71E0CC00, + 0x71E00980, 0x71DF4700, 0x71DE8480, + 0x71DDC200, 0x71DCFF80, 0x71DC3D00, + 0x71DB7A80, 0x71DAB800, 0x71D9F580, + 0x71D93300, 0x71D87080, 0x71D7AE00, + 0x71D6EB80, 0x71D62900, 0x71D56680, + 0x71D4A400, 0x71D3E180, 0x71D31F00, + 0x71D25C80, 0x71D19A00, 0x71D0D780, + 0x71D01500, 0x71CF5280, 0x71CE9000, + 0x71CDCD80, 0x71CD0B00, 0x71CC4880, + 0x71CB8600, 0x71CAC380, 0x71CA0100, + 0x71C93E80, 0x71C87C00, 0x71C7B980, + 0x71C6F700, 0x71C63480, 0x71C57200, + 0x71C4AF80, 0x71C3ED00, 0x71C32A80, + 0x71C26800, 0x71C1A580, 0x71C0E300, + 0x71C02080, 0x71BF5E00, 0x71BE9B80, + 0x71BDD900, 0x71BD1680, 0x71BC5400, + 0x71BB9180, 0x71BACF00, 0x71BA0C80, + 0x71B94A00, 0x71B88780, 0x71B7C500, + 0x71B70280, 0x71B64000, 0x71B57D80, + 0x71B4BB00, 0x71B3F880, 0x71B33600, + 0x71B27380, 0x71B1B100, 0x71B0EE80, + 0x71B02C00, 0x71AF6980, 0x71AEA700, + 0x71ADE480, 0x71AD2200, 0x71AC5F80, + 0x71AB9D00, 0x71AADA80, 0x71AA1800, + 0x71A95580, 0x71A89300, 0x71A7D080, + 0x71A70E00, 0x71A64B80, 0x71A58900, + 0x71A4C680, 0x71A40400, 0x71A34180, + 0x71A27F00, 0x71A1BC80, 0x71A0FA00, + 0x71A03780, 0x719F7500, 0x719EB280, + 0x719DF000, 0x719D2D80, 0x719C6B00, + 0x719BA880, 0x719AE600, 0x719A2380, + 0x71996100, 0x71989E80, 0x7197DC00, + 0x71971980, 0x71965700, 0x71959480, + 0x7194D200, 0x71940F80, 0x71934D00, + 0x71928A80, 0x7191C800, 0x71910580, + 0x71904300, 0x718F8080, 0x718EBE00, + 0x718DFB80, 0x718D3900, 0x718C7680, + 0x718BB400, 0x718AF180, 0x718A2F00, + 0x71896C80, 0x7188AA00, 0x7187E780, + 0x71872500, 0x71866280, 0x7185A000, + 0x7184DD80, 0x71841B00, 0x71835880, + 0x71829600, 0x7181D380, 0x71811100, + 0x71804E80, 0x717F8C00, 0x717EC980, + 0x717E0700, 0x717D4480, 0x717C8200, + 0x717BBF80, 0x717AFD00, 0x717A3A80, + 0x71797800, 0x7178B580, 0x7177F300, + 0x71773080, 0x71766E00, 0x7175AB80, + 0x7174E900, 0x71742680, 0x71736400, + 0x7172A180, 0x7171DF00, 0x71711C80, + 0x71705A00, 0x716F9780, 0x716ED500, + 0x716E1280, 0x716D5000, 0x716C8D80, + 0x716BCB00, 0x716B0880, 0x716A4600, + 0x71698380, 0x7168C100, 0x7167FE80, + 0x71673C00, 0x71667980, 0x7165B700, + 0x7164F480, 0x71643200, 0x71636F80, + 0x7162AD00, 0x7161EA80, 0x71612800, + 0x71606580, 0x715FA300, 0x715EE080, + 0x715E1E00, 0x715D5B80, 0x715C9900, + 0x715BD680, 0x715B1400, 0x715A5180, + 0x71598F00, 0x7158CC80, 0x71580A00, + 0x71574780, 0x71568500, 0x7155C280, + 0x71550000, 0x71543D80, 0x71537B00, + 0x7152B880, 0x7151F600, 0x71513380, + 0x71507100, 0x714FAE80, 0x714EEC00, + 0x714E2980, 0x714D6700, 0x714CA480, + 0x714BE200, 0x714B1F80, 0x714A5D00, + 0x71499A80, 0x7148D800, 0x71481580, + 0x71475300, 0x71469080, 0x7145CE00, + 0x71450B80, 0x71444900, 0x71438680, + 0x7142C400, 0x71420180, 0x71413F00, + 0x71407C80, 0x713FBA00, 0x713EF780, + 0x713E3500, 0x713D7280, 0x713CB000, + 0x713BED80, 0x713B2B00, 0x713A6880, + 0x7139A600, 0x7138E380, 0x71382100, + 0x71375E80, 0x71369C00, 0x7135D980, + 0x71351700, 0x71345480, 0x71339200, + 0x7132CF80, 0x71320D00, 0x71314A80, + 0x71308800, 0x712FC580, 0x712F0300, + 0x712E4080, 0x712D7E00, 0x712CBB80, + 0x712BF900, 0x712B3680, 0x712A7400, + 0x7129B180, 0x7128EF00, 0x71282C80, + 0x71276A00, 0x7126A780, 0x7125E500, + 0x71252280, 0x71246000, 0x71239D80, + 0x7122DB00, 0x71221880, 0x71215600, + 0x71209380, 0x711FD100, 0x711F0E80, + 0x711E4C00, 0x711D8980, 0x711CC700, + 0x711C0480, 0x711B4200, 0x711A7F80, + 0x7119BD00, 0x7118FA80, 0x71183800, + 0x71177580, 0x7116B300, 0x7115F080, + 0x71152E00, 0x71146B80, 0x7113A900, + 0x7112E680, 0x71122400, 0x71116180, + 0x71109F00, 0x710FDC80, 0x710F1A00, + 0x710E5780, 0x710D9500, 0x710CD280, + 0x710C1000, 0x710B4D80, 0x710A8B00, + 0x7109C880, 0x71090600, 0x71084380, + 0x71078100, 0x7106BE80, 0x7105FC00, + 0x71053980, 0x71047700, 0x7103B480, + 0x7102F200, 0x71022F80, 0x71016D00, + 0x7100AA80, 0x70FFE800, 0x70FF2580, + 0x70FE6300, 0x70FDA080, 0x70FCDE00, + 0x70FC1B80, 0x70FB5900, 0x70FA9680, + 0x70F9D400, 0x70F91180, 0x70F84F00, + 0x70F78C80, 0x70F6CA00, 0x70F60780, + 0x70F54500, 0x70F48280, 0x70F3C000, + 0x70F2FD80, 0x70F23B00, 0x70F17880, + 0x70F0B600, 0x70EFF380, 0x70EF3100, + 0x70EE6E80, 0x70EDAC00, 0x70ECE980, + 0x70EC2700, 0x70EB6480, 0x70EAA200, + 0x70E9DF80, 0x70E91D00, 0x70E85A80, + 0x70E79800, 0x70E6D580, 0x70E61300, + 0x70E55080, 0x70E48E00, 0x70E3CB80, + 0x70E30900, 0x70E24680, 0x70E18400, + 0x70E0C180, 0x70DFFF00, 0x70DF3C80, + 0x70DE7A00, 0x70DDB780, 0x70DCF500, + 0x70DC3280, 0x70DB7000, 0x70DAAD80, + 0x70D9EB00, 0x70D92880, 0x70D86600, + 0x70D7A380, 0x70D6E100, 0x70D61E80, + 0x70D55C00, 0x70D49980, 0x70D3D700, + 0x70D31480, 0x70D25200, 0x70D18F80, + 0x70D0CD00, 0x70D00A80, 0x70CF4800, + 0x70CE8580, 0x70CDC300, 0x70CD0080, + 0x70CC3E00, 0x70CB7B80, 0x70CAB900, + 0x70C9F680, 0x70C93400, 0x70C87180, + 0x70C7AF00, 0x70C6EC80, 0x70C62A00, + 0x70C56780, 0x70C4A500, 0x70C3E280, + 0x70C32000, 0x70C25D80, 0x70C19B00, + 0x70C0D880, 0x70C01600, 0x70BF5380, + 0x70BE9100, 0x70BDCE80, 0x70BD0C00, + 0x70BC4980, 0x70BB8700, 0x70BAC480, + 0x70BA0200, 0x70B93F80, 0x70B87D00, + 0x70B7BA80, 0x70B6F800, 0x70B63580, + 0x70B57300, 0x70B4B080, 0x70B3EE00, + 0x70B32B80, 0x70B26900, 0x70B1A680, + 0x70B0E400, 0x70B02180, 0x70AF5F00, + 0x70AE9C80, 0x70ADDA00, 0x70AD1780, + 0x70AC5500, 0x70AB9280, 0x70AAD000, + 0x70AA0D80, 0x70A94B00, 0x70A88880, + 0x70A7C600, 0x70A70380, 0x70A64100, + 0x70A57E80, 0x70A4BC00, 0x70A3F980, + 0x70A33700, 0x70A27480, 0x70A1B200, + 0x70A0EF80, 0x70A02D00, 0x709F6A80, + 0x709EA800, 0x709DE580, 0x709D2300, + 0x709C6080, 0x709B9E00, 0x709ADB80, + 0x709A1900, 0x70995680, 0x70989400, + 0x7097D180, 0x70970F00, 0x70964C80, + 0x70958A00, 0x7094C780, 0x70940500, + 0x70934280, 0x70928000, 0x7091BD80, + 0x7090FB00, 0x70903880, 0x708F7600, + 0x708EB380, 0x708DF100, 0x708D2E80, + 0x708C6C00, 0x708BA980, 0x708AE700, + 0x708A2480, 0x70896200, 0x70889F80, + 0x7087DD00, 0x70871A80, 0x70865800, + 0x70859580, 0x7084D300, 0x70841080, + 0x70834E00, 0x70828B80, 0x7081C900, + 0x70810680, 0x70804400, 0x707F8180, + 0x707EBF00, 0x707DFC80, 0x707D3A00, + 0x707C7780, 0x707BB500, 0x707AF280, + 0x707A3000, 0x70796D80, 0x7078AB00, + 0x7077E880, 0x70772600, 0x70766380, + 0x7075A100, 0x7074DE80, 0x70741C00, + 0x70735980, 0x70729700, 0x7071D480, + 0x70711200, 0x70704F80, 0x706F8D00, + 0x706ECA80, 0x706E0800, 0x706D4580, + 0x706C8300, 0x706BC080, 0x706AFE00, + 0x706A3B80, 0x70697900, 0x7068B680, + 0x7067F400, 0x70673180, 0x70666F00, + 0x7065AC80, 0x7064EA00, 0x70642780, + 0x70636500, 0x7062A280, 0x7061E000, + 0x70611D80, 0x70605B00, 0x705F9880, + 0x705ED600, 0x705E1380, 0x705D5100, + 0x705C8E80, 0x705BCC00, 0x705B0980, + 0x705A4700, 0x70598480, 0x7058C200, + 0x7057FF80, 0x70573D00, 0x70567A80, + 0x7055B800, 0x7054F580, 0x70543300, + 0x70537080, 0x7052AE00, 0x7051EB80, + 0x70512900, 0x70506680, 0x704FA400, + 0x704EE180, 0x704E1F00, 0x704D5C80, + 0x704C9A00, 0x704BD780, 0x704B1500, + 0x704A5280, 0x70499000, 0x7048CD80, + 0x70480B00, 0x70474880, 0x70468600, + 0x7045C380, 0x70450100, 0x70443E80, + 0x70437C00, 0x7042B980, 0x7041F700, + 0x70413480, 0x70407200, 0x703FAF80, + 0x703EED00, 0x703E2A80, 0x703D6800, + 0x703CA580, 0x703BE300, 0x703B2080, + 0x703A5E00, 0x70399B80, 0x7038D900, + 0x70381680, 0x70375400, 0x70369180, + 0x7035CF00, 0x70350C80, 0x70344A00, + 0x70338780, 0x7032C500, 0x70320280, + 0x70314000, 0x70307D80, 0x702FBB00, + 0x702EF880, 0x702E3600, 0x702D7380, + 0x702CB100, 0x702BEE80, 0x702B2C00, + 0x702A6980, 0x7029A700, 0x7028E480, + 0x70282200, 0x70275F80, 0x70269D00, + 0x7025DA80, 0x70251800, 0x70245580, + 0x70239300, 0x7022D080, 0x70220E00, + 0x70214B80, 0x70208900, 0x701FC680, + 0x701F0400, 0x701E4180, 0x701D7F00, + 0x701CBC80, 0x701BFA00, 0x701B3780, + 0x701A7500, 0x7019B280, 0x7018F000, + 0x70182D80, 0x70176B00, 0x7016A880, + 0x7015E600, 0x70152380, 0x70146100, + 0x70139E80, 0x7012DC00, 0x70121980, + 0x70115700, 0x70109480, 0x700FD200, + 0x700F0F80, 0x700E4D00, 0x700D8A80, + 0x700CC800, 0x700C0580, 0x700B4300, + 0x700A8080, 0x7009BE00, 0x7008FB80, + 0x70083900, 0x70077680, 0x7006B400, + 0x7005F180, 0x70052F00, 0x70046C80, + 0x7003AA00, 0x7002E780, 0x70022500, + 0x70016280, 0x7000A000, 0x6FFFDD80, + 0x6FFF1B00, 0x6FFE5880, 0x6FFD9600, + 0x6FFCD380, 0x6FFC1100, 0x6FFB4E80, + 0x6FFA8C00, 0x6FF9C980, 0x6FF90700, + 0x6FF84480, 0x6FF78200, 0x6FF6BF80, + 0x6FF5FD00, 0x6FF53A80, 0x6FF47800, + 0x6FF3B580, 0x6FF2F300, 0x6FF23080, + 0x6FF16E00, 0x6FF0AB80, 0x6FEFE900, + 0x6FEF2680, 0x6FEE6400, 0x6FEDA180, + 0x6FECDF00, 0x6FEC1C80, 0x6FEB5A00, + 0x6FEA9780, 0x6FE9D500, 0x6FE91280, + 0x6FE85000, 0x6FE78D80, 0x6FE6CB00, + 0x6FE60880, 0x6FE54600, 0x6FE48380, + 0x6FE3C100, 0x6FE2FE80, 0x6FE23C00, + 0x6FE17980, 0x6FE0B700, 0x6FDFF480, + 0x6FDF3200, 0x6FDE6F80, 0x6FDDAD00, + 0x6FDCEA80, 0x6FDC2800, 0x6FDB6580, + 0x6FDAA300, 0x6FD9E080, 0x6FD91E00, + 0x6FD85B80, 0x6FD79900, 0x6FD6D680, + 0x6FD61400, 0x6FD55180, 0x6FD48F00, + 0x6FD3CC80, 0x6FD30A00, 0x6FD24780, + 0x6FD18500, 0x6FD0C280, 0x6FD00000, + 0x6FCF4680, 0x6FCE8D00, 0x6FCDD380, + 0x6FCD1A00, 0x6FCC6080, 0x6FCBA700, + 0x6FCAED80, 0x6FCA3400, 0x6FC97A80, + 0x6FC8C100, 0x6FC80780, 0x6FC74E00, + 0x6FC69480, 0x6FC5DB00, 0x6FC52180, + 0x6FC46800, 0x6FC3AE80, 0x6FC2F500, + 0x6FC23B80, 0x6FC18200, 0x6FC0C880, + 0x6FC00F00, 0x6FBF5580, 0x6FBE9C00, + 0x6FBDE280, 0x6FBD2900, 0x6FBC6F80, + 0x6FBBB600, 0x6FBAFC80, 0x6FBA4300, + 0x6FB98980, 0x6FB8D000, 0x6FB81680, + 0x6FB75D00, 0x6FB6A380, 0x6FB5EA00, + 0x6FB53080, 0x6FB47700, 0x6FB3BD80, + 0x6FB30400, 0x6FB24A80, 0x6FB19100, + 0x6FB0D780, 0x6FB01E00, 0x6FAF6480, + 0x6FAEAB00, 0x6FADF180, 0x6FAD3800, + 0x6FAC7E80, 0x6FABC500, 0x6FAB0B80, + 0x6FAA5200, 0x6FA99880, 0x6FA8DF00, + 0x6FA82580, 0x6FA76C00, 0x6FA6B280, + 0x6FA5F900, 0x6FA53F80, 0x6FA48600, + 0x6FA3CC80, 0x6FA31300, 0x6FA25980, + 0x6FA1A000, 0x6FA0E680, 0x6FA02D00, + 0x6F9F7380, 0x6F9EBA00, 0x6F9E0080, + 0x6F9D4700, 0x6F9C8D80, 0x6F9BD400, + 0x6F9B1A80, 0x6F9A6100, 0x6F99A780, + 0x6F98EE00, 0x6F983480, 0x6F977B00, + 0x6F96C180, 0x6F960800, 0x6F954E80, + 0x6F949500, 0x6F93DB80, 0x6F932200, + 0x6F926880, 0x6F91AF00, 0x6F90F580, + 0x6F903C00, 0x6F8F8280, 0x6F8EC900, + 0x6F8E0F80, 0x6F8D5600, 0x6F8C9C80, + 0x6F8BE300, 0x6F8B2980, 0x6F8A7000, + 0x6F89B680, 0x6F88FD00, 0x6F884380, + 0x6F878A00, 0x6F86D080, 0x6F861700, + 0x6F855D80, 0x6F84A400, 0x6F83EA80, + 0x6F833100, 0x6F827780, 0x6F81BE00, + 0x6F810480, 0x6F804B00, 0x6F7F9180, + 0x6F7ED800, 0x6F7E1E80, 0x6F7D6500, + 0x6F7CAB80, 0x6F7BF200, 0x6F7B3880, + 0x6F7A7F00, 0x6F79C580, 0x6F790C00, + 0x6F785280, 0x6F779900, 0x6F76DF80, + 0x6F762600, 0x6F756C80, 0x6F74B300, + 0x6F73F980, 0x6F734000, 0x6F728680, + 0x6F71CD00, 0x6F711380, 0x6F705A00, + 0x6F6FA080, 0x6F6EE700, 0x6F6E2D80, + 0x6F6D7400, 0x6F6CBA80, 0x6F6C0100, + 0x6F6B4780, 0x6F6A8E00, 0x6F69D480, + 0x6F691B00, 0x6F686180, 0x6F67A800, + 0x6F66EE80, 0x6F663500, 0x6F657B80, + 0x6F64C200, 0x6F640880, 0x6F634F00, + 0x6F629580, 0x6F61DC00, 0x6F612280, + 0x6F606900, 0x6F5FAF80, 0x6F5EF600, + 0x6F5E3C80, 0x6F5D8300, 0x6F5CC980, + 0x6F5C1000, 0x6F5B5680, 0x6F5A9D00, + 0x6F59E380, 0x6F592A00, 0x6F587080, + 0x6F57B700, 0x6F56FD80, 0x6F564400, + 0x6F558A80, 0x6F54D100, 0x6F541780, + 0x6F535E00, 0x6F52A480, 0x6F51EB00, + 0x6F513180, 0x6F507800, 0x6F4FBE80, + 0x6F4F0500, 0x6F4E4B80, 0x6F4D9200, + 0x6F4CD880, 0x6F4C1F00, 0x6F4B6580, + 0x6F4AAC00, 0x6F49F280, 0x6F493900, + 0x6F487F80, 0x6F47C600, 0x6F470C80, + 0x6F465300, 0x6F459980, 0x6F44E000, + 0x6F442680, 0x6F436D00, 0x6F42B380, + 0x6F41FA00, 0x6F414080, 0x6F408700, + 0x6F3FCD80, 0x6F3F1400, 0x6F3E5A80, + 0x6F3DA100, 0x6F3CE780, 0x6F3C2E00, + 0x6F3B7480, 0x6F3ABB00, 0x6F3A0180, + 0x6F394800, 0x6F388E80, 0x6F37D500, + 0x6F371B80, 0x6F366200, 0x6F35A880, + 0x6F34EF00, 0x6F343580, 0x6F337C00, + 0x6F32C280, 0x6F320900, 0x6F314F80, + 0x6F309600, 0x6F2FDC80, 0x6F2F2300, + 0x6F2E6980, 0x6F2DB000, 0x6F2CF680, + 0x6F2C3D00, 0x6F2B8380, 0x6F2ACA00, + 0x6F2A1080, 0x6F295700, 0x6F289D80, + 0x6F27E400, 0x6F272A80, 0x6F267100, + 0x6F25B780, 0x6F24FE00, 0x6F244480, + 0x6F238B00, 0x6F22D180, 0x6F221800, + 0x6F215E80, 0x6F20A500, 0x6F1FEB80, + 0x6F1F3200, 0x6F1E7880, 0x6F1DBF00, + 0x6F1D0580, 0x6F1C4C00, 0x6F1B9280, + 0x6F1AD900, 0x6F1A1F80, 0x6F196600, + 0x6F18AC80, 0x6F17F300, 0x6F173980, + 0x6F168000, 0x6F15C680, 0x6F150D00, + 0x6F145380, 0x6F139A00, 0x6F12E080, + 0x6F122700, 0x6F116D80, 0x6F10B400, + 0x6F0FFA80, 0x6F0F4100, 0x6F0E8780, + 0x6F0DCE00, 0x6F0D1480, 0x6F0C5B00, + 0x6F0BA180, 0x6F0AE800, 0x6F0A2E80, + 0x6F097500, 0x6F08BB80, 0x6F080200, + 0x6F074880, 0x6F068F00, 0x6F05D580, + 0x6F051C00, 0x6F046280, 0x6F03A900, + 0x6F02EF80, 0x6F023600, 0x6F017C80, + 0x6F00C300, 0x6F000980, 0x6EFF5000, + 0x6EFE9680, 0x6EFDDD00, 0x6EFD2380, + 0x6EFC6A00, 0x6EFBB080, 0x6EFAF700, + 0x6EFA3D80, 0x6EF98400, 0x6EF8CA80, + 0x6EF81100, 0x6EF75780, 0x6EF69E00, + 0x6EF5E480, 0x6EF52B00, 0x6EF47180, + 0x6EF3B800, 0x6EF2FE80, 0x6EF24500, + 0x6EF18B80, 0x6EF0D200, 0x6EF01880, + 0x6EEF5F00, 0x6EEEA580, 0x6EEDEC00, + 0x6EED3280, 0x6EEC7900, 0x6EEBBF80, + 0x6EEB0600, 0x6EEA4C80, 0x6EE99300, + 0x6EE8D980, 0x6EE82000, 0x6EE76680, + 0x6EE6AD00, 0x6EE5F380, 0x6EE53A00, + 0x6EE48080, 0x6EE3C700, 0x6EE30D80, + 0x6EE25400, 0x6EE19A80, 0x6EE0E100, + 0x6EE02780, 0x6EDF6E00, 0x6EDEB480, + 0x6EDDFB00, 0x6EDD4180, 0x6EDC8800, + 0x6EDBCE80, 0x6EDB1500, 0x6EDA5B80, + 0x6ED9A200, 0x6ED8E880, 0x6ED82F00, + 0x6ED77580, 0x6ED6BC00, 0x6ED60280, + 0x6ED54900, 0x6ED48F80, 0x6ED3D600, + 0x6ED31C80, 0x6ED26300, 0x6ED1A980, + 0x6ED0F000, 0x6ED03680, 0x6ECF7D00, + 0x6ECEC380, 0x6ECE0A00, 0x6ECD5080, + 0x6ECC9700, 0x6ECBDD80, 0x6ECB2400, + 0x6ECA6A80, 0x6EC9B100, 0x6EC8F780, + 0x6EC83E00, 0x6EC78480, 0x6EC6CB00, + 0x6EC61180, 0x6EC55800, 0x6EC49E80, + 0x6EC3E500, 0x6EC32B80, 0x6EC27200, + 0x6EC1B880, 0x6EC0FF00, 0x6EC04580, + 0x6EBF8C00, 0x6EBED280, 0x6EBE1900, + 0x6EBD5F80, 0x6EBCA600, 0x6EBBEC80, + 0x6EBB3300, 0x6EBA7980, 0x6EB9C000, + 0x6EB90680, 0x6EB84D00, 0x6EB79380, + 0x6EB6DA00, 0x6EB62080, 0x6EB56700, + 0x6EB4AD80, 0x6EB3F400, 0x6EB33A80, + 0x6EB28100, 0x6EB1C780, 0x6EB10E00, + 0x6EB05480, 0x6EAF9B00, 0x6EAEE180, + 0x6EAE2800, 0x6EAD6E80, 0x6EACB500, + 0x6EABFB80, 0x6EAB4200, 0x6EAA8880, + 0x6EA9CF00, 0x6EA91580, 0x6EA85C00, + 0x6EA7A280, 0x6EA6E900, 0x6EA62F80, + 0x6EA57600, 0x6EA4BC80, 0x6EA40300, + 0x6EA34980, 0x6EA29000, 0x6EA1D680, + 0x6EA11D00, 0x6EA06380, 0x6E9FAA00, + 0x6E9EF080, 0x6E9E3700, 0x6E9D7D80, + 0x6E9CC400, 0x6E9C0A80, 0x6E9B5100, + 0x6E9A9780, 0x6E99DE00, 0x6E992480, + 0x6E986B00, 0x6E97B180, 0x6E96F800, + 0x6E963E80, 0x6E958500, 0x6E94CB80, + 0x6E941200, 0x6E935880, 0x6E929F00, + 0x6E91E580, 0x6E912C00, 0x6E907280, + 0x6E8FB900, 0x6E8EFF80, 0x6E8E4600, + 0x6E8D8C80, 0x6E8CD300, 0x6E8C1980, + 0x6E8B6000, 0x6E8AA680, 0x6E89ED00, + 0x6E893380, 0x6E887A00, 0x6E87C080, + 0x6E870700, 0x6E864D80, 0x6E859400, + 0x6E84DA80, 0x6E842100, 0x6E836780, + 0x6E82AE00, 0x6E81F480, 0x6E813B00, + 0x6E808180, 0x6E7FC800, 0x6E7F0E80, + 0x6E7E5500, 0x6E7D9B80, 0x6E7CE200, + 0x6E7C2880, 0x6E7B6F00, 0x6E7AB580, + 0x6E79FC00, 0x6E794280, 0x6E788900, + 0x6E77CF80, 0x6E771600, 0x6E765C80, + 0x6E75A300, 0x6E74E980, 0x6E743000, + 0x6E737680, 0x6E72BD00, 0x6E720380, + 0x6E714A00, 0x6E709080, 0x6E6FD700, + 0x6E6F1D80, 0x6E6E6400, 0x6E6DAA80, + 0x6E6CF100, 0x6E6C3780, 0x6E6B7E00, + 0x6E6AC480, 0x6E6A0B00, 0x6E695180, + 0x6E689800, 0x6E67DE80, 0x6E672500, + 0x6E666B80, 0x6E65B200, 0x6E64F880, + 0x6E643F00, 0x6E638580, 0x6E62CC00, + 0x6E621280, 0x6E615900, 0x6E609F80, + 0x6E5FE600, 0x6E5F2C80, 0x6E5E7300, + 0x6E5DB980, 0x6E5D0000, 0x6E5C4680, + 0x6E5B8D00, 0x6E5AD380, 0x6E5A1A00, + 0x6E596080, 0x6E58A700, 0x6E57ED80, + 0x6E573400, 0x6E567A80, 0x6E55C100, + 0x6E550780, 0x6E544E00, 0x6E539480, + 0x6E52DB00, 0x6E522180, 0x6E516800, + 0x6E50AE80, 0x6E4FF500, 0x6E4F3B80, + 0x6E4E8200, 0x6E4DC880, 0x6E4D0F00, + 0x6E4C5580, 0x6E4B9C00, 0x6E4AE280, + 0x6E4A2900, 0x6E496F80, 0x6E48B600, + 0x6E47FC80, 0x6E474300, 0x6E468980, + 0x6E45D000, 0x6E451680, 0x6E445D00, + 0x6E43A380, 0x6E42EA00, 0x6E423080, + 0x6E417700, 0x6E40BD80, 0x6E400400, + 0x6E3F4A80, 0x6E3E9100, 0x6E3DD780, + 0x6E3D1E00, 0x6E3C6480, 0x6E3BAB00, + 0x6E3AF180, 0x6E3A3800, 0x6E397E80, + 0x6E38C500, 0x6E380B80, 0x6E375200, + 0x6E369880, 0x6E35DF00, 0x6E352580, + 0x6E346C00, 0x6E33B280, 0x6E32F900, + 0x6E323F80, 0x6E318600, 0x6E30CC80, + 0x6E301300, 0x6E2F5980, 0x6E2EA000, + 0x6E2DE680, 0x6E2D2D00, 0x6E2C7380, + 0x6E2BBA00, 0x6E2B0080, 0x6E2A4700, + 0x6E298D80, 0x6E28D400, 0x6E281A80, + 0x6E276100, 0x6E26A780, 0x6E25EE00, + 0x6E253480, 0x6E247B00, 0x6E23C180, + 0x6E230800, 0x6E224E80, 0x6E219500, + 0x6E20DB80, 0x6E202200, 0x6E1F6880, + 0x6E1EAF00, 0x6E1DF580, 0x6E1D3C00, + 0x6E1C8280, 0x6E1BC900, 0x6E1B0F80, + 0x6E1A5600, 0x6E199C80, 0x6E18E300, + 0x6E182980, 0x6E177000, 0x6E16B680, + 0x6E15FD00, 0x6E154380, 0x6E148A00, + 0x6E13D080, 0x6E131700, 0x6E125D80, + 0x6E11A400, 0x6E10EA80, 0x6E103100, + 0x6E0F7780, 0x6E0EBE00, 0x6E0E0480, + 0x6E0D4B00, 0x6E0C9180, 0x6E0BD800, + 0x6E0B1E80, 0x6E0A6500, 0x6E09AB80, + 0x6E08F200, 0x6E083880, 0x6E077F00, + 0x6E06C580, 0x6E060C00, 0x6E055280, + 0x6E049900, 0x6E03DF80, 0x6E032600, + 0x6E026C80, 0x6E01B300, 0x6E00F980, + 0x6E004000, 0x6DFF8680, 0x6DFECD00, + 0x6DFE1380, 0x6DFD5A00, 0x6DFCA080, + 0x6DFBE700, 0x6DFB2D80, 0x6DFA7400, + 0x6DF9BA80, 0x6DF90100, 0x6DF84780, + 0x6DF78E00, 0x6DF6D480, 0x6DF61B00, + 0x6DF56180, 0x6DF4A800, 0x6DF3EE80, + 0x6DF33500, 0x6DF27B80, 0x6DF1C200, + 0x6DF10880, 0x6DF04F00, 0x6DEF9580, + 0x6DEEDC00, 0x6DEE2280, 0x6DED6900, + 0x6DECAF80, 0x6DEBF600, 0x6DEB3C80, + 0x6DEA8300, 0x6DE9C980, 0x6DE91000, + 0x6DE85680, 0x6DE79D00, 0x6DE6E380, + 0x6DE62A00, 0x6DE57080, 0x6DE4B700, + 0x6DE3FD80, 0x6DE34400, 0x6DE28A80, + 0x6DE1D100, 0x6DE11780, 0x6DE05E00, + 0x6DDFA480, 0x6DDEEB00, 0x6DDE3180, + 0x6DDD7800, 0x6DDCBE80, 0x6DDC0500, + 0x6DDB4B80, 0x6DDA9200, 0x6DD9D880, + 0x6DD91F00, 0x6DD86580, 0x6DD7AC00, + 0x6DD6F280, 0x6DD63900, 0x6DD57F80, + 0x6DD4C600, 0x6DD40C80, 0x6DD35300, + 0x6DD29980, 0x6DD1E000, 0x6DD12680, + 0x6DD06D00, 0x6DCFB380, 0x6DCEFA00, + 0x6DCE4080, 0x6DCD8700, 0x6DCCCD80, + 0x6DCC1400, 0x6DCB5A80, 0x6DCAA100, + 0x6DC9E780, 0x6DC92E00, 0x6DC87480, + 0x6DC7BB00, 0x6DC70180, 0x6DC64800, + 0x6DC58E80, 0x6DC4D500, 0x6DC41B80, + 0x6DC36200, 0x6DC2A880, 0x6DC1EF00, + 0x6DC13580, 0x6DC07C00, 0x6DBFC280, + 0x6DBF0900, 0x6DBE4F80, 0x6DBD9600, + 0x6DBCDC80, 0x6DBC2300, 0x6DBB6980, + 0x6DBAB000, 0x6DB9F680, 0x6DB93D00, + 0x6DB88380, 0x6DB7CA00, 0x6DB71080, + 0x6DB65700, 0x6DB59D80, 0x6DB4E400, + 0x6DB42A80, 0x6DB37100, 0x6DB2B780, + 0x6DB1FE00, 0x6DB14480, 0x6DB08B00, + 0x6DAFD180, 0x6DAF1800, 0x6DAE5E80, + 0x6DADA500, 0x6DACEB80, 0x6DAC3200, + 0x6DAB7880, 0x6DAABF00, 0x6DAA0580, + 0x6DA94C00, 0x6DA89280, 0x6DA7D900, + 0x6DA71F80, 0x6DA66600, 0x6DA5AC80, + 0x6DA4F300, 0x6DA43980, 0x6DA38000, + 0x6DA2C680, 0x6DA20D00, 0x6DA15380, + 0x6DA09A00, 0x6D9FE080, 0x6D9F2700, + 0x6D9E6D80, 0x6D9DB400, 0x6D9CFA80, + 0x6D9C4100, 0x6D9B8780, 0x6D9ACE00, + 0x6D9A1480, 0x6D995B00, 0x6D98A180, + 0x6D97E800, 0x6D972E80, 0x6D967500, + 0x6D95BB80, 0x6D950200, 0x6D944880, + 0x6D938F00, 0x6D92D580, 0x6D921C00, + 0x6D916280, 0x6D90A900, 0x6D8FEF80, + 0x6D8F3600, 0x6D8E7C80, 0x6D8DC300, + 0x6D8D0980, 0x6D8C5000, 0x6D8B9680, + 0x6D8ADD00, 0x6D8A2380, 0x6D896A00, + 0x6D88B080, 0x6D87F700, 0x6D873D80, + 0x6D868400, 0x6D85CA80, 0x6D851100, + 0x6D845780, 0x6D839E00, 0x6D82E480, + 0x6D822B00, 0x6D817180, 0x6D80B800, + 0x6D7FFE80, 0x6D7F4500, 0x6D7E8B80, + 0x6D7DD200, 0x6D7D1880, 0x6D7C5F00, + 0x6D7BA580, 0x6D7AEC00, 0x6D7A3280, + 0x6D797900, 0x6D78BF80, 0x6D780600, + 0x6D774C80, 0x6D769300, 0x6D75D980, + 0x6D752000, 0x6D746680, 0x6D73AD00, + 0x6D72F380, 0x6D723A00, 0x6D718080, + 0x6D70C700, 0x6D700D80, 0x6D6F5400, + 0x6D6E9A80, 0x6D6DE100, 0x6D6D2780, + 0x6D6C6E00, 0x6D6BB480, 0x6D6AFB00, + 0x6D6A4180, 0x6D698800, 0x6D68CE80, + 0x6D681500, 0x6D675B80, 0x6D66A200, + 0x6D65E880, 0x6D652F00, 0x6D647580, + 0x6D63BC00, 0x6D630280, 0x6D624900, + 0x6D618F80, 0x6D60D600, 0x6D601C80, + 0x6D5F6300, 0x6D5EA980, 0x6D5DF000, + 0x6D5D3680, 0x6D5C7D00, 0x6D5BC380, + 0x6D5B0A00, 0x6D5A5080, 0x6D599700, + 0x6D58DD80, 0x6D582400, 0x6D576A80, + 0x6D56B100, 0x6D55F780, 0x6D553E00, + 0x6D548480, 0x6D53CB00, 0x6D531180, + 0x6D525800, 0x6D519E80, 0x6D50E500, + 0x6D502B80, 0x6D4F7200, 0x6D4EB880, + 0x6D4DFF00, 0x6D4D4580, 0x6D4C8C00, + 0x6D4BD280, 0x6D4B1900, 0x6D4A5F80, + 0x6D49A600, 0x6D48EC80, 0x6D483300, + 0x6D477980, 0x6D46C000, 0x6D460680, + 0x6D454D00, 0x6D449380, 0x6D43DA00, + 0x6D432080, 0x6D426700, 0x6D41AD80, + 0x6D40F400, 0x6D403A80, 0x6D3F8100, + 0x6D3EC780, 0x6D3E0E00, 0x6D3D5480, + 0x6D3C9B00, 0x6D3BE180, 0x6D3B2800, + 0x6D3A6E80, 0x6D39B500, 0x6D38FB80, + 0x6D384200, 0x6D378880, 0x6D36CF00, + 0x6D361580, 0x6D355C00, 0x6D34A280, + 0x6D33E900, 0x6D332F80, 0x6D327600, + 0x6D31BC80, 0x6D310300, 0x6D304980, + 0x6D2F9000, 0x6D2ED680, 0x6D2E1D00, + 0x6D2D6380, 0x6D2CAA00, 0x6D2BF080, + 0x6D2B3700, 0x6D2A7D80, 0x6D29C400, + 0x6D290A80, 0x6D285100, 0x6D279780, + 0x6D26DE00, 0x6D262480, 0x6D256B00, + 0x6D24B180, 0x6D23F800, 0x6D233E80, + 0x6D228500, 0x6D21CB80, 0x6D211200, + 0x6D205880, 0x6D1F9F00, 0x6D1EE580, + 0x6D1E2C00, 0x6D1D7280, 0x6D1CB900, + 0x6D1BFF80, 0x6D1B4600, 0x6D1A8C80, + 0x6D19D300, 0x6D191980, 0x6D186000, + 0x6D17A680, 0x6D16ED00, 0x6D163380, + 0x6D157A00, 0x6D14C080, 0x6D140700, + 0x6D134D80, 0x6D129400, 0x6D11DA80, + 0x6D112100, 0x6D106780, 0x6D0FAE00, + 0x6D0EF480, 0x6D0E3B00, 0x6D0D8180, + 0x6D0CC800, 0x6D0C0E80, 0x6D0B5500, + 0x6D0A9B80, 0x6D09E200, 0x6D092880, + 0x6D086F00, 0x6D07B580, 0x6D06FC00, + 0x6D064280, 0x6D058900, 0x6D04CF80, + 0x6D041600, 0x6D035C80, 0x6D02A300, + 0x6D01E980, 0x6D013000, 0x6D007680, + 0x6CFFBD00, 0x6CFF0380, 0x6CFE4A00, + 0x6CFD9080, 0x6CFCD700, 0x6CFC1D80, + 0x6CFB6400, 0x6CFAAA80, 0x6CF9F100, + 0x6CF93780, 0x6CF87E00, 0x6CF7C480, + 0x6CF70B00, 0x6CF65180, 0x6CF59800, + 0x6CF4DE80, 0x6CF42500, 0x6CF36B80, + 0x6CF2B200, 0x6CF1F880, 0x6CF13F00, + 0x6CF08580, 0x6CEFCC00, 0x6CEF1280, + 0x6CEE5900, 0x6CED9F80, 0x6CECE600, + 0x6CEC2C80, 0x6CEB7300, 0x6CEAB980, + 0x6CEA0000, 0x6CE94680, 0x6CE88D00, + 0x6CE7D380, 0x6CE71A00, 0x6CE66080, + 0x6CE5A700, 0x6CE4ED80, 0x6CE43400, + 0x6CE37A80, 0x6CE2C100, 0x6CE20780, + 0x6CE14E00, 0x6CE09480, 0x6CDFDB00, + 0x6CDF2180, 0x6CDE6800, 0x6CDDAE80, + 0x6CDCF500, 0x6CDC3B80, 0x6CDB8200, + 0x6CDAC880, 0x6CDA0F00, 0x6CD95580, + 0x6CD89C00, 0x6CD7E280, 0x6CD72900, + 0x6CD66F80, 0x6CD5B600, 0x6CD4FC80, + 0x6CD44300, 0x6CD38980, 0x6CD2D000, + 0x6CD21680, 0x6CD15D00, 0x6CD0A380, + 0x6CCFEA00, 0x6CCF3080, 0x6CCE7700, + 0x6CCDBD80, 0x6CCD0400, 0x6CCC4A80, + 0x6CCB9100, 0x6CCAD780, 0x6CCA1E00, + 0x6CC96480, 0x6CC8AB00, 0x6CC7F180, + 0x6CC73800, 0x6CC67E80, 0x6CC5C500, + 0x6CC50B80, 0x6CC45200, 0x6CC39880, + 0x6CC2DF00, 0x6CC22580, 0x6CC16C00, + 0x6CC0B280, 0x6CBFF900, 0x6CBF3F80, + 0x6CBE8600, 0x6CBDCC80, 0x6CBD1300, + 0x6CBC5980, 0x6CBBA000, 0x6CBAE680, + 0x6CBA2D00, 0x6CB97380, 0x6CB8BA00, + 0x6CB80080, 0x6CB74700, 0x6CB68D80, + 0x6CB5D400, 0x6CB51A80, 0x6CB46100, + 0x6CB3A780, 0x6CB2EE00, 0x6CB23480, + 0x6CB17B00, 0x6CB0C180, 0x6CB00800, + 0x6CAF4E80, 0x6CAE9500, 0x6CADDB80, + 0x6CAD2200, 0x6CAC6880, 0x6CABAF00, + 0x6CAAF580, 0x6CAA3C00, 0x6CA98280, + 0x6CA8C900, 0x6CA80F80, 0x6CA75600, + 0x6CA69C80, 0x6CA5E300, 0x6CA52980, + 0x6CA47000, 0x6CA3B680, 0x6CA2FD00, + 0x6CA24380, 0x6CA18A00, 0x6CA0D080, + 0x6CA01700, 0x6C9F5D80, 0x6C9EA400, + 0x6C9DEA80, 0x6C9D3100, 0x6C9C7780, + 0x6C9BBE00, 0x6C9B0480, 0x6C9A4B00, + 0x6C999180, 0x6C98D800, 0x6C981E80, + 0x6C976500, 0x6C96AB80, 0x6C95F200, + 0x6C953880, 0x6C947F00, 0x6C93C580, + 0x6C930C00, 0x6C925280, 0x6C919900, + 0x6C90DF80, 0x6C902600, 0x6C8F6C80, + 0x6C8EB300, 0x6C8DF980, 0x6C8D4000, + 0x6C8C8680, 0x6C8BCD00, 0x6C8B1380, + 0x6C8A5A00, 0x6C89A080, 0x6C88E700, + 0x6C882D80, 0x6C877400, 0x6C86BA80, + 0x6C860100, 0x6C854780, 0x6C848E00, + 0x6C83D480, 0x6C831B00, 0x6C826180, + 0x6C81A800, 0x6C80EE80, 0x6C803500, + 0x6C7F7B80, 0x6C7EC200, 0x6C7E0880, + 0x6C7D4F00, 0x6C7C9580, 0x6C7BDC00, + 0x6C7B2280, 0x6C7A6900, 0x6C79AF80, + 0x6C78F600, 0x6C783C80, 0x6C778300, + 0x6C76C980, 0x6C761000, 0x6C755680, + 0x6C749D00, 0x6C73E380, 0x6C732A00, + 0x6C727080, 0x6C71B700, 0x6C70FD80, + 0x6C704400, 0x6C6F8A80, 0x6C6ED100, + 0x6C6E1780, 0x6C6D5E00, 0x6C6CA480, + 0x6C6BEB00, 0x6C6B3180, 0x6C6A7800, + 0x6C69BE80, 0x6C690500, 0x6C684B80, + 0x6C679200, 0x6C66D880, 0x6C661F00, + 0x6C656580, 0x6C64AC00, 0x6C63F280, + 0x6C633900, 0x6C627F80, 0x6C61C600, + 0x6C610C80, 0x6C605300, 0x6C5F9980, + 0x6C5EE000, 0x6C5E2680, 0x6C5D6D00, + 0x6C5CB380, 0x6C5BFA00, 0x6C5B4080, + 0x6C5A8700, 0x6C59CD80, 0x6C591400, + 0x6C585A80, 0x6C57A100, 0x6C56E780, + 0x6C562E00, 0x6C557480, 0x6C54BB00, + 0x6C540180, 0x6C534800, 0x6C528E80, + 0x6C51D500, 0x6C511B80, 0x6C506200, + 0x6C4FA880, 0x6C4EEF00, 0x6C4E3580, + 0x6C4D7C00, 0x6C4CC280, 0x6C4C0900, + 0x6C4B4F80, 0x6C4A9600, 0x6C49DC80, + 0x6C492300, 0x6C486980, 0x6C47B000, + 0x6C46F680, 0x6C463D00, 0x6C458380, + 0x6C44CA00, 0x6C441080, 0x6C435700, + 0x6C429D80, 0x6C41E400, 0x6C412A80, + 0x6C407100, 0x6C3FB780, 0x6C3EFE00, + 0x6C3E4480, 0x6C3D8B00, 0x6C3CD180, + 0x6C3C1800, 0x6C3B5E80, 0x6C3AA500, + 0x6C39EB80, 0x6C393200, 0x6C387880, + 0x6C37BF00, 0x6C370580, 0x6C364C00, + 0x6C359280, 0x6C34D900, 0x6C341F80, + 0x6C336600, 0x6C32AC80, 0x6C31F300, + 0x6C313980, 0x6C308000, 0x6C2FC680, + 0x6C2F0D00, 0x6C2E5380, 0x6C2D9A00, + 0x6C2CE080, 0x6C2C2700, 0x6C2B6D80, + 0x6C2AB400, 0x6C29FA80, 0x6C294100, + 0x6C288780, 0x6C27CE00, 0x6C271480, + 0x6C265B00, 0x6C25A180, 0x6C24E800, + 0x6C242E80, 0x6C237500, 0x6C22BB80, + 0x6C220200, 0x6C214880, 0x6C208F00, + 0x6C1FD580, 0x6C1F1C00, 0x6C1E6280, + 0x6C1DA900, 0x6C1CEF80, 0x6C1C3600, + 0x6C1B7C80, 0x6C1AC300, 0x6C1A0980, + 0x6C195000, 0x6C189680, 0x6C17DD00, + 0x6C172380, 0x6C166A00, 0x6C15B080, + 0x6C14F700, 0x6C143D80, 0x6C138400, + 0x6C12CA80, 0x6C121100, 0x6C115780, + 0x6C109E00, 0x6C0FE480, 0x6C0F2B00, + 0x6C0E7180, 0x6C0DB800, 0x6C0CFE80, + 0x6C0C4500, 0x6C0B8B80, 0x6C0AD200, + 0x6C0A1880, 0x6C095F00, 0x6C08A580, + 0x6C07EC00, 0x6C073280, 0x6C067900, + 0x6C05BF80, 0x6C050600, 0x6C044C80, + 0x6C039300, 0x6C02D980, 0x6C022000, + 0x6C016680, 0x6C00AD00, 0x6BFFF380, + 0x6BFF3A00, 0x6BFE8080, 0x6BFDC700, + 0x6BFD0D80, 0x6BFC5400, 0x6BFB9A80, + 0x6BFAE100, 0x6BFA2780, 0x6BF96E00, + 0x6BF8B480, 0x6BF7FB00, 0x6BF74180, + 0x6BF68800, 0x6BF5CE80, 0x6BF51500, + 0x6BF45B80, 0x6BF3A200, 0x6BF2E880, + 0x6BF22F00, 0x6BF17580, 0x6BF0BC00, + 0x6BF00280, 0x6BEF4900, 0x6BEE8F80, + 0x6BEDD600, 0x6BED1C80, 0x6BEC6300, + 0x6BEBA980, 0x6BEAF000, 0x6BEA3680, + 0x6BE97D00, 0x6BE8C380, 0x6BE80A00, + 0x6BE75080, 0x6BE69700, 0x6BE5DD80, + 0x6BE52400, 0x6BE46A80, 0x6BE3B100, + 0x6BE2F780, 0x6BE23E00, 0x6BE18480, + 0x6BE0CB00, 0x6BE01180, 0x6BDF5800, + 0x6BDE9E80, 0x6BDDE500, 0x6BDD2B80, + 0x6BDC7200, 0x6BDBB880, 0x6BDAFF00, + 0x6BDA4580, 0x6BD98C00, 0x6BD8D280, + 0x6BD81900, 0x6BD75F80, 0x6BD6A600, + 0x6BD5EC80, 0x6BD53300, 0x6BD47980, + 0x6BD3C000, 0x6BD30680, 0x6BD24D00, + 0x6BD19380, 0x6BD0DA00, 0x6BD02080, + 0x6BCF6700, 0x6BCEAD80, 0x6BCDF400, + 0x6BCD3A80, 0x6BCC8100, 0x6BCBC780, + 0x6BCB0E00, 0x6BCA5480, 0x6BC99B00, + 0x6BC8E180, 0x6BC82800, 0x6BC76E80, + 0x6BC6B500, 0x6BC5FB80, 0x6BC54200, + 0x6BC48880, 0x6BC3CF00, 0x6BC31580, + 0x6BC25C00, 0x6BC1A280, 0x6BC0E900, + 0x6BC02F80, 0x6BBF7600, 0x6BBEBC80, + 0x6BBE0300, 0x6BBD4980, 0x6BBC9000, + 0x6BBBD680, 0x6BBB1D00, 0x6BBA6380, + 0x6BB9AA00, 0x6BB8F080, 0x6BB83700, + 0x6BB77D80, 0x6BB6C400, 0x6BB60A80, + 0x6BB55100, 0x6BB49780, 0x6BB3DE00, + 0x6BB32480, 0x6BB26B00, 0x6BB1B180, + 0x6BB0F800, 0x6BB03E80, 0x6BAF8500, + 0x6BAECB80, 0x6BAE1200, 0x6BAD5880, + 0x6BAC9F00, 0x6BABE580, 0x6BAB2C00, + 0x6BAA7280, 0x6BA9B900, 0x6BA8FF80, + 0x6BA84600, 0x6BA78C80, 0x6BA6D300, + 0x6BA61980, 0x6BA56000, 0x6BA4A680, + 0x6BA3ED00, 0x6BA33380, 0x6BA27A00, + 0x6BA1C080, 0x6BA10700, 0x6BA04D80, + 0x6B9F9400, 0x6B9EDA80, 0x6B9E2100, + 0x6B9D6780, 0x6B9CAE00, 0x6B9BF480, + 0x6B9B3B00, 0x6B9A8180, 0x6B99C800, + 0x6B990E80, 0x6B985500, 0x6B979B80, + 0x6B96E200, 0x6B962880, 0x6B956F00, + 0x6B94B580, 0x6B93FC00, 0x6B934280, + 0x6B928900, 0x6B91CF80, 0x6B911600, + 0x6B905C80, 0x6B8FA300, 0x6B8EE980, + 0x6B8E3000, 0x6B8D7680, 0x6B8CBD00, + 0x6B8C0380, 0x6B8B4A00, 0x6B8A9080, + 0x6B89D700, 0x6B891D80, 0x6B886400, + 0x6B87AA80, 0x6B86F100, 0x6B863780, + 0x6B857E00, 0x6B84C480, 0x6B840B00, + 0x6B835180, 0x6B829800, 0x6B81DE80, + 0x6B812500, 0x6B806B80, 0x6B7FB200, + 0x6B7EF880, 0x6B7E3F00, 0x6B7D8580, + 0x6B7CCC00, 0x6B7C1280, 0x6B7B5900, + 0x6B7A9F80, 0x6B79E600, 0x6B792C80, + 0x6B787300, 0x6B77B980, 0x6B770000, + 0x6B764680, 0x6B758D00, 0x6B74D380, + 0x6B741A00, 0x6B736080, 0x6B72A700, + 0x6B71ED80, 0x6B713400, 0x6B707A80, + 0x6B6FC100, 0x6B6F0780, 0x6B6E4E00, + 0x6B6D9480, 0x6B6CDB00, 0x6B6C2180, + 0x6B6B6800, 0x6B6AAE80, 0x6B69F500, + 0x6B693B80, 0x6B688200, 0x6B67C880, + 0x6B670F00, 0x6B665580, 0x6B659C00, + 0x6B64E280, 0x6B642900, 0x6B636F80, + 0x6B62B600, 0x6B61FC80, 0x6B614300, + 0x6B608980, 0x6B5FD000, 0x6B5F1680, + 0x6B5E5D00, 0x6B5DA380, 0x6B5CEA00, + 0x6B5C3080, 0x6B5B7700, 0x6B5ABD80, + 0x6B5A0400, 0x6B594A80, 0x6B589100, + 0x6B57D780, 0x6B571E00, 0x6B566480, + 0x6B55AB00, 0x6B54F180, 0x6B543800, + 0x6B537E80, 0x6B52C500, 0x6B520B80, + 0x6B515200, 0x6B509880, 0x6B4FDF00, + 0x6B4F2580, 0x6B4E6C00, 0x6B4DB280, + 0x6B4CF900, 0x6B4C3F80, 0x6B4B8600, + 0x6B4ACC80, 0x6B4A1300, 0x6B495980, + 0x6B48A000, 0x6B47E680, 0x6B472D00, + 0x6B467380, 0x6B45BA00, 0x6B450080, + 0x6B444700, 0x6B438D80, 0x6B42D400, + 0x6B421A80, 0x6B416100, 0x6B40A780, + 0x6B3FEE00, 0x6B3F3480, 0x6B3E7B00, + 0x6B3DC180, 0x6B3D0800, 0x6B3C4E80, + 0x6B3B9500, 0x6B3ADB80, 0x6B3A2200, + 0x6B396880, 0x6B38AF00, 0x6B37F580, + 0x6B373C00, 0x6B368280, 0x6B35C900, + 0x6B350F80, 0x6B345600, 0x6B339C80, + 0x6B32E300, 0x6B322980, 0x6B317000, + 0x6B30B680, 0x6B2FFD00, 0x6B2F4380, + 0x6B2E8A00, 0x6B2DD080, 0x6B2D1700, + 0x6B2C5D80, 0x6B2BA400, 0x6B2AEA80, + 0x6B2A3100, 0x6B297780, 0x6B28BE00, + 0x6B280480, 0x6B274B00, 0x6B269180, + 0x6B25D800, 0x6B251E80, 0x6B246500, + 0x6B23AB80, 0x6B22F200, 0x6B223880, + 0x6B217F00, 0x6B20C580, 0x6B200C00, + 0x6B1F5280, 0x6B1E9900, 0x6B1DDF80, + 0x6B1D2600, 0x6B1C6C80, 0x6B1BB300, + 0x6B1AF980, 0x6B1A4000, 0x6B198680, + 0x6B18CD00, 0x6B181380, 0x6B175A00, + 0x6B16A080, 0x6B15E700, 0x6B152D80, + 0x6B147400, 0x6B13BA80, 0x6B130100, + 0x6B124780, 0x6B118E00, 0x6B10D480, + 0x6B101B00, 0x6B0F6180, 0x6B0EA800, + 0x6B0DEE80, 0x6B0D3500, 0x6B0C7B80, + 0x6B0BC200, 0x6B0B0880, 0x6B0A4F00, + 0x6B099580, 0x6B08DC00, 0x6B082280, + 0x6B076900, 0x6B06AF80, 0x6B05F600, + 0x6B053C80, 0x6B048300, 0x6B03C980, + 0x6B031000, 0x6B025680, 0x6B019D00, + 0x6B00E380, 0x6B002A00, 0x6AFF7080, + 0x6AFEB700, 0x6AFDFD80, 0x6AFD4400, + 0x6AFC8A80, 0x6AFBD100, 0x6AFB1780, + 0x6AFA5E00, 0x6AF9A480, 0x6AF8EB00, + 0x6AF83180, 0x6AF77800, 0x6AF6BE80, + 0x6AF60500, 0x6AF54B80, 0x6AF49200, + 0x6AF3D880, 0x6AF31F00, 0x6AF26580, + 0x6AF1AC00, 0x6AF0F280, 0x6AF03900, + 0x6AEF7F80, 0x6AEEC600, 0x6AEE0C80, + 0x6AED5300, 0x6AEC9980, 0x6AEBE000, + 0x6AEB2680, 0x6AEA6D00, 0x6AE9B380, + 0x6AE8FA00, 0x6AE84080, 0x6AE78700, + 0x6AE6CD80, 0x6AE61400, 0x6AE55A80, + 0x6AE4A100, 0x6AE3E780, 0x6AE32E00, + 0x6AE27480, 0x6AE1BB00, 0x6AE10180, + 0x6AE04800, 0x6ADF8E80, 0x6ADED500, + 0x6ADE1B80, 0x6ADD6200, 0x6ADCA880, + 0x6ADBEF00, 0x6ADB3580, 0x6ADA7C00, + 0x6AD9C280, 0x6AD90900, 0x6AD84F80, + 0x6AD79600, 0x6AD6DC80, 0x6AD62300, + 0x6AD56980, 0x6AD4B000, 0x6AD3F680, + 0x6AD33D00, 0x6AD28380, 0x6AD1CA00, + 0x6AD11080, 0x6AD05700, 0x6ACF9D80, + 0x6ACEE400, 0x6ACE2A80, 0x6ACD7100, + 0x6ACCB780, 0x6ACBFE00, 0x6ACB4480, + 0x6ACA8B00, 0x6AC9D180, 0x6AC91800, + 0x6AC85E80, 0x6AC7A500, 0x6AC6EB80, + 0x6AC63200, 0x6AC57880, 0x6AC4BF00, + 0x6AC40580, 0x6AC34C00, 0x6AC29280, + 0x6AC1D900, 0x6AC11F80, 0x6AC06600, + 0x6ABFAC80, 0x6ABEF300, 0x6ABE3980, + 0x6ABD8000, 0x6ABCC680, 0x6ABC0D00, + 0x6ABB5380, 0x6ABA9A00, 0x6AB9E080, + 0x6AB92700, 0x6AB86D80, 0x6AB7B400, + 0x6AB6FA80, 0x6AB64100, 0x6AB58780, + 0x6AB4CE00, 0x6AB41480, 0x6AB35B00, + 0x6AB2A180, 0x6AB1E800, 0x6AB12E80, + 0x6AB07500, 0x6AAFBB80, 0x6AAF0200, + 0x6AAE4880, 0x6AAD8F00, 0x6AACD580, + 0x6AAC1C00, 0x6AAB6280, 0x6AAAA900, + 0x6AA9EF80, 0x6AA93600, 0x6AA87C80, + 0x6AA7C300, 0x6AA70980, 0x6AA65000, + 0x6AA59680, 0x6AA4DD00, 0x6AA42380, + 0x6AA36A00, 0x6AA2B080, 0x6AA1F700, + 0x6AA13D80, 0x6AA08400, 0x6A9FCA80, + 0x6A9F1100, 0x6A9E5780, 0x6A9D9E00, + 0x6A9CE480, 0x6A9C2B00, 0x6A9B7180, + 0x6A9AB800, 0x6A99FE80, 0x6A994500, + 0x6A988B80, 0x6A97D200, 0x6A971880, + 0x6A965F00, 0x6A95A580, 0x6A94EC00, + 0x6A943280, 0x6A937900, 0x6A92BF80, + 0x6A920600, 0x6A914C80, 0x6A909300, + 0x6A8FD980, 0x6A8F2000, 0x6A8E6680, + 0x6A8DAD00, 0x6A8CF380, 0x6A8C3A00, + 0x6A8B8080, 0x6A8AC700, 0x6A8A0D80, + 0x6A895400, 0x6A889A80, 0x6A87E100, + 0x6A872780, 0x6A866E00, 0x6A85B480, + 0x6A84FB00, 0x6A844180, 0x6A838800, + 0x6A82CE80, 0x6A821500, 0x6A815B80, + 0x6A80A200, 0x6A7FE880, 0x6A7F2F00, + 0x6A7E7580, 0x6A7DBC00, 0x6A7D0280, + 0x6A7C4900, 0x6A7B8F80, 0x6A7AD600, + 0x6A7A1C80, 0x6A796300, 0x6A78A980, + 0x6A77F000, 0x6A773680, 0x6A767D00, + 0x6A75C380, 0x6A750A00, 0x6A745080, + 0x6A739700, 0x6A72DD80, 0x6A722400, + 0x6A716A80, 0x6A70B100, 0x6A6FF780, + 0x6A6F3E00, 0x6A6E8480, 0x6A6DCB00, + 0x6A6D1180, 0x6A6C5800, 0x6A6B9E80, + 0x6A6AE500, 0x6A6A2B80, 0x6A697200, + 0x6A68B880, 0x6A67FF00, 0x6A674580, + 0x6A668C00, 0x6A65D280, 0x6A651900, + 0x6A645F80, 0x6A63A600, 0x6A62EC80, + 0x6A623300, 0x6A617980, 0x6A60C000, + 0x6A600680, 0x6A5F4D00, 0x6A5E9380, + 0x6A5DDA00, 0x6A5D2080, 0x6A5C6700, + 0x6A5BAD80, 0x6A5AF400, 0x6A5A3A80, + 0x6A598100, 0x6A58C780, 0x6A580E00, + 0x6A575480, 0x6A569B00, 0x6A55E180, + 0x6A552800, 0x6A546E80, 0x6A53B500, + 0x6A52FB80, 0x6A524200, 0x6A518880, + 0x6A50CF00, 0x6A501580, 0x6A4F5C00, + 0x6A4EA280, 0x6A4DE900, 0x6A4D2F80, + 0x6A4C7600, 0x6A4BBC80, 0x6A4B0300, + 0x6A4A4980, 0x6A499000, 0x6A48D680, + 0x6A481D00, 0x6A476380, 0x6A46AA00, + 0x6A45F080, 0x6A453700, 0x6A447D80, + 0x6A43C400, 0x6A430A80, 0x6A425100, + 0x6A419780, 0x6A40DE00, 0x6A402480, + 0x6A3F6B00, 0x6A3EB180, 0x6A3DF800, + 0x6A3D3E80, 0x6A3C8500, 0x6A3BCB80, + 0x6A3B1200, 0x6A3A5880, 0x6A399F00, + 0x6A38E580, 0x6A382C00, 0x6A377280, + 0x6A36B900, 0x6A35FF80, 0x6A354600, + 0x6A348C80, 0x6A33D300, 0x6A331980, + 0x6A326000, 0x6A31A680, 0x6A30ED00, + 0x6A303380, 0x6A2F7A00, 0x6A2EC080, + 0x6A2E0700, 0x6A2D4D80, 0x6A2C9400, + 0x6A2BDA80, 0x6A2B2100, 0x6A2A6780, + 0x6A29AE00, 0x6A28F480, 0x6A283B00, + 0x6A278180, 0x6A26C800, 0x6A260E80, + 0x6A255500, 0x6A249B80, 0x6A23E200, + 0x6A232880, 0x6A226F00, 0x6A21B580, + 0x6A20FC00, 0x6A204280, 0x6A1F8900, + 0x6A1ECF80, 0x6A1E1600, 0x6A1D5C80, + 0x6A1CA300, 0x6A1BE980, 0x6A1B3000, + 0x6A1A7680, 0x6A19BD00, 0x6A190380, + 0x6A184A00, 0x6A179080, 0x6A16D700, + 0x6A161D80, 0x6A156400, 0x6A14AA80, + 0x6A13F100, 0x6A133780, 0x6A127E00, + 0x6A11C480, 0x6A110B00, 0x6A105180, + 0x6A0F9800, 0x6A0EDE80, 0x6A0E2500, + 0x6A0D6B80, 0x6A0CB200, 0x6A0BF880, + 0x6A0B3F00, 0x6A0A8580, 0x6A09CC00, + 0x6A091280, 0x6A085900, 0x6A079F80, + 0x6A06E600, 0x6A062C80, 0x6A057300, + 0x6A04B980 +}; diff --git a/Source/Core/Core/Src/PowerPC/PPCCache.h b/Source/Core/Core/Src/PowerPC/PPCCache.h index 9a488c854f..c2e428946c 100644 --- a/Source/Core/Core/Src/PowerPC/PPCCache.h +++ b/Source/Core/Core/Src/PowerPC/PPCCache.h @@ -1,60 +1,60 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _PPCCACHE_H -#define _PPCCACHE_H - -#include "Common.h" - -#define FAST_ICACHE - -namespace PowerPC -{ - - const u32 ICACHE_SETS = 128; - const u32 ICACHE_WAYS = 8; - // size of an instruction cache block in words - const u32 ICACHE_BLOCK_SIZE = 8; - - const u32 ICACHE_EXRAM_BIT = 0x10000000; - const u32 ICACHE_VMEM_BIT = 0x20000000; - - struct InstructionCache - { - u32 data[ICACHE_SETS][ICACHE_WAYS][ICACHE_BLOCK_SIZE]; - u32 tags[ICACHE_SETS][ICACHE_WAYS]; - u32 plru[ICACHE_SETS]; - u32 valid[ICACHE_SETS]; - - u32 way_from_valid[255]; - u32 way_from_plru[128]; - -#ifdef FAST_ICACHE - u8 lookup_table[1<<20]; - u8 lookup_table_ex[1<<21]; - u8 lookup_table_vmem[1<<20]; -#endif - - InstructionCache(); - void Reset(); - u32 ReadInstruction(u32 addr); - void Invalidate(u32 addr); - }; - -} - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _PPCCACHE_H +#define _PPCCACHE_H + +#include "Common.h" + +#define FAST_ICACHE + +namespace PowerPC +{ + + const u32 ICACHE_SETS = 128; + const u32 ICACHE_WAYS = 8; + // size of an instruction cache block in words + const u32 ICACHE_BLOCK_SIZE = 8; + + const u32 ICACHE_EXRAM_BIT = 0x10000000; + const u32 ICACHE_VMEM_BIT = 0x20000000; + + struct InstructionCache + { + u32 data[ICACHE_SETS][ICACHE_WAYS][ICACHE_BLOCK_SIZE]; + u32 tags[ICACHE_SETS][ICACHE_WAYS]; + u32 plru[ICACHE_SETS]; + u32 valid[ICACHE_SETS]; + + u32 way_from_valid[255]; + u32 way_from_plru[128]; + +#ifdef FAST_ICACHE + u8 lookup_table[1<<20]; + u8 lookup_table_ex[1<<21]; + u8 lookup_table_vmem[1<<20]; +#endif + + InstructionCache(); + void Reset(); + u32 ReadInstruction(u32 addr); + void Invalidate(u32 addr); + }; + +} + +#endif diff --git a/Source/Core/DebuggerWX/Src/stdafx.cpp b/Source/Core/DebuggerWX/Src/stdafx.cpp index e69df5a875..31f734b17a 100644 --- a/Source/Core/DebuggerWX/Src/stdafx.cpp +++ b/Source/Core/DebuggerWX/Src/stdafx.cpp @@ -1,18 +1,18 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "stdafx.h" +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "stdafx.h" diff --git a/Source/Core/DebuggerWX/Src/stdafx.h b/Source/Core/DebuggerWX/Src/stdafx.h index 4353b6da81..7518bdd104 100644 --- a/Source/Core/DebuggerWX/Src/stdafx.h +++ b/Source/Core/DebuggerWX/Src/stdafx.h @@ -1,33 +1,33 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef __STDAFX_H_ -#define __STDAFX_H_ - -#ifdef _WIN32 - -// Change these values to use different versions -#define WINVER 0x0400 -#define _WIN32_WINNT 0x0501 -#define _WIN32_IE 0x0500 -#define _RICHEDIT_VER 0x0100 - -#include // wxWidgets - -#endif - -#endif // __STDAFX_H__ +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __STDAFX_H_ +#define __STDAFX_H_ + +#ifdef _WIN32 + +// Change these values to use different versions +#define WINVER 0x0400 +#define _WIN32_WINNT 0x0501 +#define _WIN32_IE 0x0500 +#define _RICHEDIT_VER 0x0100 + +#include // wxWidgets + +#endif + +#endif // __STDAFX_H__ diff --git a/Source/Core/DiscIO/Src/FileMonitor.cpp b/Source/Core/DiscIO/Src/FileMonitor.cpp index 7cccf15487..ba95f0609e 100644 --- a/Source/Core/DiscIO/Src/FileMonitor.cpp +++ b/Source/Core/DiscIO/Src/FileMonitor.cpp @@ -1,171 +1,171 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -// ----------- -// Include - -#include "stdafx.h" -#include -#include -#include -#include - - -#include "Common.h" // Common -#include "IniFile.h" -#include "LogManager.h" - -#include "../../Core/Src/Core.h" -#include "../../Core/Src/ConfigManager.h" -#include "FileSystemGCWii.h" -#include "VolumeCreator.h" - -namespace FileMon -{ - -DiscIO::IVolume *OpenISO = NULL; -DiscIO::IFileSystem *pFileSystem = NULL; -std::vector GCFiles; -std::string ISOFile = "", CurrentFile = ""; -bool FileAccess = true; - -// Filtered files -bool ShowSound(std::string FileName) -{ - std::string Ending; - SplitPath(FileName, NULL, NULL, &Ending); - std::transform(Ending.begin(),Ending.end(),Ending.begin(),::tolower); - - if ( - (Ending == ".adp") // 1080 Avalanche, Crash Bandicoot, etc - || (Ending == ".afc") // Zelda WW - || (Ending == ".ast") // Zelda TP, Mario Kart - || (Ending == ".dsp") // Metroid Prime - || (Ending == ".hps") // SSB Melee - - || (Ending == ".brstm") // Wii Sports, Wario Land, etc - || (Ending == ".sad") // Disaster - ) - return true; - - return false; -} - - -// Read the GC file system -void ReadGC(std::string FileName) -{ - // Should have an actual Shutdown procedure or something - if(OpenISO != NULL) - { - delete OpenISO; - OpenISO = NULL; - } - if(pFileSystem != NULL) - { - delete pFileSystem; - pFileSystem = NULL; - } - // GCFiles' pointers are no longer valid after pFileSystem is cleared - GCFiles.clear(); - OpenISO = DiscIO::CreateVolumeFromFilename(FileName); - if (!OpenISO) return; - if (!DiscIO::IsVolumeWiiDisc(OpenISO) && !DiscIO::IsVolumeWadFile(OpenISO)) - { - pFileSystem = DiscIO::CreateFileSystem(OpenISO); - if(!pFileSystem) return; - pFileSystem->GetFileList(GCFiles); - } - FileAccess = true; -} - -// Check if we should play this file -void CheckFile(std::string File, u64 Size) -{ - // Don't do anything if the log is unselected - if (!LogManager::GetInstance()->isEnable(LogTypes::FILEMON)) return; - // Do nothing if we found the same file again - if (CurrentFile == File) return; - - if (Size > 0) Size = (Size / 1000); - std::string Str = StringFromFormat("%s kB %s", ThS(Size, true, 7).c_str(), File.c_str()); - if (ShowSound(File)) - { - NOTICE_LOG(FILEMON, Str.c_str()); - } - else - { - WARN_LOG(FILEMON, Str.c_str()); - } - - // Update the current file - CurrentFile = File; -} - - -// Find the GC filename -void FindFilename(u64 offset) -{ - // Don't do anything if a game is not running - if (Core::GetState() != Core::CORE_RUN) return; - // Or if the log is unselected - if (!LogManager::GetInstance()->isEnable(LogTypes::FILEMON)) return; - if (!FileAccess) return; - - if (!pFileSystem || ISOFile != SConfig::GetInstance().m_LastFilename) - { - FileAccess = false; - ReadGC(SConfig::GetInstance().m_LastFilename); - ISOFile = SConfig::GetInstance().m_LastFilename; - NOTICE_LOG(FILEMON, "Opening '%s'", ISOFile.c_str()); - return; - } - - const char *fname = pFileSystem->GetFileName(offset); - - // There's something wrong with the paths - if (!fname || (strlen(fname) == 512)) - return; - - CheckFile(fname, pFileSystem->GetFileSize(fname)); -} - -void Close() -{ - if(OpenISO != NULL) - { - delete OpenISO; - OpenISO = NULL; - } - - if(pFileSystem != NULL) - { - delete pFileSystem; - pFileSystem = NULL; - } - - // GCFiles' pointers are no longer valid after pFileSystem is cleared - GCFiles.clear(); - - ISOFile = ""; - CurrentFile = ""; - FileAccess = true; -} - - -} // FileMon +// Copyright (C) 2003-2008 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// ----------- +// Include + +#include "stdafx.h" +#include +#include +#include +#include + + +#include "Common.h" // Common +#include "IniFile.h" +#include "LogManager.h" + +#include "../../Core/Src/Core.h" +#include "../../Core/Src/ConfigManager.h" +#include "FileSystemGCWii.h" +#include "VolumeCreator.h" + +namespace FileMon +{ + +DiscIO::IVolume *OpenISO = NULL; +DiscIO::IFileSystem *pFileSystem = NULL; +std::vector GCFiles; +std::string ISOFile = "", CurrentFile = ""; +bool FileAccess = true; + +// Filtered files +bool ShowSound(std::string FileName) +{ + std::string Ending; + SplitPath(FileName, NULL, NULL, &Ending); + std::transform(Ending.begin(),Ending.end(),Ending.begin(),::tolower); + + if ( + (Ending == ".adp") // 1080 Avalanche, Crash Bandicoot, etc + || (Ending == ".afc") // Zelda WW + || (Ending == ".ast") // Zelda TP, Mario Kart + || (Ending == ".dsp") // Metroid Prime + || (Ending == ".hps") // SSB Melee + + || (Ending == ".brstm") // Wii Sports, Wario Land, etc + || (Ending == ".sad") // Disaster + ) + return true; + + return false; +} + + +// Read the GC file system +void ReadGC(std::string FileName) +{ + // Should have an actual Shutdown procedure or something + if(OpenISO != NULL) + { + delete OpenISO; + OpenISO = NULL; + } + if(pFileSystem != NULL) + { + delete pFileSystem; + pFileSystem = NULL; + } + // GCFiles' pointers are no longer valid after pFileSystem is cleared + GCFiles.clear(); + OpenISO = DiscIO::CreateVolumeFromFilename(FileName); + if (!OpenISO) return; + if (!DiscIO::IsVolumeWiiDisc(OpenISO) && !DiscIO::IsVolumeWadFile(OpenISO)) + { + pFileSystem = DiscIO::CreateFileSystem(OpenISO); + if(!pFileSystem) return; + pFileSystem->GetFileList(GCFiles); + } + FileAccess = true; +} + +// Check if we should play this file +void CheckFile(std::string File, u64 Size) +{ + // Don't do anything if the log is unselected + if (!LogManager::GetInstance()->isEnable(LogTypes::FILEMON)) return; + // Do nothing if we found the same file again + if (CurrentFile == File) return; + + if (Size > 0) Size = (Size / 1000); + std::string Str = StringFromFormat("%s kB %s", ThS(Size, true, 7).c_str(), File.c_str()); + if (ShowSound(File)) + { + NOTICE_LOG(FILEMON, Str.c_str()); + } + else + { + WARN_LOG(FILEMON, Str.c_str()); + } + + // Update the current file + CurrentFile = File; +} + + +// Find the GC filename +void FindFilename(u64 offset) +{ + // Don't do anything if a game is not running + if (Core::GetState() != Core::CORE_RUN) return; + // Or if the log is unselected + if (!LogManager::GetInstance()->isEnable(LogTypes::FILEMON)) return; + if (!FileAccess) return; + + if (!pFileSystem || ISOFile != SConfig::GetInstance().m_LastFilename) + { + FileAccess = false; + ReadGC(SConfig::GetInstance().m_LastFilename); + ISOFile = SConfig::GetInstance().m_LastFilename; + NOTICE_LOG(FILEMON, "Opening '%s'", ISOFile.c_str()); + return; + } + + const char *fname = pFileSystem->GetFileName(offset); + + // There's something wrong with the paths + if (!fname || (strlen(fname) == 512)) + return; + + CheckFile(fname, pFileSystem->GetFileSize(fname)); +} + +void Close() +{ + if(OpenISO != NULL) + { + delete OpenISO; + OpenISO = NULL; + } + + if(pFileSystem != NULL) + { + delete pFileSystem; + pFileSystem = NULL; + } + + // GCFiles' pointers are no longer valid after pFileSystem is cleared + GCFiles.clear(); + + ISOFile = ""; + CurrentFile = ""; + FileAccess = true; +} + + +} // FileMon diff --git a/Source/Core/DiscIO/Src/FileMonitor.h b/Source/Core/DiscIO/Src/FileMonitor.h index eba6d0fe02..dbd1ca6da7 100644 --- a/Source/Core/DiscIO/Src/FileMonitor.h +++ b/Source/Core/DiscIO/Src/FileMonitor.h @@ -1,33 +1,33 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include // System: For std - -#include "Common.h" // Common: For u64 - - -namespace FileMon -{ - -void ShowSound(std::string File); -void ReadGC(std::string File); -void CheckFile(std::string File, u64 Size); -void FindFilename(u64 Offset); -void Close(); - -} +// Copyright (C) 2003-2008 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include // System: For std + +#include "Common.h" // Common: For u64 + + +namespace FileMon +{ + +void ShowSound(std::string File); +void ReadGC(std::string File); +void CheckFile(std::string File, u64 Size); +void FindFilename(u64 Offset); +void Close(); + +} diff --git a/Source/Core/DolphinWX/DolphinWX.rc b/Source/Core/DolphinWX/DolphinWX.rc index 29cf4db92e..e9c06a8fa9 100644 --- a/Source/Core/DolphinWX/DolphinWX.rc +++ b/Source/Core/DolphinWX/DolphinWX.rc @@ -1,4 +1,4 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" -IDI_ICON1 ICON "..\\..\\..\\Installer\\Dolphin.ico" +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" +IDI_ICON1 ICON "..\\..\\..\\Installer\\Dolphin.ico" diff --git a/Source/Core/DolphinWX/DolphinWX.vcproj b/Source/Core/DolphinWX/DolphinWX.vcproj index d6a8f228a8..42312e3557 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcproj +++ b/Source/Core/DolphinWX/DolphinWX.vcproj @@ -30,7 +30,7 @@ > - - -int wxLuaWindow::luaCount = 0; - -// Constant Colors -const unsigned long COLOR_GRAY = 0xDCDCDC; - -BEGIN_EVENT_TABLE(wxLuaWindow, wxWindow) - EVT_SIZE( wxLuaWindow::OnEvent_Window_Resize) - EVT_CLOSE( wxLuaWindow::OnEvent_Window_Close) - EVT_BUTTON(ID_BUTTON_CLOSE, wxLuaWindow::OnEvent_ButtonClose_Press) - EVT_BUTTON(ID_BUTTON_LOAD, wxLuaWindow::OnEvent_ScriptLoad_Press) - EVT_BUTTON(ID_BUTTON_RUN, wxLuaWindow::OnEvent_ScriptRun_Press) - EVT_BUTTON(ID_BUTTON_STOP, wxLuaWindow::OnEvent_ScriptStop_Press) - EVT_BUTTON(ID_BUTTON_CLEAR, wxLuaWindow::OnEvent_ButtonClear_Press) -END_EVENT_TABLE() - -std::map g_contextMap; - -static int ev_LuaOpen, ev_LuaClose, ev_LuaStart, ev_LuaStop; - - -void LuaPrint(int uid, const char *msg) -{ - g_contextMap[uid]->PrintMessage(msg); -} - -void LuaStop(int uid, bool ok) -{ - if(ok) - g_contextMap[uid]->PrintMessage("Script completed successfully!\n"); - //else // disabled because this message makes no sense in certain contexts, and there's always an earlier error message anyway. - // g_contextMap[uid]->PrintMessage("Script failed.\n"); - - g_contextMap[uid]->OnStop(); -} - -wxLuaWindow::wxLuaWindow(wxFrame* parent, const wxPoint& pos, const wxSize& size) : - wxFrame(parent, wxID_ANY, _T("Lua Script Console"), pos, size, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) -{ - LuaWindow_InitFirstTime(); - - // Create Lua context - luaID = luaCount; - luaCount++; - CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaOpen, luaID); - g_contextMap[luaID] = this; - bScriptRunning = false; - - // Create the GUI controls - InitGUIControls(); - - // Setup Window - SetBackgroundColour(wxColour(COLOR_GRAY)); - SetSize(size); - SetPosition(pos); - Layout(); - Show(); -} - -wxLuaWindow::~wxLuaWindow() -{ - // On Disposal - CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaClose, luaID); - g_contextMap.erase(luaID); -} - -void wxLuaWindow::PrintMessage(const char *text) -{ - m_TextCtrl_Log->AppendText(wxString::FromAscii(text)); -} - -void wxLuaWindow::InitGUIControls() -{ - // $ Log Console - m_Tab_Log = new wxPanel(this, ID_TAB_LOG, wxDefaultPosition, wxDefaultSize); - m_TextCtrl_Log = new wxTextCtrl(m_Tab_Log, ID_TEXTCTRL_LOG, wxT(""), wxDefaultPosition, wxSize(100, 600), - wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP); - wxBoxSizer *HStrip1 = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *sTabLog = new wxBoxSizer(wxVERTICAL); - sTabLog->Add(HStrip1, 0, wxALL, 5); - sTabLog->Add(m_TextCtrl_Log, 1, wxALL|wxEXPAND, 5); - - m_Tab_Log->SetSizer(sTabLog); - m_Tab_Log->Layout(); - - // Button Strip - m_Button_Close = new wxButton(this, ID_BUTTON_CLOSE, _T("Close"), wxDefaultPosition, wxDefaultSize); - m_Button_LoadScript = new wxButton(this, ID_BUTTON_LOAD, _T("Load Script..."), wxDefaultPosition, wxDefaultSize); - m_Button_Run = new wxButton(this, ID_BUTTON_RUN, _T("Run"), wxDefaultPosition, wxDefaultSize); - m_Button_Stop = new wxButton(this, ID_BUTTON_STOP, _T("Stop"), wxDefaultPosition, wxDefaultSize); - m_Button_Clear = new wxButton(this, ID_BUTTON_CLEAR, _T("Clear"), wxDefaultPosition, wxDefaultSize); - wxBoxSizer* sButtons = new wxBoxSizer(wxHORIZONTAL); - - m_Button_Run->Disable(); - m_Button_Stop->Disable(); - - sButtons->Add(m_Button_Close, 0, wxALL, 5); - sButtons->Add(m_Button_LoadScript, 0, wxALL, 5); - sButtons->Add(m_Button_Run, 0, wxALL, 5); - sButtons->Add(m_Button_Stop, 0, wxALL, 5); - sButtons->Add(m_Button_Clear, 0, wxALL, 5); - - wxBoxSizer* sMain = new wxBoxSizer(wxVERTICAL); - sMain->Add(m_Tab_Log, 1, wxEXPAND|wxALL, 5); - sMain->Add(sButtons, 0, wxALL, 5); - SetSizer(sMain); - Layout(); - - Fit(); -} - -void wxLuaWindow::OnEvent_ScriptLoad_Press(wxCommandEvent& WXUNUSED(event)) -{ - wxString path = wxFileSelector( - _T("Select the script to load"), - wxEmptyString, wxEmptyString, wxEmptyString, - wxString::Format - ( - _T("Lua Scripts (lua)|*.lua|All files (%s)|%s"), - wxFileSelectorDefaultWildcardStr, - wxFileSelectorDefaultWildcardStr - ), - wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST, - this); - - if(!path.IsEmpty()) - currentScript = path; - else - return; - - m_TextCtrl_Log->Clear(); - m_TextCtrl_Log->AppendText(wxString::FromAscii( - StringFromFormat("Script %s loaded successfully.\n", - (const char *)path.mb_str()).c_str())); - m_Button_Run->Enable(); -} - -void wxLuaWindow::OnEvent_ScriptRun_Press(wxCommandEvent& WXUNUSED(event)) -{ - m_TextCtrl_Log->AppendText(wxT("Running script...\n")); - bScriptRunning = true; - m_Button_LoadScript->Disable(); - m_Button_Run->Disable(); - m_Button_Stop->Enable(); - - CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaStart, luaID); -} - -void wxLuaWindow::OnEvent_ScriptStop_Press(wxCommandEvent& WXUNUSED(event)) -{ - CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaStop, luaID); - OnStop(); - PrintMessage("Stopping script...\n"); -} - -void wxLuaWindow::OnStop() -{ - bScriptRunning = false; - m_Button_LoadScript->Enable(); - m_Button_Run->Enable(); - m_Button_Stop->Disable(); -} - -void wxLuaWindow::OnEvent_ButtonClear_Press(wxCommandEvent& WXUNUSED (event)) -{ - m_TextCtrl_Log->Clear(); -} - -void wxLuaWindow::OnEvent_Window_Resize(wxSizeEvent& WXUNUSED (event)) -{ - Layout(); -} -void wxLuaWindow::OnEvent_ButtonClose_Press(wxCommandEvent& WXUNUSED (event)) -{ - Destroy(); -} -void wxLuaWindow::OnEvent_Window_Close(wxCloseEvent& WXUNUSED (event)) -{ - Destroy(); -} - - -// this layer of event stuff is because Lua needs to run on the CPU thread -void wxLuaWindow::LuaOpenCallback(u64 userdata, int) -{ - Lua::OpenLuaContext((int)userdata, LuaPrint, NULL, LuaStop); -} -void wxLuaWindow::LuaCloseCallback(u64 userdata, int) -{ - Lua::CloseLuaContext((int)userdata); -} -void wxLuaWindow::LuaStartCallback(u64 userdata, int) -{ - int luaID = (int)userdata; - Lua::RunLuaScriptFile(luaID, (const char *)g_contextMap[luaID]->currentScript.mb_str()); -} -void wxLuaWindow::LuaStopCallback(u64 userdata, int) -{ - Lua::StopLuaScript((int)userdata); -} -void wxLuaWindow::LuaWindow_InitFirstTime() -{ - static bool initialized = false; - if(!initialized) - { - ev_LuaOpen = CoreTiming::RegisterEvent("LuaOpen", &wxLuaWindow::LuaOpenCallback); - ev_LuaClose = CoreTiming::RegisterEvent("LuaClose", &wxLuaWindow::LuaCloseCallback); - ev_LuaStart = CoreTiming::RegisterEvent("LuaStart", &wxLuaWindow::LuaStartCallback); - ev_LuaStop = CoreTiming::RegisterEvent("LuaStop", &wxLuaWindow::LuaStopCallback); - initialized = true; - } -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "LuaWindow.h" +#include "LuaInterface.h" +#include "../../Core/Src/CoreTiming.h" + +#include + + +int wxLuaWindow::luaCount = 0; + +// Constant Colors +const unsigned long COLOR_GRAY = 0xDCDCDC; + +BEGIN_EVENT_TABLE(wxLuaWindow, wxWindow) + EVT_SIZE( wxLuaWindow::OnEvent_Window_Resize) + EVT_CLOSE( wxLuaWindow::OnEvent_Window_Close) + EVT_BUTTON(ID_BUTTON_CLOSE, wxLuaWindow::OnEvent_ButtonClose_Press) + EVT_BUTTON(ID_BUTTON_LOAD, wxLuaWindow::OnEvent_ScriptLoad_Press) + EVT_BUTTON(ID_BUTTON_RUN, wxLuaWindow::OnEvent_ScriptRun_Press) + EVT_BUTTON(ID_BUTTON_STOP, wxLuaWindow::OnEvent_ScriptStop_Press) + EVT_BUTTON(ID_BUTTON_CLEAR, wxLuaWindow::OnEvent_ButtonClear_Press) +END_EVENT_TABLE() + +std::map g_contextMap; + +static int ev_LuaOpen, ev_LuaClose, ev_LuaStart, ev_LuaStop; + + +void LuaPrint(int uid, const char *msg) +{ + g_contextMap[uid]->PrintMessage(msg); +} + +void LuaStop(int uid, bool ok) +{ + if(ok) + g_contextMap[uid]->PrintMessage("Script completed successfully!\n"); + //else // disabled because this message makes no sense in certain contexts, and there's always an earlier error message anyway. + // g_contextMap[uid]->PrintMessage("Script failed.\n"); + + g_contextMap[uid]->OnStop(); +} + +wxLuaWindow::wxLuaWindow(wxFrame* parent, const wxPoint& pos, const wxSize& size) : + wxFrame(parent, wxID_ANY, _T("Lua Script Console"), pos, size, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) +{ + LuaWindow_InitFirstTime(); + + // Create Lua context + luaID = luaCount; + luaCount++; + CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaOpen, luaID); + g_contextMap[luaID] = this; + bScriptRunning = false; + + // Create the GUI controls + InitGUIControls(); + + // Setup Window + SetBackgroundColour(wxColour(COLOR_GRAY)); + SetSize(size); + SetPosition(pos); + Layout(); + Show(); +} + +wxLuaWindow::~wxLuaWindow() +{ + // On Disposal + CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaClose, luaID); + g_contextMap.erase(luaID); +} + +void wxLuaWindow::PrintMessage(const char *text) +{ + m_TextCtrl_Log->AppendText(wxString::FromAscii(text)); +} + +void wxLuaWindow::InitGUIControls() +{ + // $ Log Console + m_Tab_Log = new wxPanel(this, ID_TAB_LOG, wxDefaultPosition, wxDefaultSize); + m_TextCtrl_Log = new wxTextCtrl(m_Tab_Log, ID_TEXTCTRL_LOG, wxT(""), wxDefaultPosition, wxSize(100, 600), + wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP); + wxBoxSizer *HStrip1 = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *sTabLog = new wxBoxSizer(wxVERTICAL); + sTabLog->Add(HStrip1, 0, wxALL, 5); + sTabLog->Add(m_TextCtrl_Log, 1, wxALL|wxEXPAND, 5); + + m_Tab_Log->SetSizer(sTabLog); + m_Tab_Log->Layout(); + + // Button Strip + m_Button_Close = new wxButton(this, ID_BUTTON_CLOSE, _T("Close"), wxDefaultPosition, wxDefaultSize); + m_Button_LoadScript = new wxButton(this, ID_BUTTON_LOAD, _T("Load Script..."), wxDefaultPosition, wxDefaultSize); + m_Button_Run = new wxButton(this, ID_BUTTON_RUN, _T("Run"), wxDefaultPosition, wxDefaultSize); + m_Button_Stop = new wxButton(this, ID_BUTTON_STOP, _T("Stop"), wxDefaultPosition, wxDefaultSize); + m_Button_Clear = new wxButton(this, ID_BUTTON_CLEAR, _T("Clear"), wxDefaultPosition, wxDefaultSize); + wxBoxSizer* sButtons = new wxBoxSizer(wxHORIZONTAL); + + m_Button_Run->Disable(); + m_Button_Stop->Disable(); + + sButtons->Add(m_Button_Close, 0, wxALL, 5); + sButtons->Add(m_Button_LoadScript, 0, wxALL, 5); + sButtons->Add(m_Button_Run, 0, wxALL, 5); + sButtons->Add(m_Button_Stop, 0, wxALL, 5); + sButtons->Add(m_Button_Clear, 0, wxALL, 5); + + wxBoxSizer* sMain = new wxBoxSizer(wxVERTICAL); + sMain->Add(m_Tab_Log, 1, wxEXPAND|wxALL, 5); + sMain->Add(sButtons, 0, wxALL, 5); + SetSizer(sMain); + Layout(); + + Fit(); +} + +void wxLuaWindow::OnEvent_ScriptLoad_Press(wxCommandEvent& WXUNUSED(event)) +{ + wxString path = wxFileSelector( + _T("Select the script to load"), + wxEmptyString, wxEmptyString, wxEmptyString, + wxString::Format + ( + _T("Lua Scripts (lua)|*.lua|All files (%s)|%s"), + wxFileSelectorDefaultWildcardStr, + wxFileSelectorDefaultWildcardStr + ), + wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST, + this); + + if(!path.IsEmpty()) + currentScript = path; + else + return; + + m_TextCtrl_Log->Clear(); + m_TextCtrl_Log->AppendText(wxString::FromAscii( + StringFromFormat("Script %s loaded successfully.\n", + (const char *)path.mb_str()).c_str())); + m_Button_Run->Enable(); +} + +void wxLuaWindow::OnEvent_ScriptRun_Press(wxCommandEvent& WXUNUSED(event)) +{ + m_TextCtrl_Log->AppendText(wxT("Running script...\n")); + bScriptRunning = true; + m_Button_LoadScript->Disable(); + m_Button_Run->Disable(); + m_Button_Stop->Enable(); + + CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaStart, luaID); +} + +void wxLuaWindow::OnEvent_ScriptStop_Press(wxCommandEvent& WXUNUSED(event)) +{ + CoreTiming::ScheduleEvent_Threadsafe_Immediate(ev_LuaStop, luaID); + OnStop(); + PrintMessage("Stopping script...\n"); +} + +void wxLuaWindow::OnStop() +{ + bScriptRunning = false; + m_Button_LoadScript->Enable(); + m_Button_Run->Enable(); + m_Button_Stop->Disable(); +} + +void wxLuaWindow::OnEvent_ButtonClear_Press(wxCommandEvent& WXUNUSED (event)) +{ + m_TextCtrl_Log->Clear(); +} + +void wxLuaWindow::OnEvent_Window_Resize(wxSizeEvent& WXUNUSED (event)) +{ + Layout(); +} +void wxLuaWindow::OnEvent_ButtonClose_Press(wxCommandEvent& WXUNUSED (event)) +{ + Destroy(); +} +void wxLuaWindow::OnEvent_Window_Close(wxCloseEvent& WXUNUSED (event)) +{ + Destroy(); +} + + +// this layer of event stuff is because Lua needs to run on the CPU thread +void wxLuaWindow::LuaOpenCallback(u64 userdata, int) +{ + Lua::OpenLuaContext((int)userdata, LuaPrint, NULL, LuaStop); +} +void wxLuaWindow::LuaCloseCallback(u64 userdata, int) +{ + Lua::CloseLuaContext((int)userdata); +} +void wxLuaWindow::LuaStartCallback(u64 userdata, int) +{ + int luaID = (int)userdata; + Lua::RunLuaScriptFile(luaID, (const char *)g_contextMap[luaID]->currentScript.mb_str()); +} +void wxLuaWindow::LuaStopCallback(u64 userdata, int) +{ + Lua::StopLuaScript((int)userdata); +} +void wxLuaWindow::LuaWindow_InitFirstTime() +{ + static bool initialized = false; + if(!initialized) + { + ev_LuaOpen = CoreTiming::RegisterEvent("LuaOpen", &wxLuaWindow::LuaOpenCallback); + ev_LuaClose = CoreTiming::RegisterEvent("LuaClose", &wxLuaWindow::LuaCloseCallback); + ev_LuaStart = CoreTiming::RegisterEvent("LuaStart", &wxLuaWindow::LuaStartCallback); + ev_LuaStop = CoreTiming::RegisterEvent("LuaStop", &wxLuaWindow::LuaStopCallback); + initialized = true; + } +} diff --git a/Source/Core/DolphinWX/Src/LuaWindow.h b/Source/Core/DolphinWX/Src/LuaWindow.h index be51929da3..7ab0024ad0 100644 --- a/Source/Core/DolphinWX/Src/LuaWindow.h +++ b/Source/Core/DolphinWX/Src/LuaWindow.h @@ -1,105 +1,105 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef __LUAWINDOW_H__ -#define __LUAWINDOW_H__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Filesystem.h" -#include "IniFile.h" - -class wxLuaWindow : public wxFrame -{ - public: - - wxLuaWindow(wxFrame* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); - - void PrintMessage(const char *text); - - void OnStop(); - - virtual ~wxLuaWindow(); - - protected: - static int luaCount; - int luaID; - bool bScriptRunning; - wxString currentScript; - - // Event Table - DECLARE_EVENT_TABLE(); - - // --- GUI Controls --- - - wxPanel *m_Tab_Log; - - wxButton *m_Button_Close, *m_Button_LoadScript, *m_Button_Run, - *m_Button_Stop, *m_Button_Clear; - - wxTextCtrl *m_TextCtrl_Log; - - // GUI IDs - enum - { - ID_TAB_LOG, - ID_BUTTON_CLOSE, - ID_BUTTON_LOAD, - ID_BUTTON_RUN, - ID_BUTTON_STOP, - ID_BUTTON_CLEAR, - ID_TEXTCTRL_LOG - }; - - void InitGUIControls(); - - - // --- Wx Events Handlers --- - // $ Window - void OnEvent_Window_Resize(wxSizeEvent& event); - void OnEvent_Window_Close(wxCloseEvent& event); - - // $ Buttons - void OnEvent_ButtonClose_Press(wxCommandEvent& event); - void OnEvent_ScriptLoad_Press(wxCommandEvent& event); - void OnEvent_ScriptRun_Press(wxCommandEvent& event); - void OnEvent_ScriptStop_Press(wxCommandEvent& event); - void OnEvent_ButtonClear_Press(wxCommandEvent& event); - - // -- CoreTiming-style event handlers -- - static void LuaOpenCallback(u64 userdata, int cyclesLate); - static void LuaCloseCallback(u64 userdata, int cyclesLate); - static void LuaStartCallback(u64 userdata, int cyclesLate); - static void LuaStopCallback(u64 userdata, int cyclesLate); - - static void LuaWindow_InitFirstTime(); - -}; - -#endif - +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __LUAWINDOW_H__ +#define __LUAWINDOW_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Filesystem.h" +#include "IniFile.h" + +class wxLuaWindow : public wxFrame +{ + public: + + wxLuaWindow(wxFrame* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + + void PrintMessage(const char *text); + + void OnStop(); + + virtual ~wxLuaWindow(); + + protected: + static int luaCount; + int luaID; + bool bScriptRunning; + wxString currentScript; + + // Event Table + DECLARE_EVENT_TABLE(); + + // --- GUI Controls --- + + wxPanel *m_Tab_Log; + + wxButton *m_Button_Close, *m_Button_LoadScript, *m_Button_Run, + *m_Button_Stop, *m_Button_Clear; + + wxTextCtrl *m_TextCtrl_Log; + + // GUI IDs + enum + { + ID_TAB_LOG, + ID_BUTTON_CLOSE, + ID_BUTTON_LOAD, + ID_BUTTON_RUN, + ID_BUTTON_STOP, + ID_BUTTON_CLEAR, + ID_TEXTCTRL_LOG + }; + + void InitGUIControls(); + + + // --- Wx Events Handlers --- + // $ Window + void OnEvent_Window_Resize(wxSizeEvent& event); + void OnEvent_Window_Close(wxCloseEvent& event); + + // $ Buttons + void OnEvent_ButtonClose_Press(wxCommandEvent& event); + void OnEvent_ScriptLoad_Press(wxCommandEvent& event); + void OnEvent_ScriptRun_Press(wxCommandEvent& event); + void OnEvent_ScriptStop_Press(wxCommandEvent& event); + void OnEvent_ButtonClear_Press(wxCommandEvent& event); + + // -- CoreTiming-style event handlers -- + static void LuaOpenCallback(u64 userdata, int cyclesLate); + static void LuaCloseCallback(u64 userdata, int cyclesLate); + static void LuaStartCallback(u64 userdata, int cyclesLate); + static void LuaStopCallback(u64 userdata, int cyclesLate); + + static void LuaWindow_InitFirstTime(); + +}; + +#endif + diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index a738fe14fe..dc7583d6b8 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -1,568 +1,568 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -// Based off of tachtig/twintig http://git.infradead.org/?p=users/segher/wii.git -// Copyright 2007,2008 Segher Boessenkool -// Licensed under the terms of the GNU GPL, version 2 -// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt - -#include "WiiSaveCrypted.h" -#include "FileUtil.h" -#include "MathUtil.h" - -const u8 SDKey[16] = {0xAB, 0x01, 0xB9, 0xD8, 0xE1, 0x62, 0x2B, 0x08, - 0xAF, 0xBA, 0xD8, 0x4D, 0xBF, 0xC2, 0xA5, 0x5D}; -const u8 MD5_BLANKER[0x10] = {0x0E, 0x65, 0x37, 0x81, 0x99, 0xBE, 0x45, 0x17, - 0xAB, 0x06, 0xEC, 0x22, 0x45, 0x1A, 0x57, 0x93}; - -CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 title) - : _saveGameTitle(title) -{ - strcpy(pathData_bin, FileName); - memcpy(SD_IV, "\x21\x67\x12\xE6\xAA\x1F\x68\x9F\x95\xC5\xA2\x23\x24\xDC\x6A\x98", 0x10); - - if (!title) - { - AES_set_decrypt_key(SDKey, 128, &m_AES_KEY); - - - do - { - b_valid = true; - ReadHDR(); - ReadBKHDR(); - ImportWiiSaveFiles(); - // TODO: check_sig() - if (b_valid) - { - SuccessAlert("Successfully imported save files"); - b_tryAgain = false; - } - else b_tryAgain = AskYesNo("Import failed, try again?"); - }while(b_tryAgain); - } - else - { - AES_set_encrypt_key(SDKey, 128, &m_AES_KEY); - - if (getPaths(true)) - { - do - { - b_valid = true; - WriteHDR(); - WriteBKHDR(); - ExportWiiSaveFiles(); - do_sig(); - if (b_valid) - { - SuccessAlert("Successfully exported file to %s", pathData_bin); - b_tryAgain = false; - } - else b_tryAgain = AskYesNo("Export failed, try again?"); - }while(b_tryAgain); - } - } -} - -void CWiiSaveCrypted::ReadHDR() -{ - fpData_bin = fopen(pathData_bin, "rb"); - if (!fpData_bin) - { - PanicAlert("Cannot open %s", pathData_bin); - b_valid = false; - return; - } - if (fread(&_encryptedHeader, HEADER_SZ, 1, fpData_bin) != 1) - { - PanicAlert("failed to read header"); - b_valid = false; - return; - } - fclose(fpData_bin); - - AES_cbc_encrypt((const u8*)&_encryptedHeader, (u8*)&_header, HEADER_SZ, &m_AES_KEY, SD_IV, AES_DECRYPT); - _bannerSize = Common::swap32(_header.hdr.BannerSize); - if ((_bannerSize < FULL_BNR_MIN) || (_bannerSize > FULL_BNR_MAX) || - (((_bannerSize - BNR_SZ) % ICON_SZ) != 0)) - { - PanicAlert("not a wii save or read failure for file header size %x", _bannerSize); - b_valid = false; - return; - } - _saveGameTitle = Common::swap64(_header.hdr.SaveGameTitle); - - memcpy(md5_file, _header.hdr.Md5, 0x10); - memcpy(_header.hdr.Md5, MD5_BLANKER, 0x10); - md5((u8*)&_header, HEADER_SZ, md5_calc); - if (memcmp(md5_file, md5_calc, 0x10)) - { - PanicAlert("MD5 mismatch\n %016llx%016llx != %016llx%016llx", Common::swap64(md5_file),Common::swap64(md5_file+8), Common::swap64(md5_calc), Common::swap64(md5_calc+8)); - b_valid= false; - } - - if (!getPaths()) - { - b_valid = false; - return; - } - if (!File::Exists(pathBanner_bin) || AskYesNo("%s already exists, overwrite?", pathBanner_bin)) - { - INFO_LOG(CONSOLE, "creating file %s", pathBanner_bin); - fpBanner_bin = fopen(pathBanner_bin, "wb"); - if (fpBanner_bin) - { - fwrite(_header.BNR, _bannerSize, 1, fpBanner_bin); - fclose(fpBanner_bin); - } - } -} - -void CWiiSaveCrypted::WriteHDR() -{ - if (!b_valid) return; - memset(&_header, 0, HEADER_SZ); - - _header.hdr.BannerSize = Common::swap32(File::GetSize(pathBanner_bin)); - - _header.hdr.SaveGameTitle = Common::swap64(_saveGameTitle); - memcpy(_header.hdr.Md5, MD5_BLANKER, 0x10); - _header.hdr.Permissions = 0x3C;//0x35; - - fpBanner_bin = fopen(pathBanner_bin, "rb"); - if (fpBanner_bin) - { - if (fread(_header.BNR, Common::swap32(_header.hdr.BannerSize), 1, fpBanner_bin) != 1) - { - PanicAlert("Failed to read banner.bin"); - b_valid = false; - return; - } - fclose(fpBanner_bin); - } - - md5((u8*)&_header, HEADER_SZ, md5_calc); - memcpy(_header.hdr.Md5, md5_calc, 0x10); - - AES_cbc_encrypt((const unsigned char *)&_header, (u8*)&_encryptedHeader, HEADER_SZ, &m_AES_KEY, SD_IV, AES_ENCRYPT); - fpData_bin = fopen(pathData_bin, "wb"); - if (fpData_bin) - { - if (fwrite(&_encryptedHeader, HEADER_SZ, 1, fpData_bin) != 1) - { - PanicAlert("Failed to write header for %s", pathData_bin); - b_valid = false; - } - fclose(fpData_bin); - } -} - - - -void CWiiSaveCrypted::ReadBKHDR() -{ - if (!b_valid) return; - - fpData_bin = fopen(pathData_bin, "rb"); - if (!fpData_bin) - { - PanicAlert("Cannot open %s", pathData_bin); - b_valid = false; - return; - } - fseek(fpData_bin, HEADER_SZ, SEEK_SET); - if (fread(&bkhdr, BK_SZ, 1, fpData_bin) != 1) - { - PanicAlert("failed to read bk header"); - b_valid = false; - return; - } - fclose(fpData_bin); - - if (bkhdr.size != Common::swap32(BK_LISTED_SZ) || - bkhdr.magic != Common::swap32(BK_HDR_MAGIC)) - { - PanicAlert("Invalid Size(%x) or Magic word (%x)", bkhdr.size, bkhdr.magic); - b_valid = false; - return; - } - - _numberOfFiles = Common::swap32(bkhdr.numberOfFiles); - _sizeOfFiles = Common::swap32(bkhdr.sizeOfFiles); - _totalSize = Common::swap32(bkhdr.totalSize); - - if (_sizeOfFiles + FULL_CERT_SZ != _totalSize) - WARN_LOG(CONSOLE, "Size(%x) + cert(%x) does not equal totalsize(%x)", _sizeOfFiles, FULL_CERT_SZ, _totalSize); - if (_saveGameTitle != Common::swap64(bkhdr.SaveGameTitle)) - WARN_LOG(CONSOLE, "encrypted title (%x) does not match unencrypted title (%x)", _saveGameTitle, Common::swap64(bkhdr.SaveGameTitle)); - - -} - -void CWiiSaveCrypted::WriteBKHDR() -{ - if (!b_valid) return; - _numberOfFiles = 0; - _sizeOfFiles = 0; - - ScanForFiles(pathSavedir, FilesList, &_numberOfFiles, &_sizeOfFiles); - memset(&bkhdr, 0, BK_SZ); - bkhdr.size = Common::swap32(BK_LISTED_SZ); - bkhdr.magic = Common::swap32(BK_HDR_MAGIC); -//customize this - bkhdr.NGid = Common::swap32(1); -// - bkhdr.numberOfFiles = Common::swap32(_numberOfFiles); - bkhdr.sizeOfFiles = Common::swap32(_sizeOfFiles); - bkhdr.totalSize = Common::swap32(_sizeOfFiles + FULL_CERT_SZ); - bkhdr.SaveGameTitle = Common::swap64(_saveGameTitle); -// customize this - const u8 MAC[6] = {0}; -// - memcpy(bkhdr.MACaddress, MAC, 6); - - fpData_bin = fopen(pathData_bin, "ab"); - if(fpData_bin) - { - if (fwrite(&bkhdr, BK_SZ, 1, fpData_bin) != 1) - { - PanicAlert("Failed to write bkhdr"); - b_valid = false; - } - fclose(fpData_bin); - } -} - -void CWiiSaveCrypted::ImportWiiSaveFiles() -{ - if (!b_valid) return; - - fpData_bin = fopen(pathData_bin, "rb"); - if (!fpData_bin) - { - PanicAlert("Cannot open %s", pathData_bin); - b_valid = false; - return; - } - - int lastpos = HEADER_SZ + BK_SZ; - - - FileHDR _tmpFileHDR; - - for(u32 i = 0; i < _numberOfFiles; i++) - { - fseek(fpData_bin, lastpos, SEEK_SET); - memset(&_tmpFileHDR, 0, FILE_HDR_SZ); - memset(IV, 0, 0x10); - _fileSize = 0; - - if (fread(&_tmpFileHDR, FILE_HDR_SZ, 1, fpData_bin) != 1) - { - PanicAlert("Failed to write header for file %d", i); - b_valid = false; - } - - lastpos += FILE_HDR_SZ; - if(Common::swap32(_tmpFileHDR.magic) != FILE_HDR_MAGIC) - { - PanicAlert("Bad File Header"); - break; - } - else - { - sprintf(pathRawSave, "%s%s", pathSavedir, _tmpFileHDR.name); - File::CreateFullPath(pathRawSave); - if (_tmpFileHDR.type == 1) - { - _fileSize = Common::swap32(_tmpFileHDR.size); - lastpos += ROUND_UP(_fileSize, BLOCK_SZ); - _encryptedData = new u8[_fileSize]; - _data = new u8[_fileSize]; - if (fread(_encryptedData, _fileSize, 1, fpData_bin) != 1) - { - PanicAlert("Failed to read data from file %d", i); - b_valid = false; - break; - } - - - memcpy(IV, _tmpFileHDR.IV, 0x10); - AES_cbc_encrypt((const unsigned char *)_encryptedData, _data, _fileSize, &m_AES_KEY, IV, AES_DECRYPT); - delete []_encryptedData; - - if (!File::Exists(pathRawSave) || AskYesNo("%s already exists, overwrite?", pathRawSave)) - { - INFO_LOG(CONSOLE, "creating file %s", pathRawSave); - - fpRawSaveFile = fopen(pathRawSave, "wb"); - if (fpRawSaveFile) - { - fwrite(_data, _fileSize, 1, fpRawSaveFile); - fclose(fpRawSaveFile); - } - } - delete []_data; - } - - } - } -fclose(fpData_bin); -} - -void CWiiSaveCrypted::ExportWiiSaveFiles() -{ - if (!b_valid) return; - - u8 *__ENCdata, - *__data; - - for(u32 i = 0; i < _numberOfFiles; i++) - { - FileHDR tmpFileHDR; - std::string __name, __ext; - memset(&tmpFileHDR, 0, FILE_HDR_SZ); - - _fileSize = File::GetSize(FilesList.at(i).c_str()); - _roundedfileSize = ROUND_UP(_fileSize, BLOCK_SZ); - - tmpFileHDR.magic = Common::swap32(FILE_HDR_MAGIC); - tmpFileHDR.size = Common::swap32(_fileSize); - tmpFileHDR.Permissions = 0x3C; - tmpFileHDR.type = File::IsDirectory(FilesList.at(i).c_str()) ? 2 : 1; - - SplitPath(FilesList.at(i), NULL, &__name, &__ext); - __name += __ext; - - if (__name.length() > 0x44) - { - PanicAlert("%s is too long for the filename, max chars is 45", __name.c_str()); - b_valid = false; - return; - } - strncpy((char *)tmpFileHDR.name, __name.c_str(), 0x44); - - fpData_bin = fopen(pathData_bin, "ab"); - if (fpData_bin) - { - fwrite(&tmpFileHDR, FILE_HDR_SZ, 1, fpData_bin); - fclose(fpData_bin); - } - - if (tmpFileHDR.type == 1) - { - if (_fileSize == 0) - { - PanicAlert("%s is a 0 byte file", FilesList.at(i).c_str()); - b_valid = false; - return; - } - fpRawSaveFile = fopen(FilesList.at(i).c_str(), "rb"); - if (!fpRawSaveFile) - { - PanicAlert("%s failed to open", FilesList.at(i).c_str()); - b_valid = false; - } - __data = new u8[_roundedfileSize]; - __ENCdata = new u8[_roundedfileSize]; - memset(__data, 0, _roundedfileSize); - if (fread(__data, _fileSize, 1, fpRawSaveFile) != 1) - { - PanicAlert("failed to read data from file: %s", FilesList.at(i).c_str()); - b_valid = false; - } - fclose(fpRawSaveFile); - - AES_cbc_encrypt((const u8*)__data, __ENCdata, _roundedfileSize, &m_AES_KEY, tmpFileHDR.IV, AES_ENCRYPT); - fpData_bin = fopen(pathData_bin, "ab"); - if (fpData_bin) - { - fwrite(__ENCdata, _roundedfileSize, 1, fpData_bin); - fclose(fpData_bin); - } - delete [] __data; - delete [] __ENCdata; - - } - } -} - -void CWiiSaveCrypted::do_sig() -{ - if (!b_valid) return; - u8 sig[0x40]; - u8 ng_cert[0x180]; - u8 ap_cert[0x180]; - u8 hash[0x14]; - u8 ap_priv[30]; - u8 ap_sig[60]; - char signer[64]; - char name[64]; - u8 *data; - u32 data_size; -//allow customization - u32 ng_id = Common::swap32(1); - u32 ng_key_id = Common::swap32(2); - u8 ng_sig[0x3C] = {0}; - u8 ng_priv[0x1E] = {0}; -//allow customization - - sprintf(signer, "Root-CA00000001-MS00000002"); - sprintf(name, "NG%08x", ng_id); - make_ec_cert(ng_cert, ng_sig, signer, name, ng_priv, ng_key_id); - - - memset(ap_priv, 0, sizeof ap_priv); - ap_priv[10] = 1; - - memset(ap_sig, 81, sizeof ap_sig); // temp - - sprintf(signer, "Root-CA00000001-MS00000002-NG%08x", ng_id); - sprintf(name, "AP%08x%08x", 1, 2); - make_ec_cert(ap_cert, ap_sig, signer, name, ap_priv, 0); - - sha1(ap_cert + 0x80, 0x100, hash); - generate_ecdsa(ap_sig, ap_sig + 30, ng_priv, hash); - make_ec_cert(ap_cert, ap_sig, signer, name, ap_priv, 0); - - data_size = Common::swap32(bkhdr.sizeOfFiles) + 0x80; - - fpData_bin = fopen(pathData_bin, "rb"); - if (!fpData_bin) - { - b_valid = false; - return; - } - data = new u8[data_size]; - - fseek(fpData_bin, 0xf0c0, SEEK_SET); - if (fread(data, data_size, 1, fpData_bin) != 1) - PanicAlert("read data for sig check"); - sha1(data, data_size, hash); - sha1(hash, 20, hash); - fclose(fpData_bin); - delete []data; - fpData_bin = fopen(pathData_bin, "ab"); - if (!fpData_bin) - { - b_valid = false; - return; - } - generate_ecdsa(sig, sig + 30, ap_priv, hash); - *(u32*)(sig + 60) = Common::swap32(0x2f536969); - - - - if (fwrite(sig, sizeof sig, 1, fpData_bin) != 1) - PanicAlert("write sig"); - if (fwrite(ng_cert, sizeof ng_cert, 1, fpData_bin) != 1) - PanicAlert("write NG cert"); - if (fwrite(ap_cert, sizeof ap_cert, 1, fpData_bin) != 1) - PanicAlert("write AP cert"); - fclose(fpData_bin); -} - - -void CWiiSaveCrypted::make_ec_cert(u8 *cert, u8 *sig, char *signer, char *name, u8 *priv, u32 key_id) -{ - memset(cert, 0, 0x180); - *(u32*)cert = Common::swap32(0x10002); - - memcpy(cert + 4, sig, 60); - strcpy((char*)cert + 0x80, signer); - *(u32*)(cert + 0xc0) = Common::swap32(2); - strcpy((char*)cert + 0xc4, name); - *(u32*)(cert + 0x104) = Common::swap32(key_id); - ec_priv_to_pub(priv, cert + 0x108); -} - -bool CWiiSaveCrypted::getPaths(bool _export) -{ - if (_saveGameTitle) - { - sprintf(pathSavedir, "%stitle/%08x/%08x/data/", File::GetUserPath(D_WIIUSER_IDX), (u32)(_saveGameTitle>>32), (u32)_saveGameTitle); - sprintf(pathBanner_bin, "%sbanner.bin", pathSavedir); - sprintf(_saveGameString, "%c%c%c%c", - (u8)(_saveGameTitle >> 24) & 0xFF, (u8)(_saveGameTitle >> 16) & 0xFF, - (u8)(_saveGameTitle >> 8) & 0xFF, (u8)_saveGameTitle & 0xFF); - } - if (_export) - { - if(!File::IsDirectory(pathSavedir)) - { - b_valid = false; - PanicAlert("No save folder found for title %s", _saveGameString); - return false; - } - - if(!File::Exists(pathBanner_bin)) - { - b_valid = false; - PanicAlert("No banner file found for title %s", _saveGameString); - return false; - } - if (strlen(pathData_bin) == 0) - strcpy(pathData_bin, ".");// If no path was passed, use current dir - sprintf(pathData_bin, "%s/private/wii/title/%s/data.bin", pathData_bin, _saveGameString); - File::CreateFullPath(pathData_bin); - } - else - { - File::CreateFullPath(pathSavedir); - if (!AskYesNo("Warning! it is advised to backup all files in the folder:\n%s\nDo you wish to continue?", pathSavedir)) - return false; - } - return true; -} - -void CWiiSaveCrypted::ScanForFiles(std::string savDir, std::vector& FileList, u32 *_numFiles, u32 *_sizeFiles) -{ - std::vector Directories; - *_numFiles = *_sizeFiles = 0; - - Directories.push_back(savDir); - for (u32 i = 0; i < Directories.size(); i++) - { - if (i) FileList.push_back(Directories.at(i));//add dir to fst - - File::FSTEntry FST_Temp; - File::ScanDirectoryTree(Directories.at(i).c_str(), FST_Temp); - for (u32 j = 0; j < FST_Temp.children.size(); j++) - { - if (strncmp(FST_Temp.children.at(j).virtualName.c_str(), "banner.bin", 10) != 0) - { - (*_numFiles)++; - *_sizeFiles += FILE_HDR_SZ + ROUND_UP(FST_Temp.children.at(j).size, BLOCK_SZ); - - if (FST_Temp.children.at(j).isDirectory) - { - Directories.push_back(FST_Temp.children.at(j).physicalName); - } - else - { - FileList.push_back(FST_Temp.children.at(j).physicalName); - } - } - } - } -} - -CWiiSaveCrypted::~CWiiSaveCrypted() -{ -} - +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +// Based off of tachtig/twintig http://git.infradead.org/?p=users/segher/wii.git +// Copyright 2007,2008 Segher Boessenkool +// Licensed under the terms of the GNU GPL, version 2 +// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +#include "WiiSaveCrypted.h" +#include "FileUtil.h" +#include "MathUtil.h" + +const u8 SDKey[16] = {0xAB, 0x01, 0xB9, 0xD8, 0xE1, 0x62, 0x2B, 0x08, + 0xAF, 0xBA, 0xD8, 0x4D, 0xBF, 0xC2, 0xA5, 0x5D}; +const u8 MD5_BLANKER[0x10] = {0x0E, 0x65, 0x37, 0x81, 0x99, 0xBE, 0x45, 0x17, + 0xAB, 0x06, 0xEC, 0x22, 0x45, 0x1A, 0x57, 0x93}; + +CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 title) + : _saveGameTitle(title) +{ + strcpy(pathData_bin, FileName); + memcpy(SD_IV, "\x21\x67\x12\xE6\xAA\x1F\x68\x9F\x95\xC5\xA2\x23\x24\xDC\x6A\x98", 0x10); + + if (!title) + { + AES_set_decrypt_key(SDKey, 128, &m_AES_KEY); + + + do + { + b_valid = true; + ReadHDR(); + ReadBKHDR(); + ImportWiiSaveFiles(); + // TODO: check_sig() + if (b_valid) + { + SuccessAlert("Successfully imported save files"); + b_tryAgain = false; + } + else b_tryAgain = AskYesNo("Import failed, try again?"); + }while(b_tryAgain); + } + else + { + AES_set_encrypt_key(SDKey, 128, &m_AES_KEY); + + if (getPaths(true)) + { + do + { + b_valid = true; + WriteHDR(); + WriteBKHDR(); + ExportWiiSaveFiles(); + do_sig(); + if (b_valid) + { + SuccessAlert("Successfully exported file to %s", pathData_bin); + b_tryAgain = false; + } + else b_tryAgain = AskYesNo("Export failed, try again?"); + }while(b_tryAgain); + } + } +} + +void CWiiSaveCrypted::ReadHDR() +{ + fpData_bin = fopen(pathData_bin, "rb"); + if (!fpData_bin) + { + PanicAlert("Cannot open %s", pathData_bin); + b_valid = false; + return; + } + if (fread(&_encryptedHeader, HEADER_SZ, 1, fpData_bin) != 1) + { + PanicAlert("failed to read header"); + b_valid = false; + return; + } + fclose(fpData_bin); + + AES_cbc_encrypt((const u8*)&_encryptedHeader, (u8*)&_header, HEADER_SZ, &m_AES_KEY, SD_IV, AES_DECRYPT); + _bannerSize = Common::swap32(_header.hdr.BannerSize); + if ((_bannerSize < FULL_BNR_MIN) || (_bannerSize > FULL_BNR_MAX) || + (((_bannerSize - BNR_SZ) % ICON_SZ) != 0)) + { + PanicAlert("not a wii save or read failure for file header size %x", _bannerSize); + b_valid = false; + return; + } + _saveGameTitle = Common::swap64(_header.hdr.SaveGameTitle); + + memcpy(md5_file, _header.hdr.Md5, 0x10); + memcpy(_header.hdr.Md5, MD5_BLANKER, 0x10); + md5((u8*)&_header, HEADER_SZ, md5_calc); + if (memcmp(md5_file, md5_calc, 0x10)) + { + PanicAlert("MD5 mismatch\n %016llx%016llx != %016llx%016llx", Common::swap64(md5_file),Common::swap64(md5_file+8), Common::swap64(md5_calc), Common::swap64(md5_calc+8)); + b_valid= false; + } + + if (!getPaths()) + { + b_valid = false; + return; + } + if (!File::Exists(pathBanner_bin) || AskYesNo("%s already exists, overwrite?", pathBanner_bin)) + { + INFO_LOG(CONSOLE, "creating file %s", pathBanner_bin); + fpBanner_bin = fopen(pathBanner_bin, "wb"); + if (fpBanner_bin) + { + fwrite(_header.BNR, _bannerSize, 1, fpBanner_bin); + fclose(fpBanner_bin); + } + } +} + +void CWiiSaveCrypted::WriteHDR() +{ + if (!b_valid) return; + memset(&_header, 0, HEADER_SZ); + + _header.hdr.BannerSize = Common::swap32(File::GetSize(pathBanner_bin)); + + _header.hdr.SaveGameTitle = Common::swap64(_saveGameTitle); + memcpy(_header.hdr.Md5, MD5_BLANKER, 0x10); + _header.hdr.Permissions = 0x3C;//0x35; + + fpBanner_bin = fopen(pathBanner_bin, "rb"); + if (fpBanner_bin) + { + if (fread(_header.BNR, Common::swap32(_header.hdr.BannerSize), 1, fpBanner_bin) != 1) + { + PanicAlert("Failed to read banner.bin"); + b_valid = false; + return; + } + fclose(fpBanner_bin); + } + + md5((u8*)&_header, HEADER_SZ, md5_calc); + memcpy(_header.hdr.Md5, md5_calc, 0x10); + + AES_cbc_encrypt((const unsigned char *)&_header, (u8*)&_encryptedHeader, HEADER_SZ, &m_AES_KEY, SD_IV, AES_ENCRYPT); + fpData_bin = fopen(pathData_bin, "wb"); + if (fpData_bin) + { + if (fwrite(&_encryptedHeader, HEADER_SZ, 1, fpData_bin) != 1) + { + PanicAlert("Failed to write header for %s", pathData_bin); + b_valid = false; + } + fclose(fpData_bin); + } +} + + + +void CWiiSaveCrypted::ReadBKHDR() +{ + if (!b_valid) return; + + fpData_bin = fopen(pathData_bin, "rb"); + if (!fpData_bin) + { + PanicAlert("Cannot open %s", pathData_bin); + b_valid = false; + return; + } + fseek(fpData_bin, HEADER_SZ, SEEK_SET); + if (fread(&bkhdr, BK_SZ, 1, fpData_bin) != 1) + { + PanicAlert("failed to read bk header"); + b_valid = false; + return; + } + fclose(fpData_bin); + + if (bkhdr.size != Common::swap32(BK_LISTED_SZ) || + bkhdr.magic != Common::swap32(BK_HDR_MAGIC)) + { + PanicAlert("Invalid Size(%x) or Magic word (%x)", bkhdr.size, bkhdr.magic); + b_valid = false; + return; + } + + _numberOfFiles = Common::swap32(bkhdr.numberOfFiles); + _sizeOfFiles = Common::swap32(bkhdr.sizeOfFiles); + _totalSize = Common::swap32(bkhdr.totalSize); + + if (_sizeOfFiles + FULL_CERT_SZ != _totalSize) + WARN_LOG(CONSOLE, "Size(%x) + cert(%x) does not equal totalsize(%x)", _sizeOfFiles, FULL_CERT_SZ, _totalSize); + if (_saveGameTitle != Common::swap64(bkhdr.SaveGameTitle)) + WARN_LOG(CONSOLE, "encrypted title (%x) does not match unencrypted title (%x)", _saveGameTitle, Common::swap64(bkhdr.SaveGameTitle)); + + +} + +void CWiiSaveCrypted::WriteBKHDR() +{ + if (!b_valid) return; + _numberOfFiles = 0; + _sizeOfFiles = 0; + + ScanForFiles(pathSavedir, FilesList, &_numberOfFiles, &_sizeOfFiles); + memset(&bkhdr, 0, BK_SZ); + bkhdr.size = Common::swap32(BK_LISTED_SZ); + bkhdr.magic = Common::swap32(BK_HDR_MAGIC); +//customize this + bkhdr.NGid = Common::swap32(1); +// + bkhdr.numberOfFiles = Common::swap32(_numberOfFiles); + bkhdr.sizeOfFiles = Common::swap32(_sizeOfFiles); + bkhdr.totalSize = Common::swap32(_sizeOfFiles + FULL_CERT_SZ); + bkhdr.SaveGameTitle = Common::swap64(_saveGameTitle); +// customize this + const u8 MAC[6] = {0}; +// + memcpy(bkhdr.MACaddress, MAC, 6); + + fpData_bin = fopen(pathData_bin, "ab"); + if(fpData_bin) + { + if (fwrite(&bkhdr, BK_SZ, 1, fpData_bin) != 1) + { + PanicAlert("Failed to write bkhdr"); + b_valid = false; + } + fclose(fpData_bin); + } +} + +void CWiiSaveCrypted::ImportWiiSaveFiles() +{ + if (!b_valid) return; + + fpData_bin = fopen(pathData_bin, "rb"); + if (!fpData_bin) + { + PanicAlert("Cannot open %s", pathData_bin); + b_valid = false; + return; + } + + int lastpos = HEADER_SZ + BK_SZ; + + + FileHDR _tmpFileHDR; + + for(u32 i = 0; i < _numberOfFiles; i++) + { + fseek(fpData_bin, lastpos, SEEK_SET); + memset(&_tmpFileHDR, 0, FILE_HDR_SZ); + memset(IV, 0, 0x10); + _fileSize = 0; + + if (fread(&_tmpFileHDR, FILE_HDR_SZ, 1, fpData_bin) != 1) + { + PanicAlert("Failed to write header for file %d", i); + b_valid = false; + } + + lastpos += FILE_HDR_SZ; + if(Common::swap32(_tmpFileHDR.magic) != FILE_HDR_MAGIC) + { + PanicAlert("Bad File Header"); + break; + } + else + { + sprintf(pathRawSave, "%s%s", pathSavedir, _tmpFileHDR.name); + File::CreateFullPath(pathRawSave); + if (_tmpFileHDR.type == 1) + { + _fileSize = Common::swap32(_tmpFileHDR.size); + lastpos += ROUND_UP(_fileSize, BLOCK_SZ); + _encryptedData = new u8[_fileSize]; + _data = new u8[_fileSize]; + if (fread(_encryptedData, _fileSize, 1, fpData_bin) != 1) + { + PanicAlert("Failed to read data from file %d", i); + b_valid = false; + break; + } + + + memcpy(IV, _tmpFileHDR.IV, 0x10); + AES_cbc_encrypt((const unsigned char *)_encryptedData, _data, _fileSize, &m_AES_KEY, IV, AES_DECRYPT); + delete []_encryptedData; + + if (!File::Exists(pathRawSave) || AskYesNo("%s already exists, overwrite?", pathRawSave)) + { + INFO_LOG(CONSOLE, "creating file %s", pathRawSave); + + fpRawSaveFile = fopen(pathRawSave, "wb"); + if (fpRawSaveFile) + { + fwrite(_data, _fileSize, 1, fpRawSaveFile); + fclose(fpRawSaveFile); + } + } + delete []_data; + } + + } + } +fclose(fpData_bin); +} + +void CWiiSaveCrypted::ExportWiiSaveFiles() +{ + if (!b_valid) return; + + u8 *__ENCdata, + *__data; + + for(u32 i = 0; i < _numberOfFiles; i++) + { + FileHDR tmpFileHDR; + std::string __name, __ext; + memset(&tmpFileHDR, 0, FILE_HDR_SZ); + + _fileSize = File::GetSize(FilesList.at(i).c_str()); + _roundedfileSize = ROUND_UP(_fileSize, BLOCK_SZ); + + tmpFileHDR.magic = Common::swap32(FILE_HDR_MAGIC); + tmpFileHDR.size = Common::swap32(_fileSize); + tmpFileHDR.Permissions = 0x3C; + tmpFileHDR.type = File::IsDirectory(FilesList.at(i).c_str()) ? 2 : 1; + + SplitPath(FilesList.at(i), NULL, &__name, &__ext); + __name += __ext; + + if (__name.length() > 0x44) + { + PanicAlert("%s is too long for the filename, max chars is 45", __name.c_str()); + b_valid = false; + return; + } + strncpy((char *)tmpFileHDR.name, __name.c_str(), 0x44); + + fpData_bin = fopen(pathData_bin, "ab"); + if (fpData_bin) + { + fwrite(&tmpFileHDR, FILE_HDR_SZ, 1, fpData_bin); + fclose(fpData_bin); + } + + if (tmpFileHDR.type == 1) + { + if (_fileSize == 0) + { + PanicAlert("%s is a 0 byte file", FilesList.at(i).c_str()); + b_valid = false; + return; + } + fpRawSaveFile = fopen(FilesList.at(i).c_str(), "rb"); + if (!fpRawSaveFile) + { + PanicAlert("%s failed to open", FilesList.at(i).c_str()); + b_valid = false; + } + __data = new u8[_roundedfileSize]; + __ENCdata = new u8[_roundedfileSize]; + memset(__data, 0, _roundedfileSize); + if (fread(__data, _fileSize, 1, fpRawSaveFile) != 1) + { + PanicAlert("failed to read data from file: %s", FilesList.at(i).c_str()); + b_valid = false; + } + fclose(fpRawSaveFile); + + AES_cbc_encrypt((const u8*)__data, __ENCdata, _roundedfileSize, &m_AES_KEY, tmpFileHDR.IV, AES_ENCRYPT); + fpData_bin = fopen(pathData_bin, "ab"); + if (fpData_bin) + { + fwrite(__ENCdata, _roundedfileSize, 1, fpData_bin); + fclose(fpData_bin); + } + delete [] __data; + delete [] __ENCdata; + + } + } +} + +void CWiiSaveCrypted::do_sig() +{ + if (!b_valid) return; + u8 sig[0x40]; + u8 ng_cert[0x180]; + u8 ap_cert[0x180]; + u8 hash[0x14]; + u8 ap_priv[30]; + u8 ap_sig[60]; + char signer[64]; + char name[64]; + u8 *data; + u32 data_size; +//allow customization + u32 ng_id = Common::swap32(1); + u32 ng_key_id = Common::swap32(2); + u8 ng_sig[0x3C] = {0}; + u8 ng_priv[0x1E] = {0}; +//allow customization + + sprintf(signer, "Root-CA00000001-MS00000002"); + sprintf(name, "NG%08x", ng_id); + make_ec_cert(ng_cert, ng_sig, signer, name, ng_priv, ng_key_id); + + + memset(ap_priv, 0, sizeof ap_priv); + ap_priv[10] = 1; + + memset(ap_sig, 81, sizeof ap_sig); // temp + + sprintf(signer, "Root-CA00000001-MS00000002-NG%08x", ng_id); + sprintf(name, "AP%08x%08x", 1, 2); + make_ec_cert(ap_cert, ap_sig, signer, name, ap_priv, 0); + + sha1(ap_cert + 0x80, 0x100, hash); + generate_ecdsa(ap_sig, ap_sig + 30, ng_priv, hash); + make_ec_cert(ap_cert, ap_sig, signer, name, ap_priv, 0); + + data_size = Common::swap32(bkhdr.sizeOfFiles) + 0x80; + + fpData_bin = fopen(pathData_bin, "rb"); + if (!fpData_bin) + { + b_valid = false; + return; + } + data = new u8[data_size]; + + fseek(fpData_bin, 0xf0c0, SEEK_SET); + if (fread(data, data_size, 1, fpData_bin) != 1) + PanicAlert("read data for sig check"); + sha1(data, data_size, hash); + sha1(hash, 20, hash); + fclose(fpData_bin); + delete []data; + fpData_bin = fopen(pathData_bin, "ab"); + if (!fpData_bin) + { + b_valid = false; + return; + } + generate_ecdsa(sig, sig + 30, ap_priv, hash); + *(u32*)(sig + 60) = Common::swap32(0x2f536969); + + + + if (fwrite(sig, sizeof sig, 1, fpData_bin) != 1) + PanicAlert("write sig"); + if (fwrite(ng_cert, sizeof ng_cert, 1, fpData_bin) != 1) + PanicAlert("write NG cert"); + if (fwrite(ap_cert, sizeof ap_cert, 1, fpData_bin) != 1) + PanicAlert("write AP cert"); + fclose(fpData_bin); +} + + +void CWiiSaveCrypted::make_ec_cert(u8 *cert, u8 *sig, char *signer, char *name, u8 *priv, u32 key_id) +{ + memset(cert, 0, 0x180); + *(u32*)cert = Common::swap32(0x10002); + + memcpy(cert + 4, sig, 60); + strcpy((char*)cert + 0x80, signer); + *(u32*)(cert + 0xc0) = Common::swap32(2); + strcpy((char*)cert + 0xc4, name); + *(u32*)(cert + 0x104) = Common::swap32(key_id); + ec_priv_to_pub(priv, cert + 0x108); +} + +bool CWiiSaveCrypted::getPaths(bool _export) +{ + if (_saveGameTitle) + { + sprintf(pathSavedir, "%stitle/%08x/%08x/data/", File::GetUserPath(D_WIIUSER_IDX), (u32)(_saveGameTitle>>32), (u32)_saveGameTitle); + sprintf(pathBanner_bin, "%sbanner.bin", pathSavedir); + sprintf(_saveGameString, "%c%c%c%c", + (u8)(_saveGameTitle >> 24) & 0xFF, (u8)(_saveGameTitle >> 16) & 0xFF, + (u8)(_saveGameTitle >> 8) & 0xFF, (u8)_saveGameTitle & 0xFF); + } + if (_export) + { + if(!File::IsDirectory(pathSavedir)) + { + b_valid = false; + PanicAlert("No save folder found for title %s", _saveGameString); + return false; + } + + if(!File::Exists(pathBanner_bin)) + { + b_valid = false; + PanicAlert("No banner file found for title %s", _saveGameString); + return false; + } + if (strlen(pathData_bin) == 0) + strcpy(pathData_bin, ".");// If no path was passed, use current dir + sprintf(pathData_bin, "%s/private/wii/title/%s/data.bin", pathData_bin, _saveGameString); + File::CreateFullPath(pathData_bin); + } + else + { + File::CreateFullPath(pathSavedir); + if (!AskYesNo("Warning! it is advised to backup all files in the folder:\n%s\nDo you wish to continue?", pathSavedir)) + return false; + } + return true; +} + +void CWiiSaveCrypted::ScanForFiles(std::string savDir, std::vector& FileList, u32 *_numFiles, u32 *_sizeFiles) +{ + std::vector Directories; + *_numFiles = *_sizeFiles = 0; + + Directories.push_back(savDir); + for (u32 i = 0; i < Directories.size(); i++) + { + if (i) FileList.push_back(Directories.at(i));//add dir to fst + + File::FSTEntry FST_Temp; + File::ScanDirectoryTree(Directories.at(i).c_str(), FST_Temp); + for (u32 j = 0; j < FST_Temp.children.size(); j++) + { + if (strncmp(FST_Temp.children.at(j).virtualName.c_str(), "banner.bin", 10) != 0) + { + (*_numFiles)++; + *_sizeFiles += FILE_HDR_SZ + ROUND_UP(FST_Temp.children.at(j).size, BLOCK_SZ); + + if (FST_Temp.children.at(j).isDirectory) + { + Directories.push_back(FST_Temp.children.at(j).physicalName); + } + else + { + FileList.push_back(FST_Temp.children.at(j).physicalName); + } + } + } + } +} + +CWiiSaveCrypted::~CWiiSaveCrypted() +{ +} + diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h index 977527d13e..e4d3934484 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h @@ -1,154 +1,154 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _WII_SAVE_CRYPTED -#define _WII_SAVE_CRYPTED - -#include "AES/aes.h" -#include "StringUtil.h" -#include "Crypto/tools.h" -#include "Crypto/md5.h" - -// --- this is used for encrypted Wii save files - - - -class CWiiSaveCrypted -{ -public: - CWiiSaveCrypted(const char* FileName, u64 title = 0); - ~CWiiSaveCrypted(); - void ReadHDR(); - void ReadBKHDR(); - void WriteHDR(); - void WriteBKHDR(); - void Extract(){;} - void ImportWiiSaveFiles(); - void ExportWiiSaveFiles(); // To data.bin - void do_sig(); - void make_ec_cert(u8 *cert, u8 *sig, char *signer, char *name, u8 *priv, - u32 key_id); - bool getPaths(bool _export = false); - void ScanForFiles(std::string savDir, std::vector&FilesList, u32 *_numFiles, u32 *_sizeFiles); - -private: - AES_KEY m_AES_KEY; - u8 SD_IV[0x10]; - std::vector FilesList; - - FILE *fpData_bin, - *fpBanner_bin, - *fpRawSaveFile; - - char pathData_bin[2048], - pathSavedir[2048], - pathBanner_bin[2048], //should always be FULL_WII_USER_DIR "title/%08x/%08x/data/" - pathRawSave[2048], - _saveGameString[5]; - - u8 IV[0x10], - *_encryptedData, - *_data, - md5_file[16], - md5_calc[16]; - - u32 _bannerSize, - _numberOfFiles, - _sizeOfFiles, - _totalSize, - _fileSize, - _roundedfileSize; - - u64 _saveGameTitle; - - bool b_valid, - b_tryAgain; - - enum - { - BLOCK_SZ = 0x40, - HDR_SZ = 0x20, - ICON_SZ = 0x1200, - BNR_SZ = 0x60a0, - FULL_BNR_MIN = 0x72a0, // BNR_SZ + 1*ICON_SZ - FULL_BNR_MAX = 0xF0A0, // BNR_SZ + 8*ICON_SZ - HEADER_SZ = 0xF0C0, // HDR_SZ + FULL_BNR_MAX - BK_LISTED_SZ = 0x70, // Size before rounding to nearest block - BK_SZ = 0x80, - FILE_HDR_SZ = 0x80, - - SIG_SZ = 0x40, - NG_CERT_SZ = 0x180, - AP_CERT_SZ = 0x180, - FULL_CERT_SZ = 0x3C0, // SIG_SZ + NG_CERT_SZ + AP_CERT_SZ + 0x80? - - - BK_HDR_MAGIC = 0x426B0001, - FILE_HDR_MAGIC = 0x03adf17e - }; - -#pragma pack(push,1) - - struct Data_Bin_HDR // encrypted - { - u64 SaveGameTitle; - u32 BannerSize; // (0x72A0 or 0xF0A0, also seen 0xBAA0) - u8 Permissions; - u8 unk1; // maybe permissions is a be16 - u8 Md5[0x10]; // md5 of plaintext header with md5 blanker applied - u16 unk2; - }; - - struct HEADER - { - Data_Bin_HDR hdr; - u8 BNR[FULL_BNR_MAX]; - }_header, _encryptedHeader; - - struct BK_Header // Not encrypted - { - u32 size; // 0x00000070 -// u16 magic; // 'Bk' -// u16 magic2; // or version (0x0001) - u32 magic; // 0x426B0001 - u32 NGid; - u32 numberOfFiles; - u32 sizeOfFiles; - u32 unk1; - u32 unk2; - u32 totalSize; - u8 unk3[64]; - u64 SaveGameTitle; - u8 MACaddress[6]; - u8 padding[0x12]; - }bkhdr; - - struct FileHDR // encrypted - { - u32 magic; //0x03adf17e - u32 size; - u8 Permissions; - u8 attrib; - u8 type; // (1=file, 2=directory) - u8 name[0x45]; - u8 IV[0x10]; - u8 unk[0x20]; - }; -#pragma pack(pop) -}; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _WII_SAVE_CRYPTED +#define _WII_SAVE_CRYPTED + +#include "AES/aes.h" +#include "StringUtil.h" +#include "Crypto/tools.h" +#include "Crypto/md5.h" + +// --- this is used for encrypted Wii save files + + + +class CWiiSaveCrypted +{ +public: + CWiiSaveCrypted(const char* FileName, u64 title = 0); + ~CWiiSaveCrypted(); + void ReadHDR(); + void ReadBKHDR(); + void WriteHDR(); + void WriteBKHDR(); + void Extract(){;} + void ImportWiiSaveFiles(); + void ExportWiiSaveFiles(); // To data.bin + void do_sig(); + void make_ec_cert(u8 *cert, u8 *sig, char *signer, char *name, u8 *priv, + u32 key_id); + bool getPaths(bool _export = false); + void ScanForFiles(std::string savDir, std::vector&FilesList, u32 *_numFiles, u32 *_sizeFiles); + +private: + AES_KEY m_AES_KEY; + u8 SD_IV[0x10]; + std::vector FilesList; + + FILE *fpData_bin, + *fpBanner_bin, + *fpRawSaveFile; + + char pathData_bin[2048], + pathSavedir[2048], + pathBanner_bin[2048], //should always be FULL_WII_USER_DIR "title/%08x/%08x/data/" + pathRawSave[2048], + _saveGameString[5]; + + u8 IV[0x10], + *_encryptedData, + *_data, + md5_file[16], + md5_calc[16]; + + u32 _bannerSize, + _numberOfFiles, + _sizeOfFiles, + _totalSize, + _fileSize, + _roundedfileSize; + + u64 _saveGameTitle; + + bool b_valid, + b_tryAgain; + + enum + { + BLOCK_SZ = 0x40, + HDR_SZ = 0x20, + ICON_SZ = 0x1200, + BNR_SZ = 0x60a0, + FULL_BNR_MIN = 0x72a0, // BNR_SZ + 1*ICON_SZ + FULL_BNR_MAX = 0xF0A0, // BNR_SZ + 8*ICON_SZ + HEADER_SZ = 0xF0C0, // HDR_SZ + FULL_BNR_MAX + BK_LISTED_SZ = 0x70, // Size before rounding to nearest block + BK_SZ = 0x80, + FILE_HDR_SZ = 0x80, + + SIG_SZ = 0x40, + NG_CERT_SZ = 0x180, + AP_CERT_SZ = 0x180, + FULL_CERT_SZ = 0x3C0, // SIG_SZ + NG_CERT_SZ + AP_CERT_SZ + 0x80? + + + BK_HDR_MAGIC = 0x426B0001, + FILE_HDR_MAGIC = 0x03adf17e + }; + +#pragma pack(push,1) + + struct Data_Bin_HDR // encrypted + { + u64 SaveGameTitle; + u32 BannerSize; // (0x72A0 or 0xF0A0, also seen 0xBAA0) + u8 Permissions; + u8 unk1; // maybe permissions is a be16 + u8 Md5[0x10]; // md5 of plaintext header with md5 blanker applied + u16 unk2; + }; + + struct HEADER + { + Data_Bin_HDR hdr; + u8 BNR[FULL_BNR_MAX]; + }_header, _encryptedHeader; + + struct BK_Header // Not encrypted + { + u32 size; // 0x00000070 +// u16 magic; // 'Bk' +// u16 magic2; // or version (0x0001) + u32 magic; // 0x426B0001 + u32 NGid; + u32 numberOfFiles; + u32 sizeOfFiles; + u32 unk1; + u32 unk2; + u32 totalSize; + u8 unk3[64]; + u64 SaveGameTitle; + u8 MACaddress[6]; + u8 padding[0x12]; + }bkhdr; + + struct FileHDR // encrypted + { + u32 magic; //0x03adf17e + u32 size; + u8 Permissions; + u8 attrib; + u8 type; // (1=file, 2=directory) + u8 name[0x45]; + u8 IV[0x10]; + u8 unk[0x20]; + }; +#pragma pack(pop) +}; + +#endif diff --git a/Source/Core/DolphinWX/resources/toolbar_plugin_wiimote.c b/Source/Core/DolphinWX/resources/toolbar_plugin_wiimote.c index f0438f3dcb..03188b6dff 100644 --- a/Source/Core/DolphinWX/resources/toolbar_plugin_wiimote.c +++ b/Source/Core/DolphinWX/resources/toolbar_plugin_wiimote.c @@ -1,174 +1,174 @@ -static const unsigned char toolbar_plugin_wiimote_png[] = { -0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, -0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xF9, -0x87, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7C, 0x08, 0x64, -0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x00, 0x0B, -0x12, 0x01, 0xD2, 0xDD, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6F, -0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x4D, 0x61, 0x63, 0x72, 0x6F, 0x6D, 0x65, 0x64, 0x69, -0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x73, 0x20, 0x4D, 0x58, 0x20, 0x32, -0x30, 0x30, 0x34, 0x87, 0x76, 0xAC, 0xCF, 0x00, 0x00, 0x00, 0x15, 0x74, 0x45, 0x58, 0x74, 0x43, -0x72, 0x65, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x00, 0x39, 0x2F, 0x31, -0x31, 0x2F, 0x30, 0x34, 0x0E, 0x46, 0xED, 0x55, 0x00, 0x00, 0x0A, 0x05, 0x49, 0x44, 0x41, 0x54, -0x78, 0x9C, 0xD5, 0x9A, 0x59, 0x6C, 0x5C, 0x57, 0x19, 0xC7, 0x7F, 0xE7, 0xDE, 0x3B, 0xE3, 0xF1, -0x32, 0xF6, 0x38, 0x8B, 0xB3, 0x37, 0x4E, 0x93, 0x66, 0x81, 0x46, 0x75, 0xD3, 0x06, 0x4A, 0xD5, -0x25, 0xA9, 0x68, 0x84, 0x2A, 0x44, 0x52, 0x21, 0xCA, 0x26, 0x91, 0xF4, 0xA1, 0x88, 0x17, 0x48, -0x49, 0x85, 0x90, 0x78, 0xC1, 0x12, 0x0F, 0x88, 0x4A, 0x94, 0x14, 0x50, 0x04, 0x3C, 0xD0, 0x20, -0xDE, 0x80, 0x36, 0x2E, 0x81, 0x8A, 0xAD, 0xAA, 0x8B, 0x44, 0x4B, 0xB7, 0xC4, 0x69, 0xB6, 0x36, -0x8D, 0x13, 0x27, 0xB1, 0x1D, 0xC7, 0xF1, 0x32, 0xB6, 0x67, 0xC6, 0x33, 0x73, 0xCF, 0x39, 0x1F, -0x0F, 0xE7, 0xDE, 0x8C, 0xDB, 0x20, 0x75, 0x3C, 0xB6, 0x52, 0xF5, 0x4A, 0xC7, 0x73, 0x67, 0xF1, -0xBD, 0xFF, 0xDF, 0xF9, 0xFE, 0xDF, 0x77, 0xCE, 0xE7, 0xB1, 0x12, 0x11, 0x3E, 0xCE, 0x87, 0xF7, -0x51, 0x0B, 0x98, 0xEB, 0x11, 0xCC, 0xD7, 0x85, 0xC6, 0x7F, 0xF5, 0x40, 0xC6, 0x18, 0xBB, 0x4B, -0x6B, 0xB3, 0x4B, 0x1B, 0x73, 0x5B, 0xA8, 0x4D, 0x7B, 0xA8, 0x0D, 0x5A, 0x9B, 0xBE, 0x50, 0x9B, -0x63, 0x5A, 0x9B, 0xAE, 0x50, 0x9B, 0xAE, 0xBB, 0x9E, 0x7C, 0x27, 0x3B, 0x5F, 0xF7, 0x04, 0x50, -0xF3, 0x61, 0xA1, 0xC2, 0x6F, 0x77, 0x74, 0x6A, 0x63, 0xF7, 0x6A, 0x6D, 0x32, 0x5A, 0x1B, 0xC2, -0x68, 0x5C, 0x77, 0x1E, 0x9A, 0x6C, 0xA8, 0xCD, 0xD3, 0xF7, 0x3C, 0x75, 0xA6, 0x73, 0xEE, 0xD2, -0xDD, 0x31, 0x27, 0x00, 0xFD, 0xFB, 0x87, 0x32, 0x28, 0x75, 0xC8, 0x18, 0xB3, 0x6D, 0x86, 0x48, -0x42, 0x6D, 0xF0, 0x9B, 0x1B, 0xD0, 0xDA, 0x30, 0x75, 0x65, 0xFC, 0x1A, 0x44, 0x18, 0xBD, 0xAF, -0xB5, 0xE9, 0x0E, 0xB5, 0x79, 0xF8, 0xC1, 0x03, 0x7D, 0x73, 0x8E, 0x46, 0xCD, 0x00, 0xC5, 0x83, -0x9F, 0xCB, 0x24, 0x02, 0xFF, 0x25, 0xE5, 0xA9, 0x0E, 0x1D, 0x89, 0x56, 0xCB, 0x17, 0x93, 0x5C, -0xBD, 0x94, 0x20, 0xBD, 0x00, 0x24, 0x09, 0x61, 0x09, 0x72, 0x23, 0x14, 0x07, 0x06, 0xB8, 0xD2, -0x3B, 0xC8, 0x50, 0xFF, 0x58, 0x0C, 0x40, 0xA8, 0x4D, 0x4F, 0xA8, 0xF5, 0xF6, 0x87, 0x7E, 0xD3, -0x3F, 0x27, 0x88, 0x9A, 0x73, 0xC0, 0x8A, 0x1C, 0x32, 0xD6, 0x76, 0x60, 0xC1, 0x06, 0x1E, 0xA9, -0x7B, 0xEF, 0xC0, 0x6F, 0xDB, 0x00, 0xA9, 0x2D, 0x10, 0x34, 0x01, 0x25, 0xA0, 0x08, 0x14, 0x49, -0xAD, 0x1B, 0x60, 0xF5, 0xAA, 0x57, 0x69, 0x3D, 0x71, 0x8C, 0x53, 0x3D, 0x17, 0xD0, 0xDA, 0x00, -0x74, 0x00, 0x87, 0x80, 0xED, 0x73, 0x01, 0xA8, 0x29, 0x02, 0xD9, 0x5F, 0x3F, 0xB0, 0xDB, 0xF7, -0xFD, 0x83, 0xBE, 0xA7, 0x50, 0x89, 0x04, 0x75, 0x0F, 0xDE, 0x8D, 0xD7, 0xF6, 0x79, 0xF0, 0xD6, -0x56, 0x84, 0x4F, 0x9F, 0x83, 0xC2, 0x00, 0x98, 0x22, 0xD4, 0x35, 0x40, 0x4B, 0x06, 0x06, 0x4E, -0x90, 0x7F, 0xF9, 0x05, 0x8E, 0xBE, 0x75, 0x81, 0x42, 0xA1, 0x1C, 0xDB, 0x6A, 0xCF, 0xAE, 0x67, -0x2E, 0xFF, 0xAE, 0x56, 0x80, 0x9A, 0x22, 0x60, 0x8C, 0xED, 0x04, 0xB0, 0x56, 0xD1, 0x78, 0xFF, -0x56, 0xBC, 0xB6, 0x1D, 0xE0, 0x6D, 0x06, 0x99, 0x82, 0xE9, 0x23, 0x30, 0xF1, 0x3A, 0x14, 0x26, -0xA1, 0x58, 0x84, 0x52, 0xC9, 0x0D, 0x0B, 0xAC, 0xDA, 0x44, 0xE3, 0x67, 0xEE, 0xE3, 0xD6, 0xE2, -0x8B, 0xBC, 0xFE, 0x56, 0x9F, 0xBB, 0x98, 0x48, 0x27, 0x50, 0x33, 0xC0, 0xAC, 0xD7, 0x81, 0xC1, -0xFD, 0xF7, 0xEC, 0xD4, 0xC6, 0xB6, 0x6B, 0x6D, 0x51, 0xAD, 0xCD, 0x04, 0x4B, 0x36, 0x82, 0xB7, -0x09, 0x24, 0x0F, 0xB9, 0x67, 0x21, 0xF7, 0x1A, 0xE8, 0x22, 0x88, 0xB8, 0x61, 0xAD, 0x7B, 0x34, -0x21, 0x9C, 0xEB, 0x81, 0xC2, 0x14, 0x99, 0x8D, 0x6B, 0x59, 0xB8, 0xA0, 0x09, 0x41, 0x10, 0xA1, -0xFD, 0x0F, 0x5F, 0x5F, 0xBC, 0xF3, 0x86, 0x01, 0x44, 0xB5, 0x9E, 0x50, 0x1B, 0x92, 0x6B, 0x96, -0x43, 0x62, 0x3D, 0x50, 0x86, 0xA9, 0xE7, 0x60, 0x7A, 0x10, 0xB4, 0x76, 0xC3, 0x18, 0x27, 0x3E, -0x06, 0xF0, 0x3C, 0xF0, 0x7D, 0x18, 0x1B, 0x02, 0xA3, 0x59, 0xBD, 0x32, 0x03, 0xCA, 0x43, 0x44, -0x10, 0x91, 0x5D, 0xB5, 0x02, 0xCC, 0xDA, 0x42, 0xDA, 0x98, 0x0E, 0x4F, 0x3C, 0x3C, 0x2B, 0xA4, -0xDA, 0x16, 0x43, 0xDD, 0x32, 0x28, 0xBC, 0x0D, 0xB9, 0xF3, 0x4E, 0x6C, 0x0C, 0x10, 0x8F, 0x18, -0x40, 0x29, 0x08, 0x02, 0x07, 0x12, 0x86, 0x2C, 0x5A, 0xD2, 0x02, 0x9E, 0x87, 0x75, 0x00, 0x1D, -0xB5, 0x02, 0xCC, 0x3A, 0x02, 0xDA, 0xD8, 0x0E, 0xAD, 0x0D, 0x7E, 0x4B, 0x23, 0xA8, 0x26, 0xA0, -0x0C, 0x23, 0xFF, 0xA9, 0xF8, 0xBD, 0x5C, 0x76, 0x23, 0x0C, 0x2B, 0x00, 0xB1, 0xF8, 0x64, 0x12, -0x52, 0x29, 0x37, 0x12, 0x09, 0x16, 0x66, 0x52, 0x08, 0x60, 0xE7, 0x00, 0x30, 0xFB, 0x08, 0x68, -0x83, 0xA7, 0x14, 0x26, 0xD4, 0xAE, 0xCE, 0x87, 0x57, 0x21, 0x3F, 0xE2, 0xDE, 0x14, 0x71, 0xD6, -0x99, 0x69, 0x23, 0x11, 0x67, 0x9D, 0x64, 0x12, 0xEA, 0xEA, 0xDC, 0x39, 0x38, 0x20, 0xA5, 0xB0, -0x56, 0xB0, 0xB6, 0xF6, 0xC5, 0xB4, 0x26, 0x00, 0xE5, 0x29, 0x8C, 0x8E, 0x00, 0xF2, 0x83, 0x6E, -0xE6, 0x61, 0x46, 0xC2, 0x46, 0xFE, 0x8F, 0x85, 0x26, 0x12, 0x50, 0x5F, 0xEF, 0x00, 0x94, 0x72, -0xD1, 0x01, 0xAC, 0xB1, 0x58, 0x6B, 0xE7, 0x04, 0x50, 0x8B, 0x85, 0xBA, 0xB5, 0xB6, 0x4C, 0x8C, -0x4C, 0x40, 0x6E, 0x0C, 0x72, 0x83, 0x15, 0xBB, 0xCC, 0x14, 0xEE, 0x79, 0x4E, 0x78, 0x2A, 0x05, -0x0D, 0x0D, 0x6E, 0xA4, 0x52, 0x95, 0x08, 0x18, 0xC3, 0xD0, 0x48, 0xDE, 0x01, 0x88, 0xED, 0xBE, -0x61, 0x00, 0xA1, 0x36, 0x7D, 0x3A, 0xDA, 0xF7, 0x14, 0x06, 0x07, 0xDD, 0x15, 0x62, 0xE1, 0x71, -0xA5, 0x09, 0x02, 0x37, 0xDB, 0x0D, 0x0D, 0xD0, 0xD8, 0x08, 0xE9, 0xB4, 0x8B, 0x40, 0x10, 0xB8, -0x08, 0x95, 0x4A, 0x4C, 0x8D, 0xE7, 0x08, 0xC3, 0x10, 0x63, 0x04, 0x6B, 0xA5, 0xEF, 0x86, 0x01, -0x68, 0x6D, 0xBA, 0xE3, 0x32, 0x3A, 0x72, 0xF1, 0x2A, 0x0C, 0xF7, 0xBA, 0x37, 0x62, 0xAB, 0xA4, -0x52, 0x4E, 0x74, 0x53, 0x93, 0x13, 0x9E, 0x4E, 0x3B, 0x90, 0x64, 0xD2, 0x89, 0x2F, 0x97, 0x21, -0x9F, 0xE7, 0x42, 0xDF, 0x55, 0x4C, 0x59, 0xBB, 0x08, 0x98, 0xDA, 0x23, 0x50, 0x4B, 0x0E, 0x74, -0x29, 0xA5, 0xB2, 0x4A, 0xA9, 0xCC, 0xE5, 0xFE, 0x51, 0x96, 0x0F, 0x5F, 0x26, 0x68, 0x6D, 0xA9, -0x88, 0xAF, 0xAB, 0x73, 0xE7, 0x31, 0x90, 0xEF, 0x57, 0x7C, 0x5F, 0x2A, 0xC1, 0xD4, 0x14, 0xE1, -0xE8, 0x38, 0x67, 0xCE, 0x0D, 0xA3, 0x8D, 0xC1, 0x58, 0x9B, 0xB5, 0x22, 0x5D, 0xB5, 0x02, 0xCC, -0x3A, 0x02, 0xF7, 0xED, 0x3F, 0x3B, 0xA1, 0xB5, 0xE9, 0xD2, 0xDA, 0x50, 0x9C, 0x2E, 0xF3, 0xDE, -0xD1, 0x5E, 0x98, 0x9A, 0x74, 0x39, 0xA0, 0x94, 0x13, 0x9C, 0x48, 0x54, 0xC4, 0x83, 0x13, 0x5F, -0x28, 0xC0, 0xE4, 0x24, 0x8C, 0x8E, 0xF2, 0xE6, 0x9B, 0xE7, 0xC8, 0x4F, 0x15, 0x31, 0xC6, 0x62, -0x8C, 0xED, 0xFA, 0xE6, 0xE1, 0xC2, 0xC4, 0x0D, 0x03, 0x00, 0x08, 0x8D, 0xE9, 0x0C, 0xB5, 0xA1, -0x5C, 0xD6, 0x0C, 0x0E, 0x8C, 0x73, 0xA5, 0x77, 0x10, 0x26, 0x26, 0x9C, 0xC8, 0x78, 0x0D, 0x08, -0x43, 0xB7, 0x36, 0xE4, 0xF3, 0x4E, 0xF8, 0xF8, 0x38, 0x0C, 0x0F, 0x73, 0xE9, 0xF4, 0x45, 0xCE, -0x9D, 0x1B, 0x26, 0x0C, 0x35, 0xC6, 0x58, 0x80, 0xCE, 0x5A, 0xC5, 0xD7, 0x0C, 0xB0, 0xE3, 0xC0, -0x85, 0x0B, 0x7A, 0x78, 0x51, 0x97, 0xD6, 0x86, 0x72, 0xA9, 0x4C, 0x4F, 0xCF, 0x25, 0xFA, 0x4F, -0x9E, 0x87, 0xCB, 0x97, 0x61, 0x78, 0x18, 0xC6, 0xC6, 0x9C, 0xE0, 0xF1, 0x71, 0x18, 0x1D, 0x85, -0xA1, 0x21, 0xE8, 0xEF, 0xA7, 0xF7, 0xE8, 0x59, 0xFE, 0xFD, 0xCA, 0x7B, 0x94, 0x4A, 0x21, 0xC6, -0x58, 0xF4, 0xE5, 0x0D, 0x14, 0x8F, 0x7D, 0xE1, 0xD1, 0xB9, 0x00, 0xD4, 0xB4, 0x9D, 0x7E, 0x71, -0xFD, 0xBE, 0x3D, 0x82, 0x3C, 0x53, 0xDC, 0xF2, 0x77, 0x6C, 0x63, 0x16, 0x50, 0x78, 0xBE, 0xA2, -0x6D, 0x71, 0x33, 0xEB, 0x6F, 0x69, 0x23, 0xB3, 0x38, 0xCA, 0x09, 0x80, 0x30, 0x64, 0xF4, 0x4A, -0x96, 0x13, 0x27, 0x07, 0xB8, 0x78, 0x69, 0x94, 0x50, 0x1B, 0x8C, 0x36, 0xD8, 0x42, 0x33, 0xFA, -0xCC, 0x76, 0x0C, 0x16, 0x2B, 0xD2, 0x63, 0xB1, 0xDB, 0xF7, 0x5D, 0xFA, 0xE3, 0xAC, 0x9B, 0x9B, -0x59, 0x03, 0xBC, 0xB4, 0xE1, 0x89, 0x3D, 0xC0, 0x33, 0x56, 0x04, 0xE3, 0x97, 0xC8, 0x6F, 0xF9, -0x33, 0xE2, 0x97, 0xB9, 0x76, 0x15, 0x4F, 0xD1, 0xD8, 0x98, 0xA2, 0xB1, 0x21, 0xC0, 0x5A, 0x61, -0x72, 0xAA, 0xC4, 0xC4, 0xE4, 0x34, 0x26, 0xD4, 0x2E, 0x69, 0x8D, 0x45, 0xD9, 0x24, 0xFA, 0xF4, -0x0E, 0xAC, 0x0E, 0xB0, 0x58, 0x8C, 0x08, 0x16, 0xDB, 0x63, 0x44, 0xB6, 0x7F, 0xAF, 0xFF, 0x4F, -0xB3, 0x82, 0x98, 0x55, 0x15, 0x7A, 0x71, 0xFD, 0xBE, 0x0E, 0x4F, 0xA9, 0x9F, 0xC5, 0xCF, 0x1B, -0x9A, 0x17, 0xB3, 0x61, 0xE3, 0x53, 0xBC, 0x33, 0xFC, 0x0B, 0xC6, 0x47, 0x4F, 0x82, 0x80, 0x88, -0x50, 0x2A, 0x86, 0x8C, 0x8E, 0xB8, 0x2D, 0x82, 0x11, 0xFB, 0xBE, 0x15, 0x77, 0x61, 0x6A, 0x1D, -0xDB, 0xDA, 0x9E, 0xA0, 0xD4, 0x9C, 0xE0, 0x8D, 0x77, 0x8F, 0x70, 0x71, 0x74, 0xC0, 0x95, 0xD7, -0x1A, 0x3B, 0xB4, 0x59, 0x45, 0xE0, 0x5F, 0xEB, 0xBF, 0x7B, 0x54, 0xB9, 0x1B, 0xD1, 0xB4, 0x62, -0x29, 0x77, 0x7C, 0xE7, 0x51, 0x82, 0x4D, 0x2D, 0x84, 0x8B, 0x8A, 0x1C, 0x3B, 0xF4, 0x13, 0x4E, -0xFF, 0xE3, 0x40, 0xD4, 0x06, 0x08, 0x22, 0x82, 0x15, 0x89, 0xF6, 0x3A, 0x6E, 0x75, 0xDE, 0xBC, -0xE4, 0x11, 0xEE, 0x58, 0xF8, 0x0D, 0x92, 0x52, 0x07, 0xA1, 0x85, 0xB2, 0xE6, 0xED, 0xDE, 0xE3, -0xBC, 0x74, 0xFA, 0x55, 0x8C, 0xD5, 0x71, 0x24, 0xF6, 0x7C, 0xBF, 0xFF, 0xB9, 0xAA, 0x1B, 0x9C, -0xAA, 0x01, 0xFE, 0x76, 0xCB, 0xDE, 0xBD, 0x0A, 0xF6, 0x2B, 0xA5, 0x48, 0xAF, 0x58, 0xCA, 0xD6, -0x7D, 0x8F, 0x11, 0xDC, 0x99, 0x81, 0x36, 0x1F, 0x0C, 0x30, 0x6A, 0xC8, 0x1D, 0x3F, 0xCB, 0xC9, -0x97, 0x0F, 0x70, 0x79, 0xE0, 0x55, 0x46, 0xC6, 0x4E, 0x62, 0x45, 0x58, 0xD8, 0xBC, 0x91, 0xE5, -0x2D, 0x5B, 0xD8, 0xBC, 0xF4, 0xCB, 0x34, 0xA9, 0x85, 0x50, 0xD6, 0x4E, 0xBC, 0x58, 0x30, 0x02, -0xA1, 0xE6, 0xDD, 0x73, 0xA7, 0x79, 0xE1, 0x78, 0x37, 0x5A, 0x6B, 0x2C, 0x36, 0x6B, 0x44, 0xD6, -0xFC, 0x60, 0xE0, 0x50, 0x55, 0x56, 0xAA, 0xCA, 0x42, 0x7F, 0x5D, 0xF7, 0xED, 0x8C, 0x52, 0x74, -0x2A, 0x14, 0xC9, 0x54, 0x1D, 0x1D, 0x8F, 0x7D, 0x8D, 0x60, 0x53, 0x33, 0x2C, 0xF2, 0x5D, 0xAB, -0x38, 0x64, 0xE1, 0x5C, 0x99, 0x26, 0x59, 0xCE, 0xA7, 0xEF, 0xFA, 0x21, 0x94, 0x34, 0x94, 0x42, -0xF7, 0x58, 0x8E, 0x1E, 0xE3, 0x73, 0x00, 0x5F, 0x81, 0xF8, 0x90, 0x50, 0x50, 0x17, 0xB0, 0x61, -0xCD, 0x26, 0x7A, 0xAF, 0x5E, 0xE2, 0xD4, 0xC0, 0xBB, 0x88, 0x90, 0x01, 0x76, 0x52, 0x65, 0x9B, -0x59, 0x55, 0x19, 0x35, 0xD8, 0xDD, 0x46, 0x24, 0x63, 0x45, 0xB8, 0x79, 0xC7, 0xFD, 0xD4, 0xAF, -0x5C, 0x00, 0x4B, 0x02, 0x28, 0x0B, 0x9C, 0xD1, 0x70, 0xBE, 0x0C, 0x26, 0xEA, 0xBE, 0xAC, 0xB8, -0x11, 0xB7, 0x94, 0x42, 0x34, 0x66, 0x3C, 0x47, 0x81, 0xEF, 0x41, 0x22, 0x80, 0x86, 0x3A, 0x68, -0xA9, 0xE7, 0xB3, 0xB7, 0xDE, 0x43, 0x7D, 0xAA, 0x11, 0x00, 0x41, 0x3A, 0xAB, 0xD1, 0x55, 0x35, -0x80, 0x45, 0x1E, 0xB7, 0x08, 0x75, 0x99, 0x34, 0x6B, 0xEE, 0xDA, 0x0A, 0xCB, 0x93, 0x4E, 0xFC, -0xC5, 0x32, 0xF4, 0x4F, 0xC3, 0x74, 0x19, 0x8A, 0x61, 0x64, 0x0F, 0x03, 0xDA, 0x80, 0xB6, 0x0E, -0x2A, 0x1E, 0x31, 0x98, 0x15, 0x67, 0x1F, 0xA5, 0x20, 0xE1, 0x43, 0x7D, 0x12, 0x9A, 0xEA, 0x49, -0x66, 0x9A, 0xB9, 0x73, 0xD5, 0x27, 0xE3, 0x5B, 0xB6, 0xFF, 0x68, 0xC5, 0xCE, 0xAA, 0x9A, 0x9C, -0x0F, 0x05, 0x78, 0x76, 0xED, 0xB7, 0x3A, 0xAC, 0xD8, 0x76, 0x2B, 0x96, 0xF5, 0xF7, 0xDE, 0x0D, -0x29, 0x05, 0x29, 0x1F, 0xC6, 0x42, 0x38, 0x3D, 0x05, 0x85, 0x12, 0x14, 0xCA, 0x15, 0x88, 0xD2, -0x0C, 0x90, 0x18, 0xC6, 0xC4, 0x23, 0x02, 0x11, 0xC0, 0x07, 0x92, 0x3E, 0xA4, 0x12, 0x2E, 0x0A, -0xE9, 0x14, 0x9F, 0x58, 0xB6, 0x0E, 0xE5, 0xFB, 0x51, 0xB3, 0x2F, 0xF7, 0xCF, 0x0B, 0x80, 0x11, -0xBB, 0xD3, 0x20, 0x18, 0x2C, 0xCB, 0xD6, 0xDC, 0x0C, 0x99, 0x04, 0x94, 0x2C, 0x9C, 0x9A, 0x88, -0xC4, 0x97, 0xFE, 0x3F, 0x44, 0x0C, 0x52, 0x36, 0x6E, 0xC4, 0x30, 0xF1, 0xEC, 0xFB, 0x3E, 0xD4, -0x25, 0x20, 0x95, 0x84, 0x86, 0x24, 0x34, 0xD4, 0x91, 0x6E, 0x4C, 0xD3, 0x9A, 0x6A, 0x8A, 0x5D, -0xB7, 0xAD, 0x1A, 0x80, 0x0F, 0x4D, 0x62, 0x8B, 0x6C, 0x53, 0x22, 0xB4, 0xAD, 0x58, 0x49, 0x42, -0x7C, 0x48, 0x05, 0x70, 0x65, 0x1A, 0x86, 0xA6, 0x9C, 0x10, 0x45, 0xC5, 0xE3, 0x56, 0xDC, 0x2C, -0x6B, 0xEB, 0x66, 0x3C, 0x16, 0x5D, 0x8E, 0x22, 0x60, 0x05, 0x94, 0xE7, 0xAC, 0x93, 0x72, 0xA2, -0x69, 0x48, 0xBA, 0xCF, 0x27, 0x03, 0x08, 0x7C, 0xDA, 0xEA, 0x5B, 0x19, 0xCA, 0x8D, 0x21, 0x48, -0xFB, 0xBC, 0x00, 0x18, 0xB1, 0xED, 0xCA, 0xF3, 0x58, 0xBC, 0x74, 0x05, 0x84, 0x1A, 0xF0, 0xE0, -0x62, 0xD6, 0x89, 0x82, 0x4A, 0x62, 0x5E, 0x4B, 0xE0, 0x0F, 0x78, 0x5F, 0x9B, 0x19, 0xB6, 0xF1, -0x20, 0xF0, 0x9D, 0xF0, 0xA6, 0x94, 0x1B, 0x75, 0x81, 0xAB, 0x50, 0x9E, 0x02, 0x81, 0x25, 0xC9, -0xE6, 0x78, 0x55, 0xAF, 0x2A, 0x07, 0xAA, 0x89, 0x40, 0xBB, 0x92, 0xA8, 0xC2, 0x68, 0x03, 0x65, -0x0B, 0xD9, 0xE9, 0xA8, 0xFF, 0xA5, 0x92, 0x94, 0xD7, 0xC4, 0xCB, 0xFB, 0xAB, 0x11, 0xCA, 0x19, -0x35, 0xF0, 0x21, 0xF0, 0xDC, 0xCC, 0xA7, 0x53, 0xD0, 0xDC, 0x00, 0x8D, 0x51, 0x8F, 0x5C, 0x8A, -0x93, 0x5F, 0x23, 0xD6, 0x42, 0x65, 0x63, 0x32, 0x77, 0x00, 0x23, 0x16, 0xA5, 0x3C, 0x72, 0xB9, -0x49, 0x37, 0xA3, 0x23, 0x05, 0xD0, 0xE2, 0x4A, 0x60, 0xFC, 0x87, 0x2B, 0xE3, 0x39, 0x08, 0x2F, -0x7A, 0x54, 0xDE, 0xFB, 0xB3, 0xCB, 0xF3, 0x20, 0xE1, 0x55, 0x12, 0xB6, 0x31, 0xE5, 0xC4, 0x27, -0x03, 0x97, 0x27, 0xA5, 0xD0, 0xE5, 0x51, 0xBE, 0xCC, 0x58, 0x29, 0x57, 0xB5, 0xF8, 0xAA, 0x00, -0x2C, 0xD2, 0xA7, 0xAC, 0x69, 0x1F, 0x1C, 0x1A, 0x70, 0x09, 0x3A, 0x9C, 0x73, 0xB3, 0x99, 0xF0, -0x9D, 0xFF, 0x2D, 0x15, 0x7F, 0x1B, 0x3B, 0xA3, 0xD6, 0xE3, 0x6C, 0xE1, 0x45, 0x9E, 0x4F, 0x06, -0x0E, 0x20, 0x95, 0x70, 0xC9, 0x1B, 0xF8, 0xEE, 0xF3, 0xF9, 0x12, 0x64, 0x0B, 0x30, 0x96, 0x87, -0xA9, 0x02, 0xE7, 0xF3, 0x57, 0x88, 0x76, 0x07, 0x7D, 0xF3, 0x02, 0x60, 0xC4, 0xF6, 0x28, 0xA5, -0xDA, 0xB3, 0xB9, 0x2C, 0x67, 0xDE, 0x79, 0x9B, 0xF5, 0xC9, 0xDB, 0x61, 0x41, 0xDA, 0x89, 0x4A, -0x04, 0x4E, 0x24, 0x89, 0xEB, 0x7F, 0x51, 0x45, 0xE2, 0xFD, 0xA8, 0xE2, 0x04, 0x5E, 0xC5, 0x46, -0xE0, 0x56, 0xE5, 0x5C, 0x09, 0x46, 0x26, 0xE1, 0x4A, 0x16, 0x86, 0xB2, 0x9C, 0x18, 0xEE, 0x65, -0xAC, 0x34, 0x15, 0x5F, 0xA1, 0x67, 0x5E, 0x00, 0x2C, 0xD2, 0x85, 0xC8, 0x2E, 0x6B, 0x84, 0xD7, -0x8E, 0xBF, 0x41, 0xA6, 0x21, 0x43, 0xDB, 0x9A, 0x76, 0x68, 0x6D, 0x82, 0x46, 0x81, 0x64, 0xC2, -0xD9, 0xC3, 0xF3, 0x2A, 0x33, 0xAE, 0x98, 0xF1, 0x5C, 0x45, 0xD5, 0x4A, 0x45, 0xC2, 0xA3, 0x6D, -0x45, 0xBE, 0x08, 0x63, 0x39, 0x18, 0x9A, 0x80, 0x81, 0x31, 0xAE, 0x0E, 0x0E, 0xF0, 0xC2, 0xD0, -0x11, 0x66, 0xEC, 0xCD, 0xAA, 0xEA, 0x93, 0xAB, 0x89, 0x40, 0x97, 0x52, 0x2A, 0x8B, 0x48, 0x26, -0x57, 0xCC, 0xF1, 0xFC, 0x2B, 0x7F, 0xE1, 0x53, 0x57, 0xB7, 0x70, 0xDB, 0xC6, 0xDB, 0xA1, 0xB5, -0x01, 0xD2, 0xF5, 0x6E, 0x35, 0x8D, 0x6D, 0x11, 0xC4, 0x30, 0x32, 0xA3, 0xCC, 0xCA, 0xB5, 0x8D, -0x1B, 0xC5, 0x10, 0x72, 0x45, 0x67, 0x9B, 0x91, 0x49, 0xB8, 0x32, 0xC1, 0xD9, 0xC1, 0x5E, 0x0E, -0xF5, 0xFF, 0x97, 0x69, 0x5D, 0x8A, 0x6F, 0x9B, 0xAD, 0x16, 0xA0, 0xAA, 0xDD, 0xE8, 0x2F, 0x6F, -0xFA, 0xEA, 0xFD, 0x40, 0xB7, 0x9B, 0x43, 0x85, 0xE7, 0xFB, 0xB4, 0xA6, 0x33, 0x6C, 0x5D, 0xBD, -0x99, 0x9B, 0x96, 0xAD, 0x26, 0xD1, 0xDC, 0xE8, 0x12, 0xB3, 0x3E, 0xE9, 0x3C, 0x1E, 0xF8, 0xAE, -0x64, 0x82, 0xCB, 0x8D, 0x78, 0x2D, 0x98, 0x2E, 0xC1, 0x54, 0x11, 0xA6, 0x0A, 0x30, 0x31, 0xCD, -0xE4, 0xD8, 0x18, 0xFF, 0x1C, 0x38, 0xC2, 0xC9, 0x89, 0x0B, 0x58, 0x63, 0x66, 0xDE, 0x72, 0x57, -0xE7, 0xE0, 0xE1, 0xE7, 0xE7, 0x0D, 0x00, 0xE0, 0xE7, 0x37, 0x7D, 0x65, 0x37, 0x70, 0xB0, 0xF2, -0x9B, 0x0A, 0xCF, 0xF3, 0xF0, 0x82, 0x80, 0xB5, 0xAD, 0x2B, 0x58, 0xD9, 0xBC, 0x84, 0x45, 0xE9, -0x05, 0x2C, 0x49, 0x2F, 0xAC, 0x44, 0x21, 0x06, 0x30, 0xD6, 0x95, 0xC9, 0xB2, 0x66, 0x34, 0x37, -0xCE, 0xA5, 0xC9, 0x21, 0x4E, 0x8D, 0x5F, 0xA2, 0x37, 0x7F, 0x19, 0x6B, 0x0C, 0x1F, 0xD0, 0xF0, -0x78, 0xE7, 0xE0, 0xE1, 0xA7, 0xAB, 0x12, 0x35, 0x1B, 0x00, 0x80, 0xFD, 0xAB, 0x1E, 0xB9, 0x2D, -0x82, 0xE8, 0x80, 0x19, 0xD5, 0x5A, 0x29, 0xD4, 0x0C, 0xAF, 0x2B, 0xCF, 0x63, 0x65, 0x6A, 0x01, -0x28, 0x85, 0xE0, 0x1A, 0x9A, 0x6C, 0x58, 0x60, 0x3C, 0xCC, 0xA1, 0x8D, 0x8E, 0xFF, 0x9C, 0xF8, -0x41, 0xE1, 0x00, 0x7B, 0x3A, 0x07, 0x0F, 0xCF, 0xEA, 0xDB, 0x9A, 0x9A, 0x9A, 0xFA, 0x9F, 0xAE, -0xFA, 0xD2, 0x5E, 0xA0, 0x53, 0x44, 0x32, 0xF1, 0x6B, 0x12, 0xFD, 0x14, 0x40, 0x94, 0xAA, 0x9C, -0x03, 0x22, 0x16, 0x4B, 0xA5, 0x4B, 0x93, 0xEB, 0x17, 0xAA, 0x9E, 0x48, 0xFC, 0xB1, 0xD9, 0x6A, -0x99, 0xD3, 0xF7, 0xC4, 0x4F, 0xAE, 0xFC, 0xE2, 0x6E, 0x60, 0x97, 0xC0, 0xAE, 0x6B, 0x82, 0x25, -0x46, 0x71, 0xAF, 0xC8, 0x8C, 0xD7, 0xED, 0xF5, 0xC2, 0xBB, 0x81, 0x83, 0xB3, 0x9D, 0xF5, 0x99, -0xC7, 0xBC, 0x7C, 0x53, 0xFF, 0xE3, 0x15, 0x0F, 0xB7, 0x08, 0x74, 0x80, 0x6C, 0x13, 0xD8, 0x16, -0x89, 0xDE, 0x26, 0x22, 0xD7, 0x40, 0x70, 0x0B, 0x53, 0x1F, 0x6E, 0xB6, 0x7B, 0x80, 0xEE, 0xCE, -0xC1, 0xC3, 0x17, 0xE6, 0x7A, 0xEF, 0x79, 0x01, 0xF8, 0x28, 0x8F, 0x8F, 0xFD, 0x7F, 0xAB, 0xFC, -0x0F, 0x31, 0xEC, 0x4B, 0xC9, 0x60, 0x91, 0x6E, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, -0x44, 0xAE, 0x42, 0x60, 0x82 -}; +static const unsigned char toolbar_plugin_wiimote_png[] = { +0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, +0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xF9, +0x87, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7C, 0x08, 0x64, +0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x00, 0x0B, +0x12, 0x01, 0xD2, 0xDD, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6F, +0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x4D, 0x61, 0x63, 0x72, 0x6F, 0x6D, 0x65, 0x64, 0x69, +0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x73, 0x20, 0x4D, 0x58, 0x20, 0x32, +0x30, 0x30, 0x34, 0x87, 0x76, 0xAC, 0xCF, 0x00, 0x00, 0x00, 0x15, 0x74, 0x45, 0x58, 0x74, 0x43, +0x72, 0x65, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x00, 0x39, 0x2F, 0x31, +0x31, 0x2F, 0x30, 0x34, 0x0E, 0x46, 0xED, 0x55, 0x00, 0x00, 0x0A, 0x05, 0x49, 0x44, 0x41, 0x54, +0x78, 0x9C, 0xD5, 0x9A, 0x59, 0x6C, 0x5C, 0x57, 0x19, 0xC7, 0x7F, 0xE7, 0xDE, 0x3B, 0xE3, 0xF1, +0x32, 0xF6, 0x38, 0x8B, 0xB3, 0x37, 0x4E, 0x93, 0x66, 0x81, 0x46, 0x75, 0xD3, 0x06, 0x4A, 0xD5, +0x25, 0xA9, 0x68, 0x84, 0x2A, 0x44, 0x52, 0x21, 0xCA, 0x26, 0x91, 0xF4, 0xA1, 0x88, 0x17, 0x48, +0x49, 0x85, 0x90, 0x78, 0xC1, 0x12, 0x0F, 0x88, 0x4A, 0x94, 0x14, 0x50, 0x04, 0x3C, 0xD0, 0x20, +0xDE, 0x80, 0x36, 0x2E, 0x81, 0x8A, 0xAD, 0xAA, 0x8B, 0x44, 0x4B, 0xB7, 0xC4, 0x69, 0xB6, 0x36, +0x8D, 0x13, 0x27, 0xB1, 0x1D, 0xC7, 0xF1, 0x32, 0xB6, 0x67, 0xC6, 0x33, 0x73, 0xCF, 0x39, 0x1F, +0x0F, 0xE7, 0xDE, 0x8C, 0xDB, 0x20, 0x75, 0x3C, 0xB6, 0x52, 0xF5, 0x4A, 0xC7, 0x73, 0x67, 0xF1, +0xBD, 0xFF, 0xDF, 0xF9, 0xFE, 0xDF, 0x77, 0xCE, 0xE7, 0xB1, 0x12, 0x11, 0x3E, 0xCE, 0x87, 0xF7, +0x51, 0x0B, 0x98, 0xEB, 0x11, 0xCC, 0xD7, 0x85, 0xC6, 0x7F, 0xF5, 0x40, 0xC6, 0x18, 0xBB, 0x4B, +0x6B, 0xB3, 0x4B, 0x1B, 0x73, 0x5B, 0xA8, 0x4D, 0x7B, 0xA8, 0x0D, 0x5A, 0x9B, 0xBE, 0x50, 0x9B, +0x63, 0x5A, 0x9B, 0xAE, 0x50, 0x9B, 0xAE, 0xBB, 0x9E, 0x7C, 0x27, 0x3B, 0x5F, 0xF7, 0x04, 0x50, +0xF3, 0x61, 0xA1, 0xC2, 0x6F, 0x77, 0x74, 0x6A, 0x63, 0xF7, 0x6A, 0x6D, 0x32, 0x5A, 0x1B, 0xC2, +0x68, 0x5C, 0x77, 0x1E, 0x9A, 0x6C, 0xA8, 0xCD, 0xD3, 0xF7, 0x3C, 0x75, 0xA6, 0x73, 0xEE, 0xD2, +0xDD, 0x31, 0x27, 0x00, 0xFD, 0xFB, 0x87, 0x32, 0x28, 0x75, 0xC8, 0x18, 0xB3, 0x6D, 0x86, 0x48, +0x42, 0x6D, 0xF0, 0x9B, 0x1B, 0xD0, 0xDA, 0x30, 0x75, 0x65, 0xFC, 0x1A, 0x44, 0x18, 0xBD, 0xAF, +0xB5, 0xE9, 0x0E, 0xB5, 0x79, 0xF8, 0xC1, 0x03, 0x7D, 0x73, 0x8E, 0x46, 0xCD, 0x00, 0xC5, 0x83, +0x9F, 0xCB, 0x24, 0x02, 0xFF, 0x25, 0xE5, 0xA9, 0x0E, 0x1D, 0x89, 0x56, 0xCB, 0x17, 0x93, 0x5C, +0xBD, 0x94, 0x20, 0xBD, 0x00, 0x24, 0x09, 0x61, 0x09, 0x72, 0x23, 0x14, 0x07, 0x06, 0xB8, 0xD2, +0x3B, 0xC8, 0x50, 0xFF, 0x58, 0x0C, 0x40, 0xA8, 0x4D, 0x4F, 0xA8, 0xF5, 0xF6, 0x87, 0x7E, 0xD3, +0x3F, 0x27, 0x88, 0x9A, 0x73, 0xC0, 0x8A, 0x1C, 0x32, 0xD6, 0x76, 0x60, 0xC1, 0x06, 0x1E, 0xA9, +0x7B, 0xEF, 0xC0, 0x6F, 0xDB, 0x00, 0xA9, 0x2D, 0x10, 0x34, 0x01, 0x25, 0xA0, 0x08, 0x14, 0x49, +0xAD, 0x1B, 0x60, 0xF5, 0xAA, 0x57, 0x69, 0x3D, 0x71, 0x8C, 0x53, 0x3D, 0x17, 0xD0, 0xDA, 0x00, +0x74, 0x00, 0x87, 0x80, 0xED, 0x73, 0x01, 0xA8, 0x29, 0x02, 0xD9, 0x5F, 0x3F, 0xB0, 0xDB, 0xF7, +0xFD, 0x83, 0xBE, 0xA7, 0x50, 0x89, 0x04, 0x75, 0x0F, 0xDE, 0x8D, 0xD7, 0xF6, 0x79, 0xF0, 0xD6, +0x56, 0x84, 0x4F, 0x9F, 0x83, 0xC2, 0x00, 0x98, 0x22, 0xD4, 0x35, 0x40, 0x4B, 0x06, 0x06, 0x4E, +0x90, 0x7F, 0xF9, 0x05, 0x8E, 0xBE, 0x75, 0x81, 0x42, 0xA1, 0x1C, 0xDB, 0x6A, 0xCF, 0xAE, 0x67, +0x2E, 0xFF, 0xAE, 0x56, 0x80, 0x9A, 0x22, 0x60, 0x8C, 0xED, 0x04, 0xB0, 0x56, 0xD1, 0x78, 0xFF, +0x56, 0xBC, 0xB6, 0x1D, 0xE0, 0x6D, 0x06, 0x99, 0x82, 0xE9, 0x23, 0x30, 0xF1, 0x3A, 0x14, 0x26, +0xA1, 0x58, 0x84, 0x52, 0xC9, 0x0D, 0x0B, 0xAC, 0xDA, 0x44, 0xE3, 0x67, 0xEE, 0xE3, 0xD6, 0xE2, +0x8B, 0xBC, 0xFE, 0x56, 0x9F, 0xBB, 0x98, 0x48, 0x27, 0x50, 0x33, 0xC0, 0xAC, 0xD7, 0x81, 0xC1, +0xFD, 0xF7, 0xEC, 0xD4, 0xC6, 0xB6, 0x6B, 0x6D, 0x51, 0xAD, 0xCD, 0x04, 0x4B, 0x36, 0x82, 0xB7, +0x09, 0x24, 0x0F, 0xB9, 0x67, 0x21, 0xF7, 0x1A, 0xE8, 0x22, 0x88, 0xB8, 0x61, 0xAD, 0x7B, 0x34, +0x21, 0x9C, 0xEB, 0x81, 0xC2, 0x14, 0x99, 0x8D, 0x6B, 0x59, 0xB8, 0xA0, 0x09, 0x41, 0x10, 0xA1, +0xFD, 0x0F, 0x5F, 0x5F, 0xBC, 0xF3, 0x86, 0x01, 0x44, 0xB5, 0x9E, 0x50, 0x1B, 0x92, 0x6B, 0x96, +0x43, 0x62, 0x3D, 0x50, 0x86, 0xA9, 0xE7, 0x60, 0x7A, 0x10, 0xB4, 0x76, 0xC3, 0x18, 0x27, 0x3E, +0x06, 0xF0, 0x3C, 0xF0, 0x7D, 0x18, 0x1B, 0x02, 0xA3, 0x59, 0xBD, 0x32, 0x03, 0xCA, 0x43, 0x44, +0x10, 0x91, 0x5D, 0xB5, 0x02, 0xCC, 0xDA, 0x42, 0xDA, 0x98, 0x0E, 0x4F, 0x3C, 0x3C, 0x2B, 0xA4, +0xDA, 0x16, 0x43, 0xDD, 0x32, 0x28, 0xBC, 0x0D, 0xB9, 0xF3, 0x4E, 0x6C, 0x0C, 0x10, 0x8F, 0x18, +0x40, 0x29, 0x08, 0x02, 0x07, 0x12, 0x86, 0x2C, 0x5A, 0xD2, 0x02, 0x9E, 0x87, 0x75, 0x00, 0x1D, +0xB5, 0x02, 0xCC, 0x3A, 0x02, 0xDA, 0xD8, 0x0E, 0xAD, 0x0D, 0x7E, 0x4B, 0x23, 0xA8, 0x26, 0xA0, +0x0C, 0x23, 0xFF, 0xA9, 0xF8, 0xBD, 0x5C, 0x76, 0x23, 0x0C, 0x2B, 0x00, 0xB1, 0xF8, 0x64, 0x12, +0x52, 0x29, 0x37, 0x12, 0x09, 0x16, 0x66, 0x52, 0x08, 0x60, 0xE7, 0x00, 0x30, 0xFB, 0x08, 0x68, +0x83, 0xA7, 0x14, 0x26, 0xD4, 0xAE, 0xCE, 0x87, 0x57, 0x21, 0x3F, 0xE2, 0xDE, 0x14, 0x71, 0xD6, +0x99, 0x69, 0x23, 0x11, 0x67, 0x9D, 0x64, 0x12, 0xEA, 0xEA, 0xDC, 0x39, 0x38, 0x20, 0xA5, 0xB0, +0x56, 0xB0, 0xB6, 0xF6, 0xC5, 0xB4, 0x26, 0x00, 0xE5, 0x29, 0x8C, 0x8E, 0x00, 0xF2, 0x83, 0x6E, +0xE6, 0x61, 0x46, 0xC2, 0x46, 0xFE, 0x8F, 0x85, 0x26, 0x12, 0x50, 0x5F, 0xEF, 0x00, 0x94, 0x72, +0xD1, 0x01, 0xAC, 0xB1, 0x58, 0x6B, 0xE7, 0x04, 0x50, 0x8B, 0x85, 0xBA, 0xB5, 0xB6, 0x4C, 0x8C, +0x4C, 0x40, 0x6E, 0x0C, 0x72, 0x83, 0x15, 0xBB, 0xCC, 0x14, 0xEE, 0x79, 0x4E, 0x78, 0x2A, 0x05, +0x0D, 0x0D, 0x6E, 0xA4, 0x52, 0x95, 0x08, 0x18, 0xC3, 0xD0, 0x48, 0xDE, 0x01, 0x88, 0xED, 0xBE, +0x61, 0x00, 0xA1, 0x36, 0x7D, 0x3A, 0xDA, 0xF7, 0x14, 0x06, 0x07, 0xDD, 0x15, 0x62, 0xE1, 0x71, +0xA5, 0x09, 0x02, 0x37, 0xDB, 0x0D, 0x0D, 0xD0, 0xD8, 0x08, 0xE9, 0xB4, 0x8B, 0x40, 0x10, 0xB8, +0x08, 0x95, 0x4A, 0x4C, 0x8D, 0xE7, 0x08, 0xC3, 0x10, 0x63, 0x04, 0x6B, 0xA5, 0xEF, 0x86, 0x01, +0x68, 0x6D, 0xBA, 0xE3, 0x32, 0x3A, 0x72, 0xF1, 0x2A, 0x0C, 0xF7, 0xBA, 0x37, 0x62, 0xAB, 0xA4, +0x52, 0x4E, 0x74, 0x53, 0x93, 0x13, 0x9E, 0x4E, 0x3B, 0x90, 0x64, 0xD2, 0x89, 0x2F, 0x97, 0x21, +0x9F, 0xE7, 0x42, 0xDF, 0x55, 0x4C, 0x59, 0xBB, 0x08, 0x98, 0xDA, 0x23, 0x50, 0x4B, 0x0E, 0x74, +0x29, 0xA5, 0xB2, 0x4A, 0xA9, 0xCC, 0xE5, 0xFE, 0x51, 0x96, 0x0F, 0x5F, 0x26, 0x68, 0x6D, 0xA9, +0x88, 0xAF, 0xAB, 0x73, 0xE7, 0x31, 0x90, 0xEF, 0x57, 0x7C, 0x5F, 0x2A, 0xC1, 0xD4, 0x14, 0xE1, +0xE8, 0x38, 0x67, 0xCE, 0x0D, 0xA3, 0x8D, 0xC1, 0x58, 0x9B, 0xB5, 0x22, 0x5D, 0xB5, 0x02, 0xCC, +0x3A, 0x02, 0xF7, 0xED, 0x3F, 0x3B, 0xA1, 0xB5, 0xE9, 0xD2, 0xDA, 0x50, 0x9C, 0x2E, 0xF3, 0xDE, +0xD1, 0x5E, 0x98, 0x9A, 0x74, 0x39, 0xA0, 0x94, 0x13, 0x9C, 0x48, 0x54, 0xC4, 0x83, 0x13, 0x5F, +0x28, 0xC0, 0xE4, 0x24, 0x8C, 0x8E, 0xF2, 0xE6, 0x9B, 0xE7, 0xC8, 0x4F, 0x15, 0x31, 0xC6, 0x62, +0x8C, 0xED, 0xFA, 0xE6, 0xE1, 0xC2, 0xC4, 0x0D, 0x03, 0x00, 0x08, 0x8D, 0xE9, 0x0C, 0xB5, 0xA1, +0x5C, 0xD6, 0x0C, 0x0E, 0x8C, 0x73, 0xA5, 0x77, 0x10, 0x26, 0x26, 0x9C, 0xC8, 0x78, 0x0D, 0x08, +0x43, 0xB7, 0x36, 0xE4, 0xF3, 0x4E, 0xF8, 0xF8, 0x38, 0x0C, 0x0F, 0x73, 0xE9, 0xF4, 0x45, 0xCE, +0x9D, 0x1B, 0x26, 0x0C, 0x35, 0xC6, 0x58, 0x80, 0xCE, 0x5A, 0xC5, 0xD7, 0x0C, 0xB0, 0xE3, 0xC0, +0x85, 0x0B, 0x7A, 0x78, 0x51, 0x97, 0xD6, 0x86, 0x72, 0xA9, 0x4C, 0x4F, 0xCF, 0x25, 0xFA, 0x4F, +0x9E, 0x87, 0xCB, 0x97, 0x61, 0x78, 0x18, 0xC6, 0xC6, 0x9C, 0xE0, 0xF1, 0x71, 0x18, 0x1D, 0x85, +0xA1, 0x21, 0xE8, 0xEF, 0xA7, 0xF7, 0xE8, 0x59, 0xFE, 0xFD, 0xCA, 0x7B, 0x94, 0x4A, 0x21, 0xC6, +0x58, 0xF4, 0xE5, 0x0D, 0x14, 0x8F, 0x7D, 0xE1, 0xD1, 0xB9, 0x00, 0xD4, 0xB4, 0x9D, 0x7E, 0x71, +0xFD, 0xBE, 0x3D, 0x82, 0x3C, 0x53, 0xDC, 0xF2, 0x77, 0x6C, 0x63, 0x16, 0x50, 0x78, 0xBE, 0xA2, +0x6D, 0x71, 0x33, 0xEB, 0x6F, 0x69, 0x23, 0xB3, 0x38, 0xCA, 0x09, 0x80, 0x30, 0x64, 0xF4, 0x4A, +0x96, 0x13, 0x27, 0x07, 0xB8, 0x78, 0x69, 0x94, 0x50, 0x1B, 0x8C, 0x36, 0xD8, 0x42, 0x33, 0xFA, +0xCC, 0x76, 0x0C, 0x16, 0x2B, 0xD2, 0x63, 0xB1, 0xDB, 0xF7, 0x5D, 0xFA, 0xE3, 0xAC, 0x9B, 0x9B, +0x59, 0x03, 0xBC, 0xB4, 0xE1, 0x89, 0x3D, 0xC0, 0x33, 0x56, 0x04, 0xE3, 0x97, 0xC8, 0x6F, 0xF9, +0x33, 0xE2, 0x97, 0xB9, 0x76, 0x15, 0x4F, 0xD1, 0xD8, 0x98, 0xA2, 0xB1, 0x21, 0xC0, 0x5A, 0x61, +0x72, 0xAA, 0xC4, 0xC4, 0xE4, 0x34, 0x26, 0xD4, 0x2E, 0x69, 0x8D, 0x45, 0xD9, 0x24, 0xFA, 0xF4, +0x0E, 0xAC, 0x0E, 0xB0, 0x58, 0x8C, 0x08, 0x16, 0xDB, 0x63, 0x44, 0xB6, 0x7F, 0xAF, 0xFF, 0x4F, +0xB3, 0x82, 0x98, 0x55, 0x15, 0x7A, 0x71, 0xFD, 0xBE, 0x0E, 0x4F, 0xA9, 0x9F, 0xC5, 0xCF, 0x1B, +0x9A, 0x17, 0xB3, 0x61, 0xE3, 0x53, 0xBC, 0x33, 0xFC, 0x0B, 0xC6, 0x47, 0x4F, 0x82, 0x80, 0x88, +0x50, 0x2A, 0x86, 0x8C, 0x8E, 0xB8, 0x2D, 0x82, 0x11, 0xFB, 0xBE, 0x15, 0x77, 0x61, 0x6A, 0x1D, +0xDB, 0xDA, 0x9E, 0xA0, 0xD4, 0x9C, 0xE0, 0x8D, 0x77, 0x8F, 0x70, 0x71, 0x74, 0xC0, 0x95, 0xD7, +0x1A, 0x3B, 0xB4, 0x59, 0x45, 0xE0, 0x5F, 0xEB, 0xBF, 0x7B, 0x54, 0xB9, 0x1B, 0xD1, 0xB4, 0x62, +0x29, 0x77, 0x7C, 0xE7, 0x51, 0x82, 0x4D, 0x2D, 0x84, 0x8B, 0x8A, 0x1C, 0x3B, 0xF4, 0x13, 0x4E, +0xFF, 0xE3, 0x40, 0xD4, 0x06, 0x08, 0x22, 0x82, 0x15, 0x89, 0xF6, 0x3A, 0x6E, 0x75, 0xDE, 0xBC, +0xE4, 0x11, 0xEE, 0x58, 0xF8, 0x0D, 0x92, 0x52, 0x07, 0xA1, 0x85, 0xB2, 0xE6, 0xED, 0xDE, 0xE3, +0xBC, 0x74, 0xFA, 0x55, 0x8C, 0xD5, 0x71, 0x24, 0xF6, 0x7C, 0xBF, 0xFF, 0xB9, 0xAA, 0x1B, 0x9C, +0xAA, 0x01, 0xFE, 0x76, 0xCB, 0xDE, 0xBD, 0x0A, 0xF6, 0x2B, 0xA5, 0x48, 0xAF, 0x58, 0xCA, 0xD6, +0x7D, 0x8F, 0x11, 0xDC, 0x99, 0x81, 0x36, 0x1F, 0x0C, 0x30, 0x6A, 0xC8, 0x1D, 0x3F, 0xCB, 0xC9, +0x97, 0x0F, 0x70, 0x79, 0xE0, 0x55, 0x46, 0xC6, 0x4E, 0x62, 0x45, 0x58, 0xD8, 0xBC, 0x91, 0xE5, +0x2D, 0x5B, 0xD8, 0xBC, 0xF4, 0xCB, 0x34, 0xA9, 0x85, 0x50, 0xD6, 0x4E, 0xBC, 0x58, 0x30, 0x02, +0xA1, 0xE6, 0xDD, 0x73, 0xA7, 0x79, 0xE1, 0x78, 0x37, 0x5A, 0x6B, 0x2C, 0x36, 0x6B, 0x44, 0xD6, +0xFC, 0x60, 0xE0, 0x50, 0x55, 0x56, 0xAA, 0xCA, 0x42, 0x7F, 0x5D, 0xF7, 0xED, 0x8C, 0x52, 0x74, +0x2A, 0x14, 0xC9, 0x54, 0x1D, 0x1D, 0x8F, 0x7D, 0x8D, 0x60, 0x53, 0x33, 0x2C, 0xF2, 0x5D, 0xAB, +0x38, 0x64, 0xE1, 0x5C, 0x99, 0x26, 0x59, 0xCE, 0xA7, 0xEF, 0xFA, 0x21, 0x94, 0x34, 0x94, 0x42, +0xF7, 0x58, 0x8E, 0x1E, 0xE3, 0x73, 0x00, 0x5F, 0x81, 0xF8, 0x90, 0x50, 0x50, 0x17, 0xB0, 0x61, +0xCD, 0x26, 0x7A, 0xAF, 0x5E, 0xE2, 0xD4, 0xC0, 0xBB, 0x88, 0x90, 0x01, 0x76, 0x52, 0x65, 0x9B, +0x59, 0x55, 0x19, 0x35, 0xD8, 0xDD, 0x46, 0x24, 0x63, 0x45, 0xB8, 0x79, 0xC7, 0xFD, 0xD4, 0xAF, +0x5C, 0x00, 0x4B, 0x02, 0x28, 0x0B, 0x9C, 0xD1, 0x70, 0xBE, 0x0C, 0x26, 0xEA, 0xBE, 0xAC, 0xB8, +0x11, 0xB7, 0x94, 0x42, 0x34, 0x66, 0x3C, 0x47, 0x81, 0xEF, 0x41, 0x22, 0x80, 0x86, 0x3A, 0x68, +0xA9, 0xE7, 0xB3, 0xB7, 0xDE, 0x43, 0x7D, 0xAA, 0x11, 0x00, 0x41, 0x3A, 0xAB, 0xD1, 0x55, 0x35, +0x80, 0x45, 0x1E, 0xB7, 0x08, 0x75, 0x99, 0x34, 0x6B, 0xEE, 0xDA, 0x0A, 0xCB, 0x93, 0x4E, 0xFC, +0xC5, 0x32, 0xF4, 0x4F, 0xC3, 0x74, 0x19, 0x8A, 0x61, 0x64, 0x0F, 0x03, 0xDA, 0x80, 0xB6, 0x0E, +0x2A, 0x1E, 0x31, 0x98, 0x15, 0x67, 0x1F, 0xA5, 0x20, 0xE1, 0x43, 0x7D, 0x12, 0x9A, 0xEA, 0x49, +0x66, 0x9A, 0xB9, 0x73, 0xD5, 0x27, 0xE3, 0x5B, 0xB6, 0xFF, 0x68, 0xC5, 0xCE, 0xAA, 0x9A, 0x9C, +0x0F, 0x05, 0x78, 0x76, 0xED, 0xB7, 0x3A, 0xAC, 0xD8, 0x76, 0x2B, 0x96, 0xF5, 0xF7, 0xDE, 0x0D, +0x29, 0x05, 0x29, 0x1F, 0xC6, 0x42, 0x38, 0x3D, 0x05, 0x85, 0x12, 0x14, 0xCA, 0x15, 0x88, 0xD2, +0x0C, 0x90, 0x18, 0xC6, 0xC4, 0x23, 0x02, 0x11, 0xC0, 0x07, 0x92, 0x3E, 0xA4, 0x12, 0x2E, 0x0A, +0xE9, 0x14, 0x9F, 0x58, 0xB6, 0x0E, 0xE5, 0xFB, 0x51, 0xB3, 0x2F, 0xF7, 0xCF, 0x0B, 0x80, 0x11, +0xBB, 0xD3, 0x20, 0x18, 0x2C, 0xCB, 0xD6, 0xDC, 0x0C, 0x99, 0x04, 0x94, 0x2C, 0x9C, 0x9A, 0x88, +0xC4, 0x97, 0xFE, 0x3F, 0x44, 0x0C, 0x52, 0x36, 0x6E, 0xC4, 0x30, 0xF1, 0xEC, 0xFB, 0x3E, 0xD4, +0x25, 0x20, 0x95, 0x84, 0x86, 0x24, 0x34, 0xD4, 0x91, 0x6E, 0x4C, 0xD3, 0x9A, 0x6A, 0x8A, 0x5D, +0xB7, 0xAD, 0x1A, 0x80, 0x0F, 0x4D, 0x62, 0x8B, 0x6C, 0x53, 0x22, 0xB4, 0xAD, 0x58, 0x49, 0x42, +0x7C, 0x48, 0x05, 0x70, 0x65, 0x1A, 0x86, 0xA6, 0x9C, 0x10, 0x45, 0xC5, 0xE3, 0x56, 0xDC, 0x2C, +0x6B, 0xEB, 0x66, 0x3C, 0x16, 0x5D, 0x8E, 0x22, 0x60, 0x05, 0x94, 0xE7, 0xAC, 0x93, 0x72, 0xA2, +0x69, 0x48, 0xBA, 0xCF, 0x27, 0x03, 0x08, 0x7C, 0xDA, 0xEA, 0x5B, 0x19, 0xCA, 0x8D, 0x21, 0x48, +0xFB, 0xBC, 0x00, 0x18, 0xB1, 0xED, 0xCA, 0xF3, 0x58, 0xBC, 0x74, 0x05, 0x84, 0x1A, 0xF0, 0xE0, +0x62, 0xD6, 0x89, 0x82, 0x4A, 0x62, 0x5E, 0x4B, 0xE0, 0x0F, 0x78, 0x5F, 0x9B, 0x19, 0xB6, 0xF1, +0x20, 0xF0, 0x9D, 0xF0, 0xA6, 0x94, 0x1B, 0x75, 0x81, 0xAB, 0x50, 0x9E, 0x02, 0x81, 0x25, 0xC9, +0xE6, 0x78, 0x55, 0xAF, 0x2A, 0x07, 0xAA, 0x89, 0x40, 0xBB, 0x92, 0xA8, 0xC2, 0x68, 0x03, 0x65, +0x0B, 0xD9, 0xE9, 0xA8, 0xFF, 0xA5, 0x92, 0x94, 0xD7, 0xC4, 0xCB, 0xFB, 0xAB, 0x11, 0xCA, 0x19, +0x35, 0xF0, 0x21, 0xF0, 0xDC, 0xCC, 0xA7, 0x53, 0xD0, 0xDC, 0x00, 0x8D, 0x51, 0x8F, 0x5C, 0x8A, +0x93, 0x5F, 0x23, 0xD6, 0x42, 0x65, 0x63, 0x32, 0x77, 0x00, 0x23, 0x16, 0xA5, 0x3C, 0x72, 0xB9, +0x49, 0x37, 0xA3, 0x23, 0x05, 0xD0, 0xE2, 0x4A, 0x60, 0xFC, 0x87, 0x2B, 0xE3, 0x39, 0x08, 0x2F, +0x7A, 0x54, 0xDE, 0xFB, 0xB3, 0xCB, 0xF3, 0x20, 0xE1, 0x55, 0x12, 0xB6, 0x31, 0xE5, 0xC4, 0x27, +0x03, 0x97, 0x27, 0xA5, 0xD0, 0xE5, 0x51, 0xBE, 0xCC, 0x58, 0x29, 0x57, 0xB5, 0xF8, 0xAA, 0x00, +0x2C, 0xD2, 0xA7, 0xAC, 0x69, 0x1F, 0x1C, 0x1A, 0x70, 0x09, 0x3A, 0x9C, 0x73, 0xB3, 0x99, 0xF0, +0x9D, 0xFF, 0x2D, 0x15, 0x7F, 0x1B, 0x3B, 0xA3, 0xD6, 0xE3, 0x6C, 0xE1, 0x45, 0x9E, 0x4F, 0x06, +0x0E, 0x20, 0x95, 0x70, 0xC9, 0x1B, 0xF8, 0xEE, 0xF3, 0xF9, 0x12, 0x64, 0x0B, 0x30, 0x96, 0x87, +0xA9, 0x02, 0xE7, 0xF3, 0x57, 0x88, 0x76, 0x07, 0x7D, 0xF3, 0x02, 0x60, 0xC4, 0xF6, 0x28, 0xA5, +0xDA, 0xB3, 0xB9, 0x2C, 0x67, 0xDE, 0x79, 0x9B, 0xF5, 0xC9, 0xDB, 0x61, 0x41, 0xDA, 0x89, 0x4A, +0x04, 0x4E, 0x24, 0x89, 0xEB, 0x7F, 0x51, 0x45, 0xE2, 0xFD, 0xA8, 0xE2, 0x04, 0x5E, 0xC5, 0x46, +0xE0, 0x56, 0xE5, 0x5C, 0x09, 0x46, 0x26, 0xE1, 0x4A, 0x16, 0x86, 0xB2, 0x9C, 0x18, 0xEE, 0x65, +0xAC, 0x34, 0x15, 0x5F, 0xA1, 0x67, 0x5E, 0x00, 0x2C, 0xD2, 0x85, 0xC8, 0x2E, 0x6B, 0x84, 0xD7, +0x8E, 0xBF, 0x41, 0xA6, 0x21, 0x43, 0xDB, 0x9A, 0x76, 0x68, 0x6D, 0x82, 0x46, 0x81, 0x64, 0xC2, +0xD9, 0xC3, 0xF3, 0x2A, 0x33, 0xAE, 0x98, 0xF1, 0x5C, 0x45, 0xD5, 0x4A, 0x45, 0xC2, 0xA3, 0x6D, +0x45, 0xBE, 0x08, 0x63, 0x39, 0x18, 0x9A, 0x80, 0x81, 0x31, 0xAE, 0x0E, 0x0E, 0xF0, 0xC2, 0xD0, +0x11, 0x66, 0xEC, 0xCD, 0xAA, 0xEA, 0x93, 0xAB, 0x89, 0x40, 0x97, 0x52, 0x2A, 0x8B, 0x48, 0x26, +0x57, 0xCC, 0xF1, 0xFC, 0x2B, 0x7F, 0xE1, 0x53, 0x57, 0xB7, 0x70, 0xDB, 0xC6, 0xDB, 0xA1, 0xB5, +0x01, 0xD2, 0xF5, 0x6E, 0x35, 0x8D, 0x6D, 0x11, 0xC4, 0x30, 0x32, 0xA3, 0xCC, 0xCA, 0xB5, 0x8D, +0x1B, 0xC5, 0x10, 0x72, 0x45, 0x67, 0x9B, 0x91, 0x49, 0xB8, 0x32, 0xC1, 0xD9, 0xC1, 0x5E, 0x0E, +0xF5, 0xFF, 0x97, 0x69, 0x5D, 0x8A, 0x6F, 0x9B, 0xAD, 0x16, 0xA0, 0xAA, 0xDD, 0xE8, 0x2F, 0x6F, +0xFA, 0xEA, 0xFD, 0x40, 0xB7, 0x9B, 0x43, 0x85, 0xE7, 0xFB, 0xB4, 0xA6, 0x33, 0x6C, 0x5D, 0xBD, +0x99, 0x9B, 0x96, 0xAD, 0x26, 0xD1, 0xDC, 0xE8, 0x12, 0xB3, 0x3E, 0xE9, 0x3C, 0x1E, 0xF8, 0xAE, +0x64, 0x82, 0xCB, 0x8D, 0x78, 0x2D, 0x98, 0x2E, 0xC1, 0x54, 0x11, 0xA6, 0x0A, 0x30, 0x31, 0xCD, +0xE4, 0xD8, 0x18, 0xFF, 0x1C, 0x38, 0xC2, 0xC9, 0x89, 0x0B, 0x58, 0x63, 0x66, 0xDE, 0x72, 0x57, +0xE7, 0xE0, 0xE1, 0xE7, 0xE7, 0x0D, 0x00, 0xE0, 0xE7, 0x37, 0x7D, 0x65, 0x37, 0x70, 0xB0, 0xF2, +0x9B, 0x0A, 0xCF, 0xF3, 0xF0, 0x82, 0x80, 0xB5, 0xAD, 0x2B, 0x58, 0xD9, 0xBC, 0x84, 0x45, 0xE9, +0x05, 0x2C, 0x49, 0x2F, 0xAC, 0x44, 0x21, 0x06, 0x30, 0xD6, 0x95, 0xC9, 0xB2, 0x66, 0x34, 0x37, +0xCE, 0xA5, 0xC9, 0x21, 0x4E, 0x8D, 0x5F, 0xA2, 0x37, 0x7F, 0x19, 0x6B, 0x0C, 0x1F, 0xD0, 0xF0, +0x78, 0xE7, 0xE0, 0xE1, 0xA7, 0xAB, 0x12, 0x35, 0x1B, 0x00, 0x80, 0xFD, 0xAB, 0x1E, 0xB9, 0x2D, +0x82, 0xE8, 0x80, 0x19, 0xD5, 0x5A, 0x29, 0xD4, 0x0C, 0xAF, 0x2B, 0xCF, 0x63, 0x65, 0x6A, 0x01, +0x28, 0x85, 0xE0, 0x1A, 0x9A, 0x6C, 0x58, 0x60, 0x3C, 0xCC, 0xA1, 0x8D, 0x8E, 0xFF, 0x9C, 0xF8, +0x41, 0xE1, 0x00, 0x7B, 0x3A, 0x07, 0x0F, 0xCF, 0xEA, 0xDB, 0x9A, 0x9A, 0x9A, 0xFA, 0x9F, 0xAE, +0xFA, 0xD2, 0x5E, 0xA0, 0x53, 0x44, 0x32, 0xF1, 0x6B, 0x12, 0xFD, 0x14, 0x40, 0x94, 0xAA, 0x9C, +0x03, 0x22, 0x16, 0x4B, 0xA5, 0x4B, 0x93, 0xEB, 0x17, 0xAA, 0x9E, 0x48, 0xFC, 0xB1, 0xD9, 0x6A, +0x99, 0xD3, 0xF7, 0xC4, 0x4F, 0xAE, 0xFC, 0xE2, 0x6E, 0x60, 0x97, 0xC0, 0xAE, 0x6B, 0x82, 0x25, +0x46, 0x71, 0xAF, 0xC8, 0x8C, 0xD7, 0xED, 0xF5, 0xC2, 0xBB, 0x81, 0x83, 0xB3, 0x9D, 0xF5, 0x99, +0xC7, 0xBC, 0x7C, 0x53, 0xFF, 0xE3, 0x15, 0x0F, 0xB7, 0x08, 0x74, 0x80, 0x6C, 0x13, 0xD8, 0x16, +0x89, 0xDE, 0x26, 0x22, 0xD7, 0x40, 0x70, 0x0B, 0x53, 0x1F, 0x6E, 0xB6, 0x7B, 0x80, 0xEE, 0xCE, +0xC1, 0xC3, 0x17, 0xE6, 0x7A, 0xEF, 0x79, 0x01, 0xF8, 0x28, 0x8F, 0x8F, 0xFD, 0x7F, 0xAB, 0xFC, +0x0F, 0x31, 0xEC, 0x4B, 0xC9, 0x60, 0x91, 0x6E, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, +0x44, 0xAE, 0x42, 0x60, 0x82 +}; diff --git a/Source/Core/InputCommon/Src/SDL_Util.cpp b/Source/Core/InputCommon/Src/SDL_Util.cpp index 0ae94ad95e..c9a51e1e9b 100644 --- a/Source/Core/InputCommon/Src/SDL_Util.cpp +++ b/Source/Core/InputCommon/Src/SDL_Util.cpp @@ -1,222 +1,222 @@ - -// Project description -// ------------------- -// Name: SDL Input -// Description: Common SDL Input Functions -// -// Author: Falcon4ever (nJoy@falcon4ever.com, www.multigesture.net), JPeterson etc -// Copyright (C) 2003 Dolphin Project. -// - -// -// Licensetype: GNU General Public License (GPL) -// -// This program 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, version 2.0. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. -// -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ -// -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - - -#define _SDL_MAIN_ // Avoid certain declarations in SDL.h -#include "InputCommon.h" -#include "SDL_Util.h" // Local -#ifdef _WIN32 -#include "XInput_Util.h" -#endif - -namespace InputCommon -{ - - -// Search attached devices. Populate joyinfo for all attached physical devices. -// ----------------------- -bool SearchDevices(std::vector &_joyinfo, int &_NumPads, int &_NumGoodPads) -{ - if (!SDL_WasInit(0)) -#if SDL_VERSION_ATLEAST(1, 3, 0) - if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC) < 0) -#else - if (SDL_Init(SDL_INIT_JOYSTICK) < 0) -#endif - { - PanicAlert("Could not initialize SDL: %s", SDL_GetError()); - return false; - } - - // Get device status - int numjoy = SDL_NumJoysticks(); - for (int i = 0; i < numjoy; i++) - { - CONTROLLER_INFO Tmp; - - Tmp.joy = SDL_JoystickOpen(i); - Tmp.ID = i; - Tmp.NumAxes = SDL_JoystickNumAxes(Tmp.joy); - Tmp.NumButtons = SDL_JoystickNumButtons(Tmp.joy); - Tmp.NumBalls = SDL_JoystickNumBalls(Tmp.joy); - Tmp.NumHats = SDL_JoystickNumHats(Tmp.joy); - Tmp.Name = SDL_JoystickName(i); - - // Check if the device is okay - if ( Tmp.NumAxes == 0 - && Tmp.NumBalls == 0 - && Tmp.NumButtons == 0 - && Tmp.NumHats == 0 - ) - { - Tmp.Good = false; - } - else - { - _NumGoodPads++; - Tmp.Good = true; - } - - _joyinfo.push_back(Tmp); - - // We have now read the values we need so we close the device -// if (SDL_JoystickOpened(i)) SDL_JoystickClose(_joyinfo[i].joy); - } - - _NumPads = (int)_joyinfo.size(); - - return true; -} - - -// Avoid extreme axis values -// --------------------- -/* Function: We have to avoid very big values because some triggers are -0x8000 in the - unpressed state (and then go from -0x8000 to 0x8000 as they are fully pressed) */ -bool AvoidValues(int value, bool NoTriggerFilter) -{ - // Avoid detecting very small or very big (for triggers) values - if((value > -0x1000 && value < 0x1000) // Small values - || ((value < -0x7000 || value > 0x7000) && !NoTriggerFilter)) // Big values - return true; // Avoid - else - return false; // Keep -} - - -// Detect a pressed button -// --------------------- -void GetButton(SDL_Joystick *joy, int ControllerID, int buttons, int axes, int hats, - int &KeyboardKey, int &value, int &type, int &pressed, bool &Succeed, bool &Stop, - bool LeftRight, bool Axis, bool XInput, bool Button, bool Hat, bool NoTriggerFilter) -{ - // It needs the wxWidgets excape keycode - static const int WXK_ESCAPE = 27; - - // Update the internal status - SDL_JoystickUpdate(); - - // For the triggers we accept both a digital or an analog button - if(Axis) - { - for(int i = 0; i < axes; i++) - { - value = SDL_JoystickGetAxis(joy, i); - - if(AvoidValues(value, NoTriggerFilter)) continue; // Avoid values - - pressed = i + (LeftRight ? 1000 : 0); // Identify the analog triggers - type = InputCommon::CTL_AXIS; - Succeed = true; - } - } - - // Check for a hat - if(Hat) - { - for(int i = 0; i < hats; i++) - { - value = SDL_JoystickGetHat(joy, i); - if(value) - { - pressed = i; - type = InputCommon::CTL_HAT; - Succeed = true; - } - } - } - - // Check for a button - if(Button) - { - for(int i = 0; i < buttons; i++) - { - // Some kind of bug in SDL 1.3 would give button 9 and 10 (nonexistent) the value 48 on the 360 pad - if (SDL_JoystickGetButton(joy, i) > 1) continue; - - if(SDL_JoystickGetButton(joy, i)) - { - pressed = i; - type = InputCommon::CTL_BUTTON; - Succeed = true; - } - } - } - - // Check for a XInput trigger - #ifdef _WIN32 - if(XInput && LeftRight) - { - for(int i = 0; i <= InputCommon::XI_TRIGGER_R; i++) - { - if(XInput::GetXI(ControllerID, i)) - { - pressed = i + 1000; - type = InputCommon::CTL_AXIS; - Succeed = true; - } - } - } - #endif - - // Check for keyboard action - if (KeyboardKey) - { - if(Button) - { - // Todo: Add a separate keyboard vector to remove this restriction - if(KeyboardKey >= buttons) - { - pressed = KeyboardKey; - type = InputCommon::CTL_BUTTON; - Succeed = true; - KeyboardKey = 0; - if(pressed == WXK_ESCAPE) pressed = -1; // Check for the escape key - } - // Else show the error message - else - { - pressed = KeyboardKey; - KeyboardKey = -1; - Stop = true; - } - } - // Only accept the escape key - else if (KeyboardKey == WXK_ESCAPE) - { - Succeed = true; - KeyboardKey = 0; - pressed = -1; - } - } -} - - -} // InputCommon - + +// Project description +// ------------------- +// Name: SDL Input +// Description: Common SDL Input Functions +// +// Author: Falcon4ever (nJoy@falcon4ever.com, www.multigesture.net), JPeterson etc +// Copyright (C) 2003 Dolphin Project. +// + +// +// Licensetype: GNU General Public License (GPL) +// +// This program 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, version 2.0. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. +// +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ +// +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + + +#define _SDL_MAIN_ // Avoid certain declarations in SDL.h +#include "InputCommon.h" +#include "SDL_Util.h" // Local +#ifdef _WIN32 +#include "XInput_Util.h" +#endif + +namespace InputCommon +{ + + +// Search attached devices. Populate joyinfo for all attached physical devices. +// ----------------------- +bool SearchDevices(std::vector &_joyinfo, int &_NumPads, int &_NumGoodPads) +{ + if (!SDL_WasInit(0)) +#if SDL_VERSION_ATLEAST(1, 3, 0) + if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC) < 0) +#else + if (SDL_Init(SDL_INIT_JOYSTICK) < 0) +#endif + { + PanicAlert("Could not initialize SDL: %s", SDL_GetError()); + return false; + } + + // Get device status + int numjoy = SDL_NumJoysticks(); + for (int i = 0; i < numjoy; i++) + { + CONTROLLER_INFO Tmp; + + Tmp.joy = SDL_JoystickOpen(i); + Tmp.ID = i; + Tmp.NumAxes = SDL_JoystickNumAxes(Tmp.joy); + Tmp.NumButtons = SDL_JoystickNumButtons(Tmp.joy); + Tmp.NumBalls = SDL_JoystickNumBalls(Tmp.joy); + Tmp.NumHats = SDL_JoystickNumHats(Tmp.joy); + Tmp.Name = SDL_JoystickName(i); + + // Check if the device is okay + if ( Tmp.NumAxes == 0 + && Tmp.NumBalls == 0 + && Tmp.NumButtons == 0 + && Tmp.NumHats == 0 + ) + { + Tmp.Good = false; + } + else + { + _NumGoodPads++; + Tmp.Good = true; + } + + _joyinfo.push_back(Tmp); + + // We have now read the values we need so we close the device +// if (SDL_JoystickOpened(i)) SDL_JoystickClose(_joyinfo[i].joy); + } + + _NumPads = (int)_joyinfo.size(); + + return true; +} + + +// Avoid extreme axis values +// --------------------- +/* Function: We have to avoid very big values because some triggers are -0x8000 in the + unpressed state (and then go from -0x8000 to 0x8000 as they are fully pressed) */ +bool AvoidValues(int value, bool NoTriggerFilter) +{ + // Avoid detecting very small or very big (for triggers) values + if((value > -0x1000 && value < 0x1000) // Small values + || ((value < -0x7000 || value > 0x7000) && !NoTriggerFilter)) // Big values + return true; // Avoid + else + return false; // Keep +} + + +// Detect a pressed button +// --------------------- +void GetButton(SDL_Joystick *joy, int ControllerID, int buttons, int axes, int hats, + int &KeyboardKey, int &value, int &type, int &pressed, bool &Succeed, bool &Stop, + bool LeftRight, bool Axis, bool XInput, bool Button, bool Hat, bool NoTriggerFilter) +{ + // It needs the wxWidgets excape keycode + static const int WXK_ESCAPE = 27; + + // Update the internal status + SDL_JoystickUpdate(); + + // For the triggers we accept both a digital or an analog button + if(Axis) + { + for(int i = 0; i < axes; i++) + { + value = SDL_JoystickGetAxis(joy, i); + + if(AvoidValues(value, NoTriggerFilter)) continue; // Avoid values + + pressed = i + (LeftRight ? 1000 : 0); // Identify the analog triggers + type = InputCommon::CTL_AXIS; + Succeed = true; + } + } + + // Check for a hat + if(Hat) + { + for(int i = 0; i < hats; i++) + { + value = SDL_JoystickGetHat(joy, i); + if(value) + { + pressed = i; + type = InputCommon::CTL_HAT; + Succeed = true; + } + } + } + + // Check for a button + if(Button) + { + for(int i = 0; i < buttons; i++) + { + // Some kind of bug in SDL 1.3 would give button 9 and 10 (nonexistent) the value 48 on the 360 pad + if (SDL_JoystickGetButton(joy, i) > 1) continue; + + if(SDL_JoystickGetButton(joy, i)) + { + pressed = i; + type = InputCommon::CTL_BUTTON; + Succeed = true; + } + } + } + + // Check for a XInput trigger + #ifdef _WIN32 + if(XInput && LeftRight) + { + for(int i = 0; i <= InputCommon::XI_TRIGGER_R; i++) + { + if(XInput::GetXI(ControllerID, i)) + { + pressed = i + 1000; + type = InputCommon::CTL_AXIS; + Succeed = true; + } + } + } + #endif + + // Check for keyboard action + if (KeyboardKey) + { + if(Button) + { + // Todo: Add a separate keyboard vector to remove this restriction + if(KeyboardKey >= buttons) + { + pressed = KeyboardKey; + type = InputCommon::CTL_BUTTON; + Succeed = true; + KeyboardKey = 0; + if(pressed == WXK_ESCAPE) pressed = -1; // Check for the escape key + } + // Else show the error message + else + { + pressed = KeyboardKey; + KeyboardKey = -1; + Stop = true; + } + } + // Only accept the escape key + else if (KeyboardKey == WXK_ESCAPE) + { + Succeed = true; + KeyboardKey = 0; + pressed = -1; + } + } +} + + +} // InputCommon + diff --git a/Source/Core/InputCommon/Src/SDL_Util.h b/Source/Core/InputCommon/Src/SDL_Util.h index 1dcebb8186..d7fba95da7 100644 --- a/Source/Core/InputCommon/Src/SDL_Util.h +++ b/Source/Core/InputCommon/Src/SDL_Util.h @@ -1,78 +1,78 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _SDL_h -#define _SDL_h - - -#include // System -#include -#include - -#ifdef _WIN32 -#include // Externals -#include -#if SDL_VERSION_ATLEAST(1, 3, 0) - #include -#endif -#else -#include -#include -#if SDL_VERSION_ATLEAST(1, 3, 0) - #include -#endif -#endif - -#include "Common.h" // Common - - -namespace InputCommon -{ - -struct CONTROLLER_INFO // CONNECTED WINDOWS DEVICES INFO -{ - int NumAxes; // Amount of Axes - int NumButtons; // Amount of Buttons - int NumBalls; // Amount of Balls - int NumHats; // Amount of Hats (POV) - std::string Name; // Joypad/stickname - int ID; // SDL joystick device ID - bool Good; // Pad is good (it has at least one button or axis) - SDL_Joystick *joy; // SDL joystick device -}; - - -// General functions -bool SearchDevices(std::vector &_joyinfo, int &NumPads, int &NumGoodPads); -void GetButton(SDL_Joystick*, int,int,int,int, int&,int&,int&,int&,bool&,bool&, bool,bool,bool,bool,bool,bool); - -// Value conversion -float Deg2Rad(float Deg); -float Rad2Deg(float Rad); -int Pad_Convert(int _val); -float SquareDistance(float deg); -bool IsDeadZone(float DeadZone, int x, int y); -void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square = false); -void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius); -// Input configuration -std::string VKToString(int keycode); - - -} // InputCommon - - -#endif // _SDL_h +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _SDL_h +#define _SDL_h + + +#include // System +#include +#include + +#ifdef _WIN32 +#include // Externals +#include +#if SDL_VERSION_ATLEAST(1, 3, 0) + #include +#endif +#else +#include +#include +#if SDL_VERSION_ATLEAST(1, 3, 0) + #include +#endif +#endif + +#include "Common.h" // Common + + +namespace InputCommon +{ + +struct CONTROLLER_INFO // CONNECTED WINDOWS DEVICES INFO +{ + int NumAxes; // Amount of Axes + int NumButtons; // Amount of Buttons + int NumBalls; // Amount of Balls + int NumHats; // Amount of Hats (POV) + std::string Name; // Joypad/stickname + int ID; // SDL joystick device ID + bool Good; // Pad is good (it has at least one button or axis) + SDL_Joystick *joy; // SDL joystick device +}; + + +// General functions +bool SearchDevices(std::vector &_joyinfo, int &NumPads, int &NumGoodPads); +void GetButton(SDL_Joystick*, int,int,int,int, int&,int&,int&,int&,bool&,bool&, bool,bool,bool,bool,bool,bool); + +// Value conversion +float Deg2Rad(float Deg); +float Rad2Deg(float Rad); +int Pad_Convert(int _val); +float SquareDistance(float deg); +bool IsDeadZone(float DeadZone, int x, int y); +void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square = false); +void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius); +// Input configuration +std::string VKToString(int keycode); + + +} // InputCommon + + +#endif // _SDL_h diff --git a/Source/Core/InputCommon/Src/XInput_Util.cpp b/Source/Core/InputCommon/Src/XInput_Util.cpp index 88e0d0e54c..de255ec074 100644 --- a/Source/Core/InputCommon/Src/XInput_Util.cpp +++ b/Source/Core/InputCommon/Src/XInput_Util.cpp @@ -1,123 +1,123 @@ - -// -// Licensetype: GNU General Public License (GPL) -// -// This program 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, version 2.0. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. -// -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ -// -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - - - - -// File description -/* ------------------- - Function: This file will get the status of the analog triggers of any connected XInput device. - This code was made with the help of SimpleController.cpp in the June 2008 Microsoft DirectX SDK - Samples. - -///////////////////////////////////////////////////// */ - -#ifdef _WIN32 - - -// Includes -// ------------------- -#include -#include // XInput API -#include "InputCommon.h" - -namespace XInput -{ - -// Declarations -// ------------------- - -#define MAX_CONTROLLERS 4 // XInput handles up to 4 controllers - -struct CONTROLER_STATE -{ - XINPUT_STATE state; - bool bConnected; -}; - -CONTROLER_STATE g_Controllers[MAX_CONTROLLERS]; - - -// Init -// ------------------- -/* Function: Calculate the number of connected XInput devices - Todo: Implement this to figure out if there are multiple XInput controllers connected, - we currently only try to connect to XInput device 0 */ -void Init() -{ - // Init state - //ZeroMemory( g_Controllers, sizeof( CONTROLER_STATE ) * MAX_CONTROLLERS ); - - // Declaration - DWORD dwResult; - - // Calculate the number of connected XInput devices - for( DWORD i = 0; i < MAX_CONTROLLERS; i++ ) - { - // Simply get the state of the controller from XInput. - dwResult = XInputGetState( i, &g_Controllers[i].state ); - - if( dwResult == ERROR_SUCCESS ) - g_Controllers[i].bConnected = true; - else - g_Controllers[i].bConnected = false; - } - -} - -// Get the trigger status -// ------------------- -int GetXI(int Controller, int Button) -{ - // Update the internal status - DWORD dwResult; - dwResult = XInputGetState(Controller, &g_Controllers[Controller].state); - - if (dwResult != ERROR_SUCCESS) return -1; - - switch (Button) - { - case InputCommon::XI_TRIGGER_L: - return g_Controllers[Controller].state.Gamepad.bLeftTrigger; - - case InputCommon::XI_TRIGGER_R: - return g_Controllers[Controller].state.Gamepad.bRightTrigger; - - default: - return 0; - } -} - -// Check if a certain controller is connected -// ------------------- -bool IsConnected(int Controller) -{ - DWORD dwResult = XInputGetState( Controller, &g_Controllers[Controller].state ); - - // Update the connected status - if( dwResult == ERROR_SUCCESS ) - return true; - else - return false; -} - -} // XInput - -#endif + +// +// Licensetype: GNU General Public License (GPL) +// +// This program 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, version 2.0. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. +// +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ +// +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + + + + +// File description +/* ------------------- + Function: This file will get the status of the analog triggers of any connected XInput device. + This code was made with the help of SimpleController.cpp in the June 2008 Microsoft DirectX SDK + Samples. + +///////////////////////////////////////////////////// */ + +#ifdef _WIN32 + + +// Includes +// ------------------- +#include +#include // XInput API +#include "InputCommon.h" + +namespace XInput +{ + +// Declarations +// ------------------- + +#define MAX_CONTROLLERS 4 // XInput handles up to 4 controllers + +struct CONTROLER_STATE +{ + XINPUT_STATE state; + bool bConnected; +}; + +CONTROLER_STATE g_Controllers[MAX_CONTROLLERS]; + + +// Init +// ------------------- +/* Function: Calculate the number of connected XInput devices + Todo: Implement this to figure out if there are multiple XInput controllers connected, + we currently only try to connect to XInput device 0 */ +void Init() +{ + // Init state + //ZeroMemory( g_Controllers, sizeof( CONTROLER_STATE ) * MAX_CONTROLLERS ); + + // Declaration + DWORD dwResult; + + // Calculate the number of connected XInput devices + for( DWORD i = 0; i < MAX_CONTROLLERS; i++ ) + { + // Simply get the state of the controller from XInput. + dwResult = XInputGetState( i, &g_Controllers[i].state ); + + if( dwResult == ERROR_SUCCESS ) + g_Controllers[i].bConnected = true; + else + g_Controllers[i].bConnected = false; + } + +} + +// Get the trigger status +// ------------------- +int GetXI(int Controller, int Button) +{ + // Update the internal status + DWORD dwResult; + dwResult = XInputGetState(Controller, &g_Controllers[Controller].state); + + if (dwResult != ERROR_SUCCESS) return -1; + + switch (Button) + { + case InputCommon::XI_TRIGGER_L: + return g_Controllers[Controller].state.Gamepad.bLeftTrigger; + + case InputCommon::XI_TRIGGER_R: + return g_Controllers[Controller].state.Gamepad.bRightTrigger; + + default: + return 0; + } +} + +// Check if a certain controller is connected +// ------------------- +bool IsConnected(int Controller) +{ + DWORD dwResult = XInputGetState( Controller, &g_Controllers[Controller].state ); + + // Update the connected status + if( dwResult == ERROR_SUCCESS ) + return true; + else + return false; +} + +} // XInput + +#endif diff --git a/Source/Core/InputCommon/Src/XInput_Util.h b/Source/Core/InputCommon/Src/XInput_Util.h index 411e1958a0..24b653c808 100644 --- a/Source/Core/InputCommon/Src/XInput_Util.h +++ b/Source/Core/InputCommon/Src/XInput_Util.h @@ -1,42 +1,42 @@ - -// -// Licensetype: GNU General Public License (GPL) -// -// This program 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, version 2.0. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. -// -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ -// -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - - -#ifdef _WIN32 - - -// Includes -// ---------- -#include - - -namespace XInput -{ - -// Declarations -// ---------- -void Init(); -int GetXI(int Controller, int Button); -bool IsConnected(int Controller); - -} // XInput - -#endif - + +// +// Licensetype: GNU General Public License (GPL) +// +// This program 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, version 2.0. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. +// +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ +// +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + + +#ifdef _WIN32 + + +// Includes +// ---------- +#include + + +namespace XInput +{ + +// Declarations +// ---------- +void Init(); +int GetXI(int Controller, int Button); +bool IsConnected(int Controller); + +} // XInput + +#endif + diff --git a/Source/Core/VideoCommon/Src/CommandProcessor.cpp b/Source/Core/VideoCommon/Src/CommandProcessor.cpp index 788a463ce2..6f9872dd90 100644 --- a/Source/Core/VideoCommon/Src/CommandProcessor.cpp +++ b/Source/Core/VideoCommon/Src/CommandProcessor.cpp @@ -1,751 +1,751 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -// NOTES (mb2): - -// * GP/CPU sync can be done by several way: -// - MP1 use BP (breakpoint) in movie-menus and mostly PEtoken in 3D -// - ZWW as Crazy Taxi: PEfinish (GXSetDrawDone) -// - SMS: BP, PEToken, PEfinish -// - ZTP: seems to use PEfinish only -// - Animal Crossing: PEfinish at start but there's a bug... -// There's tons of HiWmk/LoWmk ping pong -> Another sync fashion? -// - Super Monkey Ball Adventures: PEToken. Oddity: read&check-PEToken-value-loop stays -// in its JITed block (never fall in Advance() until the game-watchdog's stuff). -// That's why we can't let perform the AdvanceCallBack as usual. -// The PEToken is volatile now and in the fifo struct. -// - Super Monkey Ball: PEFinish. This game has the lamest way to deal with fifo sync for our MT's stuff. -// A hack is mandatory. DONE and should be ok for other games. - -// *What I guess (thx to asynchronous DualCore mode): -// PPC have a frame-finish watchdog. Handled by system timming stuff like the decrementer. -// (DualCore mode): I have observed, after ZTP logos, a fifo-recovery start when DECREMENTER_EXCEPTION is throwned. -// The frame setting (by GP) took too much time and didn't finish properly due to this watchdog. -// Faster GX plugins required, indeed :p - -// * BPs are needed for some game GP/CPU sync. -// But it could slowdown (MP1 at least) because our GP in DC is faster than "expected" in some area. -// eg: in movie-menus in MP1, BP are reached quickly. -// The bad thing is that involve too much PPC work (int ack, lock GP, reset BP, new BP addr, unlock BP...) hence the slowdown. -// Anyway, emulation should more accurate like this and it emulate some sort of better load balancing. -// Eather way in those area a more accurate GP timing could be done by slowing down the GP or something less stupid. -// Not functional and not used atm (breaks MP2). - -// * funny, in revs before those with this note, BP irq wasn't cleared (a bug indeed) and MP1 menus was faster. -// BP irq was raised and ack just once but never cleared. However it's sufficient for MP1 to work. -// This hack is used atm. Known BPs handling doesn't work well (btw, BP irq clearing might be done by CPIntEnable raising edge). -// The hack seems to be responsible of the movie stutering in MP1 menus. - -// TODO (mb2): -// * raise watermark Ov/Un irq: POINTLESS since emulated GP timings can't be accuratly set. -// Only 3 choices IMHO for a correct emulated load balancing in DC mode: -// - make our own GP watchdog hack that can lock CPU if GP too slow. STARTED -// - hack directly something in PPC timings (dunno how) -// - boost GP so we can consider it as infinitely fast compared to CPU. -// * raise ReadIdle/CmdIdle flags and observe behaviour of MP1 & ZTP (at least) -// * Clean useless comments and debug stuff in Read16, Write16, GatherPipeBursted when sync will be fixed for DC -// * (reminder) do the same in: -// PeripheralInterface.cpp, PixelEngine.cpp, OGL->BPStructs.cpp, fifo.cpp... ok just check change log >> - -// TODO -// * Kick GPU from dispatcher, not from writes -// * Thunking framework -// * Cleanup of messy now unnecessary safety code in jit - -#include "Common.h" -#include "VideoCommon.h" -#include "VideoConfig.h" -#include "MathUtil.h" -#include "Thread.h" -#include "Atomic.h" - -#include "Fifo.h" -#include "ChunkFile.h" -#include "CommandProcessor.h" - - -namespace CommandProcessor -{ - -int et_UpdateInterrupts; - -void UpdateInterrupts_Wrapper(u64 userdata, int cyclesLate) -{ - UpdateInterrupts((userdata) ? true : false); -} - -// look for 1002 verts, breakpoint there, see why next draw is flushed -// TODO(ector): Warn on bbox read/write - -// STATE_TO_SAVE -SCPFifoStruct fifo; -UCPStatusReg m_CPStatusReg; -UCPCtrlReg m_CPCtrlReg; -UCPClearReg m_CPClearReg; - -int m_bboxleft; -int m_bboxtop; -int m_bboxright; -int m_bboxbottom; -u16 m_tokenReg; - -static u32 fake_GPWatchdogLastToken = 0; -static Common::EventEx s_fifoIdleEvent; -static Common::CriticalSection sFifoCritical; - -void FifoCriticalEnter() -{ - sFifoCritical.Enter(); -} - -void FifoCriticalLeave() -{ - sFifoCritical.Leave(); -} - -void DoState(PointerWrap &p) -{ - p.Do(m_CPStatusReg); - p.Do(m_CPCtrlReg); - //p.Do(m_CPClearReg); - p.Do(m_bboxleft); - p.Do(m_bboxtop); - p.Do(m_bboxright); - p.Do(m_bboxbottom); - p.Do(m_tokenReg); - p.Do(fifo); -} - -//inline void WriteLow (u32& _reg, u16 lowbits) {_reg = (_reg & 0xFFFF0000) | lowbits;} -//inline void WriteHigh(u32& _reg, u16 highbits) {_reg = (_reg & 0x0000FFFF) | ((u32)highbits << 16);} -inline void WriteLow (volatile u32& _reg, u16 lowbits) {Common::AtomicStore(_reg,(_reg & 0xFFFF0000) | lowbits);} -inline void WriteHigh(volatile u32& _reg, u16 highbits) {Common::AtomicStore(_reg,(_reg & 0x0000FFFF) | ((u32)highbits << 16));} - -inline u16 ReadLow (u32 _reg) {return (u16)(_reg & 0xFFFF);} -inline u16 ReadHigh (u32 _reg) {return (u16)(_reg >> 16);} - -void Init() -{ - m_CPStatusReg.Hex = 0; - m_CPStatusReg.CommandIdle = 1; // Seems not used - m_CPStatusReg.ReadIdle = 1; - - m_CPCtrlReg.Hex = 0; - - m_bboxleft = 0; - m_bboxtop = 0; - m_bboxright = 640; - m_bboxbottom = 480; - - m_tokenReg = 0; - - fake_GPWatchdogLastToken = 0; - - memset(&fifo,0,sizeof(fifo)); - fifo.CPCmdIdle = 1 ; - fifo.CPReadIdle = 1; - fifo.bFF_Breakpoint = 1; - - s_fifoIdleEvent.Init(); - - et_UpdateInterrupts = g_VideoInitialize.pRegisterEvent("UpdateInterrupts", UpdateInterrupts_Wrapper); -} - -void Shutdown() -{ - s_fifoIdleEvent.Shutdown(); -} - -void Read16(u16& _rReturnValue, const u32 _Address) -{ - INFO_LOG(COMMANDPROCESSOR, "(r): 0x%08x", _Address); - switch (_Address & 0xFFF) - { - case STATUS_REGISTER: - //TODO?: if really needed - //m_CPStatusReg.CommandIdle = fifo.CPCmdIdle; - //m_CPStatusReg.CommandIdle = fifo.CPReadIdle; - // uncomment: change a bit the behaviour MP1. Not very useful though - - // hack: CPU will always believe fifo is empty and on idle - //m_CPStatusReg.ReadIdle = 1; - //m_CPStatusReg.CommandIdle = 1; - - DEBUG_LOG(COMMANDPROCESSOR, "(r) status: iBP %s | fReadIdle %s | fCmdIdle %s | iOvF %s | iUndF %s" - , m_CPStatusReg.Breakpoint ? "ON" : "OFF" - , m_CPStatusReg.ReadIdle ? "ON" : "OFF" - , m_CPStatusReg.CommandIdle ? "ON" : "OFF" - , m_CPStatusReg.OverflowHiWatermark ? "ON" : "OFF" - , m_CPStatusReg.UnderflowLoWatermark ? "ON" : "OFF" - ); - - _rReturnValue = m_CPStatusReg.Hex; - // Clear on read - UpdateInterrupts(false); - return; - - case CTRL_REGISTER: _rReturnValue = m_CPCtrlReg.Hex; return; - case CLEAR_REGISTER: - _rReturnValue = m_CPClearReg.Hex; - DEBUG_LOG(COMMANDPROCESSOR, "(r) clear: 0x%04x", _rReturnValue); - return; - - case FIFO_TOKEN_REGISTER: _rReturnValue = m_tokenReg; return; - case FIFO_BOUNDING_BOX_LEFT: _rReturnValue = m_bboxleft; return; - case FIFO_BOUNDING_BOX_RIGHT: _rReturnValue = m_bboxright; return; - case FIFO_BOUNDING_BOX_TOP: _rReturnValue = m_bboxtop; return; - case FIFO_BOUNDING_BOX_BOTTOM: _rReturnValue = m_bboxbottom; return; - - case FIFO_BASE_LO: _rReturnValue = ReadLow (fifo.CPBase); return; - case FIFO_BASE_HI: _rReturnValue = ReadHigh(fifo.CPBase); return; - case FIFO_END_LO: _rReturnValue = ReadLow (fifo.CPEnd); return; - case FIFO_END_HI: _rReturnValue = ReadHigh(fifo.CPEnd); return; - case FIFO_HI_WATERMARK_LO: _rReturnValue = ReadLow (fifo.CPHiWatermark); return; - case FIFO_HI_WATERMARK_HI: _rReturnValue = ReadHigh(fifo.CPHiWatermark); return; - case FIFO_LO_WATERMARK_LO: _rReturnValue = ReadLow (fifo.CPLoWatermark); return; - case FIFO_LO_WATERMARK_HI: _rReturnValue = ReadHigh(fifo.CPLoWatermark); return; - - // TODO: cases cleanup - case FIFO_RW_DISTANCE_LO: - // hack: CPU will always believe fifo is empty and on idle - // But even if you return the true value, most games just don't care - //_rReturnValue = ReadLow (fifo.CPReadWriteDistance); - _rReturnValue = 0; - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_RW_DISTANCE_LO : %04x", _rReturnValue); - return; - case FIFO_RW_DISTANCE_HI: - // hack: CPU will always believe fifo is empty and on idle - // But even if you return the true value, most games just don't care - //_rReturnValue = ReadHigh(fifo.CPReadWriteDistance); - _rReturnValue = 0; - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_RW_DISTANCE_HI : %04x", _rReturnValue); - return; - - case FIFO_WRITE_POINTER_LO: - _rReturnValue = ReadLow (fifo.CPWritePointer); - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_WRITE_POINTER_LO : %04x", _rReturnValue); - return; - case FIFO_WRITE_POINTER_HI: - _rReturnValue = ReadHigh(fifo.CPWritePointer); - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_WRITE_POINTER_HI : %04x", _rReturnValue); - return; - - case FIFO_READ_POINTER_LO: - // hack: CPU will always believe fifo is empty and on idle - // But even if you return the true value, most games just don't care - //_rReturnValue = ReadLow (fifo.CPReadPointer); - _rReturnValue = ReadLow (fifo.CPWritePointer); - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue); - return; - case FIFO_READ_POINTER_HI: - // hack: CPU will always believe fifo is empty and on idle - // But even if you return the true value, most games just don't care - //_rReturnValue = ReadHigh(fifo.CPReadPointer); - _rReturnValue = ReadHigh(fifo.CPWritePointer); - DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue); - return; - - case FIFO_BP_LO: _rReturnValue = ReadLow (fifo.CPBreakpoint); return; - case FIFO_BP_HI: _rReturnValue = ReadHigh(fifo.CPBreakpoint); return; - - // AyuanX: Lots of games read the followings (e.g. Mario Power Tennis) - case XF_RASBUSY_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_RASBUSY_L: %04x", _rReturnValue); - return; - case XF_RASBUSY_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_RASBUSY_H: %04x", _rReturnValue); - return; - - case XF_CLKS_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_CLKS_L: %04x", _rReturnValue); - return; - case XF_CLKS_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_CLKS_H: %04x", _rReturnValue); - return; - - case XF_WAIT_IN_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_IN_L: %04x", _rReturnValue); - return; - case XF_WAIT_IN_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_IN_H: %04x", _rReturnValue); - return; - - case XF_WAIT_OUT_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_OUT_L: %04x", _rReturnValue); - return; - case XF_WAIT_OUT_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_OUT_H: %04x", _rReturnValue); - return; - - case VCACHE_METRIC_CHECK_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_CHECK_L: %04x", _rReturnValue); - return; - case VCACHE_METRIC_CHECK_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_CHECK_H: %04x", _rReturnValue); - return; - - case VCACHE_METRIC_MISS_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_MISS_L: %04x", _rReturnValue); - return; - case VCACHE_METRIC_MISS_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_MISS_H: %04x", _rReturnValue); - return; - - case VCACHE_METRIC_STALL_L: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_STALL_L: %04x", _rReturnValue); - return; - case VCACHE_METRIC_STALL_H: - _rReturnValue = 0; // TODO: Figure out the true value - DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_STALL_H: %04x", _rReturnValue); - return; - - case CLKS_PER_VTX_OUT: - _rReturnValue = 4; //Number of clocks per vertex.. TODO: Calculate properly - DEBUG_LOG(COMMANDPROCESSOR, "Read from CLKS_PER_VTX_OUT: %04x", _rReturnValue); - return; - //add all the other regs here? are they ever read? - default: - _rReturnValue = 0; - WARN_LOG(COMMANDPROCESSOR, "(r16) unknown CP reg @ %08x", _Address); - return; - } - return; -} - -void Write16(const u16 _Value, const u32 _Address) -{ - bool bUpdate = false; - INFO_LOG(COMMANDPROCESSOR, "(write16): 0x%04x @ 0x%08x",_Value,_Address); - - //Spin until queue is empty - it WILL become empty because this is the only thread - //that submits data - - if (g_VideoInitialize.bOnThread) - { - // Force complete fifo flush if we attempt to set/reset the fifo (API GXSetGPFifo or equivalent) - // It's kind of an API hack but it works for lots of games... and I hope it's the same way for every games. - // TODO: HLE for GX fifo's APIs? - // Here is the hack: - // - if (attempt to overwrite CTRL_REGISTER by 0x0000) - // // then we assume CPReadWriteDistance will be overwrited very soon. - // - if (fifo is not empty) - // // (not 100% sure): shouln't happen unless PPC think having trouble with the sync - // // and it attempt a fifo recovery (look for PI_FIFO_RESET in log). - // // If we want to emulate self fifo recovery we need proper GX metrics emulation... yeah sure :p - // - spin until fifo is empty - // - else - // - normal write16 - - if (((_Address&0xFFF) == CTRL_REGISTER) && (_Value == 0)) // API hack - { - // weird MP1 redo that right after linking fifo with GP... hmmm - /*_dbg_assert_msg_(COMMANDPROCESSOR, fifo.CPReadWriteDistance == 0, - "WTF! Something went wrong with GP/PPC the sync! -> CPReadWriteDistance: 0x%08X\n" - " - The fifo is not empty but we are going to lock it anyway.\n" - " - \"Normaly\", this is due to fifo-hang-so-lets-attempt-recovery.\n" - " - The bad news is dolphin don't support special recovery features like GXfifo's metric yet.\n" - " - The good news is, the time you read that message, the fifo should be empty now :p\n" - " - Anyway, fifo flush will be forced if you press OK and dolphin might continue to work...\n" - " - We aren't betting on that :)", fifo.CPReadWriteDistance); - */ - DEBUG_LOG(COMMANDPROCESSOR, "*********************** GXSetGPFifo very soon? ***********************"); - // (mb2) We don't sleep here since it could be a perf issue for super monkey ball (yup only this game IIRC) - // Touching that game is a no-go so I don't want to take the risk :p - while (fifo.bFF_GPReadEnable && ((!fifo.bFF_BPEnable && fifo.CPReadWriteDistance) || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) - { - s_fifoIdleEvent.Wait(); - } - } - } - - switch (_Address & 0xFFF) - { - case STATUS_REGISTER: - { - // This should be Read-Only - ERROR_LOG(COMMANDPROCESSOR,"\t write to STATUS_REGISTER : %04x", _Value); - PanicAlert("CommandProcessor:: CPU writes to STATUS_REGISTER!"); - } - break; - - case CTRL_REGISTER: - { - UCPCtrlReg tmpCtrl(_Value); - m_CPCtrlReg.Hex = tmpCtrl.Hex; - - Common::AtomicStore(fifo.bFF_GPLinkEnable, tmpCtrl.GPLinkEnable); - Common::AtomicStore(fifo.bFF_GPReadEnable, tmpCtrl.GPReadEnable); - Common::AtomicStore(fifo.bFF_BPEnable, tmpCtrl.BPEnable); - - if (tmpCtrl.BPInit && tmpCtrl.BPEnable && tmpCtrl.GPReadEnable) - { - // Clear old BP and initiate new BP - Common::AtomicStore(fifo.bFF_Breakpoint, 0); - - // The following is a hack of Synchronized Breakpoint for dual core mode - // Some games only waits a finite N cycles for FIFO interrupts, then hangs up on time out - // e.g. Metriod Prime 2 - if (g_VideoInitialize.bOnThread && g_ActiveConfig.bFIFOBPhack) - UpdateInterrupts(true); - } - - INFO_LOG(COMMANDPROCESSOR,"\t write to CTRL_REGISTER : %04x", _Value); - DEBUG_LOG(COMMANDPROCESSOR, "\t GPREAD %s | LINK %s | BP %s || Init %s | OvF %s | UndF %s" - , fifo.bFF_GPReadEnable ? "ON" : "OFF" - , fifo.bFF_GPLinkEnable ? "ON" : "OFF" - , fifo.bFF_BPEnable ? "ON" : "OFF" - , m_CPCtrlReg.BPInit ? "ON" : "OFF" - , m_CPCtrlReg.FifoOverflowIntEnable ? "ON" : "OFF" - , m_CPCtrlReg.FifoUnderflowIntEnable ? "ON" : "OFF" - ); - } - break; - - case CLEAR_REGISTER: - // We don't care since we don't implement Watermark - //m_CPClearReg.Hex = 0; - //m_CPStatusReg.OverflowHiWatermark = 0; - //m_CPStatusReg.UnderflowHiWatermark = 0; - DEBUG_LOG(COMMANDPROCESSOR,"\t write to CLEAR_REGISTER : %04x", _Value); - break; - - case PERF_SELECT: - // Seems to select which set of perf registers should be exposed. - DEBUG_LOG(COMMANDPROCESSOR, "write to PERF_SELECT: %04x", _Value); - break; - - // Fifo Registers - case FIFO_TOKEN_REGISTER: - m_tokenReg = _Value; - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_TOKEN_REGISTER : %04x", _Value); - break; - - case FIFO_BASE_LO: - bUpdate = true; - WriteLow ((u32 &)fifo.CPBase, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_LO : %04x", _Value); - break; - case FIFO_BASE_HI: - bUpdate = true; - WriteHigh((u32 &)fifo.CPBase, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_HI : %04x", _Value); - break; - - case FIFO_END_LO: - bUpdate = true; - // Somtimes this value is not aligned with 32B, e.g. New Super Mario Bros. Wii - WriteLow ((u32 &)fifo.CPEnd, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_LO : %04x", _Value); - break; - case FIFO_END_HI: - bUpdate = true; - WriteHigh((u32 &)fifo.CPEnd, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_HI : %04x", _Value); - break; - - case FIFO_WRITE_POINTER_LO: - bUpdate = true; - WriteLow ((u32 &)fifo.CPWritePointer, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_LO : %04x", _Value); - break; - case FIFO_WRITE_POINTER_HI: - bUpdate = true; - WriteHigh((u32 &)fifo.CPWritePointer, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_HI : %04x", _Value); - break; - - case FIFO_READ_POINTER_LO: - bUpdate = true; - WriteLow ((u32 &)fifo.CPReadPointer, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_LO : %04x", _Value); - break; - case FIFO_READ_POINTER_HI: - bUpdate = true; - WriteHigh((u32 &)fifo.CPReadPointer, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_HI : %04x", _Value); - break; - - case FIFO_HI_WATERMARK_LO: - WriteLow ((u32 &)fifo.CPHiWatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_LO : %04x", _Value); - break; - case FIFO_HI_WATERMARK_HI: - WriteHigh((u32 &)fifo.CPHiWatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_HI : %04x", _Value); - break; - - case FIFO_LO_WATERMARK_LO: - WriteLow ((u32 &)fifo.CPLoWatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_LO : %04x", _Value); - break; - case FIFO_LO_WATERMARK_HI: - WriteHigh((u32 &)fifo.CPLoWatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_HI : %04x", _Value); - break; - - case FIFO_BP_LO: - WriteLow ((u32 &)fifo.CPBreakpoint, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"write to FIFO_BP_LO : %04x", _Value); - break; - case FIFO_BP_HI: - WriteHigh((u32 &)fifo.CPBreakpoint, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"write to FIFO_BP_HI : %04x", _Value); - break; - - // Super monkey try to overwrite CPReadWriteDistance by an old saved RWD value. Which is lame for us. - // hack: We have to force CPU to think fifo is alway empty and on idle. - // When we fall here CPReadWriteDistance should be always null and the game should always want to overwrite it by 0. - // So, we can skip it. - case FIFO_RW_DISTANCE_HI: - //WriteHigh((u32 &)fifo.CPReadWriteDistance, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"try to write to FIFO_RW_DISTANCE_HI : %04x", _Value); - break; - case FIFO_RW_DISTANCE_LO: - //WriteLow((u32 &)fifo.CPReadWriteDistance, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"try to write to FIFO_RW_DISTANCE_LO : %04x", _Value); - break; - - default: - WARN_LOG(COMMANDPROCESSOR, "(w16) unknown CP reg write %04x @ %08x", _Value, _Address); - } - - if (bUpdate || !g_VideoInitialize.bOnThread) // TOCHECK(mb2): check again if thread safe? - { - if (g_VideoInitialize.bOnThread) FifoCriticalEnter(); // This may not be necessary, just for safety - UpdateFifoRegister(); - if (g_VideoInitialize.bOnThread) FifoCriticalLeave(); - } -} - -void Read32(u32& _rReturnValue, const u32 _Address) -{ - _rReturnValue = 0; - _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Read32 from CommandProccessor at 0x%08x", _Address); -} - -void Write32(const u32 _Data, const u32 _Address) -{ - _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Write32 at CommandProccessor at 0x%08x", _Address); -} - -// for GP watchdog hack -void IncrementGPWDToken() -{ - Common::AtomicIncrement(fifo.Fake_GPWDToken); -} - -bool AllowIdleSkipping() -{ - return !g_VideoInitialize.bOnThread || !m_CPCtrlReg.BPEnable; -} - -// Check every FAKE_GP_WATCHDOG_PERIOD if a PE-frame-finish occured -// if not then lock CPUThread until GP finish a frame. -void WaitForFrameFinish() -{ - while ((fake_GPWatchdogLastToken == fifo.Fake_GPWDToken) && fifo.bFF_GPReadEnable && ((!fifo.bFF_BPEnable && fifo.CPReadWriteDistance) || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) - { - s_fifoIdleEvent.Wait(); - } - - fake_GPWatchdogLastToken = fifo.Fake_GPWDToken; -} - -void STACKALIGN GatherPipeBursted() -{ - // if we aren't linked, we don't care about gather pipe data - if (!fifo.bFF_GPLinkEnable) - return; - - if (g_VideoInitialize.bOnThread) - { - // update the fifo-pointer - if (fifo.CPWritePointer >= fifo.CPEnd) - fifo.CPWritePointer = fifo.CPBase; - else - fifo.CPWritePointer += GATHER_PIPE_SIZE; - - Common::AtomicAdd(fifo.CPReadWriteDistance, GATHER_PIPE_SIZE); - - // High watermark overflow handling (hacked way) - if (fifo.CPReadWriteDistance > fifo.CPHiWatermark) - { - // we should raise an Ov interrupt for an accurate fifo emulation and let PPC deal with it. - // But it slowdowns things because of if(interrupt blah blah){} blocks for each 32B fifo transactions. - // CPU would be a bit more loaded too by its interrupt handling... - // Eather way, CPU would have the ability to resume another thread. - // To be clear: this spin loop is like a critical section spin loop in the emulated GX thread hence "hacked way" - - // Yes, in real life, the only purpose of the low watermark interrupt is just for cooling down OV contention. - // - @ game start -> watermark init: Overflow enabled, Underflow disabled - // - if (OV is raised) - // - CPU stop to write to fifo - // - enable Underflow interrupt (this only happens if OV is raised) - // - do other things - // - if (Underflow is raised (implicite: AND if an OV has been raised)) - // - CPU can write to fifo - // - disable Underflow interrupt - - INFO_LOG(COMMANDPROCESSOR, "(GatherPipeBursted): CPHiWatermark (Hi: 0x%04x, Lo: 0x%04x) reached (RWDistance: 0x%04x)", fifo.CPHiWatermark, fifo.CPLoWatermark, fifo.CPReadWriteDistance); - // Wait for GPU to catch up - while (fifo.CPReadWriteDistance > fifo.CPLoWatermark && fifo.bFF_GPReadEnable && (!fifo.bFF_BPEnable || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) - { - s_fifoIdleEvent.Wait(); - } - } - // check if we are in sync - _assert_msg_(COMMANDPROCESSOR, fifo.CPWritePointer == *(g_VideoInitialize.Fifo_CPUWritePointer), "FIFOs linked but out of sync"); - _assert_msg_(COMMANDPROCESSOR, fifo.CPBase == *(g_VideoInitialize.Fifo_CPUBase), "FIFOs linked but out of sync"); - _assert_msg_(COMMANDPROCESSOR, fifo.CPEnd == *(g_VideoInitialize.Fifo_CPUEnd), "FIFOs linked but out of sync"); - } - else - { - if (fifo.CPWritePointer >= fifo.CPEnd) - fifo.CPWritePointer = fifo.CPBase; - else - fifo.CPWritePointer += GATHER_PIPE_SIZE; - // check if we are in sync - _assert_msg_(COMMANDPROCESSOR, fifo.CPWritePointer == *(g_VideoInitialize.Fifo_CPUWritePointer), "FIFOs linked but out of sync"); - _assert_msg_(COMMANDPROCESSOR, fifo.CPBase == *(g_VideoInitialize.Fifo_CPUBase), "FIFOs linked but out of sync"); - _assert_msg_(COMMANDPROCESSOR, fifo.CPEnd == *(g_VideoInitialize.Fifo_CPUEnd), "FIFOs linked but out of sync"); - - UpdateFifoRegister(); - } -} - -// This is only used in single core mode -void CatchUpGPU() -{ - // check if we are able to run this buffer - if (fifo.bFF_GPReadEnable && !(fifo.bFF_BPEnable && fifo.bFF_Breakpoint)) - { - // HyperIris: Memory_GetPtr is an expensive call, call it less, run faster - u8 *ptr = Memory_GetPtr(fifo.CPReadPointer); - - // Sometimes we have already exceeded the BP even before it is set - // so careful check is required - while (fifo.CPReadWriteDistance || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint)) - { - // check if we are on a breakpoint - if (fifo.bFF_BPEnable) - { - if ( - (fifo.CPReadPointer == fifo.CPBreakpoint) || - //(fifo.CPReadPointer <= fifo.CPBreakpoint && fifo.CPReadPointer + 32 > fifo.CPBreakpoint) || - (fifo.CPReadPointer <= fifo.CPWritePointer && fifo.CPWritePointer < fifo.CPBreakpoint) || - (fifo.CPReadPointer <= fifo.CPWritePointer && fifo.CPReadPointer > fifo.CPBreakpoint) || - (fifo.CPReadPointer > fifo.CPBreakpoint && fifo.CPBreakpoint > fifo.CPWritePointer) - ) - { - //_assert_msg_(POWERPC,0,"BP: %08x",fifo.CPBreakpoint); - fifo.bFF_Breakpoint = 1; - UpdateInterrupts(true); - break; - } - } - - // read the data and send it to the VideoPlugin - // We are going to do FP math on the main thread so have to save the current state - SaveSSEState(); - LoadDefaultSSEState(); - Fifo_SendFifoData(ptr,32); - LoadSSEState(); - - fifo.CPReadWriteDistance -= 32; - // increase the ReadPtr - if (fifo.CPReadPointer >= fifo.CPEnd) - { - fifo.CPReadPointer = fifo.CPBase; - // adjust, take care - ptr = Memory_GetPtr(fifo.CPReadPointer); - DEBUG_LOG(COMMANDPROCESSOR, "Fifo Loop"); - } - else - { - fifo.CPReadPointer += 32; - ptr += 32; - } - } - } -} - -// __________________________________________________________________________________________________ -// !!! Temporary (I hope): re-used in DC mode -// UpdateFifoRegister -// It's no problem if the gfx falls behind a little bit. Better make sure to stop the cpu thread -// when the distance is way huge, though. -// So: -// CPU thread -/// 0. Write data (done before entering this) -// 1. Compute distance -// 2. If distance > threshold, sleep and goto 1 -// GPU thread -// 1. Compute distance -// 2. If distance < threshold, sleep and goto 1 (or wait for trigger?) -// 3. Read and use a bit of data, goto 1 -void UpdateFifoRegister() -{ - // update the distance - int wp = fifo.CPWritePointer; - int rp = fifo.CPReadPointer; - int dist; - if (wp >= rp) - dist = wp - rp; - else - dist = (wp - fifo.CPBase) + ((fifo.CPEnd + GATHER_PIPE_SIZE) - rp); - - Common::AtomicStore(fifo.CPReadWriteDistance, dist); - - if (!g_VideoInitialize.bOnThread) - CatchUpGPU(); -} - -void UpdateInterrupts(bool active) -{ - INFO_LOG(COMMANDPROCESSOR, "Fifo Breakpoint Interrupt: %s", (active)? "Asserted" : "Deasserted"); - m_CPStatusReg.Breakpoint = active; - g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, active); -} - -void UpdateInterruptsFromVideoPlugin(bool active) -{ - if (g_ActiveConfig.bFIFOBPhack) - return; - else - g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, active); -} - -void SetFifoIdleFromVideoPlugin() -{ - s_fifoIdleEvent.Set(); -} - -} // end of namespace CommandProcessor +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// NOTES (mb2): + +// * GP/CPU sync can be done by several way: +// - MP1 use BP (breakpoint) in movie-menus and mostly PEtoken in 3D +// - ZWW as Crazy Taxi: PEfinish (GXSetDrawDone) +// - SMS: BP, PEToken, PEfinish +// - ZTP: seems to use PEfinish only +// - Animal Crossing: PEfinish at start but there's a bug... +// There's tons of HiWmk/LoWmk ping pong -> Another sync fashion? +// - Super Monkey Ball Adventures: PEToken. Oddity: read&check-PEToken-value-loop stays +// in its JITed block (never fall in Advance() until the game-watchdog's stuff). +// That's why we can't let perform the AdvanceCallBack as usual. +// The PEToken is volatile now and in the fifo struct. +// - Super Monkey Ball: PEFinish. This game has the lamest way to deal with fifo sync for our MT's stuff. +// A hack is mandatory. DONE and should be ok for other games. + +// *What I guess (thx to asynchronous DualCore mode): +// PPC have a frame-finish watchdog. Handled by system timming stuff like the decrementer. +// (DualCore mode): I have observed, after ZTP logos, a fifo-recovery start when DECREMENTER_EXCEPTION is throwned. +// The frame setting (by GP) took too much time and didn't finish properly due to this watchdog. +// Faster GX plugins required, indeed :p + +// * BPs are needed for some game GP/CPU sync. +// But it could slowdown (MP1 at least) because our GP in DC is faster than "expected" in some area. +// eg: in movie-menus in MP1, BP are reached quickly. +// The bad thing is that involve too much PPC work (int ack, lock GP, reset BP, new BP addr, unlock BP...) hence the slowdown. +// Anyway, emulation should more accurate like this and it emulate some sort of better load balancing. +// Eather way in those area a more accurate GP timing could be done by slowing down the GP or something less stupid. +// Not functional and not used atm (breaks MP2). + +// * funny, in revs before those with this note, BP irq wasn't cleared (a bug indeed) and MP1 menus was faster. +// BP irq was raised and ack just once but never cleared. However it's sufficient for MP1 to work. +// This hack is used atm. Known BPs handling doesn't work well (btw, BP irq clearing might be done by CPIntEnable raising edge). +// The hack seems to be responsible of the movie stutering in MP1 menus. + +// TODO (mb2): +// * raise watermark Ov/Un irq: POINTLESS since emulated GP timings can't be accuratly set. +// Only 3 choices IMHO for a correct emulated load balancing in DC mode: +// - make our own GP watchdog hack that can lock CPU if GP too slow. STARTED +// - hack directly something in PPC timings (dunno how) +// - boost GP so we can consider it as infinitely fast compared to CPU. +// * raise ReadIdle/CmdIdle flags and observe behaviour of MP1 & ZTP (at least) +// * Clean useless comments and debug stuff in Read16, Write16, GatherPipeBursted when sync will be fixed for DC +// * (reminder) do the same in: +// PeripheralInterface.cpp, PixelEngine.cpp, OGL->BPStructs.cpp, fifo.cpp... ok just check change log >> + +// TODO +// * Kick GPU from dispatcher, not from writes +// * Thunking framework +// * Cleanup of messy now unnecessary safety code in jit + +#include "Common.h" +#include "VideoCommon.h" +#include "VideoConfig.h" +#include "MathUtil.h" +#include "Thread.h" +#include "Atomic.h" + +#include "Fifo.h" +#include "ChunkFile.h" +#include "CommandProcessor.h" + + +namespace CommandProcessor +{ + +int et_UpdateInterrupts; + +void UpdateInterrupts_Wrapper(u64 userdata, int cyclesLate) +{ + UpdateInterrupts((userdata) ? true : false); +} + +// look for 1002 verts, breakpoint there, see why next draw is flushed +// TODO(ector): Warn on bbox read/write + +// STATE_TO_SAVE +SCPFifoStruct fifo; +UCPStatusReg m_CPStatusReg; +UCPCtrlReg m_CPCtrlReg; +UCPClearReg m_CPClearReg; + +int m_bboxleft; +int m_bboxtop; +int m_bboxright; +int m_bboxbottom; +u16 m_tokenReg; + +static u32 fake_GPWatchdogLastToken = 0; +static Common::EventEx s_fifoIdleEvent; +static Common::CriticalSection sFifoCritical; + +void FifoCriticalEnter() +{ + sFifoCritical.Enter(); +} + +void FifoCriticalLeave() +{ + sFifoCritical.Leave(); +} + +void DoState(PointerWrap &p) +{ + p.Do(m_CPStatusReg); + p.Do(m_CPCtrlReg); + //p.Do(m_CPClearReg); + p.Do(m_bboxleft); + p.Do(m_bboxtop); + p.Do(m_bboxright); + p.Do(m_bboxbottom); + p.Do(m_tokenReg); + p.Do(fifo); +} + +//inline void WriteLow (u32& _reg, u16 lowbits) {_reg = (_reg & 0xFFFF0000) | lowbits;} +//inline void WriteHigh(u32& _reg, u16 highbits) {_reg = (_reg & 0x0000FFFF) | ((u32)highbits << 16);} +inline void WriteLow (volatile u32& _reg, u16 lowbits) {Common::AtomicStore(_reg,(_reg & 0xFFFF0000) | lowbits);} +inline void WriteHigh(volatile u32& _reg, u16 highbits) {Common::AtomicStore(_reg,(_reg & 0x0000FFFF) | ((u32)highbits << 16));} + +inline u16 ReadLow (u32 _reg) {return (u16)(_reg & 0xFFFF);} +inline u16 ReadHigh (u32 _reg) {return (u16)(_reg >> 16);} + +void Init() +{ + m_CPStatusReg.Hex = 0; + m_CPStatusReg.CommandIdle = 1; // Seems not used + m_CPStatusReg.ReadIdle = 1; + + m_CPCtrlReg.Hex = 0; + + m_bboxleft = 0; + m_bboxtop = 0; + m_bboxright = 640; + m_bboxbottom = 480; + + m_tokenReg = 0; + + fake_GPWatchdogLastToken = 0; + + memset(&fifo,0,sizeof(fifo)); + fifo.CPCmdIdle = 1 ; + fifo.CPReadIdle = 1; + fifo.bFF_Breakpoint = 1; + + s_fifoIdleEvent.Init(); + + et_UpdateInterrupts = g_VideoInitialize.pRegisterEvent("UpdateInterrupts", UpdateInterrupts_Wrapper); +} + +void Shutdown() +{ + s_fifoIdleEvent.Shutdown(); +} + +void Read16(u16& _rReturnValue, const u32 _Address) +{ + INFO_LOG(COMMANDPROCESSOR, "(r): 0x%08x", _Address); + switch (_Address & 0xFFF) + { + case STATUS_REGISTER: + //TODO?: if really needed + //m_CPStatusReg.CommandIdle = fifo.CPCmdIdle; + //m_CPStatusReg.CommandIdle = fifo.CPReadIdle; + // uncomment: change a bit the behaviour MP1. Not very useful though + + // hack: CPU will always believe fifo is empty and on idle + //m_CPStatusReg.ReadIdle = 1; + //m_CPStatusReg.CommandIdle = 1; + + DEBUG_LOG(COMMANDPROCESSOR, "(r) status: iBP %s | fReadIdle %s | fCmdIdle %s | iOvF %s | iUndF %s" + , m_CPStatusReg.Breakpoint ? "ON" : "OFF" + , m_CPStatusReg.ReadIdle ? "ON" : "OFF" + , m_CPStatusReg.CommandIdle ? "ON" : "OFF" + , m_CPStatusReg.OverflowHiWatermark ? "ON" : "OFF" + , m_CPStatusReg.UnderflowLoWatermark ? "ON" : "OFF" + ); + + _rReturnValue = m_CPStatusReg.Hex; + // Clear on read + UpdateInterrupts(false); + return; + + case CTRL_REGISTER: _rReturnValue = m_CPCtrlReg.Hex; return; + case CLEAR_REGISTER: + _rReturnValue = m_CPClearReg.Hex; + DEBUG_LOG(COMMANDPROCESSOR, "(r) clear: 0x%04x", _rReturnValue); + return; + + case FIFO_TOKEN_REGISTER: _rReturnValue = m_tokenReg; return; + case FIFO_BOUNDING_BOX_LEFT: _rReturnValue = m_bboxleft; return; + case FIFO_BOUNDING_BOX_RIGHT: _rReturnValue = m_bboxright; return; + case FIFO_BOUNDING_BOX_TOP: _rReturnValue = m_bboxtop; return; + case FIFO_BOUNDING_BOX_BOTTOM: _rReturnValue = m_bboxbottom; return; + + case FIFO_BASE_LO: _rReturnValue = ReadLow (fifo.CPBase); return; + case FIFO_BASE_HI: _rReturnValue = ReadHigh(fifo.CPBase); return; + case FIFO_END_LO: _rReturnValue = ReadLow (fifo.CPEnd); return; + case FIFO_END_HI: _rReturnValue = ReadHigh(fifo.CPEnd); return; + case FIFO_HI_WATERMARK_LO: _rReturnValue = ReadLow (fifo.CPHiWatermark); return; + case FIFO_HI_WATERMARK_HI: _rReturnValue = ReadHigh(fifo.CPHiWatermark); return; + case FIFO_LO_WATERMARK_LO: _rReturnValue = ReadLow (fifo.CPLoWatermark); return; + case FIFO_LO_WATERMARK_HI: _rReturnValue = ReadHigh(fifo.CPLoWatermark); return; + + // TODO: cases cleanup + case FIFO_RW_DISTANCE_LO: + // hack: CPU will always believe fifo is empty and on idle + // But even if you return the true value, most games just don't care + //_rReturnValue = ReadLow (fifo.CPReadWriteDistance); + _rReturnValue = 0; + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_RW_DISTANCE_LO : %04x", _rReturnValue); + return; + case FIFO_RW_DISTANCE_HI: + // hack: CPU will always believe fifo is empty and on idle + // But even if you return the true value, most games just don't care + //_rReturnValue = ReadHigh(fifo.CPReadWriteDistance); + _rReturnValue = 0; + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_RW_DISTANCE_HI : %04x", _rReturnValue); + return; + + case FIFO_WRITE_POINTER_LO: + _rReturnValue = ReadLow (fifo.CPWritePointer); + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_WRITE_POINTER_LO : %04x", _rReturnValue); + return; + case FIFO_WRITE_POINTER_HI: + _rReturnValue = ReadHigh(fifo.CPWritePointer); + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_WRITE_POINTER_HI : %04x", _rReturnValue); + return; + + case FIFO_READ_POINTER_LO: + // hack: CPU will always believe fifo is empty and on idle + // But even if you return the true value, most games just don't care + //_rReturnValue = ReadLow (fifo.CPReadPointer); + _rReturnValue = ReadLow (fifo.CPWritePointer); + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue); + return; + case FIFO_READ_POINTER_HI: + // hack: CPU will always believe fifo is empty and on idle + // But even if you return the true value, most games just don't care + //_rReturnValue = ReadHigh(fifo.CPReadPointer); + _rReturnValue = ReadHigh(fifo.CPWritePointer); + DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue); + return; + + case FIFO_BP_LO: _rReturnValue = ReadLow (fifo.CPBreakpoint); return; + case FIFO_BP_HI: _rReturnValue = ReadHigh(fifo.CPBreakpoint); return; + + // AyuanX: Lots of games read the followings (e.g. Mario Power Tennis) + case XF_RASBUSY_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_RASBUSY_L: %04x", _rReturnValue); + return; + case XF_RASBUSY_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_RASBUSY_H: %04x", _rReturnValue); + return; + + case XF_CLKS_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_CLKS_L: %04x", _rReturnValue); + return; + case XF_CLKS_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_CLKS_H: %04x", _rReturnValue); + return; + + case XF_WAIT_IN_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_IN_L: %04x", _rReturnValue); + return; + case XF_WAIT_IN_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_IN_H: %04x", _rReturnValue); + return; + + case XF_WAIT_OUT_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_OUT_L: %04x", _rReturnValue); + return; + case XF_WAIT_OUT_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from XF_WAIT_OUT_H: %04x", _rReturnValue); + return; + + case VCACHE_METRIC_CHECK_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_CHECK_L: %04x", _rReturnValue); + return; + case VCACHE_METRIC_CHECK_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_CHECK_H: %04x", _rReturnValue); + return; + + case VCACHE_METRIC_MISS_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_MISS_L: %04x", _rReturnValue); + return; + case VCACHE_METRIC_MISS_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_MISS_H: %04x", _rReturnValue); + return; + + case VCACHE_METRIC_STALL_L: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_STALL_L: %04x", _rReturnValue); + return; + case VCACHE_METRIC_STALL_H: + _rReturnValue = 0; // TODO: Figure out the true value + DEBUG_LOG(COMMANDPROCESSOR, "Read from VCACHE_METRIC_STALL_H: %04x", _rReturnValue); + return; + + case CLKS_PER_VTX_OUT: + _rReturnValue = 4; //Number of clocks per vertex.. TODO: Calculate properly + DEBUG_LOG(COMMANDPROCESSOR, "Read from CLKS_PER_VTX_OUT: %04x", _rReturnValue); + return; + //add all the other regs here? are they ever read? + default: + _rReturnValue = 0; + WARN_LOG(COMMANDPROCESSOR, "(r16) unknown CP reg @ %08x", _Address); + return; + } + return; +} + +void Write16(const u16 _Value, const u32 _Address) +{ + bool bUpdate = false; + INFO_LOG(COMMANDPROCESSOR, "(write16): 0x%04x @ 0x%08x",_Value,_Address); + + //Spin until queue is empty - it WILL become empty because this is the only thread + //that submits data + + if (g_VideoInitialize.bOnThread) + { + // Force complete fifo flush if we attempt to set/reset the fifo (API GXSetGPFifo or equivalent) + // It's kind of an API hack but it works for lots of games... and I hope it's the same way for every games. + // TODO: HLE for GX fifo's APIs? + // Here is the hack: + // - if (attempt to overwrite CTRL_REGISTER by 0x0000) + // // then we assume CPReadWriteDistance will be overwrited very soon. + // - if (fifo is not empty) + // // (not 100% sure): shouln't happen unless PPC think having trouble with the sync + // // and it attempt a fifo recovery (look for PI_FIFO_RESET in log). + // // If we want to emulate self fifo recovery we need proper GX metrics emulation... yeah sure :p + // - spin until fifo is empty + // - else + // - normal write16 + + if (((_Address&0xFFF) == CTRL_REGISTER) && (_Value == 0)) // API hack + { + // weird MP1 redo that right after linking fifo with GP... hmmm + /*_dbg_assert_msg_(COMMANDPROCESSOR, fifo.CPReadWriteDistance == 0, + "WTF! Something went wrong with GP/PPC the sync! -> CPReadWriteDistance: 0x%08X\n" + " - The fifo is not empty but we are going to lock it anyway.\n" + " - \"Normaly\", this is due to fifo-hang-so-lets-attempt-recovery.\n" + " - The bad news is dolphin don't support special recovery features like GXfifo's metric yet.\n" + " - The good news is, the time you read that message, the fifo should be empty now :p\n" + " - Anyway, fifo flush will be forced if you press OK and dolphin might continue to work...\n" + " - We aren't betting on that :)", fifo.CPReadWriteDistance); + */ + DEBUG_LOG(COMMANDPROCESSOR, "*********************** GXSetGPFifo very soon? ***********************"); + // (mb2) We don't sleep here since it could be a perf issue for super monkey ball (yup only this game IIRC) + // Touching that game is a no-go so I don't want to take the risk :p + while (fifo.bFF_GPReadEnable && ((!fifo.bFF_BPEnable && fifo.CPReadWriteDistance) || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) + { + s_fifoIdleEvent.Wait(); + } + } + } + + switch (_Address & 0xFFF) + { + case STATUS_REGISTER: + { + // This should be Read-Only + ERROR_LOG(COMMANDPROCESSOR,"\t write to STATUS_REGISTER : %04x", _Value); + PanicAlert("CommandProcessor:: CPU writes to STATUS_REGISTER!"); + } + break; + + case CTRL_REGISTER: + { + UCPCtrlReg tmpCtrl(_Value); + m_CPCtrlReg.Hex = tmpCtrl.Hex; + + Common::AtomicStore(fifo.bFF_GPLinkEnable, tmpCtrl.GPLinkEnable); + Common::AtomicStore(fifo.bFF_GPReadEnable, tmpCtrl.GPReadEnable); + Common::AtomicStore(fifo.bFF_BPEnable, tmpCtrl.BPEnable); + + if (tmpCtrl.BPInit && tmpCtrl.BPEnable && tmpCtrl.GPReadEnable) + { + // Clear old BP and initiate new BP + Common::AtomicStore(fifo.bFF_Breakpoint, 0); + + // The following is a hack of Synchronized Breakpoint for dual core mode + // Some games only waits a finite N cycles for FIFO interrupts, then hangs up on time out + // e.g. Metriod Prime 2 + if (g_VideoInitialize.bOnThread && g_ActiveConfig.bFIFOBPhack) + UpdateInterrupts(true); + } + + INFO_LOG(COMMANDPROCESSOR,"\t write to CTRL_REGISTER : %04x", _Value); + DEBUG_LOG(COMMANDPROCESSOR, "\t GPREAD %s | LINK %s | BP %s || Init %s | OvF %s | UndF %s" + , fifo.bFF_GPReadEnable ? "ON" : "OFF" + , fifo.bFF_GPLinkEnable ? "ON" : "OFF" + , fifo.bFF_BPEnable ? "ON" : "OFF" + , m_CPCtrlReg.BPInit ? "ON" : "OFF" + , m_CPCtrlReg.FifoOverflowIntEnable ? "ON" : "OFF" + , m_CPCtrlReg.FifoUnderflowIntEnable ? "ON" : "OFF" + ); + } + break; + + case CLEAR_REGISTER: + // We don't care since we don't implement Watermark + //m_CPClearReg.Hex = 0; + //m_CPStatusReg.OverflowHiWatermark = 0; + //m_CPStatusReg.UnderflowHiWatermark = 0; + DEBUG_LOG(COMMANDPROCESSOR,"\t write to CLEAR_REGISTER : %04x", _Value); + break; + + case PERF_SELECT: + // Seems to select which set of perf registers should be exposed. + DEBUG_LOG(COMMANDPROCESSOR, "write to PERF_SELECT: %04x", _Value); + break; + + // Fifo Registers + case FIFO_TOKEN_REGISTER: + m_tokenReg = _Value; + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_TOKEN_REGISTER : %04x", _Value); + break; + + case FIFO_BASE_LO: + bUpdate = true; + WriteLow ((u32 &)fifo.CPBase, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_LO : %04x", _Value); + break; + case FIFO_BASE_HI: + bUpdate = true; + WriteHigh((u32 &)fifo.CPBase, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_HI : %04x", _Value); + break; + + case FIFO_END_LO: + bUpdate = true; + // Somtimes this value is not aligned with 32B, e.g. New Super Mario Bros. Wii + WriteLow ((u32 &)fifo.CPEnd, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_LO : %04x", _Value); + break; + case FIFO_END_HI: + bUpdate = true; + WriteHigh((u32 &)fifo.CPEnd, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_HI : %04x", _Value); + break; + + case FIFO_WRITE_POINTER_LO: + bUpdate = true; + WriteLow ((u32 &)fifo.CPWritePointer, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_LO : %04x", _Value); + break; + case FIFO_WRITE_POINTER_HI: + bUpdate = true; + WriteHigh((u32 &)fifo.CPWritePointer, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_HI : %04x", _Value); + break; + + case FIFO_READ_POINTER_LO: + bUpdate = true; + WriteLow ((u32 &)fifo.CPReadPointer, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_LO : %04x", _Value); + break; + case FIFO_READ_POINTER_HI: + bUpdate = true; + WriteHigh((u32 &)fifo.CPReadPointer, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_HI : %04x", _Value); + break; + + case FIFO_HI_WATERMARK_LO: + WriteLow ((u32 &)fifo.CPHiWatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_LO : %04x", _Value); + break; + case FIFO_HI_WATERMARK_HI: + WriteHigh((u32 &)fifo.CPHiWatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_HI : %04x", _Value); + break; + + case FIFO_LO_WATERMARK_LO: + WriteLow ((u32 &)fifo.CPLoWatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_LO : %04x", _Value); + break; + case FIFO_LO_WATERMARK_HI: + WriteHigh((u32 &)fifo.CPLoWatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_HI : %04x", _Value); + break; + + case FIFO_BP_LO: + WriteLow ((u32 &)fifo.CPBreakpoint, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"write to FIFO_BP_LO : %04x", _Value); + break; + case FIFO_BP_HI: + WriteHigh((u32 &)fifo.CPBreakpoint, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"write to FIFO_BP_HI : %04x", _Value); + break; + + // Super monkey try to overwrite CPReadWriteDistance by an old saved RWD value. Which is lame for us. + // hack: We have to force CPU to think fifo is alway empty and on idle. + // When we fall here CPReadWriteDistance should be always null and the game should always want to overwrite it by 0. + // So, we can skip it. + case FIFO_RW_DISTANCE_HI: + //WriteHigh((u32 &)fifo.CPReadWriteDistance, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"try to write to FIFO_RW_DISTANCE_HI : %04x", _Value); + break; + case FIFO_RW_DISTANCE_LO: + //WriteLow((u32 &)fifo.CPReadWriteDistance, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"try to write to FIFO_RW_DISTANCE_LO : %04x", _Value); + break; + + default: + WARN_LOG(COMMANDPROCESSOR, "(w16) unknown CP reg write %04x @ %08x", _Value, _Address); + } + + if (bUpdate || !g_VideoInitialize.bOnThread) // TOCHECK(mb2): check again if thread safe? + { + if (g_VideoInitialize.bOnThread) FifoCriticalEnter(); // This may not be necessary, just for safety + UpdateFifoRegister(); + if (g_VideoInitialize.bOnThread) FifoCriticalLeave(); + } +} + +void Read32(u32& _rReturnValue, const u32 _Address) +{ + _rReturnValue = 0; + _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Read32 from CommandProccessor at 0x%08x", _Address); +} + +void Write32(const u32 _Data, const u32 _Address) +{ + _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Write32 at CommandProccessor at 0x%08x", _Address); +} + +// for GP watchdog hack +void IncrementGPWDToken() +{ + Common::AtomicIncrement(fifo.Fake_GPWDToken); +} + +bool AllowIdleSkipping() +{ + return !g_VideoInitialize.bOnThread || !m_CPCtrlReg.BPEnable; +} + +// Check every FAKE_GP_WATCHDOG_PERIOD if a PE-frame-finish occured +// if not then lock CPUThread until GP finish a frame. +void WaitForFrameFinish() +{ + while ((fake_GPWatchdogLastToken == fifo.Fake_GPWDToken) && fifo.bFF_GPReadEnable && ((!fifo.bFF_BPEnable && fifo.CPReadWriteDistance) || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) + { + s_fifoIdleEvent.Wait(); + } + + fake_GPWatchdogLastToken = fifo.Fake_GPWDToken; +} + +void STACKALIGN GatherPipeBursted() +{ + // if we aren't linked, we don't care about gather pipe data + if (!fifo.bFF_GPLinkEnable) + return; + + if (g_VideoInitialize.bOnThread) + { + // update the fifo-pointer + if (fifo.CPWritePointer >= fifo.CPEnd) + fifo.CPWritePointer = fifo.CPBase; + else + fifo.CPWritePointer += GATHER_PIPE_SIZE; + + Common::AtomicAdd(fifo.CPReadWriteDistance, GATHER_PIPE_SIZE); + + // High watermark overflow handling (hacked way) + if (fifo.CPReadWriteDistance > fifo.CPHiWatermark) + { + // we should raise an Ov interrupt for an accurate fifo emulation and let PPC deal with it. + // But it slowdowns things because of if(interrupt blah blah){} blocks for each 32B fifo transactions. + // CPU would be a bit more loaded too by its interrupt handling... + // Eather way, CPU would have the ability to resume another thread. + // To be clear: this spin loop is like a critical section spin loop in the emulated GX thread hence "hacked way" + + // Yes, in real life, the only purpose of the low watermark interrupt is just for cooling down OV contention. + // - @ game start -> watermark init: Overflow enabled, Underflow disabled + // - if (OV is raised) + // - CPU stop to write to fifo + // - enable Underflow interrupt (this only happens if OV is raised) + // - do other things + // - if (Underflow is raised (implicite: AND if an OV has been raised)) + // - CPU can write to fifo + // - disable Underflow interrupt + + INFO_LOG(COMMANDPROCESSOR, "(GatherPipeBursted): CPHiWatermark (Hi: 0x%04x, Lo: 0x%04x) reached (RWDistance: 0x%04x)", fifo.CPHiWatermark, fifo.CPLoWatermark, fifo.CPReadWriteDistance); + // Wait for GPU to catch up + while (fifo.CPReadWriteDistance > fifo.CPLoWatermark && fifo.bFF_GPReadEnable && (!fifo.bFF_BPEnable || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint))) + { + s_fifoIdleEvent.Wait(); + } + } + // check if we are in sync + _assert_msg_(COMMANDPROCESSOR, fifo.CPWritePointer == *(g_VideoInitialize.Fifo_CPUWritePointer), "FIFOs linked but out of sync"); + _assert_msg_(COMMANDPROCESSOR, fifo.CPBase == *(g_VideoInitialize.Fifo_CPUBase), "FIFOs linked but out of sync"); + _assert_msg_(COMMANDPROCESSOR, fifo.CPEnd == *(g_VideoInitialize.Fifo_CPUEnd), "FIFOs linked but out of sync"); + } + else + { + if (fifo.CPWritePointer >= fifo.CPEnd) + fifo.CPWritePointer = fifo.CPBase; + else + fifo.CPWritePointer += GATHER_PIPE_SIZE; + // check if we are in sync + _assert_msg_(COMMANDPROCESSOR, fifo.CPWritePointer == *(g_VideoInitialize.Fifo_CPUWritePointer), "FIFOs linked but out of sync"); + _assert_msg_(COMMANDPROCESSOR, fifo.CPBase == *(g_VideoInitialize.Fifo_CPUBase), "FIFOs linked but out of sync"); + _assert_msg_(COMMANDPROCESSOR, fifo.CPEnd == *(g_VideoInitialize.Fifo_CPUEnd), "FIFOs linked but out of sync"); + + UpdateFifoRegister(); + } +} + +// This is only used in single core mode +void CatchUpGPU() +{ + // check if we are able to run this buffer + if (fifo.bFF_GPReadEnable && !(fifo.bFF_BPEnable && fifo.bFF_Breakpoint)) + { + // HyperIris: Memory_GetPtr is an expensive call, call it less, run faster + u8 *ptr = Memory_GetPtr(fifo.CPReadPointer); + + // Sometimes we have already exceeded the BP even before it is set + // so careful check is required + while (fifo.CPReadWriteDistance || (fifo.bFF_BPEnable && !fifo.bFF_Breakpoint)) + { + // check if we are on a breakpoint + if (fifo.bFF_BPEnable) + { + if ( + (fifo.CPReadPointer == fifo.CPBreakpoint) || + //(fifo.CPReadPointer <= fifo.CPBreakpoint && fifo.CPReadPointer + 32 > fifo.CPBreakpoint) || + (fifo.CPReadPointer <= fifo.CPWritePointer && fifo.CPWritePointer < fifo.CPBreakpoint) || + (fifo.CPReadPointer <= fifo.CPWritePointer && fifo.CPReadPointer > fifo.CPBreakpoint) || + (fifo.CPReadPointer > fifo.CPBreakpoint && fifo.CPBreakpoint > fifo.CPWritePointer) + ) + { + //_assert_msg_(POWERPC,0,"BP: %08x",fifo.CPBreakpoint); + fifo.bFF_Breakpoint = 1; + UpdateInterrupts(true); + break; + } + } + + // read the data and send it to the VideoPlugin + // We are going to do FP math on the main thread so have to save the current state + SaveSSEState(); + LoadDefaultSSEState(); + Fifo_SendFifoData(ptr,32); + LoadSSEState(); + + fifo.CPReadWriteDistance -= 32; + // increase the ReadPtr + if (fifo.CPReadPointer >= fifo.CPEnd) + { + fifo.CPReadPointer = fifo.CPBase; + // adjust, take care + ptr = Memory_GetPtr(fifo.CPReadPointer); + DEBUG_LOG(COMMANDPROCESSOR, "Fifo Loop"); + } + else + { + fifo.CPReadPointer += 32; + ptr += 32; + } + } + } +} + +// __________________________________________________________________________________________________ +// !!! Temporary (I hope): re-used in DC mode +// UpdateFifoRegister +// It's no problem if the gfx falls behind a little bit. Better make sure to stop the cpu thread +// when the distance is way huge, though. +// So: +// CPU thread +/// 0. Write data (done before entering this) +// 1. Compute distance +// 2. If distance > threshold, sleep and goto 1 +// GPU thread +// 1. Compute distance +// 2. If distance < threshold, sleep and goto 1 (or wait for trigger?) +// 3. Read and use a bit of data, goto 1 +void UpdateFifoRegister() +{ + // update the distance + int wp = fifo.CPWritePointer; + int rp = fifo.CPReadPointer; + int dist; + if (wp >= rp) + dist = wp - rp; + else + dist = (wp - fifo.CPBase) + ((fifo.CPEnd + GATHER_PIPE_SIZE) - rp); + + Common::AtomicStore(fifo.CPReadWriteDistance, dist); + + if (!g_VideoInitialize.bOnThread) + CatchUpGPU(); +} + +void UpdateInterrupts(bool active) +{ + INFO_LOG(COMMANDPROCESSOR, "Fifo Breakpoint Interrupt: %s", (active)? "Asserted" : "Deasserted"); + m_CPStatusReg.Breakpoint = active; + g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, active); +} + +void UpdateInterruptsFromVideoPlugin(bool active) +{ + if (g_ActiveConfig.bFIFOBPhack) + return; + else + g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, active); +} + +void SetFifoIdleFromVideoPlugin() +{ + s_fifoIdleEvent.Set(); +} + +} // end of namespace CommandProcessor diff --git a/Source/Core/VideoCommon/Src/CommandProcessor.h b/Source/Core/VideoCommon/Src/CommandProcessor.h index e91148d6e2..8d6be24659 100644 --- a/Source/Core/VideoCommon/Src/CommandProcessor.h +++ b/Source/Core/VideoCommon/Src/CommandProcessor.h @@ -1,168 +1,168 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _COMMANDPROCESSOR_H -#define _COMMANDPROCESSOR_H - -#include "Common.h" -#include "pluginspecs_video.h" - -class PointerWrap; - -extern bool MT; - -namespace CommandProcessor -{ - -extern SCPFifoStruct fifo; //This one is shared between gfx thread and emulator thread - -// internal hardware addresses -enum -{ - STATUS_REGISTER = 0x00, - CTRL_REGISTER = 0x02, - CLEAR_REGISTER = 0x04, - PERF_SELECT = 0x06, - FIFO_TOKEN_REGISTER = 0x0E, - FIFO_BOUNDING_BOX_LEFT = 0x10, - FIFO_BOUNDING_BOX_RIGHT = 0x12, - FIFO_BOUNDING_BOX_TOP = 0x14, - FIFO_BOUNDING_BOX_BOTTOM = 0x16, - FIFO_BASE_LO = 0x20, - FIFO_BASE_HI = 0x22, - FIFO_END_LO = 0x24, - FIFO_END_HI = 0x26, - FIFO_HI_WATERMARK_LO = 0x28, - FIFO_HI_WATERMARK_HI = 0x2a, - FIFO_LO_WATERMARK_LO = 0x2c, - FIFO_LO_WATERMARK_HI = 0x2e, - FIFO_RW_DISTANCE_LO = 0x30, - FIFO_RW_DISTANCE_HI = 0x32, - FIFO_WRITE_POINTER_LO = 0x34, - FIFO_WRITE_POINTER_HI = 0x36, - FIFO_READ_POINTER_LO = 0x38, - FIFO_READ_POINTER_HI = 0x3A, - FIFO_BP_LO = 0x3C, - FIFO_BP_HI = 0x3E, - XF_RASBUSY_L = 0x40, - XF_RASBUSY_H = 0x42, - XF_CLKS_L = 0x44, - XF_CLKS_H = 0x46, - XF_WAIT_IN_L = 0x48, - XF_WAIT_IN_H = 0x4a, - XF_WAIT_OUT_L = 0x4c, - XF_WAIT_OUT_H = 0x4e, - VCACHE_METRIC_CHECK_L = 0x50, - VCACHE_METRIC_CHECK_H = 0x52, - VCACHE_METRIC_MISS_L = 0x54, - VCACHE_METRIC_MISS_H = 0x56, - VCACHE_METRIC_STALL_L = 0x58, - VCACHE_METRIC_STALL_H = 0x5A, - CLKS_PER_VTX_IN_L = 0x60, - CLKS_PER_VTX_IN_H = 0x62, - CLKS_PER_VTX_OUT = 0x64, -}; - -enum -{ - GATHER_PIPE_SIZE = 32, - INT_CAUSE_CP = 0x800 -}; - -// Fifo Status Register -union UCPStatusReg -{ - struct - { - unsigned OverflowHiWatermark : 1; - unsigned UnderflowLoWatermark : 1; - unsigned ReadIdle : 1; - unsigned CommandIdle : 1; - unsigned Breakpoint : 1; - unsigned : 11; - }; - u16 Hex; - UCPStatusReg() {Hex = 0; } - UCPStatusReg(u16 _hex) {Hex = _hex; } -}; - -// Fifo Control Register -union UCPCtrlReg -{ - struct - { - unsigned GPReadEnable : 1; - unsigned BPEnable : 1; - unsigned FifoOverflowIntEnable : 1; - unsigned FifoUnderflowIntEnable : 1; - unsigned GPLinkEnable : 1; - unsigned BPInit : 1; - unsigned : 10; - }; - u16 Hex; - UCPCtrlReg() {Hex = 0; } - UCPCtrlReg(u16 _hex) {Hex = _hex; } -}; - -// Fifo Clear Register -union UCPClearReg -{ - struct - { - unsigned ClearFifoOverflow : 1; - unsigned ClearFifoUnderflow : 1; - unsigned ClearMetrices : 1; - unsigned : 13; - }; - u16 Hex; - UCPClearReg() {Hex = 0; } - UCPClearReg(u16 _hex) {Hex = _hex; } -}; - -// Init -void Init(); -void Shutdown(); -void DoState(PointerWrap &p); - -// Read -void Read16(u16& _rReturnValue, const u32 _Address); -void Write16(const u16 _Data, const u32 _Address); -void Read32(u32& _rReturnValue, const u32 _Address); -void Write32(const u32 _Data, const u32 _Address); - -// for CGPFIFO -void CatchUpGPU(); -void GatherPipeBursted(); -void UpdateFifoRegister(); -void UpdateInterrupts(bool active); -void UpdateInterruptsFromVideoPlugin(bool active); -void SetFifoIdleFromVideoPlugin(); - -bool AllowIdleSkipping(); - -// for DC GP watchdog hack -void IncrementGPWDToken(); -void WaitForFrameFinish(); - -void FifoCriticalEnter(); -void FifoCriticalLeave(); - -} // namespace CommandProcessor - -#endif // _COMMANDPROCESSOR_H - - +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _COMMANDPROCESSOR_H +#define _COMMANDPROCESSOR_H + +#include "Common.h" +#include "pluginspecs_video.h" + +class PointerWrap; + +extern bool MT; + +namespace CommandProcessor +{ + +extern SCPFifoStruct fifo; //This one is shared between gfx thread and emulator thread + +// internal hardware addresses +enum +{ + STATUS_REGISTER = 0x00, + CTRL_REGISTER = 0x02, + CLEAR_REGISTER = 0x04, + PERF_SELECT = 0x06, + FIFO_TOKEN_REGISTER = 0x0E, + FIFO_BOUNDING_BOX_LEFT = 0x10, + FIFO_BOUNDING_BOX_RIGHT = 0x12, + FIFO_BOUNDING_BOX_TOP = 0x14, + FIFO_BOUNDING_BOX_BOTTOM = 0x16, + FIFO_BASE_LO = 0x20, + FIFO_BASE_HI = 0x22, + FIFO_END_LO = 0x24, + FIFO_END_HI = 0x26, + FIFO_HI_WATERMARK_LO = 0x28, + FIFO_HI_WATERMARK_HI = 0x2a, + FIFO_LO_WATERMARK_LO = 0x2c, + FIFO_LO_WATERMARK_HI = 0x2e, + FIFO_RW_DISTANCE_LO = 0x30, + FIFO_RW_DISTANCE_HI = 0x32, + FIFO_WRITE_POINTER_LO = 0x34, + FIFO_WRITE_POINTER_HI = 0x36, + FIFO_READ_POINTER_LO = 0x38, + FIFO_READ_POINTER_HI = 0x3A, + FIFO_BP_LO = 0x3C, + FIFO_BP_HI = 0x3E, + XF_RASBUSY_L = 0x40, + XF_RASBUSY_H = 0x42, + XF_CLKS_L = 0x44, + XF_CLKS_H = 0x46, + XF_WAIT_IN_L = 0x48, + XF_WAIT_IN_H = 0x4a, + XF_WAIT_OUT_L = 0x4c, + XF_WAIT_OUT_H = 0x4e, + VCACHE_METRIC_CHECK_L = 0x50, + VCACHE_METRIC_CHECK_H = 0x52, + VCACHE_METRIC_MISS_L = 0x54, + VCACHE_METRIC_MISS_H = 0x56, + VCACHE_METRIC_STALL_L = 0x58, + VCACHE_METRIC_STALL_H = 0x5A, + CLKS_PER_VTX_IN_L = 0x60, + CLKS_PER_VTX_IN_H = 0x62, + CLKS_PER_VTX_OUT = 0x64, +}; + +enum +{ + GATHER_PIPE_SIZE = 32, + INT_CAUSE_CP = 0x800 +}; + +// Fifo Status Register +union UCPStatusReg +{ + struct + { + unsigned OverflowHiWatermark : 1; + unsigned UnderflowLoWatermark : 1; + unsigned ReadIdle : 1; + unsigned CommandIdle : 1; + unsigned Breakpoint : 1; + unsigned : 11; + }; + u16 Hex; + UCPStatusReg() {Hex = 0; } + UCPStatusReg(u16 _hex) {Hex = _hex; } +}; + +// Fifo Control Register +union UCPCtrlReg +{ + struct + { + unsigned GPReadEnable : 1; + unsigned BPEnable : 1; + unsigned FifoOverflowIntEnable : 1; + unsigned FifoUnderflowIntEnable : 1; + unsigned GPLinkEnable : 1; + unsigned BPInit : 1; + unsigned : 10; + }; + u16 Hex; + UCPCtrlReg() {Hex = 0; } + UCPCtrlReg(u16 _hex) {Hex = _hex; } +}; + +// Fifo Clear Register +union UCPClearReg +{ + struct + { + unsigned ClearFifoOverflow : 1; + unsigned ClearFifoUnderflow : 1; + unsigned ClearMetrices : 1; + unsigned : 13; + }; + u16 Hex; + UCPClearReg() {Hex = 0; } + UCPClearReg(u16 _hex) {Hex = _hex; } +}; + +// Init +void Init(); +void Shutdown(); +void DoState(PointerWrap &p); + +// Read +void Read16(u16& _rReturnValue, const u32 _Address); +void Write16(const u16 _Data, const u32 _Address); +void Read32(u32& _rReturnValue, const u32 _Address); +void Write32(const u32 _Data, const u32 _Address); + +// for CGPFIFO +void CatchUpGPU(); +void GatherPipeBursted(); +void UpdateFifoRegister(); +void UpdateInterrupts(bool active); +void UpdateInterruptsFromVideoPlugin(bool active); +void SetFifoIdleFromVideoPlugin(); + +bool AllowIdleSkipping(); + +// for DC GP watchdog hack +void IncrementGPWDToken(); +void WaitForFrameFinish(); + +void FifoCriticalEnter(); +void FifoCriticalLeave(); + +} // namespace CommandProcessor + +#endif // _COMMANDPROCESSOR_H + + diff --git a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp index ac90813c14..a81a58bd51 100644 --- a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp @@ -1,233 +1,233 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "OCLTextureDecoder.h" - -#include "OpenCL.h" -#include "FileUtil.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -//#define DEBUG_OPENCL - -struct sDecoders -{ - const char name[256]; // kernel name - cl_kernel kernel; // compute kernel -}; - -cl_program g_program; -// NULL terminated set of kernels -sDecoders Decoders[] = { -{"DecodeI4", NULL}, -{"DecodeI8", NULL}, -{"DecodeIA4", NULL}, -{"DecodeIA8", NULL}, -{"DecodeRGBA8", NULL}, -{"DecodeRGB565", NULL}, -{"DecodeRGB5A3", NULL}, -{"DecodeCMPR", NULL}, -{"", NULL}, -}; - -bool g_Inited = false; -cl_mem g_clsrc, g_cldst; // texture buffer memory objects - -void TexDecoder_OpenCL_Initialize() { -#if defined(HAVE_OPENCL) && HAVE_OPENCL - if(!g_Inited) - { - if(!OpenCL::Initialize()) - return; - - std::string code; - char filename[1024]; - sprintf(filename, "%sOpenCL/TextureDecoder.cl", File::GetUserPath(D_USER_IDX)); - if (!File::ReadFileToString(true, filename, code)) - { - ERROR_LOG(VIDEO, "Failed to load OpenCL code %s - file is missing?", filename); - return; - } - - g_program = OpenCL::CompileProgram(code.c_str()); - - int i = 0; - while(strlen(Decoders[i].name) > 0) { - Decoders[i].kernel = OpenCL::CompileKernel(g_program, Decoders[i].name); - i++; - } - - // Allocating maximal Wii texture size in advance, so that we don't have to allocate/deallocate per texture -#ifndef DEBUG_OPENCL - g_clsrc = clCreateBuffer(OpenCL::GetContext(), CL_MEM_READ_ONLY , 1024 * 1024 * sizeof(u32), NULL, NULL); - g_cldst = clCreateBuffer(OpenCL::GetContext(), CL_MEM_WRITE_ONLY, 1024 * 1024 * sizeof(u32), NULL, NULL); -#endif - - g_Inited = true; - } -#endif -} - -void TexDecoder_OpenCL_Shutdown() { -#if defined(HAVE_OPENCL) && HAVE_OPENCL && !defined(DEBUG_OPENCL) - - clReleaseProgram(g_program); - int i = 0; - while(strlen(Decoders[i].name) > 0) - { - clReleaseKernel(Decoders[i].kernel); - i++; - } - - if(g_clsrc) - clReleaseMemObject(g_clsrc); - - if(g_cldst) - clReleaseMemObject(g_cldst); - - g_Inited = false; -#endif -} - -PC_TexFormat TexDecoder_Decode_OpenCL(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt) -{ -#if defined(HAVE_OPENCL) && HAVE_OPENCL - cl_int err; - cl_kernel kernelToRun = Decoders[0].kernel; - float sizeOfDst = sizeof(u8), sizeOfSrc = sizeof(u8), xSkip, ySkip; - PC_TexFormat formatResult; - - switch(texformat) - { - case GX_TF_I4: - kernelToRun = Decoders[0].kernel; - sizeOfSrc = sizeof(u8) / 2.0f; - sizeOfDst = sizeof(u8); - xSkip = 8; - ySkip = 8; - formatResult = PC_TEX_FMT_I4_AS_I8; - break; - case GX_TF_I8: - kernelToRun = Decoders[1].kernel; - sizeOfSrc = sizeOfDst = sizeof(u8); - xSkip = 8; - ySkip = 4; - formatResult = PC_TEX_FMT_I8; - break; - case GX_TF_IA4: - kernelToRun = Decoders[2].kernel; - sizeOfSrc = sizeof(u8); - sizeOfDst = sizeof(u16); - xSkip = 8; - ySkip = 4; - formatResult = PC_TEX_FMT_IA4_AS_IA8; - break; - case GX_TF_IA8: - kernelToRun = Decoders[3].kernel; - sizeOfSrc = sizeOfDst = sizeof(u16); - xSkip = 4; - ySkip = 4; - formatResult = PC_TEX_FMT_IA8; - break; - case GX_TF_RGBA8: - kernelToRun = Decoders[4].kernel; - sizeOfSrc = sizeOfDst = sizeof(u32); - xSkip = 4; - ySkip = 4; - formatResult = PC_TEX_FMT_BGRA32; - break; - case GX_TF_RGB565: - kernelToRun = Decoders[5].kernel; - sizeOfSrc = sizeOfDst = sizeof(u16); - xSkip = 4; - ySkip = 4; - formatResult = PC_TEX_FMT_RGB565; - break; - case GX_TF_RGB5A3: - // Doesn't decode correctly - // See Sonic Adventure 2: Battle opening sequence - return PC_TEX_FMT_NONE; - kernelToRun = Decoders[6].kernel; - sizeOfSrc = sizeof(u16); - sizeOfDst = sizeof(u32); - xSkip = 4; - ySkip = 4; - formatResult = PC_TEX_FMT_BGRA32; - break; - case GX_TF_CMPR: - // Doesn't decode correctly - return PC_TEX_FMT_NONE; - kernelToRun = Decoders[7].kernel; - sizeOfSrc = sizeof(u8) / 2.0f; - sizeOfDst = sizeof(u32); - xSkip = 8; - ySkip = 8; - formatResult = PC_TEX_FMT_BGRA32; - break; - default: - return PC_TEX_FMT_NONE; - } - -#ifdef DEBUG_OPENCL - g_clsrc = clCreateBuffer(OpenCL::GetContext(), CL_MEM_READ_ONLY , 1024 * 1024 * sizeof(u32), NULL, NULL); - g_cldst = clCreateBuffer(OpenCL::GetContext(), CL_MEM_WRITE_ONLY, 1024 * 1024 * sizeof(u32), NULL, NULL); -#endif - - clEnqueueWriteBuffer(OpenCL::GetCommandQueue(), g_clsrc, CL_TRUE, 0, (size_t)(width * height * sizeOfSrc), src, 0, NULL, NULL); - - clSetKernelArg(kernelToRun, 0, sizeof(cl_mem), &g_cldst); - clSetKernelArg(kernelToRun, 1, sizeof(cl_mem), &g_clsrc); - clSetKernelArg(kernelToRun, 2, sizeof(cl_int), &width); - - size_t global[] = { (size_t)(width / xSkip), (size_t)(height / ySkip) }; - - // No work-groups for now - /* - size_t local; - err = clGetKernelWorkGroupInfo(kernelToRun, OpenCL::device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, NULL); - if(err) - PanicAlert("Error obtaining work-group information"); - */ - - err = clEnqueueNDRangeKernel(OpenCL::GetCommandQueue(), kernelToRun, 2, NULL, global, NULL, 0, NULL, NULL); - if(err) - OpenCL::HandleCLError(err, "Failed to enqueue kernel"); - - clFinish(OpenCL::GetCommandQueue()); - - clEnqueueReadBuffer(OpenCL::GetCommandQueue(), g_cldst, CL_TRUE, 0, (size_t)(width * height * sizeOfDst), dst, 0, NULL, NULL); - -#ifdef DEBUG_OPENCL - clReleaseMemObject(g_clsrc); - clReleaseMemObject(g_cldst); -#endif - - return formatResult; -#else - return PC_TEX_FMT_NONE; -#endif - - return PC_TEX_FMT_NONE; -} - +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "OCLTextureDecoder.h" + +#include "OpenCL.h" +#include "FileUtil.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +//#define DEBUG_OPENCL + +struct sDecoders +{ + const char name[256]; // kernel name + cl_kernel kernel; // compute kernel +}; + +cl_program g_program; +// NULL terminated set of kernels +sDecoders Decoders[] = { +{"DecodeI4", NULL}, +{"DecodeI8", NULL}, +{"DecodeIA4", NULL}, +{"DecodeIA8", NULL}, +{"DecodeRGBA8", NULL}, +{"DecodeRGB565", NULL}, +{"DecodeRGB5A3", NULL}, +{"DecodeCMPR", NULL}, +{"", NULL}, +}; + +bool g_Inited = false; +cl_mem g_clsrc, g_cldst; // texture buffer memory objects + +void TexDecoder_OpenCL_Initialize() { +#if defined(HAVE_OPENCL) && HAVE_OPENCL + if(!g_Inited) + { + if(!OpenCL::Initialize()) + return; + + std::string code; + char filename[1024]; + sprintf(filename, "%sOpenCL/TextureDecoder.cl", File::GetUserPath(D_USER_IDX)); + if (!File::ReadFileToString(true, filename, code)) + { + ERROR_LOG(VIDEO, "Failed to load OpenCL code %s - file is missing?", filename); + return; + } + + g_program = OpenCL::CompileProgram(code.c_str()); + + int i = 0; + while(strlen(Decoders[i].name) > 0) { + Decoders[i].kernel = OpenCL::CompileKernel(g_program, Decoders[i].name); + i++; + } + + // Allocating maximal Wii texture size in advance, so that we don't have to allocate/deallocate per texture +#ifndef DEBUG_OPENCL + g_clsrc = clCreateBuffer(OpenCL::GetContext(), CL_MEM_READ_ONLY , 1024 * 1024 * sizeof(u32), NULL, NULL); + g_cldst = clCreateBuffer(OpenCL::GetContext(), CL_MEM_WRITE_ONLY, 1024 * 1024 * sizeof(u32), NULL, NULL); +#endif + + g_Inited = true; + } +#endif +} + +void TexDecoder_OpenCL_Shutdown() { +#if defined(HAVE_OPENCL) && HAVE_OPENCL && !defined(DEBUG_OPENCL) + + clReleaseProgram(g_program); + int i = 0; + while(strlen(Decoders[i].name) > 0) + { + clReleaseKernel(Decoders[i].kernel); + i++; + } + + if(g_clsrc) + clReleaseMemObject(g_clsrc); + + if(g_cldst) + clReleaseMemObject(g_cldst); + + g_Inited = false; +#endif +} + +PC_TexFormat TexDecoder_Decode_OpenCL(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt) +{ +#if defined(HAVE_OPENCL) && HAVE_OPENCL + cl_int err; + cl_kernel kernelToRun = Decoders[0].kernel; + float sizeOfDst = sizeof(u8), sizeOfSrc = sizeof(u8), xSkip, ySkip; + PC_TexFormat formatResult; + + switch(texformat) + { + case GX_TF_I4: + kernelToRun = Decoders[0].kernel; + sizeOfSrc = sizeof(u8) / 2.0f; + sizeOfDst = sizeof(u8); + xSkip = 8; + ySkip = 8; + formatResult = PC_TEX_FMT_I4_AS_I8; + break; + case GX_TF_I8: + kernelToRun = Decoders[1].kernel; + sizeOfSrc = sizeOfDst = sizeof(u8); + xSkip = 8; + ySkip = 4; + formatResult = PC_TEX_FMT_I8; + break; + case GX_TF_IA4: + kernelToRun = Decoders[2].kernel; + sizeOfSrc = sizeof(u8); + sizeOfDst = sizeof(u16); + xSkip = 8; + ySkip = 4; + formatResult = PC_TEX_FMT_IA4_AS_IA8; + break; + case GX_TF_IA8: + kernelToRun = Decoders[3].kernel; + sizeOfSrc = sizeOfDst = sizeof(u16); + xSkip = 4; + ySkip = 4; + formatResult = PC_TEX_FMT_IA8; + break; + case GX_TF_RGBA8: + kernelToRun = Decoders[4].kernel; + sizeOfSrc = sizeOfDst = sizeof(u32); + xSkip = 4; + ySkip = 4; + formatResult = PC_TEX_FMT_BGRA32; + break; + case GX_TF_RGB565: + kernelToRun = Decoders[5].kernel; + sizeOfSrc = sizeOfDst = sizeof(u16); + xSkip = 4; + ySkip = 4; + formatResult = PC_TEX_FMT_RGB565; + break; + case GX_TF_RGB5A3: + // Doesn't decode correctly + // See Sonic Adventure 2: Battle opening sequence + return PC_TEX_FMT_NONE; + kernelToRun = Decoders[6].kernel; + sizeOfSrc = sizeof(u16); + sizeOfDst = sizeof(u32); + xSkip = 4; + ySkip = 4; + formatResult = PC_TEX_FMT_BGRA32; + break; + case GX_TF_CMPR: + // Doesn't decode correctly + return PC_TEX_FMT_NONE; + kernelToRun = Decoders[7].kernel; + sizeOfSrc = sizeof(u8) / 2.0f; + sizeOfDst = sizeof(u32); + xSkip = 8; + ySkip = 8; + formatResult = PC_TEX_FMT_BGRA32; + break; + default: + return PC_TEX_FMT_NONE; + } + +#ifdef DEBUG_OPENCL + g_clsrc = clCreateBuffer(OpenCL::GetContext(), CL_MEM_READ_ONLY , 1024 * 1024 * sizeof(u32), NULL, NULL); + g_cldst = clCreateBuffer(OpenCL::GetContext(), CL_MEM_WRITE_ONLY, 1024 * 1024 * sizeof(u32), NULL, NULL); +#endif + + clEnqueueWriteBuffer(OpenCL::GetCommandQueue(), g_clsrc, CL_TRUE, 0, (size_t)(width * height * sizeOfSrc), src, 0, NULL, NULL); + + clSetKernelArg(kernelToRun, 0, sizeof(cl_mem), &g_cldst); + clSetKernelArg(kernelToRun, 1, sizeof(cl_mem), &g_clsrc); + clSetKernelArg(kernelToRun, 2, sizeof(cl_int), &width); + + size_t global[] = { (size_t)(width / xSkip), (size_t)(height / ySkip) }; + + // No work-groups for now + /* + size_t local; + err = clGetKernelWorkGroupInfo(kernelToRun, OpenCL::device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, NULL); + if(err) + PanicAlert("Error obtaining work-group information"); + */ + + err = clEnqueueNDRangeKernel(OpenCL::GetCommandQueue(), kernelToRun, 2, NULL, global, NULL, 0, NULL, NULL); + if(err) + OpenCL::HandleCLError(err, "Failed to enqueue kernel"); + + clFinish(OpenCL::GetCommandQueue()); + + clEnqueueReadBuffer(OpenCL::GetCommandQueue(), g_cldst, CL_TRUE, 0, (size_t)(width * height * sizeOfDst), dst, 0, NULL, NULL); + +#ifdef DEBUG_OPENCL + clReleaseMemObject(g_clsrc); + clReleaseMemObject(g_cldst); +#endif + + return formatResult; +#else + return PC_TEX_FMT_NONE; +#endif + + return PC_TEX_FMT_NONE; +} + diff --git a/Source/Core/VideoCommon/Src/PixelEngine.cpp b/Source/Core/VideoCommon/Src/PixelEngine.cpp index 9284dd6d3f..920041912b 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.cpp +++ b/Source/Core/VideoCommon/Src/PixelEngine.cpp @@ -1,380 +1,380 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -// http://developer.nvidia.com/object/General_FAQ.html#t6 !!!!! - - - -#include "Common.h" -#include "VideoCommon.h" -#include "ChunkFile.h" -#include "Atomic.h" - -#include "PixelEngine.h" -#include "CommandProcessor.h" - -namespace PixelEngine -{ - -union UPEZConfReg -{ - u16 Hex; - struct - { - unsigned ZCompEnable : 1; // Z Comparator Enable - unsigned Function : 3; - unsigned ZUpdEnable : 1; - unsigned : 11; - }; -}; - -union UPEAlphaConfReg -{ - u16 Hex; - struct - { - unsigned BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT - unsigned BMLogic : 1; // GX_BM_LOGIC - unsigned Dither : 1; - unsigned ColorUpdEnable : 1; - unsigned AlphaUpdEnable : 1; - unsigned DstFactor : 3; - unsigned SrcFactor : 3; - unsigned Substract : 1; // Additive mode by default - unsigned BlendOperator : 4; - }; -}; - -union UPEDstAlphaConfReg -{ - u16 Hex; - struct - { - unsigned DstAlpha : 8; - unsigned Enable : 1; - unsigned : 7; - }; -}; - -union UPEAlphaModeConfReg -{ - u16 Hex; - struct - { - unsigned Threshold : 8; - unsigned CompareMode : 8; - }; -}; - -// Not sure about this reg... -union UPEAlphaReadReg -{ - u16 Hex; - struct - { - unsigned ReadMode : 3; - unsigned : 13; - }; -}; - -// fifo Control Register -union UPECtrlReg -{ - struct - { - unsigned PETokenEnable : 1; - unsigned PEFinishEnable : 1; - unsigned PEToken : 1; // write only - unsigned PEFinish : 1; // write only - unsigned : 12; - }; - u16 Hex; - UPECtrlReg() {Hex = 0; } - UPECtrlReg(u16 _hex) {Hex = _hex; } -}; - -// STATE_TO_SAVE -static UPEZConfReg m_ZConf; -static UPEAlphaConfReg m_AlphaConf; -static UPEDstAlphaConfReg m_DstAlphaConf; -static UPEAlphaModeConfReg m_AlphaModeConf; -static UPEAlphaReadReg m_AlphaRead; -static UPECtrlReg m_Control; -//static u16 m_Token; // token value most recently encountered - -static bool g_bSignalTokenInterrupt; -static bool g_bSignalFinishInterrupt; - -static int et_SetTokenOnMainThread; -static int et_SetFinishOnMainThread; - -u16 bbox[4]; -bool bbox_active; - -enum -{ - INT_CAUSE_PE_TOKEN = 0x200, // GP Token - INT_CAUSE_PE_FINISH = 0x400, // GP Finished -}; - -void DoState(PointerWrap &p) -{ - p.Do(m_ZConf); - p.Do(m_AlphaConf); - p.Do(m_DstAlphaConf); - p.Do(m_AlphaModeConf); - p.Do(m_AlphaRead); - p.Do(m_Control); - p.Do(CommandProcessor::fifo.PEToken); - - p.Do(g_bSignalTokenInterrupt); - p.Do(g_bSignalFinishInterrupt); - - p.Do(bbox); - p.Do(bbox_active); -} - -void UpdateInterrupts(); - -void SetToken_OnMainThread(u64 userdata, int cyclesLate); -void SetFinish_OnMainThread(u64 userdata, int cyclesLate); - -void Init() -{ - m_Control.Hex = 0; - - et_SetTokenOnMainThread = g_VideoInitialize.pRegisterEvent("SetToken", SetToken_OnMainThread); - et_SetFinishOnMainThread = g_VideoInitialize.pRegisterEvent("SetFinish", SetFinish_OnMainThread); - - bbox[0] = 0x80; - bbox[1] = 0xA0; - bbox[2] = 0x80; - bbox[3] = 0xA0; - - bbox_active = false; -} - -void Read16(u16& _uReturnValue, const u32 _iAddress) -{ - DEBUG_LOG(PIXELENGINE, "(r16) 0x%08x", _iAddress); - - switch (_iAddress & 0xFFF) - { - // CPU Direct Access EFB Raster State Config - case PE_ZCONF: - _uReturnValue = m_ZConf.Hex; - INFO_LOG(PIXELENGINE, "(r16) ZCONF"); - break; - case PE_ALPHACONF: - // Most games read this early. no idea why. - _uReturnValue = m_AlphaConf.Hex; - INFO_LOG(PIXELENGINE, "(r16) ALPHACONF"); - break; - case PE_DSTALPHACONF: - _uReturnValue = m_DstAlphaConf.Hex; - INFO_LOG(PIXELENGINE, "(r16) DSTALPHACONF"); - break; - case PE_ALPHAMODE: - _uReturnValue = m_AlphaModeConf.Hex; - INFO_LOG(PIXELENGINE, "(r16) ALPHAMODE"); - break; - case PE_ALPHAREAD: - _uReturnValue = m_AlphaRead.Hex; - WARN_LOG(PIXELENGINE, "(r16) ALPHAREAD"); - break; - - case PE_CTRL_REGISTER: - _uReturnValue = m_Control.Hex; - INFO_LOG(PIXELENGINE, "(r16) CTRL_REGISTER : %04x", _uReturnValue); - break; - - case PE_TOKEN_REG: - _uReturnValue = CommandProcessor::fifo.PEToken; - INFO_LOG(PIXELENGINE, "(r16) TOKEN_REG : %04x", _uReturnValue); - break; - - // The return values for these BBOX registers need to be gotten from the bounding box of the object. - // See http://code.google.com/p/dolphin-emu/issues/detail?id=360#c74 for more details. - - // 0x80, 0xa0, 0x80, 0xa0 makes Paper Mario happy. - case PE_BBOX_LEFT: _uReturnValue = bbox[0]; INFO_LOG(PIXELENGINE, "R: BBOX_LEFT = %i", bbox[0]); bbox_active = false; break; - case PE_BBOX_RIGHT: _uReturnValue = bbox[1]; INFO_LOG(PIXELENGINE, "R: BBOX_RIGHT = %i", bbox[1]); bbox_active = false; break; - case PE_BBOX_TOP: _uReturnValue = bbox[2]; INFO_LOG(PIXELENGINE, "R: BBOX_TOP = %i", bbox[2]); bbox_active = false; break; - case PE_BBOX_BOTTOM: _uReturnValue = bbox[3]; INFO_LOG(PIXELENGINE, "R: BBOX_BOTTOM = %i", bbox[3]); bbox_active = false; break; - - case PE_PERF_0L: - case PE_PERF_0H: - case PE_PERF_1L: - case PE_PERF_1H: - case PE_PERF_2L: - case PE_PERF_2H: - case PE_PERF_3L: - case PE_PERF_3H: - case PE_PERF_4L: - case PE_PERF_4H: - case PE_PERF_5L: - case PE_PERF_5H: - INFO_LOG(PIXELENGINE, "(r16) perf counter @ %08x", _iAddress); - break; - - default: - INFO_LOG(PIXELENGINE, "(r16) unknown @ %08x", _iAddress); - _uReturnValue = 1; - break; - } -} - -void Write16(const u16 _iValue, const u32 _iAddress) -{ - switch (_iAddress & 0xFFF) - { - // CPU Direct Access EFB Raster State Config - case PE_ZCONF: - m_ZConf.Hex = _iValue; - INFO_LOG(PIXELENGINE, "(w16) ZCONF: %02x", _iValue); - break; - case PE_ALPHACONF: - m_AlphaConf.Hex = _iValue; - INFO_LOG(PIXELENGINE, "(w16) ALPHACONF: %02x", _iValue); - break; - case PE_DSTALPHACONF: - m_DstAlphaConf.Hex = _iValue; - INFO_LOG(PIXELENGINE, "(w16) DSTALPHACONF: %02x", _iValue); - break; - case PE_ALPHAMODE: - m_AlphaModeConf.Hex = _iValue; - INFO_LOG(PIXELENGINE, "(w16) ALPHAMODE: %02x", _iValue); - break; - case PE_ALPHAREAD: - m_AlphaRead.Hex = _iValue; - INFO_LOG(PIXELENGINE, "(w16) ALPHAREAD: %02x", _iValue); - break; - - case PE_CTRL_REGISTER: - { - UPECtrlReg tmpCtrl(_iValue); - - if (tmpCtrl.PEToken) g_bSignalTokenInterrupt = false; - if (tmpCtrl.PEFinish) g_bSignalFinishInterrupt = false; - - m_Control.PETokenEnable = tmpCtrl.PETokenEnable; - m_Control.PEFinishEnable = tmpCtrl.PEFinishEnable; - m_Control.PEToken = 0; // this flag is write only - m_Control.PEFinish = 0; // this flag is write only - - DEBUG_LOG(PIXELENGINE, "(w16) CTRL_REGISTER: 0x%04x", _iValue); - UpdateInterrupts(); - } - break; - - case PE_TOKEN_REG: - //LOG(PIXELENGINE,"WEIRD: program wrote token: %i",_iValue); - PanicAlert("(w16) WTF? PowerPC program wrote token: %i", _iValue); - //only the gx pipeline is supposed to be able to write here - //g_token = _iValue; - break; - - default: - WARN_LOG(PIXELENGINE, "(w16) unknown %04x @ %08x", _iValue, _iAddress); - break; - } -} - -void Write32(const u32 _iValue, const u32 _iAddress) -{ - WARN_LOG(PIXELENGINE, "(w32) 0x%08x @ 0x%08x IGNORING...",_iValue,_iAddress); -} - -bool AllowIdleSkipping() -{ - return !g_VideoInitialize.bOnThread|| (!m_Control.PETokenEnable && !m_Control.PEFinishEnable); -} - -void UpdateInterrupts() -{ - // check if there is a token-interrupt - if (g_bSignalTokenInterrupt & m_Control.PETokenEnable) - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, true); - else - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, false); - - // check if there is a finish-interrupt - if (g_bSignalFinishInterrupt & m_Control.PEFinishEnable) - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, true); - else - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, false); -} - -// TODO(mb2): Refactor SetTokenINT_OnMainThread(u64 userdata, int cyclesLate). -// Think about the right order between tokenVal and tokenINT... one day maybe. -// Cleanup++ - -// Called only if BPMEM_PE_TOKEN_INT_ID is ack by GP -void SetToken_OnMainThread(u64 userdata, int cyclesLate) -{ - //if (userdata >> 16) - //{ - g_bSignalTokenInterrupt = true; - //_dbg_assert_msg_(PIXELENGINE, (CommandProcessor::fifo.PEToken == (userdata&0xFFFF)), "WTF? BPMEM_PE_TOKEN_INT_ID's token != BPMEM_PE_TOKEN_ID's token" ); - INFO_LOG(PIXELENGINE, "VIDEO Plugin raises INT_CAUSE_PE_TOKEN (btw, token: %04x)", CommandProcessor::fifo.PEToken); - UpdateInterrupts(); - //} - //else - // LOGV(PIXELENGINE, 1, "VIDEO Plugin wrote token: %i", CommandProcessor::fifo.PEToken); -} - -void SetFinish_OnMainThread(u64 userdata, int cyclesLate) -{ - g_bSignalFinishInterrupt = 1; - UpdateInterrupts(); -} - -// SetToken -// THIS IS EXECUTED FROM VIDEO THREAD -void SetToken(const u16 _token, const int _bSetTokenAcknowledge) -{ - // TODO?: set-token-value and set-token-INT could be merged since set-token-INT own the token value. - if (_bSetTokenAcknowledge) // set token INT - { - // This seems smelly... - CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack since PEToken seems to be a frame-finish too - g_VideoInitialize.pScheduleEvent_Threadsafe( - 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16)); - } - else // set token value - { - // we do it directly from videoThread because of - // Super Monkey Ball - // XXX: No 16-bit atomic store available, so cheat and use 32-bit. - // That's what we've always done. We're counting on fifo.PEToken to be - // 4-byte padded. - Common::AtomicStore(*(volatile u32*)&CommandProcessor::fifo.PEToken, _token); - } -} - -// SetFinish -// THIS IS EXECUTED FROM VIDEO THREAD (BPStructs.cpp) when a new frame has been drawn -void SetFinish() -{ - CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack - g_VideoInitialize.pScheduleEvent_Threadsafe( - 0, et_SetFinishOnMainThread, 0); - INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); -} - -} // end of namespace PixelEngine +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// http://developer.nvidia.com/object/General_FAQ.html#t6 !!!!! + + + +#include "Common.h" +#include "VideoCommon.h" +#include "ChunkFile.h" +#include "Atomic.h" + +#include "PixelEngine.h" +#include "CommandProcessor.h" + +namespace PixelEngine +{ + +union UPEZConfReg +{ + u16 Hex; + struct + { + unsigned ZCompEnable : 1; // Z Comparator Enable + unsigned Function : 3; + unsigned ZUpdEnable : 1; + unsigned : 11; + }; +}; + +union UPEAlphaConfReg +{ + u16 Hex; + struct + { + unsigned BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT + unsigned BMLogic : 1; // GX_BM_LOGIC + unsigned Dither : 1; + unsigned ColorUpdEnable : 1; + unsigned AlphaUpdEnable : 1; + unsigned DstFactor : 3; + unsigned SrcFactor : 3; + unsigned Substract : 1; // Additive mode by default + unsigned BlendOperator : 4; + }; +}; + +union UPEDstAlphaConfReg +{ + u16 Hex; + struct + { + unsigned DstAlpha : 8; + unsigned Enable : 1; + unsigned : 7; + }; +}; + +union UPEAlphaModeConfReg +{ + u16 Hex; + struct + { + unsigned Threshold : 8; + unsigned CompareMode : 8; + }; +}; + +// Not sure about this reg... +union UPEAlphaReadReg +{ + u16 Hex; + struct + { + unsigned ReadMode : 3; + unsigned : 13; + }; +}; + +// fifo Control Register +union UPECtrlReg +{ + struct + { + unsigned PETokenEnable : 1; + unsigned PEFinishEnable : 1; + unsigned PEToken : 1; // write only + unsigned PEFinish : 1; // write only + unsigned : 12; + }; + u16 Hex; + UPECtrlReg() {Hex = 0; } + UPECtrlReg(u16 _hex) {Hex = _hex; } +}; + +// STATE_TO_SAVE +static UPEZConfReg m_ZConf; +static UPEAlphaConfReg m_AlphaConf; +static UPEDstAlphaConfReg m_DstAlphaConf; +static UPEAlphaModeConfReg m_AlphaModeConf; +static UPEAlphaReadReg m_AlphaRead; +static UPECtrlReg m_Control; +//static u16 m_Token; // token value most recently encountered + +static bool g_bSignalTokenInterrupt; +static bool g_bSignalFinishInterrupt; + +static int et_SetTokenOnMainThread; +static int et_SetFinishOnMainThread; + +u16 bbox[4]; +bool bbox_active; + +enum +{ + INT_CAUSE_PE_TOKEN = 0x200, // GP Token + INT_CAUSE_PE_FINISH = 0x400, // GP Finished +}; + +void DoState(PointerWrap &p) +{ + p.Do(m_ZConf); + p.Do(m_AlphaConf); + p.Do(m_DstAlphaConf); + p.Do(m_AlphaModeConf); + p.Do(m_AlphaRead); + p.Do(m_Control); + p.Do(CommandProcessor::fifo.PEToken); + + p.Do(g_bSignalTokenInterrupt); + p.Do(g_bSignalFinishInterrupt); + + p.Do(bbox); + p.Do(bbox_active); +} + +void UpdateInterrupts(); + +void SetToken_OnMainThread(u64 userdata, int cyclesLate); +void SetFinish_OnMainThread(u64 userdata, int cyclesLate); + +void Init() +{ + m_Control.Hex = 0; + + et_SetTokenOnMainThread = g_VideoInitialize.pRegisterEvent("SetToken", SetToken_OnMainThread); + et_SetFinishOnMainThread = g_VideoInitialize.pRegisterEvent("SetFinish", SetFinish_OnMainThread); + + bbox[0] = 0x80; + bbox[1] = 0xA0; + bbox[2] = 0x80; + bbox[3] = 0xA0; + + bbox_active = false; +} + +void Read16(u16& _uReturnValue, const u32 _iAddress) +{ + DEBUG_LOG(PIXELENGINE, "(r16) 0x%08x", _iAddress); + + switch (_iAddress & 0xFFF) + { + // CPU Direct Access EFB Raster State Config + case PE_ZCONF: + _uReturnValue = m_ZConf.Hex; + INFO_LOG(PIXELENGINE, "(r16) ZCONF"); + break; + case PE_ALPHACONF: + // Most games read this early. no idea why. + _uReturnValue = m_AlphaConf.Hex; + INFO_LOG(PIXELENGINE, "(r16) ALPHACONF"); + break; + case PE_DSTALPHACONF: + _uReturnValue = m_DstAlphaConf.Hex; + INFO_LOG(PIXELENGINE, "(r16) DSTALPHACONF"); + break; + case PE_ALPHAMODE: + _uReturnValue = m_AlphaModeConf.Hex; + INFO_LOG(PIXELENGINE, "(r16) ALPHAMODE"); + break; + case PE_ALPHAREAD: + _uReturnValue = m_AlphaRead.Hex; + WARN_LOG(PIXELENGINE, "(r16) ALPHAREAD"); + break; + + case PE_CTRL_REGISTER: + _uReturnValue = m_Control.Hex; + INFO_LOG(PIXELENGINE, "(r16) CTRL_REGISTER : %04x", _uReturnValue); + break; + + case PE_TOKEN_REG: + _uReturnValue = CommandProcessor::fifo.PEToken; + INFO_LOG(PIXELENGINE, "(r16) TOKEN_REG : %04x", _uReturnValue); + break; + + // The return values for these BBOX registers need to be gotten from the bounding box of the object. + // See http://code.google.com/p/dolphin-emu/issues/detail?id=360#c74 for more details. + + // 0x80, 0xa0, 0x80, 0xa0 makes Paper Mario happy. + case PE_BBOX_LEFT: _uReturnValue = bbox[0]; INFO_LOG(PIXELENGINE, "R: BBOX_LEFT = %i", bbox[0]); bbox_active = false; break; + case PE_BBOX_RIGHT: _uReturnValue = bbox[1]; INFO_LOG(PIXELENGINE, "R: BBOX_RIGHT = %i", bbox[1]); bbox_active = false; break; + case PE_BBOX_TOP: _uReturnValue = bbox[2]; INFO_LOG(PIXELENGINE, "R: BBOX_TOP = %i", bbox[2]); bbox_active = false; break; + case PE_BBOX_BOTTOM: _uReturnValue = bbox[3]; INFO_LOG(PIXELENGINE, "R: BBOX_BOTTOM = %i", bbox[3]); bbox_active = false; break; + + case PE_PERF_0L: + case PE_PERF_0H: + case PE_PERF_1L: + case PE_PERF_1H: + case PE_PERF_2L: + case PE_PERF_2H: + case PE_PERF_3L: + case PE_PERF_3H: + case PE_PERF_4L: + case PE_PERF_4H: + case PE_PERF_5L: + case PE_PERF_5H: + INFO_LOG(PIXELENGINE, "(r16) perf counter @ %08x", _iAddress); + break; + + default: + INFO_LOG(PIXELENGINE, "(r16) unknown @ %08x", _iAddress); + _uReturnValue = 1; + break; + } +} + +void Write16(const u16 _iValue, const u32 _iAddress) +{ + switch (_iAddress & 0xFFF) + { + // CPU Direct Access EFB Raster State Config + case PE_ZCONF: + m_ZConf.Hex = _iValue; + INFO_LOG(PIXELENGINE, "(w16) ZCONF: %02x", _iValue); + break; + case PE_ALPHACONF: + m_AlphaConf.Hex = _iValue; + INFO_LOG(PIXELENGINE, "(w16) ALPHACONF: %02x", _iValue); + break; + case PE_DSTALPHACONF: + m_DstAlphaConf.Hex = _iValue; + INFO_LOG(PIXELENGINE, "(w16) DSTALPHACONF: %02x", _iValue); + break; + case PE_ALPHAMODE: + m_AlphaModeConf.Hex = _iValue; + INFO_LOG(PIXELENGINE, "(w16) ALPHAMODE: %02x", _iValue); + break; + case PE_ALPHAREAD: + m_AlphaRead.Hex = _iValue; + INFO_LOG(PIXELENGINE, "(w16) ALPHAREAD: %02x", _iValue); + break; + + case PE_CTRL_REGISTER: + { + UPECtrlReg tmpCtrl(_iValue); + + if (tmpCtrl.PEToken) g_bSignalTokenInterrupt = false; + if (tmpCtrl.PEFinish) g_bSignalFinishInterrupt = false; + + m_Control.PETokenEnable = tmpCtrl.PETokenEnable; + m_Control.PEFinishEnable = tmpCtrl.PEFinishEnable; + m_Control.PEToken = 0; // this flag is write only + m_Control.PEFinish = 0; // this flag is write only + + DEBUG_LOG(PIXELENGINE, "(w16) CTRL_REGISTER: 0x%04x", _iValue); + UpdateInterrupts(); + } + break; + + case PE_TOKEN_REG: + //LOG(PIXELENGINE,"WEIRD: program wrote token: %i",_iValue); + PanicAlert("(w16) WTF? PowerPC program wrote token: %i", _iValue); + //only the gx pipeline is supposed to be able to write here + //g_token = _iValue; + break; + + default: + WARN_LOG(PIXELENGINE, "(w16) unknown %04x @ %08x", _iValue, _iAddress); + break; + } +} + +void Write32(const u32 _iValue, const u32 _iAddress) +{ + WARN_LOG(PIXELENGINE, "(w32) 0x%08x @ 0x%08x IGNORING...",_iValue,_iAddress); +} + +bool AllowIdleSkipping() +{ + return !g_VideoInitialize.bOnThread|| (!m_Control.PETokenEnable && !m_Control.PEFinishEnable); +} + +void UpdateInterrupts() +{ + // check if there is a token-interrupt + if (g_bSignalTokenInterrupt & m_Control.PETokenEnable) + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, true); + else + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, false); + + // check if there is a finish-interrupt + if (g_bSignalFinishInterrupt & m_Control.PEFinishEnable) + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, true); + else + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, false); +} + +// TODO(mb2): Refactor SetTokenINT_OnMainThread(u64 userdata, int cyclesLate). +// Think about the right order between tokenVal and tokenINT... one day maybe. +// Cleanup++ + +// Called only if BPMEM_PE_TOKEN_INT_ID is ack by GP +void SetToken_OnMainThread(u64 userdata, int cyclesLate) +{ + //if (userdata >> 16) + //{ + g_bSignalTokenInterrupt = true; + //_dbg_assert_msg_(PIXELENGINE, (CommandProcessor::fifo.PEToken == (userdata&0xFFFF)), "WTF? BPMEM_PE_TOKEN_INT_ID's token != BPMEM_PE_TOKEN_ID's token" ); + INFO_LOG(PIXELENGINE, "VIDEO Plugin raises INT_CAUSE_PE_TOKEN (btw, token: %04x)", CommandProcessor::fifo.PEToken); + UpdateInterrupts(); + //} + //else + // LOGV(PIXELENGINE, 1, "VIDEO Plugin wrote token: %i", CommandProcessor::fifo.PEToken); +} + +void SetFinish_OnMainThread(u64 userdata, int cyclesLate) +{ + g_bSignalFinishInterrupt = 1; + UpdateInterrupts(); +} + +// SetToken +// THIS IS EXECUTED FROM VIDEO THREAD +void SetToken(const u16 _token, const int _bSetTokenAcknowledge) +{ + // TODO?: set-token-value and set-token-INT could be merged since set-token-INT own the token value. + if (_bSetTokenAcknowledge) // set token INT + { + // This seems smelly... + CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack since PEToken seems to be a frame-finish too + g_VideoInitialize.pScheduleEvent_Threadsafe( + 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16)); + } + else // set token value + { + // we do it directly from videoThread because of + // Super Monkey Ball + // XXX: No 16-bit atomic store available, so cheat and use 32-bit. + // That's what we've always done. We're counting on fifo.PEToken to be + // 4-byte padded. + Common::AtomicStore(*(volatile u32*)&CommandProcessor::fifo.PEToken, _token); + } +} + +// SetFinish +// THIS IS EXECUTED FROM VIDEO THREAD (BPStructs.cpp) when a new frame has been drawn +void SetFinish() +{ + CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack + g_VideoInitialize.pScheduleEvent_Threadsafe( + 0, et_SetFinishOnMainThread, 0); + INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); +} + +} // end of namespace PixelEngine diff --git a/Source/Core/VideoCommon/Src/PixelEngine.h b/Source/Core/VideoCommon/Src/PixelEngine.h index 163b163e03..0043f16b8e 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.h +++ b/Source/Core/VideoCommon/Src/PixelEngine.h @@ -1,78 +1,78 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _PIXELENGINE_H -#define _PIXELENGINE_H - -#include "CommonTypes.h" -class PointerWrap; - -// internal hardware addresses -enum -{ - PE_ZCONF = 0x00, // Z Config - PE_ALPHACONF = 0x02, // Alpha Config - PE_DSTALPHACONF = 0x04, // Destination Alpha Config - PE_ALPHAMODE = 0x06, // Alpha Mode Config - PE_ALPHAREAD = 0x08, // Alpha Read - PE_CTRL_REGISTER = 0x0a, // Control - PE_TOKEN_REG = 0x0e, // Token - PE_BBOX_LEFT = 0x10, // Flip Left - PE_BBOX_RIGHT = 0x12, // Flip Right - PE_BBOX_TOP = 0x14, // Flip Top - PE_BBOX_BOTTOM = 0x16, // Flip Bottom - - // These have not yet been RE:d. They are the perf counters. - PE_PERF_0L = 0x18, - PE_PERF_0H = 0x1a, - PE_PERF_1L = 0x1c, - PE_PERF_1H = 0x1e, - PE_PERF_2L = 0x20, - PE_PERF_2H = 0x22, - PE_PERF_3L = 0x24, - PE_PERF_3H = 0x26, - PE_PERF_4L = 0x28, - PE_PERF_4H = 0x2a, - PE_PERF_5L = 0x2c, - PE_PERF_5H = 0x2e, -}; - -namespace PixelEngine -{ - -void Init(); -void DoState(PointerWrap &p); - -// Read -void Read16(u16& _uReturnValue, const u32 _iAddress); - -// Write -void Write16(const u16 _iValue, const u32 _iAddress); -void Write32(const u32 _iValue, const u32 _iAddress); - -// gfx plugin support -void SetToken(const u16 _token, const int _bSetTokenAcknowledge); -void SetFinish(void); -bool AllowIdleSkipping(); - -// Bounding box functionality. Paper Mario (both) are a couple of the few games that use it. -extern u16 bbox[4]; -extern bool bbox_active; - -} // end of namespace PixelEngine - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _PIXELENGINE_H +#define _PIXELENGINE_H + +#include "CommonTypes.h" +class PointerWrap; + +// internal hardware addresses +enum +{ + PE_ZCONF = 0x00, // Z Config + PE_ALPHACONF = 0x02, // Alpha Config + PE_DSTALPHACONF = 0x04, // Destination Alpha Config + PE_ALPHAMODE = 0x06, // Alpha Mode Config + PE_ALPHAREAD = 0x08, // Alpha Read + PE_CTRL_REGISTER = 0x0a, // Control + PE_TOKEN_REG = 0x0e, // Token + PE_BBOX_LEFT = 0x10, // Flip Left + PE_BBOX_RIGHT = 0x12, // Flip Right + PE_BBOX_TOP = 0x14, // Flip Top + PE_BBOX_BOTTOM = 0x16, // Flip Bottom + + // These have not yet been RE:d. They are the perf counters. + PE_PERF_0L = 0x18, + PE_PERF_0H = 0x1a, + PE_PERF_1L = 0x1c, + PE_PERF_1H = 0x1e, + PE_PERF_2L = 0x20, + PE_PERF_2H = 0x22, + PE_PERF_3L = 0x24, + PE_PERF_3H = 0x26, + PE_PERF_4L = 0x28, + PE_PERF_4H = 0x2a, + PE_PERF_5L = 0x2c, + PE_PERF_5H = 0x2e, +}; + +namespace PixelEngine +{ + +void Init(); +void DoState(PointerWrap &p); + +// Read +void Read16(u16& _uReturnValue, const u32 _iAddress); + +// Write +void Write16(const u16 _iValue, const u32 _iAddress); +void Write32(const u32 _iValue, const u32 _iAddress); + +// gfx plugin support +void SetToken(const u16 _token, const int _bSetTokenAcknowledge); +void SetFinish(void); +bool AllowIdleSkipping(); + +// Bounding box functionality. Paper Mario (both) are a couple of the few games that use it. +extern u16 bbox[4]; +extern bool bbox_active; + +} // end of namespace PixelEngine + +#endif diff --git a/Source/DSPSpy/mem_dump.h b/Source/DSPSpy/mem_dump.h index bf0f956987..b3768f28ca 100644 --- a/Source/DSPSpy/mem_dump.h +++ b/Source/DSPSpy/mem_dump.h @@ -1,532 +1,532 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -unsigned int mem_dump[] __attribute__ ((aligned (64))) = -{ - 0x0c3966ad, 0x0d46ffdf, 0x0b396696, 0x0e5fffd8, - 0x0a446669, 0x0f83ffd0, 0x095a6626, 0x10b4ffc8, - 0x087d65cd, 0x11f0ffbf, 0x07ab655e, 0x1338ffb6, - 0x06e464d9, 0x148cffac, 0x0628643f, 0x15ebffa1, - 0x0577638f, 0x1756ff96, 0x04d162cb, 0x18cbff8a, - 0x043561f3, 0x1a4cff7e, 0x03a46106, 0x1bd7ff71, - 0x031c6007, 0x1d6cff64, 0x029f5ef5, 0x1f0bff56, - 0x022a5dd0, 0x20b3ff48, 0x01be5c9a, 0x2264ff3a, - 0x015b5b53, 0x241eff2c, 0x010159fc, 0x25e0ff1e, - 0x00ae5896, 0x27a9ff10, 0x00635720, 0x297aff02, - 0x001f559d, 0x2b50fef4, 0xffe2540d, 0x2d2cfee8, - 0xffac5270, 0x2f0dfedb, 0xff7c50c7, 0x30f3fed0, - 0xff534f14, 0x32dcfec6, 0xff2e4d57, 0x34c8febd, - 0xff0f4b91, 0x36b6feb6, 0xfef549c2, 0x38a5feb0, - 0xfedf47ed, 0x3a95feac, 0xfece4611, 0x3c85feab, - 0xfec04430, 0x3e74feac, 0xfeb6424a, 0x4060feaf, - 0xfeaf4060, 0x424afeb6, 0xfeac3e74, 0x4430fec0, - 0xfeab3c85, 0x4611fece, 0xfeac3a95, 0x47edfedf, - 0xfeb038a5, 0x49c2fef5, 0xfeb636b6, 0x4b91ff0f, - 0xfebd34c8, 0x4d57ff2e, 0xfec632dc, 0x4f14ff53, - 0xfed030f3, 0x50c7ff7c, 0xfedb2f0d, 0x5270ffac, - 0xfee82d2c, 0x540dffe2, 0xfef42b50, 0x559d001f, - 0xff02297a, 0x57200063, 0xff1027a9, 0x589600ae, - 0xff1e25e0, 0x59fc0101, 0xff2c241e, 0x5b53015b, - 0xff3a2264, 0x5c9a01be, 0xff4820b3, 0x5dd0022a, - 0xff561f0b, 0x5ef5029f, 0xff641d6c, 0x6007031c, - 0xff711bd7, 0x610603a4, 0xff7e1a4c, 0x61f30435, - 0xff8a18cb, 0x62cb04d1, 0xff961756, 0x638f0577, - 0xffa115eb, 0x643f0628, 0xffac148c, 0x64d906e4, - 0xffb61338, 0x655e07ab, 0xffbf11f0, 0x65cd087d, - 0xffc810b4, 0x6626095a, 0xffd00f83, 0x66690a44, - 0xffd80e5f, 0x66960b39, 0xffdf0d46, 0x66ad0c39, - 0x00000c8b, 0x18f82527, 0x30fb3c56, 0x471c5133, - 0x5a8262f1, 0x6a6d70e2, 0x76417a7c, 0x7d897f61, - 0x7fff7f61, 0x7d897a7c, 0x764170e2, 0x6a6d62f1, - 0x5a825133, 0x471c3c56, 0x30fb2527, 0x18f80c8b, - 0x0000f375, 0xe708dad9, 0xcf05c3aa, 0xb8e4aecd, - 0xa57e9d0f, 0x95938f1e, 0x89bf8584, 0x8277809f, - 0x8001809f, 0x82778584, 0x89bf8f1e, 0x95939d0f, - 0xa57eaecd, 0xb8e4c3aa, 0xcf05dad9, 0xe708f375, - 0x000007ff, 0x0fff17ff, 0x1fff27ff, 0x2fff37ff, - 0x3fff47ff, 0x4fff57ff, 0x5fff67ff, 0x6fff77ff, - 0x7fff7800, 0x70006800, 0x60005800, 0x50004800, - 0x40003800, 0x30002800, 0x20001800, 0x10000800, - 0x0000f801, 0xf001e801, 0xe001d801, 0xd001c801, - 0xc001b801, 0xb001a801, 0xa0019801, 0x90018801, - 0x80018800, 0x90009800, 0xa000a800, 0xb000b800, - 0xc000c800, 0xd000d800, 0xe000e800, 0xf000f800, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x682e469b, 0x25080375, 0xe1e2c04f, 0x9ebc7d29, - 0x5b963a03, 0x1870f6dd, 0xd54ab3b7, 0x92247091, - 0x4efe2d6b, 0x0bd8ea45, 0xc8b2a71f, 0x858c63f9, - 0x426620d3, 0xff40ddad, 0xbc1a9a87, 0x78f45761, - 0x35ce143b, 0xf2a8d115, 0xaf828def, 0x6c5c4ac9, - 0x293607a3, 0xe610c47d, 0xa2ea8157, 0x5fc43e31, - 0x1c9efb0b, 0xd978b7e5, 0x965274bf, 0x532c3199, - 0x1006ee73, 0xcce0ab4d, 0x89ba6827, 0x46942501, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x5a825b9c, 0x5cb35dc7, 0x5ed75fe3, 0x60eb61f0, - 0x62f163ee, 0x64e865dd, 0x66cf67bc, 0x68a6698b, - 0x6a6d6b4a, 0x6c236cf8, 0x6dc96e96, 0x6f5e7022, - 0x70e2719d, 0x72547307, 0x73b5745f, 0x750475a5, - 0x764176d8, 0x776b77fa, 0x78847909, 0x79897a05, - 0x7a7c7aee, 0x7b5c7bc5, 0x7c297c88, 0x7ce37d39, - 0x7d897dd5, 0x7e1d7e5f, 0x7e9c7ed5, 0x7f097f37, - 0x7f617f86, 0x7fa67fc1, 0x7fd87fe9, 0x7ff57ffd, - 0x00058100, 0x0040806a, 0x19e08039, 0x8f208039, - 0x8ee0806a, 0x79e00002, 0x8d00000a, 0x803ea5e0, - 0x00038207, 0x5ffb8069, 0xffa0806a, 0x04000003, - 0x82075ffb, 0x806a0860, 0x806a0cc0, 0x00038207, - 0x5ffb806a, 0x1120806a, 0x15800003, 0x82075ffb, - 0x8069ffa0, 0x806a0400, 0x00038207, 0x5ffb806a, - 0x0860806a, 0x0cc00003, 0x82075ffb, 0x806a1120, - 0x806a1580, 0x00038207, 0x5ffb8069, 0xffa0806a, - 0x04000003, 0x82075ffb, 0x806a0860, 0x806a0cc0, - 0x00038207, 0x5ffb806a, 0x1120806a, 0x15800003, - 0x82075ffb, 0x8069ffa0, 0x806a0400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x08000000, 0x00000800, 0x04000400, - 0x1000f800, 0x0e00fa00, 0x0c00fc00, 0x1200f600, - 0x1068f738, 0x12c0f704, 0x1400f400, 0x0800f800, - 0x0400fc00, 0xfc000400, 0xfc000000, 0xf8000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000002, 0x00400004, 0x00075ffb, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00400000, - 0x02d602d6, 0x00000000, 0x00400006, 0x82075ffb, - 0x8069ffa0, 0x806a0400, 0x80398ee0, 0x806a79e0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x803ea5e0, 0x000a0001, - 0x00000000, 0x00000000, 0x00010000, 0x00000000, - 0x806a19e0, 0x80398f20, 0x80398ee0, 0x806a79e0, - 0x806a02c0, 0x806a0720, 0x00000000, 0x5ffb0000, - 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x03a80f40, 0x03e80000, 0x003d003d, 0x003d003d, - 0x00010020, 0x80754380, 0x0d002000, 0x0d600000, - 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, - 0x00010020, 0x80755780, 0x0d000000, 0x0d602000, - 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, - 0x00010038, 0x80756b80, 0x0d004000, 0x0d600000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00501568, 0xffff0030, 0x00107f00, 0x08000100, - 0x0000002d, 0xabb80500, 0xffff0000, 0xff06f000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x82407fff, 0x7dbf843f, 0x00000000, 0x00000000, - 0xb23b7fff, 0x4dc4d808, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +unsigned int mem_dump[] __attribute__ ((aligned (64))) = +{ + 0x0c3966ad, 0x0d46ffdf, 0x0b396696, 0x0e5fffd8, + 0x0a446669, 0x0f83ffd0, 0x095a6626, 0x10b4ffc8, + 0x087d65cd, 0x11f0ffbf, 0x07ab655e, 0x1338ffb6, + 0x06e464d9, 0x148cffac, 0x0628643f, 0x15ebffa1, + 0x0577638f, 0x1756ff96, 0x04d162cb, 0x18cbff8a, + 0x043561f3, 0x1a4cff7e, 0x03a46106, 0x1bd7ff71, + 0x031c6007, 0x1d6cff64, 0x029f5ef5, 0x1f0bff56, + 0x022a5dd0, 0x20b3ff48, 0x01be5c9a, 0x2264ff3a, + 0x015b5b53, 0x241eff2c, 0x010159fc, 0x25e0ff1e, + 0x00ae5896, 0x27a9ff10, 0x00635720, 0x297aff02, + 0x001f559d, 0x2b50fef4, 0xffe2540d, 0x2d2cfee8, + 0xffac5270, 0x2f0dfedb, 0xff7c50c7, 0x30f3fed0, + 0xff534f14, 0x32dcfec6, 0xff2e4d57, 0x34c8febd, + 0xff0f4b91, 0x36b6feb6, 0xfef549c2, 0x38a5feb0, + 0xfedf47ed, 0x3a95feac, 0xfece4611, 0x3c85feab, + 0xfec04430, 0x3e74feac, 0xfeb6424a, 0x4060feaf, + 0xfeaf4060, 0x424afeb6, 0xfeac3e74, 0x4430fec0, + 0xfeab3c85, 0x4611fece, 0xfeac3a95, 0x47edfedf, + 0xfeb038a5, 0x49c2fef5, 0xfeb636b6, 0x4b91ff0f, + 0xfebd34c8, 0x4d57ff2e, 0xfec632dc, 0x4f14ff53, + 0xfed030f3, 0x50c7ff7c, 0xfedb2f0d, 0x5270ffac, + 0xfee82d2c, 0x540dffe2, 0xfef42b50, 0x559d001f, + 0xff02297a, 0x57200063, 0xff1027a9, 0x589600ae, + 0xff1e25e0, 0x59fc0101, 0xff2c241e, 0x5b53015b, + 0xff3a2264, 0x5c9a01be, 0xff4820b3, 0x5dd0022a, + 0xff561f0b, 0x5ef5029f, 0xff641d6c, 0x6007031c, + 0xff711bd7, 0x610603a4, 0xff7e1a4c, 0x61f30435, + 0xff8a18cb, 0x62cb04d1, 0xff961756, 0x638f0577, + 0xffa115eb, 0x643f0628, 0xffac148c, 0x64d906e4, + 0xffb61338, 0x655e07ab, 0xffbf11f0, 0x65cd087d, + 0xffc810b4, 0x6626095a, 0xffd00f83, 0x66690a44, + 0xffd80e5f, 0x66960b39, 0xffdf0d46, 0x66ad0c39, + 0x00000c8b, 0x18f82527, 0x30fb3c56, 0x471c5133, + 0x5a8262f1, 0x6a6d70e2, 0x76417a7c, 0x7d897f61, + 0x7fff7f61, 0x7d897a7c, 0x764170e2, 0x6a6d62f1, + 0x5a825133, 0x471c3c56, 0x30fb2527, 0x18f80c8b, + 0x0000f375, 0xe708dad9, 0xcf05c3aa, 0xb8e4aecd, + 0xa57e9d0f, 0x95938f1e, 0x89bf8584, 0x8277809f, + 0x8001809f, 0x82778584, 0x89bf8f1e, 0x95939d0f, + 0xa57eaecd, 0xb8e4c3aa, 0xcf05dad9, 0xe708f375, + 0x000007ff, 0x0fff17ff, 0x1fff27ff, 0x2fff37ff, + 0x3fff47ff, 0x4fff57ff, 0x5fff67ff, 0x6fff77ff, + 0x7fff7800, 0x70006800, 0x60005800, 0x50004800, + 0x40003800, 0x30002800, 0x20001800, 0x10000800, + 0x0000f801, 0xf001e801, 0xe001d801, 0xd001c801, + 0xc001b801, 0xb001a801, 0xa0019801, 0x90018801, + 0x80018800, 0x90009800, 0xa000a800, 0xb000b800, + 0xc000c800, 0xd000d800, 0xe000e800, 0xf000f800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x682e469b, 0x25080375, 0xe1e2c04f, 0x9ebc7d29, + 0x5b963a03, 0x1870f6dd, 0xd54ab3b7, 0x92247091, + 0x4efe2d6b, 0x0bd8ea45, 0xc8b2a71f, 0x858c63f9, + 0x426620d3, 0xff40ddad, 0xbc1a9a87, 0x78f45761, + 0x35ce143b, 0xf2a8d115, 0xaf828def, 0x6c5c4ac9, + 0x293607a3, 0xe610c47d, 0xa2ea8157, 0x5fc43e31, + 0x1c9efb0b, 0xd978b7e5, 0x965274bf, 0x532c3199, + 0x1006ee73, 0xcce0ab4d, 0x89ba6827, 0x46942501, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x5a825b9c, 0x5cb35dc7, 0x5ed75fe3, 0x60eb61f0, + 0x62f163ee, 0x64e865dd, 0x66cf67bc, 0x68a6698b, + 0x6a6d6b4a, 0x6c236cf8, 0x6dc96e96, 0x6f5e7022, + 0x70e2719d, 0x72547307, 0x73b5745f, 0x750475a5, + 0x764176d8, 0x776b77fa, 0x78847909, 0x79897a05, + 0x7a7c7aee, 0x7b5c7bc5, 0x7c297c88, 0x7ce37d39, + 0x7d897dd5, 0x7e1d7e5f, 0x7e9c7ed5, 0x7f097f37, + 0x7f617f86, 0x7fa67fc1, 0x7fd87fe9, 0x7ff57ffd, + 0x00058100, 0x0040806a, 0x19e08039, 0x8f208039, + 0x8ee0806a, 0x79e00002, 0x8d00000a, 0x803ea5e0, + 0x00038207, 0x5ffb8069, 0xffa0806a, 0x04000003, + 0x82075ffb, 0x806a0860, 0x806a0cc0, 0x00038207, + 0x5ffb806a, 0x1120806a, 0x15800003, 0x82075ffb, + 0x8069ffa0, 0x806a0400, 0x00038207, 0x5ffb806a, + 0x0860806a, 0x0cc00003, 0x82075ffb, 0x806a1120, + 0x806a1580, 0x00038207, 0x5ffb8069, 0xffa0806a, + 0x04000003, 0x82075ffb, 0x806a0860, 0x806a0cc0, + 0x00038207, 0x5ffb806a, 0x1120806a, 0x15800003, + 0x82075ffb, 0x8069ffa0, 0x806a0400, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x08000000, 0x00000800, 0x04000400, + 0x1000f800, 0x0e00fa00, 0x0c00fc00, 0x1200f600, + 0x1068f738, 0x12c0f704, 0x1400f400, 0x0800f800, + 0x0400fc00, 0xfc000400, 0xfc000000, 0xf8000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0x00400004, 0x00075ffb, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x02d602d6, 0x00000000, 0x00400006, 0x82075ffb, + 0x8069ffa0, 0x806a0400, 0x80398ee0, 0x806a79e0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x803ea5e0, 0x000a0001, + 0x00000000, 0x00000000, 0x00010000, 0x00000000, + 0x806a19e0, 0x80398f20, 0x80398ee0, 0x806a79e0, + 0x806a02c0, 0x806a0720, 0x00000000, 0x5ffb0000, + 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x03a80f40, 0x03e80000, 0x003d003d, 0x003d003d, + 0x00010020, 0x80754380, 0x0d002000, 0x0d600000, + 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, + 0x00010020, 0x80755780, 0x0d000000, 0x0d602000, + 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, + 0x00010038, 0x80756b80, 0x0d004000, 0x0d600000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00501568, 0xffff0030, 0x00107f00, 0x08000100, + 0x0000002d, 0xabb80500, 0xffff0000, 0xff06f000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x82407fff, 0x7dbf843f, 0x00000000, 0x00000000, + 0xb23b7fff, 0x4dc4d808, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; diff --git a/Source/DSPSpy/tests/andc_ls_test.ds b/Source/DSPSpy/tests/andc_ls_test.ds index aa66dee667..7a0c4fccc5 100644 --- a/Source/DSPSpy/tests/andc_ls_test.ds +++ b/Source/DSPSpy/tests/andc_ls_test.ds @@ -1,23 +1,23 @@ -incdir "tests" -include "dsp_base.inc" - -; Test for andc'ls -; -; 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M - - - clr $ACC0 - clr $ACC1 - lri $AX0.L, #0x0000 - lri $AR0, #0x0FF0 - lri $AR3, #0x0FF0 - - lri $AC0.M, #0x0004 - lri $AC1.M, #0x1234 - andc'ls $AC1.M : $AX0.L, $AC0.M - - call send_back - - -; We're done, DO NOT DELETE THIS LINE - jmp end_of_test +incdir "tests" +include "dsp_base.inc" + +; Test for andc'ls +; +; 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M + + + clr $ACC0 + clr $ACC1 + lri $AX0.L, #0x0000 + lri $AR0, #0x0FF0 + lri $AR3, #0x0FF0 + + lri $AC0.M, #0x0004 + lri $AC1.M, #0x1234 + andc'ls $AC1.M : $AX0.L, $AC0.M + + call send_back + + +; We're done, DO NOT DELETE THIS LINE + jmp end_of_test diff --git a/Source/DSPSpy/tests/op_test.ds b/Source/DSPSpy/tests/op_test.ds index cb75ffd77f..5b2ab76bc5 100644 --- a/Source/DSPSpy/tests/op_test.ds +++ b/Source/DSPSpy/tests/op_test.ds @@ -1,41 +1,41 @@ -; This test tries to figure out a couple of unknown opcodes. -incdir "tests" -include "dsp_base.inc" - -// 0x02ca is an unknown opcode found in Zelda ucodes. - -// 0x02ca logically shifts (not rotates) the whole ACC0 right by signed 16-bit value AC1.M -// (So, if AC1.M is negative, it shifts left). -// We'll call it lsrn, no arguments. -// 0x02cb is the same opcode, but arithmetic. -// We'll call it asrn, no arguments. - -clr $ACC0 -clr $ACC1 -lri $AC0.H, #0 -lri $AC0.M, #256 -//neg $ACC0 -lri $AC0.L, #1 -lri $AC1.H, #0xFF -lri $AC1.M, #1 -lri $AC1.L, #0xFF - -call send_back - -cw 0x02ca - -call send_back - -cw 0x02ca - -call send_back - -cw 0x02ca - -call send_back - -cw 0x02ca - -call send_back - -jmp end_of_test +; This test tries to figure out a couple of unknown opcodes. +incdir "tests" +include "dsp_base.inc" + +// 0x02ca is an unknown opcode found in Zelda ucodes. + +// 0x02ca logically shifts (not rotates) the whole ACC0 right by signed 16-bit value AC1.M +// (So, if AC1.M is negative, it shifts left). +// We'll call it lsrn, no arguments. +// 0x02cb is the same opcode, but arithmetic. +// We'll call it asrn, no arguments. + +clr $ACC0 +clr $ACC1 +lri $AC0.H, #0 +lri $AC0.M, #256 +//neg $ACC0 +lri $AC0.L, #1 +lri $AC1.H, #0xFF +lri $AC1.M, #1 +lri $AC1.L, #0xFF + +call send_back + +cw 0x02ca + +call send_back + +cw 0x02ca + +call send_back + +cw 0x02ca + +call send_back + +cw 0x02ca + +call send_back + +jmp end_of_test diff --git a/Source/DSPTool/Testdata/dsp_test.S b/Source/DSPTool/Testdata/dsp_test.S index 8fbbe0cf2e..9a177c4d4e 100644 --- a/Source/DSPTool/Testdata/dsp_test.S +++ b/Source/DSPTool/Testdata/dsp_test.S @@ -1,639 +1,639 @@ - -DSCR: equ 0xffc9 ; DSP DMA Control Reg -DSBL: equ 0xffcb ; DSP DMA Block Length -DSPA: equ 0xffcd ; DSP DMA DMEM Address -DSMAH: equ 0xffce ; DSP DMA Mem Address H -DSMAL: equ 0xffcf ; DSP DMA Mem Address L - -ACSAH: equ 0xffd4 -ACSAL: equ 0xffd5 -ACEAH: equ 0xffd6 -ACEAL: equ 0xffd7 -ACCAH: equ 0xffd8 -ACCAL: equ 0xffd9 -AMDM: equ 0xffef ; ARAM DMA Request Mask - -DIRQ: equ 0xfffb ; DSP Irq Request -DMBH: equ 0xfffc ; DSP Mailbox H -DMBL: equ 0xfffd ; DSP Mailbox L -CMBH: equ 0xfffe ; CPU Mailbox H -CMBL: equ 0xffff ; CPU Mailbox L - -R00: equ 0x00 -R01: equ 0x01 -R02: equ 0x02 -R03: equ 0x03 -R04: equ 0x04 -R05: equ 0x05 -R06: equ 0x06 -R07: equ 0x07 -R08: equ 0x08 -R09: equ 0x09 -R0A: equ 0x0a -R0B: equ 0x0b -R0C: equ 0x0c -R0D: equ 0x0d -R0E: equ 0x0e -R0F: equ 0x0f -R10: equ 0x10 -R11: equ 0x11 -R12: equ 0x12 -R13: equ 0x13 -R14: equ 0x14 -R15: equ 0x15 -R16: equ 0x16 -R17: equ 0x17 -R18: equ 0x18 -R19: equ 0x19 -R1A: equ 0x1a -R1B: equ 0x1b -R1C: equ 0x1c -R1D: equ 0x1d -R1E: equ 0x1e -R1F: equ 0x1f - -ACH0: equ 0x10 -ACH1: equ 0x11 -ACL0: equ 0x1e -ACL1: equ 0x1f - -DSP_CR_IMEM: equ 2 -DSP_CR_TO_CPU: equ 1 - - -REGS_BASE: equ 0x0f80 -MEM_HI: equ 0x0f7E -MEM_LO: equ 0x0f7F - - -; Interrupt vectors 8 vectors, 2 opcodes each - - jmp irq0 - jmp irq1 - jmp irq2 - jmp irq3 - jmp irq4 - jmp irq5 - jmp irq6 - jmp irq7 - -; Main code at 0x10 - CW 0x1302 - CW 0x1303 - CW 0x1204 - CW 0x1305 - CW 0x1306 - - s40 - lri $r12, #0x00ff - -main: - - cw 0x8900 - cw 0x8100 - -; get address of memory dump and copy it - - call wait_for_dsp_mbox - si @DMBH, #0x8888 - si @DMBL, #0xdead - si @DIRQ, #0x0001 - - call wait_for_cpu_mbox - lrs $ACL0, @CMBL - andi $acl1, #0x7fff - - sr @MEM_HI, $ACL1 - sr @MEM_LO, $ACL0 - - lri $r18, #0 - lri $r19, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $r1a, #0x2000 - lr $r1c, @MEM_HI - lr $r1e, @MEM_LO - call do_dma - - -; get address of registers and DMA them to memory - - call wait_for_dsp_mbox - si @DMBH, #0x8888 - si @DMBL, #0xbeef - si @DIRQ, #0x0001 - - call wait_for_cpu_mbox - lrs $ACL0, @CMBL - andi $acl1, #0x7fff - - sr @MEM_HI, $ACL1 - sr @MEM_LO, $ACL0 - - lri $r18, #REGS_BASE - lri $r19, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $r1a, #0x80 - lr $r1c, @MEM_HI - lr $r1e, @MEM_LO - call do_dma - - - - lri $r00, #REGS_BASE+1 - lrri $r01, @$r00 - lrri $r02, @$r00 - lrri $r03, @$r00 - lrri $r04, @$r00 - lrri $r05, @$r00 - lrri $r06, @$r00 - lrri $r07, @$r00 - lrri $r08, @$r00 - lrri $r09, @$r00 - lrri $r0a, @$r00 - lrri $r0b, @$r00 - lrri $r0c, @$r00 - lrri $r0d, @$r00 - lrri $r0e, @$r00 - lrri $r0f, @$r00 - lrri $r10, @$r00 - lrri $r11, @$r00 - lrri $r12, @$r00 - lrri $r13, @$r00 - lrri $r14, @$r00 - lrri $r15, @$r00 - lrri $r16, @$r00 - lrri $r17, @$r00 - lrri $r18, @$r00 - lrri $r19, @$r00 - lrri $r1a, @$r00 - lrri $r1b, @$r00 - lrri $r1c, @$r00 - lrri $r1d, @$r00 - lrri $r1e, @$r00 - lrri $r1f, @$r00 - lr $r00, @REGS_BASE - - nop - nop - nop - nop - - - - - cw 0x8600 - - call send_back - - JMP ende - - -; call dump_memory -; call send_back - - -; 0x041e -; - - cw 0x00de - cw 0x03f1 - call send_back - - cw 0x0200 - cw 0x0a60 - call send_back - - cw 0x1c7e - call send_back - - cw 0x8100 - call send_back - - cw 0x8900 - call send_back - - cw 0x009f - cw 0x00a0 - call send_back - - cw 0x00de - cw 0x03f1 - call send_back - - cw 0x5d00 - call send_back - - cw 0x0e50 - call send_back - - cw 0x0750 - call send_back - - cw 0x0270 - call send_back - - cw 0x5d00 - call send_back - - cw 0x00da - cw 0x03f2 - call send_back - - cw 0x8600 - call send_back - - JNS g_0c4d -; cw 0x0290 -; cw 0x0c4d -; call send_back JX0 - - cw 0x00de - cw 0x03f3 - call send_back - - cw 0x5c00 - call send_back - - JLE g_0c38 -; cw 0x0293 -; cw 0x0c38 JX3 -; call send_back - - JMP g_0c52 - -; cw 0x029f -; cw 0x0c52 -; call send_back - -g_0c38: - cw 0x00db - cw 0x03f7 - call send_back - - cw 0x009e - cw 0x8000 - call send_back - - cw 0x4600 - call send_back - - JMP g_0c44 -; cw 0x029f -; cw 0x0c44 -; call send_back - -g_0c3f: - cw 0x00db - cw 0x03f7 - call send_back - - cw 0x009e - cw 0x8000 - call send_back - - cw 0x5600 - call send_back - -g_0c44: - cw 0x00fe - cw 0x03f5 - call send_back - - cw 0x1fda - call send_back - - cw 0x7c00 - call send_back - - cw 0x1f5e - call send_back - - cw 0x00fe - cw 0x03f2 - call send_back - - JMP g_0c52 -; cw 0x029f -; cw 0x0c52 -; call send_back - -g_0c4d: - - cw 0x00de - cw 0x03f4 - call send_back - - cw 0x5d00 - call send_back - - JLE g_0c3f -; cw 0x0293 -; cw 0x0c3f -; call send_back - -g_0c52: - cw 0x8900 - call send_back - - cw 0x00dd - cw 0x03f5 - call send_back - - cw 0x1501 - call send_back - - cw 0x8100 - call send_back - - cw 0x00dc - cw 0x03f6 - call send_back - - cw 0x008b - cw 0x009f - call send_back - - cw 0x0080 - cw 0x0a00 - call send_back - - cw 0x0900 - call send_back - - BLOOPI #0x50, g_0c65 -; cw 0x1150 -; cw 0x0c65 -; call send_back - - - cw 0x1878 - call send_back - - cw 0x4c00 - call send_back - - cw 0x1cfe - call send_back - - cw 0x001f - call send_back - - cw 0x1fd9 - call send_back -g_0c65: - cw 0x1b18 - call send_back - - cw 0x009f - cw 0x0a60 - call send_back - - cw 0x1fc3 - call send_back - - cw 0x5c00 - call send_back - - cw 0x00fe - cw 0x03f1 - call send_back - - cw 0x00fc - cw 0x03f6 - call send_back - - cw 0x008b - cw 0xffff - call send_back - - - -ende: - - nop - nop - nop - nop - nop - nop - nop - - - -dead_loop: - jmp dead_loop - -do_dma: - sr @DSMAH, $r1c - sr @DSMAL, $r1e - sr @DSPA, $r18 - sr @DSCR, $r19 - sr @DSBL, $r1a -wait_dma: - LRS $ACL1, @DSCR - andcf $acl1, #0x0004 - JLZ wait_dma - RET - - -wait_for_dsp_mbox: - lrs $ACL1, @DMBH - andcf $acl1, #0x8000 - jlz wait_for_dsp_mbox - ret - -wait_for_cpu_mbox: - lrs $ACL1, @cmbh - andcf $acl1, #0x8000 - jlnz wait_for_cpu_mbox - ret - -irq0: - lri $acl0, #0x0000 - jmp irq -irq1: - lri $acl0, #0x0001 - jmp irq -irq2: - lri $acl0, #0x0002 - jmp irq - -irq3: - lri $acl0, #0x0003 - jmp irq -irq4: - lri $acl0, #0x0004 - jmp irq -irq5: -; jmp finale - s40 - mrr $r0d, $r1c - mrr $r0d, $r1e - clr $acc0 - mrr $r1e, $r0d - mrr $r1c, $r0d - nop - nop - nop - nop - nop - nop - rti - - lri $acl0, #0x0005 - jmp irq -irq6: - lri $acl0, #0x0006 - jmp irq -irq7: - lri $acl0, #0x0007 - jmp irq - -irq: - lrs $ACL1, @DMBH - andcf $acl1, #0x8000 - jlz irq - si @DMBH, #0x8BAD - sr @DMBL, $r0b -;sr @DMBL, $acl0 - si @DIRQ, #0x0001 - halt - - - - -send_back: - - ; store registers to reg table - sr @REGS_BASE, $r00 - lri $r00, #(REGS_BASE + 1) - srri @$r00, $r01 - srri @$r00, $r02 - srri @$r00, $r03 - srri @$r00, $r04 - srri @$r00, $r05 - srri @$r00, $r06 - srri @$r00, $r07 - srri @$r00, $r08 - srri @$r00, $r09 - srri @$r00, $r0a - srri @$r00, $r0b - srri @$r00, $r0c - srri @$r00, $r0d - srri @$r00, $r0e - srri @$r00, $r0f - srri @$r00, $r10 - srri @$r00, $r11 - srri @$r00, $r12 - srri @$r00, $r13 - srri @$r00, $r14 - srri @$r00, $r15 - srri @$r00, $r16 - srri @$r00, $r17 - srri @$r00, $r18 - srri @$r00, $r19 - srri @$r00, $r1a - srri @$r00, $r1b - srri @$r00, $r1c - srri @$r00, $r1d - srri @$r00, $r1e - srri @$r00, $r1f - - - lri $r18, #0x0000 - lri $r19, #1 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $r1a, #0x200 - lr $r1c, @MEM_HI - lr $r1e, @MEM_LO - - lri $r01, #8+8 - - bloop $r01, dma_copy - call do_dma - addi $r1e, #0x200 - mrr $r1f, $r18 - addi $r1f, #0x100 - mrr $r18, $r1f - nop -dma_copy: - nop - - call wait_for_dsp_mbox - si @DMBH, #0x8888 - si @DMBL, #0xfeeb - si @DIRQ, #0x0001 - -; wait for answer before we execute the next op - call wait_for_cpu_mbox - lrs $ACL0, @CMBL - andi $acl1, #0x7fff - - - - lri $r00, #REGS_BASE+1 - lrri $r01, @$r00 - lrri $r02, @$r00 - lrri $r03, @$r00 - lrri $r04, @$r00 - lrri $r05, @$r00 - lrri $r06, @$r00 - lrri $r07, @$r00 - lrri $r08, @$r00 - lrri $r09, @$r00 - lrri $r0a, @$r00 - lrri $r0b, @$r00 - lrri $r0c, @$r00 - lrri $r0d, @$r00 - lrri $r0e, @$r00 - lrri $r0f, @$r00 - lrri $r10, @$r00 - lrri $r11, @$r00 - lrri $r12, @$r00 - lrri $r13, @$r00 - lrri $r14, @$r00 - lrri $r15, @$r00 - lrri $r16, @$r00 - lrri $r17, @$r00 - lrri $r18, @$r00 - lrri $r19, @$r00 - lrri $r1a, @$r00 - lrri $r1b, @$r00 - lrri $r1c, @$r00 - lrri $r1d, @$r00 - lrri $r1e, @$r00 - lrri $r1f, @$r00 - lr $r00, @REGS_BASE - - ret - -send_back_16: - - cw 0x8e00 - call send_back - cw 0x8f00 - - ret - - -dump_memory: - - lri $r02, #0x0000 - lri $acl0, #0x1000 - - lri $r01, #0x1000 - bloop $r01, _fill_loop2 - - mrr $r03, $acl0 - cw 0x80f0 - - mrr $r1f, $r00 - mrr $r00, $r02 - srri @$r00, $r1b - mrr $r02, $r00 - mrr $r00, $r1f - - addis $acc0, #0x1 - -_fill_loop2: - nop - - -ret + +DSCR: equ 0xffc9 ; DSP DMA Control Reg +DSBL: equ 0xffcb ; DSP DMA Block Length +DSPA: equ 0xffcd ; DSP DMA DMEM Address +DSMAH: equ 0xffce ; DSP DMA Mem Address H +DSMAL: equ 0xffcf ; DSP DMA Mem Address L + +ACSAH: equ 0xffd4 +ACSAL: equ 0xffd5 +ACEAH: equ 0xffd6 +ACEAL: equ 0xffd7 +ACCAH: equ 0xffd8 +ACCAL: equ 0xffd9 +AMDM: equ 0xffef ; ARAM DMA Request Mask + +DIRQ: equ 0xfffb ; DSP Irq Request +DMBH: equ 0xfffc ; DSP Mailbox H +DMBL: equ 0xfffd ; DSP Mailbox L +CMBH: equ 0xfffe ; CPU Mailbox H +CMBL: equ 0xffff ; CPU Mailbox L + +R00: equ 0x00 +R01: equ 0x01 +R02: equ 0x02 +R03: equ 0x03 +R04: equ 0x04 +R05: equ 0x05 +R06: equ 0x06 +R07: equ 0x07 +R08: equ 0x08 +R09: equ 0x09 +R0A: equ 0x0a +R0B: equ 0x0b +R0C: equ 0x0c +R0D: equ 0x0d +R0E: equ 0x0e +R0F: equ 0x0f +R10: equ 0x10 +R11: equ 0x11 +R12: equ 0x12 +R13: equ 0x13 +R14: equ 0x14 +R15: equ 0x15 +R16: equ 0x16 +R17: equ 0x17 +R18: equ 0x18 +R19: equ 0x19 +R1A: equ 0x1a +R1B: equ 0x1b +R1C: equ 0x1c +R1D: equ 0x1d +R1E: equ 0x1e +R1F: equ 0x1f + +ACH0: equ 0x10 +ACH1: equ 0x11 +ACL0: equ 0x1e +ACL1: equ 0x1f + +DSP_CR_IMEM: equ 2 +DSP_CR_TO_CPU: equ 1 + + +REGS_BASE: equ 0x0f80 +MEM_HI: equ 0x0f7E +MEM_LO: equ 0x0f7F + + +; Interrupt vectors 8 vectors, 2 opcodes each + + jmp irq0 + jmp irq1 + jmp irq2 + jmp irq3 + jmp irq4 + jmp irq5 + jmp irq6 + jmp irq7 + +; Main code at 0x10 + CW 0x1302 + CW 0x1303 + CW 0x1204 + CW 0x1305 + CW 0x1306 + + s40 + lri $r12, #0x00ff + +main: + + cw 0x8900 + cw 0x8100 + +; get address of memory dump and copy it + + call wait_for_dsp_mbox + si @DMBH, #0x8888 + si @DMBL, #0xdead + si @DIRQ, #0x0001 + + call wait_for_cpu_mbox + lrs $ACL0, @CMBL + andi $acl1, #0x7fff + + sr @MEM_HI, $ACL1 + sr @MEM_LO, $ACL0 + + lri $r18, #0 + lri $r19, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $r1a, #0x2000 + lr $r1c, @MEM_HI + lr $r1e, @MEM_LO + call do_dma + + +; get address of registers and DMA them to memory + + call wait_for_dsp_mbox + si @DMBH, #0x8888 + si @DMBL, #0xbeef + si @DIRQ, #0x0001 + + call wait_for_cpu_mbox + lrs $ACL0, @CMBL + andi $acl1, #0x7fff + + sr @MEM_HI, $ACL1 + sr @MEM_LO, $ACL0 + + lri $r18, #REGS_BASE + lri $r19, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $r1a, #0x80 + lr $r1c, @MEM_HI + lr $r1e, @MEM_LO + call do_dma + + + + lri $r00, #REGS_BASE+1 + lrri $r01, @$r00 + lrri $r02, @$r00 + lrri $r03, @$r00 + lrri $r04, @$r00 + lrri $r05, @$r00 + lrri $r06, @$r00 + lrri $r07, @$r00 + lrri $r08, @$r00 + lrri $r09, @$r00 + lrri $r0a, @$r00 + lrri $r0b, @$r00 + lrri $r0c, @$r00 + lrri $r0d, @$r00 + lrri $r0e, @$r00 + lrri $r0f, @$r00 + lrri $r10, @$r00 + lrri $r11, @$r00 + lrri $r12, @$r00 + lrri $r13, @$r00 + lrri $r14, @$r00 + lrri $r15, @$r00 + lrri $r16, @$r00 + lrri $r17, @$r00 + lrri $r18, @$r00 + lrri $r19, @$r00 + lrri $r1a, @$r00 + lrri $r1b, @$r00 + lrri $r1c, @$r00 + lrri $r1d, @$r00 + lrri $r1e, @$r00 + lrri $r1f, @$r00 + lr $r00, @REGS_BASE + + nop + nop + nop + nop + + + + + cw 0x8600 + + call send_back + + JMP ende + + +; call dump_memory +; call send_back + + +; 0x041e +; + + cw 0x00de + cw 0x03f1 + call send_back + + cw 0x0200 + cw 0x0a60 + call send_back + + cw 0x1c7e + call send_back + + cw 0x8100 + call send_back + + cw 0x8900 + call send_back + + cw 0x009f + cw 0x00a0 + call send_back + + cw 0x00de + cw 0x03f1 + call send_back + + cw 0x5d00 + call send_back + + cw 0x0e50 + call send_back + + cw 0x0750 + call send_back + + cw 0x0270 + call send_back + + cw 0x5d00 + call send_back + + cw 0x00da + cw 0x03f2 + call send_back + + cw 0x8600 + call send_back + + JNS g_0c4d +; cw 0x0290 +; cw 0x0c4d +; call send_back JX0 + + cw 0x00de + cw 0x03f3 + call send_back + + cw 0x5c00 + call send_back + + JLE g_0c38 +; cw 0x0293 +; cw 0x0c38 JX3 +; call send_back + + JMP g_0c52 + +; cw 0x029f +; cw 0x0c52 +; call send_back + +g_0c38: + cw 0x00db + cw 0x03f7 + call send_back + + cw 0x009e + cw 0x8000 + call send_back + + cw 0x4600 + call send_back + + JMP g_0c44 +; cw 0x029f +; cw 0x0c44 +; call send_back + +g_0c3f: + cw 0x00db + cw 0x03f7 + call send_back + + cw 0x009e + cw 0x8000 + call send_back + + cw 0x5600 + call send_back + +g_0c44: + cw 0x00fe + cw 0x03f5 + call send_back + + cw 0x1fda + call send_back + + cw 0x7c00 + call send_back + + cw 0x1f5e + call send_back + + cw 0x00fe + cw 0x03f2 + call send_back + + JMP g_0c52 +; cw 0x029f +; cw 0x0c52 +; call send_back + +g_0c4d: + + cw 0x00de + cw 0x03f4 + call send_back + + cw 0x5d00 + call send_back + + JLE g_0c3f +; cw 0x0293 +; cw 0x0c3f +; call send_back + +g_0c52: + cw 0x8900 + call send_back + + cw 0x00dd + cw 0x03f5 + call send_back + + cw 0x1501 + call send_back + + cw 0x8100 + call send_back + + cw 0x00dc + cw 0x03f6 + call send_back + + cw 0x008b + cw 0x009f + call send_back + + cw 0x0080 + cw 0x0a00 + call send_back + + cw 0x0900 + call send_back + + BLOOPI #0x50, g_0c65 +; cw 0x1150 +; cw 0x0c65 +; call send_back + + + cw 0x1878 + call send_back + + cw 0x4c00 + call send_back + + cw 0x1cfe + call send_back + + cw 0x001f + call send_back + + cw 0x1fd9 + call send_back +g_0c65: + cw 0x1b18 + call send_back + + cw 0x009f + cw 0x0a60 + call send_back + + cw 0x1fc3 + call send_back + + cw 0x5c00 + call send_back + + cw 0x00fe + cw 0x03f1 + call send_back + + cw 0x00fc + cw 0x03f6 + call send_back + + cw 0x008b + cw 0xffff + call send_back + + + +ende: + + nop + nop + nop + nop + nop + nop + nop + + + +dead_loop: + jmp dead_loop + +do_dma: + sr @DSMAH, $r1c + sr @DSMAL, $r1e + sr @DSPA, $r18 + sr @DSCR, $r19 + sr @DSBL, $r1a +wait_dma: + LRS $ACL1, @DSCR + andcf $acl1, #0x0004 + JLZ wait_dma + RET + + +wait_for_dsp_mbox: + lrs $ACL1, @DMBH + andcf $acl1, #0x8000 + jlz wait_for_dsp_mbox + ret + +wait_for_cpu_mbox: + lrs $ACL1, @cmbh + andcf $acl1, #0x8000 + jlnz wait_for_cpu_mbox + ret + +irq0: + lri $acl0, #0x0000 + jmp irq +irq1: + lri $acl0, #0x0001 + jmp irq +irq2: + lri $acl0, #0x0002 + jmp irq + +irq3: + lri $acl0, #0x0003 + jmp irq +irq4: + lri $acl0, #0x0004 + jmp irq +irq5: +; jmp finale + s40 + mrr $r0d, $r1c + mrr $r0d, $r1e + clr $acc0 + mrr $r1e, $r0d + mrr $r1c, $r0d + nop + nop + nop + nop + nop + nop + rti + + lri $acl0, #0x0005 + jmp irq +irq6: + lri $acl0, #0x0006 + jmp irq +irq7: + lri $acl0, #0x0007 + jmp irq + +irq: + lrs $ACL1, @DMBH + andcf $acl1, #0x8000 + jlz irq + si @DMBH, #0x8BAD + sr @DMBL, $r0b +;sr @DMBL, $acl0 + si @DIRQ, #0x0001 + halt + + + + +send_back: + + ; store registers to reg table + sr @REGS_BASE, $r00 + lri $r00, #(REGS_BASE + 1) + srri @$r00, $r01 + srri @$r00, $r02 + srri @$r00, $r03 + srri @$r00, $r04 + srri @$r00, $r05 + srri @$r00, $r06 + srri @$r00, $r07 + srri @$r00, $r08 + srri @$r00, $r09 + srri @$r00, $r0a + srri @$r00, $r0b + srri @$r00, $r0c + srri @$r00, $r0d + srri @$r00, $r0e + srri @$r00, $r0f + srri @$r00, $r10 + srri @$r00, $r11 + srri @$r00, $r12 + srri @$r00, $r13 + srri @$r00, $r14 + srri @$r00, $r15 + srri @$r00, $r16 + srri @$r00, $r17 + srri @$r00, $r18 + srri @$r00, $r19 + srri @$r00, $r1a + srri @$r00, $r1b + srri @$r00, $r1c + srri @$r00, $r1d + srri @$r00, $r1e + srri @$r00, $r1f + + + lri $r18, #0x0000 + lri $r19, #1 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $r1a, #0x200 + lr $r1c, @MEM_HI + lr $r1e, @MEM_LO + + lri $r01, #8+8 + + bloop $r01, dma_copy + call do_dma + addi $r1e, #0x200 + mrr $r1f, $r18 + addi $r1f, #0x100 + mrr $r18, $r1f + nop +dma_copy: + nop + + call wait_for_dsp_mbox + si @DMBH, #0x8888 + si @DMBL, #0xfeeb + si @DIRQ, #0x0001 + +; wait for answer before we execute the next op + call wait_for_cpu_mbox + lrs $ACL0, @CMBL + andi $acl1, #0x7fff + + + + lri $r00, #REGS_BASE+1 + lrri $r01, @$r00 + lrri $r02, @$r00 + lrri $r03, @$r00 + lrri $r04, @$r00 + lrri $r05, @$r00 + lrri $r06, @$r00 + lrri $r07, @$r00 + lrri $r08, @$r00 + lrri $r09, @$r00 + lrri $r0a, @$r00 + lrri $r0b, @$r00 + lrri $r0c, @$r00 + lrri $r0d, @$r00 + lrri $r0e, @$r00 + lrri $r0f, @$r00 + lrri $r10, @$r00 + lrri $r11, @$r00 + lrri $r12, @$r00 + lrri $r13, @$r00 + lrri $r14, @$r00 + lrri $r15, @$r00 + lrri $r16, @$r00 + lrri $r17, @$r00 + lrri $r18, @$r00 + lrri $r19, @$r00 + lrri $r1a, @$r00 + lrri $r1b, @$r00 + lrri $r1c, @$r00 + lrri $r1d, @$r00 + lrri $r1e, @$r00 + lrri $r1f, @$r00 + lr $r00, @REGS_BASE + + ret + +send_back_16: + + cw 0x8e00 + call send_back + cw 0x8f00 + + ret + + +dump_memory: + + lri $r02, #0x0000 + lri $acl0, #0x1000 + + lri $r01, #0x1000 + bloop $r01, _fill_loop2 + + mrr $r03, $acl0 + cw 0x80f0 + + mrr $r1f, $r00 + mrr $r00, $r02 + srri @$r00, $r1b + mrr $r02, $r00 + mrr $r00, $r1f + + addis $acc0, #0x1 + +_fill_loop2: + nop + + +ret diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Obsolete.txt b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Obsolete.txt index f0ee09d8fb..25e11771c2 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Obsolete.txt +++ b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_Zelda_Obsolete.txt @@ -1,180 +1,180 @@ - -#if 0 -void CUCode_Zelda::UpdatePB(ZPB& _rPB, int *templbuffer, int *temprbuffer, u32 _Size) -{ - u16* pTest = (u16*)&_rPB; - - // Checks at 0293 - if (pTest[0x00] == 0) - return; - - if (pTest[0x01] != 0) - return; - - - if (pTest[0x06] != 0x00) - { - // probably pTest[0x06] == 0 -> AFC (and variants) - // See 02a4 - } - else - { - switch (_rPB.type) // or Bytes per Sample - { - case 0x05: - case 0x09: - { - // initialize "decoder" if the sample is played the first time - if (pTest[0x04] != 0) - { - // This is 0717_ReadOutPBStuff - - // increment 4fb - - // zelda: - // perhaps init or "has played before" - pTest[0x32] = 0x00; - pTest[0x66] = 0x00; // history1 - pTest[0x67] = 0x00; // history2 - - // samplerate? length? num of samples? i dunno... - // Likely length... - pTest[0x3a] = pTest[0x8a]; - pTest[0x3b] = pTest[0x8b]; - - // Copy ARAM addr from r to rw area. - pTest[0x38] = pTest[0x8c]; - pTest[0x39] = pTest[0x8d]; - } - - if (pTest[0x01] != 0) // 0747 early out... i dunno if this can happen because we filter it above - return; - - u32 ARAMAddr = (pTest[0x38] << 16) | pTest[0x39]; - u32 NumberOfSamples = (pTest[0x3a] << 16) | pTest[0x3b]; - - // round upwards how many samples we need to copy, 0759 - NumberOfSamples = (NumberOfSamples + 0xf) >> 4; // i think the lower 4 are the fraction - u32 frac = NumberOfSamples & 0xF; - - u8 inBuffer[9]; - short outbuf[16]; - u32 sampleCount = 0; - - // It must be something like this: - - // The PB contains a small sample buffer of 0x4D decoded samples. - // If it's empty or "used", decode to it. - // Then, resample from this buffer to the output as you go. When it needs - // wrapping, decode more. - -#define USE_RESAMPLE -#if !defined(USE_RESAMPLE) - for (int s = 0; s < _Size/16; s++) - { - for (int i = 0; i < 9; i++) - { - inBuffer[i] = g_dspInitialize.pARAM_Read_U8(ARAMAddr); - ARAMAddr++; - } - - AFCdecodebuffer((char*)inBuffer, outbuf, (short*)&pTest[0x66], (short*)&pTest[0x67]); - - for (int i = 0; i < 16; i++) - { - templbuffer[sampleCount] += outbuf[i]; - temprbuffer[sampleCount] += outbuf[i]; - sampleCount++; - } - - NumberOfSamples--; - - if (NumberOfSamples<=0) - break; - } -#else - while (NumberOfSamples > 0) - { - for (int i = 0; i < 9; i++) - { - inBuffer[i] = g_dspInitialize.pARAM_Read_U8(ARAMAddr); - ARAMAddr++; - } - - AFCdecodebuffer(m_AFCCoefTable, (char*)inBuffer, outbuf, (short*)&pTest[0x66], (short*)&pTest[0x67], 9); - CResampler Sampler(outbuf, 16, 48000); - - while (Sampler.m_queueSize > 0) - { - int sample = Sampler.sample_queue.front(); - Sampler.sample_queue.pop(); - Sampler.m_queueSize -= 1; - - templbuffer[sampleCount] += sample; - temprbuffer[sampleCount] += sample; - sampleCount++; - - if (sampleCount > _Size) - break; - } - - if (sampleCount > _Size) - break; - - NumberOfSamples--; - } -#endif - if (NumberOfSamples == 0) - { - pTest[0x01] = 1; // we are done ?? - } - - // write back - NumberOfSamples = (NumberOfSamples << 4); // missing fraction - - pTest[0x38] = ARAMAddr >> 16; - pTest[0x39] = ARAMAddr & 0xFFFF; - pTest[0x3a] = NumberOfSamples >> 16; - pTest[0x3b] = NumberOfSamples & 0xFFFF; - - -#if 0 - NumberOfSamples = (NumberOfSamples + 0xf) >> 4; - - static u8 Buffer[500000]; - for (int i =0; i AFC (and variants) + // See 02a4 + } + else + { + switch (_rPB.type) // or Bytes per Sample + { + case 0x05: + case 0x09: + { + // initialize "decoder" if the sample is played the first time + if (pTest[0x04] != 0) + { + // This is 0717_ReadOutPBStuff + + // increment 4fb + + // zelda: + // perhaps init or "has played before" + pTest[0x32] = 0x00; + pTest[0x66] = 0x00; // history1 + pTest[0x67] = 0x00; // history2 + + // samplerate? length? num of samples? i dunno... + // Likely length... + pTest[0x3a] = pTest[0x8a]; + pTest[0x3b] = pTest[0x8b]; + + // Copy ARAM addr from r to rw area. + pTest[0x38] = pTest[0x8c]; + pTest[0x39] = pTest[0x8d]; + } + + if (pTest[0x01] != 0) // 0747 early out... i dunno if this can happen because we filter it above + return; + + u32 ARAMAddr = (pTest[0x38] << 16) | pTest[0x39]; + u32 NumberOfSamples = (pTest[0x3a] << 16) | pTest[0x3b]; + + // round upwards how many samples we need to copy, 0759 + NumberOfSamples = (NumberOfSamples + 0xf) >> 4; // i think the lower 4 are the fraction + u32 frac = NumberOfSamples & 0xF; + + u8 inBuffer[9]; + short outbuf[16]; + u32 sampleCount = 0; + + // It must be something like this: + + // The PB contains a small sample buffer of 0x4D decoded samples. + // If it's empty or "used", decode to it. + // Then, resample from this buffer to the output as you go. When it needs + // wrapping, decode more. + +#define USE_RESAMPLE +#if !defined(USE_RESAMPLE) + for (int s = 0; s < _Size/16; s++) + { + for (int i = 0; i < 9; i++) + { + inBuffer[i] = g_dspInitialize.pARAM_Read_U8(ARAMAddr); + ARAMAddr++; + } + + AFCdecodebuffer((char*)inBuffer, outbuf, (short*)&pTest[0x66], (short*)&pTest[0x67]); + + for (int i = 0; i < 16; i++) + { + templbuffer[sampleCount] += outbuf[i]; + temprbuffer[sampleCount] += outbuf[i]; + sampleCount++; + } + + NumberOfSamples--; + + if (NumberOfSamples<=0) + break; + } +#else + while (NumberOfSamples > 0) + { + for (int i = 0; i < 9; i++) + { + inBuffer[i] = g_dspInitialize.pARAM_Read_U8(ARAMAddr); + ARAMAddr++; + } + + AFCdecodebuffer(m_AFCCoefTable, (char*)inBuffer, outbuf, (short*)&pTest[0x66], (short*)&pTest[0x67], 9); + CResampler Sampler(outbuf, 16, 48000); + + while (Sampler.m_queueSize > 0) + { + int sample = Sampler.sample_queue.front(); + Sampler.sample_queue.pop(); + Sampler.m_queueSize -= 1; + + templbuffer[sampleCount] += sample; + temprbuffer[sampleCount] += sample; + sampleCount++; + + if (sampleCount > _Size) + break; + } + + if (sampleCount > _Size) + break; + + NumberOfSamples--; + } +#endif + if (NumberOfSamples == 0) + { + pTest[0x01] = 1; // we are done ?? + } + + // write back + NumberOfSamples = (NumberOfSamples << 4); // missing fraction + + pTest[0x38] = ARAMAddr >> 16; + pTest[0x39] = ARAMAddr & 0xFFFF; + pTest[0x3a] = NumberOfSamples >> 16; + pTest[0x3b] = NumberOfSamples & 0xFFFF; + + +#if 0 + NumberOfSamples = (NumberOfSamples + 0xf) >> 4; + + static u8 Buffer[500000]; + for (int i =0; i -#include -#include -#include -#include -#include -#include -#include -#include - -#include "GCPad.h" - -class GCPadConfigDialog : public wxDialog -{ - public: - GCPadConfigDialog(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxString &title = wxT("Gamecube Pad Plugin Configuration"), - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE); - virtual ~GCPadConfigDialog(); - - private: - DECLARE_EVENT_TABLE(); - - enum - { - // it's important that they are kept in this order - IDB_BTN_A = 0, - IDB_BTN_B, - IDB_BTN_X, - IDB_BTN_Y, - IDB_BTN_Z, - IDB_BTN_START, - - IDB_DPAD_UP, - IDB_DPAD_DOWN, - IDB_DPAD_LEFT, - IDB_DPAD_RIGHT, - - IDB_MAIN_UP, - IDB_MAIN_DOWN, - IDB_MAIN_LEFT, - IDB_MAIN_RIGHT, - IDB_MAIN_SEMI, - - IDB_SUB_UP, - IDB_SUB_DOWN, - IDB_SUB_LEFT, - IDB_SUB_RIGHT, - IDB_SUB_SEMI, - - IDB_SHDR_L, - IDB_SHDR_R, - IDB_SHDR_SEMI_L, - IDB_SHDR_SEMI_R, - - // Joypad - IDB_ANALOG_LEFT_X, IDB_ANALOG_LEFT_Y, - IDB_ANALOG_RIGHT_X, IDB_ANALOG_RIGHT_Y, - IDB_TRIGGER_L, IDB_TRIGGER_R, - - // Dialog controls - ID_NOTEBOOK = 1000, - ID_CONTROLLERPAGE1, - ID_CONTROLLERPAGE2, - ID_CONTROLLERPAGE3, - ID_CONTROLLERPAGE4, - - // Timers - IDTM_BUTTON, IDTM_UPDATE_PAD, - - // Gamepad settings - IDC_JOYNAME, - IDC_DEAD_ZONE_LEFT, IDC_DEAD_ZONE_RIGHT, - IDC_STICK_DIAGONAL, IDC_STICK_S2C, - IDC_RUMBLE, IDC_RUMBLE_STRENGTH, - IDC_TRIGGER_TYPE, - IDC_STICK_SOURCE, IDC_CSTICK_SOURCE, IDC_TRIGGER_SOURCE, - IDS_STICK_PRESS, IDS_CSTICK_PRESS, IDS_TRIGGER_PRESS, - }; - - wxNotebook *m_Notebook; - - wxPanel *m_Controller[4], - *m_pLeftInStatus[4], - *m_pLeftOutStatus[4], - *m_pRightInStatus[4], - *m_pRightOutStatus[4]; - - wxStaticBitmap *m_bmpSquareLeftIn[4], - *m_bmpSquareLeftOut[4], - *m_bmpSquareRightIn[4], - *m_bmpSquareRightOut[4]; - - wxSlider *m_Slider_Stick[4], - *m_Slider_CStick[4], - *m_Slider_Trigger[4]; - - wxCheckBox *m_CheckS2C[4], - *m_CheckRumble[4]; - - wxButton *m_OK, *m_Cancel, *ClickedButton, - *m_Button_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], - *m_Button_GC[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4]; - - wxChoice *m_Joyname[4], - *m_ComboDeadZoneLeft[4], - *m_ComboDeadZoneRight[4], - *m_ComboDiagonal[4], - *m_RumbleStrength[4], - *m_TriggerType[4], - *m_Combo_StickSrc[4], - *m_Combo_CStickSrc[4], - *m_Combo_TriggerSrc[4]; - - wxGridBagSizer *m_sGridStickLeft[4], - *m_sGridStickRight[4], - *m_sGridTrigger[4]; - - wxBoxSizer *m_MainSizer, - *m_sMain[4], - *m_sDeadZoneHoriz[4], - *m_sDeadZone[4], - *m_sDiagonal[4], - *m_sSquare2Circle[4], - *m_sS2CDeadZone[4], - *m_sRumbleStrength[4], - *m_sRumble[4], - *m_sHorizJoypad[4], - *m_sHorizStatus[4], - *m_Sizer_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], - *m_sAnalogLeft[4], - *m_sAnalogMiddle[4], - *m_sAnalogRight[4], - *m_sHorizAnalog[4], - *m_sStickSrc[4], - *m_sCStickSrc[4], - *m_sTriggerSrc[4], - *m_Sizer_Pad[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4], - *m_sHorizMapping[4]; - - wxStaticBoxSizer *m_gJoyPad[4], - *m_gStickLeft[4], - *m_gStickRight[4], - *m_gTriggers[4], - *m_gAnalog[4], - *m_gButton[4], - *m_gDPad[4], - *m_gStick[4], - *m_gCStick[4], - *m_gTrigger[4]; - - wxStaticText *m_ComboDeadZoneLabel[4], - *m_DiagonalLabel[4], - *m_RumbleStrengthLabel[4], - *m_tStatusLeftIn[4], *m_tStatusLeftOut[4], - *m_tStatusRightIn[4], *m_tStatusRightOut[4], - *m_TriggerL[4], *m_TriggerR[4], - *m_TriggerStatusL[4], *m_TriggerStatusR[4], - *m_tTriggerSource[4], - *m_Text_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], - *m_Text_Pad[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4], - *m_Text_StickSrc[4], - *m_Text_CStickSrc[4], - *m_Text_TriggerSrc[4]; - - wxStaticBitmap *m_bmpDotLeftIn[4], - *m_bmpDotLeftOut[4], - *m_bmpDotRightIn[4], - *m_bmpDotRightOut[4], - *m_bmpDeadZoneLeftIn[4], - *m_bmpDeadZoneRightIn[4]; - - bool m_ControlsCreated; - int m_Page, BoxW, BoxH; - int GetButtonWaitingID, GetButtonWaitingTimer, g_Pressed; - wxString OldLabel; - - #if wxUSE_TIMER - wxTimer *m_UpdatePadTimer, *m_ButtonMappingTimer; - void UpdatePadInfo(wxTimerEvent& WXUNUSED(event)); - void OnButtonTimer(wxTimerEvent& WXUNUSED(event)) { DoGetButtons(GetButtonWaitingID); } - #endif - - wxBitmap CreateBitmap(); - wxBitmap CreateBitmapDot(); - wxBitmap CreateBitmapDeadZone(int Radius); - wxBitmap CreateBitmapClear(); - - void NotebookPageChanged(wxNotebookEvent& event); - void OnClose(wxCloseEvent& event); - void OnCloseClick(wxCommandEvent& event); - void OnKeyDown(wxKeyEvent& event); - void OnButtonClick(wxCommandEvent& event); - void OnAxisClick(wxCommandEvent& event); - void ChangeSettings(wxCommandEvent& event); - void SaveButtonMapping(int Id, int Key); - void UpdateGUI(); - void CreateGUIControls(); - - void Convert2Box(int &x); - void DoChangeDeadZone(); - void ToBlank(bool ToBlank, int Id); - - void DoGetButtons(int _GetId); - void EndGetButtons(); - void SetButtonText(int id, const wxString &str); - wxString GetButtonText(int id); -}; - -#endif // __GCPAD_CONFIGBOX_h__ +// Project description +// ------------------- +// Name: nJoy +// Description: A Dolphin Compatible Input Plugin +// +// Author: Falcon4ever (nJoy@falcon4ever.com) +// Site: www.multigesture.net +// Copyright (C) 2003 Dolphin Project. +// + + +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#ifndef __GCPAD_CONFIGBOX_h__ +#define __GCPAD_CONFIGBOX_h__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GCPad.h" + +class GCPadConfigDialog : public wxDialog +{ + public: + GCPadConfigDialog(wxWindow *parent, wxWindowID id = wxID_ANY, + const wxString &title = wxT("Gamecube Pad Plugin Configuration"), + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE); + virtual ~GCPadConfigDialog(); + + private: + DECLARE_EVENT_TABLE(); + + enum + { + // it's important that they are kept in this order + IDB_BTN_A = 0, + IDB_BTN_B, + IDB_BTN_X, + IDB_BTN_Y, + IDB_BTN_Z, + IDB_BTN_START, + + IDB_DPAD_UP, + IDB_DPAD_DOWN, + IDB_DPAD_LEFT, + IDB_DPAD_RIGHT, + + IDB_MAIN_UP, + IDB_MAIN_DOWN, + IDB_MAIN_LEFT, + IDB_MAIN_RIGHT, + IDB_MAIN_SEMI, + + IDB_SUB_UP, + IDB_SUB_DOWN, + IDB_SUB_LEFT, + IDB_SUB_RIGHT, + IDB_SUB_SEMI, + + IDB_SHDR_L, + IDB_SHDR_R, + IDB_SHDR_SEMI_L, + IDB_SHDR_SEMI_R, + + // Joypad + IDB_ANALOG_LEFT_X, IDB_ANALOG_LEFT_Y, + IDB_ANALOG_RIGHT_X, IDB_ANALOG_RIGHT_Y, + IDB_TRIGGER_L, IDB_TRIGGER_R, + + // Dialog controls + ID_NOTEBOOK = 1000, + ID_CONTROLLERPAGE1, + ID_CONTROLLERPAGE2, + ID_CONTROLLERPAGE3, + ID_CONTROLLERPAGE4, + + // Timers + IDTM_BUTTON, IDTM_UPDATE_PAD, + + // Gamepad settings + IDC_JOYNAME, + IDC_DEAD_ZONE_LEFT, IDC_DEAD_ZONE_RIGHT, + IDC_STICK_DIAGONAL, IDC_STICK_S2C, + IDC_RUMBLE, IDC_RUMBLE_STRENGTH, + IDC_TRIGGER_TYPE, + IDC_STICK_SOURCE, IDC_CSTICK_SOURCE, IDC_TRIGGER_SOURCE, + IDS_STICK_PRESS, IDS_CSTICK_PRESS, IDS_TRIGGER_PRESS, + }; + + wxNotebook *m_Notebook; + + wxPanel *m_Controller[4], + *m_pLeftInStatus[4], + *m_pLeftOutStatus[4], + *m_pRightInStatus[4], + *m_pRightOutStatus[4]; + + wxStaticBitmap *m_bmpSquareLeftIn[4], + *m_bmpSquareLeftOut[4], + *m_bmpSquareRightIn[4], + *m_bmpSquareRightOut[4]; + + wxSlider *m_Slider_Stick[4], + *m_Slider_CStick[4], + *m_Slider_Trigger[4]; + + wxCheckBox *m_CheckS2C[4], + *m_CheckRumble[4]; + + wxButton *m_OK, *m_Cancel, *ClickedButton, + *m_Button_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], + *m_Button_GC[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4]; + + wxChoice *m_Joyname[4], + *m_ComboDeadZoneLeft[4], + *m_ComboDeadZoneRight[4], + *m_ComboDiagonal[4], + *m_RumbleStrength[4], + *m_TriggerType[4], + *m_Combo_StickSrc[4], + *m_Combo_CStickSrc[4], + *m_Combo_TriggerSrc[4]; + + wxGridBagSizer *m_sGridStickLeft[4], + *m_sGridStickRight[4], + *m_sGridTrigger[4]; + + wxBoxSizer *m_MainSizer, + *m_sMain[4], + *m_sDeadZoneHoriz[4], + *m_sDeadZone[4], + *m_sDiagonal[4], + *m_sSquare2Circle[4], + *m_sS2CDeadZone[4], + *m_sRumbleStrength[4], + *m_sRumble[4], + *m_sHorizJoypad[4], + *m_sHorizStatus[4], + *m_Sizer_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], + *m_sAnalogLeft[4], + *m_sAnalogMiddle[4], + *m_sAnalogRight[4], + *m_sHorizAnalog[4], + *m_sStickSrc[4], + *m_sCStickSrc[4], + *m_sTriggerSrc[4], + *m_Sizer_Pad[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4], + *m_sHorizMapping[4]; + + wxStaticBoxSizer *m_gJoyPad[4], + *m_gStickLeft[4], + *m_gStickRight[4], + *m_gTriggers[4], + *m_gAnalog[4], + *m_gButton[4], + *m_gDPad[4], + *m_gStick[4], + *m_gCStick[4], + *m_gTrigger[4]; + + wxStaticText *m_ComboDeadZoneLabel[4], + *m_DiagonalLabel[4], + *m_RumbleStrengthLabel[4], + *m_tStatusLeftIn[4], *m_tStatusLeftOut[4], + *m_tStatusRightIn[4], *m_tStatusRightOut[4], + *m_TriggerL[4], *m_TriggerR[4], + *m_TriggerStatusL[4], *m_TriggerStatusR[4], + *m_tTriggerSource[4], + *m_Text_Analog[IDB_TRIGGER_R - IDB_ANALOG_LEFT_X + 1][4], + *m_Text_Pad[IDB_SHDR_SEMI_R - IDB_BTN_A + 1][4], + *m_Text_StickSrc[4], + *m_Text_CStickSrc[4], + *m_Text_TriggerSrc[4]; + + wxStaticBitmap *m_bmpDotLeftIn[4], + *m_bmpDotLeftOut[4], + *m_bmpDotRightIn[4], + *m_bmpDotRightOut[4], + *m_bmpDeadZoneLeftIn[4], + *m_bmpDeadZoneRightIn[4]; + + bool m_ControlsCreated; + int m_Page, BoxW, BoxH; + int GetButtonWaitingID, GetButtonWaitingTimer, g_Pressed; + wxString OldLabel; + + #if wxUSE_TIMER + wxTimer *m_UpdatePadTimer, *m_ButtonMappingTimer; + void UpdatePadInfo(wxTimerEvent& WXUNUSED(event)); + void OnButtonTimer(wxTimerEvent& WXUNUSED(event)) { DoGetButtons(GetButtonWaitingID); } + #endif + + wxBitmap CreateBitmap(); + wxBitmap CreateBitmapDot(); + wxBitmap CreateBitmapDeadZone(int Radius); + wxBitmap CreateBitmapClear(); + + void NotebookPageChanged(wxNotebookEvent& event); + void OnClose(wxCloseEvent& event); + void OnCloseClick(wxCommandEvent& event); + void OnKeyDown(wxKeyEvent& event); + void OnButtonClick(wxCommandEvent& event); + void OnAxisClick(wxCommandEvent& event); + void ChangeSettings(wxCommandEvent& event); + void SaveButtonMapping(int Id, int Key); + void UpdateGUI(); + void CreateGUIControls(); + + void Convert2Box(int &x); + void DoChangeDeadZone(); + void ToBlank(bool ToBlank, int Id); + + void DoGetButtons(int _GetId); + void EndGetButtons(); + void SetButtonText(int id, const wxString &str); + wxString GetButtonText(int id); +}; + +#endif // __GCPAD_CONFIGBOX_h__ diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.cpp index 194bab872c..99d9944170 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.cpp @@ -1,408 +1,408 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include "IniFile.h" -#include "Debugger.h" -#include "FileUtil.h" - -#include "VideoConfig.h" -#include "../Globals.h" -#include "../D3DBase.h" -#include "../FramebufferManager.h" -#include "../TextureCache.h" -#include "../VertexShaderCache.h" -#include "../PixelShaderCache.h" - -extern int g_Preset; - -BEGIN_EVENT_TABLE(GFXDebuggerDX9,wxDialog) - EVT_CLOSE(GFXDebuggerDX9::OnClose) - EVT_CHECKBOX(ID_SAVETOFILE,GFXDebuggerDX9::GeneralSettings) - EVT_CHECKBOX(ID_INFOLOG,GFXDebuggerDX9::GeneralSettings) - EVT_CHECKBOX(ID_PRIMLOG,GFXDebuggerDX9::GeneralSettings) - EVT_CHECKBOX(ID_SAVETEXTURES,GFXDebuggerDX9::GeneralSettings) - EVT_CHECKBOX(ID_SAVETARGETS,GFXDebuggerDX9::GeneralSettings) - EVT_CHECKBOX(ID_SAVESHADERS,GFXDebuggerDX9::GeneralSettings) - EVT_BUTTON(ID_PAUSE,GFXDebuggerDX9::OnPauseButton) - EVT_BUTTON(ID_PAUSE_AT_NEXT,GFXDebuggerDX9::OnPauseAtNextButton) - EVT_BUTTON(ID_PAUSE_AT_NEXT_FRAME,GFXDebuggerDX9::OnPauseAtNextFrameButton) - EVT_BUTTON(ID_GO,GFXDebuggerDX9::OnGoButton) - EVT_BUTTON(ID_DUMP,GFXDebuggerDX9::OnDumpButton) - EVT_BUTTON(ID_UPDATE_SCREEN,GFXDebuggerDX9::OnUpdateScreenButton) - EVT_BUTTON(ID_CLEAR_SCREEN,GFXDebuggerDX9::OnClearScreenButton) - EVT_BUTTON(ID_CLEAR_TEXTURE_CACHE,GFXDebuggerDX9::OnClearTextureCacheButton) - EVT_BUTTON(ID_CLEAR_VERTEX_SHADER_CACHE,GFXDebuggerDX9::OnClearVertexShaderCacheButton) - EVT_BUTTON(ID_CLEAR_PIXEL_SHADER_CACHE,GFXDebuggerDX9::OnClearPixelShaderCacheButton) -END_EVENT_TABLE() - - -GFXDebuggerDX9::GFXDebuggerDX9(wxWindow *parent, wxWindowID id, const wxString &title, - const wxPoint &position, const wxSize& size, long style) - : wxDialog(parent, id, title, position, size, style) -{ - CreateGUIControls(); - - LoadSettings(); -} - -GFXDebuggerDX9::~GFXDebuggerDX9() -{ - SaveSettings(); -} - -void GFXDebuggerDX9::OnClose(wxCloseEvent& event) -{ - // save the window position when we hide the window - SaveSettings(); - - event.Skip(); // This means wxDialog's Destroy is used -} - -void GFXDebuggerDX9::SaveSettings() const -{ - IniFile file; - file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); - - // TODO: make this work when we close the entire program too, currently on total close we get - // weird values, perhaps because of some conflict with the rendering window - // TODO: get the screen resolution and make limits from that - if (GetPosition().x < 1000 && GetPosition().y < 1000 - && GetSize().GetWidth() < 1000 - && GetSize().GetHeight() < 1000) - { - file.Set("VideoWindow", "x", GetPosition().x); - file.Set("VideoWindow", "y", GetPosition().y); - file.Set("VideoWindow", "w", GetSize().GetWidth()); - file.Set("VideoWindow", "h", GetSize().GetHeight()); - } - - file.Set("VideoWindow", "WriteToFile", m_Check[0]->IsChecked()); - - //g_Config.iLog = bInfoLog ? CONF_LOG : 0; - //g_Config.iLog |= bPrimLog ? CONF_PRIMLOG : 0; - //g_Config.iLog |= bSaveTextures ? CONF_SAVETEXTURES : 0; - //g_Config.iLog |= bSaveTargets ? CONF_SAVETARGETS : 0; - //g_Config.iLog |= bSaveShaders ? CONF_SAVESHADERS : 0; - - //file.Set("VideoWindow", "ConfBits", g_Config.iLog); - - file.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); -} - -void GFXDebuggerDX9::LoadSettings() -{ - IniFile file; - file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); - - int x = 100, y = 100, w = 100, h = 100; - file.Get("VideoWindow", "x", &x, GetPosition().x); - file.Get("VideoWindow", "y", &y, GetPosition().y); - file.Get("VideoWindow", "w", &w, GetSize().GetWidth()); - file.Get("VideoWindow", "h", &h, GetSize().GetHeight()); - SetSize(x, y, w, h); - - //file.Get("VideoWindow", "ConfBits", &g_Config.iLog, 0); - //bInfoLog = (g_Config.iLog & CONF_LOG) ? true : false; - //bPrimLog = (g_Config.iLog & CONF_PRIMLOG) ? true : false; - //bSaveTextures = (g_Config.iLog & CONF_SAVETEXTURES) ? true : false; - //bSaveTargets = (g_Config.iLog & CONF_SAVETARGETS) ? true : false; - //bSaveShaders = (g_Config.iLog & CONF_SAVESHADERS) ? true : false; - //m_Check[1]->SetValue(bInfoLog); - //m_Check[2]->SetValue(bPrimLog); - //m_Check[3]->SetValue(bSaveTextures); - //m_Check[4]->SetValue(bSaveTargets); - //m_Check[5]->SetValue(bSaveShaders); -} - -struct PauseEventMap -{ - PauseEvent event; - const wxString ListStr; -}; - -static PauseEventMap pauseEventMap[] = { - {NEXT_FRAME, wxT("Frame")}, - {NEXT_FLUSH, wxT("Flush")}, - - {NEXT_PIXEL_SHADER_CHANGE, wxT("Pixel Shader")}, - {NEXT_VERTEX_SHADER_CHANGE, wxT("Vertex Shader")}, - {NEXT_TEXTURE_CHANGE, wxT("Texture")}, - {NEXT_NEW_TEXTURE, wxT("New Texture")}, - - {NEXT_XFB_CMD, wxT("XFB Cmd")}, - {NEXT_EFB_CMD, wxT("EFB Cmd")}, - - {NEXT_MATRIX_CMD, wxT("Matrix Cmd")}, - {NEXT_VERTEX_CMD, wxT("Vertex Cmd")}, - {NEXT_TEXTURE_CMD, wxT("Texture Cmd")}, - {NEXT_LIGHT_CMD, wxT("Light Cmd")}, - {NEXT_FOG_CMD, wxT("Fog Cmd")}, - - {NEXT_SET_TLUT, wxT("TLUT Cmd")}, - - {NEXT_ERROR, wxT("Error")} -}; -static const int numPauseEventMap = sizeof(pauseEventMap)/sizeof(PauseEventMap); - - -static GFXDebuggerDX9 *g_pdebugger = NULL; - -void GFXDebuggerDX9::CreateGUIControls() -{ - g_pdebugger = this; - - // Basic settings - SetIcon(wxNullIcon); - CenterOnParent(); - - // MainPanel - m_MainPanel = new wxPanel(this, ID_MAINPANEL, wxDefaultPosition, wxDefaultSize); - - // Options - wxStaticBoxSizer *sOptions = new wxStaticBoxSizer(wxVERTICAL, m_MainPanel, wxT("Options")); - m_Check[0] = new wxCheckBox(m_MainPanel, ID_SAVETOFILE, wxT("Save to file"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Check[1] = new wxCheckBox(m_MainPanel, ID_INFOLOG, wxT("Info log"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Check[2] = new wxCheckBox(m_MainPanel, ID_PRIMLOG, wxT("Primary log"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Check[3] = new wxCheckBox(m_MainPanel, ID_SAVETEXTURES, wxT("Save Textures"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Check[4] = new wxCheckBox(m_MainPanel, ID_SAVETARGETS, wxT("Save Targets"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Check[5] = new wxCheckBox(m_MainPanel, ID_SAVESHADERS, wxT("Save Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - - m_pButtonPause = new wxButton(m_MainPanel, ID_PAUSE, wxT("Pause"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Pause")); - m_pButtonPauseAtNext = new wxButton(m_MainPanel, ID_PAUSE_AT_NEXT, wxT("Pause At Next"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Pause At Next")); - m_pButtonPauseAtNextFrame = new wxButton(m_MainPanel, ID_PAUSE_AT_NEXT_FRAME, wxT("Next Frame"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Next Frame")); - m_pButtonGo = new wxButton(m_MainPanel, ID_GO, wxT("Go"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Go")); - - m_pPauseAtList = new wxChoice(m_MainPanel, ID_PAUSE_AT_LIST, wxDefaultPosition, wxSize(100,25), 0, NULL,0,wxDefaultValidator, wxT("PauseAtList")); - for (int i=0; iAppend(pauseEventMap[i].ListStr); - } - - m_pPauseAtList->SetSelection(0); - - m_pButtonDump = new wxButton(m_MainPanel, ID_DUMP, wxT("Dump"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Dump")); - m_pButtonUpdateScreen = new wxButton(m_MainPanel, ID_UPDATE_SCREEN, wxT("Update Screen"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Update Screen")); - m_pButtonClearScreen = new wxButton(m_MainPanel, ID_CLEAR_SCREEN, wxT("Clear Screen"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear Screen")); - m_pButtonClearTextureCache = new wxButton(m_MainPanel, ID_CLEAR_TEXTURE_CACHE, wxT("Clear Textures"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear Textures")); - m_pButtonClearVertexShaderCache = new wxButton(m_MainPanel, ID_CLEAR_VERTEX_SHADER_CACHE, wxT("Clear V Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear V Shaders")); - m_pButtonClearPixelShaderCache = new wxButton(m_MainPanel, ID_CLEAR_PIXEL_SHADER_CACHE, wxT("Clear P Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear P Shaders")); - m_pCount = new wxTextCtrl(m_MainPanel, ID_COUNT, wxT("1"), wxDefaultPosition, wxSize(50,25), 0, wxDefaultValidator, wxT("Count")); - - m_pDumpList = new wxChoice(m_MainPanel, ID_DUMP_LIST, wxDefaultPosition, wxSize(120,25), 0, NULL,0,wxDefaultValidator, wxT("DumpList")); - m_pDumpList->Insert(wxT("Pixel Shader"),0); - m_pDumpList->Append(wxT("Vertex Shader")); - m_pDumpList->Append(wxT("Pixel Shader Constants")); - m_pDumpList->Append(wxT("Vertex Shader Constants")); - m_pDumpList->Append(wxT("Texture 0")); - m_pDumpList->Append(wxT("Texture 1")); - m_pDumpList->Append(wxT("Texture 2")); - m_pDumpList->Append(wxT("Texture 3")); - m_pDumpList->Append(wxT("Texture 4")); - m_pDumpList->Append(wxT("Texture 5")); - m_pDumpList->Append(wxT("Texture 6")); - m_pDumpList->Append(wxT("Texture 8")); - m_pDumpList->Append(wxT("Frame Buffer")); - m_pDumpList->Append(wxT("Vertices")); - m_pDumpList->Append(wxT("Vertex Description")); - m_pDumpList->Append(wxT("Vertex Matrices")); - m_pDumpList->Append(wxT("Statistics")); - m_pDumpList->SetSelection(0); - - for (int i = 0; i < NUM_OPTIONS-ID_SAVETOFILE; ++i) - sOptions->Add(m_Check[i], 0, 0, 5); - - // Layout everything on m_MainPanel - wxBoxSizer *sMain = new wxBoxSizer(wxVERTICAL); - - sMain->Add(sOptions); - sMain->Add(m_pButtonPause, 0, 0, 5); - sMain->Add(m_pButtonPauseAtNext, 0, 0, 5); - sMain->Add(m_pCount,0,0,5); - sMain->Add(m_pPauseAtList, 0, 0, 5); - sMain->Add(m_pButtonDump, 0, 0, 5); - sMain->Add(m_pDumpList, 0, 0, 5); - sMain->Add(m_pButtonUpdateScreen, 0, 0, 5); - sMain->Add(m_pButtonClearScreen, 0, 0, 5); - sMain->Add(m_pButtonClearTextureCache, 0, 0, 5); - sMain->Add(m_pButtonClearVertexShaderCache, 0, 0, 5); - sMain->Add(m_pButtonClearPixelShaderCache, 0, 0, 5); - sMain->Add(m_pButtonPauseAtNextFrame, 0, 0, 5); - sMain->Add(m_pButtonGo, 0, 0, 5); - m_MainPanel->SetSizerAndFit(sMain); - Fit(); - - EnableButtons(false); -} - -void GFXDebuggerDX9::EnableButtons(bool enable) -{ - m_pButtonDump->Enable(enable); - m_pButtonUpdateScreen->Enable(enable); - m_pButtonClearScreen->Enable(enable); - m_pButtonClearTextureCache->Enable(enable); - m_pButtonClearVertexShaderCache->Enable(enable); - m_pButtonClearPixelShaderCache->Enable(enable); -} - - -// General settings -void GFXDebuggerDX9::GeneralSettings(wxCommandEvent& event) -{ - switch (event.GetId()) - { - case ID_INFOLOG: - bInfoLog = event.IsChecked(); - break; - case ID_PRIMLOG: - bPrimLog = event.IsChecked(); - break; - case ID_SAVETEXTURES: - bSaveTextures = event.IsChecked(); - break; - case ID_SAVETARGETS: - bSaveTargets = event.IsChecked(); - break; - case ID_SAVESHADERS: - bSaveShaders = event.IsChecked(); - break; - } - SaveSettings(); -} - -volatile bool DX9DebuggerPauseFlag = false; -volatile PauseEvent DX9DebuggerToPauseAtNext = NOT_PAUSE; -volatile int DX9DebuggerEventToPauseCount = 0; - -void GFXDebuggerDX9::OnPauseButton(wxCommandEvent& event) -{ - DX9DebuggerPauseFlag = true; -} - -void GFXDebuggerDX9::OnPauseAtNextButton(wxCommandEvent& event) -{ - DX9DebuggerPauseFlag = false; - DX9DebuggerToPauseAtNext = pauseEventMap[m_pPauseAtList->GetSelection()].event; - wxString val = m_pCount->GetValue(); - long value; - if (val.ToLong(&value) ) - DX9DebuggerEventToPauseCount = value; - else - DX9DebuggerEventToPauseCount = 1; -} - -void GFXDebuggerDX9::OnPauseAtNextFrameButton(wxCommandEvent& event) -{ - DX9DebuggerPauseFlag = false; - DX9DebuggerToPauseAtNext = NEXT_FRAME; - DX9DebuggerEventToPauseCount = 1; -} - -void GFXDebuggerDX9::OnDumpButton(wxCommandEvent& event) -{ -} - -void GFXDebuggerDX9::OnGoButton(wxCommandEvent& event) -{ - DX9DebuggerToPauseAtNext = NOT_PAUSE; - DX9DebuggerPauseFlag = false; -} - -void GFXDebuggerDX9::OnClearScreenButton(wxCommandEvent& event) -{ -} - -void GFXDebuggerDX9::OnClearTextureCacheButton(wxCommandEvent& event) -{ - TextureCache::Invalidate(false); -} - -void GFXDebuggerDX9::OnClearVertexShaderCacheButton(wxCommandEvent& event) -{ - VertexShaderCache::Clear(); -} - -void GFXDebuggerDX9::OnClearPixelShaderCacheButton(wxCommandEvent& event) -{ - PixelShaderCache::Clear(); -} - -void UpdateFPSDisplay(const char *text); -extern bool D3D::bFrameInProgress; - -static void DX9DebuggerUpdateScreen() -{ - // update screen - if (D3D::bFrameInProgress) - { - D3D::dev->SetRenderTarget(0, D3D::GetBackBufferSurface()); - D3D::dev->SetDepthStencilSurface(NULL); - - D3D::dev->StretchRect(FBManager.GetEFBColorRTSurface(), NULL, - D3D::GetBackBufferSurface(), NULL, - D3DTEXF_LINEAR); - - D3D::dev->EndScene(); - D3D::dev->Present(NULL, NULL, NULL, NULL); - - D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); - D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); - D3D::dev->BeginScene(); - } - else - { - D3D::dev->EndScene(); - D3D::dev->Present(NULL, NULL, NULL, NULL); - D3D::dev->BeginScene(); - } -} - - -void DX9DebuggerCheckAndPause(bool update) -{ - if (DX9DebuggerPauseFlag) - { - g_pdebugger->EnableButtons(true); - while( DX9DebuggerPauseFlag ) - { - - UpdateFPSDisplay("Paused by Video Debugger"); - - if (update) DX9DebuggerUpdateScreen(); - Sleep(5); - } - g_pdebugger->EnableButtons(false); - } -} - -void DX9DebuggerToPause(bool update) -{ - DX9DebuggerToPauseAtNext = NOT_PAUSE; - DX9DebuggerPauseFlag = true; - DX9DebuggerCheckAndPause(update); -} - - -void ContinueDX9Debugger() -{ - DX9DebuggerPauseFlag = false; -} - -void GFXDebuggerDX9::OnUpdateScreenButton(wxCommandEvent& event) -{ - DX9DebuggerUpdateScreen(); -} +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include "IniFile.h" +#include "Debugger.h" +#include "FileUtil.h" + +#include "VideoConfig.h" +#include "../Globals.h" +#include "../D3DBase.h" +#include "../FramebufferManager.h" +#include "../TextureCache.h" +#include "../VertexShaderCache.h" +#include "../PixelShaderCache.h" + +extern int g_Preset; + +BEGIN_EVENT_TABLE(GFXDebuggerDX9,wxDialog) + EVT_CLOSE(GFXDebuggerDX9::OnClose) + EVT_CHECKBOX(ID_SAVETOFILE,GFXDebuggerDX9::GeneralSettings) + EVT_CHECKBOX(ID_INFOLOG,GFXDebuggerDX9::GeneralSettings) + EVT_CHECKBOX(ID_PRIMLOG,GFXDebuggerDX9::GeneralSettings) + EVT_CHECKBOX(ID_SAVETEXTURES,GFXDebuggerDX9::GeneralSettings) + EVT_CHECKBOX(ID_SAVETARGETS,GFXDebuggerDX9::GeneralSettings) + EVT_CHECKBOX(ID_SAVESHADERS,GFXDebuggerDX9::GeneralSettings) + EVT_BUTTON(ID_PAUSE,GFXDebuggerDX9::OnPauseButton) + EVT_BUTTON(ID_PAUSE_AT_NEXT,GFXDebuggerDX9::OnPauseAtNextButton) + EVT_BUTTON(ID_PAUSE_AT_NEXT_FRAME,GFXDebuggerDX9::OnPauseAtNextFrameButton) + EVT_BUTTON(ID_GO,GFXDebuggerDX9::OnGoButton) + EVT_BUTTON(ID_DUMP,GFXDebuggerDX9::OnDumpButton) + EVT_BUTTON(ID_UPDATE_SCREEN,GFXDebuggerDX9::OnUpdateScreenButton) + EVT_BUTTON(ID_CLEAR_SCREEN,GFXDebuggerDX9::OnClearScreenButton) + EVT_BUTTON(ID_CLEAR_TEXTURE_CACHE,GFXDebuggerDX9::OnClearTextureCacheButton) + EVT_BUTTON(ID_CLEAR_VERTEX_SHADER_CACHE,GFXDebuggerDX9::OnClearVertexShaderCacheButton) + EVT_BUTTON(ID_CLEAR_PIXEL_SHADER_CACHE,GFXDebuggerDX9::OnClearPixelShaderCacheButton) +END_EVENT_TABLE() + + +GFXDebuggerDX9::GFXDebuggerDX9(wxWindow *parent, wxWindowID id, const wxString &title, + const wxPoint &position, const wxSize& size, long style) + : wxDialog(parent, id, title, position, size, style) +{ + CreateGUIControls(); + + LoadSettings(); +} + +GFXDebuggerDX9::~GFXDebuggerDX9() +{ + SaveSettings(); +} + +void GFXDebuggerDX9::OnClose(wxCloseEvent& event) +{ + // save the window position when we hide the window + SaveSettings(); + + event.Skip(); // This means wxDialog's Destroy is used +} + +void GFXDebuggerDX9::SaveSettings() const +{ + IniFile file; + file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); + + // TODO: make this work when we close the entire program too, currently on total close we get + // weird values, perhaps because of some conflict with the rendering window + // TODO: get the screen resolution and make limits from that + if (GetPosition().x < 1000 && GetPosition().y < 1000 + && GetSize().GetWidth() < 1000 + && GetSize().GetHeight() < 1000) + { + file.Set("VideoWindow", "x", GetPosition().x); + file.Set("VideoWindow", "y", GetPosition().y); + file.Set("VideoWindow", "w", GetSize().GetWidth()); + file.Set("VideoWindow", "h", GetSize().GetHeight()); + } + + file.Set("VideoWindow", "WriteToFile", m_Check[0]->IsChecked()); + + //g_Config.iLog = bInfoLog ? CONF_LOG : 0; + //g_Config.iLog |= bPrimLog ? CONF_PRIMLOG : 0; + //g_Config.iLog |= bSaveTextures ? CONF_SAVETEXTURES : 0; + //g_Config.iLog |= bSaveTargets ? CONF_SAVETARGETS : 0; + //g_Config.iLog |= bSaveShaders ? CONF_SAVESHADERS : 0; + + //file.Set("VideoWindow", "ConfBits", g_Config.iLog); + + file.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); +} + +void GFXDebuggerDX9::LoadSettings() +{ + IniFile file; + file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); + + int x = 100, y = 100, w = 100, h = 100; + file.Get("VideoWindow", "x", &x, GetPosition().x); + file.Get("VideoWindow", "y", &y, GetPosition().y); + file.Get("VideoWindow", "w", &w, GetSize().GetWidth()); + file.Get("VideoWindow", "h", &h, GetSize().GetHeight()); + SetSize(x, y, w, h); + + //file.Get("VideoWindow", "ConfBits", &g_Config.iLog, 0); + //bInfoLog = (g_Config.iLog & CONF_LOG) ? true : false; + //bPrimLog = (g_Config.iLog & CONF_PRIMLOG) ? true : false; + //bSaveTextures = (g_Config.iLog & CONF_SAVETEXTURES) ? true : false; + //bSaveTargets = (g_Config.iLog & CONF_SAVETARGETS) ? true : false; + //bSaveShaders = (g_Config.iLog & CONF_SAVESHADERS) ? true : false; + //m_Check[1]->SetValue(bInfoLog); + //m_Check[2]->SetValue(bPrimLog); + //m_Check[3]->SetValue(bSaveTextures); + //m_Check[4]->SetValue(bSaveTargets); + //m_Check[5]->SetValue(bSaveShaders); +} + +struct PauseEventMap +{ + PauseEvent event; + const wxString ListStr; +}; + +static PauseEventMap pauseEventMap[] = { + {NEXT_FRAME, wxT("Frame")}, + {NEXT_FLUSH, wxT("Flush")}, + + {NEXT_PIXEL_SHADER_CHANGE, wxT("Pixel Shader")}, + {NEXT_VERTEX_SHADER_CHANGE, wxT("Vertex Shader")}, + {NEXT_TEXTURE_CHANGE, wxT("Texture")}, + {NEXT_NEW_TEXTURE, wxT("New Texture")}, + + {NEXT_XFB_CMD, wxT("XFB Cmd")}, + {NEXT_EFB_CMD, wxT("EFB Cmd")}, + + {NEXT_MATRIX_CMD, wxT("Matrix Cmd")}, + {NEXT_VERTEX_CMD, wxT("Vertex Cmd")}, + {NEXT_TEXTURE_CMD, wxT("Texture Cmd")}, + {NEXT_LIGHT_CMD, wxT("Light Cmd")}, + {NEXT_FOG_CMD, wxT("Fog Cmd")}, + + {NEXT_SET_TLUT, wxT("TLUT Cmd")}, + + {NEXT_ERROR, wxT("Error")} +}; +static const int numPauseEventMap = sizeof(pauseEventMap)/sizeof(PauseEventMap); + + +static GFXDebuggerDX9 *g_pdebugger = NULL; + +void GFXDebuggerDX9::CreateGUIControls() +{ + g_pdebugger = this; + + // Basic settings + SetIcon(wxNullIcon); + CenterOnParent(); + + // MainPanel + m_MainPanel = new wxPanel(this, ID_MAINPANEL, wxDefaultPosition, wxDefaultSize); + + // Options + wxStaticBoxSizer *sOptions = new wxStaticBoxSizer(wxVERTICAL, m_MainPanel, wxT("Options")); + m_Check[0] = new wxCheckBox(m_MainPanel, ID_SAVETOFILE, wxT("Save to file"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Check[1] = new wxCheckBox(m_MainPanel, ID_INFOLOG, wxT("Info log"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Check[2] = new wxCheckBox(m_MainPanel, ID_PRIMLOG, wxT("Primary log"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Check[3] = new wxCheckBox(m_MainPanel, ID_SAVETEXTURES, wxT("Save Textures"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Check[4] = new wxCheckBox(m_MainPanel, ID_SAVETARGETS, wxT("Save Targets"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Check[5] = new wxCheckBox(m_MainPanel, ID_SAVESHADERS, wxT("Save Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + + m_pButtonPause = new wxButton(m_MainPanel, ID_PAUSE, wxT("Pause"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Pause")); + m_pButtonPauseAtNext = new wxButton(m_MainPanel, ID_PAUSE_AT_NEXT, wxT("Pause At Next"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Pause At Next")); + m_pButtonPauseAtNextFrame = new wxButton(m_MainPanel, ID_PAUSE_AT_NEXT_FRAME, wxT("Next Frame"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Next Frame")); + m_pButtonGo = new wxButton(m_MainPanel, ID_GO, wxT("Go"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Go")); + + m_pPauseAtList = new wxChoice(m_MainPanel, ID_PAUSE_AT_LIST, wxDefaultPosition, wxSize(100,25), 0, NULL,0,wxDefaultValidator, wxT("PauseAtList")); + for (int i=0; iAppend(pauseEventMap[i].ListStr); + } + + m_pPauseAtList->SetSelection(0); + + m_pButtonDump = new wxButton(m_MainPanel, ID_DUMP, wxT("Dump"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Dump")); + m_pButtonUpdateScreen = new wxButton(m_MainPanel, ID_UPDATE_SCREEN, wxT("Update Screen"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Update Screen")); + m_pButtonClearScreen = new wxButton(m_MainPanel, ID_CLEAR_SCREEN, wxT("Clear Screen"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear Screen")); + m_pButtonClearTextureCache = new wxButton(m_MainPanel, ID_CLEAR_TEXTURE_CACHE, wxT("Clear Textures"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear Textures")); + m_pButtonClearVertexShaderCache = new wxButton(m_MainPanel, ID_CLEAR_VERTEX_SHADER_CACHE, wxT("Clear V Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear V Shaders")); + m_pButtonClearPixelShaderCache = new wxButton(m_MainPanel, ID_CLEAR_PIXEL_SHADER_CACHE, wxT("Clear P Shaders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Clear P Shaders")); + m_pCount = new wxTextCtrl(m_MainPanel, ID_COUNT, wxT("1"), wxDefaultPosition, wxSize(50,25), 0, wxDefaultValidator, wxT("Count")); + + m_pDumpList = new wxChoice(m_MainPanel, ID_DUMP_LIST, wxDefaultPosition, wxSize(120,25), 0, NULL,0,wxDefaultValidator, wxT("DumpList")); + m_pDumpList->Insert(wxT("Pixel Shader"),0); + m_pDumpList->Append(wxT("Vertex Shader")); + m_pDumpList->Append(wxT("Pixel Shader Constants")); + m_pDumpList->Append(wxT("Vertex Shader Constants")); + m_pDumpList->Append(wxT("Texture 0")); + m_pDumpList->Append(wxT("Texture 1")); + m_pDumpList->Append(wxT("Texture 2")); + m_pDumpList->Append(wxT("Texture 3")); + m_pDumpList->Append(wxT("Texture 4")); + m_pDumpList->Append(wxT("Texture 5")); + m_pDumpList->Append(wxT("Texture 6")); + m_pDumpList->Append(wxT("Texture 8")); + m_pDumpList->Append(wxT("Frame Buffer")); + m_pDumpList->Append(wxT("Vertices")); + m_pDumpList->Append(wxT("Vertex Description")); + m_pDumpList->Append(wxT("Vertex Matrices")); + m_pDumpList->Append(wxT("Statistics")); + m_pDumpList->SetSelection(0); + + for (int i = 0; i < NUM_OPTIONS-ID_SAVETOFILE; ++i) + sOptions->Add(m_Check[i], 0, 0, 5); + + // Layout everything on m_MainPanel + wxBoxSizer *sMain = new wxBoxSizer(wxVERTICAL); + + sMain->Add(sOptions); + sMain->Add(m_pButtonPause, 0, 0, 5); + sMain->Add(m_pButtonPauseAtNext, 0, 0, 5); + sMain->Add(m_pCount,0,0,5); + sMain->Add(m_pPauseAtList, 0, 0, 5); + sMain->Add(m_pButtonDump, 0, 0, 5); + sMain->Add(m_pDumpList, 0, 0, 5); + sMain->Add(m_pButtonUpdateScreen, 0, 0, 5); + sMain->Add(m_pButtonClearScreen, 0, 0, 5); + sMain->Add(m_pButtonClearTextureCache, 0, 0, 5); + sMain->Add(m_pButtonClearVertexShaderCache, 0, 0, 5); + sMain->Add(m_pButtonClearPixelShaderCache, 0, 0, 5); + sMain->Add(m_pButtonPauseAtNextFrame, 0, 0, 5); + sMain->Add(m_pButtonGo, 0, 0, 5); + m_MainPanel->SetSizerAndFit(sMain); + Fit(); + + EnableButtons(false); +} + +void GFXDebuggerDX9::EnableButtons(bool enable) +{ + m_pButtonDump->Enable(enable); + m_pButtonUpdateScreen->Enable(enable); + m_pButtonClearScreen->Enable(enable); + m_pButtonClearTextureCache->Enable(enable); + m_pButtonClearVertexShaderCache->Enable(enable); + m_pButtonClearPixelShaderCache->Enable(enable); +} + + +// General settings +void GFXDebuggerDX9::GeneralSettings(wxCommandEvent& event) +{ + switch (event.GetId()) + { + case ID_INFOLOG: + bInfoLog = event.IsChecked(); + break; + case ID_PRIMLOG: + bPrimLog = event.IsChecked(); + break; + case ID_SAVETEXTURES: + bSaveTextures = event.IsChecked(); + break; + case ID_SAVETARGETS: + bSaveTargets = event.IsChecked(); + break; + case ID_SAVESHADERS: + bSaveShaders = event.IsChecked(); + break; + } + SaveSettings(); +} + +volatile bool DX9DebuggerPauseFlag = false; +volatile PauseEvent DX9DebuggerToPauseAtNext = NOT_PAUSE; +volatile int DX9DebuggerEventToPauseCount = 0; + +void GFXDebuggerDX9::OnPauseButton(wxCommandEvent& event) +{ + DX9DebuggerPauseFlag = true; +} + +void GFXDebuggerDX9::OnPauseAtNextButton(wxCommandEvent& event) +{ + DX9DebuggerPauseFlag = false; + DX9DebuggerToPauseAtNext = pauseEventMap[m_pPauseAtList->GetSelection()].event; + wxString val = m_pCount->GetValue(); + long value; + if (val.ToLong(&value) ) + DX9DebuggerEventToPauseCount = value; + else + DX9DebuggerEventToPauseCount = 1; +} + +void GFXDebuggerDX9::OnPauseAtNextFrameButton(wxCommandEvent& event) +{ + DX9DebuggerPauseFlag = false; + DX9DebuggerToPauseAtNext = NEXT_FRAME; + DX9DebuggerEventToPauseCount = 1; +} + +void GFXDebuggerDX9::OnDumpButton(wxCommandEvent& event) +{ +} + +void GFXDebuggerDX9::OnGoButton(wxCommandEvent& event) +{ + DX9DebuggerToPauseAtNext = NOT_PAUSE; + DX9DebuggerPauseFlag = false; +} + +void GFXDebuggerDX9::OnClearScreenButton(wxCommandEvent& event) +{ +} + +void GFXDebuggerDX9::OnClearTextureCacheButton(wxCommandEvent& event) +{ + TextureCache::Invalidate(false); +} + +void GFXDebuggerDX9::OnClearVertexShaderCacheButton(wxCommandEvent& event) +{ + VertexShaderCache::Clear(); +} + +void GFXDebuggerDX9::OnClearPixelShaderCacheButton(wxCommandEvent& event) +{ + PixelShaderCache::Clear(); +} + +void UpdateFPSDisplay(const char *text); +extern bool D3D::bFrameInProgress; + +static void DX9DebuggerUpdateScreen() +{ + // update screen + if (D3D::bFrameInProgress) + { + D3D::dev->SetRenderTarget(0, D3D::GetBackBufferSurface()); + D3D::dev->SetDepthStencilSurface(NULL); + + D3D::dev->StretchRect(FBManager.GetEFBColorRTSurface(), NULL, + D3D::GetBackBufferSurface(), NULL, + D3DTEXF_LINEAR); + + D3D::dev->EndScene(); + D3D::dev->Present(NULL, NULL, NULL, NULL); + + D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); + D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); + D3D::dev->BeginScene(); + } + else + { + D3D::dev->EndScene(); + D3D::dev->Present(NULL, NULL, NULL, NULL); + D3D::dev->BeginScene(); + } +} + + +void DX9DebuggerCheckAndPause(bool update) +{ + if (DX9DebuggerPauseFlag) + { + g_pdebugger->EnableButtons(true); + while( DX9DebuggerPauseFlag ) + { + + UpdateFPSDisplay("Paused by Video Debugger"); + + if (update) DX9DebuggerUpdateScreen(); + Sleep(5); + } + g_pdebugger->EnableButtons(false); + } +} + +void DX9DebuggerToPause(bool update) +{ + DX9DebuggerToPauseAtNext = NOT_PAUSE; + DX9DebuggerPauseFlag = true; + DX9DebuggerCheckAndPause(update); +} + + +void ContinueDX9Debugger() +{ + DX9DebuggerPauseFlag = false; +} + +void GFXDebuggerDX9::OnUpdateScreenButton(wxCommandEvent& event) +{ + DX9DebuggerUpdateScreen(); +} diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.h b/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.h index 7c6b6e4f2a..6af2035f6c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/Debugger/Debugger.h @@ -1,171 +1,171 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _DX_DEBUGGER_H_ -#define _DX_DEBUGGER_H_ - -#include -#include - -#include "../Globals.h" - -class IniFile; - -class GFXDebuggerDX9 : public wxDialog -{ -public: - GFXDebuggerDX9(wxWindow *parent, - wxWindowID id = 1, - const wxString &title = wxT("Video"), - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - #ifdef _WIN32 - long style = wxNO_BORDER); - #else - long style = wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE); - #endif - - virtual ~GFXDebuggerDX9(); - - void SaveSettings() const; - void LoadSettings(); - - bool bInfoLog; - bool bPrimLog; - bool bSaveTextures; - bool bSaveTargets; - bool bSaveShaders; - - void EnableButtons(bool enable); - -private: - DECLARE_EVENT_TABLE(); - - wxPanel *m_MainPanel; - - wxCheckBox *m_Check[6]; - wxButton *m_pButtonPause; - wxButton *m_pButtonPauseAtNext; - wxButton *m_pButtonPauseAtNextFrame; - wxButton *m_pButtonGo; - wxChoice *m_pPauseAtList; - wxButton *m_pButtonDump; - wxChoice *m_pDumpList; - wxButton *m_pButtonUpdateScreen; - wxButton *m_pButtonClearScreen; - wxButton *m_pButtonClearTextureCache; - wxButton *m_pButtonClearVertexShaderCache; - wxButton *m_pButtonClearPixelShaderCache; - wxTextCtrl *m_pCount; - - - // WARNING: Make sure these are not also elsewhere - enum - { - ID_MAINPANEL = 3900, - ID_SAVETOFILE, - ID_INFOLOG, - ID_PRIMLOG, - ID_SAVETEXTURES, - ID_SAVETARGETS, - ID_SAVESHADERS, - NUM_OPTIONS, - ID_GO, - ID_PAUSE, - ID_PAUSE_AT_NEXT, - ID_PAUSE_AT_NEXT_FRAME, - ID_PAUSE_AT_LIST, - ID_DUMP, - ID_DUMP_LIST, - ID_UPDATE_SCREEN, - ID_CLEAR_SCREEN, - ID_CLEAR_TEXTURE_CACHE, - ID_CLEAR_VERTEX_SHADER_CACHE, - ID_CLEAR_PIXEL_SHADER_CACHE, - ID_COUNT - }; - - void OnClose(wxCloseEvent& event); - void CreateGUIControls(); - - void GeneralSettings(wxCommandEvent& event); - void OnPauseButton(wxCommandEvent& event); - void OnPauseAtNextButton(wxCommandEvent& event); - void OnPauseAtNextFrameButton(wxCommandEvent& event); - void OnDumpButton(wxCommandEvent& event); - void OnGoButton(wxCommandEvent& event); - void OnUpdateScreenButton(wxCommandEvent& event); - void OnClearScreenButton(wxCommandEvent& event); - void OnClearTextureCacheButton(wxCommandEvent& event); - void OnClearVertexShaderCacheButton(wxCommandEvent& event); - void OnClearPixelShaderCacheButton(wxCommandEvent& event); - void OnCountEnter(wxCommandEvent& event); - -}; - -enum PauseEvent { - NOT_PAUSE = 0, - NEXT_FRAME = 1<<0, - NEXT_FLUSH = 1<<1, - - NEXT_PIXEL_SHADER_CHANGE = 1<<2, - NEXT_VERTEX_SHADER_CHANGE = 1<<3, - NEXT_TEXTURE_CHANGE = 1<<4, - NEXT_NEW_TEXTURE = 1<<5, - - NEXT_XFB_CMD = 1<<6, - NEXT_EFB_CMD = 1<<7, - - NEXT_MATRIX_CMD = 1<<8, - NEXT_VERTEX_CMD = 1<<9, - NEXT_TEXTURE_CMD = 1<<10, - NEXT_LIGHT_CMD = 1<<11, - NEXT_FOG_CMD = 1<<12, - - NEXT_SET_TLUT = 1<<13, - - NEXT_ERROR = 1<<14, -}; - -extern volatile bool DX9DebuggerPauseFlag; -extern volatile PauseEvent DX9DebuggerToPauseAtNext; -extern volatile int DX9DebuggerEventToPauseCount; -void ContinueDX9Debugger(); -void DX9DebuggerCheckAndPause(bool update); -void DX9DebuggerToPause(bool update); - -#undef ENABLE_DX_DEBUGGER -#if defined(_DEBUG) || defined(DEBUGFAST) -#define ENABLE_DX_DEBUGGER -#endif - -#ifdef ENABLE_DX_DEBUGGER - -#define DEBUGGER_PAUSE_AT(event,update) {if (((DX9DebuggerToPauseAtNext & event) && --DX9DebuggerEventToPauseCount<=0) || DX9DebuggerPauseFlag) DX9DebuggerToPause(update);} -#define DEBUGGER_PAUSE_LOG_AT(event,update,dumpfunc) {if (((DX9DebuggerToPauseAtNext & event) && --DX9DebuggerEventToPauseCount<=0) || DX9DebuggerPauseFlag) {{dumpfunc};DX9DebuggerToPause(update);}} -#define DEBUGGER_LOG_AT(event,dumpfunc) {if (( DX9DebuggerToPauseAtNext & event ) ) {{dumpfunc};}} - -#else -// Not to use debugger in release build -#define DEBUGGER_PAUSE_AT(event,update) -#define DEBUGGER_PAUSE_LOG_AT(event,update,dumpfunc) -#define DEBUGGER_LOG_AT(event,dumpfunc) - -#endif ENABLE_DX_DEBUGGER - - -#endif // _DX_DEBUGGER_H_ +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _DX_DEBUGGER_H_ +#define _DX_DEBUGGER_H_ + +#include +#include + +#include "../Globals.h" + +class IniFile; + +class GFXDebuggerDX9 : public wxDialog +{ +public: + GFXDebuggerDX9(wxWindow *parent, + wxWindowID id = 1, + const wxString &title = wxT("Video"), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + #ifdef _WIN32 + long style = wxNO_BORDER); + #else + long style = wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE); + #endif + + virtual ~GFXDebuggerDX9(); + + void SaveSettings() const; + void LoadSettings(); + + bool bInfoLog; + bool bPrimLog; + bool bSaveTextures; + bool bSaveTargets; + bool bSaveShaders; + + void EnableButtons(bool enable); + +private: + DECLARE_EVENT_TABLE(); + + wxPanel *m_MainPanel; + + wxCheckBox *m_Check[6]; + wxButton *m_pButtonPause; + wxButton *m_pButtonPauseAtNext; + wxButton *m_pButtonPauseAtNextFrame; + wxButton *m_pButtonGo; + wxChoice *m_pPauseAtList; + wxButton *m_pButtonDump; + wxChoice *m_pDumpList; + wxButton *m_pButtonUpdateScreen; + wxButton *m_pButtonClearScreen; + wxButton *m_pButtonClearTextureCache; + wxButton *m_pButtonClearVertexShaderCache; + wxButton *m_pButtonClearPixelShaderCache; + wxTextCtrl *m_pCount; + + + // WARNING: Make sure these are not also elsewhere + enum + { + ID_MAINPANEL = 3900, + ID_SAVETOFILE, + ID_INFOLOG, + ID_PRIMLOG, + ID_SAVETEXTURES, + ID_SAVETARGETS, + ID_SAVESHADERS, + NUM_OPTIONS, + ID_GO, + ID_PAUSE, + ID_PAUSE_AT_NEXT, + ID_PAUSE_AT_NEXT_FRAME, + ID_PAUSE_AT_LIST, + ID_DUMP, + ID_DUMP_LIST, + ID_UPDATE_SCREEN, + ID_CLEAR_SCREEN, + ID_CLEAR_TEXTURE_CACHE, + ID_CLEAR_VERTEX_SHADER_CACHE, + ID_CLEAR_PIXEL_SHADER_CACHE, + ID_COUNT + }; + + void OnClose(wxCloseEvent& event); + void CreateGUIControls(); + + void GeneralSettings(wxCommandEvent& event); + void OnPauseButton(wxCommandEvent& event); + void OnPauseAtNextButton(wxCommandEvent& event); + void OnPauseAtNextFrameButton(wxCommandEvent& event); + void OnDumpButton(wxCommandEvent& event); + void OnGoButton(wxCommandEvent& event); + void OnUpdateScreenButton(wxCommandEvent& event); + void OnClearScreenButton(wxCommandEvent& event); + void OnClearTextureCacheButton(wxCommandEvent& event); + void OnClearVertexShaderCacheButton(wxCommandEvent& event); + void OnClearPixelShaderCacheButton(wxCommandEvent& event); + void OnCountEnter(wxCommandEvent& event); + +}; + +enum PauseEvent { + NOT_PAUSE = 0, + NEXT_FRAME = 1<<0, + NEXT_FLUSH = 1<<1, + + NEXT_PIXEL_SHADER_CHANGE = 1<<2, + NEXT_VERTEX_SHADER_CHANGE = 1<<3, + NEXT_TEXTURE_CHANGE = 1<<4, + NEXT_NEW_TEXTURE = 1<<5, + + NEXT_XFB_CMD = 1<<6, + NEXT_EFB_CMD = 1<<7, + + NEXT_MATRIX_CMD = 1<<8, + NEXT_VERTEX_CMD = 1<<9, + NEXT_TEXTURE_CMD = 1<<10, + NEXT_LIGHT_CMD = 1<<11, + NEXT_FOG_CMD = 1<<12, + + NEXT_SET_TLUT = 1<<13, + + NEXT_ERROR = 1<<14, +}; + +extern volatile bool DX9DebuggerPauseFlag; +extern volatile PauseEvent DX9DebuggerToPauseAtNext; +extern volatile int DX9DebuggerEventToPauseCount; +void ContinueDX9Debugger(); +void DX9DebuggerCheckAndPause(bool update); +void DX9DebuggerToPause(bool update); + +#undef ENABLE_DX_DEBUGGER +#if defined(_DEBUG) || defined(DEBUGFAST) +#define ENABLE_DX_DEBUGGER +#endif + +#ifdef ENABLE_DX_DEBUGGER + +#define DEBUGGER_PAUSE_AT(event,update) {if (((DX9DebuggerToPauseAtNext & event) && --DX9DebuggerEventToPauseCount<=0) || DX9DebuggerPauseFlag) DX9DebuggerToPause(update);} +#define DEBUGGER_PAUSE_LOG_AT(event,update,dumpfunc) {if (((DX9DebuggerToPauseAtNext & event) && --DX9DebuggerEventToPauseCount<=0) || DX9DebuggerPauseFlag) {{dumpfunc};DX9DebuggerToPause(update);}} +#define DEBUGGER_LOG_AT(event,dumpfunc) {if (( DX9DebuggerToPauseAtNext & event ) ) {{dumpfunc};}} + +#else +// Not to use debugger in release build +#define DEBUGGER_PAUSE_AT(event,update) +#define DEBUGGER_PAUSE_LOG_AT(event,update,dumpfunc) +#define DEBUGGER_LOG_AT(event,dumpfunc) + +#endif ENABLE_DX_DEBUGGER + + +#endif // _DX_DEBUGGER_H_ diff --git a/Source/Plugins/Plugin_VideoDX9/Src/FramebufferManager.h b/Source/Plugins/Plugin_VideoDX9/Src/FramebufferManager.h index 00b2a14002..d99f3e54f6 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/FramebufferManager.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/FramebufferManager.h @@ -1,173 +1,173 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _FRAMEBUFFERMANAGER_D3D_H_ -#define _FRAMEBUFFERMANAGER_D3D_H_ - -#include -#include "D3DBase.h" - -// On the GameCube, the game sends a request for the graphics processor to -// transfer its internal EFB (Embedded Framebuffer) to an area in GameCube RAM -// called the XFB (External Framebuffer). The size and location of the XFB is -// decided at the time of the copy, and the format is always YUYV. The video -// interface is given a pointer to the XFB, which will be decoded and -// displayed on the TV. -// -// There are two ways for Dolphin to emulate this: -// -// Real XFB mode: -// -// Dolphin will behave like the GameCube and encode the EFB to -// a portion of GameCube RAM. The emulated video interface will decode the data -// for output to the screen. -// -// Advantages: Behaves exactly like the GameCube. -// Disadvantages: Resolution will be limited. -// -// Virtual XFB mode: -// -// When a request is made to copy the EFB to an XFB, Dolphin -// will remember the RAM location and size of the XFB in a Virtual XFB list. -// The video interface will look up the XFB in the list and use the enhanced -// data stored there, if available. -// -// Advantages: Enables high resolution graphics, better than real hardware. -// Disadvantages: If the GameCube CPU writes directly to the XFB (which is -// possible but uncommon), the Virtual XFB will not capture this information. - -// There may be multiple XFBs in GameCube RAM. This is the maximum number to -// virtualize. -const int MAX_VIRTUAL_XFB = 8; - -inline bool addrRangesOverlap(u32 aLower, u32 aUpper, u32 bLower, u32 bUpper) -{ - return !((aLower >= bUpper) || (bLower >= aUpper)); -} - -struct XFBSource -{ - XFBSource() - { - this->srcAddr = 0; - this->srcWidth = 0; - this->srcHeight = 0; - this->texture = 0; - this->texWidth = 0; - this->texHeight = 0; - } - - u32 srcAddr; - u32 srcWidth; - u32 srcHeight; - - LPDIRECT3DTEXTURE9 texture; - int texWidth; - int texHeight; -}; - -class FramebufferManager -{ -public: - FramebufferManager() - { - s_efb_color_texture = NULL; - LPDIRECT3DTEXTURE9 s_efb_colorRead_texture = NULL; - LPDIRECT3DTEXTURE9 s_efb_depth_texture = NULL; - LPDIRECT3DTEXTURE9 s_efb_depthRead_texture = NULL; - - LPDIRECT3DSURFACE9 s_efb_depth_surface = NULL; - LPDIRECT3DSURFACE9 s_efb_color_surface = NULL; - LPDIRECT3DSURFACE9 s_efb_color_ReadBuffer = NULL; - LPDIRECT3DSURFACE9 s_efb_depth_ReadBuffer = NULL; - LPDIRECT3DSURFACE9 s_efb_color_OffScreenReadBuffer = NULL; - LPDIRECT3DSURFACE9 s_efb_depth_OffScreenReadBuffer = NULL; - - D3DFORMAT s_efb_color_surface_Format = D3DFMT_FORCE_DWORD; - D3DFORMAT s_efb_depth_surface_Format = D3DFMT_FORCE_DWORD; - D3DFORMAT s_efb_depth_ReadBuffer_Format = D3DFMT_FORCE_DWORD; - m_realXFBSource.texture = NULL; - } - - void Create(); - void Destroy(); - - void CopyToXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); - - const XFBSource** GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); - - LPDIRECT3DTEXTURE9 GetEFBColorTexture(const EFBRectangle& sourceRc); - LPDIRECT3DTEXTURE9 GetEFBDepthTexture(const EFBRectangle& sourceRc); - - LPDIRECT3DSURFACE9 GetEFBColorRTSurface(); - LPDIRECT3DSURFACE9 GetEFBDepthRTSurface(); - LPDIRECT3DSURFACE9 GetEFBColorOffScreenRTSurface(); - LPDIRECT3DSURFACE9 GetEFBDepthOffScreenRTSurface(); - D3DFORMAT GetEFBDepthRTSurfaceFormat(); - D3DFORMAT GetEFBColorRTSurfaceFormat(); - D3DFORMAT GetEFBDepthReadSurfaceFormat(); - LPDIRECT3DSURFACE9 GetEFBColorReadSurface(); - LPDIRECT3DSURFACE9 GetEFBDepthReadSurface(); - -private: - - struct VirtualXFB - { - // Address and size in GameCube RAM - u32 xfbAddr; - u32 xfbWidth; - u32 xfbHeight; - - XFBSource xfbSource; - }; - - typedef std::list VirtualXFBListType; - - VirtualXFBListType::iterator findVirtualXFB(u32 xfbAddr, u32 width, u32 height); - - void replaceVirtualXFB(); - - void copyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); - void copyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); - const XFBSource** getRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); - const XFBSource** getVirtualXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); - - XFBSource m_realXFBSource; // Only used in Real XFB mode - VirtualXFBListType m_virtualXFBList; // Only used in Virtual XFB mode - - const XFBSource* m_overlappingXFBArray[MAX_VIRTUAL_XFB]; - - LPDIRECT3DTEXTURE9 s_efb_color_texture;//Texture thats contains the color data of the render target - LPDIRECT3DTEXTURE9 s_efb_colorRead_texture;//1 pixel texture for temporal data store - LPDIRECT3DTEXTURE9 s_efb_depth_texture;//Texture thats contains the depth data of the render target - LPDIRECT3DTEXTURE9 s_efb_depthRead_texture;//4 pixel texture for temporal data store - - LPDIRECT3DSURFACE9 s_efb_depth_surface;//Depth Surface - LPDIRECT3DSURFACE9 s_efb_color_surface;//Color Surface - LPDIRECT3DSURFACE9 s_efb_color_ReadBuffer;//Surface 0 of s_efb_colorRead_texture - LPDIRECT3DSURFACE9 s_efb_depth_ReadBuffer;//Surface 0 of s_efb_depthRead_texture - LPDIRECT3DSURFACE9 s_efb_color_OffScreenReadBuffer;//System memory Surface that can be locked to retriebe the data - LPDIRECT3DSURFACE9 s_efb_depth_OffScreenReadBuffer;//System memory Surface that can be locked to retriebe the data - - D3DFORMAT s_efb_color_surface_Format;//Format of the color Surface - D3DFORMAT s_efb_depth_surface_Format;//Format of the Depth Surface - D3DFORMAT s_efb_depth_ReadBuffer_Format;//Format of the Depth color Read Surface -}; - -extern FramebufferManager FBManager; - -#endif +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _FRAMEBUFFERMANAGER_D3D_H_ +#define _FRAMEBUFFERMANAGER_D3D_H_ + +#include +#include "D3DBase.h" + +// On the GameCube, the game sends a request for the graphics processor to +// transfer its internal EFB (Embedded Framebuffer) to an area in GameCube RAM +// called the XFB (External Framebuffer). The size and location of the XFB is +// decided at the time of the copy, and the format is always YUYV. The video +// interface is given a pointer to the XFB, which will be decoded and +// displayed on the TV. +// +// There are two ways for Dolphin to emulate this: +// +// Real XFB mode: +// +// Dolphin will behave like the GameCube and encode the EFB to +// a portion of GameCube RAM. The emulated video interface will decode the data +// for output to the screen. +// +// Advantages: Behaves exactly like the GameCube. +// Disadvantages: Resolution will be limited. +// +// Virtual XFB mode: +// +// When a request is made to copy the EFB to an XFB, Dolphin +// will remember the RAM location and size of the XFB in a Virtual XFB list. +// The video interface will look up the XFB in the list and use the enhanced +// data stored there, if available. +// +// Advantages: Enables high resolution graphics, better than real hardware. +// Disadvantages: If the GameCube CPU writes directly to the XFB (which is +// possible but uncommon), the Virtual XFB will not capture this information. + +// There may be multiple XFBs in GameCube RAM. This is the maximum number to +// virtualize. +const int MAX_VIRTUAL_XFB = 8; + +inline bool addrRangesOverlap(u32 aLower, u32 aUpper, u32 bLower, u32 bUpper) +{ + return !((aLower >= bUpper) || (bLower >= aUpper)); +} + +struct XFBSource +{ + XFBSource() + { + this->srcAddr = 0; + this->srcWidth = 0; + this->srcHeight = 0; + this->texture = 0; + this->texWidth = 0; + this->texHeight = 0; + } + + u32 srcAddr; + u32 srcWidth; + u32 srcHeight; + + LPDIRECT3DTEXTURE9 texture; + int texWidth; + int texHeight; +}; + +class FramebufferManager +{ +public: + FramebufferManager() + { + s_efb_color_texture = NULL; + LPDIRECT3DTEXTURE9 s_efb_colorRead_texture = NULL; + LPDIRECT3DTEXTURE9 s_efb_depth_texture = NULL; + LPDIRECT3DTEXTURE9 s_efb_depthRead_texture = NULL; + + LPDIRECT3DSURFACE9 s_efb_depth_surface = NULL; + LPDIRECT3DSURFACE9 s_efb_color_surface = NULL; + LPDIRECT3DSURFACE9 s_efb_color_ReadBuffer = NULL; + LPDIRECT3DSURFACE9 s_efb_depth_ReadBuffer = NULL; + LPDIRECT3DSURFACE9 s_efb_color_OffScreenReadBuffer = NULL; + LPDIRECT3DSURFACE9 s_efb_depth_OffScreenReadBuffer = NULL; + + D3DFORMAT s_efb_color_surface_Format = D3DFMT_FORCE_DWORD; + D3DFORMAT s_efb_depth_surface_Format = D3DFMT_FORCE_DWORD; + D3DFORMAT s_efb_depth_ReadBuffer_Format = D3DFMT_FORCE_DWORD; + m_realXFBSource.texture = NULL; + } + + void Create(); + void Destroy(); + + void CopyToXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); + + const XFBSource** GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); + + LPDIRECT3DTEXTURE9 GetEFBColorTexture(const EFBRectangle& sourceRc); + LPDIRECT3DTEXTURE9 GetEFBDepthTexture(const EFBRectangle& sourceRc); + + LPDIRECT3DSURFACE9 GetEFBColorRTSurface(); + LPDIRECT3DSURFACE9 GetEFBDepthRTSurface(); + LPDIRECT3DSURFACE9 GetEFBColorOffScreenRTSurface(); + LPDIRECT3DSURFACE9 GetEFBDepthOffScreenRTSurface(); + D3DFORMAT GetEFBDepthRTSurfaceFormat(); + D3DFORMAT GetEFBColorRTSurfaceFormat(); + D3DFORMAT GetEFBDepthReadSurfaceFormat(); + LPDIRECT3DSURFACE9 GetEFBColorReadSurface(); + LPDIRECT3DSURFACE9 GetEFBDepthReadSurface(); + +private: + + struct VirtualXFB + { + // Address and size in GameCube RAM + u32 xfbAddr; + u32 xfbWidth; + u32 xfbHeight; + + XFBSource xfbSource; + }; + + typedef std::list VirtualXFBListType; + + VirtualXFBListType::iterator findVirtualXFB(u32 xfbAddr, u32 width, u32 height); + + void replaceVirtualXFB(); + + void copyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); + void copyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc); + const XFBSource** getRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); + const XFBSource** getVirtualXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount); + + XFBSource m_realXFBSource; // Only used in Real XFB mode + VirtualXFBListType m_virtualXFBList; // Only used in Virtual XFB mode + + const XFBSource* m_overlappingXFBArray[MAX_VIRTUAL_XFB]; + + LPDIRECT3DTEXTURE9 s_efb_color_texture;//Texture thats contains the color data of the render target + LPDIRECT3DTEXTURE9 s_efb_colorRead_texture;//1 pixel texture for temporal data store + LPDIRECT3DTEXTURE9 s_efb_depth_texture;//Texture thats contains the depth data of the render target + LPDIRECT3DTEXTURE9 s_efb_depthRead_texture;//4 pixel texture for temporal data store + + LPDIRECT3DSURFACE9 s_efb_depth_surface;//Depth Surface + LPDIRECT3DSURFACE9 s_efb_color_surface;//Color Surface + LPDIRECT3DSURFACE9 s_efb_color_ReadBuffer;//Surface 0 of s_efb_colorRead_texture + LPDIRECT3DSURFACE9 s_efb_depth_ReadBuffer;//Surface 0 of s_efb_depthRead_texture + LPDIRECT3DSURFACE9 s_efb_color_OffScreenReadBuffer;//System memory Surface that can be locked to retriebe the data + LPDIRECT3DSURFACE9 s_efb_depth_OffScreenReadBuffer;//System memory Surface that can be locked to retriebe the data + + D3DFORMAT s_efb_color_surface_Format;//Format of the color Surface + D3DFORMAT s_efb_depth_surface_Format;//Format of the Depth Surface + D3DFORMAT s_efb_depth_ReadBuffer_Format;//Format of the Depth color Read Surface +}; + +extern FramebufferManager FBManager; + +#endif diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Globals.h b/Source/Plugins/Plugin_VideoDX9/Src/Globals.h index 0b7296801a..6b02dd3c80 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Globals.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/Globals.h @@ -1,31 +1,31 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _GLOBALS_H_ -#define _GLOBALS_H_ - -#include "Common.h" -#include "VideoConfig.h" -#include "main.h" - -#include "VideoCommon.h" -#include "pluginspecs_video.h" - -// A global plugin specification -extern PLUGIN_GLOBALS* globals; - -#endif // _GLOBALS_H_ +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _GLOBALS_H_ +#define _GLOBALS_H_ + +#include "Common.h" +#include "VideoConfig.h" +#include "main.h" + +#include "VideoCommon.h" +#include "pluginspecs_video.h" + +// A global plugin specification +extern PLUGIN_GLOBALS* globals; + +#endif // _GLOBALS_H_ diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.cpp index 69d844864b..2990cda47c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.cpp @@ -1,481 +1,481 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -// Fast image conversion using OpenGL shaders. -// This kind of stuff would be a LOT nicer with OpenCL. - -#include "TextureConverter.h" -#include "TextureConversionShader.h" -#include "PixelShaderCache.h" -#include "VertexShaderManager.h" -#include "VertexShaderCache.h" -#include "FramebufferManager.h" -#include "Globals.h" -#include "VideoConfig.h" -#include "ImageWrite.h" -#include "Render.h" -#include "TextureCache.h" -#include "Math.h" -#include "FileUtil.h" - -namespace TextureConverter -{ -struct TransformBuffer -{ - LPDIRECT3DTEXTURE9 FBTexture; - LPDIRECT3DSURFACE9 RenderSurface; - LPDIRECT3DSURFACE9 ReadSurface; - int Width; - int Height; -}; -const u32 NUM_TRANSFORM_BUFFERS = 16; -static TransformBuffer TrnBuffers[NUM_TRANSFORM_BUFFERS]; -static u32 WorkingBuffers = 0; - -static LPDIRECT3DPIXELSHADER9 s_rgbToYuyvProgram = NULL; -static LPDIRECT3DPIXELSHADER9 s_yuyvToRgbProgram = NULL; - -// Not all slots are taken - but who cares. -const u32 NUM_ENCODING_PROGRAMS = 64; -static LPDIRECT3DPIXELSHADER9 s_encodingPrograms[NUM_ENCODING_PROGRAMS]; - -void CreateRgbToYuyvProgram() -{ - // Output is BGRA because that is slightly faster than RGBA. - char* FProgram = new char[2048]; - sprintf(FProgram,"uniform float4 blkDims : register(c%d);\n" - "uniform float4 textureDims : register(c%d);\n" - "uniform sampler samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float2 uv1 = float2((uv0.x + 1.0f)/ blkDims.z, uv0.y / blkDims.w);\n" - " float3 c0 = tex2D(samp0, uv0.xy / blkDims.zw).rgb;\n" - " float3 c1 = tex2D(samp0, uv1).rgb;\n" - " float3 y_const = float3(0.257f,0.504f,0.098f);\n" - " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" - " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" - " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" - " float3 c01 = (c0 + c1) * 0.5f;\n" - " ocol0 = float4(dot(c1,y_const),dot(c01,u_const),dot(c0,y_const),dot(c01, v_const)) + const3;\n" - "}\n",C_COLORMATRIX,C_COLORMATRIX+1); - - s_rgbToYuyvProgram = D3D::CompileAndCreatePixelShader(FProgram, (int)strlen(FProgram)); - if (!s_rgbToYuyvProgram) { - ERROR_LOG(VIDEO, "Failed to create RGB to YUYV fragment program"); - } - delete [] FProgram; -} - -void CreateYuyvToRgbProgram() -{ - char* FProgram = new char[2048]; - sprintf(FProgram,"uniform float4 blkDims : register(c%d);\n" - "uniform float4 textureDims : register(c%d);\n" - "uniform sampler samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float4 c0 = tex2D(samp0, uv0 / blkDims.zw).rgba;\n" - " float f = step(0.5, frac(uv0.x));\n" - " float y = lerp(c0.b, c0.r, f);\n" - " float yComp = 1.164f * (y - 0.0625f);\n" - " float uComp = c0.g - 0.5f;\n" - " float vComp = c0.a - 0.5f;\n" - - " ocol0 = float4(yComp + (1.596f * vComp),\n" - " yComp - (0.813f * vComp) - (0.391f * uComp),\n" - " yComp + (2.018f * uComp),\n" - " 1.0f);\n" - "}\n",C_COLORMATRIX,C_COLORMATRIX+1); - s_yuyvToRgbProgram = D3D::CompileAndCreatePixelShader(FProgram, (int)strlen(FProgram)); - if (!s_yuyvToRgbProgram) { - ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program"); - } - delete [] FProgram; -} - -LPDIRECT3DPIXELSHADER9 GetOrCreateEncodingShader(u32 format) -{ - if (format > NUM_ENCODING_PROGRAMS) - { - PanicAlert("Unknown texture copy format: 0x%x\n", format); - return s_encodingPrograms[0]; - } - - if (!s_encodingPrograms[format]) - { - const char* shader = TextureConversionShader::GenerateEncodingShader(format,true); - -#if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && shader) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%senc_%04i.txt", File::GetUserPath(D_DUMP_IDX), counter++); - - SaveData(szTemp, shader); - } -#endif - s_encodingPrograms[format] = D3D::CompileAndCreatePixelShader(shader, (int)strlen(shader)); - if (!s_encodingPrograms[format]) { - ERROR_LOG(VIDEO, "Failed to create encoding fragment program"); - } - } - return s_encodingPrograms[format]; -} - -void Init() -{ - for (unsigned int i = 0; i < NUM_ENCODING_PROGRAMS; i++) - { - s_encodingPrograms[i] = NULL; - } - for (unsigned int i = 0; i < NUM_TRANSFORM_BUFFERS; i++) - { - TrnBuffers[i].FBTexture = NULL; - TrnBuffers[i].RenderSurface = NULL; - TrnBuffers[i].ReadSurface = NULL; - TrnBuffers[i].Width = 0; - TrnBuffers[i].Height = 0; - } - CreateRgbToYuyvProgram(); - CreateYuyvToRgbProgram(); - -} - -void Shutdown() -{ - if(s_rgbToYuyvProgram) - s_rgbToYuyvProgram->Release(); - s_rgbToYuyvProgram = NULL; - if(s_yuyvToRgbProgram) - s_yuyvToRgbProgram->Release(); - s_yuyvToRgbProgram=NULL; - - for (unsigned int i = 0; i < NUM_ENCODING_PROGRAMS; i++) - { - if(s_encodingPrograms[i]) - s_encodingPrograms[i]->Release(); - s_encodingPrograms[i] = NULL; - } - for (unsigned int i = 0; i < NUM_TRANSFORM_BUFFERS; i++) - { - if(TrnBuffers[i].RenderSurface != NULL) - TrnBuffers[i].RenderSurface->Release(); - TrnBuffers[i].RenderSurface = NULL; - - if(TrnBuffers[i].ReadSurface != NULL) - TrnBuffers[i].ReadSurface->Release(); - TrnBuffers[i].ReadSurface = NULL; - - if(TrnBuffers[i].FBTexture != NULL) - TrnBuffers[i].FBTexture->Release(); - TrnBuffers[i].FBTexture = NULL; - - TrnBuffers[i].Width = 0; - TrnBuffers[i].Height = 0; - } - WorkingBuffers = 0; -} - -void EncodeToRamUsingShader(LPDIRECT3DPIXELSHADER9 shader, LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc, - u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) -{ - HRESULT hr; - Renderer::ResetAPIState(); - u32 index =0; - while(index < WorkingBuffers && (TrnBuffers[index].Width != dstWidth || TrnBuffers[index].Height != dstHeight)) - index++; - - LPDIRECT3DSURFACE9 s_texConvReadSurface = NULL; - LPDIRECT3DSURFACE9 Rendersurf = NULL; - - if (index >= WorkingBuffers) - { - if (WorkingBuffers < NUM_TRANSFORM_BUFFERS) - WorkingBuffers++; - if (index >= WorkingBuffers) - index--; - if (TrnBuffers[index].RenderSurface != NULL) - { - TrnBuffers[index].RenderSurface->Release(); - TrnBuffers[index].RenderSurface = NULL; - } - if (TrnBuffers[index].ReadSurface != NULL) - { - TrnBuffers[index].ReadSurface->Release(); - TrnBuffers[index].ReadSurface = NULL; - } - if (TrnBuffers[index].FBTexture != NULL) - { - TrnBuffers[index].FBTexture->Release(); - TrnBuffers[index].FBTexture = NULL; - } - TrnBuffers[index].Width = dstWidth; - TrnBuffers[index].Height = dstHeight; - D3D::dev->CreateTexture(dstWidth, dstHeight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, - D3DPOOL_DEFAULT, &TrnBuffers[index].FBTexture, NULL); - TrnBuffers[index].FBTexture->GetSurfaceLevel(0,&TrnBuffers[index].RenderSurface); - D3D::dev->CreateOffscreenPlainSurface(dstWidth, dstHeight, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &TrnBuffers[index].ReadSurface, NULL ); - } - - s_texConvReadSurface = TrnBuffers[index].ReadSurface; - Rendersurf = TrnBuffers[index].RenderSurface; - - hr = D3D::dev->SetDepthStencilSurface(NULL); - hr = D3D::dev->SetRenderTarget(0, Rendersurf); - - if (linearFilter) - { - D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - } - else - { - D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); - } - - D3DVIEWPORT9 vp; - vp.X = 0; - vp.Y = 0; - vp.Width = dstWidth; - vp.Height = dstHeight; - vp.MinZ = 0.0f; - vp.MaxZ = 1.0f; - hr = D3D::dev->SetViewport(&vp); - RECT SrcRect; - SrcRect.top = sourceRc.top; - SrcRect.left = sourceRc.left; - SrcRect.right = sourceRc.right; - SrcRect.bottom = sourceRc.bottom; - RECT DstRect; - DstRect.top = 0; - DstRect.left = 0; - DstRect.right = dstWidth; - DstRect.bottom = dstHeight; - - - // Draw... - D3D::drawShadedTexQuad(srcTexture,&SrcRect,1,1,dstWidth,dstHeight,shader,VertexShaderCache::GetSimpleVertexShader(0)); - hr = D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); - hr = D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); - Renderer::RestoreAPIState(); - D3D::RefreshSamplerState(0, D3DSAMP_MINFILTER); - // .. and then readback the results. - // TODO: make this less slow. - - D3DLOCKED_RECT drect; - - - hr = D3D::dev->GetRenderTargetData(Rendersurf,s_texConvReadSurface); - if((hr = s_texConvReadSurface->LockRect(&drect, &DstRect, D3DLOCK_READONLY)) != D3D_OK) - { - PanicAlert("ERROR: %s", hr == D3DERR_WASSTILLDRAWING ? "Still drawing" : - hr == D3DERR_INVALIDCALL ? "Invalid call" : "w00t"); - - } - else - { - int writeStride = bpmem.copyMipMapStrideChannels * 32; - - if (writeStride != readStride && toTexture) - { - // writing to a texture of a different size - - int readHeight = readStride / dstWidth; - - int readStart = 0; - int readLoops = dstHeight / (readHeight/4); // 4 bytes per pixel - u8 *Source = (u8*)drect.pBits; - for (int i = 0; i < readLoops; i++) - { - int readDist = dstWidth*readHeight; - memcpy(destAddr,Source,readDist); - Source += readDist; - destAddr += writeStride; - } - } - else - memcpy(destAddr,drect.pBits,dstWidth*dstHeight*4);// 4 bytes per pixel - - hr = s_texConvReadSurface->UnlockRect(); - } -} - -void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyfmt, int bScaleByHalf, const EFBRectangle& source) -{ - u32 format = copyfmt; - - if (bFromZBuffer) - { - format |= _GX_TF_ZTF; - if (copyfmt == 11) - format = GX_TF_Z16; - else if (format < GX_TF_Z8 || format > GX_TF_Z24X8) - format |= _GX_TF_CTF; - } - else - if (copyfmt > GX_TF_RGBA8 || (copyfmt < GX_TF_RGB565 && !bIsIntensityFmt)) - format |= _GX_TF_CTF; - - LPDIRECT3DPIXELSHADER9 texconv_shader = GetOrCreateEncodingShader(format); - if (!texconv_shader) - return; - - u8 *dest_ptr = Memory_GetPtr(address); - - LPDIRECT3DTEXTURE9 source_texture = bFromZBuffer ? FBManager.GetEFBDepthTexture(source) : FBManager.GetEFBColorTexture(source); - int width = (source.right - source.left) >> bScaleByHalf; - int height = (source.bottom - source.top) >> bScaleByHalf; - - int size_in_bytes = TexDecoder_GetTextureSizeInBytes(width, height, format); - - // Invalidate any existing texture covering this memory range. - // TODO - don't delete the texture if it already exists, just replace the contents. - TextureCache::InvalidateRange(address, size_in_bytes); - - u16 blkW = TexDecoder_GetBlockWidthInTexels(format) - 1; - u16 blkH = TexDecoder_GetBlockHeightInTexels(format) - 1; - u16 samples = TextureConversionShader::GetEncodedSampleCount(format); - - // only copy on cache line boundaries - // extra pixels are copied but not displayed in the resulting texture - s32 expandedWidth = (width + blkW) & (~blkW); - s32 expandedHeight = (height + blkH) & (~blkH); - - float MValueX = Renderer::GetTargetScaleX(); - float MValueY = Renderer::GetTargetScaleY(); - - float Xstride = (float)((Renderer::GetFullTargetWidth() - Renderer::GetTargetWidth()) / 2); - float Ystride = (float)((Renderer::GetFullTargetHeight() - Renderer::GetTargetHeight()) / 2); - - float sampleStride = bScaleByHalf?2.0f:1.0f; - - TextureConversionShader::SetShaderParameters( - (float)expandedWidth, - expandedHeight * MValueY, - source.left * MValueX + Xstride , - source.top * MValueY + Ystride, - sampleStride * MValueX, - sampleStride * MValueY, - (float)Renderer::GetFullTargetWidth(), - (float)Renderer::GetFullTargetHeight()); - - TargetRectangle scaledSource; - scaledSource.top = 0; - scaledSource.bottom = expandedHeight; - scaledSource.left = 0; - scaledSource.right = expandedWidth / samples; - int cacheBytes = 32; - if ((format & 0x0f) == 6) - cacheBytes = 64; - - int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); - EncodeToRamUsingShader(texconv_shader, source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight,readStride, true, bScaleByHalf > 0); -} - -void EncodeToRamYUYV(LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc,u8* destAddr, int dstWidth, int dstHeight) -{ - TextureConversionShader::SetShaderParameters( - (float)dstWidth, - (float)dstHeight, - 0.0f , - 0.0f, - 1.0f, - 1.0f, - (float)Renderer::GetFullTargetWidth(), - (float)Renderer::GetFullTargetHeight()); - EncodeToRamUsingShader(s_rgbToYuyvProgram, srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); -} - - -// Should be scale free. -void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, LPDIRECT3DTEXTURE9 destTexture) -{ - u8* srcAddr = Memory_GetPtr(xfbAddr); - if (!srcAddr) - { - WARN_LOG(VIDEO, "Tried to decode from invalid memory address"); - return; - } - - int srcFmtWidth = srcWidth / 2; - - Renderer::ResetAPIState(); // reset any game specific settings - LPDIRECT3DTEXTURE9 s_srcTexture = D3D::CreateTexture2D(srcAddr, srcFmtWidth, srcHeight, srcFmtWidth, D3DFMT_A8R8G8B8, false); - LPDIRECT3DSURFACE9 Rendersurf = NULL; - destTexture->GetSurfaceLevel(0,&Rendersurf); - D3D::dev->SetDepthStencilSurface(NULL); - D3D::dev->SetRenderTarget(0, Rendersurf); - - D3DVIEWPORT9 vp; - - // Stretch picture with increased internal resolution - vp.X = 0; - vp.Y = 0; - vp.Width = srcWidth; - vp.Height = srcHeight; - vp.MinZ = 0.0f; - vp.MaxZ = 1.0f; - D3D::dev->SetViewport(&vp); - RECT destrect; - destrect.bottom = srcHeight; - destrect.left = 0; - destrect.right = srcWidth; - destrect.top = 0; - - RECT sourcerect; - sourcerect.bottom = srcHeight; - sourcerect.left = 0; - sourcerect.right = srcFmtWidth; - sourcerect.top = 0; - - D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); - D3D::ChangeSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); - - TextureConversionShader::SetShaderParameters( - (float)srcFmtWidth, - (float)srcHeight, - 0.0f , - 0.0f, - 1.0f, - 1.0f, - (float)srcFmtWidth, - (float)srcHeight); - D3D::drawShadedTexQuad( - s_srcTexture, - &sourcerect, - 1 , - 1, - srcWidth, - srcHeight, - s_yuyvToRgbProgram, - VertexShaderCache::GetSimpleVertexShader(0)); - - - D3D::RefreshSamplerState(0, D3DSAMP_MINFILTER); - D3D::RefreshSamplerState(0, D3DSAMP_MAGFILTER); - D3D::SetTexture(0,NULL); - D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); - D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); - Renderer::RestoreAPIState(); - Rendersurf->Release(); - s_srcTexture->Release(); -} - -} // namespace +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +// Fast image conversion using OpenGL shaders. +// This kind of stuff would be a LOT nicer with OpenCL. + +#include "TextureConverter.h" +#include "TextureConversionShader.h" +#include "PixelShaderCache.h" +#include "VertexShaderManager.h" +#include "VertexShaderCache.h" +#include "FramebufferManager.h" +#include "Globals.h" +#include "VideoConfig.h" +#include "ImageWrite.h" +#include "Render.h" +#include "TextureCache.h" +#include "Math.h" +#include "FileUtil.h" + +namespace TextureConverter +{ +struct TransformBuffer +{ + LPDIRECT3DTEXTURE9 FBTexture; + LPDIRECT3DSURFACE9 RenderSurface; + LPDIRECT3DSURFACE9 ReadSurface; + int Width; + int Height; +}; +const u32 NUM_TRANSFORM_BUFFERS = 16; +static TransformBuffer TrnBuffers[NUM_TRANSFORM_BUFFERS]; +static u32 WorkingBuffers = 0; + +static LPDIRECT3DPIXELSHADER9 s_rgbToYuyvProgram = NULL; +static LPDIRECT3DPIXELSHADER9 s_yuyvToRgbProgram = NULL; + +// Not all slots are taken - but who cares. +const u32 NUM_ENCODING_PROGRAMS = 64; +static LPDIRECT3DPIXELSHADER9 s_encodingPrograms[NUM_ENCODING_PROGRAMS]; + +void CreateRgbToYuyvProgram() +{ + // Output is BGRA because that is slightly faster than RGBA. + char* FProgram = new char[2048]; + sprintf(FProgram,"uniform float4 blkDims : register(c%d);\n" + "uniform float4 textureDims : register(c%d);\n" + "uniform sampler samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float2 uv1 = float2((uv0.x + 1.0f)/ blkDims.z, uv0.y / blkDims.w);\n" + " float3 c0 = tex2D(samp0, uv0.xy / blkDims.zw).rgb;\n" + " float3 c1 = tex2D(samp0, uv1).rgb;\n" + " float3 y_const = float3(0.257f,0.504f,0.098f);\n" + " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" + " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" + " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" + " float3 c01 = (c0 + c1) * 0.5f;\n" + " ocol0 = float4(dot(c1,y_const),dot(c01,u_const),dot(c0,y_const),dot(c01, v_const)) + const3;\n" + "}\n",C_COLORMATRIX,C_COLORMATRIX+1); + + s_rgbToYuyvProgram = D3D::CompileAndCreatePixelShader(FProgram, (int)strlen(FProgram)); + if (!s_rgbToYuyvProgram) { + ERROR_LOG(VIDEO, "Failed to create RGB to YUYV fragment program"); + } + delete [] FProgram; +} + +void CreateYuyvToRgbProgram() +{ + char* FProgram = new char[2048]; + sprintf(FProgram,"uniform float4 blkDims : register(c%d);\n" + "uniform float4 textureDims : register(c%d);\n" + "uniform sampler samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float4 c0 = tex2D(samp0, uv0 / blkDims.zw).rgba;\n" + " float f = step(0.5, frac(uv0.x));\n" + " float y = lerp(c0.b, c0.r, f);\n" + " float yComp = 1.164f * (y - 0.0625f);\n" + " float uComp = c0.g - 0.5f;\n" + " float vComp = c0.a - 0.5f;\n" + + " ocol0 = float4(yComp + (1.596f * vComp),\n" + " yComp - (0.813f * vComp) - (0.391f * uComp),\n" + " yComp + (2.018f * uComp),\n" + " 1.0f);\n" + "}\n",C_COLORMATRIX,C_COLORMATRIX+1); + s_yuyvToRgbProgram = D3D::CompileAndCreatePixelShader(FProgram, (int)strlen(FProgram)); + if (!s_yuyvToRgbProgram) { + ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program"); + } + delete [] FProgram; +} + +LPDIRECT3DPIXELSHADER9 GetOrCreateEncodingShader(u32 format) +{ + if (format > NUM_ENCODING_PROGRAMS) + { + PanicAlert("Unknown texture copy format: 0x%x\n", format); + return s_encodingPrograms[0]; + } + + if (!s_encodingPrograms[format]) + { + const char* shader = TextureConversionShader::GenerateEncodingShader(format,true); + +#if defined(_DEBUG) || defined(DEBUGFAST) + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && shader) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%senc_%04i.txt", File::GetUserPath(D_DUMP_IDX), counter++); + + SaveData(szTemp, shader); + } +#endif + s_encodingPrograms[format] = D3D::CompileAndCreatePixelShader(shader, (int)strlen(shader)); + if (!s_encodingPrograms[format]) { + ERROR_LOG(VIDEO, "Failed to create encoding fragment program"); + } + } + return s_encodingPrograms[format]; +} + +void Init() +{ + for (unsigned int i = 0; i < NUM_ENCODING_PROGRAMS; i++) + { + s_encodingPrograms[i] = NULL; + } + for (unsigned int i = 0; i < NUM_TRANSFORM_BUFFERS; i++) + { + TrnBuffers[i].FBTexture = NULL; + TrnBuffers[i].RenderSurface = NULL; + TrnBuffers[i].ReadSurface = NULL; + TrnBuffers[i].Width = 0; + TrnBuffers[i].Height = 0; + } + CreateRgbToYuyvProgram(); + CreateYuyvToRgbProgram(); + +} + +void Shutdown() +{ + if(s_rgbToYuyvProgram) + s_rgbToYuyvProgram->Release(); + s_rgbToYuyvProgram = NULL; + if(s_yuyvToRgbProgram) + s_yuyvToRgbProgram->Release(); + s_yuyvToRgbProgram=NULL; + + for (unsigned int i = 0; i < NUM_ENCODING_PROGRAMS; i++) + { + if(s_encodingPrograms[i]) + s_encodingPrograms[i]->Release(); + s_encodingPrograms[i] = NULL; + } + for (unsigned int i = 0; i < NUM_TRANSFORM_BUFFERS; i++) + { + if(TrnBuffers[i].RenderSurface != NULL) + TrnBuffers[i].RenderSurface->Release(); + TrnBuffers[i].RenderSurface = NULL; + + if(TrnBuffers[i].ReadSurface != NULL) + TrnBuffers[i].ReadSurface->Release(); + TrnBuffers[i].ReadSurface = NULL; + + if(TrnBuffers[i].FBTexture != NULL) + TrnBuffers[i].FBTexture->Release(); + TrnBuffers[i].FBTexture = NULL; + + TrnBuffers[i].Width = 0; + TrnBuffers[i].Height = 0; + } + WorkingBuffers = 0; +} + +void EncodeToRamUsingShader(LPDIRECT3DPIXELSHADER9 shader, LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc, + u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) +{ + HRESULT hr; + Renderer::ResetAPIState(); + u32 index =0; + while(index < WorkingBuffers && (TrnBuffers[index].Width != dstWidth || TrnBuffers[index].Height != dstHeight)) + index++; + + LPDIRECT3DSURFACE9 s_texConvReadSurface = NULL; + LPDIRECT3DSURFACE9 Rendersurf = NULL; + + if (index >= WorkingBuffers) + { + if (WorkingBuffers < NUM_TRANSFORM_BUFFERS) + WorkingBuffers++; + if (index >= WorkingBuffers) + index--; + if (TrnBuffers[index].RenderSurface != NULL) + { + TrnBuffers[index].RenderSurface->Release(); + TrnBuffers[index].RenderSurface = NULL; + } + if (TrnBuffers[index].ReadSurface != NULL) + { + TrnBuffers[index].ReadSurface->Release(); + TrnBuffers[index].ReadSurface = NULL; + } + if (TrnBuffers[index].FBTexture != NULL) + { + TrnBuffers[index].FBTexture->Release(); + TrnBuffers[index].FBTexture = NULL; + } + TrnBuffers[index].Width = dstWidth; + TrnBuffers[index].Height = dstHeight; + D3D::dev->CreateTexture(dstWidth, dstHeight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, + D3DPOOL_DEFAULT, &TrnBuffers[index].FBTexture, NULL); + TrnBuffers[index].FBTexture->GetSurfaceLevel(0,&TrnBuffers[index].RenderSurface); + D3D::dev->CreateOffscreenPlainSurface(dstWidth, dstHeight, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &TrnBuffers[index].ReadSurface, NULL ); + } + + s_texConvReadSurface = TrnBuffers[index].ReadSurface; + Rendersurf = TrnBuffers[index].RenderSurface; + + hr = D3D::dev->SetDepthStencilSurface(NULL); + hr = D3D::dev->SetRenderTarget(0, Rendersurf); + + if (linearFilter) + { + D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); + } + else + { + D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); + } + + D3DVIEWPORT9 vp; + vp.X = 0; + vp.Y = 0; + vp.Width = dstWidth; + vp.Height = dstHeight; + vp.MinZ = 0.0f; + vp.MaxZ = 1.0f; + hr = D3D::dev->SetViewport(&vp); + RECT SrcRect; + SrcRect.top = sourceRc.top; + SrcRect.left = sourceRc.left; + SrcRect.right = sourceRc.right; + SrcRect.bottom = sourceRc.bottom; + RECT DstRect; + DstRect.top = 0; + DstRect.left = 0; + DstRect.right = dstWidth; + DstRect.bottom = dstHeight; + + + // Draw... + D3D::drawShadedTexQuad(srcTexture,&SrcRect,1,1,dstWidth,dstHeight,shader,VertexShaderCache::GetSimpleVertexShader(0)); + hr = D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); + hr = D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); + Renderer::RestoreAPIState(); + D3D::RefreshSamplerState(0, D3DSAMP_MINFILTER); + // .. and then readback the results. + // TODO: make this less slow. + + D3DLOCKED_RECT drect; + + + hr = D3D::dev->GetRenderTargetData(Rendersurf,s_texConvReadSurface); + if((hr = s_texConvReadSurface->LockRect(&drect, &DstRect, D3DLOCK_READONLY)) != D3D_OK) + { + PanicAlert("ERROR: %s", hr == D3DERR_WASSTILLDRAWING ? "Still drawing" : + hr == D3DERR_INVALIDCALL ? "Invalid call" : "w00t"); + + } + else + { + int writeStride = bpmem.copyMipMapStrideChannels * 32; + + if (writeStride != readStride && toTexture) + { + // writing to a texture of a different size + + int readHeight = readStride / dstWidth; + + int readStart = 0; + int readLoops = dstHeight / (readHeight/4); // 4 bytes per pixel + u8 *Source = (u8*)drect.pBits; + for (int i = 0; i < readLoops; i++) + { + int readDist = dstWidth*readHeight; + memcpy(destAddr,Source,readDist); + Source += readDist; + destAddr += writeStride; + } + } + else + memcpy(destAddr,drect.pBits,dstWidth*dstHeight*4);// 4 bytes per pixel + + hr = s_texConvReadSurface->UnlockRect(); + } +} + +void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyfmt, int bScaleByHalf, const EFBRectangle& source) +{ + u32 format = copyfmt; + + if (bFromZBuffer) + { + format |= _GX_TF_ZTF; + if (copyfmt == 11) + format = GX_TF_Z16; + else if (format < GX_TF_Z8 || format > GX_TF_Z24X8) + format |= _GX_TF_CTF; + } + else + if (copyfmt > GX_TF_RGBA8 || (copyfmt < GX_TF_RGB565 && !bIsIntensityFmt)) + format |= _GX_TF_CTF; + + LPDIRECT3DPIXELSHADER9 texconv_shader = GetOrCreateEncodingShader(format); + if (!texconv_shader) + return; + + u8 *dest_ptr = Memory_GetPtr(address); + + LPDIRECT3DTEXTURE9 source_texture = bFromZBuffer ? FBManager.GetEFBDepthTexture(source) : FBManager.GetEFBColorTexture(source); + int width = (source.right - source.left) >> bScaleByHalf; + int height = (source.bottom - source.top) >> bScaleByHalf; + + int size_in_bytes = TexDecoder_GetTextureSizeInBytes(width, height, format); + + // Invalidate any existing texture covering this memory range. + // TODO - don't delete the texture if it already exists, just replace the contents. + TextureCache::InvalidateRange(address, size_in_bytes); + + u16 blkW = TexDecoder_GetBlockWidthInTexels(format) - 1; + u16 blkH = TexDecoder_GetBlockHeightInTexels(format) - 1; + u16 samples = TextureConversionShader::GetEncodedSampleCount(format); + + // only copy on cache line boundaries + // extra pixels are copied but not displayed in the resulting texture + s32 expandedWidth = (width + blkW) & (~blkW); + s32 expandedHeight = (height + blkH) & (~blkH); + + float MValueX = Renderer::GetTargetScaleX(); + float MValueY = Renderer::GetTargetScaleY(); + + float Xstride = (float)((Renderer::GetFullTargetWidth() - Renderer::GetTargetWidth()) / 2); + float Ystride = (float)((Renderer::GetFullTargetHeight() - Renderer::GetTargetHeight()) / 2); + + float sampleStride = bScaleByHalf?2.0f:1.0f; + + TextureConversionShader::SetShaderParameters( + (float)expandedWidth, + expandedHeight * MValueY, + source.left * MValueX + Xstride , + source.top * MValueY + Ystride, + sampleStride * MValueX, + sampleStride * MValueY, + (float)Renderer::GetFullTargetWidth(), + (float)Renderer::GetFullTargetHeight()); + + TargetRectangle scaledSource; + scaledSource.top = 0; + scaledSource.bottom = expandedHeight; + scaledSource.left = 0; + scaledSource.right = expandedWidth / samples; + int cacheBytes = 32; + if ((format & 0x0f) == 6) + cacheBytes = 64; + + int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); + EncodeToRamUsingShader(texconv_shader, source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight,readStride, true, bScaleByHalf > 0); +} + +void EncodeToRamYUYV(LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc,u8* destAddr, int dstWidth, int dstHeight) +{ + TextureConversionShader::SetShaderParameters( + (float)dstWidth, + (float)dstHeight, + 0.0f , + 0.0f, + 1.0f, + 1.0f, + (float)Renderer::GetFullTargetWidth(), + (float)Renderer::GetFullTargetHeight()); + EncodeToRamUsingShader(s_rgbToYuyvProgram, srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); +} + + +// Should be scale free. +void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, LPDIRECT3DTEXTURE9 destTexture) +{ + u8* srcAddr = Memory_GetPtr(xfbAddr); + if (!srcAddr) + { + WARN_LOG(VIDEO, "Tried to decode from invalid memory address"); + return; + } + + int srcFmtWidth = srcWidth / 2; + + Renderer::ResetAPIState(); // reset any game specific settings + LPDIRECT3DTEXTURE9 s_srcTexture = D3D::CreateTexture2D(srcAddr, srcFmtWidth, srcHeight, srcFmtWidth, D3DFMT_A8R8G8B8, false); + LPDIRECT3DSURFACE9 Rendersurf = NULL; + destTexture->GetSurfaceLevel(0,&Rendersurf); + D3D::dev->SetDepthStencilSurface(NULL); + D3D::dev->SetRenderTarget(0, Rendersurf); + + D3DVIEWPORT9 vp; + + // Stretch picture with increased internal resolution + vp.X = 0; + vp.Y = 0; + vp.Width = srcWidth; + vp.Height = srcHeight; + vp.MinZ = 0.0f; + vp.MaxZ = 1.0f; + D3D::dev->SetViewport(&vp); + RECT destrect; + destrect.bottom = srcHeight; + destrect.left = 0; + destrect.right = srcWidth; + destrect.top = 0; + + RECT sourcerect; + sourcerect.bottom = srcHeight; + sourcerect.left = 0; + sourcerect.right = srcFmtWidth; + sourcerect.top = 0; + + D3D::ChangeSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); + D3D::ChangeSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); + + TextureConversionShader::SetShaderParameters( + (float)srcFmtWidth, + (float)srcHeight, + 0.0f , + 0.0f, + 1.0f, + 1.0f, + (float)srcFmtWidth, + (float)srcHeight); + D3D::drawShadedTexQuad( + s_srcTexture, + &sourcerect, + 1 , + 1, + srcWidth, + srcHeight, + s_yuyvToRgbProgram, + VertexShaderCache::GetSimpleVertexShader(0)); + + + D3D::RefreshSamplerState(0, D3DSAMP_MINFILTER); + D3D::RefreshSamplerState(0, D3DSAMP_MAGFILTER); + D3D::SetTexture(0,NULL); + D3D::dev->SetRenderTarget(0, FBManager.GetEFBColorRTSurface()); + D3D::dev->SetDepthStencilSurface(FBManager.GetEFBDepthRTSurface()); + Renderer::RestoreAPIState(); + Rendersurf->Release(); + s_srcTexture->Release(); +} + +} // namespace diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.h b/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.h index f0c8c44ed5..516892574a 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureConverter.h @@ -1,45 +1,45 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _TEXTURECONVERTER_H_ -#define _TEXTURECONVERTER_H_ - -#include "VideoCommon.h" -#include "D3DBase.h" -#include "D3DTexture.h" -#include "D3DUtil.h" -#include "D3DShader.h" - -// Converts textures between formats -// TODO: support multiple texture formats -namespace TextureConverter -{ - -void Init(); -void Shutdown(); - -void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, - u32 copyfmt, int bScaleByHalf, const EFBRectangle& source); - -void EncodeToRamYUYV(LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc, - u8* destAddr, int dstWidth, int dstHeight); - -void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, LPDIRECT3DTEXTURE9 destTexture); - -} - -#endif // _TEXTURECONVERTER_H_ +// Copyright (C) 2003 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _TEXTURECONVERTER_H_ +#define _TEXTURECONVERTER_H_ + +#include "VideoCommon.h" +#include "D3DBase.h" +#include "D3DTexture.h" +#include "D3DUtil.h" +#include "D3DShader.h" + +// Converts textures between formats +// TODO: support multiple texture formats +namespace TextureConverter +{ + +void Init(); +void Shutdown(); + +void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, + u32 copyfmt, int bScaleByHalf, const EFBRectangle& source); + +void EncodeToRamYUYV(LPDIRECT3DTEXTURE9 srcTexture, const TargetRectangle& sourceRc, + u8* destAddr, int dstWidth, int dstHeight); + +void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, LPDIRECT3DTEXTURE9 destTexture); + +} + +#endif // _TEXTURECONVERTER_H_ diff --git a/Source/Plugins/Plugin_VideoDX9/Src/resource.rc b/Source/Plugins/Plugin_VideoDX9/Src/resource.rc index 9d8efb1007..b6eb8e4b46 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/resource.rc +++ b/Source/Plugins/Plugin_VideoDX9/Src/resource.rc @@ -1,196 +1,196 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUT DIALOGEX 0, 0, 188, 81 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Dolphin D3D9 Video Plugin" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "Close",IDOK,131,60,50,14 - LTEXT "Code by ector",IDC_STATIC,7,7,85,9 - LTEXT "Hardware requirements: Radeon 9500 or better, or Geforce FX5200 or better.\nRadeon recommended.",IDC_STATIC,7,19,174,26 - LTEXT "Will not work correctly on older GPU:s.",IDC_STATIC,7,47,170,8 -END - -IDD_SETTINGS DIALOGEX 0, 0, 244, 183 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_SYSMENU -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "&Graphics card:",IDC_STATIC,9,9,49,8 - COMBOBOX IDC_ADAPTER,68,7,162,48,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&V-Sync",IDC_VSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,68,25,36,8 - CONTROL "&Widescreen Hack",IDC_WIDESCREEN_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,25,67,10 - LTEXT "&Aspect Ratio:",IDC_STATIC,9,40,48,8 - COMBOBOX IDC_ASPECTRATIO,68,39,89,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Scale - AA mode:",IDC_STATIC,9,59,59,8 - COMBOBOX IDC_ANTIALIASMODE,68,59,162,73,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&Enable CPU->EFB access ",IDC_EFB_ACCESS_ENABLE,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,80,94,11 - GROUPBOX "Safe Texture Cache Mode",IDC_STATIC,109,94,125,27 - CONTROL "&Safe Texture Cache",IDC_SAFE_TEXTURE_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,104,80,11 - CONTROL "Safe",IDC_SAFE_TEXTURE_CACHE_SAFE,"Button",BS_AUTORADIOBUTTON,117,105,27,10 - CONTROL "Normal",IDC_SAFE_TEXTURE_CACHE_NORMAL,"Button",BS_AUTORADIOBUTTON,154,105,38,10 - CONTROL "Fast",IDC_SAFE_TEXTURE_CACHE_FAST,"Button",BS_AUTORADIOBUTTON,198,105,30,10 - CONTROL "",IDC_DXCHK,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_TABSTOP,30,126,186,50 -END - -IDD_ADVANCED DIALOGEX 0, 0, 244, 200 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_BORDER | WS_SYSMENU -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - GROUPBOX "&Settings",IDC_STATIC,6,7,228,89 - CONTROL "Overlay FPS counter",IDC_OVERLAYFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,18,82,8 - CONTROL "&Overlay some statistics",IDC_OVERLAYSTATS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,155,90,8 - CONTROL "Show s&hader compilation errors",IDC_SHOWSHADERERRORS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,169,114,8 - CONTROL "Enable &Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,48,87,8 - CONTROL "Disable Fog",IDC_DISABLEFOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,18,78,8 - CONTROL "Enable Hotkey",IDC_OSDHOTKEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,87,8 - CONTROL "Enable EFB copy",IDC_ENABLEEFBCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,33,81,8 - CONTROL "To RAM",IDC_EFBTORAM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,29,44,59,10 - CONTROL "To Texture",IDC_EFBTOTEX,"Button",BS_AUTORADIOBUTTON,29,57,60,10 - GROUPBOX "&Data dumping",IDC_STATIC,7,100,228,41 - CONTROL "Dump &textures",IDC_TEXDUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,111,70,9 - CONTROL "Dump Frames to User/Dump/Frames",IDC_DUMPFRAMES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,125,138,9 - GROUPBOX "Debugging Tools",IDC_STATIC,7,143,228,51 - CONTROL "Enable TexFmt Overlay",IDC_TEXFMT_OVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,92,10 - CONTROL "Centered",IDC_TEXFMT_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,183,52,10 - CONTROL "Enable XFB",IDC_ENABLEXFB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,71,81,8 - CONTROL "Enable Real XFB",IDC_ENABLEREALXFB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,71,81,8 - CONTROL "Use Native Mips",IDC_USENATIVEMIPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,83,67,10 -END - -IDD_ENHANCEMENTS DIALOGEX 0, 0, 224, 175 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - GROUPBOX "Texture &filtering",IDC_STATIC,7,7,210,60 - CONTROL "Force &bi/trilinear (breaks video in several Wii games)",IDC_FORCEFILTERING, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,20,192,9 - CONTROL "Enable 16x &anisotropy filtering",IDC_FORCEANISOTROPY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,35,110,10 - CONTROL "Enable hires texture loading",IDC_LOADHIRESTEXTURE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,50,110,11 - GROUPBOX "EFB Hacks",IDC_STATIC,7,70,210,27 - CONTROL "EFB Scaled Copy",IDC_EFBSCALEDCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,80,110,12 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 181 - TOPMARGIN, 7 - BOTTOMMARGIN, 74 - END - - IDD_SETTINGS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 237 - VERTGUIDE, 7 - VERTGUIDE, 68 - VERTGUIDE, 109 - VERTGUIDE, 161 - TOPMARGIN, 7 - BOTTOMMARGIN, 176 - END - - IDD_ADVANCED, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 237 - VERTGUIDE, 14 - VERTGUIDE, 29 - VERTGUIDE, 114 - TOPMARGIN, 7 - BOTTOMMARGIN, 195 - HORZGUIDE, 18 - HORZGUIDE, 33 - HORZGUIDE, 49 - HORZGUIDE, 156 - END - - IDD_ENHANCEMENTS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 217 - VERTGUIDE, 16 - VERTGUIDE, 74 - TOPMARGIN, 7 - BOTTOMMARGIN, 168 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOGEX 0, 0, 188, 81 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dolphin D3D9 Video Plugin" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Close",IDOK,131,60,50,14 + LTEXT "Code by ector",IDC_STATIC,7,7,85,9 + LTEXT "Hardware requirements: Radeon 9500 or better, or Geforce FX5200 or better.\nRadeon recommended.",IDC_STATIC,7,19,174,26 + LTEXT "Will not work correctly on older GPU:s.",IDC_STATIC,7,47,170,8 +END + +IDD_SETTINGS DIALOGEX 0, 0, 244, 183 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_SYSMENU +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Graphics card:",IDC_STATIC,9,9,49,8 + COMBOBOX IDC_ADAPTER,68,7,162,48,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&V-Sync",IDC_VSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,68,25,36,8 + CONTROL "&Widescreen Hack",IDC_WIDESCREEN_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,25,67,10 + LTEXT "&Aspect Ratio:",IDC_STATIC,9,40,48,8 + COMBOBOX IDC_ASPECTRATIO,68,39,89,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Scale - AA mode:",IDC_STATIC,9,59,59,8 + COMBOBOX IDC_ANTIALIASMODE,68,59,162,73,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&Enable CPU->EFB access ",IDC_EFB_ACCESS_ENABLE,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,80,94,11 + GROUPBOX "Safe Texture Cache Mode",IDC_STATIC,109,94,125,27 + CONTROL "&Safe Texture Cache",IDC_SAFE_TEXTURE_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,104,80,11 + CONTROL "Safe",IDC_SAFE_TEXTURE_CACHE_SAFE,"Button",BS_AUTORADIOBUTTON,117,105,27,10 + CONTROL "Normal",IDC_SAFE_TEXTURE_CACHE_NORMAL,"Button",BS_AUTORADIOBUTTON,154,105,38,10 + CONTROL "Fast",IDC_SAFE_TEXTURE_CACHE_FAST,"Button",BS_AUTORADIOBUTTON,198,105,30,10 + CONTROL "",IDC_DXCHK,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_TABSTOP,30,126,186,50 +END + +IDD_ADVANCED DIALOGEX 0, 0, 244, 200 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_BORDER | WS_SYSMENU +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "&Settings",IDC_STATIC,6,7,228,89 + CONTROL "Overlay FPS counter",IDC_OVERLAYFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,18,82,8 + CONTROL "&Overlay some statistics",IDC_OVERLAYSTATS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,155,90,8 + CONTROL "Show s&hader compilation errors",IDC_SHOWSHADERERRORS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,169,114,8 + CONTROL "Enable &Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,48,87,8 + CONTROL "Disable Fog",IDC_DISABLEFOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,18,78,8 + CONTROL "Enable Hotkey",IDC_OSDHOTKEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,87,8 + CONTROL "Enable EFB copy",IDC_ENABLEEFBCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,33,81,8 + CONTROL "To RAM",IDC_EFBTORAM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,29,44,59,10 + CONTROL "To Texture",IDC_EFBTOTEX,"Button",BS_AUTORADIOBUTTON,29,57,60,10 + GROUPBOX "&Data dumping",IDC_STATIC,7,100,228,41 + CONTROL "Dump &textures",IDC_TEXDUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,111,70,9 + CONTROL "Dump Frames to User/Dump/Frames",IDC_DUMPFRAMES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,125,138,9 + GROUPBOX "Debugging Tools",IDC_STATIC,7,143,228,51 + CONTROL "Enable TexFmt Overlay",IDC_TEXFMT_OVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,92,10 + CONTROL "Centered",IDC_TEXFMT_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,183,52,10 + CONTROL "Enable XFB",IDC_ENABLEXFB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,71,81,8 + CONTROL "Enable Real XFB",IDC_ENABLEREALXFB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,71,81,8 + CONTROL "Use Native Mips",IDC_USENATIVEMIPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,83,67,10 +END + +IDD_ENHANCEMENTS DIALOGEX 0, 0, 224, 175 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Texture &filtering",IDC_STATIC,7,7,210,60 + CONTROL "Force &bi/trilinear (breaks video in several Wii games)",IDC_FORCEFILTERING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,20,192,9 + CONTROL "Enable 16x &anisotropy filtering",IDC_FORCEANISOTROPY, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,35,110,10 + CONTROL "Enable hires texture loading",IDC_LOADHIRESTEXTURE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,50,110,11 + GROUPBOX "EFB Hacks",IDC_STATIC,7,70,210,27 + CONTROL "EFB Scaled Copy",IDC_EFBSCALEDCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,80,110,12 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 181 + TOPMARGIN, 7 + BOTTOMMARGIN, 74 + END + + IDD_SETTINGS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 237 + VERTGUIDE, 7 + VERTGUIDE, 68 + VERTGUIDE, 109 + VERTGUIDE, 161 + TOPMARGIN, 7 + BOTTOMMARGIN, 176 + END + + IDD_ADVANCED, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 237 + VERTGUIDE, 14 + VERTGUIDE, 29 + VERTGUIDE, 114 + TOPMARGIN, 7 + BOTTOMMARGIN, 195 + HORZGUIDE, 18 + HORZGUIDE, 33 + HORZGUIDE, 49 + HORZGUIDE, 156 + END + + IDD_ENHANCEMENTS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 217 + VERTGUIDE, 16 + VERTGUIDE, 74 + TOPMARGIN, 7 + BOTTOMMARGIN, 168 + END +END +#endif // APSTUDIO_INVOKED + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Source/Plugins/Plugin_VideoOGL/Src/DLCache.h b/Source/Plugins/Plugin_VideoOGL/Src/DLCache.h index 8acca4a064..9286f52637 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/DLCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/DLCache.h @@ -1,32 +1,32 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _DLCACHE_H -#define _DLCACHE_H - -bool HandleDisplayList(u32 address, u32 size); - -namespace DLCache { - -void Init(); -void Shutdown(); -void ProgressiveCleanup(); -void Clear(); - -} // namespace - -#endif // _DLCACHE_H +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _DLCACHE_H +#define _DLCACHE_H + +bool HandleDisplayList(u32 address, u32 size); + +namespace DLCache { + +void Init(); +void Shutdown(); +void ProgressiveCleanup(); +void Clear(); + +} // namespace + +#endif // _DLCACHE_H diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp index 9b7f50c40e..60ec5e4fb4 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp @@ -1,150 +1,150 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "pluginspecs_video.h" -#include "../../../Core/VideoCommon/Src/VideoCommon.h" -#include "main.h" - -#include "BPMemLoader.h" -#include "EfbCopy.h" -#include "Rasterizer.h" -#include "PixelEngine.h" -#include "../../../Core/VideoCommon/Src/TextureDecoder.h" - - -BPMemory bpmem; - -void InitBPMemory() -{ - memset(&bpmem, 0, sizeof(bpmem)); - bpmem.bpMask = 0xFFFFFF; -} - -void BPWritten(int address, int newvalue); - -void LoadBPReg(u32 value) -{ - //handle the mask register - int address = value >> 24; - int oldval = ((u32*)&bpmem)[address]; - int newval = (oldval & ~bpmem.bpMask) | (value & bpmem.bpMask); - - ((u32*)&bpmem)[address] = newval; - - //reset the mask register - if (address != 0xFE) - bpmem.bpMask = 0xFFFFFF; - - BPWritten(address, newval); -} - -void BPWritten(int address, int newvalue) -{ - switch (address) - { - case BPMEM_SCISSORTL: - case BPMEM_SCISSORBR: - case BPMEM_SCISSOROFFSET: - Rasterizer::SetScissor(); - break; - case BPMEM_SETDRAWDONE: // This is called when the game is done drawing (eg: like in DX: Begin(); Draw(); End();) - switch (bpmem.drawdone & 0xFF) - { - case 0x02: - PixelEngine::SetFinish(); // may generate interrupt - DEBUG_LOG(VIDEO, "GXSetDrawDone SetPEFinish (value: 0x%02X)", (bpmem.drawdone & 0xFFFF)); - break; - - default: - WARN_LOG(VIDEO, "GXSetDrawDone ??? (value 0x%02X)", (bpmem.drawdone & 0xFFFF)); - break; - } - break; - case BPMEM_PE_TOKEN_ID: // Pixel Engine Token ID - DEBUG_LOG(VIDEO, "SetPEToken 0x%04x", (bpmem.petoken & 0xFFFF)); - PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), false); - break; - case BPMEM_PE_TOKEN_INT_ID: // Pixel Engine Interrupt Token ID - DEBUG_LOG(VIDEO, "SetPEToken + INT 0x%04x", (bpmem.petokenint & 0xFFFF)); - PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), TRUE); - break; - case BPMEM_TRIGGER_EFB_COPY: - EfbCopy::CopyEfb(); - break; - case BPMEM_CLEARBBOX1: - PixelEngine::pereg.boxRight = newvalue >> 10; - PixelEngine::pereg.boxLeft = newvalue & 0x3ff; - break; - case BPMEM_CLEARBBOX2: - PixelEngine::pereg.boxBottom = newvalue >> 10; - PixelEngine::pereg.boxTop = newvalue & 0x3ff; - break; - case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. - break; - case BPMEM_LOADTLUT1: // Load a Texture Look Up Table - { - u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; - u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; - - u8 *ptr = 0; - - // TODO - figure out a cleaner way. - if (g_VideoInitialize.bWii) - ptr = g_VideoInitialize.pGetMemoryPointer(bpmem.tlutXferSrc << 5); - else - ptr = g_VideoInitialize.pGetMemoryPointer((bpmem.tlutXferSrc & 0xFFFFF) << 5); - - if (ptr) - memcpy_gc(texMem + tlutTMemAddr, ptr, tlutXferCount); - else - PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tlutXferSrc, bpmem.tlutXferSrc << 5, (bpmem.tlutXferSrc & 0xFFFFF)<< 5); - break; - } - - case BPMEM_TEV_REGISTER_L: // Reg 1 - case BPMEM_TEV_REGISTER_L+2: // Reg 2 - case BPMEM_TEV_REGISTER_L+4: // Reg 3 - case BPMEM_TEV_REGISTER_L+6: // Reg 4 - { - int regNum = (address >> 1 ) & 0x3; - ColReg& reg = bpmem.tevregs[regNum].low; - bool konst = reg.type; - - Rasterizer::SetTevReg(regNum, 3, konst, reg.b); // A - Rasterizer::SetTevReg(regNum, 0, konst, reg.a); // R - - break; - } - - case BPMEM_TEV_REGISTER_H: // Reg 1 - case BPMEM_TEV_REGISTER_H+2: // Reg 2 - case BPMEM_TEV_REGISTER_H+4: // Reg 3 - case BPMEM_TEV_REGISTER_H+6: // Reg 4 - { - int regNum = (address >> 1 ) & 0x3; - ColReg& reg = bpmem.tevregs[regNum].high; - bool konst = reg.type; - - Rasterizer::SetTevReg(regNum, 1, konst, reg.b); // G - Rasterizer::SetTevReg(regNum, 2, konst, reg.a); // B - - break; - } - - } -} - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "pluginspecs_video.h" +#include "../../../Core/VideoCommon/Src/VideoCommon.h" +#include "main.h" + +#include "BPMemLoader.h" +#include "EfbCopy.h" +#include "Rasterizer.h" +#include "PixelEngine.h" +#include "../../../Core/VideoCommon/Src/TextureDecoder.h" + + +BPMemory bpmem; + +void InitBPMemory() +{ + memset(&bpmem, 0, sizeof(bpmem)); + bpmem.bpMask = 0xFFFFFF; +} + +void BPWritten(int address, int newvalue); + +void LoadBPReg(u32 value) +{ + //handle the mask register + int address = value >> 24; + int oldval = ((u32*)&bpmem)[address]; + int newval = (oldval & ~bpmem.bpMask) | (value & bpmem.bpMask); + + ((u32*)&bpmem)[address] = newval; + + //reset the mask register + if (address != 0xFE) + bpmem.bpMask = 0xFFFFFF; + + BPWritten(address, newval); +} + +void BPWritten(int address, int newvalue) +{ + switch (address) + { + case BPMEM_SCISSORTL: + case BPMEM_SCISSORBR: + case BPMEM_SCISSOROFFSET: + Rasterizer::SetScissor(); + break; + case BPMEM_SETDRAWDONE: // This is called when the game is done drawing (eg: like in DX: Begin(); Draw(); End();) + switch (bpmem.drawdone & 0xFF) + { + case 0x02: + PixelEngine::SetFinish(); // may generate interrupt + DEBUG_LOG(VIDEO, "GXSetDrawDone SetPEFinish (value: 0x%02X)", (bpmem.drawdone & 0xFFFF)); + break; + + default: + WARN_LOG(VIDEO, "GXSetDrawDone ??? (value 0x%02X)", (bpmem.drawdone & 0xFFFF)); + break; + } + break; + case BPMEM_PE_TOKEN_ID: // Pixel Engine Token ID + DEBUG_LOG(VIDEO, "SetPEToken 0x%04x", (bpmem.petoken & 0xFFFF)); + PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), false); + break; + case BPMEM_PE_TOKEN_INT_ID: // Pixel Engine Interrupt Token ID + DEBUG_LOG(VIDEO, "SetPEToken + INT 0x%04x", (bpmem.petokenint & 0xFFFF)); + PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), TRUE); + break; + case BPMEM_TRIGGER_EFB_COPY: + EfbCopy::CopyEfb(); + break; + case BPMEM_CLEARBBOX1: + PixelEngine::pereg.boxRight = newvalue >> 10; + PixelEngine::pereg.boxLeft = newvalue & 0x3ff; + break; + case BPMEM_CLEARBBOX2: + PixelEngine::pereg.boxBottom = newvalue >> 10; + PixelEngine::pereg.boxTop = newvalue & 0x3ff; + break; + case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. + break; + case BPMEM_LOADTLUT1: // Load a Texture Look Up Table + { + u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; + u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; + + u8 *ptr = 0; + + // TODO - figure out a cleaner way. + if (g_VideoInitialize.bWii) + ptr = g_VideoInitialize.pGetMemoryPointer(bpmem.tlutXferSrc << 5); + else + ptr = g_VideoInitialize.pGetMemoryPointer((bpmem.tlutXferSrc & 0xFFFFF) << 5); + + if (ptr) + memcpy_gc(texMem + tlutTMemAddr, ptr, tlutXferCount); + else + PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tlutXferSrc, bpmem.tlutXferSrc << 5, (bpmem.tlutXferSrc & 0xFFFFF)<< 5); + break; + } + + case BPMEM_TEV_REGISTER_L: // Reg 1 + case BPMEM_TEV_REGISTER_L+2: // Reg 2 + case BPMEM_TEV_REGISTER_L+4: // Reg 3 + case BPMEM_TEV_REGISTER_L+6: // Reg 4 + { + int regNum = (address >> 1 ) & 0x3; + ColReg& reg = bpmem.tevregs[regNum].low; + bool konst = reg.type; + + Rasterizer::SetTevReg(regNum, 3, konst, reg.b); // A + Rasterizer::SetTevReg(regNum, 0, konst, reg.a); // R + + break; + } + + case BPMEM_TEV_REGISTER_H: // Reg 1 + case BPMEM_TEV_REGISTER_H+2: // Reg 2 + case BPMEM_TEV_REGISTER_H+4: // Reg 3 + case BPMEM_TEV_REGISTER_H+6: // Reg 4 + { + int regNum = (address >> 1 ) & 0x3; + ColReg& reg = bpmem.tevregs[regNum].high; + bool konst = reg.type; + + Rasterizer::SetTevReg(regNum, 1, konst, reg.b); // G + Rasterizer::SetTevReg(regNum, 2, konst, reg.a); // B + + break; + } + + } +} + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/CPMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/CPMemLoader.cpp index 9843737622..78ae843c37 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/CPMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/CPMemLoader.cpp @@ -1,82 +1,82 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "VideoCommon.h" - -#include "CPMemLoader.h" - - -// CP state -u8 *cached_arraybases[16]; - -// STATE_TO_SAVE -u32 arraybases[16]; -u32 arraystrides[16]; -TMatrixIndexA MatrixIndexA; -TMatrixIndexB MatrixIndexB; -TVtxDesc g_VtxDesc; -VAT g_VtxAttr[8]; - - -void LoadCPReg(u32 sub_cmd, u32 value) -{ - switch (sub_cmd & 0xF0) - { - case 0x30: - MatrixIndexA.Hex = value; - break; - - case 0x40: - MatrixIndexB.Hex = value; - break; - - case 0x50: - g_VtxDesc.Hex &= ~0x1FFFF; // keep the Upper bits - g_VtxDesc.Hex |= value; - break; - - case 0x60: - g_VtxDesc.Hex &= 0x1FFFF; // keep the lower 17Bits - g_VtxDesc.Hex |= (u64)value << 17; - break; - - case 0x70: - _assert_((sub_cmd & 0x0F) < 8); - g_VtxAttr[sub_cmd & 7].g0.Hex = value; - break; - - case 0x80: - _assert_((sub_cmd & 0x0F) < 8); - g_VtxAttr[sub_cmd & 7].g1.Hex = value; - break; - - case 0x90: - _assert_((sub_cmd & 0x0F) < 8); - g_VtxAttr[sub_cmd & 7].g2.Hex = value; - break; - - // Pointers to vertex arrays in GC RAM - case 0xA0: - arraybases[sub_cmd & 0xF] = value; - cached_arraybases[sub_cmd & 0xF] = Memory_GetPtr(value); - break; - - case 0xB0: - arraystrides[sub_cmd & 0xF] = value & 0xFF; - break; - } -} - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "VideoCommon.h" + +#include "CPMemLoader.h" + + +// CP state +u8 *cached_arraybases[16]; + +// STATE_TO_SAVE +u32 arraybases[16]; +u32 arraystrides[16]; +TMatrixIndexA MatrixIndexA; +TMatrixIndexB MatrixIndexB; +TVtxDesc g_VtxDesc; +VAT g_VtxAttr[8]; + + +void LoadCPReg(u32 sub_cmd, u32 value) +{ + switch (sub_cmd & 0xF0) + { + case 0x30: + MatrixIndexA.Hex = value; + break; + + case 0x40: + MatrixIndexB.Hex = value; + break; + + case 0x50: + g_VtxDesc.Hex &= ~0x1FFFF; // keep the Upper bits + g_VtxDesc.Hex |= value; + break; + + case 0x60: + g_VtxDesc.Hex &= 0x1FFFF; // keep the lower 17Bits + g_VtxDesc.Hex |= (u64)value << 17; + break; + + case 0x70: + _assert_((sub_cmd & 0x0F) < 8); + g_VtxAttr[sub_cmd & 7].g0.Hex = value; + break; + + case 0x80: + _assert_((sub_cmd & 0x0F) < 8); + g_VtxAttr[sub_cmd & 7].g1.Hex = value; + break; + + case 0x90: + _assert_((sub_cmd & 0x0F) < 8); + g_VtxAttr[sub_cmd & 7].g2.Hex = value; + break; + + // Pointers to vertex arrays in GC RAM + case 0xA0: + arraybases[sub_cmd & 0xF] = value; + cached_arraybases[sub_cmd & 0xF] = Memory_GetPtr(value); + break; + + case 0xB0: + arraystrides[sub_cmd & 0xF] = value & 0xFF; + break; + } +} + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Clipper.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Clipper.cpp index 50dc4bfada..7fa87e5619 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Clipper.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Clipper.cpp @@ -1,443 +1,443 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -/* -Portions of this file are based off work by Markus Trenkwalder. -Copyright (c) 2007, 2008 Markus Trenkwalder - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the library's copyright owner nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Clipper.h" -#include "Rasterizer.h" -#include "NativeVertexFormat.h" -#include "XFMemLoader.h" -#include "BPMemLoader.h" -#include "Statistics.h" -#include "VideoConfig.h" - - -namespace Clipper -{ - float m_ViewOffset[3]; - OutputVertexData ClippedVertices[18]; - OutputVertexData *Vertices[21]; - - void Init() - { - for (int i = 0; i < 18; ++i) - Vertices[i+3] = &ClippedVertices[i]; - } - - void SetViewOffset() - { - m_ViewOffset[0] = xfregs.viewport.xOrig - 342; - m_ViewOffset[1] = xfregs.viewport.yOrig - 342; - m_ViewOffset[2] = xfregs.viewport.farZ - xfregs.viewport.farZ; - } - - - enum { - SKIP_FLAG = -1, - CLIP_POS_X_BIT = 0x01, - CLIP_NEG_X_BIT = 0x02, - CLIP_POS_Y_BIT = 0x04, - CLIP_NEG_Y_BIT = 0x08, - CLIP_POS_Z_BIT = 0x10, - CLIP_NEG_Z_BIT = 0x20 - }; - - static inline int CalcClipMask(OutputVertexData *v) - { - int cmask = 0; - Vec4 pos = v->projectedPosition; - if (pos.w - pos.x < 0) cmask |= CLIP_POS_X_BIT; - if (pos.x + pos.w < 0) cmask |= CLIP_NEG_X_BIT; - if (pos.w - pos.y < 0) cmask |= CLIP_POS_Y_BIT; - if (pos.y + pos.w < 0) cmask |= CLIP_NEG_Y_BIT; - if (pos.w * pos.z > 0) cmask |= CLIP_POS_Z_BIT; - if (pos.z + pos.w < 0) cmask |= CLIP_NEG_Z_BIT; - return cmask; - } - - static inline void AddInterpolatedVertex(float t, int out, int in, int& numVertices) - { - Vertices[numVertices]->Lerp(t, Vertices[out], Vertices[in]); - numVertices++; - } - - #define DIFFERENT_SIGNS(x,y) ((x <= 0 && y > 0) || (x > 0 && y <= 0)) - - #define CLIP_DOTPROD(I, A, B, C, D) \ - (Vertices[I]->projectedPosition.x * A + Vertices[I]->projectedPosition.y * B + Vertices[I]->projectedPosition.z * C + Vertices[I]->projectedPosition.w * D) - - #define POLY_CLIP( PLANE_BIT, A, B, C, D ) \ - { \ - if (mask & PLANE_BIT) { \ - int idxPrev = inlist[0]; \ - float dpPrev = CLIP_DOTPROD(idxPrev, A, B, C, D ); \ - int outcount = 0; \ - \ - inlist[n] = inlist[0]; \ - for (int j = 1; j <= n; j++) { \ - int idx = inlist[j]; \ - float dp = CLIP_DOTPROD(idx, A, B, C, D ); \ - if (dpPrev >= 0) { \ - outlist[outcount++] = idxPrev; \ - } \ - \ - if (DIFFERENT_SIGNS(dp, dpPrev)) { \ - if (dp < 0) { \ - float t = dp / (dp - dpPrev); \ - AddInterpolatedVertex(t, idx, idxPrev, numVertices); \ - } else { \ - float t = dpPrev / (dpPrev - dp); \ - AddInterpolatedVertex(t, idxPrev, idx, numVertices); \ - } \ - outlist[outcount++] = numVertices - 1; \ - } \ - \ - idxPrev = idx; \ - dpPrev = dp; \ - } \ - \ - if (outcount < 3) \ - continue; \ - \ - { \ - int *tmp = inlist; \ - inlist = outlist; \ - outlist = tmp; \ - n = outcount; \ - } \ - } \ - } - - #define LINE_CLIP(PLANE_BIT, A, B, C, D ) \ - { \ - if (mask & PLANE_BIT) { \ - const float dp0 = CLIP_DOTPROD( 0, A, B, C, D ); \ - const float dp1 = CLIP_DOTPROD( 1, A, B, C, D ); \ - const bool neg_dp0 = dp0 < 0; \ - const bool neg_dp1 = dp1 < 0; \ - \ - if (neg_dp0 && neg_dp1) \ - return; \ - \ - if (neg_dp1) { \ - float t = dp1 / (dp1 - dp0); \ - if (t > t1) t1 = t; \ - } else if (neg_dp0) { \ - float t = dp0 / (dp0 - dp1); \ - if (t > t0) t0 = t; \ - } \ - } \ - } - - void ClipTriangle(int *indices, int &numIndices) - { - int mask = 0; - - mask |= CalcClipMask(Vertices[0]); - mask |= CalcClipMask(Vertices[1]); - mask |= CalcClipMask(Vertices[2]); - - if (mask != 0) - { - for(int i = 0; i < 3; i += 3) - { - int vlist[2][2*6+1]; - int *inlist = vlist[0], *outlist = vlist[1]; - int n = 3; - int numVertices = 3; - - inlist[0] = 0; - inlist[1] = 1; - inlist[2] = 2; - - // mark this triangle as unused in case it should be completely - // clipped - indices[0] = SKIP_FLAG; - indices[1] = SKIP_FLAG; - indices[2] = SKIP_FLAG; - - POLY_CLIP(CLIP_POS_X_BIT, -1, 0, 0, 1); - POLY_CLIP(CLIP_NEG_X_BIT, 1, 0, 0, 1); - POLY_CLIP(CLIP_POS_Y_BIT, 0, -1, 0, 1); - POLY_CLIP(CLIP_NEG_Y_BIT, 0, 1, 0, 1); - POLY_CLIP(CLIP_POS_Z_BIT, 0, 0, 0, 1); - POLY_CLIP(CLIP_NEG_Z_BIT, 0, 0, 1, 1); - - INCSTAT(stats.thisFrame.numTrianglesClipped); - - // transform the poly in inlist into triangles - indices[0] = inlist[0]; - indices[1] = inlist[1]; - indices[2] = inlist[2]; - for (int j = 3; j < n; ++j) { - indices[numIndices++] = inlist[0]; - indices[numIndices++] = inlist[j - 1]; - indices[numIndices++] = inlist[j]; - } - } - } - } - - void ClipLine(int *indices) - { - int mask = 0; - int clip_mask[2] = { 0, 0 }; - - for (int i = 0; i < 2; ++i) - { - clip_mask[i] = CalcClipMask(Vertices[i]); - mask |= clip_mask[i]; - } - - if (mask == 0) - return; - - float t0 = 0; - float t1 = 0; - - // Mark unused in case of early termination - // of the macros below. (When fully clipped) - indices[0] = SKIP_FLAG; - indices[1] = SKIP_FLAG; - - LINE_CLIP(CLIP_POS_X_BIT, -1, 0, 0, 1); - LINE_CLIP(CLIP_NEG_X_BIT, 1, 0, 0, 1); - LINE_CLIP(CLIP_POS_Y_BIT, 0, -1, 0, 1); - LINE_CLIP(CLIP_NEG_Y_BIT, 0, 1, 0, 1); - LINE_CLIP(CLIP_POS_Z_BIT, 0, 0, -1, 1); - LINE_CLIP(CLIP_NEG_Z_BIT, 0, 0, 1, 1); - - // Restore the old values as this line - // was not fully clipped. - indices[0] = 0; - indices[1] = 1; - - int numVertices = 2; - - if (clip_mask[0]) { - indices[0] = numVertices; - AddInterpolatedVertex(t0, 0, 1, numVertices); - } - - if (clip_mask[1]) { - indices[1] = numVertices; - AddInterpolatedVertex(t1, 1, 0, numVertices); - } - } - - void ProcessTriangle(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) - { - if (stats.thisFrame.numDrawnObjects < g_Config.drawStart || stats.thisFrame.numDrawnObjects >= g_Config.drawEnd ) - return; - - INCSTAT(stats.thisFrame.numTrianglesIn) - - bool backface; - - if(!CullTest(v0, v1, v2, backface)) - return; - - int indices[21] = { 0, 1, 2, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, - SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, - SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG }; - int numIndices = 3; - - if (backface) - { - Vertices[0] = v0; - Vertices[1] = v2; - Vertices[2] = v1; - } - else - { - Vertices[0] = v0; - Vertices[1] = v1; - Vertices[2] = v2; - } - - ClipTriangle(indices, numIndices); - - for(int i = 0; i+3 <= numIndices; i+=3) - { - if(indices[i] != SKIP_FLAG) - { - PerspectiveDivide(Vertices[indices[i]]); - PerspectiveDivide(Vertices[indices[i+1]]); - PerspectiveDivide(Vertices[indices[i+2]]); - - Rasterizer::DrawTriangleFrontFace(Vertices[indices[i]], Vertices[indices[i+1]], Vertices[indices[i+2]]); - } - } - } - - void CopyVertex(OutputVertexData *dst, OutputVertexData *src, float dx, float dy, unsigned int sOffset) - { - dst->screenPosition.x = src->screenPosition.x + dx; - dst->screenPosition.y = src->screenPosition.y + dy; - dst->screenPosition.z = src->screenPosition.z; - - for (int i = 0; i < 3; ++i) - dst->normal[i] = src->normal[i]; - - for (int i = 0; i < 4; ++i) - dst->color[0][i] = src->color[0][i]; - - // todo - s offset - for (int i = 0; i < 8; ++i) - dst->texCoords[i] = src->texCoords[i]; - } - - void ProcessLine(OutputVertexData *lineV0, OutputVertexData *lineV1) - { - int indices[4] = { 0, 1, SKIP_FLAG, SKIP_FLAG }; - - Vertices[0] = lineV0; - Vertices[1] = lineV1; - - // point to a valid vertex to store to when clipping - Vertices[2] = &ClippedVertices[17]; - - ClipLine(indices); - - if(indices[0] != SKIP_FLAG) - { - OutputVertexData *v0 = Vertices[indices[0]]; - OutputVertexData *v1 = Vertices[indices[1]]; - - PerspectiveDivide(v0); - PerspectiveDivide(v1); - - float dx = v1->screenPosition.x - v0->screenPosition.x; - float dy = v1->screenPosition.y - v0->screenPosition.y; - - float screenDx = 0; - float screenDy = 0; - - if(abs(dx) > abs(dy)) - { - if(dx > 0) - screenDy = bpmem.lineptwidth.linesize / -12.0f; - else - screenDy = bpmem.lineptwidth.linesize / 12.0f; - } - else - { - if(dy > 0) - screenDx = bpmem.lineptwidth.linesize / 12.0f; - else - screenDx = bpmem.lineptwidth.linesize / -12.0f; - } - - OutputVertexData triangle[3]; - - CopyVertex(&triangle[0], v0, screenDx, screenDy, 0); - CopyVertex(&triangle[1], v1, screenDx, screenDy, 0); - CopyVertex(&triangle[2], v1, -screenDx, -screenDy, bpmem.lineptwidth.lineoff); - - // ccw winding - Rasterizer::DrawTriangleFrontFace(&triangle[2], &triangle[1], &triangle[0]); - - CopyVertex(&triangle[1], v0, -screenDx, -screenDy, bpmem.lineptwidth.lineoff); - - Rasterizer::DrawTriangleFrontFace(&triangle[0], &triangle[1], &triangle[2]); - } - } - - bool CullTest(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2, bool &backface) - { - int mask = CalcClipMask(v0); - mask &= CalcClipMask(v1); - mask &= CalcClipMask(v2); - - if(mask) - { - INCSTAT(stats.thisFrame.numTrianglesRejected) - return false; - } - - float x0 = v0->projectedPosition.x; - float x1 = v1->projectedPosition.x; - float x2 = v2->projectedPosition.x; - float y1 = v1->projectedPosition.y; - float y0 = v0->projectedPosition.y; - float y2 = v2->projectedPosition.y; - float w0 = v0->projectedPosition.w; - float w1 = v1->projectedPosition.w; - float w2 = v2->projectedPosition.w; - - float normalZDir = (x0*w2 - x2*w0)*y1 + (x2*y0 - x0*y2)*w1 + (y2*w0 - y0*w2)*x1; - - backface = normalZDir <= 0.0f; - - if ((bpmem.genMode.cullmode & 1) && !backface) // cull frontfacing - { - INCSTAT(stats.thisFrame.numTrianglesCulled) - return false; - } - - if ((bpmem.genMode.cullmode & 2) && backface) // cull backfacing - { - INCSTAT(stats.thisFrame.numTrianglesCulled) - return false; - } - - return true; - } - - void PerspectiveDivide(OutputVertexData *vertex) - { - Vec4 &projected = vertex->projectedPosition; - Vec3 &screen = vertex->screenPosition; - - float wInverse = 1.0f/projected.w; - screen.x = projected.x * wInverse * xfregs.viewport.wd + m_ViewOffset[0]; - screen.y = projected.y * wInverse * xfregs.viewport.ht + m_ViewOffset[1]; - screen.z = projected.z * wInverse + m_ViewOffset[2]; - } - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +/* +Portions of this file are based off work by Markus Trenkwalder. +Copyright (c) 2007, 2008 Markus Trenkwalder + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the library's copyright owner nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "Clipper.h" +#include "Rasterizer.h" +#include "NativeVertexFormat.h" +#include "XFMemLoader.h" +#include "BPMemLoader.h" +#include "Statistics.h" +#include "VideoConfig.h" + + +namespace Clipper +{ + float m_ViewOffset[3]; + OutputVertexData ClippedVertices[18]; + OutputVertexData *Vertices[21]; + + void Init() + { + for (int i = 0; i < 18; ++i) + Vertices[i+3] = &ClippedVertices[i]; + } + + void SetViewOffset() + { + m_ViewOffset[0] = xfregs.viewport.xOrig - 342; + m_ViewOffset[1] = xfregs.viewport.yOrig - 342; + m_ViewOffset[2] = xfregs.viewport.farZ - xfregs.viewport.farZ; + } + + + enum { + SKIP_FLAG = -1, + CLIP_POS_X_BIT = 0x01, + CLIP_NEG_X_BIT = 0x02, + CLIP_POS_Y_BIT = 0x04, + CLIP_NEG_Y_BIT = 0x08, + CLIP_POS_Z_BIT = 0x10, + CLIP_NEG_Z_BIT = 0x20 + }; + + static inline int CalcClipMask(OutputVertexData *v) + { + int cmask = 0; + Vec4 pos = v->projectedPosition; + if (pos.w - pos.x < 0) cmask |= CLIP_POS_X_BIT; + if (pos.x + pos.w < 0) cmask |= CLIP_NEG_X_BIT; + if (pos.w - pos.y < 0) cmask |= CLIP_POS_Y_BIT; + if (pos.y + pos.w < 0) cmask |= CLIP_NEG_Y_BIT; + if (pos.w * pos.z > 0) cmask |= CLIP_POS_Z_BIT; + if (pos.z + pos.w < 0) cmask |= CLIP_NEG_Z_BIT; + return cmask; + } + + static inline void AddInterpolatedVertex(float t, int out, int in, int& numVertices) + { + Vertices[numVertices]->Lerp(t, Vertices[out], Vertices[in]); + numVertices++; + } + + #define DIFFERENT_SIGNS(x,y) ((x <= 0 && y > 0) || (x > 0 && y <= 0)) + + #define CLIP_DOTPROD(I, A, B, C, D) \ + (Vertices[I]->projectedPosition.x * A + Vertices[I]->projectedPosition.y * B + Vertices[I]->projectedPosition.z * C + Vertices[I]->projectedPosition.w * D) + + #define POLY_CLIP( PLANE_BIT, A, B, C, D ) \ + { \ + if (mask & PLANE_BIT) { \ + int idxPrev = inlist[0]; \ + float dpPrev = CLIP_DOTPROD(idxPrev, A, B, C, D ); \ + int outcount = 0; \ + \ + inlist[n] = inlist[0]; \ + for (int j = 1; j <= n; j++) { \ + int idx = inlist[j]; \ + float dp = CLIP_DOTPROD(idx, A, B, C, D ); \ + if (dpPrev >= 0) { \ + outlist[outcount++] = idxPrev; \ + } \ + \ + if (DIFFERENT_SIGNS(dp, dpPrev)) { \ + if (dp < 0) { \ + float t = dp / (dp - dpPrev); \ + AddInterpolatedVertex(t, idx, idxPrev, numVertices); \ + } else { \ + float t = dpPrev / (dpPrev - dp); \ + AddInterpolatedVertex(t, idxPrev, idx, numVertices); \ + } \ + outlist[outcount++] = numVertices - 1; \ + } \ + \ + idxPrev = idx; \ + dpPrev = dp; \ + } \ + \ + if (outcount < 3) \ + continue; \ + \ + { \ + int *tmp = inlist; \ + inlist = outlist; \ + outlist = tmp; \ + n = outcount; \ + } \ + } \ + } + + #define LINE_CLIP(PLANE_BIT, A, B, C, D ) \ + { \ + if (mask & PLANE_BIT) { \ + const float dp0 = CLIP_DOTPROD( 0, A, B, C, D ); \ + const float dp1 = CLIP_DOTPROD( 1, A, B, C, D ); \ + const bool neg_dp0 = dp0 < 0; \ + const bool neg_dp1 = dp1 < 0; \ + \ + if (neg_dp0 && neg_dp1) \ + return; \ + \ + if (neg_dp1) { \ + float t = dp1 / (dp1 - dp0); \ + if (t > t1) t1 = t; \ + } else if (neg_dp0) { \ + float t = dp0 / (dp0 - dp1); \ + if (t > t0) t0 = t; \ + } \ + } \ + } + + void ClipTriangle(int *indices, int &numIndices) + { + int mask = 0; + + mask |= CalcClipMask(Vertices[0]); + mask |= CalcClipMask(Vertices[1]); + mask |= CalcClipMask(Vertices[2]); + + if (mask != 0) + { + for(int i = 0; i < 3; i += 3) + { + int vlist[2][2*6+1]; + int *inlist = vlist[0], *outlist = vlist[1]; + int n = 3; + int numVertices = 3; + + inlist[0] = 0; + inlist[1] = 1; + inlist[2] = 2; + + // mark this triangle as unused in case it should be completely + // clipped + indices[0] = SKIP_FLAG; + indices[1] = SKIP_FLAG; + indices[2] = SKIP_FLAG; + + POLY_CLIP(CLIP_POS_X_BIT, -1, 0, 0, 1); + POLY_CLIP(CLIP_NEG_X_BIT, 1, 0, 0, 1); + POLY_CLIP(CLIP_POS_Y_BIT, 0, -1, 0, 1); + POLY_CLIP(CLIP_NEG_Y_BIT, 0, 1, 0, 1); + POLY_CLIP(CLIP_POS_Z_BIT, 0, 0, 0, 1); + POLY_CLIP(CLIP_NEG_Z_BIT, 0, 0, 1, 1); + + INCSTAT(stats.thisFrame.numTrianglesClipped); + + // transform the poly in inlist into triangles + indices[0] = inlist[0]; + indices[1] = inlist[1]; + indices[2] = inlist[2]; + for (int j = 3; j < n; ++j) { + indices[numIndices++] = inlist[0]; + indices[numIndices++] = inlist[j - 1]; + indices[numIndices++] = inlist[j]; + } + } + } + } + + void ClipLine(int *indices) + { + int mask = 0; + int clip_mask[2] = { 0, 0 }; + + for (int i = 0; i < 2; ++i) + { + clip_mask[i] = CalcClipMask(Vertices[i]); + mask |= clip_mask[i]; + } + + if (mask == 0) + return; + + float t0 = 0; + float t1 = 0; + + // Mark unused in case of early termination + // of the macros below. (When fully clipped) + indices[0] = SKIP_FLAG; + indices[1] = SKIP_FLAG; + + LINE_CLIP(CLIP_POS_X_BIT, -1, 0, 0, 1); + LINE_CLIP(CLIP_NEG_X_BIT, 1, 0, 0, 1); + LINE_CLIP(CLIP_POS_Y_BIT, 0, -1, 0, 1); + LINE_CLIP(CLIP_NEG_Y_BIT, 0, 1, 0, 1); + LINE_CLIP(CLIP_POS_Z_BIT, 0, 0, -1, 1); + LINE_CLIP(CLIP_NEG_Z_BIT, 0, 0, 1, 1); + + // Restore the old values as this line + // was not fully clipped. + indices[0] = 0; + indices[1] = 1; + + int numVertices = 2; + + if (clip_mask[0]) { + indices[0] = numVertices; + AddInterpolatedVertex(t0, 0, 1, numVertices); + } + + if (clip_mask[1]) { + indices[1] = numVertices; + AddInterpolatedVertex(t1, 1, 0, numVertices); + } + } + + void ProcessTriangle(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) + { + if (stats.thisFrame.numDrawnObjects < g_Config.drawStart || stats.thisFrame.numDrawnObjects >= g_Config.drawEnd ) + return; + + INCSTAT(stats.thisFrame.numTrianglesIn) + + bool backface; + + if(!CullTest(v0, v1, v2, backface)) + return; + + int indices[21] = { 0, 1, 2, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, + SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, + SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG, SKIP_FLAG }; + int numIndices = 3; + + if (backface) + { + Vertices[0] = v0; + Vertices[1] = v2; + Vertices[2] = v1; + } + else + { + Vertices[0] = v0; + Vertices[1] = v1; + Vertices[2] = v2; + } + + ClipTriangle(indices, numIndices); + + for(int i = 0; i+3 <= numIndices; i+=3) + { + if(indices[i] != SKIP_FLAG) + { + PerspectiveDivide(Vertices[indices[i]]); + PerspectiveDivide(Vertices[indices[i+1]]); + PerspectiveDivide(Vertices[indices[i+2]]); + + Rasterizer::DrawTriangleFrontFace(Vertices[indices[i]], Vertices[indices[i+1]], Vertices[indices[i+2]]); + } + } + } + + void CopyVertex(OutputVertexData *dst, OutputVertexData *src, float dx, float dy, unsigned int sOffset) + { + dst->screenPosition.x = src->screenPosition.x + dx; + dst->screenPosition.y = src->screenPosition.y + dy; + dst->screenPosition.z = src->screenPosition.z; + + for (int i = 0; i < 3; ++i) + dst->normal[i] = src->normal[i]; + + for (int i = 0; i < 4; ++i) + dst->color[0][i] = src->color[0][i]; + + // todo - s offset + for (int i = 0; i < 8; ++i) + dst->texCoords[i] = src->texCoords[i]; + } + + void ProcessLine(OutputVertexData *lineV0, OutputVertexData *lineV1) + { + int indices[4] = { 0, 1, SKIP_FLAG, SKIP_FLAG }; + + Vertices[0] = lineV0; + Vertices[1] = lineV1; + + // point to a valid vertex to store to when clipping + Vertices[2] = &ClippedVertices[17]; + + ClipLine(indices); + + if(indices[0] != SKIP_FLAG) + { + OutputVertexData *v0 = Vertices[indices[0]]; + OutputVertexData *v1 = Vertices[indices[1]]; + + PerspectiveDivide(v0); + PerspectiveDivide(v1); + + float dx = v1->screenPosition.x - v0->screenPosition.x; + float dy = v1->screenPosition.y - v0->screenPosition.y; + + float screenDx = 0; + float screenDy = 0; + + if(abs(dx) > abs(dy)) + { + if(dx > 0) + screenDy = bpmem.lineptwidth.linesize / -12.0f; + else + screenDy = bpmem.lineptwidth.linesize / 12.0f; + } + else + { + if(dy > 0) + screenDx = bpmem.lineptwidth.linesize / 12.0f; + else + screenDx = bpmem.lineptwidth.linesize / -12.0f; + } + + OutputVertexData triangle[3]; + + CopyVertex(&triangle[0], v0, screenDx, screenDy, 0); + CopyVertex(&triangle[1], v1, screenDx, screenDy, 0); + CopyVertex(&triangle[2], v1, -screenDx, -screenDy, bpmem.lineptwidth.lineoff); + + // ccw winding + Rasterizer::DrawTriangleFrontFace(&triangle[2], &triangle[1], &triangle[0]); + + CopyVertex(&triangle[1], v0, -screenDx, -screenDy, bpmem.lineptwidth.lineoff); + + Rasterizer::DrawTriangleFrontFace(&triangle[0], &triangle[1], &triangle[2]); + } + } + + bool CullTest(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2, bool &backface) + { + int mask = CalcClipMask(v0); + mask &= CalcClipMask(v1); + mask &= CalcClipMask(v2); + + if(mask) + { + INCSTAT(stats.thisFrame.numTrianglesRejected) + return false; + } + + float x0 = v0->projectedPosition.x; + float x1 = v1->projectedPosition.x; + float x2 = v2->projectedPosition.x; + float y1 = v1->projectedPosition.y; + float y0 = v0->projectedPosition.y; + float y2 = v2->projectedPosition.y; + float w0 = v0->projectedPosition.w; + float w1 = v1->projectedPosition.w; + float w2 = v2->projectedPosition.w; + + float normalZDir = (x0*w2 - x2*w0)*y1 + (x2*y0 - x0*y2)*w1 + (y2*w0 - y0*w2)*x1; + + backface = normalZDir <= 0.0f; + + if ((bpmem.genMode.cullmode & 1) && !backface) // cull frontfacing + { + INCSTAT(stats.thisFrame.numTrianglesCulled) + return false; + } + + if ((bpmem.genMode.cullmode & 2) && backface) // cull backfacing + { + INCSTAT(stats.thisFrame.numTrianglesCulled) + return false; + } + + return true; + } + + void PerspectiveDivide(OutputVertexData *vertex) + { + Vec4 &projected = vertex->projectedPosition; + Vec3 &screen = vertex->screenPosition; + + float wInverse = 1.0f/projected.w; + screen.x = projected.x * wInverse * xfregs.viewport.wd + m_ViewOffset[0]; + screen.y = projected.y * wInverse * xfregs.viewport.ht + m_ViewOffset[1]; + screen.z = projected.z * wInverse + m_ViewOffset[2]; + } + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.cpp index 6e1e0a4da6..4b58effbd8 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.cpp @@ -1,530 +1,530 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" -#include "pluginspecs_video.h" -#include "Thread.h" -#include "Atomic.h" - -#include "CommandProcessor.h" -#include "ChunkFile.h" -#include "MathUtil.h" - -volatile bool g_bSkipCurrentFrame; -bool fifoStateRun; - -// set to 0 if using in video common -#define SW_PLUGIN 1 - -#if (SW_PLUGIN) - -#include "OpcodeDecoder.h" -#include "main.h" -u8* g_pVideoData; - -#else - -#include "VideoConfig.h" -#include "OpcodeDecoding.h" -#include "VideoCommon.h" -extern u8* g_pVideoData; - -#endif - -namespace CommandProcessor -{ - -enum -{ - GATHER_PIPE_SIZE = 32, - INT_CAUSE_CP = 0x800 -}; - -// STATE_TO_SAVE -// variables - -const int commandBufferSize = 1024 * 1024; -const int maxCommandBufferWrite = commandBufferSize - GATHER_PIPE_SIZE; -u8 commandBuffer[commandBufferSize]; -u32 readPos; -u32 writePos; -int et_UpdateInterrupts; -volatile bool interruptSet; -volatile bool interruptWaiting; - -CPReg cpreg; // shared between gfx and emulator thread - -Common::CriticalSection criticalSection; - -void DoState(PointerWrap &p) -{ - p.Do(cpreg); -} - -// does it matter that there is no synchronization between threads during writes? -inline void WriteLow (u32& _reg, u16 lowbits) {_reg = (_reg & 0xFFFF0000) | lowbits;} -inline void WriteHigh(u32& _reg, u16 highbits) {_reg = (_reg & 0x0000FFFF) | ((u32)highbits << 16);} - -inline u16 ReadLow (u32 _reg) {return (u16)(_reg & 0xFFFF);} -inline u16 ReadHigh (u32 _reg) {return (u16)(_reg >> 16);} - - -void UpdateInterrupts_Wrapper(u64 userdata, int cyclesLate) -{ - UpdateInterrupts(userdata); -} - -inline bool AtBreakpoint() -{ - return cpreg.ctrl.BPEnable && (cpreg.readptr == cpreg.breakpt); -} - -void Init() -{ - cpreg.status.Hex = 0; - cpreg.status.CommandIdle = 1; - cpreg.status.ReadIdle = 1; - - cpreg.ctrl.Hex = 0; - cpreg.clear.Hex = 0; - - cpreg.bboxleft = 0; - cpreg.bboxtop = 0; - cpreg.bboxright = 0; - cpreg.bboxbottom = 0; - - cpreg.token = 0; - - et_UpdateInterrupts = g_VideoInitialize.pRegisterEvent("UpdateInterrupts", UpdateInterrupts_Wrapper); - - // internal buffer position - readPos = 0; - writePos = 0; - - interruptSet = false; - interruptWaiting = false; - - g_pVideoData = 0; - g_bSkipCurrentFrame = false; -} - -void Shutdown() -{ -} - -void RunGpu() -{ - if (!g_VideoInitialize.bOnThread) - { - // We are going to do FP math on the main thread so have to save the current state - SaveSSEState(); - LoadDefaultSSEState(); - - // run the opcode decoder - do { - RunBuffer(); - } while (cpreg.ctrl.GPReadEnable && !AtBreakpoint() && cpreg.readptr != cpreg.writeptr); - - LoadSSEState(); - } -} - -void Read16(u16& _rReturnValue, const u32 _Address) -{ - u32 regAddr = (_Address & 0xFFF) >> 1; - - DEBUG_LOG(COMMANDPROCESSOR, "(r): 0x%08x : 0x%08x", _Address, ((u16*)&cpreg)[regAddr]); - - if (regAddr < 0x20) - _rReturnValue = ((u16*)&cpreg)[regAddr]; - else - _rReturnValue = 0; -} - -void Write16(const u16 _Value, const u32 _Address) -{ - INFO_LOG(COMMANDPROCESSOR, "(write16): 0x%04x @ 0x%08x",_Value,_Address); - - switch (_Address & 0xFFF) - { - case STATUS_REGISTER: - { - ERROR_LOG(COMMANDPROCESSOR,"\t write to STATUS_REGISTER : %04x", _Value); - } - break; - - case CTRL_REGISTER: - { - cpreg.ctrl.Hex = _Value; - - DEBUG_LOG(COMMANDPROCESSOR,"\t write to CTRL_REGISTER : %04x", _Value); - DEBUG_LOG(COMMANDPROCESSOR, "\t GPREAD %s | CPULINK %s | BP %s || BPIntEnable %s | OvF %s | UndF %s" - , cpreg.ctrl.GPReadEnable ? "ON" : "OFF" - , cpreg.ctrl.GPLinkEnable ? "ON" : "OFF" - , cpreg.ctrl.BPEnable ? "ON" : "OFF" - , cpreg.ctrl.BreakPointIntEnable ? "ON" : "OFF" - , cpreg.ctrl.FifoOverflowIntEnable ? "ON" : "OFF" - , cpreg.ctrl.FifoUnderflowIntEnable ? "ON" : "OFF" - ); - } - break; - - case CLEAR_REGISTER: - { - UCPClearReg tmpClear(_Value); - - if (tmpClear.ClearFifoOverflow) - cpreg.status.OverflowHiWatermark = 0; - if (tmpClear.ClearFifoUnderflow) - cpreg.status.UnderflowLoWatermark = 0; - - INFO_LOG(COMMANDPROCESSOR,"\t write to CLEAR_REGISTER : %04x",_Value); - } - break; - - // Fifo Registers - case FIFO_TOKEN_REGISTER: - cpreg.token = _Value; - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_TOKEN_REGISTER : %04x", _Value); - break; - - case FIFO_BASE_LO: - WriteLow ((u32 &)cpreg.fifobase, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_LO. FIFO base is : %08x", cpreg.fifobase); - break; - case FIFO_BASE_HI: - WriteHigh((u32 &)cpreg.fifobase, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_HI. FIFO base is : %08x", cpreg.fifobase); - break; - case FIFO_END_LO: - WriteLow ((u32 &)cpreg.fifoend, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_LO. FIFO end is : %08x", cpreg.fifoend); - break; - case FIFO_END_HI: - WriteHigh((u32 &)cpreg.fifoend, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_HI. FIFO end is : %08x", cpreg.fifoend); - break; - - case FIFO_WRITE_POINTER_LO: - WriteLow ((u32 &)cpreg.writeptr, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_LO. write ptr is : %08x", cpreg.writeptr); - break; - case FIFO_WRITE_POINTER_HI: - WriteHigh ((u32 &)cpreg.writeptr, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_HI. write ptr is : %08x", cpreg.writeptr); - break; - case FIFO_READ_POINTER_LO: - WriteLow ((u32 &)cpreg.readptr, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_LO. read ptr is : %08x", cpreg.readptr); - break; - case FIFO_READ_POINTER_HI: - WriteHigh ((u32 &)cpreg.readptr, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_HI. read ptr is : %08x", cpreg.readptr); - break; - - case FIFO_HI_WATERMARK_LO: - WriteLow ((u32 &)cpreg.hiwatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_LO. hiwatermark is : %08x", cpreg.hiwatermark); - break; - case FIFO_HI_WATERMARK_HI: - WriteHigh ((u32 &)cpreg.hiwatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_HI. hiwatermark is : %08x", cpreg.hiwatermark); - break; - case FIFO_LO_WATERMARK_LO: - WriteLow ((u32 &)cpreg.lowatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_LO. lowatermark is : %08x", cpreg.lowatermark); - break; - case FIFO_LO_WATERMARK_HI: - WriteHigh ((u32 &)cpreg.lowatermark, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_HI. lowatermark is : %08x", cpreg.lowatermark); - break; - - case FIFO_BP_LO: - WriteLow ((u32 &)cpreg.breakpt, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BP_LO. breakpt is : %08x", cpreg.breakpt); - break; - case FIFO_BP_HI: - WriteHigh ((u32 &)cpreg.breakpt, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BP_HI. breakpt is : %08x", cpreg.breakpt); - break; - - case FIFO_RW_DISTANCE_LO: - WriteLow ((u32 &)cpreg.rwdistance, _Value & 0xFFE0); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_RW_DISTANCE_LO. rwdistance is : %08x", cpreg.rwdistance); - break; - case FIFO_RW_DISTANCE_HI: - WriteHigh ((u32 &)cpreg.rwdistance, _Value); - DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_RW_DISTANCE_HI. rwdistance is : %08x", cpreg.rwdistance); - break; - } - - RunGpu(); -} - -void Read32(u32& _rReturnValue, const u32 _Address) -{ - _rReturnValue = 0; - _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Read32 from CommandProccessor at 0x%08x", _Address); -} - -void Write32(const u32 _Data, const u32 _Address) -{ - _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Write32 at CommandProccessor at 0x%08x", _Address); -} - -void STACKALIGN GatherPipeBursted() -{ - if (cpreg.ctrl.GPLinkEnable) - { - DEBUG_LOG(COMMANDPROCESSOR,"\t WGP burst. write thru : %08x", cpreg.writeptr); - - if (cpreg.writeptr == cpreg.fifoend) - cpreg.writeptr = cpreg.fifobase; - else - cpreg.writeptr += GATHER_PIPE_SIZE; - - Common::AtomicAdd(cpreg.rwdistance, GATHER_PIPE_SIZE); - } - - RunGpu(); -} - -void UpdateInterrupts(u64 userdata) -{ - if (userdata) - { - interruptSet = true; - INFO_LOG(COMMANDPROCESSOR,"Interrupt set"); - g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, true); - } - else - { - interruptSet = false; - INFO_LOG(COMMANDPROCESSOR,"Interrupt cleared"); - g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, false); - } - interruptWaiting = false; -} - -void UpdateInterruptsFromVideoPlugin(u64 userdata) -{ - g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, userdata); -} - -void ReadFifo() -{ - bool canRead = cpreg.readptr != cpreg.writeptr && writePos < (int)maxCommandBufferWrite; - bool atBreakpoint = AtBreakpoint(); - - if (canRead && !atBreakpoint) - { - // read from fifo - u8 *ptr = g_VideoInitialize.pGetMemoryPointer(cpreg.readptr); - int bytesRead = 0; - - do - { - // copy to buffer - memcpy(&commandBuffer[writePos], ptr, GATHER_PIPE_SIZE); - writePos += GATHER_PIPE_SIZE; - bytesRead += GATHER_PIPE_SIZE; - - if (cpreg.readptr == cpreg.fifoend) - { - cpreg.readptr = cpreg.fifobase; - ptr = g_VideoInitialize.pGetMemoryPointer(cpreg.readptr); - } - else - { - cpreg.readptr += GATHER_PIPE_SIZE; - ptr += GATHER_PIPE_SIZE; - } - - canRead = cpreg.readptr != cpreg.writeptr && writePos < (int)maxCommandBufferWrite; - atBreakpoint = AtBreakpoint(); - } while (canRead && !atBreakpoint); - - Common::AtomicAdd(cpreg.rwdistance, -bytesRead); - } -} - -void SetStatus() -{ - // overflow check - if (cpreg.rwdistance > cpreg.hiwatermark) - cpreg.status.OverflowHiWatermark = 1; - - // underflow check - if (cpreg.rwdistance < cpreg.lowatermark) - cpreg.status.UnderflowLoWatermark = 1; - - // breakpoint - if (cpreg.ctrl.BPEnable) - { - if (cpreg.breakpt == cpreg.readptr) - { - if (!cpreg.status.Breakpoint) - INFO_LOG(COMMANDPROCESSOR, "Hit breakpoint at %x", cpreg.readptr); - cpreg.status.Breakpoint = 1; - } - } - else - { - if (cpreg.status.Breakpoint) - INFO_LOG(COMMANDPROCESSOR, "Cleared breakpoint at %x", cpreg.readptr); - cpreg.status.Breakpoint = 0; - } - - cpreg.status.ReadIdle = cpreg.readptr == cpreg.writeptr; - - bool bpInt = cpreg.status.Breakpoint && cpreg.ctrl.BreakPointIntEnable; - bool ovfInt = cpreg.status.OverflowHiWatermark && cpreg.ctrl.FifoOverflowIntEnable; - bool undfInt = cpreg.status.UnderflowLoWatermark && cpreg.ctrl.FifoUnderflowIntEnable; - - bool interrupt = bpInt || ovfInt || undfInt; - - if (interrupt != interruptSet && !interruptWaiting) - { - u64 userdata = interrupt?1:0; - if (g_VideoInitialize.bOnThread) - { - interruptWaiting = true; - CommandProcessor::UpdateInterruptsFromVideoPlugin(userdata); - } - else - CommandProcessor::UpdateInterrupts(userdata); - } -} - -bool RunBuffer() -{ - // fifo is read 32 bytes at a time - // read fifo data to internal buffer - if (cpreg.ctrl.GPReadEnable) - ReadFifo(); - - SetStatus(); - - _dbg_assert_(COMMANDPROCESSOR, writePos >= readPos); - - g_pVideoData = &commandBuffer[readPos]; - - u32 availableBytes = writePos - readPos; - -#if (SW_PLUGIN) - while (OpcodeDecoder::CommandRunnable(availableBytes)) - { - cpreg.status.CommandIdle = 0; - - OpcodeDecoder::Run(availableBytes); - - // if data was read by the opcode decoder then the video data pointer changed - readPos = g_pVideoData - &commandBuffer[0]; - _dbg_assert_(VIDEO, writePos >= readPos); - availableBytes = writePos - readPos; - } -#else - cpreg.status.CommandIdle = 0; - OpcodeDecoder_Run(g_bSkipCurrentFrame); - - // if data was read by the opcode decoder then the video data pointer changed - readPos = g_pVideoData - &commandBuffer[0]; - _dbg_assert_(COMMANDPROCESSOR, writePos >= readPos); - availableBytes = writePos - readPos; -#endif - - cpreg.status.CommandIdle = 1; - - bool ranDecoder = false; - - // move data remaing in command buffer - if (readPos > 0) - { - memmove(&commandBuffer[0], &commandBuffer[readPos], availableBytes); - writePos -= readPos; - readPos = 0; - - ranDecoder = true; - } - - return ranDecoder; -} - -} // end of namespace CommandProcessor - - -// fifo functions -#if (SW_PLUGIN) - -void Fifo_EnterLoop(const SVideoInitialize &video_initialize) -{ - fifoStateRun = true; - - while (fifoStateRun) - { - g_VideoInitialize.pPeekMessages(); - if (!CommandProcessor::RunBuffer()) { - Common::YieldCPU(); - } - } -} - -#else - -void Fifo_EnterLoop(const SVideoInitialize &video_initialize) -{ - fifoStateRun = true; - - while (fifoStateRun) - { - g_VideoInitialize.pPeekMessages(); - if (g_ActiveConfig.bEFBAccessEnable) - VideoFifo_CheckEFBAccess(); - VideoFifo_CheckSwapRequest(); - - if (!CommandProcessor::RunBuffer()) { - Common::YieldCPU(); - } - } -} - -#endif - -void Fifo_ExitLoop() -{ - fifoStateRun = false; -} - -void Fifo_SetRendering(bool enabled) -{ - g_bSkipCurrentFrame = !enabled; -} - -// for compatibility with video common -void Fifo_Init() {} -void Fifo_Shutdown() {} -void Fifo_DoState(PointerWrap &p) {} - -u8* FAKE_GetFifoStartPtr() -{ - return CommandProcessor::commandBuffer; -} - -u8* FAKE_GetFifoEndPtr() -{ - return &CommandProcessor::commandBuffer[CommandProcessor::writePos]; -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" +#include "pluginspecs_video.h" +#include "Thread.h" +#include "Atomic.h" + +#include "CommandProcessor.h" +#include "ChunkFile.h" +#include "MathUtil.h" + +volatile bool g_bSkipCurrentFrame; +bool fifoStateRun; + +// set to 0 if using in video common +#define SW_PLUGIN 1 + +#if (SW_PLUGIN) + +#include "OpcodeDecoder.h" +#include "main.h" +u8* g_pVideoData; + +#else + +#include "VideoConfig.h" +#include "OpcodeDecoding.h" +#include "VideoCommon.h" +extern u8* g_pVideoData; + +#endif + +namespace CommandProcessor +{ + +enum +{ + GATHER_PIPE_SIZE = 32, + INT_CAUSE_CP = 0x800 +}; + +// STATE_TO_SAVE +// variables + +const int commandBufferSize = 1024 * 1024; +const int maxCommandBufferWrite = commandBufferSize - GATHER_PIPE_SIZE; +u8 commandBuffer[commandBufferSize]; +u32 readPos; +u32 writePos; +int et_UpdateInterrupts; +volatile bool interruptSet; +volatile bool interruptWaiting; + +CPReg cpreg; // shared between gfx and emulator thread + +Common::CriticalSection criticalSection; + +void DoState(PointerWrap &p) +{ + p.Do(cpreg); +} + +// does it matter that there is no synchronization between threads during writes? +inline void WriteLow (u32& _reg, u16 lowbits) {_reg = (_reg & 0xFFFF0000) | lowbits;} +inline void WriteHigh(u32& _reg, u16 highbits) {_reg = (_reg & 0x0000FFFF) | ((u32)highbits << 16);} + +inline u16 ReadLow (u32 _reg) {return (u16)(_reg & 0xFFFF);} +inline u16 ReadHigh (u32 _reg) {return (u16)(_reg >> 16);} + + +void UpdateInterrupts_Wrapper(u64 userdata, int cyclesLate) +{ + UpdateInterrupts(userdata); +} + +inline bool AtBreakpoint() +{ + return cpreg.ctrl.BPEnable && (cpreg.readptr == cpreg.breakpt); +} + +void Init() +{ + cpreg.status.Hex = 0; + cpreg.status.CommandIdle = 1; + cpreg.status.ReadIdle = 1; + + cpreg.ctrl.Hex = 0; + cpreg.clear.Hex = 0; + + cpreg.bboxleft = 0; + cpreg.bboxtop = 0; + cpreg.bboxright = 0; + cpreg.bboxbottom = 0; + + cpreg.token = 0; + + et_UpdateInterrupts = g_VideoInitialize.pRegisterEvent("UpdateInterrupts", UpdateInterrupts_Wrapper); + + // internal buffer position + readPos = 0; + writePos = 0; + + interruptSet = false; + interruptWaiting = false; + + g_pVideoData = 0; + g_bSkipCurrentFrame = false; +} + +void Shutdown() +{ +} + +void RunGpu() +{ + if (!g_VideoInitialize.bOnThread) + { + // We are going to do FP math on the main thread so have to save the current state + SaveSSEState(); + LoadDefaultSSEState(); + + // run the opcode decoder + do { + RunBuffer(); + } while (cpreg.ctrl.GPReadEnable && !AtBreakpoint() && cpreg.readptr != cpreg.writeptr); + + LoadSSEState(); + } +} + +void Read16(u16& _rReturnValue, const u32 _Address) +{ + u32 regAddr = (_Address & 0xFFF) >> 1; + + DEBUG_LOG(COMMANDPROCESSOR, "(r): 0x%08x : 0x%08x", _Address, ((u16*)&cpreg)[regAddr]); + + if (regAddr < 0x20) + _rReturnValue = ((u16*)&cpreg)[regAddr]; + else + _rReturnValue = 0; +} + +void Write16(const u16 _Value, const u32 _Address) +{ + INFO_LOG(COMMANDPROCESSOR, "(write16): 0x%04x @ 0x%08x",_Value,_Address); + + switch (_Address & 0xFFF) + { + case STATUS_REGISTER: + { + ERROR_LOG(COMMANDPROCESSOR,"\t write to STATUS_REGISTER : %04x", _Value); + } + break; + + case CTRL_REGISTER: + { + cpreg.ctrl.Hex = _Value; + + DEBUG_LOG(COMMANDPROCESSOR,"\t write to CTRL_REGISTER : %04x", _Value); + DEBUG_LOG(COMMANDPROCESSOR, "\t GPREAD %s | CPULINK %s | BP %s || BPIntEnable %s | OvF %s | UndF %s" + , cpreg.ctrl.GPReadEnable ? "ON" : "OFF" + , cpreg.ctrl.GPLinkEnable ? "ON" : "OFF" + , cpreg.ctrl.BPEnable ? "ON" : "OFF" + , cpreg.ctrl.BreakPointIntEnable ? "ON" : "OFF" + , cpreg.ctrl.FifoOverflowIntEnable ? "ON" : "OFF" + , cpreg.ctrl.FifoUnderflowIntEnable ? "ON" : "OFF" + ); + } + break; + + case CLEAR_REGISTER: + { + UCPClearReg tmpClear(_Value); + + if (tmpClear.ClearFifoOverflow) + cpreg.status.OverflowHiWatermark = 0; + if (tmpClear.ClearFifoUnderflow) + cpreg.status.UnderflowLoWatermark = 0; + + INFO_LOG(COMMANDPROCESSOR,"\t write to CLEAR_REGISTER : %04x",_Value); + } + break; + + // Fifo Registers + case FIFO_TOKEN_REGISTER: + cpreg.token = _Value; + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_TOKEN_REGISTER : %04x", _Value); + break; + + case FIFO_BASE_LO: + WriteLow ((u32 &)cpreg.fifobase, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_LO. FIFO base is : %08x", cpreg.fifobase); + break; + case FIFO_BASE_HI: + WriteHigh((u32 &)cpreg.fifobase, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BASE_HI. FIFO base is : %08x", cpreg.fifobase); + break; + case FIFO_END_LO: + WriteLow ((u32 &)cpreg.fifoend, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_LO. FIFO end is : %08x", cpreg.fifoend); + break; + case FIFO_END_HI: + WriteHigh((u32 &)cpreg.fifoend, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_END_HI. FIFO end is : %08x", cpreg.fifoend); + break; + + case FIFO_WRITE_POINTER_LO: + WriteLow ((u32 &)cpreg.writeptr, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_LO. write ptr is : %08x", cpreg.writeptr); + break; + case FIFO_WRITE_POINTER_HI: + WriteHigh ((u32 &)cpreg.writeptr, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_WRITE_POINTER_HI. write ptr is : %08x", cpreg.writeptr); + break; + case FIFO_READ_POINTER_LO: + WriteLow ((u32 &)cpreg.readptr, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_LO. read ptr is : %08x", cpreg.readptr); + break; + case FIFO_READ_POINTER_HI: + WriteHigh ((u32 &)cpreg.readptr, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_READ_POINTER_HI. read ptr is : %08x", cpreg.readptr); + break; + + case FIFO_HI_WATERMARK_LO: + WriteLow ((u32 &)cpreg.hiwatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_LO. hiwatermark is : %08x", cpreg.hiwatermark); + break; + case FIFO_HI_WATERMARK_HI: + WriteHigh ((u32 &)cpreg.hiwatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_HI_WATERMARK_HI. hiwatermark is : %08x", cpreg.hiwatermark); + break; + case FIFO_LO_WATERMARK_LO: + WriteLow ((u32 &)cpreg.lowatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_LO. lowatermark is : %08x", cpreg.lowatermark); + break; + case FIFO_LO_WATERMARK_HI: + WriteHigh ((u32 &)cpreg.lowatermark, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_LO_WATERMARK_HI. lowatermark is : %08x", cpreg.lowatermark); + break; + + case FIFO_BP_LO: + WriteLow ((u32 &)cpreg.breakpt, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BP_LO. breakpt is : %08x", cpreg.breakpt); + break; + case FIFO_BP_HI: + WriteHigh ((u32 &)cpreg.breakpt, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_BP_HI. breakpt is : %08x", cpreg.breakpt); + break; + + case FIFO_RW_DISTANCE_LO: + WriteLow ((u32 &)cpreg.rwdistance, _Value & 0xFFE0); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_RW_DISTANCE_LO. rwdistance is : %08x", cpreg.rwdistance); + break; + case FIFO_RW_DISTANCE_HI: + WriteHigh ((u32 &)cpreg.rwdistance, _Value); + DEBUG_LOG(COMMANDPROCESSOR,"\t write to FIFO_RW_DISTANCE_HI. rwdistance is : %08x", cpreg.rwdistance); + break; + } + + RunGpu(); +} + +void Read32(u32& _rReturnValue, const u32 _Address) +{ + _rReturnValue = 0; + _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Read32 from CommandProccessor at 0x%08x", _Address); +} + +void Write32(const u32 _Data, const u32 _Address) +{ + _dbg_assert_msg_(COMMANDPROCESSOR, 0, "Write32 at CommandProccessor at 0x%08x", _Address); +} + +void STACKALIGN GatherPipeBursted() +{ + if (cpreg.ctrl.GPLinkEnable) + { + DEBUG_LOG(COMMANDPROCESSOR,"\t WGP burst. write thru : %08x", cpreg.writeptr); + + if (cpreg.writeptr == cpreg.fifoend) + cpreg.writeptr = cpreg.fifobase; + else + cpreg.writeptr += GATHER_PIPE_SIZE; + + Common::AtomicAdd(cpreg.rwdistance, GATHER_PIPE_SIZE); + } + + RunGpu(); +} + +void UpdateInterrupts(u64 userdata) +{ + if (userdata) + { + interruptSet = true; + INFO_LOG(COMMANDPROCESSOR,"Interrupt set"); + g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, true); + } + else + { + interruptSet = false; + INFO_LOG(COMMANDPROCESSOR,"Interrupt cleared"); + g_VideoInitialize.pSetInterrupt(INT_CAUSE_CP, false); + } + interruptWaiting = false; +} + +void UpdateInterruptsFromVideoPlugin(u64 userdata) +{ + g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, userdata); +} + +void ReadFifo() +{ + bool canRead = cpreg.readptr != cpreg.writeptr && writePos < (int)maxCommandBufferWrite; + bool atBreakpoint = AtBreakpoint(); + + if (canRead && !atBreakpoint) + { + // read from fifo + u8 *ptr = g_VideoInitialize.pGetMemoryPointer(cpreg.readptr); + int bytesRead = 0; + + do + { + // copy to buffer + memcpy(&commandBuffer[writePos], ptr, GATHER_PIPE_SIZE); + writePos += GATHER_PIPE_SIZE; + bytesRead += GATHER_PIPE_SIZE; + + if (cpreg.readptr == cpreg.fifoend) + { + cpreg.readptr = cpreg.fifobase; + ptr = g_VideoInitialize.pGetMemoryPointer(cpreg.readptr); + } + else + { + cpreg.readptr += GATHER_PIPE_SIZE; + ptr += GATHER_PIPE_SIZE; + } + + canRead = cpreg.readptr != cpreg.writeptr && writePos < (int)maxCommandBufferWrite; + atBreakpoint = AtBreakpoint(); + } while (canRead && !atBreakpoint); + + Common::AtomicAdd(cpreg.rwdistance, -bytesRead); + } +} + +void SetStatus() +{ + // overflow check + if (cpreg.rwdistance > cpreg.hiwatermark) + cpreg.status.OverflowHiWatermark = 1; + + // underflow check + if (cpreg.rwdistance < cpreg.lowatermark) + cpreg.status.UnderflowLoWatermark = 1; + + // breakpoint + if (cpreg.ctrl.BPEnable) + { + if (cpreg.breakpt == cpreg.readptr) + { + if (!cpreg.status.Breakpoint) + INFO_LOG(COMMANDPROCESSOR, "Hit breakpoint at %x", cpreg.readptr); + cpreg.status.Breakpoint = 1; + } + } + else + { + if (cpreg.status.Breakpoint) + INFO_LOG(COMMANDPROCESSOR, "Cleared breakpoint at %x", cpreg.readptr); + cpreg.status.Breakpoint = 0; + } + + cpreg.status.ReadIdle = cpreg.readptr == cpreg.writeptr; + + bool bpInt = cpreg.status.Breakpoint && cpreg.ctrl.BreakPointIntEnable; + bool ovfInt = cpreg.status.OverflowHiWatermark && cpreg.ctrl.FifoOverflowIntEnable; + bool undfInt = cpreg.status.UnderflowLoWatermark && cpreg.ctrl.FifoUnderflowIntEnable; + + bool interrupt = bpInt || ovfInt || undfInt; + + if (interrupt != interruptSet && !interruptWaiting) + { + u64 userdata = interrupt?1:0; + if (g_VideoInitialize.bOnThread) + { + interruptWaiting = true; + CommandProcessor::UpdateInterruptsFromVideoPlugin(userdata); + } + else + CommandProcessor::UpdateInterrupts(userdata); + } +} + +bool RunBuffer() +{ + // fifo is read 32 bytes at a time + // read fifo data to internal buffer + if (cpreg.ctrl.GPReadEnable) + ReadFifo(); + + SetStatus(); + + _dbg_assert_(COMMANDPROCESSOR, writePos >= readPos); + + g_pVideoData = &commandBuffer[readPos]; + + u32 availableBytes = writePos - readPos; + +#if (SW_PLUGIN) + while (OpcodeDecoder::CommandRunnable(availableBytes)) + { + cpreg.status.CommandIdle = 0; + + OpcodeDecoder::Run(availableBytes); + + // if data was read by the opcode decoder then the video data pointer changed + readPos = g_pVideoData - &commandBuffer[0]; + _dbg_assert_(VIDEO, writePos >= readPos); + availableBytes = writePos - readPos; + } +#else + cpreg.status.CommandIdle = 0; + OpcodeDecoder_Run(g_bSkipCurrentFrame); + + // if data was read by the opcode decoder then the video data pointer changed + readPos = g_pVideoData - &commandBuffer[0]; + _dbg_assert_(COMMANDPROCESSOR, writePos >= readPos); + availableBytes = writePos - readPos; +#endif + + cpreg.status.CommandIdle = 1; + + bool ranDecoder = false; + + // move data remaing in command buffer + if (readPos > 0) + { + memmove(&commandBuffer[0], &commandBuffer[readPos], availableBytes); + writePos -= readPos; + readPos = 0; + + ranDecoder = true; + } + + return ranDecoder; +} + +} // end of namespace CommandProcessor + + +// fifo functions +#if (SW_PLUGIN) + +void Fifo_EnterLoop(const SVideoInitialize &video_initialize) +{ + fifoStateRun = true; + + while (fifoStateRun) + { + g_VideoInitialize.pPeekMessages(); + if (!CommandProcessor::RunBuffer()) { + Common::YieldCPU(); + } + } +} + +#else + +void Fifo_EnterLoop(const SVideoInitialize &video_initialize) +{ + fifoStateRun = true; + + while (fifoStateRun) + { + g_VideoInitialize.pPeekMessages(); + if (g_ActiveConfig.bEFBAccessEnable) + VideoFifo_CheckEFBAccess(); + VideoFifo_CheckSwapRequest(); + + if (!CommandProcessor::RunBuffer()) { + Common::YieldCPU(); + } + } +} + +#endif + +void Fifo_ExitLoop() +{ + fifoStateRun = false; +} + +void Fifo_SetRendering(bool enabled) +{ + g_bSkipCurrentFrame = !enabled; +} + +// for compatibility with video common +void Fifo_Init() {} +void Fifo_Shutdown() {} +void Fifo_DoState(PointerWrap &p) {} + +u8* FAKE_GetFifoStartPtr() +{ + return CommandProcessor::commandBuffer; +} + +u8* FAKE_GetFifoEndPtr() +{ + return &CommandProcessor::commandBuffer[CommandProcessor::writePos]; +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.h b/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.h index 952c4c937a..693713cb9e 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/CommandProcessor.h @@ -1,170 +1,170 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _COMMANDPROCESSOR_H_ -#define _COMMANDPROCESSOR_H_ - -#include "Common.h" -#include "pluginspecs_video.h" -class PointerWrap; - -extern volatile bool g_bSkipCurrentFrame; - -// for compatibility with video common -void Fifo_Init(); -void Fifo_Shutdown(); -void Fifo_DoState(PointerWrap &p); - -void Fifo_EnterLoop(const SVideoInitialize &video_initialize); -void Fifo_ExitLoop(); -void Fifo_SetRendering(bool bEnabled); - -// Implemented by the Video Plugin -void VideoFifo_CheckSwapRequest(); -void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight); -void VideoFifo_CheckEFBAccess(); - -namespace CommandProcessor -{ - // internal hardware addresses - enum - { - STATUS_REGISTER = 0x00, - CTRL_REGISTER = 0x02, - CLEAR_REGISTER = 0x04, - FIFO_TOKEN_REGISTER = 0x0E, - FIFO_BOUNDING_BOX_LEFT = 0x10, - FIFO_BOUNDING_BOX_RIGHT = 0x12, - FIFO_BOUNDING_BOX_TOP = 0x14, - FIFO_BOUNDING_BOX_BOTTOM = 0x16, - FIFO_BASE_LO = 0x20, - FIFO_BASE_HI = 0x22, - FIFO_END_LO = 0x24, - FIFO_END_HI = 0x26, - FIFO_HI_WATERMARK_LO = 0x28, - FIFO_HI_WATERMARK_HI = 0x2a, - FIFO_LO_WATERMARK_LO = 0x2c, - FIFO_LO_WATERMARK_HI = 0x2e, - FIFO_RW_DISTANCE_LO = 0x30, - FIFO_RW_DISTANCE_HI = 0x32, - FIFO_WRITE_POINTER_LO = 0x34, - FIFO_WRITE_POINTER_HI = 0x36, - FIFO_READ_POINTER_LO = 0x38, - FIFO_READ_POINTER_HI = 0x3A, - FIFO_BP_LO = 0x3C, - FIFO_BP_HI = 0x3E - }; - - // Fifo Status Register - union UCPStatusReg - { - struct - { - unsigned OverflowHiWatermark : 1; - unsigned UnderflowLoWatermark : 1; - unsigned ReadIdle : 1; // done reading - unsigned CommandIdle : 1; // done processing commands - unsigned Breakpoint : 1; - unsigned : 11; - }; - u16 Hex; - UCPStatusReg() {Hex = 0; } - UCPStatusReg(u16 _hex) {Hex = _hex; } - }; - - // Fifo Control Register - union UCPCtrlReg - { - struct - { - unsigned GPReadEnable : 1; - unsigned BPEnable : 1; - unsigned FifoOverflowIntEnable : 1; - unsigned FifoUnderflowIntEnable : 1; - unsigned GPLinkEnable : 1; - unsigned BreakPointIntEnable : 1; - unsigned : 10; - }; - u16 Hex; - UCPCtrlReg() {Hex = 0; } - UCPCtrlReg(u16 _hex) {Hex = _hex; } - }; - - // Fifo Control Register - union UCPClearReg - { - struct - { - unsigned ClearFifoOverflow : 1; - unsigned ClearFifoUnderflow : 1; - unsigned ClearMetrices : 1; - unsigned : 13; - }; - u16 Hex; - UCPClearReg() {Hex = 0; } - UCPClearReg(u16 _hex) {Hex = _hex; } - }; - - struct CPReg - { - UCPStatusReg status; // 0x00 - UCPCtrlReg ctrl; // 0x02 - UCPClearReg clear; // 0x04 - u32 unk0; // 0x06 - u32 unk1; // 0x0a - u16 token; // 0x0e - u16 bboxleft; // 0x10 - u16 bboxtop; // 0x12 - u16 bboxright; // 0x14 - u16 bboxbottom; // 0x16 - u16 unk2; // 0x18 - u32 fifobase; // 0x20 - u32 fifoend; // 0x24 - u32 hiwatermark; // 0x28 - u32 lowatermark; // 0x2c - u32 rwdistance; // 0x30 - u32 writeptr; // 0x34 - u32 readptr; // 0x38 - u32 breakpt; // 0x3c - }; - - extern CPReg cpreg; - - // Init - void Init(); - void Shutdown(); - void DoState(PointerWrap &p); - - bool RunBuffer(); - void RunGpu(); - - // Read - void Read16(u16& _rReturnValue, const u32 _Address); - void Write16(const u16 _Data, const u32 _Address); - void Read32(u32& _rReturnValue, const u32 _Address); - void Write32(const u32 _Data, const u32 _Address); - - // for CGPFIFO - void GatherPipeBursted(); - void UpdateInterrupts(u64 userdata); - void UpdateInterruptsFromVideoPlugin(u64 userdata); - - -} // end of namespace CommandProcessor - - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _COMMANDPROCESSOR_H_ +#define _COMMANDPROCESSOR_H_ + +#include "Common.h" +#include "pluginspecs_video.h" +class PointerWrap; + +extern volatile bool g_bSkipCurrentFrame; + +// for compatibility with video common +void Fifo_Init(); +void Fifo_Shutdown(); +void Fifo_DoState(PointerWrap &p); + +void Fifo_EnterLoop(const SVideoInitialize &video_initialize); +void Fifo_ExitLoop(); +void Fifo_SetRendering(bool bEnabled); + +// Implemented by the Video Plugin +void VideoFifo_CheckSwapRequest(); +void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight); +void VideoFifo_CheckEFBAccess(); + +namespace CommandProcessor +{ + // internal hardware addresses + enum + { + STATUS_REGISTER = 0x00, + CTRL_REGISTER = 0x02, + CLEAR_REGISTER = 0x04, + FIFO_TOKEN_REGISTER = 0x0E, + FIFO_BOUNDING_BOX_LEFT = 0x10, + FIFO_BOUNDING_BOX_RIGHT = 0x12, + FIFO_BOUNDING_BOX_TOP = 0x14, + FIFO_BOUNDING_BOX_BOTTOM = 0x16, + FIFO_BASE_LO = 0x20, + FIFO_BASE_HI = 0x22, + FIFO_END_LO = 0x24, + FIFO_END_HI = 0x26, + FIFO_HI_WATERMARK_LO = 0x28, + FIFO_HI_WATERMARK_HI = 0x2a, + FIFO_LO_WATERMARK_LO = 0x2c, + FIFO_LO_WATERMARK_HI = 0x2e, + FIFO_RW_DISTANCE_LO = 0x30, + FIFO_RW_DISTANCE_HI = 0x32, + FIFO_WRITE_POINTER_LO = 0x34, + FIFO_WRITE_POINTER_HI = 0x36, + FIFO_READ_POINTER_LO = 0x38, + FIFO_READ_POINTER_HI = 0x3A, + FIFO_BP_LO = 0x3C, + FIFO_BP_HI = 0x3E + }; + + // Fifo Status Register + union UCPStatusReg + { + struct + { + unsigned OverflowHiWatermark : 1; + unsigned UnderflowLoWatermark : 1; + unsigned ReadIdle : 1; // done reading + unsigned CommandIdle : 1; // done processing commands + unsigned Breakpoint : 1; + unsigned : 11; + }; + u16 Hex; + UCPStatusReg() {Hex = 0; } + UCPStatusReg(u16 _hex) {Hex = _hex; } + }; + + // Fifo Control Register + union UCPCtrlReg + { + struct + { + unsigned GPReadEnable : 1; + unsigned BPEnable : 1; + unsigned FifoOverflowIntEnable : 1; + unsigned FifoUnderflowIntEnable : 1; + unsigned GPLinkEnable : 1; + unsigned BreakPointIntEnable : 1; + unsigned : 10; + }; + u16 Hex; + UCPCtrlReg() {Hex = 0; } + UCPCtrlReg(u16 _hex) {Hex = _hex; } + }; + + // Fifo Control Register + union UCPClearReg + { + struct + { + unsigned ClearFifoOverflow : 1; + unsigned ClearFifoUnderflow : 1; + unsigned ClearMetrices : 1; + unsigned : 13; + }; + u16 Hex; + UCPClearReg() {Hex = 0; } + UCPClearReg(u16 _hex) {Hex = _hex; } + }; + + struct CPReg + { + UCPStatusReg status; // 0x00 + UCPCtrlReg ctrl; // 0x02 + UCPClearReg clear; // 0x04 + u32 unk0; // 0x06 + u32 unk1; // 0x0a + u16 token; // 0x0e + u16 bboxleft; // 0x10 + u16 bboxtop; // 0x12 + u16 bboxright; // 0x14 + u16 bboxbottom; // 0x16 + u16 unk2; // 0x18 + u32 fifobase; // 0x20 + u32 fifoend; // 0x24 + u32 hiwatermark; // 0x28 + u32 lowatermark; // 0x2c + u32 rwdistance; // 0x30 + u32 writeptr; // 0x34 + u32 readptr; // 0x38 + u32 breakpt; // 0x3c + }; + + extern CPReg cpreg; + + // Init + void Init(); + void Shutdown(); + void DoState(PointerWrap &p); + + bool RunBuffer(); + void RunGpu(); + + // Read + void Read16(u16& _rReturnValue, const u32 _Address); + void Write16(const u16 _Data, const u32 _Address); + void Read32(u32& _rReturnValue, const u32 _Address); + void Write32(const u32 _Data, const u32 _Address); + + // for CGPFIFO + void GatherPipeBursted(); + void UpdateInterrupts(u64 userdata); + void UpdateInterruptsFromVideoPlugin(u64 userdata); + + +} // end of namespace CommandProcessor + + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/DebugUtil.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/DebugUtil.cpp index 0aab26885f..4ead73e582 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/DebugUtil.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/DebugUtil.cpp @@ -1,233 +1,233 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "main.h" -#include "DebugUtil.h" -#include "BPMemLoader.h" -#include "TextureSampler.h" -#include "VideoConfig.h" -#include "EfbInterface.h" -#include "Statistics.h" -#include "HwRasterizer.h" -#include "StringUtil.h" -#include "CommandProcessor.h" -#include "../../../Core/VideoCommon/Src/ImageWrite.h" -#include "FileUtil.h" - -namespace DebugUtil -{ - -u32 skipFrames = 0; -const int NumObjectBuffers = 32; -u8 ObjectBuffer[NumObjectBuffers][EFB_WIDTH*EFB_HEIGHT*4]; -bool DrawnToBuffer[NumObjectBuffers]; -const char* ObjectBufferName[NumObjectBuffers]; - -void Init() -{ - for (int i = 0; i < NumObjectBuffers; i++) - { - memset(ObjectBuffer[i], 0, sizeof(ObjectBuffer[i])); - DrawnToBuffer[i] = false; - ObjectBufferName[i] = 0; - } -} - -void SaveTexture(const char* filename, u32 texmap, s32 mip) -{ - FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - u8 subTexmap = texmap & 3; - - TexImage0& ti0 = texUnit.texImage0[subTexmap]; - - int width = ti0.width + 1; - int height = ti0.height + 1; - - u8 *data = new u8[width * height * 4]; - - GetTextureBGRA(data, texmap, mip, width, height); - - (void)SaveTGA(filename, width, height, data); - - delete []data; -} - -void GetTextureBGRA(u8 *dst, u32 texmap, s32 mip, int width, int height) -{ - u8 sample[4]; - - for (int y = 0; y < height; y++) - for (int x = 0; x < width; x++) { - TextureSampler::SampleMip(x << 7, y << 7, mip, false, texmap, sample); - // rgba to bgra - *(dst++) = sample[2]; - *(dst++) = sample[1]; - *(dst++) = sample[0]; - *(dst++) = sample[3]; - } -} - -s32 GetMaxTextureLod(u32 texmap) -{ - FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - u8 subTexmap = texmap & 3; - - u8 maxLod = texUnit.texMode1[subTexmap].max_lod; - u8 mip = maxLod >> 4; - u8 fract = maxLod & 0xf; - - if(fract) - ++mip; - - return (s32)mip; -} - -void DumpActiveTextures() -{ - for (unsigned int stageNum = 0; stageNum < bpmem.genMode.numindstages; stageNum++) - { - u32 texmap = bpmem.tevindref.getTexMap(stageNum); - - s32 maxLod = GetMaxTextureLod(texmap); - for (s32 mip = 0; mip <= maxLod; ++mip) - { - SaveTexture(StringFromFormat("%star%i_ind%i_map%i_mip%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX), stats.thisFrame.numDrawnObjects, stageNum, texmap, mip).c_str(), texmap, mip); - } - } - - for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) - { - int stageNum2 = stageNum >> 1; - int stageOdd = stageNum&1; - TwoTevStageOrders &order = bpmem.tevorders[stageNum2]; - - int texmap = order.getTexMap(stageOdd); - - s32 maxLod = GetMaxTextureLod(texmap); - for (s32 mip = 0; mip <= maxLod; ++mip) - { - SaveTexture(StringFromFormat("%star%i_stage%i_map%i_mip%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX), stats.thisFrame.numDrawnObjects, stageNum, texmap, mip).c_str(), texmap, mip); - } - } -} - -void DumpEfb(const char* filename) -{ - u8 *data = new u8[EFB_WIDTH * EFB_HEIGHT * 4]; - u8 *writePtr = data; - u8 sample[4]; - - for (int y = 0; y < EFB_HEIGHT; y++) - for (int x = 0; x < EFB_WIDTH; x++) { - EfbInterface::GetColor(x, y, sample); - // rgba to bgra - *(writePtr++) = sample[2]; - *(writePtr++) = sample[1]; - *(writePtr++) = sample[0]; - *(writePtr++) = sample[3]; - } - - (void)SaveTGA(filename, EFB_WIDTH, EFB_HEIGHT, data); - - delete []data; -} - -void DumpDepth(const char* filename) -{ - u8 *data = new u8[EFB_WIDTH * EFB_HEIGHT * 4]; - u8 *writePtr = data; - - for (int y = 0; y < EFB_HEIGHT; y++) - for (int x = 0; x < EFB_WIDTH; x++) { - u32 depth = EfbInterface::GetDepth(x, y); - // depth to bgra - *(writePtr++) = (depth >> 16) & 0xff; - *(writePtr++) = (depth >> 8) & 0xff; - *(writePtr++) = depth & 0xff; - *(writePtr++) = 255; - } - - (void)SaveTGA(filename, EFB_WIDTH, EFB_HEIGHT, data); - - delete []data; -} - -void DrawObjectBuffer(s16 x, s16 y, u8 *color, int buffer, const char *name) -{ - u32 offset = (x + y * EFB_WIDTH) * 4; - u8 *dst = &ObjectBuffer[buffer][offset]; - *(dst++) = color[2]; - *(dst++) = color[1]; - *(dst++) = color[0]; - *(dst++) = color[3]; - - DrawnToBuffer[buffer] = true; - ObjectBufferName[buffer] = name; -} - -void OnObjectBegin() -{ - if (!g_bSkipCurrentFrame) - { - if (g_Config.bDumpTextures && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd) - DumpActiveTextures(); - - if (g_Config.bHwRasterizer) - HwRasterizer::BeginTriangles(); - } -} - -void OnObjectEnd() -{ - if (!g_bSkipCurrentFrame) - { - if (g_Config.bDumpObjects && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd) - DumpEfb(StringFromFormat("%sobject%i.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.thisFrame.numDrawnObjects).c_str()); - - if (g_Config.bHwRasterizer) - HwRasterizer::EndTriangles(); - - for (int i = 0; i < NumObjectBuffers; i++) - { - if (DrawnToBuffer[i]) - { - DrawnToBuffer[i] = false; - (void)SaveTGA(StringFromFormat("%sobject%i_%s(%i).tga", File::GetUserPath(D_DUMPFRAMES_IDX), - stats.thisFrame.numDrawnObjects, ObjectBufferName[i], i).c_str(), EFB_WIDTH, EFB_HEIGHT, ObjectBuffer[i]); - memset(ObjectBuffer[i], 0, sizeof(ObjectBuffer[i])); - } - } - - stats.thisFrame.numDrawnObjects++; - } -} - -void OnFrameEnd() -{ - if (!g_bSkipCurrentFrame) - { - if (g_Config.bDumpFrames) - { - DumpEfb(StringFromFormat("%sframe%i_color.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str()); - DumpDepth(StringFromFormat("%sframe%i_depth.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str()); - } - } -} - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "main.h" +#include "DebugUtil.h" +#include "BPMemLoader.h" +#include "TextureSampler.h" +#include "VideoConfig.h" +#include "EfbInterface.h" +#include "Statistics.h" +#include "HwRasterizer.h" +#include "StringUtil.h" +#include "CommandProcessor.h" +#include "../../../Core/VideoCommon/Src/ImageWrite.h" +#include "FileUtil.h" + +namespace DebugUtil +{ + +u32 skipFrames = 0; +const int NumObjectBuffers = 32; +u8 ObjectBuffer[NumObjectBuffers][EFB_WIDTH*EFB_HEIGHT*4]; +bool DrawnToBuffer[NumObjectBuffers]; +const char* ObjectBufferName[NumObjectBuffers]; + +void Init() +{ + for (int i = 0; i < NumObjectBuffers; i++) + { + memset(ObjectBuffer[i], 0, sizeof(ObjectBuffer[i])); + DrawnToBuffer[i] = false; + ObjectBufferName[i] = 0; + } +} + +void SaveTexture(const char* filename, u32 texmap, s32 mip) +{ + FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; + u8 subTexmap = texmap & 3; + + TexImage0& ti0 = texUnit.texImage0[subTexmap]; + + int width = ti0.width + 1; + int height = ti0.height + 1; + + u8 *data = new u8[width * height * 4]; + + GetTextureBGRA(data, texmap, mip, width, height); + + (void)SaveTGA(filename, width, height, data); + + delete []data; +} + +void GetTextureBGRA(u8 *dst, u32 texmap, s32 mip, int width, int height) +{ + u8 sample[4]; + + for (int y = 0; y < height; y++) + for (int x = 0; x < width; x++) { + TextureSampler::SampleMip(x << 7, y << 7, mip, false, texmap, sample); + // rgba to bgra + *(dst++) = sample[2]; + *(dst++) = sample[1]; + *(dst++) = sample[0]; + *(dst++) = sample[3]; + } +} + +s32 GetMaxTextureLod(u32 texmap) +{ + FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; + u8 subTexmap = texmap & 3; + + u8 maxLod = texUnit.texMode1[subTexmap].max_lod; + u8 mip = maxLod >> 4; + u8 fract = maxLod & 0xf; + + if(fract) + ++mip; + + return (s32)mip; +} + +void DumpActiveTextures() +{ + for (unsigned int stageNum = 0; stageNum < bpmem.genMode.numindstages; stageNum++) + { + u32 texmap = bpmem.tevindref.getTexMap(stageNum); + + s32 maxLod = GetMaxTextureLod(texmap); + for (s32 mip = 0; mip <= maxLod; ++mip) + { + SaveTexture(StringFromFormat("%star%i_ind%i_map%i_mip%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX), stats.thisFrame.numDrawnObjects, stageNum, texmap, mip).c_str(), texmap, mip); + } + } + + for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) + { + int stageNum2 = stageNum >> 1; + int stageOdd = stageNum&1; + TwoTevStageOrders &order = bpmem.tevorders[stageNum2]; + + int texmap = order.getTexMap(stageOdd); + + s32 maxLod = GetMaxTextureLod(texmap); + for (s32 mip = 0; mip <= maxLod; ++mip) + { + SaveTexture(StringFromFormat("%star%i_stage%i_map%i_mip%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX), stats.thisFrame.numDrawnObjects, stageNum, texmap, mip).c_str(), texmap, mip); + } + } +} + +void DumpEfb(const char* filename) +{ + u8 *data = new u8[EFB_WIDTH * EFB_HEIGHT * 4]; + u8 *writePtr = data; + u8 sample[4]; + + for (int y = 0; y < EFB_HEIGHT; y++) + for (int x = 0; x < EFB_WIDTH; x++) { + EfbInterface::GetColor(x, y, sample); + // rgba to bgra + *(writePtr++) = sample[2]; + *(writePtr++) = sample[1]; + *(writePtr++) = sample[0]; + *(writePtr++) = sample[3]; + } + + (void)SaveTGA(filename, EFB_WIDTH, EFB_HEIGHT, data); + + delete []data; +} + +void DumpDepth(const char* filename) +{ + u8 *data = new u8[EFB_WIDTH * EFB_HEIGHT * 4]; + u8 *writePtr = data; + + for (int y = 0; y < EFB_HEIGHT; y++) + for (int x = 0; x < EFB_WIDTH; x++) { + u32 depth = EfbInterface::GetDepth(x, y); + // depth to bgra + *(writePtr++) = (depth >> 16) & 0xff; + *(writePtr++) = (depth >> 8) & 0xff; + *(writePtr++) = depth & 0xff; + *(writePtr++) = 255; + } + + (void)SaveTGA(filename, EFB_WIDTH, EFB_HEIGHT, data); + + delete []data; +} + +void DrawObjectBuffer(s16 x, s16 y, u8 *color, int buffer, const char *name) +{ + u32 offset = (x + y * EFB_WIDTH) * 4; + u8 *dst = &ObjectBuffer[buffer][offset]; + *(dst++) = color[2]; + *(dst++) = color[1]; + *(dst++) = color[0]; + *(dst++) = color[3]; + + DrawnToBuffer[buffer] = true; + ObjectBufferName[buffer] = name; +} + +void OnObjectBegin() +{ + if (!g_bSkipCurrentFrame) + { + if (g_Config.bDumpTextures && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd) + DumpActiveTextures(); + + if (g_Config.bHwRasterizer) + HwRasterizer::BeginTriangles(); + } +} + +void OnObjectEnd() +{ + if (!g_bSkipCurrentFrame) + { + if (g_Config.bDumpObjects && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd) + DumpEfb(StringFromFormat("%sobject%i.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.thisFrame.numDrawnObjects).c_str()); + + if (g_Config.bHwRasterizer) + HwRasterizer::EndTriangles(); + + for (int i = 0; i < NumObjectBuffers; i++) + { + if (DrawnToBuffer[i]) + { + DrawnToBuffer[i] = false; + (void)SaveTGA(StringFromFormat("%sobject%i_%s(%i).tga", File::GetUserPath(D_DUMPFRAMES_IDX), + stats.thisFrame.numDrawnObjects, ObjectBufferName[i], i).c_str(), EFB_WIDTH, EFB_HEIGHT, ObjectBuffer[i]); + memset(ObjectBuffer[i], 0, sizeof(ObjectBuffer[i])); + } + } + + stats.thisFrame.numDrawnObjects++; + } +} + +void OnFrameEnd() +{ + if (!g_bSkipCurrentFrame) + { + if (g_Config.bDumpFrames) + { + DumpEfb(StringFromFormat("%sframe%i_color.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str()); + DumpDepth(StringFromFormat("%sframe%i_depth.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str()); + } + } +} + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp index 0f4763cdbd..28a9497b1a 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp @@ -1,108 +1,108 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "main.h" -#include "BPMemLoader.h" -#include "EfbCopy.h" -#include "EfbInterface.h" -#include "Renderer.h" -#include "TextureEncoder.h" -#include "Statistics.h" -#include "VideoConfig.h" -#include "DebugUtil.h" -#include "HwRasterizer.h" -#include "CommandProcessor.h" - - -namespace EfbCopy -{ - void CopyToXfb() - { - if (!g_Config.bHwRasterizer) - { - // copy to open gl for rendering - EfbInterface::UpdateColorTexture(); - Renderer::DrawTexture(EfbInterface::efbColorTexture, EFB_WIDTH, EFB_HEIGHT); - } - - Renderer::SwapBuffer(); - - } - - void CopyToRam() - { - u8 *dest_ptr = g_VideoInitialize.pGetMemoryPointer(bpmem.copyTexDest << 5); - - TextureEncoder::Encode(dest_ptr); - } - - void ClearEfb() - { - u32 clearColor = (bpmem.clearcolorAR & 0xff) | Common::swap16(bpmem.clearcolorGB) << 8 | (bpmem.clearcolorAR & 0xff00) << 16; - - int left = bpmem.copyTexSrcXY.x; - int top = bpmem.copyTexSrcXY.y; - int right = left + bpmem.copyTexSrcWH.x; - int bottom = top + bpmem.copyTexSrcWH.y; - - for (u16 y = top; y <= bottom; y++) - { - for (u16 x = left; x <= right; x++) - { - EfbInterface::SetColor(x, y, (u8*)(&clearColor)); - EfbInterface::SetDepth(x, y, bpmem.clearZValue); - } - } - } - - void CopyEfb() - { - if (bpmem.triggerEFBCopy.copy_to_xfb) - DebugUtil::OnFrameEnd(); - - if (!g_bSkipCurrentFrame) - { - if (bpmem.triggerEFBCopy.copy_to_xfb) - { - CopyToXfb(); - g_VideoInitialize.pCopiedToXFB(false); - - stats.frameCount++; - } - else - { - CopyToRam(); - } - - if (bpmem.triggerEFBCopy.clear) - { - if (g_Config.bHwRasterizer) - HwRasterizer::Clear(); - else - ClearEfb(); - } - } - else - { - if (bpmem.triggerEFBCopy.copy_to_xfb) - { - // no frame rendered but tell that a frame has finished for frame skip counter - g_VideoInitialize.pCopiedToXFB(false); - } - } - } -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "main.h" +#include "BPMemLoader.h" +#include "EfbCopy.h" +#include "EfbInterface.h" +#include "Renderer.h" +#include "TextureEncoder.h" +#include "Statistics.h" +#include "VideoConfig.h" +#include "DebugUtil.h" +#include "HwRasterizer.h" +#include "CommandProcessor.h" + + +namespace EfbCopy +{ + void CopyToXfb() + { + if (!g_Config.bHwRasterizer) + { + // copy to open gl for rendering + EfbInterface::UpdateColorTexture(); + Renderer::DrawTexture(EfbInterface::efbColorTexture, EFB_WIDTH, EFB_HEIGHT); + } + + Renderer::SwapBuffer(); + + } + + void CopyToRam() + { + u8 *dest_ptr = g_VideoInitialize.pGetMemoryPointer(bpmem.copyTexDest << 5); + + TextureEncoder::Encode(dest_ptr); + } + + void ClearEfb() + { + u32 clearColor = (bpmem.clearcolorAR & 0xff) | Common::swap16(bpmem.clearcolorGB) << 8 | (bpmem.clearcolorAR & 0xff00) << 16; + + int left = bpmem.copyTexSrcXY.x; + int top = bpmem.copyTexSrcXY.y; + int right = left + bpmem.copyTexSrcWH.x; + int bottom = top + bpmem.copyTexSrcWH.y; + + for (u16 y = top; y <= bottom; y++) + { + for (u16 x = left; x <= right; x++) + { + EfbInterface::SetColor(x, y, (u8*)(&clearColor)); + EfbInterface::SetDepth(x, y, bpmem.clearZValue); + } + } + } + + void CopyEfb() + { + if (bpmem.triggerEFBCopy.copy_to_xfb) + DebugUtil::OnFrameEnd(); + + if (!g_bSkipCurrentFrame) + { + if (bpmem.triggerEFBCopy.copy_to_xfb) + { + CopyToXfb(); + g_VideoInitialize.pCopiedToXFB(false); + + stats.frameCount++; + } + else + { + CopyToRam(); + } + + if (bpmem.triggerEFBCopy.clear) + { + if (g_Config.bHwRasterizer) + HwRasterizer::Clear(); + else + ClearEfb(); + } + } + else + { + if (bpmem.triggerEFBCopy.copy_to_xfb) + { + // no frame rendered but tell that a frame has finished for frame skip counter + g_VideoInitialize.pCopiedToXFB(false); + } + } + } +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.cpp index 0248c4cfb7..041ff81b0a 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.cpp @@ -1,545 +1,545 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "EfbInterface.h" -#include "BPMemLoader.h" -#include "../../../Core/VideoCommon/Src/LookUpTables.h" -#include "PixelEngine.h" - - -u8 efb[EFB_WIDTH*EFB_HEIGHT*6]; - - -namespace EfbInterface -{ - u8 efbColorTexture[EFB_WIDTH*EFB_HEIGHT*4]; - - inline u32 GetColorOffset(u16 x, u16 y) - { - return (x + y * EFB_WIDTH) * 3; - } - - inline u32 GetDepthOffset(u16 x, u16 y) - { - return (x + y * EFB_WIDTH) * 3 + DEPTH_BUFFER_START; - } - - void SetPixelAlphaOnly(u32 offset, u8 a) - { - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_Z24: - case PIXELFMT_RGB565_Z16: - // do nothing - break; - case PIXELFMT_RGBA6_Z24: - { - u32 a32 = a; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff03ffff; - val |= (a32 << 16) & 0xfc0000; - *dst = val; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - } - - void SetPixelColorOnly(u32 offset, u8 *rgb) - { - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_Z24: - { - u32 src = *(u32*)rgb; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= src & 0x00ffffff; - *dst = val; - } - break; - case PIXELFMT_RGBA6_Z24: - { - u32 src = *(u32*)rgb; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xfffc0000; - val |= (src >> 2) & 0x3f; - val |= (src >> 4) & 0xfc0; - val |= (src >> 6) & 0x3f000; - *dst = val; - } - break; - case PIXELFMT_RGB565_Z16: - { - INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); - u32 src = *(u32*)rgb; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= src & 0x00ffffff; - *dst = val; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - } - - void SetPixelAlphaColor(u32 offset, u8 *color) - { - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_Z24: - { - u32 src = *(u32*)color; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= src & 0x00ffffff; - *dst = val; - } - break; - case PIXELFMT_RGBA6_Z24: - { - u32 src = *(u32*)color; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= (src >> 2) & 0x3f; - val |= (src >> 4) & 0xfc0; - val |= (src >> 6) & 0x3f000; - val |= (src >> 8) & 0xfc0000; - *dst = val; - } - break; - case PIXELFMT_RGB565_Z16: - { - INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); - u32 src = *(u32*)color; - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= src & 0x00ffffff; - *dst = val; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - } - - void GetPixelColor(u32 offset, u8 *color) - { - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_Z24: - { - u32 src = *(u32*)&efb[offset]; - u32 *dst = (u32*)color; - u32 val = 0xff000000 | (src & 0x00ffffff); - *dst = val; - } - break; - case PIXELFMT_RGBA6_Z24: - { - u32 src = *(u32*)&efb[offset]; - color[0] = Convert6To8(src & 0x3f); - color[1] = Convert6To8((src >> 6) & 0x3f); - color[2] = Convert6To8((src >> 12) & 0x3f); - color[3] = Convert6To8((src >> 18) & 0x3f); - } - break; - case PIXELFMT_RGB565_Z16: - { - INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); - u32 src = *(u32*)&efb[offset]; - u32 *dst = (u32*)color; - u32 val = 0xff000000 | (src & 0x00ffffff); - *dst = val; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - } - - void SetPixelDepth(u32 offset, u32 depth) - { - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_RGBA6_Z24: - case PIXELFMT_Z24: - { - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= depth & 0x00ffffff; - *dst = val; - } - break; - case PIXELFMT_RGB565_Z16: - { - INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); - u32 *dst = (u32*)&efb[offset]; - u32 val = *dst & 0xff000000; - val |= depth & 0x00ffffff; - *dst = val; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - } - - u32 GetPixelDepth(u32 offset) - { - u32 depth = 0; - - switch (bpmem.zcontrol.pixel_format) - { - case PIXELFMT_RGB8_Z24: - case PIXELFMT_RGBA6_Z24: - case PIXELFMT_Z24: - { - depth = (*(u32*)&efb[offset]) & 0x00ffffff; - } - break; - case PIXELFMT_RGB565_Z16: - { - INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); - depth = (*(u32*)&efb[offset]) & 0x00ffffff; - } - break; - default: - ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); - } - - return depth; - } - - u32 GetSourceFactor(u8 *srcClr, u8 *dstClr, int mode) - { - switch (mode) { - case 0: // zero - return 0; - case 1: // one - return 0xffffffff; - case 2: // dstclr - return *(u32*)dstClr; - case 3: // invdstclr - return 0xffffffff - *(u32*)dstClr; - case 4: // srcalpha - { - u8 alpha = srcClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 5: // invsrcalpha - { - u8 alpha = 0xff - srcClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 6: // dstalpha - { - u8 alpha = dstClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 7: // invdstalpha - { - u8 alpha = 0xff - dstClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - } - - return 0; - } - - u32 GetDestinationFactor(u8 *srcClr, u8 *dstClr, int mode) - { - switch (mode) { - case 0: // zero - return 0; - case 1: // one - return 0xffffffff; - case 2: // srcclr - return *(u32*)srcClr; - case 3: // invsrcclr - return 0xffffffff - *(u32*)srcClr; - case 4: // srcalpha - { - u8 alpha = srcClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 5: // invsrcalpha - { - u8 alpha = 0xff - srcClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 6: // dstalpha - { - u8 alpha = dstClr[3] & 0xff; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - case 7: // invdstalpha - { - u8 alpha = 0xff - dstClr[3]; - u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; - return factor; - } - } - - return 0; - } - - void BlendColor(u8 *srcClr, u8 *dstClr) - { - u32 srcFactor = GetSourceFactor(srcClr, dstClr, bpmem.blendmode.srcfactor); - u32 dstFactor = GetDestinationFactor(srcClr, dstClr, bpmem.blendmode.dstfactor); - - for (int i = 0; i < 4; i++) - { - // add MSB of factors to make their range 0 -> 256 - u32 sf = (srcFactor & 0xff); - sf += sf >> 7; - - u32 df = (dstFactor & 0xff); - df += df >> 7; - - u32 color = (srcClr[i] * sf + dstClr[i] * df) >> 8; - dstClr[i] = (color>255)?255:color; - - dstFactor >>= 8; - srcFactor >>= 8; - } - } - - void LogicBlend(u32 srcClr, u32 &dstClr, int op) - { - switch (op) { - case 0: // clear - dstClr = 0; - break; - case 1: // and - dstClr = srcClr & dstClr; - break; - case 2: // revand - dstClr = srcClr & (~dstClr); - break; - case 3: // copy - dstClr = srcClr; - break; - case 4: // invand - dstClr = (~srcClr) & dstClr; - break; - case 5: // noop - dstClr = dstClr; - break; - case 6: // xor - dstClr = srcClr ^ dstClr; - break; - case 7: // or - dstClr = srcClr | dstClr; - break; - case 8: // nor - dstClr = ~(srcClr | dstClr); - break; - case 9: // equiv - dstClr = ~(srcClr ^ dstClr); - break; - case 10: // inv - dstClr = ~dstClr; - break; - case 11: // revor - dstClr = srcClr | (~dstClr); - break; - case 12: // invcopy - dstClr = ~srcClr; - break; - case 13: // invor - dstClr = (~srcClr) | dstClr; - break; - case 14: // nand - dstClr = ~(srcClr & dstClr); - break; - case 15: // set - dstClr = 0xffffffff; - break; - } - } - - void SubtractBlend(u8 *srcClr, u8 *dstClr) - { - for (int i = 0; i < 4; i++) - { - int c = (int)dstClr[i] - (int)srcClr[i]; - dstClr[i] = (c < 0)?0:c; - } - } - - void BlendTev(u16 x, u16 y, u8 *color) - { - u32 dstClr; - u32 offset = GetColorOffset(x, y); - - u8 *dstClrPtr = (u8*)&dstClr; - - GetPixelColor(offset, dstClrPtr); - - if (bpmem.blendmode.blendenable) - { - if (bpmem.blendmode.subtract) - SubtractBlend(color, dstClrPtr); - else - BlendColor(color, dstClrPtr); - } - else if (bpmem.blendmode.logicopenable) - LogicBlend(*((u32*)color), dstClr, bpmem.blendmode.logicmode); - else - dstClrPtr = color; - - if (bpmem.dstalpha.enable) - dstClrPtr[3] = bpmem.dstalpha.alpha; - - if (bpmem.blendmode.colorupdate) - { - if (bpmem.blendmode.alphaupdate) - SetPixelAlphaColor(offset, dstClrPtr); - else - SetPixelColorOnly(offset, dstClrPtr); - } - else if (bpmem.blendmode.alphaupdate) - SetPixelAlphaOnly(offset, dstClrPtr[3]); - - // branchless bounding box update - PixelEngine::pereg.boxLeft = PixelEngine::pereg.boxLeft>x?x:PixelEngine::pereg.boxLeft; - PixelEngine::pereg.boxRight = PixelEngine::pereg.boxRighty?y:PixelEngine::pereg.boxTop; - PixelEngine::pereg.boxBottom = PixelEngine::pereg.boxBottom depth; - break; - case COMPARE_NEQUAL: - pass = z != depth; - break; - case COMPARE_GEQUAL: - pass = z >= depth; - break; - case COMPARE_ALWAYS: - pass = true; - break; - default: - pass = false; - ERROR_LOG(VIDEO, "Bad Z compare mode %i", bpmem.zmode.func); - } - - if (pass && bpmem.zmode.updateenable) - { - SetPixelDepth(offset, z); - } - - return pass; - } -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "EfbInterface.h" +#include "BPMemLoader.h" +#include "../../../Core/VideoCommon/Src/LookUpTables.h" +#include "PixelEngine.h" + + +u8 efb[EFB_WIDTH*EFB_HEIGHT*6]; + + +namespace EfbInterface +{ + u8 efbColorTexture[EFB_WIDTH*EFB_HEIGHT*4]; + + inline u32 GetColorOffset(u16 x, u16 y) + { + return (x + y * EFB_WIDTH) * 3; + } + + inline u32 GetDepthOffset(u16 x, u16 y) + { + return (x + y * EFB_WIDTH) * 3 + DEPTH_BUFFER_START; + } + + void SetPixelAlphaOnly(u32 offset, u8 a) + { + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_Z24: + case PIXELFMT_RGB565_Z16: + // do nothing + break; + case PIXELFMT_RGBA6_Z24: + { + u32 a32 = a; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff03ffff; + val |= (a32 << 16) & 0xfc0000; + *dst = val; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + } + + void SetPixelColorOnly(u32 offset, u8 *rgb) + { + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_Z24: + { + u32 src = *(u32*)rgb; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= src & 0x00ffffff; + *dst = val; + } + break; + case PIXELFMT_RGBA6_Z24: + { + u32 src = *(u32*)rgb; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xfffc0000; + val |= (src >> 2) & 0x3f; + val |= (src >> 4) & 0xfc0; + val |= (src >> 6) & 0x3f000; + *dst = val; + } + break; + case PIXELFMT_RGB565_Z16: + { + INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); + u32 src = *(u32*)rgb; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= src & 0x00ffffff; + *dst = val; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + } + + void SetPixelAlphaColor(u32 offset, u8 *color) + { + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_Z24: + { + u32 src = *(u32*)color; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= src & 0x00ffffff; + *dst = val; + } + break; + case PIXELFMT_RGBA6_Z24: + { + u32 src = *(u32*)color; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= (src >> 2) & 0x3f; + val |= (src >> 4) & 0xfc0; + val |= (src >> 6) & 0x3f000; + val |= (src >> 8) & 0xfc0000; + *dst = val; + } + break; + case PIXELFMT_RGB565_Z16: + { + INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); + u32 src = *(u32*)color; + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= src & 0x00ffffff; + *dst = val; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + } + + void GetPixelColor(u32 offset, u8 *color) + { + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_Z24: + { + u32 src = *(u32*)&efb[offset]; + u32 *dst = (u32*)color; + u32 val = 0xff000000 | (src & 0x00ffffff); + *dst = val; + } + break; + case PIXELFMT_RGBA6_Z24: + { + u32 src = *(u32*)&efb[offset]; + color[0] = Convert6To8(src & 0x3f); + color[1] = Convert6To8((src >> 6) & 0x3f); + color[2] = Convert6To8((src >> 12) & 0x3f); + color[3] = Convert6To8((src >> 18) & 0x3f); + } + break; + case PIXELFMT_RGB565_Z16: + { + INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); + u32 src = *(u32*)&efb[offset]; + u32 *dst = (u32*)color; + u32 val = 0xff000000 | (src & 0x00ffffff); + *dst = val; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + } + + void SetPixelDepth(u32 offset, u32 depth) + { + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_RGBA6_Z24: + case PIXELFMT_Z24: + { + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= depth & 0x00ffffff; + *dst = val; + } + break; + case PIXELFMT_RGB565_Z16: + { + INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); + u32 *dst = (u32*)&efb[offset]; + u32 val = *dst & 0xff000000; + val |= depth & 0x00ffffff; + *dst = val; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + } + + u32 GetPixelDepth(u32 offset) + { + u32 depth = 0; + + switch (bpmem.zcontrol.pixel_format) + { + case PIXELFMT_RGB8_Z24: + case PIXELFMT_RGBA6_Z24: + case PIXELFMT_Z24: + { + depth = (*(u32*)&efb[offset]) & 0x00ffffff; + } + break; + case PIXELFMT_RGB565_Z16: + { + INFO_LOG(VIDEO, "PIXELFMT_RGB565_Z16 is not supported correctly yet"); + depth = (*(u32*)&efb[offset]) & 0x00ffffff; + } + break; + default: + ERROR_LOG(VIDEO, "Unsupported pixel format: %i", bpmem.zcontrol.pixel_format); + } + + return depth; + } + + u32 GetSourceFactor(u8 *srcClr, u8 *dstClr, int mode) + { + switch (mode) { + case 0: // zero + return 0; + case 1: // one + return 0xffffffff; + case 2: // dstclr + return *(u32*)dstClr; + case 3: // invdstclr + return 0xffffffff - *(u32*)dstClr; + case 4: // srcalpha + { + u8 alpha = srcClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 5: // invsrcalpha + { + u8 alpha = 0xff - srcClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 6: // dstalpha + { + u8 alpha = dstClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 7: // invdstalpha + { + u8 alpha = 0xff - dstClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + } + + return 0; + } + + u32 GetDestinationFactor(u8 *srcClr, u8 *dstClr, int mode) + { + switch (mode) { + case 0: // zero + return 0; + case 1: // one + return 0xffffffff; + case 2: // srcclr + return *(u32*)srcClr; + case 3: // invsrcclr + return 0xffffffff - *(u32*)srcClr; + case 4: // srcalpha + { + u8 alpha = srcClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 5: // invsrcalpha + { + u8 alpha = 0xff - srcClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 6: // dstalpha + { + u8 alpha = dstClr[3] & 0xff; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + case 7: // invdstalpha + { + u8 alpha = 0xff - dstClr[3]; + u32 factor = alpha << 24 | alpha << 16 | alpha << 8 | alpha; + return factor; + } + } + + return 0; + } + + void BlendColor(u8 *srcClr, u8 *dstClr) + { + u32 srcFactor = GetSourceFactor(srcClr, dstClr, bpmem.blendmode.srcfactor); + u32 dstFactor = GetDestinationFactor(srcClr, dstClr, bpmem.blendmode.dstfactor); + + for (int i = 0; i < 4; i++) + { + // add MSB of factors to make their range 0 -> 256 + u32 sf = (srcFactor & 0xff); + sf += sf >> 7; + + u32 df = (dstFactor & 0xff); + df += df >> 7; + + u32 color = (srcClr[i] * sf + dstClr[i] * df) >> 8; + dstClr[i] = (color>255)?255:color; + + dstFactor >>= 8; + srcFactor >>= 8; + } + } + + void LogicBlend(u32 srcClr, u32 &dstClr, int op) + { + switch (op) { + case 0: // clear + dstClr = 0; + break; + case 1: // and + dstClr = srcClr & dstClr; + break; + case 2: // revand + dstClr = srcClr & (~dstClr); + break; + case 3: // copy + dstClr = srcClr; + break; + case 4: // invand + dstClr = (~srcClr) & dstClr; + break; + case 5: // noop + dstClr = dstClr; + break; + case 6: // xor + dstClr = srcClr ^ dstClr; + break; + case 7: // or + dstClr = srcClr | dstClr; + break; + case 8: // nor + dstClr = ~(srcClr | dstClr); + break; + case 9: // equiv + dstClr = ~(srcClr ^ dstClr); + break; + case 10: // inv + dstClr = ~dstClr; + break; + case 11: // revor + dstClr = srcClr | (~dstClr); + break; + case 12: // invcopy + dstClr = ~srcClr; + break; + case 13: // invor + dstClr = (~srcClr) | dstClr; + break; + case 14: // nand + dstClr = ~(srcClr & dstClr); + break; + case 15: // set + dstClr = 0xffffffff; + break; + } + } + + void SubtractBlend(u8 *srcClr, u8 *dstClr) + { + for (int i = 0; i < 4; i++) + { + int c = (int)dstClr[i] - (int)srcClr[i]; + dstClr[i] = (c < 0)?0:c; + } + } + + void BlendTev(u16 x, u16 y, u8 *color) + { + u32 dstClr; + u32 offset = GetColorOffset(x, y); + + u8 *dstClrPtr = (u8*)&dstClr; + + GetPixelColor(offset, dstClrPtr); + + if (bpmem.blendmode.blendenable) + { + if (bpmem.blendmode.subtract) + SubtractBlend(color, dstClrPtr); + else + BlendColor(color, dstClrPtr); + } + else if (bpmem.blendmode.logicopenable) + LogicBlend(*((u32*)color), dstClr, bpmem.blendmode.logicmode); + else + dstClrPtr = color; + + if (bpmem.dstalpha.enable) + dstClrPtr[3] = bpmem.dstalpha.alpha; + + if (bpmem.blendmode.colorupdate) + { + if (bpmem.blendmode.alphaupdate) + SetPixelAlphaColor(offset, dstClrPtr); + else + SetPixelColorOnly(offset, dstClrPtr); + } + else if (bpmem.blendmode.alphaupdate) + SetPixelAlphaOnly(offset, dstClrPtr[3]); + + // branchless bounding box update + PixelEngine::pereg.boxLeft = PixelEngine::pereg.boxLeft>x?x:PixelEngine::pereg.boxLeft; + PixelEngine::pereg.boxRight = PixelEngine::pereg.boxRighty?y:PixelEngine::pereg.boxTop; + PixelEngine::pereg.boxBottom = PixelEngine::pereg.boxBottom depth; + break; + case COMPARE_NEQUAL: + pass = z != depth; + break; + case COMPARE_GEQUAL: + pass = z >= depth; + break; + case COMPARE_ALWAYS: + pass = true; + break; + default: + pass = false; + ERROR_LOG(VIDEO, "Bad Z compare mode %i", bpmem.zmode.func); + } + + if (pass && bpmem.zmode.updateenable) + { + SetPixelDepth(offset, z); + } + + return pass; + } +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.h b/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.h index f6f3f3f3e3..1eacaff3c6 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/EfbInterface.h @@ -1,50 +1,50 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _EFB_INTERFACE_H_ -#define _EFB_INTERFACE_H_ - -#include "VideoCommon.h" - -namespace EfbInterface -{ - const int DEPTH_BUFFER_START = EFB_WIDTH * EFB_HEIGHT * 3; - - // color order is RGBA - - // does full blending of an incoming pixel - void BlendTev(u16 x, u16 y, u8 *color); - - // compare z at location x,y - // writes it if it passes - // returns result of compare. - bool ZCompare(u16 x, u16 y, u32 z); - - // sets the color and alpha - void SetColor(u16 x, u16 y, u8 *color); - void SetDepth(u16 x, u16 y, u32 depth); - - void GetColor(u16 x, u16 y, u8 *color); - u32 GetDepth(u16 x, u16 y); - - u8* GetPixelPointer(u16 x, u16 y, bool depth); - - void UpdateColorTexture(); - extern u8 efbColorTexture[EFB_WIDTH*EFB_HEIGHT*4]; // rgba format -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _EFB_INTERFACE_H_ +#define _EFB_INTERFACE_H_ + +#include "VideoCommon.h" + +namespace EfbInterface +{ + const int DEPTH_BUFFER_START = EFB_WIDTH * EFB_HEIGHT * 3; + + // color order is RGBA + + // does full blending of an incoming pixel + void BlendTev(u16 x, u16 y, u8 *color); + + // compare z at location x,y + // writes it if it passes + // returns result of compare. + bool ZCompare(u16 x, u16 y, u32 z); + + // sets the color and alpha + void SetColor(u16 x, u16 y, u8 *color); + void SetDepth(u16 x, u16 y, u32 depth); + + void GetColor(u16 x, u16 y, u8 *color); + u32 GetDepth(u16 x, u16 y); + + u8* GetPixelPointer(u16 x, u16 y, bool depth); + + void UpdateColorTexture(); + extern u8 efbColorTexture[EFB_WIDTH*EFB_HEIGHT*4]; // rgba format +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.cpp index 91bcd7fd7f..71a5a3669f 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.cpp @@ -1,191 +1,191 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" -#include "MemoryUtil.h" - -#include - -#include "BPMemLoader.h" -#include "HwRasterizer.h" -#include "GLUtil.h" -#include "NativeVertexFormat.h" -#include "DebugUtil.h" - -#define TEMP_SIZE (1024*1024*4) - -namespace HwRasterizer -{ - float efbHalfWidth; - float efbHalfHeight; - float texWidth; - float texHeight; - bool hasTexture; - - u8 *temp; - - void Init() - { - efbHalfWidth = EFB_WIDTH / 2.0f; - efbHalfHeight = 480 / 2.0f; - - temp = (u8*)AllocateMemoryPages(TEMP_SIZE); - } - - void LoadTexture() - { - FourTexUnits &texUnit = bpmem.tex[0]; - u32 imageAddr = texUnit.texImage3[0].image_base; - - TexCacheEntry &cacheEntry = textures[imageAddr]; - cacheEntry.Update(); - - texWidth = (float)(bpmem.texcoords[0].s.scale_minus_1 + 1); - texHeight = (float)(bpmem.texcoords[0].t.scale_minus_1 + 1); - - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, cacheEntry.texture); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, texUnit.texMode0[0].mag_filter ? GL_LINEAR : GL_NEAREST); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, (texUnit.texMode0[0].min_filter >= 4) ? GL_LINEAR : GL_NEAREST); - } - - void BeginTriangles() - { - // disabling depth test sometimes allows more things to be visible - glEnable(GL_DEPTH_TEST); - glEnable(GL_BLEND); - - hasTexture = bpmem.tevorders[0].enable0; - - if (hasTexture) - LoadTexture(); - } - - void EndTriangles() - { - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_BLEND); - } - - void DrawColorVertex(OutputVertexData *v) - { - glColor3ub(v->color[0][0], v->color[0][1], v->color[0][2]); - glVertex3f(v->screenPosition.x / efbHalfWidth - 1.0f, 1.0f - v->screenPosition.y / efbHalfHeight, v->screenPosition.z); - } - - void DrawTextureVertex(OutputVertexData *v) - { - glTexCoord2f(v->texCoords[0].x * texWidth, v->texCoords[0].y * texHeight); - glVertex3f(v->screenPosition.x / efbHalfWidth - 1.0f, 1.0f - v->screenPosition.y / efbHalfHeight, v->screenPosition.z); - } - - void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) - { - glBegin(GL_TRIANGLES); - if (hasTexture) - { - DrawTextureVertex(v0); - DrawTextureVertex(v1); - DrawTextureVertex(v2); - } - else - { - DrawColorVertex(v0); - DrawColorVertex(v1); - DrawColorVertex(v2); - } - glEnd(); - } - - void Clear() - { - u8 r = (bpmem.clearcolorAR & 0x00ff); - u8 g = (bpmem.clearcolorGB & 0xff00) >> 8; - u8 b = (bpmem.clearcolorGB & 0x00ff); - u8 a = (bpmem.clearcolorAR & 0xff00) >> 8; - - GLfloat left = (GLfloat)bpmem.copyTexSrcXY.x / efbHalfWidth - 1.0f; - GLfloat top = 1.0f - (GLfloat)bpmem.copyTexSrcXY.y / efbHalfHeight; - GLfloat right = (GLfloat)(left + bpmem.copyTexSrcWH.x + 1) / efbHalfWidth - 1.0f; - GLfloat bottom = 1.0f - (GLfloat)(top + bpmem.copyTexSrcWH.y + 1) / efbHalfHeight; - GLfloat depth = (GLfloat)bpmem.clearZValue / (GLfloat)0x00ffffff; - - glBegin(GL_QUADS); - glColor4ub(r, g, b, a); - glVertex3f(left, top, depth); - glColor4ub(r, g, b, a); - glVertex3f(right, top, depth); - glColor4ub(r, g, b, a); - glVertex3f(right, bottom, depth); - glColor4ub(r, g, b, a); - glVertex3f(left, bottom, depth); - glEnd(); - } - - TexCacheEntry::TexCacheEntry() - { - Create(); - } - - void TexCacheEntry::Create() - { - FourTexUnits &texUnit = bpmem.tex[0]; - - texImage0.hex = texUnit.texImage0[0].hex; - texImage1.hex = texUnit.texImage1[0].hex; - texImage2.hex = texUnit.texImage2[0].hex; - texImage3.hex = texUnit.texImage3[0].hex; - texTlut.hex = texUnit.texTlut[0].hex; - - int width = texImage0.width; - int height = texImage0.height; - - DebugUtil::GetTextureBGRA(temp, 0, 0, width, height); - - glGenTextures(1, (GLuint *)&texture); - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture); - glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, (GLsizei)width, (GLsizei)height, 0, GL_BGRA, GL_UNSIGNED_BYTE, temp); - } - - void TexCacheEntry::Destroy() - { - if (texture == 0) - return; - - glDeleteTextures(1, &texture); - texture = 0; - } - - void TexCacheEntry::Update() - { - FourTexUnits &texUnit = bpmem.tex[0]; - - // extra checks cause textures to be reloaded much more - if (texUnit.texImage0[0].hex != texImage0.hex || - //texUnit.texImage1[0].hex != texImage1.hex || - //texUnit.texImage2[0].hex != texImage2.hex || - texUnit.texImage3[0].hex != texImage3.hex || - texUnit.texTlut[0].hex != texTlut.hex) - { - Destroy(); - Create(); - } - } - -} - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" +#include "MemoryUtil.h" + +#include + +#include "BPMemLoader.h" +#include "HwRasterizer.h" +#include "GLUtil.h" +#include "NativeVertexFormat.h" +#include "DebugUtil.h" + +#define TEMP_SIZE (1024*1024*4) + +namespace HwRasterizer +{ + float efbHalfWidth; + float efbHalfHeight; + float texWidth; + float texHeight; + bool hasTexture; + + u8 *temp; + + void Init() + { + efbHalfWidth = EFB_WIDTH / 2.0f; + efbHalfHeight = 480 / 2.0f; + + temp = (u8*)AllocateMemoryPages(TEMP_SIZE); + } + + void LoadTexture() + { + FourTexUnits &texUnit = bpmem.tex[0]; + u32 imageAddr = texUnit.texImage3[0].image_base; + + TexCacheEntry &cacheEntry = textures[imageAddr]; + cacheEntry.Update(); + + texWidth = (float)(bpmem.texcoords[0].s.scale_minus_1 + 1); + texHeight = (float)(bpmem.texcoords[0].t.scale_minus_1 + 1); + + glBindTexture(GL_TEXTURE_RECTANGLE_ARB, cacheEntry.texture); + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, texUnit.texMode0[0].mag_filter ? GL_LINEAR : GL_NEAREST); + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, (texUnit.texMode0[0].min_filter >= 4) ? GL_LINEAR : GL_NEAREST); + } + + void BeginTriangles() + { + // disabling depth test sometimes allows more things to be visible + glEnable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + + hasTexture = bpmem.tevorders[0].enable0; + + if (hasTexture) + LoadTexture(); + } + + void EndTriangles() + { + glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); + + glDisable(GL_DEPTH_TEST); + glDisable(GL_BLEND); + } + + void DrawColorVertex(OutputVertexData *v) + { + glColor3ub(v->color[0][0], v->color[0][1], v->color[0][2]); + glVertex3f(v->screenPosition.x / efbHalfWidth - 1.0f, 1.0f - v->screenPosition.y / efbHalfHeight, v->screenPosition.z); + } + + void DrawTextureVertex(OutputVertexData *v) + { + glTexCoord2f(v->texCoords[0].x * texWidth, v->texCoords[0].y * texHeight); + glVertex3f(v->screenPosition.x / efbHalfWidth - 1.0f, 1.0f - v->screenPosition.y / efbHalfHeight, v->screenPosition.z); + } + + void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) + { + glBegin(GL_TRIANGLES); + if (hasTexture) + { + DrawTextureVertex(v0); + DrawTextureVertex(v1); + DrawTextureVertex(v2); + } + else + { + DrawColorVertex(v0); + DrawColorVertex(v1); + DrawColorVertex(v2); + } + glEnd(); + } + + void Clear() + { + u8 r = (bpmem.clearcolorAR & 0x00ff); + u8 g = (bpmem.clearcolorGB & 0xff00) >> 8; + u8 b = (bpmem.clearcolorGB & 0x00ff); + u8 a = (bpmem.clearcolorAR & 0xff00) >> 8; + + GLfloat left = (GLfloat)bpmem.copyTexSrcXY.x / efbHalfWidth - 1.0f; + GLfloat top = 1.0f - (GLfloat)bpmem.copyTexSrcXY.y / efbHalfHeight; + GLfloat right = (GLfloat)(left + bpmem.copyTexSrcWH.x + 1) / efbHalfWidth - 1.0f; + GLfloat bottom = 1.0f - (GLfloat)(top + bpmem.copyTexSrcWH.y + 1) / efbHalfHeight; + GLfloat depth = (GLfloat)bpmem.clearZValue / (GLfloat)0x00ffffff; + + glBegin(GL_QUADS); + glColor4ub(r, g, b, a); + glVertex3f(left, top, depth); + glColor4ub(r, g, b, a); + glVertex3f(right, top, depth); + glColor4ub(r, g, b, a); + glVertex3f(right, bottom, depth); + glColor4ub(r, g, b, a); + glVertex3f(left, bottom, depth); + glEnd(); + } + + TexCacheEntry::TexCacheEntry() + { + Create(); + } + + void TexCacheEntry::Create() + { + FourTexUnits &texUnit = bpmem.tex[0]; + + texImage0.hex = texUnit.texImage0[0].hex; + texImage1.hex = texUnit.texImage1[0].hex; + texImage2.hex = texUnit.texImage2[0].hex; + texImage3.hex = texUnit.texImage3[0].hex; + texTlut.hex = texUnit.texTlut[0].hex; + + int width = texImage0.width; + int height = texImage0.height; + + DebugUtil::GetTextureBGRA(temp, 0, 0, width, height); + + glGenTextures(1, (GLuint *)&texture); + glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture); + glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, (GLsizei)width, (GLsizei)height, 0, GL_BGRA, GL_UNSIGNED_BYTE, temp); + } + + void TexCacheEntry::Destroy() + { + if (texture == 0) + return; + + glDeleteTextures(1, &texture); + texture = 0; + } + + void TexCacheEntry::Update() + { + FourTexUnits &texUnit = bpmem.tex[0]; + + // extra checks cause textures to be reloaded much more + if (texUnit.texImage0[0].hex != texImage0.hex || + //texUnit.texImage1[0].hex != texImage1.hex || + //texUnit.texImage2[0].hex != texImage2.hex || + texUnit.texImage3[0].hex != texImage3.hex || + texUnit.texTlut[0].hex != texTlut.hex) + { + Destroy(); + Create(); + } + } + +} + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.h b/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.h index 25888c4d22..9ff89356b9 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/HwRasterizer.h @@ -1,60 +1,60 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _HW_RASTERIZER_H -#define _HW_RASTERIZER_H - -#include - -#include "BPMemLoader.h" -#include "GLUtil.h" - -struct OutputVertexData; - -namespace HwRasterizer -{ - void Init(); - - void BeginTriangles(); - void EndTriangles(); - - void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2); - - void Clear(); - - struct TexCacheEntry - { - TexImage0 texImage0; - TexImage1 texImage1; - TexImage2 texImage2; - TexImage3 texImage3; - TexTLUT texTlut; - - GLuint texture; - - TexCacheEntry(); - - void Create(); - void Destroy(); - void Update(); - }; - - typedef std::map TextureCache; - static TextureCache textures; -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _HW_RASTERIZER_H +#define _HW_RASTERIZER_H + +#include + +#include "BPMemLoader.h" +#include "GLUtil.h" + +struct OutputVertexData; + +namespace HwRasterizer +{ + void Init(); + + void BeginTriangles(); + void EndTriangles(); + + void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2); + + void Clear(); + + struct TexCacheEntry + { + TexImage0 texImage0; + TexImage1 texImage1; + TexImage2 texImage2; + TexImage3 texImage3; + TexTLUT texTlut; + + GLuint texture; + + TexCacheEntry(); + + void Create(); + void Destroy(); + void Update(); + }; + + typedef std::map TextureCache; + static TextureCache textures; +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexFormat.h b/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexFormat.h index a4e9af8dad..6ec30db60f 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexFormat.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexFormat.h @@ -1,94 +1,94 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _NATIVEVERTEXFORMAT_H -#define _NATIVEVERTEXFORMAT_H - -#include "../../Plugin_VideoDX9/Src/Vec3.h" - -#ifdef WIN32 -#define LOADERDECL __cdecl -#else -#define LOADERDECL -#endif - -typedef void (LOADERDECL *TPipelineFunction)(); - -struct Vec4 -{ - float x; - float y; - float z; - float w; -}; - -struct InputVertexData -{ - u8 posMtx; - u8 texMtx[8]; - - Vec3 position; - Vec3 normal[3]; - u8 color[2][4]; - float texCoords[8][2]; -}; - -struct OutputVertexData -{ - Vec3 mvPosition; - Vec4 projectedPosition; - Vec3 screenPosition; - Vec3 normal[3]; - u8 color[2][4]; - Vec3 texCoords[8]; - - void Lerp(float t, OutputVertexData *a, OutputVertexData *b) - { - #define LINTERP(T, OUT, IN) (OUT) + ((IN - OUT) * T) - - #define LINTERP_INT(T, OUT, IN) (OUT) + (((IN - OUT) * T) >> 8) - - mvPosition = LINTERP(t, a->mvPosition, b->mvPosition); - - projectedPosition.x = LINTERP(t, a->projectedPosition.x, b->projectedPosition.x); - projectedPosition.y = LINTERP(t, a->projectedPosition.y, b->projectedPosition.y); - projectedPosition.z = LINTERP(t, a->projectedPosition.z, b->projectedPosition.z); - projectedPosition.w = LINTERP(t, a->projectedPosition.w, b->projectedPosition.w); - - for (int i = 0; i < 3; ++i) - { - normal[i] = LINTERP(t, a->normal[i], b->normal[i]); - } - - u16 t_int = (u16)(t * 256); - for (int i = 0; i < 4; ++i) - { - color[0][i] = LINTERP_INT(t_int, a->color[0][i], b->color[0][i]); - color[1][i] = LINTERP_INT(t_int, a->color[1][i], b->color[1][i]); - } - - for (int i = 0; i < 8; ++i) - { - texCoords[i] = LINTERP(t, a->texCoords[i], b->texCoords[i]); - } - - #undef LINTERP - #undef LINTERP_INT - } -}; - -#endif +// Copyright (C) 2003-2008 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _NATIVEVERTEXFORMAT_H +#define _NATIVEVERTEXFORMAT_H + +#include "../../Plugin_VideoDX9/Src/Vec3.h" + +#ifdef WIN32 +#define LOADERDECL __cdecl +#else +#define LOADERDECL +#endif + +typedef void (LOADERDECL *TPipelineFunction)(); + +struct Vec4 +{ + float x; + float y; + float z; + float w; +}; + +struct InputVertexData +{ + u8 posMtx; + u8 texMtx[8]; + + Vec3 position; + Vec3 normal[3]; + u8 color[2][4]; + float texCoords[8][2]; +}; + +struct OutputVertexData +{ + Vec3 mvPosition; + Vec4 projectedPosition; + Vec3 screenPosition; + Vec3 normal[3]; + u8 color[2][4]; + Vec3 texCoords[8]; + + void Lerp(float t, OutputVertexData *a, OutputVertexData *b) + { + #define LINTERP(T, OUT, IN) (OUT) + ((IN - OUT) * T) + + #define LINTERP_INT(T, OUT, IN) (OUT) + (((IN - OUT) * T) >> 8) + + mvPosition = LINTERP(t, a->mvPosition, b->mvPosition); + + projectedPosition.x = LINTERP(t, a->projectedPosition.x, b->projectedPosition.x); + projectedPosition.y = LINTERP(t, a->projectedPosition.y, b->projectedPosition.y); + projectedPosition.z = LINTERP(t, a->projectedPosition.z, b->projectedPosition.z); + projectedPosition.w = LINTERP(t, a->projectedPosition.w, b->projectedPosition.w); + + for (int i = 0; i < 3; ++i) + { + normal[i] = LINTERP(t, a->normal[i], b->normal[i]); + } + + u16 t_int = (u16)(t * 256); + for (int i = 0; i < 4; ++i) + { + color[0][i] = LINTERP_INT(t_int, a->color[0][i], b->color[0][i]); + color[1][i] = LINTERP_INT(t_int, a->color[1][i], b->color[1][i]); + } + + for (int i = 0; i < 8; ++i) + { + texCoords[i] = LINTERP(t, a->texCoords[i], b->texCoords[i]); + } + + #undef LINTERP + #undef LINTERP_INT + } +}; + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexWriter.h b/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexWriter.h index 410071ee55..570d763581 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexWriter.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/NativeVertexWriter.h @@ -1,30 +1,30 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _NATIVE_VERTEX_WRITER -#define _NATIVE_VERTEX_WRITER - -// TODO: rename -namespace VertexManager -{ - -// TODO: move, rename. -extern u8* s_pCurBufferPointer; - -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _NATIVE_VERTEX_WRITER +#define _NATIVE_VERTEX_WRITER + +// TODO: rename +namespace VertexManager +{ + +// TODO: move, rename. +extern u8* s_pCurBufferPointer; + +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.cpp index 232667cbfb..67022ed928 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.cpp @@ -1,297 +1,297 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "../../../Core/VideoCommon/Src/DataReader.h" - -#include "main.h" -#include "OpcodeDecoder.h" -#include "BPMemLoader.h" -#include "CPMemLoader.h" -#include "XFMemLoader.h" -#include "VertexLoader.h" -#include "Statistics.h" -#include "DebugUtil.h" -#include "CommandProcessor.h" - -typedef void (*DecodingFunction)(u32); -DecodingFunction currentFunction = NULL; - -u32 minCommandSize; -u16 streamSize; -u16 streamAddress; -bool readOpcode; -VertexLoader vertexLoader; -bool inObjectStream; -u8 lastPrimCmd; - - -namespace OpcodeDecoder -{ - -void DecodePrimitiveStream(u32 iBufferSize) -{ - u32 vertexSize = vertexLoader.GetVertexSize(); - - if(g_bSkipCurrentFrame) - { - while (streamSize > 0 && iBufferSize >= vertexSize) - { - g_pVideoData += vertexSize; - iBufferSize -= vertexSize; - streamSize--; - } - } - else - { - while (streamSize > 0 && iBufferSize >= vertexSize) - { - vertexLoader.LoadVertex(); - iBufferSize -= vertexSize; - streamSize--; - } - } - - if (streamSize == 0) - { - // return to normal command processing - ResetDecoding(); - } -} - -void ReadXFData(u32 iBufferSize) -{ - _assert_msg_(VIDEO, iBufferSize >= (u32)(streamSize * 4), "Underflow during standard opcode decoding"); - - u32 pData[16]; - for (int i = 0; i < streamSize; i++) - pData[i] = DataReadU32(); - LoadXFReg(streamSize, streamAddress, pData); - - // return to normal command processing - ResetDecoding(); -} - -void ExecuteDisplayList(u32 addr, u32 count) -{ - u8 *videoDataSave = g_pVideoData; - - u8 *dlStart = g_VideoInitialize.pGetMemoryPointer(addr); - - g_pVideoData = dlStart; - - while (OpcodeDecoder::CommandRunnable(count)) - { - OpcodeDecoder::Run(count); - - // if data was read by the opcode decoder then the video data pointer changed - u32 readCount = g_pVideoData - dlStart; - dlStart = g_pVideoData; - - _assert_msg_(VIDEO, count >= readCount, "Display list underrun"); - - count -= readCount; - } - - g_pVideoData = videoDataSave; -} - -void DecodeStandard(u32 bufferSize) -{ - _assert_msg_(VIDEO, CommandRunnable(bufferSize), "Underflow during standard opcode decoding"); - - int Cmd = DataReadU8(); - - if (Cmd == GX_NOP) - return; - - // check if switching in or out of an object - // only used for debuggging - if (inObjectStream && (Cmd & 0x87) != lastPrimCmd) - { - inObjectStream = false; - DebugUtil::OnObjectEnd(); - } - if (Cmd & 0x80 && !inObjectStream) - { - inObjectStream = true; - lastPrimCmd = Cmd & 0x87; - DebugUtil::OnObjectBegin(); - } - - switch(Cmd) - { - case GX_NOP: - break; - - case GX_LOAD_CP_REG: //0x08 - { - u32 SubCmd = DataReadU8(); - u32 Value = DataReadU32(); - LoadCPReg(SubCmd, Value); - } - break; - - case GX_LOAD_XF_REG: - { - u32 Cmd2 = DataReadU32(); - streamSize = ((Cmd2 >> 16) & 15) + 1; - streamAddress = Cmd2 & 0xFFFF; - currentFunction = ReadXFData; - minCommandSize = streamSize * 4; - readOpcode = false; - } - break; - - case GX_LOAD_INDX_A: //used for position matrices - LoadIndexedXF(DataReadU32(), 0xC); - break; - case GX_LOAD_INDX_B: //used for normal matrices - LoadIndexedXF(DataReadU32(), 0xD); - break; - case GX_LOAD_INDX_C: //used for postmatrices - LoadIndexedXF(DataReadU32(), 0xE); - break; - case GX_LOAD_INDX_D: //used for lights - LoadIndexedXF(DataReadU32(), 0xF); - break; - - case GX_CMD_CALL_DL: - { - u32 dwAddr = DataReadU32(); - u32 dwCount = DataReadU32(); - ExecuteDisplayList(dwAddr, dwCount); - } - break; - - case 0x44: - // zelda 4 swords calls it and checks the metrics registers after that - break; - - case GX_CMD_INVL_VC:// Invalidate (vertex cache?) - DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); - break; - - case GX_LOAD_BP_REG: //0x61 - { - u32 cmd = DataReadU32(); - LoadBPReg(cmd); - } - break; - - // draw primitives - default: - if (Cmd & 0x80) - { - u8 vatIndex = Cmd & GX_VAT_MASK; - u8 primitiveType = (Cmd & GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT; - vertexLoader.SetFormat(vatIndex, primitiveType); - - // switch to primitive processing - streamSize = DataReadU16(); - currentFunction = DecodePrimitiveStream; - minCommandSize = vertexLoader.GetVertexSize(); - readOpcode = false; - - INCSTAT(stats.thisFrame.numPrimatives); - DEBUG_LOG(VIDEO, "Draw begin"); - } - else - { - PanicAlert("GFX: Unknown Opcode (0x%x).\n", Cmd); - break; - } - break; - } -} - - -void Init() -{ - inObjectStream = false; - lastPrimCmd = 0; - ResetDecoding(); -} - -void ResetDecoding() -{ - currentFunction = DecodeStandard; - minCommandSize = 1; - readOpcode = true; -} - -bool CommandRunnable(u32 iBufferSize) -{ - if (iBufferSize < minCommandSize) - return false; - - if (readOpcode) - { - u8 Cmd = DataPeek8(0); - u32 minSize = 1; - - switch(Cmd) - { - case GX_LOAD_CP_REG: //0x08 - minSize = 6; - break; - - case GX_LOAD_XF_REG: - minSize = 5; - break; - - case GX_LOAD_INDX_A: //used for position matrices - minSize = 5; - break; - case GX_LOAD_INDX_B: //used for normal matrices - minSize = 5; - break; - case GX_LOAD_INDX_C: //used for postmatrices - minSize = 5; - break; - case GX_LOAD_INDX_D: //used for lights - minSize = 5; - break; - - case GX_CMD_CALL_DL: - minSize = 9; - break; - - case GX_LOAD_BP_REG: //0x61 - minSize = 5; - break; - - // draw primitives - default: - if (Cmd & 0x80) - minSize = 3; - break; - } - - return (iBufferSize >= minSize); - } - - return true; -} - -void Run(u32 iBufferSize) -{ - currentFunction(iBufferSize); -} - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "../../../Core/VideoCommon/Src/DataReader.h" + +#include "main.h" +#include "OpcodeDecoder.h" +#include "BPMemLoader.h" +#include "CPMemLoader.h" +#include "XFMemLoader.h" +#include "VertexLoader.h" +#include "Statistics.h" +#include "DebugUtil.h" +#include "CommandProcessor.h" + +typedef void (*DecodingFunction)(u32); +DecodingFunction currentFunction = NULL; + +u32 minCommandSize; +u16 streamSize; +u16 streamAddress; +bool readOpcode; +VertexLoader vertexLoader; +bool inObjectStream; +u8 lastPrimCmd; + + +namespace OpcodeDecoder +{ + +void DecodePrimitiveStream(u32 iBufferSize) +{ + u32 vertexSize = vertexLoader.GetVertexSize(); + + if(g_bSkipCurrentFrame) + { + while (streamSize > 0 && iBufferSize >= vertexSize) + { + g_pVideoData += vertexSize; + iBufferSize -= vertexSize; + streamSize--; + } + } + else + { + while (streamSize > 0 && iBufferSize >= vertexSize) + { + vertexLoader.LoadVertex(); + iBufferSize -= vertexSize; + streamSize--; + } + } + + if (streamSize == 0) + { + // return to normal command processing + ResetDecoding(); + } +} + +void ReadXFData(u32 iBufferSize) +{ + _assert_msg_(VIDEO, iBufferSize >= (u32)(streamSize * 4), "Underflow during standard opcode decoding"); + + u32 pData[16]; + for (int i = 0; i < streamSize; i++) + pData[i] = DataReadU32(); + LoadXFReg(streamSize, streamAddress, pData); + + // return to normal command processing + ResetDecoding(); +} + +void ExecuteDisplayList(u32 addr, u32 count) +{ + u8 *videoDataSave = g_pVideoData; + + u8 *dlStart = g_VideoInitialize.pGetMemoryPointer(addr); + + g_pVideoData = dlStart; + + while (OpcodeDecoder::CommandRunnable(count)) + { + OpcodeDecoder::Run(count); + + // if data was read by the opcode decoder then the video data pointer changed + u32 readCount = g_pVideoData - dlStart; + dlStart = g_pVideoData; + + _assert_msg_(VIDEO, count >= readCount, "Display list underrun"); + + count -= readCount; + } + + g_pVideoData = videoDataSave; +} + +void DecodeStandard(u32 bufferSize) +{ + _assert_msg_(VIDEO, CommandRunnable(bufferSize), "Underflow during standard opcode decoding"); + + int Cmd = DataReadU8(); + + if (Cmd == GX_NOP) + return; + + // check if switching in or out of an object + // only used for debuggging + if (inObjectStream && (Cmd & 0x87) != lastPrimCmd) + { + inObjectStream = false; + DebugUtil::OnObjectEnd(); + } + if (Cmd & 0x80 && !inObjectStream) + { + inObjectStream = true; + lastPrimCmd = Cmd & 0x87; + DebugUtil::OnObjectBegin(); + } + + switch(Cmd) + { + case GX_NOP: + break; + + case GX_LOAD_CP_REG: //0x08 + { + u32 SubCmd = DataReadU8(); + u32 Value = DataReadU32(); + LoadCPReg(SubCmd, Value); + } + break; + + case GX_LOAD_XF_REG: + { + u32 Cmd2 = DataReadU32(); + streamSize = ((Cmd2 >> 16) & 15) + 1; + streamAddress = Cmd2 & 0xFFFF; + currentFunction = ReadXFData; + minCommandSize = streamSize * 4; + readOpcode = false; + } + break; + + case GX_LOAD_INDX_A: //used for position matrices + LoadIndexedXF(DataReadU32(), 0xC); + break; + case GX_LOAD_INDX_B: //used for normal matrices + LoadIndexedXF(DataReadU32(), 0xD); + break; + case GX_LOAD_INDX_C: //used for postmatrices + LoadIndexedXF(DataReadU32(), 0xE); + break; + case GX_LOAD_INDX_D: //used for lights + LoadIndexedXF(DataReadU32(), 0xF); + break; + + case GX_CMD_CALL_DL: + { + u32 dwAddr = DataReadU32(); + u32 dwCount = DataReadU32(); + ExecuteDisplayList(dwAddr, dwCount); + } + break; + + case 0x44: + // zelda 4 swords calls it and checks the metrics registers after that + break; + + case GX_CMD_INVL_VC:// Invalidate (vertex cache?) + DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); + break; + + case GX_LOAD_BP_REG: //0x61 + { + u32 cmd = DataReadU32(); + LoadBPReg(cmd); + } + break; + + // draw primitives + default: + if (Cmd & 0x80) + { + u8 vatIndex = Cmd & GX_VAT_MASK; + u8 primitiveType = (Cmd & GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT; + vertexLoader.SetFormat(vatIndex, primitiveType); + + // switch to primitive processing + streamSize = DataReadU16(); + currentFunction = DecodePrimitiveStream; + minCommandSize = vertexLoader.GetVertexSize(); + readOpcode = false; + + INCSTAT(stats.thisFrame.numPrimatives); + DEBUG_LOG(VIDEO, "Draw begin"); + } + else + { + PanicAlert("GFX: Unknown Opcode (0x%x).\n", Cmd); + break; + } + break; + } +} + + +void Init() +{ + inObjectStream = false; + lastPrimCmd = 0; + ResetDecoding(); +} + +void ResetDecoding() +{ + currentFunction = DecodeStandard; + minCommandSize = 1; + readOpcode = true; +} + +bool CommandRunnable(u32 iBufferSize) +{ + if (iBufferSize < minCommandSize) + return false; + + if (readOpcode) + { + u8 Cmd = DataPeek8(0); + u32 minSize = 1; + + switch(Cmd) + { + case GX_LOAD_CP_REG: //0x08 + minSize = 6; + break; + + case GX_LOAD_XF_REG: + minSize = 5; + break; + + case GX_LOAD_INDX_A: //used for position matrices + minSize = 5; + break; + case GX_LOAD_INDX_B: //used for normal matrices + minSize = 5; + break; + case GX_LOAD_INDX_C: //used for postmatrices + minSize = 5; + break; + case GX_LOAD_INDX_D: //used for lights + minSize = 5; + break; + + case GX_CMD_CALL_DL: + minSize = 9; + break; + + case GX_LOAD_BP_REG: //0x61 + minSize = 5; + break; + + // draw primitives + default: + if (Cmd & 0x80) + minSize = 3; + break; + } + + return (iBufferSize >= minSize); + } + + return true; +} + +void Run(u32 iBufferSize) +{ + currentFunction(iBufferSize); +} + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.h b/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.h index eb92cf9cb8..66f4d1d314 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/OpcodeDecoder.h @@ -1,62 +1,62 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#ifndef _OPCODEDECODER_H_ -#define _OPCODEDECODER_H_ - -#include "pluginspecs_video.h" - -namespace OpcodeDecoder -{ - - #define GX_NOP 0x00 - - #define GX_LOAD_BP_REG 0x61 - #define GX_LOAD_CP_REG 0x08 - #define GX_LOAD_XF_REG 0x10 - #define GX_LOAD_INDX_A 0x20 - #define GX_LOAD_INDX_B 0x28 - #define GX_LOAD_INDX_C 0x30 - #define GX_LOAD_INDX_D 0x38 - - #define GX_CMD_CALL_DL 0x40 - #define GX_CMD_INVL_VC 0x48 - - #define GX_PRIMITIVE_MASK 0x78 - #define GX_PRIMITIVE_SHIFT 3 - #define GX_VAT_MASK 0x07 - - //these are defined 1/8th of their real values and without their top bit - #define GX_DRAW_QUADS 0x0 //0x80 - #define GX_DRAW_TRIANGLES 0x2 //0x90 - #define GX_DRAW_TRIANGLE_STRIP 0x3 //0x98 - #define GX_DRAW_TRIANGLE_FAN 0x4 //0xA0 - #define GX_DRAW_LINES 0x5 //0xA8 - #define GX_DRAW_LINE_STRIP 0x6 //0xB0 - #define GX_DRAW_POINTS 0x7 //0xB8 - - void Init(); - - void ResetDecoding(); - - bool CommandRunnable(u32 iBufferSize); - - void Run(u32 iBufferSize); -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#ifndef _OPCODEDECODER_H_ +#define _OPCODEDECODER_H_ + +#include "pluginspecs_video.h" + +namespace OpcodeDecoder +{ + + #define GX_NOP 0x00 + + #define GX_LOAD_BP_REG 0x61 + #define GX_LOAD_CP_REG 0x08 + #define GX_LOAD_XF_REG 0x10 + #define GX_LOAD_INDX_A 0x20 + #define GX_LOAD_INDX_B 0x28 + #define GX_LOAD_INDX_C 0x30 + #define GX_LOAD_INDX_D 0x38 + + #define GX_CMD_CALL_DL 0x40 + #define GX_CMD_INVL_VC 0x48 + + #define GX_PRIMITIVE_MASK 0x78 + #define GX_PRIMITIVE_SHIFT 3 + #define GX_VAT_MASK 0x07 + + //these are defined 1/8th of their real values and without their top bit + #define GX_DRAW_QUADS 0x0 //0x80 + #define GX_DRAW_TRIANGLES 0x2 //0x90 + #define GX_DRAW_TRIANGLE_STRIP 0x3 //0x98 + #define GX_DRAW_TRIANGLE_FAN 0x4 //0xA0 + #define GX_DRAW_LINES 0x5 //0xA8 + #define GX_DRAW_LINE_STRIP 0x6 //0xB0 + #define GX_DRAW_POINTS 0x7 //0xB8 + + void Init(); + + void ResetDecoding(); + + bool CommandRunnable(u32 iBufferSize); + + void Run(u32 iBufferSize); +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.cpp index 24dd94d26d..119a3b5417 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.cpp @@ -1,171 +1,171 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -// http://developer.nvidia.com/object/General_FAQ.html#t6 !!!!! - - - -#include "Common.h" -#include "ChunkFile.h" - -#include "PixelEngine.h" -#include "CommandProcessor.h" - - -namespace PixelEngine -{ - -enum -{ - INT_CAUSE_PE_TOKEN = 0x200, // GP Token - INT_CAUSE_PE_FINISH = 0x400, // GP Finished -}; - -// STATE_TO_SAVE -PEReg pereg; - -static bool g_bSignalTokenInterrupt; -static bool g_bSignalFinishInterrupt; - -static int et_SetTokenOnMainThread; -static int et_SetFinishOnMainThread; - -void DoState(PointerWrap &p) -{ - p.Do(pereg); - p.Do(g_bSignalTokenInterrupt); - p.Do(g_bSignalFinishInterrupt); -} - -void UpdateInterrupts(); - -void SetToken_OnMainThread(u64 userdata, int cyclesLate); -void SetFinish_OnMainThread(u64 userdata, int cyclesLate); - -void Init() -{ - memset(&pereg, 0, sizeof(pereg)); - - et_SetTokenOnMainThread = false; - g_bSignalFinishInterrupt = false; - - et_SetTokenOnMainThread = g_VideoInitialize.pRegisterEvent("SetToken", SetToken_OnMainThread); - et_SetFinishOnMainThread = g_VideoInitialize.pRegisterEvent("SetFinish", SetFinish_OnMainThread); -} - -void Read16(u16& _uReturnValue, const u32 _iAddress) -{ - DEBUG_LOG(PIXELENGINE, "(r16): 0x%08x", _iAddress); - - u16 address = _iAddress & 0xFFF; - - if (address <= 0x16) - _uReturnValue = ((u16*)&pereg)[address >> 1]; -} - -void Write32(const u32 _iValue, const u32 _iAddress) -{ - WARN_LOG(PIXELENGINE, "(w32): 0x%08x @ 0x%08x",_iValue,_iAddress); -} - -void Write16(const u16 _iValue, const u32 _iAddress) -{ - u16 address = _iAddress & 0xFFF; - - switch (address) - { - case PE_CTRL_REGISTER: - { - UPECtrlReg tmpCtrl(_iValue); - - if (tmpCtrl.PEToken) g_bSignalTokenInterrupt = false; - if (tmpCtrl.PEFinish) g_bSignalFinishInterrupt = false; - - pereg.ctrl.PETokenEnable = tmpCtrl.PETokenEnable; - pereg.ctrl.PEFinishEnable = tmpCtrl.PEFinishEnable; - pereg.ctrl.PEToken = 0; // this flag is write only - pereg.ctrl.PEFinish = 0; // this flag is write only - - DEBUG_LOG(PIXELENGINE, "(w16): PE_CTRL_REGISTER: 0x%04x", _iValue); - UpdateInterrupts(); - } - break; - default: - if (address <= 0x16) - ((u16*)&pereg)[address >> 1] = _iValue; - break; - } -} - -bool AllowIdleSkipping() -{ - return !g_VideoInitialize.bOnThread || (!pereg.ctrl.PETokenEnable && !pereg.ctrl.PEFinishEnable); -} - -void UpdateInterrupts() -{ - // check if there is a token-interrupt - if (g_bSignalTokenInterrupt & pereg.ctrl.PETokenEnable) - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, true); - else - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, false); - - // check if there is a finish-interrupt - if (g_bSignalFinishInterrupt & pereg.ctrl.PEFinishEnable) - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, true); - else - g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, false); -} - - -// Called only if BPMEM_PE_TOKEN_INT_ID is ack by GP -void SetToken_OnMainThread(u64 userdata, int cyclesLate) -{ - g_bSignalTokenInterrupt = true; - INFO_LOG(PIXELENGINE, "VIDEO Plugin raises INT_CAUSE_PE_TOKEN (btw, token: %04x)", pereg.token); - UpdateInterrupts(); -} - -void SetFinish_OnMainThread(u64 userdata, int cyclesLate) -{ - g_bSignalFinishInterrupt = true; - UpdateInterrupts(); -} - -// SetToken -// THIS IS EXECUTED FROM VIDEO THREAD -void SetToken(const u16 _token, const int _bSetTokenAcknowledge) -{ - pereg.token = _token; - if (_bSetTokenAcknowledge) // set token INT - { - g_VideoInitialize.pScheduleEvent_Threadsafe( - 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16)); - } -} - -// SetFinish -// THIS IS EXECUTED FROM VIDEO THREAD -void SetFinish() -{ - g_VideoInitialize.pScheduleEvent_Threadsafe( - 0, et_SetFinishOnMainThread, 0); - INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); -} - -} // end of namespace PixelEngine +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// http://developer.nvidia.com/object/General_FAQ.html#t6 !!!!! + + + +#include "Common.h" +#include "ChunkFile.h" + +#include "PixelEngine.h" +#include "CommandProcessor.h" + + +namespace PixelEngine +{ + +enum +{ + INT_CAUSE_PE_TOKEN = 0x200, // GP Token + INT_CAUSE_PE_FINISH = 0x400, // GP Finished +}; + +// STATE_TO_SAVE +PEReg pereg; + +static bool g_bSignalTokenInterrupt; +static bool g_bSignalFinishInterrupt; + +static int et_SetTokenOnMainThread; +static int et_SetFinishOnMainThread; + +void DoState(PointerWrap &p) +{ + p.Do(pereg); + p.Do(g_bSignalTokenInterrupt); + p.Do(g_bSignalFinishInterrupt); +} + +void UpdateInterrupts(); + +void SetToken_OnMainThread(u64 userdata, int cyclesLate); +void SetFinish_OnMainThread(u64 userdata, int cyclesLate); + +void Init() +{ + memset(&pereg, 0, sizeof(pereg)); + + et_SetTokenOnMainThread = false; + g_bSignalFinishInterrupt = false; + + et_SetTokenOnMainThread = g_VideoInitialize.pRegisterEvent("SetToken", SetToken_OnMainThread); + et_SetFinishOnMainThread = g_VideoInitialize.pRegisterEvent("SetFinish", SetFinish_OnMainThread); +} + +void Read16(u16& _uReturnValue, const u32 _iAddress) +{ + DEBUG_LOG(PIXELENGINE, "(r16): 0x%08x", _iAddress); + + u16 address = _iAddress & 0xFFF; + + if (address <= 0x16) + _uReturnValue = ((u16*)&pereg)[address >> 1]; +} + +void Write32(const u32 _iValue, const u32 _iAddress) +{ + WARN_LOG(PIXELENGINE, "(w32): 0x%08x @ 0x%08x",_iValue,_iAddress); +} + +void Write16(const u16 _iValue, const u32 _iAddress) +{ + u16 address = _iAddress & 0xFFF; + + switch (address) + { + case PE_CTRL_REGISTER: + { + UPECtrlReg tmpCtrl(_iValue); + + if (tmpCtrl.PEToken) g_bSignalTokenInterrupt = false; + if (tmpCtrl.PEFinish) g_bSignalFinishInterrupt = false; + + pereg.ctrl.PETokenEnable = tmpCtrl.PETokenEnable; + pereg.ctrl.PEFinishEnable = tmpCtrl.PEFinishEnable; + pereg.ctrl.PEToken = 0; // this flag is write only + pereg.ctrl.PEFinish = 0; // this flag is write only + + DEBUG_LOG(PIXELENGINE, "(w16): PE_CTRL_REGISTER: 0x%04x", _iValue); + UpdateInterrupts(); + } + break; + default: + if (address <= 0x16) + ((u16*)&pereg)[address >> 1] = _iValue; + break; + } +} + +bool AllowIdleSkipping() +{ + return !g_VideoInitialize.bOnThread || (!pereg.ctrl.PETokenEnable && !pereg.ctrl.PEFinishEnable); +} + +void UpdateInterrupts() +{ + // check if there is a token-interrupt + if (g_bSignalTokenInterrupt & pereg.ctrl.PETokenEnable) + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, true); + else + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_TOKEN, false); + + // check if there is a finish-interrupt + if (g_bSignalFinishInterrupt & pereg.ctrl.PEFinishEnable) + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, true); + else + g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, false); +} + + +// Called only if BPMEM_PE_TOKEN_INT_ID is ack by GP +void SetToken_OnMainThread(u64 userdata, int cyclesLate) +{ + g_bSignalTokenInterrupt = true; + INFO_LOG(PIXELENGINE, "VIDEO Plugin raises INT_CAUSE_PE_TOKEN (btw, token: %04x)", pereg.token); + UpdateInterrupts(); +} + +void SetFinish_OnMainThread(u64 userdata, int cyclesLate) +{ + g_bSignalFinishInterrupt = true; + UpdateInterrupts(); +} + +// SetToken +// THIS IS EXECUTED FROM VIDEO THREAD +void SetToken(const u16 _token, const int _bSetTokenAcknowledge) +{ + pereg.token = _token; + if (_bSetTokenAcknowledge) // set token INT + { + g_VideoInitialize.pScheduleEvent_Threadsafe( + 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16)); + } +} + +// SetFinish +// THIS IS EXECUTED FROM VIDEO THREAD +void SetFinish() +{ + g_VideoInitialize.pScheduleEvent_Threadsafe( + 0, et_SetFinishOnMainThread, 0); + INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); +} + +} // end of namespace PixelEngine diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.h b/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.h index a49fa1dbed..9f7c015c60 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/PixelEngine.h @@ -1,155 +1,155 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -#ifndef _PIXELENGINE_H -#define _PIXELENGINE_H - -#include "Common.h" -#include "pluginspecs_video.h" -#include "VideoCommon.h" -class PointerWrap; - -namespace PixelEngine -{ - // internal hardware addresses - enum - { - PE_ZCONF = 0x000, // Z Config - PE_ALPHACONF = 0x002, // Alpha Config - PE_DSTALPHACONF = 0x004, // Destination Alpha Config - PE_ALPHAMODE = 0x006, // Alpha Mode Config - PE_ALPHAREAD = 0x008, // Alpha Read - PE_CTRL_REGISTER = 0x00a, // Control - PE_TOKEN_REG = 0x00e, // Token - PE_BBOX_LEFT = 0x010, // Flip Left - PE_BBOX_RIGHT = 0x012, // Flip Right - PE_BBOX_TOP = 0x014, // Flip Top - PE_BBOX_BOTTOM = 0x016, // Flip Bottom - }; - - union UPEZConfReg - { - u16 Hex; - struct - { - u16 ZCompEnable : 1; // Z Comparator Enable - u16 Function : 3; - u16 ZUpdEnable : 1; - u16 : 11; - }; - }; - - union UPEAlphaConfReg - { - u16 Hex; - struct - { - u16 BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT - u16 BMLogic : 1; // GX_BM_LOGIC - u16 Dither : 1; - u16 ColorUpdEnable : 1; - u16 AlphaUpdEnable : 1; - u16 DstFactor : 3; - u16 SrcFactor : 3; - u16 Substract : 1; // Additive mode by default - u16 BlendOperator : 4; - }; - }; - - union UPEDstAlphaConfReg - { - u16 Hex; - struct - { - u16 DstAlpha : 8; - u16 Enable : 1; - u16 : 7; - }; - }; - - union UPEAlphaModeConfReg - { - u16 Hex; - struct - { - u16 Threshold : 8; - u16 CompareMode : 8; - }; - }; - - union UPEAlphaReadReg - { - u16 Hex; - struct - { - u16 ReadMode : 3; - u16 : 13; - }; - }; - - union UPECtrlReg - { - struct - { - u16 PETokenEnable : 1; - u16 PEFinishEnable : 1; - u16 PEToken : 1; // write only - u16 PEFinish : 1; // write only - u16 : 12; - }; - u16 Hex; - UPECtrlReg() {Hex = 0; } - UPECtrlReg(u16 _hex) {Hex = _hex; } - }; - - struct PEReg - { - UPEZConfReg zconf; - UPEAlphaConfReg alphaConf; - UPEDstAlphaConfReg dstAlpha; - UPEAlphaModeConfReg alphaMode; - UPEAlphaReadReg alphaRead; - UPECtrlReg ctrl; - u16 unk0; - u16 token; - u16 boxLeft; - u16 boxRight; - u16 boxTop; - u16 boxBottom; - }; - - extern PEReg pereg; - - void Init(); - void DoState(PointerWrap &p); - - // Read - void Read16(u16& _uReturnValue, const u32 _iAddress); - - // Write - void Write16(const u16 _iValue, const u32 _iAddress); - void Write32(const u32 _iValue, const u32 _iAddress); - - // gfx plugin support - void SetToken(const u16 _token, const int _bSetTokenAcknowledge); - void SetFinish(void); - bool AllowIdleSkipping(); - -} // end of namespace PixelEngine - -#endif - - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +#ifndef _PIXELENGINE_H +#define _PIXELENGINE_H + +#include "Common.h" +#include "pluginspecs_video.h" +#include "VideoCommon.h" +class PointerWrap; + +namespace PixelEngine +{ + // internal hardware addresses + enum + { + PE_ZCONF = 0x000, // Z Config + PE_ALPHACONF = 0x002, // Alpha Config + PE_DSTALPHACONF = 0x004, // Destination Alpha Config + PE_ALPHAMODE = 0x006, // Alpha Mode Config + PE_ALPHAREAD = 0x008, // Alpha Read + PE_CTRL_REGISTER = 0x00a, // Control + PE_TOKEN_REG = 0x00e, // Token + PE_BBOX_LEFT = 0x010, // Flip Left + PE_BBOX_RIGHT = 0x012, // Flip Right + PE_BBOX_TOP = 0x014, // Flip Top + PE_BBOX_BOTTOM = 0x016, // Flip Bottom + }; + + union UPEZConfReg + { + u16 Hex; + struct + { + u16 ZCompEnable : 1; // Z Comparator Enable + u16 Function : 3; + u16 ZUpdEnable : 1; + u16 : 11; + }; + }; + + union UPEAlphaConfReg + { + u16 Hex; + struct + { + u16 BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT + u16 BMLogic : 1; // GX_BM_LOGIC + u16 Dither : 1; + u16 ColorUpdEnable : 1; + u16 AlphaUpdEnable : 1; + u16 DstFactor : 3; + u16 SrcFactor : 3; + u16 Substract : 1; // Additive mode by default + u16 BlendOperator : 4; + }; + }; + + union UPEDstAlphaConfReg + { + u16 Hex; + struct + { + u16 DstAlpha : 8; + u16 Enable : 1; + u16 : 7; + }; + }; + + union UPEAlphaModeConfReg + { + u16 Hex; + struct + { + u16 Threshold : 8; + u16 CompareMode : 8; + }; + }; + + union UPEAlphaReadReg + { + u16 Hex; + struct + { + u16 ReadMode : 3; + u16 : 13; + }; + }; + + union UPECtrlReg + { + struct + { + u16 PETokenEnable : 1; + u16 PEFinishEnable : 1; + u16 PEToken : 1; // write only + u16 PEFinish : 1; // write only + u16 : 12; + }; + u16 Hex; + UPECtrlReg() {Hex = 0; } + UPECtrlReg(u16 _hex) {Hex = _hex; } + }; + + struct PEReg + { + UPEZConfReg zconf; + UPEAlphaConfReg alphaConf; + UPEDstAlphaConfReg dstAlpha; + UPEAlphaModeConfReg alphaMode; + UPEAlphaReadReg alphaRead; + UPECtrlReg ctrl; + u16 unk0; + u16 token; + u16 boxLeft; + u16 boxRight; + u16 boxTop; + u16 boxBottom; + }; + + extern PEReg pereg; + + void Init(); + void DoState(PointerWrap &p); + + // Read + void Read16(u16& _uReturnValue, const u32 _iAddress); + + // Write + void Write16(const u16 _iValue, const u32 _iAddress); + void Write32(const u32 _iValue, const u32 _iAddress); + + // gfx plugin support + void SetToken(const u16 _token, const int _bSetTokenAcknowledge); + void SetFinish(void); + bool AllowIdleSkipping(); + +} // end of namespace PixelEngine + +#endif + + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp index d7ddac4f2a..f0cd7483e0 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp @@ -1,473 +1,473 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "Rasterizer.h" -#include "HwRasterizer.h" -#include "EfbInterface.h" -#include "BPMemLoader.h" -#include "XFMemLoader.h" -#include "Tev.h" -#include "Statistics.h" -#include "VideoConfig.h" - - -#define BLOCK_SIZE 2 - -#define CLAMP(x, a, b) (x>b)?b:(x> 19) - 2032; // integer part - s32 logFract = (*x & 0x007fffff) >> 19; // approximate fractional part - - return logInt + logFract; -} - -namespace Rasterizer -{ -Slope ZSlope; -Slope WSlope; -Slope ColorSlopes[2][4]; -Slope TexSlopes[8][3]; - -s32 vertex0X; -s32 vertex0Y; -float vertexOffsetX; -float vertexOffsetY; - -s32 scissorLeft = 0; -s32 scissorTop = 0; -s32 scissorRight = 0; -s32 scissorBottom = 0; - -Tev tev; -RasterBlock rasterBlock; - -void Init() -{ - tev.Init(); -} - -inline int iround(float x) -{ - int t; - -#if defined(_WIN32) && !defined(_M_X64) - __asm - { - fld x - fistp t - } -#else - t = (int)x; - if((x - t) >= 0.5) - return t + 1; -#endif - - return t; -} - -void SetScissor() -{ - int xoff = bpmem.scissorOffset.x * 2 - 342; - int yoff = bpmem.scissorOffset.y * 2 - 342; - - scissorLeft = bpmem.scissorTL.x - xoff - 342; - if (scissorLeft < 0) scissorLeft = 0; - - scissorTop = bpmem.scissorTL.y - yoff - 342; - if (scissorTop < 0) scissorTop = 0; - - scissorRight = bpmem.scissorBR.x - xoff - 341; - if (scissorRight > EFB_WIDTH) scissorRight = EFB_WIDTH; - - scissorBottom = bpmem.scissorBR.y - yoff - 341; - if (scissorBottom > EFB_HEIGHT) scissorBottom = EFB_HEIGHT; -} - -void SetTevReg(int reg, int comp, bool konst, s16 color) -{ - tev.SetRegColor(reg, comp, konst, color); -} - -inline void Draw(s32 x, s32 y, s32 xi, s32 yi) -{ - INCSTAT(stats.thisFrame.rasterizedPixels); - - float dx = vertexOffsetX + (float)(x - vertex0X); - float dy = vertexOffsetY + (float)(y - vertex0Y); - - float zFloat = 1.0f + ZSlope.GetValue(dx, dy); - if (zFloat < 0.0f || zFloat > 1.0f) - return; - - s32 z = (s32)(zFloat * 0x00ffffff); - - if (bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) - { - // early z - if (!EfbInterface::ZCompare(x, y, z)) - return; - } - - RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; - - tev.Position[0] = x; - tev.Position[1] = y; - tev.Position[2] = z; - - // colors - for (unsigned int i = 0; i < bpmem.genMode.numcolchans; i++) - { - for(int comp = 0; comp < 4; comp++) - tev.Color[i][comp] = (u8)ColorSlopes[i][comp].GetValue(dx, dy); - } - - // tex coords - for (unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) - { - // multiply by 128 because TEV stores stores UVs as s17.7 - tev.Uv[i].s = (s32)(pixel.Uv[i][0] * 128); - tev.Uv[i].t = (s32)(pixel.Uv[i][1] * 128); - } - - for (unsigned int i = 0; i < bpmem.genMode.numindstages; i++) - { - tev.IndirectLod[i] = rasterBlock.IndirectLod[i]; - tev.IndirectLinear[i] = rasterBlock.IndirectLinear[i]; - } - - for (unsigned int i = 0; i <= bpmem.genMode.numtevstages; i++) - { - tev.TextureLod[i] = rasterBlock.TextureLod[i]; - tev.TextureLinear[i] = rasterBlock.TextureLinear[i]; - } - - tev.Draw(); -} - -void InitTriangle(float X1, float Y1, s32 xi, s32 yi) -{ - vertex0X = xi; - vertex0Y = yi; - - // adjust a little less than 0.5 - const float adjust = 0.495f; - - vertexOffsetX = ((float)xi - X1) + adjust; - vertexOffsetY = ((float)yi - Y1) + adjust; -} - -void InitSlope(Slope *slope, float f1, float f2, float f3, float DX31, float DX12, float DY12, float DY31) -{ - float DF31 = f3 - f1; - float DF21 = f2 - f1; - float a = DF31 * -DY12 - DF21 * DY31; - float b = DX31 * DF21 + DX12 * DF31; - float c = -DX12 * DY31 - DX31 * -DY12; - slope->dfdx = -a / c; - slope->dfdy = -b / c; - slope->f0 = f1; -} - -inline void CalculateLOD(s32 &lod, bool &linear, u32 texmap, u32 texcoord) -{ - FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - u8 subTexmap = texmap & 3; - - // LOD calculation requires data from the texture mode for bias, etc. - // it does not seem to use the actual texture size - TexMode0& tm0 = texUnit.texMode0[subTexmap]; - TexMode1& tm1 = texUnit.texMode1[subTexmap]; - - float sDelta, tDelta; - if (tm0.diag_lod) - { - float *uv0 = rasterBlock.Pixel[0][0].Uv[texcoord]; - float *uv1 = rasterBlock.Pixel[1][1].Uv[texcoord]; - - sDelta = abs(uv0[0] - uv1[0]); - tDelta = abs(uv0[1] - uv1[1]); - } - else - { - float *uv0 = rasterBlock.Pixel[0][0].Uv[texcoord]; - float *uv1 = rasterBlock.Pixel[1][0].Uv[texcoord]; - float *uv2 = rasterBlock.Pixel[0][1].Uv[texcoord]; - - sDelta = max(abs(uv0[0] - uv1[0]), abs(uv0[0] - uv2[0])); - tDelta = max(abs(uv0[1] - uv1[1]), abs(uv0[1] - uv2[1])); - } - - // get LOD in s28.4 - lod = FixedLog2(max(sDelta, tDelta)); - - // bias is s2.5 - int bias = tm0.lod_bias; - bias >>= 1; - lod += bias; - - linear = ((lod > 0 && (tm0.min_filter & 4)) || (lod <= 0 && tm0.mag_filter)); - - // order of checks matters - // should be: - // if lod > max then max - // else if lod < min then min - lod = CLAMP(lod, (s32)tm1.min_lod, (s32)tm1.max_lod); -} - -void BuildBlock(s32 blockX, s32 blockY) -{ - for (s32 yi = 0; yi < BLOCK_SIZE; yi++) - { - for (s32 xi = 0; xi < BLOCK_SIZE; xi++) - { - RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; - - float dx = vertexOffsetX + (float)(xi + blockX - vertex0X); - float dy = vertexOffsetY + (float)(yi + blockY - vertex0Y); - - float invW = 1.0f / WSlope.GetValue(dx, dy); - pixel.InvW = invW; - - // tex coords - for (unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) - { - float projection; - if (xfregs.texMtxInfo[i].projection) - { - float q = TexSlopes[i][2].GetValue(dx, dy) * invW; - projection = invW / q; - } - else - projection = invW; - - pixel.Uv[i][0] = TexSlopes[i][0].GetValue(dx, dy) * projection; - pixel.Uv[i][1] = TexSlopes[i][1].GetValue(dx, dy) * projection; - } - } - } - - u32 indref = bpmem.tevindref.hex; - for (unsigned int i = 0; i < bpmem.genMode.numindstages; i++) - { - u32 texmap = indref & 3; - indref >>= 3; - u32 texcoord = indref & 3; - indref >>= 3; - - CalculateLOD(rasterBlock.IndirectLod[i], rasterBlock.IndirectLinear[i], texmap, texcoord); - } - - for (unsigned int i = 0; i <= bpmem.genMode.numtevstages; i++) - { - int stageOdd = i&1; - TwoTevStageOrders &order = bpmem.tevorders[i >> 1]; - if(order.getEnable(stageOdd)) - { - u32 texmap = order.getTexMap(stageOdd); - u32 texcoord = order.getTexCoord(stageOdd); - - CalculateLOD(rasterBlock.TextureLod[i], rasterBlock.TextureLinear[i], texmap, texcoord); - } - } -} - -void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) -{ - INCSTAT(stats.thisFrame.numTrianglesDrawn); - - if (g_Config.bHwRasterizer) - { - HwRasterizer::DrawTriangleFrontFace(v0, v1, v2); - return; - } - - // adapted from http://www.devmaster.net/forums/showthread.php?t=1884 - - // 28.4 fixed-pou32 coordinates. rounded to nearest and adjusted to match hardware output - // could also take floor and adjust -8 - const s32 Y1 = iround(16.0f * v0->screenPosition[1]) - 9; - const s32 Y2 = iround(16.0f * v1->screenPosition[1]) - 9; - const s32 Y3 = iround(16.0f * v2->screenPosition[1]) - 9; - - const s32 X1 = iround(16.0f * v0->screenPosition[0]) - 9; - const s32 X2 = iround(16.0f * v1->screenPosition[0]) - 9; - const s32 X3 = iround(16.0f * v2->screenPosition[0]) - 9; - - // Deltas - const s32 DX12 = X1 - X2; - const s32 DX23 = X2 - X3; - const s32 DX31 = X3 - X1; - - const s32 DY12 = Y1 - Y2; - const s32 DY23 = Y2 - Y3; - const s32 DY31 = Y3 - Y1; - - // Fixed-pos32 deltas - const s32 FDX12 = DX12 << 4; - const s32 FDX23 = DX23 << 4; - const s32 FDX31 = DX31 << 4; - - const s32 FDY12 = DY12 << 4; - const s32 FDY23 = DY23 << 4; - const s32 FDY31 = DY31 << 4; - - // Bounding rectangle - s32 minx = (min(min(X1, X2), X3) + 0xF) >> 4; - s32 maxx = (max(max(X1, X2), X3) + 0xF) >> 4; - s32 miny = (min(min(Y1, Y2), Y3) + 0xF) >> 4; - s32 maxy = (max(max(Y1, Y2), Y3) + 0xF) >> 4; - - // scissor - minx = max(minx, scissorLeft); - maxx = min(maxx, scissorRight); - miny = max(miny, scissorTop); - maxy = min(maxy, scissorBottom); - - if (minx >= maxx || miny >= maxy) - return; - - // Setup slopes - float fltx1 = v0->screenPosition.x; - float flty1 = v0->screenPosition.y; - float fltdx31 = v2->screenPosition.x - fltx1; - float fltdx12 = fltx1 - v1->screenPosition.x; - float fltdy12 = flty1 - v1->screenPosition.y; - float fltdy31 = v2->screenPosition.y - flty1; - - InitTriangle(fltx1, flty1, (X1 + 0xF) >> 4, (Y1 + 0xF) >> 4); - - float w[3] = { 1.0f / v0->projectedPosition.w, 1.0f / v1->projectedPosition.w, 1.0f / v2->projectedPosition.w }; - InitSlope(&WSlope, w[0], w[1], w[2], fltdx31, fltdx12, fltdy12, fltdy31); - - InitSlope(&ZSlope, v0->screenPosition[2], v1->screenPosition[2], v2->screenPosition[2], fltdx31, fltdx12, fltdy12, fltdy31); - - for(unsigned int i = 0; i < bpmem.genMode.numcolchans; i++) - { - for(int comp = 0; comp < 4; comp++) - InitSlope(&ColorSlopes[i][comp], v0->color[i][comp], v1->color[i][comp], v2->color[i][comp], fltdx31, fltdx12, fltdy12, fltdy31); - } - - for(unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) - { - for(int comp = 0; comp < 3; comp++) - InitSlope(&TexSlopes[i][comp], v0->texCoords[i][comp] * w[0], v1->texCoords[i][comp] * w[1], v2->texCoords[i][comp] * w[2], fltdx31, fltdx12, fltdy12, fltdy31); - } - - // Start in corner of 8x8 block - minx &= ~(BLOCK_SIZE - 1); - miny &= ~(BLOCK_SIZE - 1); - - // Half-edge constants - s32 C1 = DY12 * X1 - DX12 * Y1; - s32 C2 = DY23 * X2 - DX23 * Y2; - s32 C3 = DY31 * X3 - DX31 * Y3; - - // Correct for fill convention - if(DY12 < 0 || (DY12 == 0 && DX12 > 0)) C1++; - if(DY23 < 0 || (DY23 == 0 && DX23 > 0)) C2++; - if(DY31 < 0 || (DY31 == 0 && DX31 > 0)) C3++; - - // Loop through blocks - for(s32 y = miny; y < maxy; y += BLOCK_SIZE) - { - for(s32 x = minx; x < maxx; x += BLOCK_SIZE) - { - // Corners of block - s32 x0 = x << 4; - s32 x1 = (x + BLOCK_SIZE - 1) << 4; - s32 y0 = y << 4; - s32 y1 = (y + BLOCK_SIZE - 1) << 4; - - // Evaluate half-space functions - bool a00 = C1 + DX12 * y0 - DY12 * x0 > 0; - bool a10 = C1 + DX12 * y0 - DY12 * x1 > 0; - bool a01 = C1 + DX12 * y1 - DY12 * x0 > 0; - bool a11 = C1 + DX12 * y1 - DY12 * x1 > 0; - int a = (a00 << 0) | (a10 << 1) | (a01 << 2) | (a11 << 3); - - bool b00 = C2 + DX23 * y0 - DY23 * x0 > 0; - bool b10 = C2 + DX23 * y0 - DY23 * x1 > 0; - bool b01 = C2 + DX23 * y1 - DY23 * x0 > 0; - bool b11 = C2 + DX23 * y1 - DY23 * x1 > 0; - int b = (b00 << 0) | (b10 << 1) | (b01 << 2) | (b11 << 3); - - bool c00 = C3 + DX31 * y0 - DY31 * x0 > 0; - bool c10 = C3 + DX31 * y0 - DY31 * x1 > 0; - bool c01 = C3 + DX31 * y1 - DY31 * x0 > 0; - bool c11 = C3 + DX31 * y1 - DY31 * x1 > 0; - int c = (c00 << 0) | (c10 << 1) | (c01 << 2) | (c11 << 3); - - // Skip block when outside an edge - if(a == 0x0 || b == 0x0 || c == 0x0) continue; - - BuildBlock(x, y); - - // Accept whole block when totally covered - if(a == 0xF && b == 0xF && c == 0xF) - { - for(s32 iy = 0; iy < BLOCK_SIZE; iy++) - { - for(s32 ix = 0; ix < BLOCK_SIZE; ix++) - { - Draw(x + ix, y + iy, ix, iy); - } - } - } - else // Partially covered block - { - s32 CY1 = C1 + DX12 * y0 - DY12 * x0; - s32 CY2 = C2 + DX23 * y0 - DY23 * x0; - s32 CY3 = C3 + DX31 * y0 - DY31 * x0; - - for(s32 iy = 0; iy < BLOCK_SIZE; iy++) - { - s32 CX1 = CY1; - s32 CX2 = CY2; - s32 CX3 = CY3; - - for(s32 ix = 0; ix < BLOCK_SIZE; ix++) - { - if(CX1 > 0 && CX2 > 0 && CX3 > 0) - { - Draw(x + ix, y + iy, ix, iy); - } - - CX1 -= FDY12; - CX2 -= FDY23; - CX3 -= FDY31; - } - - CY1 += FDX12; - CY2 += FDX23; - CY3 += FDX31; - } - } - } - } - -} - - - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "Rasterizer.h" +#include "HwRasterizer.h" +#include "EfbInterface.h" +#include "BPMemLoader.h" +#include "XFMemLoader.h" +#include "Tev.h" +#include "Statistics.h" +#include "VideoConfig.h" + + +#define BLOCK_SIZE 2 + +#define CLAMP(x, a, b) (x>b)?b:(x> 19) - 2032; // integer part + s32 logFract = (*x & 0x007fffff) >> 19; // approximate fractional part + + return logInt + logFract; +} + +namespace Rasterizer +{ +Slope ZSlope; +Slope WSlope; +Slope ColorSlopes[2][4]; +Slope TexSlopes[8][3]; + +s32 vertex0X; +s32 vertex0Y; +float vertexOffsetX; +float vertexOffsetY; + +s32 scissorLeft = 0; +s32 scissorTop = 0; +s32 scissorRight = 0; +s32 scissorBottom = 0; + +Tev tev; +RasterBlock rasterBlock; + +void Init() +{ + tev.Init(); +} + +inline int iround(float x) +{ + int t; + +#if defined(_WIN32) && !defined(_M_X64) + __asm + { + fld x + fistp t + } +#else + t = (int)x; + if((x - t) >= 0.5) + return t + 1; +#endif + + return t; +} + +void SetScissor() +{ + int xoff = bpmem.scissorOffset.x * 2 - 342; + int yoff = bpmem.scissorOffset.y * 2 - 342; + + scissorLeft = bpmem.scissorTL.x - xoff - 342; + if (scissorLeft < 0) scissorLeft = 0; + + scissorTop = bpmem.scissorTL.y - yoff - 342; + if (scissorTop < 0) scissorTop = 0; + + scissorRight = bpmem.scissorBR.x - xoff - 341; + if (scissorRight > EFB_WIDTH) scissorRight = EFB_WIDTH; + + scissorBottom = bpmem.scissorBR.y - yoff - 341; + if (scissorBottom > EFB_HEIGHT) scissorBottom = EFB_HEIGHT; +} + +void SetTevReg(int reg, int comp, bool konst, s16 color) +{ + tev.SetRegColor(reg, comp, konst, color); +} + +inline void Draw(s32 x, s32 y, s32 xi, s32 yi) +{ + INCSTAT(stats.thisFrame.rasterizedPixels); + + float dx = vertexOffsetX + (float)(x - vertex0X); + float dy = vertexOffsetY + (float)(y - vertex0Y); + + float zFloat = 1.0f + ZSlope.GetValue(dx, dy); + if (zFloat < 0.0f || zFloat > 1.0f) + return; + + s32 z = (s32)(zFloat * 0x00ffffff); + + if (bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) + { + // early z + if (!EfbInterface::ZCompare(x, y, z)) + return; + } + + RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; + + tev.Position[0] = x; + tev.Position[1] = y; + tev.Position[2] = z; + + // colors + for (unsigned int i = 0; i < bpmem.genMode.numcolchans; i++) + { + for(int comp = 0; comp < 4; comp++) + tev.Color[i][comp] = (u8)ColorSlopes[i][comp].GetValue(dx, dy); + } + + // tex coords + for (unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) + { + // multiply by 128 because TEV stores stores UVs as s17.7 + tev.Uv[i].s = (s32)(pixel.Uv[i][0] * 128); + tev.Uv[i].t = (s32)(pixel.Uv[i][1] * 128); + } + + for (unsigned int i = 0; i < bpmem.genMode.numindstages; i++) + { + tev.IndirectLod[i] = rasterBlock.IndirectLod[i]; + tev.IndirectLinear[i] = rasterBlock.IndirectLinear[i]; + } + + for (unsigned int i = 0; i <= bpmem.genMode.numtevstages; i++) + { + tev.TextureLod[i] = rasterBlock.TextureLod[i]; + tev.TextureLinear[i] = rasterBlock.TextureLinear[i]; + } + + tev.Draw(); +} + +void InitTriangle(float X1, float Y1, s32 xi, s32 yi) +{ + vertex0X = xi; + vertex0Y = yi; + + // adjust a little less than 0.5 + const float adjust = 0.495f; + + vertexOffsetX = ((float)xi - X1) + adjust; + vertexOffsetY = ((float)yi - Y1) + adjust; +} + +void InitSlope(Slope *slope, float f1, float f2, float f3, float DX31, float DX12, float DY12, float DY31) +{ + float DF31 = f3 - f1; + float DF21 = f2 - f1; + float a = DF31 * -DY12 - DF21 * DY31; + float b = DX31 * DF21 + DX12 * DF31; + float c = -DX12 * DY31 - DX31 * -DY12; + slope->dfdx = -a / c; + slope->dfdy = -b / c; + slope->f0 = f1; +} + +inline void CalculateLOD(s32 &lod, bool &linear, u32 texmap, u32 texcoord) +{ + FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; + u8 subTexmap = texmap & 3; + + // LOD calculation requires data from the texture mode for bias, etc. + // it does not seem to use the actual texture size + TexMode0& tm0 = texUnit.texMode0[subTexmap]; + TexMode1& tm1 = texUnit.texMode1[subTexmap]; + + float sDelta, tDelta; + if (tm0.diag_lod) + { + float *uv0 = rasterBlock.Pixel[0][0].Uv[texcoord]; + float *uv1 = rasterBlock.Pixel[1][1].Uv[texcoord]; + + sDelta = abs(uv0[0] - uv1[0]); + tDelta = abs(uv0[1] - uv1[1]); + } + else + { + float *uv0 = rasterBlock.Pixel[0][0].Uv[texcoord]; + float *uv1 = rasterBlock.Pixel[1][0].Uv[texcoord]; + float *uv2 = rasterBlock.Pixel[0][1].Uv[texcoord]; + + sDelta = max(abs(uv0[0] - uv1[0]), abs(uv0[0] - uv2[0])); + tDelta = max(abs(uv0[1] - uv1[1]), abs(uv0[1] - uv2[1])); + } + + // get LOD in s28.4 + lod = FixedLog2(max(sDelta, tDelta)); + + // bias is s2.5 + int bias = tm0.lod_bias; + bias >>= 1; + lod += bias; + + linear = ((lod > 0 && (tm0.min_filter & 4)) || (lod <= 0 && tm0.mag_filter)); + + // order of checks matters + // should be: + // if lod > max then max + // else if lod < min then min + lod = CLAMP(lod, (s32)tm1.min_lod, (s32)tm1.max_lod); +} + +void BuildBlock(s32 blockX, s32 blockY) +{ + for (s32 yi = 0; yi < BLOCK_SIZE; yi++) + { + for (s32 xi = 0; xi < BLOCK_SIZE; xi++) + { + RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; + + float dx = vertexOffsetX + (float)(xi + blockX - vertex0X); + float dy = vertexOffsetY + (float)(yi + blockY - vertex0Y); + + float invW = 1.0f / WSlope.GetValue(dx, dy); + pixel.InvW = invW; + + // tex coords + for (unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) + { + float projection; + if (xfregs.texMtxInfo[i].projection) + { + float q = TexSlopes[i][2].GetValue(dx, dy) * invW; + projection = invW / q; + } + else + projection = invW; + + pixel.Uv[i][0] = TexSlopes[i][0].GetValue(dx, dy) * projection; + pixel.Uv[i][1] = TexSlopes[i][1].GetValue(dx, dy) * projection; + } + } + } + + u32 indref = bpmem.tevindref.hex; + for (unsigned int i = 0; i < bpmem.genMode.numindstages; i++) + { + u32 texmap = indref & 3; + indref >>= 3; + u32 texcoord = indref & 3; + indref >>= 3; + + CalculateLOD(rasterBlock.IndirectLod[i], rasterBlock.IndirectLinear[i], texmap, texcoord); + } + + for (unsigned int i = 0; i <= bpmem.genMode.numtevstages; i++) + { + int stageOdd = i&1; + TwoTevStageOrders &order = bpmem.tevorders[i >> 1]; + if(order.getEnable(stageOdd)) + { + u32 texmap = order.getTexMap(stageOdd); + u32 texcoord = order.getTexCoord(stageOdd); + + CalculateLOD(rasterBlock.TextureLod[i], rasterBlock.TextureLinear[i], texmap, texcoord); + } + } +} + +void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2) +{ + INCSTAT(stats.thisFrame.numTrianglesDrawn); + + if (g_Config.bHwRasterizer) + { + HwRasterizer::DrawTriangleFrontFace(v0, v1, v2); + return; + } + + // adapted from http://www.devmaster.net/forums/showthread.php?t=1884 + + // 28.4 fixed-pou32 coordinates. rounded to nearest and adjusted to match hardware output + // could also take floor and adjust -8 + const s32 Y1 = iround(16.0f * v0->screenPosition[1]) - 9; + const s32 Y2 = iround(16.0f * v1->screenPosition[1]) - 9; + const s32 Y3 = iround(16.0f * v2->screenPosition[1]) - 9; + + const s32 X1 = iround(16.0f * v0->screenPosition[0]) - 9; + const s32 X2 = iround(16.0f * v1->screenPosition[0]) - 9; + const s32 X3 = iround(16.0f * v2->screenPosition[0]) - 9; + + // Deltas + const s32 DX12 = X1 - X2; + const s32 DX23 = X2 - X3; + const s32 DX31 = X3 - X1; + + const s32 DY12 = Y1 - Y2; + const s32 DY23 = Y2 - Y3; + const s32 DY31 = Y3 - Y1; + + // Fixed-pos32 deltas + const s32 FDX12 = DX12 << 4; + const s32 FDX23 = DX23 << 4; + const s32 FDX31 = DX31 << 4; + + const s32 FDY12 = DY12 << 4; + const s32 FDY23 = DY23 << 4; + const s32 FDY31 = DY31 << 4; + + // Bounding rectangle + s32 minx = (min(min(X1, X2), X3) + 0xF) >> 4; + s32 maxx = (max(max(X1, X2), X3) + 0xF) >> 4; + s32 miny = (min(min(Y1, Y2), Y3) + 0xF) >> 4; + s32 maxy = (max(max(Y1, Y2), Y3) + 0xF) >> 4; + + // scissor + minx = max(minx, scissorLeft); + maxx = min(maxx, scissorRight); + miny = max(miny, scissorTop); + maxy = min(maxy, scissorBottom); + + if (minx >= maxx || miny >= maxy) + return; + + // Setup slopes + float fltx1 = v0->screenPosition.x; + float flty1 = v0->screenPosition.y; + float fltdx31 = v2->screenPosition.x - fltx1; + float fltdx12 = fltx1 - v1->screenPosition.x; + float fltdy12 = flty1 - v1->screenPosition.y; + float fltdy31 = v2->screenPosition.y - flty1; + + InitTriangle(fltx1, flty1, (X1 + 0xF) >> 4, (Y1 + 0xF) >> 4); + + float w[3] = { 1.0f / v0->projectedPosition.w, 1.0f / v1->projectedPosition.w, 1.0f / v2->projectedPosition.w }; + InitSlope(&WSlope, w[0], w[1], w[2], fltdx31, fltdx12, fltdy12, fltdy31); + + InitSlope(&ZSlope, v0->screenPosition[2], v1->screenPosition[2], v2->screenPosition[2], fltdx31, fltdx12, fltdy12, fltdy31); + + for(unsigned int i = 0; i < bpmem.genMode.numcolchans; i++) + { + for(int comp = 0; comp < 4; comp++) + InitSlope(&ColorSlopes[i][comp], v0->color[i][comp], v1->color[i][comp], v2->color[i][comp], fltdx31, fltdx12, fltdy12, fltdy31); + } + + for(unsigned int i = 0; i < bpmem.genMode.numtexgens; i++) + { + for(int comp = 0; comp < 3; comp++) + InitSlope(&TexSlopes[i][comp], v0->texCoords[i][comp] * w[0], v1->texCoords[i][comp] * w[1], v2->texCoords[i][comp] * w[2], fltdx31, fltdx12, fltdy12, fltdy31); + } + + // Start in corner of 8x8 block + minx &= ~(BLOCK_SIZE - 1); + miny &= ~(BLOCK_SIZE - 1); + + // Half-edge constants + s32 C1 = DY12 * X1 - DX12 * Y1; + s32 C2 = DY23 * X2 - DX23 * Y2; + s32 C3 = DY31 * X3 - DX31 * Y3; + + // Correct for fill convention + if(DY12 < 0 || (DY12 == 0 && DX12 > 0)) C1++; + if(DY23 < 0 || (DY23 == 0 && DX23 > 0)) C2++; + if(DY31 < 0 || (DY31 == 0 && DX31 > 0)) C3++; + + // Loop through blocks + for(s32 y = miny; y < maxy; y += BLOCK_SIZE) + { + for(s32 x = minx; x < maxx; x += BLOCK_SIZE) + { + // Corners of block + s32 x0 = x << 4; + s32 x1 = (x + BLOCK_SIZE - 1) << 4; + s32 y0 = y << 4; + s32 y1 = (y + BLOCK_SIZE - 1) << 4; + + // Evaluate half-space functions + bool a00 = C1 + DX12 * y0 - DY12 * x0 > 0; + bool a10 = C1 + DX12 * y0 - DY12 * x1 > 0; + bool a01 = C1 + DX12 * y1 - DY12 * x0 > 0; + bool a11 = C1 + DX12 * y1 - DY12 * x1 > 0; + int a = (a00 << 0) | (a10 << 1) | (a01 << 2) | (a11 << 3); + + bool b00 = C2 + DX23 * y0 - DY23 * x0 > 0; + bool b10 = C2 + DX23 * y0 - DY23 * x1 > 0; + bool b01 = C2 + DX23 * y1 - DY23 * x0 > 0; + bool b11 = C2 + DX23 * y1 - DY23 * x1 > 0; + int b = (b00 << 0) | (b10 << 1) | (b01 << 2) | (b11 << 3); + + bool c00 = C3 + DX31 * y0 - DY31 * x0 > 0; + bool c10 = C3 + DX31 * y0 - DY31 * x1 > 0; + bool c01 = C3 + DX31 * y1 - DY31 * x0 > 0; + bool c11 = C3 + DX31 * y1 - DY31 * x1 > 0; + int c = (c00 << 0) | (c10 << 1) | (c01 << 2) | (c11 << 3); + + // Skip block when outside an edge + if(a == 0x0 || b == 0x0 || c == 0x0) continue; + + BuildBlock(x, y); + + // Accept whole block when totally covered + if(a == 0xF && b == 0xF && c == 0xF) + { + for(s32 iy = 0; iy < BLOCK_SIZE; iy++) + { + for(s32 ix = 0; ix < BLOCK_SIZE; ix++) + { + Draw(x + ix, y + iy, ix, iy); + } + } + } + else // Partially covered block + { + s32 CY1 = C1 + DX12 * y0 - DY12 * x0; + s32 CY2 = C2 + DX23 * y0 - DY23 * x0; + s32 CY3 = C3 + DX31 * y0 - DY31 * x0; + + for(s32 iy = 0; iy < BLOCK_SIZE; iy++) + { + s32 CX1 = CY1; + s32 CX2 = CY2; + s32 CX3 = CY3; + + for(s32 ix = 0; ix < BLOCK_SIZE; ix++) + { + if(CX1 > 0 && CX2 > 0 && CX3 > 0) + { + Draw(x + ix, y + iy, ix, iy); + } + + CX1 -= FDY12; + CX2 -= FDY23; + CX3 -= FDY31; + } + + CY1 += FDX12; + CY2 += FDX23; + CY3 += FDX31; + } + } + } + } + +} + + + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.h b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.h index 536cd7c358..f8850571a9 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.h @@ -1,59 +1,59 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _RASTERIZER_H_ -#define _RASTERIZER_H_ - -#include "NativeVertexFormat.h" - -namespace Rasterizer -{ - void Init(); - - void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2); - - void SetScissor(); - - void SetTevReg(int reg, int comp, bool konst, s16 color); - - struct Slope - { - float dfdx; - float dfdy; - float f0; - - float GetValue(float dx, float dy) { return f0 + (dfdx * dx) + (dfdy * dy); } - }; - - struct RasterBlockPixel - { - float InvW; - float Uv[8][2]; - }; - - struct RasterBlock - { - RasterBlockPixel Pixel[2][2]; - s32 IndirectLod[4]; - bool IndirectLinear[4]; - s32 TextureLod[16]; - bool TextureLinear[16]; - }; - -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _RASTERIZER_H_ +#define _RASTERIZER_H_ + +#include "NativeVertexFormat.h" + +namespace Rasterizer +{ + void Init(); + + void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2); + + void SetScissor(); + + void SetTevReg(int reg, int comp, bool konst, s16 color); + + struct Slope + { + float dfdx; + float dfdy; + float f0; + + float GetValue(float dx, float dy) { return f0 + (dfdx * dx) + (dfdy * dy); } + }; + + struct RasterBlockPixel + { + float InvW; + float Uv[8][2]; + }; + + struct RasterBlock + { + RasterBlockPixel Pixel[2][2]; + s32 IndirectLod[4]; + bool IndirectLinear[4]; + s32 TextureLod[16]; + bool TextureLinear[16]; + }; + +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.cpp index 69fc22ce7f..9088636965 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.cpp @@ -1,204 +1,204 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "GLUtil.h" -#include "Renderer.h" -#include "main.h" -#include "Statistics.h" -#include "RasterFont.h" - -#define VSYNC_ENABLED 0 - -static GLuint s_RenderTarget = 0; - -RasterFont* s_pfont = NULL; - -void Renderer::Init(SVideoInitialize *_pVideoInitialize) -{ - if (!OpenGL_Create(g_VideoInitialize, 640, 480)) // 640x480 will be the default if all else fails - { - g_VideoInitialize.pLog("Renderer::Create failed\n", TRUE); - return; - } - - _pVideoInitialize->pPeekMessages = g_VideoInitialize.pPeekMessages; - _pVideoInitialize->pUpdateFPSDisplay = g_VideoInitialize.pUpdateFPSDisplay; - _pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle; -#if defined(HAVE_X11) && HAVE_X11 - _pVideoInitialize->pXWindow = g_VideoInitialize.pXWindow; -#endif -} - -void Renderer::Shutdown() -{ - glDeleteTextures(1, &s_RenderTarget); - - delete s_pfont; - s_pfont = 0; -} - -void Renderer::Prepare() -{ - OpenGL_MakeCurrent(); - - // Init extension support. - if (glewInit() != GLEW_OK) { - ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?"); - return; - } - - // Handle VSync on/off -#ifdef _WIN32 - if (WGLEW_EXT_swap_control) - wglSwapIntervalEXT(VSYNC_ENABLED); - else - ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)Does your video card support OpenGL 2.x?"); -#elif defined(HAVE_X11) && HAVE_X11 - if (glXSwapIntervalSGI) - glXSwapIntervalSGI(VSYNC_ENABLED); - else - ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)"); -#endif - - glStencilFunc(GL_ALWAYS, 0, 0); - // used by hw rasterizer if it enables blending and depth test - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDepthFunc(GL_LEQUAL); - - glShadeModel(GL_SMOOTH); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glClearDepth(1.0f); - glEnable(GL_SCISSOR_TEST); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // 4-byte pixel alignment - - glDisable(GL_LIGHTING); - glDisable(GL_BLEND); - glDisable(GL_STENCIL_TEST); - //glDisable(GL_SCISSOR_TEST); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - s_pfont = new RasterFont(); - - // legacy multitexturing: select texture channel only. - glActiveTexture(GL_TEXTURE0); - glClientActiveTexture(GL_TEXTURE0); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glGenTextures(1, &s_RenderTarget); - glEnable(GL_TEXTURE_RECTANGLE_ARB); -} - -void Renderer::RenderText(const char* pstr, int left, int top, u32 color) -{ - int nBackbufferWidth = (int)OpenGL_GetBackbufferWidth(); - int nBackbufferHeight = (int)OpenGL_GetBackbufferHeight(); - glColor4f(((color>>16) & 0xff)/255.0f, ((color>> 8) & 0xff)/255.0f, - ((color>> 0) & 0xff)/255.0f, ((color>>24) & 0xFF)/255.0f); - s_pfont->printMultilineText(pstr, - left * 2.0f / (float)nBackbufferWidth - 1, - 1 - top * 2.0f / (float)nBackbufferHeight, - 0, nBackbufferWidth, nBackbufferHeight); -} - -void Renderer::DrawDebugText() -{ - char debugtext_buffer[8192]; - char *p = debugtext_buffer; - p[0] = 0; - - if (g_Config.bShowStats) - { - p+=sprintf(p,"Objects: %i\n",stats.thisFrame.numDrawnObjects); - p+=sprintf(p,"Primatives: %i\n",stats.thisFrame.numPrimatives); - p+=sprintf(p,"Vertices Loaded: %i\n",stats.thisFrame.numVerticesLoaded); - - p+=sprintf(p,"Triangles Input: %i\n",stats.thisFrame.numTrianglesIn); - p+=sprintf(p,"Triangles Rejected: %i\n",stats.thisFrame.numTrianglesRejected); - p+=sprintf(p,"Triangles Culled: %i\n",stats.thisFrame.numTrianglesCulled); - p+=sprintf(p,"Triangles Clipped: %i\n",stats.thisFrame.numTrianglesClipped); - p+=sprintf(p,"Triangles Drawn: %i\n",stats.thisFrame.numTrianglesDrawn); - - p+=sprintf(p,"Rasterized Pix: %i\n",stats.thisFrame.rasterizedPixels); - p+=sprintf(p,"TEV Pix In: %i\n",stats.thisFrame.tevPixelsIn); - p+=sprintf(p,"TEV Pix Out: %i\n",stats.thisFrame.tevPixelsOut); - } - - // Render a shadow, and then the text. - Renderer::RenderText(debugtext_buffer, 21, 21, 0xDD000000); - Renderer::RenderText(debugtext_buffer, 20, 20, 0xFFFFFF00); -} - -void Renderer::DrawTexture(u8 *texture, int width, int height) -{ - OpenGL_Update(); // just updates the render window position and the backbuffer size - - GLsizei glWidth = (GLsizei)OpenGL_GetBackbufferWidth(); - GLsizei glHeight = (GLsizei)OpenGL_GetBackbufferHeight(); - - // Update GLViewPort - glViewport(0, 0, glWidth, glHeight); - glScissor(0, 0, glWidth, glHeight); - - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, s_RenderTarget); - glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - GL_REPORT_ERRORD(); - - GLfloat u_max = (GLfloat)width; - GLfloat v_max = (GLfloat)glHeight; - - glBegin(GL_QUADS); - glTexCoord2f(0, v_max); glVertex2f(-1, -1); - glTexCoord2f(0, 0); glVertex2f(-1, 1); - glTexCoord2f(u_max, 0); glVertex2f( 1, 1); - glTexCoord2f(u_max, v_max); glVertex2f( 1, -1); - glEnd(); - - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); -} - -void Renderer::SwapBuffer() -{ - DrawDebugText(); - - glFlush(); - - OpenGL_SwapBuffers(); - - GL_REPORT_ERRORD(); - - stats.ResetFrame(); - - // Clear framebuffer - glClearColor(0, 0, 0, 0); - glClearDepth(1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - GL_REPORT_ERRORD(); -} - - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "GLUtil.h" +#include "Renderer.h" +#include "main.h" +#include "Statistics.h" +#include "RasterFont.h" + +#define VSYNC_ENABLED 0 + +static GLuint s_RenderTarget = 0; + +RasterFont* s_pfont = NULL; + +void Renderer::Init(SVideoInitialize *_pVideoInitialize) +{ + if (!OpenGL_Create(g_VideoInitialize, 640, 480)) // 640x480 will be the default if all else fails + { + g_VideoInitialize.pLog("Renderer::Create failed\n", TRUE); + return; + } + + _pVideoInitialize->pPeekMessages = g_VideoInitialize.pPeekMessages; + _pVideoInitialize->pUpdateFPSDisplay = g_VideoInitialize.pUpdateFPSDisplay; + _pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle; +#if defined(HAVE_X11) && HAVE_X11 + _pVideoInitialize->pXWindow = g_VideoInitialize.pXWindow; +#endif +} + +void Renderer::Shutdown() +{ + glDeleteTextures(1, &s_RenderTarget); + + delete s_pfont; + s_pfont = 0; +} + +void Renderer::Prepare() +{ + OpenGL_MakeCurrent(); + + // Init extension support. + if (glewInit() != GLEW_OK) { + ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?"); + return; + } + + // Handle VSync on/off +#ifdef _WIN32 + if (WGLEW_EXT_swap_control) + wglSwapIntervalEXT(VSYNC_ENABLED); + else + ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)Does your video card support OpenGL 2.x?"); +#elif defined(HAVE_X11) && HAVE_X11 + if (glXSwapIntervalSGI) + glXSwapIntervalSGI(VSYNC_ENABLED); + else + ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)"); +#endif + + glStencilFunc(GL_ALWAYS, 0, 0); + // used by hw rasterizer if it enables blending and depth test + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDepthFunc(GL_LEQUAL); + + glShadeModel(GL_SMOOTH); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClearDepth(1.0f); + glEnable(GL_SCISSOR_TEST); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // 4-byte pixel alignment + + glDisable(GL_LIGHTING); + glDisable(GL_BLEND); + glDisable(GL_STENCIL_TEST); + //glDisable(GL_SCISSOR_TEST); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + s_pfont = new RasterFont(); + + // legacy multitexturing: select texture channel only. + glActiveTexture(GL_TEXTURE0); + glClientActiveTexture(GL_TEXTURE0); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + glGenTextures(1, &s_RenderTarget); + glEnable(GL_TEXTURE_RECTANGLE_ARB); +} + +void Renderer::RenderText(const char* pstr, int left, int top, u32 color) +{ + int nBackbufferWidth = (int)OpenGL_GetBackbufferWidth(); + int nBackbufferHeight = (int)OpenGL_GetBackbufferHeight(); + glColor4f(((color>>16) & 0xff)/255.0f, ((color>> 8) & 0xff)/255.0f, + ((color>> 0) & 0xff)/255.0f, ((color>>24) & 0xFF)/255.0f); + s_pfont->printMultilineText(pstr, + left * 2.0f / (float)nBackbufferWidth - 1, + 1 - top * 2.0f / (float)nBackbufferHeight, + 0, nBackbufferWidth, nBackbufferHeight); +} + +void Renderer::DrawDebugText() +{ + char debugtext_buffer[8192]; + char *p = debugtext_buffer; + p[0] = 0; + + if (g_Config.bShowStats) + { + p+=sprintf(p,"Objects: %i\n",stats.thisFrame.numDrawnObjects); + p+=sprintf(p,"Primatives: %i\n",stats.thisFrame.numPrimatives); + p+=sprintf(p,"Vertices Loaded: %i\n",stats.thisFrame.numVerticesLoaded); + + p+=sprintf(p,"Triangles Input: %i\n",stats.thisFrame.numTrianglesIn); + p+=sprintf(p,"Triangles Rejected: %i\n",stats.thisFrame.numTrianglesRejected); + p+=sprintf(p,"Triangles Culled: %i\n",stats.thisFrame.numTrianglesCulled); + p+=sprintf(p,"Triangles Clipped: %i\n",stats.thisFrame.numTrianglesClipped); + p+=sprintf(p,"Triangles Drawn: %i\n",stats.thisFrame.numTrianglesDrawn); + + p+=sprintf(p,"Rasterized Pix: %i\n",stats.thisFrame.rasterizedPixels); + p+=sprintf(p,"TEV Pix In: %i\n",stats.thisFrame.tevPixelsIn); + p+=sprintf(p,"TEV Pix Out: %i\n",stats.thisFrame.tevPixelsOut); + } + + // Render a shadow, and then the text. + Renderer::RenderText(debugtext_buffer, 21, 21, 0xDD000000); + Renderer::RenderText(debugtext_buffer, 20, 20, 0xFFFFFF00); +} + +void Renderer::DrawTexture(u8 *texture, int width, int height) +{ + OpenGL_Update(); // just updates the render window position and the backbuffer size + + GLsizei glWidth = (GLsizei)OpenGL_GetBackbufferWidth(); + GLsizei glHeight = (GLsizei)OpenGL_GetBackbufferHeight(); + + // Update GLViewPort + glViewport(0, 0, glWidth, glHeight); + glScissor(0, 0, glWidth, glHeight); + + glBindTexture(GL_TEXTURE_RECTANGLE_ARB, s_RenderTarget); + glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture); + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + GL_REPORT_ERRORD(); + + GLfloat u_max = (GLfloat)width; + GLfloat v_max = (GLfloat)glHeight; + + glBegin(GL_QUADS); + glTexCoord2f(0, v_max); glVertex2f(-1, -1); + glTexCoord2f(0, 0); glVertex2f(-1, 1); + glTexCoord2f(u_max, 0); glVertex2f( 1, 1); + glTexCoord2f(u_max, v_max); glVertex2f( 1, -1); + glEnd(); + + glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); +} + +void Renderer::SwapBuffer() +{ + DrawDebugText(); + + glFlush(); + + OpenGL_SwapBuffers(); + + GL_REPORT_ERRORD(); + + stats.ResetFrame(); + + // Clear framebuffer + glClearColor(0, 0, 0, 0); + glClearDepth(1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + GL_REPORT_ERRORD(); +} + + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.h b/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.h index 33304a6b90..06dc9e9d66 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Renderer.h @@ -1,37 +1,37 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _RENDERER_H_ -#define _RENDERER_H_ - -#include "pluginspecs_video.h" - -namespace Renderer -{ - void Init(SVideoInitialize *_pVideoInitialize); - void Prepare(); - void Shutdown(); - - void RenderText(const char* pstr, int left, int top, u32 color); - void DrawDebugText(); - - void DrawTexture(u8 *texture, int width, int height); - - void SwapBuffer(); -} - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _RENDERER_H_ +#define _RENDERER_H_ + +#include "pluginspecs_video.h" + +namespace Renderer +{ + void Init(SVideoInitialize *_pVideoInitialize); + void Prepare(); + void Shutdown(); + + void RenderText(const char* pstr, int left, int top, u32 color); + void DrawDebugText(); + + void DrawTexture(u8 *texture, int width, int height); + + void SwapBuffer(); +} + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SetupUnit.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SetupUnit.cpp index 6bc92dc071..04b534361b 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SetupUnit.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SetupUnit.cpp @@ -1,171 +1,171 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "SetupUnit.h" - -#include "CPMemLoader.h" -#include "OpcodeDecoder.h" -#include "Statistics.h" -#include "Clipper.h" - - -void SetupUnit::Init(u8 primitiveType) -{ - m_PrimType = primitiveType; - - m_VertexCounter = 0; - m_VertPointer[0] = &m_Vertices[0]; - m_VertPointer[1] = &m_Vertices[1]; - m_VertPointer[2] = &m_Vertices[2]; - m_VertWritePointer = m_VertPointer[0]; -} - -void SetupUnit::SetupVertex() -{ - switch(m_PrimType) - { - case GX_DRAW_QUADS: - SetupQuad(); - break; - case GX_DRAW_TRIANGLES: - SetupTriangle(); - break; - case GX_DRAW_TRIANGLE_STRIP: - SetupTriStrip(); - break; - case GX_DRAW_TRIANGLE_FAN: - SetupTriFan(); - break; - case GX_DRAW_LINES: - SetupLine(); - break; - case GX_DRAW_LINE_STRIP: - SetupLineStrip(); - break; - case GX_DRAW_POINTS: - SetupPoint(); - break; - } -} - - - void SetupUnit::SetupQuad() - { - if (m_VertexCounter < 2) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); - - m_VertexCounter++; - m_VertexCounter &= 3; - m_VertWritePointer = &m_Vertices[m_VertexCounter & 1]; - OutputVertexData* temp = m_VertPointer[1]; - m_VertPointer[1] = m_VertPointer[2]; - m_VertPointer[2] = temp; - } - -void SetupUnit::SetupTriangle() -{ - if (m_VertexCounter < 2) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); - - m_VertexCounter = 0; - m_VertWritePointer = m_VertPointer[0]; -} - -void SetupUnit::SetupTriStrip() -{ - if (m_VertexCounter < 2) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); - - m_VertexCounter++; - m_VertPointer[2 - (m_VertexCounter & 1)] = m_VertPointer[0]; - m_VertWritePointer = m_VertPointer[0]; - - m_VertPointer[0] = &m_Vertices[(m_VertexCounter + 1) % 3]; -} - -void SetupUnit::SetupTriFan() -{ - if (m_VertexCounter < 2) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); - - m_VertexCounter++; - m_VertPointer[1] = m_VertPointer[2]; - m_VertPointer[2] = &m_Vertices[2 - (m_VertexCounter & 1)]; - - m_VertWritePointer = m_VertPointer[2]; -} - -void SetupUnit::SetupLine() -{ - if (m_VertexCounter < 1) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - Clipper::ProcessLine(m_VertPointer[0], m_VertPointer[1]); - - m_VertexCounter = 0; - m_VertWritePointer = m_VertPointer[0]; -} - -void SetupUnit::SetupLineStrip() -{ - if (m_VertexCounter < 1) - { - m_VertexCounter++; - m_VertWritePointer = m_VertPointer[m_VertexCounter]; - return; - } - - m_VertexCounter++; - - Clipper::ProcessLine(m_VertPointer[0], m_VertPointer[1]); - - m_VertWritePointer = m_VertPointer[0]; - - m_VertPointer[0] = m_VertPointer[1]; - m_VertPointer[1] = &m_Vertices[m_VertexCounter & 1]; -} - -void SetupUnit::SetupPoint() -{} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "SetupUnit.h" + +#include "CPMemLoader.h" +#include "OpcodeDecoder.h" +#include "Statistics.h" +#include "Clipper.h" + + +void SetupUnit::Init(u8 primitiveType) +{ + m_PrimType = primitiveType; + + m_VertexCounter = 0; + m_VertPointer[0] = &m_Vertices[0]; + m_VertPointer[1] = &m_Vertices[1]; + m_VertPointer[2] = &m_Vertices[2]; + m_VertWritePointer = m_VertPointer[0]; +} + +void SetupUnit::SetupVertex() +{ + switch(m_PrimType) + { + case GX_DRAW_QUADS: + SetupQuad(); + break; + case GX_DRAW_TRIANGLES: + SetupTriangle(); + break; + case GX_DRAW_TRIANGLE_STRIP: + SetupTriStrip(); + break; + case GX_DRAW_TRIANGLE_FAN: + SetupTriFan(); + break; + case GX_DRAW_LINES: + SetupLine(); + break; + case GX_DRAW_LINE_STRIP: + SetupLineStrip(); + break; + case GX_DRAW_POINTS: + SetupPoint(); + break; + } +} + + + void SetupUnit::SetupQuad() + { + if (m_VertexCounter < 2) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); + + m_VertexCounter++; + m_VertexCounter &= 3; + m_VertWritePointer = &m_Vertices[m_VertexCounter & 1]; + OutputVertexData* temp = m_VertPointer[1]; + m_VertPointer[1] = m_VertPointer[2]; + m_VertPointer[2] = temp; + } + +void SetupUnit::SetupTriangle() +{ + if (m_VertexCounter < 2) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); + + m_VertexCounter = 0; + m_VertWritePointer = m_VertPointer[0]; +} + +void SetupUnit::SetupTriStrip() +{ + if (m_VertexCounter < 2) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); + + m_VertexCounter++; + m_VertPointer[2 - (m_VertexCounter & 1)] = m_VertPointer[0]; + m_VertWritePointer = m_VertPointer[0]; + + m_VertPointer[0] = &m_Vertices[(m_VertexCounter + 1) % 3]; +} + +void SetupUnit::SetupTriFan() +{ + if (m_VertexCounter < 2) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + Clipper::ProcessTriangle(m_VertPointer[0], m_VertPointer[1], m_VertPointer[2]); + + m_VertexCounter++; + m_VertPointer[1] = m_VertPointer[2]; + m_VertPointer[2] = &m_Vertices[2 - (m_VertexCounter & 1)]; + + m_VertWritePointer = m_VertPointer[2]; +} + +void SetupUnit::SetupLine() +{ + if (m_VertexCounter < 1) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + Clipper::ProcessLine(m_VertPointer[0], m_VertPointer[1]); + + m_VertexCounter = 0; + m_VertWritePointer = m_VertPointer[0]; +} + +void SetupUnit::SetupLineStrip() +{ + if (m_VertexCounter < 1) + { + m_VertexCounter++; + m_VertWritePointer = m_VertPointer[m_VertexCounter]; + return; + } + + m_VertexCounter++; + + Clipper::ProcessLine(m_VertPointer[0], m_VertPointer[1]); + + m_VertWritePointer = m_VertPointer[0]; + + m_VertPointer[0] = m_VertPointer[1]; + m_VertPointer[1] = &m_Vertices[m_VertexCounter & 1]; +} + +void SetupUnit::SetupPoint() +{} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.cpp index 57c2681f08..bfae22a527 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.cpp @@ -1,38 +1,38 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Statistics.h" - -Statistics stats; - -template -void Xchg(T& a, T&b) -{ - T c = a; - a = b; - b = c; -} - -Statistics::Statistics() -{ - frameCount = 0; -} - -void Statistics::ResetFrame() -{ - memset(&thisFrame, 0, sizeof(ThisFrame)); -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Statistics.h" + +Statistics stats; + +template +void Xchg(T& a, T&b) +{ + T c = a; + a = b; + b = c; +} + +Statistics::Statistics() +{ + frameCount = 0; +} + +void Statistics::ResetFrame() +{ + memset(&thisFrame, 0, sizeof(ThisFrame)); +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.h b/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.h index 2c2587bffe..e6d8e0dbbd 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Statistics.h @@ -1,63 +1,63 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "CommonTypes.h" -#include "VideoConfig.h" - -#ifndef _STATISTICS_H -#define _STATISTICS_H - -struct Statistics -{ - struct ThisFrame - { - u32 numDrawnObjects; - u32 numPrimatives; - u32 numVerticesLoaded; - u32 numVerticesOut; - - u32 numTrianglesIn; - u32 numTrianglesRejected; - u32 numTrianglesCulled; - u32 numTrianglesClipped; - u32 numTrianglesDrawn; - - u32 rasterizedPixels; - u32 tevPixelsIn; - u32 tevPixelsOut; - }; - - u32 frameCount; - Statistics(); - - ThisFrame thisFrame; - void ResetFrame(); -}; - -extern Statistics stats; - -#if (STATISTICS) -#define INCSTAT(a) (a)++; -#define ADDSTAT(a,b) (a)+=(b); -#define SETSTAT(a,x) (a)=(int)(x); -#else -#define INCSTAT(a) ; -#define ADDSTAT(a,b) ; -#define SETSTAT(a,x) ; -#endif - -#endif // _STATISTICS_H +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "CommonTypes.h" +#include "VideoConfig.h" + +#ifndef _STATISTICS_H +#define _STATISTICS_H + +struct Statistics +{ + struct ThisFrame + { + u32 numDrawnObjects; + u32 numPrimatives; + u32 numVerticesLoaded; + u32 numVerticesOut; + + u32 numTrianglesIn; + u32 numTrianglesRejected; + u32 numTrianglesCulled; + u32 numTrianglesClipped; + u32 numTrianglesDrawn; + + u32 rasterizedPixels; + u32 tevPixelsIn; + u32 tevPixelsOut; + }; + + u32 frameCount; + Statistics(); + + ThisFrame thisFrame; + void ResetFrame(); +}; + +extern Statistics stats; + +#if (STATISTICS) +#define INCSTAT(a) (a)++; +#define ADDSTAT(a,b) (a)+=(b); +#define SETSTAT(a,x) (a)=(int)(x); +#else +#define INCSTAT(a) ; +#define ADDSTAT(a,b) ; +#define SETSTAT(a,x) ; +#endif + +#endif // _STATISTICS_H diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp index 2ba9f38c11..80df964273 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp @@ -1,785 +1,785 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "Tev.h" -#include "EfbInterface.h" -#include "TextureSampler.h" -#include "Statistics.h" -#include "VideoConfig.h" -#include "DebugUtil.h" - -#include - -void Tev::Init() -{ - FixedConstants[0] = 0; - FixedConstants[1] = 31; - FixedConstants[2] = 63; - FixedConstants[3] = 95; - FixedConstants[4] = 127; - FixedConstants[5] = 159; - FixedConstants[6] = 191; - FixedConstants[7] = 223; - FixedConstants[8] = 255; - - for (int i = 0; i < 4; i++) - Zero16[i] = 0; - - m_ColorInputLUT[0][0] = &Reg[0][RED_C]; m_ColorInputLUT[0][1] = &Reg[0][GRN_C]; m_ColorInputLUT[0][2] = &Reg[0][BLU_C]; // prev.rgb - m_ColorInputLUT[1][0] = &Reg[0][ALP_C]; m_ColorInputLUT[1][1] = &Reg[0][ALP_C]; m_ColorInputLUT[1][2] = &Reg[0][ALP_C]; // prev.aaa - m_ColorInputLUT[2][0] = &Reg[1][RED_C]; m_ColorInputLUT[2][1] = &Reg[1][GRN_C]; m_ColorInputLUT[2][2] = &Reg[1][BLU_C]; // c0.rgb - m_ColorInputLUT[3][0] = &Reg[1][ALP_C]; m_ColorInputLUT[3][1] = &Reg[1][ALP_C]; m_ColorInputLUT[3][2] = &Reg[1][ALP_C]; // c0.aaa - m_ColorInputLUT[4][0] = &Reg[2][RED_C]; m_ColorInputLUT[4][1] = &Reg[2][GRN_C]; m_ColorInputLUT[4][2] = &Reg[2][BLU_C]; // c1.rgb - m_ColorInputLUT[5][0] = &Reg[2][ALP_C]; m_ColorInputLUT[5][1] = &Reg[2][ALP_C]; m_ColorInputLUT[5][2] = &Reg[2][ALP_C]; // c1.aaa - m_ColorInputLUT[6][0] = &Reg[3][RED_C]; m_ColorInputLUT[6][1] = &Reg[3][GRN_C]; m_ColorInputLUT[6][2] = &Reg[3][BLU_C]; // c2.rgb - m_ColorInputLUT[7][0] = &Reg[3][ALP_C]; m_ColorInputLUT[7][1] = &Reg[3][ALP_C]; m_ColorInputLUT[7][2] = &Reg[3][ALP_C]; // c2.aaa - m_ColorInputLUT[8][0] = &TexColor[RED_C]; m_ColorInputLUT[8][1] = &TexColor[GRN_C]; m_ColorInputLUT[8][2] = &TexColor[BLU_C]; // tex.rgb - m_ColorInputLUT[9][0] = &TexColor[ALP_C]; m_ColorInputLUT[9][1] = &TexColor[ALP_C]; m_ColorInputLUT[9][2] = &TexColor[ALP_C]; // tex.aaa - m_ColorInputLUT[10][0] = &RasColor[RED_C]; m_ColorInputLUT[10][1] = &RasColor[GRN_C]; m_ColorInputLUT[10][2] = &RasColor[BLU_C]; // ras.rgb - m_ColorInputLUT[11][0] = &RasColor[ALP_C]; m_ColorInputLUT[11][1] = &RasColor[ALP_C]; m_ColorInputLUT[11][2] = &RasColor[ALP_C]; // ras.rgb - m_ColorInputLUT[12][0] = &FixedConstants[8]; m_ColorInputLUT[12][1] = &FixedConstants[8]; m_ColorInputLUT[12][2] = &FixedConstants[8]; // one - m_ColorInputLUT[13][0] = &FixedConstants[4]; m_ColorInputLUT[13][1] = &FixedConstants[4]; m_ColorInputLUT[13][2] = &FixedConstants[4]; // half - m_ColorInputLUT[14][0] = &StageKonst[0]; m_ColorInputLUT[14][1] = &StageKonst[1]; m_ColorInputLUT[14][2] = &StageKonst[2]; // konst - m_ColorInputLUT[15][0] = &FixedConstants[0]; m_ColorInputLUT[15][1] = &FixedConstants[0]; m_ColorInputLUT[15][2] = &FixedConstants[0]; // zero - - m_AlphaInputLUT[0] = &Reg[0][ALP_C]; // prev.a - m_AlphaInputLUT[1] = &Reg[1][ALP_C]; // c0.a - m_AlphaInputLUT[2] = &Reg[2][ALP_C]; // c1.a - m_AlphaInputLUT[3] = &Reg[3][ALP_C]; // c2.a - m_AlphaInputLUT[4] = &TexColor[ALP_C]; // tex.a - m_AlphaInputLUT[5] = &RasColor[ALP_C]; // ras.a - m_AlphaInputLUT[6] = &StageKonst[ALP_C]; // konst.a - m_AlphaInputLUT[7] = &Zero16[ALP_C]; // zero - - for (int comp = 0; comp < 4; comp++) - { - m_KonstLUT[0][comp] = &FixedConstants[8]; - m_KonstLUT[1][comp] = &FixedConstants[7]; - m_KonstLUT[2][comp] = &FixedConstants[6]; - m_KonstLUT[3][comp] = &FixedConstants[5]; - m_KonstLUT[4][comp] = &FixedConstants[4]; - m_KonstLUT[5][comp] = &FixedConstants[3]; - m_KonstLUT[6][comp] = &FixedConstants[2]; - m_KonstLUT[7][comp] = &FixedConstants[1]; - - m_KonstLUT[12][comp] = &KonstantColors[0][comp]; - m_KonstLUT[13][comp] = &KonstantColors[1][comp]; - m_KonstLUT[14][comp] = &KonstantColors[2][comp]; - m_KonstLUT[15][comp] = &KonstantColors[3][comp]; - - m_KonstLUT[16][comp] = &KonstantColors[0][RED_C]; - m_KonstLUT[17][comp] = &KonstantColors[1][RED_C]; - m_KonstLUT[18][comp] = &KonstantColors[2][RED_C]; - m_KonstLUT[19][comp] = &KonstantColors[3][RED_C]; - m_KonstLUT[20][comp] = &KonstantColors[0][GRN_C]; - m_KonstLUT[21][comp] = &KonstantColors[1][GRN_C]; - m_KonstLUT[22][comp] = &KonstantColors[2][GRN_C]; - m_KonstLUT[23][comp] = &KonstantColors[3][GRN_C]; - m_KonstLUT[24][comp] = &KonstantColors[0][BLU_C]; - m_KonstLUT[25][comp] = &KonstantColors[1][BLU_C]; - m_KonstLUT[26][comp] = &KonstantColors[2][BLU_C]; - m_KonstLUT[27][comp] = &KonstantColors[3][BLU_C]; - m_KonstLUT[28][comp] = &KonstantColors[0][ALP_C]; - m_KonstLUT[29][comp] = &KonstantColors[1][ALP_C]; - m_KonstLUT[30][comp] = &KonstantColors[2][ALP_C]; - m_KonstLUT[31][comp] = &KonstantColors[3][ALP_C]; - } - - m_BiasLUT[0] = 0; - m_BiasLUT[1] = 128; - m_BiasLUT[2] = -128; - m_BiasLUT[3] = 0; - - m_ScaleLShiftLUT[0] = 0; - m_ScaleLShiftLUT[1] = 1; - m_ScaleLShiftLUT[2] = 2; - m_ScaleLShiftLUT[3] = 0; - - m_ScaleRShiftLUT[0] = 0; - m_ScaleRShiftLUT[1] = 0; - m_ScaleRShiftLUT[2] = 0; - m_ScaleRShiftLUT[3] = 1; -} - -inline s16 Clamp255(s16 in) -{ - return in>255?255:(in<0?0:in); -} - -inline s16 Clamp1024(s16 in) -{ - return in>1023?1023:(in<-1024?-1024:in); -} - -inline void Tev::SetRasColor(int colorChan, int swaptable) -{ - switch(colorChan) - { - case 0: // Color0 - { - u8 *color = Color[0]; - RasColor[0] = color[bpmem.tevksel[swaptable].swap1]; - RasColor[1] = color[bpmem.tevksel[swaptable].swap2]; - swaptable++; - RasColor[2] = color[bpmem.tevksel[swaptable].swap1]; - RasColor[3] = color[bpmem.tevksel[swaptable].swap2]; - } - break; - case 1: // Color1 - { - u8 *color = Color[1]; - RasColor[0] = color[bpmem.tevksel[swaptable].swap1]; - RasColor[1] = color[bpmem.tevksel[swaptable].swap2]; - swaptable++; - RasColor[2] = color[bpmem.tevksel[swaptable].swap1]; - RasColor[3] = color[bpmem.tevksel[swaptable].swap2]; - } - break; - case 5: // alpha bump - { - for(int i = 0; i < 4; i++) - RasColor[i] = AlphaBump; - } - break; - case 6: // alpha bump normalized - { - u8 normalized = AlphaBump | AlphaBump >> 5; - for(int i = 0; i < 4; i++) - RasColor[i] = normalized; - } - break; - default: // zero - { - for(int i = 0; i < 4; i++) - RasColor[i] = 0; - } - break; - } -} - -void Tev::DrawColorRegular(TevStageCombiner::ColorCombiner &cc) -{ - InputRegType InputReg; - - for (int i = 0; i < 3; i++) - { - InputReg.a = *m_ColorInputLUT[cc.a][i]; - InputReg.b = *m_ColorInputLUT[cc.b][i]; - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - - u16 c = InputReg.c + (InputReg.c >> 7); - - s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); - temp = cc.op?(-temp >> 8):(temp >> 8); - - s32 result = InputReg.d + temp + m_BiasLUT[cc.bias]; - result = result << m_ScaleLShiftLUT[cc.shift]; - result = result >> m_ScaleRShiftLUT[cc.shift]; - - Reg[cc.dest][RED_C + i] = result; - } -} - -void Tev::DrawColorCompare(TevStageCombiner::ColorCombiner &cc) -{ - int cmp = (cc.shift<<1)|cc.op|8; // comparemode stored here - - u32 a; - u32 b; - - InputRegType InputReg; - - switch(cmp) { - case TEVCMP_R8_GT: - { - a = *m_ColorInputLUT[cc.a][RED_C] & 0xff; - b = *m_ColorInputLUT[cc.b][RED_C] & 0xff; - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - } - break; - - case TEVCMP_R8_EQ: - { - a = *m_ColorInputLUT[cc.a][RED_C] & 0xff; - b = *m_ColorInputLUT[cc.b][RED_C] & 0xff; - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - } - break; - case TEVCMP_GR16_GT: - { - a = ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); - b = ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - } - break; - case TEVCMP_GR16_EQ: - { - a = ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); - b = ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - } - break; - case TEVCMP_BGR24_GT: - { - a = ((*m_ColorInputLUT[cc.a][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); - b = ((*m_ColorInputLUT[cc.b][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - } - break; - case TEVCMP_BGR24_EQ: - { - a = ((*m_ColorInputLUT[cc.a][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); - b = ((*m_ColorInputLUT[cc.b][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); - for (int i = 0; i < 3; i++) - { - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - } - break; - case TEVCMP_RGB8_GT: - for (int i = 0; i < 3; i++) - { - InputReg.a = *m_ColorInputLUT[cc.a][i]; - InputReg.b = *m_ColorInputLUT[cc.b][i]; - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((InputReg.a > InputReg.b) ? InputReg.c : 0); - } - break; - case TEVCMP_RGB8_EQ: - for (int i = 0; i < 3; i++) - { - InputReg.a = *m_ColorInputLUT[cc.a][i]; - InputReg.b = *m_ColorInputLUT[cc.b][i]; - InputReg.c = *m_ColorInputLUT[cc.c][i]; - InputReg.d = *m_ColorInputLUT[cc.d][i]; - Reg[cc.dest][RED_C + i] = InputReg.d + ((InputReg.a == InputReg.b) ? InputReg.c : 0); - } - break; - } -} - -void Tev::DrawAlphaRegular(TevStageCombiner::AlphaCombiner &ac) -{ - InputRegType InputReg; - - InputReg.a = *m_AlphaInputLUT[ac.a]; - InputReg.b = *m_AlphaInputLUT[ac.b]; - InputReg.c = *m_AlphaInputLUT[ac.c]; - InputReg.d = *m_AlphaInputLUT[ac.d]; - - u16 c = InputReg.c + (InputReg.c >> 7); - - s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); - temp = ac.op?(-temp >> 8):(temp >> 8); - - s32 result = InputReg.d + temp + m_BiasLUT[ac.bias]; - result = result << m_ScaleLShiftLUT[ac.shift]; - result = result >> m_ScaleRShiftLUT[ac.shift]; - - Reg[ac.dest][ALP_C] = result; -} - -void Tev::DrawAlphaCompare(TevStageCombiner::AlphaCombiner &ac) -{ - int cmp = (ac.shift<<1)|ac.op|8; // comparemode stored here - - u32 a; - u32 b; - - InputRegType InputReg; - - switch(cmp) { - case TEVCMP_R8_GT: - { - a = m_AlphaInputLUT[ac.a][RED_C] & 0xff; - b = m_AlphaInputLUT[ac.b][RED_C] & 0xff; - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - break; - - case TEVCMP_R8_EQ: - { - a = m_AlphaInputLUT[ac.a][RED_C] & 0xff; - b = m_AlphaInputLUT[ac.b][RED_C] & 0xff; - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - break; - case TEVCMP_GR16_GT: - { - a = ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); - b = ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - break; - case TEVCMP_GR16_EQ: - { - a = ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); - b = ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - break; - case TEVCMP_BGR24_GT: - { - a = ((m_AlphaInputLUT[ac.a][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); - b = ((m_AlphaInputLUT[ac.b][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); - } - break; - case TEVCMP_BGR24_EQ: - { - a = ((m_AlphaInputLUT[ac.a][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); - b = ((m_AlphaInputLUT[ac.b][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); - } - break; - case TEVCMP_A8_GT: - { - InputReg.a = m_AlphaInputLUT[ac.a][ALP_C]; - InputReg.b = m_AlphaInputLUT[ac.b][ALP_C]; - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((InputReg.a > InputReg.b) ? InputReg.c : 0); - } - break; - case TEVCMP_A8_EQ: - { - InputReg.a = m_AlphaInputLUT[ac.a][ALP_C]; - InputReg.b = m_AlphaInputLUT[ac.b][ALP_C]; - InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; - InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - Reg[ac.dest][ALP_C] = InputReg.d + ((InputReg.a == InputReg.b) ? InputReg.c : 0); - } - break; - } -} - -static bool AlphaCompare(int alpha, int ref, int comp) -{ - switch(comp) { - case ALPHACMP_ALWAYS: return true; - case ALPHACMP_NEVER: return false; - case ALPHACMP_LEQUAL: return alpha <= ref; - case ALPHACMP_LESS: return alpha < ref; - case ALPHACMP_GEQUAL: return alpha >= ref; - case ALPHACMP_GREATER: return alpha > ref; - case ALPHACMP_EQUAL: return alpha == ref; - case ALPHACMP_NEQUAL: return alpha != ref; - } - return true; -} - -static bool AlphaTest(int alpha) -{ - bool comp0 = AlphaCompare(alpha, bpmem.alphaFunc.ref0, bpmem.alphaFunc.comp0); - bool comp1 = AlphaCompare(alpha, bpmem.alphaFunc.ref1, bpmem.alphaFunc.comp1); - - switch (bpmem.alphaFunc.logic) { - case 0: return comp0 && comp1; // and - case 1: return comp0 || comp1; // or - case 2: return comp0 ^ comp1; // xor - case 3: return !(comp0 ^ comp1); // xnor - } - return true; -} - -inline s32 WrapIndirectCoord(s32 coord, int wrapMode) -{ - switch (wrapMode) { - case ITW_OFF: - return coord; - case ITW_256: - return (coord % (256 << 7)); - case ITW_128: - return (coord % (128 << 7)); - case ITW_64: - return (coord % (64 << 7)); - case ITW_32: - return (coord % (32 << 7)); - case ITW_16: - return (coord % (16 << 7)); - case ITW_0: - return 0; - } - return 0; -} - -void Tev::Indirect(unsigned int stageNum, s32 s, s32 t) -{ - TevStageIndirect &indirect = bpmem.tevind[stageNum]; - u8 *indmap = IndirectTex[indirect.bt]; - - s32 indcoord[3]; - - // alpha bump select - switch (indirect.bs) { - case ITBA_OFF: - AlphaBump = 0; - break; - case ITBA_S: - AlphaBump = indmap[ALP_C]; - break; - case ITBA_T: - AlphaBump = indmap[BLU_C]; - break; - case ITBA_U: - AlphaBump = indmap[GRN_C]; - break; - } - - // bias select - s16 biasValue = indirect.fmt==ITF_8?-128:1; - s16 bias[3]; - bias[0] = indirect.bias&1?biasValue:0; - bias[1] = indirect.bias&2?biasValue:0; - bias[2] = indirect.bias&4?biasValue:0; - - // format - switch(indirect.fmt) { - case ITF_8: - indcoord[0] = indmap[ALP_C] + bias[0]; - indcoord[1] = indmap[BLU_C] + bias[1]; - indcoord[2] = indmap[GRN_C] + bias[2]; - AlphaBump = AlphaBump & 0xf8; - break; - case ITF_5: - indcoord[0] = (indmap[ALP_C] & 0x1f) + bias[0]; - indcoord[1] = (indmap[BLU_C] & 0x1f) + bias[1]; - indcoord[2] = (indmap[GRN_C] & 0x1f) + bias[2]; - AlphaBump = AlphaBump & 0xe0; - break; - case ITF_4: - indcoord[0] = (indmap[ALP_C] & 0x0f) + bias[0]; - indcoord[1] = (indmap[BLU_C] & 0x0f) + bias[1]; - indcoord[2] = (indmap[GRN_C] & 0x0f) + bias[2]; - AlphaBump = AlphaBump & 0xf0; - break; - case ITF_3: - indcoord[0] = (indmap[ALP_C] & 0x07) + bias[0]; - indcoord[1] = (indmap[BLU_C] & 0x07) + bias[1]; - indcoord[2] = (indmap[GRN_C] & 0x07) + bias[2]; - AlphaBump = AlphaBump & 0xf8; - break; - default: - PanicAlert("Tev::Indirect"); - return; - } - - s64 indtevtrans[2] = { 0,0 }; - - // matrix multiply - int indmtxid = indirect.mid & 3; - if (indmtxid) - { - IND_MTX &indmtx = bpmem.indmtx[indmtxid - 1]; - int scale = ((u32)indmtx.col0.s0 << 0) | - ((u32)indmtx.col1.s1 << 2) | - ((u32)indmtx.col2.s2 << 4); - - int shift; - - switch (indirect.mid & 12) { - case 0: - shift = 3 + (17 - scale); - indtevtrans[0] = indmtx.col0.ma * indcoord[0] + indmtx.col1.mc * indcoord[1] + indmtx.col2.me * indcoord[2]; - indtevtrans[1] = indmtx.col0.mb * indcoord[0] + indmtx.col1.md * indcoord[1] + indmtx.col2.mf * indcoord[2]; - break; - case 4: // s matrix - shift = 8 + (17 - scale); - indtevtrans[0] = s * indcoord[0]; - indtevtrans[1] = t * indcoord[0]; - break; - case 8: // t matrix - shift = 8 + (17 - scale); - indtevtrans[0] = s * indcoord[1]; - indtevtrans[1] = t * indcoord[1]; - break; - default: - return; - } - - indtevtrans[0] = shift >= 0 ? indtevtrans[0] >> shift : indtevtrans[0] << -shift; - indtevtrans[1] = shift >= 0 ? indtevtrans[1] >> shift : indtevtrans[1] << -shift; - } - - if (indirect.fb_addprev) - { - TexCoord.s += (int)(WrapIndirectCoord(s, indirect.sw) + indtevtrans[0]); - TexCoord.t += (int)(WrapIndirectCoord(t, indirect.tw) + indtevtrans[1]); - } - else - { - TexCoord.s = (int)(WrapIndirectCoord(s, indirect.sw) + indtevtrans[0]); - TexCoord.t = (int)(WrapIndirectCoord(t, indirect.tw) + indtevtrans[1]); - } -} - -void Tev::Draw() -{ - _assert_(Position[0] >= 0 && Position[0] < EFB_WIDTH); - _assert_(Position[1] >= 0 && Position[1] < EFB_HEIGHT); - - INCSTAT(stats.thisFrame.tevPixelsIn); - - for (unsigned int stageNum = 0; stageNum < bpmem.genMode.numindstages; stageNum++) - { - int stageNum2 = stageNum >> 1; - int stageOdd = stageNum&1; - - u32 texcoordSel = bpmem.tevindref.getTexCoord(stageNum); - u32 texmap = bpmem.tevindref.getTexMap(stageNum); - - const TEXSCALE& texscale = bpmem.texscale[stageNum2]; - s32 scaleS = stageOdd ? texscale.ss1:texscale.ss0; - s32 scaleT = stageOdd ? texscale.ts1:texscale.ts0; - - TextureSampler::Sample(Uv[texcoordSel].s >> scaleS, Uv[texcoordSel].t >> scaleT, - IndirectLod[stageNum], IndirectLinear[stageNum], texmap, IndirectTex[stageNum]); - -#ifdef _DEBUG - if (g_Config.bDumpTevStages) - { - u8 stage[4] = {(u8)IndirectTex[stageNum][3], (u8)IndirectTex[stageNum][2], (u8)IndirectTex[stageNum][1], 255}; - DebugUtil::DrawObjectBuffer(Position[0], Position[1], stage, 16+stageNum, "Ind"); - } -#endif - } - - for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) - { - int stageNum2 = stageNum >> 1; - int stageOdd = stageNum&1; - TwoTevStageOrders &order = bpmem.tevorders[stageNum2]; - TevKSel &kSel = bpmem.tevksel[stageNum2]; - - // stage combiners - TevStageCombiner::ColorCombiner &cc = bpmem.combiners[stageNum].colorC; - TevStageCombiner::AlphaCombiner &ac = bpmem.combiners[stageNum].alphaC; - - int texcoordSel = order.getTexCoord(stageOdd); - int texmap = order.getTexMap(stageOdd); - - Indirect(stageNum, Uv[texcoordSel].s, Uv[texcoordSel].t); - - // sample texture - if (order.getEnable(stageOdd)) - { - u8 texel[4]; - - TextureSampler::Sample(TexCoord.s, TexCoord.t, TextureLod[stageNum], TextureLinear[stageNum], texmap, texel); - - int swaptable = ac.tswap * 2; - - TexColor[0] = texel[bpmem.tevksel[swaptable].swap1]; - TexColor[1] = texel[bpmem.tevksel[swaptable].swap2]; - swaptable++; - TexColor[2] = texel[bpmem.tevksel[swaptable].swap1]; - TexColor[3] = texel[bpmem.tevksel[swaptable].swap2]; - } - - // set konst for this stage - int kc = kSel.getKC(stageOdd); - int ka = kSel.getKA(stageOdd); - StageKonst[RED_C] = *(m_KonstLUT[kc][RED_C]); - StageKonst[GRN_C] = *(m_KonstLUT[kc][GRN_C]); - StageKonst[BLU_C] = *(m_KonstLUT[kc][BLU_C]); - StageKonst[ALP_C] = *(m_KonstLUT[ka][ALP_C]); - - // set color - SetRasColor(order.getColorChan(stageOdd), ac.rswap * 2); - - // combine inputs - if (cc.bias != 3) - DrawColorRegular(cc); - else - DrawColorCompare(cc); - - if (cc.clamp) - { - Reg[cc.dest][RED_C] = Clamp255(Reg[cc.dest][RED_C]); - Reg[cc.dest][GRN_C] = Clamp255(Reg[cc.dest][GRN_C]); - Reg[cc.dest][BLU_C] = Clamp255(Reg[cc.dest][BLU_C]); - } - else - { - Reg[cc.dest][RED_C] = Clamp1024(Reg[cc.dest][RED_C]); - Reg[cc.dest][GRN_C] = Clamp1024(Reg[cc.dest][GRN_C]); - Reg[cc.dest][BLU_C] = Clamp1024(Reg[cc.dest][BLU_C]); - } - - if (ac.bias != 3) - DrawAlphaRegular(ac); - else - DrawAlphaCompare(ac); - - if (ac.clamp) - Reg[ac.dest][ALP_C] = Clamp255(Reg[ac.dest][ALP_C]); - else - Reg[ac.dest][ALP_C] = Clamp1024(Reg[ac.dest][ALP_C]); - -#ifdef _DEBUG - if (g_Config.bDumpTevStages) - { - u8 stage[4] = {(u8)Reg[0][0], (u8)Reg[0][1], (u8)Reg[0][2], (u8)Reg[0][3]}; - DebugUtil::DrawObjectBuffer(Position[0], Position[1], stage, stageNum, "Stage"); - } -#endif - } - - // convert to 8 bits per component - u8 output[4] = {(u8)Reg[0][0], (u8)Reg[0][1], (u8)Reg[0][2], (u8)Reg[0][3]}; - - if (!AlphaTest(output[ALP_C])) - return; - - // z texture - if (bpmem.ztex2.op) - { - u32 ztex = bpmem.ztex1.bias; - switch (bpmem.ztex2.type) { - case 0: // 8 bit - ztex += TexColor[ALP_C]; - break; - case 1: // 16 bit - ztex += TexColor[ALP_C] << 8 | TexColor[RED_C]; - break; - case 2: // 24 bit - ztex += TexColor[RED_C] << 16 | TexColor[GRN_C] << 8 | TexColor[BLU_C]; - break; - } - - if (bpmem.ztex2.op == ZTEXTURE_ADD) - ztex += Position[2]; - - Position[2] = ztex & 0x00ffffff; - } - - // fog - if (bpmem.fog.c_proj_fsel.fsel) - { - float ze; - - if (bpmem.fog.c_proj_fsel.proj == 0) - { - // perspective - // ze = A/(B - Zs) - s32 denom = bpmem.fog.b_magnitude - (Position[2] >> bpmem.fog.b_shift); - ze = bpmem.fog.a.GetA() / (float)denom; - } - else - { - // orthographic - // ze = a*Zs - ze = bpmem.fog.a.GetA() / (float)Position[2]; - } - - ze = (ze * (float)0xffffff) - bpmem.fog.c_proj_fsel.GetC(); - - // clamp 0 to 1 - float fog = (ze<0.0f) ? 0.0f : ((ze>1.0f) ? 1.0f : ze); - - switch (bpmem.fog.c_proj_fsel.fsel) - { - case 4: // exp - fog = 1.0f - pow(2.0f, -8.0f * fog); - break; - case 5: // exp2 - fog = 1.0f - pow(2.0f, -8.0f * fog * fog); - break; - case 6: // backward exp - fog = 1.0f - fog; - fog = 1.0f - pow(2.0f, -8.0f * fog); - break; - case 7: // backward exp2 - fog = 1.0f - fog; - fog = 1.0f - pow(2.0f, -8.0f * fog * fog); - break; - } - - // lerp from output to fog color - u32 fogInt = (u32)(fog * 256); - u32 invFog = 256 - fogInt; - - output[RED_C] = (output[RED_C] * invFog + fogInt * bpmem.fog.color.r) >> 8; - output[GRN_C] = (output[GRN_C] * invFog + fogInt * bpmem.fog.color.g) >> 8; - output[BLU_C] = (output[BLU_C] * invFog + fogInt * bpmem.fog.color.b) >> 8; - } - - if (!bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) - { - if (!EfbInterface::ZCompare(Position[0], Position[1], Position[2])) - return; - } - - INCSTAT(stats.thisFrame.tevPixelsOut); - - EfbInterface::BlendTev(Position[0], Position[1], output); -} - -void Tev::SetRegColor(int reg, int comp, bool konst, s16 color) -{ - if (konst) - { - KonstantColors[reg][comp] = color; - } - else - { - Reg[reg][comp] = color; - } -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "Tev.h" +#include "EfbInterface.h" +#include "TextureSampler.h" +#include "Statistics.h" +#include "VideoConfig.h" +#include "DebugUtil.h" + +#include + +void Tev::Init() +{ + FixedConstants[0] = 0; + FixedConstants[1] = 31; + FixedConstants[2] = 63; + FixedConstants[3] = 95; + FixedConstants[4] = 127; + FixedConstants[5] = 159; + FixedConstants[6] = 191; + FixedConstants[7] = 223; + FixedConstants[8] = 255; + + for (int i = 0; i < 4; i++) + Zero16[i] = 0; + + m_ColorInputLUT[0][0] = &Reg[0][RED_C]; m_ColorInputLUT[0][1] = &Reg[0][GRN_C]; m_ColorInputLUT[0][2] = &Reg[0][BLU_C]; // prev.rgb + m_ColorInputLUT[1][0] = &Reg[0][ALP_C]; m_ColorInputLUT[1][1] = &Reg[0][ALP_C]; m_ColorInputLUT[1][2] = &Reg[0][ALP_C]; // prev.aaa + m_ColorInputLUT[2][0] = &Reg[1][RED_C]; m_ColorInputLUT[2][1] = &Reg[1][GRN_C]; m_ColorInputLUT[2][2] = &Reg[1][BLU_C]; // c0.rgb + m_ColorInputLUT[3][0] = &Reg[1][ALP_C]; m_ColorInputLUT[3][1] = &Reg[1][ALP_C]; m_ColorInputLUT[3][2] = &Reg[1][ALP_C]; // c0.aaa + m_ColorInputLUT[4][0] = &Reg[2][RED_C]; m_ColorInputLUT[4][1] = &Reg[2][GRN_C]; m_ColorInputLUT[4][2] = &Reg[2][BLU_C]; // c1.rgb + m_ColorInputLUT[5][0] = &Reg[2][ALP_C]; m_ColorInputLUT[5][1] = &Reg[2][ALP_C]; m_ColorInputLUT[5][2] = &Reg[2][ALP_C]; // c1.aaa + m_ColorInputLUT[6][0] = &Reg[3][RED_C]; m_ColorInputLUT[6][1] = &Reg[3][GRN_C]; m_ColorInputLUT[6][2] = &Reg[3][BLU_C]; // c2.rgb + m_ColorInputLUT[7][0] = &Reg[3][ALP_C]; m_ColorInputLUT[7][1] = &Reg[3][ALP_C]; m_ColorInputLUT[7][2] = &Reg[3][ALP_C]; // c2.aaa + m_ColorInputLUT[8][0] = &TexColor[RED_C]; m_ColorInputLUT[8][1] = &TexColor[GRN_C]; m_ColorInputLUT[8][2] = &TexColor[BLU_C]; // tex.rgb + m_ColorInputLUT[9][0] = &TexColor[ALP_C]; m_ColorInputLUT[9][1] = &TexColor[ALP_C]; m_ColorInputLUT[9][2] = &TexColor[ALP_C]; // tex.aaa + m_ColorInputLUT[10][0] = &RasColor[RED_C]; m_ColorInputLUT[10][1] = &RasColor[GRN_C]; m_ColorInputLUT[10][2] = &RasColor[BLU_C]; // ras.rgb + m_ColorInputLUT[11][0] = &RasColor[ALP_C]; m_ColorInputLUT[11][1] = &RasColor[ALP_C]; m_ColorInputLUT[11][2] = &RasColor[ALP_C]; // ras.rgb + m_ColorInputLUT[12][0] = &FixedConstants[8]; m_ColorInputLUT[12][1] = &FixedConstants[8]; m_ColorInputLUT[12][2] = &FixedConstants[8]; // one + m_ColorInputLUT[13][0] = &FixedConstants[4]; m_ColorInputLUT[13][1] = &FixedConstants[4]; m_ColorInputLUT[13][2] = &FixedConstants[4]; // half + m_ColorInputLUT[14][0] = &StageKonst[0]; m_ColorInputLUT[14][1] = &StageKonst[1]; m_ColorInputLUT[14][2] = &StageKonst[2]; // konst + m_ColorInputLUT[15][0] = &FixedConstants[0]; m_ColorInputLUT[15][1] = &FixedConstants[0]; m_ColorInputLUT[15][2] = &FixedConstants[0]; // zero + + m_AlphaInputLUT[0] = &Reg[0][ALP_C]; // prev.a + m_AlphaInputLUT[1] = &Reg[1][ALP_C]; // c0.a + m_AlphaInputLUT[2] = &Reg[2][ALP_C]; // c1.a + m_AlphaInputLUT[3] = &Reg[3][ALP_C]; // c2.a + m_AlphaInputLUT[4] = &TexColor[ALP_C]; // tex.a + m_AlphaInputLUT[5] = &RasColor[ALP_C]; // ras.a + m_AlphaInputLUT[6] = &StageKonst[ALP_C]; // konst.a + m_AlphaInputLUT[7] = &Zero16[ALP_C]; // zero + + for (int comp = 0; comp < 4; comp++) + { + m_KonstLUT[0][comp] = &FixedConstants[8]; + m_KonstLUT[1][comp] = &FixedConstants[7]; + m_KonstLUT[2][comp] = &FixedConstants[6]; + m_KonstLUT[3][comp] = &FixedConstants[5]; + m_KonstLUT[4][comp] = &FixedConstants[4]; + m_KonstLUT[5][comp] = &FixedConstants[3]; + m_KonstLUT[6][comp] = &FixedConstants[2]; + m_KonstLUT[7][comp] = &FixedConstants[1]; + + m_KonstLUT[12][comp] = &KonstantColors[0][comp]; + m_KonstLUT[13][comp] = &KonstantColors[1][comp]; + m_KonstLUT[14][comp] = &KonstantColors[2][comp]; + m_KonstLUT[15][comp] = &KonstantColors[3][comp]; + + m_KonstLUT[16][comp] = &KonstantColors[0][RED_C]; + m_KonstLUT[17][comp] = &KonstantColors[1][RED_C]; + m_KonstLUT[18][comp] = &KonstantColors[2][RED_C]; + m_KonstLUT[19][comp] = &KonstantColors[3][RED_C]; + m_KonstLUT[20][comp] = &KonstantColors[0][GRN_C]; + m_KonstLUT[21][comp] = &KonstantColors[1][GRN_C]; + m_KonstLUT[22][comp] = &KonstantColors[2][GRN_C]; + m_KonstLUT[23][comp] = &KonstantColors[3][GRN_C]; + m_KonstLUT[24][comp] = &KonstantColors[0][BLU_C]; + m_KonstLUT[25][comp] = &KonstantColors[1][BLU_C]; + m_KonstLUT[26][comp] = &KonstantColors[2][BLU_C]; + m_KonstLUT[27][comp] = &KonstantColors[3][BLU_C]; + m_KonstLUT[28][comp] = &KonstantColors[0][ALP_C]; + m_KonstLUT[29][comp] = &KonstantColors[1][ALP_C]; + m_KonstLUT[30][comp] = &KonstantColors[2][ALP_C]; + m_KonstLUT[31][comp] = &KonstantColors[3][ALP_C]; + } + + m_BiasLUT[0] = 0; + m_BiasLUT[1] = 128; + m_BiasLUT[2] = -128; + m_BiasLUT[3] = 0; + + m_ScaleLShiftLUT[0] = 0; + m_ScaleLShiftLUT[1] = 1; + m_ScaleLShiftLUT[2] = 2; + m_ScaleLShiftLUT[3] = 0; + + m_ScaleRShiftLUT[0] = 0; + m_ScaleRShiftLUT[1] = 0; + m_ScaleRShiftLUT[2] = 0; + m_ScaleRShiftLUT[3] = 1; +} + +inline s16 Clamp255(s16 in) +{ + return in>255?255:(in<0?0:in); +} + +inline s16 Clamp1024(s16 in) +{ + return in>1023?1023:(in<-1024?-1024:in); +} + +inline void Tev::SetRasColor(int colorChan, int swaptable) +{ + switch(colorChan) + { + case 0: // Color0 + { + u8 *color = Color[0]; + RasColor[0] = color[bpmem.tevksel[swaptable].swap1]; + RasColor[1] = color[bpmem.tevksel[swaptable].swap2]; + swaptable++; + RasColor[2] = color[bpmem.tevksel[swaptable].swap1]; + RasColor[3] = color[bpmem.tevksel[swaptable].swap2]; + } + break; + case 1: // Color1 + { + u8 *color = Color[1]; + RasColor[0] = color[bpmem.tevksel[swaptable].swap1]; + RasColor[1] = color[bpmem.tevksel[swaptable].swap2]; + swaptable++; + RasColor[2] = color[bpmem.tevksel[swaptable].swap1]; + RasColor[3] = color[bpmem.tevksel[swaptable].swap2]; + } + break; + case 5: // alpha bump + { + for(int i = 0; i < 4; i++) + RasColor[i] = AlphaBump; + } + break; + case 6: // alpha bump normalized + { + u8 normalized = AlphaBump | AlphaBump >> 5; + for(int i = 0; i < 4; i++) + RasColor[i] = normalized; + } + break; + default: // zero + { + for(int i = 0; i < 4; i++) + RasColor[i] = 0; + } + break; + } +} + +void Tev::DrawColorRegular(TevStageCombiner::ColorCombiner &cc) +{ + InputRegType InputReg; + + for (int i = 0; i < 3; i++) + { + InputReg.a = *m_ColorInputLUT[cc.a][i]; + InputReg.b = *m_ColorInputLUT[cc.b][i]; + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + + u16 c = InputReg.c + (InputReg.c >> 7); + + s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); + temp = cc.op?(-temp >> 8):(temp >> 8); + + s32 result = InputReg.d + temp + m_BiasLUT[cc.bias]; + result = result << m_ScaleLShiftLUT[cc.shift]; + result = result >> m_ScaleRShiftLUT[cc.shift]; + + Reg[cc.dest][RED_C + i] = result; + } +} + +void Tev::DrawColorCompare(TevStageCombiner::ColorCombiner &cc) +{ + int cmp = (cc.shift<<1)|cc.op|8; // comparemode stored here + + u32 a; + u32 b; + + InputRegType InputReg; + + switch(cmp) { + case TEVCMP_R8_GT: + { + a = *m_ColorInputLUT[cc.a][RED_C] & 0xff; + b = *m_ColorInputLUT[cc.b][RED_C] & 0xff; + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + } + break; + + case TEVCMP_R8_EQ: + { + a = *m_ColorInputLUT[cc.a][RED_C] & 0xff; + b = *m_ColorInputLUT[cc.b][RED_C] & 0xff; + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + } + break; + case TEVCMP_GR16_GT: + { + a = ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); + b = ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + } + break; + case TEVCMP_GR16_EQ: + { + a = ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); + b = ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + } + break; + case TEVCMP_BGR24_GT: + { + a = ((*m_ColorInputLUT[cc.a][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); + b = ((*m_ColorInputLUT[cc.b][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + } + break; + case TEVCMP_BGR24_EQ: + { + a = ((*m_ColorInputLUT[cc.a][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.a][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.a][RED_C] & 0xff); + b = ((*m_ColorInputLUT[cc.b][BLU_C] & 0xff) << 16) | ((*m_ColorInputLUT[cc.b][GRN_C] & 0xff) << 8) | (*m_ColorInputLUT[cc.b][RED_C] & 0xff); + for (int i = 0; i < 3; i++) + { + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + } + break; + case TEVCMP_RGB8_GT: + for (int i = 0; i < 3; i++) + { + InputReg.a = *m_ColorInputLUT[cc.a][i]; + InputReg.b = *m_ColorInputLUT[cc.b][i]; + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((InputReg.a > InputReg.b) ? InputReg.c : 0); + } + break; + case TEVCMP_RGB8_EQ: + for (int i = 0; i < 3; i++) + { + InputReg.a = *m_ColorInputLUT[cc.a][i]; + InputReg.b = *m_ColorInputLUT[cc.b][i]; + InputReg.c = *m_ColorInputLUT[cc.c][i]; + InputReg.d = *m_ColorInputLUT[cc.d][i]; + Reg[cc.dest][RED_C + i] = InputReg.d + ((InputReg.a == InputReg.b) ? InputReg.c : 0); + } + break; + } +} + +void Tev::DrawAlphaRegular(TevStageCombiner::AlphaCombiner &ac) +{ + InputRegType InputReg; + + InputReg.a = *m_AlphaInputLUT[ac.a]; + InputReg.b = *m_AlphaInputLUT[ac.b]; + InputReg.c = *m_AlphaInputLUT[ac.c]; + InputReg.d = *m_AlphaInputLUT[ac.d]; + + u16 c = InputReg.c + (InputReg.c >> 7); + + s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); + temp = ac.op?(-temp >> 8):(temp >> 8); + + s32 result = InputReg.d + temp + m_BiasLUT[ac.bias]; + result = result << m_ScaleLShiftLUT[ac.shift]; + result = result >> m_ScaleRShiftLUT[ac.shift]; + + Reg[ac.dest][ALP_C] = result; +} + +void Tev::DrawAlphaCompare(TevStageCombiner::AlphaCombiner &ac) +{ + int cmp = (ac.shift<<1)|ac.op|8; // comparemode stored here + + u32 a; + u32 b; + + InputRegType InputReg; + + switch(cmp) { + case TEVCMP_R8_GT: + { + a = m_AlphaInputLUT[ac.a][RED_C] & 0xff; + b = m_AlphaInputLUT[ac.b][RED_C] & 0xff; + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + break; + + case TEVCMP_R8_EQ: + { + a = m_AlphaInputLUT[ac.a][RED_C] & 0xff; + b = m_AlphaInputLUT[ac.b][RED_C] & 0xff; + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + break; + case TEVCMP_GR16_GT: + { + a = ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); + b = ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + break; + case TEVCMP_GR16_EQ: + { + a = ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); + b = ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + break; + case TEVCMP_BGR24_GT: + { + a = ((m_AlphaInputLUT[ac.a][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); + b = ((m_AlphaInputLUT[ac.b][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a > b) ? InputReg.c : 0); + } + break; + case TEVCMP_BGR24_EQ: + { + a = ((m_AlphaInputLUT[ac.a][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.a][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.a][RED_C] & 0xff); + b = ((m_AlphaInputLUT[ac.b][BLU_C] & 0xff) << 16) | ((m_AlphaInputLUT[ac.b][GRN_C] & 0xff) << 8) | (m_AlphaInputLUT[ac.b][RED_C] & 0xff); + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((a == b) ? InputReg.c : 0); + } + break; + case TEVCMP_A8_GT: + { + InputReg.a = m_AlphaInputLUT[ac.a][ALP_C]; + InputReg.b = m_AlphaInputLUT[ac.b][ALP_C]; + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((InputReg.a > InputReg.b) ? InputReg.c : 0); + } + break; + case TEVCMP_A8_EQ: + { + InputReg.a = m_AlphaInputLUT[ac.a][ALP_C]; + InputReg.b = m_AlphaInputLUT[ac.b][ALP_C]; + InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; + InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; + Reg[ac.dest][ALP_C] = InputReg.d + ((InputReg.a == InputReg.b) ? InputReg.c : 0); + } + break; + } +} + +static bool AlphaCompare(int alpha, int ref, int comp) +{ + switch(comp) { + case ALPHACMP_ALWAYS: return true; + case ALPHACMP_NEVER: return false; + case ALPHACMP_LEQUAL: return alpha <= ref; + case ALPHACMP_LESS: return alpha < ref; + case ALPHACMP_GEQUAL: return alpha >= ref; + case ALPHACMP_GREATER: return alpha > ref; + case ALPHACMP_EQUAL: return alpha == ref; + case ALPHACMP_NEQUAL: return alpha != ref; + } + return true; +} + +static bool AlphaTest(int alpha) +{ + bool comp0 = AlphaCompare(alpha, bpmem.alphaFunc.ref0, bpmem.alphaFunc.comp0); + bool comp1 = AlphaCompare(alpha, bpmem.alphaFunc.ref1, bpmem.alphaFunc.comp1); + + switch (bpmem.alphaFunc.logic) { + case 0: return comp0 && comp1; // and + case 1: return comp0 || comp1; // or + case 2: return comp0 ^ comp1; // xor + case 3: return !(comp0 ^ comp1); // xnor + } + return true; +} + +inline s32 WrapIndirectCoord(s32 coord, int wrapMode) +{ + switch (wrapMode) { + case ITW_OFF: + return coord; + case ITW_256: + return (coord % (256 << 7)); + case ITW_128: + return (coord % (128 << 7)); + case ITW_64: + return (coord % (64 << 7)); + case ITW_32: + return (coord % (32 << 7)); + case ITW_16: + return (coord % (16 << 7)); + case ITW_0: + return 0; + } + return 0; +} + +void Tev::Indirect(unsigned int stageNum, s32 s, s32 t) +{ + TevStageIndirect &indirect = bpmem.tevind[stageNum]; + u8 *indmap = IndirectTex[indirect.bt]; + + s32 indcoord[3]; + + // alpha bump select + switch (indirect.bs) { + case ITBA_OFF: + AlphaBump = 0; + break; + case ITBA_S: + AlphaBump = indmap[ALP_C]; + break; + case ITBA_T: + AlphaBump = indmap[BLU_C]; + break; + case ITBA_U: + AlphaBump = indmap[GRN_C]; + break; + } + + // bias select + s16 biasValue = indirect.fmt==ITF_8?-128:1; + s16 bias[3]; + bias[0] = indirect.bias&1?biasValue:0; + bias[1] = indirect.bias&2?biasValue:0; + bias[2] = indirect.bias&4?biasValue:0; + + // format + switch(indirect.fmt) { + case ITF_8: + indcoord[0] = indmap[ALP_C] + bias[0]; + indcoord[1] = indmap[BLU_C] + bias[1]; + indcoord[2] = indmap[GRN_C] + bias[2]; + AlphaBump = AlphaBump & 0xf8; + break; + case ITF_5: + indcoord[0] = (indmap[ALP_C] & 0x1f) + bias[0]; + indcoord[1] = (indmap[BLU_C] & 0x1f) + bias[1]; + indcoord[2] = (indmap[GRN_C] & 0x1f) + bias[2]; + AlphaBump = AlphaBump & 0xe0; + break; + case ITF_4: + indcoord[0] = (indmap[ALP_C] & 0x0f) + bias[0]; + indcoord[1] = (indmap[BLU_C] & 0x0f) + bias[1]; + indcoord[2] = (indmap[GRN_C] & 0x0f) + bias[2]; + AlphaBump = AlphaBump & 0xf0; + break; + case ITF_3: + indcoord[0] = (indmap[ALP_C] & 0x07) + bias[0]; + indcoord[1] = (indmap[BLU_C] & 0x07) + bias[1]; + indcoord[2] = (indmap[GRN_C] & 0x07) + bias[2]; + AlphaBump = AlphaBump & 0xf8; + break; + default: + PanicAlert("Tev::Indirect"); + return; + } + + s64 indtevtrans[2] = { 0,0 }; + + // matrix multiply + int indmtxid = indirect.mid & 3; + if (indmtxid) + { + IND_MTX &indmtx = bpmem.indmtx[indmtxid - 1]; + int scale = ((u32)indmtx.col0.s0 << 0) | + ((u32)indmtx.col1.s1 << 2) | + ((u32)indmtx.col2.s2 << 4); + + int shift; + + switch (indirect.mid & 12) { + case 0: + shift = 3 + (17 - scale); + indtevtrans[0] = indmtx.col0.ma * indcoord[0] + indmtx.col1.mc * indcoord[1] + indmtx.col2.me * indcoord[2]; + indtevtrans[1] = indmtx.col0.mb * indcoord[0] + indmtx.col1.md * indcoord[1] + indmtx.col2.mf * indcoord[2]; + break; + case 4: // s matrix + shift = 8 + (17 - scale); + indtevtrans[0] = s * indcoord[0]; + indtevtrans[1] = t * indcoord[0]; + break; + case 8: // t matrix + shift = 8 + (17 - scale); + indtevtrans[0] = s * indcoord[1]; + indtevtrans[1] = t * indcoord[1]; + break; + default: + return; + } + + indtevtrans[0] = shift >= 0 ? indtevtrans[0] >> shift : indtevtrans[0] << -shift; + indtevtrans[1] = shift >= 0 ? indtevtrans[1] >> shift : indtevtrans[1] << -shift; + } + + if (indirect.fb_addprev) + { + TexCoord.s += (int)(WrapIndirectCoord(s, indirect.sw) + indtevtrans[0]); + TexCoord.t += (int)(WrapIndirectCoord(t, indirect.tw) + indtevtrans[1]); + } + else + { + TexCoord.s = (int)(WrapIndirectCoord(s, indirect.sw) + indtevtrans[0]); + TexCoord.t = (int)(WrapIndirectCoord(t, indirect.tw) + indtevtrans[1]); + } +} + +void Tev::Draw() +{ + _assert_(Position[0] >= 0 && Position[0] < EFB_WIDTH); + _assert_(Position[1] >= 0 && Position[1] < EFB_HEIGHT); + + INCSTAT(stats.thisFrame.tevPixelsIn); + + for (unsigned int stageNum = 0; stageNum < bpmem.genMode.numindstages; stageNum++) + { + int stageNum2 = stageNum >> 1; + int stageOdd = stageNum&1; + + u32 texcoordSel = bpmem.tevindref.getTexCoord(stageNum); + u32 texmap = bpmem.tevindref.getTexMap(stageNum); + + const TEXSCALE& texscale = bpmem.texscale[stageNum2]; + s32 scaleS = stageOdd ? texscale.ss1:texscale.ss0; + s32 scaleT = stageOdd ? texscale.ts1:texscale.ts0; + + TextureSampler::Sample(Uv[texcoordSel].s >> scaleS, Uv[texcoordSel].t >> scaleT, + IndirectLod[stageNum], IndirectLinear[stageNum], texmap, IndirectTex[stageNum]); + +#ifdef _DEBUG + if (g_Config.bDumpTevStages) + { + u8 stage[4] = {(u8)IndirectTex[stageNum][3], (u8)IndirectTex[stageNum][2], (u8)IndirectTex[stageNum][1], 255}; + DebugUtil::DrawObjectBuffer(Position[0], Position[1], stage, 16+stageNum, "Ind"); + } +#endif + } + + for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) + { + int stageNum2 = stageNum >> 1; + int stageOdd = stageNum&1; + TwoTevStageOrders &order = bpmem.tevorders[stageNum2]; + TevKSel &kSel = bpmem.tevksel[stageNum2]; + + // stage combiners + TevStageCombiner::ColorCombiner &cc = bpmem.combiners[stageNum].colorC; + TevStageCombiner::AlphaCombiner &ac = bpmem.combiners[stageNum].alphaC; + + int texcoordSel = order.getTexCoord(stageOdd); + int texmap = order.getTexMap(stageOdd); + + Indirect(stageNum, Uv[texcoordSel].s, Uv[texcoordSel].t); + + // sample texture + if (order.getEnable(stageOdd)) + { + u8 texel[4]; + + TextureSampler::Sample(TexCoord.s, TexCoord.t, TextureLod[stageNum], TextureLinear[stageNum], texmap, texel); + + int swaptable = ac.tswap * 2; + + TexColor[0] = texel[bpmem.tevksel[swaptable].swap1]; + TexColor[1] = texel[bpmem.tevksel[swaptable].swap2]; + swaptable++; + TexColor[2] = texel[bpmem.tevksel[swaptable].swap1]; + TexColor[3] = texel[bpmem.tevksel[swaptable].swap2]; + } + + // set konst for this stage + int kc = kSel.getKC(stageOdd); + int ka = kSel.getKA(stageOdd); + StageKonst[RED_C] = *(m_KonstLUT[kc][RED_C]); + StageKonst[GRN_C] = *(m_KonstLUT[kc][GRN_C]); + StageKonst[BLU_C] = *(m_KonstLUT[kc][BLU_C]); + StageKonst[ALP_C] = *(m_KonstLUT[ka][ALP_C]); + + // set color + SetRasColor(order.getColorChan(stageOdd), ac.rswap * 2); + + // combine inputs + if (cc.bias != 3) + DrawColorRegular(cc); + else + DrawColorCompare(cc); + + if (cc.clamp) + { + Reg[cc.dest][RED_C] = Clamp255(Reg[cc.dest][RED_C]); + Reg[cc.dest][GRN_C] = Clamp255(Reg[cc.dest][GRN_C]); + Reg[cc.dest][BLU_C] = Clamp255(Reg[cc.dest][BLU_C]); + } + else + { + Reg[cc.dest][RED_C] = Clamp1024(Reg[cc.dest][RED_C]); + Reg[cc.dest][GRN_C] = Clamp1024(Reg[cc.dest][GRN_C]); + Reg[cc.dest][BLU_C] = Clamp1024(Reg[cc.dest][BLU_C]); + } + + if (ac.bias != 3) + DrawAlphaRegular(ac); + else + DrawAlphaCompare(ac); + + if (ac.clamp) + Reg[ac.dest][ALP_C] = Clamp255(Reg[ac.dest][ALP_C]); + else + Reg[ac.dest][ALP_C] = Clamp1024(Reg[ac.dest][ALP_C]); + +#ifdef _DEBUG + if (g_Config.bDumpTevStages) + { + u8 stage[4] = {(u8)Reg[0][0], (u8)Reg[0][1], (u8)Reg[0][2], (u8)Reg[0][3]}; + DebugUtil::DrawObjectBuffer(Position[0], Position[1], stage, stageNum, "Stage"); + } +#endif + } + + // convert to 8 bits per component + u8 output[4] = {(u8)Reg[0][0], (u8)Reg[0][1], (u8)Reg[0][2], (u8)Reg[0][3]}; + + if (!AlphaTest(output[ALP_C])) + return; + + // z texture + if (bpmem.ztex2.op) + { + u32 ztex = bpmem.ztex1.bias; + switch (bpmem.ztex2.type) { + case 0: // 8 bit + ztex += TexColor[ALP_C]; + break; + case 1: // 16 bit + ztex += TexColor[ALP_C] << 8 | TexColor[RED_C]; + break; + case 2: // 24 bit + ztex += TexColor[RED_C] << 16 | TexColor[GRN_C] << 8 | TexColor[BLU_C]; + break; + } + + if (bpmem.ztex2.op == ZTEXTURE_ADD) + ztex += Position[2]; + + Position[2] = ztex & 0x00ffffff; + } + + // fog + if (bpmem.fog.c_proj_fsel.fsel) + { + float ze; + + if (bpmem.fog.c_proj_fsel.proj == 0) + { + // perspective + // ze = A/(B - Zs) + s32 denom = bpmem.fog.b_magnitude - (Position[2] >> bpmem.fog.b_shift); + ze = bpmem.fog.a.GetA() / (float)denom; + } + else + { + // orthographic + // ze = a*Zs + ze = bpmem.fog.a.GetA() / (float)Position[2]; + } + + ze = (ze * (float)0xffffff) - bpmem.fog.c_proj_fsel.GetC(); + + // clamp 0 to 1 + float fog = (ze<0.0f) ? 0.0f : ((ze>1.0f) ? 1.0f : ze); + + switch (bpmem.fog.c_proj_fsel.fsel) + { + case 4: // exp + fog = 1.0f - pow(2.0f, -8.0f * fog); + break; + case 5: // exp2 + fog = 1.0f - pow(2.0f, -8.0f * fog * fog); + break; + case 6: // backward exp + fog = 1.0f - fog; + fog = 1.0f - pow(2.0f, -8.0f * fog); + break; + case 7: // backward exp2 + fog = 1.0f - fog; + fog = 1.0f - pow(2.0f, -8.0f * fog * fog); + break; + } + + // lerp from output to fog color + u32 fogInt = (u32)(fog * 256); + u32 invFog = 256 - fogInt; + + output[RED_C] = (output[RED_C] * invFog + fogInt * bpmem.fog.color.r) >> 8; + output[GRN_C] = (output[GRN_C] * invFog + fogInt * bpmem.fog.color.g) >> 8; + output[BLU_C] = (output[BLU_C] * invFog + fogInt * bpmem.fog.color.b) >> 8; + } + + if (!bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) + { + if (!EfbInterface::ZCompare(Position[0], Position[1], Position[2])) + return; + } + + INCSTAT(stats.thisFrame.tevPixelsOut); + + EfbInterface::BlendTev(Position[0], Position[1], output); +} + +void Tev::SetRegColor(int reg, int comp, bool konst, s16 color) +{ + if (konst) + { + KonstantColors[reg][comp] = color; + } + else + { + Reg[reg][comp] = color; + } +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.h b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.h index caaa88cfc9..4fc2b42502 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.h @@ -1,85 +1,85 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _TEV_H_ -#define _TEV_H_ - -#include "BPMemLoader.h" - -class Tev -{ - struct InputRegType { - unsigned a : 8; - unsigned b : 8; - unsigned c : 8; - signed d : 11; - }; - - struct TextureCoordinateType - { - signed s : 24; - signed t : 24; - }; - - // color order: RGBA - s16 Reg[4][4]; - s16 KonstantColors[4][4]; - s16 FixedConstants[9]; - s16 TexColor[4]; - s16 RasColor[4]; - s16 StageKonst[4]; - s16 Zero16[4]; - u8 AlphaBump; - u8 IndirectTex[4][4]; - TextureCoordinateType TexCoord; - - s16 *m_ColorInputLUT[16][3]; - s16 *m_AlphaInputLUT[8]; // values must point to RGBA color - s16 *m_KonstLUT[32][4]; - u8 *m_RasColorLUT[8]; - s16 m_BiasLUT[4]; - u8 m_ScaleLShiftLUT[4]; - u8 m_ScaleRShiftLUT[4]; - - void SetRasColor(int colorChan, int swaptable); - - void DrawColorRegular(TevStageCombiner::ColorCombiner &cc); - void DrawColorCompare(TevStageCombiner::ColorCombiner &cc); - void DrawAlphaRegular(TevStageCombiner::AlphaCombiner &ac); - void DrawAlphaCompare(TevStageCombiner::AlphaCombiner &ac); - - void Indirect(unsigned int stageNum, s32 s, s32 t); - -public: - s32 Position[3]; - u8 Color[2][4]; - TextureCoordinateType Uv[8]; - s32 IndirectLod[4]; - bool IndirectLinear[4]; - s32 TextureLod[16]; - bool TextureLinear[16]; - - void Init(); - - void Draw(); - - void SetRegColor(int reg, int comp, bool konst, s16 color); - - enum { RED_C, GRN_C, BLU_C, ALP_C }; -}; - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _TEV_H_ +#define _TEV_H_ + +#include "BPMemLoader.h" + +class Tev +{ + struct InputRegType { + unsigned a : 8; + unsigned b : 8; + unsigned c : 8; + signed d : 11; + }; + + struct TextureCoordinateType + { + signed s : 24; + signed t : 24; + }; + + // color order: RGBA + s16 Reg[4][4]; + s16 KonstantColors[4][4]; + s16 FixedConstants[9]; + s16 TexColor[4]; + s16 RasColor[4]; + s16 StageKonst[4]; + s16 Zero16[4]; + u8 AlphaBump; + u8 IndirectTex[4][4]; + TextureCoordinateType TexCoord; + + s16 *m_ColorInputLUT[16][3]; + s16 *m_AlphaInputLUT[8]; // values must point to RGBA color + s16 *m_KonstLUT[32][4]; + u8 *m_RasColorLUT[8]; + s16 m_BiasLUT[4]; + u8 m_ScaleLShiftLUT[4]; + u8 m_ScaleRShiftLUT[4]; + + void SetRasColor(int colorChan, int swaptable); + + void DrawColorRegular(TevStageCombiner::ColorCombiner &cc); + void DrawColorCompare(TevStageCombiner::ColorCombiner &cc); + void DrawAlphaRegular(TevStageCombiner::AlphaCombiner &ac); + void DrawAlphaCompare(TevStageCombiner::AlphaCombiner &ac); + + void Indirect(unsigned int stageNum, s32 s, s32 t); + +public: + s32 Position[3]; + u8 Color[2][4]; + TextureCoordinateType Uv[8]; + s32 IndirectLod[4]; + bool IndirectLinear[4]; + s32 TextureLod[16]; + bool TextureLinear[16]; + + void Init(); + + void Draw(); + + void SetRegColor(int reg, int comp, bool konst, s16 color); + + enum { RED_C, GRN_C, BLU_C, ALP_C }; +}; + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/TextureEncoder.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/TextureEncoder.cpp index 7fec0b583d..6e596de5c7 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/TextureEncoder.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/TextureEncoder.cpp @@ -1,1442 +1,1442 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "TextureEncoder.h" -#include "EfbInterface.h" -#include "../../../Core/VideoCommon/Src/LookUpTables.h" - -#include "BPMemLoader.h" - -#include "../../../Core/VideoCommon/Src/TextureDecoder.h" - -namespace TextureEncoder -{ - -inline void RGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a) -{ - u32 srcColor = *(u32*)src; - r = Convert6To8(srcColor & 0x3f); - g = Convert6To8((srcColor >> 6) & 0x3f); - b = Convert6To8((srcColor >> 12)& 0x3f); - a = Convert6To8((srcColor >> 18)& 0x3f); -} - -inline void RGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) -{ - u32 srcColor = *(u32*)src; - r = Convert6To8(srcColor & 0x3f); - g = Convert6To8((srcColor >> 6) & 0x3f); - b = Convert6To8((srcColor >> 12)& 0x3f); -} - -inline u8 RGB8_to_I(u8 r, u8 g, u8 b) -{ - // values multiplied by 256 to keep math integer - u16 val = 4096 + 66 * r + 129 * g + 25 * b; - return val >> 8; -} - -// box filter sampling averages 9 samples centered at the source texel -// components are scaled to the range 0-255 after all samples are taken - -inline void boxfilterRGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a) -{ - u16 r16 = 0, g16 = 0, b16 = 0, a16 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - u32 srcColor = *(u32*)src; - r16 += srcColor & 0x3f; - g16 += (srcColor >> 6) & 0x3f; - b16 += (srcColor >> 12) & 0x3f; - a16 += (srcColor >> 18) & 0x3f; - src += 3; - } - src += (640 - 3) * 3; - } - - r = (r16 << 6) / 142; - g = (g16 << 6) / 142; - b = (b16 << 6) / 142; - a = (a16 << 6) / 142; -} - -inline void boxfilterRGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) -{ - u16 r16 = 0, g16 = 0, b16 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - u32 srcColor = *(u32*)src; - r16 += srcColor & 0x3f; - g16 += (srcColor >> 6) & 0x3f; - b16 += (srcColor >> 12) & 0x3f; - src += 3; - } - src += (640 - 3) * 3; - } - - r = (r16 << 6) / 142; - g = (g16 << 6) / 142; - b = (b16 << 6) / 142; -} - -inline void boxfilterRGBA_to_x8(u8 *src, u8 &x8, int shift) -{ - u16 x16 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - u32 srcColor = *(u32*)src; - x16 += (srcColor >> shift) & 0x3f; - src += 3; - } - src += (640 - 3) * 3; - } - - x8 = (x16 << 6) / 142; -} - -inline void boxfilterRGBA_to_xx8(u8 *src, u8 &x1, u8 &x2, int shift1, int shift2) -{ - u16 x16_1 = 0; - u16 x16_2 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - u32 srcColor = *(u32*)src; - x16_1 += (srcColor >> shift1) & 0x3f; - x16_2 += (srcColor >> shift2) & 0x3f; - src += 3; - } - src += (640 - 3) * 3; - } - - x1 = (x16_1 << 6) / 142; - x2 = (x16_2 << 6) / 142; -} - -inline void boxfilterRGB_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) -{ - u16 r16 = 0, g16 = 0, b16 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - r16 += src[0]; - g16 += src[1]; - b16 += src[2]; - src += 3; - } - src += (640 - 3) * 3; - } - - r = r16 / 9; - g = g16 / 9; - b = b16 / 9; -} - -inline void boxfilterRGB_to_x8(u8 *src, u8 &x8, int comp) -{ - u16 x16 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - x16 += src[comp]; - src += 3; - } - src += (640 - 3) * 3; - } - - x8 = x16 / 9; -} - -inline void boxfilterRGB_to_xx8(u8 *src, u8 &x1, u8 &x2, int comp1, int comp2) -{ - u16 x16_1 = 0; - u16 x16_2 = 0; - - // move to top left - src -= (1 + 640) * 3; - - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - x16_1 += src[comp1]; - x16_2 += src[comp2]; - src += 3; - } - src += (640 - 3) * 3; - } - - x1 = x16_1 / 9; - x2 = x16_2 / 9; -} - -void SetBlockDimensions(int blkWidthLog2, int blkHeightLog2, u16 &sBlkCount, u16 &tBlkCount, u16 &sBlkSize, u16 &tBlkSize) -{ - // if half_scale is 1 then the size is cut in half - u32 width = bpmem.copyTexSrcWH.x >> bpmem.triggerEFBCopy.half_scale; - u32 height = bpmem.copyTexSrcWH.y >> bpmem.triggerEFBCopy.half_scale; - - sBlkCount = (width >> blkWidthLog2) + 1; - tBlkCount = (height >> blkHeightLog2) + 1; - - sBlkSize = 1 << blkWidthLog2; - tBlkSize = 1 << blkHeightLog2; -} - -void SetSpans(int sBlkSize, int tBlkSize, s32 &tSpan, s32 &sBlkSpan, s32 &tBlkSpan, s32 &writeStride) -{ - // width is 1 less than the number of pixels of width - u32 width = bpmem.copyTexSrcWH.x >> bpmem.triggerEFBCopy.half_scale; - u32 alignedWidth = (width + sBlkSize) & (~(sBlkSize-1)); - - u32 readStride = 3 << bpmem.triggerEFBCopy.half_scale; - - tSpan = (640 - sBlkSize) * readStride; // bytes to advance src pointer after each row of texels in a block - sBlkSpan = ((-640 * tBlkSize) + sBlkSize) * readStride; // bytes to advance src pointer after each block - tBlkSpan = ((640 * tBlkSize) - alignedWidth) * readStride; // bytes to advance src pointer after each row of blocks - - writeStride = bpmem.copyMipMapStrideChannels * 32; -} - -#define ENCODE_LOOP_BLOCKS \ - for (int tBlk = 0; tBlk < tBlkCount; tBlk++) { \ - dst = dstBlockStart; \ - for (int sBlk = 0; sBlk < sBlkCount; sBlk++) { \ - for (int t = 0; t < tBlkSize; t++) { \ - for (int s = 0; s < sBlkSize; s++) { \ - - -#define ENCODE_LOOP_SPANS \ - } \ - src += tSpan; \ - } \ - src += sBlkSpan; \ - } \ - src += tBlkSpan; \ - dstBlockStart += writeStride; \ - } \ - -#define ENCODE_LOOP_SPANS2 \ - } \ - src += tSpan; \ - } \ - src += sBlkSpan; \ - dst += 32; \ - } \ - src += tBlkSpan; \ - dstBlockStart += writeStride; \ - } \ - -void EncodeRGBA6(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u8 r, g, b, a; - u32 readStride = 3; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_I4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - RGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst = RGB8_to_I(r, g, b) & 0xf0; - - RGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst |= RGB8_to_I(r, g, b) >> 4; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_I8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - RGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst++ = RGB8_to_I(r, g, b); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - RGBA_to_RGBA8(src, r, g, b, a); - src += readStride; - *dst++ = (a & 0xf0) | (RGB8_to_I(r, g, b) >> 4); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - RGBA_to_RGBA8(src, r, g, b, a); - src += readStride; - *dst++ = a; - *dst++ = RGB8_to_I(r, g, b); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB565: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - - u16 val = ((srcColor << 10) & 0xf800) | ((srcColor >> 1) & 0x07e0) | ((srcColor >> 13) & 0x001e); - *(u16*)dst = Common::swap16(val); - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB5A3: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - - u16 a16 = (srcColor >> 9) & 0x7000; - u16 val; - if (a16 == 0x7000) // 5551 - val = 0x8000 | ((srcColor << 9) & 0x7c00) | ((srcColor >> 2) & 0x03e0) | ((srcColor >> 13) & 0x001e); - else // 4443 - val = a16 | ((srcColor << 6) & 0x0f00) | ((srcColor >> 4) & 0x00f0) | ((srcColor >> 14) & 0x000f); - - *(u16*)dst = Common::swap16(val); - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGBA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - RGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_R4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - *dst = Convert6To8(srcColor & 0x3f) & 0xf0; - - srcColor = *(u32*)src; - src += readStride; - *dst |= Convert6To8(srcColor & 0x3f) >> 4; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - *dst++ = (Convert6To8((srcColor >> 18) & 0x3f) & 0xf0) | (Convert6To8(srcColor & 0x3f) >> 4); - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - *dst++ = Convert6To8((srcColor >> 18) & 0x3f); - *dst++ = Convert6To8(srcColor & 0x3f); - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_A8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - *dst++ = Convert6To8((srcColor >> 18) & 0x3f); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_R8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - *dst++ = Convert6To8(srcColor & 0x3f); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_G8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - *dst++ = Convert6To8((srcColor >> 6) & 0x3f); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_B8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - *dst++ = Convert6To8((srcColor >> 12) & 0x3f); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RG8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - *dst++ = Convert6To8((srcColor >> 6) & 0x3f); - *dst++ = Convert6To8(srcColor & 0x3f); - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_GB8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u32 srcColor = *(u32*)src; - src += readStride; - *dst++ = Convert6To8((srcColor >> 12) & 0x3f); - *dst++ = Convert6To8((srcColor >> 6) & 0x3f); - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - - -void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u8 r, g, b, a; - u32 readStride = 6; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_I4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst = RGB8_to_I(r, g, b) & 0xf0; - - boxfilterRGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst |= RGB8_to_I(r, g, b) >> 4; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_I8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGB8(src, r, g, b); - src += readStride; - *dst++ = RGB8_to_I(r, g, b); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGBA8(src, r, g, b, a); - src += readStride; - *dst++ = (a & 0xf0) | (RGB8_to_I(r, g, b) >> 4); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGBA8(src, r, g, b, a); - src += readStride; - *dst++ = a; - *dst++ = RGB8_to_I(r, g, b); - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB565: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGB8(src, r, g, b); - src += readStride; - - u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); - *(u16*)dst = Common::swap16(val); - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB5A3: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGBA8(src, r, g, b, a); - src += readStride; - - u16 val; - if (a >= 224) // 5551 - val = 0x8000 | ((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) & 0x001e); - else // 4443 - val = ((a << 7) & 0x7000) | ((r << 4) & 0x0f00) | (g & 0x00f0) | ((b >> 4) & 0x000f); - - *(u16*)dst = Common::swap16(val); - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGBA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_R4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_x8(src, r, 0); - src += readStride; - *dst = r & 0xf0; - - boxfilterRGBA_to_x8(src, r, 0); - src += readStride; - *dst |= r >> 4; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_xx8(src, r, a, 0, 18); - src += readStride; - *dst++ = (a & 0xf0) | (r >> 4); - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_xx8(src, r, a, 0, 18); - src += readStride; - *dst++ = a; - *dst++ = r; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_A8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_x8(src, a, 18); - *dst++ = a; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_R8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_x8(src, r, 0); - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_G8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_x8(src, g, 6); - *dst++ = g; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_B8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_x8(src, b, 12); - *dst++ = b; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RG8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_xx8(src, r, g, 0, 6); - src += readStride; - *dst++ = g; - *dst++ = r; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_GB8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGBA_to_xx8(src, g, b, 6, 12); - src += readStride; - *dst++ = b; - *dst++ = g; - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - -void EncodeRGB8(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u32 readStride = 3; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_I4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - *dst = RGB8_to_I(src[0], src[1], src[2]) & 0xf0; - src += readStride; - - *dst |= RGB8_to_I(src[0], src[1], src[2]) >> 4; - src += readStride; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_I8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = RGB8_to_I(src[0], src[1], src[2]); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xf0 | (RGB8_to_I(src[0], src[1], src[2]) >> 4); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xff; - *dst++ = RGB8_to_I(src[0], src[1], src[2]); - - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB565: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u16 val = ((src[0] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[2] >> 3) & 0x001e); - *(u16*)dst = Common::swap16(val); - src += readStride; - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB5A3: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - u16 val = 0x8000 | ((src[0] << 7) & 0x7c00) | ((src[1] << 2) & 0x03e0) | ((src[2] >> 3) & 0x001e); - *(u16*)dst = Common::swap16(val); - src += readStride; - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGBA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - dst[0] = 0xff; - dst[1] = src[0]; - dst[32] = src[1]; - dst[33] = src[2]; - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_R4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - *dst = src[0] & 0xf0; - src += readStride; - - *dst |= src[0] >> 4; - src += readStride; - - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xf0 | (src[0] >> 4); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xff; - *dst++ = src[0]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_A8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xff; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_R8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[0]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_G8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[1]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_B8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[2]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RG8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[1]; - *dst++ = src[0]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_GB8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[2]; - *dst++ = src[1]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - -void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u8 r, g, b; - u32 readStride = 6; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_I4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - *dst = RGB8_to_I(r, g, b) & 0xf0; - src += readStride; - - boxfilterRGB_to_RGB8(src, r, g, b); - *dst |= RGB8_to_I(r, g, b) >> 4; - src += readStride; - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_I8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - *dst++ = RGB8_to_I(r, g, b); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - *dst++ = 0xf0 | (RGB8_to_I(r, g, b) >> 4); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_IA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - *dst++ = 0xff; - *dst++ = RGB8_to_I(r, g, b); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB565: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); - *(u16*)dst = Common::swap16(val); - src += readStride; - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGB5A3: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - u16 val = 0x8000 | ((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) & 0x001e); - *(u16*)dst = Common::swap16(val); - src += readStride; - dst+=2; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_RGBA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, r, g, b); - dst[0] = 0xff; - dst[1] = r; - dst[32] = g; - dst[33] = b; - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_R4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, r, 0); - *dst = r & 0xf0; - src += readStride; - - boxfilterRGB_to_x8(src, r, 0); - *dst |= r >> 4; - src += readStride; - - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA4: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, r, 0); - *dst++ = 0xf0 | (r >> 4); - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RA8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, r, 0); - *dst++ = 0xff; - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_A8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = 0xff; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_R8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, r, 0); - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_G8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, g, 1); - *dst++ = g; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_B8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, b, 2); - *dst++ = b; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_RG8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_xx8(src, r, g, 0, 1); - *dst++ = g; - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_GB8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_xx8(src, g, b, 1, 2); - *dst++ = b; - *dst++ = g; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - -void EncodeZ24(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u32 readStride = 3; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_Z8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[2]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_Z16: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[1]; - *dst++ = src[2]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_Z24X8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - dst[0] = 0xff; - dst[1] = src[2]; - dst[32] = src[1]; - dst[33] = src[0]; - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_Z4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - *dst = src[2] & 0xf0; - src += readStride; - - *dst |= src[2] >> 4; - src += readStride; - - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z8M: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[1]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z8L: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[0]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z16L: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - *dst++ = src[0]; - *dst++ = src[1]; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - -void EncodeZ24halfscale(u8 *dst, u8 *src, u32 format) -{ - u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; - s32 tSpan, sBlkSpan, tBlkSpan, writeStride; - u32 readStride = 6; - u8 r, g, b; - u8 *dstBlockStart = dst; - - switch(format) - { - case GX_TF_Z8: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, b, 2); - *dst++ = b; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_Z16: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_xx8(src, g, b, 1, 2); - *dst++ = b; - *dst++ = g; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_TF_Z24X8: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_RGB8(src, dst[33], dst[32], dst[1]); - dst[0] = 255; - src += readStride; - dst += 2; - } - ENCODE_LOOP_SPANS2 - break; - - case GX_CTF_Z4: - SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - sBlkSize /= 2; - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, b, 2); - *dst = b & 0xf0; - src += readStride; - - boxfilterRGB_to_x8(src, b, 2); - *dst |= b >> 4; - src += readStride; - - dst++; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z8M: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, g, 1); - *dst++ = g; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z8L: - SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_x8(src, r, 0); - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - case GX_CTF_Z16L: - SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); - SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); - ENCODE_LOOP_BLOCKS - { - boxfilterRGB_to_xx8(src, r, g, 0, 1); - *dst++ = g; - *dst++ = r; - src += readStride; - } - ENCODE_LOOP_SPANS - break; - - default: - PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; - } -} - -void Encode(u8 *dest_ptr) -{ - int pixelformat = bpmem.zcontrol.pixel_format; - bool bFromZBuffer = pixelformat == PIXELFMT_Z24; - bool bIsIntensityFmt = bpmem.triggerEFBCopy.intensity_fmt > 0; - u32 copyfmt = ((bpmem.triggerEFBCopy.target_pixel_format / 2) + ((bpmem.triggerEFBCopy.target_pixel_format & 1) * 8)); - - // pack copy format information into a single variable - u32 format = copyfmt; - if (bFromZBuffer) - { - format |= _GX_TF_ZTF; - if (copyfmt == 11) - format = GX_TF_Z16; - else if (format < GX_TF_Z8 || format > GX_TF_Z24X8) - format |= _GX_TF_CTF; - } - else - if (copyfmt > GX_TF_RGBA8 || (copyfmt < GX_TF_RGB565 && !bIsIntensityFmt)) - format |= _GX_TF_CTF; - - u8 *src = EfbInterface::GetPixelPointer(bpmem.copyTexSrcXY.x, bpmem.copyTexSrcXY.y, bFromZBuffer); - - if (bpmem.triggerEFBCopy.half_scale) - { - if (pixelformat == PIXELFMT_RGBA6_Z24) - EncodeRGBA6halfscale(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_RGB8_Z24) - EncodeRGB8halfscale(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_RGB565_Z16) // not supported - EncodeRGB8halfscale(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_Z24) - EncodeZ24halfscale(dest_ptr, src, format); - } - else - { - if (pixelformat == PIXELFMT_RGBA6_Z24) - EncodeRGBA6(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_RGB8_Z24) - EncodeRGB8(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_RGB565_Z16) // not supported - EncodeRGB8(dest_ptr, src, format); - else if (pixelformat == PIXELFMT_Z24) - EncodeZ24(dest_ptr, src, format); - } -} - - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "TextureEncoder.h" +#include "EfbInterface.h" +#include "../../../Core/VideoCommon/Src/LookUpTables.h" + +#include "BPMemLoader.h" + +#include "../../../Core/VideoCommon/Src/TextureDecoder.h" + +namespace TextureEncoder +{ + +inline void RGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a) +{ + u32 srcColor = *(u32*)src; + r = Convert6To8(srcColor & 0x3f); + g = Convert6To8((srcColor >> 6) & 0x3f); + b = Convert6To8((srcColor >> 12)& 0x3f); + a = Convert6To8((srcColor >> 18)& 0x3f); +} + +inline void RGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) +{ + u32 srcColor = *(u32*)src; + r = Convert6To8(srcColor & 0x3f); + g = Convert6To8((srcColor >> 6) & 0x3f); + b = Convert6To8((srcColor >> 12)& 0x3f); +} + +inline u8 RGB8_to_I(u8 r, u8 g, u8 b) +{ + // values multiplied by 256 to keep math integer + u16 val = 4096 + 66 * r + 129 * g + 25 * b; + return val >> 8; +} + +// box filter sampling averages 9 samples centered at the source texel +// components are scaled to the range 0-255 after all samples are taken + +inline void boxfilterRGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a) +{ + u16 r16 = 0, g16 = 0, b16 = 0, a16 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + u32 srcColor = *(u32*)src; + r16 += srcColor & 0x3f; + g16 += (srcColor >> 6) & 0x3f; + b16 += (srcColor >> 12) & 0x3f; + a16 += (srcColor >> 18) & 0x3f; + src += 3; + } + src += (640 - 3) * 3; + } + + r = (r16 << 6) / 142; + g = (g16 << 6) / 142; + b = (b16 << 6) / 142; + a = (a16 << 6) / 142; +} + +inline void boxfilterRGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) +{ + u16 r16 = 0, g16 = 0, b16 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + u32 srcColor = *(u32*)src; + r16 += srcColor & 0x3f; + g16 += (srcColor >> 6) & 0x3f; + b16 += (srcColor >> 12) & 0x3f; + src += 3; + } + src += (640 - 3) * 3; + } + + r = (r16 << 6) / 142; + g = (g16 << 6) / 142; + b = (b16 << 6) / 142; +} + +inline void boxfilterRGBA_to_x8(u8 *src, u8 &x8, int shift) +{ + u16 x16 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + u32 srcColor = *(u32*)src; + x16 += (srcColor >> shift) & 0x3f; + src += 3; + } + src += (640 - 3) * 3; + } + + x8 = (x16 << 6) / 142; +} + +inline void boxfilterRGBA_to_xx8(u8 *src, u8 &x1, u8 &x2, int shift1, int shift2) +{ + u16 x16_1 = 0; + u16 x16_2 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + u32 srcColor = *(u32*)src; + x16_1 += (srcColor >> shift1) & 0x3f; + x16_2 += (srcColor >> shift2) & 0x3f; + src += 3; + } + src += (640 - 3) * 3; + } + + x1 = (x16_1 << 6) / 142; + x2 = (x16_2 << 6) / 142; +} + +inline void boxfilterRGB_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b) +{ + u16 r16 = 0, g16 = 0, b16 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + r16 += src[0]; + g16 += src[1]; + b16 += src[2]; + src += 3; + } + src += (640 - 3) * 3; + } + + r = r16 / 9; + g = g16 / 9; + b = b16 / 9; +} + +inline void boxfilterRGB_to_x8(u8 *src, u8 &x8, int comp) +{ + u16 x16 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + x16 += src[comp]; + src += 3; + } + src += (640 - 3) * 3; + } + + x8 = x16 / 9; +} + +inline void boxfilterRGB_to_xx8(u8 *src, u8 &x1, u8 &x2, int comp1, int comp2) +{ + u16 x16_1 = 0; + u16 x16_2 = 0; + + // move to top left + src -= (1 + 640) * 3; + + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + x16_1 += src[comp1]; + x16_2 += src[comp2]; + src += 3; + } + src += (640 - 3) * 3; + } + + x1 = x16_1 / 9; + x2 = x16_2 / 9; +} + +void SetBlockDimensions(int blkWidthLog2, int blkHeightLog2, u16 &sBlkCount, u16 &tBlkCount, u16 &sBlkSize, u16 &tBlkSize) +{ + // if half_scale is 1 then the size is cut in half + u32 width = bpmem.copyTexSrcWH.x >> bpmem.triggerEFBCopy.half_scale; + u32 height = bpmem.copyTexSrcWH.y >> bpmem.triggerEFBCopy.half_scale; + + sBlkCount = (width >> blkWidthLog2) + 1; + tBlkCount = (height >> blkHeightLog2) + 1; + + sBlkSize = 1 << blkWidthLog2; + tBlkSize = 1 << blkHeightLog2; +} + +void SetSpans(int sBlkSize, int tBlkSize, s32 &tSpan, s32 &sBlkSpan, s32 &tBlkSpan, s32 &writeStride) +{ + // width is 1 less than the number of pixels of width + u32 width = bpmem.copyTexSrcWH.x >> bpmem.triggerEFBCopy.half_scale; + u32 alignedWidth = (width + sBlkSize) & (~(sBlkSize-1)); + + u32 readStride = 3 << bpmem.triggerEFBCopy.half_scale; + + tSpan = (640 - sBlkSize) * readStride; // bytes to advance src pointer after each row of texels in a block + sBlkSpan = ((-640 * tBlkSize) + sBlkSize) * readStride; // bytes to advance src pointer after each block + tBlkSpan = ((640 * tBlkSize) - alignedWidth) * readStride; // bytes to advance src pointer after each row of blocks + + writeStride = bpmem.copyMipMapStrideChannels * 32; +} + +#define ENCODE_LOOP_BLOCKS \ + for (int tBlk = 0; tBlk < tBlkCount; tBlk++) { \ + dst = dstBlockStart; \ + for (int sBlk = 0; sBlk < sBlkCount; sBlk++) { \ + for (int t = 0; t < tBlkSize; t++) { \ + for (int s = 0; s < sBlkSize; s++) { \ + + +#define ENCODE_LOOP_SPANS \ + } \ + src += tSpan; \ + } \ + src += sBlkSpan; \ + } \ + src += tBlkSpan; \ + dstBlockStart += writeStride; \ + } \ + +#define ENCODE_LOOP_SPANS2 \ + } \ + src += tSpan; \ + } \ + src += sBlkSpan; \ + dst += 32; \ + } \ + src += tBlkSpan; \ + dstBlockStart += writeStride; \ + } \ + +void EncodeRGBA6(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u8 r, g, b, a; + u32 readStride = 3; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_I4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + RGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst = RGB8_to_I(r, g, b) & 0xf0; + + RGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst |= RGB8_to_I(r, g, b) >> 4; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_I8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + RGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst++ = RGB8_to_I(r, g, b); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + RGBA_to_RGBA8(src, r, g, b, a); + src += readStride; + *dst++ = (a & 0xf0) | (RGB8_to_I(r, g, b) >> 4); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + RGBA_to_RGBA8(src, r, g, b, a); + src += readStride; + *dst++ = a; + *dst++ = RGB8_to_I(r, g, b); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB565: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + + u16 val = ((srcColor << 10) & 0xf800) | ((srcColor >> 1) & 0x07e0) | ((srcColor >> 13) & 0x001e); + *(u16*)dst = Common::swap16(val); + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB5A3: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + + u16 a16 = (srcColor >> 9) & 0x7000; + u16 val; + if (a16 == 0x7000) // 5551 + val = 0x8000 | ((srcColor << 9) & 0x7c00) | ((srcColor >> 2) & 0x03e0) | ((srcColor >> 13) & 0x001e); + else // 4443 + val = a16 | ((srcColor << 6) & 0x0f00) | ((srcColor >> 4) & 0x00f0) | ((srcColor >> 14) & 0x000f); + + *(u16*)dst = Common::swap16(val); + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGBA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + RGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_R4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + *dst = Convert6To8(srcColor & 0x3f) & 0xf0; + + srcColor = *(u32*)src; + src += readStride; + *dst |= Convert6To8(srcColor & 0x3f) >> 4; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + *dst++ = (Convert6To8((srcColor >> 18) & 0x3f) & 0xf0) | (Convert6To8(srcColor & 0x3f) >> 4); + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + *dst++ = Convert6To8((srcColor >> 18) & 0x3f); + *dst++ = Convert6To8(srcColor & 0x3f); + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_A8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + *dst++ = Convert6To8((srcColor >> 18) & 0x3f); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_R8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + *dst++ = Convert6To8(srcColor & 0x3f); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_G8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + *dst++ = Convert6To8((srcColor >> 6) & 0x3f); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_B8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + *dst++ = Convert6To8((srcColor >> 12) & 0x3f); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RG8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + *dst++ = Convert6To8((srcColor >> 6) & 0x3f); + *dst++ = Convert6To8(srcColor & 0x3f); + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_GB8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u32 srcColor = *(u32*)src; + src += readStride; + *dst++ = Convert6To8((srcColor >> 12) & 0x3f); + *dst++ = Convert6To8((srcColor >> 6) & 0x3f); + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + + +void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u8 r, g, b, a; + u32 readStride = 6; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_I4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst = RGB8_to_I(r, g, b) & 0xf0; + + boxfilterRGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst |= RGB8_to_I(r, g, b) >> 4; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_I8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGB8(src, r, g, b); + src += readStride; + *dst++ = RGB8_to_I(r, g, b); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGBA8(src, r, g, b, a); + src += readStride; + *dst++ = (a & 0xf0) | (RGB8_to_I(r, g, b) >> 4); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGBA8(src, r, g, b, a); + src += readStride; + *dst++ = a; + *dst++ = RGB8_to_I(r, g, b); + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB565: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGB8(src, r, g, b); + src += readStride; + + u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); + *(u16*)dst = Common::swap16(val); + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB5A3: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGBA8(src, r, g, b, a); + src += readStride; + + u16 val; + if (a >= 224) // 5551 + val = 0x8000 | ((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) & 0x001e); + else // 4443 + val = ((a << 7) & 0x7000) | ((r << 4) & 0x0f00) | (g & 0x00f0) | ((b >> 4) & 0x000f); + + *(u16*)dst = Common::swap16(val); + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGBA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_R4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_x8(src, r, 0); + src += readStride; + *dst = r & 0xf0; + + boxfilterRGBA_to_x8(src, r, 0); + src += readStride; + *dst |= r >> 4; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_xx8(src, r, a, 0, 18); + src += readStride; + *dst++ = (a & 0xf0) | (r >> 4); + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_xx8(src, r, a, 0, 18); + src += readStride; + *dst++ = a; + *dst++ = r; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_A8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_x8(src, a, 18); + *dst++ = a; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_R8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_x8(src, r, 0); + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_G8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_x8(src, g, 6); + *dst++ = g; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_B8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_x8(src, b, 12); + *dst++ = b; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RG8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_xx8(src, r, g, 0, 6); + src += readStride; + *dst++ = g; + *dst++ = r; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_GB8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGBA_to_xx8(src, g, b, 6, 12); + src += readStride; + *dst++ = b; + *dst++ = g; + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + +void EncodeRGB8(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u32 readStride = 3; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_I4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + *dst = RGB8_to_I(src[0], src[1], src[2]) & 0xf0; + src += readStride; + + *dst |= RGB8_to_I(src[0], src[1], src[2]) >> 4; + src += readStride; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_I8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = RGB8_to_I(src[0], src[1], src[2]); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xf0 | (RGB8_to_I(src[0], src[1], src[2]) >> 4); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xff; + *dst++ = RGB8_to_I(src[0], src[1], src[2]); + + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB565: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u16 val = ((src[0] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[2] >> 3) & 0x001e); + *(u16*)dst = Common::swap16(val); + src += readStride; + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB5A3: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + u16 val = 0x8000 | ((src[0] << 7) & 0x7c00) | ((src[1] << 2) & 0x03e0) | ((src[2] >> 3) & 0x001e); + *(u16*)dst = Common::swap16(val); + src += readStride; + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGBA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + dst[0] = 0xff; + dst[1] = src[0]; + dst[32] = src[1]; + dst[33] = src[2]; + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_R4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + *dst = src[0] & 0xf0; + src += readStride; + + *dst |= src[0] >> 4; + src += readStride; + + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xf0 | (src[0] >> 4); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xff; + *dst++ = src[0]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_A8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xff; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_R8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[0]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_G8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[1]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_B8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[2]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RG8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[1]; + *dst++ = src[0]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_GB8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[2]; + *dst++ = src[1]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + +void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u8 r, g, b; + u32 readStride = 6; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_I4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + *dst = RGB8_to_I(r, g, b) & 0xf0; + src += readStride; + + boxfilterRGB_to_RGB8(src, r, g, b); + *dst |= RGB8_to_I(r, g, b) >> 4; + src += readStride; + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_I8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + *dst++ = RGB8_to_I(r, g, b); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + *dst++ = 0xf0 | (RGB8_to_I(r, g, b) >> 4); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_IA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + *dst++ = 0xff; + *dst++ = RGB8_to_I(r, g, b); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB565: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); + *(u16*)dst = Common::swap16(val); + src += readStride; + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGB5A3: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + u16 val = 0x8000 | ((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) & 0x001e); + *(u16*)dst = Common::swap16(val); + src += readStride; + dst+=2; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_RGBA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, r, g, b); + dst[0] = 0xff; + dst[1] = r; + dst[32] = g; + dst[33] = b; + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_R4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, r, 0); + *dst = r & 0xf0; + src += readStride; + + boxfilterRGB_to_x8(src, r, 0); + *dst |= r >> 4; + src += readStride; + + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA4: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, r, 0); + *dst++ = 0xf0 | (r >> 4); + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RA8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, r, 0); + *dst++ = 0xff; + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_A8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = 0xff; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_R8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, r, 0); + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_G8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, g, 1); + *dst++ = g; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_B8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, b, 2); + *dst++ = b; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_RG8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_xx8(src, r, g, 0, 1); + *dst++ = g; + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_GB8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_xx8(src, g, b, 1, 2); + *dst++ = b; + *dst++ = g; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + +void EncodeZ24(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u32 readStride = 3; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_Z8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[2]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_Z16: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[1]; + *dst++ = src[2]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_Z24X8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + dst[0] = 0xff; + dst[1] = src[2]; + dst[32] = src[1]; + dst[33] = src[0]; + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_Z4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + *dst = src[2] & 0xf0; + src += readStride; + + *dst |= src[2] >> 4; + src += readStride; + + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z8M: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[1]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z8L: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[0]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z16L: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + *dst++ = src[0]; + *dst++ = src[1]; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + +void EncodeZ24halfscale(u8 *dst, u8 *src, u32 format) +{ + u16 sBlkCount, tBlkCount, sBlkSize, tBlkSize; + s32 tSpan, sBlkSpan, tBlkSpan, writeStride; + u32 readStride = 6; + u8 r, g, b; + u8 *dstBlockStart = dst; + + switch(format) + { + case GX_TF_Z8: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, b, 2); + *dst++ = b; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_Z16: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_xx8(src, g, b, 1, 2); + *dst++ = b; + *dst++ = g; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_TF_Z24X8: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_RGB8(src, dst[33], dst[32], dst[1]); + dst[0] = 255; + src += readStride; + dst += 2; + } + ENCODE_LOOP_SPANS2 + break; + + case GX_CTF_Z4: + SetBlockDimensions(3, 3, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + sBlkSize /= 2; + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, b, 2); + *dst = b & 0xf0; + src += readStride; + + boxfilterRGB_to_x8(src, b, 2); + *dst |= b >> 4; + src += readStride; + + dst++; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z8M: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, g, 1); + *dst++ = g; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z8L: + SetBlockDimensions(3, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_x8(src, r, 0); + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + case GX_CTF_Z16L: + SetBlockDimensions(2, 2, sBlkCount, tBlkCount, sBlkSize, tBlkSize); + SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); + ENCODE_LOOP_BLOCKS + { + boxfilterRGB_to_xx8(src, r, g, 0, 1); + *dst++ = g; + *dst++ = r; + src += readStride; + } + ENCODE_LOOP_SPANS + break; + + default: + PanicAlert("Unknown texture copy format: 0x%x\n", format); + break; + } +} + +void Encode(u8 *dest_ptr) +{ + int pixelformat = bpmem.zcontrol.pixel_format; + bool bFromZBuffer = pixelformat == PIXELFMT_Z24; + bool bIsIntensityFmt = bpmem.triggerEFBCopy.intensity_fmt > 0; + u32 copyfmt = ((bpmem.triggerEFBCopy.target_pixel_format / 2) + ((bpmem.triggerEFBCopy.target_pixel_format & 1) * 8)); + + // pack copy format information into a single variable + u32 format = copyfmt; + if (bFromZBuffer) + { + format |= _GX_TF_ZTF; + if (copyfmt == 11) + format = GX_TF_Z16; + else if (format < GX_TF_Z8 || format > GX_TF_Z24X8) + format |= _GX_TF_CTF; + } + else + if (copyfmt > GX_TF_RGBA8 || (copyfmt < GX_TF_RGB565 && !bIsIntensityFmt)) + format |= _GX_TF_CTF; + + u8 *src = EfbInterface::GetPixelPointer(bpmem.copyTexSrcXY.x, bpmem.copyTexSrcXY.y, bFromZBuffer); + + if (bpmem.triggerEFBCopy.half_scale) + { + if (pixelformat == PIXELFMT_RGBA6_Z24) + EncodeRGBA6halfscale(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_RGB8_Z24) + EncodeRGB8halfscale(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_RGB565_Z16) // not supported + EncodeRGB8halfscale(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_Z24) + EncodeZ24halfscale(dest_ptr, src, format); + } + else + { + if (pixelformat == PIXELFMT_RGBA6_Z24) + EncodeRGBA6(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_RGB8_Z24) + EncodeRGB8(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_RGB565_Z16) // not supported + EncodeRGB8(dest_ptr, src, format); + else if (pixelformat == PIXELFMT_Z24) + EncodeZ24(dest_ptr, src, format); + } +} + + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/TextureSampler.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/TextureSampler.cpp index 14b0b0a848..739f1b6d14 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/TextureSampler.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/TextureSampler.cpp @@ -1,216 +1,216 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include "TextureSampler.h" -#include "main.h" - -#include "BPMemLoader.h" -#include "../../../Core/VideoCommon/Src/TextureDecoder.h" - -#include - -#define ALLOW_MIPMAP 1 - -namespace TextureSampler -{ - -inline void WrapCoord(int &coord, int wrapMode, int imageSize) -{ - switch (wrapMode) - { - case 0: // clamp - coord = (coord>imageSize)?imageSize:(coord<0)?0:coord; - break; - case 1: // wrap - coord = coord % (imageSize + 1); - coord = (coord<0)?imageSize+coord:coord; - break; - case 2: // mirror - { - int sizePlus1 = imageSize + 1; - int div = coord / sizePlus1; - coord = coord - (div * sizePlus1); - coord = (coord<0)?-coord:coord; - coord = (div&1)?imageSize - coord:coord; - } - break; - } -} - -inline void SetTexel(u8 *inTexel, u32 *outTexel, u32 fract) -{ - outTexel[0] = inTexel[0] * fract; - outTexel[1] = inTexel[1] * fract; - outTexel[2] = inTexel[2] * fract; - outTexel[3] = inTexel[3] * fract; -} - -inline void AddTexel(u8 *inTexel, u32 *outTexel, u32 fract) -{ - outTexel[0] += inTexel[0] * fract; - outTexel[1] += inTexel[1] * fract; - outTexel[2] += inTexel[2] * fract; - outTexel[3] += inTexel[3] * fract; -} - -void Sample(s32 s, s32 t, s32 lod, bool linear, u8 texmap, u8 *sample) -{ - int baseMip = 0; - bool mipLinear = false; - -#if (ALLOW_MIPMAP) - FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - TexMode0& tm0 = texUnit.texMode0[texmap & 3]; - - s32 lodFract = lod & 0xf; - - if (lod > 0 && tm0.min_filter & 3) - { - // use mipmap - baseMip = lod >> 4; - mipLinear = (lodFract && tm0.min_filter & 2); - - // if using nearest mip filter and lodFract >= 0.5 round up to next mip - baseMip += (lodFract >> 3) & (tm0.min_filter & 1); - } - - if (mipLinear) - { - u8 sampledTex[4]; - u32 texel[4]; - - SampleMip(s, t, baseMip, linear, texmap, sampledTex); - SetTexel(sampledTex, texel, (16 - lodFract)); - - SampleMip(s, t, baseMip + 1, linear, texmap, sampledTex); - AddTexel(sampledTex, texel, lodFract); - - sample[0] = (u8)(texel[0] >> 4); - sample[1] = (u8)(texel[1] >> 4); - sample[2] = (u8)(texel[2] >> 4); - sample[3] = (u8)(texel[3] >> 4); - } - else -#endif - { - SampleMip(s, t, baseMip, linear, texmap, sample); - } -} - -void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8 *sample) -{ - FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - u8 subTexmap = texmap & 3; - - TexMode0& tm0 = texUnit.texMode0[subTexmap]; - TexImage0& ti0 = texUnit.texImage0[subTexmap]; - TexTLUT& texTlut = texUnit.texTlut[subTexmap]; - - u32 imageBase = texUnit.texImage3[subTexmap].image_base << 5; - u8 *imageSrc = g_VideoInitialize.pGetMemoryPointer(imageBase); - - int imageWidth = ti0.width; - int imageHeight = ti0.height; - - int tlutAddress = texTlut.tmem_offset << 9; - - // reduce sample location and texture size to mip level - // move texture pointer to mip location - if (mip) - { - int mipWidth = imageWidth + 1; - int mipHeight = imageHeight + 1; - - int fmtWidth = TexDecoder_GetBlockWidthInTexels(ti0.format); - int fmtHeight = TexDecoder_GetBlockHeightInTexels(ti0.format); - int fmtDepth = TexDecoder_GetTexelSizeInNibbles(ti0.format); - - imageWidth >>= mip; - imageHeight >>= mip; - s >>= mip; - t >>= mip; - - while (mip) - { - mipWidth = max(mipWidth, fmtWidth); - mipHeight = max(mipHeight, fmtHeight); - u32 size = (mipWidth * mipHeight * fmtDepth) >> 1; - - imageSrc += size; - mipWidth >>= 1; - mipHeight >>= 1; - mip--; - } - } - - if (linear) - { - // offset linear sampling - s -= 64; - t -= 64; - - // integer part of sample location - int imageS = s >> 7; - int imageT = t >> 7; - - // linear sampling - int imageSPlus1 = imageS + 1; - int fractS = s & 0x7f; - - int imageTPlus1 = imageT + 1; - int fractT = t & 0x7f; - - u8 sampledTex[4]; - u32 texel[4]; - - WrapCoord(imageS, tm0.wrap_s, imageWidth); - WrapCoord(imageT, tm0.wrap_t, imageHeight); - WrapCoord(imageSPlus1, tm0.wrap_s, imageWidth); - WrapCoord(imageTPlus1, tm0.wrap_t, imageHeight); - - TexDecoder_DecodeTexel(sampledTex, imageSrc, imageS, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); - SetTexel(sampledTex, texel, (128 - fractS) * (128 - fractT)); - - TexDecoder_DecodeTexel(sampledTex, imageSrc, imageSPlus1, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); - AddTexel(sampledTex, texel, (fractS) * (128 - fractT)); - - TexDecoder_DecodeTexel(sampledTex, imageSrc, imageS, imageTPlus1, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); - AddTexel(sampledTex, texel, (128 - fractS) * (fractT)); - - TexDecoder_DecodeTexel(sampledTex, imageSrc, imageSPlus1, imageTPlus1, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); - AddTexel(sampledTex, texel, (fractS) * (fractT)); - - sample[0] = (u8)(texel[0] >> 14); - sample[1] = (u8)(texel[1] >> 14); - sample[2] = (u8)(texel[2] >> 14); - sample[3] = (u8)(texel[3] >> 14); - } - else - { - // integer part of sample location - int imageS = s >> 7; - int imageT = t >> 7; - - // nearest neighbor sampling - WrapCoord(imageS, tm0.wrap_s, imageWidth); - WrapCoord(imageT, tm0.wrap_t, imageHeight); - - TexDecoder_DecodeTexel(sample, imageSrc, imageS, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); - } -} - -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include "TextureSampler.h" +#include "main.h" + +#include "BPMemLoader.h" +#include "../../../Core/VideoCommon/Src/TextureDecoder.h" + +#include + +#define ALLOW_MIPMAP 1 + +namespace TextureSampler +{ + +inline void WrapCoord(int &coord, int wrapMode, int imageSize) +{ + switch (wrapMode) + { + case 0: // clamp + coord = (coord>imageSize)?imageSize:(coord<0)?0:coord; + break; + case 1: // wrap + coord = coord % (imageSize + 1); + coord = (coord<0)?imageSize+coord:coord; + break; + case 2: // mirror + { + int sizePlus1 = imageSize + 1; + int div = coord / sizePlus1; + coord = coord - (div * sizePlus1); + coord = (coord<0)?-coord:coord; + coord = (div&1)?imageSize - coord:coord; + } + break; + } +} + +inline void SetTexel(u8 *inTexel, u32 *outTexel, u32 fract) +{ + outTexel[0] = inTexel[0] * fract; + outTexel[1] = inTexel[1] * fract; + outTexel[2] = inTexel[2] * fract; + outTexel[3] = inTexel[3] * fract; +} + +inline void AddTexel(u8 *inTexel, u32 *outTexel, u32 fract) +{ + outTexel[0] += inTexel[0] * fract; + outTexel[1] += inTexel[1] * fract; + outTexel[2] += inTexel[2] * fract; + outTexel[3] += inTexel[3] * fract; +} + +void Sample(s32 s, s32 t, s32 lod, bool linear, u8 texmap, u8 *sample) +{ + int baseMip = 0; + bool mipLinear = false; + +#if (ALLOW_MIPMAP) + FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; + TexMode0& tm0 = texUnit.texMode0[texmap & 3]; + + s32 lodFract = lod & 0xf; + + if (lod > 0 && tm0.min_filter & 3) + { + // use mipmap + baseMip = lod >> 4; + mipLinear = (lodFract && tm0.min_filter & 2); + + // if using nearest mip filter and lodFract >= 0.5 round up to next mip + baseMip += (lodFract >> 3) & (tm0.min_filter & 1); + } + + if (mipLinear) + { + u8 sampledTex[4]; + u32 texel[4]; + + SampleMip(s, t, baseMip, linear, texmap, sampledTex); + SetTexel(sampledTex, texel, (16 - lodFract)); + + SampleMip(s, t, baseMip + 1, linear, texmap, sampledTex); + AddTexel(sampledTex, texel, lodFract); + + sample[0] = (u8)(texel[0] >> 4); + sample[1] = (u8)(texel[1] >> 4); + sample[2] = (u8)(texel[2] >> 4); + sample[3] = (u8)(texel[3] >> 4); + } + else +#endif + { + SampleMip(s, t, baseMip, linear, texmap, sample); + } +} + +void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8 *sample) +{ + FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; + u8 subTexmap = texmap & 3; + + TexMode0& tm0 = texUnit.texMode0[subTexmap]; + TexImage0& ti0 = texUnit.texImage0[subTexmap]; + TexTLUT& texTlut = texUnit.texTlut[subTexmap]; + + u32 imageBase = texUnit.texImage3[subTexmap].image_base << 5; + u8 *imageSrc = g_VideoInitialize.pGetMemoryPointer(imageBase); + + int imageWidth = ti0.width; + int imageHeight = ti0.height; + + int tlutAddress = texTlut.tmem_offset << 9; + + // reduce sample location and texture size to mip level + // move texture pointer to mip location + if (mip) + { + int mipWidth = imageWidth + 1; + int mipHeight = imageHeight + 1; + + int fmtWidth = TexDecoder_GetBlockWidthInTexels(ti0.format); + int fmtHeight = TexDecoder_GetBlockHeightInTexels(ti0.format); + int fmtDepth = TexDecoder_GetTexelSizeInNibbles(ti0.format); + + imageWidth >>= mip; + imageHeight >>= mip; + s >>= mip; + t >>= mip; + + while (mip) + { + mipWidth = max(mipWidth, fmtWidth); + mipHeight = max(mipHeight, fmtHeight); + u32 size = (mipWidth * mipHeight * fmtDepth) >> 1; + + imageSrc += size; + mipWidth >>= 1; + mipHeight >>= 1; + mip--; + } + } + + if (linear) + { + // offset linear sampling + s -= 64; + t -= 64; + + // integer part of sample location + int imageS = s >> 7; + int imageT = t >> 7; + + // linear sampling + int imageSPlus1 = imageS + 1; + int fractS = s & 0x7f; + + int imageTPlus1 = imageT + 1; + int fractT = t & 0x7f; + + u8 sampledTex[4]; + u32 texel[4]; + + WrapCoord(imageS, tm0.wrap_s, imageWidth); + WrapCoord(imageT, tm0.wrap_t, imageHeight); + WrapCoord(imageSPlus1, tm0.wrap_s, imageWidth); + WrapCoord(imageTPlus1, tm0.wrap_t, imageHeight); + + TexDecoder_DecodeTexel(sampledTex, imageSrc, imageS, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); + SetTexel(sampledTex, texel, (128 - fractS) * (128 - fractT)); + + TexDecoder_DecodeTexel(sampledTex, imageSrc, imageSPlus1, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); + AddTexel(sampledTex, texel, (fractS) * (128 - fractT)); + + TexDecoder_DecodeTexel(sampledTex, imageSrc, imageS, imageTPlus1, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); + AddTexel(sampledTex, texel, (128 - fractS) * (fractT)); + + TexDecoder_DecodeTexel(sampledTex, imageSrc, imageSPlus1, imageTPlus1, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); + AddTexel(sampledTex, texel, (fractS) * (fractT)); + + sample[0] = (u8)(texel[0] >> 14); + sample[1] = (u8)(texel[1] >> 14); + sample[2] = (u8)(texel[2] >> 14); + sample[3] = (u8)(texel[3] >> 14); + } + else + { + // integer part of sample location + int imageS = s >> 7; + int imageT = t >> 7; + + // nearest neighbor sampling + WrapCoord(imageS, tm0.wrap_s, imageWidth); + WrapCoord(imageT, tm0.wrap_t, imageHeight); + + TexDecoder_DecodeTexel(sample, imageSrc, imageS, imageT, imageWidth, ti0.format, tlutAddress, texTlut.tlut_format); + } +} + +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/VertexLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/VertexLoader.cpp index c96538e0e5..4f9d96f37d 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/VertexLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/VertexLoader.cpp @@ -1,344 +1,344 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" - -#include "VertexLoader.h" -#include "VertexLoader_Position.h" -#include "../../../Core/VideoCommon/Src/VertexLoader_Normal.h" -#include "../../../Core/VideoCommon/Src/VertexLoader_Color.h" -#include "../../../Core/VideoCommon/Src/VertexLoader_TextCoord.h" - -#include "CPMemLoader.h" -#include "XFMemLoader.h" - -#include "TransformUnit.h" -#include "SetupUnit.h" -#include "Statistics.h" -#include "NativeVertexWriter.h" -#include "VertexFormatConverter.h" -#include "../../../Core/VideoCommon/Src/DataReader.h" - -// Vertex loaders read these -int tcIndex; -int colIndex; -int colElements[2]; -float posScale; -float tcScale[8]; - - -VertexLoader::VertexLoader() : - m_VertexSize(0), - m_NumAttributeLoaders(0) - { - VertexLoader_Normal::Init(); - VertexLoader_Position::Init(); - VertexLoader_TextCoord::Init(); - - m_SetupUnit = new SetupUnit; - } - -VertexLoader::~VertexLoader() -{ - delete m_SetupUnit; - m_SetupUnit = NULL; -} - -void VertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType) -{ - m_CurrentVat = &g_VtxAttr[attributeIndex]; - - posScale = 1.0f / float(1 << m_CurrentVat->g0.PosFrac); - tcScale[0] = 1.0f / float(1 << m_CurrentVat->g0.Tex0Frac); - tcScale[1] = 1.0f / float(1 << m_CurrentVat->g1.Tex1Frac); - tcScale[2] = 1.0f / float(1 << m_CurrentVat->g1.Tex2Frac); - tcScale[3] = 1.0f / float(1 << m_CurrentVat->g1.Tex3Frac); - tcScale[4] = 1.0f / float(1 << m_CurrentVat->g2.Tex4Frac); - tcScale[5] = 1.0f / float(1 << m_CurrentVat->g2.Tex5Frac); - tcScale[6] = 1.0f / float(1 << m_CurrentVat->g2.Tex6Frac); - tcScale[7] = 1.0f / float(1 << m_CurrentVat->g2.Tex7Frac); - - //TexMtx - const int tmDesc[8] = { - g_VtxDesc.Tex0MatIdx, g_VtxDesc.Tex1MatIdx, g_VtxDesc.Tex2MatIdx, g_VtxDesc.Tex3MatIdx, - g_VtxDesc.Tex4MatIdx, g_VtxDesc.Tex5MatIdx, g_VtxDesc.Tex6MatIdx, g_VtxDesc.Tex7MatIdx - }; - // Colors - const int colDesc[2] = {g_VtxDesc.Color0, g_VtxDesc.Color1}; - colElements[0] = m_CurrentVat->g0.Color0Elements; - colElements[1] = m_CurrentVat->g0.Color1Elements; - const int colComp[2] = {m_CurrentVat->g0.Color0Comp, m_CurrentVat->g0.Color1Comp}; - // TextureCoord - const int tcDesc[8] = { - g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, g_VtxDesc.Tex2Coord, g_VtxDesc.Tex3Coord, - g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (g_VtxDesc.Hex >> 31) & 3 - }; - const int tcElements[8] = { - m_CurrentVat->g0.Tex0CoordElements, m_CurrentVat->g1.Tex1CoordElements, m_CurrentVat->g1.Tex2CoordElements, - m_CurrentVat->g1.Tex3CoordElements, m_CurrentVat->g1.Tex4CoordElements, m_CurrentVat->g2.Tex5CoordElements, - m_CurrentVat->g2.Tex6CoordElements, m_CurrentVat->g2.Tex7CoordElements - }; - - const int tcFormat[8] = { - m_CurrentVat->g0.Tex0CoordFormat, m_CurrentVat->g1.Tex1CoordFormat, m_CurrentVat->g1.Tex2CoordFormat, - m_CurrentVat->g1.Tex3CoordFormat, m_CurrentVat->g1.Tex4CoordFormat, m_CurrentVat->g2.Tex5CoordFormat, - m_CurrentVat->g2.Tex6CoordFormat, m_CurrentVat->g2.Tex7CoordFormat - }; - - m_VertexSize = 0; - - // Reset pipeline - m_positionLoader = NULL; - m_normalLoader = NULL; - m_NumAttributeLoaders = 0; - - // Reset vertex - // matrix index from xfregs or cp memory? - _assert_msg_(VIDEO, xfregs.MatrixIndexA.PosNormalMtxIdx == MatrixIndexA.PosNormalMtxIdx, "Matrix indices don't match"); - //_assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex0MtxIdx == MatrixIndexA.Tex0MtxIdx, "Matrix indices don't match"); - //_assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex1MtxIdx == MatrixIndexA.Tex1MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex2MtxIdx == MatrixIndexA.Tex2MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex3MtxIdx == MatrixIndexA.Tex3MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex4MtxIdx == MatrixIndexB.Tex4MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex5MtxIdx == MatrixIndexB.Tex5MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex6MtxIdx == MatrixIndexB.Tex6MtxIdx, "Matrix indices don't match"); - _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex7MtxIdx == MatrixIndexB.Tex7MtxIdx, "Matrix indices don't match"); - m_Vertex.posMtx = xfregs.MatrixIndexA.PosNormalMtxIdx; - m_Vertex.texMtx[0] = xfregs.MatrixIndexA.Tex0MtxIdx; - m_Vertex.texMtx[1] = xfregs.MatrixIndexA.Tex1MtxIdx; - m_Vertex.texMtx[2] = xfregs.MatrixIndexA.Tex2MtxIdx; - m_Vertex.texMtx[3] = xfregs.MatrixIndexA.Tex3MtxIdx; - m_Vertex.texMtx[4] = xfregs.MatrixIndexB.Tex4MtxIdx; - m_Vertex.texMtx[5] = xfregs.MatrixIndexB.Tex5MtxIdx; - m_Vertex.texMtx[6] = xfregs.MatrixIndexB.Tex6MtxIdx; - m_Vertex.texMtx[7] = xfregs.MatrixIndexB.Tex7MtxIdx; - /*m_Vertex.posMtx = MatrixIndexA.PosNormalMtxIdx; - m_Vertex.texMtx[0] = MatrixIndexA.Tex0MtxIdx; - m_Vertex.texMtx[1] = MatrixIndexA.Tex1MtxIdx; - m_Vertex.texMtx[2] = MatrixIndexA.Tex2MtxIdx; - m_Vertex.texMtx[3] = MatrixIndexA.Tex3MtxIdx; - m_Vertex.texMtx[4] = MatrixIndexB.Tex4MtxIdx; - m_Vertex.texMtx[5] = MatrixIndexB.Tex5MtxIdx; - m_Vertex.texMtx[6] = MatrixIndexB.Tex6MtxIdx; - m_Vertex.texMtx[7] = MatrixIndexB.Tex7MtxIdx;*/ - - if (g_VtxDesc.PosMatIdx != NOT_PRESENT) { - AddAttributeLoader(LoadPosMtx); - m_VertexSize++; - } - - for (int i = 0; i < 8; ++i) { - if (tmDesc[i] != NOT_PRESENT) - { - AddAttributeLoader(LoadTexMtx, i); - m_VertexSize++; - } - } - - // Write vertex position loader - m_positionLoader = VertexLoader_Position::GetFunction(g_VtxDesc.Position, m_CurrentVat->g0.PosFormat, m_CurrentVat->g0.PosElements); - m_VertexSize += VertexLoader_Position::GetSize(g_VtxDesc.Position, m_CurrentVat->g0.PosFormat, m_CurrentVat->g0.PosElements); - AddAttributeLoader(LoadPosition); - - // Normals - if (g_VtxDesc.Normal != NOT_PRESENT) { - m_VertexSize += VertexLoader_Normal::GetSize(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3); - m_normalLoader = VertexLoader_Normal::GetFunction(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3, true); - if (m_normalLoader == 0) - { - ERROR_LOG(VIDEO, "VertexLoader_Normal::GetFunction returned zero!"); - } - AddAttributeLoader(LoadNormal); - - switch (m_CurrentVat->g0.NormalFormat) { - case FORMAT_UBYTE: - case FORMAT_BYTE: - if (m_CurrentVat->g0.NormalElements) - m_normalConverter = VertexFormatConverter::LoadNormal3_Byte; - else - m_normalConverter = VertexFormatConverter::LoadNormal1_Byte; - break; - case FORMAT_USHORT: - case FORMAT_SHORT: - if (m_CurrentVat->g0.NormalElements) - m_normalConverter = VertexFormatConverter::LoadNormal3_Short; - else - m_normalConverter = VertexFormatConverter::LoadNormal1_Short; - break; - case FORMAT_FLOAT: - if (m_CurrentVat->g0.NormalElements) - m_normalConverter = VertexFormatConverter::LoadNormal3_Float; - else - m_normalConverter = VertexFormatConverter::LoadNormal1_Float; - break; - default: _assert_(0); break; - } - } - - for (int i = 0; i < 2; i++) { - switch (colDesc[i]) - { - case NOT_PRESENT: - m_colorLoader[i] = NULL; - break; - case DIRECT: - switch (colComp[i]) - { - case FORMAT_16B_565: m_VertexSize += 2; m_colorLoader[i] = (Color_ReadDirect_16b_565); break; - case FORMAT_24B_888: m_VertexSize += 3; m_colorLoader[i] = (Color_ReadDirect_24b_888); break; - case FORMAT_32B_888x: m_VertexSize += 4; m_colorLoader[i] = (Color_ReadDirect_32b_888x); break; - case FORMAT_16B_4444: m_VertexSize += 2; m_colorLoader[i] = (Color_ReadDirect_16b_4444); break; - case FORMAT_24B_6666: m_VertexSize += 3; m_colorLoader[i] = (Color_ReadDirect_24b_6666); break; - case FORMAT_32B_8888: m_VertexSize += 4; m_colorLoader[i] = (Color_ReadDirect_32b_8888); break; - default: _assert_(0); break; - } - AddAttributeLoader(LoadColor, i); - break; - case INDEX8: - m_VertexSize += 1; - switch (colComp[i]) - { - case FORMAT_16B_565: m_colorLoader[i] = (Color_ReadIndex8_16b_565); break; - case FORMAT_24B_888: m_colorLoader[i] = (Color_ReadIndex8_24b_888); break; - case FORMAT_32B_888x: m_colorLoader[i] = (Color_ReadIndex8_32b_888x); break; - case FORMAT_16B_4444: m_colorLoader[i] = (Color_ReadIndex8_16b_4444); break; - case FORMAT_24B_6666: m_colorLoader[i] = (Color_ReadIndex8_24b_6666); break; - case FORMAT_32B_8888: m_colorLoader[i] = (Color_ReadIndex8_32b_8888); break; - default: _assert_(0); break; - } - AddAttributeLoader(LoadColor, i); - break; - case INDEX16: - m_VertexSize += 2; - switch (colComp[i]) - { - case FORMAT_16B_565: m_colorLoader[i] = (Color_ReadIndex16_16b_565); break; - case FORMAT_24B_888: m_colorLoader[i] = (Color_ReadIndex16_24b_888); break; - case FORMAT_32B_888x: m_colorLoader[i] = (Color_ReadIndex16_32b_888x); break; - case FORMAT_16B_4444: m_colorLoader[i] = (Color_ReadIndex16_16b_4444); break; - case FORMAT_24B_6666: m_colorLoader[i] = (Color_ReadIndex16_24b_6666); break; - case FORMAT_32B_8888: m_colorLoader[i] = (Color_ReadIndex16_32b_8888); break; - default: _assert_(0); break; - } - AddAttributeLoader(LoadColor, i); - break; - } - } - - // Texture matrix indices (remove if corresponding texture coordinate isn't enabled) - for (int i = 0; i < 8; i++) { - const int desc = tcDesc[i]; - const int format = tcFormat[i]; - const int elements = tcElements[i]; - _assert_msg_(VIDEO, NOT_PRESENT <= desc && desc <= INDEX16, "Invalid texture coordinates description!\n(desc = %d)", desc); - _assert_msg_(VIDEO, FORMAT_UBYTE <= format && format <= FORMAT_FLOAT, "Invalid texture coordinates format!\n(format = %d)", format); - _assert_msg_(VIDEO, 0 <= elements && elements <= 1, "Invalid number of texture coordinates elemnts!\n(elements = %d)", elements); - - m_texCoordLoader[i] = VertexLoader_TextCoord::GetFunction(desc, format, elements); - m_VertexSize += VertexLoader_TextCoord::GetSize(desc, format, elements); - if (m_texCoordLoader[i]) - AddAttributeLoader(LoadTexCoord, i); - } - - // special case if only pos and tex coord 0 and tex coord input is AB11 - m_TexGenSpecialCase = - ((g_VtxDesc.Hex & 0x60600L) == g_VtxDesc.Hex) && // only pos and tex coord 0 - (g_VtxDesc.Tex0Coord != NOT_PRESENT) && - (xfregs.texMtxInfo[0].inputform == XF_TEXINPUT_AB11); - - - m_SetupUnit->Init(primitiveType); -} - - -void VertexLoader::LoadVertex() -{ - for (int i = 0; i < m_NumAttributeLoaders; i++) - m_AttributeLoaders[i].loader(this, &m_Vertex, m_AttributeLoaders[i].index); - - OutputVertexData* outVertex = m_SetupUnit->GetVertex(); - - // transform input data - TransformUnit::TransformPosition(&m_Vertex, outVertex); - - if (g_VtxDesc.Normal != NOT_PRESENT) - { - TransformUnit::TransformNormal(&m_Vertex, m_CurrentVat->g0.NormalElements, outVertex); - } - - TransformUnit::TransformColor(&m_Vertex, outVertex); - - TransformUnit::TransformTexCoord(&m_Vertex, outVertex, m_TexGenSpecialCase); - - m_SetupUnit->SetupVertex(); - - INCSTAT(stats.thisFrame.numVerticesLoaded) -} - -void VertexLoader::AddAttributeLoader(AttributeLoader loader, u8 index) -{ - _assert_msg_(VIDEO, m_NumAttributeLoaders < 21, "Too many attribute loaders"); - m_AttributeLoaders[m_NumAttributeLoaders].loader = loader; - m_AttributeLoaders[m_NumAttributeLoaders++].index = index; -} - -void VertexLoader::LoadPosMtx(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) -{ - vertex->posMtx = DataReadU8() & 0x3f; -} - -void VertexLoader::LoadTexMtx(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) -{ - vertex->texMtx[index] = DataReadU8() & 0x3f; -} - -void VertexLoader::LoadPosition(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) -{ - VertexManager::s_pCurBufferPointer = (u8*)&vertex->position; - vertexLoader->m_positionLoader(); -} - -void VertexLoader::LoadNormal(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) -{ - u8 buffer[3*3*4]; - - VertexManager::s_pCurBufferPointer = buffer; - vertexLoader->m_normalLoader(); - - // the common vertex loader loads data as bytes, shorts or floats so an extra step is needed to make it floats - vertexLoader->m_normalConverter(vertex, buffer); -} - -void VertexLoader::LoadColor(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) -{ - u32 color; - VertexManager::s_pCurBufferPointer = (u8*)&color; - colIndex = index; - vertexLoader->m_colorLoader[index](); - - // rgba -> abgr - *(u32*)vertex->color[index] = Common::swap32(color); -} - -void VertexLoader::LoadTexCoord(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) -{ - VertexManager::s_pCurBufferPointer = (u8*)&vertex->texCoords[index]; - tcIndex = index; - vertexLoader->m_texCoordLoader[index](); -} - - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" + +#include "VertexLoader.h" +#include "VertexLoader_Position.h" +#include "../../../Core/VideoCommon/Src/VertexLoader_Normal.h" +#include "../../../Core/VideoCommon/Src/VertexLoader_Color.h" +#include "../../../Core/VideoCommon/Src/VertexLoader_TextCoord.h" + +#include "CPMemLoader.h" +#include "XFMemLoader.h" + +#include "TransformUnit.h" +#include "SetupUnit.h" +#include "Statistics.h" +#include "NativeVertexWriter.h" +#include "VertexFormatConverter.h" +#include "../../../Core/VideoCommon/Src/DataReader.h" + +// Vertex loaders read these +int tcIndex; +int colIndex; +int colElements[2]; +float posScale; +float tcScale[8]; + + +VertexLoader::VertexLoader() : + m_VertexSize(0), + m_NumAttributeLoaders(0) + { + VertexLoader_Normal::Init(); + VertexLoader_Position::Init(); + VertexLoader_TextCoord::Init(); + + m_SetupUnit = new SetupUnit; + } + +VertexLoader::~VertexLoader() +{ + delete m_SetupUnit; + m_SetupUnit = NULL; +} + +void VertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType) +{ + m_CurrentVat = &g_VtxAttr[attributeIndex]; + + posScale = 1.0f / float(1 << m_CurrentVat->g0.PosFrac); + tcScale[0] = 1.0f / float(1 << m_CurrentVat->g0.Tex0Frac); + tcScale[1] = 1.0f / float(1 << m_CurrentVat->g1.Tex1Frac); + tcScale[2] = 1.0f / float(1 << m_CurrentVat->g1.Tex2Frac); + tcScale[3] = 1.0f / float(1 << m_CurrentVat->g1.Tex3Frac); + tcScale[4] = 1.0f / float(1 << m_CurrentVat->g2.Tex4Frac); + tcScale[5] = 1.0f / float(1 << m_CurrentVat->g2.Tex5Frac); + tcScale[6] = 1.0f / float(1 << m_CurrentVat->g2.Tex6Frac); + tcScale[7] = 1.0f / float(1 << m_CurrentVat->g2.Tex7Frac); + + //TexMtx + const int tmDesc[8] = { + g_VtxDesc.Tex0MatIdx, g_VtxDesc.Tex1MatIdx, g_VtxDesc.Tex2MatIdx, g_VtxDesc.Tex3MatIdx, + g_VtxDesc.Tex4MatIdx, g_VtxDesc.Tex5MatIdx, g_VtxDesc.Tex6MatIdx, g_VtxDesc.Tex7MatIdx + }; + // Colors + const int colDesc[2] = {g_VtxDesc.Color0, g_VtxDesc.Color1}; + colElements[0] = m_CurrentVat->g0.Color0Elements; + colElements[1] = m_CurrentVat->g0.Color1Elements; + const int colComp[2] = {m_CurrentVat->g0.Color0Comp, m_CurrentVat->g0.Color1Comp}; + // TextureCoord + const int tcDesc[8] = { + g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, g_VtxDesc.Tex2Coord, g_VtxDesc.Tex3Coord, + g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (g_VtxDesc.Hex >> 31) & 3 + }; + const int tcElements[8] = { + m_CurrentVat->g0.Tex0CoordElements, m_CurrentVat->g1.Tex1CoordElements, m_CurrentVat->g1.Tex2CoordElements, + m_CurrentVat->g1.Tex3CoordElements, m_CurrentVat->g1.Tex4CoordElements, m_CurrentVat->g2.Tex5CoordElements, + m_CurrentVat->g2.Tex6CoordElements, m_CurrentVat->g2.Tex7CoordElements + }; + + const int tcFormat[8] = { + m_CurrentVat->g0.Tex0CoordFormat, m_CurrentVat->g1.Tex1CoordFormat, m_CurrentVat->g1.Tex2CoordFormat, + m_CurrentVat->g1.Tex3CoordFormat, m_CurrentVat->g1.Tex4CoordFormat, m_CurrentVat->g2.Tex5CoordFormat, + m_CurrentVat->g2.Tex6CoordFormat, m_CurrentVat->g2.Tex7CoordFormat + }; + + m_VertexSize = 0; + + // Reset pipeline + m_positionLoader = NULL; + m_normalLoader = NULL; + m_NumAttributeLoaders = 0; + + // Reset vertex + // matrix index from xfregs or cp memory? + _assert_msg_(VIDEO, xfregs.MatrixIndexA.PosNormalMtxIdx == MatrixIndexA.PosNormalMtxIdx, "Matrix indices don't match"); + //_assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex0MtxIdx == MatrixIndexA.Tex0MtxIdx, "Matrix indices don't match"); + //_assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex1MtxIdx == MatrixIndexA.Tex1MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex2MtxIdx == MatrixIndexA.Tex2MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexA.Tex3MtxIdx == MatrixIndexA.Tex3MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex4MtxIdx == MatrixIndexB.Tex4MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex5MtxIdx == MatrixIndexB.Tex5MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex6MtxIdx == MatrixIndexB.Tex6MtxIdx, "Matrix indices don't match"); + _assert_msg_(VIDEO, xfregs.MatrixIndexB.Tex7MtxIdx == MatrixIndexB.Tex7MtxIdx, "Matrix indices don't match"); + m_Vertex.posMtx = xfregs.MatrixIndexA.PosNormalMtxIdx; + m_Vertex.texMtx[0] = xfregs.MatrixIndexA.Tex0MtxIdx; + m_Vertex.texMtx[1] = xfregs.MatrixIndexA.Tex1MtxIdx; + m_Vertex.texMtx[2] = xfregs.MatrixIndexA.Tex2MtxIdx; + m_Vertex.texMtx[3] = xfregs.MatrixIndexA.Tex3MtxIdx; + m_Vertex.texMtx[4] = xfregs.MatrixIndexB.Tex4MtxIdx; + m_Vertex.texMtx[5] = xfregs.MatrixIndexB.Tex5MtxIdx; + m_Vertex.texMtx[6] = xfregs.MatrixIndexB.Tex6MtxIdx; + m_Vertex.texMtx[7] = xfregs.MatrixIndexB.Tex7MtxIdx; + /*m_Vertex.posMtx = MatrixIndexA.PosNormalMtxIdx; + m_Vertex.texMtx[0] = MatrixIndexA.Tex0MtxIdx; + m_Vertex.texMtx[1] = MatrixIndexA.Tex1MtxIdx; + m_Vertex.texMtx[2] = MatrixIndexA.Tex2MtxIdx; + m_Vertex.texMtx[3] = MatrixIndexA.Tex3MtxIdx; + m_Vertex.texMtx[4] = MatrixIndexB.Tex4MtxIdx; + m_Vertex.texMtx[5] = MatrixIndexB.Tex5MtxIdx; + m_Vertex.texMtx[6] = MatrixIndexB.Tex6MtxIdx; + m_Vertex.texMtx[7] = MatrixIndexB.Tex7MtxIdx;*/ + + if (g_VtxDesc.PosMatIdx != NOT_PRESENT) { + AddAttributeLoader(LoadPosMtx); + m_VertexSize++; + } + + for (int i = 0; i < 8; ++i) { + if (tmDesc[i] != NOT_PRESENT) + { + AddAttributeLoader(LoadTexMtx, i); + m_VertexSize++; + } + } + + // Write vertex position loader + m_positionLoader = VertexLoader_Position::GetFunction(g_VtxDesc.Position, m_CurrentVat->g0.PosFormat, m_CurrentVat->g0.PosElements); + m_VertexSize += VertexLoader_Position::GetSize(g_VtxDesc.Position, m_CurrentVat->g0.PosFormat, m_CurrentVat->g0.PosElements); + AddAttributeLoader(LoadPosition); + + // Normals + if (g_VtxDesc.Normal != NOT_PRESENT) { + m_VertexSize += VertexLoader_Normal::GetSize(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3); + m_normalLoader = VertexLoader_Normal::GetFunction(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3, true); + if (m_normalLoader == 0) + { + ERROR_LOG(VIDEO, "VertexLoader_Normal::GetFunction returned zero!"); + } + AddAttributeLoader(LoadNormal); + + switch (m_CurrentVat->g0.NormalFormat) { + case FORMAT_UBYTE: + case FORMAT_BYTE: + if (m_CurrentVat->g0.NormalElements) + m_normalConverter = VertexFormatConverter::LoadNormal3_Byte; + else + m_normalConverter = VertexFormatConverter::LoadNormal1_Byte; + break; + case FORMAT_USHORT: + case FORMAT_SHORT: + if (m_CurrentVat->g0.NormalElements) + m_normalConverter = VertexFormatConverter::LoadNormal3_Short; + else + m_normalConverter = VertexFormatConverter::LoadNormal1_Short; + break; + case FORMAT_FLOAT: + if (m_CurrentVat->g0.NormalElements) + m_normalConverter = VertexFormatConverter::LoadNormal3_Float; + else + m_normalConverter = VertexFormatConverter::LoadNormal1_Float; + break; + default: _assert_(0); break; + } + } + + for (int i = 0; i < 2; i++) { + switch (colDesc[i]) + { + case NOT_PRESENT: + m_colorLoader[i] = NULL; + break; + case DIRECT: + switch (colComp[i]) + { + case FORMAT_16B_565: m_VertexSize += 2; m_colorLoader[i] = (Color_ReadDirect_16b_565); break; + case FORMAT_24B_888: m_VertexSize += 3; m_colorLoader[i] = (Color_ReadDirect_24b_888); break; + case FORMAT_32B_888x: m_VertexSize += 4; m_colorLoader[i] = (Color_ReadDirect_32b_888x); break; + case FORMAT_16B_4444: m_VertexSize += 2; m_colorLoader[i] = (Color_ReadDirect_16b_4444); break; + case FORMAT_24B_6666: m_VertexSize += 3; m_colorLoader[i] = (Color_ReadDirect_24b_6666); break; + case FORMAT_32B_8888: m_VertexSize += 4; m_colorLoader[i] = (Color_ReadDirect_32b_8888); break; + default: _assert_(0); break; + } + AddAttributeLoader(LoadColor, i); + break; + case INDEX8: + m_VertexSize += 1; + switch (colComp[i]) + { + case FORMAT_16B_565: m_colorLoader[i] = (Color_ReadIndex8_16b_565); break; + case FORMAT_24B_888: m_colorLoader[i] = (Color_ReadIndex8_24b_888); break; + case FORMAT_32B_888x: m_colorLoader[i] = (Color_ReadIndex8_32b_888x); break; + case FORMAT_16B_4444: m_colorLoader[i] = (Color_ReadIndex8_16b_4444); break; + case FORMAT_24B_6666: m_colorLoader[i] = (Color_ReadIndex8_24b_6666); break; + case FORMAT_32B_8888: m_colorLoader[i] = (Color_ReadIndex8_32b_8888); break; + default: _assert_(0); break; + } + AddAttributeLoader(LoadColor, i); + break; + case INDEX16: + m_VertexSize += 2; + switch (colComp[i]) + { + case FORMAT_16B_565: m_colorLoader[i] = (Color_ReadIndex16_16b_565); break; + case FORMAT_24B_888: m_colorLoader[i] = (Color_ReadIndex16_24b_888); break; + case FORMAT_32B_888x: m_colorLoader[i] = (Color_ReadIndex16_32b_888x); break; + case FORMAT_16B_4444: m_colorLoader[i] = (Color_ReadIndex16_16b_4444); break; + case FORMAT_24B_6666: m_colorLoader[i] = (Color_ReadIndex16_24b_6666); break; + case FORMAT_32B_8888: m_colorLoader[i] = (Color_ReadIndex16_32b_8888); break; + default: _assert_(0); break; + } + AddAttributeLoader(LoadColor, i); + break; + } + } + + // Texture matrix indices (remove if corresponding texture coordinate isn't enabled) + for (int i = 0; i < 8; i++) { + const int desc = tcDesc[i]; + const int format = tcFormat[i]; + const int elements = tcElements[i]; + _assert_msg_(VIDEO, NOT_PRESENT <= desc && desc <= INDEX16, "Invalid texture coordinates description!\n(desc = %d)", desc); + _assert_msg_(VIDEO, FORMAT_UBYTE <= format && format <= FORMAT_FLOAT, "Invalid texture coordinates format!\n(format = %d)", format); + _assert_msg_(VIDEO, 0 <= elements && elements <= 1, "Invalid number of texture coordinates elemnts!\n(elements = %d)", elements); + + m_texCoordLoader[i] = VertexLoader_TextCoord::GetFunction(desc, format, elements); + m_VertexSize += VertexLoader_TextCoord::GetSize(desc, format, elements); + if (m_texCoordLoader[i]) + AddAttributeLoader(LoadTexCoord, i); + } + + // special case if only pos and tex coord 0 and tex coord input is AB11 + m_TexGenSpecialCase = + ((g_VtxDesc.Hex & 0x60600L) == g_VtxDesc.Hex) && // only pos and tex coord 0 + (g_VtxDesc.Tex0Coord != NOT_PRESENT) && + (xfregs.texMtxInfo[0].inputform == XF_TEXINPUT_AB11); + + + m_SetupUnit->Init(primitiveType); +} + + +void VertexLoader::LoadVertex() +{ + for (int i = 0; i < m_NumAttributeLoaders; i++) + m_AttributeLoaders[i].loader(this, &m_Vertex, m_AttributeLoaders[i].index); + + OutputVertexData* outVertex = m_SetupUnit->GetVertex(); + + // transform input data + TransformUnit::TransformPosition(&m_Vertex, outVertex); + + if (g_VtxDesc.Normal != NOT_PRESENT) + { + TransformUnit::TransformNormal(&m_Vertex, m_CurrentVat->g0.NormalElements, outVertex); + } + + TransformUnit::TransformColor(&m_Vertex, outVertex); + + TransformUnit::TransformTexCoord(&m_Vertex, outVertex, m_TexGenSpecialCase); + + m_SetupUnit->SetupVertex(); + + INCSTAT(stats.thisFrame.numVerticesLoaded) +} + +void VertexLoader::AddAttributeLoader(AttributeLoader loader, u8 index) +{ + _assert_msg_(VIDEO, m_NumAttributeLoaders < 21, "Too many attribute loaders"); + m_AttributeLoaders[m_NumAttributeLoaders].loader = loader; + m_AttributeLoaders[m_NumAttributeLoaders++].index = index; +} + +void VertexLoader::LoadPosMtx(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) +{ + vertex->posMtx = DataReadU8() & 0x3f; +} + +void VertexLoader::LoadTexMtx(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) +{ + vertex->texMtx[index] = DataReadU8() & 0x3f; +} + +void VertexLoader::LoadPosition(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) +{ + VertexManager::s_pCurBufferPointer = (u8*)&vertex->position; + vertexLoader->m_positionLoader(); +} + +void VertexLoader::LoadNormal(VertexLoader *vertexLoader, InputVertexData *vertex, u8 unused) +{ + u8 buffer[3*3*4]; + + VertexManager::s_pCurBufferPointer = buffer; + vertexLoader->m_normalLoader(); + + // the common vertex loader loads data as bytes, shorts or floats so an extra step is needed to make it floats + vertexLoader->m_normalConverter(vertex, buffer); +} + +void VertexLoader::LoadColor(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) +{ + u32 color; + VertexManager::s_pCurBufferPointer = (u8*)&color; + colIndex = index; + vertexLoader->m_colorLoader[index](); + + // rgba -> abgr + *(u32*)vertex->color[index] = Common::swap32(color); +} + +void VertexLoader::LoadTexCoord(VertexLoader *vertexLoader, InputVertexData *vertex, u8 index) +{ + VertexManager::s_pCurBufferPointer = (u8*)&vertex->texCoords[index]; + tcIndex = index; + vertexLoader->m_texCoordLoader[index](); +} + + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.cpp index 74470df1a4..b56f77479e 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.cpp @@ -1,64 +1,64 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "FileUtil.h" -#include "IniFile.h" -#include "VideoConfig.h" - -Config g_Config; - -Config::Config() -{ - bFullscreen = false; - bHideCursor = false; - renderToMainframe = false; - - bShowStats = false; - bDumpTextures = false; - bDumpObjects = false; - bDumpFrames = false; - bDumpTevStages = false; - - bHwRasterizer = false; - - drawStart = 0; - drawEnd = 100000; -} - -void Config::Load() -{ - std::string temp; - IniFile iniFile; - iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str()); - - iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware - iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); -} - - - -void Config::Save() -{ - IniFile iniFile; - iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str()); - - iniFile.Set("Hardware", "Fullscreen", bFullscreen); - iniFile.Set("Hardware", "RenderToMainframe", renderToMainframe); - - iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_opengl.ini").c_str()); -} - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "FileUtil.h" +#include "IniFile.h" +#include "VideoConfig.h" + +Config g_Config; + +Config::Config() +{ + bFullscreen = false; + bHideCursor = false; + renderToMainframe = false; + + bShowStats = false; + bDumpTextures = false; + bDumpObjects = false; + bDumpFrames = false; + bDumpTevStages = false; + + bHwRasterizer = false; + + drawStart = 0; + drawEnd = 100000; +} + +void Config::Load() +{ + std::string temp; + IniFile iniFile; + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str()); + + iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware + iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); +} + + + +void Config::Save() +{ + IniFile iniFile; + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str()); + + iniFile.Set("Hardware", "Fullscreen", bFullscreen); + iniFile.Set("Hardware", "RenderToMainframe", renderToMainframe); + + iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_opengl.ini").c_str()); +} + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.h b/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.h index 12ba8ba78f..806a14ba40 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/VideoConfig.h @@ -1,54 +1,54 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ -#define _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ - -#include "Common.h" - -#define STATISTICS 1 - -// NEVER inherit from this class. -struct Config -{ - Config(); - void Load(); - void Save(); - - // General - bool bFullscreen; - bool bHideCursor; - bool renderToMainframe; - - bool bShowStats; - bool bDumpTextures; - bool bDumpObjects; - bool bDumpFrames; - bool bDumpTevStages; - - bool bHwRasterizer; - - u32 drawStart; - u32 drawEnd; - -private: - DISALLOW_COPY_AND_ASSIGN(Config); -}; - -extern Config g_Config; - -#endif // _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ +#define _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ + +#include "Common.h" + +#define STATISTICS 1 + +// NEVER inherit from this class. +struct Config +{ + Config(); + void Load(); + void Save(); + + // General + bool bFullscreen; + bool bHideCursor; + bool renderToMainframe; + + bool bShowStats; + bool bDumpTextures; + bool bDumpObjects; + bool bDumpFrames; + bool bDumpTevStages; + + bool bHwRasterizer; + + u32 drawStart; + u32 drawEnd; + +private: + DISALLOW_COPY_AND_ASSIGN(Config); +}; + +extern Config g_Config; + +#endif // _PLUGIN_VIDEOSOFTWARE_CONFIG_H_ diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Win32.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Win32.cpp index 5011857bea..177da8fcb7 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Win32.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Win32.cpp @@ -1,389 +1,389 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include - -#include -#include -#include -#include -#include - -#include "VideoConfig.h" -#include "main.h" -#include "Win32.h" - -#include "StringUtil.h" - - -HINSTANCE g_hInstance; - -#if defined(HAVE_WX) && HAVE_WX -class wxDLLApp : public wxApp -{ - bool OnInit() - { - return true; - } -}; -IMPLEMENT_APP_NO_MAIN(wxDLLApp) -WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); -#endif -// ------------------ - -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle - DWORD dwReason, // reason called - LPVOID lpvReserved) // reserved -{ - switch (dwReason) - { - case DLL_PROCESS_ATTACH: - { -#if defined(HAVE_WX) && HAVE_WX - wxSetInstance((HINSTANCE)hinstDLL); - wxInitialize(); -#endif - } - break; - - case DLL_PROCESS_DETACH: -#if defined(HAVE_WX) && HAVE_WX - wxUninitialize(); -#endif - break; - } - - g_hInstance = hinstDLL; - return TRUE; -} - -// ---------------------- -// The rendering window -// ---------------------- -namespace EmuWindow -{ - -HWND m_hWnd = NULL; // The new window that is created here -HWND m_hParent = NULL; - -HINSTANCE m_hInstance = NULL; -WNDCLASSEX wndClass; -const TCHAR m_szClassName[] = _T("DolphinEmuWnd"); -int g_winstyle; - -// ------------------------------------------ -/* Invisible cursor option. In the lack of a predefined IDC_BLANK we make - an empty transparent cursor */ -// ------------------ -HCURSOR hCursor = NULL, hCursorBlank = NULL; -void CreateCursors(HINSTANCE hInstance) -{ - BYTE ANDmaskCursor[] = { 0xff }; - BYTE XORmaskCursor[] = { 0x00 }; - hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor); - - hCursor = LoadCursor(NULL, IDC_ARROW); -} - -HWND GetWnd() -{ - return m_hWnd; -} - -HWND GetParentWnd() -{ - return m_hParent; -} - -LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) -{ - HDC hdc; - PAINTSTRUCT ps; - switch( iMsg ) - { - case WM_CREATE: - PostMessage(m_hParent, WM_USER, WM_USER_CREATE, (int)m_hParent); - break; - - case WM_PAINT: - hdc = BeginPaint( hWnd, &ps ); - EndPaint( hWnd, &ps ); - break; - - case WM_SYSKEYDOWN: - switch( LOWORD( wParam )) - { - case VK_RETURN: - // Pressing Alt+Enter switch FullScreen/Windowed - if (m_hParent == NULL && !g_Config.renderToMainframe) - { - ToggleFullscreen(hWnd); - } - break; - case VK_F5: case VK_F6: case VK_F7: case VK_F8: - PostMessage(m_hParent, WM_SYSKEYDOWN, wParam, lParam); - break; - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - break; - - case WM_KEYDOWN: - switch (LOWORD( wParam )) - { - case VK_ESCAPE: - if (g_Config.bFullscreen) - { - // Pressing Esc switches to Windowed mode from Fullscreen mode - ToggleFullscreen(hWnd); - } - // And pause the emulation when already in Windowed mode - PostMessage(m_hParent, WM_USER, WM_USER_PAUSE, 0); - break; - } - break; - - /* The reason we pick up the WM_MOUSEMOVE is to be able to change this option - during gameplay. The alternative is to load one of the cursors when the plugin - is loaded and go with that. This should only produce a minimal performance hit - because SetCursor is not supposed to actually change the cursor if it's the - same as the one before. */ - case WM_MOUSEMOVE: - /* Check rendering mode; child or parent. Then post the mouse moves to the main window - it's nessesary for both the chil dwindow and separate rendering window because - moves over the rendering window do not reach the main program then. */ - if (GetParentWnd() == NULL) // Separate rendering window - PostMessage(m_hParent, iMsg, wParam, -1); - else - PostMessage(GetParentWnd(), iMsg, wParam, lParam); - break; - - /* To support the separate window rendering we get the message back here. So we basically - only let it pass through Dolphin > Frame.cpp to determine if it should be on or off - and coordinate it with the other settings if necessary */ - case WM_USER: - if (wParam == WM_USER_STOP) - SetCursor((lParam) ? hCursor : hCursorBlank); - else if (wParam == WIIMOTE_DISCONNECT) - PostMessage(m_hParent, WM_USER, wParam, lParam); - break; - - /* Post these mouse events to the main window, it's nessesary becase in difference to the - keyboard inputs these events only appear here, not in the main WndProc() */ - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_LBUTTONDBLCLK: - PostMessage(GetParentWnd(), iMsg, wParam, lParam); - break; - - // This is called when we close the window when we render to a separate window - case WM_CLOSE: - if (m_hParent == NULL) - { - // Take it out of fullscreen and stop the game - if( g_Config.bFullscreen ) - ToggleFullscreen(m_hParent); - PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0); - } - break; - - case WM_DESTROY: - Shutdown(); - break; - - // Called when a screensaver wants to show up while this window is active - case WM_SYSCOMMAND: - switch (wParam) - { - case SC_SCREENSAVE: - case SC_MONITORPOWER: - break; - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - break; - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - return 0; -} - - -// This is called from Create() -HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title) -{ - wndClass.cbSize = sizeof( wndClass ); - wndClass.style = CS_HREDRAW | CS_VREDRAW; - wndClass.lpfnWndProc = WndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = hInstance; - wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION ); - // To interfer less with SetCursor() later we set this to NULL - //wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); - wndClass.hCursor = NULL; - wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); - wndClass.lpszMenuName = NULL; - wndClass.lpszClassName = m_szClassName; - wndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); - - m_hInstance = hInstance; - RegisterClassEx( &wndClass ); - - CreateCursors(m_hInstance); - - // Create child window - if (parent) - { - m_hParent = parent; - - m_hWnd = CreateWindow(m_szClassName, title, - WS_CHILD, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - parent, NULL, hInstance, NULL); - - ShowWindow(m_hWnd, SW_SHOWMAXIMIZED); - } - - // Create new separate window - else - { - DWORD style = g_Config.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW; - - RECT rc = {0, 0, width, height}; - AdjustWindowRect(&rc, style, false); - - int w = rc.right - rc.left; - int h = rc.bottom - rc.top; - - rc.left = (1280 - w)/2; - rc.right = rc.left + w; - rc.top = (1024 - h)/2; - rc.bottom = rc.top + h; - - m_hParent = (HWND)g_VideoInitialize.pWindowHandle; - - m_hWnd = CreateWindow(m_szClassName, title, - style, - rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, - parent, NULL, hInstance, NULL ); - - g_winstyle = GetWindowLong( m_hWnd, GWL_STYLE ); - g_winstyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style - } - - return m_hWnd; -} - -void ToggleFullscreen(HWND hParent) -{ - if (m_hParent == NULL) - { - int w_fs = 640, h_fs = 480; - if (g_Config.bFullscreen) - { - // Get out of fullscreen - g_Config.bFullscreen = false; - RECT rc = {0, 0, w_fs, h_fs}; - - // FullScreen -> Desktop - ChangeDisplaySettings(NULL, 0); - - RECT rcdesktop; // Get desktop resolution - GetWindowRect(GetDesktopWindow(), &rcdesktop); - - ShowCursor(TRUE); - - int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2; - int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2; - // SetWindowPos to the center of the screen - SetWindowPos(hParent, NULL, X, Y, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER); - - // Set new window style FS -> Windowed - SetWindowLong(hParent, GWL_STYLE, WS_OVERLAPPEDWINDOW); - - // Eventually show the window! - EmuWindow::Show(); - } - else - { - // Get into fullscreen - DEVMODE dmScreenSettings; - memset(&dmScreenSettings, 0, sizeof(dmScreenSettings)); - - // Desktop -> FullScreen - dmScreenSettings.dmSize = sizeof(dmScreenSettings); - dmScreenSettings.dmPelsWidth = w_fs; - dmScreenSettings.dmPelsHeight = h_fs; - dmScreenSettings.dmBitsPerPel = 32; - dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; - if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - return; - - // Set new window style -> PopUp - SetWindowLong(hParent, GWL_STYLE, WS_POPUP); - g_Config.bFullscreen = true; - ShowCursor(FALSE); - - // SetWindowPos to the upper-left corner of the screen - SetWindowPos(hParent, NULL, 0, 0, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER); - - // Eventually show the window! - EmuWindow::Show(); - } - } -} - -void Show() -{ - ShowWindow(m_hWnd, SW_SHOW); - BringWindowToTop(m_hWnd); - UpdateWindow(m_hWnd); -} - -HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title) -{ - return OpenWindow(hParent, hInstance, 640, 480, title); -} - -void Close() -{ - if (!m_hParent) - DestroyWindow(m_hWnd); - UnregisterClass(m_szClassName, m_hInstance); -} - -// ------------------------------------------ -// Set the size of the child or main window -// ------------------------------------------ -void SetSize(int width, int height) -{ - RECT rc = {0, 0, width, height}; - AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false); - - int w = rc.right - rc.left; - int h = rc.bottom - rc.top; - - // Move and resize the window - rc.left = (1280 - w)/2; - rc.right = rc.left + w; - rc.top = (1024 - h)/2; - rc.bottom = rc.top + h; - MoveWindow(m_hWnd, rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top, TRUE); -} - -} // EmuWindow +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include + +#include +#include +#include +#include +#include + +#include "VideoConfig.h" +#include "main.h" +#include "Win32.h" + +#include "StringUtil.h" + + +HINSTANCE g_hInstance; + +#if defined(HAVE_WX) && HAVE_WX +class wxDLLApp : public wxApp +{ + bool OnInit() + { + return true; + } +}; +IMPLEMENT_APP_NO_MAIN(wxDLLApp) +WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); +#endif +// ------------------ + +BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle + DWORD dwReason, // reason called + LPVOID lpvReserved) // reserved +{ + switch (dwReason) + { + case DLL_PROCESS_ATTACH: + { +#if defined(HAVE_WX) && HAVE_WX + wxSetInstance((HINSTANCE)hinstDLL); + wxInitialize(); +#endif + } + break; + + case DLL_PROCESS_DETACH: +#if defined(HAVE_WX) && HAVE_WX + wxUninitialize(); +#endif + break; + } + + g_hInstance = hinstDLL; + return TRUE; +} + +// ---------------------- +// The rendering window +// ---------------------- +namespace EmuWindow +{ + +HWND m_hWnd = NULL; // The new window that is created here +HWND m_hParent = NULL; + +HINSTANCE m_hInstance = NULL; +WNDCLASSEX wndClass; +const TCHAR m_szClassName[] = _T("DolphinEmuWnd"); +int g_winstyle; + +// ------------------------------------------ +/* Invisible cursor option. In the lack of a predefined IDC_BLANK we make + an empty transparent cursor */ +// ------------------ +HCURSOR hCursor = NULL, hCursorBlank = NULL; +void CreateCursors(HINSTANCE hInstance) +{ + BYTE ANDmaskCursor[] = { 0xff }; + BYTE XORmaskCursor[] = { 0x00 }; + hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor); + + hCursor = LoadCursor(NULL, IDC_ARROW); +} + +HWND GetWnd() +{ + return m_hWnd; +} + +HWND GetParentWnd() +{ + return m_hParent; +} + +LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) +{ + HDC hdc; + PAINTSTRUCT ps; + switch( iMsg ) + { + case WM_CREATE: + PostMessage(m_hParent, WM_USER, WM_USER_CREATE, (int)m_hParent); + break; + + case WM_PAINT: + hdc = BeginPaint( hWnd, &ps ); + EndPaint( hWnd, &ps ); + break; + + case WM_SYSKEYDOWN: + switch( LOWORD( wParam )) + { + case VK_RETURN: + // Pressing Alt+Enter switch FullScreen/Windowed + if (m_hParent == NULL && !g_Config.renderToMainframe) + { + ToggleFullscreen(hWnd); + } + break; + case VK_F5: case VK_F6: case VK_F7: case VK_F8: + PostMessage(m_hParent, WM_SYSKEYDOWN, wParam, lParam); + break; + default: + return DefWindowProc(hWnd, iMsg, wParam, lParam); + } + break; + + case WM_KEYDOWN: + switch (LOWORD( wParam )) + { + case VK_ESCAPE: + if (g_Config.bFullscreen) + { + // Pressing Esc switches to Windowed mode from Fullscreen mode + ToggleFullscreen(hWnd); + } + // And pause the emulation when already in Windowed mode + PostMessage(m_hParent, WM_USER, WM_USER_PAUSE, 0); + break; + } + break; + + /* The reason we pick up the WM_MOUSEMOVE is to be able to change this option + during gameplay. The alternative is to load one of the cursors when the plugin + is loaded and go with that. This should only produce a minimal performance hit + because SetCursor is not supposed to actually change the cursor if it's the + same as the one before. */ + case WM_MOUSEMOVE: + /* Check rendering mode; child or parent. Then post the mouse moves to the main window + it's nessesary for both the chil dwindow and separate rendering window because + moves over the rendering window do not reach the main program then. */ + if (GetParentWnd() == NULL) // Separate rendering window + PostMessage(m_hParent, iMsg, wParam, -1); + else + PostMessage(GetParentWnd(), iMsg, wParam, lParam); + break; + + /* To support the separate window rendering we get the message back here. So we basically + only let it pass through Dolphin > Frame.cpp to determine if it should be on or off + and coordinate it with the other settings if necessary */ + case WM_USER: + if (wParam == WM_USER_STOP) + SetCursor((lParam) ? hCursor : hCursorBlank); + else if (wParam == WIIMOTE_DISCONNECT) + PostMessage(m_hParent, WM_USER, wParam, lParam); + break; + + /* Post these mouse events to the main window, it's nessesary becase in difference to the + keyboard inputs these events only appear here, not in the main WndProc() */ + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_LBUTTONDBLCLK: + PostMessage(GetParentWnd(), iMsg, wParam, lParam); + break; + + // This is called when we close the window when we render to a separate window + case WM_CLOSE: + if (m_hParent == NULL) + { + // Take it out of fullscreen and stop the game + if( g_Config.bFullscreen ) + ToggleFullscreen(m_hParent); + PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0); + } + break; + + case WM_DESTROY: + Shutdown(); + break; + + // Called when a screensaver wants to show up while this window is active + case WM_SYSCOMMAND: + switch (wParam) + { + case SC_SCREENSAVE: + case SC_MONITORPOWER: + break; + default: + return DefWindowProc(hWnd, iMsg, wParam, lParam); + } + break; + default: + return DefWindowProc(hWnd, iMsg, wParam, lParam); + } + return 0; +} + + +// This is called from Create() +HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title) +{ + wndClass.cbSize = sizeof( wndClass ); + wndClass.style = CS_HREDRAW | CS_VREDRAW; + wndClass.lpfnWndProc = WndProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = 0; + wndClass.hInstance = hInstance; + wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION ); + // To interfer less with SetCursor() later we set this to NULL + //wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); + wndClass.hCursor = NULL; + wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); + wndClass.lpszMenuName = NULL; + wndClass.lpszClassName = m_szClassName; + wndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); + + m_hInstance = hInstance; + RegisterClassEx( &wndClass ); + + CreateCursors(m_hInstance); + + // Create child window + if (parent) + { + m_hParent = parent; + + m_hWnd = CreateWindow(m_szClassName, title, + WS_CHILD, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + parent, NULL, hInstance, NULL); + + ShowWindow(m_hWnd, SW_SHOWMAXIMIZED); + } + + // Create new separate window + else + { + DWORD style = g_Config.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW; + + RECT rc = {0, 0, width, height}; + AdjustWindowRect(&rc, style, false); + + int w = rc.right - rc.left; + int h = rc.bottom - rc.top; + + rc.left = (1280 - w)/2; + rc.right = rc.left + w; + rc.top = (1024 - h)/2; + rc.bottom = rc.top + h; + + m_hParent = (HWND)g_VideoInitialize.pWindowHandle; + + m_hWnd = CreateWindow(m_szClassName, title, + style, + rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, + parent, NULL, hInstance, NULL ); + + g_winstyle = GetWindowLong( m_hWnd, GWL_STYLE ); + g_winstyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style + } + + return m_hWnd; +} + +void ToggleFullscreen(HWND hParent) +{ + if (m_hParent == NULL) + { + int w_fs = 640, h_fs = 480; + if (g_Config.bFullscreen) + { + // Get out of fullscreen + g_Config.bFullscreen = false; + RECT rc = {0, 0, w_fs, h_fs}; + + // FullScreen -> Desktop + ChangeDisplaySettings(NULL, 0); + + RECT rcdesktop; // Get desktop resolution + GetWindowRect(GetDesktopWindow(), &rcdesktop); + + ShowCursor(TRUE); + + int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2; + int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2; + // SetWindowPos to the center of the screen + SetWindowPos(hParent, NULL, X, Y, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER); + + // Set new window style FS -> Windowed + SetWindowLong(hParent, GWL_STYLE, WS_OVERLAPPEDWINDOW); + + // Eventually show the window! + EmuWindow::Show(); + } + else + { + // Get into fullscreen + DEVMODE dmScreenSettings; + memset(&dmScreenSettings, 0, sizeof(dmScreenSettings)); + + // Desktop -> FullScreen + dmScreenSettings.dmSize = sizeof(dmScreenSettings); + dmScreenSettings.dmPelsWidth = w_fs; + dmScreenSettings.dmPelsHeight = h_fs; + dmScreenSettings.dmBitsPerPel = 32; + dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; + if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) + return; + + // Set new window style -> PopUp + SetWindowLong(hParent, GWL_STYLE, WS_POPUP); + g_Config.bFullscreen = true; + ShowCursor(FALSE); + + // SetWindowPos to the upper-left corner of the screen + SetWindowPos(hParent, NULL, 0, 0, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER); + + // Eventually show the window! + EmuWindow::Show(); + } + } +} + +void Show() +{ + ShowWindow(m_hWnd, SW_SHOW); + BringWindowToTop(m_hWnd); + UpdateWindow(m_hWnd); +} + +HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title) +{ + return OpenWindow(hParent, hInstance, 640, 480, title); +} + +void Close() +{ + if (!m_hParent) + DestroyWindow(m_hWnd); + UnregisterClass(m_szClassName, m_hInstance); +} + +// ------------------------------------------ +// Set the size of the child or main window +// ------------------------------------------ +void SetSize(int width, int height) +{ + RECT rc = {0, 0, width, height}; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false); + + int w = rc.right - rc.left; + int h = rc.bottom - rc.top; + + // Move and resize the window + rc.left = (1280 - w)/2; + rc.right = rc.left + w; + rc.top = (1024 - h)/2; + rc.bottom = rc.top + h; + MoveWindow(m_hWnd, rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top, TRUE); +} + +} // EmuWindow diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Win32.h b/Source/Plugins/Plugin_VideoSoftware/Src/Win32.h index af755bb7c5..c920b3d554 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Win32.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Win32.h @@ -1,39 +1,39 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _WIN32_H_ -#define _WIN32_H_ - -#pragma once - -#include "stdafx.h" - -namespace EmuWindow -{ - extern int g_winstyle; - - HWND GetWnd(); - HWND GetParentWnd(); - HWND GetChildParentWnd(); - HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title); - void Show(); - void Close(); - void ToggleFullscreen(HWND hParent); - void SetSize(int displayWidth, int displayHeight); -} - -#endif // _WIN32_H_ +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _WIN32_H_ +#define _WIN32_H_ + +#pragma once + +#include "stdafx.h" + +namespace EmuWindow +{ + extern int g_winstyle; + + HWND GetWnd(); + HWND GetParentWnd(); + HWND GetChildParentWnd(); + HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title); + void Show(); + void Close(); + void ToggleFullscreen(HWND hParent); + void SetSize(int displayWidth, int displayHeight); +} + +#endif // _WIN32_H_ diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/XFMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/XFMemLoader.cpp index 336ad18be1..eea3ba249b 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/XFMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/XFMemLoader.cpp @@ -1,96 +1,96 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "../../../Core/VideoCommon/Src/VideoCommon.h" - -#include "XFMemLoader.h" -#include "CPMemLoader.h" -#include "Clipper.h" - - -XFRegisters xfregs; - -void InitXFMemory() -{ - memset(&xfregs, 0, sizeof(xfregs)); -} - -void XFWritten(u32 transferSize, u32 baseAddress) -{ - u32 topAddress = baseAddress + transferSize; - - if (baseAddress <= 0x1026 && topAddress >= 0x1020) - Clipper::SetViewOffset(); - - // fix lights so invalid values don't trash the lighting computations - if (baseAddress <= 0x067f && topAddress >= 0x0604) - { - u32* x = xfregs.lights; - - // go through all lights - for (int light = 0; light < 8; light++) - { - // skip to floating point values - x += 4; - - for (int i = 0; i < 12; i++) - { - u32 xVal = *x; - - // if the exponent is 255 then the number is inf or nan - if ((xVal & 0x7f800000) == 0x7f800000) - *x = 0; - - x++; - } - } - } -} - -void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) -{ - u32 size = transferSize; - - // do not allow writes past registers - if (baseAddress + transferSize > 0x1058) - { - INFO_LOG(VIDEO, "xf load exceeds address space: %x %d bytes\n", baseAddress, transferSize); - - if (baseAddress >= 0x1058) - size = 0; - else - size = 0x1058 - baseAddress; - } - - if (size > 0) { - memcpy_gc( &((u32*)&xfregs)[baseAddress], pData, size * 4); - XFWritten(transferSize, baseAddress); - } - -} - -void LoadIndexedXF(u32 val, int array) -{ - int index = val >> 16; - int address = val & 0xFFF; //check mask - int size = ((val >> 12) & 0xF) + 1; - //load stuff from array to address in xf mem - - u32 *pData = (u32*)g_VideoInitialize.pGetMemoryPointer(arraybases[array] + arraystrides[array]*index); - - LoadXFReg(size, address, pData); -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "../../../Core/VideoCommon/Src/VideoCommon.h" + +#include "XFMemLoader.h" +#include "CPMemLoader.h" +#include "Clipper.h" + + +XFRegisters xfregs; + +void InitXFMemory() +{ + memset(&xfregs, 0, sizeof(xfregs)); +} + +void XFWritten(u32 transferSize, u32 baseAddress) +{ + u32 topAddress = baseAddress + transferSize; + + if (baseAddress <= 0x1026 && topAddress >= 0x1020) + Clipper::SetViewOffset(); + + // fix lights so invalid values don't trash the lighting computations + if (baseAddress <= 0x067f && topAddress >= 0x0604) + { + u32* x = xfregs.lights; + + // go through all lights + for (int light = 0; light < 8; light++) + { + // skip to floating point values + x += 4; + + for (int i = 0; i < 12; i++) + { + u32 xVal = *x; + + // if the exponent is 255 then the number is inf or nan + if ((xVal & 0x7f800000) == 0x7f800000) + *x = 0; + + x++; + } + } + } +} + +void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) +{ + u32 size = transferSize; + + // do not allow writes past registers + if (baseAddress + transferSize > 0x1058) + { + INFO_LOG(VIDEO, "xf load exceeds address space: %x %d bytes\n", baseAddress, transferSize); + + if (baseAddress >= 0x1058) + size = 0; + else + size = 0x1058 - baseAddress; + } + + if (size > 0) { + memcpy_gc( &((u32*)&xfregs)[baseAddress], pData, size * 4); + XFWritten(transferSize, baseAddress); + } + +} + +void LoadIndexedXF(u32 val, int array) +{ + int index = val >> 16; + int address = val & 0xFFF; //check mask + int size = ((val >> 12) & 0xF) + 1; + //load stuff from array to address in xf mem + + u32 *pData = (u32*)g_VideoInitialize.pGetMemoryPointer(arraybases[array] + arraystrides[array]*index); + + LoadXFReg(size, address, pData); +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/main.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/main.cpp index 1e9bb02d47..b87c87c4c2 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/main.cpp @@ -1,211 +1,211 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include "Common.h" -#include "pluginspecs_video.h" - -#include "CommandProcessor.h" -#include "OpcodeDecoder.h" -#include "VideoConfig.h" -#include "PixelEngine.h" -#include "CommandProcessor.h" -#include "BPMemLoader.h" -#include "XFMemLoader.h" -#include "Clipper.h" -#include "Rasterizer.h" -#include "Renderer.h" -#include "../../../Core/VideoCommon/Src/LookUpTables.h" -#include "HwRasterizer.h" -#include "LogManager.h" -#include "EfbInterface.h" -#include "DebugUtil.h" - - -PLUGIN_GLOBALS* globals = NULL; -SVideoInitialize g_VideoInitialize; - - -void GetDllInfo (PLUGIN_INFO* _PluginInfo) -{ - _PluginInfo->Version = 0x0100; - _PluginInfo->Type = PLUGIN_TYPE_VIDEO; -#ifdef DEBUGFAST - sprintf(_PluginInfo->Name, "Dolphin Software Renderer (DebugFast)"); -#else -#ifndef _DEBUG - sprintf(_PluginInfo->Name, "Dolphin Software Renderer"); -#else - sprintf(_PluginInfo->Name, "Dolphin Software Renderer (Debug)"); -#endif -#endif -} - -void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals) -{ - globals = _pPluginGlobals; - LogManager::SetInstance((LogManager *)globals->logManager); -} - -void DllDebugger(HWND _hParent, bool Show) -{ -} - -void DllConfig(HWND _hParent) -{ -} - -void Initialize(void *init) -{ - SVideoInitialize *_pVideoInitialize = (SVideoInitialize*)init; - g_VideoInitialize = *_pVideoInitialize; - - g_Config.Load(); - - InitBPMemory(); - InitXFMemory(); - CommandProcessor::Init(); - PixelEngine::Init(); - OpcodeDecoder::Init(); - Clipper::Init(); - Rasterizer::Init(); - HwRasterizer::Init(); - Renderer::Init(_pVideoInitialize); - DebugUtil::Init(); -} - -void DoState(unsigned char **ptr, int mode) -{ -} - -void EmuStateChange(PLUGIN_EMUSTATE newState) -{ -} - -void Shutdown(void) -{ - Renderer::Shutdown(); - OpenGL_Shutdown(); -} - -// This is called after Video_Initialize() from the Core -void Video_Prepare(void) -{ - Renderer::Prepare(); - - INFO_LOG(VIDEO, "Video plugin initialized."); -} - -// Run from the CPU thread (from VideoInterface.cpp) -void Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight) -{ -} - -// Run from the CPU thread (from VideoInterface.cpp) -void Video_EndField() -{ -} - -u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y) -{ - u32 value = 0; - - switch (type) - { - case PEEK_Z: - { - value = EfbInterface::GetDepth(x, y); - break; - } - case POKE_Z: - break; - case PEEK_COLOR: - { - u32 color = 0; - EfbInterface::GetColor(x, y, (u8*)&color); - - // rgba to argb - value = (color >> 8) | (color & 0xff) << 24; - break; - } - - case POKE_COLOR: - break; - } - - return value; -} - -void Video_Screenshot(const char *_szFilename) -{ -} - -// ------------------------------- -// Enter and exit the video loop -// ------------------------------- -void Video_EnterLoop() -{ - Fifo_EnterLoop(g_VideoInitialize); -} - -void Video_ExitLoop() -{ - Fifo_ExitLoop(); -} - -void Video_AddMessage(const char* pstr, u32 milliseconds) -{ -} - -void Video_SetRendering(bool bEnabled) -{ - Fifo_SetRendering(bEnabled); -} - -void Video_CommandProcessorRead16(u16& _rReturnValue, const u32 _Address) -{ - CommandProcessor::Read16(_rReturnValue, _Address); -} - -void Video_CommandProcessorWrite16(const u16 _Data, const u32 _Address) -{ - CommandProcessor::Write16(_Data, _Address); -} - -void Video_PixelEngineRead16(u16& _rReturnValue, const u32 _Address) -{ - PixelEngine::Read16(_rReturnValue, _Address); -} - -void Video_PixelEngineWrite16(const u16 _Data, const u32 _Address) -{ - PixelEngine::Write16(_Data, _Address); -} - -void Video_PixelEngineWrite32(const u32 _Data, const u32 _Address) -{ - PixelEngine::Write32(_Data, _Address); -} - -void Video_GatherPipeBursted(void) -{ - CommandProcessor::GatherPipeBursted(); -} - -void Video_WaitForFrameFinish(void) -{ -} +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include "Common.h" +#include "pluginspecs_video.h" + +#include "CommandProcessor.h" +#include "OpcodeDecoder.h" +#include "VideoConfig.h" +#include "PixelEngine.h" +#include "CommandProcessor.h" +#include "BPMemLoader.h" +#include "XFMemLoader.h" +#include "Clipper.h" +#include "Rasterizer.h" +#include "Renderer.h" +#include "../../../Core/VideoCommon/Src/LookUpTables.h" +#include "HwRasterizer.h" +#include "LogManager.h" +#include "EfbInterface.h" +#include "DebugUtil.h" + + +PLUGIN_GLOBALS* globals = NULL; +SVideoInitialize g_VideoInitialize; + + +void GetDllInfo (PLUGIN_INFO* _PluginInfo) +{ + _PluginInfo->Version = 0x0100; + _PluginInfo->Type = PLUGIN_TYPE_VIDEO; +#ifdef DEBUGFAST + sprintf(_PluginInfo->Name, "Dolphin Software Renderer (DebugFast)"); +#else +#ifndef _DEBUG + sprintf(_PluginInfo->Name, "Dolphin Software Renderer"); +#else + sprintf(_PluginInfo->Name, "Dolphin Software Renderer (Debug)"); +#endif +#endif +} + +void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals) +{ + globals = _pPluginGlobals; + LogManager::SetInstance((LogManager *)globals->logManager); +} + +void DllDebugger(HWND _hParent, bool Show) +{ +} + +void DllConfig(HWND _hParent) +{ +} + +void Initialize(void *init) +{ + SVideoInitialize *_pVideoInitialize = (SVideoInitialize*)init; + g_VideoInitialize = *_pVideoInitialize; + + g_Config.Load(); + + InitBPMemory(); + InitXFMemory(); + CommandProcessor::Init(); + PixelEngine::Init(); + OpcodeDecoder::Init(); + Clipper::Init(); + Rasterizer::Init(); + HwRasterizer::Init(); + Renderer::Init(_pVideoInitialize); + DebugUtil::Init(); +} + +void DoState(unsigned char **ptr, int mode) +{ +} + +void EmuStateChange(PLUGIN_EMUSTATE newState) +{ +} + +void Shutdown(void) +{ + Renderer::Shutdown(); + OpenGL_Shutdown(); +} + +// This is called after Video_Initialize() from the Core +void Video_Prepare(void) +{ + Renderer::Prepare(); + + INFO_LOG(VIDEO, "Video plugin initialized."); +} + +// Run from the CPU thread (from VideoInterface.cpp) +void Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight) +{ +} + +// Run from the CPU thread (from VideoInterface.cpp) +void Video_EndField() +{ +} + +u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y) +{ + u32 value = 0; + + switch (type) + { + case PEEK_Z: + { + value = EfbInterface::GetDepth(x, y); + break; + } + case POKE_Z: + break; + case PEEK_COLOR: + { + u32 color = 0; + EfbInterface::GetColor(x, y, (u8*)&color); + + // rgba to argb + value = (color >> 8) | (color & 0xff) << 24; + break; + } + + case POKE_COLOR: + break; + } + + return value; +} + +void Video_Screenshot(const char *_szFilename) +{ +} + +// ------------------------------- +// Enter and exit the video loop +// ------------------------------- +void Video_EnterLoop() +{ + Fifo_EnterLoop(g_VideoInitialize); +} + +void Video_ExitLoop() +{ + Fifo_ExitLoop(); +} + +void Video_AddMessage(const char* pstr, u32 milliseconds) +{ +} + +void Video_SetRendering(bool bEnabled) +{ + Fifo_SetRendering(bEnabled); +} + +void Video_CommandProcessorRead16(u16& _rReturnValue, const u32 _Address) +{ + CommandProcessor::Read16(_rReturnValue, _Address); +} + +void Video_CommandProcessorWrite16(const u16 _Data, const u32 _Address) +{ + CommandProcessor::Write16(_Data, _Address); +} + +void Video_PixelEngineRead16(u16& _rReturnValue, const u32 _Address) +{ + PixelEngine::Read16(_rReturnValue, _Address); +} + +void Video_PixelEngineWrite16(const u16 _Data, const u32 _Address) +{ + PixelEngine::Write16(_Data, _Address); +} + +void Video_PixelEngineWrite32(const u32 _Data, const u32 _Address) +{ + PixelEngine::Write32(_Data, _Address); +} + +void Video_GatherPipeBursted(void) +{ + CommandProcessor::GatherPipeBursted(); +} + +void Video_WaitForFrameFinish(void) +{ +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/main.h b/Source/Plugins/Plugin_VideoSoftware/Src/main.h index f575ddd505..f025610cae 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/main.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/main.h @@ -1,25 +1,25 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef MAIN_H -#define MAIN_H - -#include "pluginspecs_video.h" - -extern SVideoInitialize g_VideoInitialize; - -#endif +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef MAIN_H +#define MAIN_H + +#include "pluginspecs_video.h" + +extern SVideoInitialize g_VideoInitialize; + +#endif diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.cpp index 7ab8deaa0c..edc6ada957 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.cpp @@ -1,18 +1,18 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "stdafx.h" +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "stdafx.h" diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.h b/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.h index c82dc16b26..94d032bc31 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/stdafx.h @@ -1,26 +1,26 @@ -// Copyright (C) 2003-2009 Dolphin Project. - -// This program 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, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#pragma once -#define _WIN32_WINNT 0x501 -#ifndef _WIN32_IE -#define _WIN32_IE 0x0500 // Default value is 0x0400 -#endif - -#include -#include - +// Copyright (C) 2003-2009 Dolphin Project. + +// This program 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, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#pragma once +#define _WIN32_WINNT 0x501 +#ifndef _WIN32_IE +#define _WIN32_IE 0x0500 // Default value is 0x0400 +#endif + +#include +#include + diff --git a/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.cpp b/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.cpp index ed5fb65818..37e0b7521e 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.cpp @@ -1,222 +1,222 @@ -#include "UDPWiimote.h" - -#ifdef _WIN32 - -#include -#include - -#define sock_t SOCKET -#define ERRNO WSAGetLastError() -#define EWOULDBLOCK WSAEWOULDBLOCK -#define BAD_SOCK INVALID_SOCKET -#define close(x) closesocket(x) -#define cleanup do {noinst--; if (noinst==0) WSACleanup();} while (0) -#define blockingoff(sock) ioctlsocket(sock, FIONBIO, &iMode) -#define dataz char* -#ifdef _MSC_VER -#pragma comment (lib, "Ws2_32.lib") -#endif - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#define BAD_SOCK -1 -#define ERRNO errno -#define cleanup noinst-- -#define blockingoff(sock) fcntl(sock, F_SETFL, O_NONBLOCK) -#define dataz void* -#define sock_t int - -#endif - -#include "EmuMain.h" -#include -#include - -struct UDPWiimote::_d -{ - sock_t sockfd; -}; - -int UDPWiimote::noinst=0; - -UDPWiimote::UDPWiimote(const char *port) : d(new _d) ,x(0),y(0),z(0),nunX(0),nunY(0),pointerX(-0.1),pointerY(-0.1),nunMask(0),mask(0) -{ - #ifdef _WIN32 - u_long iMode = 1; - #endif - struct addrinfo hints, *servinfo, *p; - int rv; - - #ifdef _WIN32 - if (noinst==0) - { - WORD sockVersion; - WSADATA wsaData; - sockVersion = MAKEWORD(2, 2); - WSAStartup(sockVersion, &wsaData); - } - #endif - - noinst++; - - memset(&hints, 0, sizeof hints); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags = AI_PASSIVE; // use my IP - - if ((rv = getaddrinfo(NULL, port, &hints, &servinfo)) != 0) { -// fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); - cleanup; - err=-1; - return; - } - - // loop through all the results and bind to the first we can - for(p = servinfo; p != NULL; p = p->ai_next) { - if (((d->sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)),d->sockfd) == BAD_SOCK) { - continue; - } - - if (bind(d->sockfd, p->ai_addr, p->ai_addrlen) == -1) { - close(d->sockfd); - continue; - } - - break; - } - - if (p == NULL) { - cleanup; - err=-2; - return; - } - - freeaddrinfo(servinfo); - blockingoff(d->sockfd); - err=0; - return; -} - -UDPWiimote::~UDPWiimote() -{ - close(d->sockfd); - cleanup; - delete d; -} - -int UDPWiimote::readPack(void * data, int *size) -{ - int numbytes; - size_t addr_len; - struct sockaddr_storage their_addr; - addr_len = sizeof their_addr; - if ((numbytes = recvfrom(d->sockfd, (dataz)data, (*size) , 0, - (struct sockaddr *)&their_addr, (socklen_t*)&addr_len)) == -1) { - if (ERRNO==EWOULDBLOCK) - return -1; - return -2; - } else - (*size)=numbytes; - return 0; -} - -#define ACCEL_FLAG (1<<0) -#define BUTT_FLAG (1<<1) -#define IR_FLAG (1<<2) -#define NUN_FLAG (1<<3) - -void UDPWiimote::update() -{ - u8 bf[64]; - int size=60; - int res=0; - u8 time=0; - int nopack=0; - for (int i=0; (res=readPack(&bf,&size)),(i<100)&&(res!=-1); (res<-1)?i++:0) - { - if (res==0) - { - if (bf[0]==0xde) - { - if (bf[1]==0) - time=0; - if (bf[1]>=time) //packet timestamp. assures order is maintained - { - nopack++; - time=bf[1]; - u32 *p=(u32*)(&bf[3]); - if (bf[2]&ACCEL_FLAG) - { - double ux,uy,uz; - ux=(double)((s32)ntohl(*p)); p++; - uy=(double)((s32)ntohl(*p)); p++; - uz=(double)((s32)ntohl(*p)); p++; - x=ux/1048576; //packet accel data - y=uy/1048576; - z=uz/1048576; - } - if (bf[2]&BUTT_FLAG) - { - mask=ntohl(*p); p++; - } - if (bf[2]&IR_FLAG) - { - pointerX=((double)((s32)ntohl(*p)))/1048576; p++; - pointerY=((double)((s32)ntohl(*p)))/1048576; p++; - } - if (bf[2]&NUN_FLAG) - { - nunMask=*((u8*)p); p=(u32*)(((u8*)p)+1); - nunX=((double)((s32)ntohl(*p)))/1048576; p++; - nunY=((double)((s32)ntohl(*p)))/1048576; p++; - } - } - } - } - if (res==-2) - { - ERROR_LOG(WIIMOTE,"UDPWii Packet error"); - } - } - //NOTICE_LOG(WIIMOTE,"UDPWii update result:np:%d x:%f y:%f z:%f nx:%f ny:%f px:%f py:%f bmask:%x nmask:%x", - // nopack, x, y, z, nunX, nunY, pointerX, pointerY, mask, nunMask); -} - -void UDPWiimote::getAccel(int &_x, int &_y, int &_z) -{ - //NOTICE_LOG(WIIMOTE,"%lf %lf %lf",_x, _y, _z); - float xg = WiiMoteEmu::g_wm.cal_g.x; - float yg = WiiMoteEmu::g_wm.cal_g.y; - float zg = WiiMoteEmu::g_wm.cal_g.z; - _x = WiiMoteEmu::g_wm.cal_zero.x + (int)(xg * x); - _y = WiiMoteEmu::g_wm.cal_zero.y + (int)(yg * y); - _z = WiiMoteEmu::g_wm.cal_zero.z + (int)(zg * z); -} - -u32 UDPWiimote::getButtons() -{ - return mask; -} - -void UDPWiimote::getIR(float &_x, float &_y) -{ - _x=(float)pointerX; - _y=(float)pointerY; -} - -void UDPWiimote::getNunchuck(float &_x, float &_y, u8 &_mask) -{ - _x=(float)nunX; - _y=(float)nunY; - _mask=nunMask; -} +#include "UDPWiimote.h" + +#ifdef _WIN32 + +#include +#include + +#define sock_t SOCKET +#define ERRNO WSAGetLastError() +#define EWOULDBLOCK WSAEWOULDBLOCK +#define BAD_SOCK INVALID_SOCKET +#define close(x) closesocket(x) +#define cleanup do {noinst--; if (noinst==0) WSACleanup();} while (0) +#define blockingoff(sock) ioctlsocket(sock, FIONBIO, &iMode) +#define dataz char* +#ifdef _MSC_VER +#pragma comment (lib, "Ws2_32.lib") +#endif + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define BAD_SOCK -1 +#define ERRNO errno +#define cleanup noinst-- +#define blockingoff(sock) fcntl(sock, F_SETFL, O_NONBLOCK) +#define dataz void* +#define sock_t int + +#endif + +#include "EmuMain.h" +#include +#include + +struct UDPWiimote::_d +{ + sock_t sockfd; +}; + +int UDPWiimote::noinst=0; + +UDPWiimote::UDPWiimote(const char *port) : d(new _d) ,x(0),y(0),z(0),nunX(0),nunY(0),pointerX(-0.1),pointerY(-0.1),nunMask(0),mask(0) +{ + #ifdef _WIN32 + u_long iMode = 1; + #endif + struct addrinfo hints, *servinfo, *p; + int rv; + + #ifdef _WIN32 + if (noinst==0) + { + WORD sockVersion; + WSADATA wsaData; + sockVersion = MAKEWORD(2, 2); + WSAStartup(sockVersion, &wsaData); + } + #endif + + noinst++; + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_PASSIVE; // use my IP + + if ((rv = getaddrinfo(NULL, port, &hints, &servinfo)) != 0) { +// fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + cleanup; + err=-1; + return; + } + + // loop through all the results and bind to the first we can + for(p = servinfo; p != NULL; p = p->ai_next) { + if (((d->sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)),d->sockfd) == BAD_SOCK) { + continue; + } + + if (bind(d->sockfd, p->ai_addr, p->ai_addrlen) == -1) { + close(d->sockfd); + continue; + } + + break; + } + + if (p == NULL) { + cleanup; + err=-2; + return; + } + + freeaddrinfo(servinfo); + blockingoff(d->sockfd); + err=0; + return; +} + +UDPWiimote::~UDPWiimote() +{ + close(d->sockfd); + cleanup; + delete d; +} + +int UDPWiimote::readPack(void * data, int *size) +{ + int numbytes; + size_t addr_len; + struct sockaddr_storage their_addr; + addr_len = sizeof their_addr; + if ((numbytes = recvfrom(d->sockfd, (dataz)data, (*size) , 0, + (struct sockaddr *)&their_addr, (socklen_t*)&addr_len)) == -1) { + if (ERRNO==EWOULDBLOCK) + return -1; + return -2; + } else + (*size)=numbytes; + return 0; +} + +#define ACCEL_FLAG (1<<0) +#define BUTT_FLAG (1<<1) +#define IR_FLAG (1<<2) +#define NUN_FLAG (1<<3) + +void UDPWiimote::update() +{ + u8 bf[64]; + int size=60; + int res=0; + u8 time=0; + int nopack=0; + for (int i=0; (res=readPack(&bf,&size)),(i<100)&&(res!=-1); (res<-1)?i++:0) + { + if (res==0) + { + if (bf[0]==0xde) + { + if (bf[1]==0) + time=0; + if (bf[1]>=time) //packet timestamp. assures order is maintained + { + nopack++; + time=bf[1]; + u32 *p=(u32*)(&bf[3]); + if (bf[2]&ACCEL_FLAG) + { + double ux,uy,uz; + ux=(double)((s32)ntohl(*p)); p++; + uy=(double)((s32)ntohl(*p)); p++; + uz=(double)((s32)ntohl(*p)); p++; + x=ux/1048576; //packet accel data + y=uy/1048576; + z=uz/1048576; + } + if (bf[2]&BUTT_FLAG) + { + mask=ntohl(*p); p++; + } + if (bf[2]&IR_FLAG) + { + pointerX=((double)((s32)ntohl(*p)))/1048576; p++; + pointerY=((double)((s32)ntohl(*p)))/1048576; p++; + } + if (bf[2]&NUN_FLAG) + { + nunMask=*((u8*)p); p=(u32*)(((u8*)p)+1); + nunX=((double)((s32)ntohl(*p)))/1048576; p++; + nunY=((double)((s32)ntohl(*p)))/1048576; p++; + } + } + } + } + if (res==-2) + { + ERROR_LOG(WIIMOTE,"UDPWii Packet error"); + } + } + //NOTICE_LOG(WIIMOTE,"UDPWii update result:np:%d x:%f y:%f z:%f nx:%f ny:%f px:%f py:%f bmask:%x nmask:%x", + // nopack, x, y, z, nunX, nunY, pointerX, pointerY, mask, nunMask); +} + +void UDPWiimote::getAccel(int &_x, int &_y, int &_z) +{ + //NOTICE_LOG(WIIMOTE,"%lf %lf %lf",_x, _y, _z); + float xg = WiiMoteEmu::g_wm.cal_g.x; + float yg = WiiMoteEmu::g_wm.cal_g.y; + float zg = WiiMoteEmu::g_wm.cal_g.z; + _x = WiiMoteEmu::g_wm.cal_zero.x + (int)(xg * x); + _y = WiiMoteEmu::g_wm.cal_zero.y + (int)(yg * y); + _z = WiiMoteEmu::g_wm.cal_zero.z + (int)(zg * z); +} + +u32 UDPWiimote::getButtons() +{ + return mask; +} + +void UDPWiimote::getIR(float &_x, float &_y) +{ + _x=(float)pointerX; + _y=(float)pointerY; +} + +void UDPWiimote::getNunchuck(float &_x, float &_y, u8 &_mask) +{ + _x=(float)nunX; + _y=(float)nunY; + _mask=nunMask; +} diff --git a/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.h b/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.h index 9e5d7ff8ff..0c26d56ab9 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.h +++ b/Source/Plugins/Plugin_Wiimote/Src/UDPWiimote.h @@ -1,44 +1,44 @@ -#ifndef UDPWIIMOTE_H -#define UDPWIIMOTE_H - -#include "Common.h" - -#define UDPWM_B1 (1<<0) -#define UDPWM_B2 (1<<1) -#define UDPWM_BA (1<<2) -#define UDPWM_BB (1<<3) -#define UDPWM_BP (1<<4) -#define UDPWM_BM (1<<5) -#define UDPWM_BH (1<<6) -#define UDPWM_BU (1<<7) -#define UDPWM_BD (1<<8) -#define UDPWM_BL (1<<9) -#define UDPWM_BR (1<<10) -#define UDPWM_SK (1<<11) -#define UDPWM_NC (1<<0) -#define UDPWM_NZ (1<<1) - -class UDPWiimote -{ -public: - UDPWiimote(const char * port); - virtual ~UDPWiimote(); - void update(); - void getAccel(int &x, int &y, int &z); - u32 getButtons(); - void getNunchuck(float &x, float &y, u8 &mask); - void getIR(float &x, float &y); - int getErrNo() {return err;}; -private: - int readPack(void * data, int *size); - struct _d; //using pimpl because SOCKET on windows is defined in Winsock2.h, witch doesen't have include guards - _d *d; - double x,y,z; - double nunX,nunY; - double pointerX,pointerY; - u8 nunMask; - u32 mask; - int err; - static int noinst; -}; -#endif +#ifndef UDPWIIMOTE_H +#define UDPWIIMOTE_H + +#include "Common.h" + +#define UDPWM_B1 (1<<0) +#define UDPWM_B2 (1<<1) +#define UDPWM_BA (1<<2) +#define UDPWM_BB (1<<3) +#define UDPWM_BP (1<<4) +#define UDPWM_BM (1<<5) +#define UDPWM_BH (1<<6) +#define UDPWM_BU (1<<7) +#define UDPWM_BD (1<<8) +#define UDPWM_BL (1<<9) +#define UDPWM_BR (1<<10) +#define UDPWM_SK (1<<11) +#define UDPWM_NC (1<<0) +#define UDPWM_NZ (1<<1) + +class UDPWiimote +{ +public: + UDPWiimote(const char * port); + virtual ~UDPWiimote(); + void update(); + void getAccel(int &x, int &y, int &z); + u32 getButtons(); + void getNunchuck(float &x, float &y, u8 &mask); + void getIR(float &x, float &y); + int getErrNo() {return err;}; +private: + int readPack(void * data, int *size); + struct _d; //using pimpl because SOCKET on windows is defined in Winsock2.h, witch doesen't have include guards + _d *d; + double x,y,z; + double nunX,nunY; + double pointerX,pointerY; + u8 nunMask; + u32 mask; + int err; + static int noinst; +}; +#endif diff --git a/Source/TestSuite/TestSuite.sln b/Source/TestSuite/TestSuite.sln index c321071e45..71749bec5e 100644 --- a/Source/TestSuite/TestSuite.sln +++ b/Source/TestSuite/TestSuite.sln @@ -1,85 +1,85 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GX", "GX\GX.vcproj", "{F45E42B2-939B-4F02-954B-E68251FD4CCF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SI", "SI\SI.vcproj", "{87F20A25-A3F8-46A3-AC32-3C16782494B1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTC", "RTC\RTC.vcproj", "{62989D24-DB3F-4BD1-A11D-26F0487CD9AF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAD", "PAD\PAD.vcproj", "{D58C9AD5-7200-488A-B1E8-9250E64CDD45}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXI", "EXI\EXI.vcproj", "{AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AX", "AX\AX.vcproj", "{9F053346-A33D-4E4F-874E-CBA1AF809FC3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ARAM", "ARAM\ARAM.vcproj", "{E50732C5-038A-42F7-8C95-8C02A4E2ADA6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WPAD", "WPAD\WPAD.vcproj", "{BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WRTC", "WRTC\WRTC.vcproj", "{F75021E3-73BF-425C-BA57-3FE7E2F6E02C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WSD", "WSD\WSD.vcproj", "{F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{057B2E90-B8A7-431E-9FA2-68AC8ABABCC5}" - ProjectSection(SolutionItems) = preProject - Makefile = Makefile - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FPU", "FPU\FPU.vcproj", "{18373B64-BCAB-4677-A070-7AD45D4C8304}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Debug|Win32.ActiveCfg = Release|Win32 - {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Debug|Win32.Build.0 = Release|Win32 - {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Release|Win32.ActiveCfg = Release|Win32 - {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Release|Win32.Build.0 = Release|Win32 - {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Debug|Win32.ActiveCfg = Release|Win32 - {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Debug|Win32.Build.0 = Release|Win32 - {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Release|Win32.ActiveCfg = Release|Win32 - {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Release|Win32.Build.0 = Release|Win32 - {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Debug|Win32.ActiveCfg = Release|Win32 - {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Debug|Win32.Build.0 = Release|Win32 - {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Release|Win32.ActiveCfg = Release|Win32 - {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Release|Win32.Build.0 = Release|Win32 - {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Debug|Win32.ActiveCfg = Release|Win32 - {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Debug|Win32.Build.0 = Release|Win32 - {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Release|Win32.ActiveCfg = Release|Win32 - {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Release|Win32.Build.0 = Release|Win32 - {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Debug|Win32.Build.0 = Debug|Win32 - {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Release|Win32.ActiveCfg = Release|Win32 - {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Release|Win32.Build.0 = Release|Win32 - {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Debug|Win32.ActiveCfg = Release|Win32 - {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Debug|Win32.Build.0 = Release|Win32 - {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Release|Win32.ActiveCfg = Release|Win32 - {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Release|Win32.Build.0 = Release|Win32 - {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Debug|Win32.ActiveCfg = Release|Win32 - {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Debug|Win32.Build.0 = Release|Win32 - {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Release|Win32.ActiveCfg = Release|Win32 - {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Release|Win32.Build.0 = Release|Win32 - {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Debug|Win32.ActiveCfg = Release|Win32 - {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Debug|Win32.Build.0 = Release|Win32 - {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Release|Win32.ActiveCfg = Release|Win32 - {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Release|Win32.Build.0 = Release|Win32 - {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Debug|Win32.ActiveCfg = Release|Win32 - {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Debug|Win32.Build.0 = Release|Win32 - {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Release|Win32.ActiveCfg = Release|Win32 - {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Release|Win32.Build.0 = Release|Win32 - {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Debug|Win32.ActiveCfg = Release|Win32 - {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Debug|Win32.Build.0 = Release|Win32 - {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Release|Win32.ActiveCfg = Release|Win32 - {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Release|Win32.Build.0 = Release|Win32 - {18373B64-BCAB-4677-A070-7AD45D4C8304}.Debug|Win32.ActiveCfg = Debug|Win32 - {18373B64-BCAB-4677-A070-7AD45D4C8304}.Debug|Win32.Build.0 = Debug|Win32 - {18373B64-BCAB-4677-A070-7AD45D4C8304}.Release|Win32.ActiveCfg = Release|Win32 - {18373B64-BCAB-4677-A070-7AD45D4C8304}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GX", "GX\GX.vcproj", "{F45E42B2-939B-4F02-954B-E68251FD4CCF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SI", "SI\SI.vcproj", "{87F20A25-A3F8-46A3-AC32-3C16782494B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTC", "RTC\RTC.vcproj", "{62989D24-DB3F-4BD1-A11D-26F0487CD9AF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAD", "PAD\PAD.vcproj", "{D58C9AD5-7200-488A-B1E8-9250E64CDD45}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXI", "EXI\EXI.vcproj", "{AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AX", "AX\AX.vcproj", "{9F053346-A33D-4E4F-874E-CBA1AF809FC3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ARAM", "ARAM\ARAM.vcproj", "{E50732C5-038A-42F7-8C95-8C02A4E2ADA6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WPAD", "WPAD\WPAD.vcproj", "{BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WRTC", "WRTC\WRTC.vcproj", "{F75021E3-73BF-425C-BA57-3FE7E2F6E02C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WSD", "WSD\WSD.vcproj", "{F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{057B2E90-B8A7-431E-9FA2-68AC8ABABCC5}" + ProjectSection(SolutionItems) = preProject + Makefile = Makefile + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FPU", "FPU\FPU.vcproj", "{18373B64-BCAB-4677-A070-7AD45D4C8304}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Debug|Win32.ActiveCfg = Release|Win32 + {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Debug|Win32.Build.0 = Release|Win32 + {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Release|Win32.ActiveCfg = Release|Win32 + {F45E42B2-939B-4F02-954B-E68251FD4CCF}.Release|Win32.Build.0 = Release|Win32 + {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Debug|Win32.ActiveCfg = Release|Win32 + {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Debug|Win32.Build.0 = Release|Win32 + {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Release|Win32.ActiveCfg = Release|Win32 + {87F20A25-A3F8-46A3-AC32-3C16782494B1}.Release|Win32.Build.0 = Release|Win32 + {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Debug|Win32.ActiveCfg = Release|Win32 + {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Debug|Win32.Build.0 = Release|Win32 + {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Release|Win32.ActiveCfg = Release|Win32 + {62989D24-DB3F-4BD1-A11D-26F0487CD9AF}.Release|Win32.Build.0 = Release|Win32 + {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Debug|Win32.ActiveCfg = Release|Win32 + {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Debug|Win32.Build.0 = Release|Win32 + {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Release|Win32.ActiveCfg = Release|Win32 + {D58C9AD5-7200-488A-B1E8-9250E64CDD45}.Release|Win32.Build.0 = Release|Win32 + {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Debug|Win32.Build.0 = Debug|Win32 + {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Release|Win32.ActiveCfg = Release|Win32 + {AA230C1A-42F2-4BDC-9EB8-4AA6DF587E69}.Release|Win32.Build.0 = Release|Win32 + {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Debug|Win32.ActiveCfg = Release|Win32 + {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Debug|Win32.Build.0 = Release|Win32 + {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Release|Win32.ActiveCfg = Release|Win32 + {9F053346-A33D-4E4F-874E-CBA1AF809FC3}.Release|Win32.Build.0 = Release|Win32 + {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Debug|Win32.ActiveCfg = Release|Win32 + {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Debug|Win32.Build.0 = Release|Win32 + {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Release|Win32.ActiveCfg = Release|Win32 + {E50732C5-038A-42F7-8C95-8C02A4E2ADA6}.Release|Win32.Build.0 = Release|Win32 + {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Debug|Win32.ActiveCfg = Release|Win32 + {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Debug|Win32.Build.0 = Release|Win32 + {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Release|Win32.ActiveCfg = Release|Win32 + {BB88F4D5-EB0D-4429-94C3-93B0191BD3DD}.Release|Win32.Build.0 = Release|Win32 + {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Debug|Win32.ActiveCfg = Release|Win32 + {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Debug|Win32.Build.0 = Release|Win32 + {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Release|Win32.ActiveCfg = Release|Win32 + {F75021E3-73BF-425C-BA57-3FE7E2F6E02C}.Release|Win32.Build.0 = Release|Win32 + {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Debug|Win32.ActiveCfg = Release|Win32 + {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Debug|Win32.Build.0 = Release|Win32 + {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Release|Win32.ActiveCfg = Release|Win32 + {F250A358-225C-4B50-ABAE-5B3D4EC9DC4E}.Release|Win32.Build.0 = Release|Win32 + {18373B64-BCAB-4677-A070-7AD45D4C8304}.Debug|Win32.ActiveCfg = Debug|Win32 + {18373B64-BCAB-4677-A070-7AD45D4C8304}.Debug|Win32.Build.0 = Debug|Win32 + {18373B64-BCAB-4677-A070-7AD45D4C8304}.Release|Win32.ActiveCfg = Release|Win32 + {18373B64-BCAB-4677-A070-7AD45D4C8304}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/docs/DSP/DSP_InterC/DSP_InterC.sln b/docs/DSP/DSP_InterC/DSP_InterC.sln index 5c7b2aa21d..e4b3c9d6fd 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC.sln +++ b/docs/DSP/DSP_InterC/DSP_InterC.sln @@ -1,20 +1,20 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSP_InterC", "DSP_InterC\DSP_InterC.vcproj", "{A010425E-9D5E-461E-910D-0804C2A944D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A010425E-9D5E-461E-910D-0804C2A944D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {A010425E-9D5E-461E-910D-0804C2A944D5}.Debug|Win32.Build.0 = Debug|Win32 - {A010425E-9D5E-461E-910D-0804C2A944D5}.Release|Win32.ActiveCfg = Release|Win32 - {A010425E-9D5E-461E-910D-0804C2A944D5}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSP_InterC", "DSP_InterC\DSP_InterC.vcproj", "{A010425E-9D5E-461E-910D-0804C2A944D5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A010425E-9D5E-461E-910D-0804C2A944D5}.Debug|Win32.ActiveCfg = Debug|Win32 + {A010425E-9D5E-461E-910D-0804C2A944D5}.Debug|Win32.Build.0 = Debug|Win32 + {A010425E-9D5E-461E-910D-0804C2A944D5}.Release|Win32.ActiveCfg = Release|Win32 + {A010425E-9D5E-461E-910D-0804C2A944D5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.cpp b/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.cpp index d27902b729..f6a4394a23 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.cpp +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.cpp @@ -1,320 +1,320 @@ -/*==================================================================== - - filename: opcodes.h - project: GameCube DSP Tool (gcdsp) - created: 2005.03.04 - mail: duddie@walla.com - - Copyright (c) 2005 Duddie - - This program 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 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - ====================================================================*/ -// -// -// At the moment just ls and sl are using the prolog -// perhaps all actions on r03 must be in the prolog -// -#include - -#include "OutBuffer.h" - - - -// -void dsp_op_ext_r_epi(uint16 _Opcode) -{ - uint8 op = (_Opcode >> 2) & 0x3; - uint8 reg = _Opcode & 0x3; - - switch (op) - { - case 0x00: - OutBuffer::AddCode("Error: dsp_op_ext_r_epi"); - break; - - case 0x01: - OutBuffer::AddCode("%s--", OutBuffer::GetRegName(reg)); - // g_dsp.r[reg]--; - break; - - case 0x02: - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(reg)); - //g_dsp.r[reg]++; - break; - - case 0x03: - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(reg), OutBuffer::GetRegName(reg+4)); - // g_dsp.r[reg] += g_dsp.r[reg + 4]; - break; - } -} - - -void dsp_op_ext_mv(uint16 _Opcode) -{ - uint8 sreg = _Opcode & 0x3; - uint8 dreg = ((_Opcode >> 2) & 0x3); - - OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(dreg + 0x18), OutBuffer::GetRegName(sreg + 0x1c)); - - // g_dsp.r[dreg + 0x18] = g_dsp.r[sreg + 0x1c]; -} - - -void dsp_op_ext_s(uint16 _Opcode) -{ - uint8 dreg = _Opcode & 0x3; - uint8 sreg = ((_Opcode >> 3) & 0x3) + 0x1c; - - OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); - // dsp_dmem_write(g_dsp.r[dreg], g_dsp.r[sreg]); - - if (_Opcode & 0x04) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(dreg+4)); - // g_dsp.r[dreg] += g_dsp.r[dreg + 4]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(dreg)); - //g_dsp.r[dreg]++; - } -} - - -void dsp_op_ext_l(uint16 _Opcode) -{ - uint8 sreg = _Opcode & 0x3; - uint8 dreg = ((_Opcode >> 3) & 0x7) + 0x18; - - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); - // uint16 val = dsp_dmem_read(g_dsp.r[sreg]); - // g_dsp.r[dreg] = val; - - if (_Opcode & 0x04) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg+4)); - // g_dsp.r[sreg] += g_dsp.r[sreg + 4]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); - // g_dsp.r[sreg]++; - } -} - - -void dsp_op_ext_ls_pro(uint16 _Opcode) -{ - uint8 areg = (_Opcode & 0x1) + 0x1e; - - OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(areg)); - // dsp_dmem_write(g_dsp.r[0x03], g_dsp.r[areg]); - - if (_Opcode & 0x8) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(0x07)); - // g_dsp.r[0x03] += g_dsp.r[0x07]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); - // g_dsp.r[0x03]++; - } -} - - -void dsp_op_ext_ls_epi(uint16 _Opcode) -{ - uint8 dreg = ((_Opcode >> 4) & 0x3) + 0x18; - - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(0x00)); - // uint16 val = dsp_dmem_read(g_dsp.r[0x00]); - // dsp_op_write_reg(dreg, val); - - if (_Opcode & 0x4) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(0x04)); - // g_dsp.r[0x00] += g_dsp.r[0x04]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x00)); - // g_dsp.r[0x00]++; - } -} - - -void dsp_op_ext_sl_pro(uint16 _Opcode) -{ - uint8 areg = (_Opcode & 0x1) + 0x1e; - - OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(areg)); - // dsp_dmem_write(g_dsp.r[0x00], g_dsp.r[areg]); - - if (_Opcode & 0x4) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(0x04)); - // g_dsp.r[0x00] += g_dsp.r[0x04]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x00)); - // g_dsp.r[0x00]++; - } -} - - -void dsp_op_ext_sl_epi(uint16 _Opcode) -{ - uint8 dreg = ((_Opcode >> 4) & 0x3) + 0x18; - - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(0x03)); - // uint16 val = dsp_dmem_read(g_dsp.r[0x03]); - // dsp_op_write_reg(dreg, val); - - if (_Opcode & 0x8) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(0x07)); - // g_dsp.r[0x03] += g_dsp.r[0x07]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); - // g_dsp.r[0x03]++; - } -} - - -void dsp_op_ext_ld(uint16 _Opcode) -{ - uint8 dreg1 = (((_Opcode >> 5) & 0x1) << 1) + 0x18; - uint8 dreg2 = (((_Opcode >> 4) & 0x1) << 1) + 0x19; - uint8 sreg = _Opcode & 0x3; - - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg1), OutBuffer::GetRegName(sreg)); - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg2), OutBuffer::GetRegName(0x03)); - - // g_dsp.r[dreg1] = dsp_dmem_read(g_dsp.r[sreg]); - // g_dsp.r[dreg2] = dsp_dmem_read(g_dsp.r[0x03]); - - if (_Opcode & 0x04) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg + 0x04)); - // g_dsp.r[sreg] += g_dsp.r[sreg + 0x04]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); - // g_dsp.r[sreg]++; - } - - if (_Opcode & 0x08) - { - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(sreg + 0x07)); - // g_dsp.r[0x03] += g_dsp.r[0x07]; - } - else - { - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); - // g_dsp.r[0x03]++; - } -} - - -// ================================================================================ -// -// -// -// ================================================================================ - -void dsp_op_ext_ops_pro(uint16 _Opcode) -{ - if ((_Opcode & 0xFF) == 0){return;} - - switch ((_Opcode >> 4) & 0xf) - { - case 0x00: - dsp_op_ext_r_epi(_Opcode); - break; - - case 0x01: - dsp_op_ext_mv(_Opcode); - break; - - case 0x02: - case 0x03: - dsp_op_ext_s(_Opcode); - break; - - case 0x04: - case 0x05: - case 0x06: - case 0x07: - dsp_op_ext_l(_Opcode); - break; - - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - - if (_Opcode & 0x2) - { - dsp_op_ext_sl_pro(_Opcode); - } - else - { - dsp_op_ext_ls_pro(_Opcode); - } - - return; - - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - dsp_op_ext_ld(_Opcode); - break; - } -} - - -void dsp_op_ext_ops_epi(uint16 _Opcode) -{ - if ((_Opcode & 0xFF) == 0){return;} - - switch ((_Opcode >> 4) & 0xf) - { - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - - if (_Opcode & 0x2) - { - dsp_op_ext_sl_epi(_Opcode); - } - else - { - dsp_op_ext_ls_epi(_Opcode); - } - - return; - } -} - - +/*==================================================================== + + filename: opcodes.h + project: GameCube DSP Tool (gcdsp) + created: 2005.03.04 + mail: duddie@walla.com + + Copyright (c) 2005 Duddie + + This program 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 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ====================================================================*/ +// +// +// At the moment just ls and sl are using the prolog +// perhaps all actions on r03 must be in the prolog +// +#include + +#include "OutBuffer.h" + + + +// +void dsp_op_ext_r_epi(uint16 _Opcode) +{ + uint8 op = (_Opcode >> 2) & 0x3; + uint8 reg = _Opcode & 0x3; + + switch (op) + { + case 0x00: + OutBuffer::AddCode("Error: dsp_op_ext_r_epi"); + break; + + case 0x01: + OutBuffer::AddCode("%s--", OutBuffer::GetRegName(reg)); + // g_dsp.r[reg]--; + break; + + case 0x02: + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(reg)); + //g_dsp.r[reg]++; + break; + + case 0x03: + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(reg), OutBuffer::GetRegName(reg+4)); + // g_dsp.r[reg] += g_dsp.r[reg + 4]; + break; + } +} + + +void dsp_op_ext_mv(uint16 _Opcode) +{ + uint8 sreg = _Opcode & 0x3; + uint8 dreg = ((_Opcode >> 2) & 0x3); + + OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(dreg + 0x18), OutBuffer::GetRegName(sreg + 0x1c)); + + // g_dsp.r[dreg + 0x18] = g_dsp.r[sreg + 0x1c]; +} + + +void dsp_op_ext_s(uint16 _Opcode) +{ + uint8 dreg = _Opcode & 0x3; + uint8 sreg = ((_Opcode >> 3) & 0x3) + 0x1c; + + OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); + // dsp_dmem_write(g_dsp.r[dreg], g_dsp.r[sreg]); + + if (_Opcode & 0x04) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(dreg+4)); + // g_dsp.r[dreg] += g_dsp.r[dreg + 4]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(dreg)); + //g_dsp.r[dreg]++; + } +} + + +void dsp_op_ext_l(uint16 _Opcode) +{ + uint8 sreg = _Opcode & 0x3; + uint8 dreg = ((_Opcode >> 3) & 0x7) + 0x18; + + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); + // uint16 val = dsp_dmem_read(g_dsp.r[sreg]); + // g_dsp.r[dreg] = val; + + if (_Opcode & 0x04) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg+4)); + // g_dsp.r[sreg] += g_dsp.r[sreg + 4]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); + // g_dsp.r[sreg]++; + } +} + + +void dsp_op_ext_ls_pro(uint16 _Opcode) +{ + uint8 areg = (_Opcode & 0x1) + 0x1e; + + OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(areg)); + // dsp_dmem_write(g_dsp.r[0x03], g_dsp.r[areg]); + + if (_Opcode & 0x8) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(0x07)); + // g_dsp.r[0x03] += g_dsp.r[0x07]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); + // g_dsp.r[0x03]++; + } +} + + +void dsp_op_ext_ls_epi(uint16 _Opcode) +{ + uint8 dreg = ((_Opcode >> 4) & 0x3) + 0x18; + + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(0x00)); + // uint16 val = dsp_dmem_read(g_dsp.r[0x00]); + // dsp_op_write_reg(dreg, val); + + if (_Opcode & 0x4) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(0x04)); + // g_dsp.r[0x00] += g_dsp.r[0x04]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x00)); + // g_dsp.r[0x00]++; + } +} + + +void dsp_op_ext_sl_pro(uint16 _Opcode) +{ + uint8 areg = (_Opcode & 0x1) + 0x1e; + + OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(areg)); + // dsp_dmem_write(g_dsp.r[0x00], g_dsp.r[areg]); + + if (_Opcode & 0x4) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x00), OutBuffer::GetRegName(0x04)); + // g_dsp.r[0x00] += g_dsp.r[0x04]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x00)); + // g_dsp.r[0x00]++; + } +} + + +void dsp_op_ext_sl_epi(uint16 _Opcode) +{ + uint8 dreg = ((_Opcode >> 4) & 0x3) + 0x18; + + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(0x03)); + // uint16 val = dsp_dmem_read(g_dsp.r[0x03]); + // dsp_op_write_reg(dreg, val); + + if (_Opcode & 0x8) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(0x07)); + // g_dsp.r[0x03] += g_dsp.r[0x07]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); + // g_dsp.r[0x03]++; + } +} + + +void dsp_op_ext_ld(uint16 _Opcode) +{ + uint8 dreg1 = (((_Opcode >> 5) & 0x1) << 1) + 0x18; + uint8 dreg2 = (((_Opcode >> 4) & 0x1) << 1) + 0x19; + uint8 sreg = _Opcode & 0x3; + + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg1), OutBuffer::GetRegName(sreg)); + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg2), OutBuffer::GetRegName(0x03)); + + // g_dsp.r[dreg1] = dsp_dmem_read(g_dsp.r[sreg]); + // g_dsp.r[dreg2] = dsp_dmem_read(g_dsp.r[0x03]); + + if (_Opcode & 0x04) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg + 0x04)); + // g_dsp.r[sreg] += g_dsp.r[sreg + 0x04]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); + // g_dsp.r[sreg]++; + } + + if (_Opcode & 0x08) + { + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(0x03), OutBuffer::GetRegName(sreg + 0x07)); + // g_dsp.r[0x03] += g_dsp.r[0x07]; + } + else + { + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(0x03)); + // g_dsp.r[0x03]++; + } +} + + +// ================================================================================ +// +// +// +// ================================================================================ + +void dsp_op_ext_ops_pro(uint16 _Opcode) +{ + if ((_Opcode & 0xFF) == 0){return;} + + switch ((_Opcode >> 4) & 0xf) + { + case 0x00: + dsp_op_ext_r_epi(_Opcode); + break; + + case 0x01: + dsp_op_ext_mv(_Opcode); + break; + + case 0x02: + case 0x03: + dsp_op_ext_s(_Opcode); + break; + + case 0x04: + case 0x05: + case 0x06: + case 0x07: + dsp_op_ext_l(_Opcode); + break; + + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + + if (_Opcode & 0x2) + { + dsp_op_ext_sl_pro(_Opcode); + } + else + { + dsp_op_ext_ls_pro(_Opcode); + } + + return; + + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + dsp_op_ext_ld(_Opcode); + break; + } +} + + +void dsp_op_ext_ops_epi(uint16 _Opcode) +{ + if ((_Opcode & 0xFF) == 0){return;} + + switch ((_Opcode >> 4) & 0xf) + { + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + + if (_Opcode & 0x2) + { + dsp_op_ext_sl_epi(_Opcode); + } + else + { + dsp_op_ext_ls_epi(_Opcode); + } + + return; + } +} + + diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.h b/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.h index b6fb8fc9be..b27a5bbcca 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.h +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSPExt.h @@ -1,33 +1,33 @@ -/*==================================================================== - - filename: opcodes.h - project: GameCube DSP Tool (gcdsp) - created: 2005.03.04 - mail: duddie@walla.com - - Copyright (c) 2005 Duddie - - This program 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 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - ====================================================================*/ - -#ifndef _GDSP_EXT_OP_H -#define _GDSP_EXT_OP_H - -void dsp_op_ext_ops_pro(uint16 _Opcode); -void dsp_op_ext_ops_epi(uint16 _Opcode); - - -#endif +/*==================================================================== + + filename: opcodes.h + project: GameCube DSP Tool (gcdsp) + created: 2005.03.04 + mail: duddie@walla.com + + Copyright (c) 2005 Duddie + + This program 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 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ====================================================================*/ + +#ifndef _GDSP_EXT_OP_H +#define _GDSP_EXT_OP_H + +void dsp_op_ext_ops_pro(uint16 _Opcode); +void dsp_op_ext_ops_epi(uint16 _Opcode); + + +#endif diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.cpp b/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.cpp index 6efa29459a..1352f19a52 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.cpp +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.cpp @@ -1,2353 +1,2353 @@ -#include - -#include "DSPOpcodes.h" -#include "DSPExt.h" - -#define SR_CMP_MASK 0x3f -#define DSP_REG_MASK 0x1f - -/* - -bool CheckCondition(uint8 _Condition) -{ - bool taken = false; - - switch (_Condition & 0xf) - { - case 0x0: - - if ((!(g_dsp.r[R_SR] & 0x02)) && (!(g_dsp.r[R_SR] & 0x08))) - { - taken = true; - } - - break; - - case 0x3: - - if ((g_dsp.r[R_SR] & 0x02) || (g_dsp.r[R_SR] & 0x04) || (g_dsp.r[R_SR] & 0x08)) - { - taken = true; - } - - break; - - // old from duddie - case 0x1: // seems okay - - if ((!(g_dsp.r[R_SR] & 0x02)) && (g_dsp.r[R_SR] & 0x08)) - { - taken = true; - } - - break; - - case 0x2: - - if (!(g_dsp.r[R_SR] & 0x08)) - { - taken = true; - } - - break; - - case 0x4: - - if (!(g_dsp.r[R_SR] & 0x04)) - { - taken = true; - } - - break; - - case 0x5: - - if (g_dsp.r[R_SR] & 0x04) - { - taken = true; - } - - break; - - case 0xc: - - if (!(g_dsp.r[R_SR] & 0x40)) - { - taken = true; - } - - break; - - case 0xd: - - if (g_dsp.r[R_SR] & 0x40) - { - taken = true; - } - - break; - - case 0xf: - taken = true; - break; - - default: - // DebugLog("Unknown condition check: 0x%04x\n", _Condition & 0xf); - break; - } - - return(taken); -} -*/ - -// ======================================================================= - -//------------------------------------------------------------------------------- -void (*dsp_op[])(uint16 opc) = -{ - dsp_op0, dsp_op1, dsp_op2, dsp_op3, - dsp_op4, dsp_op5, dsp_op6, dsp_op7, - dsp_op8, dsp_op9, dsp_opab, dsp_opab, - dsp_opcd, dsp_opcd, dsp_ope, dsp_opf, -}; - -void DecodeOpcode(uint16 op) -{ - dsp_op[op >> 12](op); - -} -void dsp_op_unknown(uint16 opc) -{ - ErrorLog("dsp_op_unknown somewhere"); - OutBuffer::AddCode("unknown somewhere"); -} - - -void dsp_opc_call(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_call"); - -/* uint16 dest = FetchOpcode(); - if (CheckCondition(opc & 0xf)) - { - dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc); - g_dsp.pc = dest; - } */ -} - - -void dsp_opc_ifcc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_call"); - -/* if (!CheckCondition(opc & 0xf)) - { - FetchOpcode(); // skip the next opcode - }*/ -} - - -void dsp_opc_jcc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_call"); - -/* uint16 dest = FetchOpcode(); - - if (CheckCondition(opc & 0xf)) - { - g_dsp.pc = dest; - }*/ -} - - -void dsp_opc_jmpa(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_call"); - -/* uint8 reg; - uint16 addr; - - if ((opc & 0xf) != 0xf) - { - ErrorLog("dsp_opc_jmpa"); - } - - reg = (opc >> 5) & 0x7; - addr = dsp_op_read_reg(reg); - - if (opc & 0x0010) - { - // CALLA - dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc); - } - - g_dsp.pc = addr;*/ -} - - -// NEW (added condition check) -void dsp_opc_ret(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_ret"); - -/* if (CheckCondition(opc & 0xf)) - { - g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C); - }*/ -} - - -void dsp_opc_rti(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_rti"); - -/* if ((opc & 0xf) != 0xf) - { - ErrorLog("dsp_opc_rti"); - } - - g_dsp.r[R_SR] = dsp_reg_load_stack(DSP_STACK_D); - g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C); - - g_dsp.exception_in_progress_hack = false;*/ -} - - -void dsp_opc_halt(uint16 opc) -{ - OutBuffer::AddCode("HALT"); - -/* g_dsp.cr |= 0x4; - g_dsp.pc = g_dsp.err_pc;*/ -} - - -void dsp_opc_loop(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_loop"); - -/* uint16 reg = opc & 0x1f; - uint16 cnt = g_dsp.r[reg]; - uint16 loop_pc = g_dsp.pc; - - while (cnt--) - { - gdsp_loop_step(); - g_dsp.pc = loop_pc; - } - - g_dsp.pc = loop_pc + 1; */ -} - - -void dsp_opc_loopi(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_loopi"); - -/* uint16 cnt = opc & 0xff; - uint16 loop_pc = g_dsp.pc; - - while (cnt--) - { - gdsp_loop_step(); - g_dsp.pc = loop_pc; - } - - g_dsp.pc = loop_pc + 1;*/ -} - - -void dsp_opc_bloop(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_bloop"); - -/* uint16 reg = opc & 0x1f; - uint16 cnt = g_dsp.r[reg]; - uint16 loop_pc = FetchOpcode(); - - if (cnt) - { - dsp_reg_store_stack(0, g_dsp.pc); - dsp_reg_store_stack(2, loop_pc); - dsp_reg_store_stack(3, cnt); - } - else - { - g_dsp.pc = loop_pc + 1; - }*/ -} - - -void dsp_opc_bloopi(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_bloopi"); - -/* uint16 cnt = opc & 0xff; - uint16 loop_pc = FetchOpcode(); - - if (cnt) - { - dsp_reg_store_stack(0, g_dsp.pc); - dsp_reg_store_stack(2, loop_pc); - dsp_reg_store_stack(3, cnt); - } - else - { - g_dsp.pc = loop_pc + 1; - }*/ -} - - -//------------------------------------------------------------- - - -void dsp_opc_mrr(uint16 opc) -{ - uint8 sreg = opc & 0x1f; - uint8 dreg = (opc >> 5) & 0x1f; - - OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); - -// uint16 val = dsp_op_read_reg(sreg); -// dsp_op_write_reg(dreg, val); -} - - -void dsp_opc_lrr(uint16 opc) -{ - uint8 sreg = (opc >> 5) & 0x3; - uint8 dreg = opc & 0x1f; - - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); - -// uint16 val = dsp_dmem_read(g_dsp.r[sreg]); -// dsp_op_write_reg(dreg, val); - - // post processing of source reg - switch ((opc >> 7) & 0x3) - { - case 0x0: // LRR - break; - - case 0x1: // LRRD - OutBuffer::AddCode("%s--", OutBuffer::GetRegName(sreg)); - // g_dsp.r[sreg]--; - break; - - case 0x2: // LRRI - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); - //g_dsp.r[sreg]++; - break; - - case 0x3: - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg+4)); - // g_dsp.r[sreg] += g_dsp.r[sreg + 4]; - break; - } -} - - -void dsp_opc_srr(uint16 opc) -{ - uint8 dreg = (opc >> 5) & 0x3; - uint8 sreg = opc & 0x1f; - - OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); - - //uint16 val = dsp_op_read_reg(sreg); - // dsp_dmem_write(g_dsp.r[dreg], val); - - // post processing of source reg - switch ((opc >> 7) & 0x3) - { - case 0x0: // SRR - break; - - case 0x1: // SRRD - OutBuffer::AddCode("%s--", OutBuffer::GetRegName(dreg)); - // g_dsp.r[dreg]--; - break; - - case 0x2: // SRRI - OutBuffer::AddCode("%s++", OutBuffer::GetRegName(dreg)); - // g_dsp.r[dreg]++; - break; - - case 0x3: // SRRX - OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(dreg+4)); - //g_dsp.r[dreg] += g_dsp.r[dreg + 4]; - break; - } -} - - -void dsp_opc_ilrr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_ilrr"); - -/* uint16 reg = opc & 0x3; - uint16 dreg = 0x1e + ((opc >> 8) & 1); - - // always to acc0 ? - g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]); - - switch ((opc >> 2) & 0x3) - { - case 0x0: // no change - break; - - case 0x1: // post decrement - g_dsp.r[reg]--; - break; - - case 0x2: // post increment - g_dsp.r[reg]++; - break; - - default: - ErrorLog("dsp_opc_ilrr"); - }*/ -} - - -void dsp_opc_lri(uint16 opc) -{ - uint8 reg = opc & DSP_REG_MASK; - uint16 imm = FetchOpcode(); - - OutBuffer::AddCode("%s = 0x%02x", OutBuffer::GetRegName(reg), imm); - // dsp_op_write_reg(reg, imm); -} - - -void dsp_opc_lris(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_lris"); - -/* uint8 reg = ((opc >> 8) & 0x7) + 0x18; - uint16 imm = (sint8)opc; - dsp_op_write_reg(reg, imm);*/ -} - - -void dsp_opc_lr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_lr"); - -/* uint8 reg = opc & DSP_REG_MASK; - uint16 addr = FetchOpcode(); - uint16 val = dsp_dmem_read(addr); - dsp_op_write_reg(reg, val);*/ -} - - -void dsp_opc_sr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_sr"); - - /*uint8 reg = opc & DSP_REG_MASK; - uint16 addr = FetchOpcode(); - uint16 val = dsp_op_read_reg(reg); - dsp_dmem_write(addr, val);*/ -} - - -void dsp_opc_si(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_si"); - - //uint16 addr = (sint8)opc; - //uint16 imm = readimemory(); - //dsp_dmem_write(addr, imm); -} - - -void dsp_opc_tstaxh(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_tstaxh"); - - //uint8 reg = (opc >> 8) & 0x1; - //sint16 val = dsp_get_ax_h(reg); - - //Update_SR_Register(val); -} - - -void dsp_opc_clr(uint16 opc) -{ - uint8 reg = (opc >> 11) & 0x1; - - OutBuffer::AddCode("ACC%i = 0", reg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", reg); - - //dsp_set_long_acc(reg, 0); - - //Update_SR_Register((sint64)0); -} - - -void dsp_opc_clrp(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_clrp"); - - //g_dsp.r[0x14] = 0x0000; - //g_dsp.r[0x15] = 0xfff0; - //g_dsp.r[0x16] = 0x00ff; - //g_dsp.r[0x17] = 0x0010; -} - - -// NEW -void dsp_opc_mulc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulc"); - - // math new prod - //uint8 sreg = (opc >> 11) & 0x1; - //uint8 treg = (opc >> 12) & 0x1; - - //sint64 prod = dsp_get_acc_m(sreg) * dsp_get_ax_h(treg) * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulcmvz(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulcmvz"); - - ErrorLog("dsp_opc_mulcmvz ni"); -} - - -// NEW -void dsp_opc_mulcmv(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulcmv"); - - ErrorLog("dsp_opc_mulcmv ni"); -} - - -void dsp_opc_cmpar(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_cmpar"); - - //uint8 rreg = ((opc >> 12) & 0x1) + 0x1a; - //uint8 areg = (opc >> 11) & 0x1; - - //// we compare - //sint64 rr = (sint16)g_dsp.r[rreg]; - //rr <<= 16; - - //sint64 ar = dsp_get_long_acc(areg); - - //Update_SR_Register(ar - rr); -} - - -void dsp_opc_cmp(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_cmp"); - - //sint64 acc0 = dsp_get_long_acc(0); - //sint64 acc1 = dsp_get_long_acc(1); - - //Update_SR_Register(acc0 - acc1); -} - - -void dsp_opc_tsta(uint16 opc) -{ - uint8 reg = (opc >> 11) & 0x1; - OutBuffer::AddCode("Update_SR_Register(ACC%i)", reg); - - //uint8 reg = (opc >> 11) & 0x1; - //sint64 acc = dsp_get_long_acc(reg); - - //Update_SR_Register(acc); -} - - -// NEW -void dsp_opc_addaxl(uint16 opc) -{ - uint8 sreg = (opc >> 9) & 0x1; - uint8 dreg = (opc >> 8) & 0x1; - - OutBuffer::AddCode("ACC%i += AX%i_l", dreg, sreg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); - - //sint64 acc = dsp_get_long_acc(dreg); - //sint64 acx = dsp_get_ax_l(sreg); - - //acc += acx; - - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -// NEW -void dsp_opc_addarn(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addarn"); - - //uint8 dreg = opc & 0x3; - //uint8 sreg = (opc >> 2) & 0x3; - - //g_dsp.r[dreg] += (sint16)g_dsp.r[0x04 + sreg]; -} - - -// NEW -void dsp_opc_mulcac(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulcac"); - - //sint64 TempProd = dsp_get_long_prod(); - - //// update prod - //uint8 sreg = (opc >> 12) & 0x1; - //sint64 Prod = (sint64)dsp_get_acc_m(sreg) * (sint64)dsp_get_acc_h(sreg) * GetMultiplyModifier(); - //dsp_set_long_prod(Prod); - - //// update acc - //uint8 rreg = (opc >> 8) & 0x1; - //dsp_set_long_acc(rreg, TempProd); -} - - -// NEW -void dsp_opc_movr(uint16 opc) -{ - uint8 areg = (opc >> 8) & 0x1; - uint8 sreg = ((opc >> 9) & 0x3) + 0x18; - - OutBuffer::AddCode("ACC%i = (%s << 16) & ~0xFFFF", areg, OutBuffer::GetRegName(sreg)); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); - - //sint64 acc = (sint16)g_dsp.r[sreg]; - //acc <<= 16; - //acc &= ~0xffff; - - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_movax(uint16 opc) -{ - uint8 sreg = (opc >> 9) & 0x1; - uint8 dreg = (opc >> 8) & 0x1; - - OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(0x1c + dreg), OutBuffer::GetRegName(0x18 + sreg)); - OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(0x1e + dreg), OutBuffer::GetRegName(0x1a + sreg)); - - //g_dsp.r[0x1c + dreg] = g_dsp.r[0x18 + sreg]; - //g_dsp.r[0x1e + dreg] = g_dsp.r[0x1a + sreg]; - - OutBuffer::AddCode("%s = (%s < 0) ? 0xFFFF : 0x0000", OutBuffer::GetRegName(0x10 + dreg), - OutBuffer::GetRegName(0x1a + sreg)); - - //if ((sint16)g_dsp.r[0x1a + sreg] < 0) - //{ - // g_dsp.r[0x10 + dreg] = 0xffff; - //} - //else - //{ - // g_dsp.r[0x10 + dreg] = 0; - //} - - dsp_opc_tsta(dreg << 11); -} - - -// NEW -void dsp_opc_xorr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_xorr"); - - //uint8 sreg = (opc >> 9) & 0x1; - //uint8 dreg = (opc >> 8) & 0x1; - - //g_dsp.r[0x1e + dreg] ^= g_dsp.r[0x1a + sreg]; - - //dsp_opc_tsta(dreg << 11); -} - - -void dsp_opc_andr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_andr"); - - //uint8 sreg = (opc >> 9) & 0x1; - //uint8 dreg = (opc >> 8) & 0x1; - - //g_dsp.r[0x1e + dreg] &= g_dsp.r[0x1a + sreg]; - - //dsp_opc_tsta(dreg << 11); -} - - -// NEW -void dsp_opc_orr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_orr"); - - //uint8 sreg = (opc >> 9) & 0x1; - //uint8 dreg = (opc >> 8) & 0x1; - - //g_dsp.r[0x1e + dreg] |= g_dsp.r[0x1a + sreg]; - - //dsp_opc_tsta(dreg << 11); -} - - -// NEW -void dsp_opc_andc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_andc"); - - //uint8 D = (opc >> 8) & 0x1; - - //uint16 ac1 = dsp_get_acc_m(D); - //uint16 ac2 = dsp_get_acc_m(1 - D); - - //dsp_set_long_acc(D, ac1 & ac2); - - //if ((ac1 & ac2) == 0) - //{ - // g_dsp.r[R_SR] |= 0x20; - //} - //else - //{ - // g_dsp.r[R_SR] &= ~0x20; - //} -} - - -//------------------------------------------------------------- - -void dsp_opc_nx(uint16 opc) -{} - - -// NEW -void dsp_opc_andfc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_andfc"); - - //if (opc & 0xf) - //{ - // ErrorLog("dsp_opc_andfc"); - //} - - //uint8 reg = (opc >> 8) & 0x1; - //uint16 imm = FetchOpcode(); - //uint16 val = dsp_get_acc_m(reg); - - //if ((val & imm) == imm) - //{ - // g_dsp.r[R_SR] |= 0x40; - //} - //else - //{ - // g_dsp.r[R_SR] &= ~0x40; - //} -} - - -void dsp_opc_andf(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_andf"); - - //uint8 reg; - //uint16 imm; - //uint16 val; - - //if (opc & 0xf) - //{ - // ErrorLog("dsp_opc_andf"); - //} - - //reg = 0x1e + ((opc >> 8) & 0x1); - //imm = FetchOpcode(); - //val = g_dsp.r[reg]; - - //if ((val & imm) == 0) - //{ - // g_dsp.r[R_SR] |= 0x40; - //} - //else - //{ - // g_dsp.r[R_SR] &= ~0x40; - //} -} - - -void dsp_opc_subf(uint16 opc) -{ - if (opc & 0xf) - { - ErrorLog("dsp_opc_subf"); - } - - uint8 reg = 0x1e + ((opc >> 8) & 0x1); - sint64 imm = (sint16)FetchOpcode(); - - OutBuffer::AddCode("missing: dsp_opc_subf"); - - //sint64 val = (sint16)g_dsp.r[reg]; - //sint64 res = val - imm; - - //Update_SR_Register(res); -} - - -void dsp_opc_xori(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_xori"); - - //if (opc & 0xf) - //{ - // ErrorLog("dsp_opc_xori"); - //} - - //uint8 reg = 0x1e + ((opc >> 8) & 0x1); - //uint16 imm = FetchOpcode(); - //g_dsp.r[reg] ^= imm; - - //Update_SR_Register((sint16)g_dsp.r[reg]); -} - - -void dsp_opc_andi(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_andi"); - - //if (opc & 0xf) - //{ - // ErrorLog("dsp_opc_andi"); - //} - - //uint8 reg = 0x1e + ((opc >> 8) & 0x1); - //uint16 imm = FetchOpcode(); - //g_dsp.r[reg] &= imm; - - //Update_SR_Register((sint16)g_dsp.r[reg]); -} - - -// F|RES: i am not sure if this shouldnt be the whole ACC -// -void dsp_opc_ori(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_ori"); - - //if (opc & 0xf) - //{ - // return(ErrorLog("dsp_opc_ori")); - //} - - //uint8 reg = 0x1e + ((opc >> 8) & 0x1); - //uint16 imm = FetchOpcode(); - //g_dsp.r[reg] |= imm; - - //Update_SR_Register((sint16)g_dsp.r[reg]); -} - - -//------------------------------------------------------------- - -void dsp_opc_add(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_add"); - - //uint8 areg = (opc >> 8) & 0x1; - //sint64 acc0 = dsp_get_long_acc(0); - //sint64 acc1 = dsp_get_long_acc(1); - - //sint64 res = acc0 + acc1; - - //dsp_set_long_acc(areg, res); - - //Update_SR_Register(res); -} - - -//------------------------------------------------------------- - -void dsp_opc_addp(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addp"); - - //uint8 dreg = (opc >> 8) & 0x1; - //sint64 acc = dsp_get_long_acc(dreg); - //acc = acc + dsp_get_long_prod(); - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_cmpis(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_cmpis"); - - //uint8 areg = (opc >> 8) & 0x1; - - //sint64 acc = dsp_get_long_acc(areg); - //sint64 val = (sint8)opc; - //val <<= 16; - - //sint64 res = acc - val; - - //Update_SR_Register(res); -} - - -// NEW -// verified at the console -void dsp_opc_addpaxz(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addpaxz"); - - //uint8 dreg = (opc >> 8) & 0x1; - //uint8 sreg = (opc >> 9) & 0x1; - - //sint64 prod = dsp_get_long_prod() & ~0x0ffff; - //sint64 ax_h = dsp_get_long_acx(sreg); - //sint64 acc = (prod + ax_h) & ~0x0ffff; - - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -// NEW -void dsp_opc_movpz(uint16 opc) -{ - uint8 dreg = (opc >> 8) & 0x01; - - OutBuffer::AddCode("ACC%i = PROD & ~0xffff", dreg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); - - //// overwrite acc and clear low part - //sint64 prod = dsp_get_long_prod(); - //sint64 acc = prod & ~0xffff; - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_decm(uint16 opc) -{ - uint8 dreg = (opc >> 8) & 0x01; - - OutBuffer::AddCode("ACC%i -= 0x10000", dreg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); - - //sint64 sub = 0x10000; - //sint64 acc = dsp_get_long_acc(dreg); - //acc -= sub; - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_dec(uint16 opc) -{ - uint8 dreg = (opc >> 8) & 0x01; - - OutBuffer::AddCode("ACC%i -= 1", dreg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); - - //sint64 acc = dsp_get_long_acc(dreg) - 1; - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_incm(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_incm"); - - //uint8 dreg = (opc >> 8) & 0x1; - - //sint64 sub = 0x10000; - //sint64 acc = dsp_get_long_acc(dreg); - //acc += sub; - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_inc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_inc"); - - //uint8 dreg = (opc >> 8) & 0x1; - - //sint64 acc = dsp_get_long_acc(dreg); - //acc++; - //dsp_set_long_acc(dreg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_neg(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_neg"); - - //uint8 areg = (opc >> 8) & 0x1; - - //sint64 acc = dsp_get_long_acc(areg); - //acc = 0 - acc; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_movnp(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_movnp"); - - ErrorLog("dsp_opc_movnp\n"); -} - - -// NEW -void dsp_opc_addax(uint16 opc) -{ - // OutBuffer::AddCode("missing: dsp_opc_addax"); - - uint8 areg = (opc >> 8) & 0x1; - uint8 sreg = (opc >> 9) & 0x1; - - OutBuffer::AddCode("ACC%i += AX%i", areg, sreg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); - - //sint64 ax = dsp_get_long_acx(sreg); - //sint64 acc = dsp_get_long_acc(areg); - //acc += ax; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_addr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addr"); - - //uint8 areg = (opc >> 8) & 0x1; - //uint8 sreg = ((opc >> 9) & 0x3) + 0x18; - - //sint64 ax = (sint16)g_dsp.r[sreg]; - //ax <<= 16; - - //sint64 acc = dsp_get_long_acc(areg); - //acc += ax; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_subr(uint16 opc) -{ - uint8 areg = (opc >> 8) & 0x1; - uint8 sreg = ((opc >> 9) & 0x3) + 0x18; - - OutBuffer::AddCode("ACC%i -= (sint64)((sint16)%s << 16)", areg, OutBuffer::GetRegName(sreg)); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); - - //sint64 ax = (sint16)g_dsp.r[sreg]; - //ax <<= 16; - - //sint64 acc = dsp_get_long_acc(areg); - //acc -= ax; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - -// NEW -void dsp_opc_subax(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_subax"); - - //int regD = (opc >> 8) & 0x1; - //int regT = (opc >> 9) & 0x1; - - //sint64 Acc = dsp_get_long_acc(regD) - dsp_get_long_acx(regT); - - //dsp_set_long_acc(regD, Acc); - //Update_SR_Register(Acc); -} - -void dsp_opc_addis(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addis"); - - //uint8 areg = (opc >> 8) & 0x1; - - //sint64 Imm = (sint8)opc; - //Imm <<= 16; - //sint64 acc = dsp_get_long_acc(areg); - //acc += Imm; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_addi(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_addi"); - - //uint8 areg = (opc >> 8) & 0x1; - - //sint64 sub = (sint16)FetchOpcode(); - //sub <<= 16; - //sint64 acc = dsp_get_long_acc(areg); - //acc += sub; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_lsl16(uint16 opc) -{ - uint8 areg = (opc >> 8) & 0x1; - - OutBuffer::AddCode("ACC%i <<= 16", areg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); - - //sint64 acc = dsp_get_long_acc(areg); - //acc <<= 16; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -// NEW -void dsp_opc_madd(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_madd"); - - //uint8 sreg = (opc >> 8) & 0x1; - - //sint64 prod = dsp_get_long_prod(); - //prod += (sint64)dsp_get_ax_l(sreg) * (sint64)dsp_get_ax_h(sreg) * GetMultiplyModifier(); - //dsp_set_long_prod(prod); -} - - -void dsp_opc_lsr16(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_lsr16"); - - //uint8 areg = (opc >> 8) & 0x1; - - //sint64 acc = dsp_get_long_acc(areg); - //acc >>= 16; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -void dsp_opc_asr16(uint16 opc) -{ - uint8 areg = (opc >> 11) & 0x1; - - OutBuffer::AddCode("ACC%i >>= 16", areg); - OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); - - //sint64 acc = dsp_get_long_acc(areg); - //acc >>= 16; - //dsp_set_long_acc(areg, acc); - - //Update_SR_Register(acc); -} - - -union UOpcodeShifti -{ - uint16 Hex; - struct - { - signed shift : 6; - unsigned negating : 1; - unsigned arithmetic : 1; - unsigned areg : 1; - unsigned op : 7; - }; - struct - { - unsigned ushift : 6; - }; - UOpcodeShifti(uint16 _Hex) - : Hex(_Hex) {} -}; - -void dsp_opc_shifti(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_shifti"); - - //UOpcodeShifti Opcode(opc); - - //// direction: left - //bool ShiftLeft = true; - //uint16 shift = Opcode.ushift; - - //if ((Opcode.negating) && (Opcode.shift < 0)) - //{ - // ShiftLeft = false; - // shift = -Opcode.shift; - //} - - //sint64 acc; - //uint64 uacc; - - //if (Opcode.arithmetic) - //{ - // // arithmetic shift - // uacc = dsp_get_long_acc(Opcode.areg); - - // if (!ShiftLeft) - // { - // uacc >>= shift; - // } - // else - // { - // uacc <<= shift; - // } - - // acc = uacc; - //} - //else - //{ - // acc = dsp_get_long_acc(Opcode.areg); - - // if (!ShiftLeft) - // { - // acc >>= shift; - // } - // else - // { - // acc <<= shift; - // } - //} - - //dsp_set_long_acc(Opcode.areg, acc); - - //Update_SR_Register(acc); -} - - -//------------------------------------------------------------- -// hcs give me this code!! -void dsp_opc_dar(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_dar"); - - //uint8 reg = opc & 0x3; - - //int temp = g_dsp.r[reg] + g_dsp.r[8]; - - //if (temp <= 0x7ff){g_dsp.r[reg] = temp;} - //else {g_dsp.r[reg]--;} -} - - -// hcs give me this code!! -void dsp_opc_iar(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_iar"); - - //uint8 reg = opc & 0x3; - - //int temp = g_dsp.r[reg] + g_dsp.r[8]; - - //if (temp <= 0x7ff){g_dsp.r[reg] = temp;} - //else {g_dsp.r[reg]++;} -} - - -//------------------------------------------------------------- - -void dsp_opc_sbclr(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_sbclr"); - - //uint8 bit = (opc & 0xff) + 6; - //g_dsp.r[R_SR] &= ~(1 << bit); -} - - -void dsp_opc_sbset(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_sbset"); - - //uint8 bit = (opc & 0xff) + 6; - //g_dsp.r[R_SR] |= (1 << bit); -} - - -void dsp_opc_srbith(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_srbith"); - -// switch ((opc >> 8) & 0xf) -// { -// case 0xe: // SET40 -// g_dsp.r[R_SR] &= ~(1 << 14); -// break; -// -///* case 0xf: // SET16 // that doesnt happen on a real console -// g_dsp.r[R_SR] |= (1 << 14); -// break;*/ -// -// default: -// break; -// } -} - - -//------------------------------------------------------------- - -void dsp_opc_movp(uint16 opc) -{ - uint8 dreg = (opc >> 8) & 0x1; - - OutBuffer::AddCode("ACC%i = PROD", dreg); - - //sint64 prod = dsp_get_long_prod(); - //sint64 acc = prod; - //dsp_set_long_acc(dreg, acc); -} - - -void dsp_opc_mul(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mul"); - - //uint8 sreg = (opc >> 11) & 0x1; - //sint64 prod = (sint64)dsp_get_ax_h(sreg) * (sint64)dsp_get_ax_l(sreg) * GetMultiplyModifier(); - - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - -// NEW -void dsp_opc_mulac(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulac"); - - //// add old prod to acc - //uint8 rreg = (opc >> 8) & 0x1; - //sint64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod(); - //dsp_set_long_acc(rreg, acR); - - //// math new prod - //uint8 sreg = (opc >> 11) & 0x1; - //sint64 prod = dsp_get_ax_l(sreg) * dsp_get_ax_h(sreg) * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -void dsp_opc_mulmv(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulmv"); - - //uint8 rreg = (opc >> 8) & 0x1; - //sint64 prod = dsp_get_long_prod(); - //sint64 acc = prod; - //dsp_set_long_acc(rreg, acc); - - //uint8 areg = ((opc >> 11) & 0x1) + 0x18; - //uint8 breg = ((opc >> 11) & 0x1) + 0x1a; - //sint64 val1 = (sint16)g_dsp.r[areg]; - //sint64 val2 = (sint16)g_dsp.r[breg]; - - //prod = val1 * val2 * GetMultiplyModifier(); - - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulmvz(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulmvz"); - - //uint8 sreg = (opc >> 11) & 0x1; - //uint8 rreg = (opc >> 8) & 0x1; - - //// overwrite acc and clear low part - //sint64 prod = dsp_get_long_prod(); - //sint64 acc = prod & ~0xffff; - //dsp_set_long_acc(rreg, acc); - - //// math prod - //prod = (sint64)g_dsp.r[0x18 + sreg] * (sint64)g_dsp.r[0x1a + sreg] * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulx(uint16 opc) -{ - // OutBuffer::AddCode("missing: dsp_opc_mulx"); - - uint8 sreg = ((opc >> 12) & 0x1); - uint8 treg = ((opc >> 11) & 0x1); - - OutBuffer::AddCode("PROD = %s * %s * MultiplyModifier", (sreg == 0) ? "AX0_l" : "AX0_h", - (treg == 0) ? "AX1_l" : "AX1_h"); - OutBuffer::AddCode("Update_SR_Register(PROD)"); - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //sint64 prod = val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulxac(uint16 opc) -{ - //// add old prod to acc - uint8 rreg = (opc >> 8) & 0x1; - //sint64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod(); - //dsp_set_long_acc(rreg, acR); - - OutBuffer::AddCode("ACC%i += PROD", rreg); - - //// math new prod - uint8 sreg = (opc >> 12) & 0x1; - uint8 treg = (opc >> 11) & 0x1; - - OutBuffer::AddCode("PROD = %s * %s * MultiplyModifier", (sreg == 0) ? "AX0_l" : "AX0_h", - (treg == 0) ? "AX1_l" : "AX1_h"); - OutBuffer::AddCode("Update_SR_Register(PROD)"); - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //sint64 prod = val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulxmv(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulxmv"); - - //// add old prod to acc - //uint8 rreg = ((opc >> 8) & 0x1); - //sint64 acR = dsp_get_long_prod(); - //dsp_set_long_acc(rreg, acR); - - //// math new prod - //uint8 sreg = (opc >> 12) & 0x1; - //uint8 treg = (opc >> 11) & 0x1; - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //sint64 prod = val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_mulxmvz(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_mulxmvz"); - - //// overwrite acc and clear low part - //uint8 rreg = (opc >> 8) & 0x1; - //sint64 prod = dsp_get_long_prod(); - //sint64 acc = prod & ~0xffff; - //dsp_set_long_acc(rreg, acc); - - //// math prod - //uint8 sreg = (opc >> 12) & 0x1; - //uint8 treg = (opc >> 11) & 0x1; - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //prod = val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); - - //Update_SR_Register(prod); -} - - -// NEW -void dsp_opc_sub(uint16 opc) -{ - uint8 D = (opc >> 8) & 0x1; - - OutBuffer::AddCode("ACC%i -= ACC%i", D, 1-D); - - //sint64 Acc1 = dsp_get_long_acc(D); - //sint64 Acc2 = dsp_get_long_acc(1 - D); - - //Acc1 -= Acc2; - - //dsp_set_long_acc(D, Acc1); -} - - -//------------------------------------------------------------- -// -// --- Table E -// -//------------------------------------------------------------- - -// NEW -void dsp_opc_maddx(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_maddx"); - - //uint8 sreg = (opc >> 9) & 0x1; - //uint8 treg = (opc >> 8) & 0x1; - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //sint64 prod = dsp_get_long_prod(); - //prod += val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); -} - - -// NEW -void dsp_opc_msubx(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_msubx"); - - //uint8 sreg = (opc >> 9) & 0x1; - //uint8 treg = (opc >> 8) & 0x1; - - //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); - //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); - - //sint64 prod = dsp_get_long_prod(); - //prod -= val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); -} - - -// NEW -void dsp_opc_maddc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_maddc"); - - //uint sreg = (opc >> 9) & 0x1; - //uint treg = (opc >> 8) & 0x1; - - //sint64 val1 = dsp_get_acc_m(sreg); - //sint64 val2 = dsp_get_ax_h(treg); - - //sint64 prod = dsp_get_long_prod(); - //prod += val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); -} - - -// NEW -void dsp_opc_msubc(uint16 opc) -{ - OutBuffer::AddCode("missing: dsp_opc_msubc"); - - //uint sreg = (opc >> 9) & 0x1; - //uint treg = (opc >> 8) & 0x1; - - //sint64 val1 = dsp_get_acc_m(sreg); - //sint64 val2 = dsp_get_ax_h(treg); - - //sint64 prod = dsp_get_long_prod(); - //prod -= val1 * val2 * GetMultiplyModifier(); - //dsp_set_long_prod(prod); -} - - -//------------------------------------------------------------- -void dsp_op0(uint16 opc) -{ - if (opc == 0) - { - return; - } - - switch ((opc >> 8) & 0xf) - { - case 0x0: - - switch ((opc >> 4) & 0xf) - { - case 0x0: - - switch (opc & 0xf) - { - case 0x4: - case 0x5: - case 0x6: - case 0x7: - dsp_opc_dar(opc); - break; - - case 0x8: - case 0x9: - case 0xa: - case 0xb: - dsp_opc_iar(opc); - break; - - default: - ErrorLog("dsp_op0"); - break; - } - - break; - - case 0x1: - dsp_opc_addarn(opc); - break; - - case 0x2: // HALT - dsp_opc_halt(opc); - break; - - case 0x4: // LOOP - case 0x5: // LOOP - dsp_opc_loop(opc); - break; - - case 0x6: // BLOOP - case 0x7: // BLOOP - dsp_opc_bloop(opc); - break; - - case 0x8: // LRI - case 0x9: // LRI - dsp_opc_lri(opc); - break; - - case 0xC: // LR - case 0xD: // LR - dsp_opc_lr(opc); - break; - - case 0xE: // SR - case 0xF: // SR - dsp_opc_sr(opc); - break; - - default: - ErrorLog("dsp_op0"); - break; - } - - break; - - case 0x2: - - switch ((opc >> 4) & 0xf) - { - case 0x0: // ADDI - dsp_opc_addi(opc); - break; - - case 0x1: // IL - dsp_opc_ilrr(opc); - break; - - case 0x2: // XORI - dsp_opc_xori(opc); - break; - - case 0x4: // ANDI - dsp_opc_andi(opc); - break; - - case 0x6: // ORI - dsp_opc_ori(opc); - break; - - case 0x7: // - dsp_opc_ifcc(opc); - break; - - case 0x8: // SUBF - dsp_opc_subf(opc); - break; - - case 0x9: // Jxx - dsp_opc_jcc(opc); - break; - - case 0xa: // ANDF - dsp_opc_andf(opc); - break; - - case 0xb: // CALL - dsp_opc_call(opc); - break; - - case 0xc: - dsp_opc_andfc(opc); - break; - - case 0xd: // RET - dsp_opc_ret(opc); - break; - - case 0xf: // RTI - dsp_opc_rti(opc); - break; - - default: - ErrorLog("dsp_op0"); - break; - } - - break; - - case 0x3: - - switch ((opc >> 4) & 0xf) - { - case 0x0: // ADDAI - dsp_opc_addi(opc); - break; - - case 0x1: // ILR - dsp_opc_ilrr(opc); - break; - - case 0x2: // XORI - dsp_opc_xori(opc); - break; - - case 0x4: // ANDI - dsp_opc_andi(opc); - break; - - case 0x6: // ORI - dsp_opc_ori(opc); - break; - - case 0x8: // SUBF - dsp_opc_subf(opc); - break; - - case 0xa: // ANDF - dsp_opc_andf(opc); - break; - - case 0xc: // ANDFC - dsp_opc_andfc(opc); - break; - - default: - ErrorLog("dsp_op0"); - break; - } - - break; - - case 0x4: - case 0x5: - dsp_opc_addis(opc); - break; - - case 0x6: // SUBISF - case 0x7: - dsp_opc_cmpis(opc); - break; - - case 0x8: // LRIS - case 0x9: - case 0xa: - case 0xb: - case 0xc: - case 0xd: - case 0xe: - case 0xf: - dsp_opc_lris(opc); - break; - - default: - ErrorLog("dsp_op0"); - break; - } -} - - -void dsp_op1(uint16 opc) -{ - switch ((opc >> 8) & 0xf) - { - case 0x0: - dsp_opc_loopi(opc); - break; - - case 0x1: // BLOOPI - dsp_opc_bloopi(opc); - break; - - case 0x2: // SBCLR - dsp_opc_sbclr(opc); - break; - - case 0x3: // SBSET - dsp_opc_sbset(opc); - break; - - case 0x4: // shifti - case 0x5: - dsp_opc_shifti(opc); - break; - - case 0x6: // SI - dsp_opc_si(opc); - break; - - case 0x7: // JMPA/CALLA - dsp_opc_jmpa(opc); - break; - - case 0x8: // LRRx - case 0x9: // LRRx - dsp_opc_lrr(opc); - break; - - case 0xa: // SRRx - case 0xb: // SRRx - dsp_opc_srr(opc); - break; - - case 0xc: // MRR - case 0xd: // MRR - case 0xe: // MRR - case 0xf: // MRR - dsp_opc_mrr(opc); - break; - - default: - ErrorLog("dsp_op1"); - break; - } -} - - -void dsp_op2(uint16 opc) -{ - // lrs, srs - uint8 reg = ((opc >> 8) & 0x7) + 0x18; - uint16 addr = (sint8) opc; - - if (opc & 0x0800) - { - OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetMemName(addr), OutBuffer::GetRegName(reg)); - - // srs - // dsp_dmem_write(addr, g_dsp.r[reg]); - } - else - { - OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(reg), OutBuffer::GetMemName(addr)); - - // lrs - // g_dsp.r[reg] = dsp_dmem_read(addr); - } -} - - -void dsp_op3(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x1: - case 0x2: - case 0x3: - dsp_opc_xorr(opc); - break; - - case 0x4: - case 0x5: - case 0x6: - case 0x7: - dsp_opc_andr(opc); - break; - - case 0x8: - case 0x9: - case 0xa: - case 0xb: - dsp_opc_orr(opc); - break; - - case 0xc: - case 0xd: - dsp_opc_andc(opc); - break; - - default: - ErrorLog("dsp_op3"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op4(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x1: - case 0x2: - case 0x3: - case 0x4: - case 0x5: - case 0x6: - case 0x7: - dsp_opc_addr(opc); - break; - - case 0x8: - case 0x9: - case 0xa: - case 0xb: - dsp_opc_addax(opc); - break; - - case 0xc: - case 0xd: - dsp_opc_add(opc); - break; - - case 0xe: - case 0xf: - dsp_opc_addp(opc); - break; - - default: - ErrorLog("dsp_op4"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op5(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x1: - case 0x2: - case 0x3: - case 0x4: - case 0x5: - case 0x6: - case 0x7: - dsp_opc_subr(opc); - break; - - case 0x8: - case 0x9: - case 0xa: - case 0xb: - dsp_opc_subax(opc); - break; - - case 0xc: - case 0xd: - dsp_opc_sub(opc); - break; - - default: - ErrorLog("dsp_op5: %x", (opc >> 8) & 0xf); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op6(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x00: // MOVR - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - dsp_opc_movr(opc); - break; - - case 0x8: // MVAXA - case 0x9: - case 0xa: - case 0xb: - dsp_opc_movax(opc); - break; - - case 0xe: - case 0xf: - dsp_opc_movp(opc); - break; - - default: - ErrorLog("dsp_op6"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op7(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x1: - case 0x2: - case 0x3: - dsp_opc_addaxl(opc); - break; - - case 0x4: - case 0x5: - dsp_opc_incm(opc); - break; - - case 0x6: - case 0x7: - dsp_opc_inc(opc); - break; - - case 0x8: - case 0x9: - dsp_opc_decm(opc); - break; - - case 0xa: - case 0xb: - dsp_opc_dec(opc); - break; - - case 0xc: - case 0xd: - dsp_opc_neg(opc); - break; - - case 0xe: - case 0xf: - dsp_opc_movnp(opc); - break; - - default: - ErrorLog("dsp_op7"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op8(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x8: - dsp_opc_nx(opc); - break; - - case 0x1: // CLR 0 - case 0x9: // CLR 1 - dsp_opc_clr(opc); - break; - - case 0x2: // CMP - dsp_opc_cmp(opc); - break; - - case 0x4: // CLRP - dsp_opc_clrp(opc); - break; - - case 0x6: - case 0x7: - dsp_opc_tstaxh(opc); - break; - - case 0xc: - case 0xb: - case 0xe: // SET40 - case 0xd: - case 0xa: - case 0xf: - dsp_opc_srbith(opc); - break; - - default: - ErrorLog("dsp_op8"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_op9(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x02: - case 0x03: - case 0x0a: - case 0x0b: - dsp_opc_mulmvz(opc); - break; - - case 0x04: - case 0x05: - case 0x0c: - case 0x0d: - dsp_opc_mulac(opc); - break; - - case 0x6: - case 0x7: - case 0xe: - case 0xf: - dsp_opc_mulmv(opc); - break; - - case 0x0: - case 0x8: - dsp_opc_mul(opc); - break; - - case 0x1: - case 0x9: - dsp_opc_asr16(opc); - break; - - default: - ErrorLog("dsp_op9"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_opab(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0x7) - { - case 0x0: - dsp_opc_mulx(opc); - break; - - case 0x1: - dsp_opc_tsta(opc); - break; - - case 0x2: - case 0x3: - dsp_opc_mulxmvz(opc); - break; - - case 0x4: - case 0x5: - dsp_opc_mulxac(opc); - break; - - case 0x6: - case 0x7: - dsp_opc_mulxmv(opc); - break; - - default: - ErrorLog("dsp_opab"); - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_opcd(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0x7) - { - case 0x0: // MULC - dsp_opc_mulc(opc); - break; - - case 0x1: // CMPAR - dsp_opc_cmpar(opc); - break; - - case 0x2: // MULCMVZ - case 0x3: - dsp_opc_mulcmvz(opc); - break; - - case 0x4: // MULCAC - case 0x5: - dsp_opc_mulcac(opc); - break; - - case 0x6: // MULCMV - case 0x7: - dsp_opc_mulcmv(opc); - break; - - default: - ErrorLog("dsp_opcd"); - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_ope(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 10) & 0x3) - { - case 0x00: // MADDX - dsp_opc_maddx(opc); - break; - - case 0x01: // MSUBX - dsp_opc_msubx(opc); - break; - - case 0x02: // MADDC - dsp_opc_maddc(opc); - break; - - case 0x03: // MSUBC - dsp_opc_msubc(opc); - break; - - default: - ErrorLog("dsp_ope"); - } - - dsp_op_ext_ops_epi(opc); -} - - -void dsp_opf(uint16 opc) -{ - dsp_op_ext_ops_pro(opc); - - switch ((opc >> 8) & 0xf) - { - case 0x0: - case 0x1: - dsp_opc_lsl16(opc); - break; - - case 0x02: - case 0x03: - dsp_opc_madd(opc); - break; - - case 0x4: - case 0x5: - dsp_opc_lsr16(opc); - break; - - case 0x8: - case 0x9: - case 0xa: - case 0xb: - dsp_opc_addpaxz(opc); - break; - - case 0xe: - case 0xf: - dsp_opc_movpz(opc); - break; - - default: - ErrorLog("dsp_opf"); - break; - } - - dsp_op_ext_ops_epi(opc); -} - - +#include + +#include "DSPOpcodes.h" +#include "DSPExt.h" + +#define SR_CMP_MASK 0x3f +#define DSP_REG_MASK 0x1f + +/* + +bool CheckCondition(uint8 _Condition) +{ + bool taken = false; + + switch (_Condition & 0xf) + { + case 0x0: + + if ((!(g_dsp.r[R_SR] & 0x02)) && (!(g_dsp.r[R_SR] & 0x08))) + { + taken = true; + } + + break; + + case 0x3: + + if ((g_dsp.r[R_SR] & 0x02) || (g_dsp.r[R_SR] & 0x04) || (g_dsp.r[R_SR] & 0x08)) + { + taken = true; + } + + break; + + // old from duddie + case 0x1: // seems okay + + if ((!(g_dsp.r[R_SR] & 0x02)) && (g_dsp.r[R_SR] & 0x08)) + { + taken = true; + } + + break; + + case 0x2: + + if (!(g_dsp.r[R_SR] & 0x08)) + { + taken = true; + } + + break; + + case 0x4: + + if (!(g_dsp.r[R_SR] & 0x04)) + { + taken = true; + } + + break; + + case 0x5: + + if (g_dsp.r[R_SR] & 0x04) + { + taken = true; + } + + break; + + case 0xc: + + if (!(g_dsp.r[R_SR] & 0x40)) + { + taken = true; + } + + break; + + case 0xd: + + if (g_dsp.r[R_SR] & 0x40) + { + taken = true; + } + + break; + + case 0xf: + taken = true; + break; + + default: + // DebugLog("Unknown condition check: 0x%04x\n", _Condition & 0xf); + break; + } + + return(taken); +} +*/ + +// ======================================================================= + +//------------------------------------------------------------------------------- +void (*dsp_op[])(uint16 opc) = +{ + dsp_op0, dsp_op1, dsp_op2, dsp_op3, + dsp_op4, dsp_op5, dsp_op6, dsp_op7, + dsp_op8, dsp_op9, dsp_opab, dsp_opab, + dsp_opcd, dsp_opcd, dsp_ope, dsp_opf, +}; + +void DecodeOpcode(uint16 op) +{ + dsp_op[op >> 12](op); + +} +void dsp_op_unknown(uint16 opc) +{ + ErrorLog("dsp_op_unknown somewhere"); + OutBuffer::AddCode("unknown somewhere"); +} + + +void dsp_opc_call(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_call"); + +/* uint16 dest = FetchOpcode(); + if (CheckCondition(opc & 0xf)) + { + dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc); + g_dsp.pc = dest; + } */ +} + + +void dsp_opc_ifcc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_call"); + +/* if (!CheckCondition(opc & 0xf)) + { + FetchOpcode(); // skip the next opcode + }*/ +} + + +void dsp_opc_jcc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_call"); + +/* uint16 dest = FetchOpcode(); + + if (CheckCondition(opc & 0xf)) + { + g_dsp.pc = dest; + }*/ +} + + +void dsp_opc_jmpa(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_call"); + +/* uint8 reg; + uint16 addr; + + if ((opc & 0xf) != 0xf) + { + ErrorLog("dsp_opc_jmpa"); + } + + reg = (opc >> 5) & 0x7; + addr = dsp_op_read_reg(reg); + + if (opc & 0x0010) + { + // CALLA + dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc); + } + + g_dsp.pc = addr;*/ +} + + +// NEW (added condition check) +void dsp_opc_ret(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_ret"); + +/* if (CheckCondition(opc & 0xf)) + { + g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C); + }*/ +} + + +void dsp_opc_rti(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_rti"); + +/* if ((opc & 0xf) != 0xf) + { + ErrorLog("dsp_opc_rti"); + } + + g_dsp.r[R_SR] = dsp_reg_load_stack(DSP_STACK_D); + g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C); + + g_dsp.exception_in_progress_hack = false;*/ +} + + +void dsp_opc_halt(uint16 opc) +{ + OutBuffer::AddCode("HALT"); + +/* g_dsp.cr |= 0x4; + g_dsp.pc = g_dsp.err_pc;*/ +} + + +void dsp_opc_loop(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_loop"); + +/* uint16 reg = opc & 0x1f; + uint16 cnt = g_dsp.r[reg]; + uint16 loop_pc = g_dsp.pc; + + while (cnt--) + { + gdsp_loop_step(); + g_dsp.pc = loop_pc; + } + + g_dsp.pc = loop_pc + 1; */ +} + + +void dsp_opc_loopi(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_loopi"); + +/* uint16 cnt = opc & 0xff; + uint16 loop_pc = g_dsp.pc; + + while (cnt--) + { + gdsp_loop_step(); + g_dsp.pc = loop_pc; + } + + g_dsp.pc = loop_pc + 1;*/ +} + + +void dsp_opc_bloop(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_bloop"); + +/* uint16 reg = opc & 0x1f; + uint16 cnt = g_dsp.r[reg]; + uint16 loop_pc = FetchOpcode(); + + if (cnt) + { + dsp_reg_store_stack(0, g_dsp.pc); + dsp_reg_store_stack(2, loop_pc); + dsp_reg_store_stack(3, cnt); + } + else + { + g_dsp.pc = loop_pc + 1; + }*/ +} + + +void dsp_opc_bloopi(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_bloopi"); + +/* uint16 cnt = opc & 0xff; + uint16 loop_pc = FetchOpcode(); + + if (cnt) + { + dsp_reg_store_stack(0, g_dsp.pc); + dsp_reg_store_stack(2, loop_pc); + dsp_reg_store_stack(3, cnt); + } + else + { + g_dsp.pc = loop_pc + 1; + }*/ +} + + +//------------------------------------------------------------- + + +void dsp_opc_mrr(uint16 opc) +{ + uint8 sreg = opc & 0x1f; + uint8 dreg = (opc >> 5) & 0x1f; + + OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); + +// uint16 val = dsp_op_read_reg(sreg); +// dsp_op_write_reg(dreg, val); +} + + +void dsp_opc_lrr(uint16 opc) +{ + uint8 sreg = (opc >> 5) & 0x3; + uint8 dreg = opc & 0x1f; + + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); + +// uint16 val = dsp_dmem_read(g_dsp.r[sreg]); +// dsp_op_write_reg(dreg, val); + + // post processing of source reg + switch ((opc >> 7) & 0x3) + { + case 0x0: // LRR + break; + + case 0x1: // LRRD + OutBuffer::AddCode("%s--", OutBuffer::GetRegName(sreg)); + // g_dsp.r[sreg]--; + break; + + case 0x2: // LRRI + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(sreg)); + //g_dsp.r[sreg]++; + break; + + case 0x3: + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(sreg), OutBuffer::GetRegName(sreg+4)); + // g_dsp.r[sreg] += g_dsp.r[sreg + 4]; + break; + } +} + + +void dsp_opc_srr(uint16 opc) +{ + uint8 dreg = (opc >> 5) & 0x3; + uint8 sreg = opc & 0x1f; + + OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(sreg)); + + //uint16 val = dsp_op_read_reg(sreg); + // dsp_dmem_write(g_dsp.r[dreg], val); + + // post processing of source reg + switch ((opc >> 7) & 0x3) + { + case 0x0: // SRR + break; + + case 0x1: // SRRD + OutBuffer::AddCode("%s--", OutBuffer::GetRegName(dreg)); + // g_dsp.r[dreg]--; + break; + + case 0x2: // SRRI + OutBuffer::AddCode("%s++", OutBuffer::GetRegName(dreg)); + // g_dsp.r[dreg]++; + break; + + case 0x3: // SRRX + OutBuffer::AddCode("%s += %s", OutBuffer::GetRegName(dreg), OutBuffer::GetRegName(dreg+4)); + //g_dsp.r[dreg] += g_dsp.r[dreg + 4]; + break; + } +} + + +void dsp_opc_ilrr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_ilrr"); + +/* uint16 reg = opc & 0x3; + uint16 dreg = 0x1e + ((opc >> 8) & 1); + + // always to acc0 ? + g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]); + + switch ((opc >> 2) & 0x3) + { + case 0x0: // no change + break; + + case 0x1: // post decrement + g_dsp.r[reg]--; + break; + + case 0x2: // post increment + g_dsp.r[reg]++; + break; + + default: + ErrorLog("dsp_opc_ilrr"); + }*/ +} + + +void dsp_opc_lri(uint16 opc) +{ + uint8 reg = opc & DSP_REG_MASK; + uint16 imm = FetchOpcode(); + + OutBuffer::AddCode("%s = 0x%02x", OutBuffer::GetRegName(reg), imm); + // dsp_op_write_reg(reg, imm); +} + + +void dsp_opc_lris(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_lris"); + +/* uint8 reg = ((opc >> 8) & 0x7) + 0x18; + uint16 imm = (sint8)opc; + dsp_op_write_reg(reg, imm);*/ +} + + +void dsp_opc_lr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_lr"); + +/* uint8 reg = opc & DSP_REG_MASK; + uint16 addr = FetchOpcode(); + uint16 val = dsp_dmem_read(addr); + dsp_op_write_reg(reg, val);*/ +} + + +void dsp_opc_sr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_sr"); + + /*uint8 reg = opc & DSP_REG_MASK; + uint16 addr = FetchOpcode(); + uint16 val = dsp_op_read_reg(reg); + dsp_dmem_write(addr, val);*/ +} + + +void dsp_opc_si(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_si"); + + //uint16 addr = (sint8)opc; + //uint16 imm = readimemory(); + //dsp_dmem_write(addr, imm); +} + + +void dsp_opc_tstaxh(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_tstaxh"); + + //uint8 reg = (opc >> 8) & 0x1; + //sint16 val = dsp_get_ax_h(reg); + + //Update_SR_Register(val); +} + + +void dsp_opc_clr(uint16 opc) +{ + uint8 reg = (opc >> 11) & 0x1; + + OutBuffer::AddCode("ACC%i = 0", reg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", reg); + + //dsp_set_long_acc(reg, 0); + + //Update_SR_Register((sint64)0); +} + + +void dsp_opc_clrp(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_clrp"); + + //g_dsp.r[0x14] = 0x0000; + //g_dsp.r[0x15] = 0xfff0; + //g_dsp.r[0x16] = 0x00ff; + //g_dsp.r[0x17] = 0x0010; +} + + +// NEW +void dsp_opc_mulc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulc"); + + // math new prod + //uint8 sreg = (opc >> 11) & 0x1; + //uint8 treg = (opc >> 12) & 0x1; + + //sint64 prod = dsp_get_acc_m(sreg) * dsp_get_ax_h(treg) * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulcmvz(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulcmvz"); + + ErrorLog("dsp_opc_mulcmvz ni"); +} + + +// NEW +void dsp_opc_mulcmv(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulcmv"); + + ErrorLog("dsp_opc_mulcmv ni"); +} + + +void dsp_opc_cmpar(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_cmpar"); + + //uint8 rreg = ((opc >> 12) & 0x1) + 0x1a; + //uint8 areg = (opc >> 11) & 0x1; + + //// we compare + //sint64 rr = (sint16)g_dsp.r[rreg]; + //rr <<= 16; + + //sint64 ar = dsp_get_long_acc(areg); + + //Update_SR_Register(ar - rr); +} + + +void dsp_opc_cmp(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_cmp"); + + //sint64 acc0 = dsp_get_long_acc(0); + //sint64 acc1 = dsp_get_long_acc(1); + + //Update_SR_Register(acc0 - acc1); +} + + +void dsp_opc_tsta(uint16 opc) +{ + uint8 reg = (opc >> 11) & 0x1; + OutBuffer::AddCode("Update_SR_Register(ACC%i)", reg); + + //uint8 reg = (opc >> 11) & 0x1; + //sint64 acc = dsp_get_long_acc(reg); + + //Update_SR_Register(acc); +} + + +// NEW +void dsp_opc_addaxl(uint16 opc) +{ + uint8 sreg = (opc >> 9) & 0x1; + uint8 dreg = (opc >> 8) & 0x1; + + OutBuffer::AddCode("ACC%i += AX%i_l", dreg, sreg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); + + //sint64 acc = dsp_get_long_acc(dreg); + //sint64 acx = dsp_get_ax_l(sreg); + + //acc += acx; + + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +// NEW +void dsp_opc_addarn(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addarn"); + + //uint8 dreg = opc & 0x3; + //uint8 sreg = (opc >> 2) & 0x3; + + //g_dsp.r[dreg] += (sint16)g_dsp.r[0x04 + sreg]; +} + + +// NEW +void dsp_opc_mulcac(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulcac"); + + //sint64 TempProd = dsp_get_long_prod(); + + //// update prod + //uint8 sreg = (opc >> 12) & 0x1; + //sint64 Prod = (sint64)dsp_get_acc_m(sreg) * (sint64)dsp_get_acc_h(sreg) * GetMultiplyModifier(); + //dsp_set_long_prod(Prod); + + //// update acc + //uint8 rreg = (opc >> 8) & 0x1; + //dsp_set_long_acc(rreg, TempProd); +} + + +// NEW +void dsp_opc_movr(uint16 opc) +{ + uint8 areg = (opc >> 8) & 0x1; + uint8 sreg = ((opc >> 9) & 0x3) + 0x18; + + OutBuffer::AddCode("ACC%i = (%s << 16) & ~0xFFFF", areg, OutBuffer::GetRegName(sreg)); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); + + //sint64 acc = (sint16)g_dsp.r[sreg]; + //acc <<= 16; + //acc &= ~0xffff; + + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_movax(uint16 opc) +{ + uint8 sreg = (opc >> 9) & 0x1; + uint8 dreg = (opc >> 8) & 0x1; + + OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(0x1c + dreg), OutBuffer::GetRegName(0x18 + sreg)); + OutBuffer::AddCode("%s = %s", OutBuffer::GetRegName(0x1e + dreg), OutBuffer::GetRegName(0x1a + sreg)); + + //g_dsp.r[0x1c + dreg] = g_dsp.r[0x18 + sreg]; + //g_dsp.r[0x1e + dreg] = g_dsp.r[0x1a + sreg]; + + OutBuffer::AddCode("%s = (%s < 0) ? 0xFFFF : 0x0000", OutBuffer::GetRegName(0x10 + dreg), + OutBuffer::GetRegName(0x1a + sreg)); + + //if ((sint16)g_dsp.r[0x1a + sreg] < 0) + //{ + // g_dsp.r[0x10 + dreg] = 0xffff; + //} + //else + //{ + // g_dsp.r[0x10 + dreg] = 0; + //} + + dsp_opc_tsta(dreg << 11); +} + + +// NEW +void dsp_opc_xorr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_xorr"); + + //uint8 sreg = (opc >> 9) & 0x1; + //uint8 dreg = (opc >> 8) & 0x1; + + //g_dsp.r[0x1e + dreg] ^= g_dsp.r[0x1a + sreg]; + + //dsp_opc_tsta(dreg << 11); +} + + +void dsp_opc_andr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_andr"); + + //uint8 sreg = (opc >> 9) & 0x1; + //uint8 dreg = (opc >> 8) & 0x1; + + //g_dsp.r[0x1e + dreg] &= g_dsp.r[0x1a + sreg]; + + //dsp_opc_tsta(dreg << 11); +} + + +// NEW +void dsp_opc_orr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_orr"); + + //uint8 sreg = (opc >> 9) & 0x1; + //uint8 dreg = (opc >> 8) & 0x1; + + //g_dsp.r[0x1e + dreg] |= g_dsp.r[0x1a + sreg]; + + //dsp_opc_tsta(dreg << 11); +} + + +// NEW +void dsp_opc_andc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_andc"); + + //uint8 D = (opc >> 8) & 0x1; + + //uint16 ac1 = dsp_get_acc_m(D); + //uint16 ac2 = dsp_get_acc_m(1 - D); + + //dsp_set_long_acc(D, ac1 & ac2); + + //if ((ac1 & ac2) == 0) + //{ + // g_dsp.r[R_SR] |= 0x20; + //} + //else + //{ + // g_dsp.r[R_SR] &= ~0x20; + //} +} + + +//------------------------------------------------------------- + +void dsp_opc_nx(uint16 opc) +{} + + +// NEW +void dsp_opc_andfc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_andfc"); + + //if (opc & 0xf) + //{ + // ErrorLog("dsp_opc_andfc"); + //} + + //uint8 reg = (opc >> 8) & 0x1; + //uint16 imm = FetchOpcode(); + //uint16 val = dsp_get_acc_m(reg); + + //if ((val & imm) == imm) + //{ + // g_dsp.r[R_SR] |= 0x40; + //} + //else + //{ + // g_dsp.r[R_SR] &= ~0x40; + //} +} + + +void dsp_opc_andf(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_andf"); + + //uint8 reg; + //uint16 imm; + //uint16 val; + + //if (opc & 0xf) + //{ + // ErrorLog("dsp_opc_andf"); + //} + + //reg = 0x1e + ((opc >> 8) & 0x1); + //imm = FetchOpcode(); + //val = g_dsp.r[reg]; + + //if ((val & imm) == 0) + //{ + // g_dsp.r[R_SR] |= 0x40; + //} + //else + //{ + // g_dsp.r[R_SR] &= ~0x40; + //} +} + + +void dsp_opc_subf(uint16 opc) +{ + if (opc & 0xf) + { + ErrorLog("dsp_opc_subf"); + } + + uint8 reg = 0x1e + ((opc >> 8) & 0x1); + sint64 imm = (sint16)FetchOpcode(); + + OutBuffer::AddCode("missing: dsp_opc_subf"); + + //sint64 val = (sint16)g_dsp.r[reg]; + //sint64 res = val - imm; + + //Update_SR_Register(res); +} + + +void dsp_opc_xori(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_xori"); + + //if (opc & 0xf) + //{ + // ErrorLog("dsp_opc_xori"); + //} + + //uint8 reg = 0x1e + ((opc >> 8) & 0x1); + //uint16 imm = FetchOpcode(); + //g_dsp.r[reg] ^= imm; + + //Update_SR_Register((sint16)g_dsp.r[reg]); +} + + +void dsp_opc_andi(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_andi"); + + //if (opc & 0xf) + //{ + // ErrorLog("dsp_opc_andi"); + //} + + //uint8 reg = 0x1e + ((opc >> 8) & 0x1); + //uint16 imm = FetchOpcode(); + //g_dsp.r[reg] &= imm; + + //Update_SR_Register((sint16)g_dsp.r[reg]); +} + + +// F|RES: i am not sure if this shouldnt be the whole ACC +// +void dsp_opc_ori(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_ori"); + + //if (opc & 0xf) + //{ + // return(ErrorLog("dsp_opc_ori")); + //} + + //uint8 reg = 0x1e + ((opc >> 8) & 0x1); + //uint16 imm = FetchOpcode(); + //g_dsp.r[reg] |= imm; + + //Update_SR_Register((sint16)g_dsp.r[reg]); +} + + +//------------------------------------------------------------- + +void dsp_opc_add(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_add"); + + //uint8 areg = (opc >> 8) & 0x1; + //sint64 acc0 = dsp_get_long_acc(0); + //sint64 acc1 = dsp_get_long_acc(1); + + //sint64 res = acc0 + acc1; + + //dsp_set_long_acc(areg, res); + + //Update_SR_Register(res); +} + + +//------------------------------------------------------------- + +void dsp_opc_addp(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addp"); + + //uint8 dreg = (opc >> 8) & 0x1; + //sint64 acc = dsp_get_long_acc(dreg); + //acc = acc + dsp_get_long_prod(); + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_cmpis(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_cmpis"); + + //uint8 areg = (opc >> 8) & 0x1; + + //sint64 acc = dsp_get_long_acc(areg); + //sint64 val = (sint8)opc; + //val <<= 16; + + //sint64 res = acc - val; + + //Update_SR_Register(res); +} + + +// NEW +// verified at the console +void dsp_opc_addpaxz(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addpaxz"); + + //uint8 dreg = (opc >> 8) & 0x1; + //uint8 sreg = (opc >> 9) & 0x1; + + //sint64 prod = dsp_get_long_prod() & ~0x0ffff; + //sint64 ax_h = dsp_get_long_acx(sreg); + //sint64 acc = (prod + ax_h) & ~0x0ffff; + + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +// NEW +void dsp_opc_movpz(uint16 opc) +{ + uint8 dreg = (opc >> 8) & 0x01; + + OutBuffer::AddCode("ACC%i = PROD & ~0xffff", dreg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); + + //// overwrite acc and clear low part + //sint64 prod = dsp_get_long_prod(); + //sint64 acc = prod & ~0xffff; + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_decm(uint16 opc) +{ + uint8 dreg = (opc >> 8) & 0x01; + + OutBuffer::AddCode("ACC%i -= 0x10000", dreg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); + + //sint64 sub = 0x10000; + //sint64 acc = dsp_get_long_acc(dreg); + //acc -= sub; + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_dec(uint16 opc) +{ + uint8 dreg = (opc >> 8) & 0x01; + + OutBuffer::AddCode("ACC%i -= 1", dreg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", dreg); + + //sint64 acc = dsp_get_long_acc(dreg) - 1; + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_incm(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_incm"); + + //uint8 dreg = (opc >> 8) & 0x1; + + //sint64 sub = 0x10000; + //sint64 acc = dsp_get_long_acc(dreg); + //acc += sub; + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_inc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_inc"); + + //uint8 dreg = (opc >> 8) & 0x1; + + //sint64 acc = dsp_get_long_acc(dreg); + //acc++; + //dsp_set_long_acc(dreg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_neg(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_neg"); + + //uint8 areg = (opc >> 8) & 0x1; + + //sint64 acc = dsp_get_long_acc(areg); + //acc = 0 - acc; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_movnp(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_movnp"); + + ErrorLog("dsp_opc_movnp\n"); +} + + +// NEW +void dsp_opc_addax(uint16 opc) +{ + // OutBuffer::AddCode("missing: dsp_opc_addax"); + + uint8 areg = (opc >> 8) & 0x1; + uint8 sreg = (opc >> 9) & 0x1; + + OutBuffer::AddCode("ACC%i += AX%i", areg, sreg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); + + //sint64 ax = dsp_get_long_acx(sreg); + //sint64 acc = dsp_get_long_acc(areg); + //acc += ax; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_addr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addr"); + + //uint8 areg = (opc >> 8) & 0x1; + //uint8 sreg = ((opc >> 9) & 0x3) + 0x18; + + //sint64 ax = (sint16)g_dsp.r[sreg]; + //ax <<= 16; + + //sint64 acc = dsp_get_long_acc(areg); + //acc += ax; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_subr(uint16 opc) +{ + uint8 areg = (opc >> 8) & 0x1; + uint8 sreg = ((opc >> 9) & 0x3) + 0x18; + + OutBuffer::AddCode("ACC%i -= (sint64)((sint16)%s << 16)", areg, OutBuffer::GetRegName(sreg)); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); + + //sint64 ax = (sint16)g_dsp.r[sreg]; + //ax <<= 16; + + //sint64 acc = dsp_get_long_acc(areg); + //acc -= ax; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + +// NEW +void dsp_opc_subax(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_subax"); + + //int regD = (opc >> 8) & 0x1; + //int regT = (opc >> 9) & 0x1; + + //sint64 Acc = dsp_get_long_acc(regD) - dsp_get_long_acx(regT); + + //dsp_set_long_acc(regD, Acc); + //Update_SR_Register(Acc); +} + +void dsp_opc_addis(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addis"); + + //uint8 areg = (opc >> 8) & 0x1; + + //sint64 Imm = (sint8)opc; + //Imm <<= 16; + //sint64 acc = dsp_get_long_acc(areg); + //acc += Imm; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_addi(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_addi"); + + //uint8 areg = (opc >> 8) & 0x1; + + //sint64 sub = (sint16)FetchOpcode(); + //sub <<= 16; + //sint64 acc = dsp_get_long_acc(areg); + //acc += sub; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_lsl16(uint16 opc) +{ + uint8 areg = (opc >> 8) & 0x1; + + OutBuffer::AddCode("ACC%i <<= 16", areg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); + + //sint64 acc = dsp_get_long_acc(areg); + //acc <<= 16; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +// NEW +void dsp_opc_madd(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_madd"); + + //uint8 sreg = (opc >> 8) & 0x1; + + //sint64 prod = dsp_get_long_prod(); + //prod += (sint64)dsp_get_ax_l(sreg) * (sint64)dsp_get_ax_h(sreg) * GetMultiplyModifier(); + //dsp_set_long_prod(prod); +} + + +void dsp_opc_lsr16(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_lsr16"); + + //uint8 areg = (opc >> 8) & 0x1; + + //sint64 acc = dsp_get_long_acc(areg); + //acc >>= 16; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +void dsp_opc_asr16(uint16 opc) +{ + uint8 areg = (opc >> 11) & 0x1; + + OutBuffer::AddCode("ACC%i >>= 16", areg); + OutBuffer::AddCode("Update_SR_Register(ACC%i)", areg); + + //sint64 acc = dsp_get_long_acc(areg); + //acc >>= 16; + //dsp_set_long_acc(areg, acc); + + //Update_SR_Register(acc); +} + + +union UOpcodeShifti +{ + uint16 Hex; + struct + { + signed shift : 6; + unsigned negating : 1; + unsigned arithmetic : 1; + unsigned areg : 1; + unsigned op : 7; + }; + struct + { + unsigned ushift : 6; + }; + UOpcodeShifti(uint16 _Hex) + : Hex(_Hex) {} +}; + +void dsp_opc_shifti(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_shifti"); + + //UOpcodeShifti Opcode(opc); + + //// direction: left + //bool ShiftLeft = true; + //uint16 shift = Opcode.ushift; + + //if ((Opcode.negating) && (Opcode.shift < 0)) + //{ + // ShiftLeft = false; + // shift = -Opcode.shift; + //} + + //sint64 acc; + //uint64 uacc; + + //if (Opcode.arithmetic) + //{ + // // arithmetic shift + // uacc = dsp_get_long_acc(Opcode.areg); + + // if (!ShiftLeft) + // { + // uacc >>= shift; + // } + // else + // { + // uacc <<= shift; + // } + + // acc = uacc; + //} + //else + //{ + // acc = dsp_get_long_acc(Opcode.areg); + + // if (!ShiftLeft) + // { + // acc >>= shift; + // } + // else + // { + // acc <<= shift; + // } + //} + + //dsp_set_long_acc(Opcode.areg, acc); + + //Update_SR_Register(acc); +} + + +//------------------------------------------------------------- +// hcs give me this code!! +void dsp_opc_dar(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_dar"); + + //uint8 reg = opc & 0x3; + + //int temp = g_dsp.r[reg] + g_dsp.r[8]; + + //if (temp <= 0x7ff){g_dsp.r[reg] = temp;} + //else {g_dsp.r[reg]--;} +} + + +// hcs give me this code!! +void dsp_opc_iar(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_iar"); + + //uint8 reg = opc & 0x3; + + //int temp = g_dsp.r[reg] + g_dsp.r[8]; + + //if (temp <= 0x7ff){g_dsp.r[reg] = temp;} + //else {g_dsp.r[reg]++;} +} + + +//------------------------------------------------------------- + +void dsp_opc_sbclr(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_sbclr"); + + //uint8 bit = (opc & 0xff) + 6; + //g_dsp.r[R_SR] &= ~(1 << bit); +} + + +void dsp_opc_sbset(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_sbset"); + + //uint8 bit = (opc & 0xff) + 6; + //g_dsp.r[R_SR] |= (1 << bit); +} + + +void dsp_opc_srbith(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_srbith"); + +// switch ((opc >> 8) & 0xf) +// { +// case 0xe: // SET40 +// g_dsp.r[R_SR] &= ~(1 << 14); +// break; +// +///* case 0xf: // SET16 // that doesnt happen on a real console +// g_dsp.r[R_SR] |= (1 << 14); +// break;*/ +// +// default: +// break; +// } +} + + +//------------------------------------------------------------- + +void dsp_opc_movp(uint16 opc) +{ + uint8 dreg = (opc >> 8) & 0x1; + + OutBuffer::AddCode("ACC%i = PROD", dreg); + + //sint64 prod = dsp_get_long_prod(); + //sint64 acc = prod; + //dsp_set_long_acc(dreg, acc); +} + + +void dsp_opc_mul(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mul"); + + //uint8 sreg = (opc >> 11) & 0x1; + //sint64 prod = (sint64)dsp_get_ax_h(sreg) * (sint64)dsp_get_ax_l(sreg) * GetMultiplyModifier(); + + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + +// NEW +void dsp_opc_mulac(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulac"); + + //// add old prod to acc + //uint8 rreg = (opc >> 8) & 0x1; + //sint64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod(); + //dsp_set_long_acc(rreg, acR); + + //// math new prod + //uint8 sreg = (opc >> 11) & 0x1; + //sint64 prod = dsp_get_ax_l(sreg) * dsp_get_ax_h(sreg) * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +void dsp_opc_mulmv(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulmv"); + + //uint8 rreg = (opc >> 8) & 0x1; + //sint64 prod = dsp_get_long_prod(); + //sint64 acc = prod; + //dsp_set_long_acc(rreg, acc); + + //uint8 areg = ((opc >> 11) & 0x1) + 0x18; + //uint8 breg = ((opc >> 11) & 0x1) + 0x1a; + //sint64 val1 = (sint16)g_dsp.r[areg]; + //sint64 val2 = (sint16)g_dsp.r[breg]; + + //prod = val1 * val2 * GetMultiplyModifier(); + + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulmvz(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulmvz"); + + //uint8 sreg = (opc >> 11) & 0x1; + //uint8 rreg = (opc >> 8) & 0x1; + + //// overwrite acc and clear low part + //sint64 prod = dsp_get_long_prod(); + //sint64 acc = prod & ~0xffff; + //dsp_set_long_acc(rreg, acc); + + //// math prod + //prod = (sint64)g_dsp.r[0x18 + sreg] * (sint64)g_dsp.r[0x1a + sreg] * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulx(uint16 opc) +{ + // OutBuffer::AddCode("missing: dsp_opc_mulx"); + + uint8 sreg = ((opc >> 12) & 0x1); + uint8 treg = ((opc >> 11) & 0x1); + + OutBuffer::AddCode("PROD = %s * %s * MultiplyModifier", (sreg == 0) ? "AX0_l" : "AX0_h", + (treg == 0) ? "AX1_l" : "AX1_h"); + OutBuffer::AddCode("Update_SR_Register(PROD)"); + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //sint64 prod = val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulxac(uint16 opc) +{ + //// add old prod to acc + uint8 rreg = (opc >> 8) & 0x1; + //sint64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod(); + //dsp_set_long_acc(rreg, acR); + + OutBuffer::AddCode("ACC%i += PROD", rreg); + + //// math new prod + uint8 sreg = (opc >> 12) & 0x1; + uint8 treg = (opc >> 11) & 0x1; + + OutBuffer::AddCode("PROD = %s * %s * MultiplyModifier", (sreg == 0) ? "AX0_l" : "AX0_h", + (treg == 0) ? "AX1_l" : "AX1_h"); + OutBuffer::AddCode("Update_SR_Register(PROD)"); + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //sint64 prod = val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulxmv(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulxmv"); + + //// add old prod to acc + //uint8 rreg = ((opc >> 8) & 0x1); + //sint64 acR = dsp_get_long_prod(); + //dsp_set_long_acc(rreg, acR); + + //// math new prod + //uint8 sreg = (opc >> 12) & 0x1; + //uint8 treg = (opc >> 11) & 0x1; + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //sint64 prod = val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_mulxmvz(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_mulxmvz"); + + //// overwrite acc and clear low part + //uint8 rreg = (opc >> 8) & 0x1; + //sint64 prod = dsp_get_long_prod(); + //sint64 acc = prod & ~0xffff; + //dsp_set_long_acc(rreg, acc); + + //// math prod + //uint8 sreg = (opc >> 12) & 0x1; + //uint8 treg = (opc >> 11) & 0x1; + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //prod = val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); + + //Update_SR_Register(prod); +} + + +// NEW +void dsp_opc_sub(uint16 opc) +{ + uint8 D = (opc >> 8) & 0x1; + + OutBuffer::AddCode("ACC%i -= ACC%i", D, 1-D); + + //sint64 Acc1 = dsp_get_long_acc(D); + //sint64 Acc2 = dsp_get_long_acc(1 - D); + + //Acc1 -= Acc2; + + //dsp_set_long_acc(D, Acc1); +} + + +//------------------------------------------------------------- +// +// --- Table E +// +//------------------------------------------------------------- + +// NEW +void dsp_opc_maddx(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_maddx"); + + //uint8 sreg = (opc >> 9) & 0x1; + //uint8 treg = (opc >> 8) & 0x1; + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //sint64 prod = dsp_get_long_prod(); + //prod += val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); +} + + +// NEW +void dsp_opc_msubx(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_msubx"); + + //uint8 sreg = (opc >> 9) & 0x1; + //uint8 treg = (opc >> 8) & 0x1; + + //sint64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); + //sint64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); + + //sint64 prod = dsp_get_long_prod(); + //prod -= val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); +} + + +// NEW +void dsp_opc_maddc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_maddc"); + + //uint sreg = (opc >> 9) & 0x1; + //uint treg = (opc >> 8) & 0x1; + + //sint64 val1 = dsp_get_acc_m(sreg); + //sint64 val2 = dsp_get_ax_h(treg); + + //sint64 prod = dsp_get_long_prod(); + //prod += val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); +} + + +// NEW +void dsp_opc_msubc(uint16 opc) +{ + OutBuffer::AddCode("missing: dsp_opc_msubc"); + + //uint sreg = (opc >> 9) & 0x1; + //uint treg = (opc >> 8) & 0x1; + + //sint64 val1 = dsp_get_acc_m(sreg); + //sint64 val2 = dsp_get_ax_h(treg); + + //sint64 prod = dsp_get_long_prod(); + //prod -= val1 * val2 * GetMultiplyModifier(); + //dsp_set_long_prod(prod); +} + + +//------------------------------------------------------------- +void dsp_op0(uint16 opc) +{ + if (opc == 0) + { + return; + } + + switch ((opc >> 8) & 0xf) + { + case 0x0: + + switch ((opc >> 4) & 0xf) + { + case 0x0: + + switch (opc & 0xf) + { + case 0x4: + case 0x5: + case 0x6: + case 0x7: + dsp_opc_dar(opc); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + dsp_opc_iar(opc); + break; + + default: + ErrorLog("dsp_op0"); + break; + } + + break; + + case 0x1: + dsp_opc_addarn(opc); + break; + + case 0x2: // HALT + dsp_opc_halt(opc); + break; + + case 0x4: // LOOP + case 0x5: // LOOP + dsp_opc_loop(opc); + break; + + case 0x6: // BLOOP + case 0x7: // BLOOP + dsp_opc_bloop(opc); + break; + + case 0x8: // LRI + case 0x9: // LRI + dsp_opc_lri(opc); + break; + + case 0xC: // LR + case 0xD: // LR + dsp_opc_lr(opc); + break; + + case 0xE: // SR + case 0xF: // SR + dsp_opc_sr(opc); + break; + + default: + ErrorLog("dsp_op0"); + break; + } + + break; + + case 0x2: + + switch ((opc >> 4) & 0xf) + { + case 0x0: // ADDI + dsp_opc_addi(opc); + break; + + case 0x1: // IL + dsp_opc_ilrr(opc); + break; + + case 0x2: // XORI + dsp_opc_xori(opc); + break; + + case 0x4: // ANDI + dsp_opc_andi(opc); + break; + + case 0x6: // ORI + dsp_opc_ori(opc); + break; + + case 0x7: // + dsp_opc_ifcc(opc); + break; + + case 0x8: // SUBF + dsp_opc_subf(opc); + break; + + case 0x9: // Jxx + dsp_opc_jcc(opc); + break; + + case 0xa: // ANDF + dsp_opc_andf(opc); + break; + + case 0xb: // CALL + dsp_opc_call(opc); + break; + + case 0xc: + dsp_opc_andfc(opc); + break; + + case 0xd: // RET + dsp_opc_ret(opc); + break; + + case 0xf: // RTI + dsp_opc_rti(opc); + break; + + default: + ErrorLog("dsp_op0"); + break; + } + + break; + + case 0x3: + + switch ((opc >> 4) & 0xf) + { + case 0x0: // ADDAI + dsp_opc_addi(opc); + break; + + case 0x1: // ILR + dsp_opc_ilrr(opc); + break; + + case 0x2: // XORI + dsp_opc_xori(opc); + break; + + case 0x4: // ANDI + dsp_opc_andi(opc); + break; + + case 0x6: // ORI + dsp_opc_ori(opc); + break; + + case 0x8: // SUBF + dsp_opc_subf(opc); + break; + + case 0xa: // ANDF + dsp_opc_andf(opc); + break; + + case 0xc: // ANDFC + dsp_opc_andfc(opc); + break; + + default: + ErrorLog("dsp_op0"); + break; + } + + break; + + case 0x4: + case 0x5: + dsp_opc_addis(opc); + break; + + case 0x6: // SUBISF + case 0x7: + dsp_opc_cmpis(opc); + break; + + case 0x8: // LRIS + case 0x9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + dsp_opc_lris(opc); + break; + + default: + ErrorLog("dsp_op0"); + break; + } +} + + +void dsp_op1(uint16 opc) +{ + switch ((opc >> 8) & 0xf) + { + case 0x0: + dsp_opc_loopi(opc); + break; + + case 0x1: // BLOOPI + dsp_opc_bloopi(opc); + break; + + case 0x2: // SBCLR + dsp_opc_sbclr(opc); + break; + + case 0x3: // SBSET + dsp_opc_sbset(opc); + break; + + case 0x4: // shifti + case 0x5: + dsp_opc_shifti(opc); + break; + + case 0x6: // SI + dsp_opc_si(opc); + break; + + case 0x7: // JMPA/CALLA + dsp_opc_jmpa(opc); + break; + + case 0x8: // LRRx + case 0x9: // LRRx + dsp_opc_lrr(opc); + break; + + case 0xa: // SRRx + case 0xb: // SRRx + dsp_opc_srr(opc); + break; + + case 0xc: // MRR + case 0xd: // MRR + case 0xe: // MRR + case 0xf: // MRR + dsp_opc_mrr(opc); + break; + + default: + ErrorLog("dsp_op1"); + break; + } +} + + +void dsp_op2(uint16 opc) +{ + // lrs, srs + uint8 reg = ((opc >> 8) & 0x7) + 0x18; + uint16 addr = (sint8) opc; + + if (opc & 0x0800) + { + OutBuffer::AddCode("WriteDMEM(%s, %s)", OutBuffer::GetMemName(addr), OutBuffer::GetRegName(reg)); + + // srs + // dsp_dmem_write(addr, g_dsp.r[reg]); + } + else + { + OutBuffer::AddCode("%s = ReadDMEM(%s)", OutBuffer::GetRegName(reg), OutBuffer::GetMemName(addr)); + + // lrs + // g_dsp.r[reg] = dsp_dmem_read(addr); + } +} + + +void dsp_op3(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + dsp_opc_xorr(opc); + break; + + case 0x4: + case 0x5: + case 0x6: + case 0x7: + dsp_opc_andr(opc); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + dsp_opc_orr(opc); + break; + + case 0xc: + case 0xd: + dsp_opc_andc(opc); + break; + + default: + ErrorLog("dsp_op3"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op4(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: + dsp_opc_addr(opc); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + dsp_opc_addax(opc); + break; + + case 0xc: + case 0xd: + dsp_opc_add(opc); + break; + + case 0xe: + case 0xf: + dsp_opc_addp(opc); + break; + + default: + ErrorLog("dsp_op4"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op5(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: + dsp_opc_subr(opc); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + dsp_opc_subax(opc); + break; + + case 0xc: + case 0xd: + dsp_opc_sub(opc); + break; + + default: + ErrorLog("dsp_op5: %x", (opc >> 8) & 0xf); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op6(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x00: // MOVR + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + dsp_opc_movr(opc); + break; + + case 0x8: // MVAXA + case 0x9: + case 0xa: + case 0xb: + dsp_opc_movax(opc); + break; + + case 0xe: + case 0xf: + dsp_opc_movp(opc); + break; + + default: + ErrorLog("dsp_op6"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op7(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + dsp_opc_addaxl(opc); + break; + + case 0x4: + case 0x5: + dsp_opc_incm(opc); + break; + + case 0x6: + case 0x7: + dsp_opc_inc(opc); + break; + + case 0x8: + case 0x9: + dsp_opc_decm(opc); + break; + + case 0xa: + case 0xb: + dsp_opc_dec(opc); + break; + + case 0xc: + case 0xd: + dsp_opc_neg(opc); + break; + + case 0xe: + case 0xf: + dsp_opc_movnp(opc); + break; + + default: + ErrorLog("dsp_op7"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op8(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x8: + dsp_opc_nx(opc); + break; + + case 0x1: // CLR 0 + case 0x9: // CLR 1 + dsp_opc_clr(opc); + break; + + case 0x2: // CMP + dsp_opc_cmp(opc); + break; + + case 0x4: // CLRP + dsp_opc_clrp(opc); + break; + + case 0x6: + case 0x7: + dsp_opc_tstaxh(opc); + break; + + case 0xc: + case 0xb: + case 0xe: // SET40 + case 0xd: + case 0xa: + case 0xf: + dsp_opc_srbith(opc); + break; + + default: + ErrorLog("dsp_op8"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_op9(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x02: + case 0x03: + case 0x0a: + case 0x0b: + dsp_opc_mulmvz(opc); + break; + + case 0x04: + case 0x05: + case 0x0c: + case 0x0d: + dsp_opc_mulac(opc); + break; + + case 0x6: + case 0x7: + case 0xe: + case 0xf: + dsp_opc_mulmv(opc); + break; + + case 0x0: + case 0x8: + dsp_opc_mul(opc); + break; + + case 0x1: + case 0x9: + dsp_opc_asr16(opc); + break; + + default: + ErrorLog("dsp_op9"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_opab(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0x7) + { + case 0x0: + dsp_opc_mulx(opc); + break; + + case 0x1: + dsp_opc_tsta(opc); + break; + + case 0x2: + case 0x3: + dsp_opc_mulxmvz(opc); + break; + + case 0x4: + case 0x5: + dsp_opc_mulxac(opc); + break; + + case 0x6: + case 0x7: + dsp_opc_mulxmv(opc); + break; + + default: + ErrorLog("dsp_opab"); + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_opcd(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0x7) + { + case 0x0: // MULC + dsp_opc_mulc(opc); + break; + + case 0x1: // CMPAR + dsp_opc_cmpar(opc); + break; + + case 0x2: // MULCMVZ + case 0x3: + dsp_opc_mulcmvz(opc); + break; + + case 0x4: // MULCAC + case 0x5: + dsp_opc_mulcac(opc); + break; + + case 0x6: // MULCMV + case 0x7: + dsp_opc_mulcmv(opc); + break; + + default: + ErrorLog("dsp_opcd"); + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_ope(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 10) & 0x3) + { + case 0x00: // MADDX + dsp_opc_maddx(opc); + break; + + case 0x01: // MSUBX + dsp_opc_msubx(opc); + break; + + case 0x02: // MADDC + dsp_opc_maddc(opc); + break; + + case 0x03: // MSUBC + dsp_opc_msubc(opc); + break; + + default: + ErrorLog("dsp_ope"); + } + + dsp_op_ext_ops_epi(opc); +} + + +void dsp_opf(uint16 opc) +{ + dsp_op_ext_ops_pro(opc); + + switch ((opc >> 8) & 0xf) + { + case 0x0: + case 0x1: + dsp_opc_lsl16(opc); + break; + + case 0x02: + case 0x03: + dsp_opc_madd(opc); + break; + + case 0x4: + case 0x5: + dsp_opc_lsr16(opc); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + dsp_opc_addpaxz(opc); + break; + + case 0xe: + case 0xf: + dsp_opc_movpz(opc); + break; + + default: + ErrorLog("dsp_opf"); + break; + } + + dsp_op_ext_ops_epi(opc); +} + + diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.h b/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.h index ec250031b6..32627b5e0e 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.h +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSPOpcodes.h @@ -1,48 +1,48 @@ -/*==================================================================== - - filename: gdsp_opcodes.h - project: GCemu - created: 2004-6-18 - mail: duddie@walla.com - - Copyright (c) 2005 Duddie & Tratax - - This program 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 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - ====================================================================*/ -#ifndef _GDSP_OPCODES_H -#define _GDSP_OPCODES_H - -void dsp_op0(uint16 opc); -void dsp_op1(uint16 opc); -void dsp_op2(uint16 opc); -void dsp_op3(uint16 opc); -void dsp_op4(uint16 opc); -void dsp_op5(uint16 opc); -void dsp_op6(uint16 opc); -void dsp_op7(uint16 opc); -void dsp_op8(uint16 opc); -void dsp_op9(uint16 opc); -void dsp_opab(uint16 opc); -void dsp_opcd(uint16 opc); -void dsp_ope(uint16 opc); -void dsp_opf(uint16 opc); - - -#define R_SR 0x13 - -#define FLAG_ENABLE_INTERUPT 11 - -#endif +/*==================================================================== + + filename: gdsp_opcodes.h + project: GCemu + created: 2004-6-18 + mail: duddie@walla.com + + Copyright (c) 2005 Duddie & Tratax + + This program 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 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ====================================================================*/ +#ifndef _GDSP_OPCODES_H +#define _GDSP_OPCODES_H + +void dsp_op0(uint16 opc); +void dsp_op1(uint16 opc); +void dsp_op2(uint16 opc); +void dsp_op3(uint16 opc); +void dsp_op4(uint16 opc); +void dsp_op5(uint16 opc); +void dsp_op6(uint16 opc); +void dsp_op7(uint16 opc); +void dsp_op8(uint16 opc); +void dsp_op9(uint16 opc); +void dsp_opab(uint16 opc); +void dsp_opcd(uint16 opc); +void dsp_ope(uint16 opc); +void dsp_opf(uint16 opc); + + +#define R_SR 0x13 + +#define FLAG_ENABLE_INTERUPT 11 + +#endif diff --git a/docs/DSP/DSP_InterC/DSP_InterC/OutBuffer.cpp b/docs/DSP/DSP_InterC/DSP_InterC/OutBuffer.cpp index e8a6673ee5..005fcc2d10 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/OutBuffer.cpp +++ b/docs/DSP/DSP_InterC/DSP_InterC/OutBuffer.cpp @@ -1,155 +1,155 @@ -// stdafx.cpp : source file that includes just the standard includes -// DSP_InterC.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" - -#include -#include - -namespace OutBuffer -{ - void Init() - { - - } - - void Add(const char* _fmt, ...) - { - static char Msg[2048]; - va_list ap; - - va_start(ap, _fmt); - vsprintf(Msg, _fmt, ap); - va_end(ap); - - printf("%s\n", Msg); - } - - void AddCode(const char* _fmt, ...) - { - static char Msg[2048]; - va_list ap; - - va_start(ap, _fmt); - vsprintf(Msg, _fmt, ap); - va_end(ap); - - printf(" %s;\n", Msg); - } - - // predefined labels - typedef struct pdlabel_t - { - uint16 addr; - const char* name; - const char* description; - } pdlabels_t; - - pdlabel_t regnames[] = - { - {0x00, "R00", "Register 00",}, - {0x01, "R01", "Register 01",}, - {0x02, "R02", "Register 02",}, - {0x03, "R03", "Register 03",}, - {0x04, "R04", "Register 04",}, - {0x05, "R05", "Register 05",}, - {0x06, "R06", "Register 06",}, - {0x07, "R07", "Register 07",}, - {0x08, "R08", "Register 08",}, - {0x09, "R09", "Register 09",}, - {0x0a, "R10", "Register 10",}, - {0x0b, "R11", "Register 11",}, - {0x0c, "ST0", "Call stack",}, - {0x0d, "ST1", "Data stack",}, - {0x0e, "ST2", "Loop address stack",}, - {0x0f, "ST3", "Loop counter",}, - {0x00, "ACH0", "Accumulator High 0",}, - {0x11, "ACH1", "Accumulator High 1",}, - {0x12, "CR", "Config Register",}, - {0x13, "SR", "Special Register",}, - {0x14, "PROD_l", "PROD L",}, - {0x15, "PROD_m1", "PROD M1",}, - {0x16, "PROD_h", "PROD H",}, - {0x17, "PROD_m2", "PROD M2",}, - {0x18, "AX0_l", "Additional Accumulators Low 0",}, - {0x19, "AX1_l", "Additional Accumulators Low 1",}, - {0x1a, "AX0_h", "Additional Accumulators High 0",}, - {0x1b, "AX1_h", "Additional Accumulators High 1",}, - {0x1c, "AC0_l", "Register 28",}, - {0x1d, "AC1_l", "Register 29",}, - {0x1e, "AC0_m", "Register 00",}, - {0x1f, "AC1_m", "Register 00",}, - - // additional to resolve special names - {0x20, "ACC0", "Accumulators 0",}, - {0x21, "ACC1", "Accumulators 1",}, - {0x22, "AX0", "Additional Accumulators 0",}, - {0x23, "AX1", "Additional Accumulators 1",}, - }; - - const pdlabel_t pdlabels[] = - { - {0xffa0, "COEF_A1_0", "COEF_A1_0",}, - {0xffa1, "COEF_A2_0", "COEF_A2_0",}, - {0xffa2, "COEF_A1_1", "COEF_A1_1",}, - {0xffa3, "COEF_A2_1", "COEF_A2_1",}, - {0xffa4, "COEF_A1_2", "COEF_A1_2",}, - {0xffa5, "COEF_A2_2", "COEF_A2_2",}, - {0xffa6, "COEF_A1_3", "COEF_A1_3",}, - {0xffa7, "COEF_A2_3", "COEF_A2_3",}, - {0xffa8, "COEF_A1_4", "COEF_A1_4",}, - {0xffa9, "COEF_A2_4", "COEF_A2_4",}, - {0xffaa, "COEF_A1_5", "COEF_A1_5",}, - {0xffab, "COEF_A2_5", "COEF_A2_5",}, - {0xffac, "COEF_A1_6", "COEF_A1_6",}, - {0xffad, "COEF_A2_6", "COEF_A2_6",}, - {0xffae, "COEF_A1_7", "COEF_A1_7",}, - {0xffaf, "COEF_A2_7", "COEF_A2_7",}, - {0xffc9, "DSCR", "DSP DMA Control Reg",}, - {0xffcb, "DSBL", "DSP DMA Block Length",}, - {0xffcd, "DSPA", "DSP DMA DMEM Address",}, - {0xffce, "DSMAH", "DSP DMA Mem Address H",}, - {0xffcf, "DSMAL", "DSP DMA Mem Address L",}, - {0xffd1, "SampleFormat", "SampleFormat",}, - - {0xffd3, "Unk Zelda", "Unk Zelda writes to it",}, - - {0xffd4, "ACSAH", "Accelerator start address H",}, - {0xffd5, "ACSAL", "Accelerator start address L",}, - {0xffd6, "ACEAH", "Accelerator end address H",}, - {0xffd7, "ACEAL", "Accelerator end address L",}, - {0xffd8, "ACCAH", "Accelerator current address H",}, - {0xffd9, "ACCAL", "Accelerator current address L",}, - {0xffda, "pred_scale", "pred_scale",}, - {0xffdb, "yn1", "yn1",}, - {0xffdc, "yn2", "yn2",}, - {0xffdd, "ARAM", "Direct Read from ARAM (uses ADPCM)",}, - {0xffde, "GAIN", "Gain",}, - {0xffef, "AMDM", "ARAM DMA Request Mask",}, - {0xfffb, "DIRQ", "DSP IRQ Request",}, - {0xfffc, "DMBH", "DSP Mailbox H",}, - {0xfffd, "DMBL", "DSP Mailbox L",}, - {0xfffe, "CMBH", "CPU Mailbox H",}, - {0xffff, "CMBL", "CPU Mailbox L",}, - }; - - const char* GetRegName(uint16 reg) - { - return regnames[reg].name; - } - - const char* GetMemName(uint16 addr) - { - static char Buffer[1024]; - for (int i=0; i +#include + +namespace OutBuffer +{ + void Init() + { + + } + + void Add(const char* _fmt, ...) + { + static char Msg[2048]; + va_list ap; + + va_start(ap, _fmt); + vsprintf(Msg, _fmt, ap); + va_end(ap); + + printf("%s\n", Msg); + } + + void AddCode(const char* _fmt, ...) + { + static char Msg[2048]; + va_list ap; + + va_start(ap, _fmt); + vsprintf(Msg, _fmt, ap); + va_end(ap); + + printf(" %s;\n", Msg); + } + + // predefined labels + typedef struct pdlabel_t + { + uint16 addr; + const char* name; + const char* description; + } pdlabels_t; + + pdlabel_t regnames[] = + { + {0x00, "R00", "Register 00",}, + {0x01, "R01", "Register 01",}, + {0x02, "R02", "Register 02",}, + {0x03, "R03", "Register 03",}, + {0x04, "R04", "Register 04",}, + {0x05, "R05", "Register 05",}, + {0x06, "R06", "Register 06",}, + {0x07, "R07", "Register 07",}, + {0x08, "R08", "Register 08",}, + {0x09, "R09", "Register 09",}, + {0x0a, "R10", "Register 10",}, + {0x0b, "R11", "Register 11",}, + {0x0c, "ST0", "Call stack",}, + {0x0d, "ST1", "Data stack",}, + {0x0e, "ST2", "Loop address stack",}, + {0x0f, "ST3", "Loop counter",}, + {0x00, "ACH0", "Accumulator High 0",}, + {0x11, "ACH1", "Accumulator High 1",}, + {0x12, "CR", "Config Register",}, + {0x13, "SR", "Special Register",}, + {0x14, "PROD_l", "PROD L",}, + {0x15, "PROD_m1", "PROD M1",}, + {0x16, "PROD_h", "PROD H",}, + {0x17, "PROD_m2", "PROD M2",}, + {0x18, "AX0_l", "Additional Accumulators Low 0",}, + {0x19, "AX1_l", "Additional Accumulators Low 1",}, + {0x1a, "AX0_h", "Additional Accumulators High 0",}, + {0x1b, "AX1_h", "Additional Accumulators High 1",}, + {0x1c, "AC0_l", "Register 28",}, + {0x1d, "AC1_l", "Register 29",}, + {0x1e, "AC0_m", "Register 00",}, + {0x1f, "AC1_m", "Register 00",}, + + // additional to resolve special names + {0x20, "ACC0", "Accumulators 0",}, + {0x21, "ACC1", "Accumulators 1",}, + {0x22, "AX0", "Additional Accumulators 0",}, + {0x23, "AX1", "Additional Accumulators 1",}, + }; + + const pdlabel_t pdlabels[] = + { + {0xffa0, "COEF_A1_0", "COEF_A1_0",}, + {0xffa1, "COEF_A2_0", "COEF_A2_0",}, + {0xffa2, "COEF_A1_1", "COEF_A1_1",}, + {0xffa3, "COEF_A2_1", "COEF_A2_1",}, + {0xffa4, "COEF_A1_2", "COEF_A1_2",}, + {0xffa5, "COEF_A2_2", "COEF_A2_2",}, + {0xffa6, "COEF_A1_3", "COEF_A1_3",}, + {0xffa7, "COEF_A2_3", "COEF_A2_3",}, + {0xffa8, "COEF_A1_4", "COEF_A1_4",}, + {0xffa9, "COEF_A2_4", "COEF_A2_4",}, + {0xffaa, "COEF_A1_5", "COEF_A1_5",}, + {0xffab, "COEF_A2_5", "COEF_A2_5",}, + {0xffac, "COEF_A1_6", "COEF_A1_6",}, + {0xffad, "COEF_A2_6", "COEF_A2_6",}, + {0xffae, "COEF_A1_7", "COEF_A1_7",}, + {0xffaf, "COEF_A2_7", "COEF_A2_7",}, + {0xffc9, "DSCR", "DSP DMA Control Reg",}, + {0xffcb, "DSBL", "DSP DMA Block Length",}, + {0xffcd, "DSPA", "DSP DMA DMEM Address",}, + {0xffce, "DSMAH", "DSP DMA Mem Address H",}, + {0xffcf, "DSMAL", "DSP DMA Mem Address L",}, + {0xffd1, "SampleFormat", "SampleFormat",}, + + {0xffd3, "Unk Zelda", "Unk Zelda writes to it",}, + + {0xffd4, "ACSAH", "Accelerator start address H",}, + {0xffd5, "ACSAL", "Accelerator start address L",}, + {0xffd6, "ACEAH", "Accelerator end address H",}, + {0xffd7, "ACEAL", "Accelerator end address L",}, + {0xffd8, "ACCAH", "Accelerator current address H",}, + {0xffd9, "ACCAL", "Accelerator current address L",}, + {0xffda, "pred_scale", "pred_scale",}, + {0xffdb, "yn1", "yn1",}, + {0xffdc, "yn2", "yn2",}, + {0xffdd, "ARAM", "Direct Read from ARAM (uses ADPCM)",}, + {0xffde, "GAIN", "Gain",}, + {0xffef, "AMDM", "ARAM DMA Request Mask",}, + {0xfffb, "DIRQ", "DSP IRQ Request",}, + {0xfffc, "DMBH", "DSP Mailbox H",}, + {0xfffd, "DMBL", "DSP Mailbox L",}, + {0xfffe, "CMBH", "CPU Mailbox H",}, + {0xffff, "CMBL", "CPU Mailbox L",}, + }; + + const char* GetRegName(uint16 reg) + { + return regnames[reg].name; + } + + const char* GetMemName(uint16 addr) + { + static char Buffer[1024]; + for (int i=0; i 0); -} - - -// --------------------------------------------------------------------------------------- -// -// --- reg -// -// --------------------------------------------------------------------------------------- - -inline uint16 dsp_op_read_reg(uint8 reg) -{ - uint16 val; - - switch (reg & 0x1f) - { - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - val = dsp_reg_load_stack(reg - 0x0c); - break; - - default: - val = g_dsp.r[reg]; - break; - } - - return(val); -} - - -inline void dsp_op_write_reg(uint8 reg, uint16 val) -{ - switch (reg & 0x1f) - { - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - dsp_reg_store_stack(reg - 0x0c, val); - break; - - default: - g_dsp.r[reg] = val; - break; - } -} - - -// --------------------------------------------------------------------------------------- -// -// --- prod -// -// --------------------------------------------------------------------------------------- - - -inline sint64 dsp_get_long_prod() -{ - sint64 val; - sint64 low_prod; - val = (sint8)g_dsp.r[0x16]; - val <<= 32; - low_prod = g_dsp.r[0x15]; - low_prod += g_dsp.r[0x17]; - low_prod <<= 16; - low_prod |= g_dsp.r[0x14]; - val += low_prod; - return(val); -} - - -inline void dsp_set_long_prod(sint64 val) -{ - g_dsp.r[0x14] = (uint16)val; - val >>= 16; - g_dsp.r[0x15] = (uint16)val; - val >>= 16; - g_dsp.r[0x16] = (uint16)val; - g_dsp.r[0x17] = 0; -} - - -// --------------------------------------------------------------------------------------- -// -// --- acc -// -// --------------------------------------------------------------------------------------- - -inline sint64 dsp_get_long_acc(uint8 reg) -{ - _dbg_assert_(reg < 2); - sint64 val; - sint64 low_acc; - val = (sint8)g_dsp.r[0x10 + reg]; - val <<= 32; - low_acc = g_dsp.r[0x1e + reg]; - low_acc <<= 16; - low_acc |= g_dsp.r[0x1c + reg]; - val |= low_acc; - return(val); -} - - -inline uint64 dsp_get_ulong_acc(uint8 reg) -{ - _dbg_assert_(reg < 2); - uint64 val; - uint64 low_acc; - val = (uint8)g_dsp.r[0x10 + reg]; - val <<= 32; - low_acc = g_dsp.r[0x1e + reg]; - low_acc <<= 16; - low_acc |= g_dsp.r[0x1c + reg]; - val |= low_acc; - return(val); -} - - -inline void dsp_set_long_acc(uint8 _reg, sint64 val) -{ - _dbg_assert_(_reg < 2); - g_dsp.r[0x1c + _reg] = (uint16)val; - val >>= 16; - g_dsp.r[0x1e + _reg] = (uint16)val; - val >>= 16; - g_dsp.r[0x10 + _reg] = (uint16)val; -} - - -inline sint16 dsp_get_acc_l(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - return(g_dsp.r[0x1c + _reg]); -} - - -inline sint16 dsp_get_acc_m(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - return(g_dsp.r[0x1e + _reg]); -} - - -inline sint16 dsp_get_acc_h(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - return(g_dsp.r[0x10 + _reg]); -} - - -// --------------------------------------------------------------------------------------- -// -// --- acx -// -// --------------------------------------------------------------------------------------- - - -inline sint64 dsp_get_long_acx(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - sint64 val = (sint16)g_dsp.r[0x1a + _reg]; - val <<= 16; - sint64 low_acc = g_dsp.r[0x18 + _reg]; - val |= low_acc; - return(val); -} - - -inline sint16 dsp_get_ax_l(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - return(g_dsp.r[0x18 + _reg]); -} - - -inline sint16 dsp_get_ax_h(uint8 _reg) -{ - _dbg_assert_(_reg < 2); - return(g_dsp.r[0x1a + _reg]); -} - - -#endif +/*==================================================================== + + filename: opcodes.h + project: GameCube DSP Tool (gcdsp) + created: 2005.03.04 + mail: duddie@walla.com + + Copyright (c) 2005 Duddie + + This program 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 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ====================================================================*/ + +#ifndef _GDSP_OPCODES_HELPER_H +#define _GDSP_OPCODES_HELPER_H + +#include "Globals.h" + +#include "gdsp_opcodes.h" +#include "gdsp_memory.h" +#include "gdsp_interpreter.h" +#include "gdsp_registers.h" +#include "gdsp_ext_op.h" + +// --------------------------------------------------------------------------------------- +// +// --- SR +// +// --------------------------------------------------------------------------------------- + +inline void dsp_SR_set_flag(uint8 flag) +{ + g_dsp.r[R_SR] |= (1 << flag); +} + + +inline bool dsp_SR_is_flag_set(uint8 flag) +{ + return((g_dsp.r[R_SR] & (1 << flag)) > 0); +} + + +// --------------------------------------------------------------------------------------- +// +// --- reg +// +// --------------------------------------------------------------------------------------- + +inline uint16 dsp_op_read_reg(uint8 reg) +{ + uint16 val; + + switch (reg & 0x1f) + { + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + val = dsp_reg_load_stack(reg - 0x0c); + break; + + default: + val = g_dsp.r[reg]; + break; + } + + return(val); +} + + +inline void dsp_op_write_reg(uint8 reg, uint16 val) +{ + switch (reg & 0x1f) + { + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + dsp_reg_store_stack(reg - 0x0c, val); + break; + + default: + g_dsp.r[reg] = val; + break; + } +} + + +// --------------------------------------------------------------------------------------- +// +// --- prod +// +// --------------------------------------------------------------------------------------- + + +inline sint64 dsp_get_long_prod() +{ + sint64 val; + sint64 low_prod; + val = (sint8)g_dsp.r[0x16]; + val <<= 32; + low_prod = g_dsp.r[0x15]; + low_prod += g_dsp.r[0x17]; + low_prod <<= 16; + low_prod |= g_dsp.r[0x14]; + val += low_prod; + return(val); +} + + +inline void dsp_set_long_prod(sint64 val) +{ + g_dsp.r[0x14] = (uint16)val; + val >>= 16; + g_dsp.r[0x15] = (uint16)val; + val >>= 16; + g_dsp.r[0x16] = (uint16)val; + g_dsp.r[0x17] = 0; +} + + +// --------------------------------------------------------------------------------------- +// +// --- acc +// +// --------------------------------------------------------------------------------------- + +inline sint64 dsp_get_long_acc(uint8 reg) +{ + _dbg_assert_(reg < 2); + sint64 val; + sint64 low_acc; + val = (sint8)g_dsp.r[0x10 + reg]; + val <<= 32; + low_acc = g_dsp.r[0x1e + reg]; + low_acc <<= 16; + low_acc |= g_dsp.r[0x1c + reg]; + val |= low_acc; + return(val); +} + + +inline uint64 dsp_get_ulong_acc(uint8 reg) +{ + _dbg_assert_(reg < 2); + uint64 val; + uint64 low_acc; + val = (uint8)g_dsp.r[0x10 + reg]; + val <<= 32; + low_acc = g_dsp.r[0x1e + reg]; + low_acc <<= 16; + low_acc |= g_dsp.r[0x1c + reg]; + val |= low_acc; + return(val); +} + + +inline void dsp_set_long_acc(uint8 _reg, sint64 val) +{ + _dbg_assert_(_reg < 2); + g_dsp.r[0x1c + _reg] = (uint16)val; + val >>= 16; + g_dsp.r[0x1e + _reg] = (uint16)val; + val >>= 16; + g_dsp.r[0x10 + _reg] = (uint16)val; +} + + +inline sint16 dsp_get_acc_l(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + return(g_dsp.r[0x1c + _reg]); +} + + +inline sint16 dsp_get_acc_m(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + return(g_dsp.r[0x1e + _reg]); +} + + +inline sint16 dsp_get_acc_h(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + return(g_dsp.r[0x10 + _reg]); +} + + +// --------------------------------------------------------------------------------------- +// +// --- acx +// +// --------------------------------------------------------------------------------------- + + +inline sint64 dsp_get_long_acx(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + sint64 val = (sint16)g_dsp.r[0x1a + _reg]; + val <<= 16; + sint64 low_acc = g_dsp.r[0x18 + _reg]; + val |= low_acc; + return(val); +} + + +inline sint16 dsp_get_ax_l(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + return(g_dsp.r[0x18 + _reg]); +} + + +inline sint16 dsp_get_ax_h(uint8 _reg) +{ + _dbg_assert_(_reg < 2); + return(g_dsp.r[0x1a + _reg]); +} + + +#endif diff --git a/docs/DSP/DSP_InterC/DSP_InterC/stdafx.cpp b/docs/DSP/DSP_InterC/DSP_InterC/stdafx.cpp index 6b8280251a..a90ebd1f36 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/stdafx.cpp +++ b/docs/DSP/DSP_InterC/DSP_InterC/stdafx.cpp @@ -1,23 +1,23 @@ -// stdafx.cpp : source file that includes just the standard includes -// DSP_InterC.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" - -// TODO: reference any additional headers you need in STDAFX.H -// and not in this file - -#include - -void ErrorLog(const char* _fmt, ...) -{ - char Msg[512]; - va_list ap; - - va_start(ap, _fmt); - vsprintf(Msg, _fmt, ap); - va_end(ap); - - printf("Error"); - +// stdafx.cpp : source file that includes just the standard includes +// DSP_InterC.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file + +#include + +void ErrorLog(const char* _fmt, ...) +{ + char Msg[512]; + va_list ap; + + va_start(ap, _fmt); + vsprintf(Msg, _fmt, ap); + va_end(ap); + + printf("Error"); + } \ No newline at end of file diff --git a/docs/DSP/DSP_InterC/DSP_InterC/stdafx.h b/docs/DSP/DSP_InterC/DSP_InterC/stdafx.h index 1d7c35fd96..6948aa4ad3 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/stdafx.h +++ b/docs/DSP/DSP_InterC/DSP_InterC/stdafx.h @@ -1,39 +1,39 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -#include "targetver.h" - -#include -#include - - - - - - -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef unsigned long long uint64; -typedef unsigned int uint; - -typedef signed char sint8; -typedef signed short sint16; -typedef signed int sint32; -typedef signed long long sint64; - -extern uint16 FetchOpcode(); -extern void ErrorLog(const char* _fmt, ...); - -inline uint16 swap16(uint16 x) -{ - return((x >> 8) | (x << 8)); -} - -#include "OutBuffer.h" - -// TODO: reference additional headers your program requires here +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include "targetver.h" + +#include +#include + + + + + + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long long uint64; +typedef unsigned int uint; + +typedef signed char sint8; +typedef signed short sint16; +typedef signed int sint32; +typedef signed long long sint64; + +extern uint16 FetchOpcode(); +extern void ErrorLog(const char* _fmt, ...); + +inline uint16 swap16(uint16 x) +{ + return((x >> 8) | (x << 8)); +} + +#include "OutBuffer.h" + +// TODO: reference additional headers your program requires here diff --git a/docs/DSP/DSP_InterC/DSP_InterC/targetver.h b/docs/DSP/DSP_InterC/DSP_InterC/targetver.h index a38195a4ef..6fe8eb79e1 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/targetver.h +++ b/docs/DSP/DSP_InterC/DSP_InterC/targetver.h @@ -1,13 +1,13 @@ -#pragma once - -// The following macros define the minimum required platform. The minimum required platform -// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run -// your application. The macros work by enabling all features available on platform versions up to and -// including the version specified. - -// Modify the following defines if you have to target a platform prior to the ones specified below. -// Refer to MSDN for the latest info on corresponding values for different platforms. -#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. -#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. -#endif - +#pragma once + +// The following macros define the minimum required platform. The minimum required platform +// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run +// your application. The macros work by enabling all features available on platform versions up to and +// including the version specified. + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. +#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. +#endif + diff --git a/docs/DSP/DSP_UC_3B3B30CA.txt b/docs/DSP/DSP_UC_3B3B30CA.txt index c65b5df7d1..f5d899f435 100644 --- a/docs/DSP/DSP_UC_3B3B30CA.txt +++ b/docs/DSP/DSP_UC_3B3B30CA.txt @@ -1,436 +1,436 @@ -/* -ROM functions used: -0x8000 dsp reset -0x8078 wait for CMBH & 0x8000 -0x807e wait for DMBH & 0x8000 -0x808b dump DRAM/IRAM to mainmem -0x80b5 boot new ucode -0x80bc boot new ucode without ACC clearing by ROM - -For the rest, this ucode is just calling the last few instructions -from huge functions in ROM - some kind of obfuscation? - -0x81f4 - 81f4 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M - 81f5 9909 asr16'ir $ACC1 : $AR1 - 81f6 1b7f srri @$AR3, $AC1.M - 81f7 812b clr's $ACC0 : @$AR3, $AC1.L -0x8458 - 8458 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M - 8459 9900 asr16 $ACC1 - 845a 1b7f srri @$AR3, $AC1.M - 845b 812b clr's $ACC0 : @$AR3, $AC1.L -0x8723 - 8723 3300 xorr $AC1.M, $AX1.H - 8724 1adf srrd @$AR2, $AC1.M -0x8809 - 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L - 880a 1b5f srri @$AR2, $AC1.M -0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -*/ - -0000 0000 nop -0001 0000 nop -0002 0000 nop -0003 0000 nop -0004 0000 nop -0005 0000 nop -0006 0000 nop -0007 0000 nop -0008 0000 nop -0009 0000 nop -000a 0000 nop -000b 0000 nop -000c 0000 nop -000d 0021 halt -000e 02ff rti -000f 0021 halt - -0010 1306 sbset #0x06 -0011 1203 sbclr #0x03 -0012 1204 sbclr #0x04 -0013 1305 sbset #0x05 -0014 0092 00ff lri $CR, #0x00ff -0016 0088 ffff lri $WR0, #0xffff -0018 0089 ffff lri $WR1, #0xffff -001a 008a ffff lri $WR2, #0xffff -001c 008b ffff lri $WR3, #0xffff -001e 8f00 set40 -001f 8b00 m0 -0020 8c00 clr15 -0021 02bf 807e call 0x807e // loop until dsp->cpu mailbox is empty -0023 16fc dcd1 si @DMBH, #0xdcd1 -0025 16fd 0000 si @DMBL, #0x0000 // sendmail 0xdcd10000 -0027 16fb 0001 si @DIRQ, #0x0001 - -// wait for cpu mail == 0xabbaxxxx -0029 02bf 8078 call 0x8078 // wait for cpu mail -002b 24ff lrs $AC0.L, @CMBL -002c 0280 abba cmpi $AC0.M, #0xabba -002e 0294 0029 jnz 0x0029 - -// wait for cpu mail -0030 8e00 set16 -0031 02bf 8078 call 0x8078 - -0033 20ff lrs $AX0.L, @CMBL -0034 0240 0fff andi $AC0.M, #0x0fff -0036 1f5e mrr $AX0.H, $AC0.M -0037 009b 0000 lri $AX1.H, #0x0000 // DSP-dram addr -0039 0099 0020 lri $AX1.L, #0x0020 // length (20 bytes = 10 words, word 9 and 10 are addr where result should DMA'd to in main mem) -003b 0087 0000 lri $IX3, #0x0000 // there will be no ucode/iram upload -003d 0080 0041 lri $AR0, #0x0041 // return addr after dram upload -003f 029f 80bc jmp 0x80bc // DRAM upload !! -// $AX0.H-$AX0.L - CPU(PPC) addr = mail & 0x0fffffff -// upload data from mainmem do dsp dram and jump to 0x41 after that - -0041 02bf 008c call 008c_BigCrazyFunction() // <<------------- main crap is here!!!!!!!!! -0043 02bf 807e call 0x807e // loop until dsp->cpu mailbox is empty - -0045 16fc dcd1 si @DMBH, #0xdcd1 -0047 16fd 0003 si @DMBL, #0x0003 // sendmail 0xdcd10003 (aka... calc is over, result is in main mem now) -0049 16fb 0001 si @DIRQ, #0x0001 -004b 8f00 set40 - -004c 02bf 8078 call 0x8078 -004e 0280 cdd1 cmpi $AC0.M, #0xcdd1 -0050 0294 004c jnz 0x004c - -0052 26ff lrs $AC0.M, @CMBL -0053 0280 0001 cmpi $AC0.M, #0x0001 -0055 0295 005e jz 0x005e // if cpu->dsp mail was 0xcdd10001 -> 005e_PrepareBootUcode() - -0057 0280 0002 cmpi $AC0.M, #0x0002 -0059 0295 8000 jz 0x8000 // if cpu->dsp mail was 0xcdd10002 -> dsp reset ( jmp to irom(0x8000)) - -005b 029f 004c jmp 0x004c // wait for next mail from cpu -005d 0021 halt - -void 005e_PrepareBootUcode() -{ -005e 8e00 set16 -005f 02bf 8078 call 0x8078 // wait for cpu mail -0061 24ff lrs $AC0.L, @CMBL -0062 02bf 8078 call 0x8078 // wait for cpu mail -0064 24ff lrs $AC0.L, @CMBL -0065 02bf 8078 call 0x8078 // wait for cpu mail -0067 24ff lrs $AC0.L, @CMBL -0068 02bf 8078 call 0x8078 // wait for cpu mail -006a 00c5 ffff lr $IX1, @CMBL -006c 0240 0fff andi $AC0.M, #0x0fff -006e 1c9e mrr $IX0, $AC0.M -006f 02bf 8078 call 0x8078 // wait for cpu mail -0071 00c7 ffff lr $IX3, @CMBL -0073 02bf 8078 call 0x8078 // wait for cpu mail -0075 00c6 ffff lr $IX2, @CMBL -0077 02bf 8078 call 0x8078 // wait for cpu mail -0079 00c0 ffff lr $AR0, @CMBL -007b 02bf 8078 call 0x8078 // wait for cpu mail -007d 20ff lrs $AX0.L, @CMBL -007e 0240 0fff andi $AC0.M, #0x0fff -0080 1f5e mrr $AX0.H, $AC0.M -0081 02bf 8078 call 0x8078 // wait for cpu mail -0083 21ff lrs $AX1.L, @CMBL -0084 02bf 8078 call 0x8078 // wait for cpu mail -0086 23ff lrs $AX1.H, @CMBL -0087 1205 sbclr #0x05 -0088 1206 sbclr #0x06 -0089 029f 80b5 jmp 80b5_BootUcode() -008b 0021 halt -} - -// does some crazy stuff with data at dram @0x3/0x5/0x6/0x7 with help of some values from drom :) -// result is @0x22,@0x23 and written back to main memory to dmem-0x08:dmem-0x09 -void 008c_BigCrazyFunction() -{ -008c 8100 clr $ACC0 -008d 0081 0010 lri $AR1, #0x0010 -008f 1020 loopi #0x20 - 0090 1b3e srri @$AR1, $AC0.M -0091 00df 1456 lr $AC1.M, @0x1456 -0093 0340 ffd0 andi $AC1.M, #0xffd0 -0095 8417 clrp'mv : $AX1.L, $AC1.M -0096 0080 0000 lri $AR0, #0x0000 -0098 0086 0000 lri $IX2, #0x0000 -009a 0082 001f lri $AR2, #0x001f -009c 00de 15f6 lr $AC0.M, @0x15f6 -009e 1408 lsl $ACC0, #8 -009f 00df 1766 lr $AC1.M, @0x1766 -00a1 0340 00ff andi $AC1.M, #0x00ff -00a3 1f5f mrr $AX0.H, $AC1.M -00a4 02bf 88e5 call 0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -00a6 1f1c mrr $AX0.L, $AC0.L -00a7 811e clr'mv $ACC0 : $AX1.H, $AC0.M -00a8 191e lrri $AC0.M, @$AR0 -00a9 1478 lsr $ACC0, #-8 -00aa 1ffc mrr $AC1.M, $AC0.L -00ab 1f5e mrr $AX0.H, $AC0.M -00ac 02bf 8809 call 0x8809 - 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L - 880a 1b5f srri @$AR2, $AC1.M -00ae 02bf 8723 call 0x8723 - 8723 3300 xorr $AC1.M, $AX1.H - 8724 1adf srrd @$AR2, $AC1.M -00b0 0006 dar $AR2 -00b1 8106 clr'dr $ACC0 : $AR2 -00b2 00de 166c lr $AC0.M, @0x166c -00b4 1404 lsl $ACC0, #4 -00b5 0240 ff00 andi $AC0.M, #0xff00 -00b7 00df 1231 lr $AC1.M, @0x1231 -00b9 1578 lsr $ACC1, #-8 -00ba 0340 00ff andi $AC1.M, #0x00ff -00bc 1f5f mrr $AX0.H, $AC1.M -00bd 02bf 88e5 call 0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -00bf 1f1c mrr $AX0.L, $AC0.L -00c0 811e clr'mv $ACC0 : $AX1.H, $AC0.M -00c1 191e lrri $AC0.M, @$AR0 -00c2 1478 lsr $ACC0, #-8 -00c3 1ffc mrr $AC1.M, $AC0.L -00c4 1f5e mrr $AX0.H, $AC0.M -00c5 02bf 8809 call 0x8809 - 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L - 880a 1b5f srri @$AR2, $AC1.M -00c7 02bf 8723 call 0x8723 - 8723 3300 xorr $AC1.M, $AX1.H - 8724 1adf srrd @$AR2, $AC1.M -00c9 8100 clr $ACC0 -00ca 8900 clr $ACC1 -00cb 00d1 0005 lr $AC1.H, @0x0005 -00cd 9900 asr16 $ACC1 -00ce 8200 cmp -00cf 0295 00e5 jz 0x00e5 - -00d1 0291 00f3 jl 0x00f3 - -00d3 0082 0010 lri $AR2, #0x0010 -00d5 0086 0001 lri $IX2, #0x0001 -00d7 00d0 171b lr $AC0.H, @0x171b -00d9 9100 asr16 $ACC0 -00da 7d00 neg $ACC1 -00db 4d00 add $ACC1, $ACC0 -00dc 1501 lsl $ACC1, #1 -00dd 1f5f mrr $AX0.H, $AC1.M -00de 00df 0003 lr $AC1.M, @0x0003 -00e0 1504 lsl $ACC1, #4 -00e1 02bf 8809 call 0x8809 - 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L - 880a 1b5f srri @$AR2, $AC1.M -00e3 029f 0102 jmp 0x0102 - -: -00e5 0082 0011 lri $AR2, #0x0011 -00e7 00df 0003 lr $AC1.M, @0x0003 -00e9 1501 lsl $ACC1, #1 -00ea 1f5f mrr $AX0.H, $AC1.M -00eb 00de 1043 lr $AC0.M, @0x1043 -00ed 0240 fff0 andi $AC0.M, #0xfff0 -00ef 02bf 88e5 call 0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -00f1 029f 0102 jmp 0x0102 - -: -00f3 0082 0010 lri $AR2, #0x0010 -00f5 0086 0001 lri $IX2, #0x0001 -00f7 00d0 1285 lr $AC0.H, @0x1285 -00f9 9100 asr16 $ACC0 -00fa 4d00 add $ACC1, $ACC0 -00fb 1501 lsl $ACC1, #1 -00fc 00de 0003 lr $AC0.M, @0x0003 -00fe 1404 lsl $ACC0, #4 -00ff 1f5e mrr $AX0.H, $AC0.M -0100 02bf 8809 call 0x8809 - 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L - 880a 1b5f srri @$AR2, $AC1.M - -: -0102 0083 0013 lri $AR3, #0x0013 -0104 1b7e srri @$AR3, $AC0.M -0105 8923 clr's $ACC1 : @$AR3, $AC0.L -0106 0083 0013 lri $AR3, #0x0013 -0108 00df 0007 lr $AC1.M, @0x0007 -010a 00de 11b8 lr $AC0.M, @0x11b8 -010c 0240 fff0 andi $AC0.M, #0xfff0 -010e 1f5e mrr $AX0.H, $AC0.M -010f 02bf 81f4 call 0x81f4 - 81f4 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M - 81f5 9909 asr16'ir $ACC1 : $AR1 - 81f6 1b7f srri @$AR3, $AC1.M - 81f7 812b clr's $ACC0 : @$AR3, $AC1.L -0111 f100 lsl16 $ACC1 -0112 02bf 8458 call 0x8458 - 8458 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M - 8459 9900 asr16 $ACC1 - 845a 1b7f srri @$AR3, $AC1.M - 845b 812b clr's $ACC0 : @$AR3, $AC1.L -0114 8f00 set40 -0115 0082 0015 lri $AR2, #0x0015 -0117 00de 0006 lr $AC0.M, @0x0006 -0119 00da 165b lr $AX0.H, @0x165b -011b 02bf 88e5 call 0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -011d 14fd asr $ACC0, #-3 -011e 1403 lsl $ACC0, #3 -011f 1b5e srri @$AR2, $AC0.M -0120 1b5c srri @$AR2, $AC0.L -0121 0082 0016 lri $AR2, #0x0016 -0123 00de 1723 lr $AC0.M, @0x1723 -0125 14f4 asr $ACC0, #-12 -0126 00da 166b lr $AX0.H, @0x166b -0128 02bf 88e5 call 0x88e5 - 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 - 88e6 18dd lrrd $AC1.L, @$AR2 - 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 - 88e8 1b5e srri @$AR2, $AC0.M - 88e9 1a5c srr @$AR2, $AC0.L -012a b100 tst $ACC0 -012b 0290 012e jge 0x012e - -012d 8100 clr $ACC0 - -: -012e 14fd asr $ACC0, #-3 -012f 8e00 set16 -0130 00df 1491 lr $AC1.M, @0x1491 -0132 0340 d0f0 andi $AC1.M, #0xd0f0 -0134 1cbf mrr $IX1, $AC1.M -0135 00df 1468 lr $AC1.M, @0x1468 -0137 00d1 11fc lr $AC1.H, @0x11fc -0139 157c lsr $ACC1, #-4 -013a 1cdf mrr $IX2, $AC1.M -013b 00d1 11b8 lr $AC1.H, @0x11b8 -013d 9900 asr16 $ACC1 -013e 1418 lsl $ACC0, #24 -013f 1478 lsr $ACC0, #-8 -0140 1f5e mrr $AX0.H, $AC0.M -0141 1ffe mrr $AC1.M, $AC0.M -0142 1f65 mrr $AX1.H, $IX1 -0143 3600 andr $AC0.M, $AX1.H -0144 1402 lsl $ACC0, #2 -0145 1f66 mrr $AX1.H, $IX2 -0146 3700 andr $AC1.M, $AX1.H -0147 1501 lsl $ACC1, #1 -0148 4c00 add $ACC0, $ACC1 -0149 1518 lsl $ACC1, #24 -014a 9900 asr16 $ACC1 -014b 3500 andr $AC1.M, $AX0.H -014c 4c00 add $ACC0, $ACC1 -014d 00df 0012 lr $AC1.M, @0x0012 -014f 3f00 orc $AC1.M, $AC0.M -0150 00ff 0012 sr @0x0012, $AC1.M -0152 1470 lsr $ACC0, #-16 -0153 00df 0011 lr $AC1.M, @0x0011 -0155 3f00 orc $AC1.M, $AC0.M -0156 00ff 0011 sr @0x0011, $AC1.M -0158 1fa5 mrr $AC1.L, $IX1 -0159 1501 lsl $ACC1, #1 -015a 1fe6 mrr $AC1.M, $IX2 -015b f100 lsl16 $ACC1 -015c 15f8 asr $ACC1, #-8 -015d f500 lsr16 $ACC1 -015e 1f5f mrr $AX0.H, $AC1.M -015f 1f7d mrr $AX1.H, $AC1.L -0160 8100 clr $ACC0 -0161 00de 0011 lr $AC0.M, @0x0011 -0163 3400 andr $AC0.M, $AX0.H -0164 8900 clr $ACC1 -0165 00df 0012 lr $AC1.M, @0x0012 -0167 3500 andr $AC1.M, $AX0.H -0168 4c00 add $ACC0, $ACC1 -0169 00df 0012 lr $AC1.M, @0x0012 -016b 1578 lsr $ACC1, #-8 -016c 4c00 add $ACC0, $ACC1 -016d 8900 clr $ACC1 -016e 1ffe mrr $AC1.M, $AC0.M -016f 1508 lsl $ACC1, #8 -0170 3b00 orr $AC1.M, $AX1.H -0171 00de 0011 lr $AC0.M, @0x0011 -0173 3e00 orc $AC0.M, $AC1.M -0174 00df 0012 lr $AC1.M, @0x0012 -0176 3b00 orr $AC1.M, $AX1.H -0177 1cbf mrr $IX1, $AC1.M -0178 00da 15f1 lr $AX0.H, @0x15f1 -017a 3500 andr $AC1.M, $AX0.H -017b 0295 0192 jz 0x0192 -if () { - - 017d 00df 10e2 lr $AC1.M, @0x10e2 - 017f 1508 lsl $ACC1, #8 - 0180 1f5f mrr $AX0.H, $AC1.M - 0181 00df 103b lr $AC1.M, @0x103b - 0183 7900 decm $AC1.M - 0184 3900 orr $AC1.M, $AX0.H - 0185 3080 xorc $AC0.M, $AC1.M - 0186 00fe 0022 sr @0x0022, $AC0.M - 0188 00dc 1229 lr $AC0.L, @0x1229 - 018a 00dd 11f8 lr $AC1.L, @0x11f8 - 018c 5c00 sub $ACC0, $ACC1 - 018d f000 lsl16 $ACC0 - 018e 1fe5 mrr $AC1.M, $IX1 - 018f 3080 xorc $AC0.M, $AC1.M - 0190 029f 01a5 jmp 0x01a5 - -} else { - - 0192 00df 10ca lr $AC1.M, @0x10ca - 0194 1508 lsl $ACC1, #8 - 0195 1f5f mrr $AX0.H, $AC1.M - 0196 00df 1043 lr $AC1.M, @0x1043 - 0198 7500 incm $AC1.M - 0199 3900 orr $AC1.M, $AX0.H - 019a 3080 xorc $AC0.M, $AC1.M - 019b 00fe 0022 sr @0x0022, $AC0.M - 019d 00dc 1259 lr $AC0.L, @0x1259 - 019f 00dd 16fe lr $AC1.L, @0x16fe - 01a1 4c00 add $ACC0, $ACC1 - 01a2 f000 lsl16 $ACC0 - 01a3 1fe5 mrr $AC1.M, $IX1 - 01a4 3080 xorc $AC0.M, $AC1.M -} - -01a5 00fe 0023 sr @0x0023, $AC0.M -// this is where result is written to main memory -// dsp mem 0x20-0x23 (8 bytes) are written back, because only values @22 and @23 were modified result is 32bit -01a7 00da 0008 lr $AX0.H, @0x0008 // cpu addr high -01a9 00d8 0009 lr $AX0.L, @0x0009 // cpu addr low -01ab 009b 0020 lri $AX1.H, #0x0020 // dsp addr -01ad 0099 0008 lri $AX1.L, #0x0008 // length -01af 0087 0000 lri $IX3, #0x0000 // there will be no iram dma -01b1 02bf 808b call 0x808b // dram->cpu <<<--- important!! -01b3 02df ret -} - -01b4 0000 nop -01b5 0000 nop -01b6 0000 nop -01b7 0000 nop -01b8 0000 nop -01b9 0000 nop -01ba 0000 nop -01bb 0000 nop -01bc 0000 nop -01bd 0000 nop -01be 0000 nop -01bf 0000 nop +/* +ROM functions used: +0x8000 dsp reset +0x8078 wait for CMBH & 0x8000 +0x807e wait for DMBH & 0x8000 +0x808b dump DRAM/IRAM to mainmem +0x80b5 boot new ucode +0x80bc boot new ucode without ACC clearing by ROM + +For the rest, this ucode is just calling the last few instructions +from huge functions in ROM - some kind of obfuscation? + +0x81f4 + 81f4 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M + 81f5 9909 asr16'ir $ACC1 : $AR1 + 81f6 1b7f srri @$AR3, $AC1.M + 81f7 812b clr's $ACC0 : @$AR3, $AC1.L +0x8458 + 8458 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M + 8459 9900 asr16 $ACC1 + 845a 1b7f srri @$AR3, $AC1.M + 845b 812b clr's $ACC0 : @$AR3, $AC1.L +0x8723 + 8723 3300 xorr $AC1.M, $AX1.H + 8724 1adf srrd @$AR2, $AC1.M +0x8809 + 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L + 880a 1b5f srri @$AR2, $AC1.M +0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +*/ + +0000 0000 nop +0001 0000 nop +0002 0000 nop +0003 0000 nop +0004 0000 nop +0005 0000 nop +0006 0000 nop +0007 0000 nop +0008 0000 nop +0009 0000 nop +000a 0000 nop +000b 0000 nop +000c 0000 nop +000d 0021 halt +000e 02ff rti +000f 0021 halt + +0010 1306 sbset #0x06 +0011 1203 sbclr #0x03 +0012 1204 sbclr #0x04 +0013 1305 sbset #0x05 +0014 0092 00ff lri $CR, #0x00ff +0016 0088 ffff lri $WR0, #0xffff +0018 0089 ffff lri $WR1, #0xffff +001a 008a ffff lri $WR2, #0xffff +001c 008b ffff lri $WR3, #0xffff +001e 8f00 set40 +001f 8b00 m0 +0020 8c00 clr15 +0021 02bf 807e call 0x807e // loop until dsp->cpu mailbox is empty +0023 16fc dcd1 si @DMBH, #0xdcd1 +0025 16fd 0000 si @DMBL, #0x0000 // sendmail 0xdcd10000 +0027 16fb 0001 si @DIRQ, #0x0001 + +// wait for cpu mail == 0xabbaxxxx +0029 02bf 8078 call 0x8078 // wait for cpu mail +002b 24ff lrs $AC0.L, @CMBL +002c 0280 abba cmpi $AC0.M, #0xabba +002e 0294 0029 jnz 0x0029 + +// wait for cpu mail +0030 8e00 set16 +0031 02bf 8078 call 0x8078 + +0033 20ff lrs $AX0.L, @CMBL +0034 0240 0fff andi $AC0.M, #0x0fff +0036 1f5e mrr $AX0.H, $AC0.M +0037 009b 0000 lri $AX1.H, #0x0000 // DSP-dram addr +0039 0099 0020 lri $AX1.L, #0x0020 // length (20 bytes = 10 words, word 9 and 10 are addr where result should DMA'd to in main mem) +003b 0087 0000 lri $IX3, #0x0000 // there will be no ucode/iram upload +003d 0080 0041 lri $AR0, #0x0041 // return addr after dram upload +003f 029f 80bc jmp 0x80bc // DRAM upload !! +// $AX0.H-$AX0.L - CPU(PPC) addr = mail & 0x0fffffff +// upload data from mainmem do dsp dram and jump to 0x41 after that + +0041 02bf 008c call 008c_BigCrazyFunction() // <<------------- main crap is here!!!!!!!!! +0043 02bf 807e call 0x807e // loop until dsp->cpu mailbox is empty + +0045 16fc dcd1 si @DMBH, #0xdcd1 +0047 16fd 0003 si @DMBL, #0x0003 // sendmail 0xdcd10003 (aka... calc is over, result is in main mem now) +0049 16fb 0001 si @DIRQ, #0x0001 +004b 8f00 set40 + +004c 02bf 8078 call 0x8078 +004e 0280 cdd1 cmpi $AC0.M, #0xcdd1 +0050 0294 004c jnz 0x004c + +0052 26ff lrs $AC0.M, @CMBL +0053 0280 0001 cmpi $AC0.M, #0x0001 +0055 0295 005e jz 0x005e // if cpu->dsp mail was 0xcdd10001 -> 005e_PrepareBootUcode() + +0057 0280 0002 cmpi $AC0.M, #0x0002 +0059 0295 8000 jz 0x8000 // if cpu->dsp mail was 0xcdd10002 -> dsp reset ( jmp to irom(0x8000)) + +005b 029f 004c jmp 0x004c // wait for next mail from cpu +005d 0021 halt + +void 005e_PrepareBootUcode() +{ +005e 8e00 set16 +005f 02bf 8078 call 0x8078 // wait for cpu mail +0061 24ff lrs $AC0.L, @CMBL +0062 02bf 8078 call 0x8078 // wait for cpu mail +0064 24ff lrs $AC0.L, @CMBL +0065 02bf 8078 call 0x8078 // wait for cpu mail +0067 24ff lrs $AC0.L, @CMBL +0068 02bf 8078 call 0x8078 // wait for cpu mail +006a 00c5 ffff lr $IX1, @CMBL +006c 0240 0fff andi $AC0.M, #0x0fff +006e 1c9e mrr $IX0, $AC0.M +006f 02bf 8078 call 0x8078 // wait for cpu mail +0071 00c7 ffff lr $IX3, @CMBL +0073 02bf 8078 call 0x8078 // wait for cpu mail +0075 00c6 ffff lr $IX2, @CMBL +0077 02bf 8078 call 0x8078 // wait for cpu mail +0079 00c0 ffff lr $AR0, @CMBL +007b 02bf 8078 call 0x8078 // wait for cpu mail +007d 20ff lrs $AX0.L, @CMBL +007e 0240 0fff andi $AC0.M, #0x0fff +0080 1f5e mrr $AX0.H, $AC0.M +0081 02bf 8078 call 0x8078 // wait for cpu mail +0083 21ff lrs $AX1.L, @CMBL +0084 02bf 8078 call 0x8078 // wait for cpu mail +0086 23ff lrs $AX1.H, @CMBL +0087 1205 sbclr #0x05 +0088 1206 sbclr #0x06 +0089 029f 80b5 jmp 80b5_BootUcode() +008b 0021 halt +} + +// does some crazy stuff with data at dram @0x3/0x5/0x6/0x7 with help of some values from drom :) +// result is @0x22,@0x23 and written back to main memory to dmem-0x08:dmem-0x09 +void 008c_BigCrazyFunction() +{ +008c 8100 clr $ACC0 +008d 0081 0010 lri $AR1, #0x0010 +008f 1020 loopi #0x20 + 0090 1b3e srri @$AR1, $AC0.M +0091 00df 1456 lr $AC1.M, @0x1456 +0093 0340 ffd0 andi $AC1.M, #0xffd0 +0095 8417 clrp'mv : $AX1.L, $AC1.M +0096 0080 0000 lri $AR0, #0x0000 +0098 0086 0000 lri $IX2, #0x0000 +009a 0082 001f lri $AR2, #0x001f +009c 00de 15f6 lr $AC0.M, @0x15f6 +009e 1408 lsl $ACC0, #8 +009f 00df 1766 lr $AC1.M, @0x1766 +00a1 0340 00ff andi $AC1.M, #0x00ff +00a3 1f5f mrr $AX0.H, $AC1.M +00a4 02bf 88e5 call 0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +00a6 1f1c mrr $AX0.L, $AC0.L +00a7 811e clr'mv $ACC0 : $AX1.H, $AC0.M +00a8 191e lrri $AC0.M, @$AR0 +00a9 1478 lsr $ACC0, #-8 +00aa 1ffc mrr $AC1.M, $AC0.L +00ab 1f5e mrr $AX0.H, $AC0.M +00ac 02bf 8809 call 0x8809 + 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L + 880a 1b5f srri @$AR2, $AC1.M +00ae 02bf 8723 call 0x8723 + 8723 3300 xorr $AC1.M, $AX1.H + 8724 1adf srrd @$AR2, $AC1.M +00b0 0006 dar $AR2 +00b1 8106 clr'dr $ACC0 : $AR2 +00b2 00de 166c lr $AC0.M, @0x166c +00b4 1404 lsl $ACC0, #4 +00b5 0240 ff00 andi $AC0.M, #0xff00 +00b7 00df 1231 lr $AC1.M, @0x1231 +00b9 1578 lsr $ACC1, #-8 +00ba 0340 00ff andi $AC1.M, #0x00ff +00bc 1f5f mrr $AX0.H, $AC1.M +00bd 02bf 88e5 call 0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +00bf 1f1c mrr $AX0.L, $AC0.L +00c0 811e clr'mv $ACC0 : $AX1.H, $AC0.M +00c1 191e lrri $AC0.M, @$AR0 +00c2 1478 lsr $ACC0, #-8 +00c3 1ffc mrr $AC1.M, $AC0.L +00c4 1f5e mrr $AX0.H, $AC0.M +00c5 02bf 8809 call 0x8809 + 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L + 880a 1b5f srri @$AR2, $AC1.M +00c7 02bf 8723 call 0x8723 + 8723 3300 xorr $AC1.M, $AX1.H + 8724 1adf srrd @$AR2, $AC1.M +00c9 8100 clr $ACC0 +00ca 8900 clr $ACC1 +00cb 00d1 0005 lr $AC1.H, @0x0005 +00cd 9900 asr16 $ACC1 +00ce 8200 cmp +00cf 0295 00e5 jz 0x00e5 + +00d1 0291 00f3 jl 0x00f3 + +00d3 0082 0010 lri $AR2, #0x0010 +00d5 0086 0001 lri $IX2, #0x0001 +00d7 00d0 171b lr $AC0.H, @0x171b +00d9 9100 asr16 $ACC0 +00da 7d00 neg $ACC1 +00db 4d00 add $ACC1, $ACC0 +00dc 1501 lsl $ACC1, #1 +00dd 1f5f mrr $AX0.H, $AC1.M +00de 00df 0003 lr $AC1.M, @0x0003 +00e0 1504 lsl $ACC1, #4 +00e1 02bf 8809 call 0x8809 + 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L + 880a 1b5f srri @$AR2, $AC1.M +00e3 029f 0102 jmp 0x0102 + +: +00e5 0082 0011 lri $AR2, #0x0011 +00e7 00df 0003 lr $AC1.M, @0x0003 +00e9 1501 lsl $ACC1, #1 +00ea 1f5f mrr $AX0.H, $AC1.M +00eb 00de 1043 lr $AC0.M, @0x1043 +00ed 0240 fff0 andi $AC0.M, #0xfff0 +00ef 02bf 88e5 call 0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +00f1 029f 0102 jmp 0x0102 + +: +00f3 0082 0010 lri $AR2, #0x0010 +00f5 0086 0001 lri $IX2, #0x0001 +00f7 00d0 1285 lr $AC0.H, @0x1285 +00f9 9100 asr16 $ACC0 +00fa 4d00 add $ACC1, $ACC0 +00fb 1501 lsl $ACC1, #1 +00fc 00de 0003 lr $AC0.M, @0x0003 +00fe 1404 lsl $ACC0, #4 +00ff 1f5e mrr $AX0.H, $AC0.M +0100 02bf 8809 call 0x8809 + 8809 392e orr'sn $AC1.M, $AX0.H : @$AR2, $AC1.L + 880a 1b5f srri @$AR2, $AC1.M + +: +0102 0083 0013 lri $AR3, #0x0013 +0104 1b7e srri @$AR3, $AC0.M +0105 8923 clr's $ACC1 : @$AR3, $AC0.L +0106 0083 0013 lri $AR3, #0x0013 +0108 00df 0007 lr $AC1.M, @0x0007 +010a 00de 11b8 lr $AC0.M, @0x11b8 +010c 0240 fff0 andi $AC0.M, #0xfff0 +010e 1f5e mrr $AX0.H, $AC0.M +010f 02bf 81f4 call 0x81f4 + 81f4 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M + 81f5 9909 asr16'ir $ACC1 : $AR1 + 81f6 1b7f srri @$AR3, $AC1.M + 81f7 812b clr's $ACC0 : @$AR3, $AC1.L +0111 f100 lsl16 $ACC1 +0112 02bf 8458 call 0x8458 + 8458 b51e mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M + 8459 9900 asr16 $ACC1 + 845a 1b7f srri @$AR3, $AC1.M + 845b 812b clr's $ACC0 : @$AR3, $AC1.L +0114 8f00 set40 +0115 0082 0015 lri $AR2, #0x0015 +0117 00de 0006 lr $AC0.M, @0x0006 +0119 00da 165b lr $AX0.H, @0x165b +011b 02bf 88e5 call 0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +011d 14fd asr $ACC0, #-3 +011e 1403 lsl $ACC0, #3 +011f 1b5e srri @$AR2, $AC0.M +0120 1b5c srri @$AR2, $AC0.L +0121 0082 0016 lri $AR2, #0x0016 +0123 00de 1723 lr $AC0.M, @0x1723 +0125 14f4 asr $ACC0, #-12 +0126 00da 166b lr $AX0.H, @0x166b +0128 02bf 88e5 call 0x88e5 + 88e5 387a orr'l $AC0.M, $AX0.H : $AC1.M, @$AR2 + 88e6 18dd lrrd $AC1.L, @$AR2 + 88e7 4c05 add'dr $ACC0, $ACC1 : $AR1 + 88e8 1b5e srri @$AR2, $AC0.M + 88e9 1a5c srr @$AR2, $AC0.L +012a b100 tst $ACC0 +012b 0290 012e jge 0x012e + +012d 8100 clr $ACC0 + +: +012e 14fd asr $ACC0, #-3 +012f 8e00 set16 +0130 00df 1491 lr $AC1.M, @0x1491 +0132 0340 d0f0 andi $AC1.M, #0xd0f0 +0134 1cbf mrr $IX1, $AC1.M +0135 00df 1468 lr $AC1.M, @0x1468 +0137 00d1 11fc lr $AC1.H, @0x11fc +0139 157c lsr $ACC1, #-4 +013a 1cdf mrr $IX2, $AC1.M +013b 00d1 11b8 lr $AC1.H, @0x11b8 +013d 9900 asr16 $ACC1 +013e 1418 lsl $ACC0, #24 +013f 1478 lsr $ACC0, #-8 +0140 1f5e mrr $AX0.H, $AC0.M +0141 1ffe mrr $AC1.M, $AC0.M +0142 1f65 mrr $AX1.H, $IX1 +0143 3600 andr $AC0.M, $AX1.H +0144 1402 lsl $ACC0, #2 +0145 1f66 mrr $AX1.H, $IX2 +0146 3700 andr $AC1.M, $AX1.H +0147 1501 lsl $ACC1, #1 +0148 4c00 add $ACC0, $ACC1 +0149 1518 lsl $ACC1, #24 +014a 9900 asr16 $ACC1 +014b 3500 andr $AC1.M, $AX0.H +014c 4c00 add $ACC0, $ACC1 +014d 00df 0012 lr $AC1.M, @0x0012 +014f 3f00 orc $AC1.M, $AC0.M +0150 00ff 0012 sr @0x0012, $AC1.M +0152 1470 lsr $ACC0, #-16 +0153 00df 0011 lr $AC1.M, @0x0011 +0155 3f00 orc $AC1.M, $AC0.M +0156 00ff 0011 sr @0x0011, $AC1.M +0158 1fa5 mrr $AC1.L, $IX1 +0159 1501 lsl $ACC1, #1 +015a 1fe6 mrr $AC1.M, $IX2 +015b f100 lsl16 $ACC1 +015c 15f8 asr $ACC1, #-8 +015d f500 lsr16 $ACC1 +015e 1f5f mrr $AX0.H, $AC1.M +015f 1f7d mrr $AX1.H, $AC1.L +0160 8100 clr $ACC0 +0161 00de 0011 lr $AC0.M, @0x0011 +0163 3400 andr $AC0.M, $AX0.H +0164 8900 clr $ACC1 +0165 00df 0012 lr $AC1.M, @0x0012 +0167 3500 andr $AC1.M, $AX0.H +0168 4c00 add $ACC0, $ACC1 +0169 00df 0012 lr $AC1.M, @0x0012 +016b 1578 lsr $ACC1, #-8 +016c 4c00 add $ACC0, $ACC1 +016d 8900 clr $ACC1 +016e 1ffe mrr $AC1.M, $AC0.M +016f 1508 lsl $ACC1, #8 +0170 3b00 orr $AC1.M, $AX1.H +0171 00de 0011 lr $AC0.M, @0x0011 +0173 3e00 orc $AC0.M, $AC1.M +0174 00df 0012 lr $AC1.M, @0x0012 +0176 3b00 orr $AC1.M, $AX1.H +0177 1cbf mrr $IX1, $AC1.M +0178 00da 15f1 lr $AX0.H, @0x15f1 +017a 3500 andr $AC1.M, $AX0.H +017b 0295 0192 jz 0x0192 +if () { + + 017d 00df 10e2 lr $AC1.M, @0x10e2 + 017f 1508 lsl $ACC1, #8 + 0180 1f5f mrr $AX0.H, $AC1.M + 0181 00df 103b lr $AC1.M, @0x103b + 0183 7900 decm $AC1.M + 0184 3900 orr $AC1.M, $AX0.H + 0185 3080 xorc $AC0.M, $AC1.M + 0186 00fe 0022 sr @0x0022, $AC0.M + 0188 00dc 1229 lr $AC0.L, @0x1229 + 018a 00dd 11f8 lr $AC1.L, @0x11f8 + 018c 5c00 sub $ACC0, $ACC1 + 018d f000 lsl16 $ACC0 + 018e 1fe5 mrr $AC1.M, $IX1 + 018f 3080 xorc $AC0.M, $AC1.M + 0190 029f 01a5 jmp 0x01a5 + +} else { + + 0192 00df 10ca lr $AC1.M, @0x10ca + 0194 1508 lsl $ACC1, #8 + 0195 1f5f mrr $AX0.H, $AC1.M + 0196 00df 1043 lr $AC1.M, @0x1043 + 0198 7500 incm $AC1.M + 0199 3900 orr $AC1.M, $AX0.H + 019a 3080 xorc $AC0.M, $AC1.M + 019b 00fe 0022 sr @0x0022, $AC0.M + 019d 00dc 1259 lr $AC0.L, @0x1259 + 019f 00dd 16fe lr $AC1.L, @0x16fe + 01a1 4c00 add $ACC0, $ACC1 + 01a2 f000 lsl16 $ACC0 + 01a3 1fe5 mrr $AC1.M, $IX1 + 01a4 3080 xorc $AC0.M, $AC1.M +} + +01a5 00fe 0023 sr @0x0023, $AC0.M +// this is where result is written to main memory +// dsp mem 0x20-0x23 (8 bytes) are written back, because only values @22 and @23 were modified result is 32bit +01a7 00da 0008 lr $AX0.H, @0x0008 // cpu addr high +01a9 00d8 0009 lr $AX0.L, @0x0009 // cpu addr low +01ab 009b 0020 lri $AX1.H, #0x0020 // dsp addr +01ad 0099 0008 lri $AX1.L, #0x0008 // length +01af 0087 0000 lri $IX3, #0x0000 // there will be no iram dma +01b1 02bf 808b call 0x808b // dram->cpu <<<--- important!! +01b3 02df ret +} + +01b4 0000 nop +01b5 0000 nop +01b6 0000 nop +01b7 0000 nop +01b8 0000 nop +01b9 0000 nop +01ba 0000 nop +01bb 0000 nop +01bc 0000 nop +01bd 0000 nop +01be 0000 nop +01bf 0000 nop diff --git a/docs/DSP/DSP_UC_6A696CE7.txt b/docs/DSP/DSP_UC_6A696CE7.txt index 09bacfef56..d985232bb7 100644 --- a/docs/DSP/DSP_UC_6A696CE7.txt +++ b/docs/DSP/DSP_UC_6A696CE7.txt @@ -1,3467 +1,3467 @@ -// This document was previously called "DSP_UC_AX1.txt" and "Crazy Taxi.txt" -// CR is set to #FF all the time in this ucode, so srs/lrs always operate on hw registers. - -////////////////////////////////////////////////////////////////////////// -// Known addresses in DRAM -Addr Name Description/Notes - -// Buffers -0x0000 Main Right -0x0140 Main Left -0x0280 -0x0400 -0x0540 -0x0680 -0x07c0 -0x0900 -0x0a40 - -0x03c0 update_block Contains pairs to update current PB with - -0x0b80 pb Current pb, length = 0xc0 - -0x0e04 ms_remaining Milliseconds remaining to process for current voice -0x0e05 pUpdate_block Pointer to update_block -0x0e06 pUpdates_this_ms Pointer to number of updates - -// Pointers to buffers -0x0e08 0x0000 See buffers at 0x0000 -0x0e09 0x0140 -0x0e0a 0x0280 -0x0e0b 0x0400 -0x0e0c 0x0540 -0x0e0d 0x0680 -0x0e0e 0x07c0 -0x0e0f 0x0900 -0x0e10 0x0a40 - -// Func pointers -0x0e14 selectedMixCtrl -0x0e15 selectedSRC -0x0e16 selectedCoef Points into DROM - -// ITD -0x0e40 -0x0e41 -0x0e42 -0x0e43 -////////////////////////////////////////////////////////////////////////// - -// Good ol' exception table -0000 0000 nop -0001 0000 nop // 0 Reset falls through, kinda wierd... -0002 029f 0c10 jmp 0x0c10 // 1 Stack U/O flow -0004 029f 0c1f jmp 0x0c1f // 2 -0006 029f 0c3b jmp 0x0c3b // 3 -0008 029f 0c4a jmp 0x0c4a // 4 ? empty -000a 029f 0c50 jmp 0x0c50 // 5 accelerator address overflow -000c 029f 0c82 jmp 0x0c82 // 6 ? empty -000e 029f 0c88 jmp 0x0c88 // 7 ? empty - -// Entry point -void Task_Init() { - // AX operates in this context all the time - // 0010 1302 sbset #0x02 - // 0011 1303 sbset #0x03 - // 0012 1204 sbclr #0x04 - // 0013 1305 sbset #0x05 - // 0014 1306 sbset #0x06 - // 0015 8e00 set16 - // 0016 8c00 clr15 - // 0017 8b00 m0 - // 0018 0092 00ff lri $CR, #0x00ff - - // 001a 8100 clr $ACC0 - // 001b 8900 clr $ACC1 - // 001c 009e 0e80 lri $AC0.M, #0x0e80 - // 001e 00fe 0e1b sr @0x0e1b, $AC0.M - // 0020 8100 clr $ACC0 - // 0021 00fe 0e31 sr @0x0e31, $AC0.M - ACC0 = ACC1 = 0 - *0x0e1b = 0xe80 // Used in Cmd8 - *0x0e31 = 0 - - // Send DSP_INIT mail - // 0023 16fc dcd1 si @DMBH, #0xdcd1 - // 0025 16fd 0000 si @DMBL, #0x0000 - // 0027 16fb 0001 si @DIRQ, #0x0001 - DMB = 0xdcd10000 - // 0029 26fc lrs $AC0.M, @DMBH - // 002a 02a0 8000 andf $AC0.M, #0x8000 - // 002c 029c 0029 jlnz 0x0029 - while (@DMBH & 0x8000 == 0); - - // 002e 029f 0045 jmp 0x0045 - goto GetNextCmdBlock; -} - -void Task_Resume() { - // Ensure sane context - // 0030 1302 sbset #0x02 - // 0031 1303 sbset #0x03 - // 0032 1204 sbclr #0x04 - // 0033 1305 sbset #0x05 - // 0034 1306 sbset #0x06 - // 0035 8e00 set16 - // 0036 8c00 clr15 - // 0037 8b00 m0 - // 0038 0092 00ff lri $CR, #0x00ff - - // Send DSP_RESUME mail - // 003a 16fc dcd1 si @DMBH, #0xdcd1 - // 003c 16fd 0001 si @DMBL, #0x0001 - // 003e 16fb 0001 si @DIRQ, #0x0001 - DMB = 0xdcd10001 - // 0040 26fc lrs $AC0.M, @DMBH - // 0041 02a0 8000 andf $AC0.M, #0x8000 - // 0043 029c 0040 jlnz 0x0040 - while (@DMBH & 0x8000 == 0); - -GetNextCmdBlock: - 0045 8e00 set16 - 0046 8100 clr $ACC0 - 0047 8900 clr $ACC1 - 0048 009f babe lri $AC1.M, #0xbabe - - // Wait for 0xbabexxxx mail from cpu - do { - // 004a 26fe lrs $AC0.M, @CMBH - // 004b 02c0 8000 andcf $AC0.M, #0x8000 - // 004d 029c 004a jlnz 0x004a - while (@CMBH & 0x8000 == 0); - - // 004f 8200 cmp - // 0050 0294 004a jnz 0x004a - } while (@CMBH != 0xbabe); - - // Save the low 16bits of the mail - // 0052 23ff lrs $AX1.H, @CMBL - u16 length = @CMBL - - // Get next mail - // 0053 8100 clr $ACC0 - // 0054 26fe lrs $AC0.M, @CMBH - // 0055 02c0 8000 andcf $AC0.M, #0x8000 - // 0057 029c 0054 jlnz 0x0054 - while (@CMBH & 0x8000 == 0); - - // 0059 27ff lrs $AC1.M, @CMBL - // 005a 0240 7fff andi $AC0.M, #0x7fff - // 005c 2ece srs @DSMAH, $AC0.M - // 005d 2fcf srs @DSMAL, $AC1.M - // 005e 16cd 0c00 si @DSPA, #0x0c00 - // 0060 8100 clr $ACC0 - // 0061 2ec9 srs @DSCR, $AC0.M - // 0062 1ffb mrr $AC1.M, $AX1.H - // 0063 2fcb srs @DSBL, $AC1.M - // DMA in the CmdBlock - static u16* CmdBlockBuf = 0x0c00 - DSMA = (@CMBH & ~0x8000) << 16 | @CMBL - DSPA = CmdBlockBuf - DSCR = 0 // CPU -> DMEM - DSBL = length - - // 0064 02bf 055c call 0x055c - WaitDMA(); - - // Init the CmdBlock pointer - 0066 0080 0c00 lri $AR0, #0x0c00 - -DoNextCommand: - // 0068 8e00 set16 - // 0069 8100 clr $ACC0 - // 006a 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 006b b100 tst $ACC0 - // 006c 0291 007e jl 0x007e - u16 Cmd = *(CmdBlockBuf++) - if (Cmd < 0) // How could this be possible? 'l is 16bit load... - Die_InvalidCmd(); - - // 006e 0a12 lris $AX0.H, #0x12 - // 006f c100 cmpar $ACC0, $AX0.H - // 0070 0292 007e jg 0x007e - if (Cmd > 0x12) - Die_InvalidCmd(); - - // 0072 009f 0aff lri $AC1.M, #0x0aff - // 0074 4c00 add $ACC0, $ACC1 - // 0075 1c7e mrr $AR3, $AC0.M - // 0076 0213 ilrr $AC0.M, @$AR3 - // 0077 1c7e mrr $AR3, $AC0.M - // 0078 176f jmpr $AR3 - switch (Cmd) { - case 0: Cmd_0(); break; // 0082 - case 1: Cmd_1(); break; // 013e - case 2: Cmd_2(); break; // 01bc - case 3: Cmd_3(); break; // 0248 - case 4: Cmd_4(); break; // 0413 - case 5: Cmd_5(); break; // 0427 - case 6: Cmd_6(); break; // 0165 - case 7: Cmd_7(); break; // 0574 - case 8: Cmd_8(); break; // 0b37 - case 9: Cmd_9(); break; // 015f - case 0xa: Cmd_a(); break; // 0478 - case 0xb: Cmd_b(); break; // 0474 - case 0xc: Cmd_c(); break; // 0476 - case 0xd: Cmd_d(); break; // 01a9 - case 0xe: Cmd_e(); break; // 043b - case 0xf: Cmd_f(); break; // 047a - case 0x10: Cmd_10(); break; // 0bb1 - case 0x11: Cmd_11(); break; // 0175 - } - - // Somehow we've passed the cmd proccessor; DIE!! - // 0079 16fc fbad si @DMBH, #0xfbad - // 007b 16fd 8080 si @DMBL, #0x8080 - DMB = 0xfbad8080 - 007d 0021 halt -} - -// Die and conveniently tell the cpu which cmd was baad -void Die_InvalidCmd() { - 007e 16fc baad si @DMBH, #0xbaad - 0080 2efd srs @DMBL, $AC0.M - 0081 0021 halt -} - -// Executes the same operation 3 times on buffers: (0, 0x0400, 0x07c0) -void Cmd_0() { - // 0082 8100 clr $ACC0 - // 0083 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 0084 8e78 set16'l : $AC1.M, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 0085 2ece srs @DSMAH, $AC0.M - // 0086 2fcf srs @DSMAL, $AC1.M - // 0087 009e 0e44 lri $AC0.M, #0x0e44 - // 0089 2ecd srs @DSPA, $AC0.M - // 008a 0e00 lris $AC0.M, #0x00 - // 008b 2ec9 srs @DSCR, $AC0.M - // 008c 009e 0040 lri $AC0.M, #0x0040 - // 008e 2ecb srs @DSBL, $AC0.M - - // DMA 0x0040bytes to DRAM @ 0x0e44 from CPU @ maddr - - 008f 0081 0e44 lri $AR1, #0x0e44 // source - 0091 0082 0000 lri $AR2, #0x0000 // destination - - 0093 009b 009f lri $AX1.H, #0x009f - 0095 009a 0140 lri $AX0.H, #0x0140 // loop length if !ACC0 - - 0097 8100 clr $ACC0 - 0098 8900 clr $ACC1 - - 0099 8f00 set40 - - // 009a 02bf 055c call 0x055c - WaitDMA(); - - 009c 193e lrri $AC0.M, @$AR1 - 009d 193c lrri $AC0.L, @$AR1 - 009e b100 tst $ACC0 - 009f 193f lrri $AC1.M, @$AR1 // added to ACC0 in confusing ways - // 00a0 0294 00a6 jnz 0x00a6 - if (!$ACC0) { - 00a2 005a loop $AX0.H - 00a3 1b5e srri @$AR2, $AC0.M - - // 00a4 029f 00ae jmp 0x00ae - } else { - 00a6 9900 asr16 $ACC1 - 00a7 1b5e srri @$AR2, $AC0.M - 00a8 1b5c srri @$AR2, $AC0.L - 00a9 007b 00ad bloop $AX1.H, 0x00ad - 00ab 4c00 add $ACC0, $ACC1 - 00ac 1b5e srri @$AR2, $AC0.M - 00ad 1b5c srri @$AR2, $AC0.L - - } - - // same code block as above...epic fail? - 00ae 193e lrri $AC0.M, @$AR1 - 00af 193c lrri $AC0.L, @$AR1 - 00b0 b100 tst $ACC0 - 00b1 193f lrri $AC1.M, @$AR1 - // 00b2 0294 00b8 jnz 0x00b8 - if (!$ACC0) { - 00b4 005a loop $AX0.H - 00b5 1b5e srri @$AR2, $AC0.M - - // 00b6 029f 00c0 jmp 0x00c0 - } else { - 00b8 9900 asr16 $ACC1 - 00b9 1b5e srri @$AR2, $AC0.M - 00ba 1b5c srri @$AR2, $AC0.L - 00bb 007b 00bf bloop $AX1.H, 0x00bf - 00bd 4c00 add $ACC0, $ACC1 - 00be 1b5e srri @$AR2, $AC0.M - 00bf 1b5c srri @$AR2, $AC0.L - - } - - // ...and again! wtf - 00c0 193e lrri $AC0.M, @$AR1 - 00c1 193c lrri $AC0.L, @$AR1 - 00c2 b100 tst $ACC0 - 00c3 193f lrri $AC1.M, @$AR1 - // 00c4 0294 00ca jnz 0x00ca - if (!$ACC0) { - 00c6 005a loop $AX0.H - 00c7 1b5e srri @$AR2, $AC0.M - - // 00c8 029f 00d2 jmp 0x00d2 - } else { - 00ca 9900 asr16 $ACC1 - 00cb 1b5e srri @$AR2, $AC0.M - 00cc 1b5c srri @$AR2, $AC0.L - 00cd 007b 00d1 bloop $AX1.H, 0x00d1 - 00cf 4c00 add $ACC0, $ACC1 - 00d0 1b5e srri @$AR2, $AC0.M - 00d1 1b5c srri @$AR2, $AC0.L - - } - - // set to next buffer - 00d2 0082 0400 lri $AR2, #0x0400 - - // same code block, uses tst'l in one place...otherwise the same - 00d4 193e lrri $AC0.M, @$AR1 - 00d5 193c lrri $AC0.L, @$AR1 - 00d6 b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 00d7 0294 00dd jnz 0x00dd - if (!$ACC0) { - 00d9 005a loop $AX0.H - 00da 1b5e srri @$AR2, $AC0.M - // 00db 029f 00e5 jmp 0x00e5 - } else { - 00dd 9900 asr16 $ACC1 - 00de 1b5e srri @$AR2, $AC0.M - 00df 1b5c srri @$AR2, $AC0.L - 00e0 007b 00e4 bloop $AX1.H, 0x00e4 - 00e2 4c00 add $ACC0, $ACC1 - 00e3 1b5e srri @$AR2, $AC0.M - 00e4 1b5c srri @$AR2, $AC0.L - } - - // same code block, using tst'l again...wonder if it actually changes behavior? - 00e5 193e lrri $AC0.M, @$AR1 - 00e6 193c lrri $AC0.L, @$AR1 - 00e7 b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 00e8 0294 00ee jnz 0x00ee - if (!$ACC0) { - 00ea 005a loop $AX0.H - 00eb 1b5e srri @$AR2, $AC0.M - // 00ec 029f 00f6 jmp 0x00f6 - } else { - 00ee 9900 asr16 $ACC1 - 00ef 1b5e srri @$AR2, $AC0.M - 00f0 1b5c srri @$AR2, $AC0.L - 00f1 007b 00f5 bloop $AX1.H, 0x00f5 - 00f3 4c00 add $ACC0, $ACC1 - 00f4 1b5e srri @$AR2, $AC0.M - 00f5 1b5c srri @$AR2, $AC0.L - } - - // see comments above - 00f6 193e lrri $AC0.M, @$AR1 - 00f7 193c lrri $AC0.L, @$AR1 - 00f8 b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 00f9 0294 00ff jnz 0x00ff - if (!$ACC0) { - 00fb 005a loop $AX0.H - 00fc 1b5e srri @$AR2, $AC0.M - // 00fd 029f 0107 jmp 0x0107 - } else { - 00ff 9900 asr16 $ACC1 - 0100 1b5e srri @$AR2, $AC0.M - 0101 1b5c srri @$AR2, $AC0.L - 0102 007b 0106 bloop $AX1.H, 0x0106 - 0104 4c00 add $ACC0, $ACC1 - 0105 1b5e srri @$AR2, $AC0.M - 0106 1b5c srri @$AR2, $AC0.L - } - - // set to next buffer - 0107 0082 07c0 lri $AR2, #0x07c0 - - // see comments above - 0109 193e lrri $AC0.M, @$AR1 - 010a 193c lrri $AC0.L, @$AR1 - 010b b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 010c 0294 0112 jnz 0x0112 - if (!$ACC0) { - 010e 005a loop $AX0.H - 010f 1b5e srri @$AR2, $AC0.M - // 0110 029f 011a jmp 0x011a - } else { - 0112 9900 asr16 $ACC1 - 0113 1b5e srri @$AR2, $AC0.M - 0114 1b5c srri @$AR2, $AC0.L - 0115 007b 0119 bloop $AX1.H, 0x0119 - 0117 4c00 add $ACC0, $ACC1 - 0118 1b5e srri @$AR2, $AC0.M - 0119 1b5c srri @$AR2, $AC0.L - } - - // see comments above - 011a 193e lrri $AC0.M, @$AR1 - 011b 193c lrri $AC0.L, @$AR1 - 011c b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 011d 0294 0123 jnz 0x0123 - if (!$ACC0) { - 011f 005a loop $AX0.H - 0120 1b5e srri @$AR2, $AC0.M - // 0121 029f 012b jmp 0x012b - } else { - 0123 9900 asr16 $ACC1 - 0124 1b5e srri @$AR2, $AC0.M - 0125 1b5c srri @$AR2, $AC0.L - 0126 007b 012a bloop $AX1.H, 0x012a - 0128 4c00 add $ACC0, $ACC1 - 0129 1b5e srri @$AR2, $AC0.M - 012a 1b5c srri @$AR2, $AC0.L - } - - // see comments above - 012b 193e lrri $AC0.M, @$AR1 - 012c 193c lrri $AC0.L, @$AR1 - 012d b179 tst'l $ACC0 : $AC1.M, @$AR1 - // 012e 0294 0134 jnz 0x0134 - if (!$ACC0) { - 0130 005a loop $AX0.H - 0131 1b5e srri @$AR2, $AC0.M - // 0132 029f 013c jmp 0x013c - } else { - 0134 9900 asr16 $ACC1 - 0135 1b5e srri @$AR2, $AC0.M - 0136 1b5c srri @$AR2, $AC0.L - 0137 007b 013b bloop $AX1.H, 0x013b - 0139 4c00 add $ACC0, $ACC1 - 013a 1b5e srri @$AR2, $AC0.M - 013b 1b5c srri @$AR2, $AC0.L - } - - // 013c 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_1() { - 013e 0085 ffff lri $IX1, #0xffff // -1 - - // 0140 8150 clr'l $ACC0 : $AX0.H, @$AR0 - // 0141 8940 clr'l $ACC1 : $AX0.L, @$AR0 - // 0142 8e48 set16'l : $AX1.L, @$AR0 - // 0143 00fa 0e17 sr @0x0e17, $AX0.H - // 0145 00f8 0e18 sr @0x0e18, $AX0.L - // 0147 0081 0000 lri $AR1, #0x0000 - // 0149 02bf 04f1 call 0x04f1 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - u16 unkForMulBuffer1 = *(CmdBlockBuf++) - u16 unkForMulBuffer2 = 0 // a buffer in dram - Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) - - // 014b 00da 0e17 lr $AX0.H, @0x0e17 - // 014d 00d8 0e18 lr $AX0.L, @0x0e18 - // 014f 8948 clr'l $ACC1 : $AX1.L, @$AR0 - // 0150 0081 0400 lri $AR1, #0x0400 - // 0152 02bf 04f1 call 0x04f1 - unkForMulBuffer1 = *(CmdBlockBuf++) - unkForMulBuffer2 = 0x0400 - Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) - - // 0154 00da 0e17 lr $AX0.H, @0x0e17 - // 0156 00d8 0e18 lr $AX0.L, @0x0e18 - // 0158 8948 clr'l $ACC1 : $AX1.L, @$AR0 - // 0159 0081 07c0 lri $AR1, #0x07c0 - // 015b 02bf 04f1 call 0x04f1 - unkForMulBuffer1 = *(CmdBlockBuf++) - unkForMulBuffer2 = 0x07c0 - Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) - - // 015d 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_9() { - 015f 0086 07c0 lri $IX2, #0x07c0 // often used buffer in dram - - 0161 02bf 0484 call 0x0484 - - // 0163 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_6() { - 0165 8100 clr $ACC0 - 0166 8e00 set16 - - // 0167 191e lrri $AC0.M, @$AR0 - // 0168 191c lrri $AC0.L, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 0169 2ece srs @DSMAH, $AC0.M - // 016a 2ccf srs @DSMAL, $AC0.L - // 016b 16cd 0000 si @DSPA, #0x0000 - // 016d 16c9 0001 si @DSCR, #0x0001 - // 016f 16cb 0780 si @DSBL, #0x0780 - - // DMA 0x780bytes to CPU @ maddr from DMEM @ 0 - - // 0171 02bf 055c call 0x055c - WaitDMA(); - - // 0173 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_11() { - // 0175 8100 clr $ACC0 - // 0176 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 0177 8e60 set16'l : $AC0.L, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 0178 2ece srs @DSMAH, $AC0.M - // 0179 2ccf srs @DSMAL, $AC0.L - // 017a 16cd 0e44 si @DSPA, #0x0e44 - // 017c 16c9 0000 si @DSCR, #0x0000 - // 017e 8900 clr $ACC1 - // 017f 0d20 lris $AC1.L, #0x20 - // 0180 2dcb srs @DSBL, $AC1.L - - // DMA 0x20bytes to DRAM @ 0x0e44 from CPU @ maddr - - u16 length_of_0e44 = 0x20 - - // 0181 4c00 add $ACC0, $ACC1 - maddr += length_of_0e44 - - // Save CmdBlockBuf - // 0182 1c80 mrr $IX0, $AR0 - - // 0183 0080 0280 lri $AR0, #0x0280 - // 0185 0081 0000 lri $AR1, #0x0000 - // 0187 0082 0140 lri $AR2, #0x0140 - // 0189 0083 0e44 lri $AR3, #0x0e44 - // 018b 0a00 lris $AX0.H, #0x00 - - // 018c 27c9 lrs $AC1.M, @DSCR - // 018d 03a0 0004 andf $AC1.M, #0x0004 - // 018f 029c 018c jlnz 0x018c - while (@DSCR & 4); - - // 0191 2ece srs @DSMAH, $AC0.M - // 0192 2ccf srs @DSMAL, $AC0.L - // 0193 16cd 0e54 si @DSPA, #0x0e54 - // 0195 16c9 0000 si @DSCR, #0x0000 - // 0197 16cb 0260 si @DSBL, #0x0260 - - // DMA 0x0260bytes to DRAM @ 0x0e54 from CPU @ maddr - - // 0199 009f 00a0 lri $AC1.M, #0x00a0 - // 019b 8f00 set40 - // 019c 007f 01a5 bloop $AC1.M, 0x01a5 - // 019e 197e lrri $AC0.M, @$AR3 - // 019f 1b1a srri @$AR0, $AX0.H - // 01a0 197c lrri $AC0.L, @$AR3 - // 01a1 1b1a srri @$AR0, $AX0.H - // 01a2 1b5e srri @$AR2, $AC0.M - // 01a3 7c22 neg's $ACC0 : @$AR2, $AC0.L - // 01a4 1b3e srri @$AR1, $AC0.M - // 01a5 1b3c srri @$AR1, $AC0.L - - // high reg will only be sign bits, and it's never stored, so we can use s32 here - s32* buffer_source = 0x0e44 - s32* buffer_dest = 0x0140 - s32* buffer_to_zero = 0x0280 - s32* buffer_dest_neg = 0x0000 - for (i = 0x00a0; i > 0; i--) { - s32 thing = *(buffer_source++) - *(buffer_to_zero++) = 0 - *(buffer_dest++) = thing - *(buffer_dest_neg++) = ~thing - } - - // Restore CmdBlockBuf - 01a6 1c04 mrr $AR0, $IX0 - - // 01a7 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -// Interesting, DMAs in new CmdBlock and starts executing it -void Cmd_D() { - // 01a9 8e70 set16'l : $AC0.M, @$AR0 - // 01aa 8960 clr'l $ACC1 : $AC0.L, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 01ab 191f lrri $AC1.M, @$AR0 - u16 numbytes = *(CmdBlockBuf++) - - // 01ac 2ece srs @DSMAH, $AC0.M - // 01ad 2ccf srs @DSMAL, $AC0.L - // 01ae 16cd 0c00 si @DSPA, #0x0c00 - // 01b0 16c9 0000 si @DSCR, #0x0000 - // 01b2 0503 addis $AC1.M, #0x03 - // 01b3 0340 fff0 andi $AC1.M, #0xfff0 - // 01b5 2fcb srs @DSBL, $AC1.M - - // DMA ((numbytes + 3) & 0xfff0)bytes to DMEM @ 0x0c00 from CPU @ maddr - - // 01b6 02bf 055c call 0x055c - WaitDMA(); - - // 01b8 0080 0c00 lri $AR0, #0x0c00 - CmdBlockBuf = 0x0c00 - - // 01ba 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -// DMAs in a new PB and inits values (itd, func pointers, etc) -// DMAs in new update_block, but doesn't apply it -void Cmd_2() { - 01bc 8100 clr $ACC0 - - // 01bd 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 01be 8e78 set16'l : $AC1.M, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 01bf 2ece srs @DSMAH, $AC0.M - // 01c0 2fcf srs @DSMAL, $AC1.M - // 01c1 16cd 0b80 si @DSPA, #0x0b80 - // 01c3 16c9 0000 si @DSCR, #0x0000 - // 01c5 16cb 00c0 si @DSBL, #0x00c0 - - // DMA 0x00c0bytes to DMEM @ 0x0b80 from CPU @ maddr - - // 01c7 0082 0e08 lri $AR2, #0x0e08 - // 01c9 009f 0000 lri $AC1.M, #0x0000 - // 01cb 1b5f srri @$AR2, $AC1.M - // 01cc 009f 0140 lri $AC1.M, #0x0140 - // 01ce 1b5f srri @$AR2, $AC1.M - // 01cf 009f 0280 lri $AC1.M, #0x0280 - // 01d1 1b5f srri @$AR2, $AC1.M - // 01d2 009f 0400 lri $AC1.M, #0x0400 - // 01d4 1b5f srri @$AR2, $AC1.M - // 01d5 009f 0540 lri $AC1.M, #0x0540 - // 01d7 1b5f srri @$AR2, $AC1.M - // 01d8 009f 0680 lri $AC1.M, #0x0680 - // 01da 1b5f srri @$AR2, $AC1.M - // 01db 009f 07c0 lri $AC1.M, #0x07c0 - // 01dd 1b5f srri @$AR2, $AC1.M - // 01de 009f 0900 lri $AC1.M, #0x0900 - // 01e0 1b5f srri @$AR2, $AC1.M - // 01e1 009f 0a40 lri $AC1.M, #0x0a40 - // 01e3 1b5f srri @$AR2, $AC1.M - *0x0e08 = 0x0000 - *0x0e09 = 0x0140 - *0x0e0a = 0x0280 - *0x0e0b = 0x0400 - *0x0e0c = 0x0540 - *0x0e0d = 0x0680 - *0x0e0e = 0x07c0 - *0x0e0f = 0x0900 - *0x0e10 = 0x0a40 - - // 01e4 02bf 055c call 0x055c - WaitDMA(); - - // 01e6 00de 0ba7 lr $AC0.M, @0x0ba7 - // 01e8 00df 0ba8 lr $AC1.M, @0x0ba8 - // 01ea 2ece srs @DSMAH, $AC0.M - // 01eb 2fcf srs @DSMAL, $AC1.M - // 01ec 16cd 03c0 si @DSPA, #0x03c0 - // 01ee 16c9 0000 si @DSCR, #0x0000 - // 01f0 16cb 0080 si @DSBL, #0x0080 - - // DMA 0x80bytes from CPU @ ((pb.update.dataHi << 16) | pb.update.dataLo) to DRAM @ 0x03c0 - - // 01f2 8100 clr $ACC0 - // 01f3 8900 clr $ACC1 - - // 01f4 00de 0b84 lr $AC0.M, @0x0b84 - // 01f6 009f 0b31 lri $AC1.M, #0x0b31 - // 01f8 4c00 add $ACC0, $ACC1 - // 01f9 1c7e mrr $AR3, $AC0.M - // 01fa 0213 ilrr $AC0.M, @$AR3 - // 01fb 00fe 0e15 sr @0x0e15, $AC0.M - *0x0e15 = *(0x0b31 + pb.srcSelect) // func ptr for src - - // 01fd 00de 0b85 lr $AC0.M, @0x0b85 - // 01ff 009f 0b34 lri $AC1.M, #0x0b34 - // 0201 4c00 add $ACC0, $ACC1 - // 0202 1c7e mrr $AR3, $AC0.M - // 0203 0213 ilrr $AC0.M, @$AR3 - // 0204 00fe 0e16 sr @0x0e16, $AC0.M - *0x0e16 = *(0x0b34 + pb.coefSelect) // ptr to coef table - - // 0206 00de 0b86 lr $AC0.M, @0x0b86 - // 0208 009f 0b11 lri $AC1.M, #0x0b11 - // 020a 4c00 add $ACC0, $ACC1 - // 020b 1c7e mrr $AR3, $AC0.M - // 020c 0213 ilrr $AC0.M, @$AR3 - // 020d 00fe 0e14 sr @0x0e14, $AC0.M - *0x0e14 = *(0x0b11 + pb.mixerCtrl) // func ptr for mixer - - // 020f 8100 clr $ACC0 - // 0210 00de 0b9b lr $AC0.M, @0x0b9b - // 0212 b100 tst $ACC0 - // 0213 0295 023a jz 0x023a - if (pb.itd.flag != AX_PB_ITD_OFF) { - // 0215 8900 clr $ACC1 - // 0216 00df 0b9e lr $AC1.M, @0x0b9e - // 0218 0300 0cc0 addi $AC1.M, #0x0cc0 - // 021a 00ff 0e40 sr @0x0e40, $AC1.M - *0x0e40 = 0x0cc0 + pb.itd.shiftL - - // 021c 00df 0b9f lr $AC1.M, @0x0b9f - // 021e 0300 0cc0 addi $AC1.M, #0x0cc0 - // 0220 00ff 0e41 sr @0x0e41, $AC1.M - *0x0e41 = 0x0cc0 + pb.itd.shiftR - - // 0222 009f 0ce0 lri $AC1.M, #0x0ce0 - // 0224 00ff 0e42 sr @0x0e42, $AC1.M - // 0226 00ff 0e43 sr @0x0e43, $AC1.M - *0x0e42 = 0x0ce0 - *0x0e43 = 0x0ce0 - - // 0228 02bf 055c call 0x055c - WaitDMA(); - - // 022a 00de 0b9c lr $AC0.M, @0x0b9c - // 022c 2ece srs @DSMAH, $AC0.M - // 022d 00de 0b9d lr $AC0.M, @0x0b9d - // 022f 2ecf srs @DSMAL, $AC0.M - // 0230 16cd 0cc0 si @DSPA, #0x0cc0 - // 0232 16c9 0000 si @DSCR, #0x0000 - // 0234 16cb 0040 si @DSBL, #0x0040 - - // DMA 0x0040bytes to DMEM @ 0x0cc0 from CPU @ (pb.itd.bufferHi << 16) | pb.itd.bufferLo - - // 0236 02bf 055c call 0x055c - WaitDMA(); - - // 0238 029f 0068 jmp 0x0068 - goto DoNextCommand; - - } else { - - // 023a 009f 0ce0 lri $AC1.M, #0x0ce0 - // 023c 00ff 0e42 sr @0x0e42, $AC1.M - // 023e 00ff 0e40 sr @0x0e40, $AC1.M - // 0240 00ff 0e41 sr @0x0e41, $AC1.M - // 0242 00ff 0e43 sr @0x0e43, $AC1.M - *0x0e42 = 0x0ce0 - *0x0e40 = 0x0ce0 - *0x0e41 = 0x0ce0 - *0x0e43 = 0x0ce0 - - // 0244 02bf 055c call 0x055c - WaitDMA(); - - // 0246 029f 0068 jmp 0x0068 - goto DoNextCommand; - } -} - -// Function calls itself until there are no more linked PBs -void Cmd_3() { - 0248 8e00 set16 - - // Save CmdBlockBuf ptr - 0249 00e0 0e07 sr @0x0e07, $AR0 - - // Processes pb.update.updNum[0] to pb.update.updNum[5] - // Applies specified number of updates for every millisecond of voice frame (5 millisecs) - // first millisec's updates are ignored <- not proven, yet - - // 024b 0080 0ba2 lri $AR0, #0x0ba2 // pb.update.updNum[0] - // 024d 0081 03c0 lri $AR1, #0x03c0 - // 024f 0e05 lris $AC0.M, #0x05 - // 0250 00fe 0e04 sr @0x0e04, $AC0.M // counter to decrement - // 0252 8900 clr $ACC1 - u16* pUpdates_this_ms = 0x0ba2 - u16* pUpdate_block = 0x03c0 - u16 ms_remaining = 5 - -NextMillisecUpd: - // 0253 8150 clr'l $ACC0 : $AX0.H, @$AR0 - // 0254 009f 0b80 lri $AC1.M, #0x0b80 - // 0256 007a 025b bloop $AX0.H, 0x025b - // 0258 193e lrri $AC0.M, @$AR1 - // 0259 4c49 add'l $ACC0, $ACC1 : $AX1.L, @$AR1 - // 025a 1c5e mrr $AR2, $AC0.M - // 025b 1a59 srr @$AR2, $AX1.L // AR2 isn't changed till updates are done - - // Write updates from update_block to pb in dram - for (int i = 0; i < *pUpdates_this_ms; i+=2) { - // Looks like 0x03c0 is a struct of pairs to write into PB - *(0x0b80 + *(pUpdate_block + i)) = *(pUpdate_block + i + 1) - } - pUpdates_this_ms++ - - // 025c 0083 0e05 lri $AR3, #0x0e05 - // 025e 1b61 srri @$AR3, $AR1 - // 025f 1b60 srri @$AR3, $AR0 - *0x0e05 = pUpdate_block - *0x0e06 = pUpdates_this_ms - // They are restored before jmping back to NextMillisecUpd - - // 0260 00de 0b87 lr $AC0.M, @0x0b87 - // 0262 0601 cmpis $AC0.M, #0x01 - // 0263 0295 0267 jz 0x0267 - // 0265 029f 0332 jmp 0x0332 - if (pb.state == AX_PB_STATE_RUN) { - - // 0267 00de 0e42 lr $AC0.M, @0x0e42 - // 0269 00fe 0e1c sr @0x0e1c, $AC0.M - *0x0e1c = *0x0e42 - - // 026b 00c3 0e15 lr $AR3, @0x0e15 - // 026d 177f callr $AR3 - DoSelectedSRC() - - // Volume Envelope Processing - // 026e 8e00 set16 - // 026f 8a00 m2 - // 0270 8100 clr $ACC0 - // 0271 8900 clr $ACC1 - // 0272 00de 0bb3 lr $AC0.M, @0x0bb3 // currentDelta (s16) - // 0274 00df 0bb2 lr $AC1.M, @0x0bb2 // currentVolume (u16) - // 0276 1f1f mrr $AX0.L, $AC1.M - // 0277 4d00 add $ACC1, $ACC0 - // 0278 1481 asl $ACC0, #1 - // 0279 8d1e set15'mv : $AX1.H, $AC0.M // unsigned mulx, - // 027a 1fd8 mrr $AC0.M, $AX0.L - // 027b 0098 8000 lri $AX0.L, #0x8000 - // 027d 0080 0e44 lri $AR0, #0x0e44 - // 027f a830 mulx's $AX0.L, $AX1.H : @$AR0, $AC0.M - // 0280 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0281 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0282 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0283 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0284 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0285 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0286 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0287 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0288 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0289 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 028a ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 028b ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 028c ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 028d ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 028e ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 028f ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0290 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0291 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0292 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0293 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0294 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0295 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0296 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0297 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 0298 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 0299 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 029a ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 029b ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 029c ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 029d ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - // 029e ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - // 029f 00fe 0bb2 sr @0x0bb2, $AC0.M - - u40 temp1 = pb.ve.currentVolume << 16 - u40 temp2 = (pb.ve.currentVolume + pb.ve.currentDelta) << 16 - *0x0e44 = temp1 >> 16 - *0x0e45 = temp2 >> 16 - - u40 PROD = (u16)0x8000 * (u16)(pb.ve.currentDelta << 1) * 2 - for (u16* i = 0x0e46; i < 0x0e46 + 30; i+=2) { - temp1 += PROD - temp2 += PROD - - *i = temp1 >> 16 - *(i + 1) = temp2 >> 16 - } - temp1 += PROD - pb.ve.currentVolume = temp1 >> 16 - - // 02a1 8f00 set40 - // 02a2 0080 0e44 lri $AR0, #0x0e44 - // 02a4 00c1 0e43 lr $AR1, @0x0e43 - // 02a6 1c61 mrr $AR3, $AR1 - // 02a7 193a lrri $AX0.H, @$AR1 - // 02a8 1918 lrri $AX0.L, @$AR0 - // 02a9 9059 mul'l $AX0.L, $AX0.H : $AX1.H, @$AR1 - // 02aa 1919 lrri $AX1.L, @$AR0 - // 02ab 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02ac 8080 nx'ls : $AX0.L, $AC0.M - // 02ad 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02ae 8091 nx'ls : $AX1.L, $AC1.M - // 02af 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02b0 8080 nx'ls : $AX0.L, $AC0.M - // 02b1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02b2 8091 nx'ls : $AX1.L, $AC1.M - // 02b3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02b4 8080 nx'ls : $AX0.L, $AC0.M - // 02b5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02b6 8091 nx'ls : $AX1.L, $AC1.M - // 02b7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02b8 8080 nx'ls : $AX0.L, $AC0.M - // 02b9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02ba 8091 nx'ls : $AX1.L, $AC1.M - // 02bb 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02bc 8080 nx'ls : $AX0.L, $AC0.M - // 02bd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02be 8091 nx'ls : $AX1.L, $AC1.M - // 02bf 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02c0 8080 nx'ls : $AX0.L, $AC0.M - // 02c1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02c2 8091 nx'ls : $AX1.L, $AC1.M - // 02c3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02c4 8080 nx'ls : $AX0.L, $AC0.M - // 02c5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02c6 8091 nx'ls : $AX1.L, $AC1.M - // 02c7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02c8 8080 nx'ls : $AX0.L, $AC0.M - // 02c9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02ca 8091 nx'ls : $AX1.L, $AC1.M - // 02cb 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02cc 8080 nx'ls : $AX0.L, $AC0.M - // 02cd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02ce 8091 nx'ls : $AX1.L, $AC1.M - // 02cf 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02d0 8080 nx'ls : $AX0.L, $AC0.M - // 02d1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02d2 8091 nx'ls : $AX1.L, $AC1.M - // 02d3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02d4 8080 nx'ls : $AX0.L, $AC0.M - // 02d5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02d6 8091 nx'ls : $AX1.L, $AC1.M - // 02d7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02d8 8080 nx'ls : $AX0.L, $AC0.M - // 02d9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02da 8091 nx'ls : $AX1.L, $AC1.M - // 02db 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02dc 8080 nx'ls : $AX0.L, $AC0.M - // 02dd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02de 8091 nx'ls : $AX1.L, $AC1.M - // 02df 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02e0 8080 nx'ls : $AX0.L, $AC0.M - // 02e1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02e2 8091 nx'ls : $AX1.L, $AC1.M - // 02e3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 - // 02e4 8080 nx'ls : $AX0.L, $AC0.M - // 02e5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 - // 02e6 8091 nx'ls : $AX1.L, $AC1.M - // 02e7 9e00 mulmv $AX1.L, $AX1.H, $ACC0 - // 02e8 6f33 movp's $ACC1 : @$AR3, $AC0.M - // 02e9 1b7f srri @$AR3, $AC1.M - - u16* dst = *0x0e43 - u16* temp1 = 0x0e44 - - for (x = 0; x < 0x20; x++) { - *(dst + x) = ((u16)*(temp1 + x) * (u16)*(dst + x) * 2) >> 16 - } - - // 02ea 00c3 0e14 lr $AR3, @0x0e14 - // 02ec 8f00 set40 - // 02ed 8d00 set15 - // 02ee 8a00 m2 - // 02ef 177f callr $AR3 - // Keep in mind: 40bit, unsigned, *2 - DoSelectedMixer() - - // Note: 40bit, unsigned, *2 not changed till 0x0332 - - // 02f0 8100 clr $ACC0 - // 02f1 00de 0b9b lr $AC0.M, @0x0b9b - // 02f3 b100 tst $ACC0 - // 02f4 0295 032a jz 0x032a - if (pb.itd.flag != AX_PB_ITD_OFF) { - // 02f6 00de 0e42 lr $AC0.M, @0x0e42 - // 02f8 00fe 0e43 sr @0x0e43, $AC0.M - *0x0e43 = *0x0e42 - - // 02fa 8100 clr $ACC0 - // 02fb 8900 clr $ACC1 - // 02fc 00de 0b9e lr $AC0.M, @0x0b9e - // 02fe 00df 0ba0 lr $AC1.M, @0x0ba0 - // 0300 8200 cmp - // 0301 0293 0306 jle 0x0306 - if (pb.itd.shiftL > pb.itd.targetShiftL) { - // 0303 7800 decm $AC0.M - // 0304 029f 0309 jmp 0x0309 - pb.itd.shiftL-- - } else if (pb.itd.shiftL < pb.itd.targetShiftL) { - // 0306 0295 0309 jz 0x0309 - // 0308 7400 incm $AC0.M - pb.itd.shiftL++ - } - // 0309 00fe 0b9e sr @0x0b9e, $AC0.M // Store pb.itd.shiftL - - // 030b 00df 0e43 lr $AC1.M, @0x0e43 - // 030d 05e0 addis $AC1.M, #0xe0 - // 030e 4c00 add $ACC0, $ACC1 - // 030f 00fe 0e40 sr @0x0e40, $AC0.M - *0x0e40 = *0x0e43 - 32 - - // 0311 8100 clr $ACC0 - // 0312 8900 clr $ACC1 - // 0313 00de 0b9f lr $AC0.M, @0x0b9f - // 0315 00df 0ba1 lr $AC1.M, @0x0ba1 - // 0317 8200 cmp - // 0318 0293 031d jle 0x031d - if (pb.itd.shiftR > pb.itd.targetShiftR) { - // 031a 7800 decm $AC0.M - // 031b 029f 0320 jmp 0x0320 - pb.itd.shiftR-- - } else if (pb.itd.shiftR < pb.itd.targetShiftR) { - // 031d 0295 0320 jz 0x0320 - // 031f 7400 incm $AC0.M - pb.itd.shiftR++ - } - // 0320 00fe 0b9f sr @0x0b9f, $AC0.M // Store pb.itd.shiftR - - // 0322 00df 0e43 lr $AC1.M, @0x0e43 - // 0324 05e0 addis $AC1.M, #0xe0 - // 0325 4c00 add $ACC0, $ACC1 - // 0326 00fe 0e41 sr @0x0e41, $AC0.M - *0x0e41 = *0x0e43 - 32 - - 0328 029f 0332 jmp 0x0332 - - } else { // pb.itd.flag == AX_PB_ITD_OFF - - // 032a 00de 0e42 lr $AC0.M, @0x0e42 - // 032c 00fe 0e40 sr @0x0e40, $AC0.M - // 032e 00fe 0e41 sr @0x0e41, $AC0.M - // 0330 00fe 0e43 sr @0x0e43, $AC0.M - *0x0e40 = *0x0e42 - *0x0e41 = *0x0e42 - *0x0e43 = *0x0e42 - } - } - - - // 0332 8100 clr $ACC0 - // 0333 8e00 set16 - // 0334 8400 clrp - // 0335 8900 clr $ACC1 - // 0336 1efe mrr $PROD.M2, $AC0.M - // 0337 0e40 lris $AC0.M, #0x40 - // 0338 1ebe mrr $PROD.M1, $AC0.M - // 0339 0083 0e08 lri $AR3, #0x0e08 - // 033b 1c03 mrr $AR0, $AR3 - // 033c 1ff5 mrr $AC1.M, $PROD.M1 - // 033d 191a lrri $AX0.H, @$AR0 - // 033e f858 addpaxz'l $ACC0, $AX0.H : $AX1.H, @$AR0 - // 033f fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M - // 0340 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M - // 0341 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M - // 0342 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M - // 0343 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M - // 0344 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M - // 0345 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M - // 0346 f83b addpaxz's $ACC0, $AX0.H : @$AR3, $AC1.M - // 0347 1b7e srri @$AR3, $AC0.M - - for (u16* i = 0x0e08; i <= 0x0e10; i++) { - *i = (u16)( (0xff00400000 + (u40)(*i << 16)) >> 16 ) - } - - // 0348 0083 0e04 lri $AR3, #0x0e04 - // 034a 8100 clr $ACC0 - // 034b 8973 clr'l $ACC1 : $AC0.M, @$AR3 - // 034c 1961 lrri $AR1, @$AR3 // 0x0e05 - // 034d 1960 lrri $AR0, @$AR3 // 0x0e06 - // 034e 7800 decm $AC0.M - // 034f 00fe 0e04 sr @0x0e04, $AC0.M - // 0351 0294 0253 jnz 0x0253 - ms_remaining-- - if (ms_remaining) - goto NextMillisecUpd - - // 0353 8e00 set16 - // 0354 8100 clr $ACC0 - // 0355 00de 0b9b lr $AC0.M, @0x0b9b - // 0357 b100 tst $ACC0 - // 0358 0295 036a jz 0x036a - if (pb.itd.flag != AX_PB_ITD_OFF) { - - // 035a 00de 0b9c lr $AC0.M, @0x0b9c - // 035c 00dc 0b9d lr $AC0.L, @0x0b9d - // 035e 2ece srs @DSMAH, $AC0.M - // 035f 2ccf srs @DSMAL, $AC0.L - // 0360 8100 clr $ACC0 - // 0361 00de 0e1c lr $AC0.M, @0x0e1c - // 0363 2ecd srs @DSPA, $AC0.M - // 0364 16c9 0001 si @DSCR, #0x0001 - // 0366 16cb 0040 si @DSBL, #0x0040 - - // DMA 0x40bytes from DRAM @ (*0x0e1c) to CPU @ ((pb.itd.bufferHi << 16) | pb.itd.bufferLo) - - // 0368 02bf 055c call 0x055c - WaitDMA(); - } - - // 036a 8100 clr $ACC0 - // 036b 8900 clr $ACC1 - // 036c 00de 0b82 lr $AC0.M, @0x0b82 - // 036e 00df 0b83 lr $AC1.M, @0x0b83 - u16 maddrh = pb.currHi - u16 maddrl = pb.currLo - - // This writes back the whole PB to mram from dsp - // 0370 2ece srs @DSMAH, $AC0.M - // 0371 2fcf srs @DSMAL, $AC1.M - // 0372 16cd 0b80 si @DSPA, #0x0b80 - // 0374 16c9 0001 si @DSCR, #0x0001 - // 0376 16cb 00c0 si @DSBL, #0x00c0 - - // DMA 0xc0bytes from DRAM @ 0x0b80 to CPU @ maddr - - // 0378 02bf 055c call 0x055c - WaitDMA(); - - // 037a 8100 clr $ACC0 - // 037b 00de 0b80 lr $AC0.M, @0x0b80 - // 037d 00dc 0b81 lr $AC0.L, @0x0b81 - // 037f b100 tst $ACC0 - // 0380 0294 0386 jnz 0x0386 - if (((pb.nextHi << 16) | pb.nextLo) == 0) { - // No more PBs! - - // Restore CmdBlockBuf ptr - 0382 00c0 0e07 lr $AR0, @0x0e07 - // 0384 029f 0068 jmp 0x0068 - goto DoNextCommand; - } - - // DMA in the next PB - // From here on out, it's the same as Cmd2, except it calls itself to process the PB it just loaded - - // 0386 2ece srs @DSMAH, $AC0.M - // 0387 2ccf srs @DSMAL, $AC0.L - // 0388 16cd 0b80 si @DSPA, #0x0b80 - // 038a 16c9 0000 si @DSCR, #0x0000 - // 038c 16cb 00c0 si @DSBL, #0x00c0 - - // DMA 0xc0bytes from CPU @ ((pb.nextHi << 16) | pb.nextLo) to DRAM @ 0x0b80 - - // 038e 0082 0e08 lri $AR2, #0x0e08 - // 0390 009f 0000 lri $AC1.M, #0x0000 - // 0392 1b5f srri @$AR2, $AC1.M - // 0393 009f 0140 lri $AC1.M, #0x0140 - // 0395 1b5f srri @$AR2, $AC1.M - // 0396 009f 0280 lri $AC1.M, #0x0280 - // 0398 1b5f srri @$AR2, $AC1.M - // 0399 009f 0400 lri $AC1.M, #0x0400 - // 039b 1b5f srri @$AR2, $AC1.M - // 039c 009f 0540 lri $AC1.M, #0x0540 - // 039e 1b5f srri @$AR2, $AC1.M - // 039f 009f 0680 lri $AC1.M, #0x0680 - // 03a1 1b5f srri @$AR2, $AC1.M - // 03a2 009f 07c0 lri $AC1.M, #0x07c0 - // 03a4 1b5f srri @$AR2, $AC1.M - // 03a5 009f 0900 lri $AC1.M, #0x0900 - // 03a7 1b5f srri @$AR2, $AC1.M - // 03a8 009f 0a40 lri $AC1.M, #0x0a40 - // 03aa 1b5f srri @$AR2, $AC1.M - *0x0e08 = 0x0000 - *0x0e09 = 0x0140 - *0x0e0a = 0x0280 - *0x0e0b = 0x0400 - *0x0e0c = 0x0540 - *0x0e0d = 0x0680 - *0x0e0e = 0x07c0 - *0x0e0f = 0x0900 - *0x0e10 = 0x0a40 - - // 03ab 02bf 055c call 0x055c - WaitDMA(); - - // 03ad 00de 0ba7 lr $AC0.M, @0x0ba7 - // 03af 00df 0ba8 lr $AC1.M, @0x0ba8 - // 03b1 2ece srs @DSMAH, $AC0.M - // 03b2 2fcf srs @DSMAL, $AC1.M - // 03b3 16cd 03c0 si @DSPA, #0x03c0 - // 03b5 16c9 0000 si @DSCR, #0x0000 - // 03b7 16cb 0080 si @DSBL, #0x0080 - - // DMA 0x80bytes from CPU @ ((pb.update.dataHi << 16) | pb.update.dataLo) to DRAM @ 0x03c0 - - // 03b9 8100 clr $ACC0 - // 03ba 8900 clr $ACC1 - - // 03bb 00de 0b84 lr $AC0.M, @0x0b84 - // 03bd 009f 0b31 lri $AC1.M, #0x0b31 - // 03bf 4c00 add $ACC0, $ACC1 - // 03c0 1c7e mrr $AR3, $AC0.M - // 03c1 0213 ilrr $AC0.M, @$AR3 - // 03c2 00fe 0e15 sr @0x0e15, $AC0.M - *0x0e15 = *(0x0b31 + pb.srcSelect) // func ptr for src - - // 03c4 00de 0b85 lr $AC0.M, @0x0b85 - // 03c6 009f 0b34 lri $AC1.M, #0x0b34 - // 03c8 4c00 add $ACC0, $ACC1 - // 03c9 1c7e mrr $AR3, $AC0.M - // 03ca 0213 ilrr $AC0.M, @$AR3 - // 03cb 00fe 0e16 sr @0x0e16, $AC0.M - *0x0e16 = *(0x0b34 + pb.coefSelect) // ptr to coef table - - // 03cd 00de 0b86 lr $AC0.M, @0x0b86 - // 03cf 009f 0b11 lri $AC1.M, #0x0b11 - // 03d1 4c00 add $ACC0, $ACC1 - // 03d2 1c7e mrr $AR3, $AC0.M - // 03d3 0213 ilrr $AC0.M, @$AR3 - // 03d4 00fe 0e14 sr @0x0e14, $AC0.M - *0x0e14 = *(0x0b11 + pb.mixerCtrl) // func ptr for mixer - - // 03d6 8100 clr $ACC0 - // 03d7 00de 0b9b lr $AC0.M, @0x0b9b - // 03d9 b100 tst $ACC0 - // 03da 0295 0403 jz 0x0403 - if (pb.itd.flag != AX_PB_ITD_OFF) { - // 03dc 8900 clr $ACC1 - // 03dd 00df 0b9e lr $AC1.M, @0x0b9e - // 03df 0300 0cc0 addi $AC1.M, #0x0cc0 - // 03e1 00ff 0e40 sr @0x0e40, $AC1.M - *0x0e40 = 0x0cc0 + pb.itd.shiftL - - // 03e3 00df 0b9f lr $AC1.M, @0x0b9f - // 03e5 0300 0cc0 addi $AC1.M, #0x0cc0 - // 03e7 00ff 0e41 sr @0x0e41, $AC1.M - *0x0e41 = 0x0cc0 + pb.itd.shiftR - - // 03e9 009f 0ce0 lri $AC1.M, #0x0ce0 - // 03eb 00ff 0e42 sr @0x0e42, $AC1.M - // 03ed 00ff 0e43 sr @0x0e43, $AC1.M - *0x0e42 = 0x0ce0 - *0x0e43 = 0x0ce0 - - // 03ef 02bf 055c call 0x055c - WaitDMA(); - - // 03f1 00de 0b9c lr $AC0.M, @0x0b9c - // 03f3 2ece srs @DSMAH, $AC0.M - // 03f4 00de 0b9d lr $AC0.M, @0x0b9d - // 03f6 2ecf srs @DSMAL, $AC0.M - // 03f7 16cd 0cc0 si @DSPA, #0x0cc0 - // 03f9 16c9 0000 si @DSCR, #0x0000 - // 03fb 16cb 0040 si @DSBL, #0x0040 - - // DMA 0x0040bytes to DMEM @ 0x0cc0 from CPU @ (pb.itd.bufferHi << 16) | pb.itd.bufferLo - - // 03fd 02bf 055c call 0x055c - WaitDMA(); - - // Restore CmdBlockBuf ptr - 03ff 00c0 0e07 lr $AR0, @0x0e07 - // 0401 029f 0248 jmp 0x0248 - goto Cmd_3() // Calls itself till there are no more PBs linked - - } else { - - // 0403 009f 0ce0 lri $AC1.M, #0x0ce0 - // 0405 00ff 0e42 sr @0x0e42, $AC1.M - // 0407 00ff 0e40 sr @0x0e40, $AC1.M - // 0409 00ff 0e41 sr @0x0e41, $AC1.M - // 040b 00ff 0e43 sr @0x0e43, $AC1.M - *0x0e42 = 0x0ce0 - *0x0e40 = 0x0ce0 - *0x0e41 = 0x0ce0 - *0x0e43 = 0x0ce0 - - // 040d 02bf 055c call 0x055c - WaitDMA(); - - // Restore CmdBlockBuf ptr - 040f 00c0 0e07 lr $AR0, @0x0e07 - // 0411 029f 0248 jmp 0x0248 - goto Cmd_3() // Calls itself till there are no more PBs linked - } -} - -void Cmd_4() { - 0413 8e00 set16 - - 0414 0086 0400 lri $IX2, #0x0400 // buffer in dram - - // 0416 8100 clr $ACC0 - // 0417 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 0418 191c lrri $AC0.L, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 0419 2ece srs @DSMAH, $AC0.M - // 041a 2ccf srs @DSMAL, $AC0.L - // 041b 1fc6 mrr $AC0.M, $IX2 - // 041c 2ecd srs @DSPA, $AC0.M - // 041d 16c9 0001 si @DSCR, #0x0001 - // 041f 16cb 0780 si @DSBL, #0x0780 - - // DMA 0x0780bytes from DRAM @ 0x0400 to CPU @ maddr - - // 0421 02bf 055c call 0x055c - WaitDMA(); - - 0423 02bf 0484 call 0x0484 - - // 0425 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_5() { - 0427 8e00 set16 - - 0428 0086 07c0 lri $IX2, #0x07c0 - - 042a 8100 clr $ACC0 - 042b 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 042c 191c lrri $AC0.L, @$AR0 - 042d 2ece srs @DSMAH, $AC0.M - 042e 2ccf srs @DSMAL, $AC0.L - 042f 1fc6 mrr $AC0.M, $IX2 - 0430 2ecd srs @DSPA, $AC0.M - 0431 16c9 0001 si @DSCR, #0x0001 - 0433 16cb 0780 si @DSBL, #0x0780 - - // 0435 02bf 055c call 0x055c - WaitDMA(); - - 0437 02bf 0484 call 0x0484 - - // 0439 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_E() { - 043b 8c00 clr15 - 043c 8a00 m2 - 043d 8100 clr $ACC0 - 043e 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 043f 191f lrri $AC1.M, @$AR0 - 0440 2ece srs @DSMAH, $AC0.M - 0441 2fcf srs @DSMAL, $AC1.M - 0442 16cd 0280 si @DSPA, #0x0280 - 0444 16c9 0001 si @DSCR, #0x0001 // DMEM -> CPU - 0446 16cb 0280 si @DSBL, #0x0280 - - 0448 8f50 set40'l : $AX0.H, @$AR0 - 0449 8140 clr'l $ACC0 : $AX0.L, @$AR0 - 044a 0081 0400 lri $AR1, #0x0400 - 044c 0083 0000 lri $AR3, #0x0000 - 044e 0082 0140 lri $AR2, #0x0140 - 0450 0099 0080 lri $AX1.L, #0x0080 - - // 0452 02bf 055c call 0x055c - WaitDMA(); - - 0454 1105 046c bloopi #0x05, 0x046c - 0456 1f61 mrr $AX1.H, $AR1 - - 0457 1120 045e bloopi #0x20, 0x045e - 0459 8972 clr'l $ACC1 : $AC0.M, @$AR2 - 045a 195c lrri $AC0.L, @$AR2 - 045b f07b lsl16'l $ACC0 : $AC1.M, @$AR3 - 045c 197d lrri $AC1.L, @$AR3 - 045d f131 lsl16's $ACC1 : @$AR1, $AC0.M - 045e 8139 clr's $ACC0 : @$AR1, $AC1.M - - 045f 8900 clr $ACC1 - 0460 6800 movax $ACC0, $AX0 - 0461 2ece srs @DSMAH, $AC0.M - 0462 2ccf srs @DSMAL, $AC0.L - 0463 1ffb mrr $AC1.M, $AX1.H - 0464 2fcd srs @DSPA, $AC1.M - 0465 0f01 lris $AC1.M, #0x01 - 0466 2fc9 srs @DSCR, $AC1.M - 0467 1ff9 mrr $AC1.M, $AX1.L - 0468 2fcb srs @DSBL, $AC1.M - 0469 7200 addaxl $ACC0, $AX1.L - 046a 1f5e mrr $AX0.H, $AC0.M - 046b 1f1c mrr $AX0.L, $AC0.L - 046c 8100 clr $ACC0 - - // 046d 26c9 lrs $AC0.M, @DSCR - // 046e 02a0 0004 andf $AC0.M, #0x0004 - // 0470 029c 046d jlnz 0x046d - while (@DSCR & 4); - - // 0472 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void UnimplimentedCmd_B() { - // 0474 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void UnimplimentedCmd_C() { - // 0476 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void UnimplimentedCmd_A() { - // 0478 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Task_Yield() { - // Send DSP_YIELD mail - // 047a 16fc dcd1 si @DMBH, #0xdcd1 - // 047c 16fd 0002 si @DMBL, #0x0002 - DMB = 0xdcd10002 - // 047e 16fb 0001 si @DIRQ, #0x0001 - - 0480 029f 0c91 jmp 0x0c91 -} - - // Unused? - // 0482 029f 0045 jmp 0x0045 - goto GetNextCmdBlock; - -// Called by cmds 4 5 9 -// IX2 is always modified before calling... -void UnkFunc() { - 0484 8e00 set16 - 0485 191f lrri $AC1.M, @$AR0 - 0486 191d lrri $AC1.L, @$AR0 - 0487 1f5f mrr $AX0.H, $AC1.M - 0488 1f1d mrr $AX0.L, $AC1.L - 0489 2fce srs @DSMAH, $AC1.M - 048a 2dcf srs @DSMAL, $AC1.L - 048b 8900 clr $ACC1 - 048c 1fa6 mrr $AC1.L, $IX2 - 048d 2dcd srs @DSPA, $AC1.L - 048e 0e00 lris $AC0.M, #0x00 - 048f 2ec9 srs @DSCR, $AC0.M - 0490 8100 clr $ACC0 - 0491 009c 00c0 lri $AC0.L, #0x00c0 - 0493 2ccb srs @DSBL, $AC0.L - 0494 1ca0 mrr $IX1, $AR0 - 0495 0081 0e44 lri $AR1, #0x0e44 - 0497 4800 addax $ACC0, $AX0 - 0498 1b3e srri @$AR1, $AC0.M - 0499 1b3c srri @$AR1, $AC0.L - 049a 0b00 lris $AX1.H, #0x00 - 049b 0099 0060 lri $AX1.L, #0x0060 - 049d 4b00 addax $ACC1, $AX1 - 049e 1b3d srri @$AR1, $AC1.L - 049f 0081 0e44 lri $AR1, #0x0e44 - 04a1 1c06 mrr $AR0, $IX2 - 04a2 0083 0000 lri $AR3, #0x0000 - 04a4 1c43 mrr $AR2, $AR3 - - 04a5 27c9 lrs $AC1.M, @DSCR - 04a6 03a0 0004 andf $AC1.M, #0x0004 - 04a8 029c 04a5 jlnz 0x04a5 - - 04aa 1109 04da bloopi #0x09, 0x04da - 04ac 8e00 set16 - 04ad 193a lrri $AX0.H, @$AR1 - 04ae 1938 lrri $AX0.L, @$AR1 - 04af 6900 movax $ACC1, $AX0 - 04b0 2fce srs @DSMAH, $AC1.M - 04b1 2dcf srs @DSMAL, $AC1.L - 04b2 8900 clr $ACC1 - 04b3 193d lrri $AC1.L, @$AR1 - 04b4 2dcd srs @DSPA, $AC1.L - 04b5 16c9 0000 si @DSCR, #0x0000 - 04b7 8100 clr $ACC0 - 04b8 009c 00c0 lri $AC0.L, #0x00c0 - 04ba 2ccb srs @DSBL, $AC0.L - 04bb 0081 0e44 lri $AR1, #0x0e44 - 04bd 4800 addax $ACC0, $AX0 - 04be 1b3e srri @$AR1, $AC0.M - 04bf 1b3c srri @$AR1, $AC0.L - 04c0 0b00 lris $AX1.H, #0x00 - 04c1 0960 lris $AX1.L, #0x60 - 04c2 4b00 addax $ACC1, $AX1 - 04c3 1b3d srri @$AR1, $AC1.L - 04c4 0081 0e44 lri $AR1, #0x0e44 - 04c6 8f00 set40 - 04c7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04c8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04c9 6a00 movax $ACC0, $AX1 - 04ca 4800 addax $ACC0, $AX0 - 04cb 1117 04d4 bloopi #0x17, 0x04d4 - 04cd 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04ce 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04cf 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 04d0 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 04d1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04d2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04d3 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M - 04d4 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 04d5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04d6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04d7 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 04d8 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 04d9 1b5f srri @$AR2, $AC1.M - 04da 1b5d srri @$AR2, $AC1.L - - 04db 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04dc 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04dd 6a00 movax $ACC0, $AX1 - 04de 4800 addax $ACC0, $AX0 - - 04df 1117 04e8 bloopi #0x17, 0x04e8 - 04e1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04e2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04e3 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 04e4 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 04e5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04e6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04e7 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M - 04e8 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - - 04e9 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 04ea 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 04eb 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 04ec 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 04ed 1b5f srri @$AR2, $AC1.M - 04ee 1b5d srri @$AR2, $AC1.L - 04ef 1c05 mrr $AR0, $IX1 - 04f0 02df ret -} - -// Only called by Command 1 -// AX0 = maddr -// AX1.L = unkForMulBuffer1 -// AR1 = unkForMulBuffer2 -void Unk(maddr, unkForMulBuffer1, unkForMulBuffer2) { - 04f1 8e00 set16 - - // 04f2 009b 0e44 lri $AX1.H, #0x0e44 - // 04f4 009d 00c0 lri $AC1.L, #0x00c0 - // 04f6 02bf 0541 call 0x0541 - u16 daddr = 0x0e44 - const u16 dma_len = 0x00c0 - DMA_CPUToDMEM(maddr, daddr, dma_len); - - // 04f8 4900 addax $ACC1, $AX0 - // 04f9 00ff 0e1d sr @0x0e1d, $AC1.M - // 04fb 00fd 0e1e sr @0x0e1e, $AC1.L - // 04fd 8900 clr $ACC1 - maddr += dma_len - - // 04fe 02bf 055c call 0x055c - WaitDMA(); - - // 0500 1104 052c bloopi #0x04, 0x052c - for (u8 i = 0; i < 4; i++) { - // 0502 00da 0e1d lr $AX0.H, @0x0e1d // restore - // 0504 00d8 0e1e lr $AX0.L, @0x0e1e // restore - // 0506 009b 0ea4 lri $AX1.H, #0x0ea4 // buffer 2 - // 0508 009d 00c0 lri $AC1.L, #0x00c0 // restore - // 050a 02bf 0541 call 0x0541 - daddr = 0x0ea4 - DMA_CPUToDMEM(maddr, daddr, dma_len); - - // 050c 4900 addax $ACC1, $AX0 - // 050d 00ff 0e1d sr @0x0e1d, $AC1.M // update - // 050f 00fd 0e1e sr @0x0e1e, $AC1.L - maddr += dma_len - - // 0511 0083 0e44 lri $AR3, #0x0e44 - // 0513 02bf 054c call 0x054c - UnknownMulBuffer(0x0e44); - - // 0515 8900 clr $ACC1 - // 0516 00da 0e1d lr $AX0.H, @0x0e1d // restore - // 0518 00d8 0e1e lr $AX0.L, @0x0e1e // restore - // 051a 009b 0e44 lri $AX1.H, #0x0e44 // buffer 1 - // 051c 009d 00c0 lri $AC1.L, #0x00c0 // restore - // 051e 02bf 0541 call 0x0541 - daddr = 0x0e44 - DMA_CPUToDMEM(maddr, daddr, dma_len); - - // 0520 4900 addax $ACC1, $AX0 - // 0521 00ff 0e1d sr @0x0e1d, $AC1.M // update - // 0523 00fd 0e1e sr @0x0e1e, $AC1.L - maddr += dma_len - - // 0525 0083 0ea4 lri $AR3, #0x0ea4 // buffer 2 - // 0527 02bf 054c call 0x054c - UnknownMulBuffer(0x0ea4); - - // 0529 0000 nop - // 052a 0000 nop - // 052b 8e00 set16 // restore - // 052c 8900 clr $ACC1 - } - - // 052d 00da 0e1d lr $AX0.H, @0x0e1d // restore - // 052f 00d8 0e1e lr $AX0.L, @0x0e1e // restore - // 0531 009b 0ea4 lri $AX1.H, #0x0ea4 // buffer 2 - // 0533 009d 00c0 lri $AC1.L, #0x00c0 // restore - // 0535 02bf 0541 call 0x0541 - DMA_CPUToDMEM(maddr, daddr, dma_len); - - // 0537 4900 addax $ACC1, $AX0 - maddr += dma_len - - // 0538 0083 0e44 lri $AR3, #0x0e44 // buffer 1 - // 053a 02bf 054c call 0x054c - UnknownMulBuffer(0x0e44); - - // 053c 0083 0ea4 lri $AR3, #0x0ea4 // buffer 2 - // 053e 02bf 054c call 0x054c - UnknownMulBuffer(0x0ea4); - - 0540 02df ret -} - -// u32 maddr = AX0 -// u16 daddr = AX1.H -// u16 len = AC1.L -// Only transfers from CPU -> DMEM -void DMA_CPUToDMEM() { - 0541 8e00 set16 - 0542 00fa ffce sr @DSMAH, $AX0.H - 0544 00f8 ffcf sr @DSMAL, $AX0.L - 0546 00fb ffcd sr @DSPA, $AX1.H - 0548 16c9 0000 si @DSCR, #0x0000 - 054a 2dcb srs @DSBL, $AC1.L - 054b 02df ret -} - -// IX1 = 0xffff -// AX1.L = unkForMulBuffer1 (next value in cmd block) -// AR1 = unkForMulBuffer2 (0, 0x0400, then 0x07c0) -// AR3 is some buffer, either 0x0e44 or 0x0ea4 -void UnknownMulBuffer() { - 054c 8f00 set40 // Loaded ACx.M values extend to the entire ACC - 054d 8d00 set15 // multiplicands unsigned - 054e 8a00 m2 // mul results doubled - - // 054f 197a lrri $AX0.H, @$AR3 - // 0550 1978 lrri $AX0.L, @$AR3 - AX0.H = *(AR3++) - AX0.L = *(AR3++) - - // 0551 a000 mulx $AX0.L, $AX1.L - // 0552 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - ACC0 = (u16)AX0.L * (u16)unkForMulBuffer1 * 2 - PROD = (u16)AX0.H * (u16)unkForMulBuffer1 * 2 - - // 0553 1130 055a bloopi #0x30, 0x055a - for (int i=0; i<48; i++) { - // 0555 9179 asr16'l $ACC0 : $AC1.M, @$AR1 - ACC0 >>= 16 - AC1.M = *(unkForMulBuffer2++) - - // 0556 4e6d addp'ln $ACC0 : $AC1.L, @$AR1 - ACC0 += PROD - AC1.L = *unkForMulBuffer2 - unkForMulBuffer2 -= 1 - - // 0557 197a lrri $AX0.H, @$AR3 - AX0.H = *(AR3++) - - // 0558 4d43 add'l $ACC1, $ACC0 : $AX0.L, @$AR3 - ACC1 += ACC0 - AX0.L = *(AR3++) - - // 0559 a039 mulx's $AX0.L, $AX1.L : @$AR1, $AC1.M - // 055a b629 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR1, $AC1.L - ACC0 = (u16)AX0.L * (u16)unkForMulBuffer1 * 2 - *(unkForMulBuffer2++) = AC1.M - PROD = (u16)AX0.H * (u16)unkForMulBuffer1 * 2 - *(unkForMulBuffer2++) = AC1.L - } - - 055b 02df ret -} - -void WaitDMA() { - // 055c 26c9 lrs $AC0.M, @DSCR - // 055d 02a0 0004 andf $AC0.M, #0x0004 - // 055f 029c 055c jlnz 0x055c - while (@DSCR & 4); - - // 0561 02df ret - return; -} - -// All apparently unused? -void WaitForCPUMailbox() { - 0562 26fe lrs $AC0.M, @CMBH - 0563 02c0 8000 andcf $AC0.M, #0x8000 - 0565 029c 0562 jlnz 0x0562 - 0567 02df ret -} -void WaitForDSPMailbox1() { - 0568 26fc lrs $AC0.M, @DMBH - 0569 02a0 8000 andf $AC0.M, #0x8000 - 056b 029c 0568 jlnz 0x0568 - 056d 02df ret -} -void WaitForDSPMailbox2() { - 056e 26fc lrs $AC0.M, @DMBH - 056f 02a0 8000 andf $AC0.M, #0x8000 - 0571 029c 056e jlnz 0x056e - 0573 02df ret -} - -void Cmd_7() { - // 0574 8100 clr $ACC0 - // 0575 8970 clr'l $ACC1 : $AC0.M, @$AR0 - // 0576 8e60 set16'l : $AC0.L, @$AR0 - u16 maddrh = *(CmdBlockBuf++) - u16 maddrl = *(CmdBlockBuf++) - - // 0577 2ece srs @DSMAH, $AC0.M - // 0578 2ccf srs @DSMAL, $AC0.L - // 0579 16cd 0e44 si @DSPA, #0x0e44 - // 057b 16c9 0000 si @DSCR, #0x0000 - // 057d 8900 clr $ACC1 - // 057e 0d20 lris $AC1.L, #0x20 - u16 dma_len = 32 - - // 057f 2dcb srs @DSBL, $AC1.L - // DMA 32bytes from CPU @ maddr -> DMEM @ 0x0e44 - - // 0580 4c00 add $ACC0, $ACC1 - maddr += dma_len - - // Push CmdBlockBuf ptr - 0581 1c80 mrr $IX0, $AR0 - - // 0582 0080 0280 lri $AR0, #0x0280 - // 0584 0081 0000 lri $AR1, #0x0000 - // 0586 0082 0140 lri $AR2, #0x0140 - // 0588 0083 0e44 lri $AR3, #0x0e44 - u16* unk_buf1 = 0x0280 - u16* unk_buf2 = 0x0000 - u16* unk_buf3 = 0x0140 - u16* dmem_buf = 0x0e44 - - // 058a 0a00 lris $AX0.H, #0x00 - const u16 null = 0 // Guess is that it's faster to use AXx instead of imm value? - - // 058b 27c9 lrs $AC1.M, @DSCR - // 058c 03a0 0004 andf $AC1.M, #0x0004 - // 058e 029c 058b jlnz 0x058b - while (@DSCR & 4); // Wait for DMA completion - - // 0590 2ece srs @DSMAH, $AC0.M - // 0591 2ccf srs @DSMAL, $AC0.L - // 0592 16cd 0e54 si @DSPA, #0x0e54 - // 0594 16c9 0000 si @DSCR, #0x0000 - // 0596 16cb 0260 si @DSBL, #0x0260 - - // DMA 0x0260bytes from CPU @ maddr -> DMEM @ 0x0e54 - // No waiting for DMA - - // 0598 009f 00a0 lri $AC1.M, #0x00a0 - u16 size = 0x00a0 - - // accum loads in the loop are 40bit - // 059a 8f00 set40 - - // 059b 007f 05a4 bloop $AC1.M, 0x05a4 - for (int i = 0; i < size; i++) { - // !!! Doesn't make sense with current understanding of set40 - 059d 197e lrri $AC0.M, @$AR3 - 059e 1b1a srri @$AR0, $AX0.H - 059f 197c lrri $AC0.L, @$AR3 - 05a0 1b1a srri @$AR0, $AX0.H - 05a1 1b5e srri @$AR2, $AC0.M - 05a2 1b5c srri @$AR2, $AC0.L - 05a3 1b3e srri @$AR1, $AC0.M - 05a4 1b3c srri @$AR1, $AC0.L - } - - // Pop CmdBlockBuf ptr - 05a5 1c04 mrr $AR0, $IX0 - - // 05a6 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -# Following 3 funcs are the SRCs to select from, in order - -void SRC_Polyphase() { - // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs - // 05a8 0082 0bb8 lri $AR2, #0x0bb8 - // 05aa 195e lrri $AC0.M, @$AR2 - // 05ab 2ed1 srs @SampleFormat, $AC0.M - // 05ac 195e lrri $AC0.M, @$AR2 - // 05ad 2ed4 srs @ACSAH, $AC0.M - // 05ae 195e lrri $AC0.M, @$AR2 - // 05af 2ed5 srs @ACSAL, $AC0.M - // 05b0 195e lrri $AC0.M, @$AR2 - // 05b1 2ed6 srs @ACEAH, $AC0.M - // 05b2 195e lrri $AC0.M, @$AR2 - // 05b3 2ed7 srs @ACEAL, $AC0.M - // 05b4 195e lrri $AC0.M, @$AR2 - // 05b5 2ed8 srs @ACCAH, $AC0.M - // 05b6 195e lrri $AC0.M, @$AR2 - // 05b7 2ed9 srs @ACCAL, $AC0.M - // 05b8 195e lrri $AC0.M, @$AR2 - // 05b9 2ea0 srs @COEF_A1_0, $AC0.M - // 05ba 195e lrri $AC0.M, @$AR2 - // 05bb 2ea1 srs @COEF_A2_0, $AC0.M - // 05bc 195e lrri $AC0.M, @$AR2 - // 05bd 2ea2 srs @COEF_A1_1, $AC0.M - // 05be 195e lrri $AC0.M, @$AR2 - // 05bf 2ea3 srs @COEF_A2_1, $AC0.M - // 05c0 195e lrri $AC0.M, @$AR2 - // 05c1 2ea4 srs @COEF_A1_2, $AC0.M - // 05c2 195e lrri $AC0.M, @$AR2 - // 05c3 2ea5 srs @COEF_A2_2, $AC0.M - // 05c4 195e lrri $AC0.M, @$AR2 - // 05c5 2ea6 srs @COEF_A1_3, $AC0.M - // 05c6 195e lrri $AC0.M, @$AR2 - // 05c7 2ea7 srs @COEF_A2_3, $AC0.M - // 05c8 195e lrri $AC0.M, @$AR2 - // 05c9 2ea8 srs @COEF_A1_4, $AC0.M - // 05ca 195e lrri $AC0.M, @$AR2 - // 05cb 2ea9 srs @COEF_A2_4, $AC0.M - // 05cc 195e lrri $AC0.M, @$AR2 - // 05cd 2eaa srs @COEF_A1_5, $AC0.M - // 05ce 195e lrri $AC0.M, @$AR2 - // 05cf 2eab srs @COEF_A2_5, $AC0.M - // 05d0 195e lrri $AC0.M, @$AR2 - // 05d1 2eac srs @COEF_A1_6, $AC0.M - // 05d2 195e lrri $AC0.M, @$AR2 - // 05d3 2ead srs @COEF_A2_6, $AC0.M - // 05d4 195e lrri $AC0.M, @$AR2 - // 05d5 2eae srs @COEF_A1_7, $AC0.M - // 05d6 195e lrri $AC0.M, @$AR2 - // 05d7 2eaf srs @COEF_A2_7, $AC0.M - // 05d8 195e lrri $AC0.M, @$AR2 - // 05d9 2ede srs @GAIN, $AC0.M - // 05da 195e lrri $AC0.M, @$AR2 - // 05db 2eda srs @scale, $AC0.M - // 05dc 195e lrri $AC0.M, @$AR2 - // 05dd 2edb srs @yn1, $AC0.M - // 05de 195e lrri $AC0.M, @$AR2 - // 05df 2edc srs @yn2, $AC0.M - - 05e0 8c00 clr15 - 05e1 8a00 m2 - 05e2 8e00 set16 - 05e3 00d8 0e16 lr $AX0.L, @0x0e16 - 05e5 195b lrri $AX1.H, @$AR2 - 05e6 1959 lrri $AX1.L, @$AR2 - 05e7 8100 clr $ACC0 - 05e8 195c lrri $AC0.L, @$AR2 - 05e9 0080 0e44 lri $AR0, #0x0e44 - 05eb 195f lrri $AC1.M, @$AR2 - 05ec 1b1f srri @$AR0, $AC1.M - 05ed 195f lrri $AC1.M, @$AR2 - 05ee 1b1f srri @$AR0, $AC1.M - 05ef 195f lrri $AC1.M, @$AR2 - 05f0 1b1f srri @$AR0, $AC1.M - 05f1 185f lrr $AC1.M, @$AR2 - 05f2 1b1f srri @$AR0, $AC1.M - 05f3 6b00 movax $ACC1, $AX1 - 05f4 1505 lsl $ACC1, #5 - 05f5 4d00 add $ACC1, $ACC0 - 05f6 157e lsr $ACC1, #-2 - 05f7 1c9f mrr $IX0, $AC1.M - 05f8 1cbd mrr $IX1, $AC1.L - 05f9 05e0 addis $AC1.M, #0xe0 - 05fa 9900 asr16 $ACC1 - 05fb 7d00 neg $ACC1 - 05fc 1cdd mrr $IX2, $AC1.L - 05fd 8900 clr $ACC1 - 05fe 1fa5 mrr $AC1.L, $IX1 - 05ff 1502 lsl $ACC1, #2 - 0600 1cbf mrr $IX1, $AC1.M - 0601 009a 01fc lri $AX0.H, #0x01fc - 0603 009e 0e44 lri $AC0.M, #0x0e44 - 0605 0081 ffdd lri $AR1, #0xffdd - 0607 0083 0d80 lri $AR3, #0x0d80 - 0609 0064 061a bloop $IX0, 0x061a - 060b 1827 lrr $IX3, @$AR1 - 060c 1b07 srri @$AR0, $IX3 - 060d 4a00 addax $ACC0, $AX1 - 060e 1ffc mrr $AC1.M, $AC0.L - 060f 1827 lrr $IX3, @$AR1 - 0610 1b07 srri @$AR0, $IX3 - 0611 1579 lsr $ACC1, #-7 - 0612 3500 andr $AC1.M, $AX0.H - 0613 1827 lrr $IX3, @$AR1 - 0614 1b07 srri @$AR0, $IX3 - 0615 4100 addr $ACC1, $AX0.L - 0616 1b7e srri @$AR3, $AC0.M - 0617 1827 lrr $IX3, @$AR1 - 0618 1b07 srri @$AR0, $IX3 - 0619 1b7f srri @$AR3, $AC1.M - 061a 0000 nop - - 061b 0065 0620 bloop $IX1, 0x0620 - 061d 1827 lrr $IX3, @$AR1 - 061e 1b07 srri @$AR0, $IX3 - 061f 0000 nop - 0620 0000 nop - - 0621 0007 dar $AR3 - 0622 187f lrr $AC1.M, @$AR3 - 0623 0066 0629 bloop $IX2, 0x0629 - 0625 4a3b addax's $ACC0, $AX1.L : @$AR3, $AC1.M - 0626 1ffc mrr $AC1.M, $AC0.L - 0627 1579 lsr $ACC1, #-7 - 0628 3533 andr's $AC1.M, $AX0.H : @$AR3, $AC0.M - 0629 4100 addr $ACC1, $AX0.L - - 062a 1b7f srri @$AR3, $AC1.M - 062b 0004 dar $AR0 - 062c 189f lrrd $AC1.M, @$AR0 - 062d 1adf srrd @$AR2, $AC1.M - 062e 189f lrrd $AC1.M, @$AR0 - 062f 1adf srrd @$AR2, $AC1.M - 0630 189f lrrd $AC1.M, @$AR0 - 0631 1adf srrd @$AR2, $AC1.M - 0632 189f lrrd $AC1.M, @$AR0 - 0633 1adf srrd @$AR2, $AC1.M - 0634 1adc srrd @$AR2, $AC0.L - 0635 0082 0bd2 lri $AR2, #0x0bd2 - 0637 27dc lrs $AC1.M, @yn2 - 0638 1adf srrd @$AR2, $AC1.M - 0639 27db lrs $AC1.M, @yn1 - 063a 1adf srrd @$AR2, $AC1.M - 063b 27da lrs $AC1.M, @scale - 063c 1adf srrd @$AR2, $AC1.M - 063d 0082 0bbe lri $AR2, #0x0bbe - 063f 27d9 lrs $AC1.M, @ACCAL - 0640 1adf srrd @$AR2, $AC1.M - 0641 27d8 lrs $AC1.M, @ACCAH - 0642 1adf srrd @$AR2, $AC1.M - 0643 8f00 set40 - 0644 00c1 0e42 lr $AR1, @0x0e42 - 0646 0082 0d80 lri $AR2, #0x0d80 - 0648 1940 lrri $AR0, @$AR2 - 0649 1943 lrri $AR3, @$AR2 - 064a 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 064b b8c0 mulx'ld $AX0.H, $AX1.H : $AX0.L, $AX1.L, @$AR0 - 064c 111f 0654 bloopi #0x1f, 0x0654 - 064e a6f0 mulxmv'ld $AX0.L, $AX1.L, $ACC0 : $AX0.H, $AX1.H, @$AR0 - 064f bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 - 0650 1940 lrri $AR0, @$AR2 - 0651 1943 lrri $AR3, @$AR2 - 0652 bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 - 0653 4ec0 addp'ld $ACC0 : $AX0.L, $AX1.L, @$AR0 - 0654 b831 mulx's $AX0.H, $AX1.H : @$AR1, $AC0.M - - 0655 a6f0 mulxmv'ld $AX0.L, $AX1.L, $ACC0 : $AX0.H, $AX1.H, @$AR0 - 0656 bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 - 0657 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0658 4e00 addp $ACC0 - 0659 1b3e srri @$AR1, $AC0.M - 065a 00e1 0e42 sr @0x0e42, $AR1 - - 065c 02df ret -} - -void SRC_Linear() { - // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs - // 065d 0082 0bb8 lri $AR2, #0x0bb8 - // 065f 195e lrri $AC0.M, @$AR2 - // 0660 2ed1 srs @SampleFormat, $AC0.M - // 0661 195e lrri $AC0.M, @$AR2 - // 0662 2ed4 srs @ACSAH, $AC0.M - // 0663 195e lrri $AC0.M, @$AR2 - // 0664 2ed5 srs @ACSAL, $AC0.M - // 0665 195e lrri $AC0.M, @$AR2 - // 0666 2ed6 srs @ACEAH, $AC0.M - // 0667 195e lrri $AC0.M, @$AR2 - // 0668 2ed7 srs @ACEAL, $AC0.M - // 0669 195e lrri $AC0.M, @$AR2 - // 066a 2ed8 srs @ACCAH, $AC0.M - // 066b 195e lrri $AC0.M, @$AR2 - // 066c 2ed9 srs @ACCAL, $AC0.M - // 066d 195e lrri $AC0.M, @$AR2 - // 066e 2ea0 srs @COEF_A1_0, $AC0.M - // 066f 195e lrri $AC0.M, @$AR2 - // 0670 2ea1 srs @COEF_A2_0, $AC0.M - // 0671 195e lrri $AC0.M, @$AR2 - // 0672 2ea2 srs @COEF_A1_1, $AC0.M - // 0673 195e lrri $AC0.M, @$AR2 - // 0674 2ea3 srs @COEF_A2_1, $AC0.M - // 0675 195e lrri $AC0.M, @$AR2 - // 0676 2ea4 srs @COEF_A1_2, $AC0.M - // 0677 195e lrri $AC0.M, @$AR2 - // 0678 2ea5 srs @COEF_A2_2, $AC0.M - // 0679 195e lrri $AC0.M, @$AR2 - // 067a 2ea6 srs @COEF_A1_3, $AC0.M - // 067b 195e lrri $AC0.M, @$AR2 - // 067c 2ea7 srs @COEF_A2_3, $AC0.M - // 067d 195e lrri $AC0.M, @$AR2 - // 067e 2ea8 srs @COEF_A1_4, $AC0.M - // 067f 195e lrri $AC0.M, @$AR2 - // 0680 2ea9 srs @COEF_A2_4, $AC0.M - // 0681 195e lrri $AC0.M, @$AR2 - // 0682 2eaa srs @COEF_A1_5, $AC0.M - // 0683 195e lrri $AC0.M, @$AR2 - // 0684 2eab srs @COEF_A2_5, $AC0.M - // 0685 195e lrri $AC0.M, @$AR2 - // 0686 2eac srs @COEF_A1_6, $AC0.M - // 0687 195e lrri $AC0.M, @$AR2 - // 0688 2ead srs @COEF_A2_6, $AC0.M - // 0689 195e lrri $AC0.M, @$AR2 - // 068a 2eae srs @COEF_A1_7, $AC0.M - // 068b 195e lrri $AC0.M, @$AR2 - // 068c 2eaf srs @COEF_A2_7, $AC0.M - // 068d 195e lrri $AC0.M, @$AR2 - // 068e 2ede srs @GAIN, $AC0.M - // 068f 195e lrri $AC0.M, @$AR2 - // 0690 2eda srs @scale, $AC0.M - // 0691 195e lrri $AC0.M, @$AR2 - // 0692 2edb srs @yn1, $AC0.M - // 0693 195e lrri $AC0.M, @$AR2 - // 0694 2edc srs @yn2, $AC0.M - - // 0695 8c00 clr15 // signed mulx - // 0696 8a00 m2 // *2 - // 0697 8e00 set16 // no sign extend - - // 0698 195b lrri $AX1.H, @$AR2 - // 0699 1959 lrri $AX1.L, @$AR2 - // 069a 8100 clr $ACC0 - // 069b 195c lrri $AC0.L, @$AR2 - // 069c 0080 0e44 lri $AR0, #0x0e44 - // 069e 195f lrri $AC1.M, @$AR2 - // 069f 195f lrri $AC1.M, @$AR2 - // 06a0 195f lrri $AC1.M, @$AR2 - // 06a1 1b1f srri @$AR0, $AC1.M - AR0 = 0x0e44 - AX1.H = pb.src.ratioHi - AX1.L = pb.src.ratioLo - AC0.L = pb.src.currentAddressFrac - AC1.M = pb.src.last_samples[2] - - *0x0e44 = pb.src.last_samples[2] - *0x0e45 = pb.src.last_samples[3] - - // 06a2 185f lrr $AC1.M, @$AR2 - // 06a3 1b1f srri @$AR0, $AC1.M - // 06a4 6b00 movax $ACC1, $AX1 - // 06a5 1505 lsl $ACC1, #5 - // 06a6 4d00 add $ACC1, $ACC0 - // 06a7 157e lsr $ACC1, #-2 - // 06a8 1c9f mrr $IX0, $AC1.M - // 06a9 1cbd mrr $IX1, $AC1.L - ACC1 = (pb.src.currentAddressFrac + (pb.src.ratio << 5)) >> 2 - IX0 = ACC1 >> 16 - IX1 = ((ACC1 & 0xffff) & 0xc000) >> 14 - IX2 = ~((ACC1 >> 16) - 32) - AX0.H = 0x01fc - AC0.M = 0x0e45 - AR1 = 0xffdd // DSP_ACCELERATOR - AR3 = 0x0d80 - - // 06aa 05e0 addis $AC1.M, #0xe0 - // 06ab 9900 asr16 $ACC1 - // 06ac 7d00 neg $ACC1 - // 06ad 1cdd mrr $IX2, $AC1.L - // 06ae 8900 clr $ACC1 - // 06af 1fa5 mrr $AC1.L, $IX1 - // 06b0 1502 lsl $ACC1, #2 - // 06b1 1cbf mrr $IX1, $AC1.M - // 06b2 009a 01fc lri $AX0.H, #0x01fc - // 06b4 009e 0e45 lri $AC0.M, #0x0e45 - // 06b6 0081 ffdd lri $AR1, #0xffdd - // 06b8 0083 0d80 lri $AR3, #0x0d80 - // 06ba 0064 06cb bloop $IX0, 0x06cb - // 06bc 1827 lrr $IX3, @$AR1 - // 06bd 1b07 srri @$AR0, $IX3 - // 06be 4a00 addax $ACC0, $AX1 - // 06bf 1b7e srri @$AR3, $AC0.M - // 06c0 1827 lrr $IX3, @$AR1 - // 06c1 1b07 srri @$AR0, $IX3 - // 06c2 1b7c srri @$AR3, $AC0.L - // 06c3 0000 nop - // 06c4 1827 lrr $IX3, @$AR1 - // 06c5 1b07 srri @$AR0, $IX3 - // 06c6 0000 nop - // 06c7 0000 nop - // 06c8 1827 lrr $IX3, @$AR1 - // 06c9 1b07 srri @$AR0, $IX3 - // 06ca 0000 nop - // 06cb 0000 nop - ACCO = (0x0e45 << 16) + pb.src.currentAddressFrac - for (i = 0; i < IX0; i++) { - ACC0 += pb.src.ratio - *(0x0d80++) = ACC0 >> 16 - *(0x0d80++) = ACC0 & 0xffff - *(0x0e46++) = *DSP_ACCELERATOR - *(0x0e46++) = *DSP_ACCELERATOR - *(0x0e46++) = *DSP_ACCELERATOR - *(0x0e46++) = *DSP_ACCELERATOR - } - - // 06cc 0065 06d1 bloop $IX1, 0x06d1 - // 06ce 1827 lrr $IX3, @$AR1 - // 06cf 1b07 srri @$AR0, $IX3 - // 06d0 0000 nop - // 06d1 0000 nop - for (i = 0; i < IX1; i++) { - *(0x0e46++) = *DSP_ACCELERATOR - } - - // 06d2 0066 06d6 bloop $IX2, 0x06d6 - // 06d4 4a00 addax $ACC0, $AX1 - // 06d5 1b7e srri @$AR3, $AC0.M - // 06d6 1b7c srri @$AR3, $AC0.L - for (i = 0; i < IX2; i++) { - ACC0 += pb.src.ratio - *(0x0d80++) = ACC0 >> 16 - *(0x0d80++) = ACC0 & 0xffff - } - - // 06d7 0004 dar $AR0 - // 06d8 189f lrrd $AC1.M, @$AR0 - // 06d9 1adf srrd @$AR2, $AC1.M - // 06da 189f lrrd $AC1.M, @$AR0 - // 06db 1adf srrd @$AR2, $AC1.M - // 06dc 189f lrrd $AC1.M, @$AR0 - // 06dd 1adf srrd @$AR2, $AC1.M - // 06de 189f lrrd $AC1.M, @$AR0 - // 06df 1adf srrd @$AR2, $AC1.M - // 06e0 1adc srrd @$AR2, $AC0.L - *(0x0e46++)-- - pb.src.last_samples[3] = *(0x0e46--) - pb.src.last_samples[2] = *(0x0e46--) - pb.src.last_samples[1] = *(0x0e46--) - pb.src.last_samples[0] = *(0x0e46--) - pb.src.currentAddressFrac = ACC0 & 0xffff - - // 06e1 0082 0bd2 lri $AR2, #0x0bd2 - // 06e3 27dc lrs $AC1.M, @yn2 - // 06e4 1adf srrd @$AR2, $AC1.M - // 06e5 27db lrs $AC1.M, @yn1 - // 06e6 1adf srrd @$AR2, $AC1.M - // 06e7 27da lrs $AC1.M, @scale - // 06e8 1adf srrd @$AR2, $AC1.M - // 06e9 0082 0bbe lri $AR2, #0x0bbe - // 06eb 27d9 lrs $AC1.M, @ACCAL - // 06ec 1adf srrd @$AR2, $AC1.M - // 06ed 27d8 lrs $AC1.M, @ACCAH - // 06ee 1adf srrd @$AR2, $AC1.M - pb.adpm.yn2 = *yn2 - pb.adpm.yn1 = *yn1 - pb.adpm.pred_scale = *scale - pb.addr.currentAddressLo = *ACCAL // Current playback position - pb.addr.currentAddressHi = *ACCAH - - 06ef 8d00 set15 // unsigned mulx - 06f0 8b00 m0 // no *2 - 06f1 8f00 set40 // sign extend - 06f2 00c1 0e42 lr $AR1, @0x0e42 - 06f4 0082 0d80 lri $AR2, #0x0d80 - 06f6 8100 clr $ACC0 - 06f7 1120 0703 bloopi #0x20, 0x0703 - 06f9 8900 clr $ACC1 - 06fa 1940 lrri $AR0, @$AR2 - 06fb 189e lrrd $AC0.M, @$AR0 - 06fc 181b lrr $AX1.H, @$AR0 - 06fd 199a lrrn $AX0.H, @$AR0 - 06fe 5400 subr $ACC0, $AX0.H - 06ff 1f5e mrr $AX0.H, $AC0.M - 0700 1959 lrri $AX1.L, @$AR2 - 0701 b000 mulx $AX0.H, $AX1.L - 0702 fb00 addpaxz $ACC1, $AX1 - 0703 8139 clr's $ACC0 : @$AR1, $AC1.M - - 0704 00e1 0e42 sr @0x0e42, $AR1 - - 0706 02df ret -} - -void SRC_None() { - // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs - // 0707 0082 0bb8 lri $AR2, #0x0bb8 - // 0709 195e lrri $AC0.M, @$AR2 - // 070a 2ed1 srs @SampleFormat, $AC0.M - // 070b 195e lrri $AC0.M, @$AR2 - // 070c 2ed4 srs @ACSAH, $AC0.M - // 070d 195e lrri $AC0.M, @$AR2 - // 070e 2ed5 srs @ACSAL, $AC0.M - // 070f 195e lrri $AC0.M, @$AR2 - // 0710 2ed6 srs @ACEAH, $AC0.M - // 0711 195e lrri $AC0.M, @$AR2 - // 0712 2ed7 srs @ACEAL, $AC0.M - // 0713 195e lrri $AC0.M, @$AR2 - // 0714 2ed8 srs @ACCAH, $AC0.M - // 0715 195e lrri $AC0.M, @$AR2 - // 0716 2ed9 srs @ACCAL, $AC0.M - // 0717 195e lrri $AC0.M, @$AR2 - // 0718 2ea0 srs @COEF_A1_0, $AC0.M - // 0719 195e lrri $AC0.M, @$AR2 - // 071a 2ea1 srs @COEF_A2_0, $AC0.M - // 071b 195e lrri $AC0.M, @$AR2 - // 071c 2ea2 srs @COEF_A1_1, $AC0.M - // 071d 195e lrri $AC0.M, @$AR2 - // 071e 2ea3 srs @COEF_A2_1, $AC0.M - // 071f 195e lrri $AC0.M, @$AR2 - // 0720 2ea4 srs @COEF_A1_2, $AC0.M - // 0721 195e lrri $AC0.M, @$AR2 - // 0722 2ea5 srs @COEF_A2_2, $AC0.M - // 0723 195e lrri $AC0.M, @$AR2 - // 0724 2ea6 srs @COEF_A1_3, $AC0.M - // 0725 195e lrri $AC0.M, @$AR2 - // 0726 2ea7 srs @COEF_A2_3, $AC0.M - // 0727 195e lrri $AC0.M, @$AR2 - // 0728 2ea8 srs @COEF_A1_4, $AC0.M - // 0729 195e lrri $AC0.M, @$AR2 - // 072a 2ea9 srs @COEF_A2_4, $AC0.M - // 072b 195e lrri $AC0.M, @$AR2 - // 072c 2eaa srs @COEF_A1_5, $AC0.M - // 072d 195e lrri $AC0.M, @$AR2 - // 072e 2eab srs @COEF_A2_5, $AC0.M - // 072f 195e lrri $AC0.M, @$AR2 - // 0730 2eac srs @COEF_A1_6, $AC0.M - // 0731 195e lrri $AC0.M, @$AR2 - // 0732 2ead srs @COEF_A2_6, $AC0.M - // 0733 195e lrri $AC0.M, @$AR2 - // 0734 2eae srs @COEF_A1_7, $AC0.M - // 0735 195e lrri $AC0.M, @$AR2 - // 0736 2eaf srs @COEF_A2_7, $AC0.M - // 0737 195e lrri $AC0.M, @$AR2 - // 0738 2ede srs @GAIN, $AC0.M - // 0739 195e lrri $AC0.M, @$AR2 - // 073a 2eda srs @scale, $AC0.M - // 073b 195e lrri $AC0.M, @$AR2 - // 073c 2edb srs @yn1, $AC0.M - // 073d 195e lrri $AC0.M, @$AR2 - // 073e 2edc srs @yn2, $AC0.M - - // 073f 00c0 0e42 lr $AR0, @0x0e42 - // 0741 0081 ffdd lri $AR1, #0xffdd // DSP_ACCELERATOR - // 0743 1120 0748 bloopi #0x20, 0x0748 - // 0745 1824 lrr $IX0, @$AR1 - // 0746 1b04 srri @$AR0, $IX0 - // 0747 0000 nop - // 0748 0000 nop - // 0749 00e0 0e42 sr @0x0e42, $AR0 - - u16 i = *0x0e42 - for (; i < ((*0x0e42) + 0x20); i++) { - *i = *DSP_ACCELERATOR - } - *0x0e42 = i - - // 074b 0082 0bd9 lri $AR2, #0x0bd9 // pb.src.last_samples[3] - // 074d 0004 dar $AR0 - // 074e 189f lrrd $AC1.M, @$AR0 - // 074f 1adf srrd @$AR2, $AC1.M - // 0750 189f lrrd $AC1.M, @$AR0 - // 0751 1adf srrd @$AR2, $AC1.M - // 0752 189f lrrd $AC1.M, @$AR0 - // 0753 1adf srrd @$AR2, $AC1.M - // 0754 189f lrrd $AC1.M, @$AR0 - // 0755 1adf srrd @$AR2, $AC1.M - // 0756 8900 clr $ACC1 - // 0757 1adc srrd @$AR2, $AC0.L // uhhh assume AC0.L is 0? - i-- // Guess that 0x0e42 points to struct of 1 pointer and 32 values - pb.src.last_samples[3] = *(i--) - pb.src.last_samples[2] = *(i--) - pb.src.last_samples[1] = *(i--) - pb.src.last_samples[0] = *(i--) - pb.src.currentAddressFrac = 0 - - // 0758 27dc lrs $AC1.M, @yn2 - // 0759 00ff 0bd2 sr @0x0bd2, $AC1.M - // 075b 27db lrs $AC1.M, @yn1 - // 075c 00ff 0bd1 sr @0x0bd1, $AC1.M - // 075e 27da lrs $AC1.M, @scale - // 075f 00ff 0bd0 sr @0x0bd0, $AC1.M - // 0761 27d9 lrs $AC1.M, @ACCAL - // 0762 00ff 0bbe sr @0x0bbe, $AC1.M - // 0764 27d8 lrs $AC1.M, @ACCAH - // 0765 00ff 0bbd sr @0x0bbd, $AC1.M - pb.adpm.yn2 = *yn2 - pb.adpm.yn1 = *yn1 - pb.adpm.pred_scale = *scale - pb.addr.currentAddressLo = *ACCAL // Current playback position - pb.addr.currentAddressHi = *ACCAH - - 0767 02df ret -} - - -# From here to the jump tables, all the funcs just wrap calls to mixer(s) in IROM - -void Mixer_0() { - 0768 00c0 0e40 lr $AR0, @0x0e40 - 076a 0081 0b89 lri $AR1, #0x0b89 - 076c 00c2 0e08 lr $AR2, @0x0e08 - 076e 1c62 mrr $AR3, $AR2 - 076f 00c4 0e41 lr $IX0, @0x0e41 - 0771 00c5 0e09 lr $IX1, @0x0e09 - 0773 02bf 80e7 call 0x80e7 - 0775 00f8 0ba9 sr @0x0ba9, $AX0.L - 0777 00fb 0bac sr @0x0bac, $AX1.H - 0779 02df ret -} - -void Mixer_1() { - 077a 00c0 0e40 lr $AR0, @0x0e40 - 077c 0081 0b89 lri $AR1, #0x0b89 - 077e 00c2 0e08 lr $AR2, @0x0e08 - 0780 1c62 mrr $AR3, $AR2 - 0781 00c4 0e41 lr $IX0, @0x0e41 - 0783 00c5 0e09 lr $IX1, @0x0e09 - 0785 02bf 80e7 call 0x80e7 - 0787 00f8 0ba9 sr @0x0ba9, $AX0.L - 0789 00fb 0bac sr @0x0bac, $AX1.H - 078b 00c0 0e40 lr $AR0, @0x0e40 - 078d 0081 0b8d lri $AR1, #0x0b8d - 078f 00c2 0e0b lr $AR2, @0x0e0b - 0791 1c62 mrr $AR3, $AR2 - 0792 00c4 0e41 lr $IX0, @0x0e41 - 0794 00c5 0e0c lr $IX1, @0x0e0c - 0796 02bf 80e7 call 0x80e7 - 0798 00f8 0baa sr @0x0baa, $AX0.L - 079a 00fb 0bad sr @0x0bad, $AX1.H - 079c 02df ret -} - -void Mixer_2() { - 079d 00c0 0e40 lr $AR0, @0x0e40 - 079f 0081 0b89 lri $AR1, #0x0b89 - 07a1 00c2 0e08 lr $AR2, @0x0e08 - 07a3 1c62 mrr $AR3, $AR2 - 07a4 00c4 0e41 lr $IX0, @0x0e41 - 07a6 00c5 0e09 lr $IX1, @0x0e09 - 07a8 02bf 80e7 call 0x80e7 - 07aa 00f8 0ba9 sr @0x0ba9, $AX0.L - 07ac 00fb 0bac sr @0x0bac, $AX1.H - 07ae 00c0 0e40 lr $AR0, @0x0e40 - 07b0 0081 0b91 lri $AR1, #0x0b91 - 07b2 00c2 0e0e lr $AR2, @0x0e0e - 07b4 1c62 mrr $AR3, $AR2 - 07b5 00c4 0e41 lr $IX0, @0x0e41 - 07b7 00c5 0e0f lr $IX1, @0x0e0f - 07b9 02bf 80e7 call 0x80e7 - 07bb 00f8 0bab sr @0x0bab, $AX0.L - 07bd 00fb 0bae sr @0x0bae, $AX1.H - 07bf 02df ret -} - -void Unk() { - 07c0 00c0 0e40 lr $AR0, @0x0e40 - 07c2 0081 0b89 lri $AR1, #0x0b89 - 07c4 00c2 0e08 lr $AR2, @0x0e08 - 07c6 1c62 mrr $AR3, $AR2 - 07c7 00c4 0e41 lr $IX0, @0x0e41 - 07c9 00c5 0e09 lr $IX1, @0x0e09 - 07cb 02bf 80e7 call 0x80e7 - 07cd 00f8 0ba9 sr @0x0ba9, $AX0.L - 07cf 00fb 0bac sr @0x0bac, $AX1.H - 07d1 00c0 0e40 lr $AR0, @0x0e40 - 07d3 0081 0b8d lri $AR1, #0x0b8d - 07d5 00c2 0e0b lr $AR2, @0x0e0b - 07d7 1c62 mrr $AR3, $AR2 - 07d8 00c4 0e41 lr $IX0, @0x0e41 - 07da 00c5 0e0c lr $IX1, @0x0e0c - 07dc 02bf 80e7 call 0x80e7 - 07de 00f8 0baa sr @0x0baa, $AX0.L - 07e0 00fb 0bad sr @0x0bad, $AX1.H - 07e2 00c0 0e40 lr $AR0, @0x0e40 - 07e4 0081 0b91 lri $AR1, #0x0b91 - 07e6 00c2 0e0e lr $AR2, @0x0e0e - 07e8 1c62 mrr $AR3, $AR2 - 07e9 00c4 0e41 lr $IX0, @0x0e41 - 07eb 00c5 0e0f lr $IX1, @0x0e0f - 07ed 02bf 80e7 call 0x80e7 - 07ef 00f8 0bab sr @0x0bab, $AX0.L - 07f1 00fb 0bae sr @0x0bae, $AX1.H - 07f3 02df ret -} - -void Unk() { - 07f4 00c0 0e40 lr $AR0, @0x0e40 - 07f6 0081 0b89 lri $AR1, #0x0b89 - 07f8 00c2 0e08 lr $AR2, @0x0e08 - 07fa 1c62 mrr $AR3, $AR2 - 07fb 00c4 0e41 lr $IX0, @0x0e41 - 07fd 00c5 0e09 lr $IX1, @0x0e09 - 07ff 02bf 80e7 call 0x80e7 - 0801 00f8 0ba9 sr @0x0ba9, $AX0.L - 0803 00fb 0bac sr @0x0bac, $AX1.H - 0805 00c0 0e43 lr $AR0, @0x0e43 - 0807 0081 0b97 lri $AR1, #0x0b97 - 0809 00c2 0e0a lr $AR2, @0x0e0a - 080b 1c62 mrr $AR3, $AR2 - 080c 02bf 81f9 call 0x81f9 - 080e 00f8 0baf sr @0x0baf, $AX0.L - 0810 02df ret -} - -void Unk() { - 0811 00c0 0e40 lr $AR0, @0x0e40 - 0813 0081 0b89 lri $AR1, #0x0b89 - 0815 00c2 0e08 lr $AR2, @0x0e08 - 0817 1c62 mrr $AR3, $AR2 - 0818 00c4 0e41 lr $IX0, @0x0e41 - 081a 00c5 0e09 lr $IX1, @0x0e09 - 081c 02bf 80e7 call 0x80e7 - 081e 00f8 0ba9 sr @0x0ba9, $AX0.L - 0820 00fb 0bac sr @0x0bac, $AX1.H - 0822 00c0 0e40 lr $AR0, @0x0e40 - 0824 0081 0b8d lri $AR1, #0x0b8d - 0826 00c2 0e0b lr $AR2, @0x0e0b - 0828 1c62 mrr $AR3, $AR2 - 0829 00c4 0e41 lr $IX0, @0x0e41 - 082b 00c5 0e0c lr $IX1, @0x0e0c - 082d 02bf 80e7 call 0x80e7 - 082f 00f8 0baa sr @0x0baa, $AX0.L - 0831 00fb 0bad sr @0x0bad, $AX1.H - 0833 00c0 0e43 lr $AR0, @0x0e43 - 0835 0081 0b97 lri $AR1, #0x0b97 - 0837 00c2 0e0a lr $AR2, @0x0e0a - 0839 1c62 mrr $AR3, $AR2 - 083a 1c80 mrr $IX0, $AR0 - 083b 00c5 0e0d lr $IX1, @0x0e0d - 083d 02bf 80e7 call 0x80e7 - 083f 00f8 0baf sr @0x0baf, $AX0.L - 0841 00fb 0bb0 sr @0x0bb0, $AX1.H - 0843 02df ret -} - -void Unk() { - 0844 00c0 0e40 lr $AR0, @0x0e40 - 0846 0081 0b89 lri $AR1, #0x0b89 - 0848 00c2 0e08 lr $AR2, @0x0e08 - 084a 1c62 mrr $AR3, $AR2 - 084b 00c4 0e41 lr $IX0, @0x0e41 - 084d 00c5 0e09 lr $IX1, @0x0e09 - 084f 02bf 80e7 call 0x80e7 - 0851 00f8 0ba9 sr @0x0ba9, $AX0.L - 0853 00fb 0bac sr @0x0bac, $AX1.H - 0855 00c0 0e40 lr $AR0, @0x0e40 - 0857 0081 0b91 lri $AR1, #0x0b91 - 0859 00c2 0e0e lr $AR2, @0x0e0e - 085b 1c62 mrr $AR3, $AR2 - 085c 00c4 0e41 lr $IX0, @0x0e41 - 085e 00c5 0e0f lr $IX1, @0x0e0f - 0860 02bf 80e7 call 0x80e7 - 0862 00f8 0bab sr @0x0bab, $AX0.L - 0864 00fb 0bae sr @0x0bae, $AX1.H - 0866 00c0 0e43 lr $AR0, @0x0e43 - 0868 0081 0b95 lri $AR1, #0x0b95 - 086a 00c2 0e10 lr $AR2, @0x0e10 - 086c 1c62 mrr $AR3, $AR2 - 086d 1c80 mrr $IX0, $AR0 - 086e 00c5 0e0a lr $IX1, @0x0e0a - 0870 02bf 80e7 call 0x80e7 - 0872 00f8 0bb1 sr @0x0bb1, $AX0.L - 0874 00fb 0baf sr @0x0baf, $AX1.H - 0876 02df ret -} - -void Unk() { - 0877 00c0 0e40 lr $AR0, @0x0e40 - 0879 0081 0b89 lri $AR1, #0x0b89 - 087b 00c2 0e08 lr $AR2, @0x0e08 - 087d 1c62 mrr $AR3, $AR2 - 087e 00c4 0e41 lr $IX0, @0x0e41 - 0880 00c5 0e09 lr $IX1, @0x0e09 - 0882 02bf 80e7 call 0x80e7 - 0884 00f8 0ba9 sr @0x0ba9, $AX0.L - 0886 00fb 0bac sr @0x0bac, $AX1.H - 0888 00c0 0e40 lr $AR0, @0x0e40 - 088a 0081 0b8d lri $AR1, #0x0b8d - 088c 00c2 0e0b lr $AR2, @0x0e0b - 088e 1c62 mrr $AR3, $AR2 - 088f 00c4 0e41 lr $IX0, @0x0e41 - 0891 00c5 0e0c lr $IX1, @0x0e0c - 0893 02bf 80e7 call 0x80e7 - 0895 00f8 0baa sr @0x0baa, $AX0.L - 0897 00fb 0bad sr @0x0bad, $AX1.H - 0899 00c0 0e40 lr $AR0, @0x0e40 - 089b 0081 0b91 lri $AR1, #0x0b91 - 089d 00c2 0e0e lr $AR2, @0x0e0e - 089f 1c62 mrr $AR3, $AR2 - 08a0 00c4 0e41 lr $IX0, @0x0e41 - 08a2 00c5 0e0f lr $IX1, @0x0e0f - 08a4 02bf 80e7 call 0x80e7 - 08a6 00f8 0bab sr @0x0bab, $AX0.L - 08a8 00fb 0bae sr @0x0bae, $AX1.H - 08aa 00c0 0e43 lr $AR0, @0x0e43 - 08ac 0081 0b97 lri $AR1, #0x0b97 - 08ae 00c2 0e0a lr $AR2, @0x0e0a - 08b0 1c62 mrr $AR3, $AR2 - 08b1 1c80 mrr $IX0, $AR0 - 08b2 00c5 0e0d lr $IX1, @0x0e0d - 08b4 02bf 80e7 call 0x80e7 - 08b6 00f8 0baf sr @0x0baf, $AX0.L - 08b8 00fb 0bb0 sr @0x0bb0, $AX1.H - 08ba 00c0 0e43 lr $AR0, @0x0e43 - 08bc 0081 0b95 lri $AR1, #0x0b95 - 08be 00c2 0e10 lr $AR2, @0x0e10 - 08c0 1c62 mrr $AR3, $AR2 - 08c1 02bf 81f9 call 0x81f9 - 08c3 00f8 0bb1 sr @0x0bb1, $AX0.L - 08c5 02df ret -} - -void Unk() { - 08c6 00c0 0e40 lr $AR0, @0x0e40 - 08c8 0081 0b89 lri $AR1, #0x0b89 - 08ca 00c2 0e08 lr $AR2, @0x0e08 - 08cc 0083 0e44 lri $AR3, #0x0e44 - 08ce 00c4 0e41 lr $IX0, @0x0e41 - 08d0 00c5 0e09 lr $IX1, @0x0e09 - 08d2 02bf 8282 call 0x8282 - 08d4 00f8 0ba9 sr @0x0ba9, $AX0.L - 08d6 00fb 0bac sr @0x0bac, $AX1.H - 08d8 02df ret -} - -void Unk() { - 08d9 00c0 0e40 lr $AR0, @0x0e40 - 08db 0081 0b89 lri $AR1, #0x0b89 - 08dd 00c2 0e08 lr $AR2, @0x0e08 - 08df 0083 0e44 lri $AR3, #0x0e44 - 08e1 00c4 0e41 lr $IX0, @0x0e41 - 08e3 00c5 0e09 lr $IX1, @0x0e09 - 08e5 02bf 8282 call 0x8282 - 08e7 00f8 0ba9 sr @0x0ba9, $AX0.L - 08e9 00fb 0bac sr @0x0bac, $AX1.H - 08eb 00c0 0e40 lr $AR0, @0x0e40 - 08ed 0081 0b8d lri $AR1, #0x0b8d - 08ef 00c2 0e0b lr $AR2, @0x0e0b - 08f1 0083 0e44 lri $AR3, #0x0e44 - 08f3 00c4 0e41 lr $IX0, @0x0e41 - 08f5 00c5 0e0c lr $IX1, @0x0e0c - 08f7 02bf 8282 call 0x8282 - 08f9 00f8 0baa sr @0x0baa, $AX0.L - 08fb 00fb 0bad sr @0x0bad, $AX1.H - 08fd 02df ret -} - -void Unk() { - 08fe 00c0 0e40 lr $AR0, @0x0e40 - 0900 0081 0b89 lri $AR1, #0x0b89 - 0902 00c2 0e08 lr $AR2, @0x0e08 - 0904 0083 0e44 lri $AR3, #0x0e44 - 0906 00c4 0e41 lr $IX0, @0x0e41 - 0908 00c5 0e09 lr $IX1, @0x0e09 - 090a 02bf 8282 call 0x8282 - 090c 00f8 0ba9 sr @0x0ba9, $AX0.L - 090e 00fb 0bac sr @0x0bac, $AX1.H - 0910 00c0 0e40 lr $AR0, @0x0e40 - 0912 0081 0b91 lri $AR1, #0x0b91 - 0914 00c2 0e0e lr $AR2, @0x0e0e - 0916 0083 0e44 lri $AR3, #0x0e44 - 0918 00c4 0e41 lr $IX0, @0x0e41 - 091a 00c5 0e0f lr $IX1, @0x0e0f - 091c 02bf 8282 call 0x8282 - 091e 00f8 0bab sr @0x0bab, $AX0.L - 0920 00fb 0bae sr @0x0bae, $AX1.H - 0922 02df ret -} - -void Unk() { - 0923 00c0 0e40 lr $AR0, @0x0e40 - 0925 0081 0b89 lri $AR1, #0x0b89 - 0927 00c2 0e08 lr $AR2, @0x0e08 - 0929 0083 0e44 lri $AR3, #0x0e44 - 092b 00c4 0e41 lr $IX0, @0x0e41 - 092d 00c5 0e09 lr $IX1, @0x0e09 - 092f 02bf 8282 call 0x8282 - 0931 00f8 0ba9 sr @0x0ba9, $AX0.L - 0933 00fb 0bac sr @0x0bac, $AX1.H - 0935 00c0 0e40 lr $AR0, @0x0e40 - 0937 0081 0b8d lri $AR1, #0x0b8d - 0939 00c2 0e0b lr $AR2, @0x0e0b - 093b 0083 0e44 lri $AR3, #0x0e44 - 093d 00c4 0e41 lr $IX0, @0x0e41 - 093f 00c5 0e0c lr $IX1, @0x0e0c - 0941 02bf 8282 call 0x8282 - 0943 00f8 0baa sr @0x0baa, $AX0.L - 0945 00fb 0bad sr @0x0bad, $AX1.H - 0947 00c0 0e40 lr $AR0, @0x0e40 - 0949 0081 0b91 lri $AR1, #0x0b91 - 094b 00c2 0e0e lr $AR2, @0x0e0e - 094d 0083 0e44 lri $AR3, #0x0e44 - 094f 00c4 0e41 lr $IX0, @0x0e41 - 0951 00c5 0e0f lr $IX1, @0x0e0f - 0953 02bf 8282 call 0x8282 - 0955 00f8 0bab sr @0x0bab, $AX0.L - 0957 00fb 0bae sr @0x0bae, $AX1.H - 0959 02df ret -} - -void Unk() { - 095a 00c0 0e40 lr $AR0, @0x0e40 - 095c 0081 0b89 lri $AR1, #0x0b89 - 095e 00c2 0e08 lr $AR2, @0x0e08 - 0960 0083 0e44 lri $AR3, #0x0e44 - 0962 00c4 0e41 lr $IX0, @0x0e41 - 0964 00c5 0e09 lr $IX1, @0x0e09 - 0966 02bf 8282 call 0x8282 - 0968 00f8 0ba9 sr @0x0ba9, $AX0.L - 096a 00fb 0bac sr @0x0bac, $AX1.H - 096c 00c0 0e43 lr $AR0, @0x0e43 - 096e 0081 0b97 lri $AR1, #0x0b97 - 0970 00c2 0e0a lr $AR2, @0x0e0a - 0972 0083 0e44 lri $AR3, #0x0e44 - 0974 02bf 845d call 0x845d - 0976 00f8 0baf sr @0x0baf, $AX0.L - 0978 02df ret -} - -void Unk() { - 0979 00c0 0e40 lr $AR0, @0x0e40 - 097b 0081 0b89 lri $AR1, #0x0b89 - 097d 00c2 0e08 lr $AR2, @0x0e08 - 097f 0083 0e44 lri $AR3, #0x0e44 - 0981 00c4 0e41 lr $IX0, @0x0e41 - 0983 00c5 0e09 lr $IX1, @0x0e09 - 0985 02bf 8282 call 0x8282 - 0987 00f8 0ba9 sr @0x0ba9, $AX0.L - 0989 00fb 0bac sr @0x0bac, $AX1.H - 098b 00c0 0e40 lr $AR0, @0x0e40 - 098d 0081 0b8d lri $AR1, #0x0b8d - 098f 00c2 0e0b lr $AR2, @0x0e0b - 0991 0083 0e44 lri $AR3, #0x0e44 - 0993 00c4 0e41 lr $IX0, @0x0e41 - 0995 00c5 0e0c lr $IX1, @0x0e0c - 0997 02bf 8282 call 0x8282 - 0999 00f8 0baa sr @0x0baa, $AX0.L - 099b 00fb 0bad sr @0x0bad, $AX1.H - 099d 00c0 0e43 lr $AR0, @0x0e43 - 099f 0081 0b97 lri $AR1, #0x0b97 - 09a1 00c2 0e0a lr $AR2, @0x0e0a - 09a3 0083 0e44 lri $AR3, #0x0e44 - 09a5 1c80 mrr $IX0, $AR0 - 09a6 00c5 0e0d lr $IX1, @0x0e0d - 09a8 02bf 8282 call 0x8282 - 09aa 00f8 0baf sr @0x0baf, $AX0.L - 09ac 00fb 0bb0 sr @0x0bb0, $AX1.H - 09ae 02df ret -} - -void Unk() { - 09af 00c0 0e40 lr $AR0, @0x0e40 - 09b1 0081 0b89 lri $AR1, #0x0b89 - 09b3 00c2 0e08 lr $AR2, @0x0e08 - 09b5 0083 0e44 lri $AR3, #0x0e44 - 09b7 00c4 0e41 lr $IX0, @0x0e41 - 09b9 00c5 0e09 lr $IX1, @0x0e09 - 09bb 02bf 8282 call 0x8282 - 09bd 00f8 0ba9 sr @0x0ba9, $AX0.L - 09bf 00fb 0bac sr @0x0bac, $AX1.H - 09c1 00c0 0e40 lr $AR0, @0x0e40 - 09c3 0081 0b91 lri $AR1, #0x0b91 - 09c5 00c2 0e0e lr $AR2, @0x0e0e - 09c7 0083 0e44 lri $AR3, #0x0e44 - 09c9 00c4 0e41 lr $IX0, @0x0e41 - 09cb 00c5 0e0f lr $IX1, @0x0e0f - 09cd 02bf 8282 call 0x8282 - 09cf 00f8 0bab sr @0x0bab, $AX0.L - 09d1 00fb 0bae sr @0x0bae, $AX1.H - 09d3 00c0 0e43 lr $AR0, @0x0e43 - 09d5 0081 0b95 lri $AR1, #0x0b95 - 09d7 00c2 0e10 lr $AR2, @0x0e10 - 09d9 0083 0e44 lri $AR3, #0x0e44 - 09db 1c80 mrr $IX0, $AR0 - 09dc 00c5 0e0a lr $IX1, @0x0e0a - 09de 02bf 8282 call 0x8282 - 09e0 00f8 0bb1 sr @0x0bb1, $AX0.L - 09e2 00fb 0baf sr @0x0baf, $AX1.H - 09e4 02df ret -} - -void Unk() { - 09e5 00c0 0e40 lr $AR0, @0x0e40 - 09e7 0081 0b89 lri $AR1, #0x0b89 - 09e9 00c2 0e08 lr $AR2, @0x0e08 - 09eb 0083 0e44 lri $AR3, #0x0e44 - 09ed 00c4 0e41 lr $IX0, @0x0e41 - 09ef 00c5 0e09 lr $IX1, @0x0e09 - 09f1 02bf 8282 call 0x8282 - 09f3 00f8 0ba9 sr @0x0ba9, $AX0.L - 09f5 00fb 0bac sr @0x0bac, $AX1.H - 09f7 00c0 0e40 lr $AR0, @0x0e40 - 09f9 0081 0b8d lri $AR1, #0x0b8d - 09fb 00c2 0e0b lr $AR2, @0x0e0b - 09fd 0083 0e44 lri $AR3, #0x0e44 - 09ff 00c0 0e41 lr $AR0, @0x0e41 - 0a01 00c5 0e0c lr $IX1, @0x0e0c - 0a03 02bf 8282 call 0x8282 - 0a05 00f8 0baa sr @0x0baa, $AX0.L - 0a07 00fb 0bad sr @0x0bad, $AX1.H - 0a09 00c0 0e40 lr $AR0, @0x0e40 - 0a0b 0081 0b91 lri $AR1, #0x0b91 - 0a0d 00c2 0e0e lr $AR2, @0x0e0e - 0a0f 0083 0e44 lri $AR3, #0x0e44 - 0a11 00c4 0e41 lr $IX0, @0x0e41 - 0a13 00c5 0e0f lr $IX1, @0x0e0f - 0a15 02bf 8282 call 0x8282 - 0a17 00f8 0bab sr @0x0bab, $AX0.L - 0a19 00fb 0bae sr @0x0bae, $AX1.H - 0a1b 00c0 0e43 lr $AR0, @0x0e43 - 0a1d 0081 0b97 lri $AR1, #0x0b97 - 0a1f 00c2 0e0a lr $AR2, @0x0e0a - 0a21 0083 0e44 lri $AR3, #0x0e44 - 0a23 1c80 mrr $IX0, $AR0 - 0a24 00c5 0e0d lr $IX1, @0x0e0d - 0a26 02bf 8282 call 0x8282 - 0a28 00f8 0baf sr @0x0baf, $AX0.L - 0a2a 00fb 0bb0 sr @0x0bb0, $AX1.H - 0a2c 00c0 0e43 lr $AR0, @0x0e43 - 0a2e 0081 0b95 lri $AR1, #0x0b95 - 0a30 00c2 0e10 lr $AR2, @0x0e10 - 0a32 0083 0e44 lri $AR3, #0x0e44 - 0a34 02bf 845d call 0x845d - 0a36 00f8 0bb1 sr @0x0bb1, $AX0.L - 0a38 02df ret -} - -void Unk() { - 0a39 00c0 0e40 lr $AR0, @0x0e40 - 0a3b 0081 0b89 lri $AR1, #0x0b89 - 0a3d 00c2 0e08 lr $AR2, @0x0e08 - 0a3f 1c62 mrr $AR3, $AR2 - 0a40 00c4 0e41 lr $IX0, @0x0e41 - 0a42 00c5 0e09 lr $IX1, @0x0e09 - 0a44 02bf 80e7 call 0x80e7 - 0a46 00f8 0ba9 sr @0x0ba9, $AX0.L - 0a48 00fb 0bac sr @0x0bac, $AX1.H - 0a4a 00c0 0e43 lr $AR0, @0x0e43 - 0a4c 0081 0b91 lri $AR1, #0x0b91 - 0a4e 00c2 0e0e lr $AR2, @0x0e0e - 0a50 1c62 mrr $AR3, $AR2 - 0a51 1c80 mrr $IX0, $AR0 - 0a52 00c5 0e0f lr $IX1, @0x0e0f - 0a54 02bf 80e7 call 0x80e7 - 0a56 00f8 0bab sr @0x0bab, $AX0.L - 0a58 00fb 0bae sr @0x0bae, $AX1.H - 0a5a 02df ret -} - -void Unk() { - 0a5b 00c0 0e40 lr $AR0, @0x0e40 - 0a5d 0081 0b89 lri $AR1, #0x0b89 - 0a5f 00c2 0e08 lr $AR2, @0x0e08 - 0a61 1c62 mrr $AR3, $AR2 - 0a62 00c4 0e41 lr $IX0, @0x0e41 - 0a64 00c5 0e09 lr $IX1, @0x0e09 - 0a66 02bf 80e7 call 0x80e7 - 0a68 00f8 0ba9 sr @0x0ba9, $AX0.L - 0a6a 00fb 0bac sr @0x0bac, $AX1.H - 0a6c 00c0 0e43 lr $AR0, @0x0e43 - 0a6e 0081 0b91 lri $AR1, #0x0b91 - 0a70 00c2 0e0e lr $AR2, @0x0e0e - 0a72 1c62 mrr $AR3, $AR2 - 0a73 1c80 mrr $IX0, $AR0 - 0a74 00c5 0e0f lr $IX1, @0x0e0f - 0a76 02bf 80e7 call 0x80e7 - 0a78 00f8 0bab sr @0x0bab, $AX0.L - 0a7a 00fb 0bae sr @0x0bae, $AX1.H - 0a7c 00c0 0e40 lr $AR0, @0x0e40 - 0a7e 0081 0b8d lri $AR1, #0x0b8d - 0a80 00c2 0e0b lr $AR2, @0x0e0b - 0a82 1c62 mrr $AR3, $AR2 - 0a83 00c4 0e41 lr $IX0, @0x0e41 - 0a85 00c5 0e0c lr $IX1, @0x0e0c - 0a87 02bf 80e7 call 0x80e7 - 0a89 00f8 0baa sr @0x0baa, $AX0.L - 0a8b 00fb 0bad sr @0x0bad, $AX1.H - 0a8d 00c0 0e43 lr $AR0, @0x0e43 - 0a8f 0081 0b99 lri $AR1, #0x0b99 - 0a91 00c2 0e0d lr $AR2, @0x0e0d - 0a93 1c62 mrr $AR3, $AR2 - 0a94 02bf 81f9 call 0x81f9 - 0a96 00f8 0bb0 sr @0x0bb0, $AX0.L - 0a98 02df ret -} - -void Unk() { - 0a99 00c0 0e40 lr $AR0, @0x0e40 - 0a9b 0081 0b89 lri $AR1, #0x0b89 - 0a9d 00c2 0e08 lr $AR2, @0x0e08 - 0a9f 0083 0e44 lri $AR3, #0x0e44 - 0aa1 00c4 0e41 lr $IX0, @0x0e41 - 0aa3 00c5 0e09 lr $IX1, @0x0e09 - 0aa5 02bf 8282 call 0x8282 - 0aa7 00f8 0ba9 sr @0x0ba9, $AX0.L - 0aa9 00fb 0bac sr @0x0bac, $AX1.H - 0aab 00c0 0e43 lr $AR0, @0x0e43 - 0aad 0081 0b91 lri $AR1, #0x0b91 - 0aaf 00c2 0e0e lr $AR2, @0x0e0e - 0ab1 0083 0e44 lri $AR3, #0x0e44 - 0ab3 1c80 mrr $IX0, $AR0 - 0ab4 00c5 0e0f lr $IX1, @0x0e0f - 0ab6 02bf 8282 call 0x8282 - 0ab8 00f8 0bab sr @0x0bab, $AX0.L - 0aba 00fb 0bae sr @0x0bae, $AX1.H - 0abc 02df ret -} - -void Unk() { - 0abd 00c0 0e40 lr $AR0, @0x0e40 - 0abf 0081 0b89 lri $AR1, #0x0b89 - 0ac1 00c2 0e08 lr $AR2, @0x0e08 - 0ac3 0083 0e44 lri $AR3, #0x0e44 - 0ac5 00c4 0e41 lr $IX0, @0x0e41 - 0ac7 00c5 0e09 lr $IX1, @0x0e09 - 0ac9 02bf 8282 call 0x8282 - 0acb 00f8 0ba9 sr @0x0ba9, $AX0.L - 0acd 00fb 0bac sr @0x0bac, $AX1.H - 0acf 00c0 0e43 lr $AR0, @0x0e43 - 0ad1 0081 0b91 lri $AR1, #0x0b91 - 0ad3 00c2 0e0e lr $AR2, @0x0e0e - 0ad5 0083 0e44 lri $AR3, #0x0e44 - 0ad7 1c80 mrr $IX0, $AR0 - 0ad8 00c5 0e0f lr $IX1, @0x0e0f - 0ada 02bf 8282 call 0x8282 - 0adc 00f8 0bab sr @0x0bab, $AX0.L - 0ade 00fb 0bae sr @0x0bae, $AX1.H - 0ae0 00c0 0e40 lr $AR0, @0x0e40 - 0ae2 0081 0b8d lri $AR1, #0x0b8d - 0ae4 00c2 0e0b lr $AR2, @0x0e0b - 0ae6 0083 0e44 lri $AR3, #0x0e44 - 0ae8 00c4 0e41 lr $IX0, @0x0e41 - 0aea 00c5 0e0c lr $IX1, @0x0e0c - 0aec 02bf 8282 call 0x8282 - 0aee 00f8 0baa sr @0x0baa, $AX0.L - 0af0 00fb 0bad sr @0x0bad, $AX1.H - 0af2 00c0 0e43 lr $AR0, @0x0e43 - 0af4 0081 0b99 lri $AR1, #0x0b99 - 0af6 00c2 0e0d lr $AR2, @0x0e0d - 0af8 0083 0e44 lri $AR3, #0x0e44 - 0afa 02bf 845d call 0x845d - 0afc 00f8 0bb0 sr @0x0bb0, $AX0.L - 0afe 02df ret -} - -# Jump table for main commands -0aff 0082 // Jump 0 -0b00 013e // Jump 1 -0b01 01bc // Jump 2 -0b02 0248 // Jump 3 -0b03 0413 // Jump 4 -0b04 0427 // Jump 5 -0b05 0165 // Jump 6 -0b06 0574 // Jump 7 -0b07 0b37 // Jump 8 -0b08 015f // Jump 9 -0b09 0478 // Jump a -0b0a 0474 // Jump b -0b0b 0476 // Jump c -0b0c 01a9 // Jump d -0b0d 043b // Jump e -0b0e 047a // Jump f Task_Yield() -0b0f 0bb1 // Jump 10 -0b10 0175 // Jump 11 - -# LUT for pb.mixerCtrl -0b11 0768 // Jump3 0 -0b12 077a // Jump3 1 -0b13 079d // Jump3 2 -0b14 07c0 // Jump3 3 -0b15 07f4 // Jump3 4 -0b16 0811 // Jump3 5 -0b17 0844 // Jump3 6 -0b18 0877 // Jump3 7 -0b19 08c6 // Jump3 8 -0b1a 08d9 // Jump3 9 -0b1b 08fe // Jump3 a -0b1c 0923 // Jump3 b -0b1d 095a // Jump3 c -0b1e 0979 // Jump3 d -0b1f 09af // Jump3 e -0b20 09e5 // Jump3 f - -0b21 0a39 // Jump3 10 -0b22 0a5b // Jump3 11 -0b23 0768 // Jump3 12 -0b24 0768 // Jump3 13 -0b25 0768 // Jump3 14 -0b26 0768 // Jump3 15 -0b27 0768 // Jump3 16 -0b28 0768 // Jump3 17 -0b29 0a99 // Jump3 18 -0b2a 0abd // Jump3 19 -0b2b 0768 // Jump3 1a -0b2c 0768 // Jump3 1b -0b2d 0768 // Jump3 1c -0b2e 0768 // Jump3 1d -0b2f 0768 // Jump3 1e -0b30 0768 // Jump3 1f - -# LUT for pb.srcSelect -0b31 05a8 // Jump4 0 -0b32 065d // Jump4 1 -0b33 0707 // Jump4 2 - -# LUT for pb.coefSelect tables (in drom) -0b34 1000 -0b35 1200 -0b36 1400 - -# End of noise - back to code. - -void Cmd_8() { - 0b37 8e00 set16 - - 0b38 8100 clr $ACC0 - 0b39 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0b3a 191c lrri $AC0.L, @$AR0 - - 0b3b 2ece srs @DSMAH, $AC0.M - 0b3c 2ccf srs @DSMAL, $AC0.L - 0b3d 16cd 0e80 si @DSPA, #0x0e80 - 0b3f 16c9 0000 si @DSCR, #0x0000 - 0b41 16cb 0100 si @DSBL, #0x0100 - - 0b43 1f7e mrr $AX1.H, $AC0.M - 0b44 1f3c mrr $AX1.L, $AC0.L - - 0b45 8100 clr $ACC0 - - 0b46 26c9 lrs $AC0.M, @DSCR - 0b47 02a0 0004 andf $AC0.M, #0x0004 - 0b49 029c 0b46 jlnz 0x0b46 - - 0b4b 191e lrri $AC0.M, @$AR0 - 0b4c 191c lrri $AC0.L, @$AR0 - 0b4d 2ece srs @DSMAH, $AC0.M - 0b4e 2ccf srs @DSMAL, $AC0.L - 0b4f 16cd 0280 si @DSPA, #0x0280 - 0b51 16c9 0000 si @DSCR, #0x0000 - 0b53 16cb 0280 si @DSBL, #0x0280 - - 0b55 1c80 mrr $IX0, $AR0 - - 0b56 0080 0280 lri $AR0, #0x0280 - 0b58 00c1 0e1b lr $AR1, @0x0e1b - 0b5a 0085 0000 lri $IX1, #0x0000 - 0b5c 0089 007f lri $WR1, #0x007f - 0b5e 0082 0f00 lri $AR2, #0x0f00 - 0b60 0083 16b4 lri $AR3, #0x16b4 - 0b62 1ce3 mrr $IX3, $AR3 - 0b63 8100 clr $ACC0 - - 0b64 26c9 lrs $AC0.M, @DSCR - 0b65 02a0 0004 andf $AC0.M, #0x0004 - 0b67 029c 0b64 jlnz 0x0b64 - - 0b69 8f00 set40 - 0b6a 8a78 m2'l : $AC1.M, @$AR0 - 0b6b 8c68 clr15'l : $AC1.L, @$AR0 - 0b6c f100 lsl16 $ACC1 - 0b6d 1a3f srr @$AR1, $AC1.M - 0b6e 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 - 0b6f 107e loopi #0x7e - 0b70 f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b71 f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b72 f278 madd'l $AX0.L, $AX0.H : $AC1.M, @$AR0 - 0b73 6e68 movp'l $ACC0 : $AC1.L, @$AR0 - 0b74 f132 lsl16's $ACC1 : @$AR2, $AC0.M - 0b75 1a3f srr @$AR1, $AC1.M - 0b76 119e 0b80 bloopi #0x9e, 0x0b80 - 0b78 1c67 mrr $AR3, $IX3 - 0b79 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 - 0b7a 107e loopi #0x7e - 0b7b f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b7c f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b7d f278 madd'l $AX0.L, $AX0.H : $AC1.M, @$AR0 - 0b7e 6e68 movp'l $ACC0 : $AC1.L, @$AR0 - 0b7f f132 lsl16's $ACC1 : @$AR2, $AC0.M - 0b80 1a3f srr @$AR1, $AC1.M - - 0b81 1c67 mrr $AR3, $IX3 - 0b82 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 - 0b83 107e loopi #0x7e - 0b84 f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b85 f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 - 0b86 f200 madd $AX0.L, $AX0.H - 0b87 6e00 movp $ACC0 - 0b88 1b5e srri @$AR2, $AC0.M - 0b89 00e1 0e1b sr @0x0e1b, $AR1 - - 0b8b 0080 0280 lri $AR0, #0x0280 - 0b8d 0083 0f00 lri $AR3, #0x0f00 - 0b8f 0081 0000 lri $AR1, #0x0000 - 0b91 0082 0140 lri $AR2, #0x0140 - 0b93 0089 ffff lri $WR1, #0xffff - - 0b95 8900 clr $ACC1 - 0b96 8100 clr $ACC0 - - 0b97 8f00 set40 - - 0b98 11a0 0ba0 bloopi #0xa0, 0x0ba0 - 0b9a 197f lrri $AC1.M, @$AR3 - 0b9b 9930 asr16's $ACC1 : @$AR0, $AC0.M - 0b9c 1b1e srri @$AR0, $AC0.M - 0b9d 1b3f srri @$AR1, $AC1.M - 0b9e 7d29 neg's $ACC1 : @$AR1, $AC1.L - 0b9f 1b5f srri @$AR2, $AC1.M - 0ba0 1b5d srri @$AR2, $AC1.L - - 0ba1 8e00 set16 - - 0ba2 1fdb mrr $AC0.M, $AX1.H - 0ba3 1f99 mrr $AC0.L, $AX1.L - 0ba4 2ece srs @DSMAH, $AC0.M - 0ba5 2ccf srs @DSMAL, $AC0.L - 0ba6 16cd 0e80 si @DSPA, #0x0e80 - 0ba8 16c9 0001 si @DSCR, #0x0001 - 0baa 16cb 0100 si @DSBL, #0x0100 - - // 0bac 02bf 055c call 0x055c - WaitDMA(); - - 0bae 1c04 mrr $AR0, $IX0 - - // 0baf 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -void Cmd_10() { - 0bb1 8e00 set16 - - 0bb2 8100 clr $ACC0 - 0bb3 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0bb4 191c lrri $AC0.L, @$AR0 - - 0bb5 2ece srs @DSMAH, $AC0.M - 0bb6 2ccf srs @DSMAL, $AC0.L - 0bb7 16cd 07c0 si @DSPA, #0x07c0 - 0bb9 16c9 0001 si @DSCR, #0x0001 - 0bbb 16cb 0500 si @DSBL, #0x0500 - - // 0bbd 02bf 055c call 0x055c - WaitDMA(); - - 0bbf 8100 clr $ACC0 - 0bc0 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0bc1 191c lrri $AC0.L, @$AR0 - - 0bc2 2ece srs @DSMAH, $AC0.M - 0bc3 2ccf srs @DSMAL, $AC0.L - 0bc4 16cd 07c0 si @DSPA, #0x07c0 - 0bc6 16c9 0000 si @DSCR, #0x0000 - 0bc8 8900 clr $ACC1 - 0bc9 0d20 lris $AC1.L, #0x20 - 0bca 2dcb srs @DSBL, $AC1.L - - 0bcb 4c00 add $ACC0, $ACC1 - - 0bcc 1c80 mrr $IX0, $AR0 - - 0bcd 0080 07c0 lri $AR0, #0x07c0 - 0bcf 0083 0000 lri $AR3, #0x0000 - 0bd1 1c43 mrr $AR2, $AR3 - 0bd2 0a00 lris $AX0.H, #0x00 - - 0bd3 27c9 lrs $AC1.M, @DSCR - 0bd4 03a0 0004 andf $AC1.M, #0x0004 - 0bd6 029c 0bd3 jlnz 0x0bd3 - - 0bd8 2ece srs @DSMAH, $AC0.M - 0bd9 2ccf srs @DSMAL, $AC0.L - 0bda 16cd 07d0 si @DSPA, #0x07d0 - 0bdc 16c9 0000 si @DSCR, #0x0000 - 0bde 16cb 04e0 si @DSBL, #0x04e0 - - 0be0 8f00 set40 - - 0be1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0be2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0be3 6a00 movax $ACC0, $AX1 - 0be4 4800 addax $ACC0, $AX0 - 0be5 114f 0bee bloopi #0x4f, 0x0bee - 0be7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0be8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0be9 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 0bea 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0beb 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0bec 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0bed 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M - 0bee 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - - 0bef 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0bf0 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0bf1 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 0bf2 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0bf3 1b5f srri @$AR2, $AC1.M - 0bf4 1b5d srri @$AR2, $AC1.L - 0bf5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0bf6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0bf7 6800 movax $ACC0, $AX0 - 0bf8 7c00 neg $ACC0 - 0bf9 4a00 addax $ACC0, $AX1 - 0bfa 114f 0c05 bloopi #0x4f, 0x0c05 - 0bfc 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0bfd 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0bfe 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M - 0bff 7d00 neg $ACC1 - 0c00 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L - 0c01 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0c02 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0c03 683a movax's $ACC0, $AX0.L : @$AR2, $AC1.M - 0c04 7c00 neg $ACC0 - 0c05 4a2a addax's $ACC0, $AX1.L : @$AR2, $AC1.L - - 0c06 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0c07 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0c08 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M - 0c09 7d00 neg $ACC1 - 0c0a 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L - 0c0b 1b5f srri @$AR2, $AC1.M - 0c0c 1b5d srri @$AR2, $AC1.L - - 0c0d 1c04 mrr $AR0, $IX0 - - // 0c0e 029f 0068 jmp 0x0068 - goto DoNextCommand; -} - -# Begin interrupt handlers - -// Sends mail with value on top of callstack and rti's -void ResetAndStackUOFlow_Handler() { - 0c10 8e00 set16 - - // 0c11 16fc ecc0 si @DMBH, #0xecc0 - // 0c13 1fcc mrr $AC0.M, $ST0 - // 0c14 1d9e mrr $ST0, $AC0.M - // 0c15 2efd srs @DMBL, $AC0.M - DMB = 0xecc00000 | $ST0 - - // 0c16 26fc lrs $AC0.M, @DMBH - // 0c17 02a0 8000 andf $AC0.M, #0x8000 - // 0c19 029c 0c16 jlnz 0x0c16 - while (@DMBH & 0x8000 == 0); - - // 0c1b 0000 nop - // 0c1c 0000 nop - // 0c1d 0000 nop - // 0c1e 02ff rti - return; -} - -// Saves/Restores whole ACC0, but only modifies AC0.M. strange -void Int2_Handler() { - 0c1f 8e00 set16 - - // Save ACC0 - 0c20 00f0 0e17 sr @0x0e17, $AC0.H - 0c22 00fe 0e18 sr @0x0e18, $AC0.M - 0c24 00fc 0e19 sr @0x0e19, $AC0.L - - // 0c26 1fcc mrr $AC0.M, $ST0 - // 0c27 1d9e mrr $ST0, $AC0.M - // 0c28 16fc feed si @DMBH, #0xfeed - // 0c2a 2efd srs @DMBL, $AC0.M - DMB = 0xfeed0000 | $ST0 - - // 0c2b 26fc lrs $AC0.M, @DMBH - // 0c2c 02a0 8000 andf $AC0.M, #0x8000 - // 0c2e 029c 0c2b jlnz 0x0c2b - while (@DMBH & 0x8000 == 0); - - // Restore ACC0 - 0c30 00d0 0e17 lr $AC0.H, @0x0e17 - 0c32 00de 0e18 lr $AC0.M, @0x0e18 - 0c34 00dc 0e19 lr $AC0.L, @0x0e19 - - // 0c36 0000 nop - // 0c37 0000 nop - // 0c38 0000 nop - // 0c39 0000 nop - // 0c3a 02ff rti - return; -} - -void Int3_Handler() { - 0c3b 8e00 set16 - - // Save AC0.L, AC0.M - 0c3c 1dbc mrr $ST1, $AC0.L - 0c3d 1dbe mrr $ST1, $AC0.M - - // 0c3e 8100 clr $ACC0 - // 0c3f 00de 0bb7 lr $AC0.M, @0x0bb7 - // 0c41 0601 cmpis $AC0.M, #0x01 - // 0c42 0295 0c47 jz 0x0c47 - // 0c44 0e00 lris $AC0.M, #0x00 - // 0c45 00fe 0b87 sr @0x0b87, $AC0.M - if (*0x0bb7 != 1) { // pb.addr != AXPBADDR_LOOP_ON - *0x0b87 = 0; // pb.state = AX_PB_STATE_STOP - } - - // Restore AC0.L, AC0.M - 0c47 1fcd mrr $AC0.M, $ST1 - 0c48 1f8d mrr $AC0.L, $ST1 - - // 0c49 02ff rti - return; -} - -void Int4_Handler() { - // 0c4a 0000 nop - // 0c4b 0000 nop - // 0c4c 0000 nop - // 0c4d 0000 nop - // 0c4e 0000 nop - // 0c4f 02ff rti - return; -} - -void Int5_Handler() { - 0c50 8e00 set16 - - // Save AC0.L, AC0.M - 0c51 1dbc mrr $ST1, $AC0.L - 0c52 1dbe mrr $ST1, $AC0.M - - // 0c53 8100 clr $ACC0 - // 0c54 00de 0bb7 lr $AC0.M, @0x0bb7 - // 0c56 0601 cmpis $AC0.M, #0x01 - // 0c57 0295 0c5f jz 0x0c5f - if (*0x0bb7 != 1) // pb.addr != AXPBADDR_LOOP_ON - { - // 0c59 0e00 lris $AC0.M, #0x00 - // 0c5a 00fe 0b87 sr @0x0b87, $AC0.M - *0x0b87 = 0; // pb.state = AX_PB_STATE_STOP - - // Restore AC0.L, AC0.M - 0c5c 1fcd mrr $AC0.M, $ST1 - 0c5d 1f8d mrr $AC0.L, $ST1 - - // 0c5e 02ff rti - return; - } - - // 0c5f 8100 clr $ACC0 - // 0c60 00de 0b88 lr $AC0.M, @0x0b88 - // 0c62 0601 cmpis $AC0.M, #0x01 - // 0c63 0295 0c71 jz 0x0c71 - if (*0x0b88 != 1) { // pb.type != AX_PB_TYPE_STREAM - - // 0c65 00de 0bda lr $AC0.M, @0x0bda - // 0c67 2eda srs @scale, $AC0.M - // 0c68 00de 0bdb lr $AC0.M, @0x0bdb - // 0c6a 2edb srs @yn1, $AC0.M - // 0c6b 00de 0bdc lr $AC0.M, @0x0bdc - // 0c6d 2edc srs @yn2, $AC0.M - @scale = pb.adpcmLoop.loop_pred_scale - @yn1 = pb.adpcmLoop.loop_yn1 - @yn2 = pb.adpcmLoop.loop_yn2 - - // Restore AC0.L, AC0.M - 0c6e 1fcd mrr $AC0.M, $ST1 - 0c6f 1f8d mrr $AC0.L, $ST1 - - // 0c70 02ff rti - return; - - } else { - - // 0c71 00de 0bda lr $AC0.M, @0x0bda - // 0c73 2eda srs @scale, $AC0.M - // 0c74 26db lrs $AC0.M, @yn1 - // 0c75 2edb srs @yn1, $AC0.M - // 0c76 26dc lrs $AC0.M, @yn2 - // 0c77 2edc srs @yn2, $AC0.M - @scale = pb.adpcmLoop.loop_pred_scale - // refresh @yn1, @yn2....why? - @yn1 = @yn1 - @yn2 = @yn2 - - // Well helllloooo there, padding - // 0c78 8100 clr $ACC0 - // 0c79 00dc 0bdd lr $AC0.L, @0x0bdd - // 0c7b 7600 inc $ACC0 - // 0c7c 00fc 0bdd sr @0x0bdd, $AC0.L - // 0c7e 8100 clr $ACC0 - pb.pad[0]++ - - // Restore AC0.L, AC0.M - 0c7f 1fcd mrr $AC0.M, $ST1 - 0c80 1f8d mrr $AC0.L, $ST1 - - // 0c81 02ff rti - return; - } -} - -void Int6_Handler() { - 0c82 0000 nop - 0c83 0000 nop - 0c84 0000 nop - 0c85 0000 nop - 0c86 0000 nop - 0c87 02ff rti -} - -void Int7_Handler() { - 0c88 0000 nop - 0c89 0000 nop - 0c8a 0000 nop - 0c8b 0000 nop - 0c8c 02ff rti -} - -# End of interrupt handlers - -// Jump table for the next function. -0c8d 0c9f // some kind of soft-reset for the UCode -0c8e 0ca2 // looks like code to dump the UCode memory for debugging -0c8f 0cda // rest the UCode and jump to ROM -0c90 0cdd // normal case to return to the main-loop - -// Called only from Task_Yield() -// Decides what to do next (this cmdblock is done) -void JumpThroughTable2() { - 0c91 8e00 set16 - 0c92 8100 clr $ACC0 - 0c93 8900 clr $ACC1 - - // 0c94 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - // 0c96 27ff lrs $AC1.M, @CMBL - // 0c97 009e 0c8d lri $AC0.M, #0x0c8d - // 0c99 4c00 add $ACC0, $ACC1 - // 0c9a 1c7e mrr $AR3, $AC0.M - // 0c9b 0313 ilrr $AC1.M, @$AR3 - // 0c9c 1c7f mrr $AR3, $AC1.M - // 0c9d 176f jmpr $AR3 - switch(@CMBL) { - case 0: AX_ResumeTask(); break; - case 1: JumpTable2_1(); break; - case 2: IROM_Reset(); break; - case 3: AX_GetNextCmdBlock(); break; - } - 0c9e 0021 halt -} - -// case 0: -void AX_ResumeTask() { - 0c9f 029f 0030 jmp 0x0030 - 0ca1 0021 halt -} - -// case 1: -// funky...calls the mbox funcs, sometimes prefilling ACx regs... -// Perhaps DMAs some stuff and yields? -// Need to RE the ROM to figure this func out completely -void JumpTable2_1() { - // 0ca2 8100 clr $ACC0 - // 0ca3 8900 clr $ACC1 - // 0ca4 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - // 0ca6 24ff lrs $AC0.L, @CMBL - // 0ca7 02bf 0ce6 call 0x0ce6 - WaitForCPUMail1(); - - // 0ca9 25ff lrs $AC1.L, @CMBL - // 0caa 02bf 0ce6 call 0x0ce6 - WaitForCPUMail1(); - - 0cac 27ff lrs $AC1.M, @CMBL - 0cad 2ece srs @DSMAH, $AC0.M - 0cae 2ccf srs @DSMAL, $AC0.L - 0caf 16c9 0001 si @DSCR, #0x0001 - 0cb1 2fcd srs @DSPA, $AC1.M - 0cb2 2dcb srs @DSBL, $AC1.L - - // 0cb3 8100 clr $ACC0 - // 0cb4 8900 clr $ACC1 - // 0cb5 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - 0cb7 24ff lrs $AC0.L, @CMBL - 0cb8 1c9e mrr $IX0, $AC0.M - 0cb9 1cbc mrr $IX1, $AC0.L - 0cba 02bf 0ce6 call 0x0ce6 - WaitForCPUMail1(); - - 0cbc 25ff lrs $AC1.L, @CMBL - 0cbd 02bf 0ce6 call 0x0ce6 - WaitForCPUMail1(); - - 0cbf 27ff lrs $AC1.M, @CMBL - 0cc0 1cdf mrr $IX2, $AC1.M - 0cc1 1cfd mrr $IX3, $AC1.L - - // 0cc2 8100 clr $ACC0 - // 0cc3 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - 0cc5 26ff lrs $AC0.M, @CMBL - 0cc6 1c1e mrr $AR0, $AC0.M - 0cc7 8900 clr $ACC1 - 0cc8 02bf 0ce6 call 0x0ce6 - WaitForCPUMail1(); - - 0cca 20ff lrs $AX0.L, @CMBL - 0ccb 1f5f mrr $AX0.H, $AC1.M - 0ccc 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - 0cce 21ff lrs $AX1.L, @CMBL - 0ccf 02bf 0ce0 call 0x0ce0 - WaitForCPUMail0(); - - 0cd1 23ff lrs $AX1.H, @CMBL - - // 0cd2 26c9 lrs $AC0.M, @DSCR - // 0cd3 02a0 0004 andf $AC0.M, #0x0004 - // 0cd5 029c 0cd2 jlnz 0x0cd2 - while (@DSCR & 0x0004 != 0); // Wait for DMA to complete - - // 0cd7 029f 80b5 jmp 0x80b5 - // 0cd9 0021 halt - IROM_ErrorAndDie(); // Not sure...gotta RE the ROM -} - -// case 2: -void IROM_Reset() { - 0cda 029f 8000 jmp 0x8000 - 0cdc 0021 halt -} - -// case 3: -void AX_GetNextCmdBlock() { - // 0cdd 029f 0045 jmp 0x0045 - goto GetNextCmdBlock; - - 0cdf 0021 halt -} - -void WaitForCPUMail0() { - // 0ce0 26fe lrs $AC0.M, @CMBH - // 0ce1 02c0 8000 andcf $AC0.M, #0x8000 - // 0ce3 029c 0ce0 jlnz 0x0ce0 - while (@CMBH & 0x8000 == 0); - // 0ce5 02df ret - return; -} - -void WaitForCPUMail1() { - // 0ce6 27fe lrs $AC1.M, @CMBH - // 0ce7 03c0 8000 andcf $AC1.M, #0x8000 - // 0ce9 029c 0ce6 jlnz 0x0ce6 - while (@CMBH & 0x8000 == 0); - // 0ceb 02df ret - return; -} - -0cec 0000 nop -0ced 0000 nop -0cee 0000 nop -0cef 0000 nop +// This document was previously called "DSP_UC_AX1.txt" and "Crazy Taxi.txt" +// CR is set to #FF all the time in this ucode, so srs/lrs always operate on hw registers. + +////////////////////////////////////////////////////////////////////////// +// Known addresses in DRAM +Addr Name Description/Notes + +// Buffers +0x0000 Main Right +0x0140 Main Left +0x0280 +0x0400 +0x0540 +0x0680 +0x07c0 +0x0900 +0x0a40 + +0x03c0 update_block Contains pairs to update current PB with + +0x0b80 pb Current pb, length = 0xc0 + +0x0e04 ms_remaining Milliseconds remaining to process for current voice +0x0e05 pUpdate_block Pointer to update_block +0x0e06 pUpdates_this_ms Pointer to number of updates + +// Pointers to buffers +0x0e08 0x0000 See buffers at 0x0000 +0x0e09 0x0140 +0x0e0a 0x0280 +0x0e0b 0x0400 +0x0e0c 0x0540 +0x0e0d 0x0680 +0x0e0e 0x07c0 +0x0e0f 0x0900 +0x0e10 0x0a40 + +// Func pointers +0x0e14 selectedMixCtrl +0x0e15 selectedSRC +0x0e16 selectedCoef Points into DROM + +// ITD +0x0e40 +0x0e41 +0x0e42 +0x0e43 +////////////////////////////////////////////////////////////////////////// + +// Good ol' exception table +0000 0000 nop +0001 0000 nop // 0 Reset falls through, kinda wierd... +0002 029f 0c10 jmp 0x0c10 // 1 Stack U/O flow +0004 029f 0c1f jmp 0x0c1f // 2 +0006 029f 0c3b jmp 0x0c3b // 3 +0008 029f 0c4a jmp 0x0c4a // 4 ? empty +000a 029f 0c50 jmp 0x0c50 // 5 accelerator address overflow +000c 029f 0c82 jmp 0x0c82 // 6 ? empty +000e 029f 0c88 jmp 0x0c88 // 7 ? empty + +// Entry point +void Task_Init() { + // AX operates in this context all the time + // 0010 1302 sbset #0x02 + // 0011 1303 sbset #0x03 + // 0012 1204 sbclr #0x04 + // 0013 1305 sbset #0x05 + // 0014 1306 sbset #0x06 + // 0015 8e00 set16 + // 0016 8c00 clr15 + // 0017 8b00 m0 + // 0018 0092 00ff lri $CR, #0x00ff + + // 001a 8100 clr $ACC0 + // 001b 8900 clr $ACC1 + // 001c 009e 0e80 lri $AC0.M, #0x0e80 + // 001e 00fe 0e1b sr @0x0e1b, $AC0.M + // 0020 8100 clr $ACC0 + // 0021 00fe 0e31 sr @0x0e31, $AC0.M + ACC0 = ACC1 = 0 + *0x0e1b = 0xe80 // Used in Cmd8 + *0x0e31 = 0 + + // Send DSP_INIT mail + // 0023 16fc dcd1 si @DMBH, #0xdcd1 + // 0025 16fd 0000 si @DMBL, #0x0000 + // 0027 16fb 0001 si @DIRQ, #0x0001 + DMB = 0xdcd10000 + // 0029 26fc lrs $AC0.M, @DMBH + // 002a 02a0 8000 andf $AC0.M, #0x8000 + // 002c 029c 0029 jlnz 0x0029 + while (@DMBH & 0x8000 == 0); + + // 002e 029f 0045 jmp 0x0045 + goto GetNextCmdBlock; +} + +void Task_Resume() { + // Ensure sane context + // 0030 1302 sbset #0x02 + // 0031 1303 sbset #0x03 + // 0032 1204 sbclr #0x04 + // 0033 1305 sbset #0x05 + // 0034 1306 sbset #0x06 + // 0035 8e00 set16 + // 0036 8c00 clr15 + // 0037 8b00 m0 + // 0038 0092 00ff lri $CR, #0x00ff + + // Send DSP_RESUME mail + // 003a 16fc dcd1 si @DMBH, #0xdcd1 + // 003c 16fd 0001 si @DMBL, #0x0001 + // 003e 16fb 0001 si @DIRQ, #0x0001 + DMB = 0xdcd10001 + // 0040 26fc lrs $AC0.M, @DMBH + // 0041 02a0 8000 andf $AC0.M, #0x8000 + // 0043 029c 0040 jlnz 0x0040 + while (@DMBH & 0x8000 == 0); + +GetNextCmdBlock: + 0045 8e00 set16 + 0046 8100 clr $ACC0 + 0047 8900 clr $ACC1 + 0048 009f babe lri $AC1.M, #0xbabe + + // Wait for 0xbabexxxx mail from cpu + do { + // 004a 26fe lrs $AC0.M, @CMBH + // 004b 02c0 8000 andcf $AC0.M, #0x8000 + // 004d 029c 004a jlnz 0x004a + while (@CMBH & 0x8000 == 0); + + // 004f 8200 cmp + // 0050 0294 004a jnz 0x004a + } while (@CMBH != 0xbabe); + + // Save the low 16bits of the mail + // 0052 23ff lrs $AX1.H, @CMBL + u16 length = @CMBL + + // Get next mail + // 0053 8100 clr $ACC0 + // 0054 26fe lrs $AC0.M, @CMBH + // 0055 02c0 8000 andcf $AC0.M, #0x8000 + // 0057 029c 0054 jlnz 0x0054 + while (@CMBH & 0x8000 == 0); + + // 0059 27ff lrs $AC1.M, @CMBL + // 005a 0240 7fff andi $AC0.M, #0x7fff + // 005c 2ece srs @DSMAH, $AC0.M + // 005d 2fcf srs @DSMAL, $AC1.M + // 005e 16cd 0c00 si @DSPA, #0x0c00 + // 0060 8100 clr $ACC0 + // 0061 2ec9 srs @DSCR, $AC0.M + // 0062 1ffb mrr $AC1.M, $AX1.H + // 0063 2fcb srs @DSBL, $AC1.M + // DMA in the CmdBlock + static u16* CmdBlockBuf = 0x0c00 + DSMA = (@CMBH & ~0x8000) << 16 | @CMBL + DSPA = CmdBlockBuf + DSCR = 0 // CPU -> DMEM + DSBL = length + + // 0064 02bf 055c call 0x055c + WaitDMA(); + + // Init the CmdBlock pointer + 0066 0080 0c00 lri $AR0, #0x0c00 + +DoNextCommand: + // 0068 8e00 set16 + // 0069 8100 clr $ACC0 + // 006a 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 006b b100 tst $ACC0 + // 006c 0291 007e jl 0x007e + u16 Cmd = *(CmdBlockBuf++) + if (Cmd < 0) // How could this be possible? 'l is 16bit load... + Die_InvalidCmd(); + + // 006e 0a12 lris $AX0.H, #0x12 + // 006f c100 cmpar $ACC0, $AX0.H + // 0070 0292 007e jg 0x007e + if (Cmd > 0x12) + Die_InvalidCmd(); + + // 0072 009f 0aff lri $AC1.M, #0x0aff + // 0074 4c00 add $ACC0, $ACC1 + // 0075 1c7e mrr $AR3, $AC0.M + // 0076 0213 ilrr $AC0.M, @$AR3 + // 0077 1c7e mrr $AR3, $AC0.M + // 0078 176f jmpr $AR3 + switch (Cmd) { + case 0: Cmd_0(); break; // 0082 + case 1: Cmd_1(); break; // 013e + case 2: Cmd_2(); break; // 01bc + case 3: Cmd_3(); break; // 0248 + case 4: Cmd_4(); break; // 0413 + case 5: Cmd_5(); break; // 0427 + case 6: Cmd_6(); break; // 0165 + case 7: Cmd_7(); break; // 0574 + case 8: Cmd_8(); break; // 0b37 + case 9: Cmd_9(); break; // 015f + case 0xa: Cmd_a(); break; // 0478 + case 0xb: Cmd_b(); break; // 0474 + case 0xc: Cmd_c(); break; // 0476 + case 0xd: Cmd_d(); break; // 01a9 + case 0xe: Cmd_e(); break; // 043b + case 0xf: Cmd_f(); break; // 047a + case 0x10: Cmd_10(); break; // 0bb1 + case 0x11: Cmd_11(); break; // 0175 + } + + // Somehow we've passed the cmd proccessor; DIE!! + // 0079 16fc fbad si @DMBH, #0xfbad + // 007b 16fd 8080 si @DMBL, #0x8080 + DMB = 0xfbad8080 + 007d 0021 halt +} + +// Die and conveniently tell the cpu which cmd was baad +void Die_InvalidCmd() { + 007e 16fc baad si @DMBH, #0xbaad + 0080 2efd srs @DMBL, $AC0.M + 0081 0021 halt +} + +// Executes the same operation 3 times on buffers: (0, 0x0400, 0x07c0) +void Cmd_0() { + // 0082 8100 clr $ACC0 + // 0083 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 0084 8e78 set16'l : $AC1.M, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 0085 2ece srs @DSMAH, $AC0.M + // 0086 2fcf srs @DSMAL, $AC1.M + // 0087 009e 0e44 lri $AC0.M, #0x0e44 + // 0089 2ecd srs @DSPA, $AC0.M + // 008a 0e00 lris $AC0.M, #0x00 + // 008b 2ec9 srs @DSCR, $AC0.M + // 008c 009e 0040 lri $AC0.M, #0x0040 + // 008e 2ecb srs @DSBL, $AC0.M + + // DMA 0x0040bytes to DRAM @ 0x0e44 from CPU @ maddr + + 008f 0081 0e44 lri $AR1, #0x0e44 // source + 0091 0082 0000 lri $AR2, #0x0000 // destination + + 0093 009b 009f lri $AX1.H, #0x009f + 0095 009a 0140 lri $AX0.H, #0x0140 // loop length if !ACC0 + + 0097 8100 clr $ACC0 + 0098 8900 clr $ACC1 + + 0099 8f00 set40 + + // 009a 02bf 055c call 0x055c + WaitDMA(); + + 009c 193e lrri $AC0.M, @$AR1 + 009d 193c lrri $AC0.L, @$AR1 + 009e b100 tst $ACC0 + 009f 193f lrri $AC1.M, @$AR1 // added to ACC0 in confusing ways + // 00a0 0294 00a6 jnz 0x00a6 + if (!$ACC0) { + 00a2 005a loop $AX0.H + 00a3 1b5e srri @$AR2, $AC0.M + + // 00a4 029f 00ae jmp 0x00ae + } else { + 00a6 9900 asr16 $ACC1 + 00a7 1b5e srri @$AR2, $AC0.M + 00a8 1b5c srri @$AR2, $AC0.L + 00a9 007b 00ad bloop $AX1.H, 0x00ad + 00ab 4c00 add $ACC0, $ACC1 + 00ac 1b5e srri @$AR2, $AC0.M + 00ad 1b5c srri @$AR2, $AC0.L + + } + + // same code block as above...epic fail? + 00ae 193e lrri $AC0.M, @$AR1 + 00af 193c lrri $AC0.L, @$AR1 + 00b0 b100 tst $ACC0 + 00b1 193f lrri $AC1.M, @$AR1 + // 00b2 0294 00b8 jnz 0x00b8 + if (!$ACC0) { + 00b4 005a loop $AX0.H + 00b5 1b5e srri @$AR2, $AC0.M + + // 00b6 029f 00c0 jmp 0x00c0 + } else { + 00b8 9900 asr16 $ACC1 + 00b9 1b5e srri @$AR2, $AC0.M + 00ba 1b5c srri @$AR2, $AC0.L + 00bb 007b 00bf bloop $AX1.H, 0x00bf + 00bd 4c00 add $ACC0, $ACC1 + 00be 1b5e srri @$AR2, $AC0.M + 00bf 1b5c srri @$AR2, $AC0.L + + } + + // ...and again! wtf + 00c0 193e lrri $AC0.M, @$AR1 + 00c1 193c lrri $AC0.L, @$AR1 + 00c2 b100 tst $ACC0 + 00c3 193f lrri $AC1.M, @$AR1 + // 00c4 0294 00ca jnz 0x00ca + if (!$ACC0) { + 00c6 005a loop $AX0.H + 00c7 1b5e srri @$AR2, $AC0.M + + // 00c8 029f 00d2 jmp 0x00d2 + } else { + 00ca 9900 asr16 $ACC1 + 00cb 1b5e srri @$AR2, $AC0.M + 00cc 1b5c srri @$AR2, $AC0.L + 00cd 007b 00d1 bloop $AX1.H, 0x00d1 + 00cf 4c00 add $ACC0, $ACC1 + 00d0 1b5e srri @$AR2, $AC0.M + 00d1 1b5c srri @$AR2, $AC0.L + + } + + // set to next buffer + 00d2 0082 0400 lri $AR2, #0x0400 + + // same code block, uses tst'l in one place...otherwise the same + 00d4 193e lrri $AC0.M, @$AR1 + 00d5 193c lrri $AC0.L, @$AR1 + 00d6 b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 00d7 0294 00dd jnz 0x00dd + if (!$ACC0) { + 00d9 005a loop $AX0.H + 00da 1b5e srri @$AR2, $AC0.M + // 00db 029f 00e5 jmp 0x00e5 + } else { + 00dd 9900 asr16 $ACC1 + 00de 1b5e srri @$AR2, $AC0.M + 00df 1b5c srri @$AR2, $AC0.L + 00e0 007b 00e4 bloop $AX1.H, 0x00e4 + 00e2 4c00 add $ACC0, $ACC1 + 00e3 1b5e srri @$AR2, $AC0.M + 00e4 1b5c srri @$AR2, $AC0.L + } + + // same code block, using tst'l again...wonder if it actually changes behavior? + 00e5 193e lrri $AC0.M, @$AR1 + 00e6 193c lrri $AC0.L, @$AR1 + 00e7 b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 00e8 0294 00ee jnz 0x00ee + if (!$ACC0) { + 00ea 005a loop $AX0.H + 00eb 1b5e srri @$AR2, $AC0.M + // 00ec 029f 00f6 jmp 0x00f6 + } else { + 00ee 9900 asr16 $ACC1 + 00ef 1b5e srri @$AR2, $AC0.M + 00f0 1b5c srri @$AR2, $AC0.L + 00f1 007b 00f5 bloop $AX1.H, 0x00f5 + 00f3 4c00 add $ACC0, $ACC1 + 00f4 1b5e srri @$AR2, $AC0.M + 00f5 1b5c srri @$AR2, $AC0.L + } + + // see comments above + 00f6 193e lrri $AC0.M, @$AR1 + 00f7 193c lrri $AC0.L, @$AR1 + 00f8 b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 00f9 0294 00ff jnz 0x00ff + if (!$ACC0) { + 00fb 005a loop $AX0.H + 00fc 1b5e srri @$AR2, $AC0.M + // 00fd 029f 0107 jmp 0x0107 + } else { + 00ff 9900 asr16 $ACC1 + 0100 1b5e srri @$AR2, $AC0.M + 0101 1b5c srri @$AR2, $AC0.L + 0102 007b 0106 bloop $AX1.H, 0x0106 + 0104 4c00 add $ACC0, $ACC1 + 0105 1b5e srri @$AR2, $AC0.M + 0106 1b5c srri @$AR2, $AC0.L + } + + // set to next buffer + 0107 0082 07c0 lri $AR2, #0x07c0 + + // see comments above + 0109 193e lrri $AC0.M, @$AR1 + 010a 193c lrri $AC0.L, @$AR1 + 010b b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 010c 0294 0112 jnz 0x0112 + if (!$ACC0) { + 010e 005a loop $AX0.H + 010f 1b5e srri @$AR2, $AC0.M + // 0110 029f 011a jmp 0x011a + } else { + 0112 9900 asr16 $ACC1 + 0113 1b5e srri @$AR2, $AC0.M + 0114 1b5c srri @$AR2, $AC0.L + 0115 007b 0119 bloop $AX1.H, 0x0119 + 0117 4c00 add $ACC0, $ACC1 + 0118 1b5e srri @$AR2, $AC0.M + 0119 1b5c srri @$AR2, $AC0.L + } + + // see comments above + 011a 193e lrri $AC0.M, @$AR1 + 011b 193c lrri $AC0.L, @$AR1 + 011c b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 011d 0294 0123 jnz 0x0123 + if (!$ACC0) { + 011f 005a loop $AX0.H + 0120 1b5e srri @$AR2, $AC0.M + // 0121 029f 012b jmp 0x012b + } else { + 0123 9900 asr16 $ACC1 + 0124 1b5e srri @$AR2, $AC0.M + 0125 1b5c srri @$AR2, $AC0.L + 0126 007b 012a bloop $AX1.H, 0x012a + 0128 4c00 add $ACC0, $ACC1 + 0129 1b5e srri @$AR2, $AC0.M + 012a 1b5c srri @$AR2, $AC0.L + } + + // see comments above + 012b 193e lrri $AC0.M, @$AR1 + 012c 193c lrri $AC0.L, @$AR1 + 012d b179 tst'l $ACC0 : $AC1.M, @$AR1 + // 012e 0294 0134 jnz 0x0134 + if (!$ACC0) { + 0130 005a loop $AX0.H + 0131 1b5e srri @$AR2, $AC0.M + // 0132 029f 013c jmp 0x013c + } else { + 0134 9900 asr16 $ACC1 + 0135 1b5e srri @$AR2, $AC0.M + 0136 1b5c srri @$AR2, $AC0.L + 0137 007b 013b bloop $AX1.H, 0x013b + 0139 4c00 add $ACC0, $ACC1 + 013a 1b5e srri @$AR2, $AC0.M + 013b 1b5c srri @$AR2, $AC0.L + } + + // 013c 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_1() { + 013e 0085 ffff lri $IX1, #0xffff // -1 + + // 0140 8150 clr'l $ACC0 : $AX0.H, @$AR0 + // 0141 8940 clr'l $ACC1 : $AX0.L, @$AR0 + // 0142 8e48 set16'l : $AX1.L, @$AR0 + // 0143 00fa 0e17 sr @0x0e17, $AX0.H + // 0145 00f8 0e18 sr @0x0e18, $AX0.L + // 0147 0081 0000 lri $AR1, #0x0000 + // 0149 02bf 04f1 call 0x04f1 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + u16 unkForMulBuffer1 = *(CmdBlockBuf++) + u16 unkForMulBuffer2 = 0 // a buffer in dram + Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) + + // 014b 00da 0e17 lr $AX0.H, @0x0e17 + // 014d 00d8 0e18 lr $AX0.L, @0x0e18 + // 014f 8948 clr'l $ACC1 : $AX1.L, @$AR0 + // 0150 0081 0400 lri $AR1, #0x0400 + // 0152 02bf 04f1 call 0x04f1 + unkForMulBuffer1 = *(CmdBlockBuf++) + unkForMulBuffer2 = 0x0400 + Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) + + // 0154 00da 0e17 lr $AX0.H, @0x0e17 + // 0156 00d8 0e18 lr $AX0.L, @0x0e18 + // 0158 8948 clr'l $ACC1 : $AX1.L, @$AR0 + // 0159 0081 07c0 lri $AR1, #0x07c0 + // 015b 02bf 04f1 call 0x04f1 + unkForMulBuffer1 = *(CmdBlockBuf++) + unkForMulBuffer2 = 0x07c0 + Unk(maddrh << 16 | maddrl, unkForMulBuffer1, unkForMulBuffer2) + + // 015d 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_9() { + 015f 0086 07c0 lri $IX2, #0x07c0 // often used buffer in dram + + 0161 02bf 0484 call 0x0484 + + // 0163 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_6() { + 0165 8100 clr $ACC0 + 0166 8e00 set16 + + // 0167 191e lrri $AC0.M, @$AR0 + // 0168 191c lrri $AC0.L, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 0169 2ece srs @DSMAH, $AC0.M + // 016a 2ccf srs @DSMAL, $AC0.L + // 016b 16cd 0000 si @DSPA, #0x0000 + // 016d 16c9 0001 si @DSCR, #0x0001 + // 016f 16cb 0780 si @DSBL, #0x0780 + + // DMA 0x780bytes to CPU @ maddr from DMEM @ 0 + + // 0171 02bf 055c call 0x055c + WaitDMA(); + + // 0173 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_11() { + // 0175 8100 clr $ACC0 + // 0176 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 0177 8e60 set16'l : $AC0.L, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 0178 2ece srs @DSMAH, $AC0.M + // 0179 2ccf srs @DSMAL, $AC0.L + // 017a 16cd 0e44 si @DSPA, #0x0e44 + // 017c 16c9 0000 si @DSCR, #0x0000 + // 017e 8900 clr $ACC1 + // 017f 0d20 lris $AC1.L, #0x20 + // 0180 2dcb srs @DSBL, $AC1.L + + // DMA 0x20bytes to DRAM @ 0x0e44 from CPU @ maddr + + u16 length_of_0e44 = 0x20 + + // 0181 4c00 add $ACC0, $ACC1 + maddr += length_of_0e44 + + // Save CmdBlockBuf + // 0182 1c80 mrr $IX0, $AR0 + + // 0183 0080 0280 lri $AR0, #0x0280 + // 0185 0081 0000 lri $AR1, #0x0000 + // 0187 0082 0140 lri $AR2, #0x0140 + // 0189 0083 0e44 lri $AR3, #0x0e44 + // 018b 0a00 lris $AX0.H, #0x00 + + // 018c 27c9 lrs $AC1.M, @DSCR + // 018d 03a0 0004 andf $AC1.M, #0x0004 + // 018f 029c 018c jlnz 0x018c + while (@DSCR & 4); + + // 0191 2ece srs @DSMAH, $AC0.M + // 0192 2ccf srs @DSMAL, $AC0.L + // 0193 16cd 0e54 si @DSPA, #0x0e54 + // 0195 16c9 0000 si @DSCR, #0x0000 + // 0197 16cb 0260 si @DSBL, #0x0260 + + // DMA 0x0260bytes to DRAM @ 0x0e54 from CPU @ maddr + + // 0199 009f 00a0 lri $AC1.M, #0x00a0 + // 019b 8f00 set40 + // 019c 007f 01a5 bloop $AC1.M, 0x01a5 + // 019e 197e lrri $AC0.M, @$AR3 + // 019f 1b1a srri @$AR0, $AX0.H + // 01a0 197c lrri $AC0.L, @$AR3 + // 01a1 1b1a srri @$AR0, $AX0.H + // 01a2 1b5e srri @$AR2, $AC0.M + // 01a3 7c22 neg's $ACC0 : @$AR2, $AC0.L + // 01a4 1b3e srri @$AR1, $AC0.M + // 01a5 1b3c srri @$AR1, $AC0.L + + // high reg will only be sign bits, and it's never stored, so we can use s32 here + s32* buffer_source = 0x0e44 + s32* buffer_dest = 0x0140 + s32* buffer_to_zero = 0x0280 + s32* buffer_dest_neg = 0x0000 + for (i = 0x00a0; i > 0; i--) { + s32 thing = *(buffer_source++) + *(buffer_to_zero++) = 0 + *(buffer_dest++) = thing + *(buffer_dest_neg++) = ~thing + } + + // Restore CmdBlockBuf + 01a6 1c04 mrr $AR0, $IX0 + + // 01a7 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +// Interesting, DMAs in new CmdBlock and starts executing it +void Cmd_D() { + // 01a9 8e70 set16'l : $AC0.M, @$AR0 + // 01aa 8960 clr'l $ACC1 : $AC0.L, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 01ab 191f lrri $AC1.M, @$AR0 + u16 numbytes = *(CmdBlockBuf++) + + // 01ac 2ece srs @DSMAH, $AC0.M + // 01ad 2ccf srs @DSMAL, $AC0.L + // 01ae 16cd 0c00 si @DSPA, #0x0c00 + // 01b0 16c9 0000 si @DSCR, #0x0000 + // 01b2 0503 addis $AC1.M, #0x03 + // 01b3 0340 fff0 andi $AC1.M, #0xfff0 + // 01b5 2fcb srs @DSBL, $AC1.M + + // DMA ((numbytes + 3) & 0xfff0)bytes to DMEM @ 0x0c00 from CPU @ maddr + + // 01b6 02bf 055c call 0x055c + WaitDMA(); + + // 01b8 0080 0c00 lri $AR0, #0x0c00 + CmdBlockBuf = 0x0c00 + + // 01ba 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +// DMAs in a new PB and inits values (itd, func pointers, etc) +// DMAs in new update_block, but doesn't apply it +void Cmd_2() { + 01bc 8100 clr $ACC0 + + // 01bd 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 01be 8e78 set16'l : $AC1.M, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 01bf 2ece srs @DSMAH, $AC0.M + // 01c0 2fcf srs @DSMAL, $AC1.M + // 01c1 16cd 0b80 si @DSPA, #0x0b80 + // 01c3 16c9 0000 si @DSCR, #0x0000 + // 01c5 16cb 00c0 si @DSBL, #0x00c0 + + // DMA 0x00c0bytes to DMEM @ 0x0b80 from CPU @ maddr + + // 01c7 0082 0e08 lri $AR2, #0x0e08 + // 01c9 009f 0000 lri $AC1.M, #0x0000 + // 01cb 1b5f srri @$AR2, $AC1.M + // 01cc 009f 0140 lri $AC1.M, #0x0140 + // 01ce 1b5f srri @$AR2, $AC1.M + // 01cf 009f 0280 lri $AC1.M, #0x0280 + // 01d1 1b5f srri @$AR2, $AC1.M + // 01d2 009f 0400 lri $AC1.M, #0x0400 + // 01d4 1b5f srri @$AR2, $AC1.M + // 01d5 009f 0540 lri $AC1.M, #0x0540 + // 01d7 1b5f srri @$AR2, $AC1.M + // 01d8 009f 0680 lri $AC1.M, #0x0680 + // 01da 1b5f srri @$AR2, $AC1.M + // 01db 009f 07c0 lri $AC1.M, #0x07c0 + // 01dd 1b5f srri @$AR2, $AC1.M + // 01de 009f 0900 lri $AC1.M, #0x0900 + // 01e0 1b5f srri @$AR2, $AC1.M + // 01e1 009f 0a40 lri $AC1.M, #0x0a40 + // 01e3 1b5f srri @$AR2, $AC1.M + *0x0e08 = 0x0000 + *0x0e09 = 0x0140 + *0x0e0a = 0x0280 + *0x0e0b = 0x0400 + *0x0e0c = 0x0540 + *0x0e0d = 0x0680 + *0x0e0e = 0x07c0 + *0x0e0f = 0x0900 + *0x0e10 = 0x0a40 + + // 01e4 02bf 055c call 0x055c + WaitDMA(); + + // 01e6 00de 0ba7 lr $AC0.M, @0x0ba7 + // 01e8 00df 0ba8 lr $AC1.M, @0x0ba8 + // 01ea 2ece srs @DSMAH, $AC0.M + // 01eb 2fcf srs @DSMAL, $AC1.M + // 01ec 16cd 03c0 si @DSPA, #0x03c0 + // 01ee 16c9 0000 si @DSCR, #0x0000 + // 01f0 16cb 0080 si @DSBL, #0x0080 + + // DMA 0x80bytes from CPU @ ((pb.update.dataHi << 16) | pb.update.dataLo) to DRAM @ 0x03c0 + + // 01f2 8100 clr $ACC0 + // 01f3 8900 clr $ACC1 + + // 01f4 00de 0b84 lr $AC0.M, @0x0b84 + // 01f6 009f 0b31 lri $AC1.M, #0x0b31 + // 01f8 4c00 add $ACC0, $ACC1 + // 01f9 1c7e mrr $AR3, $AC0.M + // 01fa 0213 ilrr $AC0.M, @$AR3 + // 01fb 00fe 0e15 sr @0x0e15, $AC0.M + *0x0e15 = *(0x0b31 + pb.srcSelect) // func ptr for src + + // 01fd 00de 0b85 lr $AC0.M, @0x0b85 + // 01ff 009f 0b34 lri $AC1.M, #0x0b34 + // 0201 4c00 add $ACC0, $ACC1 + // 0202 1c7e mrr $AR3, $AC0.M + // 0203 0213 ilrr $AC0.M, @$AR3 + // 0204 00fe 0e16 sr @0x0e16, $AC0.M + *0x0e16 = *(0x0b34 + pb.coefSelect) // ptr to coef table + + // 0206 00de 0b86 lr $AC0.M, @0x0b86 + // 0208 009f 0b11 lri $AC1.M, #0x0b11 + // 020a 4c00 add $ACC0, $ACC1 + // 020b 1c7e mrr $AR3, $AC0.M + // 020c 0213 ilrr $AC0.M, @$AR3 + // 020d 00fe 0e14 sr @0x0e14, $AC0.M + *0x0e14 = *(0x0b11 + pb.mixerCtrl) // func ptr for mixer + + // 020f 8100 clr $ACC0 + // 0210 00de 0b9b lr $AC0.M, @0x0b9b + // 0212 b100 tst $ACC0 + // 0213 0295 023a jz 0x023a + if (pb.itd.flag != AX_PB_ITD_OFF) { + // 0215 8900 clr $ACC1 + // 0216 00df 0b9e lr $AC1.M, @0x0b9e + // 0218 0300 0cc0 addi $AC1.M, #0x0cc0 + // 021a 00ff 0e40 sr @0x0e40, $AC1.M + *0x0e40 = 0x0cc0 + pb.itd.shiftL + + // 021c 00df 0b9f lr $AC1.M, @0x0b9f + // 021e 0300 0cc0 addi $AC1.M, #0x0cc0 + // 0220 00ff 0e41 sr @0x0e41, $AC1.M + *0x0e41 = 0x0cc0 + pb.itd.shiftR + + // 0222 009f 0ce0 lri $AC1.M, #0x0ce0 + // 0224 00ff 0e42 sr @0x0e42, $AC1.M + // 0226 00ff 0e43 sr @0x0e43, $AC1.M + *0x0e42 = 0x0ce0 + *0x0e43 = 0x0ce0 + + // 0228 02bf 055c call 0x055c + WaitDMA(); + + // 022a 00de 0b9c lr $AC0.M, @0x0b9c + // 022c 2ece srs @DSMAH, $AC0.M + // 022d 00de 0b9d lr $AC0.M, @0x0b9d + // 022f 2ecf srs @DSMAL, $AC0.M + // 0230 16cd 0cc0 si @DSPA, #0x0cc0 + // 0232 16c9 0000 si @DSCR, #0x0000 + // 0234 16cb 0040 si @DSBL, #0x0040 + + // DMA 0x0040bytes to DMEM @ 0x0cc0 from CPU @ (pb.itd.bufferHi << 16) | pb.itd.bufferLo + + // 0236 02bf 055c call 0x055c + WaitDMA(); + + // 0238 029f 0068 jmp 0x0068 + goto DoNextCommand; + + } else { + + // 023a 009f 0ce0 lri $AC1.M, #0x0ce0 + // 023c 00ff 0e42 sr @0x0e42, $AC1.M + // 023e 00ff 0e40 sr @0x0e40, $AC1.M + // 0240 00ff 0e41 sr @0x0e41, $AC1.M + // 0242 00ff 0e43 sr @0x0e43, $AC1.M + *0x0e42 = 0x0ce0 + *0x0e40 = 0x0ce0 + *0x0e41 = 0x0ce0 + *0x0e43 = 0x0ce0 + + // 0244 02bf 055c call 0x055c + WaitDMA(); + + // 0246 029f 0068 jmp 0x0068 + goto DoNextCommand; + } +} + +// Function calls itself until there are no more linked PBs +void Cmd_3() { + 0248 8e00 set16 + + // Save CmdBlockBuf ptr + 0249 00e0 0e07 sr @0x0e07, $AR0 + + // Processes pb.update.updNum[0] to pb.update.updNum[5] + // Applies specified number of updates for every millisecond of voice frame (5 millisecs) + // first millisec's updates are ignored <- not proven, yet + + // 024b 0080 0ba2 lri $AR0, #0x0ba2 // pb.update.updNum[0] + // 024d 0081 03c0 lri $AR1, #0x03c0 + // 024f 0e05 lris $AC0.M, #0x05 + // 0250 00fe 0e04 sr @0x0e04, $AC0.M // counter to decrement + // 0252 8900 clr $ACC1 + u16* pUpdates_this_ms = 0x0ba2 + u16* pUpdate_block = 0x03c0 + u16 ms_remaining = 5 + +NextMillisecUpd: + // 0253 8150 clr'l $ACC0 : $AX0.H, @$AR0 + // 0254 009f 0b80 lri $AC1.M, #0x0b80 + // 0256 007a 025b bloop $AX0.H, 0x025b + // 0258 193e lrri $AC0.M, @$AR1 + // 0259 4c49 add'l $ACC0, $ACC1 : $AX1.L, @$AR1 + // 025a 1c5e mrr $AR2, $AC0.M + // 025b 1a59 srr @$AR2, $AX1.L // AR2 isn't changed till updates are done + + // Write updates from update_block to pb in dram + for (int i = 0; i < *pUpdates_this_ms; i+=2) { + // Looks like 0x03c0 is a struct of pairs to write into PB + *(0x0b80 + *(pUpdate_block + i)) = *(pUpdate_block + i + 1) + } + pUpdates_this_ms++ + + // 025c 0083 0e05 lri $AR3, #0x0e05 + // 025e 1b61 srri @$AR3, $AR1 + // 025f 1b60 srri @$AR3, $AR0 + *0x0e05 = pUpdate_block + *0x0e06 = pUpdates_this_ms + // They are restored before jmping back to NextMillisecUpd + + // 0260 00de 0b87 lr $AC0.M, @0x0b87 + // 0262 0601 cmpis $AC0.M, #0x01 + // 0263 0295 0267 jz 0x0267 + // 0265 029f 0332 jmp 0x0332 + if (pb.state == AX_PB_STATE_RUN) { + + // 0267 00de 0e42 lr $AC0.M, @0x0e42 + // 0269 00fe 0e1c sr @0x0e1c, $AC0.M + *0x0e1c = *0x0e42 + + // 026b 00c3 0e15 lr $AR3, @0x0e15 + // 026d 177f callr $AR3 + DoSelectedSRC() + + // Volume Envelope Processing + // 026e 8e00 set16 + // 026f 8a00 m2 + // 0270 8100 clr $ACC0 + // 0271 8900 clr $ACC1 + // 0272 00de 0bb3 lr $AC0.M, @0x0bb3 // currentDelta (s16) + // 0274 00df 0bb2 lr $AC1.M, @0x0bb2 // currentVolume (u16) + // 0276 1f1f mrr $AX0.L, $AC1.M + // 0277 4d00 add $ACC1, $ACC0 + // 0278 1481 asl $ACC0, #1 + // 0279 8d1e set15'mv : $AX1.H, $AC0.M // unsigned mulx, + // 027a 1fd8 mrr $AC0.M, $AX0.L + // 027b 0098 8000 lri $AX0.L, #0x8000 + // 027d 0080 0e44 lri $AR0, #0x0e44 + // 027f a830 mulx's $AX0.L, $AX1.H : @$AR0, $AC0.M + // 0280 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0281 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0282 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0283 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0284 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0285 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0286 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0287 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0288 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0289 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 028a ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 028b ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 028c ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 028d ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 028e ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 028f ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0290 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0291 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0292 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0293 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0294 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0295 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0296 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0297 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 0298 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 0299 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 029a ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 029b ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 029c ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 029d ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + // 029e ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + // 029f 00fe 0bb2 sr @0x0bb2, $AC0.M + + u40 temp1 = pb.ve.currentVolume << 16 + u40 temp2 = (pb.ve.currentVolume + pb.ve.currentDelta) << 16 + *0x0e44 = temp1 >> 16 + *0x0e45 = temp2 >> 16 + + u40 PROD = (u16)0x8000 * (u16)(pb.ve.currentDelta << 1) * 2 + for (u16* i = 0x0e46; i < 0x0e46 + 30; i+=2) { + temp1 += PROD + temp2 += PROD + + *i = temp1 >> 16 + *(i + 1) = temp2 >> 16 + } + temp1 += PROD + pb.ve.currentVolume = temp1 >> 16 + + // 02a1 8f00 set40 + // 02a2 0080 0e44 lri $AR0, #0x0e44 + // 02a4 00c1 0e43 lr $AR1, @0x0e43 + // 02a6 1c61 mrr $AR3, $AR1 + // 02a7 193a lrri $AX0.H, @$AR1 + // 02a8 1918 lrri $AX0.L, @$AR0 + // 02a9 9059 mul'l $AX0.L, $AX0.H : $AX1.H, @$AR1 + // 02aa 1919 lrri $AX1.L, @$AR0 + // 02ab 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02ac 8080 nx'ls : $AX0.L, $AC0.M + // 02ad 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02ae 8091 nx'ls : $AX1.L, $AC1.M + // 02af 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02b0 8080 nx'ls : $AX0.L, $AC0.M + // 02b1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02b2 8091 nx'ls : $AX1.L, $AC1.M + // 02b3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02b4 8080 nx'ls : $AX0.L, $AC0.M + // 02b5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02b6 8091 nx'ls : $AX1.L, $AC1.M + // 02b7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02b8 8080 nx'ls : $AX0.L, $AC0.M + // 02b9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02ba 8091 nx'ls : $AX1.L, $AC1.M + // 02bb 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02bc 8080 nx'ls : $AX0.L, $AC0.M + // 02bd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02be 8091 nx'ls : $AX1.L, $AC1.M + // 02bf 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02c0 8080 nx'ls : $AX0.L, $AC0.M + // 02c1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02c2 8091 nx'ls : $AX1.L, $AC1.M + // 02c3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02c4 8080 nx'ls : $AX0.L, $AC0.M + // 02c5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02c6 8091 nx'ls : $AX1.L, $AC1.M + // 02c7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02c8 8080 nx'ls : $AX0.L, $AC0.M + // 02c9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02ca 8091 nx'ls : $AX1.L, $AC1.M + // 02cb 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02cc 8080 nx'ls : $AX0.L, $AC0.M + // 02cd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02ce 8091 nx'ls : $AX1.L, $AC1.M + // 02cf 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02d0 8080 nx'ls : $AX0.L, $AC0.M + // 02d1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02d2 8091 nx'ls : $AX1.L, $AC1.M + // 02d3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02d4 8080 nx'ls : $AX0.L, $AC0.M + // 02d5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02d6 8091 nx'ls : $AX1.L, $AC1.M + // 02d7 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02d8 8080 nx'ls : $AX0.L, $AC0.M + // 02d9 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02da 8091 nx'ls : $AX1.L, $AC1.M + // 02db 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02dc 8080 nx'ls : $AX0.L, $AC0.M + // 02dd 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02de 8091 nx'ls : $AX1.L, $AC1.M + // 02df 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02e0 8080 nx'ls : $AX0.L, $AC0.M + // 02e1 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02e2 8091 nx'ls : $AX1.L, $AC1.M + // 02e3 9e51 mulmv'l $AX1.L, $AX1.H, $ACC0 : $AX0.H, @$AR1 + // 02e4 8080 nx'ls : $AX0.L, $AC0.M + // 02e5 9759 mulmv'l $AX0.L, $AX0.H, $ACC1 : $AX1.H, @$AR1 + // 02e6 8091 nx'ls : $AX1.L, $AC1.M + // 02e7 9e00 mulmv $AX1.L, $AX1.H, $ACC0 + // 02e8 6f33 movp's $ACC1 : @$AR3, $AC0.M + // 02e9 1b7f srri @$AR3, $AC1.M + + u16* dst = *0x0e43 + u16* temp1 = 0x0e44 + + for (x = 0; x < 0x20; x++) { + *(dst + x) = ((u16)*(temp1 + x) * (u16)*(dst + x) * 2) >> 16 + } + + // 02ea 00c3 0e14 lr $AR3, @0x0e14 + // 02ec 8f00 set40 + // 02ed 8d00 set15 + // 02ee 8a00 m2 + // 02ef 177f callr $AR3 + // Keep in mind: 40bit, unsigned, *2 + DoSelectedMixer() + + // Note: 40bit, unsigned, *2 not changed till 0x0332 + + // 02f0 8100 clr $ACC0 + // 02f1 00de 0b9b lr $AC0.M, @0x0b9b + // 02f3 b100 tst $ACC0 + // 02f4 0295 032a jz 0x032a + if (pb.itd.flag != AX_PB_ITD_OFF) { + // 02f6 00de 0e42 lr $AC0.M, @0x0e42 + // 02f8 00fe 0e43 sr @0x0e43, $AC0.M + *0x0e43 = *0x0e42 + + // 02fa 8100 clr $ACC0 + // 02fb 8900 clr $ACC1 + // 02fc 00de 0b9e lr $AC0.M, @0x0b9e + // 02fe 00df 0ba0 lr $AC1.M, @0x0ba0 + // 0300 8200 cmp + // 0301 0293 0306 jle 0x0306 + if (pb.itd.shiftL > pb.itd.targetShiftL) { + // 0303 7800 decm $AC0.M + // 0304 029f 0309 jmp 0x0309 + pb.itd.shiftL-- + } else if (pb.itd.shiftL < pb.itd.targetShiftL) { + // 0306 0295 0309 jz 0x0309 + // 0308 7400 incm $AC0.M + pb.itd.shiftL++ + } + // 0309 00fe 0b9e sr @0x0b9e, $AC0.M // Store pb.itd.shiftL + + // 030b 00df 0e43 lr $AC1.M, @0x0e43 + // 030d 05e0 addis $AC1.M, #0xe0 + // 030e 4c00 add $ACC0, $ACC1 + // 030f 00fe 0e40 sr @0x0e40, $AC0.M + *0x0e40 = *0x0e43 - 32 + + // 0311 8100 clr $ACC0 + // 0312 8900 clr $ACC1 + // 0313 00de 0b9f lr $AC0.M, @0x0b9f + // 0315 00df 0ba1 lr $AC1.M, @0x0ba1 + // 0317 8200 cmp + // 0318 0293 031d jle 0x031d + if (pb.itd.shiftR > pb.itd.targetShiftR) { + // 031a 7800 decm $AC0.M + // 031b 029f 0320 jmp 0x0320 + pb.itd.shiftR-- + } else if (pb.itd.shiftR < pb.itd.targetShiftR) { + // 031d 0295 0320 jz 0x0320 + // 031f 7400 incm $AC0.M + pb.itd.shiftR++ + } + // 0320 00fe 0b9f sr @0x0b9f, $AC0.M // Store pb.itd.shiftR + + // 0322 00df 0e43 lr $AC1.M, @0x0e43 + // 0324 05e0 addis $AC1.M, #0xe0 + // 0325 4c00 add $ACC0, $ACC1 + // 0326 00fe 0e41 sr @0x0e41, $AC0.M + *0x0e41 = *0x0e43 - 32 + + 0328 029f 0332 jmp 0x0332 + + } else { // pb.itd.flag == AX_PB_ITD_OFF + + // 032a 00de 0e42 lr $AC0.M, @0x0e42 + // 032c 00fe 0e40 sr @0x0e40, $AC0.M + // 032e 00fe 0e41 sr @0x0e41, $AC0.M + // 0330 00fe 0e43 sr @0x0e43, $AC0.M + *0x0e40 = *0x0e42 + *0x0e41 = *0x0e42 + *0x0e43 = *0x0e42 + } + } + + + // 0332 8100 clr $ACC0 + // 0333 8e00 set16 + // 0334 8400 clrp + // 0335 8900 clr $ACC1 + // 0336 1efe mrr $PROD.M2, $AC0.M + // 0337 0e40 lris $AC0.M, #0x40 + // 0338 1ebe mrr $PROD.M1, $AC0.M + // 0339 0083 0e08 lri $AR3, #0x0e08 + // 033b 1c03 mrr $AR0, $AR3 + // 033c 1ff5 mrr $AC1.M, $PROD.M1 + // 033d 191a lrri $AX0.H, @$AR0 + // 033e f858 addpaxz'l $ACC0, $AX0.H : $AX1.H, @$AR0 + // 033f fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M + // 0340 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M + // 0341 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M + // 0342 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M + // 0343 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M + // 0344 f8b1 addpaxz'ls $ACC0, $AX0.H : $AX1.H, $AC1.M + // 0345 fba0 addpaxz'ls $ACC1, $AX1.H : $AX0.H, $AC0.M + // 0346 f83b addpaxz's $ACC0, $AX0.H : @$AR3, $AC1.M + // 0347 1b7e srri @$AR3, $AC0.M + + for (u16* i = 0x0e08; i <= 0x0e10; i++) { + *i = (u16)( (0xff00400000 + (u40)(*i << 16)) >> 16 ) + } + + // 0348 0083 0e04 lri $AR3, #0x0e04 + // 034a 8100 clr $ACC0 + // 034b 8973 clr'l $ACC1 : $AC0.M, @$AR3 + // 034c 1961 lrri $AR1, @$AR3 // 0x0e05 + // 034d 1960 lrri $AR0, @$AR3 // 0x0e06 + // 034e 7800 decm $AC0.M + // 034f 00fe 0e04 sr @0x0e04, $AC0.M + // 0351 0294 0253 jnz 0x0253 + ms_remaining-- + if (ms_remaining) + goto NextMillisecUpd + + // 0353 8e00 set16 + // 0354 8100 clr $ACC0 + // 0355 00de 0b9b lr $AC0.M, @0x0b9b + // 0357 b100 tst $ACC0 + // 0358 0295 036a jz 0x036a + if (pb.itd.flag != AX_PB_ITD_OFF) { + + // 035a 00de 0b9c lr $AC0.M, @0x0b9c + // 035c 00dc 0b9d lr $AC0.L, @0x0b9d + // 035e 2ece srs @DSMAH, $AC0.M + // 035f 2ccf srs @DSMAL, $AC0.L + // 0360 8100 clr $ACC0 + // 0361 00de 0e1c lr $AC0.M, @0x0e1c + // 0363 2ecd srs @DSPA, $AC0.M + // 0364 16c9 0001 si @DSCR, #0x0001 + // 0366 16cb 0040 si @DSBL, #0x0040 + + // DMA 0x40bytes from DRAM @ (*0x0e1c) to CPU @ ((pb.itd.bufferHi << 16) | pb.itd.bufferLo) + + // 0368 02bf 055c call 0x055c + WaitDMA(); + } + + // 036a 8100 clr $ACC0 + // 036b 8900 clr $ACC1 + // 036c 00de 0b82 lr $AC0.M, @0x0b82 + // 036e 00df 0b83 lr $AC1.M, @0x0b83 + u16 maddrh = pb.currHi + u16 maddrl = pb.currLo + + // This writes back the whole PB to mram from dsp + // 0370 2ece srs @DSMAH, $AC0.M + // 0371 2fcf srs @DSMAL, $AC1.M + // 0372 16cd 0b80 si @DSPA, #0x0b80 + // 0374 16c9 0001 si @DSCR, #0x0001 + // 0376 16cb 00c0 si @DSBL, #0x00c0 + + // DMA 0xc0bytes from DRAM @ 0x0b80 to CPU @ maddr + + // 0378 02bf 055c call 0x055c + WaitDMA(); + + // 037a 8100 clr $ACC0 + // 037b 00de 0b80 lr $AC0.M, @0x0b80 + // 037d 00dc 0b81 lr $AC0.L, @0x0b81 + // 037f b100 tst $ACC0 + // 0380 0294 0386 jnz 0x0386 + if (((pb.nextHi << 16) | pb.nextLo) == 0) { + // No more PBs! + + // Restore CmdBlockBuf ptr + 0382 00c0 0e07 lr $AR0, @0x0e07 + // 0384 029f 0068 jmp 0x0068 + goto DoNextCommand; + } + + // DMA in the next PB + // From here on out, it's the same as Cmd2, except it calls itself to process the PB it just loaded + + // 0386 2ece srs @DSMAH, $AC0.M + // 0387 2ccf srs @DSMAL, $AC0.L + // 0388 16cd 0b80 si @DSPA, #0x0b80 + // 038a 16c9 0000 si @DSCR, #0x0000 + // 038c 16cb 00c0 si @DSBL, #0x00c0 + + // DMA 0xc0bytes from CPU @ ((pb.nextHi << 16) | pb.nextLo) to DRAM @ 0x0b80 + + // 038e 0082 0e08 lri $AR2, #0x0e08 + // 0390 009f 0000 lri $AC1.M, #0x0000 + // 0392 1b5f srri @$AR2, $AC1.M + // 0393 009f 0140 lri $AC1.M, #0x0140 + // 0395 1b5f srri @$AR2, $AC1.M + // 0396 009f 0280 lri $AC1.M, #0x0280 + // 0398 1b5f srri @$AR2, $AC1.M + // 0399 009f 0400 lri $AC1.M, #0x0400 + // 039b 1b5f srri @$AR2, $AC1.M + // 039c 009f 0540 lri $AC1.M, #0x0540 + // 039e 1b5f srri @$AR2, $AC1.M + // 039f 009f 0680 lri $AC1.M, #0x0680 + // 03a1 1b5f srri @$AR2, $AC1.M + // 03a2 009f 07c0 lri $AC1.M, #0x07c0 + // 03a4 1b5f srri @$AR2, $AC1.M + // 03a5 009f 0900 lri $AC1.M, #0x0900 + // 03a7 1b5f srri @$AR2, $AC1.M + // 03a8 009f 0a40 lri $AC1.M, #0x0a40 + // 03aa 1b5f srri @$AR2, $AC1.M + *0x0e08 = 0x0000 + *0x0e09 = 0x0140 + *0x0e0a = 0x0280 + *0x0e0b = 0x0400 + *0x0e0c = 0x0540 + *0x0e0d = 0x0680 + *0x0e0e = 0x07c0 + *0x0e0f = 0x0900 + *0x0e10 = 0x0a40 + + // 03ab 02bf 055c call 0x055c + WaitDMA(); + + // 03ad 00de 0ba7 lr $AC0.M, @0x0ba7 + // 03af 00df 0ba8 lr $AC1.M, @0x0ba8 + // 03b1 2ece srs @DSMAH, $AC0.M + // 03b2 2fcf srs @DSMAL, $AC1.M + // 03b3 16cd 03c0 si @DSPA, #0x03c0 + // 03b5 16c9 0000 si @DSCR, #0x0000 + // 03b7 16cb 0080 si @DSBL, #0x0080 + + // DMA 0x80bytes from CPU @ ((pb.update.dataHi << 16) | pb.update.dataLo) to DRAM @ 0x03c0 + + // 03b9 8100 clr $ACC0 + // 03ba 8900 clr $ACC1 + + // 03bb 00de 0b84 lr $AC0.M, @0x0b84 + // 03bd 009f 0b31 lri $AC1.M, #0x0b31 + // 03bf 4c00 add $ACC0, $ACC1 + // 03c0 1c7e mrr $AR3, $AC0.M + // 03c1 0213 ilrr $AC0.M, @$AR3 + // 03c2 00fe 0e15 sr @0x0e15, $AC0.M + *0x0e15 = *(0x0b31 + pb.srcSelect) // func ptr for src + + // 03c4 00de 0b85 lr $AC0.M, @0x0b85 + // 03c6 009f 0b34 lri $AC1.M, #0x0b34 + // 03c8 4c00 add $ACC0, $ACC1 + // 03c9 1c7e mrr $AR3, $AC0.M + // 03ca 0213 ilrr $AC0.M, @$AR3 + // 03cb 00fe 0e16 sr @0x0e16, $AC0.M + *0x0e16 = *(0x0b34 + pb.coefSelect) // ptr to coef table + + // 03cd 00de 0b86 lr $AC0.M, @0x0b86 + // 03cf 009f 0b11 lri $AC1.M, #0x0b11 + // 03d1 4c00 add $ACC0, $ACC1 + // 03d2 1c7e mrr $AR3, $AC0.M + // 03d3 0213 ilrr $AC0.M, @$AR3 + // 03d4 00fe 0e14 sr @0x0e14, $AC0.M + *0x0e14 = *(0x0b11 + pb.mixerCtrl) // func ptr for mixer + + // 03d6 8100 clr $ACC0 + // 03d7 00de 0b9b lr $AC0.M, @0x0b9b + // 03d9 b100 tst $ACC0 + // 03da 0295 0403 jz 0x0403 + if (pb.itd.flag != AX_PB_ITD_OFF) { + // 03dc 8900 clr $ACC1 + // 03dd 00df 0b9e lr $AC1.M, @0x0b9e + // 03df 0300 0cc0 addi $AC1.M, #0x0cc0 + // 03e1 00ff 0e40 sr @0x0e40, $AC1.M + *0x0e40 = 0x0cc0 + pb.itd.shiftL + + // 03e3 00df 0b9f lr $AC1.M, @0x0b9f + // 03e5 0300 0cc0 addi $AC1.M, #0x0cc0 + // 03e7 00ff 0e41 sr @0x0e41, $AC1.M + *0x0e41 = 0x0cc0 + pb.itd.shiftR + + // 03e9 009f 0ce0 lri $AC1.M, #0x0ce0 + // 03eb 00ff 0e42 sr @0x0e42, $AC1.M + // 03ed 00ff 0e43 sr @0x0e43, $AC1.M + *0x0e42 = 0x0ce0 + *0x0e43 = 0x0ce0 + + // 03ef 02bf 055c call 0x055c + WaitDMA(); + + // 03f1 00de 0b9c lr $AC0.M, @0x0b9c + // 03f3 2ece srs @DSMAH, $AC0.M + // 03f4 00de 0b9d lr $AC0.M, @0x0b9d + // 03f6 2ecf srs @DSMAL, $AC0.M + // 03f7 16cd 0cc0 si @DSPA, #0x0cc0 + // 03f9 16c9 0000 si @DSCR, #0x0000 + // 03fb 16cb 0040 si @DSBL, #0x0040 + + // DMA 0x0040bytes to DMEM @ 0x0cc0 from CPU @ (pb.itd.bufferHi << 16) | pb.itd.bufferLo + + // 03fd 02bf 055c call 0x055c + WaitDMA(); + + // Restore CmdBlockBuf ptr + 03ff 00c0 0e07 lr $AR0, @0x0e07 + // 0401 029f 0248 jmp 0x0248 + goto Cmd_3() // Calls itself till there are no more PBs linked + + } else { + + // 0403 009f 0ce0 lri $AC1.M, #0x0ce0 + // 0405 00ff 0e42 sr @0x0e42, $AC1.M + // 0407 00ff 0e40 sr @0x0e40, $AC1.M + // 0409 00ff 0e41 sr @0x0e41, $AC1.M + // 040b 00ff 0e43 sr @0x0e43, $AC1.M + *0x0e42 = 0x0ce0 + *0x0e40 = 0x0ce0 + *0x0e41 = 0x0ce0 + *0x0e43 = 0x0ce0 + + // 040d 02bf 055c call 0x055c + WaitDMA(); + + // Restore CmdBlockBuf ptr + 040f 00c0 0e07 lr $AR0, @0x0e07 + // 0411 029f 0248 jmp 0x0248 + goto Cmd_3() // Calls itself till there are no more PBs linked + } +} + +void Cmd_4() { + 0413 8e00 set16 + + 0414 0086 0400 lri $IX2, #0x0400 // buffer in dram + + // 0416 8100 clr $ACC0 + // 0417 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 0418 191c lrri $AC0.L, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 0419 2ece srs @DSMAH, $AC0.M + // 041a 2ccf srs @DSMAL, $AC0.L + // 041b 1fc6 mrr $AC0.M, $IX2 + // 041c 2ecd srs @DSPA, $AC0.M + // 041d 16c9 0001 si @DSCR, #0x0001 + // 041f 16cb 0780 si @DSBL, #0x0780 + + // DMA 0x0780bytes from DRAM @ 0x0400 to CPU @ maddr + + // 0421 02bf 055c call 0x055c + WaitDMA(); + + 0423 02bf 0484 call 0x0484 + + // 0425 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_5() { + 0427 8e00 set16 + + 0428 0086 07c0 lri $IX2, #0x07c0 + + 042a 8100 clr $ACC0 + 042b 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 042c 191c lrri $AC0.L, @$AR0 + 042d 2ece srs @DSMAH, $AC0.M + 042e 2ccf srs @DSMAL, $AC0.L + 042f 1fc6 mrr $AC0.M, $IX2 + 0430 2ecd srs @DSPA, $AC0.M + 0431 16c9 0001 si @DSCR, #0x0001 + 0433 16cb 0780 si @DSBL, #0x0780 + + // 0435 02bf 055c call 0x055c + WaitDMA(); + + 0437 02bf 0484 call 0x0484 + + // 0439 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_E() { + 043b 8c00 clr15 + 043c 8a00 m2 + 043d 8100 clr $ACC0 + 043e 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 043f 191f lrri $AC1.M, @$AR0 + 0440 2ece srs @DSMAH, $AC0.M + 0441 2fcf srs @DSMAL, $AC1.M + 0442 16cd 0280 si @DSPA, #0x0280 + 0444 16c9 0001 si @DSCR, #0x0001 // DMEM -> CPU + 0446 16cb 0280 si @DSBL, #0x0280 + + 0448 8f50 set40'l : $AX0.H, @$AR0 + 0449 8140 clr'l $ACC0 : $AX0.L, @$AR0 + 044a 0081 0400 lri $AR1, #0x0400 + 044c 0083 0000 lri $AR3, #0x0000 + 044e 0082 0140 lri $AR2, #0x0140 + 0450 0099 0080 lri $AX1.L, #0x0080 + + // 0452 02bf 055c call 0x055c + WaitDMA(); + + 0454 1105 046c bloopi #0x05, 0x046c + 0456 1f61 mrr $AX1.H, $AR1 + + 0457 1120 045e bloopi #0x20, 0x045e + 0459 8972 clr'l $ACC1 : $AC0.M, @$AR2 + 045a 195c lrri $AC0.L, @$AR2 + 045b f07b lsl16'l $ACC0 : $AC1.M, @$AR3 + 045c 197d lrri $AC1.L, @$AR3 + 045d f131 lsl16's $ACC1 : @$AR1, $AC0.M + 045e 8139 clr's $ACC0 : @$AR1, $AC1.M + + 045f 8900 clr $ACC1 + 0460 6800 movax $ACC0, $AX0 + 0461 2ece srs @DSMAH, $AC0.M + 0462 2ccf srs @DSMAL, $AC0.L + 0463 1ffb mrr $AC1.M, $AX1.H + 0464 2fcd srs @DSPA, $AC1.M + 0465 0f01 lris $AC1.M, #0x01 + 0466 2fc9 srs @DSCR, $AC1.M + 0467 1ff9 mrr $AC1.M, $AX1.L + 0468 2fcb srs @DSBL, $AC1.M + 0469 7200 addaxl $ACC0, $AX1.L + 046a 1f5e mrr $AX0.H, $AC0.M + 046b 1f1c mrr $AX0.L, $AC0.L + 046c 8100 clr $ACC0 + + // 046d 26c9 lrs $AC0.M, @DSCR + // 046e 02a0 0004 andf $AC0.M, #0x0004 + // 0470 029c 046d jlnz 0x046d + while (@DSCR & 4); + + // 0472 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void UnimplimentedCmd_B() { + // 0474 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void UnimplimentedCmd_C() { + // 0476 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void UnimplimentedCmd_A() { + // 0478 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Task_Yield() { + // Send DSP_YIELD mail + // 047a 16fc dcd1 si @DMBH, #0xdcd1 + // 047c 16fd 0002 si @DMBL, #0x0002 + DMB = 0xdcd10002 + // 047e 16fb 0001 si @DIRQ, #0x0001 + + 0480 029f 0c91 jmp 0x0c91 +} + + // Unused? + // 0482 029f 0045 jmp 0x0045 + goto GetNextCmdBlock; + +// Called by cmds 4 5 9 +// IX2 is always modified before calling... +void UnkFunc() { + 0484 8e00 set16 + 0485 191f lrri $AC1.M, @$AR0 + 0486 191d lrri $AC1.L, @$AR0 + 0487 1f5f mrr $AX0.H, $AC1.M + 0488 1f1d mrr $AX0.L, $AC1.L + 0489 2fce srs @DSMAH, $AC1.M + 048a 2dcf srs @DSMAL, $AC1.L + 048b 8900 clr $ACC1 + 048c 1fa6 mrr $AC1.L, $IX2 + 048d 2dcd srs @DSPA, $AC1.L + 048e 0e00 lris $AC0.M, #0x00 + 048f 2ec9 srs @DSCR, $AC0.M + 0490 8100 clr $ACC0 + 0491 009c 00c0 lri $AC0.L, #0x00c0 + 0493 2ccb srs @DSBL, $AC0.L + 0494 1ca0 mrr $IX1, $AR0 + 0495 0081 0e44 lri $AR1, #0x0e44 + 0497 4800 addax $ACC0, $AX0 + 0498 1b3e srri @$AR1, $AC0.M + 0499 1b3c srri @$AR1, $AC0.L + 049a 0b00 lris $AX1.H, #0x00 + 049b 0099 0060 lri $AX1.L, #0x0060 + 049d 4b00 addax $ACC1, $AX1 + 049e 1b3d srri @$AR1, $AC1.L + 049f 0081 0e44 lri $AR1, #0x0e44 + 04a1 1c06 mrr $AR0, $IX2 + 04a2 0083 0000 lri $AR3, #0x0000 + 04a4 1c43 mrr $AR2, $AR3 + + 04a5 27c9 lrs $AC1.M, @DSCR + 04a6 03a0 0004 andf $AC1.M, #0x0004 + 04a8 029c 04a5 jlnz 0x04a5 + + 04aa 1109 04da bloopi #0x09, 0x04da + 04ac 8e00 set16 + 04ad 193a lrri $AX0.H, @$AR1 + 04ae 1938 lrri $AX0.L, @$AR1 + 04af 6900 movax $ACC1, $AX0 + 04b0 2fce srs @DSMAH, $AC1.M + 04b1 2dcf srs @DSMAL, $AC1.L + 04b2 8900 clr $ACC1 + 04b3 193d lrri $AC1.L, @$AR1 + 04b4 2dcd srs @DSPA, $AC1.L + 04b5 16c9 0000 si @DSCR, #0x0000 + 04b7 8100 clr $ACC0 + 04b8 009c 00c0 lri $AC0.L, #0x00c0 + 04ba 2ccb srs @DSBL, $AC0.L + 04bb 0081 0e44 lri $AR1, #0x0e44 + 04bd 4800 addax $ACC0, $AX0 + 04be 1b3e srri @$AR1, $AC0.M + 04bf 1b3c srri @$AR1, $AC0.L + 04c0 0b00 lris $AX1.H, #0x00 + 04c1 0960 lris $AX1.L, #0x60 + 04c2 4b00 addax $ACC1, $AX1 + 04c3 1b3d srri @$AR1, $AC1.L + 04c4 0081 0e44 lri $AR1, #0x0e44 + 04c6 8f00 set40 + 04c7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04c8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04c9 6a00 movax $ACC0, $AX1 + 04ca 4800 addax $ACC0, $AX0 + 04cb 1117 04d4 bloopi #0x17, 0x04d4 + 04cd 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04ce 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04cf 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 04d0 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 04d1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04d2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04d3 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M + 04d4 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 04d5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04d6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04d7 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 04d8 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 04d9 1b5f srri @$AR2, $AC1.M + 04da 1b5d srri @$AR2, $AC1.L + + 04db 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04dc 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04dd 6a00 movax $ACC0, $AX1 + 04de 4800 addax $ACC0, $AX0 + + 04df 1117 04e8 bloopi #0x17, 0x04e8 + 04e1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04e2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04e3 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 04e4 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 04e5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04e6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04e7 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M + 04e8 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + + 04e9 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 04ea 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 04eb 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 04ec 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 04ed 1b5f srri @$AR2, $AC1.M + 04ee 1b5d srri @$AR2, $AC1.L + 04ef 1c05 mrr $AR0, $IX1 + 04f0 02df ret +} + +// Only called by Command 1 +// AX0 = maddr +// AX1.L = unkForMulBuffer1 +// AR1 = unkForMulBuffer2 +void Unk(maddr, unkForMulBuffer1, unkForMulBuffer2) { + 04f1 8e00 set16 + + // 04f2 009b 0e44 lri $AX1.H, #0x0e44 + // 04f4 009d 00c0 lri $AC1.L, #0x00c0 + // 04f6 02bf 0541 call 0x0541 + u16 daddr = 0x0e44 + const u16 dma_len = 0x00c0 + DMA_CPUToDMEM(maddr, daddr, dma_len); + + // 04f8 4900 addax $ACC1, $AX0 + // 04f9 00ff 0e1d sr @0x0e1d, $AC1.M + // 04fb 00fd 0e1e sr @0x0e1e, $AC1.L + // 04fd 8900 clr $ACC1 + maddr += dma_len + + // 04fe 02bf 055c call 0x055c + WaitDMA(); + + // 0500 1104 052c bloopi #0x04, 0x052c + for (u8 i = 0; i < 4; i++) { + // 0502 00da 0e1d lr $AX0.H, @0x0e1d // restore + // 0504 00d8 0e1e lr $AX0.L, @0x0e1e // restore + // 0506 009b 0ea4 lri $AX1.H, #0x0ea4 // buffer 2 + // 0508 009d 00c0 lri $AC1.L, #0x00c0 // restore + // 050a 02bf 0541 call 0x0541 + daddr = 0x0ea4 + DMA_CPUToDMEM(maddr, daddr, dma_len); + + // 050c 4900 addax $ACC1, $AX0 + // 050d 00ff 0e1d sr @0x0e1d, $AC1.M // update + // 050f 00fd 0e1e sr @0x0e1e, $AC1.L + maddr += dma_len + + // 0511 0083 0e44 lri $AR3, #0x0e44 + // 0513 02bf 054c call 0x054c + UnknownMulBuffer(0x0e44); + + // 0515 8900 clr $ACC1 + // 0516 00da 0e1d lr $AX0.H, @0x0e1d // restore + // 0518 00d8 0e1e lr $AX0.L, @0x0e1e // restore + // 051a 009b 0e44 lri $AX1.H, #0x0e44 // buffer 1 + // 051c 009d 00c0 lri $AC1.L, #0x00c0 // restore + // 051e 02bf 0541 call 0x0541 + daddr = 0x0e44 + DMA_CPUToDMEM(maddr, daddr, dma_len); + + // 0520 4900 addax $ACC1, $AX0 + // 0521 00ff 0e1d sr @0x0e1d, $AC1.M // update + // 0523 00fd 0e1e sr @0x0e1e, $AC1.L + maddr += dma_len + + // 0525 0083 0ea4 lri $AR3, #0x0ea4 // buffer 2 + // 0527 02bf 054c call 0x054c + UnknownMulBuffer(0x0ea4); + + // 0529 0000 nop + // 052a 0000 nop + // 052b 8e00 set16 // restore + // 052c 8900 clr $ACC1 + } + + // 052d 00da 0e1d lr $AX0.H, @0x0e1d // restore + // 052f 00d8 0e1e lr $AX0.L, @0x0e1e // restore + // 0531 009b 0ea4 lri $AX1.H, #0x0ea4 // buffer 2 + // 0533 009d 00c0 lri $AC1.L, #0x00c0 // restore + // 0535 02bf 0541 call 0x0541 + DMA_CPUToDMEM(maddr, daddr, dma_len); + + // 0537 4900 addax $ACC1, $AX0 + maddr += dma_len + + // 0538 0083 0e44 lri $AR3, #0x0e44 // buffer 1 + // 053a 02bf 054c call 0x054c + UnknownMulBuffer(0x0e44); + + // 053c 0083 0ea4 lri $AR3, #0x0ea4 // buffer 2 + // 053e 02bf 054c call 0x054c + UnknownMulBuffer(0x0ea4); + + 0540 02df ret +} + +// u32 maddr = AX0 +// u16 daddr = AX1.H +// u16 len = AC1.L +// Only transfers from CPU -> DMEM +void DMA_CPUToDMEM() { + 0541 8e00 set16 + 0542 00fa ffce sr @DSMAH, $AX0.H + 0544 00f8 ffcf sr @DSMAL, $AX0.L + 0546 00fb ffcd sr @DSPA, $AX1.H + 0548 16c9 0000 si @DSCR, #0x0000 + 054a 2dcb srs @DSBL, $AC1.L + 054b 02df ret +} + +// IX1 = 0xffff +// AX1.L = unkForMulBuffer1 (next value in cmd block) +// AR1 = unkForMulBuffer2 (0, 0x0400, then 0x07c0) +// AR3 is some buffer, either 0x0e44 or 0x0ea4 +void UnknownMulBuffer() { + 054c 8f00 set40 // Loaded ACx.M values extend to the entire ACC + 054d 8d00 set15 // multiplicands unsigned + 054e 8a00 m2 // mul results doubled + + // 054f 197a lrri $AX0.H, @$AR3 + // 0550 1978 lrri $AX0.L, @$AR3 + AX0.H = *(AR3++) + AX0.L = *(AR3++) + + // 0551 a000 mulx $AX0.L, $AX1.L + // 0552 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + ACC0 = (u16)AX0.L * (u16)unkForMulBuffer1 * 2 + PROD = (u16)AX0.H * (u16)unkForMulBuffer1 * 2 + + // 0553 1130 055a bloopi #0x30, 0x055a + for (int i=0; i<48; i++) { + // 0555 9179 asr16'l $ACC0 : $AC1.M, @$AR1 + ACC0 >>= 16 + AC1.M = *(unkForMulBuffer2++) + + // 0556 4e6d addp'ln $ACC0 : $AC1.L, @$AR1 + ACC0 += PROD + AC1.L = *unkForMulBuffer2 + unkForMulBuffer2 -= 1 + + // 0557 197a lrri $AX0.H, @$AR3 + AX0.H = *(AR3++) + + // 0558 4d43 add'l $ACC1, $ACC0 : $AX0.L, @$AR3 + ACC1 += ACC0 + AX0.L = *(AR3++) + + // 0559 a039 mulx's $AX0.L, $AX1.L : @$AR1, $AC1.M + // 055a b629 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR1, $AC1.L + ACC0 = (u16)AX0.L * (u16)unkForMulBuffer1 * 2 + *(unkForMulBuffer2++) = AC1.M + PROD = (u16)AX0.H * (u16)unkForMulBuffer1 * 2 + *(unkForMulBuffer2++) = AC1.L + } + + 055b 02df ret +} + +void WaitDMA() { + // 055c 26c9 lrs $AC0.M, @DSCR + // 055d 02a0 0004 andf $AC0.M, #0x0004 + // 055f 029c 055c jlnz 0x055c + while (@DSCR & 4); + + // 0561 02df ret + return; +} + +// All apparently unused? +void WaitForCPUMailbox() { + 0562 26fe lrs $AC0.M, @CMBH + 0563 02c0 8000 andcf $AC0.M, #0x8000 + 0565 029c 0562 jlnz 0x0562 + 0567 02df ret +} +void WaitForDSPMailbox1() { + 0568 26fc lrs $AC0.M, @DMBH + 0569 02a0 8000 andf $AC0.M, #0x8000 + 056b 029c 0568 jlnz 0x0568 + 056d 02df ret +} +void WaitForDSPMailbox2() { + 056e 26fc lrs $AC0.M, @DMBH + 056f 02a0 8000 andf $AC0.M, #0x8000 + 0571 029c 056e jlnz 0x056e + 0573 02df ret +} + +void Cmd_7() { + // 0574 8100 clr $ACC0 + // 0575 8970 clr'l $ACC1 : $AC0.M, @$AR0 + // 0576 8e60 set16'l : $AC0.L, @$AR0 + u16 maddrh = *(CmdBlockBuf++) + u16 maddrl = *(CmdBlockBuf++) + + // 0577 2ece srs @DSMAH, $AC0.M + // 0578 2ccf srs @DSMAL, $AC0.L + // 0579 16cd 0e44 si @DSPA, #0x0e44 + // 057b 16c9 0000 si @DSCR, #0x0000 + // 057d 8900 clr $ACC1 + // 057e 0d20 lris $AC1.L, #0x20 + u16 dma_len = 32 + + // 057f 2dcb srs @DSBL, $AC1.L + // DMA 32bytes from CPU @ maddr -> DMEM @ 0x0e44 + + // 0580 4c00 add $ACC0, $ACC1 + maddr += dma_len + + // Push CmdBlockBuf ptr + 0581 1c80 mrr $IX0, $AR0 + + // 0582 0080 0280 lri $AR0, #0x0280 + // 0584 0081 0000 lri $AR1, #0x0000 + // 0586 0082 0140 lri $AR2, #0x0140 + // 0588 0083 0e44 lri $AR3, #0x0e44 + u16* unk_buf1 = 0x0280 + u16* unk_buf2 = 0x0000 + u16* unk_buf3 = 0x0140 + u16* dmem_buf = 0x0e44 + + // 058a 0a00 lris $AX0.H, #0x00 + const u16 null = 0 // Guess is that it's faster to use AXx instead of imm value? + + // 058b 27c9 lrs $AC1.M, @DSCR + // 058c 03a0 0004 andf $AC1.M, #0x0004 + // 058e 029c 058b jlnz 0x058b + while (@DSCR & 4); // Wait for DMA completion + + // 0590 2ece srs @DSMAH, $AC0.M + // 0591 2ccf srs @DSMAL, $AC0.L + // 0592 16cd 0e54 si @DSPA, #0x0e54 + // 0594 16c9 0000 si @DSCR, #0x0000 + // 0596 16cb 0260 si @DSBL, #0x0260 + + // DMA 0x0260bytes from CPU @ maddr -> DMEM @ 0x0e54 + // No waiting for DMA + + // 0598 009f 00a0 lri $AC1.M, #0x00a0 + u16 size = 0x00a0 + + // accum loads in the loop are 40bit + // 059a 8f00 set40 + + // 059b 007f 05a4 bloop $AC1.M, 0x05a4 + for (int i = 0; i < size; i++) { + // !!! Doesn't make sense with current understanding of set40 + 059d 197e lrri $AC0.M, @$AR3 + 059e 1b1a srri @$AR0, $AX0.H + 059f 197c lrri $AC0.L, @$AR3 + 05a0 1b1a srri @$AR0, $AX0.H + 05a1 1b5e srri @$AR2, $AC0.M + 05a2 1b5c srri @$AR2, $AC0.L + 05a3 1b3e srri @$AR1, $AC0.M + 05a4 1b3c srri @$AR1, $AC0.L + } + + // Pop CmdBlockBuf ptr + 05a5 1c04 mrr $AR0, $IX0 + + // 05a6 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +# Following 3 funcs are the SRCs to select from, in order + +void SRC_Polyphase() { + // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs + // 05a8 0082 0bb8 lri $AR2, #0x0bb8 + // 05aa 195e lrri $AC0.M, @$AR2 + // 05ab 2ed1 srs @SampleFormat, $AC0.M + // 05ac 195e lrri $AC0.M, @$AR2 + // 05ad 2ed4 srs @ACSAH, $AC0.M + // 05ae 195e lrri $AC0.M, @$AR2 + // 05af 2ed5 srs @ACSAL, $AC0.M + // 05b0 195e lrri $AC0.M, @$AR2 + // 05b1 2ed6 srs @ACEAH, $AC0.M + // 05b2 195e lrri $AC0.M, @$AR2 + // 05b3 2ed7 srs @ACEAL, $AC0.M + // 05b4 195e lrri $AC0.M, @$AR2 + // 05b5 2ed8 srs @ACCAH, $AC0.M + // 05b6 195e lrri $AC0.M, @$AR2 + // 05b7 2ed9 srs @ACCAL, $AC0.M + // 05b8 195e lrri $AC0.M, @$AR2 + // 05b9 2ea0 srs @COEF_A1_0, $AC0.M + // 05ba 195e lrri $AC0.M, @$AR2 + // 05bb 2ea1 srs @COEF_A2_0, $AC0.M + // 05bc 195e lrri $AC0.M, @$AR2 + // 05bd 2ea2 srs @COEF_A1_1, $AC0.M + // 05be 195e lrri $AC0.M, @$AR2 + // 05bf 2ea3 srs @COEF_A2_1, $AC0.M + // 05c0 195e lrri $AC0.M, @$AR2 + // 05c1 2ea4 srs @COEF_A1_2, $AC0.M + // 05c2 195e lrri $AC0.M, @$AR2 + // 05c3 2ea5 srs @COEF_A2_2, $AC0.M + // 05c4 195e lrri $AC0.M, @$AR2 + // 05c5 2ea6 srs @COEF_A1_3, $AC0.M + // 05c6 195e lrri $AC0.M, @$AR2 + // 05c7 2ea7 srs @COEF_A2_3, $AC0.M + // 05c8 195e lrri $AC0.M, @$AR2 + // 05c9 2ea8 srs @COEF_A1_4, $AC0.M + // 05ca 195e lrri $AC0.M, @$AR2 + // 05cb 2ea9 srs @COEF_A2_4, $AC0.M + // 05cc 195e lrri $AC0.M, @$AR2 + // 05cd 2eaa srs @COEF_A1_5, $AC0.M + // 05ce 195e lrri $AC0.M, @$AR2 + // 05cf 2eab srs @COEF_A2_5, $AC0.M + // 05d0 195e lrri $AC0.M, @$AR2 + // 05d1 2eac srs @COEF_A1_6, $AC0.M + // 05d2 195e lrri $AC0.M, @$AR2 + // 05d3 2ead srs @COEF_A2_6, $AC0.M + // 05d4 195e lrri $AC0.M, @$AR2 + // 05d5 2eae srs @COEF_A1_7, $AC0.M + // 05d6 195e lrri $AC0.M, @$AR2 + // 05d7 2eaf srs @COEF_A2_7, $AC0.M + // 05d8 195e lrri $AC0.M, @$AR2 + // 05d9 2ede srs @GAIN, $AC0.M + // 05da 195e lrri $AC0.M, @$AR2 + // 05db 2eda srs @scale, $AC0.M + // 05dc 195e lrri $AC0.M, @$AR2 + // 05dd 2edb srs @yn1, $AC0.M + // 05de 195e lrri $AC0.M, @$AR2 + // 05df 2edc srs @yn2, $AC0.M + + 05e0 8c00 clr15 + 05e1 8a00 m2 + 05e2 8e00 set16 + 05e3 00d8 0e16 lr $AX0.L, @0x0e16 + 05e5 195b lrri $AX1.H, @$AR2 + 05e6 1959 lrri $AX1.L, @$AR2 + 05e7 8100 clr $ACC0 + 05e8 195c lrri $AC0.L, @$AR2 + 05e9 0080 0e44 lri $AR0, #0x0e44 + 05eb 195f lrri $AC1.M, @$AR2 + 05ec 1b1f srri @$AR0, $AC1.M + 05ed 195f lrri $AC1.M, @$AR2 + 05ee 1b1f srri @$AR0, $AC1.M + 05ef 195f lrri $AC1.M, @$AR2 + 05f0 1b1f srri @$AR0, $AC1.M + 05f1 185f lrr $AC1.M, @$AR2 + 05f2 1b1f srri @$AR0, $AC1.M + 05f3 6b00 movax $ACC1, $AX1 + 05f4 1505 lsl $ACC1, #5 + 05f5 4d00 add $ACC1, $ACC0 + 05f6 157e lsr $ACC1, #-2 + 05f7 1c9f mrr $IX0, $AC1.M + 05f8 1cbd mrr $IX1, $AC1.L + 05f9 05e0 addis $AC1.M, #0xe0 + 05fa 9900 asr16 $ACC1 + 05fb 7d00 neg $ACC1 + 05fc 1cdd mrr $IX2, $AC1.L + 05fd 8900 clr $ACC1 + 05fe 1fa5 mrr $AC1.L, $IX1 + 05ff 1502 lsl $ACC1, #2 + 0600 1cbf mrr $IX1, $AC1.M + 0601 009a 01fc lri $AX0.H, #0x01fc + 0603 009e 0e44 lri $AC0.M, #0x0e44 + 0605 0081 ffdd lri $AR1, #0xffdd + 0607 0083 0d80 lri $AR3, #0x0d80 + 0609 0064 061a bloop $IX0, 0x061a + 060b 1827 lrr $IX3, @$AR1 + 060c 1b07 srri @$AR0, $IX3 + 060d 4a00 addax $ACC0, $AX1 + 060e 1ffc mrr $AC1.M, $AC0.L + 060f 1827 lrr $IX3, @$AR1 + 0610 1b07 srri @$AR0, $IX3 + 0611 1579 lsr $ACC1, #-7 + 0612 3500 andr $AC1.M, $AX0.H + 0613 1827 lrr $IX3, @$AR1 + 0614 1b07 srri @$AR0, $IX3 + 0615 4100 addr $ACC1, $AX0.L + 0616 1b7e srri @$AR3, $AC0.M + 0617 1827 lrr $IX3, @$AR1 + 0618 1b07 srri @$AR0, $IX3 + 0619 1b7f srri @$AR3, $AC1.M + 061a 0000 nop + + 061b 0065 0620 bloop $IX1, 0x0620 + 061d 1827 lrr $IX3, @$AR1 + 061e 1b07 srri @$AR0, $IX3 + 061f 0000 nop + 0620 0000 nop + + 0621 0007 dar $AR3 + 0622 187f lrr $AC1.M, @$AR3 + 0623 0066 0629 bloop $IX2, 0x0629 + 0625 4a3b addax's $ACC0, $AX1.L : @$AR3, $AC1.M + 0626 1ffc mrr $AC1.M, $AC0.L + 0627 1579 lsr $ACC1, #-7 + 0628 3533 andr's $AC1.M, $AX0.H : @$AR3, $AC0.M + 0629 4100 addr $ACC1, $AX0.L + + 062a 1b7f srri @$AR3, $AC1.M + 062b 0004 dar $AR0 + 062c 189f lrrd $AC1.M, @$AR0 + 062d 1adf srrd @$AR2, $AC1.M + 062e 189f lrrd $AC1.M, @$AR0 + 062f 1adf srrd @$AR2, $AC1.M + 0630 189f lrrd $AC1.M, @$AR0 + 0631 1adf srrd @$AR2, $AC1.M + 0632 189f lrrd $AC1.M, @$AR0 + 0633 1adf srrd @$AR2, $AC1.M + 0634 1adc srrd @$AR2, $AC0.L + 0635 0082 0bd2 lri $AR2, #0x0bd2 + 0637 27dc lrs $AC1.M, @yn2 + 0638 1adf srrd @$AR2, $AC1.M + 0639 27db lrs $AC1.M, @yn1 + 063a 1adf srrd @$AR2, $AC1.M + 063b 27da lrs $AC1.M, @scale + 063c 1adf srrd @$AR2, $AC1.M + 063d 0082 0bbe lri $AR2, #0x0bbe + 063f 27d9 lrs $AC1.M, @ACCAL + 0640 1adf srrd @$AR2, $AC1.M + 0641 27d8 lrs $AC1.M, @ACCAH + 0642 1adf srrd @$AR2, $AC1.M + 0643 8f00 set40 + 0644 00c1 0e42 lr $AR1, @0x0e42 + 0646 0082 0d80 lri $AR2, #0x0d80 + 0648 1940 lrri $AR0, @$AR2 + 0649 1943 lrri $AR3, @$AR2 + 064a 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 064b b8c0 mulx'ld $AX0.H, $AX1.H : $AX0.L, $AX1.L, @$AR0 + 064c 111f 0654 bloopi #0x1f, 0x0654 + 064e a6f0 mulxmv'ld $AX0.L, $AX1.L, $ACC0 : $AX0.H, $AX1.H, @$AR0 + 064f bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 + 0650 1940 lrri $AR0, @$AR2 + 0651 1943 lrri $AR3, @$AR2 + 0652 bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 + 0653 4ec0 addp'ld $ACC0 : $AX0.L, $AX1.L, @$AR0 + 0654 b831 mulx's $AX0.H, $AX1.H : @$AR1, $AC0.M + + 0655 a6f0 mulxmv'ld $AX0.L, $AX1.L, $ACC0 : $AX0.H, $AX1.H, @$AR0 + 0656 bcf0 mulxac'ld $AX0.H, $AX1.H, $ACC0 : $AX0.H, $AX1.H, @$AR0 + 0657 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0658 4e00 addp $ACC0 + 0659 1b3e srri @$AR1, $AC0.M + 065a 00e1 0e42 sr @0x0e42, $AR1 + + 065c 02df ret +} + +void SRC_Linear() { + // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs + // 065d 0082 0bb8 lri $AR2, #0x0bb8 + // 065f 195e lrri $AC0.M, @$AR2 + // 0660 2ed1 srs @SampleFormat, $AC0.M + // 0661 195e lrri $AC0.M, @$AR2 + // 0662 2ed4 srs @ACSAH, $AC0.M + // 0663 195e lrri $AC0.M, @$AR2 + // 0664 2ed5 srs @ACSAL, $AC0.M + // 0665 195e lrri $AC0.M, @$AR2 + // 0666 2ed6 srs @ACEAH, $AC0.M + // 0667 195e lrri $AC0.M, @$AR2 + // 0668 2ed7 srs @ACEAL, $AC0.M + // 0669 195e lrri $AC0.M, @$AR2 + // 066a 2ed8 srs @ACCAH, $AC0.M + // 066b 195e lrri $AC0.M, @$AR2 + // 066c 2ed9 srs @ACCAL, $AC0.M + // 066d 195e lrri $AC0.M, @$AR2 + // 066e 2ea0 srs @COEF_A1_0, $AC0.M + // 066f 195e lrri $AC0.M, @$AR2 + // 0670 2ea1 srs @COEF_A2_0, $AC0.M + // 0671 195e lrri $AC0.M, @$AR2 + // 0672 2ea2 srs @COEF_A1_1, $AC0.M + // 0673 195e lrri $AC0.M, @$AR2 + // 0674 2ea3 srs @COEF_A2_1, $AC0.M + // 0675 195e lrri $AC0.M, @$AR2 + // 0676 2ea4 srs @COEF_A1_2, $AC0.M + // 0677 195e lrri $AC0.M, @$AR2 + // 0678 2ea5 srs @COEF_A2_2, $AC0.M + // 0679 195e lrri $AC0.M, @$AR2 + // 067a 2ea6 srs @COEF_A1_3, $AC0.M + // 067b 195e lrri $AC0.M, @$AR2 + // 067c 2ea7 srs @COEF_A2_3, $AC0.M + // 067d 195e lrri $AC0.M, @$AR2 + // 067e 2ea8 srs @COEF_A1_4, $AC0.M + // 067f 195e lrri $AC0.M, @$AR2 + // 0680 2ea9 srs @COEF_A2_4, $AC0.M + // 0681 195e lrri $AC0.M, @$AR2 + // 0682 2eaa srs @COEF_A1_5, $AC0.M + // 0683 195e lrri $AC0.M, @$AR2 + // 0684 2eab srs @COEF_A2_5, $AC0.M + // 0685 195e lrri $AC0.M, @$AR2 + // 0686 2eac srs @COEF_A1_6, $AC0.M + // 0687 195e lrri $AC0.M, @$AR2 + // 0688 2ead srs @COEF_A2_6, $AC0.M + // 0689 195e lrri $AC0.M, @$AR2 + // 068a 2eae srs @COEF_A1_7, $AC0.M + // 068b 195e lrri $AC0.M, @$AR2 + // 068c 2eaf srs @COEF_A2_7, $AC0.M + // 068d 195e lrri $AC0.M, @$AR2 + // 068e 2ede srs @GAIN, $AC0.M + // 068f 195e lrri $AC0.M, @$AR2 + // 0690 2eda srs @scale, $AC0.M + // 0691 195e lrri $AC0.M, @$AR2 + // 0692 2edb srs @yn1, $AC0.M + // 0693 195e lrri $AC0.M, @$AR2 + // 0694 2edc srs @yn2, $AC0.M + + // 0695 8c00 clr15 // signed mulx + // 0696 8a00 m2 // *2 + // 0697 8e00 set16 // no sign extend + + // 0698 195b lrri $AX1.H, @$AR2 + // 0699 1959 lrri $AX1.L, @$AR2 + // 069a 8100 clr $ACC0 + // 069b 195c lrri $AC0.L, @$AR2 + // 069c 0080 0e44 lri $AR0, #0x0e44 + // 069e 195f lrri $AC1.M, @$AR2 + // 069f 195f lrri $AC1.M, @$AR2 + // 06a0 195f lrri $AC1.M, @$AR2 + // 06a1 1b1f srri @$AR0, $AC1.M + AR0 = 0x0e44 + AX1.H = pb.src.ratioHi + AX1.L = pb.src.ratioLo + AC0.L = pb.src.currentAddressFrac + AC1.M = pb.src.last_samples[2] + + *0x0e44 = pb.src.last_samples[2] + *0x0e45 = pb.src.last_samples[3] + + // 06a2 185f lrr $AC1.M, @$AR2 + // 06a3 1b1f srri @$AR0, $AC1.M + // 06a4 6b00 movax $ACC1, $AX1 + // 06a5 1505 lsl $ACC1, #5 + // 06a6 4d00 add $ACC1, $ACC0 + // 06a7 157e lsr $ACC1, #-2 + // 06a8 1c9f mrr $IX0, $AC1.M + // 06a9 1cbd mrr $IX1, $AC1.L + ACC1 = (pb.src.currentAddressFrac + (pb.src.ratio << 5)) >> 2 + IX0 = ACC1 >> 16 + IX1 = ((ACC1 & 0xffff) & 0xc000) >> 14 + IX2 = ~((ACC1 >> 16) - 32) + AX0.H = 0x01fc + AC0.M = 0x0e45 + AR1 = 0xffdd // DSP_ACCELERATOR + AR3 = 0x0d80 + + // 06aa 05e0 addis $AC1.M, #0xe0 + // 06ab 9900 asr16 $ACC1 + // 06ac 7d00 neg $ACC1 + // 06ad 1cdd mrr $IX2, $AC1.L + // 06ae 8900 clr $ACC1 + // 06af 1fa5 mrr $AC1.L, $IX1 + // 06b0 1502 lsl $ACC1, #2 + // 06b1 1cbf mrr $IX1, $AC1.M + // 06b2 009a 01fc lri $AX0.H, #0x01fc + // 06b4 009e 0e45 lri $AC0.M, #0x0e45 + // 06b6 0081 ffdd lri $AR1, #0xffdd + // 06b8 0083 0d80 lri $AR3, #0x0d80 + // 06ba 0064 06cb bloop $IX0, 0x06cb + // 06bc 1827 lrr $IX3, @$AR1 + // 06bd 1b07 srri @$AR0, $IX3 + // 06be 4a00 addax $ACC0, $AX1 + // 06bf 1b7e srri @$AR3, $AC0.M + // 06c0 1827 lrr $IX3, @$AR1 + // 06c1 1b07 srri @$AR0, $IX3 + // 06c2 1b7c srri @$AR3, $AC0.L + // 06c3 0000 nop + // 06c4 1827 lrr $IX3, @$AR1 + // 06c5 1b07 srri @$AR0, $IX3 + // 06c6 0000 nop + // 06c7 0000 nop + // 06c8 1827 lrr $IX3, @$AR1 + // 06c9 1b07 srri @$AR0, $IX3 + // 06ca 0000 nop + // 06cb 0000 nop + ACCO = (0x0e45 << 16) + pb.src.currentAddressFrac + for (i = 0; i < IX0; i++) { + ACC0 += pb.src.ratio + *(0x0d80++) = ACC0 >> 16 + *(0x0d80++) = ACC0 & 0xffff + *(0x0e46++) = *DSP_ACCELERATOR + *(0x0e46++) = *DSP_ACCELERATOR + *(0x0e46++) = *DSP_ACCELERATOR + *(0x0e46++) = *DSP_ACCELERATOR + } + + // 06cc 0065 06d1 bloop $IX1, 0x06d1 + // 06ce 1827 lrr $IX3, @$AR1 + // 06cf 1b07 srri @$AR0, $IX3 + // 06d0 0000 nop + // 06d1 0000 nop + for (i = 0; i < IX1; i++) { + *(0x0e46++) = *DSP_ACCELERATOR + } + + // 06d2 0066 06d6 bloop $IX2, 0x06d6 + // 06d4 4a00 addax $ACC0, $AX1 + // 06d5 1b7e srri @$AR3, $AC0.M + // 06d6 1b7c srri @$AR3, $AC0.L + for (i = 0; i < IX2; i++) { + ACC0 += pb.src.ratio + *(0x0d80++) = ACC0 >> 16 + *(0x0d80++) = ACC0 & 0xffff + } + + // 06d7 0004 dar $AR0 + // 06d8 189f lrrd $AC1.M, @$AR0 + // 06d9 1adf srrd @$AR2, $AC1.M + // 06da 189f lrrd $AC1.M, @$AR0 + // 06db 1adf srrd @$AR2, $AC1.M + // 06dc 189f lrrd $AC1.M, @$AR0 + // 06dd 1adf srrd @$AR2, $AC1.M + // 06de 189f lrrd $AC1.M, @$AR0 + // 06df 1adf srrd @$AR2, $AC1.M + // 06e0 1adc srrd @$AR2, $AC0.L + *(0x0e46++)-- + pb.src.last_samples[3] = *(0x0e46--) + pb.src.last_samples[2] = *(0x0e46--) + pb.src.last_samples[1] = *(0x0e46--) + pb.src.last_samples[0] = *(0x0e46--) + pb.src.currentAddressFrac = ACC0 & 0xffff + + // 06e1 0082 0bd2 lri $AR2, #0x0bd2 + // 06e3 27dc lrs $AC1.M, @yn2 + // 06e4 1adf srrd @$AR2, $AC1.M + // 06e5 27db lrs $AC1.M, @yn1 + // 06e6 1adf srrd @$AR2, $AC1.M + // 06e7 27da lrs $AC1.M, @scale + // 06e8 1adf srrd @$AR2, $AC1.M + // 06e9 0082 0bbe lri $AR2, #0x0bbe + // 06eb 27d9 lrs $AC1.M, @ACCAL + // 06ec 1adf srrd @$AR2, $AC1.M + // 06ed 27d8 lrs $AC1.M, @ACCAH + // 06ee 1adf srrd @$AR2, $AC1.M + pb.adpm.yn2 = *yn2 + pb.adpm.yn1 = *yn1 + pb.adpm.pred_scale = *scale + pb.addr.currentAddressLo = *ACCAL // Current playback position + pb.addr.currentAddressHi = *ACCAH + + 06ef 8d00 set15 // unsigned mulx + 06f0 8b00 m0 // no *2 + 06f1 8f00 set40 // sign extend + 06f2 00c1 0e42 lr $AR1, @0x0e42 + 06f4 0082 0d80 lri $AR2, #0x0d80 + 06f6 8100 clr $ACC0 + 06f7 1120 0703 bloopi #0x20, 0x0703 + 06f9 8900 clr $ACC1 + 06fa 1940 lrri $AR0, @$AR2 + 06fb 189e lrrd $AC0.M, @$AR0 + 06fc 181b lrr $AX1.H, @$AR0 + 06fd 199a lrrn $AX0.H, @$AR0 + 06fe 5400 subr $ACC0, $AX0.H + 06ff 1f5e mrr $AX0.H, $AC0.M + 0700 1959 lrri $AX1.L, @$AR2 + 0701 b000 mulx $AX0.H, $AX1.L + 0702 fb00 addpaxz $ACC1, $AX1 + 0703 8139 clr's $ACC0 : @$AR1, $AC1.M + + 0704 00e1 0e42 sr @0x0e42, $AR1 + + 0706 02df ret +} + +void SRC_None() { + // Copy pb's data [pb.addr.format to pb.adpm.yn2] to corresponding hw regs + // 0707 0082 0bb8 lri $AR2, #0x0bb8 + // 0709 195e lrri $AC0.M, @$AR2 + // 070a 2ed1 srs @SampleFormat, $AC0.M + // 070b 195e lrri $AC0.M, @$AR2 + // 070c 2ed4 srs @ACSAH, $AC0.M + // 070d 195e lrri $AC0.M, @$AR2 + // 070e 2ed5 srs @ACSAL, $AC0.M + // 070f 195e lrri $AC0.M, @$AR2 + // 0710 2ed6 srs @ACEAH, $AC0.M + // 0711 195e lrri $AC0.M, @$AR2 + // 0712 2ed7 srs @ACEAL, $AC0.M + // 0713 195e lrri $AC0.M, @$AR2 + // 0714 2ed8 srs @ACCAH, $AC0.M + // 0715 195e lrri $AC0.M, @$AR2 + // 0716 2ed9 srs @ACCAL, $AC0.M + // 0717 195e lrri $AC0.M, @$AR2 + // 0718 2ea0 srs @COEF_A1_0, $AC0.M + // 0719 195e lrri $AC0.M, @$AR2 + // 071a 2ea1 srs @COEF_A2_0, $AC0.M + // 071b 195e lrri $AC0.M, @$AR2 + // 071c 2ea2 srs @COEF_A1_1, $AC0.M + // 071d 195e lrri $AC0.M, @$AR2 + // 071e 2ea3 srs @COEF_A2_1, $AC0.M + // 071f 195e lrri $AC0.M, @$AR2 + // 0720 2ea4 srs @COEF_A1_2, $AC0.M + // 0721 195e lrri $AC0.M, @$AR2 + // 0722 2ea5 srs @COEF_A2_2, $AC0.M + // 0723 195e lrri $AC0.M, @$AR2 + // 0724 2ea6 srs @COEF_A1_3, $AC0.M + // 0725 195e lrri $AC0.M, @$AR2 + // 0726 2ea7 srs @COEF_A2_3, $AC0.M + // 0727 195e lrri $AC0.M, @$AR2 + // 0728 2ea8 srs @COEF_A1_4, $AC0.M + // 0729 195e lrri $AC0.M, @$AR2 + // 072a 2ea9 srs @COEF_A2_4, $AC0.M + // 072b 195e lrri $AC0.M, @$AR2 + // 072c 2eaa srs @COEF_A1_5, $AC0.M + // 072d 195e lrri $AC0.M, @$AR2 + // 072e 2eab srs @COEF_A2_5, $AC0.M + // 072f 195e lrri $AC0.M, @$AR2 + // 0730 2eac srs @COEF_A1_6, $AC0.M + // 0731 195e lrri $AC0.M, @$AR2 + // 0732 2ead srs @COEF_A2_6, $AC0.M + // 0733 195e lrri $AC0.M, @$AR2 + // 0734 2eae srs @COEF_A1_7, $AC0.M + // 0735 195e lrri $AC0.M, @$AR2 + // 0736 2eaf srs @COEF_A2_7, $AC0.M + // 0737 195e lrri $AC0.M, @$AR2 + // 0738 2ede srs @GAIN, $AC0.M + // 0739 195e lrri $AC0.M, @$AR2 + // 073a 2eda srs @scale, $AC0.M + // 073b 195e lrri $AC0.M, @$AR2 + // 073c 2edb srs @yn1, $AC0.M + // 073d 195e lrri $AC0.M, @$AR2 + // 073e 2edc srs @yn2, $AC0.M + + // 073f 00c0 0e42 lr $AR0, @0x0e42 + // 0741 0081 ffdd lri $AR1, #0xffdd // DSP_ACCELERATOR + // 0743 1120 0748 bloopi #0x20, 0x0748 + // 0745 1824 lrr $IX0, @$AR1 + // 0746 1b04 srri @$AR0, $IX0 + // 0747 0000 nop + // 0748 0000 nop + // 0749 00e0 0e42 sr @0x0e42, $AR0 + + u16 i = *0x0e42 + for (; i < ((*0x0e42) + 0x20); i++) { + *i = *DSP_ACCELERATOR + } + *0x0e42 = i + + // 074b 0082 0bd9 lri $AR2, #0x0bd9 // pb.src.last_samples[3] + // 074d 0004 dar $AR0 + // 074e 189f lrrd $AC1.M, @$AR0 + // 074f 1adf srrd @$AR2, $AC1.M + // 0750 189f lrrd $AC1.M, @$AR0 + // 0751 1adf srrd @$AR2, $AC1.M + // 0752 189f lrrd $AC1.M, @$AR0 + // 0753 1adf srrd @$AR2, $AC1.M + // 0754 189f lrrd $AC1.M, @$AR0 + // 0755 1adf srrd @$AR2, $AC1.M + // 0756 8900 clr $ACC1 + // 0757 1adc srrd @$AR2, $AC0.L // uhhh assume AC0.L is 0? + i-- // Guess that 0x0e42 points to struct of 1 pointer and 32 values + pb.src.last_samples[3] = *(i--) + pb.src.last_samples[2] = *(i--) + pb.src.last_samples[1] = *(i--) + pb.src.last_samples[0] = *(i--) + pb.src.currentAddressFrac = 0 + + // 0758 27dc lrs $AC1.M, @yn2 + // 0759 00ff 0bd2 sr @0x0bd2, $AC1.M + // 075b 27db lrs $AC1.M, @yn1 + // 075c 00ff 0bd1 sr @0x0bd1, $AC1.M + // 075e 27da lrs $AC1.M, @scale + // 075f 00ff 0bd0 sr @0x0bd0, $AC1.M + // 0761 27d9 lrs $AC1.M, @ACCAL + // 0762 00ff 0bbe sr @0x0bbe, $AC1.M + // 0764 27d8 lrs $AC1.M, @ACCAH + // 0765 00ff 0bbd sr @0x0bbd, $AC1.M + pb.adpm.yn2 = *yn2 + pb.adpm.yn1 = *yn1 + pb.adpm.pred_scale = *scale + pb.addr.currentAddressLo = *ACCAL // Current playback position + pb.addr.currentAddressHi = *ACCAH + + 0767 02df ret +} + + +# From here to the jump tables, all the funcs just wrap calls to mixer(s) in IROM + +void Mixer_0() { + 0768 00c0 0e40 lr $AR0, @0x0e40 + 076a 0081 0b89 lri $AR1, #0x0b89 + 076c 00c2 0e08 lr $AR2, @0x0e08 + 076e 1c62 mrr $AR3, $AR2 + 076f 00c4 0e41 lr $IX0, @0x0e41 + 0771 00c5 0e09 lr $IX1, @0x0e09 + 0773 02bf 80e7 call 0x80e7 + 0775 00f8 0ba9 sr @0x0ba9, $AX0.L + 0777 00fb 0bac sr @0x0bac, $AX1.H + 0779 02df ret +} + +void Mixer_1() { + 077a 00c0 0e40 lr $AR0, @0x0e40 + 077c 0081 0b89 lri $AR1, #0x0b89 + 077e 00c2 0e08 lr $AR2, @0x0e08 + 0780 1c62 mrr $AR3, $AR2 + 0781 00c4 0e41 lr $IX0, @0x0e41 + 0783 00c5 0e09 lr $IX1, @0x0e09 + 0785 02bf 80e7 call 0x80e7 + 0787 00f8 0ba9 sr @0x0ba9, $AX0.L + 0789 00fb 0bac sr @0x0bac, $AX1.H + 078b 00c0 0e40 lr $AR0, @0x0e40 + 078d 0081 0b8d lri $AR1, #0x0b8d + 078f 00c2 0e0b lr $AR2, @0x0e0b + 0791 1c62 mrr $AR3, $AR2 + 0792 00c4 0e41 lr $IX0, @0x0e41 + 0794 00c5 0e0c lr $IX1, @0x0e0c + 0796 02bf 80e7 call 0x80e7 + 0798 00f8 0baa sr @0x0baa, $AX0.L + 079a 00fb 0bad sr @0x0bad, $AX1.H + 079c 02df ret +} + +void Mixer_2() { + 079d 00c0 0e40 lr $AR0, @0x0e40 + 079f 0081 0b89 lri $AR1, #0x0b89 + 07a1 00c2 0e08 lr $AR2, @0x0e08 + 07a3 1c62 mrr $AR3, $AR2 + 07a4 00c4 0e41 lr $IX0, @0x0e41 + 07a6 00c5 0e09 lr $IX1, @0x0e09 + 07a8 02bf 80e7 call 0x80e7 + 07aa 00f8 0ba9 sr @0x0ba9, $AX0.L + 07ac 00fb 0bac sr @0x0bac, $AX1.H + 07ae 00c0 0e40 lr $AR0, @0x0e40 + 07b0 0081 0b91 lri $AR1, #0x0b91 + 07b2 00c2 0e0e lr $AR2, @0x0e0e + 07b4 1c62 mrr $AR3, $AR2 + 07b5 00c4 0e41 lr $IX0, @0x0e41 + 07b7 00c5 0e0f lr $IX1, @0x0e0f + 07b9 02bf 80e7 call 0x80e7 + 07bb 00f8 0bab sr @0x0bab, $AX0.L + 07bd 00fb 0bae sr @0x0bae, $AX1.H + 07bf 02df ret +} + +void Unk() { + 07c0 00c0 0e40 lr $AR0, @0x0e40 + 07c2 0081 0b89 lri $AR1, #0x0b89 + 07c4 00c2 0e08 lr $AR2, @0x0e08 + 07c6 1c62 mrr $AR3, $AR2 + 07c7 00c4 0e41 lr $IX0, @0x0e41 + 07c9 00c5 0e09 lr $IX1, @0x0e09 + 07cb 02bf 80e7 call 0x80e7 + 07cd 00f8 0ba9 sr @0x0ba9, $AX0.L + 07cf 00fb 0bac sr @0x0bac, $AX1.H + 07d1 00c0 0e40 lr $AR0, @0x0e40 + 07d3 0081 0b8d lri $AR1, #0x0b8d + 07d5 00c2 0e0b lr $AR2, @0x0e0b + 07d7 1c62 mrr $AR3, $AR2 + 07d8 00c4 0e41 lr $IX0, @0x0e41 + 07da 00c5 0e0c lr $IX1, @0x0e0c + 07dc 02bf 80e7 call 0x80e7 + 07de 00f8 0baa sr @0x0baa, $AX0.L + 07e0 00fb 0bad sr @0x0bad, $AX1.H + 07e2 00c0 0e40 lr $AR0, @0x0e40 + 07e4 0081 0b91 lri $AR1, #0x0b91 + 07e6 00c2 0e0e lr $AR2, @0x0e0e + 07e8 1c62 mrr $AR3, $AR2 + 07e9 00c4 0e41 lr $IX0, @0x0e41 + 07eb 00c5 0e0f lr $IX1, @0x0e0f + 07ed 02bf 80e7 call 0x80e7 + 07ef 00f8 0bab sr @0x0bab, $AX0.L + 07f1 00fb 0bae sr @0x0bae, $AX1.H + 07f3 02df ret +} + +void Unk() { + 07f4 00c0 0e40 lr $AR0, @0x0e40 + 07f6 0081 0b89 lri $AR1, #0x0b89 + 07f8 00c2 0e08 lr $AR2, @0x0e08 + 07fa 1c62 mrr $AR3, $AR2 + 07fb 00c4 0e41 lr $IX0, @0x0e41 + 07fd 00c5 0e09 lr $IX1, @0x0e09 + 07ff 02bf 80e7 call 0x80e7 + 0801 00f8 0ba9 sr @0x0ba9, $AX0.L + 0803 00fb 0bac sr @0x0bac, $AX1.H + 0805 00c0 0e43 lr $AR0, @0x0e43 + 0807 0081 0b97 lri $AR1, #0x0b97 + 0809 00c2 0e0a lr $AR2, @0x0e0a + 080b 1c62 mrr $AR3, $AR2 + 080c 02bf 81f9 call 0x81f9 + 080e 00f8 0baf sr @0x0baf, $AX0.L + 0810 02df ret +} + +void Unk() { + 0811 00c0 0e40 lr $AR0, @0x0e40 + 0813 0081 0b89 lri $AR1, #0x0b89 + 0815 00c2 0e08 lr $AR2, @0x0e08 + 0817 1c62 mrr $AR3, $AR2 + 0818 00c4 0e41 lr $IX0, @0x0e41 + 081a 00c5 0e09 lr $IX1, @0x0e09 + 081c 02bf 80e7 call 0x80e7 + 081e 00f8 0ba9 sr @0x0ba9, $AX0.L + 0820 00fb 0bac sr @0x0bac, $AX1.H + 0822 00c0 0e40 lr $AR0, @0x0e40 + 0824 0081 0b8d lri $AR1, #0x0b8d + 0826 00c2 0e0b lr $AR2, @0x0e0b + 0828 1c62 mrr $AR3, $AR2 + 0829 00c4 0e41 lr $IX0, @0x0e41 + 082b 00c5 0e0c lr $IX1, @0x0e0c + 082d 02bf 80e7 call 0x80e7 + 082f 00f8 0baa sr @0x0baa, $AX0.L + 0831 00fb 0bad sr @0x0bad, $AX1.H + 0833 00c0 0e43 lr $AR0, @0x0e43 + 0835 0081 0b97 lri $AR1, #0x0b97 + 0837 00c2 0e0a lr $AR2, @0x0e0a + 0839 1c62 mrr $AR3, $AR2 + 083a 1c80 mrr $IX0, $AR0 + 083b 00c5 0e0d lr $IX1, @0x0e0d + 083d 02bf 80e7 call 0x80e7 + 083f 00f8 0baf sr @0x0baf, $AX0.L + 0841 00fb 0bb0 sr @0x0bb0, $AX1.H + 0843 02df ret +} + +void Unk() { + 0844 00c0 0e40 lr $AR0, @0x0e40 + 0846 0081 0b89 lri $AR1, #0x0b89 + 0848 00c2 0e08 lr $AR2, @0x0e08 + 084a 1c62 mrr $AR3, $AR2 + 084b 00c4 0e41 lr $IX0, @0x0e41 + 084d 00c5 0e09 lr $IX1, @0x0e09 + 084f 02bf 80e7 call 0x80e7 + 0851 00f8 0ba9 sr @0x0ba9, $AX0.L + 0853 00fb 0bac sr @0x0bac, $AX1.H + 0855 00c0 0e40 lr $AR0, @0x0e40 + 0857 0081 0b91 lri $AR1, #0x0b91 + 0859 00c2 0e0e lr $AR2, @0x0e0e + 085b 1c62 mrr $AR3, $AR2 + 085c 00c4 0e41 lr $IX0, @0x0e41 + 085e 00c5 0e0f lr $IX1, @0x0e0f + 0860 02bf 80e7 call 0x80e7 + 0862 00f8 0bab sr @0x0bab, $AX0.L + 0864 00fb 0bae sr @0x0bae, $AX1.H + 0866 00c0 0e43 lr $AR0, @0x0e43 + 0868 0081 0b95 lri $AR1, #0x0b95 + 086a 00c2 0e10 lr $AR2, @0x0e10 + 086c 1c62 mrr $AR3, $AR2 + 086d 1c80 mrr $IX0, $AR0 + 086e 00c5 0e0a lr $IX1, @0x0e0a + 0870 02bf 80e7 call 0x80e7 + 0872 00f8 0bb1 sr @0x0bb1, $AX0.L + 0874 00fb 0baf sr @0x0baf, $AX1.H + 0876 02df ret +} + +void Unk() { + 0877 00c0 0e40 lr $AR0, @0x0e40 + 0879 0081 0b89 lri $AR1, #0x0b89 + 087b 00c2 0e08 lr $AR2, @0x0e08 + 087d 1c62 mrr $AR3, $AR2 + 087e 00c4 0e41 lr $IX0, @0x0e41 + 0880 00c5 0e09 lr $IX1, @0x0e09 + 0882 02bf 80e7 call 0x80e7 + 0884 00f8 0ba9 sr @0x0ba9, $AX0.L + 0886 00fb 0bac sr @0x0bac, $AX1.H + 0888 00c0 0e40 lr $AR0, @0x0e40 + 088a 0081 0b8d lri $AR1, #0x0b8d + 088c 00c2 0e0b lr $AR2, @0x0e0b + 088e 1c62 mrr $AR3, $AR2 + 088f 00c4 0e41 lr $IX0, @0x0e41 + 0891 00c5 0e0c lr $IX1, @0x0e0c + 0893 02bf 80e7 call 0x80e7 + 0895 00f8 0baa sr @0x0baa, $AX0.L + 0897 00fb 0bad sr @0x0bad, $AX1.H + 0899 00c0 0e40 lr $AR0, @0x0e40 + 089b 0081 0b91 lri $AR1, #0x0b91 + 089d 00c2 0e0e lr $AR2, @0x0e0e + 089f 1c62 mrr $AR3, $AR2 + 08a0 00c4 0e41 lr $IX0, @0x0e41 + 08a2 00c5 0e0f lr $IX1, @0x0e0f + 08a4 02bf 80e7 call 0x80e7 + 08a6 00f8 0bab sr @0x0bab, $AX0.L + 08a8 00fb 0bae sr @0x0bae, $AX1.H + 08aa 00c0 0e43 lr $AR0, @0x0e43 + 08ac 0081 0b97 lri $AR1, #0x0b97 + 08ae 00c2 0e0a lr $AR2, @0x0e0a + 08b0 1c62 mrr $AR3, $AR2 + 08b1 1c80 mrr $IX0, $AR0 + 08b2 00c5 0e0d lr $IX1, @0x0e0d + 08b4 02bf 80e7 call 0x80e7 + 08b6 00f8 0baf sr @0x0baf, $AX0.L + 08b8 00fb 0bb0 sr @0x0bb0, $AX1.H + 08ba 00c0 0e43 lr $AR0, @0x0e43 + 08bc 0081 0b95 lri $AR1, #0x0b95 + 08be 00c2 0e10 lr $AR2, @0x0e10 + 08c0 1c62 mrr $AR3, $AR2 + 08c1 02bf 81f9 call 0x81f9 + 08c3 00f8 0bb1 sr @0x0bb1, $AX0.L + 08c5 02df ret +} + +void Unk() { + 08c6 00c0 0e40 lr $AR0, @0x0e40 + 08c8 0081 0b89 lri $AR1, #0x0b89 + 08ca 00c2 0e08 lr $AR2, @0x0e08 + 08cc 0083 0e44 lri $AR3, #0x0e44 + 08ce 00c4 0e41 lr $IX0, @0x0e41 + 08d0 00c5 0e09 lr $IX1, @0x0e09 + 08d2 02bf 8282 call 0x8282 + 08d4 00f8 0ba9 sr @0x0ba9, $AX0.L + 08d6 00fb 0bac sr @0x0bac, $AX1.H + 08d8 02df ret +} + +void Unk() { + 08d9 00c0 0e40 lr $AR0, @0x0e40 + 08db 0081 0b89 lri $AR1, #0x0b89 + 08dd 00c2 0e08 lr $AR2, @0x0e08 + 08df 0083 0e44 lri $AR3, #0x0e44 + 08e1 00c4 0e41 lr $IX0, @0x0e41 + 08e3 00c5 0e09 lr $IX1, @0x0e09 + 08e5 02bf 8282 call 0x8282 + 08e7 00f8 0ba9 sr @0x0ba9, $AX0.L + 08e9 00fb 0bac sr @0x0bac, $AX1.H + 08eb 00c0 0e40 lr $AR0, @0x0e40 + 08ed 0081 0b8d lri $AR1, #0x0b8d + 08ef 00c2 0e0b lr $AR2, @0x0e0b + 08f1 0083 0e44 lri $AR3, #0x0e44 + 08f3 00c4 0e41 lr $IX0, @0x0e41 + 08f5 00c5 0e0c lr $IX1, @0x0e0c + 08f7 02bf 8282 call 0x8282 + 08f9 00f8 0baa sr @0x0baa, $AX0.L + 08fb 00fb 0bad sr @0x0bad, $AX1.H + 08fd 02df ret +} + +void Unk() { + 08fe 00c0 0e40 lr $AR0, @0x0e40 + 0900 0081 0b89 lri $AR1, #0x0b89 + 0902 00c2 0e08 lr $AR2, @0x0e08 + 0904 0083 0e44 lri $AR3, #0x0e44 + 0906 00c4 0e41 lr $IX0, @0x0e41 + 0908 00c5 0e09 lr $IX1, @0x0e09 + 090a 02bf 8282 call 0x8282 + 090c 00f8 0ba9 sr @0x0ba9, $AX0.L + 090e 00fb 0bac sr @0x0bac, $AX1.H + 0910 00c0 0e40 lr $AR0, @0x0e40 + 0912 0081 0b91 lri $AR1, #0x0b91 + 0914 00c2 0e0e lr $AR2, @0x0e0e + 0916 0083 0e44 lri $AR3, #0x0e44 + 0918 00c4 0e41 lr $IX0, @0x0e41 + 091a 00c5 0e0f lr $IX1, @0x0e0f + 091c 02bf 8282 call 0x8282 + 091e 00f8 0bab sr @0x0bab, $AX0.L + 0920 00fb 0bae sr @0x0bae, $AX1.H + 0922 02df ret +} + +void Unk() { + 0923 00c0 0e40 lr $AR0, @0x0e40 + 0925 0081 0b89 lri $AR1, #0x0b89 + 0927 00c2 0e08 lr $AR2, @0x0e08 + 0929 0083 0e44 lri $AR3, #0x0e44 + 092b 00c4 0e41 lr $IX0, @0x0e41 + 092d 00c5 0e09 lr $IX1, @0x0e09 + 092f 02bf 8282 call 0x8282 + 0931 00f8 0ba9 sr @0x0ba9, $AX0.L + 0933 00fb 0bac sr @0x0bac, $AX1.H + 0935 00c0 0e40 lr $AR0, @0x0e40 + 0937 0081 0b8d lri $AR1, #0x0b8d + 0939 00c2 0e0b lr $AR2, @0x0e0b + 093b 0083 0e44 lri $AR3, #0x0e44 + 093d 00c4 0e41 lr $IX0, @0x0e41 + 093f 00c5 0e0c lr $IX1, @0x0e0c + 0941 02bf 8282 call 0x8282 + 0943 00f8 0baa sr @0x0baa, $AX0.L + 0945 00fb 0bad sr @0x0bad, $AX1.H + 0947 00c0 0e40 lr $AR0, @0x0e40 + 0949 0081 0b91 lri $AR1, #0x0b91 + 094b 00c2 0e0e lr $AR2, @0x0e0e + 094d 0083 0e44 lri $AR3, #0x0e44 + 094f 00c4 0e41 lr $IX0, @0x0e41 + 0951 00c5 0e0f lr $IX1, @0x0e0f + 0953 02bf 8282 call 0x8282 + 0955 00f8 0bab sr @0x0bab, $AX0.L + 0957 00fb 0bae sr @0x0bae, $AX1.H + 0959 02df ret +} + +void Unk() { + 095a 00c0 0e40 lr $AR0, @0x0e40 + 095c 0081 0b89 lri $AR1, #0x0b89 + 095e 00c2 0e08 lr $AR2, @0x0e08 + 0960 0083 0e44 lri $AR3, #0x0e44 + 0962 00c4 0e41 lr $IX0, @0x0e41 + 0964 00c5 0e09 lr $IX1, @0x0e09 + 0966 02bf 8282 call 0x8282 + 0968 00f8 0ba9 sr @0x0ba9, $AX0.L + 096a 00fb 0bac sr @0x0bac, $AX1.H + 096c 00c0 0e43 lr $AR0, @0x0e43 + 096e 0081 0b97 lri $AR1, #0x0b97 + 0970 00c2 0e0a lr $AR2, @0x0e0a + 0972 0083 0e44 lri $AR3, #0x0e44 + 0974 02bf 845d call 0x845d + 0976 00f8 0baf sr @0x0baf, $AX0.L + 0978 02df ret +} + +void Unk() { + 0979 00c0 0e40 lr $AR0, @0x0e40 + 097b 0081 0b89 lri $AR1, #0x0b89 + 097d 00c2 0e08 lr $AR2, @0x0e08 + 097f 0083 0e44 lri $AR3, #0x0e44 + 0981 00c4 0e41 lr $IX0, @0x0e41 + 0983 00c5 0e09 lr $IX1, @0x0e09 + 0985 02bf 8282 call 0x8282 + 0987 00f8 0ba9 sr @0x0ba9, $AX0.L + 0989 00fb 0bac sr @0x0bac, $AX1.H + 098b 00c0 0e40 lr $AR0, @0x0e40 + 098d 0081 0b8d lri $AR1, #0x0b8d + 098f 00c2 0e0b lr $AR2, @0x0e0b + 0991 0083 0e44 lri $AR3, #0x0e44 + 0993 00c4 0e41 lr $IX0, @0x0e41 + 0995 00c5 0e0c lr $IX1, @0x0e0c + 0997 02bf 8282 call 0x8282 + 0999 00f8 0baa sr @0x0baa, $AX0.L + 099b 00fb 0bad sr @0x0bad, $AX1.H + 099d 00c0 0e43 lr $AR0, @0x0e43 + 099f 0081 0b97 lri $AR1, #0x0b97 + 09a1 00c2 0e0a lr $AR2, @0x0e0a + 09a3 0083 0e44 lri $AR3, #0x0e44 + 09a5 1c80 mrr $IX0, $AR0 + 09a6 00c5 0e0d lr $IX1, @0x0e0d + 09a8 02bf 8282 call 0x8282 + 09aa 00f8 0baf sr @0x0baf, $AX0.L + 09ac 00fb 0bb0 sr @0x0bb0, $AX1.H + 09ae 02df ret +} + +void Unk() { + 09af 00c0 0e40 lr $AR0, @0x0e40 + 09b1 0081 0b89 lri $AR1, #0x0b89 + 09b3 00c2 0e08 lr $AR2, @0x0e08 + 09b5 0083 0e44 lri $AR3, #0x0e44 + 09b7 00c4 0e41 lr $IX0, @0x0e41 + 09b9 00c5 0e09 lr $IX1, @0x0e09 + 09bb 02bf 8282 call 0x8282 + 09bd 00f8 0ba9 sr @0x0ba9, $AX0.L + 09bf 00fb 0bac sr @0x0bac, $AX1.H + 09c1 00c0 0e40 lr $AR0, @0x0e40 + 09c3 0081 0b91 lri $AR1, #0x0b91 + 09c5 00c2 0e0e lr $AR2, @0x0e0e + 09c7 0083 0e44 lri $AR3, #0x0e44 + 09c9 00c4 0e41 lr $IX0, @0x0e41 + 09cb 00c5 0e0f lr $IX1, @0x0e0f + 09cd 02bf 8282 call 0x8282 + 09cf 00f8 0bab sr @0x0bab, $AX0.L + 09d1 00fb 0bae sr @0x0bae, $AX1.H + 09d3 00c0 0e43 lr $AR0, @0x0e43 + 09d5 0081 0b95 lri $AR1, #0x0b95 + 09d7 00c2 0e10 lr $AR2, @0x0e10 + 09d9 0083 0e44 lri $AR3, #0x0e44 + 09db 1c80 mrr $IX0, $AR0 + 09dc 00c5 0e0a lr $IX1, @0x0e0a + 09de 02bf 8282 call 0x8282 + 09e0 00f8 0bb1 sr @0x0bb1, $AX0.L + 09e2 00fb 0baf sr @0x0baf, $AX1.H + 09e4 02df ret +} + +void Unk() { + 09e5 00c0 0e40 lr $AR0, @0x0e40 + 09e7 0081 0b89 lri $AR1, #0x0b89 + 09e9 00c2 0e08 lr $AR2, @0x0e08 + 09eb 0083 0e44 lri $AR3, #0x0e44 + 09ed 00c4 0e41 lr $IX0, @0x0e41 + 09ef 00c5 0e09 lr $IX1, @0x0e09 + 09f1 02bf 8282 call 0x8282 + 09f3 00f8 0ba9 sr @0x0ba9, $AX0.L + 09f5 00fb 0bac sr @0x0bac, $AX1.H + 09f7 00c0 0e40 lr $AR0, @0x0e40 + 09f9 0081 0b8d lri $AR1, #0x0b8d + 09fb 00c2 0e0b lr $AR2, @0x0e0b + 09fd 0083 0e44 lri $AR3, #0x0e44 + 09ff 00c0 0e41 lr $AR0, @0x0e41 + 0a01 00c5 0e0c lr $IX1, @0x0e0c + 0a03 02bf 8282 call 0x8282 + 0a05 00f8 0baa sr @0x0baa, $AX0.L + 0a07 00fb 0bad sr @0x0bad, $AX1.H + 0a09 00c0 0e40 lr $AR0, @0x0e40 + 0a0b 0081 0b91 lri $AR1, #0x0b91 + 0a0d 00c2 0e0e lr $AR2, @0x0e0e + 0a0f 0083 0e44 lri $AR3, #0x0e44 + 0a11 00c4 0e41 lr $IX0, @0x0e41 + 0a13 00c5 0e0f lr $IX1, @0x0e0f + 0a15 02bf 8282 call 0x8282 + 0a17 00f8 0bab sr @0x0bab, $AX0.L + 0a19 00fb 0bae sr @0x0bae, $AX1.H + 0a1b 00c0 0e43 lr $AR0, @0x0e43 + 0a1d 0081 0b97 lri $AR1, #0x0b97 + 0a1f 00c2 0e0a lr $AR2, @0x0e0a + 0a21 0083 0e44 lri $AR3, #0x0e44 + 0a23 1c80 mrr $IX0, $AR0 + 0a24 00c5 0e0d lr $IX1, @0x0e0d + 0a26 02bf 8282 call 0x8282 + 0a28 00f8 0baf sr @0x0baf, $AX0.L + 0a2a 00fb 0bb0 sr @0x0bb0, $AX1.H + 0a2c 00c0 0e43 lr $AR0, @0x0e43 + 0a2e 0081 0b95 lri $AR1, #0x0b95 + 0a30 00c2 0e10 lr $AR2, @0x0e10 + 0a32 0083 0e44 lri $AR3, #0x0e44 + 0a34 02bf 845d call 0x845d + 0a36 00f8 0bb1 sr @0x0bb1, $AX0.L + 0a38 02df ret +} + +void Unk() { + 0a39 00c0 0e40 lr $AR0, @0x0e40 + 0a3b 0081 0b89 lri $AR1, #0x0b89 + 0a3d 00c2 0e08 lr $AR2, @0x0e08 + 0a3f 1c62 mrr $AR3, $AR2 + 0a40 00c4 0e41 lr $IX0, @0x0e41 + 0a42 00c5 0e09 lr $IX1, @0x0e09 + 0a44 02bf 80e7 call 0x80e7 + 0a46 00f8 0ba9 sr @0x0ba9, $AX0.L + 0a48 00fb 0bac sr @0x0bac, $AX1.H + 0a4a 00c0 0e43 lr $AR0, @0x0e43 + 0a4c 0081 0b91 lri $AR1, #0x0b91 + 0a4e 00c2 0e0e lr $AR2, @0x0e0e + 0a50 1c62 mrr $AR3, $AR2 + 0a51 1c80 mrr $IX0, $AR0 + 0a52 00c5 0e0f lr $IX1, @0x0e0f + 0a54 02bf 80e7 call 0x80e7 + 0a56 00f8 0bab sr @0x0bab, $AX0.L + 0a58 00fb 0bae sr @0x0bae, $AX1.H + 0a5a 02df ret +} + +void Unk() { + 0a5b 00c0 0e40 lr $AR0, @0x0e40 + 0a5d 0081 0b89 lri $AR1, #0x0b89 + 0a5f 00c2 0e08 lr $AR2, @0x0e08 + 0a61 1c62 mrr $AR3, $AR2 + 0a62 00c4 0e41 lr $IX0, @0x0e41 + 0a64 00c5 0e09 lr $IX1, @0x0e09 + 0a66 02bf 80e7 call 0x80e7 + 0a68 00f8 0ba9 sr @0x0ba9, $AX0.L + 0a6a 00fb 0bac sr @0x0bac, $AX1.H + 0a6c 00c0 0e43 lr $AR0, @0x0e43 + 0a6e 0081 0b91 lri $AR1, #0x0b91 + 0a70 00c2 0e0e lr $AR2, @0x0e0e + 0a72 1c62 mrr $AR3, $AR2 + 0a73 1c80 mrr $IX0, $AR0 + 0a74 00c5 0e0f lr $IX1, @0x0e0f + 0a76 02bf 80e7 call 0x80e7 + 0a78 00f8 0bab sr @0x0bab, $AX0.L + 0a7a 00fb 0bae sr @0x0bae, $AX1.H + 0a7c 00c0 0e40 lr $AR0, @0x0e40 + 0a7e 0081 0b8d lri $AR1, #0x0b8d + 0a80 00c2 0e0b lr $AR2, @0x0e0b + 0a82 1c62 mrr $AR3, $AR2 + 0a83 00c4 0e41 lr $IX0, @0x0e41 + 0a85 00c5 0e0c lr $IX1, @0x0e0c + 0a87 02bf 80e7 call 0x80e7 + 0a89 00f8 0baa sr @0x0baa, $AX0.L + 0a8b 00fb 0bad sr @0x0bad, $AX1.H + 0a8d 00c0 0e43 lr $AR0, @0x0e43 + 0a8f 0081 0b99 lri $AR1, #0x0b99 + 0a91 00c2 0e0d lr $AR2, @0x0e0d + 0a93 1c62 mrr $AR3, $AR2 + 0a94 02bf 81f9 call 0x81f9 + 0a96 00f8 0bb0 sr @0x0bb0, $AX0.L + 0a98 02df ret +} + +void Unk() { + 0a99 00c0 0e40 lr $AR0, @0x0e40 + 0a9b 0081 0b89 lri $AR1, #0x0b89 + 0a9d 00c2 0e08 lr $AR2, @0x0e08 + 0a9f 0083 0e44 lri $AR3, #0x0e44 + 0aa1 00c4 0e41 lr $IX0, @0x0e41 + 0aa3 00c5 0e09 lr $IX1, @0x0e09 + 0aa5 02bf 8282 call 0x8282 + 0aa7 00f8 0ba9 sr @0x0ba9, $AX0.L + 0aa9 00fb 0bac sr @0x0bac, $AX1.H + 0aab 00c0 0e43 lr $AR0, @0x0e43 + 0aad 0081 0b91 lri $AR1, #0x0b91 + 0aaf 00c2 0e0e lr $AR2, @0x0e0e + 0ab1 0083 0e44 lri $AR3, #0x0e44 + 0ab3 1c80 mrr $IX0, $AR0 + 0ab4 00c5 0e0f lr $IX1, @0x0e0f + 0ab6 02bf 8282 call 0x8282 + 0ab8 00f8 0bab sr @0x0bab, $AX0.L + 0aba 00fb 0bae sr @0x0bae, $AX1.H + 0abc 02df ret +} + +void Unk() { + 0abd 00c0 0e40 lr $AR0, @0x0e40 + 0abf 0081 0b89 lri $AR1, #0x0b89 + 0ac1 00c2 0e08 lr $AR2, @0x0e08 + 0ac3 0083 0e44 lri $AR3, #0x0e44 + 0ac5 00c4 0e41 lr $IX0, @0x0e41 + 0ac7 00c5 0e09 lr $IX1, @0x0e09 + 0ac9 02bf 8282 call 0x8282 + 0acb 00f8 0ba9 sr @0x0ba9, $AX0.L + 0acd 00fb 0bac sr @0x0bac, $AX1.H + 0acf 00c0 0e43 lr $AR0, @0x0e43 + 0ad1 0081 0b91 lri $AR1, #0x0b91 + 0ad3 00c2 0e0e lr $AR2, @0x0e0e + 0ad5 0083 0e44 lri $AR3, #0x0e44 + 0ad7 1c80 mrr $IX0, $AR0 + 0ad8 00c5 0e0f lr $IX1, @0x0e0f + 0ada 02bf 8282 call 0x8282 + 0adc 00f8 0bab sr @0x0bab, $AX0.L + 0ade 00fb 0bae sr @0x0bae, $AX1.H + 0ae0 00c0 0e40 lr $AR0, @0x0e40 + 0ae2 0081 0b8d lri $AR1, #0x0b8d + 0ae4 00c2 0e0b lr $AR2, @0x0e0b + 0ae6 0083 0e44 lri $AR3, #0x0e44 + 0ae8 00c4 0e41 lr $IX0, @0x0e41 + 0aea 00c5 0e0c lr $IX1, @0x0e0c + 0aec 02bf 8282 call 0x8282 + 0aee 00f8 0baa sr @0x0baa, $AX0.L + 0af0 00fb 0bad sr @0x0bad, $AX1.H + 0af2 00c0 0e43 lr $AR0, @0x0e43 + 0af4 0081 0b99 lri $AR1, #0x0b99 + 0af6 00c2 0e0d lr $AR2, @0x0e0d + 0af8 0083 0e44 lri $AR3, #0x0e44 + 0afa 02bf 845d call 0x845d + 0afc 00f8 0bb0 sr @0x0bb0, $AX0.L + 0afe 02df ret +} + +# Jump table for main commands +0aff 0082 // Jump 0 +0b00 013e // Jump 1 +0b01 01bc // Jump 2 +0b02 0248 // Jump 3 +0b03 0413 // Jump 4 +0b04 0427 // Jump 5 +0b05 0165 // Jump 6 +0b06 0574 // Jump 7 +0b07 0b37 // Jump 8 +0b08 015f // Jump 9 +0b09 0478 // Jump a +0b0a 0474 // Jump b +0b0b 0476 // Jump c +0b0c 01a9 // Jump d +0b0d 043b // Jump e +0b0e 047a // Jump f Task_Yield() +0b0f 0bb1 // Jump 10 +0b10 0175 // Jump 11 + +# LUT for pb.mixerCtrl +0b11 0768 // Jump3 0 +0b12 077a // Jump3 1 +0b13 079d // Jump3 2 +0b14 07c0 // Jump3 3 +0b15 07f4 // Jump3 4 +0b16 0811 // Jump3 5 +0b17 0844 // Jump3 6 +0b18 0877 // Jump3 7 +0b19 08c6 // Jump3 8 +0b1a 08d9 // Jump3 9 +0b1b 08fe // Jump3 a +0b1c 0923 // Jump3 b +0b1d 095a // Jump3 c +0b1e 0979 // Jump3 d +0b1f 09af // Jump3 e +0b20 09e5 // Jump3 f + +0b21 0a39 // Jump3 10 +0b22 0a5b // Jump3 11 +0b23 0768 // Jump3 12 +0b24 0768 // Jump3 13 +0b25 0768 // Jump3 14 +0b26 0768 // Jump3 15 +0b27 0768 // Jump3 16 +0b28 0768 // Jump3 17 +0b29 0a99 // Jump3 18 +0b2a 0abd // Jump3 19 +0b2b 0768 // Jump3 1a +0b2c 0768 // Jump3 1b +0b2d 0768 // Jump3 1c +0b2e 0768 // Jump3 1d +0b2f 0768 // Jump3 1e +0b30 0768 // Jump3 1f + +# LUT for pb.srcSelect +0b31 05a8 // Jump4 0 +0b32 065d // Jump4 1 +0b33 0707 // Jump4 2 + +# LUT for pb.coefSelect tables (in drom) +0b34 1000 +0b35 1200 +0b36 1400 + +# End of noise - back to code. + +void Cmd_8() { + 0b37 8e00 set16 + + 0b38 8100 clr $ACC0 + 0b39 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0b3a 191c lrri $AC0.L, @$AR0 + + 0b3b 2ece srs @DSMAH, $AC0.M + 0b3c 2ccf srs @DSMAL, $AC0.L + 0b3d 16cd 0e80 si @DSPA, #0x0e80 + 0b3f 16c9 0000 si @DSCR, #0x0000 + 0b41 16cb 0100 si @DSBL, #0x0100 + + 0b43 1f7e mrr $AX1.H, $AC0.M + 0b44 1f3c mrr $AX1.L, $AC0.L + + 0b45 8100 clr $ACC0 + + 0b46 26c9 lrs $AC0.M, @DSCR + 0b47 02a0 0004 andf $AC0.M, #0x0004 + 0b49 029c 0b46 jlnz 0x0b46 + + 0b4b 191e lrri $AC0.M, @$AR0 + 0b4c 191c lrri $AC0.L, @$AR0 + 0b4d 2ece srs @DSMAH, $AC0.M + 0b4e 2ccf srs @DSMAL, $AC0.L + 0b4f 16cd 0280 si @DSPA, #0x0280 + 0b51 16c9 0000 si @DSCR, #0x0000 + 0b53 16cb 0280 si @DSBL, #0x0280 + + 0b55 1c80 mrr $IX0, $AR0 + + 0b56 0080 0280 lri $AR0, #0x0280 + 0b58 00c1 0e1b lr $AR1, @0x0e1b + 0b5a 0085 0000 lri $IX1, #0x0000 + 0b5c 0089 007f lri $WR1, #0x007f + 0b5e 0082 0f00 lri $AR2, #0x0f00 + 0b60 0083 16b4 lri $AR3, #0x16b4 + 0b62 1ce3 mrr $IX3, $AR3 + 0b63 8100 clr $ACC0 + + 0b64 26c9 lrs $AC0.M, @DSCR + 0b65 02a0 0004 andf $AC0.M, #0x0004 + 0b67 029c 0b64 jlnz 0x0b64 + + 0b69 8f00 set40 + 0b6a 8a78 m2'l : $AC1.M, @$AR0 + 0b6b 8c68 clr15'l : $AC1.L, @$AR0 + 0b6c f100 lsl16 $ACC1 + 0b6d 1a3f srr @$AR1, $AC1.M + 0b6e 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 + 0b6f 107e loopi #0x7e + 0b70 f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b71 f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b72 f278 madd'l $AX0.L, $AX0.H : $AC1.M, @$AR0 + 0b73 6e68 movp'l $ACC0 : $AC1.L, @$AR0 + 0b74 f132 lsl16's $ACC1 : @$AR2, $AC0.M + 0b75 1a3f srr @$AR1, $AC1.M + 0b76 119e 0b80 bloopi #0x9e, 0x0b80 + 0b78 1c67 mrr $AR3, $IX3 + 0b79 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 + 0b7a 107e loopi #0x7e + 0b7b f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b7c f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b7d f278 madd'l $AX0.L, $AX0.H : $AC1.M, @$AR0 + 0b7e 6e68 movp'l $ACC0 : $AC1.L, @$AR0 + 0b7f f132 lsl16's $ACC1 : @$AR2, $AC0.M + 0b80 1a3f srr @$AR1, $AC1.M + + 0b81 1c67 mrr $AR3, $IX3 + 0b82 84e3 clrp'ld : $AX0.H, $AX1.L, @$AR3 + 0b83 107e loopi #0x7e + 0b84 f2e3 madd'ld $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b85 f2e7 madd'ldn $AX0.L, $AX0.H : $AX0.H, $AX1.L, @$AR3 + 0b86 f200 madd $AX0.L, $AX0.H + 0b87 6e00 movp $ACC0 + 0b88 1b5e srri @$AR2, $AC0.M + 0b89 00e1 0e1b sr @0x0e1b, $AR1 + + 0b8b 0080 0280 lri $AR0, #0x0280 + 0b8d 0083 0f00 lri $AR3, #0x0f00 + 0b8f 0081 0000 lri $AR1, #0x0000 + 0b91 0082 0140 lri $AR2, #0x0140 + 0b93 0089 ffff lri $WR1, #0xffff + + 0b95 8900 clr $ACC1 + 0b96 8100 clr $ACC0 + + 0b97 8f00 set40 + + 0b98 11a0 0ba0 bloopi #0xa0, 0x0ba0 + 0b9a 197f lrri $AC1.M, @$AR3 + 0b9b 9930 asr16's $ACC1 : @$AR0, $AC0.M + 0b9c 1b1e srri @$AR0, $AC0.M + 0b9d 1b3f srri @$AR1, $AC1.M + 0b9e 7d29 neg's $ACC1 : @$AR1, $AC1.L + 0b9f 1b5f srri @$AR2, $AC1.M + 0ba0 1b5d srri @$AR2, $AC1.L + + 0ba1 8e00 set16 + + 0ba2 1fdb mrr $AC0.M, $AX1.H + 0ba3 1f99 mrr $AC0.L, $AX1.L + 0ba4 2ece srs @DSMAH, $AC0.M + 0ba5 2ccf srs @DSMAL, $AC0.L + 0ba6 16cd 0e80 si @DSPA, #0x0e80 + 0ba8 16c9 0001 si @DSCR, #0x0001 + 0baa 16cb 0100 si @DSBL, #0x0100 + + // 0bac 02bf 055c call 0x055c + WaitDMA(); + + 0bae 1c04 mrr $AR0, $IX0 + + // 0baf 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +void Cmd_10() { + 0bb1 8e00 set16 + + 0bb2 8100 clr $ACC0 + 0bb3 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0bb4 191c lrri $AC0.L, @$AR0 + + 0bb5 2ece srs @DSMAH, $AC0.M + 0bb6 2ccf srs @DSMAL, $AC0.L + 0bb7 16cd 07c0 si @DSPA, #0x07c0 + 0bb9 16c9 0001 si @DSCR, #0x0001 + 0bbb 16cb 0500 si @DSBL, #0x0500 + + // 0bbd 02bf 055c call 0x055c + WaitDMA(); + + 0bbf 8100 clr $ACC0 + 0bc0 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0bc1 191c lrri $AC0.L, @$AR0 + + 0bc2 2ece srs @DSMAH, $AC0.M + 0bc3 2ccf srs @DSMAL, $AC0.L + 0bc4 16cd 07c0 si @DSPA, #0x07c0 + 0bc6 16c9 0000 si @DSCR, #0x0000 + 0bc8 8900 clr $ACC1 + 0bc9 0d20 lris $AC1.L, #0x20 + 0bca 2dcb srs @DSBL, $AC1.L + + 0bcb 4c00 add $ACC0, $ACC1 + + 0bcc 1c80 mrr $IX0, $AR0 + + 0bcd 0080 07c0 lri $AR0, #0x07c0 + 0bcf 0083 0000 lri $AR3, #0x0000 + 0bd1 1c43 mrr $AR2, $AR3 + 0bd2 0a00 lris $AX0.H, #0x00 + + 0bd3 27c9 lrs $AC1.M, @DSCR + 0bd4 03a0 0004 andf $AC1.M, #0x0004 + 0bd6 029c 0bd3 jlnz 0x0bd3 + + 0bd8 2ece srs @DSMAH, $AC0.M + 0bd9 2ccf srs @DSMAL, $AC0.L + 0bda 16cd 07d0 si @DSPA, #0x07d0 + 0bdc 16c9 0000 si @DSCR, #0x0000 + 0bde 16cb 04e0 si @DSBL, #0x04e0 + + 0be0 8f00 set40 + + 0be1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0be2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0be3 6a00 movax $ACC0, $AX1 + 0be4 4800 addax $ACC0, $AX0 + 0be5 114f 0bee bloopi #0x4f, 0x0bee + 0be7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0be8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0be9 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 0bea 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0beb 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0bec 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0bed 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M + 0bee 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + + 0bef 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0bf0 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0bf1 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 0bf2 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0bf3 1b5f srri @$AR2, $AC1.M + 0bf4 1b5d srri @$AR2, $AC1.L + 0bf5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0bf6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0bf7 6800 movax $ACC0, $AX0 + 0bf8 7c00 neg $ACC0 + 0bf9 4a00 addax $ACC0, $AX1 + 0bfa 114f 0c05 bloopi #0x4f, 0x0c05 + 0bfc 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0bfd 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0bfe 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M + 0bff 7d00 neg $ACC1 + 0c00 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L + 0c01 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0c02 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0c03 683a movax's $ACC0, $AX0.L : @$AR2, $AC1.M + 0c04 7c00 neg $ACC0 + 0c05 4a2a addax's $ACC0, $AX1.L : @$AR2, $AC1.L + + 0c06 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0c07 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0c08 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M + 0c09 7d00 neg $ACC1 + 0c0a 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L + 0c0b 1b5f srri @$AR2, $AC1.M + 0c0c 1b5d srri @$AR2, $AC1.L + + 0c0d 1c04 mrr $AR0, $IX0 + + // 0c0e 029f 0068 jmp 0x0068 + goto DoNextCommand; +} + +# Begin interrupt handlers + +// Sends mail with value on top of callstack and rti's +void ResetAndStackUOFlow_Handler() { + 0c10 8e00 set16 + + // 0c11 16fc ecc0 si @DMBH, #0xecc0 + // 0c13 1fcc mrr $AC0.M, $ST0 + // 0c14 1d9e mrr $ST0, $AC0.M + // 0c15 2efd srs @DMBL, $AC0.M + DMB = 0xecc00000 | $ST0 + + // 0c16 26fc lrs $AC0.M, @DMBH + // 0c17 02a0 8000 andf $AC0.M, #0x8000 + // 0c19 029c 0c16 jlnz 0x0c16 + while (@DMBH & 0x8000 == 0); + + // 0c1b 0000 nop + // 0c1c 0000 nop + // 0c1d 0000 nop + // 0c1e 02ff rti + return; +} + +// Saves/Restores whole ACC0, but only modifies AC0.M. strange +void Int2_Handler() { + 0c1f 8e00 set16 + + // Save ACC0 + 0c20 00f0 0e17 sr @0x0e17, $AC0.H + 0c22 00fe 0e18 sr @0x0e18, $AC0.M + 0c24 00fc 0e19 sr @0x0e19, $AC0.L + + // 0c26 1fcc mrr $AC0.M, $ST0 + // 0c27 1d9e mrr $ST0, $AC0.M + // 0c28 16fc feed si @DMBH, #0xfeed + // 0c2a 2efd srs @DMBL, $AC0.M + DMB = 0xfeed0000 | $ST0 + + // 0c2b 26fc lrs $AC0.M, @DMBH + // 0c2c 02a0 8000 andf $AC0.M, #0x8000 + // 0c2e 029c 0c2b jlnz 0x0c2b + while (@DMBH & 0x8000 == 0); + + // Restore ACC0 + 0c30 00d0 0e17 lr $AC0.H, @0x0e17 + 0c32 00de 0e18 lr $AC0.M, @0x0e18 + 0c34 00dc 0e19 lr $AC0.L, @0x0e19 + + // 0c36 0000 nop + // 0c37 0000 nop + // 0c38 0000 nop + // 0c39 0000 nop + // 0c3a 02ff rti + return; +} + +void Int3_Handler() { + 0c3b 8e00 set16 + + // Save AC0.L, AC0.M + 0c3c 1dbc mrr $ST1, $AC0.L + 0c3d 1dbe mrr $ST1, $AC0.M + + // 0c3e 8100 clr $ACC0 + // 0c3f 00de 0bb7 lr $AC0.M, @0x0bb7 + // 0c41 0601 cmpis $AC0.M, #0x01 + // 0c42 0295 0c47 jz 0x0c47 + // 0c44 0e00 lris $AC0.M, #0x00 + // 0c45 00fe 0b87 sr @0x0b87, $AC0.M + if (*0x0bb7 != 1) { // pb.addr != AXPBADDR_LOOP_ON + *0x0b87 = 0; // pb.state = AX_PB_STATE_STOP + } + + // Restore AC0.L, AC0.M + 0c47 1fcd mrr $AC0.M, $ST1 + 0c48 1f8d mrr $AC0.L, $ST1 + + // 0c49 02ff rti + return; +} + +void Int4_Handler() { + // 0c4a 0000 nop + // 0c4b 0000 nop + // 0c4c 0000 nop + // 0c4d 0000 nop + // 0c4e 0000 nop + // 0c4f 02ff rti + return; +} + +void Int5_Handler() { + 0c50 8e00 set16 + + // Save AC0.L, AC0.M + 0c51 1dbc mrr $ST1, $AC0.L + 0c52 1dbe mrr $ST1, $AC0.M + + // 0c53 8100 clr $ACC0 + // 0c54 00de 0bb7 lr $AC0.M, @0x0bb7 + // 0c56 0601 cmpis $AC0.M, #0x01 + // 0c57 0295 0c5f jz 0x0c5f + if (*0x0bb7 != 1) // pb.addr != AXPBADDR_LOOP_ON + { + // 0c59 0e00 lris $AC0.M, #0x00 + // 0c5a 00fe 0b87 sr @0x0b87, $AC0.M + *0x0b87 = 0; // pb.state = AX_PB_STATE_STOP + + // Restore AC0.L, AC0.M + 0c5c 1fcd mrr $AC0.M, $ST1 + 0c5d 1f8d mrr $AC0.L, $ST1 + + // 0c5e 02ff rti + return; + } + + // 0c5f 8100 clr $ACC0 + // 0c60 00de 0b88 lr $AC0.M, @0x0b88 + // 0c62 0601 cmpis $AC0.M, #0x01 + // 0c63 0295 0c71 jz 0x0c71 + if (*0x0b88 != 1) { // pb.type != AX_PB_TYPE_STREAM + + // 0c65 00de 0bda lr $AC0.M, @0x0bda + // 0c67 2eda srs @scale, $AC0.M + // 0c68 00de 0bdb lr $AC0.M, @0x0bdb + // 0c6a 2edb srs @yn1, $AC0.M + // 0c6b 00de 0bdc lr $AC0.M, @0x0bdc + // 0c6d 2edc srs @yn2, $AC0.M + @scale = pb.adpcmLoop.loop_pred_scale + @yn1 = pb.adpcmLoop.loop_yn1 + @yn2 = pb.adpcmLoop.loop_yn2 + + // Restore AC0.L, AC0.M + 0c6e 1fcd mrr $AC0.M, $ST1 + 0c6f 1f8d mrr $AC0.L, $ST1 + + // 0c70 02ff rti + return; + + } else { + + // 0c71 00de 0bda lr $AC0.M, @0x0bda + // 0c73 2eda srs @scale, $AC0.M + // 0c74 26db lrs $AC0.M, @yn1 + // 0c75 2edb srs @yn1, $AC0.M + // 0c76 26dc lrs $AC0.M, @yn2 + // 0c77 2edc srs @yn2, $AC0.M + @scale = pb.adpcmLoop.loop_pred_scale + // refresh @yn1, @yn2....why? + @yn1 = @yn1 + @yn2 = @yn2 + + // Well helllloooo there, padding + // 0c78 8100 clr $ACC0 + // 0c79 00dc 0bdd lr $AC0.L, @0x0bdd + // 0c7b 7600 inc $ACC0 + // 0c7c 00fc 0bdd sr @0x0bdd, $AC0.L + // 0c7e 8100 clr $ACC0 + pb.pad[0]++ + + // Restore AC0.L, AC0.M + 0c7f 1fcd mrr $AC0.M, $ST1 + 0c80 1f8d mrr $AC0.L, $ST1 + + // 0c81 02ff rti + return; + } +} + +void Int6_Handler() { + 0c82 0000 nop + 0c83 0000 nop + 0c84 0000 nop + 0c85 0000 nop + 0c86 0000 nop + 0c87 02ff rti +} + +void Int7_Handler() { + 0c88 0000 nop + 0c89 0000 nop + 0c8a 0000 nop + 0c8b 0000 nop + 0c8c 02ff rti +} + +# End of interrupt handlers + +// Jump table for the next function. +0c8d 0c9f // some kind of soft-reset for the UCode +0c8e 0ca2 // looks like code to dump the UCode memory for debugging +0c8f 0cda // rest the UCode and jump to ROM +0c90 0cdd // normal case to return to the main-loop + +// Called only from Task_Yield() +// Decides what to do next (this cmdblock is done) +void JumpThroughTable2() { + 0c91 8e00 set16 + 0c92 8100 clr $ACC0 + 0c93 8900 clr $ACC1 + + // 0c94 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + // 0c96 27ff lrs $AC1.M, @CMBL + // 0c97 009e 0c8d lri $AC0.M, #0x0c8d + // 0c99 4c00 add $ACC0, $ACC1 + // 0c9a 1c7e mrr $AR3, $AC0.M + // 0c9b 0313 ilrr $AC1.M, @$AR3 + // 0c9c 1c7f mrr $AR3, $AC1.M + // 0c9d 176f jmpr $AR3 + switch(@CMBL) { + case 0: AX_ResumeTask(); break; + case 1: JumpTable2_1(); break; + case 2: IROM_Reset(); break; + case 3: AX_GetNextCmdBlock(); break; + } + 0c9e 0021 halt +} + +// case 0: +void AX_ResumeTask() { + 0c9f 029f 0030 jmp 0x0030 + 0ca1 0021 halt +} + +// case 1: +// funky...calls the mbox funcs, sometimes prefilling ACx regs... +// Perhaps DMAs some stuff and yields? +// Need to RE the ROM to figure this func out completely +void JumpTable2_1() { + // 0ca2 8100 clr $ACC0 + // 0ca3 8900 clr $ACC1 + // 0ca4 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + // 0ca6 24ff lrs $AC0.L, @CMBL + // 0ca7 02bf 0ce6 call 0x0ce6 + WaitForCPUMail1(); + + // 0ca9 25ff lrs $AC1.L, @CMBL + // 0caa 02bf 0ce6 call 0x0ce6 + WaitForCPUMail1(); + + 0cac 27ff lrs $AC1.M, @CMBL + 0cad 2ece srs @DSMAH, $AC0.M + 0cae 2ccf srs @DSMAL, $AC0.L + 0caf 16c9 0001 si @DSCR, #0x0001 + 0cb1 2fcd srs @DSPA, $AC1.M + 0cb2 2dcb srs @DSBL, $AC1.L + + // 0cb3 8100 clr $ACC0 + // 0cb4 8900 clr $ACC1 + // 0cb5 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + 0cb7 24ff lrs $AC0.L, @CMBL + 0cb8 1c9e mrr $IX0, $AC0.M + 0cb9 1cbc mrr $IX1, $AC0.L + 0cba 02bf 0ce6 call 0x0ce6 + WaitForCPUMail1(); + + 0cbc 25ff lrs $AC1.L, @CMBL + 0cbd 02bf 0ce6 call 0x0ce6 + WaitForCPUMail1(); + + 0cbf 27ff lrs $AC1.M, @CMBL + 0cc0 1cdf mrr $IX2, $AC1.M + 0cc1 1cfd mrr $IX3, $AC1.L + + // 0cc2 8100 clr $ACC0 + // 0cc3 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + 0cc5 26ff lrs $AC0.M, @CMBL + 0cc6 1c1e mrr $AR0, $AC0.M + 0cc7 8900 clr $ACC1 + 0cc8 02bf 0ce6 call 0x0ce6 + WaitForCPUMail1(); + + 0cca 20ff lrs $AX0.L, @CMBL + 0ccb 1f5f mrr $AX0.H, $AC1.M + 0ccc 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + 0cce 21ff lrs $AX1.L, @CMBL + 0ccf 02bf 0ce0 call 0x0ce0 + WaitForCPUMail0(); + + 0cd1 23ff lrs $AX1.H, @CMBL + + // 0cd2 26c9 lrs $AC0.M, @DSCR + // 0cd3 02a0 0004 andf $AC0.M, #0x0004 + // 0cd5 029c 0cd2 jlnz 0x0cd2 + while (@DSCR & 0x0004 != 0); // Wait for DMA to complete + + // 0cd7 029f 80b5 jmp 0x80b5 + // 0cd9 0021 halt + IROM_ErrorAndDie(); // Not sure...gotta RE the ROM +} + +// case 2: +void IROM_Reset() { + 0cda 029f 8000 jmp 0x8000 + 0cdc 0021 halt +} + +// case 3: +void AX_GetNextCmdBlock() { + // 0cdd 029f 0045 jmp 0x0045 + goto GetNextCmdBlock; + + 0cdf 0021 halt +} + +void WaitForCPUMail0() { + // 0ce0 26fe lrs $AC0.M, @CMBH + // 0ce1 02c0 8000 andcf $AC0.M, #0x8000 + // 0ce3 029c 0ce0 jlnz 0x0ce0 + while (@CMBH & 0x8000 == 0); + // 0ce5 02df ret + return; +} + +void WaitForCPUMail1() { + // 0ce6 27fe lrs $AC1.M, @CMBH + // 0ce7 03c0 8000 andcf $AC1.M, #0x8000 + // 0ce9 029c 0ce6 jlnz 0x0ce6 + while (@CMBH & 0x8000 == 0); + // 0ceb 02df ret + return; +} + +0cec 0000 nop +0ced 0000 nop +0cee 0000 nop +0cef 0000 nop diff --git a/docs/DSP/DSP_UC_AXWii.txt b/docs/DSP/DSP_UC_AXWii.txt index d87967e4c2..07a3d938f0 100644 --- a/docs/DSP/DSP_UC_AXWii.txt +++ b/docs/DSP/DSP_UC_AXWii.txt @@ -1,3339 +1,3339 @@ -// Memory map: -// 0x0C00: current AXList - - -// Voice PB structure: -// the current PB is stored at 0x02D0 -// offsets and sizes are counted in words -// -// Offset Size Desription -// 0x000 2 Address of the next PB -// 0x002 2 Address of this PB -// 0x004 1 Sample rate converter (0-2) -// 0x005 1 Coef select (0-2: 0x1000, 0x1200, 0x1400) -// 0x006 2 Selects entries in 4 tables (19 bits used) -// 0x008 1 Play/stop flag (1=play, 0=stop) -// 0x022 1 Initial time delay enable -// 0x023 2 Initial time delay data - - - 0000 0000 nop - 0001 0000 nop - -// Exception jump table - 0002 029f 0f3c jmp 0x0f3c - 0004 029f 0f48 jmp 0x0f48 - 0006 029f 0f4d jmp 0x0f4d - 0008 029f 0f5c jmp 0x0f5c - 000a 029f 0f61 jmp 0x0f61 - 000c 029f 0f8d jmp 0x0f8d - 000e 029f 0f92 jmp 0x0f92 - -// Entry point -void 0010_Entry() { - 0010 1302 sbset #0x02 - 0011 1303 sbset #0x03 - 0012 1204 sbclr #0x04 - 0013 1305 sbset #0x05 - 0014 1306 sbset #0x06 - 0015 8e00 set16 - 0016 8c00 clr15 - 0017 8b00 m0 - 0018 0092 00ff lri $CR, #0x00ff - 001a 009e 8000 lri $AC0.M, #0x8000 - 001c 00fe 0ce5 sr @0x0ce5, $AC0.M - 001e 009e 8000 lri $AC0.M, #0x8000 - 0020 00fe 0ce6 sr @0x0ce6, $AC0.M - 0022 00fe 0ce7 sr @0x0ce7, $AC0.M - 0024 00fe 0ce8 sr @0x0ce8, $AC0.M - 0026 8100 clr $ACC0 - 0027 00fe 0ce9 sr @0x0ce9, $AC0.M - 0029 8900 clr $ACC1 - 002a 16fc dcd1 si @DMBH, #0xdcd1 - 002c 16fd 0000 si @DMBL, #0x0000 - 002e 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10000 and trigger an IRQ - 0030 26fc lrs $AC0.M, @DMBH - 0031 02a0 8000 andf $AC0.M, #0x8000 - 0033 029c 0030 jlnz 0x0030 // wait until the mail is received by CPU - 0035 029f 004c jmp 0x004c // enter the main loop -} - -void 0037_Unk_Restart() { - 0037 1302 sbset #0x02 - 0038 1303 sbset #0x03 - 0039 1204 sbclr #0x04 - 003a 1305 sbset #0x05 - 003b 1306 sbset #0x06 - 003c 8e00 set16 - 003d 8c00 clr15 - 003e 8b00 m0 - 003f 0092 00ff lri $CR, #0x00ff - 0041 16fc dcd1 si @DMBH, #0xdcd1 - 0043 16fd 0001 si @DMBL, #0x0001 - 0045 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10001 and trigger an IRQ - 0047 26fc lrs $AC0.M, @DMBH - 0048 02a0 8000 andf $AC0.M, #0x8000 - 004a 029c 0047 jlnz 0x0047 // wait until the mail is received by CPU - -// main loop - 004c 8e00 set16 - 004d 8100 clr $ACC0 - 004e 8900 clr $ACC1 - 004f 009f babe lri $AC1.M, #0xbabe - 0051 26fe lrs $AC0.M, @CMBH - 0052 02c0 8000 andcf $AC0.M, #0x8000 - 0054 029c 0051 jlnz 0x0051 // wait until we get a new mail from CPU - 0056 8200 cmp - 0057 0294 0051 jnz 0x0051 // discard it if it's not a 0xBABE---- (AXList begin) - 0059 23ff lrs $AX1.H, @CMBL // AX1.H = low part of 0xBABE---- mail = length of list in bytes - 005a 8100 clr $ACC0 - 005b 26fe lrs $AC0.M, @CMBH - 005c 02c0 8000 andcf $AC0.M, #0x8000 - 005e 029c 005b jlnz 0x005b // wait until the next mail - 0060 27ff lrs $AC1.M, @CMBL - 0061 0240 7fff andi $AC0.M, #0x7fff // AC0.M = address high part, AC1.M = address low part - 0063 2ece srs @DSMAH, $AC0.M - 0064 2fcf srs @DSMAL, $AC1.M - 0065 16cd 0c00 si @DSPA, #0x0c00 - 0067 8100 clr $ACC0 - 0068 2ec9 srs @DSCR, $AC0.M - 0069 1ffb mrr $AC1.M, $AX1.H // Transfer the AXList (DMA) - 006a 2fcb srs @DSBL, $AC1.M // DMA transfer from main memory (addr = second mail) to 0x0C00, len = low part of first mail - 006b 02bf 0084 call 0084_WaitForDMACompletion() - 006d 0080 0c00 lri $AR0, #0x0c00 // AR0 = 0x0C00 -} // continues into next function - -void 006f_MailHandler() { - 006f 8e00 set16 - 0070 8100 clr $ACC0 - 0071 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0072 b100 tst $ACC0 - 0073 0291 0080 jl 0x0080 - 0075 0a0e lris $AX0.H, #0x0e - 0076 c100 cmpar $ACC0, $AX0.H - 0077 0292 0080 jg 0x0080 // die if command number is higher than 0xE - 0079 009f 0d04 lri $AC1.M, #0x0d04 - 007b 4c00 add $ACC0, $ACC1 - 007c 1c7e mrr $AR3, $AC0.M - 007d 0213 ilrr $AC0.M, @$AR3 - 007e 1c7e mrr $AR3, $AC0.M // func at [0x0D04 + cmd_num] - 007f 176f jmpr $AR3 // Jump to command func: AR0 = 0x0C01. Okay. - AC0.M = - AC1.M = 0x0D04. Not interesting either. -} - -void 0080_Die() { - 0080 16fc baad si @DMBH, #0xbaad - 0082 2efd srs @DMBL, $AC0.M - 0083 0021 halt -} - -void 0084_WaitForDMACompletion() { - 0084 26c9 lrs $AC0.M, @DSCR - 0085 02a0 0004 andf $AC0.M, #0x0004 - 0087 029c 0084 jlnz 0x0084 - 0089 02df ret -} - -void 008a_Cmd_0() { - 008a 8100 clr $ACC0 - 008b 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 008c 8e78 set16'l : $AC1.M, @$AR0 - 008d 2ece srs @DSMAH, $AC0.M - 008e 2fcf srs @DSMAL, $AC1.M - 008f 16cd 0d08 si @DSPA, #0x0d08 - 0091 16c9 0000 si @DSCR, #0x0000 - 0093 16cb 0078 si @DSBL, #0x0078 - 0095 0081 0d08 lri $AR1, #0x0d08 - 0097 0082 0000 lri $AR2, #0x0000 - 0099 009b 005f lri $AX1.H, #0x005f - 009b 009a 00c0 lri $AX0.H, #0x00c0 - 009d 8100 clr $ACC0 - 009e 8900 clr $ACC1 - 009f 8f00 set40 - 00a0 02bf 0084 call 0084_WaitForDMACompletion() - 00a2 193e lrri $AC0.M, @$AR1 - 00a3 193c lrri $AC0.L, @$AR1 - 00a4 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 00a5 0294 00ab jnz 0x00ab - 00a7 005a loop $AX0.H - 00a8 1b5e srri @$AR2, $AC0.M - 00a9 029f 00b3 jmp 0x00b3 - 00ab 9900 asr16 $ACC1 - 00ac 1b5e srri @$AR2, $AC0.M - 00ad 1b5c srri @$AR2, $AC0.L - 00ae 007b 00b2 bloop $AX1.H, 0x00b2 - 00b0 4c00 add $ACC0, $ACC1 - 00b1 1b5e srri @$AR2, $AC0.M - 00b2 1b5c srri @$AR2, $AC0.L - 00b3 0082 00c0 lri $AR2, #0x00c0 - 00b5 193e lrri $AC0.M, @$AR1 - 00b6 193c lrri $AC0.L, @$AR1 - 00b7 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 00b8 0294 00be jnz 0x00be - 00ba 005a loop $AX0.H - 00bb 1b5e srri @$AR2, $AC0.M - 00bc 029f 00c6 jmp 0x00c6 - 00be 9900 asr16 $ACC1 - 00bf 1b5e srri @$AR2, $AC0.M - 00c0 1b5c srri @$AR2, $AC0.L - 00c1 007b 00c5 bloop $AX1.H, 0x00c5 - 00c3 4c00 add $ACC0, $ACC1 - 00c4 1b5e srri @$AR2, $AC0.M - 00c5 1b5c srri @$AR2, $AC0.L - 00c6 0082 0180 lri $AR2, #0x0180 - 00c8 193e lrri $AC0.M, @$AR1 - 00c9 193c lrri $AC0.L, @$AR1 - 00ca b179 tst'l $ACC0 : $AC1.M, @$AR1 - 00cb 0294 00d1 jnz 0x00d1 - 00cd 005a loop $AX0.H - 00ce 1b5e srri @$AR2, $AC0.M - 00cf 029f 00d9 jmp 0x00d9 - 00d1 9900 asr16 $ACC1 - 00d2 1b5e srri @$AR2, $AC0.M - 00d3 1b5c srri @$AR2, $AC0.L - 00d4 007b 00d8 bloop $AX1.H, 0x00d8 - 00d6 4c00 add $ACC0, $ACC1 - 00d7 1b5e srri @$AR2, $AC0.M - 00d8 1b5c srri @$AR2, $AC0.L - 00d9 0082 0400 lri $AR2, #0x0400 - 00db 193e lrri $AC0.M, @$AR1 - 00dc 193c lrri $AC0.L, @$AR1 - 00dd b179 tst'l $ACC0 : $AC1.M, @$AR1 - 00de 0294 00e4 jnz 0x00e4 - 00e0 005a loop $AX0.H - 00e1 1b5e srri @$AR2, $AC0.M - 00e2 029f 00ec jmp 0x00ec - 00e4 9900 asr16 $ACC1 - 00e5 1b5e srri @$AR2, $AC0.M - 00e6 1b5c srri @$AR2, $AC0.L - 00e7 007b 00eb bloop $AX1.H, 0x00eb - 00e9 4c00 add $ACC0, $ACC1 - 00ea 1b5e srri @$AR2, $AC0.M - 00eb 1b5c srri @$AR2, $AC0.L - 00ec 0082 04c0 lri $AR2, #0x04c0 - 00ee 193e lrri $AC0.M, @$AR1 - 00ef 193c lrri $AC0.L, @$AR1 - 00f0 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 00f1 0294 00f7 jnz 0x00f7 - 00f3 005a loop $AX0.H - 00f4 1b5e srri @$AR2, $AC0.M - 00f5 029f 00ff jmp 0x00ff - 00f7 9900 asr16 $ACC1 - 00f8 1b5e srri @$AR2, $AC0.M - 00f9 1b5c srri @$AR2, $AC0.L - 00fa 007b 00fe bloop $AX1.H, 0x00fe - 00fc 4c00 add $ACC0, $ACC1 - 00fd 1b5e srri @$AR2, $AC0.M - 00fe 1b5c srri @$AR2, $AC0.L - 00ff 0082 0580 lri $AR2, #0x0580 - 0101 193e lrri $AC0.M, @$AR1 - 0102 193c lrri $AC0.L, @$AR1 - 0103 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0104 0294 010a jnz 0x010a - 0106 005a loop $AX0.H - 0107 1b5e srri @$AR2, $AC0.M - 0108 029f 0112 jmp 0x0112 - 010a 9900 asr16 $ACC1 - 010b 1b5e srri @$AR2, $AC0.M - 010c 1b5c srri @$AR2, $AC0.L - 010d 007b 0111 bloop $AX1.H, 0x0111 - 010f 4c00 add $ACC0, $ACC1 - 0110 1b5e srri @$AR2, $AC0.M - 0111 1b5c srri @$AR2, $AC0.L - 0112 0082 0640 lri $AR2, #0x0640 - 0114 193e lrri $AC0.M, @$AR1 - 0115 193c lrri $AC0.L, @$AR1 - 0116 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0117 0294 011d jnz 0x011d - 0119 005a loop $AX0.H - 011a 1b5e srri @$AR2, $AC0.M - 011b 029f 0125 jmp 0x0125 - 011d 9900 asr16 $ACC1 - 011e 1b5e srri @$AR2, $AC0.M - 011f 1b5c srri @$AR2, $AC0.L - 0120 007b 0124 bloop $AX1.H, 0x0124 - 0122 4c00 add $ACC0, $ACC1 - 0123 1b5e srri @$AR2, $AC0.M - 0124 1b5c srri @$AR2, $AC0.L - 0125 0082 0700 lri $AR2, #0x0700 - 0127 193e lrri $AC0.M, @$AR1 - 0128 193c lrri $AC0.L, @$AR1 - 0129 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 012a 0294 0130 jnz 0x0130 - 012c 005a loop $AX0.H - 012d 1b5e srri @$AR2, $AC0.M - 012e 029f 0138 jmp 0x0138 - 0130 9900 asr16 $ACC1 - 0131 1b5e srri @$AR2, $AC0.M - 0132 1b5c srri @$AR2, $AC0.L - 0133 007b 0137 bloop $AX1.H, 0x0137 - 0135 4c00 add $ACC0, $ACC1 - 0136 1b5e srri @$AR2, $AC0.M - 0137 1b5c srri @$AR2, $AC0.L - 0138 0082 07c0 lri $AR2, #0x07c0 - 013a 193e lrri $AC0.M, @$AR1 - 013b 193c lrri $AC0.L, @$AR1 - 013c b179 tst'l $ACC0 : $AC1.M, @$AR1 - 013d 0294 0143 jnz 0x0143 - 013f 005a loop $AX0.H - 0140 1b5e srri @$AR2, $AC0.M - 0141 029f 014b jmp 0x014b - 0143 9900 asr16 $ACC1 - 0144 1b5e srri @$AR2, $AC0.M - 0145 1b5c srri @$AR2, $AC0.L - 0146 007b 014a bloop $AX1.H, 0x014a - 0148 4c00 add $ACC0, $ACC1 - 0149 1b5e srri @$AR2, $AC0.M - 014a 1b5c srri @$AR2, $AC0.L - 014b 0082 0880 lri $AR2, #0x0880 - 014d 193e lrri $AC0.M, @$AR1 - 014e 193c lrri $AC0.L, @$AR1 - 014f b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0150 0294 0156 jnz 0x0156 - 0152 005a loop $AX0.H - 0153 1b5e srri @$AR2, $AC0.M - 0154 029f 015e jmp 0x015e - 0156 9900 asr16 $ACC1 - 0157 1b5e srri @$AR2, $AC0.M - 0158 1b5c srri @$AR2, $AC0.L - 0159 007b 015d bloop $AX1.H, 0x015d - 015b 4c00 add $ACC0, $ACC1 - 015c 1b5e srri @$AR2, $AC0.M - 015d 1b5c srri @$AR2, $AC0.L - 015e 0082 0940 lri $AR2, #0x0940 - 0160 193e lrri $AC0.M, @$AR1 - 0161 193c lrri $AC0.L, @$AR1 - 0162 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0163 0294 0169 jnz 0x0169 - 0165 005a loop $AX0.H - 0166 1b5e srri @$AR2, $AC0.M - 0167 029f 0171 jmp 0x0171 - 0169 9900 asr16 $ACC1 - 016a 1b5e srri @$AR2, $AC0.M - 016b 1b5c srri @$AR2, $AC0.L - 016c 007b 0170 bloop $AX1.H, 0x0170 - 016e 4c00 add $ACC0, $ACC1 - 016f 1b5e srri @$AR2, $AC0.M - 0170 1b5c srri @$AR2, $AC0.L - 0171 0082 0a00 lri $AR2, #0x0a00 - 0173 193e lrri $AC0.M, @$AR1 - 0174 193c lrri $AC0.L, @$AR1 - 0175 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0176 0294 017c jnz 0x017c - 0178 005a loop $AX0.H - 0179 1b5e srri @$AR2, $AC0.M - 017a 029f 0184 jmp 0x0184 - 017c 9900 asr16 $ACC1 - 017d 1b5e srri @$AR2, $AC0.M - 017e 1b5c srri @$AR2, $AC0.L - 017f 007b 0183 bloop $AX1.H, 0x0183 - 0181 4c00 add $ACC0, $ACC1 - 0182 1b5e srri @$AR2, $AC0.M - 0183 1b5c srri @$AR2, $AC0.L - 0184 009b 0011 lri $AX1.H, #0x0011 - 0186 009a 0024 lri $AX0.H, #0x0024 - 0188 0082 0240 lri $AR2, #0x0240 - 018a 193e lrri $AC0.M, @$AR1 - 018b 193c lrri $AC0.L, @$AR1 - 018c b179 tst'l $ACC0 : $AC1.M, @$AR1 - 018d 0294 0193 jnz 0x0193 - 018f 005a loop $AX0.H - 0190 1b5e srri @$AR2, $AC0.M - 0191 029f 019b jmp 0x019b - 0193 9900 asr16 $ACC1 - 0194 1b5e srri @$AR2, $AC0.M - 0195 1b5c srri @$AR2, $AC0.L - 0196 007b 019a bloop $AX1.H, 0x019a - 0198 4c00 add $ACC0, $ACC1 - 0199 1b5e srri @$AR2, $AC0.M - 019a 1b5c srri @$AR2, $AC0.L - 019b 0082 0ac0 lri $AR2, #0x0ac0 - 019d 193e lrri $AC0.M, @$AR1 - 019e 193c lrri $AC0.L, @$AR1 - 019f b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01a0 0294 01a6 jnz 0x01a6 - 01a2 005a loop $AX0.H - 01a3 1b5e srri @$AR2, $AC0.M - 01a4 029f 01ae jmp 0x01ae - 01a6 9900 asr16 $ACC1 - 01a7 1b5e srri @$AR2, $AC0.M - 01a8 1b5c srri @$AR2, $AC0.L - 01a9 007b 01ad bloop $AX1.H, 0x01ad - 01ab 4c00 add $ACC0, $ACC1 - 01ac 1b5e srri @$AR2, $AC0.M - 01ad 1b5c srri @$AR2, $AC0.L - 01ae 0082 0264 lri $AR2, #0x0264 - 01b0 193e lrri $AC0.M, @$AR1 - 01b1 193c lrri $AC0.L, @$AR1 - 01b2 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01b3 0294 01b9 jnz 0x01b9 - 01b5 005a loop $AX0.H - 01b6 1b5e srri @$AR2, $AC0.M - 01b7 029f 01c1 jmp 0x01c1 - 01b9 9900 asr16 $ACC1 - 01ba 1b5e srri @$AR2, $AC0.M - 01bb 1b5c srri @$AR2, $AC0.L - 01bc 007b 01c0 bloop $AX1.H, 0x01c0 - 01be 4c00 add $ACC0, $ACC1 - 01bf 1b5e srri @$AR2, $AC0.M - 01c0 1b5c srri @$AR2, $AC0.L - 01c1 0082 0ae4 lri $AR2, #0x0ae4 - 01c3 193e lrri $AC0.M, @$AR1 - 01c4 193c lrri $AC0.L, @$AR1 - 01c5 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01c6 0294 01cc jnz 0x01cc - 01c8 005a loop $AX0.H - 01c9 1b5e srri @$AR2, $AC0.M - 01ca 029f 01d4 jmp 0x01d4 - 01cc 9900 asr16 $ACC1 - 01cd 1b5e srri @$AR2, $AC0.M - 01ce 1b5c srri @$AR2, $AC0.L - 01cf 007b 01d3 bloop $AX1.H, 0x01d3 - 01d1 4c00 add $ACC0, $ACC1 - 01d2 1b5e srri @$AR2, $AC0.M - 01d3 1b5c srri @$AR2, $AC0.L - 01d4 0082 0288 lri $AR2, #0x0288 - 01d6 193e lrri $AC0.M, @$AR1 - 01d7 193c lrri $AC0.L, @$AR1 - 01d8 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01d9 0294 01df jnz 0x01df - 01db 005a loop $AX0.H - 01dc 1b5e srri @$AR2, $AC0.M - 01dd 029f 01e7 jmp 0x01e7 - 01df 9900 asr16 $ACC1 - 01e0 1b5e srri @$AR2, $AC0.M - 01e1 1b5c srri @$AR2, $AC0.L - 01e2 007b 01e6 bloop $AX1.H, 0x01e6 - 01e4 4c00 add $ACC0, $ACC1 - 01e5 1b5e srri @$AR2, $AC0.M - 01e6 1b5c srri @$AR2, $AC0.L - 01e7 0082 0b08 lri $AR2, #0x0b08 - 01e9 193e lrri $AC0.M, @$AR1 - 01ea 193c lrri $AC0.L, @$AR1 - 01eb b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01ec 0294 01f2 jnz 0x01f2 - 01ee 005a loop $AX0.H - 01ef 1b5e srri @$AR2, $AC0.M - 01f0 029f 01fa jmp 0x01fa - 01f2 9900 asr16 $ACC1 - 01f3 1b5e srri @$AR2, $AC0.M - 01f4 1b5c srri @$AR2, $AC0.L - 01f5 007b 01f9 bloop $AX1.H, 0x01f9 - 01f7 4c00 add $ACC0, $ACC1 - 01f8 1b5e srri @$AR2, $AC0.M - 01f9 1b5c srri @$AR2, $AC0.L - 01fa 0082 02ac lri $AR2, #0x02ac - 01fc 193e lrri $AC0.M, @$AR1 - 01fd 193c lrri $AC0.L, @$AR1 - 01fe b179 tst'l $ACC0 : $AC1.M, @$AR1 - 01ff 0294 0205 jnz 0x0205 - 0201 005a loop $AX0.H - 0202 1b5e srri @$AR2, $AC0.M - 0203 029f 020d jmp 0x020d - 0205 9900 asr16 $ACC1 - 0206 1b5e srri @$AR2, $AC0.M - 0207 1b5c srri @$AR2, $AC0.L - 0208 007b 020c bloop $AX1.H, 0x020c - 020a 4c00 add $ACC0, $ACC1 - 020b 1b5e srri @$AR2, $AC0.M - 020c 1b5c srri @$AR2, $AC0.L - 020d 0082 0b2c lri $AR2, #0x0b2c - 020f 193e lrri $AC0.M, @$AR1 - 0210 193c lrri $AC0.L, @$AR1 - 0211 b179 tst'l $ACC0 : $AC1.M, @$AR1 - 0212 0294 0218 jnz 0x0218 - 0214 005a loop $AX0.H - 0215 1b5e srri @$AR2, $AC0.M - 0216 029f 0220 jmp 0x0220 - 0218 9900 asr16 $ACC1 - 0219 1b5e srri @$AR2, $AC0.M - 021a 1b5c srri @$AR2, $AC0.L - 021b 007b 021f bloop $AX1.H, 0x021f - 021d 4c00 add $ACC0, $ACC1 - 021e 1b5e srri @$AR2, $AC0.M - 021f 1b5c srri @$AR2, $AC0.L - 0220 029f 006f jmp 006f_MailHandler() -} - -void 0222_Cmd_1() { - 0222 8100 clr $ACC0 - 0223 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0224 8e60 set16'l : $AC0.L, @$AR0 - 0225 2ece srs @DSMAH, $AC0.M - 0226 2ccf srs @DSMAL, $AC0.L - 0227 16cd 0d08 si @DSPA, #0x0d08 - 0229 16c9 0000 si @DSCR, #0x0000 - 022b 16cb 0180 si @DSBL, #0x0180 - 022d 1cc0 mrr $IX2, $AR0 - 022e 0080 0000 lri $AR0, #0x0000 - 0230 0083 00c0 lri $AR3, #0x00c0 - 0232 0081 0d08 lri $AR1, #0x0d08 - 0234 0084 ffff lri $IX0, #0xffff - 0236 1ce4 mrr $IX3, $IX0 - 0237 02bf 0084 call 0084_WaitForDMACompletion() - 0239 8f00 set40 - 023a 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 023b 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 - 023c 6800 movax $ACC0, $AX0.L - 023d 4a00 addax $ACC0, $AX1.L - 023e 191b lrri $AX1.H, @$AR0 - 023f 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M - 0240 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L - 0241 115f 0249 bloopi #0x5f, 0x0249 - 0243 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0244 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 - 0245 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M - 0246 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L - 0247 191b lrri $AX1.H, @$AR0 - 0248 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M - 0249 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L - 024a 1b1f srri @$AR0, $AC1.M - 024b 1b1d srri @$AR0, $AC1.L - 024c 1c06 mrr $AR0, $IX2 - 024d 029f 006f jmp 006f_MailHandler() -} - -void 024f_Cmd_2() { - 024f 8100 clr $ACC0 - 0250 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 0251 8e60 set16'l : $AC0.L, @$AR0 - 0252 2ece srs @DSMAH, $AC0.M - 0253 2ccf srs @DSMAL, $AC0.L - 0254 16cd 0d08 si @DSPA, #0x0d08 - 0256 16c9 0000 si @DSCR, #0x0000 - 0258 16cb 0180 si @DSBL, #0x0180 - 025a 1cc0 mrr $IX2, $AR0 - 025b 0080 0000 lri $AR0, #0x0000 - 025d 0083 00c0 lri $AR3, #0x00c0 - 025f 0081 0d08 lri $AR1, #0x0d08 - 0261 0084 ffff lri $IX0, #0xffff - 0263 1ce4 mrr $IX3, $IX0 - 0264 02bf 0084 call 0084_WaitForDMACompletion() - 0266 8f00 set40 - 0267 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0268 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 - 0269 6800 movax $ACC0, $AX0.L - 026a 4a00 addax $ACC0, $AX1.L - 026b 191b lrri $AX1.H, @$AR0 - 026c 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M - 026d 7d00 neg $ACC1 - 026e 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L - 026f 115f 0278 bloopi #0x5f, 0x0278 - 0271 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0272 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 - 0273 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M - 0274 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L - 0275 191b lrri $AX1.H, @$AR0 - 0276 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M - 0277 7d00 neg $ACC1 - 0278 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L - 0279 1b1f srri @$AR0, $AC1.M - 027a 1b1d srri @$AR0, $AC1.L - 027b 1c06 mrr $AR0, $IX2 - 027c 029f 006f jmp 006f_MailHandler() -} - -// Command 0x4 - Mixer -// Parameters: AR0 -> 0x0C01 -// AXList data: command (2), PBs address (4) -// Stores 0x140 bytes of data from the PBs address to 0x02D0. Suspicious. - -void 027e_Cmd_4_SetPBsAddress() { - 027e 8100 clr $ACC0 // ACC0 = 0, ACC1 = 0 - 027f 8970 clr'l $ACC1 : $AC0.M, @$AR0 // ACC0 = mem32[0x0C01] (the new PBs address is there) - 0280 8e60 set16'l : $AC0.L, @$AR0 // - 0281 00e0 0cd2 sr @0x0cd2, $AR0 // mem16[0x0CD2] = 0x0C03; - - -// Mixing loop - stops when the pointer to the next PB in the current PB is NULL - 0283 2ece srs @DSMAH, $AC0.M - 0284 2ccf srs @DSMAL, $AC0.L - 0285 16cd 02d0 si @DSPA, #0x02d0 - 0287 16c9 0000 si @DSCR, #0x0000 - 0289 16cb 0140 si @DSBL, #0x0140 // transfer 0x140 bytes from the current PB address to 0x02D0. aka Transfer the current PB - 028b 02bf 0084 call 0084_WaitForDMACompletion() - -// Load some values to memory [0x0CDX / 0x0CEX] - 028d 8100 clr $ACC0 - 028e 8900 clr $ACC1 - 028f 00de 02d4 lr $AC0.M, @0x02d4 // - 0291 009f 0db7 lri $AC1.M, #0x0db7 - 0293 4c00 add $ACC0, $ACC1 // mem16[0x02D4] + 0xDB7; - 0294 1c7e mrr $AR3, $AC0.M - 0295 0213 ilrr $AC0.M, @$AR3 // Sample rate converter - 0296 00fe 0cdf sr @0x0cdf, $AC0.M // mem16[0x0CDF] = iram16[0x0DB7 + mem16[0x02D4]]; - 0298 00de 02d5 lr $AC0.M, @0x02d5 - 029a 009f 0dba lri $AC1.M, #0x0dba - 029c 4c00 add $ACC0, $ACC1 - 029d 1c7e mrr $AR3, $AC0.M - 029e 0213 ilrr $AC0.M, @$AR3 // Coef select - 029f 00fe 0ce0 sr @0x0ce0, $AC0.M // mem16[0x0CE0] = iram16[0x0DBA + mem16[0x02D5]]; - 02a1 009a 001f lri $AX0.H, #0x001f - 02a3 00de 02d7 lr $AC0.M, @0x02d7 - 02a5 009f 0d13 lri $AC1.M, #0x0d13 - 02a7 3400 andr $AC0.M, $AX0.H - 02a8 4c00 add $ACC0, $ACC1 - 02a9 1c7e mrr $AR3, $AC0.M - 02aa 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table - 02ab 00fe 0cd3 sr @0x0cd3, $AC0.M // mem16[0x0CD3] = iram16[0x0D13 + (mem16[0x02D7] & 0x001F)]; (5 bits) - 02ad 00de 02d6 lr $AC0.M, @0x02d6 - 02af 009f 0d33 lri $AC1.M, #0x0d33 - 02b1 3400 andr $AC0.M, $AX0.H - 02b2 4c00 add $ACC0, $ACC1 - 02b3 1c7e mrr $AR3, $AC0.M - 02b4 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table - 02b5 00fe 0cd4 sr @0x0cd4, $AC0.M // mem16[0x0CD4] = iram16[0x0D33 + (mem16[0x02D6] & 0x001F)]; (5 bits) - 02b7 00de 02d6 lr $AC0.M, @0x02d6 - 02b9 009f 0d53 lri $AC1.M, #0x0d53 - 02bb 14fb asr $ACC0, #-5 - 02bc 3400 andr $AC0.M, $AX0.H - 02bd 4c00 add $ACC0, $ACC1 - 02be 1c7e mrr $AR3, $AC0.M - 02bf 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table - 02c0 00fe 0cd5 sr @0x0cd5, $AC0.M // mem16[0x0CD5] = iram16[0x0D53 + ((mem16[0x02D6] >> 5) & 0x001F)]; (5 bits) - 02c2 00de 02d6 lr $AC0.M, @0x02d6 - 02c4 009f 0d73 lri $AC1.M, #0x0d73 - 02c6 14f6 asr $ACC0, #-10 - 02c7 4c00 add $ACC0, $ACC1 - 02c8 1c7e mrr $AR3, $AC0.M - 02c9 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table - 02ca 00fe 0cd6 sr @0x0cd6, $AC0.M // mem16[0x0CD6] = iram16[0x0D73 + (mem16[0x02D6] >> 10)]; (6 bits) - 02cc 8100 clr $ACC0 - 02cd 00de 033c lr $AC0.M, @0x033c - 02cf 009a 0003 lri $AX0.H, #0x0003 - 02d1 009b 0db3 lri $AX1.H, #0x0db3 - 02d3 1ffe mrr $AC1.M, $AC0.M - 02d4 3500 andr $AC1.M, $AX0.H - 02d5 4700 addr $ACC1, $AX1.H - 02d6 1c7f mrr $AR3, $AC1.M - 02d7 0313 ilrr $AC1.M, @$AR3 - 02d8 00ff 0cd7 sr @0x0cd7, $AC1.M // mem16[0x0CD7] = iram16[0x0DB3 + (mem16[0x033C] & 0x0003)]; - 02da 147e lsr $ACC0, #-2 - 02db 1ffe mrr $AC1.M, $AC0.M - 02dc 3500 andr $AC1.M, $AX0.H - 02dd 4700 addr $ACC1, $AX1.H - 02de 1c7f mrr $AR3, $AC1.M - 02df 0313 ilrr $AC1.M, @$AR3 - 02e0 00ff 0cd8 sr @0x0cd8, $AC1.M // mem16[0x0CD8] = iram16[0x0DB3 + ((mem16[0x033C] >> 2) & 0x0003)]; - 02e2 147e lsr $ACC0, #-2 - 02e3 1ffe mrr $AC1.M, $AC0.M - 02e4 3500 andr $AC1.M, $AX0.H - 02e5 4700 addr $ACC1, $AX1.H - 02e6 1c7f mrr $AR3, $AC1.M - 02e7 0313 ilrr $AC1.M, @$AR3 - 02e8 00ff 0cd9 sr @0x0cd9, $AC1.M // mem16[0x0CD9] = iram16[0x0DB3 + ((mem16[0x033C] >> 4) & 0x0003)]; - 02ea 147e lsr $ACC0, #-2 - 02eb 1ffe mrr $AC1.M, $AC0.M - 02ec 3500 andr $AC1.M, $AX0.H - 02ed 4700 addr $ACC1, $AX1.H - 02ee 1c7f mrr $AR3, $AC1.M - 02ef 0313 ilrr $AC1.M, @$AR3 - 02f0 00ff 0cda sr @0x0cda, $AC1.M // mem16[0x0CDA] = iram16[0x0DB3 + ((mem16[0x033C] >> 6) & 0x0003)]; - 02f2 147e lsr $ACC0, #-2 - 02f3 1ffe mrr $AC1.M, $AC0.M - 02f4 3500 andr $AC1.M, $AX0.H - 02f5 4700 addr $ACC1, $AX1.H - 02f6 1c7f mrr $AR3, $AC1.M - 02f7 0313 ilrr $AC1.M, @$AR3 - 02f8 00ff 0cdb sr @0x0cdb, $AC1.M // mem16[0x0CDB] = iram16[0x0DB3 + ((mem16[0x033C] >> 8) & 0x0003)]; - 02fa 147e lsr $ACC0, #-2 - 02fb 1ffe mrr $AC1.M, $AC0.M - 02fc 3500 andr $AC1.M, $AX0.H - 02fd 4700 addr $ACC1, $AX1.H - 02fe 1c7f mrr $AR3, $AC1.M - 02ff 0313 ilrr $AC1.M, @$AR3 - 0300 00ff 0cdc sr @0x0cdc, $AC1.M // mem16[0x0CDC] = iram16[0x0DB3 + ((mem16[0x033C] >> 10) & 0x0003)]; - 0302 147e lsr $ACC0, #-2 - 0303 1ffe mrr $AC1.M, $AC0.M - 0304 3500 andr $AC1.M, $AX0.H - 0305 4700 addr $ACC1, $AX1.H - 0306 1c7f mrr $AR3, $AC1.M - 0307 0313 ilrr $AC1.M, @$AR3 - 0308 00ff 0cdd sr @0x0cdd, $AC1.M // mem16[0x0CDD] = iram16[0x0DB3 + ((mem16[0x033C] >> 12) & 0x0003)]; - 030a 147e lsr $ACC0, #-2 - 030b 1ffe mrr $AC1.M, $AC0.M - 030c 3500 andr $AC1.M, $AX0.H - 030d 4700 addr $ACC1, $AX1.H - 030e 1c7f mrr $AR3, $AC1.M - 030f 0313 ilrr $AC1.M, @$AR3 - 0310 00ff 0cde sr @0x0cde, $AC1.M // mem16[0x0CDE] = iram16[0x0DB3 + (mem16[0x033C] >> 14)]; - - 0312 8100 clr $ACC0 - 0313 00de 02f2 lr $AC0.M, @0x02f2 - 0315 b100 tst $ACC0 - 0316 0295 0339 jz 0x0339 - - // Initial time delay - aka echo aka reverb - // The buffer is 64 bytes - // That thing may be hard to implement in HLE because the HLE sound buffer size is variable - if (mem16[0x02F2] != 0) - { - 0318 8900 clr $ACC1 - 0319 00df 02f5 lr $AC1.M, @0x02f5 - 031b 0300 0c40 addi $AC1.M, #0x0c40 - 031d 00ff 0ce2 sr @0x0ce2, $AC1.M - 031f 00df 02f6 lr $AC1.M, @0x02f6 - 0321 0300 0c40 addi $AC1.M, #0x0c40 - 0323 00ff 0ce3 sr @0x0ce3, $AC1.M - 0325 009f 0c60 lri $AC1.M, #0x0c60 - 0327 00ff 0ce1 sr @0x0ce1, $AC1.M - 0329 00de 02f3 lr $AC0.M, @0x02f3 - 032b 2ece srs @DSMAH, $AC0.M - 032c 00de 02f4 lr $AC0.M, @0x02f4 - 032e 2ecf srs @DSMAL, $AC0.M - 032f 16cd 0c40 si @DSPA, #0x0c40 - 0331 16c9 0000 si @DSCR, #0x0000 - 0333 16cb 0040 si @DSBL, #0x0040 - 0335 02bf 0084 call 0084_WaitForDMACompletion() // so yet another DMA... from mem32[0x02F3] to 0x0C40, 64 bytes - 0337 029f 0341 jmp 0x0341 - } - else - { - 0339 009f 0c60 lri $AC1.M, #0x0c60 - 033b 00ff 0ce2 sr @0x0ce2, $AC1.M - 033d 00ff 0ce3 sr @0x0ce3, $AC1.M - 033f 00ff 0ce1 sr @0x0ce1, $AC1.M - } - - 0341 8c00 clr15 - 0342 8b00 m0 - 0343 8100 clr $ACC0 - 0344 00de 02d8 lr $AC0.M, @0x02d8 - 0346 0601 cmpis $ACC0, #0x01 - 0347 0294 046a jnz 0x046a - -if (mem16[0x02D8] == 1) // if the voice is playing -{ - 0349 00c3 0cdf lr $AR3, @0x0cdf - 034b 177f callr $AR3 // call the sample rate converter - 034c 8a00 m2 // MULTIPLICATION x2 MODE ENABLED! - 034d 8100 clr $ACC0 - 034e 8900 clr $ACC1 - 034f 00de 0306 lr $AC0.M, @0x0306 // pb[0x36] - 0351 00df 0305 lr $AC1.M, @0x0305 // pb[0x35] - 0353 1f1f mrr $AX0.L, $AC1.M - 0354 4d00 add $ACC1, $ACC0 - 0355 1481 asl $ACC0, #1 - 0356 8d1e set15'mv : $AX1.H, $AC0.M - 0357 1fd8 mrr $AC0.M, $AX0.L - 0358 0098 8000 lri $AX0.L, #0x8000 - 035a 0080 0d08 lri $AR0, #0x0d08 - 035c a830 mulx's $AX0.L, $AX1.H : @$AR0, $AC0.M - 035d 112f 0360 bloopi #0x2f, 0x0360 - 035f ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - 0360 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M - 0361 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M - 0362 00fe 0305 sr @0x0305, $AC0.M - 0364 8f00 set40 - 0365 0080 0d08 lri $AR0, #0x0d08 - 0367 00c1 0ce1 lr $AR1, @0x0ce1 - 0369 1c61 mrr $AR3, $AR1 - 036a 193a lrri $AX0.H, @$AR1 - 036b 1919 lrri $AX1.L, @$AR0 - 036c b051 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR1 - 036d 1919 lrri $AX1.L, @$AR0 - 036e 115e 0371 bloopi #0x5e, 0x0371 - 0370 b651 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR1 - 0371 8090 nx'ls : $AX1.L, $AC0.M - 0372 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0373 6e33 movp's $ACC0 : @$AR3, $AC0.M - 0374 1b7e srri @$AR3, $AC0.M - 0375 00de 032d lr $AC0.M, @0x032d - 0377 b100 tst $ACC0 - 0378 0295 0381 jz 0x0381 - 037a 00c0 0ce1 lr $AR0, @0x0ce1 - 037c 1c20 mrr $AR1, $AR0 - 037d 0083 032e lri $AR3, #0x032e - 037f 02bf 06ab call 0x06ab - 0381 00de 0331 lr $AC0.M, @0x0331 - 0383 b100 tst $ACC0 - 0384 0295 038d jz 0x038d - 0386 0080 0332 lri $AR0, #0x0332 - 0388 00c1 0ce1 lr $AR1, @0x0ce1 - 038a 1c41 mrr $AR2, $AR1 - 038b 02bf 06c3 call 06c3_Unknown() - 038d 0080 02f9 lri $AR0, #0x02f9 - 038f 8100 clr $ACC0 - 0390 100c loopi #0x0c - 0391 1b1e srri @$AR0, $AC0.M // zero out the updates field - 0392 0080 034d lri $AR0, #0x034d - 0394 1008 loopi #0x08 - 0395 1b1e srri @$AR0, $AC0.M - 0396 00c3 0cd3 lr $AR3, @0x0cd3 // perform volume stuff - 0398 177f callr $AR3 // what a complicated volume control! - 0399 00c3 0cd4 lr $AR3, @0x0cd4 - 039b 177f callr $AR3 - 039c 00c3 0cd5 lr $AR3, @0x0cd5 - 039e 177f callr $AR3 - 039f 00c3 0cd6 lr $AR3, @0x0cd6 - 03a1 177f callr $AR3 - - 03a2 00de 033b lr $AC0.M, @0x033b - 03a4 b100 tst $ACC0 - 03a5 0295 0447 jz 0x0447 - if (mem16[0x033B] != 0) - { - 03a7 00de 035a lr $AC0.M, @0x035a - 03a9 b100 tst $ACC0 - 03aa 0295 03c4 jz 0x03c4 - if (mem16[0x035A] != 0) - { - 03ac 0a02 lris $AX0.H, #0x02 - 03ad c100 cmpar $ACC0, $AX0.H - 03ae 0294 03ba jnz 0x03ba - 03b0 0080 035b lri $AR0, #0x035b - 03b2 00c1 0ce1 lr $AR1, @0x0ce1 - 03b4 0082 0d0c lri $AR2, #0x0d0c - 03b6 02bf 06c3 call 06c3_Unknown() - 03b8 029f 03cc jmp 0x03cc - 03ba 0080 0d0c lri $AR0, #0x0d0c - 03bc 00c1 0ce1 lr $AR1, @0x0ce1 - 03be 0083 035b lri $AR3, #0x035b - 03c0 02bf 06ab call 0x06ab - 03c2 029f 03cc jmp 0x03cc - } - else - { - 03c4 0080 0d0c lri $AR0, #0x0d0c - 03c6 00c1 0ce1 lr $AR1, @0x0ce1 - 03c8 1160 03cb bloopi #0x60, 0x03cb - 03ca 193f lrri $AC1.M, @$AR1 - 03cb 1b1f srri @$AR0, $AC1.M - } - 03cc 0082 0355 lri $AR2, #0x0355 - 03ce 8c00 clr15 - 03cf 8100 clr $ACC0 - 03d0 195c lrri $AC0.L, @$AR2 - 03d1 009b 0005 lri $AX1.H, #0x0005 - 03d3 0099 5555 lri $AX1.L, #0x5555 - 03d5 0080 0d08 lri $AR0, #0x0d08 - 03d7 1104 03da bloopi #0x04, 0x03da - 03d9 195f lrri $AC1.M, @$AR2 - 03da 1b1f srri @$AR0, $AC1.M - 03db 0081 0cc0 lri $AR1, #0x0cc0 - 03dd 0084 0d08 lri $IX0, #0x0d08 - 03df 0087 1000 lri $IX3, #0x1000 - 03e1 1112 03f2 bloopi #0x12, 0x03f2 - 03e3 4a00 addax $ACC0, $AX1.L - 03e4 1c1e mrr $AR0, $AC0.M - 03e5 0010 addarn $AR0, $IX0 - 03e6 8900 clr $ACC1 - 03e7 1fbc mrr $AC1.L, $AC0.L - 03e8 1577 lsr $ACC1, #-9 - 03e9 1512 lsl $ACC1, #18 - 03ea 1c7f mrr $AR3, $AC1.M - 03eb 001f addarn $AR3, $IX3 - 03ec 80c3 nx'ld : $AX0.L, $AX1.L, @$AR3 - 03ed 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 03ee 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 - 03ef 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 - 03f0 9500 mulac $AX0.L, $AX0.H, $ACC1 - 03f1 4f00 addp $ACC1 - 03f2 1b3f srri @$AR1, $AC1.M - 03f3 0004 dar $AR0 - 03f4 0006 dar $AR2 - 03f5 189f lrrd $AC1.M, @$AR0 - 03f6 1adf srrd @$AR2, $AC1.M - 03f7 189f lrrd $AC1.M, @$AR0 - 03f8 1adf srrd @$AR2, $AC1.M - 03f9 189f lrrd $AC1.M, @$AR0 - 03fa 1adf srrd @$AR2, $AC1.M - 03fb 189f lrrd $AC1.M, @$AR0 - 03fc 1adf srrd @$AR2, $AC1.M - 03fd 1adc srrd @$AR2, $AC0.L - 03fe 8d00 set15 - 03ff 0081 033d lri $AR1, #0x033d - 0401 0082 0240 lri $AR2, #0x0240 - 0403 00c3 0cd7 lr $AR3, @0x0cd7 - 0405 177f callr $AR3 - 0406 00f8 034d sr @0x034d, $AX0.L - 0408 0081 033f lri $AR1, #0x033f - 040a 0082 0ac0 lri $AR2, #0x0ac0 - 040c 00c3 0cd8 lr $AR3, @0x0cd8 - 040e 177f callr $AR3 - 040f 00f8 0351 sr @0x0351, $AX0.L - 0411 0081 0341 lri $AR1, #0x0341 - 0413 0082 0264 lri $AR2, #0x0264 - 0415 00c3 0cd9 lr $AR3, @0x0cd9 - 0417 177f callr $AR3 - 0418 00f8 034e sr @0x034e, $AX0.L - 041a 0081 0343 lri $AR1, #0x0343 - 041c 0082 0ae4 lri $AR2, #0x0ae4 - 041e 00c3 0cda lr $AR3, @0x0cda - 0420 177f callr $AR3 - 0421 00f8 0352 sr @0x0352, $AX0.L - 0423 0081 0345 lri $AR1, #0x0345 - 0425 0082 0288 lri $AR2, #0x0288 - 0427 00c3 0cdb lr $AR3, @0x0cdb - 0429 177f callr $AR3 - 042a 00f8 034f sr @0x034f, $AX0.L - 042c 0081 0347 lri $AR1, #0x0347 - 042e 0082 0b08 lri $AR2, #0x0b08 - 0430 00c3 0cdc lr $AR3, @0x0cdc - 0432 177f callr $AR3 - 0433 00f8 0353 sr @0x0353, $AX0.L - 0435 0081 0349 lri $AR1, #0x0349 - 0437 0082 02ac lri $AR2, #0x02ac - 0439 00c3 0cdd lr $AR3, @0x0cdd - 043b 177f callr $AR3 - 043c 00f8 0350 sr @0x0350, $AX0.L - 043e 0081 034b lri $AR1, #0x034b - 0440 0082 0b2c lri $AR2, #0x0b2c - 0442 00c3 0cde lr $AR3, @0x0cde - 0444 177f callr $AR3 - 0445 00f8 0354 sr @0x0354, $AX0.L - } - 0447 00de 02f2 lr $AC0.M, @0x02f2 - 0449 b100 tst $ACC0 - 044a 0295 046a jz 0x046a - 044c 00de 02f5 lr $AC0.M, @0x02f5 - 044e 00df 02f7 lr $AC1.M, @0x02f7 - 0450 8200 cmp - 0451 0293 0456 jle 0x0456 - 0453 7800 decm $AC0.M - 0454 029f 0459 jmp 0x0459 - 0456 0295 0459 jz 0x0459 - 0458 7400 incm $AC0.M - 0459 00fe 02f5 sr @0x02f5, $AC0.M - 045b 00de 02f6 lr $AC0.M, @0x02f6 - 045d 00df 02f8 lr $AC1.M, @0x02f8 - 045f 8200 cmp - 0460 0293 0465 jle 0x0465 - 0462 7800 decm $AC0.M - 0463 029f 0468 jmp 0x0468 - 0465 0295 0468 jz 0x0468 - 0467 7400 incm $AC0.M - - 0468 00fe 02f6 sr @0x02f6, $AC0.M - 046a 8e00 set16 -} - - 046b 8100 clr $ACC0 - 046c 00de 02f2 lr $AC0.M, @0x02f2 - 046e b100 tst $ACC0 - 046f 0295 047f jz 0x047f - 0471 00de 02f3 lr $AC0.M, @0x02f3 - 0473 00dc 02f4 lr $AC0.L, @0x02f4 - 0475 2ece srs @DSMAH, $AC0.M - 0476 2ccf srs @DSMAL, $AC0.L - 0477 16cd 0ca0 si @DSPA, #0x0ca0 - 0479 16c9 0001 si @DSCR, #0x0001 - 047b 16cb 0040 si @DSBL, #0x0040 - 047d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x0CA0 to mem32[0x02F3], 64 bytes - - 047f 8100 clr $ACC0 - 0480 8900 clr $ACC1 - 0481 00de 02d2 lr $AC0.M, @0x02d2 - 0483 00df 02d3 lr $AC1.M, @0x02d3 - 0485 2ece srs @DSMAH, $AC0.M - 0486 2fcf srs @DSMAL, $AC1.M - 0487 16cd 02d0 si @DSPA, #0x02d0 - 0489 16c9 0001 si @DSCR, #0x0001 - 048b 16cb 0140 si @DSBL, #0x0140 - 048d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x02D0 to mem32[0x02D2], 0x140 bytes - 048f 8100 clr $ACC0 - 0490 00de 02d0 lr $AC0.M, @0x02d0 - 0492 00dc 02d1 lr $AC0.L, @0x02d1 - 0494 b100 tst $ACC0 - 0495 0294 0283 jnz 0x0283 // if (mem32[0x02D0] != 0) do the whole thing again; - - 0497 00c0 0cd2 lr $AR0, @0x0cd2 // restore AR0; - 0499 029f 006f jmp 006f_MailHandler() -} - - -void 049b_Cmd_5() { - 049b 8e00 set16 - 049c 00c4 0ce6 lr $IX0, @0x0ce6 - 049e 1905 lrri $IX1, @$AR0 - 049f 00e5 0ce6 sr @0x0ce6, $IX1 - 04a1 0086 0400 lri $IX2, #0x0400 - 04a3 8100 clr $ACC0 - 04a4 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 04a5 191c lrri $AC0.L, @$AR0 - 04a6 2ece srs @DSMAH, $AC0.M - 04a7 2ccf srs @DSMAL, $AC0.L - 04a8 1fc6 mrr $AC0.M, $IX2 - 04a9 2ecd srs @DSPA, $AC0.M - 04aa 16c9 0001 si @DSCR, #0x0001 - 04ac 16cb 0480 si @DSBL, #0x0480 - 04ae 02bf 0084 call 0084_WaitForDMACompletion() - 04b0 02bf 04e6 call 0x04e6 - 04b2 029f 006f jmp 006f_MailHandler() -} - -void 04b4_Cmd_6() { - 04b4 8e00 set16 - 04b5 00c4 0ce7 lr $IX0, @0x0ce7 - 04b7 1905 lrri $IX1, @$AR0 - 04b8 00e5 0ce7 sr @0x0ce7, $IX1 - 04ba 0086 0640 lri $IX2, #0x0640 - 04bc 8100 clr $ACC0 - 04bd 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 04be 191c lrri $AC0.L, @$AR0 - 04bf 2ece srs @DSMAH, $AC0.M - 04c0 2ccf srs @DSMAL, $AC0.L - 04c1 1fc6 mrr $AC0.M, $IX2 - 04c2 2ecd srs @DSPA, $AC0.M - 04c3 16c9 0001 si @DSCR, #0x0001 - 04c5 16cb 0480 si @DSBL, #0x0480 - 04c7 02bf 0084 call 0084_WaitForDMACompletion() - 04c9 02bf 04e6 call 0x04e6 - 04cb 029f 006f jmp 006f_MailHandler() -} - -// Command #7 - Set output buffer address -// AXList data: -// - command (2) -// - something (2) -// - Left/Right(?) output buffer address (4) -// - Right/Left(?) output buffer address (4) -// -void 04cd_Cmd_7() { - 04cd 8e00 set16 - 04ce 00c4 0ce8 lr $IX0, @0x0ce8 - 04d0 1905 lrri $IX1, @$AR0 - 04d1 00e5 0ce8 sr @0x0ce8, $IX1 // mem16[0x0CE8] = mem16[0x0C01]; - 04d3 0086 0880 lri $IX2, #0x0880 - 04d5 8100 clr $ACC0 - 04d6 8970 clr'l $ACC1 : $AC0.M, @$AR0 - 04d7 191c lrri $AC0.L, @$AR0 - 04d8 2ece srs @DSMAH, $AC0.M - 04d9 2ccf srs @DSMAL, $AC0.L - 04da 1fc6 mrr $AC0.M, $IX2 - 04db 2ecd srs @DSPA, $AC0.M - 04dc 16c9 0001 si @DSCR, #0x0001 - 04de 16cb 0480 si @DSBL, #0x0480 // dma from 0x0880 to mem32[0x0C02], 1152 bytes. - 04e0 02bf 0084 call 0084_WaitForDMACompletion() - 04e2 02bf 04e6 call 0x04e6 - 04e4 029f 006f jmp 006f_MailHandler() -} - -void 04e6_Unk() { - 04e6 8b00 m0 - 04e7 8100 clr $ACC0 - 04e8 1fc4 mrr $AC0.M, $IX0 - 04e9 1fe5 mrr $AC1.M, $IX1 - 04ea 5d00 sub $ACC1, $ACC0 - 04eb 009a 02ab lri $AX0.H, #0x02ab - 04ed 009b 02aa lri $AX1.H, #0x02aa - 04ef 0081 0d08 lri $AR1, #0x0d08 - 04f1 d000 mulc $AC1.M, $AX0.H - 04f2 d400 mulcac $AC1.M, $AX0.H, $ACC0 - 04f3 111f 04f7 bloopi #0x1f, 0x04f7 - 04f5 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 04f6 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 04f7 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 04f8 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 04f9 4e31 addp's $ACC0 : @$AR1, $AC0.M - 04fa 1b25 srri @$AR1, $IX1 - 04fb 8e00 set16 - 04fc 191f lrri $AC1.M, @$AR0 - 04fd 191d lrri $AC1.L, @$AR0 - 04fe 2fce srs @DSMAH, $AC1.M - 04ff 2dcf srs @DSMAL, $AC1.L - 0500 8900 clr $ACC1 - 0501 1fa6 mrr $AC1.L, $IX2 - 0502 2dcd srs @DSPA, $AC1.L - 0503 16c9 0000 si @DSCR, #0x0000 - 0505 16cb 0480 si @DSBL, #0x0480 - 0507 02bf 0084 call 0084_WaitForDMACompletion() - 0509 00e0 0cd2 sr @0x0cd2, $AR0 - 050b 8f00 set40 - 050c 8d00 set15 - 050d 8a00 m2 - 050e 0080 0d08 lri $AR0, #0x0d08 - 0510 0081 0000 lri $AR1, #0x0000 - 0512 1c41 mrr $AR2, $AR1 - 0513 1c66 mrr $AR3, $IX2 - 0514 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0515 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0516 a000 mulx $AX0.L, $AX1.L - 0517 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0518 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 0519 4e00 addp $ACC0 - 051a 4800 addax $ACC0, $AX0.L - 051b 112f 052a bloopi #0x2f, 0x052a - 051d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 051e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 051f a000 mulx $AX0.L, $AX1.L - 0520 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0521 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0522 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0523 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0524 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0525 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0526 a000 mulx $AX0.L, $AX1.L - 0527 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0528 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 0529 4e3a addp's $ACC0 : @$AR2, $AC1.M - 052a 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 052b 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 052c 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 052d a000 mulx $AX0.L, $AX1.L - 052e af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 052f 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0530 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0531 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0532 1b5f srri @$AR2, $AC1.M - 0533 1b5d srri @$AR2, $AC1.L - 0534 0080 0d08 lri $AR0, #0x0d08 - 0536 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0537 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0538 a000 mulx $AX0.L, $AX1.L - 0539 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 053a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 053b 4e00 addp $ACC0 - 053c 4800 addax $ACC0, $AX0.L - 053d 112f 054c bloopi #0x2f, 0x054c - 053f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0540 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0541 a000 mulx $AX0.L, $AX1.L - 0542 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0543 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0544 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0545 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0546 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0547 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0548 a000 mulx $AX0.L, $AX1.L - 0549 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 054a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 054b 4e3a addp's $ACC0 : @$AR2, $AC1.M - 054c 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 054d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 054e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 054f a000 mulx $AX0.L, $AX1.L - 0550 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0551 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0552 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0553 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0554 1b5f srri @$AR2, $AC1.M - 0555 1b5d srri @$AR2, $AC1.L - 0556 0080 0d08 lri $AR0, #0x0d08 - 0558 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0559 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 055a a000 mulx $AX0.L, $AX1.L - 055b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 055c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 055d 4e00 addp $ACC0 - 055e 4800 addax $ACC0, $AX0.L - 055f 112f 056e bloopi #0x2f, 0x056e - 0561 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0562 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0563 a000 mulx $AX0.L, $AX1.L - 0564 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0565 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0566 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0567 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0568 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0569 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 056a a000 mulx $AX0.L, $AX1.L - 056b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 056c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 056d 4e3a addp's $ACC0 : @$AR2, $AC1.M - 056e 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 056f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0570 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0571 a000 mulx $AX0.L, $AX1.L - 0572 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0573 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0574 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0575 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0576 1b5f srri @$AR2, $AC1.M - 0577 1b5d srri @$AR2, $AC1.L - 0578 00c0 0cd2 lr $AR0, @0x0cd2 - 057a 02df ret -} - -void 057b_Cmd_A() { - 057b 8d00 set15 - 057c 8f00 set40 - 057d 8a00 m2 - 057e 8900 clr $ACC1 - 057f 8168 clr'l $ACC0 : $AC1.L, @$AR0 - 0580 0098 0000 lri $AX0.L, #0x0000 - 0582 0099 0001 lri $AX1.L, #0x0001 - 0584 0081 0000 lri $AR1, #0x0000 - 0586 193e lrri $AC0.M, @$AR1 - 0587 193c lrri $AC0.L, @$AR1 - 0588 1160 0593 bloopi #0x60, 0x0593 - 058a a100 tstaxl $ACC0 - 058b 8271 cmp'l : $AC0.M, @$AR1 - 058c 0277 ifc - 058d 1f19 mrr $AX0.L, $AX1.L - 058e 193c lrri $AC0.L, @$AR1 - 058f a100 tstaxl $ACC0 - 0590 8271 cmp'l : $AC0.M, @$AR1 - 0591 0277 ifc - 0592 1f19 mrr $AX0.L, $AX1.L - 0593 193c lrri $AC0.L, @$AR1 - 0594 1fd8 mrr $AC0.M, $AX0.L - 0595 b100 tst $ACC0 - 0596 0294 05c0 jnz 0x05c0 - 0598 00de 0ce4 lr $AC0.M, @0x0ce4 - 059a b100 tst $ACC0 - 059b 0294 05a2 jnz 0x05a2 - 059d 191c lrri $AC0.L, @$AR0 - 059e 191c lrri $AC0.L, @$AR0 - 059f 191c lrri $AC0.L, @$AR0 - 05a0 029f 006f jmp 006f_MailHandler() - 05a2 8b00 m0 - 05a3 7a00 dec $ACC0 - 05a4 00fe 0ce4 sr @0x0ce4, $AC0.M - 05a6 8400 clrp - 05a7 0099 00c0 lri $AX1.L, #0x00c0 - 05a9 1f1e mrr $AX0.L, $AC0.M - 05aa a000 mulx $AX0.L, $AX1.L - 05ab 191e lrri $AC0.M, @$AR0 - 05ac 191e lrri $AC0.M, @$AR0 - 05ad 191c lrri $AC0.L, @$AR0 - 05ae 00e0 0cd2 sr @0x0cd2, $AR0 - 05b0 009a 0000 lri $AX0.H, #0x0000 - 05b2 0098 0840 lri $AX0.L, #0x0840 - 05b4 4e00 addp $ACC0 - 05b5 4800 addax $ACC0, $AX0.L - 05b6 2ece srs @DSMAH, $AC0.M - 05b7 2ccf srs @DSMAL, $AC0.L - 05b8 16cd 0d08 si @DSPA, #0x0d08 - 05ba 16c9 0000 si @DSCR, #0x0000 - 05bc 16cb 00c0 si @DSBL, #0x00c0 - 05be 029f 05d6 jmp 0x05d6 - 05c0 8b00 m0 - 05c1 00d8 0ce4 lr $AX0.L, @0x0ce4 - 05c3 0099 00c0 lri $AX1.L, #0x00c0 - 05c5 a000 mulx $AX0.L, $AX1.L - 05c6 191e lrri $AC0.M, @$AR0 - 05c7 00fe 0ce4 sr @0x0ce4, $AC0.M - 05c9 191e lrri $AC0.M, @$AR0 - 05ca 191c lrri $AC0.L, @$AR0 - 05cb 00e0 0cd2 sr @0x0cd2, $AR0 - 05cd 4e00 addp $ACC0 - 05ce 2ece srs @DSMAH, $AC0.M - 05cf 2ccf srs @DSMAL, $AC0.L - 05d0 16cd 0d08 si @DSPA, #0x0d08 - 05d2 16c9 0000 si @DSCR, #0x0000 - 05d4 16cb 00c0 si @DSBL, #0x00c0 - 05d6 02bf 0084 call 0084_WaitForDMACompletion() - 05d8 8a48 m2'l : $AX1.L, @$AR0 - 05d9 0083 0d08 lri $AR3, #0x0d08 - 05db 0080 0000 lri $AR0, #0x0000 - 05dd 0081 0000 lri $AR1, #0x0000 - 05df 1979 lrri $AX1.L, @$AR3 - 05e0 193a lrri $AX0.H, @$AR1 - 05e1 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 - 05e2 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 - 05e3 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 - 05e4 b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 - 05e5 9100 asr16 $ACC0 - 05e6 1130 05ef bloopi #0x30, 0x05ef - 05e8 a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L - 05e9 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 - 05ea b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L - 05eb 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 05ec a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L - 05ed f051 lsl16'l $ACC0 : $AX0.H, @$AR1 - 05ee b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L - 05ef 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 05f0 0083 0d08 lri $AR3, #0x0d08 - 05f2 0080 00c0 lri $AR0, #0x00c0 - 05f4 0081 00c0 lri $AR1, #0x00c0 - 05f6 1979 lrri $AX1.L, @$AR3 - 05f7 193a lrri $AX0.H, @$AR1 - 05f8 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 - 05f9 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 - 05fa f051 lsl16'l $ACC0 : $AX0.H, @$AR1 - 05fb b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 - 05fc 9100 asr16 $ACC0 - 05fd 1130 0606 bloopi #0x30, 0x0606 - 05ff a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L - 0600 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 - 0601 b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L - 0602 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0603 a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L - 0604 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 - 0605 b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L - 0606 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 0607 00c0 0cd2 lr $AR0, @0x0cd2 - 0609 029f 006f jmp 006f_MailHandler() -} - -void 060b_Cmd_B() { - 060b 8e48 set16'l : $AX1.L, @$AR0 - 060c 8b70 m0'l : $AC0.M, @$AR0 - 060d 8960 clr'l $ACC1 : $AC0.L, @$AR0 - 060e 00e0 0cd2 sr @0x0cd2, $AR0 - 0610 2ece srs @DSMAH, $AC0.M - 0611 2ccf srs @DSMAL, $AC0.L - 0612 16cd 0180 si @DSPA, #0x0180 - 0614 16c9 0001 si @DSCR, #0x0001 - 0616 16cb 0180 si @DSBL, #0x0180 - 0618 8100 clr $ACC0 - 0619 00de 0ce5 lr $AC0.M, @0x0ce5 - 061b 1ff9 mrr $AC1.M, $AX1.L - 061c 5d00 sub $ACC1, $ACC0 - 061d 00f9 0ce5 sr @0x0ce5, $AX1.L - 061f 009a 02ab lri $AX0.H, #0x02ab - 0621 009b 02aa lri $AX1.H, #0x02aa - 0623 0081 0d08 lri $AR1, #0x0d08 - 0625 d000 mulc $AC1.M, $AX0.H - 0626 d400 mulcac $AC1.M, $AX0.H, $ACC0 - 0627 111f 062b bloopi #0x1f, 0x062b - 0629 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 062a d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 062b d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 062c dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 062d 4e31 addp's $ACC0 : @$AR1, $AC0.M - 062e 1b39 srri @$AR1, $AX1.L - 062f 02bf 0084 call 0084_WaitForDMACompletion() - 0631 8f00 set40 - 0632 8d00 set15 - 0633 8a00 m2 - 0634 0080 0d08 lri $AR0, #0x0d08 - 0636 0081 0400 lri $AR1, #0x0400 - 0638 0083 0000 lri $AR3, #0x0000 - 063a 0082 00c0 lri $AR2, #0x00c0 - 063c 1918 lrri $AX0.L, @$AR0 - 063d 195b lrri $AX1.H, @$AR2 - 063e 1959 lrri $AX1.L, @$AR2 - 063f a000 mulx $AX0.L, $AX1.L - 0640 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0641 9100 asr16 $ACC0 - 0642 4e5b addp'l $ACC0 : $AX1.H, @$AR3 - 0643 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 - 0644 115f 064f bloopi #0x5f, 0x064f - 0646 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 0647 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0648 9140 asr16'l $ACC0 : $AX0.L, @$AR0 - 0649 4e5a addp'l $ACC0 : $AX1.H, @$AR2 - 064a f04a lsl16'l $ACC0 : $AX1.L, @$AR2 - 064b a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 064c ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 064d 9100 asr16 $ACC0 - 064e 4e5b addp'l $ACC0 : $AX1.H, @$AR3 - 064f f04b lsl16'l $ACC0 : $AX1.L, @$AR3 - 0650 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 0651 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0652 9100 asr16 $ACC0 - 0653 4e00 addp $ACC0 - 0654 f000 lsl16 $ACC0 - 0655 1b3e srri @$AR1, $AC0.M - 0656 8e00 set16 - 0657 00c0 0cd2 lr $AR0, @0x0cd2 - 0659 191e lrri $AC0.M, @$AR0 - 065a 191c lrri $AC0.L, @$AR0 - 065b 2ece srs @DSMAH, $AC0.M - 065c 2ccf srs @DSMAL, $AC0.L - 065d 16cd 0400 si @DSPA, #0x0400 - 065f 16c9 0001 si @DSCR, #0x0001 - 0661 16cb 0180 si @DSBL, #0x0180 - 0663 02bf 0084 call 0084_WaitForDMACompletion() - 0665 16fc dcd1 si @DMBH, #0xdcd1 <--------------!!! - 0667 16fd 0004 si @DMBL, #0x0004 <--------------!!! - 0669 16fb 0001 si @DIRQ, #0x0001 <--------------!!! - 066b 26fc lrs $AC0.M, @DMBH - 066c 02a0 8000 andf $AC0.M, #0x8000 - 066e 029c 066b jlnz 0x066b - 0670 029f 006f jmp 006f_MailHandler() -} - -// Command 0xE - AXList end -void 0672_Cmd_E() { - 0672 16fc dcd1 si @DMBH, #0xdcd1 - 0674 16fd 0002 si @DMBL, #0x0002 - 0676 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10002 and trigger an IRQ - 0678 029f 0f9b jmp 0x0f9b - 067a 029f 004c jmp 0x004c -} - -void 067c_Cmd_D() { - 067c 8c00 clr15 - 067d 8a00 m2 - 067e 8f00 set40 - 067f 0081 0ac0 lri $AR1, #0x0ac0 - 0681 0082 0240 lri $AR2, #0x0240 - 0683 1fa1 mrr $AC1.L, $AR1 - 0684 1112 0689 bloopi #0x12, 0x0689 - 0686 195e lrri $AC0.M, @$AR2 - 0687 195c lrri $AC0.L, @$AR2 - 0688 f000 lsl16 $ACC0 - 0689 1b3e srri @$AR1, $AC0.M - 068a 191e lrri $AC0.M, @$AR0 - 068b 191c lrri $AC0.L, @$AR0 - 068c 2ece srs @DSMAH, $AC0.M - 068d 2ccf srs @DSMAL, $AC0.L - 068e 2dcd srs @DSPA, $AC1.L - 068f 1103 06a2 bloopi #0x03, 0x06a2 - 0691 16c9 0001 si @DSCR, #0x0001 - 0693 16cb 0024 si @DSBL, #0x0024 - 0695 1fa1 mrr $AC1.L, $AR1 - 0696 1112 069b bloopi #0x12, 0x069b - 0698 195e lrri $AC0.M, @$AR2 - 0699 195c lrri $AC0.L, @$AR2 - 069a f000 lsl16 $ACC0 - 069b 1b3e srri @$AR1, $AC0.M - 069c 02bf 0084 call 0084_WaitForDMACompletion() - 069e 191e lrri $AC0.M, @$AR0 - 069f 191c lrri $AC0.L, @$AR0 - 06a0 2ece srs @DSMAH, $AC0.M - 06a1 2ccf srs @DSMAL, $AC0.L - 06a2 2dcd srs @DSPA, $AC1.L - 06a3 16c9 0001 si @DSCR, #0x0001 - 06a5 16cb 0024 si @DSBL, #0x0024 - 06a7 02bf 0084 call 0084_WaitForDMACompletion() - 06a9 029f 006f jmp 006f_MailHandler() -} - -void 06ab_unknown() { - 06ab 0087 ffff lri $IX3, #0xffff - 06ad 1c83 mrr $IX0, $AR3 - 06ae 197e lrri $AC0.M, @$AR3 - 06af 80e1 nx'ld : $AX0.H, $AX1.L, @$AR1 - 06b0 b04f mulx'ln $AX0.H, $AX1.L : $AX1.L, @$AR3 - 06b1 1f5e mrr $AX0.H, $AC0.M - 06b2 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 - 06b3 b64f mulxmv'ln $AX0.H, $AX1.L, $ACC0 : $AX1.L, @$AR3 - 06b4 1f5e mrr $AX0.H, $AC0.M - 06b5 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 - 06b6 112f 06bd bloopi #0x2f, 0x06bd - 06b8 b79a mulxmv'slm $AX0.H, $AX1.L, $ACC1 : $AC0.M, $AX1.L - 06b9 1f5f mrr $AX0.H, $AC1.M - 06ba e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 - 06bb b69b mulxmv'slm $AX0.H, $AX1.L, $ACC0 : $AC1.M, $AX1.L - 06bc 1f5e mrr $AX0.H, $AC0.M - 06bd e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 - 06be 6f30 movp's $ACC1 : @$AR0, $AC0.M - 06bf 1b1f srri @$AR0, $AC1.M - 06c0 1c64 mrr $AR3, $IX0 - 06c1 1b7f srri @$AR3, $AC1.M - 06c2 02df ret -} - -void 06c3_Unknown() { - 06c3 8c00 clr15 - 06c4 8b00 m0 - 06c5 1ca0 mrr $IX1, $AR0 - 06c6 0083 0370 lri $AR3, #0x0370 - 06c8 191a lrri $AX0.H, @$AR0 - 06c9 1918 lrri $AX0.L, @$AR0 - 06ca 1b7a srri @$AR3, $AX0.H - 06cb 1b78 srri @$AR3, $AX0.L - 06cc 1919 lrri $AX1.L, @$AR0 - 06cd 191b lrri $AX1.H, @$AR0 - 06ce 0083 0d03 lri $AR3, #0x0d03 - 06d0 1105 06d3 bloopi #0x05, 0x06d3 - 06d2 191a lrri $AX0.H, @$AR0 - 06d3 1b7a srri @$AR3, $AX0.H - 06d4 0080 0d03 lri $AR0, #0x0d03 - 06d6 0088 0004 lri $WR0, #0x0004 - 06d8 0083 0370 lri $AR3, #0x0370 - 06da 008b 0001 lri $WR3, #0x0001 - 06dc 0087 0000 lri $IX3, #0x0000 - 06de 193f lrri $AC1.M, @$AR1 - 06df 191a lrri $AX0.H, @$AR0 - 06e0 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06e1 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06e2 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M - 06e3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 06e4 e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 - 06e5 6e50 movp'l $ACC0 : $AX0.H, @$AR0 - 06e6 1482 asl $ACC0, #2 - 06e7 fc00 clrl $AC1.L - 06e8 1f7e mrr $AX1.H, $AC0.M - 06e9 1b5e srri @$AR2, $AC0.M - 06ea 112f 06ff bloopi #0x2f, 0x06ff - 06ec d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06ed f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06ee f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M - 06ef e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 06f0 e279 maddx'l $AX0.H, $AX1.L : $AC1.M, @$AR1 - 06f1 6e50 movp'l $ACC0 : $AX0.H, @$AR0 - 06f2 1482 asl $ACC0, #2 - 06f3 fc00 clrl $AC1.L - 06f4 1f3e mrr $AX1.L, $AC0.M - 06f5 1b5e srri @$AR2, $AC0.M - 06f6 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06f7 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 06f8 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M - 06f9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 06fa e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 - 06fb 6e50 movp'l $ACC0 : $AX0.H, @$AR0 - 06fc 1482 asl $ACC0, #2 - 06fd fc00 clrl $AC1.L - 06fe 1f7e mrr $AX1.H, $AC0.M - 06ff 1b5e srri @$AR2, $AC0.M - 0700 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0701 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0702 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M - 0703 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0704 e200 maddx $AX0.H, $AX1.L - 0705 6e00 movp $ACC0 - 0706 1482 asl $ACC0, #2 - 0707 fc00 clrl $AC1.L - 0708 1f3e mrr $AX1.L, $AC0.M - 0709 1b5e srri @$AR2, $AC0.M - 070a 0088 ffff lri $WR0, #0xffff - 070c 008b ffff lri $WR3, #0xffff - 070e 1c05 mrr $AR0, $IX1 - 070f 0083 0370 lri $AR3, #0x0370 - 0711 197a lrri $AX0.H, @$AR3 - 0712 1978 lrri $AX0.L, @$AR3 - 0713 1b1a srri @$AR0, $AX0.H - 0714 1b18 srri @$AR0, $AX0.L - 0715 1b19 srri @$AR0, $AX1.L - 0716 1b1b srri @$AR0, $AX1.H - 0717 8d00 set15 - 0718 8a00 m2 - 0719 02df ret -} - -// Sample rate converter #0 - None -// - 071a 02bf 07e6 call 0x07e6_SetupAccelerator() - 071c 8c00 clr15 - 071d 8a00 m2 - 071e 8f00 set40 - // Read ratio - 071f 195b lrri $AX1.H, @$AR2 - 0720 1959 lrri $AX1.L, @$AR2 - 0721 8100 clr $ACC0 - // Read cur_addr fractional part - 0722 195c lrri $AC0.L, @$AR2 - 0723 0080 0d08 lri $AR0, #0x0d08 - 0725 0088 0003 lri $WR0, #0x0003 - // Read the last samples, copy them to 0x0D08 - 0727 195f lrri $AC1.M, @$AR2 - 0728 1b1f srri @$AR0, $AC1.M - 0729 195f lrri $AC1.M, @$AR2 - 072a 1b1f srri @$AR0, $AC1.M - 072b 195f lrri $AC1.M, @$AR2 - 072c 1b1f srri @$AR0, $AC1.M - 072d 195f lrri $AC1.M, @$AR2 - 072e 1b1f srri @$AR0, $AC1.M - - 072f 0081 0c60 lri $AR1, #0x0c60 - 0731 0082 ffdd lri $AR2, #0xffdd - 0733 00c7 0ce0 lr $IX3, @0x0ce0 - 0735 4a00 addax $ACC0, $AX1.L - 0736 1160 074a bloopi #0x60, 0x074a - 0738 8912 clr'mv $ACC1 : $AX0.L, $AC0.M - 0739 1fbc mrr $AC1.L, $AC0.L - 073a 1577 lsr $ACC1, #-9 - 073b 1512 lsl $ACC1, #18 - 073c 1c7f mrr $AR3, $AC1.M - 073d 001f addarn $AR3, $IX3 - 073e 0078 0743 bloop $AX0.L, 0x0743 - 0740 185a lrr $AX0.H, @$AR2 - 0741 1b1a srri @$AR0, $AX0.H - 0742 5000 subr $ACC0, $AX0.L - 0743 1f1d mrr $AX0.L, $AC1.L - 0744 4ac3 addax'ld $ACC0, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0745 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0746 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 - 0747 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 - 0748 9500 mulac $AX0.L, $AX0.H, $ACC1 - 0749 4f00 addp $ACC1 - 074a 1b3f srri @$AR1, $AC1.M - 074b 5a00 subax $ACC0, $AX1.L - 074c 0004 dar $AR0 - 074d 0082 0329 lri $AR2, #0x0329 - 074f 189f lrrd $AC1.M, @$AR0 - 0750 1adf srrd @$AR2, $AC1.M - 0751 189f lrrd $AC1.M, @$AR0 - 0752 1adf srrd @$AR2, $AC1.M - 0753 189f lrrd $AC1.M, @$AR0 - 0754 1adf srrd @$AR2, $AC1.M - 0755 189f lrrd $AC1.M, @$AR0 - 0756 1adf srrd @$AR2, $AC1.M - 0757 0088 ffff lri $WR0, #0xffff - 0759 1adc srrd @$AR2, $AC0.L - 075a 0082 0322 lri $AR2, #0x0322 - 075c 27dc lrs $AC1.M, @yn2 - 075d 1adf srrd @$AR2, $AC1.M - 075e 27db lrs $AC1.M, @yn1 - 075f 1adf srrd @$AR2, $AC1.M - 0760 27da lrs $AC1.M, @pred_scale - 0761 1adf srrd @$AR2, $AC1.M - 0762 0082 030e lri $AR2, #0x030e - 0764 27d9 lrs $AC1.M, @ACCAL - 0765 1adf srrd @$AR2, $AC1.M - 0766 27d8 lrs $AC1.M, @ACCAH - 0767 1adf srrd @$AR2, $AC1.M - 0768 8e00 set16 - 0769 8b00 m0 - 076a 02df ret - -// Sample rate converter #1 - ? -// - 076b 02bf 07e6 call 0x07e6_SetupAccelerator() - 076d 8d00 set15 - 076e 8b00 m0 - 076f 8f00 set40 - 0770 195b lrri $AX1.H, @$AR2 - 0771 1945 lrri $IX1, @$AR2 - 0772 8100 clr $ACC0 - 0773 195c lrri $AC0.L, @$AR2 - 0774 0080 0d08 lri $AR0, #0x0d08 - 0776 0088 0003 lri $WR0, #0x0003 - 0778 0084 0003 lri $IX0, #0x0003 - 077a 195f lrri $AC1.M, @$AR2 - 077b 1b1f srri @$AR0, $AC1.M - 077c 195f lrri $AC1.M, @$AR2 - 077d 1b1f srri @$AR0, $AC1.M - 077e 195f lrri $AC1.M, @$AR2 - 077f 1b1f srri @$AR0, $AC1.M - 0780 195f lrri $AC1.M, @$AR2 - 0781 1b1f srri @$AR0, $AC1.M - 0782 0081 0c60 lri $AR1, #0x0c60 - 0784 0082 ffdd lri $AR2, #0xffdd - 0786 1f25 mrr $AX1.L, $IX1 - 0787 4a00 addax $ACC0, $AX1.L - 0788 1160 079f bloopi #0x60, 0x079f - 078a 8912 clr'mv $ACC1 : $AX0.L, $AC0.M - 078b 0078 0790 bloop $AX0.L, 0x0790 - 078d 185a lrr $AX0.H, @$AR2 - 078e 1b1a srri @$AR0, $AX0.H - 078f 5000 subr $ACC0, $AX0.L - 0790 1f1f mrr $AX0.L, $AC1.M - 0791 7c00 neg $ACC0 - 0792 b114 tst'mv $ACC0 : $AX1.L, $AC0.L - 0793 0294 0799 jnz 0x0799 - 0795 191f lrri $AC1.M, @$AR0 - 0796 0010 addarn $AR0, $IX0 - 0797 029f 079e jmp 0x079e - 0799 7c50 neg'l $ACC0 : $AX0.H, @$AR0 - 079a b014 mulx'mv $AX0.H, $AX1.L : $AX1.L, $AC0.L - 079b 199a lrrn $AX0.H, @$AR0 - 079c b700 mulxmv $AX0.H, $AX1.L, $ACC1 - 079d 4f00 addp $ACC1 - 079e 1f25 mrr $AX1.L, $IX1 - 079f 4a39 addax's $ACC0, $AX1.L : @$AR1, $AC1.M - 07a0 5a00 subax $ACC0, $AX1.L - 07a1 0004 dar $AR0 - 07a2 0082 0329 lri $AR2, #0x0329 - 07a4 189f lrrd $AC1.M, @$AR0 - 07a5 1adf srrd @$AR2, $AC1.M - 07a6 189f lrrd $AC1.M, @$AR0 - 07a7 1adf srrd @$AR2, $AC1.M - 07a8 189f lrrd $AC1.M, @$AR0 - 07a9 1adf srrd @$AR2, $AC1.M - 07aa 189f lrrd $AC1.M, @$AR0 - 07ab 1adf srrd @$AR2, $AC1.M - 07ac 0088 ffff lri $WR0, #0xffff - 07ae 1adc srrd @$AR2, $AC0.L - 07af 0082 0322 lri $AR2, #0x0322 - 07b1 27dc lrs $AC1.M, @yn2 - 07b2 1adf srrd @$AR2, $AC1.M - 07b3 27db lrs $AC1.M, @yn1 - 07b4 1adf srrd @$AR2, $AC1.M - 07b5 27da lrs $AC1.M, @pred_scale - 07b6 1adf srrd @$AR2, $AC1.M - 07b7 0082 030e lri $AR2, #0x030e - 07b9 27d9 lrs $AC1.M, @ACCAL - 07ba 1adf srrd @$AR2, $AC1.M - 07bb 27d8 lrs $AC1.M, @ACCAH - 07bc 1adf srrd @$AR2, $AC1.M - 07bd 8e00 set16 - 07be 8c00 clr15 - 07bf 02df ret - -// Sample rate converter #2 - No sample rate conversion -// Just copies 96 bytes of data to the output buffer -// - 07c0 02bf 07e6 call 0x07e6_SetupAccelerator() - 07c2 0080 0c60 lri $AR0, #0x0c60 - 07c4 0082 ffdd lri $AR2, #0xffdd // 0xFFDD: ACDAT - 07c6 1160 07cb bloopi #0x60, 0x07cb - 07c8 1844 lrr $IX0, @$AR2 // Load a sample from accelerator - 07c9 1b04 srri @$AR0, $IX0 // and store it to 0x0C60+ - 07ca 0000 nop - 07cb 0000 nop - 07cc 0004 dar $AR0 - // Save the 4 last samples in the PB - 07cd 0082 0329 lri $AR2, #0x0329 - 07cf 189f lrrd $AC1.M, @$AR0 - 07d0 1adf srrd @$AR2, $AC1.M - 07d1 189f lrrd $AC1.M, @$AR0 - 07d2 1adf srrd @$AR2, $AC1.M - 07d3 189f lrrd $AC1.M, @$AR0 - 07d4 1adf srrd @$AR2, $AC1.M - 07d5 189f lrrd $AC1.M, @$AR0 - 07d6 1adf srrd @$AR2, $AC1.M - // Save the accelerator regs in the PB - 07d7 0082 0322 lri $AR2, #0x0322 - // YN1 and YN2 - 07d9 27dc lrs $AC1.M, @yn2 - 07da 1adf srrd @$AR2, $AC1.M - 07db 27db lrs $AC1.M, @yn1 - 07dc 1adf srrd @$AR2, $AC1.M - // Pred scale - 07dd 27da lrs $AC1.M, @pred_scale - 07de 1adf srrd @$AR2, $AC1.M - 07df 0082 030e lri $AR2, #0x030e - // Current address - 07e1 27d9 lrs $AC1.M, @ACCAL - 07e2 1adf srrd @$AR2, $AC1.M - 07e3 27d8 lrs $AC1.M, @ACCAH - 07e4 1adf srrd @$AR2, $AC1.M - 07e5 02df ret - -// Called by the three sample rate converters above. -// Sets up the accelerator so that it can be used to -// read the audio data. -// The accelerator area is set to be the same length -// as the sound data being played, so that looping -// will be handled by exception vector #5 (ACCOV). -// Parameters: None -// Return: AR0 = 0x0328 -// -07e6_SetupAccelerator() -{ - // Set the accelerator regs from the PB - 07e6 0082 0308 lri $AR2, #0x0308 - // Sample format - 07e8 195e lrri $AC0.M, @$AR2 - 07e9 2ed1 srs @SampleFormat, $AC0.M - // Start address - 07ea 195e lrri $AC0.M, @$AR2 - 07eb 2ed4 srs @ACSAH, $AC0.M - 07ec 195e lrri $AC0.M, @$AR2 - 07ed 2ed5 srs @ACSAL, $AC0.M - // End address - 07ee 195e lrri $AC0.M, @$AR2 - 07ef 2ed6 srs @ACEAH, $AC0.M - 07f0 195e lrri $AC0.M, @$AR2 - 07f1 2ed7 srs @ACEAL, $AC0.M - // Current address - 07f2 195e lrri $AC0.M, @$AR2 - 07f3 2ed8 srs @ACCAH, $AC0.M - 07f4 195e lrri $AC0.M, @$AR2 - 07f5 2ed9 srs @ACCAL, $AC0.M - // 16 coefs - 07f6 195e lrri $AC0.M, @$AR2 - 07f7 2ea0 srs @COEF_A1_0, $AC0.M - 07f8 195e lrri $AC0.M, @$AR2 - 07f9 2ea1 srs @COEF_A2_0, $AC0.M - 07fa 195e lrri $AC0.M, @$AR2 - 07fb 2ea2 srs @COEF_A1_1, $AC0.M - 07fc 195e lrri $AC0.M, @$AR2 - 07fd 2ea3 srs @COEF_A2_1, $AC0.M - 07fe 195e lrri $AC0.M, @$AR2 - 07ff 2ea4 srs @COEF_A1_2, $AC0.M - 0800 195e lrri $AC0.M, @$AR2 - 0801 2ea5 srs @COEF_A2_2, $AC0.M - 0802 195e lrri $AC0.M, @$AR2 - 0803 2ea6 srs @COEF_A1_3, $AC0.M - 0804 195e lrri $AC0.M, @$AR2 - 0805 2ea7 srs @COEF_A2_3, $AC0.M - 0806 195e lrri $AC0.M, @$AR2 - 0807 2ea8 srs @COEF_A1_4, $AC0.M - 0808 195e lrri $AC0.M, @$AR2 - 0809 2ea9 srs @COEF_A2_4, $AC0.M - 080a 195e lrri $AC0.M, @$AR2 - 080b 2eaa srs @COEF_A1_5, $AC0.M - 080c 195e lrri $AC0.M, @$AR2 - 080d 2eab srs @COEF_A2_5, $AC0.M - 080e 195e lrri $AC0.M, @$AR2 - 080f 2eac srs @COEF_A1_6, $AC0.M - 0810 195e lrri $AC0.M, @$AR2 - 0811 2ead srs @COEF_A2_6, $AC0.M - 0812 195e lrri $AC0.M, @$AR2 - 0813 2eae srs @COEF_A1_7, $AC0.M - 0814 195e lrri $AC0.M, @$AR2 - 0815 2eaf srs @COEF_A2_7, $AC0.M - // Gain - 0816 195e lrri $AC0.M, @$AR2 - 0817 2ede srs @GAIN, $AC0.M - // Pred scale - 0818 195e lrri $AC0.M, @$AR2 - 0819 2eda srs @pred_scale, $AC0.M - // YN1 and YN2 - 081a 195e lrri $AC0.M, @$AR2 - 081b 2edb srs @yn1, $AC0.M - 081c 195e lrri $AC0.M, @$AR2 - 081d 2edc srs @yn2, $AC0.M - 081e 02df ret -} - -// Volume_0_0 - 081f 02df ret - -// Volume_0_1 - 0820 00c0 0ce2 lr $AR0, @0x0ce2 - 0822 0081 02da lri $AR1, #0x02da - 0824 0082 0000 lri $AR2, #0x0000 - 0826 1c62 mrr $AR3, $AR2 - 0827 02bf 0bd1 call 0bd1_ApplyVolume1(mem16[0x0ce2], 0x02da, 0x0000, 0x0000) - 0829 00f8 02f9 sr @0x02f9, $AX0.L // uh? the last is saved in updates field? - 082b 02df ret - - 082c 00c0 0ce3 lr $AR0, @0x0ce3 - 082e 0081 02dc lri $AR1, #0x02dc - 0830 0082 00c0 lri $AR2, #0x00c0 - 0832 1c62 mrr $AR3, $AR2 - 0833 02bf 0bd1 call 0bd1_Unknown() - 0835 00f8 02fd sr @0x02fd, $AX0.L - 0837 02df ret - - 0838 00c0 0ce2 lr $AR0, @0x0ce2 - 083a 0081 02da lri $AR1, #0x02da - 083c 0082 0000 lri $AR2, #0x0000 - 083e 1c62 mrr $AR3, $AR2 - 083f 00c4 0ce3 lr $IX0, @0x0ce3 - 0841 0085 00c0 lri $IX1, #0x00c0 - 0843 02bf 0beb call 0x0beb - 0845 00f8 02f9 sr @0x02f9, $AX0.L - 0847 00fb 02fd sr @0x02fd, $AX1.H - 0849 02df ret - - 084a 00c0 0ce2 lr $AR0, @0x0ce2 - 084c 0081 02da lri $AR1, #0x02da - 084e 0082 0000 lri $AR2, #0x0000 - 0850 0083 0d08 lri $AR3, #0x0d08 - 0852 00c4 0ce3 lr $IX0, @0x0ce3 - 0854 0085 00c0 lri $IX1, #0x00c0 - 0856 02bf 0c51 call 0x0c51 - 0858 00f8 02f9 sr @0x02f9, $AX0.L - 085a 00fb 02fd sr @0x02fd, $AX1.H - 085c 02df ret - - 085d 00c0 0ce1 lr $AR0, @0x0ce1 - 085f 0081 02ea lri $AR1, #0x02ea - 0861 0082 0180 lri $AR2, #0x0180 - 0863 1c62 mrr $AR3, $AR2 - 0864 02bf 0bd1 call 0bd1_Unknown() - 0866 00f8 0301 sr @0x0301, $AX0.L - 0868 02df ret - - 0869 00c0 0ce1 lr $AR0, @0x0ce1 - 086b 0081 02ea lri $AR1, #0x02ea - 086d 0082 0180 lri $AR2, #0x0180 - 086f 1c62 mrr $AR3, $AR2 - 0870 02bf 0bd1 call 0bd1_Unknown() - 0872 00f8 0301 sr @0x0301, $AX0.L - 0874 029f 0820 jmp 0x0820 - 0876 00c0 0ce1 lr $AR0, @0x0ce1 - 0878 0081 02ea lri $AR1, #0x02ea - 087a 0082 0180 lri $AR2, #0x0180 - 087c 1c62 mrr $AR3, $AR2 - 087d 02bf 0bd1 call 0bd1_Unknown() - 087f 00f8 0301 sr @0x0301, $AX0.L - 0881 029f 082c jmp 0x082c - 0883 00c0 0ce1 lr $AR0, @0x0ce1 - 0885 0081 02ea lri $AR1, #0x02ea - 0887 0082 0180 lri $AR2, #0x0180 - 0889 1c62 mrr $AR3, $AR2 - 088a 02bf 0bd1 call 0bd1_Unknown() - 088c 00f8 0301 sr @0x0301, $AX0.L - 088e 029f 0838 jmp 0x0838 - 0890 00c0 0ce1 lr $AR0, @0x0ce1 - 0892 0081 02ea lri $AR1, #0x02ea - 0894 0082 0180 lri $AR2, #0x0180 - 0896 1c62 mrr $AR3, $AR2 - 0897 02bf 0bd1 call 0bd1_Unknown() - 0899 00f8 0301 sr @0x0301, $AX0.L - 089b 029f 084a jmp 0x084a - 089d 00c0 0ce1 lr $AR0, @0x0ce1 - 089f 0081 02ea lri $AR1, #0x02ea - 08a1 0082 0180 lri $AR2, #0x0180 - 08a3 0083 0d08 lri $AR3, #0x0d08 - 08a5 02bf 0c21 call 0c21_Unknown() - 08a7 00f8 0301 sr @0x0301, $AX0.L - 08a9 02df ret - - 08aa 00c0 0ce1 lr $AR0, @0x0ce1 - 08ac 0081 02ea lri $AR1, #0x02ea - 08ae 0082 0180 lri $AR2, #0x0180 - 08b0 0083 0d08 lri $AR3, #0x0d08 - 08b2 02bf 0c21 call 0c21_Unknown() - 08b4 00f8 0301 sr @0x0301, $AX0.L - 08b6 029f 0820 jmp 0x0820 - 08b8 00c0 0ce1 lr $AR0, @0x0ce1 - 08ba 0081 02ea lri $AR1, #0x02ea - 08bc 0082 0180 lri $AR2, #0x0180 - 08be 0083 0d08 lri $AR3, #0x0d08 - 08c0 02bf 0c21 call 0c21_Unknown() - 08c2 00f8 0301 sr @0x0301, $AX0.L - 08c4 029f 082c jmp 0x082c - 08c6 00c0 0ce1 lr $AR0, @0x0ce1 - 08c8 0081 02ea lri $AR1, #0x02ea - 08ca 0082 0180 lri $AR2, #0x0180 - 08cc 0083 0d08 lri $AR3, #0x0d08 - 08ce 02bf 0c21 call 0c21_Unknown() - 08d0 00f8 0301 sr @0x0301, $AX0.L - 08d2 029f 0838 jmp 0x0838 - 08d4 00c0 0ce1 lr $AR0, @0x0ce1 - 08d6 0081 02ea lri $AR1, #0x02ea - 08d8 0082 0180 lri $AR2, #0x0180 - 08da 0083 0d08 lri $AR3, #0x0d08 - 08dc 02bf 0c21 call 0c21_Unknown() - 08de 00f8 0301 sr @0x0301, $AX0.L - 08e0 029f 084a jmp 0x084a - 08e2 00c0 0ce2 lr $AR0, @0x0ce2 - 08e4 0081 02de lri $AR1, #0x02de - 08e6 0082 0400 lri $AR2, #0x0400 - 08e8 1c62 mrr $AR3, $AR2 - 08e9 02bf 0bd1 call 0bd1_Unknown() - 08eb 00f8 02fa sr @0x02fa, $AX0.L - 08ed 02df ret - - 08ee 00c0 0ce3 lr $AR0, @0x0ce3 - 08f0 0081 02e0 lri $AR1, #0x02e0 - 08f2 0082 04c0 lri $AR2, #0x04c0 - 08f4 1c62 mrr $AR3, $AR2 - 08f5 02bf 0bd1 call 0bd1_Unknown() - 08f7 00f8 02fe sr @0x02fe, $AX0.L - 08f9 02df ret - - 08fa 00c0 0ce2 lr $AR0, @0x0ce2 - 08fc 0081 02de lri $AR1, #0x02de - 08fe 0082 0400 lri $AR2, #0x0400 - 0900 1c62 mrr $AR3, $AR2 - 0901 00c4 0ce3 lr $IX0, @0x0ce3 - 0903 0085 04c0 lri $IX1, #0x04c0 - 0905 02bf 0beb call 0x0beb - 0907 00f8 02fa sr @0x02fa, $AX0.L - 0909 00fb 02fe sr @0x02fe, $AX1.H - 090b 02df ret - - 090c 00c0 0ce2 lr $AR0, @0x0ce2 - 090e 0081 02de lri $AR1, #0x02de - 0910 0082 0400 lri $AR2, #0x0400 - 0912 0083 0d08 lri $AR3, #0x0d08 - 0914 00c4 0ce3 lr $IX0, @0x0ce3 - 0916 0085 04c0 lri $IX1, #0x04c0 - 0918 02bf 0c51 call 0x0c51 - 091a 00f8 02fa sr @0x02fa, $AX0.L - 091c 00fb 02fe sr @0x02fe, $AX1.H - 091e 02df ret - - 091f 00c0 0ce1 lr $AR0, @0x0ce1 - 0921 0081 02ec lri $AR1, #0x02ec - 0923 0082 0580 lri $AR2, #0x0580 - 0925 1c62 mrr $AR3, $AR2 - 0926 02bf 0bd1 call 0bd1_Unknown() - 0928 00f8 0302 sr @0x0302, $AX0.L - 092a 02df ret - - 092b 00c0 0ce1 lr $AR0, @0x0ce1 - 092d 0081 02ec lri $AR1, #0x02ec - 092f 0082 0580 lri $AR2, #0x0580 - 0931 1c62 mrr $AR3, $AR2 - 0932 02bf 0bd1 call 0bd1_Unknown() - 0934 00f8 0302 sr @0x0302, $AX0.L - 0936 029f 08e2 jmp 0x08e2 - 0938 00c0 0ce1 lr $AR0, @0x0ce1 - 093a 0081 02ec lri $AR1, #0x02ec - 093c 0082 0580 lri $AR2, #0x0580 - 093e 1c62 mrr $AR3, $AR2 - 093f 02bf 0bd1 call 0bd1_Unknown() - 0941 00f8 0302 sr @0x0302, $AX0.L - 0943 029f 08ee jmp 0x08ee - 0945 00c0 0ce1 lr $AR0, @0x0ce1 - 0947 0081 02ec lri $AR1, #0x02ec - 0949 0082 0580 lri $AR2, #0x0580 - 094b 1c62 mrr $AR3, $AR2 - 094c 02bf 0bd1 call 0bd1_Unknown() - 094e 00f8 0302 sr @0x0302, $AX0.L - 0950 029f 08fa jmp 0x08fa - 0952 00c0 0ce1 lr $AR0, @0x0ce1 - 0954 0081 02ec lri $AR1, #0x02ec - 0956 0082 0580 lri $AR2, #0x0580 - 0958 1c62 mrr $AR3, $AR2 - 0959 02bf 0bd1 call 0bd1_Unknown() - 095b 00f8 0302 sr @0x0302, $AX0.L - 095d 029f 090c jmp 0x090c - 095f 00c0 0ce1 lr $AR0, @0x0ce1 - 0961 0081 02ec lri $AR1, #0x02ec - 0963 0082 0580 lri $AR2, #0x0580 - 0965 0083 0d08 lri $AR3, #0x0d08 - 0967 02bf 0c21 call 0c21_Unknown() - 0969 00f8 0302 sr @0x0302, $AX0.L - 096b 02df ret - - 096c 00c0 0ce1 lr $AR0, @0x0ce1 - 096e 0081 02ec lri $AR1, #0x02ec - 0970 0082 0580 lri $AR2, #0x0580 - 0972 0083 0d08 lri $AR3, #0x0d08 - 0974 02bf 0c21 call 0c21_Unknown() - 0976 00f8 0302 sr @0x0302, $AX0.L - 0978 029f 08e2 jmp 0x08e2 - 097a 00c0 0ce1 lr $AR0, @0x0ce1 - 097c 0081 02ec lri $AR1, #0x02ec - 097e 0082 0580 lri $AR2, #0x0580 - 0980 0083 0d08 lri $AR3, #0x0d08 - 0982 02bf 0c21 call 0c21_Unknown() - 0984 00f8 0302 sr @0x0302, $AX0.L - 0986 029f 08ee jmp 0x08ee - 0988 00c0 0ce1 lr $AR0, @0x0ce1 - 098a 0081 02ec lri $AR1, #0x02ec - 098c 0082 0580 lri $AR2, #0x0580 - 098e 0083 0d08 lri $AR3, #0x0d08 - 0990 02bf 0c21 call 0c21_Unknown() - 0992 00f8 0302 sr @0x0302, $AX0.L - 0994 029f 08fa jmp 0x08fa - 0996 00c0 0ce1 lr $AR0, @0x0ce1 - 0998 0081 02ec lri $AR1, #0x02ec - 099a 0082 0580 lri $AR2, #0x0580 - 099c 0083 0d08 lri $AR3, #0x0d08 - 099e 02bf 0c21 call 0c21_Unknown() - 09a0 00f8 0302 sr @0x0302, $AX0.L - 09a2 029f 090c jmp 0x090c - 09a4 00c0 0ce2 lr $AR0, @0x0ce2 - 09a6 0081 02e2 lri $AR1, #0x02e2 - 09a8 0082 0640 lri $AR2, #0x0640 - 09aa 1c62 mrr $AR3, $AR2 - 09ab 02bf 0bd1 call 0bd1_Unknown() - 09ad 00f8 02fb sr @0x02fb, $AX0.L - 09af 02df ret - - 09b0 00c0 0ce3 lr $AR0, @0x0ce3 - 09b2 0081 02e4 lri $AR1, #0x02e4 - 09b4 0082 0700 lri $AR2, #0x0700 - 09b6 1c62 mrr $AR3, $AR2 - 09b7 02bf 0bd1 call 0bd1_Unknown() - 09b9 00f8 02ff sr @0x02ff, $AX0.L - 09bb 02df ret - - 09bc 00c0 0ce2 lr $AR0, @0x0ce2 - 09be 0081 02e2 lri $AR1, #0x02e2 - 09c0 0082 0640 lri $AR2, #0x0640 - 09c2 1c62 mrr $AR3, $AR2 - 09c3 00c4 0ce3 lr $IX0, @0x0ce3 - 09c5 0085 0700 lri $IX1, #0x0700 - 09c7 02bf 0beb call 0x0beb - 09c9 00f8 02fb sr @0x02fb, $AX0.L - 09cb 00fb 02ff sr @0x02ff, $AX1.H - 09cd 02df ret - - 09ce 00c0 0ce2 lr $AR0, @0x0ce2 - 09d0 0081 02e2 lri $AR1, #0x02e2 - 09d2 0082 0640 lri $AR2, #0x0640 - 09d4 0083 0d08 lri $AR3, #0x0d08 - 09d6 00c4 0ce3 lr $IX0, @0x0ce3 - 09d8 0085 0700 lri $IX1, #0x0700 - 09da 02bf 0c51 call 0x0c51 - 09dc 00f8 02fb sr @0x02fb, $AX0.L - 09de 00fb 02ff sr @0x02ff, $AX1.H - 09e0 02df ret - - 09e1 00c0 0ce1 lr $AR0, @0x0ce1 - 09e3 0081 02ee lri $AR1, #0x02ee - 09e5 0082 07c0 lri $AR2, #0x07c0 - 09e7 1c62 mrr $AR3, $AR2 - 09e8 02bf 0bd1 call 0bd1_Unknown() - 09ea 00f8 0303 sr @0x0303, $AX0.L - 09ec 02df ret - - 09ed 00c0 0ce1 lr $AR0, @0x0ce1 - 09ef 0081 02ee lri $AR1, #0x02ee - 09f1 0082 07c0 lri $AR2, #0x07c0 - 09f3 1c62 mrr $AR3, $AR2 - 09f4 02bf 0bd1 call 0bd1_Unknown() - 09f6 00f8 0303 sr @0x0303, $AX0.L - 09f8 029f 09a4 jmp 0x09a4 - 09fa 00c0 0ce1 lr $AR0, @0x0ce1 - 09fc 0081 02ee lri $AR1, #0x02ee - 09fe 0082 07c0 lri $AR2, #0x07c0 - 0a00 1c62 mrr $AR3, $AR2 - 0a01 02bf 0bd1 call 0bd1_Unknown() - 0a03 00f8 0303 sr @0x0303, $AX0.L - 0a05 029f 09b0 jmp 0x09b0 - 0a07 00c0 0ce1 lr $AR0, @0x0ce1 - 0a09 0081 02ee lri $AR1, #0x02ee - 0a0b 0082 07c0 lri $AR2, #0x07c0 - 0a0d 1c62 mrr $AR3, $AR2 - 0a0e 02bf 0bd1 call 0bd1_Unknown() - 0a10 00f8 0303 sr @0x0303, $AX0.L - 0a12 029f 09bc jmp 0x09bc - 0a14 00c0 0ce1 lr $AR0, @0x0ce1 - 0a16 0081 02ee lri $AR1, #0x02ee - 0a18 0082 07c0 lri $AR2, #0x07c0 - 0a1a 1c62 mrr $AR3, $AR2 - 0a1b 02bf 0bd1 call 0bd1_Unknown() - 0a1d 00f8 0303 sr @0x0303, $AX0.L - 0a1f 029f 09ce jmp 0x09ce - 0a21 00c0 0ce1 lr $AR0, @0x0ce1 - 0a23 0081 02ee lri $AR1, #0x02ee - 0a25 0082 07c0 lri $AR2, #0x07c0 - 0a27 0083 0d08 lri $AR3, #0x0d08 - 0a29 02bf 0c21 call 0c21_Unknown() - 0a2b 00f8 0303 sr @0x0303, $AX0.L - 0a2d 02df ret - - 0a2e 00c0 0ce1 lr $AR0, @0x0ce1 - 0a30 0081 02ee lri $AR1, #0x02ee - 0a32 0082 07c0 lri $AR2, #0x07c0 - 0a34 0083 0d08 lri $AR3, #0x0d08 - 0a36 02bf 0c21 call 0c21_Unknown() - 0a38 00f8 0303 sr @0x0303, $AX0.L - 0a3a 029f 09a4 jmp 0x09a4 - 0a3c 00c0 0ce1 lr $AR0, @0x0ce1 - 0a3e 0081 02ee lri $AR1, #0x02ee - 0a40 0082 07c0 lri $AR2, #0x07c0 - 0a42 0083 0d08 lri $AR3, #0x0d08 - 0a44 02bf 0c21 call 0c21_Unknown() - 0a46 00f8 0303 sr @0x0303, $AX0.L - 0a48 029f 09b0 jmp 0x09b0 - 0a4a 00c0 0ce1 lr $AR0, @0x0ce1 - 0a4c 0081 02ee lri $AR1, #0x02ee - 0a4e 0082 07c0 lri $AR2, #0x07c0 - 0a50 0083 0d08 lri $AR3, #0x0d08 - 0a52 02bf 0c21 call 0c21_Unknown() - 0a54 00f8 0303 sr @0x0303, $AX0.L - 0a56 029f 09bc jmp 0x09bc - 0a58 00c0 0ce1 lr $AR0, @0x0ce1 - 0a5a 0081 02ee lri $AR1, #0x02ee - 0a5c 0082 07c0 lri $AR2, #0x07c0 - 0a5e 0083 0d08 lri $AR3, #0x0d08 - 0a60 02bf 0c21 call 0c21_Unknown() - 0a62 00f8 0303 sr @0x0303, $AX0.L - 0a64 029f 09ce jmp 0x09ce - 0a66 00c0 0ce2 lr $AR0, @0x0ce2 - 0a68 0081 02e6 lri $AR1, #0x02e6 - 0a6a 0082 0880 lri $AR2, #0x0880 - 0a6c 1c62 mrr $AR3, $AR2 - 0a6d 02bf 0bd1 call 0bd1_Unknown() - 0a6f 00f8 02fc sr @0x02fc, $AX0.L - 0a71 02df ret - - 0a72 00c0 0ce3 lr $AR0, @0x0ce3 - 0a74 0081 02e8 lri $AR1, #0x02e8 - 0a76 0082 0940 lri $AR2, #0x0940 - 0a78 1c62 mrr $AR3, $AR2 - 0a79 02bf 0bd1 call 0bd1_Unknown() - 0a7b 00f8 0300 sr @0x0300, $AX0.L - 0a7d 02df ret - - 0a7e 00c0 0ce2 lr $AR0, @0x0ce2 - 0a80 0081 02e6 lri $AR1, #0x02e6 - 0a82 0082 0880 lri $AR2, #0x0880 - 0a84 1c62 mrr $AR3, $AR2 - 0a85 00c4 0ce3 lr $IX0, @0x0ce3 - 0a87 0085 0940 lri $IX1, #0x0940 - 0a89 02bf 0beb call 0x0beb - 0a8b 00f8 02fc sr @0x02fc, $AX0.L - 0a8d 00fb 0300 sr @0x0300, $AX1.H - 0a8f 02df ret - - 0a90 00c0 0ce2 lr $AR0, @0x0ce2 - 0a92 0081 02e6 lri $AR1, #0x02e6 - 0a94 0082 0880 lri $AR2, #0x0880 - 0a96 0083 0d08 lri $AR3, #0x0d08 - 0a98 00c4 0ce3 lr $IX0, @0x0ce3 - 0a9a 0085 0940 lri $IX1, #0x0940 - 0a9c 02bf 0c51 call 0x0c51 - 0a9e 00f8 02fc sr @0x02fc, $AX0.L - 0aa0 00fb 0300 sr @0x0300, $AX1.H - 0aa2 02df ret - 0aa3 00c0 0ce1 lr $AR0, @0x0ce1 - 0aa5 0081 02f0 lri $AR1, #0x02f0 - 0aa7 0082 0a00 lri $AR2, #0x0a00 - 0aa9 1c62 mrr $AR3, $AR2 - 0aaa 02bf 0bd1 call 0bd1_Unknown() - 0aac 00f8 0304 sr @0x0304, $AX0.L - 0aae 02df ret - - 0aaf 00c0 0ce1 lr $AR0, @0x0ce1 - 0ab1 0081 02f0 lri $AR1, #0x02f0 - 0ab3 0082 0a00 lri $AR2, #0x0a00 - 0ab5 1c62 mrr $AR3, $AR2 - 0ab6 02bf 0bd1 call 0bd1_Unknown() - 0ab8 00f8 0304 sr @0x0304, $AX0.L - 0aba 029f 0a66 jmp 0x0a66 - 0abc 00c0 0ce1 lr $AR0, @0x0ce1 - 0abe 0081 02f0 lri $AR1, #0x02f0 - 0ac0 0082 0a00 lri $AR2, #0x0a00 - 0ac2 1c62 mrr $AR3, $AR2 - 0ac3 02bf 0bd1 call 0bd1_Unknown() - 0ac5 00f8 0304 sr @0x0304, $AX0.L - 0ac7 029f 0a72 jmp 0x0a72 - 0ac9 00c0 0ce1 lr $AR0, @0x0ce1 - 0acb 0081 02f0 lri $AR1, #0x02f0 - 0acd 0082 0a00 lri $AR2, #0x0a00 - 0acf 1c62 mrr $AR3, $AR2 - 0ad0 02bf 0bd1 call 0bd1_Unknown() - 0ad2 00f8 0304 sr @0x0304, $AX0.L - 0ad4 029f 0a7e jmp 0x0a7e - 0ad6 00c0 0ce1 lr $AR0, @0x0ce1 - 0ad8 0081 02f0 lri $AR1, #0x02f0 - 0ada 0082 0a00 lri $AR2, #0x0a00 - 0adc 1c62 mrr $AR3, $AR2 - 0add 02bf 0bd1 call 0bd1_Unknown() - 0adf 00f8 0304 sr @0x0304, $AX0.L - 0ae1 029f 0a90 jmp 0x0a90 - 0ae3 00c0 0ce1 lr $AR0, @0x0ce1 - 0ae5 0081 02f0 lri $AR1, #0x02f0 - 0ae7 0082 0a00 lri $AR2, #0x0a00 - 0ae9 0083 0d08 lri $AR3, #0x0d08 - 0aeb 02bf 0c21 call 0c21_Unknown() - 0aed 00f8 0304 sr @0x0304, $AX0.L - 0aef 02df ret - - 0af0 00c0 0ce1 lr $AR0, @0x0ce1 - 0af2 0081 02f0 lri $AR1, #0x02f0 - 0af4 0082 0a00 lri $AR2, #0x0a00 - 0af6 0083 0d08 lri $AR3, #0x0d08 - 0af8 02bf 0c21 call 0c21_Unknown() - 0afa 00f8 0304 sr @0x0304, $AX0.L - 0afc 029f 0a66 jmp 0x0a66 - 0afe 00c0 0ce1 lr $AR0, @0x0ce1 - 0b00 0081 02f0 lri $AR1, #0x02f0 - 0b02 0082 0a00 lri $AR2, #0x0a00 - 0b04 0083 0d08 lri $AR3, #0x0d08 - 0b06 02bf 0c21 call 0c21_Unknown() - 0b08 00f8 0304 sr @0x0304, $AX0.L - 0b0a 029f 0a72 jmp 0x0a72 - 0b0c 00c0 0ce1 lr $AR0, @0x0ce1 - 0b0e 0081 02f0 lri $AR1, #0x02f0 - 0b10 0082 0a00 lri $AR2, #0x0a00 - 0b12 0083 0d08 lri $AR3, #0x0d08 - 0b14 02bf 0c21 call 0c21_Unknown() - 0b16 00f8 0304 sr @0x0304, $AX0.L - 0b18 029f 0a7e jmp 0x0a7e - 0b1a 00c0 0ce1 lr $AR0, @0x0ce1 - 0b1c 0081 02f0 lri $AR1, #0x02f0 - 0b1e 0082 0a00 lri $AR2, #0x0a00 - 0b20 0083 0d08 lri $AR3, #0x0d08 - 0b22 02bf 0c21 call 0c21_Unknown() - 0b24 00f8 0304 sr @0x0304, $AX0.L - 0b26 029f 0a90 jmp 0x0a90 - 0b28 00c0 0ce1 lr $AR0, @0x0ce1 - 0b2a 0081 02e6 lri $AR1, #0x02e6 - 0b2c 0082 0880 lri $AR2, #0x0880 - 0b2e 1c62 mrr $AR3, $AR2 - 0b2f 02bf 0bd1 call 0bd1_Unknown() - 0b31 00f8 02fc sr @0x02fc, $AX0.L - 0b33 02df ret - - 0b34 00c0 0ce1 lr $AR0, @0x0ce1 - 0b36 0081 02e8 lri $AR1, #0x02e8 - 0b38 0082 0940 lri $AR2, #0x0940 - 0b3a 1c62 mrr $AR3, $AR2 - 0b3b 02bf 0bd1 call 0bd1_Unknown() - 0b3d 00f8 0300 sr @0x0300, $AX0.L - 0b3f 02df ret - - 0b40 00c0 0ce1 lr $AR0, @0x0ce1 - 0b42 0081 02e6 lri $AR1, #0x02e6 - 0b44 0082 0880 lri $AR2, #0x0880 - 0b46 1c62 mrr $AR3, $AR2 - 0b47 00c4 0ce1 lr $IX0, @0x0ce1 - 0b49 0085 0940 lri $IX1, #0x0940 - 0b4b 02bf 0beb call 0x0beb - 0b4d 00f8 02fc sr @0x02fc, $AX0.L - 0b4f 00fb 0300 sr @0x0300, $AX1.H - 0b51 02df ret - -void 0b52_Maybe_Mixer() { - 0b52 00c0 0ce1 lr $AR0, @0x0ce1 - 0b54 0081 02e6 lri $AR1, #0x02e6 - 0b56 0082 0880 lri $AR2, #0x0880 - 0b58 0083 0d08 lri $AR3, #0x0d08 - 0b5a 00c4 0ce1 lr $IX0, @0x0ce1 - 0b5c 0085 0940 lri $IX1, #0x0940 - 0b5e 02bf 0c51 call 0x0c51 - 0b60 00f8 02fc sr @0x02fc, $AX0.L - 0b62 00fb 0300 sr @0x0300, $AX1.H - 0b64 02df ret - 0b65 00c0 0ce1 lr $AR0, @0x0ce1 - 0b67 0081 02f0 lri $AR1, #0x02f0 - 0b69 0082 0a00 lri $AR2, #0x0a00 - 0b6b 1c62 mrr $AR3, $AR2 - 0b6c 02bf 0bd1 call 0bd1_Unknown() - 0b6e 00f8 0304 sr @0x0304, $AX0.L - 0b70 029f 0b28 jmp 0x0b28 - 0b72 00c0 0ce1 lr $AR0, @0x0ce1 - 0b74 0081 02f0 lri $AR1, #0x02f0 - 0b76 0082 0a00 lri $AR2, #0x0a00 - 0b78 1c62 mrr $AR3, $AR2 - 0b79 02bf 0bd1 call 0bd1_Unknown() - 0b7b 00f8 0304 sr @0x0304, $AX0.L - 0b7d 029f 0b34 jmp 0x0b34 - 0b7f 00c0 0ce1 lr $AR0, @0x0ce1 - 0b81 0081 02f0 lri $AR1, #0x02f0 - 0b83 0082 0a00 lri $AR2, #0x0a00 - 0b85 1c62 mrr $AR3, $AR2 - 0b86 02bf 0bd1 call 0bd1_Unknown() - 0b88 00f8 0304 sr @0x0304, $AX0.L - 0b8a 029f 0b40 jmp 0x0b40 - 0b8c 00c0 0ce1 lr $AR0, @0x0ce1 - 0b8e 0081 02f0 lri $AR1, #0x02f0 - 0b90 0082 0a00 lri $AR2, #0x0a00 - 0b92 1c62 mrr $AR3, $AR2 - 0b93 02bf 0bd1 call 0bd1_Unknown() - 0b95 00f8 0304 sr @0x0304, $AX0.L - 0b97 029f 0b52 jmp 0x0b52 - 0b99 00c0 0ce1 lr $AR0, @0x0ce1 - 0b9b 0081 02f0 lri $AR1, #0x02f0 - 0b9d 0082 0a00 lri $AR2, #0x0a00 - 0b9f 0083 0d08 lri $AR3, #0x0d08 - 0ba1 02bf 0c21 call 0c21_Unknown() - 0ba3 00f8 0304 sr @0x0304, $AX0.L - 0ba5 029f 0b28 jmp 0x0b28 - 0ba7 00c0 0ce1 lr $AR0, @0x0ce1 - 0ba9 0081 02f0 lri $AR1, #0x02f0 - 0bab 0082 0a00 lri $AR2, #0x0a00 - 0bad 0083 0d08 lri $AR3, #0x0d08 - 0baf 02bf 0c21 call 0c21_Unknown() - 0bb1 00f8 0304 sr @0x0304, $AX0.L - 0bb3 029f 0b34 jmp 0x0b34 - 0bb5 00c0 0ce1 lr $AR0, @0x0ce1 - 0bb7 0081 02f0 lri $AR1, #0x02f0 - 0bb9 0082 0a00 lri $AR2, #0x0a00 - 0bbb 0083 0d08 lri $AR3, #0x0d08 - 0bbd 02bf 0c21 call 0c21_Unknown() - 0bbf 00f8 0304 sr @0x0304, $AX0.L - 0bc1 029f 0b40 jmp 0x0b40 - 0bc3 00c0 0ce1 lr $AR0, @0x0ce1 - 0bc5 0081 02f0 lri $AR1, #0x02f0 - 0bc7 0082 0a00 lri $AR2, #0x0a00 - 0bc9 0083 0d08 lri $AR3, #0x0d08 - 0bcb 02bf 0c21 call 0c21_Unknown() - 0bcd 00f8 0304 sr @0x0304, $AX0.L - 0bcf 029f 0b52 jmp 0x0b52 -} - -// Volume -// AR0: factor table? -// AR1: factor -// AR2: input -// AR3: output -// returns: last in AX0.L (16 highest bits) -// -// basically: -// for (i = 0; i < 96; i++) -// out[i] = ((in[i*2+1] << 16) + (ar0[i] * factor)) >> 16; -// -// so that you don't bang your head against your keyboard trying to figure -// out those awful pipelined loops (I had to get myself a new head to finish -// this one). :P -// -void 0bd1_ApplyVolume1() { - 0bd1 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] - 0bd2 1939 lrri $AX1.L, @$AR1 // ax1.l = mem[ar1++] - 0bd3 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 // = ax0.h * ax1.l; ac0.m = mem[ar2++] - 0bd4 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++] - 0bd5 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 // acc0 <<= 16; ac1.m = mem[ar2++] - 0bd6 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] - 0bd7 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 // acc0 += ; = ax0.h * ax1.l; ac1.l = mem[ar2++] - 0bd8 9100 asr16 $ACC0 // acc0 >>= 16 - 0bd9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m - 0bda 112f 0be3 bloopi #0x2f, 0x0be3 // for (i = 0; i < 0x2f; i++) - 0bdc b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L // acc1 += ; = ax0.h * ax1.l; mem[ar3++] = ac0.l; - 0bdd 9972 asr16'l $ACC1 : $AC0.M, @$AR2 // acc1 >>= 16; ac0.m = mem[ar2++] - 0bde 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++]; - 0bdf f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M // acc0 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac1.m - 0be0 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L // acc0 += ; = ax0.h * ax1.l; mem[ar3++] = ac1.l; - 0be1 917a asr16'l $ACC0 : $AC1.M, @$AR2 // acc0 >>= 16; ac1.m = mem[ar2++] - 0be2 195d lrri $AC1.L, @$AR2 // ac1.l = mem[ar2++]; - 0be3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m - 0be4 1b7c srri @$AR3, $AC0.L // mem[ar3++] = ac0.l; - 0be5 6e00 movp $ACC0 // acc0 = ; - 0be6 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M // acc1 += ; ax0.l = ac0.m; - 0be7 9900 asr16 $ACC1 // acc1 >>= 16; - 0be8 1b7f srri @$AR3, $AC1.M // mem[ar3++] = ac1.m; - 0be9 812b clr's $ACC0 : @$AR3, $AC1.L // acc0 = 0; mem[ar3++] = ac1.l; - 0bea 02df ret -} - - 0beb 191a lrri $AX0.H, @$AR0 - 0bec 1939 lrri $AX1.L, @$AR1 - 0bed b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 - 0bee 195c lrri $AC0.L, @$AR2 - 0bef f07a lsl16'l $ACC0 : $AC1.M, @$AR2 - 0bf0 191a lrri $AX0.H, @$AR0 - 0bf1 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 - 0bf2 9100 asr16 $ACC0 - 0bf3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0bf4 112f 0bfd bloopi #0x2f, 0x0bfd - 0bf6 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0bf7 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0bf8 195c lrri $AC0.L, @$AR2 - 0bf9 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0bfa b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0bfb 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0bfc 195d lrri $AC1.L, @$AR2 - 0bfd f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0bfe 1b7c srri @$AR3, $AC0.L - 0bff 6e00 movp $ACC0 - 0c00 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M - 0c01 9909 asr16'ir $ACC1 : $AR1 - 0c02 1b7f srri @$AR3, $AC1.M - 0c03 1b7d srri @$AR3, $AC1.L - 0c04 1c04 mrr $AR0, $IX0 - 0c05 1c45 mrr $AR2, $IX1 - 0c06 1c62 mrr $AR3, $AR2 - 0c07 191a lrri $AX0.H, @$AR0 - 0c08 1939 lrri $AX1.L, @$AR1 - 0c09 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 - 0c0a 195c lrri $AC0.L, @$AR2 - 0c0b f07a lsl16'l $ACC0 : $AC1.M, @$AR2 - 0c0c 191a lrri $AX0.H, @$AR0 - 0c0d b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 - 0c0e 9100 asr16 $ACC0 - 0c0f f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c10 112f 0c19 bloopi #0x2f, 0x0c19 - 0c12 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0c13 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0c14 195c lrri $AC0.L, @$AR2 - 0c15 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0c16 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0c17 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0c18 195d lrri $AC1.L, @$AR2 - 0c19 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c1a 1b7c srri @$AR3, $AC0.L - 0c1b 6e00 movp $ACC0 - 0c1c 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M - 0c1d 9900 asr16 $ACC1 - 0c1e 1b7f srri @$AR3, $AC1.M - 0c1f 1b7d srri @$AR3, $AC1.L - 0c20 02df ret - -void 0c21_Unknown() { - 0c21 1ce3 mrr $IX3, $AR3 - 0c22 8e00 set16 - 0c23 8100 clr $ACC0 - 0c24 8971 clr'l $ACC1 : $AC0.M, @$AR1 - 0c25 18bf lrrd $AC1.M, @$AR1 - 0c26 1b7e srri @$AR3, $AC0.M - 0c27 4c00 add $ACC0, $ACC1 - 0c28 1b7e srri @$AR3, $AC0.M - 0c29 112f 0c2e bloopi #0x2f, 0x0c2e - 0c2b 4c00 add $ACC0, $ACC1 - 0c2c 1b7e srri @$AR3, $AC0.M - 0c2d 4c00 add $ACC0, $ACC1 - 0c2e 1b7e srri @$AR3, $AC0.M - 0c2f 4c00 add $ACC0, $ACC1 - 0c30 1b3e srri @$AR1, $AC0.M - 0c31 1c27 mrr $AR1, $IX3 - 0c32 1c62 mrr $AR3, $AR2 - 0c33 8f50 set40'l : $AX0.H, @$AR0 - 0c34 1939 lrri $AX1.L, @$AR1 - 0c35 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 - 0c36 195c lrri $AC0.L, @$AR2 - 0c37 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 - 0c38 191a lrri $AX0.H, @$AR0 - 0c39 1939 lrri $AX1.L, @$AR1 - 0c3a b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 - 0c3b 9100 asr16 $ACC0 - 0c3c f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c3d 1939 lrri $AX1.L, @$AR1 - 0c3e 112f 0c49 bloopi #0x2f, 0x0c49 - 0c40 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0c41 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0c42 195c lrri $AC0.L, @$AR2 - 0c43 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0c44 1939 lrri $AX1.L, @$AR1 - 0c45 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0c46 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0c47 195d lrri $AC1.L, @$AR2 - 0c48 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c49 1939 lrri $AX1.L, @$AR1 - 0c4a 1b7c srri @$AR3, $AC0.L - 0c4b 6e00 movp $ACC0 - 0c4c 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M - 0c4d 9900 asr16 $ACC1 - 0c4e 1b7f srri @$AR3, $AC1.M - 0c4f 1b7d srri @$AR3, $AC1.L - 0c50 02df ret - 0c51 1ce3 mrr $IX3, $AR3 - 0c52 8e00 set16 - 0c53 8100 clr $ACC0 - 0c54 8971 clr'l $ACC1 : $AC0.M, @$AR1 - 0c55 18bf lrrd $AC1.M, @$AR1 - 0c56 1b7e srri @$AR3, $AC0.M - 0c57 4c00 add $ACC0, $ACC1 - 0c58 1b7e srri @$AR3, $AC0.M - 0c59 112f 0c5e bloopi #0x2f, 0x0c5e - 0c5b 4c00 add $ACC0, $ACC1 - 0c5c 1b7e srri @$AR3, $AC0.M - 0c5d 4c00 add $ACC0, $ACC1 - 0c5e 1b7e srri @$AR3, $AC0.M - 0c5f 4c00 add $ACC0, $ACC1 - 0c60 1b3e srri @$AR1, $AC0.M - 0c61 0009 iar $AR1 - 0c62 8100 clr $ACC0 - 0c63 8971 clr'l $ACC1 : $AC0.M, @$AR1 - 0c64 18bf lrrd $AC1.M, @$AR1 - 0c65 1b7e srri @$AR3, $AC0.M - 0c66 4c00 add $ACC0, $ACC1 - 0c67 1b7e srri @$AR3, $AC0.M - 0c68 112f 0c6d bloopi #0x2f, 0x0c6d - 0c6a 4c00 add $ACC0, $ACC1 - 0c6b 1b7e srri @$AR3, $AC0.M - 0c6c 4c00 add $ACC0, $ACC1 - 0c6d 1b7e srri @$AR3, $AC0.M - 0c6e 4c00 add $ACC0, $ACC1 - 0c6f 1b3e srri @$AR1, $AC0.M - 0c70 1c27 mrr $AR1, $IX3 - 0c71 1c62 mrr $AR3, $AR2 - 0c72 8f50 set40'l : $AX0.H, @$AR0 - 0c73 1939 lrri $AX1.L, @$AR1 - 0c74 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 - 0c75 195c lrri $AC0.L, @$AR2 - 0c76 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 - 0c77 191a lrri $AX0.H, @$AR0 - 0c78 1939 lrri $AX1.L, @$AR1 - 0c79 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 - 0c7a 9100 asr16 $ACC0 - 0c7b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c7c 1939 lrri $AX1.L, @$AR1 - 0c7d 112f 0c88 bloopi #0x2f, 0x0c88 - 0c7f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0c80 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0c81 195c lrri $AC0.L, @$AR2 - 0c82 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0c83 1939 lrri $AX1.L, @$AR1 - 0c84 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0c85 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0c86 195d lrri $AC1.L, @$AR2 - 0c87 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c88 1939 lrri $AX1.L, @$AR1 - 0c89 1b7c srri @$AR3, $AC0.L - 0c8a 6e00 movp $ACC0 - 0c8b 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M - 0c8c 9905 asr16'dr $ACC1 : $AR1 - 0c8d 1b7f srri @$AR3, $AC1.M - 0c8e 1b7d srri @$AR3, $AC1.L - 0c8f 1c04 mrr $AR0, $IX0 - 0c90 1c45 mrr $AR2, $IX1 - 0c91 1c62 mrr $AR3, $AR2 - 0c92 191a lrri $AX0.H, @$AR0 - 0c93 1939 lrri $AX1.L, @$AR1 - 0c94 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 - 0c95 195c lrri $AC0.L, @$AR2 - 0c96 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 - 0c97 191a lrri $AX0.H, @$AR0 - 0c98 1939 lrri $AX1.L, @$AR1 - 0c99 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 - 0c9a 9100 asr16 $ACC0 - 0c9b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0c9c 1939 lrri $AX1.L, @$AR1 - 0c9d 112f 0ca8 bloopi #0x2f, 0x0ca8 - 0c9f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0ca0 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0ca1 195c lrri $AC0.L, @$AR2 - 0ca2 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0ca3 1939 lrri $AX1.L, @$AR1 - 0ca4 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0ca5 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0ca6 195d lrri $AC1.L, @$AR2 - 0ca7 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0ca8 1939 lrri $AX1.L, @$AR1 - 0ca9 1b7c srri @$AR3, $AC0.L - 0caa 6e00 movp $ACC0 - 0cab 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M - 0cac 9900 asr16 $ACC1 - 0cad 1b7f srri @$AR3, $AC1.M - 0cae 1b7d srri @$AR3, $AC1.L - 0caf 02df ret - 0cb0 0098 0000 lri $AX0.L, #0x0000 - 0cb2 02df ret -} - - 0cb3 0080 0cc0 lri $AR0, #0x0cc0 - 0cb5 1c62 mrr $AR3, $AR2 - 0cb6 1939 lrri $AX1.L, @$AR1 - 0cb7 191a lrri $AX0.H, @$AR0 - 0cb8 b000 mulx $AX0.H, $AX1.L - 0cb9 195e lrri $AC0.M, @$AR2 - 0cba 195c lrri $AC0.L, @$AR2 - 0cbb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 - 0cbc b400 mulxac $AX0.H, $AX1.L, $ACC0 - 0cbd 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0cbe 195d lrri $AC1.L, @$AR2 - 0cbf f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0cc0 1108 0cc9 bloopi #0x08, 0x0cc9 - 0cc2 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0cc3 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0cc4 195c lrri $AC0.L, @$AR2 - 0cc5 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0cc6 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0cc7 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0cc8 195d lrri $AC1.L, @$AR2 - 0cc9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0cca 4f23 addp's $ACC1 : @$AR3, $AC0.L - 0ccb 9900 asr16 $ACC1 - 0ccc 1b7f srri @$AR3, $AC1.M - 0ccd 6e2b movp's $ACC0 : @$AR3, $AC1.L - 0cce 1f1e mrr $AX0.L, $AC0.M - 0ccf 02df ret - 0cd0 0080 0cc0 lri $AR0, #0x0cc0 - 0cd2 0083 0d08 lri $AR3, #0x0d08 - 0cd4 1ce3 mrr $IX3, $AR3 - 0cd5 8e00 set16 - 0cd6 8100 clr $ACC0 - 0cd7 8971 clr'l $ACC1 : $AC0.M, @$AR1 - 0cd8 18bf lrrd $AC1.M, @$AR1 - 0cd9 1b7e srri @$AR3, $AC0.M - 0cda 4c00 add $ACC0, $ACC1 - 0cdb 1b7e srri @$AR3, $AC0.M - 0cdc 1108 0ce1 bloopi #0x08, 0x0ce1 - 0cde 4c00 add $ACC0, $ACC1 - 0cdf 1b7e srri @$AR3, $AC0.M - 0ce0 4c00 add $ACC0, $ACC1 - 0ce1 1b7e srri @$AR3, $AC0.M - 0ce2 4c00 add $ACC0, $ACC1 - 0ce3 1b3e srri @$AR1, $AC0.M - 0ce4 1c27 mrr $AR1, $IX3 - 0ce5 1c62 mrr $AR3, $AR2 - 0ce6 8f50 set40'l : $AX0.H, @$AR0 - 0ce7 1939 lrri $AX1.L, @$AR1 - 0ce8 b000 mulx $AX0.H, $AX1.L - 0ce9 195e lrri $AC0.M, @$AR2 - 0cea 195c lrri $AC0.L, @$AR2 - 0ceb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 - 0cec 1939 lrri $AX1.L, @$AR1 - 0ced b400 mulxac $AX0.H, $AX1.L, $ACC0 - 0cee 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0cef 195d lrri $AC1.L, @$AR2 - 0cf0 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0cf1 1939 lrri $AX1.L, @$AR1 - 0cf2 1108 0cfd bloopi #0x08, 0x0cfd - 0cf4 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L - 0cf5 9972 asr16'l $ACC1 : $AC0.M, @$AR2 - 0cf6 195c lrri $AC0.L, @$AR2 - 0cf7 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M - 0cf8 1939 lrri $AX1.L, @$AR1 - 0cf9 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L - 0cfa 917a asr16'l $ACC0 : $AC1.M, @$AR2 - 0cfb 195d lrri $AC1.L, @$AR2 - 0cfc f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M - 0cfd 1939 lrri $AX1.L, @$AR1 - 0cfe 4f23 addp's $ACC1 : @$AR3, $AC0.L - 0cff 9900 asr16 $ACC1 - 0d00 1b7f srri @$AR3, $AC1.M - 0d01 6e2b movp's $ACC0 : @$AR3, $AC1.L - 0d02 1f1e mrr $AX0.L, $AC0.M - 0d03 02df ret - -// Command jump table - 0d04 008a // 0x0 - ??? - 0d05 0222 // 0x1 - ??? - 0d06 024f // 0x2 - ??? - 0d07 0e83 // 0x3 - ??? - 0d08 027e // 0x4 - set PBs address - 0d09 049b // 0x5 - ??? - 0d0a 04b4 // 0x6 - ??? - 0d0b 04cd // 0x7 - set output buffers - 0d0c 0dbd // 0x8 - ??? - 0d0d 0ddf // 0x9 - ??? - 0d0e 057b // 0xA - set compressor table - 0d0f 060b // 0xB - ??? - 0d10 0ec6 // 0xC - ??? - 0d11 067c // 0xD - ??? - 0d12 0672 // 0xE - The End - -// Table #1 - entry selected by PB[0x007] bits 0-4 - 0d13 081f lris $AX0.L, #0x1f // 0: Do nothing - 0d14 0820 lris $AX0.L, #0x20 - 0d15 082c lris $AX0.L, #0x2c - 0d16 0838 lris $AX0.L, #0x38 - 0d17 084a lris $AX0.L, #0x4a - 0d18 084a lris $AX0.L, #0x4a - 0d19 084a lris $AX0.L, #0x4a - 0d1a 084a lris $AX0.L, #0x4a - 0d1b 085d lris $AX0.L, #0x5d - 0d1c 0869 lris $AX0.L, #0x69 - 0d1d 0876 lris $AX0.L, #0x76 - 0d1e 0883 lris $AX0.L, #0x83 - 0d1f 0890 lris $AX0.L, #0x90 - 0d20 0890 lris $AX0.L, #0x90 - 0d21 0890 lris $AX0.L, #0x90 - 0d22 0890 lris $AX0.L, #0x90 - 0d23 089d lris $AX0.L, #0x9d - 0d24 08aa lris $AX0.L, #0xaa - 0d25 08b8 lris $AX0.L, #0xb8 - 0d26 08c6 lris $AX0.L, #0xc6 - 0d27 08d4 lris $AX0.L, #0xd4 - 0d28 08d4 lris $AX0.L, #0xd4 - 0d29 08d4 lris $AX0.L, #0xd4 - 0d2a 08d4 lris $AX0.L, #0xd4 - 0d2b 089d lris $AX0.L, #0x9d - 0d2c 08aa lris $AX0.L, #0xaa - 0d2d 08b8 lris $AX0.L, #0xb8 - 0d2e 08c6 lris $AX0.L, #0xc6 - 0d2f 08d4 lris $AX0.L, #0xd4 - 0d30 08d4 lris $AX0.L, #0xd4 - 0d31 08d4 lris $AX0.L, #0xd4 - 0d32 08d4 lris $AX0.L, #0xd4 - -// Table #2 - entry selected by PB[0x006] bits 0-4 - 0d33 081f lris $AX0.L, #0x1f // 0: Do nothing - 0d34 08e2 lris $AX0.L, #0xe2 - 0d35 08ee lris $AX0.L, #0xee - 0d36 08fa lris $AX0.L, #0xfa - 0d37 090c lris $AX1.L, #0x0c - 0d38 090c lris $AX1.L, #0x0c - 0d39 090c lris $AX1.L, #0x0c - 0d3a 090c lris $AX1.L, #0x0c - 0d3b 091f lris $AX1.L, #0x1f - 0d3c 092b lris $AX1.L, #0x2b - 0d3d 0938 lris $AX1.L, #0x38 - 0d3e 0945 lris $AX1.L, #0x45 - 0d3f 0952 lris $AX1.L, #0x52 - 0d40 0952 lris $AX1.L, #0x52 - 0d41 0952 lris $AX1.L, #0x52 - 0d42 0952 lris $AX1.L, #0x52 - 0d43 095f lris $AX1.L, #0x5f - 0d44 096c lris $AX1.L, #0x6c - 0d45 097a lris $AX1.L, #0x7a - 0d46 0988 lris $AX1.L, #0x88 - 0d47 0996 lris $AX1.L, #0x96 - 0d48 0996 lris $AX1.L, #0x96 - 0d49 0996 lris $AX1.L, #0x96 - 0d4a 0996 lris $AX1.L, #0x96 - 0d4b 095f lris $AX1.L, #0x5f - 0d4c 096c lris $AX1.L, #0x6c - 0d4d 097a lris $AX1.L, #0x7a - 0d4e 0988 lris $AX1.L, #0x88 - 0d4f 0996 lris $AX1.L, #0x96 - 0d50 0996 lris $AX1.L, #0x96 - 0d51 0996 lris $AX1.L, #0x96 - 0d52 0996 lris $AX1.L, #0x96 - -// Table #3 - entry selected by PB[0x006] bits 5-9 - 0d53 081f lris $AX0.L, #0x1f // 0: Do nothing - 0d54 09a4 lris $AX1.L, #0xa4 - 0d55 09b0 lris $AX1.L, #0xb0 - 0d56 09bc lris $AX1.L, #0xbc - 0d57 09ce lris $AX1.L, #0xce - 0d58 09ce lris $AX1.L, #0xce - 0d59 09ce lris $AX1.L, #0xce - 0d5a 09ce lris $AX1.L, #0xce - 0d5b 09e1 lris $AX1.L, #0xe1 - 0d5c 09ed lris $AX1.L, #0xed - 0d5d 09fa lris $AX1.L, #0xfa - 0d5e 0a07 lris $AX0.H, #0x07 - 0d5f 0a14 lris $AX0.H, #0x14 - 0d60 0a14 lris $AX0.H, #0x14 - 0d61 0a14 lris $AX0.H, #0x14 - 0d62 0a14 lris $AX0.H, #0x14 - 0d63 0a21 lris $AX0.H, #0x21 - 0d64 0a2e lris $AX0.H, #0x2e - 0d65 0a3c lris $AX0.H, #0x3c - 0d66 0a4a lris $AX0.H, #0x4a - 0d67 0a58 lris $AX0.H, #0x58 - 0d68 0a58 lris $AX0.H, #0x58 - 0d69 0a58 lris $AX0.H, #0x58 - 0d6a 0a58 lris $AX0.H, #0x58 - 0d6b 0a21 lris $AX0.H, #0x21 - 0d6c 0a2e lris $AX0.H, #0x2e - 0d6d 0a3c lris $AX0.H, #0x3c - 0d6e 0a4a lris $AX0.H, #0x4a - 0d6f 0a58 lris $AX0.H, #0x58 - 0d70 0a58 lris $AX0.H, #0x58 - 0d71 0a58 lris $AX0.H, #0x58 - 0d72 0a58 lris $AX0.H, #0x58 - -// Table #4 - entry selected by PB[0x006] bits 10-15 -// (twice longer than the three previous ones!) - 0d73 081f lris $AX0.L, #0x1f // 0: Do nothing - 0d74 0a66 lris $AX0.H, #0x66 - 0d75 0a72 lris $AX0.H, #0x72 - 0d76 0a7e lris $AX0.H, #0x7e - 0d77 0a90 lris $AX0.H, #0x90 - 0d78 0a90 lris $AX0.H, #0x90 - 0d79 0a90 lris $AX0.H, #0x90 - 0d7a 0a90 lris $AX0.H, #0x90 - 0d7b 0aa3 lris $AX0.H, #0xa3 - 0d7c 0aaf lris $AX0.H, #0xaf - 0d7d 0abc lris $AX0.H, #0xbc - 0d7e 0ac9 lris $AX0.H, #0xc9 - 0d7f 0ad6 lris $AX0.H, #0xd6 - 0d80 0ad6 lris $AX0.H, #0xd6 - 0d81 0ad6 lris $AX0.H, #0xd6 - 0d82 0ad6 lris $AX0.H, #0xd6 - 0d83 0ae3 lris $AX0.H, #0xe3 - 0d84 0af0 lris $AX0.H, #0xf0 - 0d85 0afe lris $AX0.H, #0xfe - 0d86 0b0c lris $AX1.H, #0x0c - 0d87 0b1a lris $AX1.H, #0x1a - 0d88 0b1a lris $AX1.H, #0x1a - 0d89 0b1a lris $AX1.H, #0x1a - 0d8a 0b1a lris $AX1.H, #0x1a - 0d8b 0ae3 lris $AX0.H, #0xe3 - 0d8c 0af0 lris $AX0.H, #0xf0 - 0d8d 0afe lris $AX0.H, #0xfe - 0d8e 0b0c lris $AX1.H, #0x0c - 0d8f 0b1a lris $AX1.H, #0x1a - 0d90 0b1a lris $AX1.H, #0x1a - 0d91 0b1a lris $AX1.H, #0x1a - 0d92 0b1a lris $AX1.H, #0x1a - 0d93 081f lris $AX0.L, #0x1f - 0d94 0b28 lris $AX1.H, #0x28 - 0d95 0b34 lris $AX1.H, #0x34 - 0d96 0b40 lris $AX1.H, #0x40 - 0d97 0b52 lris $AX1.H, #0x52 - 0d98 0b52 lris $AX1.H, #0x52 - 0d99 0b52 lris $AX1.H, #0x52 - 0d9a 0b52 lris $AX1.H, #0x52 - 0d9b 0aa3 lris $AX0.H, #0xa3 - 0d9c 0b65 lris $AX1.H, #0x65 - 0d9d 0b72 lris $AX1.H, #0x72 - 0d9e 0b7f lris $AX1.H, #0x7f - 0d9f 0b8c lris $AX1.H, #0x8c - 0da0 0b8c lris $AX1.H, #0x8c - 0da1 0b8c lris $AX1.H, #0x8c - 0da2 0b8c lris $AX1.H, #0x8c - 0da3 0ae3 lris $AX0.H, #0xe3 - 0da4 0b99 lris $AX1.H, #0x99 - 0da5 0ba7 lris $AX1.H, #0xa7 - 0da6 0bb5 lris $AX1.H, #0xb5 - 0da7 0bc3 lris $AX1.H, #0xc3 - 0da8 0bc3 lris $AX1.H, #0xc3 - 0da9 0bc3 lris $AX1.H, #0xc3 - 0daa 0bc3 lris $AX1.H, #0xc3 - 0dab 0ae3 lris $AX0.H, #0xe3 - 0dac 0b99 lris $AX1.H, #0x99 - 0dad 0ba7 lris $AX1.H, #0xa7 - 0dae 0bb5 lris $AX1.H, #0xb5 - 0daf 0bc3 lris $AX1.H, #0xc3 - 0db0 0bc3 lris $AX1.H, #0xc3 - 0db1 0bc3 lris $AX1.H, #0xc3 - 0db2 0bc3 lris $AX1.H, #0xc3 - - - 0db3 0cb0 lris $AC0.L, #0xb0 - 0db4 0cb3 lris $AC0.L, #0xb3 - 0db5 0cd0 lris $AC0.L, #0xd0 - 0db6 0cd0 lris $AC0.L, #0xd0 - -// Jump table for sample rate converters - 0db7 071a cmpis $ACC1, #0x1a // none - 0db8 076b cmpis $ACC1, #0x6b // ? - 0db9 07c0 cmpis $ACC1, #0xc0 // linear - -// Table for coef_select -// addresses into COEF ROM - 0dba 1000 loopi #0x00 - 0dbb 1200 sbclr #0x00 - 0dbc 1400 lsl $ACC0, #0 - -void 0dbd_Cmd_8() { - 0dbd 8e00 set16 - 0dbe 00c4 0ce6 lr $IX0, @0x0ce6 - 0dc0 1905 lrri $IX1, @$AR0 - 0dc1 00e5 0ce6 sr @0x0ce6, $IX1 - 0dc3 0086 0400 lri $IX2, #0x0400 - 0dc5 191e lrri $AC0.M, @$AR0 - 0dc6 191c lrri $AC0.L, @$AR0 - 0dc7 2ece srs @DSMAH, $AC0.M - 0dc8 2ccf srs @DSMAL, $AC0.L - 0dc9 16cd 0400 si @DSPA, #0x0400 - 0dcb 16c9 0001 si @DSCR, #0x0001 - 0dcd 16cb 0480 si @DSBL, #0x0480 - 0dcf 02bf 0084 call 0084_WaitForDMACompletion() - 0dd1 191e lrri $AC0.M, @$AR0 - 0dd2 191c lrri $AC0.L, @$AR0 - 0dd3 2ece srs @DSMAH, $AC0.M - 0dd4 2ccf srs @DSMAL, $AC0.L - 0dd5 16cd 0940 si @DSPA, #0x0940 - 0dd7 16c9 0001 si @DSCR, #0x0001 - 0dd9 16cb 0180 si @DSBL, #0x0180 - 0ddb 02bf 0084 call 0084_WaitForDMACompletion() - 0ddd 029f 0e01 jmp 0e01_Unk() -} - -void 0ddf_Cmd_9() { - 0ddf 8e00 set16 - 0de0 00c4 0ce7 lr $IX0, @0x0ce7 - 0de2 1905 lrri $IX1, @$AR0 - 0de3 00e5 0ce7 sr @0x0ce7, $IX1 - 0de5 0086 0640 lri $IX2, #0x0640 - 0de7 191e lrri $AC0.M, @$AR0 - 0de8 191c lrri $AC0.L, @$AR0 - 0de9 2ece srs @DSMAH, $AC0.M - 0dea 2ccf srs @DSMAL, $AC0.L - 0deb 16cd 0640 si @DSPA, #0x0640 - 0ded 16c9 0001 si @DSCR, #0x0001 - 0def 16cb 0480 si @DSBL, #0x0480 - 0df1 02bf 0084 call 0084_WaitForDMACompletion() - 0df3 191e lrri $AC0.M, @$AR0 - 0df4 191c lrri $AC0.L, @$AR0 - 0df5 2ece srs @DSMAH, $AC0.M - 0df6 2ccf srs @DSMAL, $AC0.L - 0df7 16cd 0a00 si @DSPA, #0x0a00 - 0df9 16c9 0001 si @DSCR, #0x0001 - 0dfb 16cb 0180 si @DSBL, #0x0180 - 0dfd 02bf 0084 call 0084_WaitForDMACompletion() - 0dff 029f 0e01 jmp 0e01_Unk() -} - -void 0e01_Unk() { - 0e01 8b00 m0 - 0e02 8100 clr $ACC0 - 0e03 8900 clr $ACC1 - 0e04 1fc4 mrr $AC0.M, $IX0 - 0e05 1fe5 mrr $AC1.M, $IX1 - 0e06 5d00 sub $ACC1, $ACC0 - 0e07 009a 02ab lri $AX0.H, #0x02ab - 0e09 009b 02aa lri $AX1.H, #0x02aa - 0e0b 0081 0d08 lri $AR1, #0x0d08 - 0e0d d000 mulc $AC1.M, $AX0.H - 0e0e d400 mulcac $AC1.M, $AX0.H, $ACC0 - 0e0f 111f 0e13 bloopi #0x1f, 0x0e13 - 0e11 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e12 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e13 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e14 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e15 4e31 addp's $ACC0 : @$AR1, $AC0.M - 0e16 1b25 srri @$AR1, $IX1 - 0e17 191e lrri $AC0.M, @$AR0 - 0e18 191c lrri $AC0.L, @$AR0 - 0e19 2ece srs @DSMAH, $AC0.M - 0e1a 2ccf srs @DSMAL, $AC0.L - 0e1b 00e6 ffcd sr @DSPA, $IX2 - 0e1d 16c9 0000 si @DSCR, #0x0000 - 0e1f 16cb 0180 si @DSBL, #0x0180 - 0e21 0081 0000 lri $AR1, #0x0000 - 0e23 1c41 mrr $AR2, $AR1 - 0e24 02bf 0084 call 0084_WaitForDMACompletion() - 0e26 02bf 0e57 call 0x0e57 - 0e28 191e lrri $AC0.M, @$AR0 - 0e29 191c lrri $AC0.L, @$AR0 - 0e2a 2ece srs @DSMAH, $AC0.M - 0e2b 2ccf srs @DSMAL, $AC0.L - 0e2c 00e6 ffcd sr @DSPA, $IX2 - 0e2e 16c9 0000 si @DSCR, #0x0000 - 0e30 16cb 0180 si @DSBL, #0x0180 - 0e32 02bf 0084 call 0084_WaitForDMACompletion() - 0e34 02bf 0e57 call 0x0e57 - 0e36 191e lrri $AC0.M, @$AR0 - 0e37 191c lrri $AC0.L, @$AR0 - 0e38 2ece srs @DSMAH, $AC0.M - 0e39 2ccf srs @DSMAL, $AC0.L - 0e3a 00e6 ffcd sr @DSPA, $IX2 - 0e3c 16c9 0000 si @DSCR, #0x0000 - 0e3e 16cb 0180 si @DSBL, #0x0180 - 0e40 02bf 0084 call 0084_WaitForDMACompletion() - 0e42 02bf 0e57 call 0x0e57 - 0e44 191e lrri $AC0.M, @$AR0 - 0e45 191c lrri $AC0.L, @$AR0 - 0e46 2ece srs @DSMAH, $AC0.M - 0e47 2ccf srs @DSMAL, $AC0.L - 0e48 00e6 ffcd sr @DSPA, $IX2 - 0e4a 16c9 0000 si @DSCR, #0x0000 - 0e4c 16cb 0180 si @DSBL, #0x0180 - 0e4e 0081 0880 lri $AR1, #0x0880 - 0e50 1c41 mrr $AR2, $AR1 - 0e51 02bf 0084 call 0084_WaitForDMACompletion() - 0e53 02bf 0e57 call 0x0e57 - 0e55 029f 006f jmp 006f_MailHandler() -} - - 0e57 8f00 set40 - 0e58 8d00 set15 - 0e59 8a00 m2 - 0e5a 00e0 0cd2 sr @0x0cd2, $AR0 - 0e5c 0080 0d08 lri $AR0, #0x0d08 - 0e5e 1c66 mrr $AR3, $IX2 - 0e5f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0e60 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e61 a000 mulx $AX0.L, $AX1.L - 0e62 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0e63 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 0e64 4e00 addp $ACC0 - 0e65 4800 addax $ACC0, $AX0.L - 0e66 112f 0e75 bloopi #0x2f, 0x0e75 - 0e68 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0e69 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e6a a000 mulx $AX0.L, $AX1.L - 0e6b af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0e6c 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0e6d 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0e6e 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0e6f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0e70 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e71 a000 mulx $AX0.L, $AX1.L - 0e72 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0e73 9141 asr16'l $ACC0 : $AX0.L, @$AR1 - 0e74 4e3a addp's $ACC0 : @$AR2, $AC1.M - 0e75 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 0e76 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 - 0e77 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e78 a000 mulx $AX0.L, $AX1.L - 0e79 af00 mulxmv $AX0.L, $AX1.H, $ACC1 - 0e7a 9941 asr16'l $ACC1 : $AX0.L, @$AR1 - 0e7b 4f32 addp's $ACC1 : @$AR2, $AC0.M - 0e7c 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0e7d 1b5f srri @$AR2, $AC1.M - 0e7e 1b5d srri @$AR2, $AC1.L - 0e7f 00c0 0cd2 lr $AR0, @0x0cd2 - 0e81 8e00 set16 - 0e82 02df ret - -void 0e83_Cmd_3() { - 0e83 8e00 set16 - 0e84 191f lrri $AC1.M, @$AR0 - 0e85 191d lrri $AC1.L, @$AR0 - 0e86 2fce srs @DSMAH, $AC1.M - 0e87 2dcf srs @DSMAL, $AC1.L - 0e88 16cd 0d08 si @DSPA, #0x0d08 - 0e8a 16c9 0000 si @DSCR, #0x0000 - 0e8c 16cb 0300 si @DSBL, #0x0300 - 0e8e 02bf 0084 call 0084_WaitForDMACompletion() - 0e90 1c80 mrr $IX0, $AR0 - 0e91 8f00 set40 - 0e92 0080 0d08 lri $AR0, #0x0d08 - 0e94 0083 0000 lri $AR3, #0x0000 - 0e96 1c43 mrr $AR2, $AR3 - 0e97 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0e98 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e99 6a00 movax $ACC0, $AX1.L - 0e9a 4800 addax $ACC0, $AX0.L - 0e9b 112f 0ea4 bloopi #0x2f, 0x0ea4 - 0e9d 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0e9e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0e9f 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 0ea0 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0ea1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0ea2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0ea3 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M - 0ea4 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L - 0ea5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0ea6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0ea7 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M - 0ea8 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L - 0ea9 1b5f srri @$AR2, $AC1.M - 0eaa 1b5d srri @$AR2, $AC1.L - 0eab 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0eac 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0ead 6800 movax $ACC0, $AX0.L - 0eae 7c00 neg $ACC0 - 0eaf 4a00 addax $ACC0, $AX1.L - 0eb0 112f 0ebb bloopi #0x2f, 0x0ebb - 0eb2 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0eb3 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0eb4 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M - 0eb5 7d00 neg $ACC1 - 0eb6 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L - 0eb7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0eb8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0eb9 683a movax's $ACC0, $AX0.L : @$AR2, $AC1.M - 0eba 7c00 neg $ACC0 - 0ebb 4a2a addax's $ACC0, $AX1.L : @$AR2, $AC1.L - 0ebc 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 - 0ebd 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 - 0ebe 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M - 0ebf 7d00 neg $ACC1 - 0ec0 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L - 0ec1 1b5f srri @$AR2, $AC1.M - 0ec2 1b5d srri @$AR2, $AC1.L - 0ec3 1c04 mrr $AR0, $IX0 - 0ec4 029f 006f jmp 006f_MailHandler() -} - -void 0ec6_Cmd_C() { - 0ec6 8e48 set16'l : $AX1.L, @$AR0 - 0ec7 8b78 m0'l : $AC1.M, @$AR0 - 0ec8 8168 clr'l $ACC0 : $AC1.L, @$AR0 - 0ec9 00e0 0cd2 sr @0x0cd2, $AR0 - 0ecb 2fce srs @DSMAH, $AC1.M - 0ecc 2dcf srs @DSMAL, $AC1.L - 0ecd 16cd 0180 si @DSPA, #0x0180 - 0ecf 16c9 0001 si @DSCR, #0x0001 - 0ed1 16cb 0180 si @DSBL, #0x0180 - 0ed3 02bf 0084 call 0084_WaitForDMACompletion() - 0ed5 8100 clr $ACC0 - 0ed6 009c 0180 lri $AC0.L, #0x0180 - 0ed8 4d00 add $ACC1, $ACC0 - 0ed9 2fce srs @DSMAH, $AC1.M - 0eda 2dcf srs @DSMAL, $AC1.L - 0edb 16cd 0880 si @DSPA, #0x0880 - 0edd 16c9 0001 si @DSCR, #0x0001 - 0edf 16cb 0180 si @DSBL, #0x0180 - 0ee1 8100 clr $ACC0 - 0ee2 8900 clr $ACC1 - 0ee3 00de 0ce5 lr $AC0.M, @0x0ce5 - 0ee5 1ff9 mrr $AC1.M, $AX1.L - 0ee6 5d00 sub $ACC1, $ACC0 - 0ee7 00f9 0ce5 sr @0x0ce5, $AX1.L - 0ee9 009a 02ab lri $AX0.H, #0x02ab - 0eeb 009b 02aa lri $AX1.H, #0x02aa - 0eed 0081 0d08 lri $AR1, #0x0d08 - 0eef d000 mulc $AC1.M, $AX0.H - 0ef0 d400 mulcac $AC1.M, $AX0.H, $ACC0 - 0ef1 111f 0ef5 bloopi #0x1f, 0x0ef5 - 0ef3 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ef4 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0ef5 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0ef6 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ef7 4e31 addp's $ACC0 : @$AR1, $AC0.M - 0ef8 1b39 srri @$AR1, $AX1.L - 0ef9 02bf 0084 call 0084_WaitForDMACompletion() - 0efb 8f00 set40 - 0efc 8d00 set15 - 0efd 8a00 m2 - 0efe 0080 0d08 lri $AR0, #0x0d08 - 0f00 0081 0400 lri $AR1, #0x0400 - 0f02 0083 0000 lri $AR3, #0x0000 - 0f04 0082 00c0 lri $AR2, #0x00c0 - 0f06 1918 lrri $AX0.L, @$AR0 - 0f07 195b lrri $AX1.H, @$AR2 - 0f08 1959 lrri $AX1.L, @$AR2 - 0f09 a000 mulx $AX0.L, $AX1.L - 0f0a ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0f0b 9100 asr16 $ACC0 - 0f0c 4e5b addp'l $ACC0 : $AX1.H, @$AR3 - 0f0d f04b lsl16'l $ACC0 : $AX1.L, @$AR3 - 0f0e 115f 0f19 bloopi #0x5f, 0x0f19 - 0f10 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 0f11 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0f12 9140 asr16'l $ACC0 : $AX0.L, @$AR0 - 0f13 4e5a addp'l $ACC0 : $AX1.H, @$AR2 - 0f14 f04a lsl16'l $ACC0 : $AX1.L, @$AR2 - 0f15 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 0f16 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0f17 9100 asr16 $ACC0 - 0f18 4e5b addp'l $ACC0 : $AX1.H, @$AR3 - 0f19 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 - 0f1a a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M - 0f1b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0f1c 9100 asr16 $ACC0 - 0f1d 4e00 addp $ACC0 - 0f1e f000 lsl16 $ACC0 - 0f1f 1b3e srri @$AR1, $AC0.M - 0f20 8e00 set16 - 0f21 00c0 0cd2 lr $AR0, @0x0cd2 - 0f23 191e lrri $AC0.M, @$AR0 - 0f24 191c lrri $AC0.L, @$AR0 - 0f25 2ece srs @DSMAH, $AC0.M - 0f26 2ccf srs @DSMAL, $AC0.L - 0f27 16cd 0400 si @DSPA, #0x0400 - 0f29 16c9 0001 si @DSCR, #0x0001 - 0f2b 16cb 0180 si @DSBL, #0x0180 - 0f2d 02bf 0084 call 0084_WaitForDMACompletion() - 0f2f 16fc dcd1 si @DMBH, #0xdcd1 <-------------- !!! - 0f31 16fd 0004 si @DMBL, #0x0004 <-------------- !!! - 0f33 16fb 0001 si @DIRQ, #0x0001 <-------------- !!! - 0f35 26fc lrs $AC0.M, @DMBH - 0f36 02a0 8000 andf $AC0.M, #0x8000 - 0f38 029c 0f35 jlnz 0x0f35 - 0f3a 029f 006f jmp 006f_MailHandler() -} - -void 0f3c_Int1_Handler() { - 0f3c 8e00 set16 - 0f3d 1fcc mrr $AC0.M, $ST0 - 0f3e 1d9e mrr $ST0, $AC0.M - 0f3f 16fc ecc0 si @DMBH, #0xecc0 - 0f41 2efd srs @DMBL, $AC0.M - 0f42 26fc lrs $AC0.M, @DMBH - 0f43 02a0 8000 andf $AC0.M, #0x8000 - 0f45 029c 0f42 jlnz 0x0f42 - 0f47 02ff rti -} - -void 0f48_Int2_Handler() { - 0f48 0000 nop - 0f49 0000 nop - 0f4a 0000 nop - 0f4b 0000 nop - 0f4c 02ff rti -} - -void 0f4d_Int3_Handler() { - 0f4d 8e00 set16 - 0f4e 1dbc mrr $ST1, $AC0.L - 0f4f 1dbe mrr $ST1, $AC0.M - 0f50 8100 clr $ACC0 - 0f51 00de 0307 lr $AC0.M, @0x0307 - 0f53 0601 cmpis $ACC0, #0x01 - 0f54 0295 0f59 jz 0x0f59 - 0f56 0e00 lris $AC0.M, #0x00 - 0f57 00fe 02d8 sr @0x02d8, $AC0.M - 0f59 1fcd mrr $AC0.M, $ST1 - 0f5a 1f8d mrr $AC0.L, $ST1 - 0f5b 02ff rti -} - -void 0f5c_Int4_Handler() { - 0f5c 0000 nop - 0f5d 0000 nop - 0f5e 0000 nop - 0f5f 0000 nop - 0f60 02ff rti -} - -// Handles ACCOV exception -// ACCOV exception will be triggered when a sound being played -// reaches end and needs to be reloaded or stopped. -// -void 0f61_Int5_Handler() -{ - 0f61 8e00 set16 - 0f62 1dbc mrr $ST1, $AC0.L - 0f63 1dbe mrr $ST1, $AC0.M - 0f64 8100 clr $ACC0 - 0f65 00de 0307 lr $AC0.M, @0x0307 - 0f67 0601 cmpis $ACC0, #0x01 - 0f68 0295 0f72 jz 0x0f72 // if (mem16[0x0307] == 1) handle looping; - 0f6a 0e00 lris $AC0.M, #0x00 - 0f6b 00fe 02d8 sr @0x02d8, $AC0.M // else stop the sound; - 0f6d 0082 0ce9 lri $AR2, #0x0ce9 - 0f6f 1fcd mrr $AC0.M, $ST1 - 0f70 1f8d mrr $AC0.L, $ST1 - 0f71 02ff rti - - // Looping handling - 0f72 00de 02d9 lr $AC0.M, @0x02d9 - 0f74 0601 cmpis $ACC0, #0x01 - 0f75 0295 0f83 jz 0x0f83 // if (mem16[0x02D9] == 1) handle stream; - // reload pred scale, yn1 and yn2 from the PB - // the address will be automatically reloaded by the accelerator - 0f77 00de 032a lr $AC0.M, @0x032a - 0f79 2eda srs @pred_scale, $AC0.M - 0f7a 00de 032b lr $AC0.M, @0x032b - 0f7c 2edb srs @yn1, $AC0.M - 0f7d 00de 032c lr $AC0.M, @0x032c - 0f7f 2edc srs @yn2, $AC0.M - 0f80 1fcd mrr $AC0.M, $ST1 - 0f81 1f8d mrr $AC0.L, $ST1 - 0f82 02ff rti - - // Stream handling - // reload pred_scale from the PB - 0f83 00de 032a lr $AC0.M, @0x032a - 0f85 2eda srs @pred_scale, $AC0.M - // ??? - reload the yn1 and yn2 from... themselves - 0f86 26db lrs $AC0.M, @yn1 - 0f87 2edb srs @yn1, $AC0.M - 0f88 26dc lrs $AC0.M, @yn2 - 0f89 2edc srs @yn2, $AC0.M - 0f8a 1fcd mrr $AC0.M, $ST1 - 0f8b 1f8d mrr $AC0.L, $ST1 - 0f8c 02ff rti -} - -void 0f8d_Int6_Handler() { - 0f8d 0000 nop - 0f8e 0000 nop - 0f8f 0000 nop - 0f90 0000 nop - 0f91 02ff rti -} - -void 0f92_Int7_Handler() { - 0f92 0000 nop - 0f93 0000 nop - 0f94 0000 nop - 0f95 0000 nop - 0f96 02ff rti -} - -// action jump table - 0f97 0fa9 // Action 0 - restart - 0f98 0fac // Action 1 - dump DRAM and jump into iROM where new IRAM and DRAM can be uploaded - 0f99 0fe4 // Action 2 - soft reset - 0f9a 0fe7 // Action 3 - jump back to main loop - -// called at AXList end; wait for a last mail and take an action -// Note: the same thing can be found in Zelda ucode. It's called after DsyncFrame. -// Probably debugging stuff. -{ - 0f9b 8e00 set16 - 0f9c 8100 clr $ACC0 - 0f9d 8900 clr $ACC1 - 0f9e 02bf 0fea call 0x0fea // wait for the mail; the high part is likely 0xCDD1 as for Zelda - 0fa0 27ff lrs $AC1.M, @CMBL // the low part of the mail tells the action to take - 0fa1 009e 0f97 lri $AC0.M, #0x0f97 - 0fa3 4c00 add $ACC0, $ACC1 - 0fa4 1c7e mrr $AR3, $AC0.M - 0fa5 0313 ilrr $AC1.M, @$AR3 - 0fa6 1c7f mrr $AR3, $AC1.M - 0fa7 176f jmpr $AR3 // take the action! - 0fa8 0021 halt -} - -//ACTION 0 (0xCDD10000) -{ - 0fa9 029f 0037 jmp 0037_Unk_Restart() - 0fab 0021 halt -} - -//ACTION 1 (0xCDD10001) -{ - 0fac 8100 clr $ACC0 - 0fad 8900 clr $ACC1 - 0fae 02bf 0fea call 0x0fea - 0fb0 24ff lrs $AC0.L, @CMBL - 0fb1 02bf 0ff0 call 0x0ff0 - 0fb3 25ff lrs $AC1.L, @CMBL - 0fb4 02bf 0ff0 call 0x0ff0 - 0fb6 27ff lrs $AC1.M, @CMBL - 0fb7 2ece srs @DSMAH, $AC0.M - 0fb8 2ccf srs @DSMAL, $AC0.L - 0fb9 16c9 0001 si @DSCR, #0x0001 // DMEM->CPU - 0fbb 2fcd srs @DSPA, $AC1.M - 0fbc 2dcb srs @DSBL, $AC1.L - 0fbd 8100 clr $ACC0 - 0fbe 8900 clr $ACC1 - 0fbf 02bf 0fea call 0x0fea -//prepare addr-s/length/dsp-PC for new IRAM/DRAM - 0fc1 24ff lrs $AC0.L, @CMBL - 0fc2 1c9e mrr $IX0, $AC0.M - 0fc3 1cbc mrr $IX1, $AC0.L - 0fc4 02bf 0ff0 call 0x0ff0 - 0fc6 25ff lrs $AC1.L, @CMBL - 0fc7 02bf 0ff0 call 0x0ff0 - 0fc9 27ff lrs $AC1.M, @CMBL - 0fca 1cdf mrr $IX2, $AC1.M - 0fcb 1cfd mrr $IX3, $AC1.L - 0fcc 8100 clr $ACC0 - 0fcd 02bf 0fea call 0x0fea - 0fcf 26ff lrs $AC0.M, @CMBL - 0fd0 1c1e mrr $AR0, $AC0.M - 0fd1 8900 clr $ACC1 - 0fd2 02bf 0ff0 call 0x0ff0 - 0fd4 20ff lrs $AX0.L, @CMBL - 0fd5 1f5f mrr $AX0.H, $AC1.M - 0fd6 02bf 0fea call 0x0fea - 0fd8 21ff lrs $AX1.L, @CMBL - 0fd9 02bf 0fea call 0x0fea - 0fdb 23ff lrs $AX1.H, @CMBL -// - 0fdc 26c9 lrs $AC0.M, @DSCR - 0fdd 02a0 0004 andf $AC0.M, #0x0004 - 0fdf 029c 0fdc jlnz 0x0fdc - 0fe1 029f 80b5 jmp 0x80b5 // 80b5_BootUcode() - 0fe3 0021 halt -} - -//ACTION 2 (0xCDD10002) -{ - 0fe4 029f 8000 jmp 0x8000 - 0fe6 0021 halt -} - -//ACTION 3 (0xCDD10003) -{ - 0fe7 029f 004c jmp 0x004c - 0fe9 0021 halt -} - -{ - 0fea 26fe lrs $AC0.M, @CMBH - 0feb 02c0 8000 andcf $AC0.M, #0x8000 - 0fed 029c 0fea jlnz 0x0fea - 0fef 02df ret -} - -{ - 0ff0 27fe lrs $AC1.M, @CMBH - 0ff1 03c0 8000 andcf $AC1.M, #0x8000 - 0ff3 029c 0ff0 jlnz 0x0ff0 - 0ff5 02df ret -} - - 0ff6 0000 nop - 0ff7 0000 nop - 0ff8 0000 nop - 0ff9 0000 nop - 0ffa 0000 nop - 0ffb 0000 nop - 0ffc 0000 nop - 0ffd 0000 nop - 0ffe 0000 nop - 0fff 0000 nop +// Memory map: +// 0x0C00: current AXList + + +// Voice PB structure: +// the current PB is stored at 0x02D0 +// offsets and sizes are counted in words +// +// Offset Size Desription +// 0x000 2 Address of the next PB +// 0x002 2 Address of this PB +// 0x004 1 Sample rate converter (0-2) +// 0x005 1 Coef select (0-2: 0x1000, 0x1200, 0x1400) +// 0x006 2 Selects entries in 4 tables (19 bits used) +// 0x008 1 Play/stop flag (1=play, 0=stop) +// 0x022 1 Initial time delay enable +// 0x023 2 Initial time delay data + + + 0000 0000 nop + 0001 0000 nop + +// Exception jump table + 0002 029f 0f3c jmp 0x0f3c + 0004 029f 0f48 jmp 0x0f48 + 0006 029f 0f4d jmp 0x0f4d + 0008 029f 0f5c jmp 0x0f5c + 000a 029f 0f61 jmp 0x0f61 + 000c 029f 0f8d jmp 0x0f8d + 000e 029f 0f92 jmp 0x0f92 + +// Entry point +void 0010_Entry() { + 0010 1302 sbset #0x02 + 0011 1303 sbset #0x03 + 0012 1204 sbclr #0x04 + 0013 1305 sbset #0x05 + 0014 1306 sbset #0x06 + 0015 8e00 set16 + 0016 8c00 clr15 + 0017 8b00 m0 + 0018 0092 00ff lri $CR, #0x00ff + 001a 009e 8000 lri $AC0.M, #0x8000 + 001c 00fe 0ce5 sr @0x0ce5, $AC0.M + 001e 009e 8000 lri $AC0.M, #0x8000 + 0020 00fe 0ce6 sr @0x0ce6, $AC0.M + 0022 00fe 0ce7 sr @0x0ce7, $AC0.M + 0024 00fe 0ce8 sr @0x0ce8, $AC0.M + 0026 8100 clr $ACC0 + 0027 00fe 0ce9 sr @0x0ce9, $AC0.M + 0029 8900 clr $ACC1 + 002a 16fc dcd1 si @DMBH, #0xdcd1 + 002c 16fd 0000 si @DMBL, #0x0000 + 002e 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10000 and trigger an IRQ + 0030 26fc lrs $AC0.M, @DMBH + 0031 02a0 8000 andf $AC0.M, #0x8000 + 0033 029c 0030 jlnz 0x0030 // wait until the mail is received by CPU + 0035 029f 004c jmp 0x004c // enter the main loop +} + +void 0037_Unk_Restart() { + 0037 1302 sbset #0x02 + 0038 1303 sbset #0x03 + 0039 1204 sbclr #0x04 + 003a 1305 sbset #0x05 + 003b 1306 sbset #0x06 + 003c 8e00 set16 + 003d 8c00 clr15 + 003e 8b00 m0 + 003f 0092 00ff lri $CR, #0x00ff + 0041 16fc dcd1 si @DMBH, #0xdcd1 + 0043 16fd 0001 si @DMBL, #0x0001 + 0045 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10001 and trigger an IRQ + 0047 26fc lrs $AC0.M, @DMBH + 0048 02a0 8000 andf $AC0.M, #0x8000 + 004a 029c 0047 jlnz 0x0047 // wait until the mail is received by CPU + +// main loop + 004c 8e00 set16 + 004d 8100 clr $ACC0 + 004e 8900 clr $ACC1 + 004f 009f babe lri $AC1.M, #0xbabe + 0051 26fe lrs $AC0.M, @CMBH + 0052 02c0 8000 andcf $AC0.M, #0x8000 + 0054 029c 0051 jlnz 0x0051 // wait until we get a new mail from CPU + 0056 8200 cmp + 0057 0294 0051 jnz 0x0051 // discard it if it's not a 0xBABE---- (AXList begin) + 0059 23ff lrs $AX1.H, @CMBL // AX1.H = low part of 0xBABE---- mail = length of list in bytes + 005a 8100 clr $ACC0 + 005b 26fe lrs $AC0.M, @CMBH + 005c 02c0 8000 andcf $AC0.M, #0x8000 + 005e 029c 005b jlnz 0x005b // wait until the next mail + 0060 27ff lrs $AC1.M, @CMBL + 0061 0240 7fff andi $AC0.M, #0x7fff // AC0.M = address high part, AC1.M = address low part + 0063 2ece srs @DSMAH, $AC0.M + 0064 2fcf srs @DSMAL, $AC1.M + 0065 16cd 0c00 si @DSPA, #0x0c00 + 0067 8100 clr $ACC0 + 0068 2ec9 srs @DSCR, $AC0.M + 0069 1ffb mrr $AC1.M, $AX1.H // Transfer the AXList (DMA) + 006a 2fcb srs @DSBL, $AC1.M // DMA transfer from main memory (addr = second mail) to 0x0C00, len = low part of first mail + 006b 02bf 0084 call 0084_WaitForDMACompletion() + 006d 0080 0c00 lri $AR0, #0x0c00 // AR0 = 0x0C00 +} // continues into next function + +void 006f_MailHandler() { + 006f 8e00 set16 + 0070 8100 clr $ACC0 + 0071 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0072 b100 tst $ACC0 + 0073 0291 0080 jl 0x0080 + 0075 0a0e lris $AX0.H, #0x0e + 0076 c100 cmpar $ACC0, $AX0.H + 0077 0292 0080 jg 0x0080 // die if command number is higher than 0xE + 0079 009f 0d04 lri $AC1.M, #0x0d04 + 007b 4c00 add $ACC0, $ACC1 + 007c 1c7e mrr $AR3, $AC0.M + 007d 0213 ilrr $AC0.M, @$AR3 + 007e 1c7e mrr $AR3, $AC0.M // func at [0x0D04 + cmd_num] + 007f 176f jmpr $AR3 // Jump to command func: AR0 = 0x0C01. Okay. + AC0.M = + AC1.M = 0x0D04. Not interesting either. +} + +void 0080_Die() { + 0080 16fc baad si @DMBH, #0xbaad + 0082 2efd srs @DMBL, $AC0.M + 0083 0021 halt +} + +void 0084_WaitForDMACompletion() { + 0084 26c9 lrs $AC0.M, @DSCR + 0085 02a0 0004 andf $AC0.M, #0x0004 + 0087 029c 0084 jlnz 0x0084 + 0089 02df ret +} + +void 008a_Cmd_0() { + 008a 8100 clr $ACC0 + 008b 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 008c 8e78 set16'l : $AC1.M, @$AR0 + 008d 2ece srs @DSMAH, $AC0.M + 008e 2fcf srs @DSMAL, $AC1.M + 008f 16cd 0d08 si @DSPA, #0x0d08 + 0091 16c9 0000 si @DSCR, #0x0000 + 0093 16cb 0078 si @DSBL, #0x0078 + 0095 0081 0d08 lri $AR1, #0x0d08 + 0097 0082 0000 lri $AR2, #0x0000 + 0099 009b 005f lri $AX1.H, #0x005f + 009b 009a 00c0 lri $AX0.H, #0x00c0 + 009d 8100 clr $ACC0 + 009e 8900 clr $ACC1 + 009f 8f00 set40 + 00a0 02bf 0084 call 0084_WaitForDMACompletion() + 00a2 193e lrri $AC0.M, @$AR1 + 00a3 193c lrri $AC0.L, @$AR1 + 00a4 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 00a5 0294 00ab jnz 0x00ab + 00a7 005a loop $AX0.H + 00a8 1b5e srri @$AR2, $AC0.M + 00a9 029f 00b3 jmp 0x00b3 + 00ab 9900 asr16 $ACC1 + 00ac 1b5e srri @$AR2, $AC0.M + 00ad 1b5c srri @$AR2, $AC0.L + 00ae 007b 00b2 bloop $AX1.H, 0x00b2 + 00b0 4c00 add $ACC0, $ACC1 + 00b1 1b5e srri @$AR2, $AC0.M + 00b2 1b5c srri @$AR2, $AC0.L + 00b3 0082 00c0 lri $AR2, #0x00c0 + 00b5 193e lrri $AC0.M, @$AR1 + 00b6 193c lrri $AC0.L, @$AR1 + 00b7 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 00b8 0294 00be jnz 0x00be + 00ba 005a loop $AX0.H + 00bb 1b5e srri @$AR2, $AC0.M + 00bc 029f 00c6 jmp 0x00c6 + 00be 9900 asr16 $ACC1 + 00bf 1b5e srri @$AR2, $AC0.M + 00c0 1b5c srri @$AR2, $AC0.L + 00c1 007b 00c5 bloop $AX1.H, 0x00c5 + 00c3 4c00 add $ACC0, $ACC1 + 00c4 1b5e srri @$AR2, $AC0.M + 00c5 1b5c srri @$AR2, $AC0.L + 00c6 0082 0180 lri $AR2, #0x0180 + 00c8 193e lrri $AC0.M, @$AR1 + 00c9 193c lrri $AC0.L, @$AR1 + 00ca b179 tst'l $ACC0 : $AC1.M, @$AR1 + 00cb 0294 00d1 jnz 0x00d1 + 00cd 005a loop $AX0.H + 00ce 1b5e srri @$AR2, $AC0.M + 00cf 029f 00d9 jmp 0x00d9 + 00d1 9900 asr16 $ACC1 + 00d2 1b5e srri @$AR2, $AC0.M + 00d3 1b5c srri @$AR2, $AC0.L + 00d4 007b 00d8 bloop $AX1.H, 0x00d8 + 00d6 4c00 add $ACC0, $ACC1 + 00d7 1b5e srri @$AR2, $AC0.M + 00d8 1b5c srri @$AR2, $AC0.L + 00d9 0082 0400 lri $AR2, #0x0400 + 00db 193e lrri $AC0.M, @$AR1 + 00dc 193c lrri $AC0.L, @$AR1 + 00dd b179 tst'l $ACC0 : $AC1.M, @$AR1 + 00de 0294 00e4 jnz 0x00e4 + 00e0 005a loop $AX0.H + 00e1 1b5e srri @$AR2, $AC0.M + 00e2 029f 00ec jmp 0x00ec + 00e4 9900 asr16 $ACC1 + 00e5 1b5e srri @$AR2, $AC0.M + 00e6 1b5c srri @$AR2, $AC0.L + 00e7 007b 00eb bloop $AX1.H, 0x00eb + 00e9 4c00 add $ACC0, $ACC1 + 00ea 1b5e srri @$AR2, $AC0.M + 00eb 1b5c srri @$AR2, $AC0.L + 00ec 0082 04c0 lri $AR2, #0x04c0 + 00ee 193e lrri $AC0.M, @$AR1 + 00ef 193c lrri $AC0.L, @$AR1 + 00f0 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 00f1 0294 00f7 jnz 0x00f7 + 00f3 005a loop $AX0.H + 00f4 1b5e srri @$AR2, $AC0.M + 00f5 029f 00ff jmp 0x00ff + 00f7 9900 asr16 $ACC1 + 00f8 1b5e srri @$AR2, $AC0.M + 00f9 1b5c srri @$AR2, $AC0.L + 00fa 007b 00fe bloop $AX1.H, 0x00fe + 00fc 4c00 add $ACC0, $ACC1 + 00fd 1b5e srri @$AR2, $AC0.M + 00fe 1b5c srri @$AR2, $AC0.L + 00ff 0082 0580 lri $AR2, #0x0580 + 0101 193e lrri $AC0.M, @$AR1 + 0102 193c lrri $AC0.L, @$AR1 + 0103 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0104 0294 010a jnz 0x010a + 0106 005a loop $AX0.H + 0107 1b5e srri @$AR2, $AC0.M + 0108 029f 0112 jmp 0x0112 + 010a 9900 asr16 $ACC1 + 010b 1b5e srri @$AR2, $AC0.M + 010c 1b5c srri @$AR2, $AC0.L + 010d 007b 0111 bloop $AX1.H, 0x0111 + 010f 4c00 add $ACC0, $ACC1 + 0110 1b5e srri @$AR2, $AC0.M + 0111 1b5c srri @$AR2, $AC0.L + 0112 0082 0640 lri $AR2, #0x0640 + 0114 193e lrri $AC0.M, @$AR1 + 0115 193c lrri $AC0.L, @$AR1 + 0116 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0117 0294 011d jnz 0x011d + 0119 005a loop $AX0.H + 011a 1b5e srri @$AR2, $AC0.M + 011b 029f 0125 jmp 0x0125 + 011d 9900 asr16 $ACC1 + 011e 1b5e srri @$AR2, $AC0.M + 011f 1b5c srri @$AR2, $AC0.L + 0120 007b 0124 bloop $AX1.H, 0x0124 + 0122 4c00 add $ACC0, $ACC1 + 0123 1b5e srri @$AR2, $AC0.M + 0124 1b5c srri @$AR2, $AC0.L + 0125 0082 0700 lri $AR2, #0x0700 + 0127 193e lrri $AC0.M, @$AR1 + 0128 193c lrri $AC0.L, @$AR1 + 0129 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 012a 0294 0130 jnz 0x0130 + 012c 005a loop $AX0.H + 012d 1b5e srri @$AR2, $AC0.M + 012e 029f 0138 jmp 0x0138 + 0130 9900 asr16 $ACC1 + 0131 1b5e srri @$AR2, $AC0.M + 0132 1b5c srri @$AR2, $AC0.L + 0133 007b 0137 bloop $AX1.H, 0x0137 + 0135 4c00 add $ACC0, $ACC1 + 0136 1b5e srri @$AR2, $AC0.M + 0137 1b5c srri @$AR2, $AC0.L + 0138 0082 07c0 lri $AR2, #0x07c0 + 013a 193e lrri $AC0.M, @$AR1 + 013b 193c lrri $AC0.L, @$AR1 + 013c b179 tst'l $ACC0 : $AC1.M, @$AR1 + 013d 0294 0143 jnz 0x0143 + 013f 005a loop $AX0.H + 0140 1b5e srri @$AR2, $AC0.M + 0141 029f 014b jmp 0x014b + 0143 9900 asr16 $ACC1 + 0144 1b5e srri @$AR2, $AC0.M + 0145 1b5c srri @$AR2, $AC0.L + 0146 007b 014a bloop $AX1.H, 0x014a + 0148 4c00 add $ACC0, $ACC1 + 0149 1b5e srri @$AR2, $AC0.M + 014a 1b5c srri @$AR2, $AC0.L + 014b 0082 0880 lri $AR2, #0x0880 + 014d 193e lrri $AC0.M, @$AR1 + 014e 193c lrri $AC0.L, @$AR1 + 014f b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0150 0294 0156 jnz 0x0156 + 0152 005a loop $AX0.H + 0153 1b5e srri @$AR2, $AC0.M + 0154 029f 015e jmp 0x015e + 0156 9900 asr16 $ACC1 + 0157 1b5e srri @$AR2, $AC0.M + 0158 1b5c srri @$AR2, $AC0.L + 0159 007b 015d bloop $AX1.H, 0x015d + 015b 4c00 add $ACC0, $ACC1 + 015c 1b5e srri @$AR2, $AC0.M + 015d 1b5c srri @$AR2, $AC0.L + 015e 0082 0940 lri $AR2, #0x0940 + 0160 193e lrri $AC0.M, @$AR1 + 0161 193c lrri $AC0.L, @$AR1 + 0162 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0163 0294 0169 jnz 0x0169 + 0165 005a loop $AX0.H + 0166 1b5e srri @$AR2, $AC0.M + 0167 029f 0171 jmp 0x0171 + 0169 9900 asr16 $ACC1 + 016a 1b5e srri @$AR2, $AC0.M + 016b 1b5c srri @$AR2, $AC0.L + 016c 007b 0170 bloop $AX1.H, 0x0170 + 016e 4c00 add $ACC0, $ACC1 + 016f 1b5e srri @$AR2, $AC0.M + 0170 1b5c srri @$AR2, $AC0.L + 0171 0082 0a00 lri $AR2, #0x0a00 + 0173 193e lrri $AC0.M, @$AR1 + 0174 193c lrri $AC0.L, @$AR1 + 0175 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0176 0294 017c jnz 0x017c + 0178 005a loop $AX0.H + 0179 1b5e srri @$AR2, $AC0.M + 017a 029f 0184 jmp 0x0184 + 017c 9900 asr16 $ACC1 + 017d 1b5e srri @$AR2, $AC0.M + 017e 1b5c srri @$AR2, $AC0.L + 017f 007b 0183 bloop $AX1.H, 0x0183 + 0181 4c00 add $ACC0, $ACC1 + 0182 1b5e srri @$AR2, $AC0.M + 0183 1b5c srri @$AR2, $AC0.L + 0184 009b 0011 lri $AX1.H, #0x0011 + 0186 009a 0024 lri $AX0.H, #0x0024 + 0188 0082 0240 lri $AR2, #0x0240 + 018a 193e lrri $AC0.M, @$AR1 + 018b 193c lrri $AC0.L, @$AR1 + 018c b179 tst'l $ACC0 : $AC1.M, @$AR1 + 018d 0294 0193 jnz 0x0193 + 018f 005a loop $AX0.H + 0190 1b5e srri @$AR2, $AC0.M + 0191 029f 019b jmp 0x019b + 0193 9900 asr16 $ACC1 + 0194 1b5e srri @$AR2, $AC0.M + 0195 1b5c srri @$AR2, $AC0.L + 0196 007b 019a bloop $AX1.H, 0x019a + 0198 4c00 add $ACC0, $ACC1 + 0199 1b5e srri @$AR2, $AC0.M + 019a 1b5c srri @$AR2, $AC0.L + 019b 0082 0ac0 lri $AR2, #0x0ac0 + 019d 193e lrri $AC0.M, @$AR1 + 019e 193c lrri $AC0.L, @$AR1 + 019f b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01a0 0294 01a6 jnz 0x01a6 + 01a2 005a loop $AX0.H + 01a3 1b5e srri @$AR2, $AC0.M + 01a4 029f 01ae jmp 0x01ae + 01a6 9900 asr16 $ACC1 + 01a7 1b5e srri @$AR2, $AC0.M + 01a8 1b5c srri @$AR2, $AC0.L + 01a9 007b 01ad bloop $AX1.H, 0x01ad + 01ab 4c00 add $ACC0, $ACC1 + 01ac 1b5e srri @$AR2, $AC0.M + 01ad 1b5c srri @$AR2, $AC0.L + 01ae 0082 0264 lri $AR2, #0x0264 + 01b0 193e lrri $AC0.M, @$AR1 + 01b1 193c lrri $AC0.L, @$AR1 + 01b2 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01b3 0294 01b9 jnz 0x01b9 + 01b5 005a loop $AX0.H + 01b6 1b5e srri @$AR2, $AC0.M + 01b7 029f 01c1 jmp 0x01c1 + 01b9 9900 asr16 $ACC1 + 01ba 1b5e srri @$AR2, $AC0.M + 01bb 1b5c srri @$AR2, $AC0.L + 01bc 007b 01c0 bloop $AX1.H, 0x01c0 + 01be 4c00 add $ACC0, $ACC1 + 01bf 1b5e srri @$AR2, $AC0.M + 01c0 1b5c srri @$AR2, $AC0.L + 01c1 0082 0ae4 lri $AR2, #0x0ae4 + 01c3 193e lrri $AC0.M, @$AR1 + 01c4 193c lrri $AC0.L, @$AR1 + 01c5 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01c6 0294 01cc jnz 0x01cc + 01c8 005a loop $AX0.H + 01c9 1b5e srri @$AR2, $AC0.M + 01ca 029f 01d4 jmp 0x01d4 + 01cc 9900 asr16 $ACC1 + 01cd 1b5e srri @$AR2, $AC0.M + 01ce 1b5c srri @$AR2, $AC0.L + 01cf 007b 01d3 bloop $AX1.H, 0x01d3 + 01d1 4c00 add $ACC0, $ACC1 + 01d2 1b5e srri @$AR2, $AC0.M + 01d3 1b5c srri @$AR2, $AC0.L + 01d4 0082 0288 lri $AR2, #0x0288 + 01d6 193e lrri $AC0.M, @$AR1 + 01d7 193c lrri $AC0.L, @$AR1 + 01d8 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01d9 0294 01df jnz 0x01df + 01db 005a loop $AX0.H + 01dc 1b5e srri @$AR2, $AC0.M + 01dd 029f 01e7 jmp 0x01e7 + 01df 9900 asr16 $ACC1 + 01e0 1b5e srri @$AR2, $AC0.M + 01e1 1b5c srri @$AR2, $AC0.L + 01e2 007b 01e6 bloop $AX1.H, 0x01e6 + 01e4 4c00 add $ACC0, $ACC1 + 01e5 1b5e srri @$AR2, $AC0.M + 01e6 1b5c srri @$AR2, $AC0.L + 01e7 0082 0b08 lri $AR2, #0x0b08 + 01e9 193e lrri $AC0.M, @$AR1 + 01ea 193c lrri $AC0.L, @$AR1 + 01eb b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01ec 0294 01f2 jnz 0x01f2 + 01ee 005a loop $AX0.H + 01ef 1b5e srri @$AR2, $AC0.M + 01f0 029f 01fa jmp 0x01fa + 01f2 9900 asr16 $ACC1 + 01f3 1b5e srri @$AR2, $AC0.M + 01f4 1b5c srri @$AR2, $AC0.L + 01f5 007b 01f9 bloop $AX1.H, 0x01f9 + 01f7 4c00 add $ACC0, $ACC1 + 01f8 1b5e srri @$AR2, $AC0.M + 01f9 1b5c srri @$AR2, $AC0.L + 01fa 0082 02ac lri $AR2, #0x02ac + 01fc 193e lrri $AC0.M, @$AR1 + 01fd 193c lrri $AC0.L, @$AR1 + 01fe b179 tst'l $ACC0 : $AC1.M, @$AR1 + 01ff 0294 0205 jnz 0x0205 + 0201 005a loop $AX0.H + 0202 1b5e srri @$AR2, $AC0.M + 0203 029f 020d jmp 0x020d + 0205 9900 asr16 $ACC1 + 0206 1b5e srri @$AR2, $AC0.M + 0207 1b5c srri @$AR2, $AC0.L + 0208 007b 020c bloop $AX1.H, 0x020c + 020a 4c00 add $ACC0, $ACC1 + 020b 1b5e srri @$AR2, $AC0.M + 020c 1b5c srri @$AR2, $AC0.L + 020d 0082 0b2c lri $AR2, #0x0b2c + 020f 193e lrri $AC0.M, @$AR1 + 0210 193c lrri $AC0.L, @$AR1 + 0211 b179 tst'l $ACC0 : $AC1.M, @$AR1 + 0212 0294 0218 jnz 0x0218 + 0214 005a loop $AX0.H + 0215 1b5e srri @$AR2, $AC0.M + 0216 029f 0220 jmp 0x0220 + 0218 9900 asr16 $ACC1 + 0219 1b5e srri @$AR2, $AC0.M + 021a 1b5c srri @$AR2, $AC0.L + 021b 007b 021f bloop $AX1.H, 0x021f + 021d 4c00 add $ACC0, $ACC1 + 021e 1b5e srri @$AR2, $AC0.M + 021f 1b5c srri @$AR2, $AC0.L + 0220 029f 006f jmp 006f_MailHandler() +} + +void 0222_Cmd_1() { + 0222 8100 clr $ACC0 + 0223 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0224 8e60 set16'l : $AC0.L, @$AR0 + 0225 2ece srs @DSMAH, $AC0.M + 0226 2ccf srs @DSMAL, $AC0.L + 0227 16cd 0d08 si @DSPA, #0x0d08 + 0229 16c9 0000 si @DSCR, #0x0000 + 022b 16cb 0180 si @DSBL, #0x0180 + 022d 1cc0 mrr $IX2, $AR0 + 022e 0080 0000 lri $AR0, #0x0000 + 0230 0083 00c0 lri $AR3, #0x00c0 + 0232 0081 0d08 lri $AR1, #0x0d08 + 0234 0084 ffff lri $IX0, #0xffff + 0236 1ce4 mrr $IX3, $IX0 + 0237 02bf 0084 call 0084_WaitForDMACompletion() + 0239 8f00 set40 + 023a 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 023b 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 + 023c 6800 movax $ACC0, $AX0.L + 023d 4a00 addax $ACC0, $AX1.L + 023e 191b lrri $AX1.H, @$AR0 + 023f 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M + 0240 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L + 0241 115f 0249 bloopi #0x5f, 0x0249 + 0243 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0244 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 + 0245 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M + 0246 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L + 0247 191b lrri $AX1.H, @$AR0 + 0248 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M + 0249 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L + 024a 1b1f srri @$AR0, $AC1.M + 024b 1b1d srri @$AR0, $AC1.L + 024c 1c06 mrr $AR0, $IX2 + 024d 029f 006f jmp 006f_MailHandler() +} + +void 024f_Cmd_2() { + 024f 8100 clr $ACC0 + 0250 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 0251 8e60 set16'l : $AC0.L, @$AR0 + 0252 2ece srs @DSMAH, $AC0.M + 0253 2ccf srs @DSMAL, $AC0.L + 0254 16cd 0d08 si @DSPA, #0x0d08 + 0256 16c9 0000 si @DSCR, #0x0000 + 0258 16cb 0180 si @DSBL, #0x0180 + 025a 1cc0 mrr $IX2, $AR0 + 025b 0080 0000 lri $AR0, #0x0000 + 025d 0083 00c0 lri $AR3, #0x00c0 + 025f 0081 0d08 lri $AR1, #0x0d08 + 0261 0084 ffff lri $IX0, #0xffff + 0263 1ce4 mrr $IX3, $IX0 + 0264 02bf 0084 call 0084_WaitForDMACompletion() + 0266 8f00 set40 + 0267 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0268 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 + 0269 6800 movax $ACC0, $AX0.L + 026a 4a00 addax $ACC0, $AX1.L + 026b 191b lrri $AX1.H, @$AR0 + 026c 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M + 026d 7d00 neg $ACC1 + 026e 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L + 026f 115f 0278 bloopi #0x5f, 0x0278 + 0271 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0272 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 + 0273 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M + 0274 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L + 0275 191b lrri $AX1.H, @$AR0 + 0276 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M + 0277 7d00 neg $ACC1 + 0278 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L + 0279 1b1f srri @$AR0, $AC1.M + 027a 1b1d srri @$AR0, $AC1.L + 027b 1c06 mrr $AR0, $IX2 + 027c 029f 006f jmp 006f_MailHandler() +} + +// Command 0x4 - Mixer +// Parameters: AR0 -> 0x0C01 +// AXList data: command (2), PBs address (4) +// Stores 0x140 bytes of data from the PBs address to 0x02D0. Suspicious. + +void 027e_Cmd_4_SetPBsAddress() { + 027e 8100 clr $ACC0 // ACC0 = 0, ACC1 = 0 + 027f 8970 clr'l $ACC1 : $AC0.M, @$AR0 // ACC0 = mem32[0x0C01] (the new PBs address is there) + 0280 8e60 set16'l : $AC0.L, @$AR0 // + 0281 00e0 0cd2 sr @0x0cd2, $AR0 // mem16[0x0CD2] = 0x0C03; + + +// Mixing loop - stops when the pointer to the next PB in the current PB is NULL + 0283 2ece srs @DSMAH, $AC0.M + 0284 2ccf srs @DSMAL, $AC0.L + 0285 16cd 02d0 si @DSPA, #0x02d0 + 0287 16c9 0000 si @DSCR, #0x0000 + 0289 16cb 0140 si @DSBL, #0x0140 // transfer 0x140 bytes from the current PB address to 0x02D0. aka Transfer the current PB + 028b 02bf 0084 call 0084_WaitForDMACompletion() + +// Load some values to memory [0x0CDX / 0x0CEX] + 028d 8100 clr $ACC0 + 028e 8900 clr $ACC1 + 028f 00de 02d4 lr $AC0.M, @0x02d4 // + 0291 009f 0db7 lri $AC1.M, #0x0db7 + 0293 4c00 add $ACC0, $ACC1 // mem16[0x02D4] + 0xDB7; + 0294 1c7e mrr $AR3, $AC0.M + 0295 0213 ilrr $AC0.M, @$AR3 // Sample rate converter + 0296 00fe 0cdf sr @0x0cdf, $AC0.M // mem16[0x0CDF] = iram16[0x0DB7 + mem16[0x02D4]]; + 0298 00de 02d5 lr $AC0.M, @0x02d5 + 029a 009f 0dba lri $AC1.M, #0x0dba + 029c 4c00 add $ACC0, $ACC1 + 029d 1c7e mrr $AR3, $AC0.M + 029e 0213 ilrr $AC0.M, @$AR3 // Coef select + 029f 00fe 0ce0 sr @0x0ce0, $AC0.M // mem16[0x0CE0] = iram16[0x0DBA + mem16[0x02D5]]; + 02a1 009a 001f lri $AX0.H, #0x001f + 02a3 00de 02d7 lr $AC0.M, @0x02d7 + 02a5 009f 0d13 lri $AC1.M, #0x0d13 + 02a7 3400 andr $AC0.M, $AX0.H + 02a8 4c00 add $ACC0, $ACC1 + 02a9 1c7e mrr $AR3, $AC0.M + 02aa 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table + 02ab 00fe 0cd3 sr @0x0cd3, $AC0.M // mem16[0x0CD3] = iram16[0x0D13 + (mem16[0x02D7] & 0x001F)]; (5 bits) + 02ad 00de 02d6 lr $AC0.M, @0x02d6 + 02af 009f 0d33 lri $AC1.M, #0x0d33 + 02b1 3400 andr $AC0.M, $AX0.H + 02b2 4c00 add $ACC0, $ACC1 + 02b3 1c7e mrr $AR3, $AC0.M + 02b4 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table + 02b5 00fe 0cd4 sr @0x0cd4, $AC0.M // mem16[0x0CD4] = iram16[0x0D33 + (mem16[0x02D6] & 0x001F)]; (5 bits) + 02b7 00de 02d6 lr $AC0.M, @0x02d6 + 02b9 009f 0d53 lri $AC1.M, #0x0d53 + 02bb 14fb asr $ACC0, #-5 + 02bc 3400 andr $AC0.M, $AX0.H + 02bd 4c00 add $ACC0, $ACC1 + 02be 1c7e mrr $AR3, $AC0.M + 02bf 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table + 02c0 00fe 0cd5 sr @0x0cd5, $AC0.M // mem16[0x0CD5] = iram16[0x0D53 + ((mem16[0x02D6] >> 5) & 0x001F)]; (5 bits) + 02c2 00de 02d6 lr $AC0.M, @0x02d6 + 02c4 009f 0d73 lri $AC1.M, #0x0d73 + 02c6 14f6 asr $ACC0, #-10 + 02c7 4c00 add $ACC0, $ACC1 + 02c8 1c7e mrr $AR3, $AC0.M + 02c9 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table + 02ca 00fe 0cd6 sr @0x0cd6, $AC0.M // mem16[0x0CD6] = iram16[0x0D73 + (mem16[0x02D6] >> 10)]; (6 bits) + 02cc 8100 clr $ACC0 + 02cd 00de 033c lr $AC0.M, @0x033c + 02cf 009a 0003 lri $AX0.H, #0x0003 + 02d1 009b 0db3 lri $AX1.H, #0x0db3 + 02d3 1ffe mrr $AC1.M, $AC0.M + 02d4 3500 andr $AC1.M, $AX0.H + 02d5 4700 addr $ACC1, $AX1.H + 02d6 1c7f mrr $AR3, $AC1.M + 02d7 0313 ilrr $AC1.M, @$AR3 + 02d8 00ff 0cd7 sr @0x0cd7, $AC1.M // mem16[0x0CD7] = iram16[0x0DB3 + (mem16[0x033C] & 0x0003)]; + 02da 147e lsr $ACC0, #-2 + 02db 1ffe mrr $AC1.M, $AC0.M + 02dc 3500 andr $AC1.M, $AX0.H + 02dd 4700 addr $ACC1, $AX1.H + 02de 1c7f mrr $AR3, $AC1.M + 02df 0313 ilrr $AC1.M, @$AR3 + 02e0 00ff 0cd8 sr @0x0cd8, $AC1.M // mem16[0x0CD8] = iram16[0x0DB3 + ((mem16[0x033C] >> 2) & 0x0003)]; + 02e2 147e lsr $ACC0, #-2 + 02e3 1ffe mrr $AC1.M, $AC0.M + 02e4 3500 andr $AC1.M, $AX0.H + 02e5 4700 addr $ACC1, $AX1.H + 02e6 1c7f mrr $AR3, $AC1.M + 02e7 0313 ilrr $AC1.M, @$AR3 + 02e8 00ff 0cd9 sr @0x0cd9, $AC1.M // mem16[0x0CD9] = iram16[0x0DB3 + ((mem16[0x033C] >> 4) & 0x0003)]; + 02ea 147e lsr $ACC0, #-2 + 02eb 1ffe mrr $AC1.M, $AC0.M + 02ec 3500 andr $AC1.M, $AX0.H + 02ed 4700 addr $ACC1, $AX1.H + 02ee 1c7f mrr $AR3, $AC1.M + 02ef 0313 ilrr $AC1.M, @$AR3 + 02f0 00ff 0cda sr @0x0cda, $AC1.M // mem16[0x0CDA] = iram16[0x0DB3 + ((mem16[0x033C] >> 6) & 0x0003)]; + 02f2 147e lsr $ACC0, #-2 + 02f3 1ffe mrr $AC1.M, $AC0.M + 02f4 3500 andr $AC1.M, $AX0.H + 02f5 4700 addr $ACC1, $AX1.H + 02f6 1c7f mrr $AR3, $AC1.M + 02f7 0313 ilrr $AC1.M, @$AR3 + 02f8 00ff 0cdb sr @0x0cdb, $AC1.M // mem16[0x0CDB] = iram16[0x0DB3 + ((mem16[0x033C] >> 8) & 0x0003)]; + 02fa 147e lsr $ACC0, #-2 + 02fb 1ffe mrr $AC1.M, $AC0.M + 02fc 3500 andr $AC1.M, $AX0.H + 02fd 4700 addr $ACC1, $AX1.H + 02fe 1c7f mrr $AR3, $AC1.M + 02ff 0313 ilrr $AC1.M, @$AR3 + 0300 00ff 0cdc sr @0x0cdc, $AC1.M // mem16[0x0CDC] = iram16[0x0DB3 + ((mem16[0x033C] >> 10) & 0x0003)]; + 0302 147e lsr $ACC0, #-2 + 0303 1ffe mrr $AC1.M, $AC0.M + 0304 3500 andr $AC1.M, $AX0.H + 0305 4700 addr $ACC1, $AX1.H + 0306 1c7f mrr $AR3, $AC1.M + 0307 0313 ilrr $AC1.M, @$AR3 + 0308 00ff 0cdd sr @0x0cdd, $AC1.M // mem16[0x0CDD] = iram16[0x0DB3 + ((mem16[0x033C] >> 12) & 0x0003)]; + 030a 147e lsr $ACC0, #-2 + 030b 1ffe mrr $AC1.M, $AC0.M + 030c 3500 andr $AC1.M, $AX0.H + 030d 4700 addr $ACC1, $AX1.H + 030e 1c7f mrr $AR3, $AC1.M + 030f 0313 ilrr $AC1.M, @$AR3 + 0310 00ff 0cde sr @0x0cde, $AC1.M // mem16[0x0CDE] = iram16[0x0DB3 + (mem16[0x033C] >> 14)]; + + 0312 8100 clr $ACC0 + 0313 00de 02f2 lr $AC0.M, @0x02f2 + 0315 b100 tst $ACC0 + 0316 0295 0339 jz 0x0339 + + // Initial time delay - aka echo aka reverb + // The buffer is 64 bytes + // That thing may be hard to implement in HLE because the HLE sound buffer size is variable + if (mem16[0x02F2] != 0) + { + 0318 8900 clr $ACC1 + 0319 00df 02f5 lr $AC1.M, @0x02f5 + 031b 0300 0c40 addi $AC1.M, #0x0c40 + 031d 00ff 0ce2 sr @0x0ce2, $AC1.M + 031f 00df 02f6 lr $AC1.M, @0x02f6 + 0321 0300 0c40 addi $AC1.M, #0x0c40 + 0323 00ff 0ce3 sr @0x0ce3, $AC1.M + 0325 009f 0c60 lri $AC1.M, #0x0c60 + 0327 00ff 0ce1 sr @0x0ce1, $AC1.M + 0329 00de 02f3 lr $AC0.M, @0x02f3 + 032b 2ece srs @DSMAH, $AC0.M + 032c 00de 02f4 lr $AC0.M, @0x02f4 + 032e 2ecf srs @DSMAL, $AC0.M + 032f 16cd 0c40 si @DSPA, #0x0c40 + 0331 16c9 0000 si @DSCR, #0x0000 + 0333 16cb 0040 si @DSBL, #0x0040 + 0335 02bf 0084 call 0084_WaitForDMACompletion() // so yet another DMA... from mem32[0x02F3] to 0x0C40, 64 bytes + 0337 029f 0341 jmp 0x0341 + } + else + { + 0339 009f 0c60 lri $AC1.M, #0x0c60 + 033b 00ff 0ce2 sr @0x0ce2, $AC1.M + 033d 00ff 0ce3 sr @0x0ce3, $AC1.M + 033f 00ff 0ce1 sr @0x0ce1, $AC1.M + } + + 0341 8c00 clr15 + 0342 8b00 m0 + 0343 8100 clr $ACC0 + 0344 00de 02d8 lr $AC0.M, @0x02d8 + 0346 0601 cmpis $ACC0, #0x01 + 0347 0294 046a jnz 0x046a + +if (mem16[0x02D8] == 1) // if the voice is playing +{ + 0349 00c3 0cdf lr $AR3, @0x0cdf + 034b 177f callr $AR3 // call the sample rate converter + 034c 8a00 m2 // MULTIPLICATION x2 MODE ENABLED! + 034d 8100 clr $ACC0 + 034e 8900 clr $ACC1 + 034f 00de 0306 lr $AC0.M, @0x0306 // pb[0x36] + 0351 00df 0305 lr $AC1.M, @0x0305 // pb[0x35] + 0353 1f1f mrr $AX0.L, $AC1.M + 0354 4d00 add $ACC1, $ACC0 + 0355 1481 asl $ACC0, #1 + 0356 8d1e set15'mv : $AX1.H, $AC0.M + 0357 1fd8 mrr $AC0.M, $AX0.L + 0358 0098 8000 lri $AX0.L, #0x8000 + 035a 0080 0d08 lri $AR0, #0x0d08 + 035c a830 mulx's $AX0.L, $AX1.H : @$AR0, $AC0.M + 035d 112f 0360 bloopi #0x2f, 0x0360 + 035f ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + 0360 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M + 0361 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M + 0362 00fe 0305 sr @0x0305, $AC0.M + 0364 8f00 set40 + 0365 0080 0d08 lri $AR0, #0x0d08 + 0367 00c1 0ce1 lr $AR1, @0x0ce1 + 0369 1c61 mrr $AR3, $AR1 + 036a 193a lrri $AX0.H, @$AR1 + 036b 1919 lrri $AX1.L, @$AR0 + 036c b051 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR1 + 036d 1919 lrri $AX1.L, @$AR0 + 036e 115e 0371 bloopi #0x5e, 0x0371 + 0370 b651 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR1 + 0371 8090 nx'ls : $AX1.L, $AC0.M + 0372 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0373 6e33 movp's $ACC0 : @$AR3, $AC0.M + 0374 1b7e srri @$AR3, $AC0.M + 0375 00de 032d lr $AC0.M, @0x032d + 0377 b100 tst $ACC0 + 0378 0295 0381 jz 0x0381 + 037a 00c0 0ce1 lr $AR0, @0x0ce1 + 037c 1c20 mrr $AR1, $AR0 + 037d 0083 032e lri $AR3, #0x032e + 037f 02bf 06ab call 0x06ab + 0381 00de 0331 lr $AC0.M, @0x0331 + 0383 b100 tst $ACC0 + 0384 0295 038d jz 0x038d + 0386 0080 0332 lri $AR0, #0x0332 + 0388 00c1 0ce1 lr $AR1, @0x0ce1 + 038a 1c41 mrr $AR2, $AR1 + 038b 02bf 06c3 call 06c3_Unknown() + 038d 0080 02f9 lri $AR0, #0x02f9 + 038f 8100 clr $ACC0 + 0390 100c loopi #0x0c + 0391 1b1e srri @$AR0, $AC0.M // zero out the updates field + 0392 0080 034d lri $AR0, #0x034d + 0394 1008 loopi #0x08 + 0395 1b1e srri @$AR0, $AC0.M + 0396 00c3 0cd3 lr $AR3, @0x0cd3 // perform volume stuff + 0398 177f callr $AR3 // what a complicated volume control! + 0399 00c3 0cd4 lr $AR3, @0x0cd4 + 039b 177f callr $AR3 + 039c 00c3 0cd5 lr $AR3, @0x0cd5 + 039e 177f callr $AR3 + 039f 00c3 0cd6 lr $AR3, @0x0cd6 + 03a1 177f callr $AR3 + + 03a2 00de 033b lr $AC0.M, @0x033b + 03a4 b100 tst $ACC0 + 03a5 0295 0447 jz 0x0447 + if (mem16[0x033B] != 0) + { + 03a7 00de 035a lr $AC0.M, @0x035a + 03a9 b100 tst $ACC0 + 03aa 0295 03c4 jz 0x03c4 + if (mem16[0x035A] != 0) + { + 03ac 0a02 lris $AX0.H, #0x02 + 03ad c100 cmpar $ACC0, $AX0.H + 03ae 0294 03ba jnz 0x03ba + 03b0 0080 035b lri $AR0, #0x035b + 03b2 00c1 0ce1 lr $AR1, @0x0ce1 + 03b4 0082 0d0c lri $AR2, #0x0d0c + 03b6 02bf 06c3 call 06c3_Unknown() + 03b8 029f 03cc jmp 0x03cc + 03ba 0080 0d0c lri $AR0, #0x0d0c + 03bc 00c1 0ce1 lr $AR1, @0x0ce1 + 03be 0083 035b lri $AR3, #0x035b + 03c0 02bf 06ab call 0x06ab + 03c2 029f 03cc jmp 0x03cc + } + else + { + 03c4 0080 0d0c lri $AR0, #0x0d0c + 03c6 00c1 0ce1 lr $AR1, @0x0ce1 + 03c8 1160 03cb bloopi #0x60, 0x03cb + 03ca 193f lrri $AC1.M, @$AR1 + 03cb 1b1f srri @$AR0, $AC1.M + } + 03cc 0082 0355 lri $AR2, #0x0355 + 03ce 8c00 clr15 + 03cf 8100 clr $ACC0 + 03d0 195c lrri $AC0.L, @$AR2 + 03d1 009b 0005 lri $AX1.H, #0x0005 + 03d3 0099 5555 lri $AX1.L, #0x5555 + 03d5 0080 0d08 lri $AR0, #0x0d08 + 03d7 1104 03da bloopi #0x04, 0x03da + 03d9 195f lrri $AC1.M, @$AR2 + 03da 1b1f srri @$AR0, $AC1.M + 03db 0081 0cc0 lri $AR1, #0x0cc0 + 03dd 0084 0d08 lri $IX0, #0x0d08 + 03df 0087 1000 lri $IX3, #0x1000 + 03e1 1112 03f2 bloopi #0x12, 0x03f2 + 03e3 4a00 addax $ACC0, $AX1.L + 03e4 1c1e mrr $AR0, $AC0.M + 03e5 0010 addarn $AR0, $IX0 + 03e6 8900 clr $ACC1 + 03e7 1fbc mrr $AC1.L, $AC0.L + 03e8 1577 lsr $ACC1, #-9 + 03e9 1512 lsl $ACC1, #18 + 03ea 1c7f mrr $AR3, $AC1.M + 03eb 001f addarn $AR3, $IX3 + 03ec 80c3 nx'ld : $AX0.L, $AX1.L, @$AR3 + 03ed 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 03ee 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 + 03ef 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 + 03f0 9500 mulac $AX0.L, $AX0.H, $ACC1 + 03f1 4f00 addp $ACC1 + 03f2 1b3f srri @$AR1, $AC1.M + 03f3 0004 dar $AR0 + 03f4 0006 dar $AR2 + 03f5 189f lrrd $AC1.M, @$AR0 + 03f6 1adf srrd @$AR2, $AC1.M + 03f7 189f lrrd $AC1.M, @$AR0 + 03f8 1adf srrd @$AR2, $AC1.M + 03f9 189f lrrd $AC1.M, @$AR0 + 03fa 1adf srrd @$AR2, $AC1.M + 03fb 189f lrrd $AC1.M, @$AR0 + 03fc 1adf srrd @$AR2, $AC1.M + 03fd 1adc srrd @$AR2, $AC0.L + 03fe 8d00 set15 + 03ff 0081 033d lri $AR1, #0x033d + 0401 0082 0240 lri $AR2, #0x0240 + 0403 00c3 0cd7 lr $AR3, @0x0cd7 + 0405 177f callr $AR3 + 0406 00f8 034d sr @0x034d, $AX0.L + 0408 0081 033f lri $AR1, #0x033f + 040a 0082 0ac0 lri $AR2, #0x0ac0 + 040c 00c3 0cd8 lr $AR3, @0x0cd8 + 040e 177f callr $AR3 + 040f 00f8 0351 sr @0x0351, $AX0.L + 0411 0081 0341 lri $AR1, #0x0341 + 0413 0082 0264 lri $AR2, #0x0264 + 0415 00c3 0cd9 lr $AR3, @0x0cd9 + 0417 177f callr $AR3 + 0418 00f8 034e sr @0x034e, $AX0.L + 041a 0081 0343 lri $AR1, #0x0343 + 041c 0082 0ae4 lri $AR2, #0x0ae4 + 041e 00c3 0cda lr $AR3, @0x0cda + 0420 177f callr $AR3 + 0421 00f8 0352 sr @0x0352, $AX0.L + 0423 0081 0345 lri $AR1, #0x0345 + 0425 0082 0288 lri $AR2, #0x0288 + 0427 00c3 0cdb lr $AR3, @0x0cdb + 0429 177f callr $AR3 + 042a 00f8 034f sr @0x034f, $AX0.L + 042c 0081 0347 lri $AR1, #0x0347 + 042e 0082 0b08 lri $AR2, #0x0b08 + 0430 00c3 0cdc lr $AR3, @0x0cdc + 0432 177f callr $AR3 + 0433 00f8 0353 sr @0x0353, $AX0.L + 0435 0081 0349 lri $AR1, #0x0349 + 0437 0082 02ac lri $AR2, #0x02ac + 0439 00c3 0cdd lr $AR3, @0x0cdd + 043b 177f callr $AR3 + 043c 00f8 0350 sr @0x0350, $AX0.L + 043e 0081 034b lri $AR1, #0x034b + 0440 0082 0b2c lri $AR2, #0x0b2c + 0442 00c3 0cde lr $AR3, @0x0cde + 0444 177f callr $AR3 + 0445 00f8 0354 sr @0x0354, $AX0.L + } + 0447 00de 02f2 lr $AC0.M, @0x02f2 + 0449 b100 tst $ACC0 + 044a 0295 046a jz 0x046a + 044c 00de 02f5 lr $AC0.M, @0x02f5 + 044e 00df 02f7 lr $AC1.M, @0x02f7 + 0450 8200 cmp + 0451 0293 0456 jle 0x0456 + 0453 7800 decm $AC0.M + 0454 029f 0459 jmp 0x0459 + 0456 0295 0459 jz 0x0459 + 0458 7400 incm $AC0.M + 0459 00fe 02f5 sr @0x02f5, $AC0.M + 045b 00de 02f6 lr $AC0.M, @0x02f6 + 045d 00df 02f8 lr $AC1.M, @0x02f8 + 045f 8200 cmp + 0460 0293 0465 jle 0x0465 + 0462 7800 decm $AC0.M + 0463 029f 0468 jmp 0x0468 + 0465 0295 0468 jz 0x0468 + 0467 7400 incm $AC0.M + + 0468 00fe 02f6 sr @0x02f6, $AC0.M + 046a 8e00 set16 +} + + 046b 8100 clr $ACC0 + 046c 00de 02f2 lr $AC0.M, @0x02f2 + 046e b100 tst $ACC0 + 046f 0295 047f jz 0x047f + 0471 00de 02f3 lr $AC0.M, @0x02f3 + 0473 00dc 02f4 lr $AC0.L, @0x02f4 + 0475 2ece srs @DSMAH, $AC0.M + 0476 2ccf srs @DSMAL, $AC0.L + 0477 16cd 0ca0 si @DSPA, #0x0ca0 + 0479 16c9 0001 si @DSCR, #0x0001 + 047b 16cb 0040 si @DSBL, #0x0040 + 047d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x0CA0 to mem32[0x02F3], 64 bytes + + 047f 8100 clr $ACC0 + 0480 8900 clr $ACC1 + 0481 00de 02d2 lr $AC0.M, @0x02d2 + 0483 00df 02d3 lr $AC1.M, @0x02d3 + 0485 2ece srs @DSMAH, $AC0.M + 0486 2fcf srs @DSMAL, $AC1.M + 0487 16cd 02d0 si @DSPA, #0x02d0 + 0489 16c9 0001 si @DSCR, #0x0001 + 048b 16cb 0140 si @DSBL, #0x0140 + 048d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x02D0 to mem32[0x02D2], 0x140 bytes + 048f 8100 clr $ACC0 + 0490 00de 02d0 lr $AC0.M, @0x02d0 + 0492 00dc 02d1 lr $AC0.L, @0x02d1 + 0494 b100 tst $ACC0 + 0495 0294 0283 jnz 0x0283 // if (mem32[0x02D0] != 0) do the whole thing again; + + 0497 00c0 0cd2 lr $AR0, @0x0cd2 // restore AR0; + 0499 029f 006f jmp 006f_MailHandler() +} + + +void 049b_Cmd_5() { + 049b 8e00 set16 + 049c 00c4 0ce6 lr $IX0, @0x0ce6 + 049e 1905 lrri $IX1, @$AR0 + 049f 00e5 0ce6 sr @0x0ce6, $IX1 + 04a1 0086 0400 lri $IX2, #0x0400 + 04a3 8100 clr $ACC0 + 04a4 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 04a5 191c lrri $AC0.L, @$AR0 + 04a6 2ece srs @DSMAH, $AC0.M + 04a7 2ccf srs @DSMAL, $AC0.L + 04a8 1fc6 mrr $AC0.M, $IX2 + 04a9 2ecd srs @DSPA, $AC0.M + 04aa 16c9 0001 si @DSCR, #0x0001 + 04ac 16cb 0480 si @DSBL, #0x0480 + 04ae 02bf 0084 call 0084_WaitForDMACompletion() + 04b0 02bf 04e6 call 0x04e6 + 04b2 029f 006f jmp 006f_MailHandler() +} + +void 04b4_Cmd_6() { + 04b4 8e00 set16 + 04b5 00c4 0ce7 lr $IX0, @0x0ce7 + 04b7 1905 lrri $IX1, @$AR0 + 04b8 00e5 0ce7 sr @0x0ce7, $IX1 + 04ba 0086 0640 lri $IX2, #0x0640 + 04bc 8100 clr $ACC0 + 04bd 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 04be 191c lrri $AC0.L, @$AR0 + 04bf 2ece srs @DSMAH, $AC0.M + 04c0 2ccf srs @DSMAL, $AC0.L + 04c1 1fc6 mrr $AC0.M, $IX2 + 04c2 2ecd srs @DSPA, $AC0.M + 04c3 16c9 0001 si @DSCR, #0x0001 + 04c5 16cb 0480 si @DSBL, #0x0480 + 04c7 02bf 0084 call 0084_WaitForDMACompletion() + 04c9 02bf 04e6 call 0x04e6 + 04cb 029f 006f jmp 006f_MailHandler() +} + +// Command #7 - Set output buffer address +// AXList data: +// - command (2) +// - something (2) +// - Left/Right(?) output buffer address (4) +// - Right/Left(?) output buffer address (4) +// +void 04cd_Cmd_7() { + 04cd 8e00 set16 + 04ce 00c4 0ce8 lr $IX0, @0x0ce8 + 04d0 1905 lrri $IX1, @$AR0 + 04d1 00e5 0ce8 sr @0x0ce8, $IX1 // mem16[0x0CE8] = mem16[0x0C01]; + 04d3 0086 0880 lri $IX2, #0x0880 + 04d5 8100 clr $ACC0 + 04d6 8970 clr'l $ACC1 : $AC0.M, @$AR0 + 04d7 191c lrri $AC0.L, @$AR0 + 04d8 2ece srs @DSMAH, $AC0.M + 04d9 2ccf srs @DSMAL, $AC0.L + 04da 1fc6 mrr $AC0.M, $IX2 + 04db 2ecd srs @DSPA, $AC0.M + 04dc 16c9 0001 si @DSCR, #0x0001 + 04de 16cb 0480 si @DSBL, #0x0480 // dma from 0x0880 to mem32[0x0C02], 1152 bytes. + 04e0 02bf 0084 call 0084_WaitForDMACompletion() + 04e2 02bf 04e6 call 0x04e6 + 04e4 029f 006f jmp 006f_MailHandler() +} + +void 04e6_Unk() { + 04e6 8b00 m0 + 04e7 8100 clr $ACC0 + 04e8 1fc4 mrr $AC0.M, $IX0 + 04e9 1fe5 mrr $AC1.M, $IX1 + 04ea 5d00 sub $ACC1, $ACC0 + 04eb 009a 02ab lri $AX0.H, #0x02ab + 04ed 009b 02aa lri $AX1.H, #0x02aa + 04ef 0081 0d08 lri $AR1, #0x0d08 + 04f1 d000 mulc $AC1.M, $AX0.H + 04f2 d400 mulcac $AC1.M, $AX0.H, $ACC0 + 04f3 111f 04f7 bloopi #0x1f, 0x04f7 + 04f5 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 04f6 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 04f7 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 04f8 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 04f9 4e31 addp's $ACC0 : @$AR1, $AC0.M + 04fa 1b25 srri @$AR1, $IX1 + 04fb 8e00 set16 + 04fc 191f lrri $AC1.M, @$AR0 + 04fd 191d lrri $AC1.L, @$AR0 + 04fe 2fce srs @DSMAH, $AC1.M + 04ff 2dcf srs @DSMAL, $AC1.L + 0500 8900 clr $ACC1 + 0501 1fa6 mrr $AC1.L, $IX2 + 0502 2dcd srs @DSPA, $AC1.L + 0503 16c9 0000 si @DSCR, #0x0000 + 0505 16cb 0480 si @DSBL, #0x0480 + 0507 02bf 0084 call 0084_WaitForDMACompletion() + 0509 00e0 0cd2 sr @0x0cd2, $AR0 + 050b 8f00 set40 + 050c 8d00 set15 + 050d 8a00 m2 + 050e 0080 0d08 lri $AR0, #0x0d08 + 0510 0081 0000 lri $AR1, #0x0000 + 0512 1c41 mrr $AR2, $AR1 + 0513 1c66 mrr $AR3, $IX2 + 0514 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0515 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0516 a000 mulx $AX0.L, $AX1.L + 0517 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0518 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 0519 4e00 addp $ACC0 + 051a 4800 addax $ACC0, $AX0.L + 051b 112f 052a bloopi #0x2f, 0x052a + 051d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 051e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 051f a000 mulx $AX0.L, $AX1.L + 0520 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0521 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0522 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0523 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0524 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0525 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0526 a000 mulx $AX0.L, $AX1.L + 0527 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0528 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 0529 4e3a addp's $ACC0 : @$AR2, $AC1.M + 052a 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 052b 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 052c 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 052d a000 mulx $AX0.L, $AX1.L + 052e af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 052f 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0530 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0531 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0532 1b5f srri @$AR2, $AC1.M + 0533 1b5d srri @$AR2, $AC1.L + 0534 0080 0d08 lri $AR0, #0x0d08 + 0536 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0537 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0538 a000 mulx $AX0.L, $AX1.L + 0539 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 053a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 053b 4e00 addp $ACC0 + 053c 4800 addax $ACC0, $AX0.L + 053d 112f 054c bloopi #0x2f, 0x054c + 053f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0540 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0541 a000 mulx $AX0.L, $AX1.L + 0542 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0543 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0544 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0545 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0546 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0547 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0548 a000 mulx $AX0.L, $AX1.L + 0549 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 054a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 054b 4e3a addp's $ACC0 : @$AR2, $AC1.M + 054c 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 054d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 054e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 054f a000 mulx $AX0.L, $AX1.L + 0550 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0551 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0552 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0553 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0554 1b5f srri @$AR2, $AC1.M + 0555 1b5d srri @$AR2, $AC1.L + 0556 0080 0d08 lri $AR0, #0x0d08 + 0558 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0559 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 055a a000 mulx $AX0.L, $AX1.L + 055b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 055c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 055d 4e00 addp $ACC0 + 055e 4800 addax $ACC0, $AX0.L + 055f 112f 056e bloopi #0x2f, 0x056e + 0561 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0562 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0563 a000 mulx $AX0.L, $AX1.L + 0564 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0565 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0566 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0567 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0568 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0569 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 056a a000 mulx $AX0.L, $AX1.L + 056b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 056c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 056d 4e3a addp's $ACC0 : @$AR2, $AC1.M + 056e 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 056f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0570 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0571 a000 mulx $AX0.L, $AX1.L + 0572 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0573 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0574 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0575 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0576 1b5f srri @$AR2, $AC1.M + 0577 1b5d srri @$AR2, $AC1.L + 0578 00c0 0cd2 lr $AR0, @0x0cd2 + 057a 02df ret +} + +void 057b_Cmd_A() { + 057b 8d00 set15 + 057c 8f00 set40 + 057d 8a00 m2 + 057e 8900 clr $ACC1 + 057f 8168 clr'l $ACC0 : $AC1.L, @$AR0 + 0580 0098 0000 lri $AX0.L, #0x0000 + 0582 0099 0001 lri $AX1.L, #0x0001 + 0584 0081 0000 lri $AR1, #0x0000 + 0586 193e lrri $AC0.M, @$AR1 + 0587 193c lrri $AC0.L, @$AR1 + 0588 1160 0593 bloopi #0x60, 0x0593 + 058a a100 tstaxl $ACC0 + 058b 8271 cmp'l : $AC0.M, @$AR1 + 058c 0277 ifc + 058d 1f19 mrr $AX0.L, $AX1.L + 058e 193c lrri $AC0.L, @$AR1 + 058f a100 tstaxl $ACC0 + 0590 8271 cmp'l : $AC0.M, @$AR1 + 0591 0277 ifc + 0592 1f19 mrr $AX0.L, $AX1.L + 0593 193c lrri $AC0.L, @$AR1 + 0594 1fd8 mrr $AC0.M, $AX0.L + 0595 b100 tst $ACC0 + 0596 0294 05c0 jnz 0x05c0 + 0598 00de 0ce4 lr $AC0.M, @0x0ce4 + 059a b100 tst $ACC0 + 059b 0294 05a2 jnz 0x05a2 + 059d 191c lrri $AC0.L, @$AR0 + 059e 191c lrri $AC0.L, @$AR0 + 059f 191c lrri $AC0.L, @$AR0 + 05a0 029f 006f jmp 006f_MailHandler() + 05a2 8b00 m0 + 05a3 7a00 dec $ACC0 + 05a4 00fe 0ce4 sr @0x0ce4, $AC0.M + 05a6 8400 clrp + 05a7 0099 00c0 lri $AX1.L, #0x00c0 + 05a9 1f1e mrr $AX0.L, $AC0.M + 05aa a000 mulx $AX0.L, $AX1.L + 05ab 191e lrri $AC0.M, @$AR0 + 05ac 191e lrri $AC0.M, @$AR0 + 05ad 191c lrri $AC0.L, @$AR0 + 05ae 00e0 0cd2 sr @0x0cd2, $AR0 + 05b0 009a 0000 lri $AX0.H, #0x0000 + 05b2 0098 0840 lri $AX0.L, #0x0840 + 05b4 4e00 addp $ACC0 + 05b5 4800 addax $ACC0, $AX0.L + 05b6 2ece srs @DSMAH, $AC0.M + 05b7 2ccf srs @DSMAL, $AC0.L + 05b8 16cd 0d08 si @DSPA, #0x0d08 + 05ba 16c9 0000 si @DSCR, #0x0000 + 05bc 16cb 00c0 si @DSBL, #0x00c0 + 05be 029f 05d6 jmp 0x05d6 + 05c0 8b00 m0 + 05c1 00d8 0ce4 lr $AX0.L, @0x0ce4 + 05c3 0099 00c0 lri $AX1.L, #0x00c0 + 05c5 a000 mulx $AX0.L, $AX1.L + 05c6 191e lrri $AC0.M, @$AR0 + 05c7 00fe 0ce4 sr @0x0ce4, $AC0.M + 05c9 191e lrri $AC0.M, @$AR0 + 05ca 191c lrri $AC0.L, @$AR0 + 05cb 00e0 0cd2 sr @0x0cd2, $AR0 + 05cd 4e00 addp $ACC0 + 05ce 2ece srs @DSMAH, $AC0.M + 05cf 2ccf srs @DSMAL, $AC0.L + 05d0 16cd 0d08 si @DSPA, #0x0d08 + 05d2 16c9 0000 si @DSCR, #0x0000 + 05d4 16cb 00c0 si @DSBL, #0x00c0 + 05d6 02bf 0084 call 0084_WaitForDMACompletion() + 05d8 8a48 m2'l : $AX1.L, @$AR0 + 05d9 0083 0d08 lri $AR3, #0x0d08 + 05db 0080 0000 lri $AR0, #0x0000 + 05dd 0081 0000 lri $AR1, #0x0000 + 05df 1979 lrri $AX1.L, @$AR3 + 05e0 193a lrri $AX0.H, @$AR1 + 05e1 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 + 05e2 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 + 05e3 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 + 05e4 b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 + 05e5 9100 asr16 $ACC0 + 05e6 1130 05ef bloopi #0x30, 0x05ef + 05e8 a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L + 05e9 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 + 05ea b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L + 05eb 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 05ec a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L + 05ed f051 lsl16'l $ACC0 : $AX0.H, @$AR1 + 05ee b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L + 05ef 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 05f0 0083 0d08 lri $AR3, #0x0d08 + 05f2 0080 00c0 lri $AR0, #0x00c0 + 05f4 0081 00c0 lri $AR1, #0x00c0 + 05f6 1979 lrri $AX1.L, @$AR3 + 05f7 193a lrri $AX0.H, @$AR1 + 05f8 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 + 05f9 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 + 05fa f051 lsl16'l $ACC0 : $AX0.H, @$AR1 + 05fb b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 + 05fc 9100 asr16 $ACC0 + 05fd 1130 0606 bloopi #0x30, 0x0606 + 05ff a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L + 0600 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 + 0601 b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L + 0602 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0603 a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L + 0604 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 + 0605 b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L + 0606 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 0607 00c0 0cd2 lr $AR0, @0x0cd2 + 0609 029f 006f jmp 006f_MailHandler() +} + +void 060b_Cmd_B() { + 060b 8e48 set16'l : $AX1.L, @$AR0 + 060c 8b70 m0'l : $AC0.M, @$AR0 + 060d 8960 clr'l $ACC1 : $AC0.L, @$AR0 + 060e 00e0 0cd2 sr @0x0cd2, $AR0 + 0610 2ece srs @DSMAH, $AC0.M + 0611 2ccf srs @DSMAL, $AC0.L + 0612 16cd 0180 si @DSPA, #0x0180 + 0614 16c9 0001 si @DSCR, #0x0001 + 0616 16cb 0180 si @DSBL, #0x0180 + 0618 8100 clr $ACC0 + 0619 00de 0ce5 lr $AC0.M, @0x0ce5 + 061b 1ff9 mrr $AC1.M, $AX1.L + 061c 5d00 sub $ACC1, $ACC0 + 061d 00f9 0ce5 sr @0x0ce5, $AX1.L + 061f 009a 02ab lri $AX0.H, #0x02ab + 0621 009b 02aa lri $AX1.H, #0x02aa + 0623 0081 0d08 lri $AR1, #0x0d08 + 0625 d000 mulc $AC1.M, $AX0.H + 0626 d400 mulcac $AC1.M, $AX0.H, $ACC0 + 0627 111f 062b bloopi #0x1f, 0x062b + 0629 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 062a d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 062b d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 062c dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 062d 4e31 addp's $ACC0 : @$AR1, $AC0.M + 062e 1b39 srri @$AR1, $AX1.L + 062f 02bf 0084 call 0084_WaitForDMACompletion() + 0631 8f00 set40 + 0632 8d00 set15 + 0633 8a00 m2 + 0634 0080 0d08 lri $AR0, #0x0d08 + 0636 0081 0400 lri $AR1, #0x0400 + 0638 0083 0000 lri $AR3, #0x0000 + 063a 0082 00c0 lri $AR2, #0x00c0 + 063c 1918 lrri $AX0.L, @$AR0 + 063d 195b lrri $AX1.H, @$AR2 + 063e 1959 lrri $AX1.L, @$AR2 + 063f a000 mulx $AX0.L, $AX1.L + 0640 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0641 9100 asr16 $ACC0 + 0642 4e5b addp'l $ACC0 : $AX1.H, @$AR3 + 0643 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 + 0644 115f 064f bloopi #0x5f, 0x064f + 0646 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 0647 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0648 9140 asr16'l $ACC0 : $AX0.L, @$AR0 + 0649 4e5a addp'l $ACC0 : $AX1.H, @$AR2 + 064a f04a lsl16'l $ACC0 : $AX1.L, @$AR2 + 064b a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 064c ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 064d 9100 asr16 $ACC0 + 064e 4e5b addp'l $ACC0 : $AX1.H, @$AR3 + 064f f04b lsl16'l $ACC0 : $AX1.L, @$AR3 + 0650 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 0651 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0652 9100 asr16 $ACC0 + 0653 4e00 addp $ACC0 + 0654 f000 lsl16 $ACC0 + 0655 1b3e srri @$AR1, $AC0.M + 0656 8e00 set16 + 0657 00c0 0cd2 lr $AR0, @0x0cd2 + 0659 191e lrri $AC0.M, @$AR0 + 065a 191c lrri $AC0.L, @$AR0 + 065b 2ece srs @DSMAH, $AC0.M + 065c 2ccf srs @DSMAL, $AC0.L + 065d 16cd 0400 si @DSPA, #0x0400 + 065f 16c9 0001 si @DSCR, #0x0001 + 0661 16cb 0180 si @DSBL, #0x0180 + 0663 02bf 0084 call 0084_WaitForDMACompletion() + 0665 16fc dcd1 si @DMBH, #0xdcd1 <--------------!!! + 0667 16fd 0004 si @DMBL, #0x0004 <--------------!!! + 0669 16fb 0001 si @DIRQ, #0x0001 <--------------!!! + 066b 26fc lrs $AC0.M, @DMBH + 066c 02a0 8000 andf $AC0.M, #0x8000 + 066e 029c 066b jlnz 0x066b + 0670 029f 006f jmp 006f_MailHandler() +} + +// Command 0xE - AXList end +void 0672_Cmd_E() { + 0672 16fc dcd1 si @DMBH, #0xdcd1 + 0674 16fd 0002 si @DMBL, #0x0002 + 0676 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10002 and trigger an IRQ + 0678 029f 0f9b jmp 0x0f9b + 067a 029f 004c jmp 0x004c +} + +void 067c_Cmd_D() { + 067c 8c00 clr15 + 067d 8a00 m2 + 067e 8f00 set40 + 067f 0081 0ac0 lri $AR1, #0x0ac0 + 0681 0082 0240 lri $AR2, #0x0240 + 0683 1fa1 mrr $AC1.L, $AR1 + 0684 1112 0689 bloopi #0x12, 0x0689 + 0686 195e lrri $AC0.M, @$AR2 + 0687 195c lrri $AC0.L, @$AR2 + 0688 f000 lsl16 $ACC0 + 0689 1b3e srri @$AR1, $AC0.M + 068a 191e lrri $AC0.M, @$AR0 + 068b 191c lrri $AC0.L, @$AR0 + 068c 2ece srs @DSMAH, $AC0.M + 068d 2ccf srs @DSMAL, $AC0.L + 068e 2dcd srs @DSPA, $AC1.L + 068f 1103 06a2 bloopi #0x03, 0x06a2 + 0691 16c9 0001 si @DSCR, #0x0001 + 0693 16cb 0024 si @DSBL, #0x0024 + 0695 1fa1 mrr $AC1.L, $AR1 + 0696 1112 069b bloopi #0x12, 0x069b + 0698 195e lrri $AC0.M, @$AR2 + 0699 195c lrri $AC0.L, @$AR2 + 069a f000 lsl16 $ACC0 + 069b 1b3e srri @$AR1, $AC0.M + 069c 02bf 0084 call 0084_WaitForDMACompletion() + 069e 191e lrri $AC0.M, @$AR0 + 069f 191c lrri $AC0.L, @$AR0 + 06a0 2ece srs @DSMAH, $AC0.M + 06a1 2ccf srs @DSMAL, $AC0.L + 06a2 2dcd srs @DSPA, $AC1.L + 06a3 16c9 0001 si @DSCR, #0x0001 + 06a5 16cb 0024 si @DSBL, #0x0024 + 06a7 02bf 0084 call 0084_WaitForDMACompletion() + 06a9 029f 006f jmp 006f_MailHandler() +} + +void 06ab_unknown() { + 06ab 0087 ffff lri $IX3, #0xffff + 06ad 1c83 mrr $IX0, $AR3 + 06ae 197e lrri $AC0.M, @$AR3 + 06af 80e1 nx'ld : $AX0.H, $AX1.L, @$AR1 + 06b0 b04f mulx'ln $AX0.H, $AX1.L : $AX1.L, @$AR3 + 06b1 1f5e mrr $AX0.H, $AC0.M + 06b2 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 + 06b3 b64f mulxmv'ln $AX0.H, $AX1.L, $ACC0 : $AX1.L, @$AR3 + 06b4 1f5e mrr $AX0.H, $AC0.M + 06b5 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 + 06b6 112f 06bd bloopi #0x2f, 0x06bd + 06b8 b79a mulxmv'slm $AX0.H, $AX1.L, $ACC1 : $AC0.M, $AX1.L + 06b9 1f5f mrr $AX0.H, $AC1.M + 06ba e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 + 06bb b69b mulxmv'slm $AX0.H, $AX1.L, $ACC0 : $AC1.M, $AX1.L + 06bc 1f5e mrr $AX0.H, $AC0.M + 06bd e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 + 06be 6f30 movp's $ACC1 : @$AR0, $AC0.M + 06bf 1b1f srri @$AR0, $AC1.M + 06c0 1c64 mrr $AR3, $IX0 + 06c1 1b7f srri @$AR3, $AC1.M + 06c2 02df ret +} + +void 06c3_Unknown() { + 06c3 8c00 clr15 + 06c4 8b00 m0 + 06c5 1ca0 mrr $IX1, $AR0 + 06c6 0083 0370 lri $AR3, #0x0370 + 06c8 191a lrri $AX0.H, @$AR0 + 06c9 1918 lrri $AX0.L, @$AR0 + 06ca 1b7a srri @$AR3, $AX0.H + 06cb 1b78 srri @$AR3, $AX0.L + 06cc 1919 lrri $AX1.L, @$AR0 + 06cd 191b lrri $AX1.H, @$AR0 + 06ce 0083 0d03 lri $AR3, #0x0d03 + 06d0 1105 06d3 bloopi #0x05, 0x06d3 + 06d2 191a lrri $AX0.H, @$AR0 + 06d3 1b7a srri @$AR3, $AX0.H + 06d4 0080 0d03 lri $AR0, #0x0d03 + 06d6 0088 0004 lri $WR0, #0x0004 + 06d8 0083 0370 lri $AR3, #0x0370 + 06da 008b 0001 lri $WR3, #0x0001 + 06dc 0087 0000 lri $IX3, #0x0000 + 06de 193f lrri $AC1.M, @$AR1 + 06df 191a lrri $AX0.H, @$AR0 + 06e0 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06e1 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06e2 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M + 06e3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 06e4 e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 + 06e5 6e50 movp'l $ACC0 : $AX0.H, @$AR0 + 06e6 1482 asl $ACC0, #2 + 06e7 fc00 clrl $AC1.L + 06e8 1f7e mrr $AX1.H, $AC0.M + 06e9 1b5e srri @$AR2, $AC0.M + 06ea 112f 06ff bloopi #0x2f, 0x06ff + 06ec d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06ed f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06ee f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M + 06ef e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 06f0 e279 maddx'l $AX0.H, $AX1.L : $AC1.M, @$AR1 + 06f1 6e50 movp'l $ACC0 : $AX0.H, @$AR0 + 06f2 1482 asl $ACC0, #2 + 06f3 fc00 clrl $AC1.L + 06f4 1f3e mrr $AX1.L, $AC0.M + 06f5 1b5e srri @$AR2, $AC0.M + 06f6 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06f7 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 06f8 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M + 06f9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 06fa e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 + 06fb 6e50 movp'l $ACC0 : $AX0.H, @$AR0 + 06fc 1482 asl $ACC0, #2 + 06fd fc00 clrl $AC1.L + 06fe 1f7e mrr $AX1.H, $AC0.M + 06ff 1b5e srri @$AR2, $AC0.M + 0700 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0701 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0702 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M + 0703 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0704 e200 maddx $AX0.H, $AX1.L + 0705 6e00 movp $ACC0 + 0706 1482 asl $ACC0, #2 + 0707 fc00 clrl $AC1.L + 0708 1f3e mrr $AX1.L, $AC0.M + 0709 1b5e srri @$AR2, $AC0.M + 070a 0088 ffff lri $WR0, #0xffff + 070c 008b ffff lri $WR3, #0xffff + 070e 1c05 mrr $AR0, $IX1 + 070f 0083 0370 lri $AR3, #0x0370 + 0711 197a lrri $AX0.H, @$AR3 + 0712 1978 lrri $AX0.L, @$AR3 + 0713 1b1a srri @$AR0, $AX0.H + 0714 1b18 srri @$AR0, $AX0.L + 0715 1b19 srri @$AR0, $AX1.L + 0716 1b1b srri @$AR0, $AX1.H + 0717 8d00 set15 + 0718 8a00 m2 + 0719 02df ret +} + +// Sample rate converter #0 - None +// + 071a 02bf 07e6 call 0x07e6_SetupAccelerator() + 071c 8c00 clr15 + 071d 8a00 m2 + 071e 8f00 set40 + // Read ratio + 071f 195b lrri $AX1.H, @$AR2 + 0720 1959 lrri $AX1.L, @$AR2 + 0721 8100 clr $ACC0 + // Read cur_addr fractional part + 0722 195c lrri $AC0.L, @$AR2 + 0723 0080 0d08 lri $AR0, #0x0d08 + 0725 0088 0003 lri $WR0, #0x0003 + // Read the last samples, copy them to 0x0D08 + 0727 195f lrri $AC1.M, @$AR2 + 0728 1b1f srri @$AR0, $AC1.M + 0729 195f lrri $AC1.M, @$AR2 + 072a 1b1f srri @$AR0, $AC1.M + 072b 195f lrri $AC1.M, @$AR2 + 072c 1b1f srri @$AR0, $AC1.M + 072d 195f lrri $AC1.M, @$AR2 + 072e 1b1f srri @$AR0, $AC1.M + + 072f 0081 0c60 lri $AR1, #0x0c60 + 0731 0082 ffdd lri $AR2, #0xffdd + 0733 00c7 0ce0 lr $IX3, @0x0ce0 + 0735 4a00 addax $ACC0, $AX1.L + 0736 1160 074a bloopi #0x60, 0x074a + 0738 8912 clr'mv $ACC1 : $AX0.L, $AC0.M + 0739 1fbc mrr $AC1.L, $AC0.L + 073a 1577 lsr $ACC1, #-9 + 073b 1512 lsl $ACC1, #18 + 073c 1c7f mrr $AR3, $AC1.M + 073d 001f addarn $AR3, $IX3 + 073e 0078 0743 bloop $AX0.L, 0x0743 + 0740 185a lrr $AX0.H, @$AR2 + 0741 1b1a srri @$AR0, $AX0.H + 0742 5000 subr $ACC0, $AX0.L + 0743 1f1d mrr $AX0.L, $AC1.L + 0744 4ac3 addax'ld $ACC0, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0745 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0746 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 + 0747 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 + 0748 9500 mulac $AX0.L, $AX0.H, $ACC1 + 0749 4f00 addp $ACC1 + 074a 1b3f srri @$AR1, $AC1.M + 074b 5a00 subax $ACC0, $AX1.L + 074c 0004 dar $AR0 + 074d 0082 0329 lri $AR2, #0x0329 + 074f 189f lrrd $AC1.M, @$AR0 + 0750 1adf srrd @$AR2, $AC1.M + 0751 189f lrrd $AC1.M, @$AR0 + 0752 1adf srrd @$AR2, $AC1.M + 0753 189f lrrd $AC1.M, @$AR0 + 0754 1adf srrd @$AR2, $AC1.M + 0755 189f lrrd $AC1.M, @$AR0 + 0756 1adf srrd @$AR2, $AC1.M + 0757 0088 ffff lri $WR0, #0xffff + 0759 1adc srrd @$AR2, $AC0.L + 075a 0082 0322 lri $AR2, #0x0322 + 075c 27dc lrs $AC1.M, @yn2 + 075d 1adf srrd @$AR2, $AC1.M + 075e 27db lrs $AC1.M, @yn1 + 075f 1adf srrd @$AR2, $AC1.M + 0760 27da lrs $AC1.M, @pred_scale + 0761 1adf srrd @$AR2, $AC1.M + 0762 0082 030e lri $AR2, #0x030e + 0764 27d9 lrs $AC1.M, @ACCAL + 0765 1adf srrd @$AR2, $AC1.M + 0766 27d8 lrs $AC1.M, @ACCAH + 0767 1adf srrd @$AR2, $AC1.M + 0768 8e00 set16 + 0769 8b00 m0 + 076a 02df ret + +// Sample rate converter #1 - ? +// + 076b 02bf 07e6 call 0x07e6_SetupAccelerator() + 076d 8d00 set15 + 076e 8b00 m0 + 076f 8f00 set40 + 0770 195b lrri $AX1.H, @$AR2 + 0771 1945 lrri $IX1, @$AR2 + 0772 8100 clr $ACC0 + 0773 195c lrri $AC0.L, @$AR2 + 0774 0080 0d08 lri $AR0, #0x0d08 + 0776 0088 0003 lri $WR0, #0x0003 + 0778 0084 0003 lri $IX0, #0x0003 + 077a 195f lrri $AC1.M, @$AR2 + 077b 1b1f srri @$AR0, $AC1.M + 077c 195f lrri $AC1.M, @$AR2 + 077d 1b1f srri @$AR0, $AC1.M + 077e 195f lrri $AC1.M, @$AR2 + 077f 1b1f srri @$AR0, $AC1.M + 0780 195f lrri $AC1.M, @$AR2 + 0781 1b1f srri @$AR0, $AC1.M + 0782 0081 0c60 lri $AR1, #0x0c60 + 0784 0082 ffdd lri $AR2, #0xffdd + 0786 1f25 mrr $AX1.L, $IX1 + 0787 4a00 addax $ACC0, $AX1.L + 0788 1160 079f bloopi #0x60, 0x079f + 078a 8912 clr'mv $ACC1 : $AX0.L, $AC0.M + 078b 0078 0790 bloop $AX0.L, 0x0790 + 078d 185a lrr $AX0.H, @$AR2 + 078e 1b1a srri @$AR0, $AX0.H + 078f 5000 subr $ACC0, $AX0.L + 0790 1f1f mrr $AX0.L, $AC1.M + 0791 7c00 neg $ACC0 + 0792 b114 tst'mv $ACC0 : $AX1.L, $AC0.L + 0793 0294 0799 jnz 0x0799 + 0795 191f lrri $AC1.M, @$AR0 + 0796 0010 addarn $AR0, $IX0 + 0797 029f 079e jmp 0x079e + 0799 7c50 neg'l $ACC0 : $AX0.H, @$AR0 + 079a b014 mulx'mv $AX0.H, $AX1.L : $AX1.L, $AC0.L + 079b 199a lrrn $AX0.H, @$AR0 + 079c b700 mulxmv $AX0.H, $AX1.L, $ACC1 + 079d 4f00 addp $ACC1 + 079e 1f25 mrr $AX1.L, $IX1 + 079f 4a39 addax's $ACC0, $AX1.L : @$AR1, $AC1.M + 07a0 5a00 subax $ACC0, $AX1.L + 07a1 0004 dar $AR0 + 07a2 0082 0329 lri $AR2, #0x0329 + 07a4 189f lrrd $AC1.M, @$AR0 + 07a5 1adf srrd @$AR2, $AC1.M + 07a6 189f lrrd $AC1.M, @$AR0 + 07a7 1adf srrd @$AR2, $AC1.M + 07a8 189f lrrd $AC1.M, @$AR0 + 07a9 1adf srrd @$AR2, $AC1.M + 07aa 189f lrrd $AC1.M, @$AR0 + 07ab 1adf srrd @$AR2, $AC1.M + 07ac 0088 ffff lri $WR0, #0xffff + 07ae 1adc srrd @$AR2, $AC0.L + 07af 0082 0322 lri $AR2, #0x0322 + 07b1 27dc lrs $AC1.M, @yn2 + 07b2 1adf srrd @$AR2, $AC1.M + 07b3 27db lrs $AC1.M, @yn1 + 07b4 1adf srrd @$AR2, $AC1.M + 07b5 27da lrs $AC1.M, @pred_scale + 07b6 1adf srrd @$AR2, $AC1.M + 07b7 0082 030e lri $AR2, #0x030e + 07b9 27d9 lrs $AC1.M, @ACCAL + 07ba 1adf srrd @$AR2, $AC1.M + 07bb 27d8 lrs $AC1.M, @ACCAH + 07bc 1adf srrd @$AR2, $AC1.M + 07bd 8e00 set16 + 07be 8c00 clr15 + 07bf 02df ret + +// Sample rate converter #2 - No sample rate conversion +// Just copies 96 bytes of data to the output buffer +// + 07c0 02bf 07e6 call 0x07e6_SetupAccelerator() + 07c2 0080 0c60 lri $AR0, #0x0c60 + 07c4 0082 ffdd lri $AR2, #0xffdd // 0xFFDD: ACDAT + 07c6 1160 07cb bloopi #0x60, 0x07cb + 07c8 1844 lrr $IX0, @$AR2 // Load a sample from accelerator + 07c9 1b04 srri @$AR0, $IX0 // and store it to 0x0C60+ + 07ca 0000 nop + 07cb 0000 nop + 07cc 0004 dar $AR0 + // Save the 4 last samples in the PB + 07cd 0082 0329 lri $AR2, #0x0329 + 07cf 189f lrrd $AC1.M, @$AR0 + 07d0 1adf srrd @$AR2, $AC1.M + 07d1 189f lrrd $AC1.M, @$AR0 + 07d2 1adf srrd @$AR2, $AC1.M + 07d3 189f lrrd $AC1.M, @$AR0 + 07d4 1adf srrd @$AR2, $AC1.M + 07d5 189f lrrd $AC1.M, @$AR0 + 07d6 1adf srrd @$AR2, $AC1.M + // Save the accelerator regs in the PB + 07d7 0082 0322 lri $AR2, #0x0322 + // YN1 and YN2 + 07d9 27dc lrs $AC1.M, @yn2 + 07da 1adf srrd @$AR2, $AC1.M + 07db 27db lrs $AC1.M, @yn1 + 07dc 1adf srrd @$AR2, $AC1.M + // Pred scale + 07dd 27da lrs $AC1.M, @pred_scale + 07de 1adf srrd @$AR2, $AC1.M + 07df 0082 030e lri $AR2, #0x030e + // Current address + 07e1 27d9 lrs $AC1.M, @ACCAL + 07e2 1adf srrd @$AR2, $AC1.M + 07e3 27d8 lrs $AC1.M, @ACCAH + 07e4 1adf srrd @$AR2, $AC1.M + 07e5 02df ret + +// Called by the three sample rate converters above. +// Sets up the accelerator so that it can be used to +// read the audio data. +// The accelerator area is set to be the same length +// as the sound data being played, so that looping +// will be handled by exception vector #5 (ACCOV). +// Parameters: None +// Return: AR0 = 0x0328 +// +07e6_SetupAccelerator() +{ + // Set the accelerator regs from the PB + 07e6 0082 0308 lri $AR2, #0x0308 + // Sample format + 07e8 195e lrri $AC0.M, @$AR2 + 07e9 2ed1 srs @SampleFormat, $AC0.M + // Start address + 07ea 195e lrri $AC0.M, @$AR2 + 07eb 2ed4 srs @ACSAH, $AC0.M + 07ec 195e lrri $AC0.M, @$AR2 + 07ed 2ed5 srs @ACSAL, $AC0.M + // End address + 07ee 195e lrri $AC0.M, @$AR2 + 07ef 2ed6 srs @ACEAH, $AC0.M + 07f0 195e lrri $AC0.M, @$AR2 + 07f1 2ed7 srs @ACEAL, $AC0.M + // Current address + 07f2 195e lrri $AC0.M, @$AR2 + 07f3 2ed8 srs @ACCAH, $AC0.M + 07f4 195e lrri $AC0.M, @$AR2 + 07f5 2ed9 srs @ACCAL, $AC0.M + // 16 coefs + 07f6 195e lrri $AC0.M, @$AR2 + 07f7 2ea0 srs @COEF_A1_0, $AC0.M + 07f8 195e lrri $AC0.M, @$AR2 + 07f9 2ea1 srs @COEF_A2_0, $AC0.M + 07fa 195e lrri $AC0.M, @$AR2 + 07fb 2ea2 srs @COEF_A1_1, $AC0.M + 07fc 195e lrri $AC0.M, @$AR2 + 07fd 2ea3 srs @COEF_A2_1, $AC0.M + 07fe 195e lrri $AC0.M, @$AR2 + 07ff 2ea4 srs @COEF_A1_2, $AC0.M + 0800 195e lrri $AC0.M, @$AR2 + 0801 2ea5 srs @COEF_A2_2, $AC0.M + 0802 195e lrri $AC0.M, @$AR2 + 0803 2ea6 srs @COEF_A1_3, $AC0.M + 0804 195e lrri $AC0.M, @$AR2 + 0805 2ea7 srs @COEF_A2_3, $AC0.M + 0806 195e lrri $AC0.M, @$AR2 + 0807 2ea8 srs @COEF_A1_4, $AC0.M + 0808 195e lrri $AC0.M, @$AR2 + 0809 2ea9 srs @COEF_A2_4, $AC0.M + 080a 195e lrri $AC0.M, @$AR2 + 080b 2eaa srs @COEF_A1_5, $AC0.M + 080c 195e lrri $AC0.M, @$AR2 + 080d 2eab srs @COEF_A2_5, $AC0.M + 080e 195e lrri $AC0.M, @$AR2 + 080f 2eac srs @COEF_A1_6, $AC0.M + 0810 195e lrri $AC0.M, @$AR2 + 0811 2ead srs @COEF_A2_6, $AC0.M + 0812 195e lrri $AC0.M, @$AR2 + 0813 2eae srs @COEF_A1_7, $AC0.M + 0814 195e lrri $AC0.M, @$AR2 + 0815 2eaf srs @COEF_A2_7, $AC0.M + // Gain + 0816 195e lrri $AC0.M, @$AR2 + 0817 2ede srs @GAIN, $AC0.M + // Pred scale + 0818 195e lrri $AC0.M, @$AR2 + 0819 2eda srs @pred_scale, $AC0.M + // YN1 and YN2 + 081a 195e lrri $AC0.M, @$AR2 + 081b 2edb srs @yn1, $AC0.M + 081c 195e lrri $AC0.M, @$AR2 + 081d 2edc srs @yn2, $AC0.M + 081e 02df ret +} + +// Volume_0_0 + 081f 02df ret + +// Volume_0_1 + 0820 00c0 0ce2 lr $AR0, @0x0ce2 + 0822 0081 02da lri $AR1, #0x02da + 0824 0082 0000 lri $AR2, #0x0000 + 0826 1c62 mrr $AR3, $AR2 + 0827 02bf 0bd1 call 0bd1_ApplyVolume1(mem16[0x0ce2], 0x02da, 0x0000, 0x0000) + 0829 00f8 02f9 sr @0x02f9, $AX0.L // uh? the last is saved in updates field? + 082b 02df ret + + 082c 00c0 0ce3 lr $AR0, @0x0ce3 + 082e 0081 02dc lri $AR1, #0x02dc + 0830 0082 00c0 lri $AR2, #0x00c0 + 0832 1c62 mrr $AR3, $AR2 + 0833 02bf 0bd1 call 0bd1_Unknown() + 0835 00f8 02fd sr @0x02fd, $AX0.L + 0837 02df ret + + 0838 00c0 0ce2 lr $AR0, @0x0ce2 + 083a 0081 02da lri $AR1, #0x02da + 083c 0082 0000 lri $AR2, #0x0000 + 083e 1c62 mrr $AR3, $AR2 + 083f 00c4 0ce3 lr $IX0, @0x0ce3 + 0841 0085 00c0 lri $IX1, #0x00c0 + 0843 02bf 0beb call 0x0beb + 0845 00f8 02f9 sr @0x02f9, $AX0.L + 0847 00fb 02fd sr @0x02fd, $AX1.H + 0849 02df ret + + 084a 00c0 0ce2 lr $AR0, @0x0ce2 + 084c 0081 02da lri $AR1, #0x02da + 084e 0082 0000 lri $AR2, #0x0000 + 0850 0083 0d08 lri $AR3, #0x0d08 + 0852 00c4 0ce3 lr $IX0, @0x0ce3 + 0854 0085 00c0 lri $IX1, #0x00c0 + 0856 02bf 0c51 call 0x0c51 + 0858 00f8 02f9 sr @0x02f9, $AX0.L + 085a 00fb 02fd sr @0x02fd, $AX1.H + 085c 02df ret + + 085d 00c0 0ce1 lr $AR0, @0x0ce1 + 085f 0081 02ea lri $AR1, #0x02ea + 0861 0082 0180 lri $AR2, #0x0180 + 0863 1c62 mrr $AR3, $AR2 + 0864 02bf 0bd1 call 0bd1_Unknown() + 0866 00f8 0301 sr @0x0301, $AX0.L + 0868 02df ret + + 0869 00c0 0ce1 lr $AR0, @0x0ce1 + 086b 0081 02ea lri $AR1, #0x02ea + 086d 0082 0180 lri $AR2, #0x0180 + 086f 1c62 mrr $AR3, $AR2 + 0870 02bf 0bd1 call 0bd1_Unknown() + 0872 00f8 0301 sr @0x0301, $AX0.L + 0874 029f 0820 jmp 0x0820 + 0876 00c0 0ce1 lr $AR0, @0x0ce1 + 0878 0081 02ea lri $AR1, #0x02ea + 087a 0082 0180 lri $AR2, #0x0180 + 087c 1c62 mrr $AR3, $AR2 + 087d 02bf 0bd1 call 0bd1_Unknown() + 087f 00f8 0301 sr @0x0301, $AX0.L + 0881 029f 082c jmp 0x082c + 0883 00c0 0ce1 lr $AR0, @0x0ce1 + 0885 0081 02ea lri $AR1, #0x02ea + 0887 0082 0180 lri $AR2, #0x0180 + 0889 1c62 mrr $AR3, $AR2 + 088a 02bf 0bd1 call 0bd1_Unknown() + 088c 00f8 0301 sr @0x0301, $AX0.L + 088e 029f 0838 jmp 0x0838 + 0890 00c0 0ce1 lr $AR0, @0x0ce1 + 0892 0081 02ea lri $AR1, #0x02ea + 0894 0082 0180 lri $AR2, #0x0180 + 0896 1c62 mrr $AR3, $AR2 + 0897 02bf 0bd1 call 0bd1_Unknown() + 0899 00f8 0301 sr @0x0301, $AX0.L + 089b 029f 084a jmp 0x084a + 089d 00c0 0ce1 lr $AR0, @0x0ce1 + 089f 0081 02ea lri $AR1, #0x02ea + 08a1 0082 0180 lri $AR2, #0x0180 + 08a3 0083 0d08 lri $AR3, #0x0d08 + 08a5 02bf 0c21 call 0c21_Unknown() + 08a7 00f8 0301 sr @0x0301, $AX0.L + 08a9 02df ret + + 08aa 00c0 0ce1 lr $AR0, @0x0ce1 + 08ac 0081 02ea lri $AR1, #0x02ea + 08ae 0082 0180 lri $AR2, #0x0180 + 08b0 0083 0d08 lri $AR3, #0x0d08 + 08b2 02bf 0c21 call 0c21_Unknown() + 08b4 00f8 0301 sr @0x0301, $AX0.L + 08b6 029f 0820 jmp 0x0820 + 08b8 00c0 0ce1 lr $AR0, @0x0ce1 + 08ba 0081 02ea lri $AR1, #0x02ea + 08bc 0082 0180 lri $AR2, #0x0180 + 08be 0083 0d08 lri $AR3, #0x0d08 + 08c0 02bf 0c21 call 0c21_Unknown() + 08c2 00f8 0301 sr @0x0301, $AX0.L + 08c4 029f 082c jmp 0x082c + 08c6 00c0 0ce1 lr $AR0, @0x0ce1 + 08c8 0081 02ea lri $AR1, #0x02ea + 08ca 0082 0180 lri $AR2, #0x0180 + 08cc 0083 0d08 lri $AR3, #0x0d08 + 08ce 02bf 0c21 call 0c21_Unknown() + 08d0 00f8 0301 sr @0x0301, $AX0.L + 08d2 029f 0838 jmp 0x0838 + 08d4 00c0 0ce1 lr $AR0, @0x0ce1 + 08d6 0081 02ea lri $AR1, #0x02ea + 08d8 0082 0180 lri $AR2, #0x0180 + 08da 0083 0d08 lri $AR3, #0x0d08 + 08dc 02bf 0c21 call 0c21_Unknown() + 08de 00f8 0301 sr @0x0301, $AX0.L + 08e0 029f 084a jmp 0x084a + 08e2 00c0 0ce2 lr $AR0, @0x0ce2 + 08e4 0081 02de lri $AR1, #0x02de + 08e6 0082 0400 lri $AR2, #0x0400 + 08e8 1c62 mrr $AR3, $AR2 + 08e9 02bf 0bd1 call 0bd1_Unknown() + 08eb 00f8 02fa sr @0x02fa, $AX0.L + 08ed 02df ret + + 08ee 00c0 0ce3 lr $AR0, @0x0ce3 + 08f0 0081 02e0 lri $AR1, #0x02e0 + 08f2 0082 04c0 lri $AR2, #0x04c0 + 08f4 1c62 mrr $AR3, $AR2 + 08f5 02bf 0bd1 call 0bd1_Unknown() + 08f7 00f8 02fe sr @0x02fe, $AX0.L + 08f9 02df ret + + 08fa 00c0 0ce2 lr $AR0, @0x0ce2 + 08fc 0081 02de lri $AR1, #0x02de + 08fe 0082 0400 lri $AR2, #0x0400 + 0900 1c62 mrr $AR3, $AR2 + 0901 00c4 0ce3 lr $IX0, @0x0ce3 + 0903 0085 04c0 lri $IX1, #0x04c0 + 0905 02bf 0beb call 0x0beb + 0907 00f8 02fa sr @0x02fa, $AX0.L + 0909 00fb 02fe sr @0x02fe, $AX1.H + 090b 02df ret + + 090c 00c0 0ce2 lr $AR0, @0x0ce2 + 090e 0081 02de lri $AR1, #0x02de + 0910 0082 0400 lri $AR2, #0x0400 + 0912 0083 0d08 lri $AR3, #0x0d08 + 0914 00c4 0ce3 lr $IX0, @0x0ce3 + 0916 0085 04c0 lri $IX1, #0x04c0 + 0918 02bf 0c51 call 0x0c51 + 091a 00f8 02fa sr @0x02fa, $AX0.L + 091c 00fb 02fe sr @0x02fe, $AX1.H + 091e 02df ret + + 091f 00c0 0ce1 lr $AR0, @0x0ce1 + 0921 0081 02ec lri $AR1, #0x02ec + 0923 0082 0580 lri $AR2, #0x0580 + 0925 1c62 mrr $AR3, $AR2 + 0926 02bf 0bd1 call 0bd1_Unknown() + 0928 00f8 0302 sr @0x0302, $AX0.L + 092a 02df ret + + 092b 00c0 0ce1 lr $AR0, @0x0ce1 + 092d 0081 02ec lri $AR1, #0x02ec + 092f 0082 0580 lri $AR2, #0x0580 + 0931 1c62 mrr $AR3, $AR2 + 0932 02bf 0bd1 call 0bd1_Unknown() + 0934 00f8 0302 sr @0x0302, $AX0.L + 0936 029f 08e2 jmp 0x08e2 + 0938 00c0 0ce1 lr $AR0, @0x0ce1 + 093a 0081 02ec lri $AR1, #0x02ec + 093c 0082 0580 lri $AR2, #0x0580 + 093e 1c62 mrr $AR3, $AR2 + 093f 02bf 0bd1 call 0bd1_Unknown() + 0941 00f8 0302 sr @0x0302, $AX0.L + 0943 029f 08ee jmp 0x08ee + 0945 00c0 0ce1 lr $AR0, @0x0ce1 + 0947 0081 02ec lri $AR1, #0x02ec + 0949 0082 0580 lri $AR2, #0x0580 + 094b 1c62 mrr $AR3, $AR2 + 094c 02bf 0bd1 call 0bd1_Unknown() + 094e 00f8 0302 sr @0x0302, $AX0.L + 0950 029f 08fa jmp 0x08fa + 0952 00c0 0ce1 lr $AR0, @0x0ce1 + 0954 0081 02ec lri $AR1, #0x02ec + 0956 0082 0580 lri $AR2, #0x0580 + 0958 1c62 mrr $AR3, $AR2 + 0959 02bf 0bd1 call 0bd1_Unknown() + 095b 00f8 0302 sr @0x0302, $AX0.L + 095d 029f 090c jmp 0x090c + 095f 00c0 0ce1 lr $AR0, @0x0ce1 + 0961 0081 02ec lri $AR1, #0x02ec + 0963 0082 0580 lri $AR2, #0x0580 + 0965 0083 0d08 lri $AR3, #0x0d08 + 0967 02bf 0c21 call 0c21_Unknown() + 0969 00f8 0302 sr @0x0302, $AX0.L + 096b 02df ret + + 096c 00c0 0ce1 lr $AR0, @0x0ce1 + 096e 0081 02ec lri $AR1, #0x02ec + 0970 0082 0580 lri $AR2, #0x0580 + 0972 0083 0d08 lri $AR3, #0x0d08 + 0974 02bf 0c21 call 0c21_Unknown() + 0976 00f8 0302 sr @0x0302, $AX0.L + 0978 029f 08e2 jmp 0x08e2 + 097a 00c0 0ce1 lr $AR0, @0x0ce1 + 097c 0081 02ec lri $AR1, #0x02ec + 097e 0082 0580 lri $AR2, #0x0580 + 0980 0083 0d08 lri $AR3, #0x0d08 + 0982 02bf 0c21 call 0c21_Unknown() + 0984 00f8 0302 sr @0x0302, $AX0.L + 0986 029f 08ee jmp 0x08ee + 0988 00c0 0ce1 lr $AR0, @0x0ce1 + 098a 0081 02ec lri $AR1, #0x02ec + 098c 0082 0580 lri $AR2, #0x0580 + 098e 0083 0d08 lri $AR3, #0x0d08 + 0990 02bf 0c21 call 0c21_Unknown() + 0992 00f8 0302 sr @0x0302, $AX0.L + 0994 029f 08fa jmp 0x08fa + 0996 00c0 0ce1 lr $AR0, @0x0ce1 + 0998 0081 02ec lri $AR1, #0x02ec + 099a 0082 0580 lri $AR2, #0x0580 + 099c 0083 0d08 lri $AR3, #0x0d08 + 099e 02bf 0c21 call 0c21_Unknown() + 09a0 00f8 0302 sr @0x0302, $AX0.L + 09a2 029f 090c jmp 0x090c + 09a4 00c0 0ce2 lr $AR0, @0x0ce2 + 09a6 0081 02e2 lri $AR1, #0x02e2 + 09a8 0082 0640 lri $AR2, #0x0640 + 09aa 1c62 mrr $AR3, $AR2 + 09ab 02bf 0bd1 call 0bd1_Unknown() + 09ad 00f8 02fb sr @0x02fb, $AX0.L + 09af 02df ret + + 09b0 00c0 0ce3 lr $AR0, @0x0ce3 + 09b2 0081 02e4 lri $AR1, #0x02e4 + 09b4 0082 0700 lri $AR2, #0x0700 + 09b6 1c62 mrr $AR3, $AR2 + 09b7 02bf 0bd1 call 0bd1_Unknown() + 09b9 00f8 02ff sr @0x02ff, $AX0.L + 09bb 02df ret + + 09bc 00c0 0ce2 lr $AR0, @0x0ce2 + 09be 0081 02e2 lri $AR1, #0x02e2 + 09c0 0082 0640 lri $AR2, #0x0640 + 09c2 1c62 mrr $AR3, $AR2 + 09c3 00c4 0ce3 lr $IX0, @0x0ce3 + 09c5 0085 0700 lri $IX1, #0x0700 + 09c7 02bf 0beb call 0x0beb + 09c9 00f8 02fb sr @0x02fb, $AX0.L + 09cb 00fb 02ff sr @0x02ff, $AX1.H + 09cd 02df ret + + 09ce 00c0 0ce2 lr $AR0, @0x0ce2 + 09d0 0081 02e2 lri $AR1, #0x02e2 + 09d2 0082 0640 lri $AR2, #0x0640 + 09d4 0083 0d08 lri $AR3, #0x0d08 + 09d6 00c4 0ce3 lr $IX0, @0x0ce3 + 09d8 0085 0700 lri $IX1, #0x0700 + 09da 02bf 0c51 call 0x0c51 + 09dc 00f8 02fb sr @0x02fb, $AX0.L + 09de 00fb 02ff sr @0x02ff, $AX1.H + 09e0 02df ret + + 09e1 00c0 0ce1 lr $AR0, @0x0ce1 + 09e3 0081 02ee lri $AR1, #0x02ee + 09e5 0082 07c0 lri $AR2, #0x07c0 + 09e7 1c62 mrr $AR3, $AR2 + 09e8 02bf 0bd1 call 0bd1_Unknown() + 09ea 00f8 0303 sr @0x0303, $AX0.L + 09ec 02df ret + + 09ed 00c0 0ce1 lr $AR0, @0x0ce1 + 09ef 0081 02ee lri $AR1, #0x02ee + 09f1 0082 07c0 lri $AR2, #0x07c0 + 09f3 1c62 mrr $AR3, $AR2 + 09f4 02bf 0bd1 call 0bd1_Unknown() + 09f6 00f8 0303 sr @0x0303, $AX0.L + 09f8 029f 09a4 jmp 0x09a4 + 09fa 00c0 0ce1 lr $AR0, @0x0ce1 + 09fc 0081 02ee lri $AR1, #0x02ee + 09fe 0082 07c0 lri $AR2, #0x07c0 + 0a00 1c62 mrr $AR3, $AR2 + 0a01 02bf 0bd1 call 0bd1_Unknown() + 0a03 00f8 0303 sr @0x0303, $AX0.L + 0a05 029f 09b0 jmp 0x09b0 + 0a07 00c0 0ce1 lr $AR0, @0x0ce1 + 0a09 0081 02ee lri $AR1, #0x02ee + 0a0b 0082 07c0 lri $AR2, #0x07c0 + 0a0d 1c62 mrr $AR3, $AR2 + 0a0e 02bf 0bd1 call 0bd1_Unknown() + 0a10 00f8 0303 sr @0x0303, $AX0.L + 0a12 029f 09bc jmp 0x09bc + 0a14 00c0 0ce1 lr $AR0, @0x0ce1 + 0a16 0081 02ee lri $AR1, #0x02ee + 0a18 0082 07c0 lri $AR2, #0x07c0 + 0a1a 1c62 mrr $AR3, $AR2 + 0a1b 02bf 0bd1 call 0bd1_Unknown() + 0a1d 00f8 0303 sr @0x0303, $AX0.L + 0a1f 029f 09ce jmp 0x09ce + 0a21 00c0 0ce1 lr $AR0, @0x0ce1 + 0a23 0081 02ee lri $AR1, #0x02ee + 0a25 0082 07c0 lri $AR2, #0x07c0 + 0a27 0083 0d08 lri $AR3, #0x0d08 + 0a29 02bf 0c21 call 0c21_Unknown() + 0a2b 00f8 0303 sr @0x0303, $AX0.L + 0a2d 02df ret + + 0a2e 00c0 0ce1 lr $AR0, @0x0ce1 + 0a30 0081 02ee lri $AR1, #0x02ee + 0a32 0082 07c0 lri $AR2, #0x07c0 + 0a34 0083 0d08 lri $AR3, #0x0d08 + 0a36 02bf 0c21 call 0c21_Unknown() + 0a38 00f8 0303 sr @0x0303, $AX0.L + 0a3a 029f 09a4 jmp 0x09a4 + 0a3c 00c0 0ce1 lr $AR0, @0x0ce1 + 0a3e 0081 02ee lri $AR1, #0x02ee + 0a40 0082 07c0 lri $AR2, #0x07c0 + 0a42 0083 0d08 lri $AR3, #0x0d08 + 0a44 02bf 0c21 call 0c21_Unknown() + 0a46 00f8 0303 sr @0x0303, $AX0.L + 0a48 029f 09b0 jmp 0x09b0 + 0a4a 00c0 0ce1 lr $AR0, @0x0ce1 + 0a4c 0081 02ee lri $AR1, #0x02ee + 0a4e 0082 07c0 lri $AR2, #0x07c0 + 0a50 0083 0d08 lri $AR3, #0x0d08 + 0a52 02bf 0c21 call 0c21_Unknown() + 0a54 00f8 0303 sr @0x0303, $AX0.L + 0a56 029f 09bc jmp 0x09bc + 0a58 00c0 0ce1 lr $AR0, @0x0ce1 + 0a5a 0081 02ee lri $AR1, #0x02ee + 0a5c 0082 07c0 lri $AR2, #0x07c0 + 0a5e 0083 0d08 lri $AR3, #0x0d08 + 0a60 02bf 0c21 call 0c21_Unknown() + 0a62 00f8 0303 sr @0x0303, $AX0.L + 0a64 029f 09ce jmp 0x09ce + 0a66 00c0 0ce2 lr $AR0, @0x0ce2 + 0a68 0081 02e6 lri $AR1, #0x02e6 + 0a6a 0082 0880 lri $AR2, #0x0880 + 0a6c 1c62 mrr $AR3, $AR2 + 0a6d 02bf 0bd1 call 0bd1_Unknown() + 0a6f 00f8 02fc sr @0x02fc, $AX0.L + 0a71 02df ret + + 0a72 00c0 0ce3 lr $AR0, @0x0ce3 + 0a74 0081 02e8 lri $AR1, #0x02e8 + 0a76 0082 0940 lri $AR2, #0x0940 + 0a78 1c62 mrr $AR3, $AR2 + 0a79 02bf 0bd1 call 0bd1_Unknown() + 0a7b 00f8 0300 sr @0x0300, $AX0.L + 0a7d 02df ret + + 0a7e 00c0 0ce2 lr $AR0, @0x0ce2 + 0a80 0081 02e6 lri $AR1, #0x02e6 + 0a82 0082 0880 lri $AR2, #0x0880 + 0a84 1c62 mrr $AR3, $AR2 + 0a85 00c4 0ce3 lr $IX0, @0x0ce3 + 0a87 0085 0940 lri $IX1, #0x0940 + 0a89 02bf 0beb call 0x0beb + 0a8b 00f8 02fc sr @0x02fc, $AX0.L + 0a8d 00fb 0300 sr @0x0300, $AX1.H + 0a8f 02df ret + + 0a90 00c0 0ce2 lr $AR0, @0x0ce2 + 0a92 0081 02e6 lri $AR1, #0x02e6 + 0a94 0082 0880 lri $AR2, #0x0880 + 0a96 0083 0d08 lri $AR3, #0x0d08 + 0a98 00c4 0ce3 lr $IX0, @0x0ce3 + 0a9a 0085 0940 lri $IX1, #0x0940 + 0a9c 02bf 0c51 call 0x0c51 + 0a9e 00f8 02fc sr @0x02fc, $AX0.L + 0aa0 00fb 0300 sr @0x0300, $AX1.H + 0aa2 02df ret + 0aa3 00c0 0ce1 lr $AR0, @0x0ce1 + 0aa5 0081 02f0 lri $AR1, #0x02f0 + 0aa7 0082 0a00 lri $AR2, #0x0a00 + 0aa9 1c62 mrr $AR3, $AR2 + 0aaa 02bf 0bd1 call 0bd1_Unknown() + 0aac 00f8 0304 sr @0x0304, $AX0.L + 0aae 02df ret + + 0aaf 00c0 0ce1 lr $AR0, @0x0ce1 + 0ab1 0081 02f0 lri $AR1, #0x02f0 + 0ab3 0082 0a00 lri $AR2, #0x0a00 + 0ab5 1c62 mrr $AR3, $AR2 + 0ab6 02bf 0bd1 call 0bd1_Unknown() + 0ab8 00f8 0304 sr @0x0304, $AX0.L + 0aba 029f 0a66 jmp 0x0a66 + 0abc 00c0 0ce1 lr $AR0, @0x0ce1 + 0abe 0081 02f0 lri $AR1, #0x02f0 + 0ac0 0082 0a00 lri $AR2, #0x0a00 + 0ac2 1c62 mrr $AR3, $AR2 + 0ac3 02bf 0bd1 call 0bd1_Unknown() + 0ac5 00f8 0304 sr @0x0304, $AX0.L + 0ac7 029f 0a72 jmp 0x0a72 + 0ac9 00c0 0ce1 lr $AR0, @0x0ce1 + 0acb 0081 02f0 lri $AR1, #0x02f0 + 0acd 0082 0a00 lri $AR2, #0x0a00 + 0acf 1c62 mrr $AR3, $AR2 + 0ad0 02bf 0bd1 call 0bd1_Unknown() + 0ad2 00f8 0304 sr @0x0304, $AX0.L + 0ad4 029f 0a7e jmp 0x0a7e + 0ad6 00c0 0ce1 lr $AR0, @0x0ce1 + 0ad8 0081 02f0 lri $AR1, #0x02f0 + 0ada 0082 0a00 lri $AR2, #0x0a00 + 0adc 1c62 mrr $AR3, $AR2 + 0add 02bf 0bd1 call 0bd1_Unknown() + 0adf 00f8 0304 sr @0x0304, $AX0.L + 0ae1 029f 0a90 jmp 0x0a90 + 0ae3 00c0 0ce1 lr $AR0, @0x0ce1 + 0ae5 0081 02f0 lri $AR1, #0x02f0 + 0ae7 0082 0a00 lri $AR2, #0x0a00 + 0ae9 0083 0d08 lri $AR3, #0x0d08 + 0aeb 02bf 0c21 call 0c21_Unknown() + 0aed 00f8 0304 sr @0x0304, $AX0.L + 0aef 02df ret + + 0af0 00c0 0ce1 lr $AR0, @0x0ce1 + 0af2 0081 02f0 lri $AR1, #0x02f0 + 0af4 0082 0a00 lri $AR2, #0x0a00 + 0af6 0083 0d08 lri $AR3, #0x0d08 + 0af8 02bf 0c21 call 0c21_Unknown() + 0afa 00f8 0304 sr @0x0304, $AX0.L + 0afc 029f 0a66 jmp 0x0a66 + 0afe 00c0 0ce1 lr $AR0, @0x0ce1 + 0b00 0081 02f0 lri $AR1, #0x02f0 + 0b02 0082 0a00 lri $AR2, #0x0a00 + 0b04 0083 0d08 lri $AR3, #0x0d08 + 0b06 02bf 0c21 call 0c21_Unknown() + 0b08 00f8 0304 sr @0x0304, $AX0.L + 0b0a 029f 0a72 jmp 0x0a72 + 0b0c 00c0 0ce1 lr $AR0, @0x0ce1 + 0b0e 0081 02f0 lri $AR1, #0x02f0 + 0b10 0082 0a00 lri $AR2, #0x0a00 + 0b12 0083 0d08 lri $AR3, #0x0d08 + 0b14 02bf 0c21 call 0c21_Unknown() + 0b16 00f8 0304 sr @0x0304, $AX0.L + 0b18 029f 0a7e jmp 0x0a7e + 0b1a 00c0 0ce1 lr $AR0, @0x0ce1 + 0b1c 0081 02f0 lri $AR1, #0x02f0 + 0b1e 0082 0a00 lri $AR2, #0x0a00 + 0b20 0083 0d08 lri $AR3, #0x0d08 + 0b22 02bf 0c21 call 0c21_Unknown() + 0b24 00f8 0304 sr @0x0304, $AX0.L + 0b26 029f 0a90 jmp 0x0a90 + 0b28 00c0 0ce1 lr $AR0, @0x0ce1 + 0b2a 0081 02e6 lri $AR1, #0x02e6 + 0b2c 0082 0880 lri $AR2, #0x0880 + 0b2e 1c62 mrr $AR3, $AR2 + 0b2f 02bf 0bd1 call 0bd1_Unknown() + 0b31 00f8 02fc sr @0x02fc, $AX0.L + 0b33 02df ret + + 0b34 00c0 0ce1 lr $AR0, @0x0ce1 + 0b36 0081 02e8 lri $AR1, #0x02e8 + 0b38 0082 0940 lri $AR2, #0x0940 + 0b3a 1c62 mrr $AR3, $AR2 + 0b3b 02bf 0bd1 call 0bd1_Unknown() + 0b3d 00f8 0300 sr @0x0300, $AX0.L + 0b3f 02df ret + + 0b40 00c0 0ce1 lr $AR0, @0x0ce1 + 0b42 0081 02e6 lri $AR1, #0x02e6 + 0b44 0082 0880 lri $AR2, #0x0880 + 0b46 1c62 mrr $AR3, $AR2 + 0b47 00c4 0ce1 lr $IX0, @0x0ce1 + 0b49 0085 0940 lri $IX1, #0x0940 + 0b4b 02bf 0beb call 0x0beb + 0b4d 00f8 02fc sr @0x02fc, $AX0.L + 0b4f 00fb 0300 sr @0x0300, $AX1.H + 0b51 02df ret + +void 0b52_Maybe_Mixer() { + 0b52 00c0 0ce1 lr $AR0, @0x0ce1 + 0b54 0081 02e6 lri $AR1, #0x02e6 + 0b56 0082 0880 lri $AR2, #0x0880 + 0b58 0083 0d08 lri $AR3, #0x0d08 + 0b5a 00c4 0ce1 lr $IX0, @0x0ce1 + 0b5c 0085 0940 lri $IX1, #0x0940 + 0b5e 02bf 0c51 call 0x0c51 + 0b60 00f8 02fc sr @0x02fc, $AX0.L + 0b62 00fb 0300 sr @0x0300, $AX1.H + 0b64 02df ret + 0b65 00c0 0ce1 lr $AR0, @0x0ce1 + 0b67 0081 02f0 lri $AR1, #0x02f0 + 0b69 0082 0a00 lri $AR2, #0x0a00 + 0b6b 1c62 mrr $AR3, $AR2 + 0b6c 02bf 0bd1 call 0bd1_Unknown() + 0b6e 00f8 0304 sr @0x0304, $AX0.L + 0b70 029f 0b28 jmp 0x0b28 + 0b72 00c0 0ce1 lr $AR0, @0x0ce1 + 0b74 0081 02f0 lri $AR1, #0x02f0 + 0b76 0082 0a00 lri $AR2, #0x0a00 + 0b78 1c62 mrr $AR3, $AR2 + 0b79 02bf 0bd1 call 0bd1_Unknown() + 0b7b 00f8 0304 sr @0x0304, $AX0.L + 0b7d 029f 0b34 jmp 0x0b34 + 0b7f 00c0 0ce1 lr $AR0, @0x0ce1 + 0b81 0081 02f0 lri $AR1, #0x02f0 + 0b83 0082 0a00 lri $AR2, #0x0a00 + 0b85 1c62 mrr $AR3, $AR2 + 0b86 02bf 0bd1 call 0bd1_Unknown() + 0b88 00f8 0304 sr @0x0304, $AX0.L + 0b8a 029f 0b40 jmp 0x0b40 + 0b8c 00c0 0ce1 lr $AR0, @0x0ce1 + 0b8e 0081 02f0 lri $AR1, #0x02f0 + 0b90 0082 0a00 lri $AR2, #0x0a00 + 0b92 1c62 mrr $AR3, $AR2 + 0b93 02bf 0bd1 call 0bd1_Unknown() + 0b95 00f8 0304 sr @0x0304, $AX0.L + 0b97 029f 0b52 jmp 0x0b52 + 0b99 00c0 0ce1 lr $AR0, @0x0ce1 + 0b9b 0081 02f0 lri $AR1, #0x02f0 + 0b9d 0082 0a00 lri $AR2, #0x0a00 + 0b9f 0083 0d08 lri $AR3, #0x0d08 + 0ba1 02bf 0c21 call 0c21_Unknown() + 0ba3 00f8 0304 sr @0x0304, $AX0.L + 0ba5 029f 0b28 jmp 0x0b28 + 0ba7 00c0 0ce1 lr $AR0, @0x0ce1 + 0ba9 0081 02f0 lri $AR1, #0x02f0 + 0bab 0082 0a00 lri $AR2, #0x0a00 + 0bad 0083 0d08 lri $AR3, #0x0d08 + 0baf 02bf 0c21 call 0c21_Unknown() + 0bb1 00f8 0304 sr @0x0304, $AX0.L + 0bb3 029f 0b34 jmp 0x0b34 + 0bb5 00c0 0ce1 lr $AR0, @0x0ce1 + 0bb7 0081 02f0 lri $AR1, #0x02f0 + 0bb9 0082 0a00 lri $AR2, #0x0a00 + 0bbb 0083 0d08 lri $AR3, #0x0d08 + 0bbd 02bf 0c21 call 0c21_Unknown() + 0bbf 00f8 0304 sr @0x0304, $AX0.L + 0bc1 029f 0b40 jmp 0x0b40 + 0bc3 00c0 0ce1 lr $AR0, @0x0ce1 + 0bc5 0081 02f0 lri $AR1, #0x02f0 + 0bc7 0082 0a00 lri $AR2, #0x0a00 + 0bc9 0083 0d08 lri $AR3, #0x0d08 + 0bcb 02bf 0c21 call 0c21_Unknown() + 0bcd 00f8 0304 sr @0x0304, $AX0.L + 0bcf 029f 0b52 jmp 0x0b52 +} + +// Volume +// AR0: factor table? +// AR1: factor +// AR2: input +// AR3: output +// returns: last in AX0.L (16 highest bits) +// +// basically: +// for (i = 0; i < 96; i++) +// out[i] = ((in[i*2+1] << 16) + (ar0[i] * factor)) >> 16; +// +// so that you don't bang your head against your keyboard trying to figure +// out those awful pipelined loops (I had to get myself a new head to finish +// this one). :P +// +void 0bd1_ApplyVolume1() { + 0bd1 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] + 0bd2 1939 lrri $AX1.L, @$AR1 // ax1.l = mem[ar1++] + 0bd3 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 // = ax0.h * ax1.l; ac0.m = mem[ar2++] + 0bd4 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++] + 0bd5 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 // acc0 <<= 16; ac1.m = mem[ar2++] + 0bd6 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] + 0bd7 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 // acc0 += ; = ax0.h * ax1.l; ac1.l = mem[ar2++] + 0bd8 9100 asr16 $ACC0 // acc0 >>= 16 + 0bd9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m + 0bda 112f 0be3 bloopi #0x2f, 0x0be3 // for (i = 0; i < 0x2f; i++) + 0bdc b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L // acc1 += ; = ax0.h * ax1.l; mem[ar3++] = ac0.l; + 0bdd 9972 asr16'l $ACC1 : $AC0.M, @$AR2 // acc1 >>= 16; ac0.m = mem[ar2++] + 0bde 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++]; + 0bdf f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M // acc0 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac1.m + 0be0 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L // acc0 += ; = ax0.h * ax1.l; mem[ar3++] = ac1.l; + 0be1 917a asr16'l $ACC0 : $AC1.M, @$AR2 // acc0 >>= 16; ac1.m = mem[ar2++] + 0be2 195d lrri $AC1.L, @$AR2 // ac1.l = mem[ar2++]; + 0be3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m + 0be4 1b7c srri @$AR3, $AC0.L // mem[ar3++] = ac0.l; + 0be5 6e00 movp $ACC0 // acc0 = ; + 0be6 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M // acc1 += ; ax0.l = ac0.m; + 0be7 9900 asr16 $ACC1 // acc1 >>= 16; + 0be8 1b7f srri @$AR3, $AC1.M // mem[ar3++] = ac1.m; + 0be9 812b clr's $ACC0 : @$AR3, $AC1.L // acc0 = 0; mem[ar3++] = ac1.l; + 0bea 02df ret +} + + 0beb 191a lrri $AX0.H, @$AR0 + 0bec 1939 lrri $AX1.L, @$AR1 + 0bed b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 + 0bee 195c lrri $AC0.L, @$AR2 + 0bef f07a lsl16'l $ACC0 : $AC1.M, @$AR2 + 0bf0 191a lrri $AX0.H, @$AR0 + 0bf1 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 + 0bf2 9100 asr16 $ACC0 + 0bf3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0bf4 112f 0bfd bloopi #0x2f, 0x0bfd + 0bf6 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0bf7 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0bf8 195c lrri $AC0.L, @$AR2 + 0bf9 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0bfa b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0bfb 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0bfc 195d lrri $AC1.L, @$AR2 + 0bfd f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0bfe 1b7c srri @$AR3, $AC0.L + 0bff 6e00 movp $ACC0 + 0c00 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M + 0c01 9909 asr16'ir $ACC1 : $AR1 + 0c02 1b7f srri @$AR3, $AC1.M + 0c03 1b7d srri @$AR3, $AC1.L + 0c04 1c04 mrr $AR0, $IX0 + 0c05 1c45 mrr $AR2, $IX1 + 0c06 1c62 mrr $AR3, $AR2 + 0c07 191a lrri $AX0.H, @$AR0 + 0c08 1939 lrri $AX1.L, @$AR1 + 0c09 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 + 0c0a 195c lrri $AC0.L, @$AR2 + 0c0b f07a lsl16'l $ACC0 : $AC1.M, @$AR2 + 0c0c 191a lrri $AX0.H, @$AR0 + 0c0d b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 + 0c0e 9100 asr16 $ACC0 + 0c0f f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c10 112f 0c19 bloopi #0x2f, 0x0c19 + 0c12 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0c13 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0c14 195c lrri $AC0.L, @$AR2 + 0c15 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0c16 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0c17 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0c18 195d lrri $AC1.L, @$AR2 + 0c19 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c1a 1b7c srri @$AR3, $AC0.L + 0c1b 6e00 movp $ACC0 + 0c1c 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M + 0c1d 9900 asr16 $ACC1 + 0c1e 1b7f srri @$AR3, $AC1.M + 0c1f 1b7d srri @$AR3, $AC1.L + 0c20 02df ret + +void 0c21_Unknown() { + 0c21 1ce3 mrr $IX3, $AR3 + 0c22 8e00 set16 + 0c23 8100 clr $ACC0 + 0c24 8971 clr'l $ACC1 : $AC0.M, @$AR1 + 0c25 18bf lrrd $AC1.M, @$AR1 + 0c26 1b7e srri @$AR3, $AC0.M + 0c27 4c00 add $ACC0, $ACC1 + 0c28 1b7e srri @$AR3, $AC0.M + 0c29 112f 0c2e bloopi #0x2f, 0x0c2e + 0c2b 4c00 add $ACC0, $ACC1 + 0c2c 1b7e srri @$AR3, $AC0.M + 0c2d 4c00 add $ACC0, $ACC1 + 0c2e 1b7e srri @$AR3, $AC0.M + 0c2f 4c00 add $ACC0, $ACC1 + 0c30 1b3e srri @$AR1, $AC0.M + 0c31 1c27 mrr $AR1, $IX3 + 0c32 1c62 mrr $AR3, $AR2 + 0c33 8f50 set40'l : $AX0.H, @$AR0 + 0c34 1939 lrri $AX1.L, @$AR1 + 0c35 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 + 0c36 195c lrri $AC0.L, @$AR2 + 0c37 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 + 0c38 191a lrri $AX0.H, @$AR0 + 0c39 1939 lrri $AX1.L, @$AR1 + 0c3a b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 + 0c3b 9100 asr16 $ACC0 + 0c3c f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c3d 1939 lrri $AX1.L, @$AR1 + 0c3e 112f 0c49 bloopi #0x2f, 0x0c49 + 0c40 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0c41 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0c42 195c lrri $AC0.L, @$AR2 + 0c43 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0c44 1939 lrri $AX1.L, @$AR1 + 0c45 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0c46 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0c47 195d lrri $AC1.L, @$AR2 + 0c48 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c49 1939 lrri $AX1.L, @$AR1 + 0c4a 1b7c srri @$AR3, $AC0.L + 0c4b 6e00 movp $ACC0 + 0c4c 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M + 0c4d 9900 asr16 $ACC1 + 0c4e 1b7f srri @$AR3, $AC1.M + 0c4f 1b7d srri @$AR3, $AC1.L + 0c50 02df ret + 0c51 1ce3 mrr $IX3, $AR3 + 0c52 8e00 set16 + 0c53 8100 clr $ACC0 + 0c54 8971 clr'l $ACC1 : $AC0.M, @$AR1 + 0c55 18bf lrrd $AC1.M, @$AR1 + 0c56 1b7e srri @$AR3, $AC0.M + 0c57 4c00 add $ACC0, $ACC1 + 0c58 1b7e srri @$AR3, $AC0.M + 0c59 112f 0c5e bloopi #0x2f, 0x0c5e + 0c5b 4c00 add $ACC0, $ACC1 + 0c5c 1b7e srri @$AR3, $AC0.M + 0c5d 4c00 add $ACC0, $ACC1 + 0c5e 1b7e srri @$AR3, $AC0.M + 0c5f 4c00 add $ACC0, $ACC1 + 0c60 1b3e srri @$AR1, $AC0.M + 0c61 0009 iar $AR1 + 0c62 8100 clr $ACC0 + 0c63 8971 clr'l $ACC1 : $AC0.M, @$AR1 + 0c64 18bf lrrd $AC1.M, @$AR1 + 0c65 1b7e srri @$AR3, $AC0.M + 0c66 4c00 add $ACC0, $ACC1 + 0c67 1b7e srri @$AR3, $AC0.M + 0c68 112f 0c6d bloopi #0x2f, 0x0c6d + 0c6a 4c00 add $ACC0, $ACC1 + 0c6b 1b7e srri @$AR3, $AC0.M + 0c6c 4c00 add $ACC0, $ACC1 + 0c6d 1b7e srri @$AR3, $AC0.M + 0c6e 4c00 add $ACC0, $ACC1 + 0c6f 1b3e srri @$AR1, $AC0.M + 0c70 1c27 mrr $AR1, $IX3 + 0c71 1c62 mrr $AR3, $AR2 + 0c72 8f50 set40'l : $AX0.H, @$AR0 + 0c73 1939 lrri $AX1.L, @$AR1 + 0c74 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 + 0c75 195c lrri $AC0.L, @$AR2 + 0c76 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 + 0c77 191a lrri $AX0.H, @$AR0 + 0c78 1939 lrri $AX1.L, @$AR1 + 0c79 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 + 0c7a 9100 asr16 $ACC0 + 0c7b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c7c 1939 lrri $AX1.L, @$AR1 + 0c7d 112f 0c88 bloopi #0x2f, 0x0c88 + 0c7f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0c80 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0c81 195c lrri $AC0.L, @$AR2 + 0c82 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0c83 1939 lrri $AX1.L, @$AR1 + 0c84 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0c85 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0c86 195d lrri $AC1.L, @$AR2 + 0c87 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c88 1939 lrri $AX1.L, @$AR1 + 0c89 1b7c srri @$AR3, $AC0.L + 0c8a 6e00 movp $ACC0 + 0c8b 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M + 0c8c 9905 asr16'dr $ACC1 : $AR1 + 0c8d 1b7f srri @$AR3, $AC1.M + 0c8e 1b7d srri @$AR3, $AC1.L + 0c8f 1c04 mrr $AR0, $IX0 + 0c90 1c45 mrr $AR2, $IX1 + 0c91 1c62 mrr $AR3, $AR2 + 0c92 191a lrri $AX0.H, @$AR0 + 0c93 1939 lrri $AX1.L, @$AR1 + 0c94 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 + 0c95 195c lrri $AC0.L, @$AR2 + 0c96 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 + 0c97 191a lrri $AX0.H, @$AR0 + 0c98 1939 lrri $AX1.L, @$AR1 + 0c99 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 + 0c9a 9100 asr16 $ACC0 + 0c9b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0c9c 1939 lrri $AX1.L, @$AR1 + 0c9d 112f 0ca8 bloopi #0x2f, 0x0ca8 + 0c9f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0ca0 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0ca1 195c lrri $AC0.L, @$AR2 + 0ca2 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0ca3 1939 lrri $AX1.L, @$AR1 + 0ca4 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0ca5 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0ca6 195d lrri $AC1.L, @$AR2 + 0ca7 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0ca8 1939 lrri $AX1.L, @$AR1 + 0ca9 1b7c srri @$AR3, $AC0.L + 0caa 6e00 movp $ACC0 + 0cab 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M + 0cac 9900 asr16 $ACC1 + 0cad 1b7f srri @$AR3, $AC1.M + 0cae 1b7d srri @$AR3, $AC1.L + 0caf 02df ret + 0cb0 0098 0000 lri $AX0.L, #0x0000 + 0cb2 02df ret +} + + 0cb3 0080 0cc0 lri $AR0, #0x0cc0 + 0cb5 1c62 mrr $AR3, $AR2 + 0cb6 1939 lrri $AX1.L, @$AR1 + 0cb7 191a lrri $AX0.H, @$AR0 + 0cb8 b000 mulx $AX0.H, $AX1.L + 0cb9 195e lrri $AC0.M, @$AR2 + 0cba 195c lrri $AC0.L, @$AR2 + 0cbb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 + 0cbc b400 mulxac $AX0.H, $AX1.L, $ACC0 + 0cbd 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0cbe 195d lrri $AC1.L, @$AR2 + 0cbf f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0cc0 1108 0cc9 bloopi #0x08, 0x0cc9 + 0cc2 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0cc3 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0cc4 195c lrri $AC0.L, @$AR2 + 0cc5 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0cc6 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0cc7 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0cc8 195d lrri $AC1.L, @$AR2 + 0cc9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0cca 4f23 addp's $ACC1 : @$AR3, $AC0.L + 0ccb 9900 asr16 $ACC1 + 0ccc 1b7f srri @$AR3, $AC1.M + 0ccd 6e2b movp's $ACC0 : @$AR3, $AC1.L + 0cce 1f1e mrr $AX0.L, $AC0.M + 0ccf 02df ret + 0cd0 0080 0cc0 lri $AR0, #0x0cc0 + 0cd2 0083 0d08 lri $AR3, #0x0d08 + 0cd4 1ce3 mrr $IX3, $AR3 + 0cd5 8e00 set16 + 0cd6 8100 clr $ACC0 + 0cd7 8971 clr'l $ACC1 : $AC0.M, @$AR1 + 0cd8 18bf lrrd $AC1.M, @$AR1 + 0cd9 1b7e srri @$AR3, $AC0.M + 0cda 4c00 add $ACC0, $ACC1 + 0cdb 1b7e srri @$AR3, $AC0.M + 0cdc 1108 0ce1 bloopi #0x08, 0x0ce1 + 0cde 4c00 add $ACC0, $ACC1 + 0cdf 1b7e srri @$AR3, $AC0.M + 0ce0 4c00 add $ACC0, $ACC1 + 0ce1 1b7e srri @$AR3, $AC0.M + 0ce2 4c00 add $ACC0, $ACC1 + 0ce3 1b3e srri @$AR1, $AC0.M + 0ce4 1c27 mrr $AR1, $IX3 + 0ce5 1c62 mrr $AR3, $AR2 + 0ce6 8f50 set40'l : $AX0.H, @$AR0 + 0ce7 1939 lrri $AX1.L, @$AR1 + 0ce8 b000 mulx $AX0.H, $AX1.L + 0ce9 195e lrri $AC0.M, @$AR2 + 0cea 195c lrri $AC0.L, @$AR2 + 0ceb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 + 0cec 1939 lrri $AX1.L, @$AR1 + 0ced b400 mulxac $AX0.H, $AX1.L, $ACC0 + 0cee 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0cef 195d lrri $AC1.L, @$AR2 + 0cf0 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0cf1 1939 lrri $AX1.L, @$AR1 + 0cf2 1108 0cfd bloopi #0x08, 0x0cfd + 0cf4 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L + 0cf5 9972 asr16'l $ACC1 : $AC0.M, @$AR2 + 0cf6 195c lrri $AC0.L, @$AR2 + 0cf7 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M + 0cf8 1939 lrri $AX1.L, @$AR1 + 0cf9 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L + 0cfa 917a asr16'l $ACC0 : $AC1.M, @$AR2 + 0cfb 195d lrri $AC1.L, @$AR2 + 0cfc f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M + 0cfd 1939 lrri $AX1.L, @$AR1 + 0cfe 4f23 addp's $ACC1 : @$AR3, $AC0.L + 0cff 9900 asr16 $ACC1 + 0d00 1b7f srri @$AR3, $AC1.M + 0d01 6e2b movp's $ACC0 : @$AR3, $AC1.L + 0d02 1f1e mrr $AX0.L, $AC0.M + 0d03 02df ret + +// Command jump table + 0d04 008a // 0x0 - ??? + 0d05 0222 // 0x1 - ??? + 0d06 024f // 0x2 - ??? + 0d07 0e83 // 0x3 - ??? + 0d08 027e // 0x4 - set PBs address + 0d09 049b // 0x5 - ??? + 0d0a 04b4 // 0x6 - ??? + 0d0b 04cd // 0x7 - set output buffers + 0d0c 0dbd // 0x8 - ??? + 0d0d 0ddf // 0x9 - ??? + 0d0e 057b // 0xA - set compressor table + 0d0f 060b // 0xB - ??? + 0d10 0ec6 // 0xC - ??? + 0d11 067c // 0xD - ??? + 0d12 0672 // 0xE - The End + +// Table #1 - entry selected by PB[0x007] bits 0-4 + 0d13 081f lris $AX0.L, #0x1f // 0: Do nothing + 0d14 0820 lris $AX0.L, #0x20 + 0d15 082c lris $AX0.L, #0x2c + 0d16 0838 lris $AX0.L, #0x38 + 0d17 084a lris $AX0.L, #0x4a + 0d18 084a lris $AX0.L, #0x4a + 0d19 084a lris $AX0.L, #0x4a + 0d1a 084a lris $AX0.L, #0x4a + 0d1b 085d lris $AX0.L, #0x5d + 0d1c 0869 lris $AX0.L, #0x69 + 0d1d 0876 lris $AX0.L, #0x76 + 0d1e 0883 lris $AX0.L, #0x83 + 0d1f 0890 lris $AX0.L, #0x90 + 0d20 0890 lris $AX0.L, #0x90 + 0d21 0890 lris $AX0.L, #0x90 + 0d22 0890 lris $AX0.L, #0x90 + 0d23 089d lris $AX0.L, #0x9d + 0d24 08aa lris $AX0.L, #0xaa + 0d25 08b8 lris $AX0.L, #0xb8 + 0d26 08c6 lris $AX0.L, #0xc6 + 0d27 08d4 lris $AX0.L, #0xd4 + 0d28 08d4 lris $AX0.L, #0xd4 + 0d29 08d4 lris $AX0.L, #0xd4 + 0d2a 08d4 lris $AX0.L, #0xd4 + 0d2b 089d lris $AX0.L, #0x9d + 0d2c 08aa lris $AX0.L, #0xaa + 0d2d 08b8 lris $AX0.L, #0xb8 + 0d2e 08c6 lris $AX0.L, #0xc6 + 0d2f 08d4 lris $AX0.L, #0xd4 + 0d30 08d4 lris $AX0.L, #0xd4 + 0d31 08d4 lris $AX0.L, #0xd4 + 0d32 08d4 lris $AX0.L, #0xd4 + +// Table #2 - entry selected by PB[0x006] bits 0-4 + 0d33 081f lris $AX0.L, #0x1f // 0: Do nothing + 0d34 08e2 lris $AX0.L, #0xe2 + 0d35 08ee lris $AX0.L, #0xee + 0d36 08fa lris $AX0.L, #0xfa + 0d37 090c lris $AX1.L, #0x0c + 0d38 090c lris $AX1.L, #0x0c + 0d39 090c lris $AX1.L, #0x0c + 0d3a 090c lris $AX1.L, #0x0c + 0d3b 091f lris $AX1.L, #0x1f + 0d3c 092b lris $AX1.L, #0x2b + 0d3d 0938 lris $AX1.L, #0x38 + 0d3e 0945 lris $AX1.L, #0x45 + 0d3f 0952 lris $AX1.L, #0x52 + 0d40 0952 lris $AX1.L, #0x52 + 0d41 0952 lris $AX1.L, #0x52 + 0d42 0952 lris $AX1.L, #0x52 + 0d43 095f lris $AX1.L, #0x5f + 0d44 096c lris $AX1.L, #0x6c + 0d45 097a lris $AX1.L, #0x7a + 0d46 0988 lris $AX1.L, #0x88 + 0d47 0996 lris $AX1.L, #0x96 + 0d48 0996 lris $AX1.L, #0x96 + 0d49 0996 lris $AX1.L, #0x96 + 0d4a 0996 lris $AX1.L, #0x96 + 0d4b 095f lris $AX1.L, #0x5f + 0d4c 096c lris $AX1.L, #0x6c + 0d4d 097a lris $AX1.L, #0x7a + 0d4e 0988 lris $AX1.L, #0x88 + 0d4f 0996 lris $AX1.L, #0x96 + 0d50 0996 lris $AX1.L, #0x96 + 0d51 0996 lris $AX1.L, #0x96 + 0d52 0996 lris $AX1.L, #0x96 + +// Table #3 - entry selected by PB[0x006] bits 5-9 + 0d53 081f lris $AX0.L, #0x1f // 0: Do nothing + 0d54 09a4 lris $AX1.L, #0xa4 + 0d55 09b0 lris $AX1.L, #0xb0 + 0d56 09bc lris $AX1.L, #0xbc + 0d57 09ce lris $AX1.L, #0xce + 0d58 09ce lris $AX1.L, #0xce + 0d59 09ce lris $AX1.L, #0xce + 0d5a 09ce lris $AX1.L, #0xce + 0d5b 09e1 lris $AX1.L, #0xe1 + 0d5c 09ed lris $AX1.L, #0xed + 0d5d 09fa lris $AX1.L, #0xfa + 0d5e 0a07 lris $AX0.H, #0x07 + 0d5f 0a14 lris $AX0.H, #0x14 + 0d60 0a14 lris $AX0.H, #0x14 + 0d61 0a14 lris $AX0.H, #0x14 + 0d62 0a14 lris $AX0.H, #0x14 + 0d63 0a21 lris $AX0.H, #0x21 + 0d64 0a2e lris $AX0.H, #0x2e + 0d65 0a3c lris $AX0.H, #0x3c + 0d66 0a4a lris $AX0.H, #0x4a + 0d67 0a58 lris $AX0.H, #0x58 + 0d68 0a58 lris $AX0.H, #0x58 + 0d69 0a58 lris $AX0.H, #0x58 + 0d6a 0a58 lris $AX0.H, #0x58 + 0d6b 0a21 lris $AX0.H, #0x21 + 0d6c 0a2e lris $AX0.H, #0x2e + 0d6d 0a3c lris $AX0.H, #0x3c + 0d6e 0a4a lris $AX0.H, #0x4a + 0d6f 0a58 lris $AX0.H, #0x58 + 0d70 0a58 lris $AX0.H, #0x58 + 0d71 0a58 lris $AX0.H, #0x58 + 0d72 0a58 lris $AX0.H, #0x58 + +// Table #4 - entry selected by PB[0x006] bits 10-15 +// (twice longer than the three previous ones!) + 0d73 081f lris $AX0.L, #0x1f // 0: Do nothing + 0d74 0a66 lris $AX0.H, #0x66 + 0d75 0a72 lris $AX0.H, #0x72 + 0d76 0a7e lris $AX0.H, #0x7e + 0d77 0a90 lris $AX0.H, #0x90 + 0d78 0a90 lris $AX0.H, #0x90 + 0d79 0a90 lris $AX0.H, #0x90 + 0d7a 0a90 lris $AX0.H, #0x90 + 0d7b 0aa3 lris $AX0.H, #0xa3 + 0d7c 0aaf lris $AX0.H, #0xaf + 0d7d 0abc lris $AX0.H, #0xbc + 0d7e 0ac9 lris $AX0.H, #0xc9 + 0d7f 0ad6 lris $AX0.H, #0xd6 + 0d80 0ad6 lris $AX0.H, #0xd6 + 0d81 0ad6 lris $AX0.H, #0xd6 + 0d82 0ad6 lris $AX0.H, #0xd6 + 0d83 0ae3 lris $AX0.H, #0xe3 + 0d84 0af0 lris $AX0.H, #0xf0 + 0d85 0afe lris $AX0.H, #0xfe + 0d86 0b0c lris $AX1.H, #0x0c + 0d87 0b1a lris $AX1.H, #0x1a + 0d88 0b1a lris $AX1.H, #0x1a + 0d89 0b1a lris $AX1.H, #0x1a + 0d8a 0b1a lris $AX1.H, #0x1a + 0d8b 0ae3 lris $AX0.H, #0xe3 + 0d8c 0af0 lris $AX0.H, #0xf0 + 0d8d 0afe lris $AX0.H, #0xfe + 0d8e 0b0c lris $AX1.H, #0x0c + 0d8f 0b1a lris $AX1.H, #0x1a + 0d90 0b1a lris $AX1.H, #0x1a + 0d91 0b1a lris $AX1.H, #0x1a + 0d92 0b1a lris $AX1.H, #0x1a + 0d93 081f lris $AX0.L, #0x1f + 0d94 0b28 lris $AX1.H, #0x28 + 0d95 0b34 lris $AX1.H, #0x34 + 0d96 0b40 lris $AX1.H, #0x40 + 0d97 0b52 lris $AX1.H, #0x52 + 0d98 0b52 lris $AX1.H, #0x52 + 0d99 0b52 lris $AX1.H, #0x52 + 0d9a 0b52 lris $AX1.H, #0x52 + 0d9b 0aa3 lris $AX0.H, #0xa3 + 0d9c 0b65 lris $AX1.H, #0x65 + 0d9d 0b72 lris $AX1.H, #0x72 + 0d9e 0b7f lris $AX1.H, #0x7f + 0d9f 0b8c lris $AX1.H, #0x8c + 0da0 0b8c lris $AX1.H, #0x8c + 0da1 0b8c lris $AX1.H, #0x8c + 0da2 0b8c lris $AX1.H, #0x8c + 0da3 0ae3 lris $AX0.H, #0xe3 + 0da4 0b99 lris $AX1.H, #0x99 + 0da5 0ba7 lris $AX1.H, #0xa7 + 0da6 0bb5 lris $AX1.H, #0xb5 + 0da7 0bc3 lris $AX1.H, #0xc3 + 0da8 0bc3 lris $AX1.H, #0xc3 + 0da9 0bc3 lris $AX1.H, #0xc3 + 0daa 0bc3 lris $AX1.H, #0xc3 + 0dab 0ae3 lris $AX0.H, #0xe3 + 0dac 0b99 lris $AX1.H, #0x99 + 0dad 0ba7 lris $AX1.H, #0xa7 + 0dae 0bb5 lris $AX1.H, #0xb5 + 0daf 0bc3 lris $AX1.H, #0xc3 + 0db0 0bc3 lris $AX1.H, #0xc3 + 0db1 0bc3 lris $AX1.H, #0xc3 + 0db2 0bc3 lris $AX1.H, #0xc3 + + + 0db3 0cb0 lris $AC0.L, #0xb0 + 0db4 0cb3 lris $AC0.L, #0xb3 + 0db5 0cd0 lris $AC0.L, #0xd0 + 0db6 0cd0 lris $AC0.L, #0xd0 + +// Jump table for sample rate converters + 0db7 071a cmpis $ACC1, #0x1a // none + 0db8 076b cmpis $ACC1, #0x6b // ? + 0db9 07c0 cmpis $ACC1, #0xc0 // linear + +// Table for coef_select +// addresses into COEF ROM + 0dba 1000 loopi #0x00 + 0dbb 1200 sbclr #0x00 + 0dbc 1400 lsl $ACC0, #0 + +void 0dbd_Cmd_8() { + 0dbd 8e00 set16 + 0dbe 00c4 0ce6 lr $IX0, @0x0ce6 + 0dc0 1905 lrri $IX1, @$AR0 + 0dc1 00e5 0ce6 sr @0x0ce6, $IX1 + 0dc3 0086 0400 lri $IX2, #0x0400 + 0dc5 191e lrri $AC0.M, @$AR0 + 0dc6 191c lrri $AC0.L, @$AR0 + 0dc7 2ece srs @DSMAH, $AC0.M + 0dc8 2ccf srs @DSMAL, $AC0.L + 0dc9 16cd 0400 si @DSPA, #0x0400 + 0dcb 16c9 0001 si @DSCR, #0x0001 + 0dcd 16cb 0480 si @DSBL, #0x0480 + 0dcf 02bf 0084 call 0084_WaitForDMACompletion() + 0dd1 191e lrri $AC0.M, @$AR0 + 0dd2 191c lrri $AC0.L, @$AR0 + 0dd3 2ece srs @DSMAH, $AC0.M + 0dd4 2ccf srs @DSMAL, $AC0.L + 0dd5 16cd 0940 si @DSPA, #0x0940 + 0dd7 16c9 0001 si @DSCR, #0x0001 + 0dd9 16cb 0180 si @DSBL, #0x0180 + 0ddb 02bf 0084 call 0084_WaitForDMACompletion() + 0ddd 029f 0e01 jmp 0e01_Unk() +} + +void 0ddf_Cmd_9() { + 0ddf 8e00 set16 + 0de0 00c4 0ce7 lr $IX0, @0x0ce7 + 0de2 1905 lrri $IX1, @$AR0 + 0de3 00e5 0ce7 sr @0x0ce7, $IX1 + 0de5 0086 0640 lri $IX2, #0x0640 + 0de7 191e lrri $AC0.M, @$AR0 + 0de8 191c lrri $AC0.L, @$AR0 + 0de9 2ece srs @DSMAH, $AC0.M + 0dea 2ccf srs @DSMAL, $AC0.L + 0deb 16cd 0640 si @DSPA, #0x0640 + 0ded 16c9 0001 si @DSCR, #0x0001 + 0def 16cb 0480 si @DSBL, #0x0480 + 0df1 02bf 0084 call 0084_WaitForDMACompletion() + 0df3 191e lrri $AC0.M, @$AR0 + 0df4 191c lrri $AC0.L, @$AR0 + 0df5 2ece srs @DSMAH, $AC0.M + 0df6 2ccf srs @DSMAL, $AC0.L + 0df7 16cd 0a00 si @DSPA, #0x0a00 + 0df9 16c9 0001 si @DSCR, #0x0001 + 0dfb 16cb 0180 si @DSBL, #0x0180 + 0dfd 02bf 0084 call 0084_WaitForDMACompletion() + 0dff 029f 0e01 jmp 0e01_Unk() +} + +void 0e01_Unk() { + 0e01 8b00 m0 + 0e02 8100 clr $ACC0 + 0e03 8900 clr $ACC1 + 0e04 1fc4 mrr $AC0.M, $IX0 + 0e05 1fe5 mrr $AC1.M, $IX1 + 0e06 5d00 sub $ACC1, $ACC0 + 0e07 009a 02ab lri $AX0.H, #0x02ab + 0e09 009b 02aa lri $AX1.H, #0x02aa + 0e0b 0081 0d08 lri $AR1, #0x0d08 + 0e0d d000 mulc $AC1.M, $AX0.H + 0e0e d400 mulcac $AC1.M, $AX0.H, $ACC0 + 0e0f 111f 0e13 bloopi #0x1f, 0x0e13 + 0e11 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e12 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e13 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e14 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e15 4e31 addp's $ACC0 : @$AR1, $AC0.M + 0e16 1b25 srri @$AR1, $IX1 + 0e17 191e lrri $AC0.M, @$AR0 + 0e18 191c lrri $AC0.L, @$AR0 + 0e19 2ece srs @DSMAH, $AC0.M + 0e1a 2ccf srs @DSMAL, $AC0.L + 0e1b 00e6 ffcd sr @DSPA, $IX2 + 0e1d 16c9 0000 si @DSCR, #0x0000 + 0e1f 16cb 0180 si @DSBL, #0x0180 + 0e21 0081 0000 lri $AR1, #0x0000 + 0e23 1c41 mrr $AR2, $AR1 + 0e24 02bf 0084 call 0084_WaitForDMACompletion() + 0e26 02bf 0e57 call 0x0e57 + 0e28 191e lrri $AC0.M, @$AR0 + 0e29 191c lrri $AC0.L, @$AR0 + 0e2a 2ece srs @DSMAH, $AC0.M + 0e2b 2ccf srs @DSMAL, $AC0.L + 0e2c 00e6 ffcd sr @DSPA, $IX2 + 0e2e 16c9 0000 si @DSCR, #0x0000 + 0e30 16cb 0180 si @DSBL, #0x0180 + 0e32 02bf 0084 call 0084_WaitForDMACompletion() + 0e34 02bf 0e57 call 0x0e57 + 0e36 191e lrri $AC0.M, @$AR0 + 0e37 191c lrri $AC0.L, @$AR0 + 0e38 2ece srs @DSMAH, $AC0.M + 0e39 2ccf srs @DSMAL, $AC0.L + 0e3a 00e6 ffcd sr @DSPA, $IX2 + 0e3c 16c9 0000 si @DSCR, #0x0000 + 0e3e 16cb 0180 si @DSBL, #0x0180 + 0e40 02bf 0084 call 0084_WaitForDMACompletion() + 0e42 02bf 0e57 call 0x0e57 + 0e44 191e lrri $AC0.M, @$AR0 + 0e45 191c lrri $AC0.L, @$AR0 + 0e46 2ece srs @DSMAH, $AC0.M + 0e47 2ccf srs @DSMAL, $AC0.L + 0e48 00e6 ffcd sr @DSPA, $IX2 + 0e4a 16c9 0000 si @DSCR, #0x0000 + 0e4c 16cb 0180 si @DSBL, #0x0180 + 0e4e 0081 0880 lri $AR1, #0x0880 + 0e50 1c41 mrr $AR2, $AR1 + 0e51 02bf 0084 call 0084_WaitForDMACompletion() + 0e53 02bf 0e57 call 0x0e57 + 0e55 029f 006f jmp 006f_MailHandler() +} + + 0e57 8f00 set40 + 0e58 8d00 set15 + 0e59 8a00 m2 + 0e5a 00e0 0cd2 sr @0x0cd2, $AR0 + 0e5c 0080 0d08 lri $AR0, #0x0d08 + 0e5e 1c66 mrr $AR3, $IX2 + 0e5f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0e60 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e61 a000 mulx $AX0.L, $AX1.L + 0e62 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0e63 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 0e64 4e00 addp $ACC0 + 0e65 4800 addax $ACC0, $AX0.L + 0e66 112f 0e75 bloopi #0x2f, 0x0e75 + 0e68 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0e69 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e6a a000 mulx $AX0.L, $AX1.L + 0e6b af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0e6c 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0e6d 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0e6e 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0e6f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0e70 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e71 a000 mulx $AX0.L, $AX1.L + 0e72 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0e73 9141 asr16'l $ACC0 : $AX0.L, @$AR1 + 0e74 4e3a addp's $ACC0 : @$AR2, $AC1.M + 0e75 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 0e76 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 + 0e77 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e78 a000 mulx $AX0.L, $AX1.L + 0e79 af00 mulxmv $AX0.L, $AX1.H, $ACC1 + 0e7a 9941 asr16'l $ACC1 : $AX0.L, @$AR1 + 0e7b 4f32 addp's $ACC1 : @$AR2, $AC0.M + 0e7c 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0e7d 1b5f srri @$AR2, $AC1.M + 0e7e 1b5d srri @$AR2, $AC1.L + 0e7f 00c0 0cd2 lr $AR0, @0x0cd2 + 0e81 8e00 set16 + 0e82 02df ret + +void 0e83_Cmd_3() { + 0e83 8e00 set16 + 0e84 191f lrri $AC1.M, @$AR0 + 0e85 191d lrri $AC1.L, @$AR0 + 0e86 2fce srs @DSMAH, $AC1.M + 0e87 2dcf srs @DSMAL, $AC1.L + 0e88 16cd 0d08 si @DSPA, #0x0d08 + 0e8a 16c9 0000 si @DSCR, #0x0000 + 0e8c 16cb 0300 si @DSBL, #0x0300 + 0e8e 02bf 0084 call 0084_WaitForDMACompletion() + 0e90 1c80 mrr $IX0, $AR0 + 0e91 8f00 set40 + 0e92 0080 0d08 lri $AR0, #0x0d08 + 0e94 0083 0000 lri $AR3, #0x0000 + 0e96 1c43 mrr $AR2, $AR3 + 0e97 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0e98 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e99 6a00 movax $ACC0, $AX1.L + 0e9a 4800 addax $ACC0, $AX0.L + 0e9b 112f 0ea4 bloopi #0x2f, 0x0ea4 + 0e9d 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0e9e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0e9f 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 0ea0 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0ea1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0ea2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0ea3 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M + 0ea4 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L + 0ea5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0ea6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0ea7 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M + 0ea8 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L + 0ea9 1b5f srri @$AR2, $AC1.M + 0eaa 1b5d srri @$AR2, $AC1.L + 0eab 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0eac 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0ead 6800 movax $ACC0, $AX0.L + 0eae 7c00 neg $ACC0 + 0eaf 4a00 addax $ACC0, $AX1.L + 0eb0 112f 0ebb bloopi #0x2f, 0x0ebb + 0eb2 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0eb3 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0eb4 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M + 0eb5 7d00 neg $ACC1 + 0eb6 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L + 0eb7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0eb8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0eb9 683a movax's $ACC0, $AX0.L : @$AR2, $AC1.M + 0eba 7c00 neg $ACC0 + 0ebb 4a2a addax's $ACC0, $AX1.L : @$AR2, $AC1.L + 0ebc 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 + 0ebd 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 + 0ebe 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M + 0ebf 7d00 neg $ACC1 + 0ec0 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L + 0ec1 1b5f srri @$AR2, $AC1.M + 0ec2 1b5d srri @$AR2, $AC1.L + 0ec3 1c04 mrr $AR0, $IX0 + 0ec4 029f 006f jmp 006f_MailHandler() +} + +void 0ec6_Cmd_C() { + 0ec6 8e48 set16'l : $AX1.L, @$AR0 + 0ec7 8b78 m0'l : $AC1.M, @$AR0 + 0ec8 8168 clr'l $ACC0 : $AC1.L, @$AR0 + 0ec9 00e0 0cd2 sr @0x0cd2, $AR0 + 0ecb 2fce srs @DSMAH, $AC1.M + 0ecc 2dcf srs @DSMAL, $AC1.L + 0ecd 16cd 0180 si @DSPA, #0x0180 + 0ecf 16c9 0001 si @DSCR, #0x0001 + 0ed1 16cb 0180 si @DSBL, #0x0180 + 0ed3 02bf 0084 call 0084_WaitForDMACompletion() + 0ed5 8100 clr $ACC0 + 0ed6 009c 0180 lri $AC0.L, #0x0180 + 0ed8 4d00 add $ACC1, $ACC0 + 0ed9 2fce srs @DSMAH, $AC1.M + 0eda 2dcf srs @DSMAL, $AC1.L + 0edb 16cd 0880 si @DSPA, #0x0880 + 0edd 16c9 0001 si @DSCR, #0x0001 + 0edf 16cb 0180 si @DSBL, #0x0180 + 0ee1 8100 clr $ACC0 + 0ee2 8900 clr $ACC1 + 0ee3 00de 0ce5 lr $AC0.M, @0x0ce5 + 0ee5 1ff9 mrr $AC1.M, $AX1.L + 0ee6 5d00 sub $ACC1, $ACC0 + 0ee7 00f9 0ce5 sr @0x0ce5, $AX1.L + 0ee9 009a 02ab lri $AX0.H, #0x02ab + 0eeb 009b 02aa lri $AX1.H, #0x02aa + 0eed 0081 0d08 lri $AR1, #0x0d08 + 0eef d000 mulc $AC1.M, $AX0.H + 0ef0 d400 mulcac $AC1.M, $AX0.H, $ACC0 + 0ef1 111f 0ef5 bloopi #0x1f, 0x0ef5 + 0ef3 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ef4 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0ef5 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0ef6 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ef7 4e31 addp's $ACC0 : @$AR1, $AC0.M + 0ef8 1b39 srri @$AR1, $AX1.L + 0ef9 02bf 0084 call 0084_WaitForDMACompletion() + 0efb 8f00 set40 + 0efc 8d00 set15 + 0efd 8a00 m2 + 0efe 0080 0d08 lri $AR0, #0x0d08 + 0f00 0081 0400 lri $AR1, #0x0400 + 0f02 0083 0000 lri $AR3, #0x0000 + 0f04 0082 00c0 lri $AR2, #0x00c0 + 0f06 1918 lrri $AX0.L, @$AR0 + 0f07 195b lrri $AX1.H, @$AR2 + 0f08 1959 lrri $AX1.L, @$AR2 + 0f09 a000 mulx $AX0.L, $AX1.L + 0f0a ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0f0b 9100 asr16 $ACC0 + 0f0c 4e5b addp'l $ACC0 : $AX1.H, @$AR3 + 0f0d f04b lsl16'l $ACC0 : $AX1.L, @$AR3 + 0f0e 115f 0f19 bloopi #0x5f, 0x0f19 + 0f10 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 0f11 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0f12 9140 asr16'l $ACC0 : $AX0.L, @$AR0 + 0f13 4e5a addp'l $ACC0 : $AX1.H, @$AR2 + 0f14 f04a lsl16'l $ACC0 : $AX1.L, @$AR2 + 0f15 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 0f16 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0f17 9100 asr16 $ACC0 + 0f18 4e5b addp'l $ACC0 : $AX1.H, @$AR3 + 0f19 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 + 0f1a a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M + 0f1b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0f1c 9100 asr16 $ACC0 + 0f1d 4e00 addp $ACC0 + 0f1e f000 lsl16 $ACC0 + 0f1f 1b3e srri @$AR1, $AC0.M + 0f20 8e00 set16 + 0f21 00c0 0cd2 lr $AR0, @0x0cd2 + 0f23 191e lrri $AC0.M, @$AR0 + 0f24 191c lrri $AC0.L, @$AR0 + 0f25 2ece srs @DSMAH, $AC0.M + 0f26 2ccf srs @DSMAL, $AC0.L + 0f27 16cd 0400 si @DSPA, #0x0400 + 0f29 16c9 0001 si @DSCR, #0x0001 + 0f2b 16cb 0180 si @DSBL, #0x0180 + 0f2d 02bf 0084 call 0084_WaitForDMACompletion() + 0f2f 16fc dcd1 si @DMBH, #0xdcd1 <-------------- !!! + 0f31 16fd 0004 si @DMBL, #0x0004 <-------------- !!! + 0f33 16fb 0001 si @DIRQ, #0x0001 <-------------- !!! + 0f35 26fc lrs $AC0.M, @DMBH + 0f36 02a0 8000 andf $AC0.M, #0x8000 + 0f38 029c 0f35 jlnz 0x0f35 + 0f3a 029f 006f jmp 006f_MailHandler() +} + +void 0f3c_Int1_Handler() { + 0f3c 8e00 set16 + 0f3d 1fcc mrr $AC0.M, $ST0 + 0f3e 1d9e mrr $ST0, $AC0.M + 0f3f 16fc ecc0 si @DMBH, #0xecc0 + 0f41 2efd srs @DMBL, $AC0.M + 0f42 26fc lrs $AC0.M, @DMBH + 0f43 02a0 8000 andf $AC0.M, #0x8000 + 0f45 029c 0f42 jlnz 0x0f42 + 0f47 02ff rti +} + +void 0f48_Int2_Handler() { + 0f48 0000 nop + 0f49 0000 nop + 0f4a 0000 nop + 0f4b 0000 nop + 0f4c 02ff rti +} + +void 0f4d_Int3_Handler() { + 0f4d 8e00 set16 + 0f4e 1dbc mrr $ST1, $AC0.L + 0f4f 1dbe mrr $ST1, $AC0.M + 0f50 8100 clr $ACC0 + 0f51 00de 0307 lr $AC0.M, @0x0307 + 0f53 0601 cmpis $ACC0, #0x01 + 0f54 0295 0f59 jz 0x0f59 + 0f56 0e00 lris $AC0.M, #0x00 + 0f57 00fe 02d8 sr @0x02d8, $AC0.M + 0f59 1fcd mrr $AC0.M, $ST1 + 0f5a 1f8d mrr $AC0.L, $ST1 + 0f5b 02ff rti +} + +void 0f5c_Int4_Handler() { + 0f5c 0000 nop + 0f5d 0000 nop + 0f5e 0000 nop + 0f5f 0000 nop + 0f60 02ff rti +} + +// Handles ACCOV exception +// ACCOV exception will be triggered when a sound being played +// reaches end and needs to be reloaded or stopped. +// +void 0f61_Int5_Handler() +{ + 0f61 8e00 set16 + 0f62 1dbc mrr $ST1, $AC0.L + 0f63 1dbe mrr $ST1, $AC0.M + 0f64 8100 clr $ACC0 + 0f65 00de 0307 lr $AC0.M, @0x0307 + 0f67 0601 cmpis $ACC0, #0x01 + 0f68 0295 0f72 jz 0x0f72 // if (mem16[0x0307] == 1) handle looping; + 0f6a 0e00 lris $AC0.M, #0x00 + 0f6b 00fe 02d8 sr @0x02d8, $AC0.M // else stop the sound; + 0f6d 0082 0ce9 lri $AR2, #0x0ce9 + 0f6f 1fcd mrr $AC0.M, $ST1 + 0f70 1f8d mrr $AC0.L, $ST1 + 0f71 02ff rti + + // Looping handling + 0f72 00de 02d9 lr $AC0.M, @0x02d9 + 0f74 0601 cmpis $ACC0, #0x01 + 0f75 0295 0f83 jz 0x0f83 // if (mem16[0x02D9] == 1) handle stream; + // reload pred scale, yn1 and yn2 from the PB + // the address will be automatically reloaded by the accelerator + 0f77 00de 032a lr $AC0.M, @0x032a + 0f79 2eda srs @pred_scale, $AC0.M + 0f7a 00de 032b lr $AC0.M, @0x032b + 0f7c 2edb srs @yn1, $AC0.M + 0f7d 00de 032c lr $AC0.M, @0x032c + 0f7f 2edc srs @yn2, $AC0.M + 0f80 1fcd mrr $AC0.M, $ST1 + 0f81 1f8d mrr $AC0.L, $ST1 + 0f82 02ff rti + + // Stream handling + // reload pred_scale from the PB + 0f83 00de 032a lr $AC0.M, @0x032a + 0f85 2eda srs @pred_scale, $AC0.M + // ??? - reload the yn1 and yn2 from... themselves + 0f86 26db lrs $AC0.M, @yn1 + 0f87 2edb srs @yn1, $AC0.M + 0f88 26dc lrs $AC0.M, @yn2 + 0f89 2edc srs @yn2, $AC0.M + 0f8a 1fcd mrr $AC0.M, $ST1 + 0f8b 1f8d mrr $AC0.L, $ST1 + 0f8c 02ff rti +} + +void 0f8d_Int6_Handler() { + 0f8d 0000 nop + 0f8e 0000 nop + 0f8f 0000 nop + 0f90 0000 nop + 0f91 02ff rti +} + +void 0f92_Int7_Handler() { + 0f92 0000 nop + 0f93 0000 nop + 0f94 0000 nop + 0f95 0000 nop + 0f96 02ff rti +} + +// action jump table + 0f97 0fa9 // Action 0 - restart + 0f98 0fac // Action 1 - dump DRAM and jump into iROM where new IRAM and DRAM can be uploaded + 0f99 0fe4 // Action 2 - soft reset + 0f9a 0fe7 // Action 3 - jump back to main loop + +// called at AXList end; wait for a last mail and take an action +// Note: the same thing can be found in Zelda ucode. It's called after DsyncFrame. +// Probably debugging stuff. +{ + 0f9b 8e00 set16 + 0f9c 8100 clr $ACC0 + 0f9d 8900 clr $ACC1 + 0f9e 02bf 0fea call 0x0fea // wait for the mail; the high part is likely 0xCDD1 as for Zelda + 0fa0 27ff lrs $AC1.M, @CMBL // the low part of the mail tells the action to take + 0fa1 009e 0f97 lri $AC0.M, #0x0f97 + 0fa3 4c00 add $ACC0, $ACC1 + 0fa4 1c7e mrr $AR3, $AC0.M + 0fa5 0313 ilrr $AC1.M, @$AR3 + 0fa6 1c7f mrr $AR3, $AC1.M + 0fa7 176f jmpr $AR3 // take the action! + 0fa8 0021 halt +} + +//ACTION 0 (0xCDD10000) +{ + 0fa9 029f 0037 jmp 0037_Unk_Restart() + 0fab 0021 halt +} + +//ACTION 1 (0xCDD10001) +{ + 0fac 8100 clr $ACC0 + 0fad 8900 clr $ACC1 + 0fae 02bf 0fea call 0x0fea + 0fb0 24ff lrs $AC0.L, @CMBL + 0fb1 02bf 0ff0 call 0x0ff0 + 0fb3 25ff lrs $AC1.L, @CMBL + 0fb4 02bf 0ff0 call 0x0ff0 + 0fb6 27ff lrs $AC1.M, @CMBL + 0fb7 2ece srs @DSMAH, $AC0.M + 0fb8 2ccf srs @DSMAL, $AC0.L + 0fb9 16c9 0001 si @DSCR, #0x0001 // DMEM->CPU + 0fbb 2fcd srs @DSPA, $AC1.M + 0fbc 2dcb srs @DSBL, $AC1.L + 0fbd 8100 clr $ACC0 + 0fbe 8900 clr $ACC1 + 0fbf 02bf 0fea call 0x0fea +//prepare addr-s/length/dsp-PC for new IRAM/DRAM + 0fc1 24ff lrs $AC0.L, @CMBL + 0fc2 1c9e mrr $IX0, $AC0.M + 0fc3 1cbc mrr $IX1, $AC0.L + 0fc4 02bf 0ff0 call 0x0ff0 + 0fc6 25ff lrs $AC1.L, @CMBL + 0fc7 02bf 0ff0 call 0x0ff0 + 0fc9 27ff lrs $AC1.M, @CMBL + 0fca 1cdf mrr $IX2, $AC1.M + 0fcb 1cfd mrr $IX3, $AC1.L + 0fcc 8100 clr $ACC0 + 0fcd 02bf 0fea call 0x0fea + 0fcf 26ff lrs $AC0.M, @CMBL + 0fd0 1c1e mrr $AR0, $AC0.M + 0fd1 8900 clr $ACC1 + 0fd2 02bf 0ff0 call 0x0ff0 + 0fd4 20ff lrs $AX0.L, @CMBL + 0fd5 1f5f mrr $AX0.H, $AC1.M + 0fd6 02bf 0fea call 0x0fea + 0fd8 21ff lrs $AX1.L, @CMBL + 0fd9 02bf 0fea call 0x0fea + 0fdb 23ff lrs $AX1.H, @CMBL +// + 0fdc 26c9 lrs $AC0.M, @DSCR + 0fdd 02a0 0004 andf $AC0.M, #0x0004 + 0fdf 029c 0fdc jlnz 0x0fdc + 0fe1 029f 80b5 jmp 0x80b5 // 80b5_BootUcode() + 0fe3 0021 halt +} + +//ACTION 2 (0xCDD10002) +{ + 0fe4 029f 8000 jmp 0x8000 + 0fe6 0021 halt +} + +//ACTION 3 (0xCDD10003) +{ + 0fe7 029f 004c jmp 0x004c + 0fe9 0021 halt +} + +{ + 0fea 26fe lrs $AC0.M, @CMBH + 0feb 02c0 8000 andcf $AC0.M, #0x8000 + 0fed 029c 0fea jlnz 0x0fea + 0fef 02df ret +} + +{ + 0ff0 27fe lrs $AC1.M, @CMBH + 0ff1 03c0 8000 andcf $AC1.M, #0x8000 + 0ff3 029c 0ff0 jlnz 0x0ff0 + 0ff5 02df ret +} + + 0ff6 0000 nop + 0ff7 0000 nop + 0ff8 0000 nop + 0ff9 0000 nop + 0ffa 0000 nop + 0ffb 0000 nop + 0ffc 0000 nop + 0ffd 0000 nop + 0ffe 0000 nop + 0fff 0000 nop diff --git a/docs/DSP/DSP_UC_IPL_CB22D5C7.txt b/docs/DSP/DSP_UC_IPL_CB22D5C7.txt index 394763bc7d..35848c957a 100644 --- a/docs/DSP/DSP_UC_IPL_CB22D5C7.txt +++ b/docs/DSP/DSP_UC_IPL_CB22D5C7.txt @@ -1,1985 +1,1985 @@ -0000 029f 0010 jmp 0x0010 -0002 0000 nop -0003 0000 nop -0004 02ff rti -0005 0000 nop -0006 02ff rti -0007 0000 nop -0008 02ff rti -0009 0000 nop -000a 02ff rti -000b 0000 nop -000c 02ff rti -000d 0000 nop -000e 02ff rti -000f 0000 nop - -// Entry -void 0010_Entry() -{ -0010 1302 sbset #0x02 -0011 1303 sbset #0x03 -0012 1204 sbclr #0x04 -0013 1305 sbset #0x05 -0014 1306 sbset #0x06 -0015 8e00 set16 -0016 8c00 clr15 -0017 8b00 m0 -0018 009e ffff lri $AC0.M, #0xffff -001a 1d1e mrr $WR0, $AC0.M -001b 1d3e mrr $WR1, $AC0.M -001c 1d5e mrr $WR2, $AC0.M -001d 1d7e mrr $WR3, $AC0.M -001e 0092 00ff lri $CR, #0x00ff -0020 8100 clr $ACC0 -0021 009f 1000 lri $AC1.M, #0x1000 -0023 0080 0000 lri $AR0, #0x0000 -0025 005f loop $AC1.M - 0026 1b1e srri @$AR0, $AC0.M // clear dram -0027 26ff lrs $AC0.M, @CMBL -0028 16fc 8888 si @DMBH, #0x8888 -002a 16fd 1111 si @DMBL, #0x1111 // SENDMAIL 0x88881111 -002c 26fc lrs $AC0.M, @DMBH -002d 02a0 8000 andf $AC0.M, #0x8000 -002f 029c 002c jlnz 0x002c -} - -void 0031_MainLoop() -{ -0031 8100 clr $ACC0 -0032 8900 clr $ACC1 -0033 26fe lrs $AC0.M, @CMBH -0034 02c0 8000 andcf $AC0.M, #0x8000 -0036 029c 0031 jlnz 0x0031 // wait for mail -0038 27ff lrs $AC1.M, @CMBL -0039 00ff 0345 sr @0x0345, $AC1.M -003b 1ffe mrr $AC1.M, $AC0.M -003c 0340 00ff andi $AC1.M, #0x00ff -003e 00ff 0344 sr @0x0344, $AC1.M -0040 1479 lsr $ACC0, #-7 -0041 0240 007e andi $AC0.M, #0x007e -0043 0200 0062 addi $AC0.M, #0x0062 -0045 00fe 0343 sr @0x0343, $AC0.M -0047 1c1e mrr $AR0, $AC0.M -0048 170f jmpr $AR0 // jump on CMD? -0049 009e 8000 lri $AC0.M, #0x8000 -004b 00dc 0343 lr $AC0.L, @0x0343 -004d 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // sendmail 0x8000???? -004f 029f 0031 jmp 0x0031 -} - -void 0051_WaitForMailAndStoreIt(DEST $AR0) -{ -0051 26fe lrs $AC0.M, @CMBH -0052 02c0 8000 andcf $AC0.M, #0x8000 -0054 029c 0051 jlnz 0x0051 -0056 24ff lrs $AC0.L, @CMBL -0057 1b1e srri @$AR0, $AC0.M -0058 1b1c srri @$AR0, $AC0.L -0059 02df ret -} - -void 005a_SendMail(AC0.M,AC0.L) -{ -005a 2efc srs @DMBH, $AC0.M -005b 2cfd srs @DMBL, $AC0.L -005c 26fc lrs $AC0.M, @DMBH -005d 02a0 8000 andf $AC0.M, #0x8000 -005f 029c 005c jlnz 0x005c -0061 02df ret -} - -//CMDs -0062 029f 0049 jmp 0x0049 // CMD_0 -0064 029f 02bd jmp 0x02bd // CMD_1 -0066 029f 0470 jmp 0x0470 // CMD_2 -0068 029f 0031 jmp 0x0031 // CMD_3 -006a 029f 00df jmp 0x00df // CMD_4 -006c 029f 00f1 jmp 0x00f1 // CMD_5 -006e 029f 05bb jmp 0x05bb // CMD_6 -0070 029f 056f jmp 0x056f // CMD_7 -0072 029f 05d7 jmp 0x05d7 // CMD_8 -0074 029f 059f jmp 0x059f // CMD_9 -0076 029f 0741 jmp 0x0741 // CMD_A -0078 029f 0618 jmp 0x0618 // CMD_B - jump to IROM area (0x8644) -007a 029f 0203 jmp 0x0203 // CMD_C - -{ -007c 193e lrri $AC0.M, @$AR1 -007d 193c lrri $AC0.L, @$AR1 -007e 2fcd srs @DSPA, $AC1.M -007f 0f00 lris $AC1.M, #0x00 -0080 2fc9 srs @DSCR, $AC1.M // DMEM->CPU -0081 2ece srs @DSMAH, $AC0.M -0082 2ccf srs @DSMAL, $AC0.L -0083 1fe0 mrr $AC1.M, $AR0 -0084 1501 lsl $ACC1, #1 -0085 2fcb srs @DSBL, $AC1.M -0086 02bf 008f call 0x008f -0088 02df ret -} - -{ -0089 193e lrri $AC0.M, @$AR1 -008a 193c lrri $AC0.L, @$AR1 -008b 2fcd srs @DSPA, $AC1.M -008c 0f01 lris $AC1.M, #0x01 -008d 029f 0080 jmp 0x0080 -} - -{ -008f 26c9 lrs $AC0.M, @DSCR -0090 02a0 0004 andf $AC0.M, #0x0004 -0092 029c 008f jlnz 0x008f -0094 02df ret -} - -{ -0095 193e lrri $AC0.M, @$AR1 -0096 193c lrri $AC0.L, @$AR1 -0097 00ff ffcd sr @DSPA, $AC1.M -0099 0f00 lris $AC1.M, #0x00 -009a 00ff ffc9 sr @DSCR, $AC1.M -009c 00fe ffce sr @DSMAH, $AC0.M -009e 00fc ffcf sr @DSMAL, $AC0.L -00a0 1fe0 mrr $AC1.M, $AR0 -00a1 1501 lsl $ACC1, #1 -00a2 00ff ffcb sr @DSBL, $AC1.M -00a4 02df ret -} - -void 00a5_WaitForDMAend() -{ -00a5 00de ffc9 lr $AC0.M, @DSCR -00a7 02a0 0004 andf $AC0.M, #0x0004 -00a9 029c 00a5 jlnz 0x00a5 -00ab 02df ret -} - -void 00ac_AccZeldaTypeRead() -{ -00ac 193e lrri $AC0.M, @$AR1 -00ad 193c lrri $AC0.L, @$AR1 -00ae 0240 7fff andi $AC0.M, #0x7fff -00b0 02bf 00ba call 00ba_AccSetup() -00b2 007a 00b8 bloop $AX0.H, 0x00b8 -00b4 26d3 lrs $AC0.M, @UnkZelda -00b5 1b3e srri @$AR1, $AC0.M -00b6 0000 nop -00b7 0000 nop -00b8 0000 nop -00b9 02df ret -} - -void 00ba_AccSetup() -{ -00ba 1c3f mrr $AR1, $AC1.M -00bb 009f 0005 lri $AC1.M, #0x0005 -00bd 2fd1 srs @SampleFormat, $AC1.M // reads will be u8 -00be 1f5e mrr $AX0.H, $AC0.M -00bf 1f1c mrr $AX0.L, $AC0.L -00c0 2ed4 srs @ACSAH, $AC0.M -00c1 2cd5 srs @ACSAL, $AC0.L -00c2 8900 clr $ACC1 -00c3 1fa0 mrr $AC1.L, $AR0 -00c4 4c00 add $ACC0, $ACC1 -00c5 0200 0030 addi $AC0.M, #0x0030 -00c7 2ed6 srs @ACEAH, $AC0.M -00c8 2cd7 srs @ACEAL, $AC0.L -00c9 1fda mrr $AC0.M, $AX0.H -00ca 1f98 mrr $AC0.L, $AX0.L -00cb 147f lsr $ACC0, #-1 -00cc 2ed8 srs @ACCAH, $AC0.M -00cd 2cd9 srs @ACCAL, $AC0.L -00ce 1f40 mrr $AX0.H, $AR0 -00cf 02df ret -} - -void 00d0_AccZeldaTypeWrite() -{ -00d0 193e lrri $AC0.M, @$AR1 -00d1 193c lrri $AC0.L, @$AR1 -00d2 0260 8000 ori $AC0.M, #0x8000 -00d4 02bf 00ba call 00ba_AccSetup() -00d6 007a 00dd bloop $AX0.H, 0x00dd -{ - 00d8 193e lrri $AC0.M, @$AR1 - 00d9 2ed3 srs @UnkZelda, $AC0.M - 00da 0000 nop - 00db 0000 nop - 00dc 0000 nop - 00dd 0000 nop -} -00de 02df ret -} - -{ -00df 0080 0346 lri $AR0, #0x0346 -00e1 02bf 0051 call 0x0051 -00e3 02bf 0051 call 0x0051 -00e5 0081 0346 lri $AR1, #0x0346 -00e7 00df 0349 lr $AC1.M, @0x0349 -00e9 0340 ffff andi $AC1.M, #0xffff -00eb 00c0 0345 lr $AR0, @0x0345 -00ed 02bf 007c call 0x007c -00ef 029f 0049 jmp 0x0049 -} - -{ -00f1 0080 0346 lri $AR0, #0x0346 -00f3 02bf 0051 call 0x0051 -00f5 02bf 0051 call 0x0051 -00f7 0081 0346 lri $AR1, #0x0346 -00f9 00df 0349 lr $AC1.M, @0x0349 -00fb 0340 ffff andi $AC1.M, #0xffff -00fd 00c0 0345 lr $AR0, @0x0345 -00ff 02bf 0089 call 0x0089 -0101 029f 0049 jmp 0x0049 -} - -{ -0103 0092 00ff lri $CR, #0x00ff -0105 2fd1 srs @SampleFormat, $AC1.M -0106 0340 0003 andi $AC1.M, #0x0003 -0108 1f7f mrr $AX1.H, $AC1.M -0109 1f5e mrr $AX0.H, $AC0.M -010a 1f1c mrr $AX0.L, $AC0.L -010b 0200 0010 addi $AC0.M, #0x0010 -010d 2ed4 srs @ACSAH, $AC0.M -010e 2cd5 srs @ACSAL, $AC0.L -010f 8900 clr $ACC1 -0110 1fa0 mrr $AC1.L, $AR0 -0111 4c00 add $ACC0, $ACC1 -0112 0200 0030 addi $AC0.M, #0x0030 -0114 2ed6 srs @ACEAH, $AC0.M -0115 2cd7 srs @ACEAL, $AC0.L -0116 1fda mrr $AC0.M, $AX0.H -0117 1f98 mrr $AC0.L, $AX0.L -0118 1ffb mrr $AC1.M, $AX1.H -0119 7900 decm $AC1.M -011a 02ca lsrn -011b 2ed8 srs @ACCAH, $AC0.M -011c 2cd9 srs @ACCAL, $AC0.L -011d 02df ret -} - -//DSPLLE errors here!!! readw/writes from 0x3??? -{ -011e 1c23 mrr $AR1, $AR3 -011f 197e lrri $AC0.M, @$AR3 -0120 191b lrri $AX1.H, @$AR0 -0121 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 -0122 1128 0128 bloopi #0x28, 0x0128 -0124 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 -0125 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M -0126 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 -0127 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M -0128 4900 addax $ACC1, $AX0 -0129 02df ret -} - -{ -012a 8f00 set40 -012b 1c03 mrr $AR0, $AR3 -012c 00db 038e lr $AX1.H, @0x038e -012e 009a 0004 lri $AX0.H, #0x0004 -0130 1978 lrri $AX0.L, @$AR3 -0131 a843 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR3 -0132 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 -0133 1128 0138 bloopi #0x28, 0x0138 -0135 38c3 asrnrx'l $ACC0, $AX0.H : $AX0.L, @$AR3 -0136 ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M -0137 38c3 asrnrx'l $ACC0, $AX0.H : $AX0.L, @$AR3 -0138 ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M -0139 8e00 set16 -013a 02df ret -} - -{ -013b 00f9 0361 sr @0x0361, $AX1.L -013d 1fc0 mrr $AC0.M, $AR0 -013e 0200 fffc addi $AC0.M, #0xfffc -0140 1c1e mrr $AR0, $AC0.M -0141 1c5e mrr $AR2, $AC0.M -0142 0083 0424 lri $AR3, #0x0424 -0144 197e lrri $AC0.M, @$AR3 -0145 197f lrri $AC1.M, @$AR3 -0146 80a2 nx'sl : $AC0.M, $AX0.H -0147 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H -0148 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M -0149 1b1f srri @$AR0, $AC1.M -014a 1c02 mrr $AR0, $AR2 -014b 8100 clr $ACC0 -014c 00de 0402 lr $AC0.M, @0x0402 -014e 00fe 0362 sr @0x0362, $AC0.M -0150 1474 lsr $ACC0, #-12 -0151 1f7e mrr $AX1.H, $AC0.M -0152 1f3c mrr $AX1.L, $AC0.L -0153 8900 clr $ACC1 -0154 00dd 0418 lr $AC1.L, @0x0418 -0156 1504 lsl $ACC1, #4 -0157 0604 cmpis $AC0.M, #0x04 -0158 0290 01b0 jge 0x01b0 -015a 1fdd mrr $AC0.M, $AC1.L -015b 0082 0c00 lri $AR2, #0x0c00 -015d 1050 loopi #0x50 -015e 4b2a addax's $ACC1, $AX1 : @$AR2, $AC1.L -015f 1fbe mrr $AC1.L, $AC0.M -0160 00fe 0360 sr @0x0360, $AC0.M -0162 8900 clr $ACC1 -0163 1fbe mrr $AC1.L, $AC0.M -0164 009a fff8 lri $AX0.H, #0xfff8 -0166 009b 00fc lri $AX1.H, #0x00fc -0168 00d8 0361 lr $AX0.L, @0x0361 -016a 0082 0c00 lri $AR2, #0x0c00 -016c 0083 0c00 lri $AR3, #0x0c00 -016e 195e lrri $AC0.M, @$AR2 -016f 3480 lsrnrx $ACC0, $AX0.H -0170 1128 0175 bloopi #0x28, 0x0175 -0172 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 -0173 35b3 lsrnrx's $ACC1, $AX0.H : @$AR3, $AC0.M -0174 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 -0175 34bb lsrnrx's $ACC0, $AX0.H : @$AR3, $AC1.M -0176 8a00 m2 -0177 0082 0c00 lri $AR2, #0x0c00 -0179 00dd 0418 lr $AC1.L, @0x0418 -017b 1504 lsl $ACC1, #4 -017c 1fe0 mrr $AC1.M, $AR0 -017d 8100 clr $ACC0 -017e 00de 0362 lr $AC0.M, @0x0362 -0180 1474 lsr $ACC0, #-12 -0181 1f7e mrr $AX1.H, $AC0.M -0182 1f3c mrr $AX1.L, $AC0.L -0183 8f00 set40 -0184 1943 lrri $AR3, @$AR2 -0185 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 -0186 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0187 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0188 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0189 f200 madd $AX0.L, $AX0.H -018a fe00 movpz $ACC0 -018b 1c1f mrr $AR0, $AC1.M -018c 1943 lrri $AR3, @$AR2 -018d 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 -018e 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -018f 114e 0197 bloopi #0x4e, 0x0197 -0191 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0192 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0193 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M -0194 1c1f mrr $AR0, $AC1.M -0195 1943 lrri $AR3, @$AR2 -0196 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 -0197 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 -0198 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -0199 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 -019a f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M -019b fe00 movpz $ACC0 -019c 1b3e srri @$AR1, $AC0.M -019d 8b00 m0 -019e 8e00 set16 -019f 00fe 041b sr @0x041b, $AC0.M -01a1 1c1f mrr $AR0, $AC1.M -01a2 150c lsl $ACC1, #12 -01a3 0340 0fff andi $AC1.M, #0x0fff -01a5 00ff 0418 sr @0x0418, $AC1.M -01a7 0083 0424 lri $AR3, #0x0424 -01a9 191e lrri $AC0.M, @$AR0 -01aa 191f lrri $AC1.M, @$AR0 -01ab 80a0 nx'ls : $AX0.H, $AC0.M -01ac 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M -01ad 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M -01ae 1b7f srri @$AR3, $AC1.M -01af 02df ret -} - -{ -01b0 1fe0 mrr $AC1.M, $AR0 -01b1 1c1f mrr $AR0, $AC1.M -01b2 1128 01b9 bloopi #0x28, 0x01b9 -01b4 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 -01b5 1b3e srri @$AR1, $AC0.M -01b6 1c1f mrr $AR0, $AC1.M -01b7 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 -01b8 1b3e srri @$AR1, $AC0.M -01b9 1c1f mrr $AR0, $AC1.M -01ba 029f 019f jmp 0x019f -} - -{ -01bc 8a00 m2 -01bd 0088 0007 lri $WR0, #0x0007 -01bf 1150 01cc bloopi #0x50, 0x01cc -{ - 01c1 1c61 mrr $AR3, $AR1 - 01c2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 01c3 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c6 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c7 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01c9 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01ca f200 madd $AX0.L, $AX0.H - 01cb fe00 movpz $ACC0 - 01cc 1b3e srri @$AR1, $AC0.M -} -01cd 0088 ffff lri $WR0, #0xffff -01cf 8b00 m0 -01d0 02df ret -} - -{ -01d1 0088 0003 lri $WR0, #0x0003 -01d3 0085 0000 lri $IX1, #0x0000 -01d5 0087 0000 lri $IX3, #0x0000 -01d7 1fc2 mrr $AC0.M, $AR2 -01d8 195b lrri $AX1.H, @$AR2 -01d9 1959 lrri $AX1.L, @$AR2 -01da 195f lrri $AC1.M, @$AR2 -01db 195a lrri $AX0.H, @$AR2 -01dc 1c5e mrr $AR2, $AC0.M -01dd 1fda mrr $AC0.M, $AX0.H -01de 1c61 mrr $AR3, $AR1 -01df 8a00 m2 -01e0 8f00 set40 -01e1 191a lrri $AX0.H, @$AR0 -01e2 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 -01e3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 -01e4 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 -01e5 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 -01e6 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 -01e7 1127 01f2 bloopi #0x27, 0x01f2 -{ - 01e9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 01ea 197e lrri $AC0.M, @$AR3 - 01eb e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 01ec eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 01ed bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 01ee e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 01ef 197f lrri $AC1.M, @$AR3 - 01f0 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 01f1 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 01f2 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 -} -01f3 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M -01f4 197e lrri $AC0.M, @$AR3 -01f5 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 -01f6 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 -01f7 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 -01f8 1bff srrn @$AR3, $AC1.M -01f9 197f lrri $AC1.M, @$AR3 -01fa 8e00 set16 -01fb 8b00 m0 -01fc 0088 ffff lri $WR0, #0xffff -01fe 1b5b srri @$AR2, $AX1.H -01ff 1b59 srri @$AR2, $AX1.L -0200 1b5f srri @$AR2, $AC1.M -0201 1b5e srri @$AR2, $AC0.M -0202 02df ret -} - -{ -0203 0080 0346 lri $AR0, #0x0346 -0205 02bf 0051 call 0x0051 -0207 02bf 0051 call 0x0051 -0209 0081 0346 lri $AR1, #0x0346 -020b 009f 0580 lri $AC1.M, #0x0580 -020d 0080 0080 lri $AR0, #0x0080 -020f 02bf 007c call 0x007c -0211 0081 0348 lri $AR1, #0x0348 -0213 009f 0c00 lri $AC1.M, #0x0c00 -0215 0080 0080 lri $AR0, #0x0080 -0217 02bf 007c call 0x007c -0219 0080 0c00 lri $AR0, #0x0c00 -021b 0081 0580 lri $AR1, #0x0580 -021d 02bf 01d1 call 0x01d1 -021f 0081 0346 lri $AR1, #0x0346 -0221 009f 0580 lri $AC1.M, #0x0580 -0223 0080 0080 lri $AR0, #0x0080 -0225 02bf 0089 call 0x0089 -0227 0081 0348 lri $AR1, #0x0348 -0229 009f 0c00 lri $AC1.M, #0x0c00 -022b 0080 0080 lri $AR0, #0x0080 -022d 02bf 0089 call 0x0089 -022f 029f 0049 jmp 0x0049 -} - -void 0231_FormatAudioSynths(format AC0.M) -{ -0231 8100 clr $ACC0 -0232 1f5e mrr $AX0.H, $AC0.M -0233 00d8 0402 lr $AX0.L, @0x0402 -0235 00dc 0418 lr $AC0.L, @0x0418 -0237 0080 0520 lri $AR0, #0x0520 -0239 00df 0440 lr $AC1.M, @0x0440 -023b 1501 lsl $ACC1, #1 -023c 0340 007e andi $AC1.M, #0x007e -023e 0300 0246 addi $AC1.M, #0x0246 -0240 1c5f mrr $AR2, $AC1.M -0241 175f callr $AR2 // call 0x0246 -0242 00fc 0418 sr @0x0418, $AC0.L -0244 029f 04e7 jmp 0x04e7 // dummy -0246 029f 0257 jmp 0x0257 // 0x0 - Synth0 -0248 029f 028f jmp 0x028f // 0x1 - Synth1 -024a 029f 0277 jmp 0x0277 // 0x2 - Synth2 -024c 029f 0267 jmp 0x0267 // 0x3 - Synth3 -024e 029f 0292 jmp 0x0292 // 0x4 - Synth4 -0250 029f 0256 jmp 0x0256 // 0x5 - dummy -0252 029f 02b1 jmp 0x02b1 // 0x6 - Synth6 -0254 029f 02ae jmp 0x02ae // 0x7 - Synth7 -0256 02df ret -} - -void 0257_Synth0() -{ -0257 1401 lsl $ACC0, #1 -0258 009b c000 lri $AX1.H, #0xc000 -025a 0099 4000 lri $AX1.L, #0x4000 -025c 1150 0264 bloopi #0x50, 0x0264 -{ - 025e 02c0 0001 andcf $AC0.M, #0x0001 - 0260 027c iflnz - 0261 1b1b srri @$AR0, $AX1.H - 0262 027d iflz - 0263 1b19 srri @$AR0, $AX1.L - 0264 4800 addax $ACC0, $AX0 -} -0265 147f lsr $ACC0, #-1 -0266 02df ret -} - -void 0267_Synth3() -{ -0267 1401 lsl $ACC0, #1 -0268 009b c000 lri $AX1.H, #0xc000 -026a 0099 4000 lri $AX1.L, #0x4000 -026c 1150 0274 bloopi #0x50, 0x0274 -{ - 026e 02c0 0003 andcf $AC0.M, #0x0003 - 0270 027c iflnz - 0271 1b1b srri @$AR0, $AX1.H - 0272 027d iflz - 0273 1b19 srri @$AR0, $AX1.L - 0274 4800 addax $ACC0, $AX0 -} -0275 147f lsr $ACC0, #-1 -0276 02df ret -} - -void 0277_Synth2() -{ -0277 1401 lsl $ACC0, #1 -0278 0081 0ca0 lri $AR1, #0x0ca0 -027a 009b c000 lri $AX1.H, #0xc000 -027c 0099 4000 lri $AX1.L, #0x4000 -027e 8900 clr $ACC1 -027f 0082 0000 lri $AR2, #0x0000 -0281 1150 028c bloopi #0x50, 0x028c -{ - 0283 02c0 0001 andcf $AC0.M, #0x0001 - 0285 027c iflnz - 0286 1b1b srri @$AR0, $AX1.H - 0287 027d iflz - 0288 1b19 srri @$AR0, $AX1.L - 0289 183d lrr $AC1.L, @$AR1 - 028a 4900 addax $ACC1, $AX0 - 028b 1fe2 mrr $AC1.M, $AR2 - 028c 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M -} -028d 147f lsr $ACC0, #-1 -028e 02df ret -} - -void 028f_Synth1() -{ -028f 1050 loopi #0x50 - 0290 4820 addax's $ACC0, $AX0 : @$AR0, $AC0.L -0291 02df ret -} - -void 0292_Synth4() -{ -0292 0082 0140 lri $AR2, #0x0140 -0294 008a 003f lri $WR2, #0x003f -0296 0086 0000 lri $IX2, #0x0000 -0298 1406 lsl $ACC0, #6 -0299 8900 clr $ACC1 -029a 1fb8 mrr $AC1.L, $AX0.L -029b 1506 lsl $ACC1, #6 -029c 009b 003f lri $AX1.H, #0x003f -029e 009a 0000 lri $AX0.H, #0x0000 -02a0 3600 andr $AC0.M, $AX1.H -02a1 1cde mrr $IX2, $AC0.M -02a2 001a addarn $AR2, $IX2 -02a3 3400 andr $AC0.M, $AX0.H -02a4 1150 02aa bloopi #0x50, 0x02aa -{ - 02a6 4c00 add $ACC0, $ACC1 - 02a7 364a andr'l $AC0.M, $AX1.H : $AX1.L, @$AR2 - 02a8 1cde mrr $IX2, $AC0.M - 02a9 340e andr'nr $AC0.M, $AX0.H : $AR2 - 02aa 1b19 srri @$AR0, $AX1.L -} -02ab 1fc2 mrr $AC0.M, $AR2 -02ac 147a lsr $ACC0, #-6 -02ad 02df ret -} - -void 02b1_Synth7() -{ -02ae 1050 loopi #0x50 - 02af 1b18 srri @$AR0, $AX0.L -02b0 02df ret -} - -void 02b1_Synth6() -{ -02b1 0083 0000 lri $AR3, #0x0000 -02b3 140f lsl $ACC0, #15 -02b4 4853 addax'l $ACC0, $AX0 : $AX0.H, @$AR3 -02b5 1114 02ba bloopi #0x14, 0x02ba -{ - 02b7 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H - 02b8 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H - 02b9 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H - 02ba 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H -} -02bb 146f lsr $ACC0, #-17 -02bc 02df ret -} - -{ -02bd 0080 0380 lri $AR0, #0x0380 -02bf 02bf 0051 call 0x0051 -02c1 02bf 0051 call 0x0051 -02c3 02bf 0051 call 0x0051 -02c5 02bf 0051 call 0x0051 -02c7 0081 0382 lri $AR1, #0x0382 -02c9 009f 0000 lri $AC1.M, #0x0000 -02cb 0080 0200 lri $AR0, #0x0200 -02cd 02bf 007c call 0x007c -02cf 0081 0384 lri $AR1, #0x0384 -02d1 009f 0300 lri $AC1.M, #0x0300 -02d3 0080 0020 lri $AR0, #0x0020 -02d5 02bf 007c call 0x007c -02d7 02bf 0351 call 0x0351 -02d9 00de 0345 lr $AC0.M, @0x0345 -02db 00fe 0342 sr @0x0342, $AC0.M -02dd 029f 0049 jmp 0x0049 -} - -{ -02df 00de 0344 lr $AC0.M, @0x0344 -02e1 1404 lsl $ACC0, #4 -02e2 0200 03a8 addi $AC0.M, #0x03a8 -02e4 1c1e mrr $AR0, $AC0.M -02e5 02bf 0051 call 0x0051 -02e7 02bf 0051 call 0x0051 -02e9 02bf 0051 call 0x0051 -02eb 00de 0345 lr $AC0.M, @0x0345 -02ed 1b1e srri @$AR0, $AC0.M -02ee 00de 0344 lr $AC0.M, @0x0344 -02f0 0200 03a4 addi $AC0.M, #0x03a4 -02f2 1c1e mrr $AR0, $AC0.M -02f3 8100 clr $ACC0 -02f4 1b1e srri @$AR0, $AC0.M -02f5 02df ret -} - -{ -02f6 00de 0344 lr $AC0.M, @0x0344 -02f8 1404 lsl $ACC0, #4 -02f9 0200 03b0 addi $AC0.M, #0x03b0 -02fb 1c1e mrr $AR0, $AC0.M -02fc 02bf 0051 call 0x0051 -02fe 02bf 0051 call 0x0051 -0300 02bf 0051 call 0x0051 -0302 02bf 0051 call 0x0051 -0304 02df ret -} - -{ -0305 0081 034c lri $AR1, #0x034c -0307 009f 0400 lri $AC1.M, #0x0400 -0309 0080 0080 lri $AR0, #0x0080 -030b 02bf 007c call 0x007c -030d 02df ret -} - -{ -030e 0081 034c lri $AR1, #0x034c -0310 009f 0a00 lri $AC1.M, #0x0a00 -0312 0080 0004 lri $AR0, #0x0004 -0314 02bf 00a5 call 00a5_WaitForDMAend() -0316 02bf 007c call 0x007c -0318 0081 034c lri $AR1, #0x034c -031a 009f 0400 lri $AC1.M, #0x0400 -031c 0080 0080 lri $AR0, #0x0080 -031e 02bf 0095 call 0x0095 -0320 02df ret -} - -{ -0321 0081 034c lri $AR1, #0x034c -0323 009f 0400 lri $AC1.M, #0x0400 -0325 0080 0040 lri $AR0, #0x0040 -0327 0081 034c lri $AR1, #0x034c -0329 193e lrri $AC0.M, @$AR1 -032a 193c lrri $AC0.L, @$AR1 -032b 0098 0000 lri $AX0.L, #0x0000 -032d 7000 addaxl $ACC0, $AX0.L -032e 02bf 008b call 0x008b -0330 02df ret -} - -{ -0331 191e lrri $AC0.M, @$AR0 -0332 191a lrri $AX0.H, @$AR0 -0333 005f loop $AC1.M -0334 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M -0335 1b7e srri @$AR3, $AC0.M -0336 1b7a srri @$AR3, $AX0.H -0337 02df ret -} - -{ -0338 191e lrri $AC0.M, @$AR0 -0339 191a lrri $AX0.H, @$AR0 -033a 007f 033f bloop $AC1.M, 0x033f -{ - 033c 32b2 not's $AC0.M : @$AR2, $AC0.M - 033d 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 033e 33ba not's $AC1.M : @$AR2, $AC1.M - 033f 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M -} -0340 0000 nop -0341 02df ret -} - -{ -0342 8a00 m2 -0343 157f lsr $ACC1, #-1 -0344 1c20 mrr $AR1, $AR0 -0345 1c03 mrr $AR0, $AR3 -0346 193a lrri $AX0.H, @$AR1 -0347 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 -0348 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 -0349 007f 034e bloop $AC1.M, 0x034e -{ - 034b 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 034c 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 034d 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 034e 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H -} -034f 8b00 m0 -0350 02df ret -} - -{ -0351 0083 ffa0 lri $AR3, #0xffa0 -0353 0080 0300 lri $AR0, #0x0300 -0355 009f 000e lri $AC1.M, #0x000e -0357 1108 035c bloopi #0x08, 0x035c -{ - 0359 191e lrri $AC0.M, @$AR0 - 035a 1b7e srri @$AR3, $AC0.M - 035b 191e lrri $AC0.M, @$AR0 - 035c 1b7e srri @$AR3, $AC0.M -} -035d 02df ret -} - -{ -035e 0080 0f40 lri $AR0, #0x0f40 -0360 0082 0d00 lri $AR2, #0x0d00 -0362 0083 0d60 lri $AR3, #0x0d60 -0364 009f 0028 lri $AC1.M, #0x0028 -0366 02bf 0338 call 0x0338 -0368 8900 clr $ACC1 -0369 009e 0050 lri $AC0.M, #0x0050 -036b 0080 0ca0 lri $AR0, #0x0ca0 -036d 005e loop $AC0.M - 036e 1b1f srri @$AR0, $AC1.M -036f 0080 0f40 lri $AR0, #0x0f40 -0371 005e loop $AC0.M - 0372 1b1f srri @$AR0, $AC1.M -0373 0080 0fa0 lri $AR0, #0x0fa0 -0375 005e loop $AC0.M - 0376 1b1f srri @$AR0, $AC1.M -0377 02df ret -} - -{ -0378 0080 0dc0 lri $AR0, #0x0dc0 -037a 009e 0180 lri $AC0.M, #0x0180 -037c 8900 clr $ACC1 -037d 005e loop $AC0.M - 037e 1b1f srri @$AR0, $AC1.M -037f 02df ret -} - -{ -0380 00c0 03a0 lr $AR0, @0x03a0 -0382 191a lrri $AX0.H, @$AR0 -0383 00df 03a1 lr $AC1.M, @0x03a1 -0385 009b 00a0 lri $AX1.H, #0x00a0 -0387 0081 0393 lri $AR1, #0x0393 -0389 18bc lrrd $AC0.L, @$AR1 -038a b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 -038b bc00 mulxac $AX0.H, $AX1.H, $ACC0 -038c 0080 0050 lri $AR0, #0x0050 -038e 0508 addis $AC1.M, #0x08 -038f 02bf 007e call 0x007e -0391 00de 0390 lr $AC0.M, @0x0390 -0393 02a0 0001 andf $AC0.M, #0x0001 -0395 029d 039f jlz 0x039f -0397 0080 0398 lri $AR0, #0x0398 -0399 009e 0008 lri $AC0.M, #0x0008 -039b 00c1 03a1 lr $AR1, @0x03a1 -039d 02bf 01bc call 0x01bc -039f 009f 0050 lri $AC1.M, #0x0050 -03a1 00c0 03a1 lr $AR0, @0x03a1 -03a3 8100 clr $ACC0 -03a4 00de 0394 lr $AC0.M, @0x0394 -03a6 b100 tst $ACC0 -03a7 0295 03ae jz 0x03ae -03a9 1c7e mrr $AR3, $AC0.M -03aa 00d8 0395 lr $AX0.L, @0x0395 -03ac 02bf 0342 call 0x0342 -03ae 009f 0050 lri $AC1.M, #0x0050 -03b0 00c0 03a1 lr $AR0, @0x03a1 -03b2 8100 clr $ACC0 -03b3 00de 0396 lr $AC0.M, @0x0396 -03b5 b100 tst $ACC0 -03b6 0295 03bd jz 0x03bd -03b8 1c7e mrr $AR3, $AC0.M -03b9 00d8 0397 lr $AX0.L, @0x0397 -03bb 02bf 0342 call 0x0342 -03bd 00de 0390 lr $AC0.M, @0x0390 -03bf 02a0 0002 andf $AC0.M, #0x0002 -03c1 02dd retlz -03c2 0080 0398 lri $AR0, #0x0398 -03c4 009e 0008 lri $AC0.M, #0x0008 -03c6 00c1 03a1 lr $AR1, @0x03a1 -03c8 02bf 01bc call 0x01bc -03ca 02df ret -} - -{ -03cb 009f 0dc0 lri $AC1.M, #0x0dc0 -03cd 00ff 03a1 sr @0x03a1, $AC1.M -03cf 009f 03a8 lri $AC1.M, #0x03a8 -03d1 00ff 03a2 sr @0x03a2, $AC1.M -03d3 009f 03a4 lri $AC1.M, #0x03a4 -03d5 00ff 03a0 sr @0x03a0, $AC1.M -03d7 1104 0400 bloopi #0x04, 0x0400 -{ - 03d9 00c0 03a2 lr $AR0, @0x03a2 - 03db 0083 0390 lri $AR3, #0x0390 - 03dd 009f 000e lri $AC1.M, #0x000e - 03df 02bf 0331 call 0x0331 - 03e1 00da 0390 lr $AX0.H, @0x0390 - 03e3 8600 tstaxh $AX0.H - 03e4 0295 03f1 jz 0x03f1 - 03e6 00df 03a1 lr $AC1.M, @0x03a1 - 03e8 1c7f mrr $AR3, $AC1.M - 03e9 0550 addis $AC1.M, #0x50 - 03ea 1c1f mrr $AR0, $AC1.M - 03eb 009f 0006 lri $AC1.M, #0x0006 - 03ed 02bf 0331 call 0x0331 - 03ef 02bf 0380 call 0x0380 - 03f1 00de 03a2 lr $AC0.M, @0x03a2 - 03f3 0410 addis $AC0.M, #0x10 - 03f4 00fe 03a2 sr @0x03a2, $AC0.M - 03f6 00de 03a1 lr $AC0.M, @0x03a1 - 03f8 0460 addis $AC0.M, #0x60 - 03f9 00fe 03a1 sr @0x03a1, $AC0.M - 03fb 00de 03a0 lr $AC0.M, @0x03a0 - 03fd 7400 incm $AC0.M - 03fe 00fe 03a0 sr @0x03a0, $AC0.M - 0400 0000 nop -} -0401 02df ret -} - -{ -0402 00c0 03a0 lr $AR0, @0x03a0 -0404 181a lrr $AX0.H, @$AR0 -0405 8100 clr $ACC0 -0406 181e lrr $AC0.M, @$AR0 -0407 00db 0391 lr $AX1.H, @0x0391 -0409 7400 incm $AC0.M -040a d100 cmpar $ACC1, $AX0.H -040b 0270 ifge -040c 8100 clr $ACC0 -040d 1b1e srri @$AR0, $AC0.M -040e 00df 03a1 lr $AC1.M, @0x03a1 -0410 009b 00a0 lri $AX1.H, #0x00a0 -0412 0081 0393 lri $AR1, #0x0393 -0414 18bc lrrd $AC0.L, @$AR1 -0415 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 -0416 bc00 mulxac $AX0.H, $AX1.H, $ACC0 -0417 0080 0050 lri $AR0, #0x0050 -0419 02bf 008b call 0x008b -041b 02df ret -} - -{ -041c 009f 0dc0 lri $AC1.M, #0x0dc0 -041e 00ff 03a1 sr @0x03a1, $AC1.M -0420 009f 03a8 lri $AC1.M, #0x03a8 -0422 00ff 03a2 sr @0x03a2, $AC1.M -0424 009f 03a4 lri $AC1.M, #0x03a4 -0426 00ff 03a0 sr @0x03a0, $AC1.M -0428 1104 0448 bloopi #0x04, 0x0448 -{ - 042a 00c0 03a2 lr $AR0, @0x03a2 - 042c 0083 0390 lri $AR3, #0x0390 - 042e 009f 000e lri $AC1.M, #0x000e - 0430 02bf 0331 call 0x0331 - 0432 00da 0390 lr $AX0.H, @0x0390 - 0434 8600 tstaxh $AX0.H - 0435 0295 0439 jz 0x0439 - 0437 02bf 0402 call 0x0402 - 0439 00de 03a2 lr $AC0.M, @0x03a2 - 043b 0410 addis $AC0.M, #0x10 - 043c 00fe 03a2 sr @0x03a2, $AC0.M - 043e 00de 03a1 lr $AC0.M, @0x03a1 - 0440 0460 addis $AC0.M, #0x60 - 0441 00fe 03a1 sr @0x03a1, $AC0.M - 0443 00de 03a0 lr $AC0.M, @0x03a0 - 0445 7400 incm $AC0.M - 0446 00fe 03a0 sr @0x03a0, $AC0.M - 0448 0000 nop -} -0449 02df ret -} - -{ -044a 0081 0386 lri $AR1, #0x0386 -044c 009f 03a8 lri $AC1.M, #0x03a8 -044e 0080 0040 lri $AR0, #0x0040 -0450 02bf 007c call 0x007c -0452 02df ret -} - -{ -0453 191e lrri $AC0.M, @$AR0 -0454 189c lrrd $AC0.L, @$AR0 -0455 4800 addax $ACC0, $AX0 -0456 1b1e srri @$AR0, $AC0.M -0457 1b1c srri @$AR0, $AC0.L -0458 02df ret -0459 8100 clr $ACC0 -045a 26fe lrs $AC0.M, @CMBH -045b 02c0 8000 andcf $AC0.M, #0x8000 -045d 029c 045a jlnz 0x045a -045f 26ff lrs $AC0.M, @CMBL -0460 02df ret -} - -{ -0461 0080 0388 lri $AR0, #0x0388 -0463 0081 0051 lri $AR1, #0x0051 -0465 173f callr $AR1 // call 0x0051 -0466 00de 0344 lr $AC0.M, @0x0344 -0468 00fe 0341 sr @0x0341, $AC0.M -046a 00de 0345 lr $AC0.M, @0x0345 -046c 00fe 038e sr @0x038e, $AC0.M -046e 173f callr $AR1 // call 0x0051 -046f 02df ret -} - -{ -0470 02bf 0461 call 0x0461 -0472 009e 8000 lri $AC0.M, #0x8000 -0474 00dc 0341 lr $AC0.L, @0x0341 -0476 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // 0x8000???? -0478 8100 clr $ACC0 -0479 00fe 0355 sr @0x0355, $AC0.M -047b 02bf 044a call 0x044a -047d 00de 0341 lr $AC0.M, @0x0341 -047f 007e 056c bloop $AC0.M, 0x056c -{ - 0481 02bf 035e call 0x035e - 0483 02bf 03cb call 0x03cb - 0485 02bf 0459 call 0x0459 - 0487 8100 clr $ACC0 - 0488 00fe 0354 sr @0x0354, $AC0.M - 048a 00de 0342 lr $AC0.M, @0x0342 - 048c 007e 0538 bloop $AC0.M, 0x0538 - { - 048e 00d8 0354 lr $AX0.L, @0x0354 - 0490 009a 0100 lri $AX0.H, #0x0100 - 0492 8100 clr $ACC0 - 0493 00de 0380 lr $AC0.M, @0x0380 - 0495 00dc 0381 lr $AC0.L, @0x0381 - 0497 9000 mul $AX0.L, $AX0.H - 0498 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0499 00fe 034c sr @0x034c, $AC0.M - 049b 00fc 034d sr @0x034d, $AC0.L - 049d 02bf 0305 call 0x0305 - 049f 00da 0400 lr $AX0.H, @0x0400 - 04a1 8600 tstaxh $AX0.H - 04a2 0295 0533 jz 0x0533 - 04a4 00da 0401 lr $AX0.H, @0x0401 - 04a6 8600 tstaxh $AX0.H - 04a7 0294 0533 jnz 0x0533 - 04a9 00da 0406 lr $AX0.H, @0x0406 - 04ab 8600 tstaxh $AX0.H - 04ac 0294 0930 jnz 0x0930 - 04ae 8100 clr $ACC0 - 04af 00de 0440 lr $AC0.M, @0x0440 - 04b1 0607 cmpis $AC0.M, #0x07 // format 0x7 or less (Synths) - 04b2 0293 0231 jle 0x0231 - 04b4 0620 cmpis $AC0.M, #0x20 // format 0x20 - 04b5 0295 079e jz 0x079e - 04b7 0621 cmpis $AC0.M, #0x21 // format 0x21 - 04b8 0295 07a7 jz 0x07a7 - 04ba 00d8 0402 lr $AX0.L, @0x0402 - 04bc 8100 clr $ACC0 - 04bd 8900 clr $ACC1 - 04be 00dc 0418 lr $AC0.L, @0x0418 - 04c0 8d00 set15 - 04c1 0099 0050 lri $AX1.L, #0x0050 - 04c3 a000 mulx $AX0.L, $AX1.L - 04c4 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 04c5 1404 lsl $ACC0, #4 - 04c6 8c00 clr15 - 04c7 1ffe mrr $AC1.M, $AC0.M - 04c8 0083 0580 lri $AR3, #0x0580 - 04ca 00da 0441 lr $AX0.H, @0x0441 - 04cc 8600 tstaxh $AX0.H - 04cd 0295 04dd jz 0x04dd - 04cf 00da 0449 lr $AX0.H, @0x0449 - 04d1 8100 clr $ACC0 - 04d2 00de 044b lr $AC0.M, @0x044b - 04d4 3800 orr $AC0.M, $AX0.H - 04d5 0240 000f andi $AC0.M, #0x000f - 04d7 0295 04dd jz 0x04dd - 04d9 02bf 06a6 call 0x06a6 - 04db 029f 04df jmp 0x04df - 04dd 02bf 0837 call 0x0837 - //RAW21-jmp - 04df 0080 0580 lri $AR0, #0x0580 - 04e1 0081 0520 lri $AR1, #0x0520 - 04e3 0099 0000 lri $AX1.L, #0x0000 - 04e5 02bf 013b call 0x013b - //RAW20-jmp - 04e7 0080 0450 lri $AR0, #0x0450 - 04e9 0081 0520 lri $AR1, #0x0520 - 04eb 0082 0428 lri $AR2, #0x0428 - 04ed 0083 0453 lri $AR3, #0x0453 - 04ef 18fa lrrd $AX0.H, @$AR3 - 04f0 8600 tstaxh $AX0.H - 04f1 0294 0501 jnz 0x0501 - 04f3 18fa lrrd $AX0.H, @$AR3 - 04f4 8600 tstaxh $AX0.H - 04f5 0294 0501 jnz 0x0501 - 04f7 18fa lrrd $AX0.H, @$AR3 - 04f8 8600 tstaxh $AX0.H - 04f9 0294 0501 jnz 0x0501 - 04fb 8100 clr $ACC0 - 04fc 18fe lrrd $AC0.M, @$AR3 - 04fd 0280 7fff cmpi $AC0.M, #0x7fff - 04ff 0295 0505 jz 0x0505 - 0501 02bf 01d1 call 0x01d1 - 0503 029f 0505 jmp 0x0505 - 0505 8100 clr $ACC0 - 0506 1c9e mrr $IX0, $AC0.M - 0507 1cde mrr $IX2, $AC0.M - 0508 7400 incm $AC0.M - 0509 1cfe mrr $IX3, $AC0.M - 050a 8f00 set40 - 050b 0086 0002 lri $IX2, #0x0002 - 050d 0082 0408 lri $AR2, #0x0408 - 050f 1104 052f bloopi #0x04, 0x052f - { - 0511 8100 clr $ACC0 - 0512 195e lrri $AC0.M, @$AR2 - 0513 1200 sbclr #0x00 - 0514 b100 tst $ACC0 - 0515 0275 ifz - 0516 1300 sbset #0x00 - 0517 1c7e mrr $AR3, $AC0.M - 0518 195e lrri $AC0.M, @$AR2 - 0519 14fa asr $ACC0, #-6 - 051a 1f5e mrr $AX0.H, $AC0.M - 051b 1f1c mrr $AX0.L, $AC0.L - 051c 185f lrr $AC1.M, @$AR2 - 051d 0080 0520 lri $AR0, #0x0520 - 051f 029d 0523 jlz 0x0523 - 0521 02bf 011e call 0x011e - 0523 1b5f srri @$AR2, $AC1.M - 0524 8100 clr $ACC0 - 0525 185e lrr $AC0.M, @$AR2 - 0526 000e xar $AR2 - //; *** UNKNOWN OPCODE *** - // 0xc/0xd/0xe/0xf is one opcode where last 2 bits define target $AR? reg - // (new value is based on orig $AR? and %WR? reg value = unknown) - 0527 b100 tst $ACC0 - 0528 0274 ifnz - 0529 7800 decm $AC0.M - 052a b100 tst $ACC0 - 052b 8900 clr $ACC1 - 052c 0275 ifz - 052d 1a5f srr @$AR2, $AC1.M - 052e 001a addarn $AR2, $IX2 - 052f 1b5e srri @$AR2, $AC0.M - } - 0530 8e00 set16 - 0531 02bf 0321 call 0x0321 - 0533 00de 0354 lr $AC0.M, @0x0354 - 0535 7400 incm $AC0.M - 0536 00fe 0354 sr @0x0354, $AC0.M - 0538 0000 nop - } - 0539 16fb 0001 si @DIRQ, #0x0001 - 053b 0083 0d00 lri $AR3, #0x0d00 - 053d 02bf 012a call 0x012a - 053f 0081 0388 lri $AR1, #0x0388 - 0541 009f 0d00 lri $AC1.M, #0x0d00 - 0543 0080 0050 lri $AR0, #0x0050 - 0545 02bf 0089 call 0x0089 - 0547 0080 0fa0 lri $AR0, #0x0fa0 - 0549 0083 0d60 lri $AR3, #0x0d60 - 054b 009f 0050 lri $AC1.M, #0x0050 - 054d 0098 8000 lri $AX0.L, #0x8000 - 054f 02bf 0342 call 0x0342 - 0551 0083 0d60 lri $AR3, #0x0d60 - 0553 02bf 012a call 0x012a - 0555 0081 038a lri $AR1, #0x038a - 0557 009f 0d60 lri $AC1.M, #0x0d60 - 0559 0080 0050 lri $AR0, #0x0050 - 055b 02bf 0089 call 0x0089 - 055d 009a 0000 lri $AX0.H, #0x0000 - 055f 0098 00a0 lri $AX0.L, #0x00a0 - 0561 0080 0388 lri $AR0, #0x0388 - 0563 02bf 0453 call 0x0453 - 0565 0080 038a lri $AR0, #0x038a - 0567 02bf 0453 call 0x0453 - 0569 02bf 041c call 0x041c - 056b 0000 nop - 056c 0000 nop -} -056d 029f 0031 jmp 0x0031 -} - -{ -056f 0080 0346 lri $AR0, #0x0346 -0571 02bf 0051 call 0x0051 -0573 02bf 0051 call 0x0051 -0575 0081 0346 lri $AR1, #0x0346 -0577 193e lrri $AC0.M, @$AR1 -0578 193c lrri $AC0.L, @$AR1 -0579 009f 0400 lri $AC1.M, #0x0400 -057b 00c0 0345 lr $AR0, @0x0345 -057d 02bf 007e call 0x007e -057f 0081 0348 lri $AR1, #0x0348 -0581 193e lrri $AC0.M, @$AR1 -0582 193c lrri $AC0.L, @$AR1 -0583 009f 0800 lri $AC1.M, #0x0800 -0585 00c0 0345 lr $AR0, @0x0345 -0587 02bf 007e call 0x007e -0589 0081 0346 lri $AR1, #0x0346 -058b 193e lrri $AC0.M, @$AR1 -058c 193c lrri $AC0.L, @$AR1 -058d 009f 0800 lri $AC1.M, #0x0800 -058f 00c0 0345 lr $AR0, @0x0345 -0591 02bf 008b call 0x008b -0593 0081 0348 lri $AR1, #0x0348 -0595 193e lrri $AC0.M, @$AR1 -0596 193c lrri $AC0.L, @$AR1 -0597 009f 0400 lri $AC1.M, #0x0400 -0599 00c0 0345 lr $AR0, @0x0345 -059b 02bf 008b call 0x008b -059d 029f 0049 jmp 0x0049 -} - -{ -059f 0080 0346 lri $AR0, #0x0346 -05a1 02bf 0051 call 0x0051 -05a3 02bf 0051 call 0x0051 -05a5 0081 0346 lri $AR1, #0x0346 -05a7 193e lrri $AC0.M, @$AR1 -05a8 193c lrri $AC0.L, @$AR1 -05a9 009f 0400 lri $AC1.M, #0x0400 -05ab 00c0 0345 lr $AR0, @0x0345 -05ad 02bf 007e call 0x007e -05af 0081 0348 lri $AR1, #0x0348 -05b1 193e lrri $AC0.M, @$AR1 -05b2 193c lrri $AC0.L, @$AR1 -05b3 009f 0400 lri $AC1.M, #0x0400 -05b5 00c0 0345 lr $AR0, @0x0345 -05b7 02bf 008b call 0x008b -05b9 029f 0049 jmp 0x0049 -} - -{ -05bb 0080 0346 lri $AR0, #0x0346 -05bd 02bf 0051 call 0x0051 -05bf 02bf 0051 call 0x0051 -05c1 0081 0346 lri $AR1, #0x0346 -05c3 193e lrri $AC0.M, @$AR1 -05c4 193c lrri $AC0.L, @$AR1 -05c5 009f 0400 lri $AC1.M, #0x0400 -05c7 00c0 0345 lr $AR0, @0x0345 -05c9 02bf 00ae call 0x00ae -05cb 0081 0348 lri $AR1, #0x0348 -05cd 193e lrri $AC0.M, @$AR1 -05ce 193c lrri $AC0.L, @$AR1 -05cf 009f 0400 lri $AC1.M, #0x0400 -05d1 00c0 0345 lr $AR0, @0x0345 -05d3 02bf 008b call 0x008b -05d5 029f 0049 jmp 0x0049 -} - -{ -05d7 0080 0346 lri $AR0, #0x0346 -05d9 02bf 0051 call 0x0051 -05db 02bf 0051 call 0x0051 -05dd 0081 0346 lri $AR1, #0x0346 -05df 193e lrri $AC0.M, @$AR1 -05e0 193c lrri $AC0.L, @$AR1 -05e1 009f 0400 lri $AC1.M, #0x0400 -05e3 00c0 0344 lr $AR0, @0x0344 -05e5 02bf 007e call 0x007e -05e7 0081 0348 lri $AR1, #0x0348 -05e9 193e lrri $AC0.M, @$AR1 -05ea 193c lrri $AC0.L, @$AR1 -05eb 009f 0800 lri $AC1.M, #0x0800 -05ed 00c0 0344 lr $AR0, @0x0344 -05ef 02bf 007e call 0x007e -05f1 0080 0400 lri $AR0, #0x0400 -05f3 0083 0800 lri $AR3, #0x0800 -05f5 0084 0000 lri $IX0, #0x0000 -05f7 00da 0345 lr $AX0.H, @0x0345 -05f9 00df 0344 lr $AC1.M, @0x0344 -05fb 8f00 set40 -05fc 197b lrri $AX1.H, @$AR3 -05fd b800 mulx $AX0.H, $AX1.H -05fe 197b lrri $AX1.H, @$AR3 -05ff 007f 0604 bloop $AC1.M, 0x0604 -0601 199e lrrn $AC0.M, @$AR0 -0602 bc00 mulxac $AX0.H, $AX1.H, $ACC0 -0603 80b2 nx'sl : $AC0.M, $AX1.H -0604 0000 nop -0605 8e00 set16 -0606 0081 0346 lri $AR1, #0x0346 -0608 193e lrri $AC0.M, @$AR1 -0609 193c lrri $AC0.L, @$AR1 -060a 009f 0400 lri $AC1.M, #0x0400 -060c 00c0 0344 lr $AR0, @0x0344 -060e 02bf 008b call 0x008b -0610 009e 8200 lri $AC0.M, #0x8200 -0612 00dc 0344 lr $AC0.L, @0x0344 -0614 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // 0x8200???? -0616 029f 0031 jmp 0x0031 -} - -{ -0618 0080 0346 lri $AR0, #0x0346 -061a 02bf 0051 call 0x0051 -061c 0081 0346 lri $AR1, #0x0346 -061e 009f 0400 lri $AC1.M, #0x0400 -0620 00c0 0345 lr $AR0, @0x0345 -0622 02bf 007c call 0x007c -0624 02bf 8644 call 0x8644 // iROM!!!! -0626 029f 0049 jmp 0x0049 -} - -{ -0628 009e 0430 lri $AC0.M, #0x0430 -062a 2219 lrs $AX0.H, @0x0019 -062b 4400 addr $ACC0, $AX0.H -062c 1c1e mrr $AR0, $AC0.M -062d 1fda mrr $AC0.M, $AX0.H -062e 3280 not $AC0.M -062f 7400 incm $AC0.M -0630 221a lrs $AX0.H, @0x001a -0631 4400 addr $ACC0, $AX0.H -0632 0090 0000 lri $AC0.H, #0x0000 -0634 029f 0645 jmp 0x0645 -} - -{ -0636 009e 0430 lri $AC0.M, #0x0430 -0638 2219 lrs $AX0.H, @0x0019 -0639 4400 addr $ACC0, $AX0.H -063a 1c1e mrr $AR0, $AC0.M -063b 1fda mrr $AC0.M, $AX0.H -063c 3280 not $AC0.M -063d 7400 incm $AC0.M -063e 221a lrs $AX0.H, @0x001a -063f 4400 addr $ACC0, $AX0.H -0640 0090 0000 lri $AC0.H, #0x0000 -0642 8200 cmp -0643 0270 ifge -0644 1fdf mrr $AC0.M, $AC1.M -0645 1f3e mrr $AX1.L, $AC0.M -0646 02bf 0699 call 0x0699 -0648 261c lrs $AC0.M, @0x001c -0649 241d lrs $AC0.L, @0x001d -064a 7200 addaxl $ACC0, $AX1.L -064b 5300 subr $ACC1, $AX1.L -064c 2e1c srs @0x001c, $AC0.M -064d 2c1d srs @0x001d, $AC0.L -064e 02df ret -} - -{ -064f 8100 clr $ACC0 -0650 221c lrs $AX0.H, @0x001c -0651 201d lrs $AX0.L, @0x001d -0652 4800 addax $ACC0, $AX0 -0653 147c lsr $ACC0, #-4 -0654 2e1e srs @0x001e, $AC0.M -0655 2c1f srs @0x001f, $AC0.L -0656 2340 lrs $AX1.H, @0x0040 -0657 c814 mulc'mv $AC0.M, $AX1.H : $AX1.L, $AC0.L -0658 9e00 mulmv $AX1.L, $AX1.H, $ACC0 -0659 f000 lsl16 $ACC0 -065a 4e00 addp $ACC0 -065b 234c lrs $AX1.H, @0x004c -065c 214d lrs $AX1.L, @0x004d -065d 4a00 addax $ACC0, $AX1 -065e 2e20 srs @0x0020, $AC0.M -065f 2c21 srs @0x0021, $AC0.L -0660 1fd8 mrr $AC0.M, $AX0.L -0661 0240 000f andi $AC0.M, #0x000f -0663 2e19 srs @0x0019, $AC0.M -0664 264a lrs $AC0.M, @0x004a -0665 244b lrs $AC0.L, @0x004b -0666 5800 subax $ACC0, $AX0 -0667 2e22 srs @0x0022, $AC0.M -0668 2c23 srs @0x0023, $AC0.L -0669 02df ret -} - -{ -066a 221e lrs $AX0.H, @0x001e -066b 201f lrs $AX0.L, @0x001f -066c 8100 clr $ACC0 -066d 264a lrs $AC0.M, @0x004a -066e 244b lrs $AC0.L, @0x004b -066f 147c lsr $ACC0, #-4 -0670 5800 subax $ACC0, $AX0 -0671 0295 067a jz 0x067a -0673 02bf 06ec call 0x06ec -0675 0e10 lris $AC0.M, #0x10 -0676 2e1a srs @0x001a, $AC0.M -0677 8100 clr $ACC0 -0678 2e19 srs @0x0019, $AC0.M -0679 02df ret -} - -{ -067a 224a lrs $AX0.H, @0x004a -067b 204b lrs $AX0.L, @0x004b -067c 8100 clr $ACC0 -067d 261c lrs $AC0.M, @0x001c -067e 241d lrs $AC0.L, @0x001d -067f 5800 subax $ACC0, $AX0 -0680 0290 0687 jge 0x0687 -0682 02bf 06ec call 0x06ec -0684 2623 lrs $AC0.M, @0x0023 -0685 029f 0676 jmp 0x0676 -} - -{ -0687 2648 lrs $AC0.M, @0x0048 -0688 2449 lrs $AC0.L, @0x0049 -0689 2e1c srs @0x001c, $AC0.M -068a 2c1d srs @0x001d, $AC0.L -068b 0e10 lris $AC0.M, #0x10 -068c 2e1a srs @0x001a, $AC0.M -068d 02bf 064f call 0x064f -068f 2642 lrs $AC0.M, @0x0042 -0690 2e3f srs @0x003f, $AC0.M -0691 2643 lrs $AC0.M, @0x0043 -0692 2e3e srs @0x003e, $AC0.M -0693 8100 clr $ACC0 -0694 00fe 0362 sr @0x0362, $AC0.M -0696 02bf 06ec call 0x06ec -0698 02df ret -} - -{ -0699 b100 tst $ACC0 -069a 02d5 retz -069b 04fe addis $AC0.M, #0xfe -069c 1f1e mrr $AX0.L, $AC0.M -069d 191e lrri $AC0.M, @$AR0 -069e 0291 06a4 jl 0x06a4 -06a0 191a lrri $AX0.H, @$AR0 -06a1 0058 loop $AX0.L -06a2 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M -06a3 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M -06a4 1b7e srri @$AR3, $AC0.M -06a5 02df ret -} - -{ -06a6 0092 0004 lri $CR, #0x0004 -06a8 02bf 064f call 0x064f -06aa 8100 clr $ACC0 -06ab 00fe 0362 sr @0x0362, $AC0.M -06ad 8100 clr $ACC0 -06ae 2622 lrs $AC0.M, @0x0022 -06af 2423 lrs $AC0.L, @0x0023 -06b0 b100 tst $ACC0 -06b1 0294 06c3 jnz 0x06c3 -06b3 02bf 066a call 0x066a -06b5 2219 lrs $AX0.H, @0x0019 -06b6 8600 tstaxh $AX0.H -06b7 0294 06c0 jnz 0x06c0 -06b9 02bf 0636 call 0x0636 -06bb b900 tst $ACC1 -06bc 0295 06e9 jz 0x06e9 -06be 02bf 064f call 0x064f -06c0 8100 clr $ACC0 -06c1 2622 lrs $AC0.M, @0x0022 -06c2 2423 lrs $AC0.L, @0x0023 -06c3 1f1f mrr $AX0.L, $AC1.M -06c4 009a 0000 lri $AX0.H, #0x0000 -06c6 5800 subax $ACC0, $AX0 -06c7 0290 06d6 jge 0x06d6 -06c9 8100 clr $ACC0 -06ca 2619 lrs $AC0.M, @0x0019 -06cb b100 tst $ACC0 -06cc 0294 06d0 jnz 0x06d0 -06ce 02bf 066a call 0x066a -06d0 02bf 0628 call 0x0628 -06d2 02bf 064f call 0x064f -06d4 029f 06ad jmp 0x06ad -} - -{ -06d6 8100 clr $ACC0 -06d7 2619 lrs $AC0.M, @0x0019 -06d8 b100 tst $ACC0 -06d9 0294 06dd jnz 0x06dd -06db 02bf 066a call 0x066a -06dd 02bf 0636 call 0x0636 -06df b900 tst $ACC1 -06e0 0295 06e9 jz 0x06e9 -06e2 02bf 064f call 0x064f -06e4 029f 06d6 jmp 0x06d6 -} - -{ -06e6 8100 clr $ACC0 -06e7 005f loop $AC1.M -06e8 1b7e srri @$AR3, $AC0.M -06e9 0092 00ff lri $CR, #0x00ff -06eb 02df ret -} - -{ -06ec 00ff 0360 sr @0x0360, $AC1.M -06ee 00da 0362 lr $AX0.H, @0x0362 -06f0 8600 tstaxh $AX0.H -06f1 0294 06fe jnz 0x06fe -06f3 0a01 lris $AX0.H, #0x01 -06f4 00fa 0362 sr @0x0362, $AX0.H -06f6 2620 lrs $AC0.M, @0x0020 -06f7 2421 lrs $AC0.L, @0x0021 -06f8 009f 0005 lri $AC1.M, #0x0005 -06fa 02bf 0103 call 0x0103 -06fc 0092 0004 lri $CR, #0x0004 -06fe 0080 ffd3 lri $AR0, #0xffd3 -0700 0084 0000 lri $IX0, #0x0000 -0702 199e lrrn $AC0.M, @$AR0 -0703 1ffe mrr $AC1.M, $AC0.M -0704 1401 lsl $ACC0, #1 -0705 0240 001e andi $AC0.M, #0x001e -0707 0200 0300 addi $AC0.M, #0x0300 -0709 1c3e mrr $AR1, $AC0.M -070a 157c lsr $ACC1, #-4 -070b 0340 000f andi $AC1.M, #0x000f -070d 0a11 lris $AX0.H, #0x11 -070e 5500 subr $ACC1, $AX0.H -070f 009a 00f0 lri $AX0.H, #0x00f0 -0711 009b 000f lri $AX1.H, #0x000f -0713 0082 0370 lri $AR2, #0x0370 -0715 1998 lrrn $AX0.L, @$AR0 -0716 6000 movr $ACC0, $AX0.L -0717 1107 071e bloopi #0x07, 0x071e -{ - 0719 3400 andr $AC0.M, $AX0.H - 071a 1408 lsl $ACC0, #8 - 071b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 071c 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 071d 140c lsl $ACC0, #12 - 071e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M -} -071f 3400 andr $AC0.M, $AX0.H -0720 1408 lsl $ACC0, #8 -0721 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M -0722 3600 andr $AC0.M, $AX1.H -0723 140c lsl $ACC0, #12 -0724 1b5e srri @$AR2, $AC0.M -0725 8f00 set40 -0726 1f7f mrr $AX1.H, $AC1.M -0727 203e lrs $AX0.L, @0x003e -0728 273f lrs $AC1.M, @0x003f -0729 193a lrri $AX0.H, @$AR1 -072a 1939 lrri $AX1.L, @$AR1 -072b 0080 0370 lri $AR0, #0x0370 -072d 0081 0430 lri $AR1, #0x0430 -072f 1c80 mrr $IX0, $AR0 -0730 a000 mulx $AX0.L, $AX1.L -0731 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 -0732 1108 073b bloopi #0x08, 0x073b -0734 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M -0735 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 -0736 1485 asl $ACC0, #5 -0737 e831 maddc's $AC0.M, $AX1.L : @$AR1, $AC0.M -0738 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M -0739 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 -073a 1585 asl $ACC1, #5 -073b ea39 maddc's $AC1.M, $AX1.L : @$AR1, $AC1.M -073c 8e00 set16 -073d 8900 clr $ACC1 -073e 00df 0360 lr $AC1.M, @0x0360 -0740 02df ret -} - -{ -0741 0080 0346 lri $AR0, #0x0346 -0743 02bf 0051 call 0x0051 -0745 8100 clr $ACC0 -0746 0080 0430 lri $AR0, #0x0430 -0748 1010 loopi #0x10 - 0749 1b1e srri @$AR0, $AC0.M -074a 00fe 0442 sr @0x0442, $AC0.M -074c 00fe 0443 sr @0x0443, $AC0.M -074e 009c 0000 lri $AC0.L, #0x0000 -0750 00fe 041c sr @0x041c, $AC0.M -0752 00fc 041d sr @0x041d, $AC0.L -0754 009e 0100 lri $AC0.M, #0x0100 -0756 009c f100 lri $AC0.L, #0xf100 -0758 00fe 044e sr @0x044e, $AC0.M -075a 00fc 044f sr @0x044f, $AC0.L -075c 009e 0040 lri $AC0.M, #0x0040 -075e 009c 0000 lri $AC0.L, #0x0000 -0760 00fe 044c sr @0x044c, $AC0.M -0762 00fc 044d sr @0x044d, $AC0.L -0764 009e 0009 lri $AC0.M, #0x0009 -0766 00fe 0440 sr @0x0440, $AC0.M -0768 009e 0010 lri $AC0.M, #0x0010 -076a 00fe 041a sr @0x041a, $AC0.M -076c 009e 0100 lri $AC0.M, #0x0100 -076e 009c f250 lri $AC0.L, #0xf250 -0770 00fe 044a sr @0x044a, $AC0.M -0772 00fc 044b sr @0x044b, $AC0.L -0774 009c 0000 lri $AC0.L, #0x0000 -0776 00fe 0448 sr @0x0448, $AC0.M -0778 00fc 0449 sr @0x0449, $AC0.L -077a 009e 0001 lri $AC0.M, #0x0001 -077c 00fe 0441 sr @0x0441, $AC0.M -077e 8900 clr $ACC1 -077f 00ff 0401 sr @0x0401, $AC1.M -0781 1180 079b bloopi #0x80, 0x079b -{ - 0783 0083 0580 lri $AR3, #0x0580 - 0785 009f 0100 lri $AC1.M, #0x0100 - 0787 02bf 06a6 call 0x06a6 - 0789 0081 0346 lri $AR1, #0x0346 - 078b 193e lrri $AC0.M, @$AR1 - 078c 18bc lrrd $AC0.L, @$AR1 - 078d 009f 0580 lri $AC1.M, #0x0580 - 078f 0080 0100 lri $AR0, #0x0100 - 0791 02bf 008b call 0x008b - 0793 0081 0346 lri $AR1, #0x0346 - 0795 193e lrri $AC0.M, @$AR1 - 0796 18bc lrrd $AC0.L, @$AR1 - 0797 0098 0200 lri $AX0.L, #0x0200 - 0799 7000 addaxl $ACC0, $AX0.L - 079a 1b3e srri @$AR1, $AC0.M - 079b 1abc srrd @$AR1, $AC0.L -} -079c 029f 0049 jmp 0x0049 -} - -void 079e_AudioFormatRAW20() -{ -079e 8900 clr $ACC1 -079f 009f 0050 lri $AC1.M, #0x0050 -07a1 0083 0520 lri $AR3, #0x0520 -07a3 02bf 07b9 call 0x07b9 -07a5 029f 04e7 jmp 0x04e7 -} - -void 07a7_AudioFormatRAW21() -{ -07a7 00d8 0402 lr $AX0.L, @0x0402 -07a9 8100 clr $ACC0 -07aa 8900 clr $ACC1 -07ab 00dc 0418 lr $AC0.L, @0x0418 -07ad 009a 0050 lri $AX0.H, #0x0050 -07af 9000 mul $AX0.L, $AX0.H -07b0 9400 mulac $AX0.L, $AX0.H, $ACC0 -07b1 1404 lsl $ACC0, #4 -07b2 1ffe mrr $AC1.M, $AC0.M -07b3 0083 0580 lri $AR3, #0x0580 -07b5 02bf 07b9 call 0x07b9 -07b7 029f 04df jmp 0x04df -} - -{ -07b9 0092 0004 lri $CR, #0x0004 -07bb 8100 clr $ACC0 -07bc 2622 lrs $AC0.M, @0x0022 -07bd 2423 lrs $AC0.L, @0x0023 -07be 1f1f mrr $AX0.L, $AC1.M -07bf 009a 0000 lri $AX0.H, #0x0000 -07c1 5800 subax $ACC0, $AX0 -07c2 0290 07d9 jge 0x07d9 -07c4 8900 clr $ACC1 -07c5 00c0 0423 lr $AR0, @0x0423 -07c7 02bf 07fe call 0x07fe -07c9 8100 clr $ACC0 -07ca 1fd8 mrr $AC0.M, $AX0.L -07cb 2223 lrs $AX0.H, @0x0023 -07cc 5400 subr $ACC0, $AX0.H -07cd 0007 dar $AR3 -07ce 1979 lrri $AX1.L, @$AR3 -07cf 005e loop $AC0.M -07d0 1b79 srri @$AR3, $AX1.L -07d1 009f 0001 lri $AC1.M, #0x0001 -07d3 2f01 srs @0x0001, $AC1.M -07d4 8900 clr $ACC1 -07d5 2f23 srs @0x0023, $AC1.M -07d6 0092 00ff lri $CR, #0x00ff -07d8 02df ret -} - -{ -07d9 2e22 srs @0x0022, $AC0.M -07da 2c23 srs @0x0023, $AC0.L -07db 8100 clr $ACC0 -07dc 8900 clr $ACC1 -07dd 264a lrs $AC0.M, @0x004a -07de 271c lrs $AC1.M, @0x001c -07df 5c00 sub $ACC0, $ACC1 -07e0 2e1e srs @0x001e, $AC0.M -07e1 5000 subr $ACC0, $AX0.L -07e2 0290 07f8 jge 0x07f8 -07e4 00c0 041e lr $AR0, @0x041e -07e6 02bf 07fe call 0x07fe -07e8 8100 clr $ACC0 -07e9 1fd8 mrr $AC0.M, $AX0.L -07ea 221e lrs $AX0.H, @0x001e -07eb 5400 subr $ACC0, $AX0.H -07ec 1c1e mrr $AR0, $AC0.M -07ed 8100 clr $ACC0 -07ee 2e1c srs @0x001c, $AC0.M -07ef 2648 lrs $AC0.M, @0x0048 -07f0 2449 lrs $AC0.L, @0x0049 -07f1 2e4c srs @0x004c, $AC0.M -07f2 2c4d srs @0x004d, $AC0.L -07f3 02bf 07fe call 0x07fe -07f5 0092 00ff lri $CR, #0x00ff -07f7 02df ret -} - -{ -07f8 1c18 mrr $AR0, $AX0.L -07f9 02bf 07fe call 0x07fe -07fb 0092 00ff lri $CR, #0x00ff -07fd 02df ret -} - -{ -07fe 8100 clr $ACC0 -07ff 1fc0 mrr $AC0.M, $AR0 -0800 b100 tst $ACC0 -0801 02d5 retz -0802 8900 clr $ACC1 -0803 271c lrs $AC1.M, @0x001c -0804 0340 0001 andi $AC1.M, #0x0001 -0806 009b 0000 lri $AX1.H, #0x0000 -0808 1f3f mrr $AX1.L, $AC1.M -0809 264c lrs $AC0.M, @0x004c -080a 244d lrs $AC0.L, @0x004d -080b 8900 clr $ACC1 -080c 251c lrs $AC1.L, @0x001c -080d 1501 lsl $ACC1, #1 -080e 4c00 add $ACC0, $ACC1 -080f 5a00 subax $ACC0, $AX1 -0810 5a00 subax $ACC0, $AX1 -0811 1c20 mrr $AR1, $AR0 -0812 1fe0 mrr $AC1.M, $AR0 -0813 0502 addis $AC1.M, #0x02 -0814 1c1f mrr $AR0, $AC1.M -0815 009f 0a00 lri $AC1.M, #0x0a00 -0817 0092 00ff lri $CR, #0x00ff -0819 02bf 007e call 0x007e -081b 0092 0004 lri $CR, #0x0004 -081d 271c lrs $AC1.M, @0x001c -081e 1f61 mrr $AX1.H, $AR1 -081f 4700 addr $ACC1, $AX1.H -0820 2f1c srs @0x001c, $AC1.M -0821 0080 0a00 lri $AR0, #0x0a00 -0823 8900 clr $ACC1 -0824 1ff9 mrr $AC1.M, $AX1.L -0825 b900 tst $ACC1 -0826 0274 ifnz -0827 0008 iar $AR0 -0828 8900 clr $ACC1 -0829 1fe1 mrr $AC1.M, $AR1 -082a 191e lrri $AC0.M, @$AR0 -082b 0701 cmpis $AC1.M, #0x01 -082c 0293 0835 jle 0x0835 -082e 191a lrri $AX0.H, @$AR0 -082f 05fe addis $AC1.M, #0xfe -0830 005f loop $AC1.M -0831 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M -0832 1b7e srri @$AR3, $AC0.M -0833 1b7a srri @$AR3, $AX0.H -0834 02df ret -} - -{ -0835 1b7e srri @$AR3, $AC0.M -0836 02df ret -} - -{ -0837 0092 0004 lri $CR, #0x0004 -0839 2201 lrs $AX0.H, @0x0001 -083a 8600 tstaxh $AX0.H -083b 0294 0868 jnz 0x0868 -083d 2204 lrs $AX0.H, @0x0004 -083e 8600 tstaxh $AX0.H -083f 02b4 08bc callnz 0x08bc -0841 2219 lrs $AX0.H, @0x0019 -0842 8600 tstaxh $AX0.H -0843 0295 085d jz 0x085d -0845 009e 0430 lri $AC0.M, #0x0430 -0847 4400 addr $ACC0, $AX0.H -0848 1c1e mrr $AR0, $AC0.M -0849 0e10 lris $AC0.M, #0x10 -084a 5400 subr $ACC0, $AX0.H -084b 1f7e mrr $AX1.H, $AC0.M -084c 02bf 0699 call 0x0699 -084e d900 cmpar $ACC1, $AX1.H -084f 0292 085c jg 0x085c -0851 0295 0858 jz 0x0858 -0853 2619 lrs $AC0.M, @0x0019 -0854 4c00 add $ACC0, $ACC1 -0855 2e19 srs @0x0019, $AC0.M -0856 029f 08b9 jmp 0x08b9 - -0858 8100 clr $ACC0 -0859 2e19 srs @0x0019, $AC0.M -085a 029f 08b9 jmp 0x08b9 - -085c 5700 subr $ACC1, $AX1.H -085d 8100 clr $ACC0 -085e 2605 lrs $AC0.M, @0x0005 -085f b100 tst $ACC0 -0860 0295 0879 jz 0x0879 -0862 8100 clr $ACC0 -0863 2e05 srs @0x0005, $AC0.M -0864 2241 lrs $AX0.H, @0x0041 -0865 8600 tstaxh $AX0.H -0866 0294 086f jnz 0x086f -0868 8100 clr $ACC0 -0869 005f loop $AC1.M -086a 1b7e srri @$AR3, $AC0.M -086b 7400 incm $AC0.M -086c 2e01 srs @0x0001, $AC0.M -086d 029f 08b9 jmp 0x08b9 - -086f 2648 lrs $AC0.M, @0x0048 -0870 2449 lrs $AC0.L, @0x0049 -0871 2e1c srs @0x001c, $AC0.M -0872 2c1d srs @0x001d, $AC0.L -0873 02bf 08c1 call 0x08c1 -0875 2642 lrs $AC0.M, @0x0042 -0876 2443 lrs $AC0.L, @0x0043 -0877 2e3f srs @0x003f, $AC0.M -0878 2c3e srs @0x003e, $AC0.L -0879 00ff 0360 sr @0x0360, $AC1.M -087b 2620 lrs $AC0.M, @0x0020 -087c 2421 lrs $AC0.L, @0x0021 -087d 009f 0005 lri $AC1.M, #0x0005 -087f 02bf 0103 call 0x0103 -0881 0092 0004 lri $CR, #0x0004 -0883 8900 clr $ACC1 -0884 00ff 0362 sr @0x0362, $AC1.M -0886 00df 0360 lr $AC1.M, @0x0360 -0888 02bf 08db call 0x08db -088a 8100 clr $ACC0 -088b 00de 0362 lr $AC0.M, @0x0362 -088d 2240 lrs $AX0.H, @0x0040 -088e 4400 addr $ACC0, $AX0.H -088f 00fe 0362 sr @0x0362, $AC0.M -0891 8100 clr $ACC0 -0892 2622 lrs $AC0.M, @0x0022 -0893 2423 lrs $AC0.L, @0x0023 -0894 0a01 lris $AX0.H, #0x01 -0895 0081 0405 lri $AR1, #0x0405 -0897 7a00 dec $ACC0 -0898 b100 tst $ACC0 -0899 0275 ifz -089a 1a3a srr @$AR1, $AX0.H -089b 2e22 srs @0x0022, $AC0.M -089c 2c23 srs @0x0023, $AC0.L -089d 0710 cmpis $AC1.M, #0x10 -089e 0293 08a7 jle 0x08a7 -08a0 05f0 addis $AC1.M, #0xf0 -08a1 2205 lrs $AX0.H, @0x0005 -08a2 8600 tstaxh $AX0.H -08a3 0294 0862 jnz 0x0862 -08a5 029f 0888 jmp 0x0888 -08a7 0275 ifz -08a8 8900 clr $ACC1 -08a9 2f19 srs @0x0019, $AC1.M -08aa 1fc3 mrr $AC0.M, $AR3 -08ab 04f0 addis $AC0.M, #0xf0 -08ac 1c1e mrr $AR0, $AC0.M -08ad 0083 0430 lri $AR3, #0x0430 -08af 0e10 lris $AC0.M, #0x10 -08b0 02bf 0699 call 0x0699 -08b2 2620 lrs $AC0.M, @0x0020 -08b3 2421 lrs $AC0.L, @0x0021 -08b4 00d8 0362 lr $AX0.L, @0x0362 -08b6 7000 addaxl $ACC0, $AX0.L -08b7 2c21 srs @0x0021, $AC0.L -08b8 2e20 srs @0x0020, $AC0.M -08b9 0092 00ff lri $CR, #0x00ff -08bb 02df ret -} - -{ -08bc 8100 clr $ACC0 -08bd 2e1c srs @0x001c, $AC0.M -08be 2e1d srs @0x001d, $AC0.M -08bf 2e3e srs @0x003e, $AC0.M -08c0 2e3f srs @0x003f, $AC0.M -08c1 231c lrs $AX1.H, @0x001c -08c2 211d lrs $AX1.L, @0x001d -08c3 264a lrs $AC0.M, @0x004a -08c4 244b lrs $AC0.L, @0x004b -08c5 5a00 subax $ACC0, $AX1 -08c6 147c lsr $ACC0, #-4 -08c7 2e22 srs @0x0022, $AC0.M -08c8 2c23 srs @0x0023, $AC0.L -08c9 261c lrs $AC0.M, @0x001c -08ca 241d lrs $AC0.L, @0x001d -08cb 147c lsr $ACC0, #-4 -08cc 2240 lrs $AX0.H, @0x0040 -08cd c010 mulc'mv $AC0.M, $AX0.H : $AX0.L, $AC0.L -08ce 9600 mulmv $AX0.L, $AX0.H, $ACC0 -08cf f000 lsl16 $ACC0 -08d0 4e00 addp $ACC0 -08d1 234c lrs $AX1.H, @0x004c -08d2 214d lrs $AX1.L, @0x004d -08d3 4a00 addax $ACC0, $AX1 -08d4 2e20 srs @0x0020, $AC0.M -08d5 2c21 srs @0x0021, $AC0.L -08d6 8100 clr $ACC0 -08d7 2e05 srs @0x0005, $AC0.M -08d8 2e19 srs @0x0019, $AC0.M -08d9 2e04 srs @0x0004, $AC0.M -08da 02df ret -} - -{ -08db 00ff 0360 sr @0x0360, $AC1.M -08dd 0080 ffd3 lri $AR0, #0xffd3 -08df 0084 0000 lri $IX0, #0x0000 -08e1 199e lrrn $AC0.M, @$AR0 -08e2 1ffe mrr $AC1.M, $AC0.M -08e3 1401 lsl $ACC0, #1 -08e4 0240 001e andi $AC0.M, #0x001e -08e6 0200 0300 addi $AC0.M, #0x0300 -08e8 1c3e mrr $AR1, $AC0.M -08e9 157c lsr $ACC1, #-4 -08ea 0340 000f andi $AC1.M, #0x000f -08ec 0a11 lris $AX0.H, #0x11 -08ed 5500 subr $ACC1, $AX0.H -08ee 009a 00f0 lri $AX0.H, #0x00f0 -08f0 009b 000f lri $AX1.H, #0x000f -08f2 0082 0370 lri $AR2, #0x0370 -08f4 1998 lrrn $AX0.L, @$AR0 -08f5 6000 movr $ACC0, $AX0.L -08f6 1107 08fd bloopi #0x07, 0x08fd -{ - 08f8 3400 andr $AC0.M, $AX0.H - 08f9 1408 lsl $ACC0, #8 - 08fa 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 08fb 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 08fc 140c lsl $ACC0, #12 - 08fd 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M -} -08fe 3400 andr $AC0.M, $AX0.H -08ff 1408 lsl $ACC0, #8 -0900 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M -0901 3600 andr $AC0.M, $AX1.H -0902 140c lsl $ACC0, #12 -0903 1b5e srri @$AR2, $AC0.M -0904 8f00 set40 -0905 1f7f mrr $AX1.H, $AC1.M -0906 203e lrs $AX0.L, @0x003e -0907 273f lrs $AC1.M, @0x003f -0908 193a lrri $AX0.H, @$AR1 -0909 1939 lrri $AX1.L, @$AR1 -090a 0080 0370 lri $AR0, #0x0370 -090c 1c80 mrr $IX0, $AR0 -090d a000 mulx $AX0.L, $AX1.L -090e ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 -090f 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M -0910 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 -0911 1485 asl $ACC0, #5 -0912 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M -0913 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M -0914 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 -0915 1585 asl $ACC1, #5 -0916 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M -0917 1106 0920 bloopi #0x06, 0x0920 -{ - 0919 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M - 091a a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 091b 1485 asl $ACC0, #5 - 091c e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 091d 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M - 091e a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 091f 1585 asl $ACC1, #5 - 0920 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M -} -0921 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M -0922 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 -0923 1485 asl $ACC0, #5 -0924 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M -0925 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M -0926 a500 mulxac $AX0.L, $AX1.L, $ACC1 -0927 1585 asl $ACC1, #5 -0928 1b7f srri @$AR3, $AC1.M -0929 2e3e srs @0x003e, $AC0.M -092a 2f3f srs @0x003f, $AC1.M -092b 8e00 set16 -092c 8900 clr $ACC1 -092d 00df 0360 lr $AC1.M, @0x0360 -092f 02df ret -} - -{ -0930 0083 0520 lri $AR3, #0x0520 -0932 00de 041b lr $AC0.M, @0x041b -0934 1050 loopi #0x50 - 0935 1b7e srri @$AR3, $AC0.M -0936 029f 04e7 jmp 0x04e7 -} - -0938 0000 nop -0939 0000 nop -093a 0000 nop -093b 0000 nop -093c 0000 nop -093d 0000 nop -093e 0000 nop -093f 0000 nop +0000 029f 0010 jmp 0x0010 +0002 0000 nop +0003 0000 nop +0004 02ff rti +0005 0000 nop +0006 02ff rti +0007 0000 nop +0008 02ff rti +0009 0000 nop +000a 02ff rti +000b 0000 nop +000c 02ff rti +000d 0000 nop +000e 02ff rti +000f 0000 nop + +// Entry +void 0010_Entry() +{ +0010 1302 sbset #0x02 +0011 1303 sbset #0x03 +0012 1204 sbclr #0x04 +0013 1305 sbset #0x05 +0014 1306 sbset #0x06 +0015 8e00 set16 +0016 8c00 clr15 +0017 8b00 m0 +0018 009e ffff lri $AC0.M, #0xffff +001a 1d1e mrr $WR0, $AC0.M +001b 1d3e mrr $WR1, $AC0.M +001c 1d5e mrr $WR2, $AC0.M +001d 1d7e mrr $WR3, $AC0.M +001e 0092 00ff lri $CR, #0x00ff +0020 8100 clr $ACC0 +0021 009f 1000 lri $AC1.M, #0x1000 +0023 0080 0000 lri $AR0, #0x0000 +0025 005f loop $AC1.M + 0026 1b1e srri @$AR0, $AC0.M // clear dram +0027 26ff lrs $AC0.M, @CMBL +0028 16fc 8888 si @DMBH, #0x8888 +002a 16fd 1111 si @DMBL, #0x1111 // SENDMAIL 0x88881111 +002c 26fc lrs $AC0.M, @DMBH +002d 02a0 8000 andf $AC0.M, #0x8000 +002f 029c 002c jlnz 0x002c +} + +void 0031_MainLoop() +{ +0031 8100 clr $ACC0 +0032 8900 clr $ACC1 +0033 26fe lrs $AC0.M, @CMBH +0034 02c0 8000 andcf $AC0.M, #0x8000 +0036 029c 0031 jlnz 0x0031 // wait for mail +0038 27ff lrs $AC1.M, @CMBL +0039 00ff 0345 sr @0x0345, $AC1.M +003b 1ffe mrr $AC1.M, $AC0.M +003c 0340 00ff andi $AC1.M, #0x00ff +003e 00ff 0344 sr @0x0344, $AC1.M +0040 1479 lsr $ACC0, #-7 +0041 0240 007e andi $AC0.M, #0x007e +0043 0200 0062 addi $AC0.M, #0x0062 +0045 00fe 0343 sr @0x0343, $AC0.M +0047 1c1e mrr $AR0, $AC0.M +0048 170f jmpr $AR0 // jump on CMD? +0049 009e 8000 lri $AC0.M, #0x8000 +004b 00dc 0343 lr $AC0.L, @0x0343 +004d 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // sendmail 0x8000???? +004f 029f 0031 jmp 0x0031 +} + +void 0051_WaitForMailAndStoreIt(DEST $AR0) +{ +0051 26fe lrs $AC0.M, @CMBH +0052 02c0 8000 andcf $AC0.M, #0x8000 +0054 029c 0051 jlnz 0x0051 +0056 24ff lrs $AC0.L, @CMBL +0057 1b1e srri @$AR0, $AC0.M +0058 1b1c srri @$AR0, $AC0.L +0059 02df ret +} + +void 005a_SendMail(AC0.M,AC0.L) +{ +005a 2efc srs @DMBH, $AC0.M +005b 2cfd srs @DMBL, $AC0.L +005c 26fc lrs $AC0.M, @DMBH +005d 02a0 8000 andf $AC0.M, #0x8000 +005f 029c 005c jlnz 0x005c +0061 02df ret +} + +//CMDs +0062 029f 0049 jmp 0x0049 // CMD_0 +0064 029f 02bd jmp 0x02bd // CMD_1 +0066 029f 0470 jmp 0x0470 // CMD_2 +0068 029f 0031 jmp 0x0031 // CMD_3 +006a 029f 00df jmp 0x00df // CMD_4 +006c 029f 00f1 jmp 0x00f1 // CMD_5 +006e 029f 05bb jmp 0x05bb // CMD_6 +0070 029f 056f jmp 0x056f // CMD_7 +0072 029f 05d7 jmp 0x05d7 // CMD_8 +0074 029f 059f jmp 0x059f // CMD_9 +0076 029f 0741 jmp 0x0741 // CMD_A +0078 029f 0618 jmp 0x0618 // CMD_B - jump to IROM area (0x8644) +007a 029f 0203 jmp 0x0203 // CMD_C + +{ +007c 193e lrri $AC0.M, @$AR1 +007d 193c lrri $AC0.L, @$AR1 +007e 2fcd srs @DSPA, $AC1.M +007f 0f00 lris $AC1.M, #0x00 +0080 2fc9 srs @DSCR, $AC1.M // DMEM->CPU +0081 2ece srs @DSMAH, $AC0.M +0082 2ccf srs @DSMAL, $AC0.L +0083 1fe0 mrr $AC1.M, $AR0 +0084 1501 lsl $ACC1, #1 +0085 2fcb srs @DSBL, $AC1.M +0086 02bf 008f call 0x008f +0088 02df ret +} + +{ +0089 193e lrri $AC0.M, @$AR1 +008a 193c lrri $AC0.L, @$AR1 +008b 2fcd srs @DSPA, $AC1.M +008c 0f01 lris $AC1.M, #0x01 +008d 029f 0080 jmp 0x0080 +} + +{ +008f 26c9 lrs $AC0.M, @DSCR +0090 02a0 0004 andf $AC0.M, #0x0004 +0092 029c 008f jlnz 0x008f +0094 02df ret +} + +{ +0095 193e lrri $AC0.M, @$AR1 +0096 193c lrri $AC0.L, @$AR1 +0097 00ff ffcd sr @DSPA, $AC1.M +0099 0f00 lris $AC1.M, #0x00 +009a 00ff ffc9 sr @DSCR, $AC1.M +009c 00fe ffce sr @DSMAH, $AC0.M +009e 00fc ffcf sr @DSMAL, $AC0.L +00a0 1fe0 mrr $AC1.M, $AR0 +00a1 1501 lsl $ACC1, #1 +00a2 00ff ffcb sr @DSBL, $AC1.M +00a4 02df ret +} + +void 00a5_WaitForDMAend() +{ +00a5 00de ffc9 lr $AC0.M, @DSCR +00a7 02a0 0004 andf $AC0.M, #0x0004 +00a9 029c 00a5 jlnz 0x00a5 +00ab 02df ret +} + +void 00ac_AccZeldaTypeRead() +{ +00ac 193e lrri $AC0.M, @$AR1 +00ad 193c lrri $AC0.L, @$AR1 +00ae 0240 7fff andi $AC0.M, #0x7fff +00b0 02bf 00ba call 00ba_AccSetup() +00b2 007a 00b8 bloop $AX0.H, 0x00b8 +00b4 26d3 lrs $AC0.M, @UnkZelda +00b5 1b3e srri @$AR1, $AC0.M +00b6 0000 nop +00b7 0000 nop +00b8 0000 nop +00b9 02df ret +} + +void 00ba_AccSetup() +{ +00ba 1c3f mrr $AR1, $AC1.M +00bb 009f 0005 lri $AC1.M, #0x0005 +00bd 2fd1 srs @SampleFormat, $AC1.M // reads will be u8 +00be 1f5e mrr $AX0.H, $AC0.M +00bf 1f1c mrr $AX0.L, $AC0.L +00c0 2ed4 srs @ACSAH, $AC0.M +00c1 2cd5 srs @ACSAL, $AC0.L +00c2 8900 clr $ACC1 +00c3 1fa0 mrr $AC1.L, $AR0 +00c4 4c00 add $ACC0, $ACC1 +00c5 0200 0030 addi $AC0.M, #0x0030 +00c7 2ed6 srs @ACEAH, $AC0.M +00c8 2cd7 srs @ACEAL, $AC0.L +00c9 1fda mrr $AC0.M, $AX0.H +00ca 1f98 mrr $AC0.L, $AX0.L +00cb 147f lsr $ACC0, #-1 +00cc 2ed8 srs @ACCAH, $AC0.M +00cd 2cd9 srs @ACCAL, $AC0.L +00ce 1f40 mrr $AX0.H, $AR0 +00cf 02df ret +} + +void 00d0_AccZeldaTypeWrite() +{ +00d0 193e lrri $AC0.M, @$AR1 +00d1 193c lrri $AC0.L, @$AR1 +00d2 0260 8000 ori $AC0.M, #0x8000 +00d4 02bf 00ba call 00ba_AccSetup() +00d6 007a 00dd bloop $AX0.H, 0x00dd +{ + 00d8 193e lrri $AC0.M, @$AR1 + 00d9 2ed3 srs @UnkZelda, $AC0.M + 00da 0000 nop + 00db 0000 nop + 00dc 0000 nop + 00dd 0000 nop +} +00de 02df ret +} + +{ +00df 0080 0346 lri $AR0, #0x0346 +00e1 02bf 0051 call 0x0051 +00e3 02bf 0051 call 0x0051 +00e5 0081 0346 lri $AR1, #0x0346 +00e7 00df 0349 lr $AC1.M, @0x0349 +00e9 0340 ffff andi $AC1.M, #0xffff +00eb 00c0 0345 lr $AR0, @0x0345 +00ed 02bf 007c call 0x007c +00ef 029f 0049 jmp 0x0049 +} + +{ +00f1 0080 0346 lri $AR0, #0x0346 +00f3 02bf 0051 call 0x0051 +00f5 02bf 0051 call 0x0051 +00f7 0081 0346 lri $AR1, #0x0346 +00f9 00df 0349 lr $AC1.M, @0x0349 +00fb 0340 ffff andi $AC1.M, #0xffff +00fd 00c0 0345 lr $AR0, @0x0345 +00ff 02bf 0089 call 0x0089 +0101 029f 0049 jmp 0x0049 +} + +{ +0103 0092 00ff lri $CR, #0x00ff +0105 2fd1 srs @SampleFormat, $AC1.M +0106 0340 0003 andi $AC1.M, #0x0003 +0108 1f7f mrr $AX1.H, $AC1.M +0109 1f5e mrr $AX0.H, $AC0.M +010a 1f1c mrr $AX0.L, $AC0.L +010b 0200 0010 addi $AC0.M, #0x0010 +010d 2ed4 srs @ACSAH, $AC0.M +010e 2cd5 srs @ACSAL, $AC0.L +010f 8900 clr $ACC1 +0110 1fa0 mrr $AC1.L, $AR0 +0111 4c00 add $ACC0, $ACC1 +0112 0200 0030 addi $AC0.M, #0x0030 +0114 2ed6 srs @ACEAH, $AC0.M +0115 2cd7 srs @ACEAL, $AC0.L +0116 1fda mrr $AC0.M, $AX0.H +0117 1f98 mrr $AC0.L, $AX0.L +0118 1ffb mrr $AC1.M, $AX1.H +0119 7900 decm $AC1.M +011a 02ca lsrn +011b 2ed8 srs @ACCAH, $AC0.M +011c 2cd9 srs @ACCAL, $AC0.L +011d 02df ret +} + +//DSPLLE errors here!!! readw/writes from 0x3??? +{ +011e 1c23 mrr $AR1, $AR3 +011f 197e lrri $AC0.M, @$AR3 +0120 191b lrri $AX1.H, @$AR0 +0121 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 +0122 1128 0128 bloopi #0x28, 0x0128 +0124 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 +0125 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M +0126 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 +0127 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M +0128 4900 addax $ACC1, $AX0 +0129 02df ret +} + +{ +012a 8f00 set40 +012b 1c03 mrr $AR0, $AR3 +012c 00db 038e lr $AX1.H, @0x038e +012e 009a 0004 lri $AX0.H, #0x0004 +0130 1978 lrri $AX0.L, @$AR3 +0131 a843 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR3 +0132 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 +0133 1128 0138 bloopi #0x28, 0x0138 +0135 38c3 asrnrx'l $ACC0, $AX0.H : $AX0.L, @$AR3 +0136 ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M +0137 38c3 asrnrx'l $ACC0, $AX0.H : $AX0.L, @$AR3 +0138 ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M +0139 8e00 set16 +013a 02df ret +} + +{ +013b 00f9 0361 sr @0x0361, $AX1.L +013d 1fc0 mrr $AC0.M, $AR0 +013e 0200 fffc addi $AC0.M, #0xfffc +0140 1c1e mrr $AR0, $AC0.M +0141 1c5e mrr $AR2, $AC0.M +0142 0083 0424 lri $AR3, #0x0424 +0144 197e lrri $AC0.M, @$AR3 +0145 197f lrri $AC1.M, @$AR3 +0146 80a2 nx'sl : $AC0.M, $AX0.H +0147 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H +0148 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M +0149 1b1f srri @$AR0, $AC1.M +014a 1c02 mrr $AR0, $AR2 +014b 8100 clr $ACC0 +014c 00de 0402 lr $AC0.M, @0x0402 +014e 00fe 0362 sr @0x0362, $AC0.M +0150 1474 lsr $ACC0, #-12 +0151 1f7e mrr $AX1.H, $AC0.M +0152 1f3c mrr $AX1.L, $AC0.L +0153 8900 clr $ACC1 +0154 00dd 0418 lr $AC1.L, @0x0418 +0156 1504 lsl $ACC1, #4 +0157 0604 cmpis $AC0.M, #0x04 +0158 0290 01b0 jge 0x01b0 +015a 1fdd mrr $AC0.M, $AC1.L +015b 0082 0c00 lri $AR2, #0x0c00 +015d 1050 loopi #0x50 +015e 4b2a addax's $ACC1, $AX1 : @$AR2, $AC1.L +015f 1fbe mrr $AC1.L, $AC0.M +0160 00fe 0360 sr @0x0360, $AC0.M +0162 8900 clr $ACC1 +0163 1fbe mrr $AC1.L, $AC0.M +0164 009a fff8 lri $AX0.H, #0xfff8 +0166 009b 00fc lri $AX1.H, #0x00fc +0168 00d8 0361 lr $AX0.L, @0x0361 +016a 0082 0c00 lri $AR2, #0x0c00 +016c 0083 0c00 lri $AR3, #0x0c00 +016e 195e lrri $AC0.M, @$AR2 +016f 3480 lsrnrx $ACC0, $AX0.H +0170 1128 0175 bloopi #0x28, 0x0175 +0172 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 +0173 35b3 lsrnrx's $ACC1, $AX0.H : @$AR3, $AC0.M +0174 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 +0175 34bb lsrnrx's $ACC0, $AX0.H : @$AR3, $AC1.M +0176 8a00 m2 +0177 0082 0c00 lri $AR2, #0x0c00 +0179 00dd 0418 lr $AC1.L, @0x0418 +017b 1504 lsl $ACC1, #4 +017c 1fe0 mrr $AC1.M, $AR0 +017d 8100 clr $ACC0 +017e 00de 0362 lr $AC0.M, @0x0362 +0180 1474 lsr $ACC0, #-12 +0181 1f7e mrr $AX1.H, $AC0.M +0182 1f3c mrr $AX1.L, $AC0.L +0183 8f00 set40 +0184 1943 lrri $AR3, @$AR2 +0185 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 +0186 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0187 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0188 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0189 f200 madd $AX0.L, $AX0.H +018a fe00 movpz $ACC0 +018b 1c1f mrr $AR0, $AC1.M +018c 1943 lrri $AR3, @$AR2 +018d 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 +018e 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +018f 114e 0197 bloopi #0x4e, 0x0197 +0191 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0192 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0193 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M +0194 1c1f mrr $AR0, $AC1.M +0195 1943 lrri $AR3, @$AR2 +0196 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 +0197 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 +0198 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +0199 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 +019a f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M +019b fe00 movpz $ACC0 +019c 1b3e srri @$AR1, $AC0.M +019d 8b00 m0 +019e 8e00 set16 +019f 00fe 041b sr @0x041b, $AC0.M +01a1 1c1f mrr $AR0, $AC1.M +01a2 150c lsl $ACC1, #12 +01a3 0340 0fff andi $AC1.M, #0x0fff +01a5 00ff 0418 sr @0x0418, $AC1.M +01a7 0083 0424 lri $AR3, #0x0424 +01a9 191e lrri $AC0.M, @$AR0 +01aa 191f lrri $AC1.M, @$AR0 +01ab 80a0 nx'ls : $AX0.H, $AC0.M +01ac 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M +01ad 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M +01ae 1b7f srri @$AR3, $AC1.M +01af 02df ret +} + +{ +01b0 1fe0 mrr $AC1.M, $AR0 +01b1 1c1f mrr $AR0, $AC1.M +01b2 1128 01b9 bloopi #0x28, 0x01b9 +01b4 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 +01b5 1b3e srri @$AR1, $AC0.M +01b6 1c1f mrr $AR0, $AC1.M +01b7 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 +01b8 1b3e srri @$AR1, $AC0.M +01b9 1c1f mrr $AR0, $AC1.M +01ba 029f 019f jmp 0x019f +} + +{ +01bc 8a00 m2 +01bd 0088 0007 lri $WR0, #0x0007 +01bf 1150 01cc bloopi #0x50, 0x01cc +{ + 01c1 1c61 mrr $AR3, $AR1 + 01c2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 01c3 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c6 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c7 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01c9 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01ca f200 madd $AX0.L, $AX0.H + 01cb fe00 movpz $ACC0 + 01cc 1b3e srri @$AR1, $AC0.M +} +01cd 0088 ffff lri $WR0, #0xffff +01cf 8b00 m0 +01d0 02df ret +} + +{ +01d1 0088 0003 lri $WR0, #0x0003 +01d3 0085 0000 lri $IX1, #0x0000 +01d5 0087 0000 lri $IX3, #0x0000 +01d7 1fc2 mrr $AC0.M, $AR2 +01d8 195b lrri $AX1.H, @$AR2 +01d9 1959 lrri $AX1.L, @$AR2 +01da 195f lrri $AC1.M, @$AR2 +01db 195a lrri $AX0.H, @$AR2 +01dc 1c5e mrr $AR2, $AC0.M +01dd 1fda mrr $AC0.M, $AX0.H +01de 1c61 mrr $AR3, $AR1 +01df 8a00 m2 +01e0 8f00 set40 +01e1 191a lrri $AX0.H, @$AR0 +01e2 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 +01e3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 +01e4 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 +01e5 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 +01e6 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 +01e7 1127 01f2 bloopi #0x27, 0x01f2 +{ + 01e9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 01ea 197e lrri $AC0.M, @$AR3 + 01eb e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 01ec eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 01ed bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 01ee e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 01ef 197f lrri $AC1.M, @$AR3 + 01f0 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 01f1 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 01f2 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 +} +01f3 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M +01f4 197e lrri $AC0.M, @$AR3 +01f5 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 +01f6 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 +01f7 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 +01f8 1bff srrn @$AR3, $AC1.M +01f9 197f lrri $AC1.M, @$AR3 +01fa 8e00 set16 +01fb 8b00 m0 +01fc 0088 ffff lri $WR0, #0xffff +01fe 1b5b srri @$AR2, $AX1.H +01ff 1b59 srri @$AR2, $AX1.L +0200 1b5f srri @$AR2, $AC1.M +0201 1b5e srri @$AR2, $AC0.M +0202 02df ret +} + +{ +0203 0080 0346 lri $AR0, #0x0346 +0205 02bf 0051 call 0x0051 +0207 02bf 0051 call 0x0051 +0209 0081 0346 lri $AR1, #0x0346 +020b 009f 0580 lri $AC1.M, #0x0580 +020d 0080 0080 lri $AR0, #0x0080 +020f 02bf 007c call 0x007c +0211 0081 0348 lri $AR1, #0x0348 +0213 009f 0c00 lri $AC1.M, #0x0c00 +0215 0080 0080 lri $AR0, #0x0080 +0217 02bf 007c call 0x007c +0219 0080 0c00 lri $AR0, #0x0c00 +021b 0081 0580 lri $AR1, #0x0580 +021d 02bf 01d1 call 0x01d1 +021f 0081 0346 lri $AR1, #0x0346 +0221 009f 0580 lri $AC1.M, #0x0580 +0223 0080 0080 lri $AR0, #0x0080 +0225 02bf 0089 call 0x0089 +0227 0081 0348 lri $AR1, #0x0348 +0229 009f 0c00 lri $AC1.M, #0x0c00 +022b 0080 0080 lri $AR0, #0x0080 +022d 02bf 0089 call 0x0089 +022f 029f 0049 jmp 0x0049 +} + +void 0231_FormatAudioSynths(format AC0.M) +{ +0231 8100 clr $ACC0 +0232 1f5e mrr $AX0.H, $AC0.M +0233 00d8 0402 lr $AX0.L, @0x0402 +0235 00dc 0418 lr $AC0.L, @0x0418 +0237 0080 0520 lri $AR0, #0x0520 +0239 00df 0440 lr $AC1.M, @0x0440 +023b 1501 lsl $ACC1, #1 +023c 0340 007e andi $AC1.M, #0x007e +023e 0300 0246 addi $AC1.M, #0x0246 +0240 1c5f mrr $AR2, $AC1.M +0241 175f callr $AR2 // call 0x0246 +0242 00fc 0418 sr @0x0418, $AC0.L +0244 029f 04e7 jmp 0x04e7 // dummy +0246 029f 0257 jmp 0x0257 // 0x0 - Synth0 +0248 029f 028f jmp 0x028f // 0x1 - Synth1 +024a 029f 0277 jmp 0x0277 // 0x2 - Synth2 +024c 029f 0267 jmp 0x0267 // 0x3 - Synth3 +024e 029f 0292 jmp 0x0292 // 0x4 - Synth4 +0250 029f 0256 jmp 0x0256 // 0x5 - dummy +0252 029f 02b1 jmp 0x02b1 // 0x6 - Synth6 +0254 029f 02ae jmp 0x02ae // 0x7 - Synth7 +0256 02df ret +} + +void 0257_Synth0() +{ +0257 1401 lsl $ACC0, #1 +0258 009b c000 lri $AX1.H, #0xc000 +025a 0099 4000 lri $AX1.L, #0x4000 +025c 1150 0264 bloopi #0x50, 0x0264 +{ + 025e 02c0 0001 andcf $AC0.M, #0x0001 + 0260 027c iflnz + 0261 1b1b srri @$AR0, $AX1.H + 0262 027d iflz + 0263 1b19 srri @$AR0, $AX1.L + 0264 4800 addax $ACC0, $AX0 +} +0265 147f lsr $ACC0, #-1 +0266 02df ret +} + +void 0267_Synth3() +{ +0267 1401 lsl $ACC0, #1 +0268 009b c000 lri $AX1.H, #0xc000 +026a 0099 4000 lri $AX1.L, #0x4000 +026c 1150 0274 bloopi #0x50, 0x0274 +{ + 026e 02c0 0003 andcf $AC0.M, #0x0003 + 0270 027c iflnz + 0271 1b1b srri @$AR0, $AX1.H + 0272 027d iflz + 0273 1b19 srri @$AR0, $AX1.L + 0274 4800 addax $ACC0, $AX0 +} +0275 147f lsr $ACC0, #-1 +0276 02df ret +} + +void 0277_Synth2() +{ +0277 1401 lsl $ACC0, #1 +0278 0081 0ca0 lri $AR1, #0x0ca0 +027a 009b c000 lri $AX1.H, #0xc000 +027c 0099 4000 lri $AX1.L, #0x4000 +027e 8900 clr $ACC1 +027f 0082 0000 lri $AR2, #0x0000 +0281 1150 028c bloopi #0x50, 0x028c +{ + 0283 02c0 0001 andcf $AC0.M, #0x0001 + 0285 027c iflnz + 0286 1b1b srri @$AR0, $AX1.H + 0287 027d iflz + 0288 1b19 srri @$AR0, $AX1.L + 0289 183d lrr $AC1.L, @$AR1 + 028a 4900 addax $ACC1, $AX0 + 028b 1fe2 mrr $AC1.M, $AR2 + 028c 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M +} +028d 147f lsr $ACC0, #-1 +028e 02df ret +} + +void 028f_Synth1() +{ +028f 1050 loopi #0x50 + 0290 4820 addax's $ACC0, $AX0 : @$AR0, $AC0.L +0291 02df ret +} + +void 0292_Synth4() +{ +0292 0082 0140 lri $AR2, #0x0140 +0294 008a 003f lri $WR2, #0x003f +0296 0086 0000 lri $IX2, #0x0000 +0298 1406 lsl $ACC0, #6 +0299 8900 clr $ACC1 +029a 1fb8 mrr $AC1.L, $AX0.L +029b 1506 lsl $ACC1, #6 +029c 009b 003f lri $AX1.H, #0x003f +029e 009a 0000 lri $AX0.H, #0x0000 +02a0 3600 andr $AC0.M, $AX1.H +02a1 1cde mrr $IX2, $AC0.M +02a2 001a addarn $AR2, $IX2 +02a3 3400 andr $AC0.M, $AX0.H +02a4 1150 02aa bloopi #0x50, 0x02aa +{ + 02a6 4c00 add $ACC0, $ACC1 + 02a7 364a andr'l $AC0.M, $AX1.H : $AX1.L, @$AR2 + 02a8 1cde mrr $IX2, $AC0.M + 02a9 340e andr'nr $AC0.M, $AX0.H : $AR2 + 02aa 1b19 srri @$AR0, $AX1.L +} +02ab 1fc2 mrr $AC0.M, $AR2 +02ac 147a lsr $ACC0, #-6 +02ad 02df ret +} + +void 02b1_Synth7() +{ +02ae 1050 loopi #0x50 + 02af 1b18 srri @$AR0, $AX0.L +02b0 02df ret +} + +void 02b1_Synth6() +{ +02b1 0083 0000 lri $AR3, #0x0000 +02b3 140f lsl $ACC0, #15 +02b4 4853 addax'l $ACC0, $AX0 : $AX0.H, @$AR3 +02b5 1114 02ba bloopi #0x14, 0x02ba +{ + 02b7 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H + 02b8 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H + 02b9 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H + 02ba 48a2 addax'sl $ACC0, $AX0 : $AC0.M, $AX0.H +} +02bb 146f lsr $ACC0, #-17 +02bc 02df ret +} + +{ +02bd 0080 0380 lri $AR0, #0x0380 +02bf 02bf 0051 call 0x0051 +02c1 02bf 0051 call 0x0051 +02c3 02bf 0051 call 0x0051 +02c5 02bf 0051 call 0x0051 +02c7 0081 0382 lri $AR1, #0x0382 +02c9 009f 0000 lri $AC1.M, #0x0000 +02cb 0080 0200 lri $AR0, #0x0200 +02cd 02bf 007c call 0x007c +02cf 0081 0384 lri $AR1, #0x0384 +02d1 009f 0300 lri $AC1.M, #0x0300 +02d3 0080 0020 lri $AR0, #0x0020 +02d5 02bf 007c call 0x007c +02d7 02bf 0351 call 0x0351 +02d9 00de 0345 lr $AC0.M, @0x0345 +02db 00fe 0342 sr @0x0342, $AC0.M +02dd 029f 0049 jmp 0x0049 +} + +{ +02df 00de 0344 lr $AC0.M, @0x0344 +02e1 1404 lsl $ACC0, #4 +02e2 0200 03a8 addi $AC0.M, #0x03a8 +02e4 1c1e mrr $AR0, $AC0.M +02e5 02bf 0051 call 0x0051 +02e7 02bf 0051 call 0x0051 +02e9 02bf 0051 call 0x0051 +02eb 00de 0345 lr $AC0.M, @0x0345 +02ed 1b1e srri @$AR0, $AC0.M +02ee 00de 0344 lr $AC0.M, @0x0344 +02f0 0200 03a4 addi $AC0.M, #0x03a4 +02f2 1c1e mrr $AR0, $AC0.M +02f3 8100 clr $ACC0 +02f4 1b1e srri @$AR0, $AC0.M +02f5 02df ret +} + +{ +02f6 00de 0344 lr $AC0.M, @0x0344 +02f8 1404 lsl $ACC0, #4 +02f9 0200 03b0 addi $AC0.M, #0x03b0 +02fb 1c1e mrr $AR0, $AC0.M +02fc 02bf 0051 call 0x0051 +02fe 02bf 0051 call 0x0051 +0300 02bf 0051 call 0x0051 +0302 02bf 0051 call 0x0051 +0304 02df ret +} + +{ +0305 0081 034c lri $AR1, #0x034c +0307 009f 0400 lri $AC1.M, #0x0400 +0309 0080 0080 lri $AR0, #0x0080 +030b 02bf 007c call 0x007c +030d 02df ret +} + +{ +030e 0081 034c lri $AR1, #0x034c +0310 009f 0a00 lri $AC1.M, #0x0a00 +0312 0080 0004 lri $AR0, #0x0004 +0314 02bf 00a5 call 00a5_WaitForDMAend() +0316 02bf 007c call 0x007c +0318 0081 034c lri $AR1, #0x034c +031a 009f 0400 lri $AC1.M, #0x0400 +031c 0080 0080 lri $AR0, #0x0080 +031e 02bf 0095 call 0x0095 +0320 02df ret +} + +{ +0321 0081 034c lri $AR1, #0x034c +0323 009f 0400 lri $AC1.M, #0x0400 +0325 0080 0040 lri $AR0, #0x0040 +0327 0081 034c lri $AR1, #0x034c +0329 193e lrri $AC0.M, @$AR1 +032a 193c lrri $AC0.L, @$AR1 +032b 0098 0000 lri $AX0.L, #0x0000 +032d 7000 addaxl $ACC0, $AX0.L +032e 02bf 008b call 0x008b +0330 02df ret +} + +{ +0331 191e lrri $AC0.M, @$AR0 +0332 191a lrri $AX0.H, @$AR0 +0333 005f loop $AC1.M +0334 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M +0335 1b7e srri @$AR3, $AC0.M +0336 1b7a srri @$AR3, $AX0.H +0337 02df ret +} + +{ +0338 191e lrri $AC0.M, @$AR0 +0339 191a lrri $AX0.H, @$AR0 +033a 007f 033f bloop $AC1.M, 0x033f +{ + 033c 32b2 not's $AC0.M : @$AR2, $AC0.M + 033d 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 033e 33ba not's $AC1.M : @$AR2, $AC1.M + 033f 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M +} +0340 0000 nop +0341 02df ret +} + +{ +0342 8a00 m2 +0343 157f lsr $ACC1, #-1 +0344 1c20 mrr $AR1, $AR0 +0345 1c03 mrr $AR0, $AR3 +0346 193a lrri $AX0.H, @$AR1 +0347 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 +0348 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 +0349 007f 034e bloop $AC1.M, 0x034e +{ + 034b 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 034c 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 034d 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 034e 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H +} +034f 8b00 m0 +0350 02df ret +} + +{ +0351 0083 ffa0 lri $AR3, #0xffa0 +0353 0080 0300 lri $AR0, #0x0300 +0355 009f 000e lri $AC1.M, #0x000e +0357 1108 035c bloopi #0x08, 0x035c +{ + 0359 191e lrri $AC0.M, @$AR0 + 035a 1b7e srri @$AR3, $AC0.M + 035b 191e lrri $AC0.M, @$AR0 + 035c 1b7e srri @$AR3, $AC0.M +} +035d 02df ret +} + +{ +035e 0080 0f40 lri $AR0, #0x0f40 +0360 0082 0d00 lri $AR2, #0x0d00 +0362 0083 0d60 lri $AR3, #0x0d60 +0364 009f 0028 lri $AC1.M, #0x0028 +0366 02bf 0338 call 0x0338 +0368 8900 clr $ACC1 +0369 009e 0050 lri $AC0.M, #0x0050 +036b 0080 0ca0 lri $AR0, #0x0ca0 +036d 005e loop $AC0.M + 036e 1b1f srri @$AR0, $AC1.M +036f 0080 0f40 lri $AR0, #0x0f40 +0371 005e loop $AC0.M + 0372 1b1f srri @$AR0, $AC1.M +0373 0080 0fa0 lri $AR0, #0x0fa0 +0375 005e loop $AC0.M + 0376 1b1f srri @$AR0, $AC1.M +0377 02df ret +} + +{ +0378 0080 0dc0 lri $AR0, #0x0dc0 +037a 009e 0180 lri $AC0.M, #0x0180 +037c 8900 clr $ACC1 +037d 005e loop $AC0.M + 037e 1b1f srri @$AR0, $AC1.M +037f 02df ret +} + +{ +0380 00c0 03a0 lr $AR0, @0x03a0 +0382 191a lrri $AX0.H, @$AR0 +0383 00df 03a1 lr $AC1.M, @0x03a1 +0385 009b 00a0 lri $AX1.H, #0x00a0 +0387 0081 0393 lri $AR1, #0x0393 +0389 18bc lrrd $AC0.L, @$AR1 +038a b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 +038b bc00 mulxac $AX0.H, $AX1.H, $ACC0 +038c 0080 0050 lri $AR0, #0x0050 +038e 0508 addis $AC1.M, #0x08 +038f 02bf 007e call 0x007e +0391 00de 0390 lr $AC0.M, @0x0390 +0393 02a0 0001 andf $AC0.M, #0x0001 +0395 029d 039f jlz 0x039f +0397 0080 0398 lri $AR0, #0x0398 +0399 009e 0008 lri $AC0.M, #0x0008 +039b 00c1 03a1 lr $AR1, @0x03a1 +039d 02bf 01bc call 0x01bc +039f 009f 0050 lri $AC1.M, #0x0050 +03a1 00c0 03a1 lr $AR0, @0x03a1 +03a3 8100 clr $ACC0 +03a4 00de 0394 lr $AC0.M, @0x0394 +03a6 b100 tst $ACC0 +03a7 0295 03ae jz 0x03ae +03a9 1c7e mrr $AR3, $AC0.M +03aa 00d8 0395 lr $AX0.L, @0x0395 +03ac 02bf 0342 call 0x0342 +03ae 009f 0050 lri $AC1.M, #0x0050 +03b0 00c0 03a1 lr $AR0, @0x03a1 +03b2 8100 clr $ACC0 +03b3 00de 0396 lr $AC0.M, @0x0396 +03b5 b100 tst $ACC0 +03b6 0295 03bd jz 0x03bd +03b8 1c7e mrr $AR3, $AC0.M +03b9 00d8 0397 lr $AX0.L, @0x0397 +03bb 02bf 0342 call 0x0342 +03bd 00de 0390 lr $AC0.M, @0x0390 +03bf 02a0 0002 andf $AC0.M, #0x0002 +03c1 02dd retlz +03c2 0080 0398 lri $AR0, #0x0398 +03c4 009e 0008 lri $AC0.M, #0x0008 +03c6 00c1 03a1 lr $AR1, @0x03a1 +03c8 02bf 01bc call 0x01bc +03ca 02df ret +} + +{ +03cb 009f 0dc0 lri $AC1.M, #0x0dc0 +03cd 00ff 03a1 sr @0x03a1, $AC1.M +03cf 009f 03a8 lri $AC1.M, #0x03a8 +03d1 00ff 03a2 sr @0x03a2, $AC1.M +03d3 009f 03a4 lri $AC1.M, #0x03a4 +03d5 00ff 03a0 sr @0x03a0, $AC1.M +03d7 1104 0400 bloopi #0x04, 0x0400 +{ + 03d9 00c0 03a2 lr $AR0, @0x03a2 + 03db 0083 0390 lri $AR3, #0x0390 + 03dd 009f 000e lri $AC1.M, #0x000e + 03df 02bf 0331 call 0x0331 + 03e1 00da 0390 lr $AX0.H, @0x0390 + 03e3 8600 tstaxh $AX0.H + 03e4 0295 03f1 jz 0x03f1 + 03e6 00df 03a1 lr $AC1.M, @0x03a1 + 03e8 1c7f mrr $AR3, $AC1.M + 03e9 0550 addis $AC1.M, #0x50 + 03ea 1c1f mrr $AR0, $AC1.M + 03eb 009f 0006 lri $AC1.M, #0x0006 + 03ed 02bf 0331 call 0x0331 + 03ef 02bf 0380 call 0x0380 + 03f1 00de 03a2 lr $AC0.M, @0x03a2 + 03f3 0410 addis $AC0.M, #0x10 + 03f4 00fe 03a2 sr @0x03a2, $AC0.M + 03f6 00de 03a1 lr $AC0.M, @0x03a1 + 03f8 0460 addis $AC0.M, #0x60 + 03f9 00fe 03a1 sr @0x03a1, $AC0.M + 03fb 00de 03a0 lr $AC0.M, @0x03a0 + 03fd 7400 incm $AC0.M + 03fe 00fe 03a0 sr @0x03a0, $AC0.M + 0400 0000 nop +} +0401 02df ret +} + +{ +0402 00c0 03a0 lr $AR0, @0x03a0 +0404 181a lrr $AX0.H, @$AR0 +0405 8100 clr $ACC0 +0406 181e lrr $AC0.M, @$AR0 +0407 00db 0391 lr $AX1.H, @0x0391 +0409 7400 incm $AC0.M +040a d100 cmpar $ACC1, $AX0.H +040b 0270 ifge +040c 8100 clr $ACC0 +040d 1b1e srri @$AR0, $AC0.M +040e 00df 03a1 lr $AC1.M, @0x03a1 +0410 009b 00a0 lri $AX1.H, #0x00a0 +0412 0081 0393 lri $AR1, #0x0393 +0414 18bc lrrd $AC0.L, @$AR1 +0415 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 +0416 bc00 mulxac $AX0.H, $AX1.H, $ACC0 +0417 0080 0050 lri $AR0, #0x0050 +0419 02bf 008b call 0x008b +041b 02df ret +} + +{ +041c 009f 0dc0 lri $AC1.M, #0x0dc0 +041e 00ff 03a1 sr @0x03a1, $AC1.M +0420 009f 03a8 lri $AC1.M, #0x03a8 +0422 00ff 03a2 sr @0x03a2, $AC1.M +0424 009f 03a4 lri $AC1.M, #0x03a4 +0426 00ff 03a0 sr @0x03a0, $AC1.M +0428 1104 0448 bloopi #0x04, 0x0448 +{ + 042a 00c0 03a2 lr $AR0, @0x03a2 + 042c 0083 0390 lri $AR3, #0x0390 + 042e 009f 000e lri $AC1.M, #0x000e + 0430 02bf 0331 call 0x0331 + 0432 00da 0390 lr $AX0.H, @0x0390 + 0434 8600 tstaxh $AX0.H + 0435 0295 0439 jz 0x0439 + 0437 02bf 0402 call 0x0402 + 0439 00de 03a2 lr $AC0.M, @0x03a2 + 043b 0410 addis $AC0.M, #0x10 + 043c 00fe 03a2 sr @0x03a2, $AC0.M + 043e 00de 03a1 lr $AC0.M, @0x03a1 + 0440 0460 addis $AC0.M, #0x60 + 0441 00fe 03a1 sr @0x03a1, $AC0.M + 0443 00de 03a0 lr $AC0.M, @0x03a0 + 0445 7400 incm $AC0.M + 0446 00fe 03a0 sr @0x03a0, $AC0.M + 0448 0000 nop +} +0449 02df ret +} + +{ +044a 0081 0386 lri $AR1, #0x0386 +044c 009f 03a8 lri $AC1.M, #0x03a8 +044e 0080 0040 lri $AR0, #0x0040 +0450 02bf 007c call 0x007c +0452 02df ret +} + +{ +0453 191e lrri $AC0.M, @$AR0 +0454 189c lrrd $AC0.L, @$AR0 +0455 4800 addax $ACC0, $AX0 +0456 1b1e srri @$AR0, $AC0.M +0457 1b1c srri @$AR0, $AC0.L +0458 02df ret +0459 8100 clr $ACC0 +045a 26fe lrs $AC0.M, @CMBH +045b 02c0 8000 andcf $AC0.M, #0x8000 +045d 029c 045a jlnz 0x045a +045f 26ff lrs $AC0.M, @CMBL +0460 02df ret +} + +{ +0461 0080 0388 lri $AR0, #0x0388 +0463 0081 0051 lri $AR1, #0x0051 +0465 173f callr $AR1 // call 0x0051 +0466 00de 0344 lr $AC0.M, @0x0344 +0468 00fe 0341 sr @0x0341, $AC0.M +046a 00de 0345 lr $AC0.M, @0x0345 +046c 00fe 038e sr @0x038e, $AC0.M +046e 173f callr $AR1 // call 0x0051 +046f 02df ret +} + +{ +0470 02bf 0461 call 0x0461 +0472 009e 8000 lri $AC0.M, #0x8000 +0474 00dc 0341 lr $AC0.L, @0x0341 +0476 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // 0x8000???? +0478 8100 clr $ACC0 +0479 00fe 0355 sr @0x0355, $AC0.M +047b 02bf 044a call 0x044a +047d 00de 0341 lr $AC0.M, @0x0341 +047f 007e 056c bloop $AC0.M, 0x056c +{ + 0481 02bf 035e call 0x035e + 0483 02bf 03cb call 0x03cb + 0485 02bf 0459 call 0x0459 + 0487 8100 clr $ACC0 + 0488 00fe 0354 sr @0x0354, $AC0.M + 048a 00de 0342 lr $AC0.M, @0x0342 + 048c 007e 0538 bloop $AC0.M, 0x0538 + { + 048e 00d8 0354 lr $AX0.L, @0x0354 + 0490 009a 0100 lri $AX0.H, #0x0100 + 0492 8100 clr $ACC0 + 0493 00de 0380 lr $AC0.M, @0x0380 + 0495 00dc 0381 lr $AC0.L, @0x0381 + 0497 9000 mul $AX0.L, $AX0.H + 0498 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0499 00fe 034c sr @0x034c, $AC0.M + 049b 00fc 034d sr @0x034d, $AC0.L + 049d 02bf 0305 call 0x0305 + 049f 00da 0400 lr $AX0.H, @0x0400 + 04a1 8600 tstaxh $AX0.H + 04a2 0295 0533 jz 0x0533 + 04a4 00da 0401 lr $AX0.H, @0x0401 + 04a6 8600 tstaxh $AX0.H + 04a7 0294 0533 jnz 0x0533 + 04a9 00da 0406 lr $AX0.H, @0x0406 + 04ab 8600 tstaxh $AX0.H + 04ac 0294 0930 jnz 0x0930 + 04ae 8100 clr $ACC0 + 04af 00de 0440 lr $AC0.M, @0x0440 + 04b1 0607 cmpis $AC0.M, #0x07 // format 0x7 or less (Synths) + 04b2 0293 0231 jle 0x0231 + 04b4 0620 cmpis $AC0.M, #0x20 // format 0x20 + 04b5 0295 079e jz 0x079e + 04b7 0621 cmpis $AC0.M, #0x21 // format 0x21 + 04b8 0295 07a7 jz 0x07a7 + 04ba 00d8 0402 lr $AX0.L, @0x0402 + 04bc 8100 clr $ACC0 + 04bd 8900 clr $ACC1 + 04be 00dc 0418 lr $AC0.L, @0x0418 + 04c0 8d00 set15 + 04c1 0099 0050 lri $AX1.L, #0x0050 + 04c3 a000 mulx $AX0.L, $AX1.L + 04c4 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 04c5 1404 lsl $ACC0, #4 + 04c6 8c00 clr15 + 04c7 1ffe mrr $AC1.M, $AC0.M + 04c8 0083 0580 lri $AR3, #0x0580 + 04ca 00da 0441 lr $AX0.H, @0x0441 + 04cc 8600 tstaxh $AX0.H + 04cd 0295 04dd jz 0x04dd + 04cf 00da 0449 lr $AX0.H, @0x0449 + 04d1 8100 clr $ACC0 + 04d2 00de 044b lr $AC0.M, @0x044b + 04d4 3800 orr $AC0.M, $AX0.H + 04d5 0240 000f andi $AC0.M, #0x000f + 04d7 0295 04dd jz 0x04dd + 04d9 02bf 06a6 call 0x06a6 + 04db 029f 04df jmp 0x04df + 04dd 02bf 0837 call 0x0837 + //RAW21-jmp + 04df 0080 0580 lri $AR0, #0x0580 + 04e1 0081 0520 lri $AR1, #0x0520 + 04e3 0099 0000 lri $AX1.L, #0x0000 + 04e5 02bf 013b call 0x013b + //RAW20-jmp + 04e7 0080 0450 lri $AR0, #0x0450 + 04e9 0081 0520 lri $AR1, #0x0520 + 04eb 0082 0428 lri $AR2, #0x0428 + 04ed 0083 0453 lri $AR3, #0x0453 + 04ef 18fa lrrd $AX0.H, @$AR3 + 04f0 8600 tstaxh $AX0.H + 04f1 0294 0501 jnz 0x0501 + 04f3 18fa lrrd $AX0.H, @$AR3 + 04f4 8600 tstaxh $AX0.H + 04f5 0294 0501 jnz 0x0501 + 04f7 18fa lrrd $AX0.H, @$AR3 + 04f8 8600 tstaxh $AX0.H + 04f9 0294 0501 jnz 0x0501 + 04fb 8100 clr $ACC0 + 04fc 18fe lrrd $AC0.M, @$AR3 + 04fd 0280 7fff cmpi $AC0.M, #0x7fff + 04ff 0295 0505 jz 0x0505 + 0501 02bf 01d1 call 0x01d1 + 0503 029f 0505 jmp 0x0505 + 0505 8100 clr $ACC0 + 0506 1c9e mrr $IX0, $AC0.M + 0507 1cde mrr $IX2, $AC0.M + 0508 7400 incm $AC0.M + 0509 1cfe mrr $IX3, $AC0.M + 050a 8f00 set40 + 050b 0086 0002 lri $IX2, #0x0002 + 050d 0082 0408 lri $AR2, #0x0408 + 050f 1104 052f bloopi #0x04, 0x052f + { + 0511 8100 clr $ACC0 + 0512 195e lrri $AC0.M, @$AR2 + 0513 1200 sbclr #0x00 + 0514 b100 tst $ACC0 + 0515 0275 ifz + 0516 1300 sbset #0x00 + 0517 1c7e mrr $AR3, $AC0.M + 0518 195e lrri $AC0.M, @$AR2 + 0519 14fa asr $ACC0, #-6 + 051a 1f5e mrr $AX0.H, $AC0.M + 051b 1f1c mrr $AX0.L, $AC0.L + 051c 185f lrr $AC1.M, @$AR2 + 051d 0080 0520 lri $AR0, #0x0520 + 051f 029d 0523 jlz 0x0523 + 0521 02bf 011e call 0x011e + 0523 1b5f srri @$AR2, $AC1.M + 0524 8100 clr $ACC0 + 0525 185e lrr $AC0.M, @$AR2 + 0526 000e xar $AR2 + //; *** UNKNOWN OPCODE *** + // 0xc/0xd/0xe/0xf is one opcode where last 2 bits define target $AR? reg + // (new value is based on orig $AR? and %WR? reg value = unknown) + 0527 b100 tst $ACC0 + 0528 0274 ifnz + 0529 7800 decm $AC0.M + 052a b100 tst $ACC0 + 052b 8900 clr $ACC1 + 052c 0275 ifz + 052d 1a5f srr @$AR2, $AC1.M + 052e 001a addarn $AR2, $IX2 + 052f 1b5e srri @$AR2, $AC0.M + } + 0530 8e00 set16 + 0531 02bf 0321 call 0x0321 + 0533 00de 0354 lr $AC0.M, @0x0354 + 0535 7400 incm $AC0.M + 0536 00fe 0354 sr @0x0354, $AC0.M + 0538 0000 nop + } + 0539 16fb 0001 si @DIRQ, #0x0001 + 053b 0083 0d00 lri $AR3, #0x0d00 + 053d 02bf 012a call 0x012a + 053f 0081 0388 lri $AR1, #0x0388 + 0541 009f 0d00 lri $AC1.M, #0x0d00 + 0543 0080 0050 lri $AR0, #0x0050 + 0545 02bf 0089 call 0x0089 + 0547 0080 0fa0 lri $AR0, #0x0fa0 + 0549 0083 0d60 lri $AR3, #0x0d60 + 054b 009f 0050 lri $AC1.M, #0x0050 + 054d 0098 8000 lri $AX0.L, #0x8000 + 054f 02bf 0342 call 0x0342 + 0551 0083 0d60 lri $AR3, #0x0d60 + 0553 02bf 012a call 0x012a + 0555 0081 038a lri $AR1, #0x038a + 0557 009f 0d60 lri $AC1.M, #0x0d60 + 0559 0080 0050 lri $AR0, #0x0050 + 055b 02bf 0089 call 0x0089 + 055d 009a 0000 lri $AX0.H, #0x0000 + 055f 0098 00a0 lri $AX0.L, #0x00a0 + 0561 0080 0388 lri $AR0, #0x0388 + 0563 02bf 0453 call 0x0453 + 0565 0080 038a lri $AR0, #0x038a + 0567 02bf 0453 call 0x0453 + 0569 02bf 041c call 0x041c + 056b 0000 nop + 056c 0000 nop +} +056d 029f 0031 jmp 0x0031 +} + +{ +056f 0080 0346 lri $AR0, #0x0346 +0571 02bf 0051 call 0x0051 +0573 02bf 0051 call 0x0051 +0575 0081 0346 lri $AR1, #0x0346 +0577 193e lrri $AC0.M, @$AR1 +0578 193c lrri $AC0.L, @$AR1 +0579 009f 0400 lri $AC1.M, #0x0400 +057b 00c0 0345 lr $AR0, @0x0345 +057d 02bf 007e call 0x007e +057f 0081 0348 lri $AR1, #0x0348 +0581 193e lrri $AC0.M, @$AR1 +0582 193c lrri $AC0.L, @$AR1 +0583 009f 0800 lri $AC1.M, #0x0800 +0585 00c0 0345 lr $AR0, @0x0345 +0587 02bf 007e call 0x007e +0589 0081 0346 lri $AR1, #0x0346 +058b 193e lrri $AC0.M, @$AR1 +058c 193c lrri $AC0.L, @$AR1 +058d 009f 0800 lri $AC1.M, #0x0800 +058f 00c0 0345 lr $AR0, @0x0345 +0591 02bf 008b call 0x008b +0593 0081 0348 lri $AR1, #0x0348 +0595 193e lrri $AC0.M, @$AR1 +0596 193c lrri $AC0.L, @$AR1 +0597 009f 0400 lri $AC1.M, #0x0400 +0599 00c0 0345 lr $AR0, @0x0345 +059b 02bf 008b call 0x008b +059d 029f 0049 jmp 0x0049 +} + +{ +059f 0080 0346 lri $AR0, #0x0346 +05a1 02bf 0051 call 0x0051 +05a3 02bf 0051 call 0x0051 +05a5 0081 0346 lri $AR1, #0x0346 +05a7 193e lrri $AC0.M, @$AR1 +05a8 193c lrri $AC0.L, @$AR1 +05a9 009f 0400 lri $AC1.M, #0x0400 +05ab 00c0 0345 lr $AR0, @0x0345 +05ad 02bf 007e call 0x007e +05af 0081 0348 lri $AR1, #0x0348 +05b1 193e lrri $AC0.M, @$AR1 +05b2 193c lrri $AC0.L, @$AR1 +05b3 009f 0400 lri $AC1.M, #0x0400 +05b5 00c0 0345 lr $AR0, @0x0345 +05b7 02bf 008b call 0x008b +05b9 029f 0049 jmp 0x0049 +} + +{ +05bb 0080 0346 lri $AR0, #0x0346 +05bd 02bf 0051 call 0x0051 +05bf 02bf 0051 call 0x0051 +05c1 0081 0346 lri $AR1, #0x0346 +05c3 193e lrri $AC0.M, @$AR1 +05c4 193c lrri $AC0.L, @$AR1 +05c5 009f 0400 lri $AC1.M, #0x0400 +05c7 00c0 0345 lr $AR0, @0x0345 +05c9 02bf 00ae call 0x00ae +05cb 0081 0348 lri $AR1, #0x0348 +05cd 193e lrri $AC0.M, @$AR1 +05ce 193c lrri $AC0.L, @$AR1 +05cf 009f 0400 lri $AC1.M, #0x0400 +05d1 00c0 0345 lr $AR0, @0x0345 +05d3 02bf 008b call 0x008b +05d5 029f 0049 jmp 0x0049 +} + +{ +05d7 0080 0346 lri $AR0, #0x0346 +05d9 02bf 0051 call 0x0051 +05db 02bf 0051 call 0x0051 +05dd 0081 0346 lri $AR1, #0x0346 +05df 193e lrri $AC0.M, @$AR1 +05e0 193c lrri $AC0.L, @$AR1 +05e1 009f 0400 lri $AC1.M, #0x0400 +05e3 00c0 0344 lr $AR0, @0x0344 +05e5 02bf 007e call 0x007e +05e7 0081 0348 lri $AR1, #0x0348 +05e9 193e lrri $AC0.M, @$AR1 +05ea 193c lrri $AC0.L, @$AR1 +05eb 009f 0800 lri $AC1.M, #0x0800 +05ed 00c0 0344 lr $AR0, @0x0344 +05ef 02bf 007e call 0x007e +05f1 0080 0400 lri $AR0, #0x0400 +05f3 0083 0800 lri $AR3, #0x0800 +05f5 0084 0000 lri $IX0, #0x0000 +05f7 00da 0345 lr $AX0.H, @0x0345 +05f9 00df 0344 lr $AC1.M, @0x0344 +05fb 8f00 set40 +05fc 197b lrri $AX1.H, @$AR3 +05fd b800 mulx $AX0.H, $AX1.H +05fe 197b lrri $AX1.H, @$AR3 +05ff 007f 0604 bloop $AC1.M, 0x0604 +0601 199e lrrn $AC0.M, @$AR0 +0602 bc00 mulxac $AX0.H, $AX1.H, $ACC0 +0603 80b2 nx'sl : $AC0.M, $AX1.H +0604 0000 nop +0605 8e00 set16 +0606 0081 0346 lri $AR1, #0x0346 +0608 193e lrri $AC0.M, @$AR1 +0609 193c lrri $AC0.L, @$AR1 +060a 009f 0400 lri $AC1.M, #0x0400 +060c 00c0 0344 lr $AR0, @0x0344 +060e 02bf 008b call 0x008b +0610 009e 8200 lri $AC0.M, #0x8200 +0612 00dc 0344 lr $AC0.L, @0x0344 +0614 02bf 005a call 005a_SendMail(AC0.M,AC0.L) // 0x8200???? +0616 029f 0031 jmp 0x0031 +} + +{ +0618 0080 0346 lri $AR0, #0x0346 +061a 02bf 0051 call 0x0051 +061c 0081 0346 lri $AR1, #0x0346 +061e 009f 0400 lri $AC1.M, #0x0400 +0620 00c0 0345 lr $AR0, @0x0345 +0622 02bf 007c call 0x007c +0624 02bf 8644 call 0x8644 // iROM!!!! +0626 029f 0049 jmp 0x0049 +} + +{ +0628 009e 0430 lri $AC0.M, #0x0430 +062a 2219 lrs $AX0.H, @0x0019 +062b 4400 addr $ACC0, $AX0.H +062c 1c1e mrr $AR0, $AC0.M +062d 1fda mrr $AC0.M, $AX0.H +062e 3280 not $AC0.M +062f 7400 incm $AC0.M +0630 221a lrs $AX0.H, @0x001a +0631 4400 addr $ACC0, $AX0.H +0632 0090 0000 lri $AC0.H, #0x0000 +0634 029f 0645 jmp 0x0645 +} + +{ +0636 009e 0430 lri $AC0.M, #0x0430 +0638 2219 lrs $AX0.H, @0x0019 +0639 4400 addr $ACC0, $AX0.H +063a 1c1e mrr $AR0, $AC0.M +063b 1fda mrr $AC0.M, $AX0.H +063c 3280 not $AC0.M +063d 7400 incm $AC0.M +063e 221a lrs $AX0.H, @0x001a +063f 4400 addr $ACC0, $AX0.H +0640 0090 0000 lri $AC0.H, #0x0000 +0642 8200 cmp +0643 0270 ifge +0644 1fdf mrr $AC0.M, $AC1.M +0645 1f3e mrr $AX1.L, $AC0.M +0646 02bf 0699 call 0x0699 +0648 261c lrs $AC0.M, @0x001c +0649 241d lrs $AC0.L, @0x001d +064a 7200 addaxl $ACC0, $AX1.L +064b 5300 subr $ACC1, $AX1.L +064c 2e1c srs @0x001c, $AC0.M +064d 2c1d srs @0x001d, $AC0.L +064e 02df ret +} + +{ +064f 8100 clr $ACC0 +0650 221c lrs $AX0.H, @0x001c +0651 201d lrs $AX0.L, @0x001d +0652 4800 addax $ACC0, $AX0 +0653 147c lsr $ACC0, #-4 +0654 2e1e srs @0x001e, $AC0.M +0655 2c1f srs @0x001f, $AC0.L +0656 2340 lrs $AX1.H, @0x0040 +0657 c814 mulc'mv $AC0.M, $AX1.H : $AX1.L, $AC0.L +0658 9e00 mulmv $AX1.L, $AX1.H, $ACC0 +0659 f000 lsl16 $ACC0 +065a 4e00 addp $ACC0 +065b 234c lrs $AX1.H, @0x004c +065c 214d lrs $AX1.L, @0x004d +065d 4a00 addax $ACC0, $AX1 +065e 2e20 srs @0x0020, $AC0.M +065f 2c21 srs @0x0021, $AC0.L +0660 1fd8 mrr $AC0.M, $AX0.L +0661 0240 000f andi $AC0.M, #0x000f +0663 2e19 srs @0x0019, $AC0.M +0664 264a lrs $AC0.M, @0x004a +0665 244b lrs $AC0.L, @0x004b +0666 5800 subax $ACC0, $AX0 +0667 2e22 srs @0x0022, $AC0.M +0668 2c23 srs @0x0023, $AC0.L +0669 02df ret +} + +{ +066a 221e lrs $AX0.H, @0x001e +066b 201f lrs $AX0.L, @0x001f +066c 8100 clr $ACC0 +066d 264a lrs $AC0.M, @0x004a +066e 244b lrs $AC0.L, @0x004b +066f 147c lsr $ACC0, #-4 +0670 5800 subax $ACC0, $AX0 +0671 0295 067a jz 0x067a +0673 02bf 06ec call 0x06ec +0675 0e10 lris $AC0.M, #0x10 +0676 2e1a srs @0x001a, $AC0.M +0677 8100 clr $ACC0 +0678 2e19 srs @0x0019, $AC0.M +0679 02df ret +} + +{ +067a 224a lrs $AX0.H, @0x004a +067b 204b lrs $AX0.L, @0x004b +067c 8100 clr $ACC0 +067d 261c lrs $AC0.M, @0x001c +067e 241d lrs $AC0.L, @0x001d +067f 5800 subax $ACC0, $AX0 +0680 0290 0687 jge 0x0687 +0682 02bf 06ec call 0x06ec +0684 2623 lrs $AC0.M, @0x0023 +0685 029f 0676 jmp 0x0676 +} + +{ +0687 2648 lrs $AC0.M, @0x0048 +0688 2449 lrs $AC0.L, @0x0049 +0689 2e1c srs @0x001c, $AC0.M +068a 2c1d srs @0x001d, $AC0.L +068b 0e10 lris $AC0.M, #0x10 +068c 2e1a srs @0x001a, $AC0.M +068d 02bf 064f call 0x064f +068f 2642 lrs $AC0.M, @0x0042 +0690 2e3f srs @0x003f, $AC0.M +0691 2643 lrs $AC0.M, @0x0043 +0692 2e3e srs @0x003e, $AC0.M +0693 8100 clr $ACC0 +0694 00fe 0362 sr @0x0362, $AC0.M +0696 02bf 06ec call 0x06ec +0698 02df ret +} + +{ +0699 b100 tst $ACC0 +069a 02d5 retz +069b 04fe addis $AC0.M, #0xfe +069c 1f1e mrr $AX0.L, $AC0.M +069d 191e lrri $AC0.M, @$AR0 +069e 0291 06a4 jl 0x06a4 +06a0 191a lrri $AX0.H, @$AR0 +06a1 0058 loop $AX0.L +06a2 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M +06a3 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M +06a4 1b7e srri @$AR3, $AC0.M +06a5 02df ret +} + +{ +06a6 0092 0004 lri $CR, #0x0004 +06a8 02bf 064f call 0x064f +06aa 8100 clr $ACC0 +06ab 00fe 0362 sr @0x0362, $AC0.M +06ad 8100 clr $ACC0 +06ae 2622 lrs $AC0.M, @0x0022 +06af 2423 lrs $AC0.L, @0x0023 +06b0 b100 tst $ACC0 +06b1 0294 06c3 jnz 0x06c3 +06b3 02bf 066a call 0x066a +06b5 2219 lrs $AX0.H, @0x0019 +06b6 8600 tstaxh $AX0.H +06b7 0294 06c0 jnz 0x06c0 +06b9 02bf 0636 call 0x0636 +06bb b900 tst $ACC1 +06bc 0295 06e9 jz 0x06e9 +06be 02bf 064f call 0x064f +06c0 8100 clr $ACC0 +06c1 2622 lrs $AC0.M, @0x0022 +06c2 2423 lrs $AC0.L, @0x0023 +06c3 1f1f mrr $AX0.L, $AC1.M +06c4 009a 0000 lri $AX0.H, #0x0000 +06c6 5800 subax $ACC0, $AX0 +06c7 0290 06d6 jge 0x06d6 +06c9 8100 clr $ACC0 +06ca 2619 lrs $AC0.M, @0x0019 +06cb b100 tst $ACC0 +06cc 0294 06d0 jnz 0x06d0 +06ce 02bf 066a call 0x066a +06d0 02bf 0628 call 0x0628 +06d2 02bf 064f call 0x064f +06d4 029f 06ad jmp 0x06ad +} + +{ +06d6 8100 clr $ACC0 +06d7 2619 lrs $AC0.M, @0x0019 +06d8 b100 tst $ACC0 +06d9 0294 06dd jnz 0x06dd +06db 02bf 066a call 0x066a +06dd 02bf 0636 call 0x0636 +06df b900 tst $ACC1 +06e0 0295 06e9 jz 0x06e9 +06e2 02bf 064f call 0x064f +06e4 029f 06d6 jmp 0x06d6 +} + +{ +06e6 8100 clr $ACC0 +06e7 005f loop $AC1.M +06e8 1b7e srri @$AR3, $AC0.M +06e9 0092 00ff lri $CR, #0x00ff +06eb 02df ret +} + +{ +06ec 00ff 0360 sr @0x0360, $AC1.M +06ee 00da 0362 lr $AX0.H, @0x0362 +06f0 8600 tstaxh $AX0.H +06f1 0294 06fe jnz 0x06fe +06f3 0a01 lris $AX0.H, #0x01 +06f4 00fa 0362 sr @0x0362, $AX0.H +06f6 2620 lrs $AC0.M, @0x0020 +06f7 2421 lrs $AC0.L, @0x0021 +06f8 009f 0005 lri $AC1.M, #0x0005 +06fa 02bf 0103 call 0x0103 +06fc 0092 0004 lri $CR, #0x0004 +06fe 0080 ffd3 lri $AR0, #0xffd3 +0700 0084 0000 lri $IX0, #0x0000 +0702 199e lrrn $AC0.M, @$AR0 +0703 1ffe mrr $AC1.M, $AC0.M +0704 1401 lsl $ACC0, #1 +0705 0240 001e andi $AC0.M, #0x001e +0707 0200 0300 addi $AC0.M, #0x0300 +0709 1c3e mrr $AR1, $AC0.M +070a 157c lsr $ACC1, #-4 +070b 0340 000f andi $AC1.M, #0x000f +070d 0a11 lris $AX0.H, #0x11 +070e 5500 subr $ACC1, $AX0.H +070f 009a 00f0 lri $AX0.H, #0x00f0 +0711 009b 000f lri $AX1.H, #0x000f +0713 0082 0370 lri $AR2, #0x0370 +0715 1998 lrrn $AX0.L, @$AR0 +0716 6000 movr $ACC0, $AX0.L +0717 1107 071e bloopi #0x07, 0x071e +{ + 0719 3400 andr $AC0.M, $AX0.H + 071a 1408 lsl $ACC0, #8 + 071b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 071c 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 071d 140c lsl $ACC0, #12 + 071e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M +} +071f 3400 andr $AC0.M, $AX0.H +0720 1408 lsl $ACC0, #8 +0721 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M +0722 3600 andr $AC0.M, $AX1.H +0723 140c lsl $ACC0, #12 +0724 1b5e srri @$AR2, $AC0.M +0725 8f00 set40 +0726 1f7f mrr $AX1.H, $AC1.M +0727 203e lrs $AX0.L, @0x003e +0728 273f lrs $AC1.M, @0x003f +0729 193a lrri $AX0.H, @$AR1 +072a 1939 lrri $AX1.L, @$AR1 +072b 0080 0370 lri $AR0, #0x0370 +072d 0081 0430 lri $AR1, #0x0430 +072f 1c80 mrr $IX0, $AR0 +0730 a000 mulx $AX0.L, $AX1.L +0731 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 +0732 1108 073b bloopi #0x08, 0x073b +0734 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M +0735 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 +0736 1485 asl $ACC0, #5 +0737 e831 maddc's $AC0.M, $AX1.L : @$AR1, $AC0.M +0738 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M +0739 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 +073a 1585 asl $ACC1, #5 +073b ea39 maddc's $AC1.M, $AX1.L : @$AR1, $AC1.M +073c 8e00 set16 +073d 8900 clr $ACC1 +073e 00df 0360 lr $AC1.M, @0x0360 +0740 02df ret +} + +{ +0741 0080 0346 lri $AR0, #0x0346 +0743 02bf 0051 call 0x0051 +0745 8100 clr $ACC0 +0746 0080 0430 lri $AR0, #0x0430 +0748 1010 loopi #0x10 + 0749 1b1e srri @$AR0, $AC0.M +074a 00fe 0442 sr @0x0442, $AC0.M +074c 00fe 0443 sr @0x0443, $AC0.M +074e 009c 0000 lri $AC0.L, #0x0000 +0750 00fe 041c sr @0x041c, $AC0.M +0752 00fc 041d sr @0x041d, $AC0.L +0754 009e 0100 lri $AC0.M, #0x0100 +0756 009c f100 lri $AC0.L, #0xf100 +0758 00fe 044e sr @0x044e, $AC0.M +075a 00fc 044f sr @0x044f, $AC0.L +075c 009e 0040 lri $AC0.M, #0x0040 +075e 009c 0000 lri $AC0.L, #0x0000 +0760 00fe 044c sr @0x044c, $AC0.M +0762 00fc 044d sr @0x044d, $AC0.L +0764 009e 0009 lri $AC0.M, #0x0009 +0766 00fe 0440 sr @0x0440, $AC0.M +0768 009e 0010 lri $AC0.M, #0x0010 +076a 00fe 041a sr @0x041a, $AC0.M +076c 009e 0100 lri $AC0.M, #0x0100 +076e 009c f250 lri $AC0.L, #0xf250 +0770 00fe 044a sr @0x044a, $AC0.M +0772 00fc 044b sr @0x044b, $AC0.L +0774 009c 0000 lri $AC0.L, #0x0000 +0776 00fe 0448 sr @0x0448, $AC0.M +0778 00fc 0449 sr @0x0449, $AC0.L +077a 009e 0001 lri $AC0.M, #0x0001 +077c 00fe 0441 sr @0x0441, $AC0.M +077e 8900 clr $ACC1 +077f 00ff 0401 sr @0x0401, $AC1.M +0781 1180 079b bloopi #0x80, 0x079b +{ + 0783 0083 0580 lri $AR3, #0x0580 + 0785 009f 0100 lri $AC1.M, #0x0100 + 0787 02bf 06a6 call 0x06a6 + 0789 0081 0346 lri $AR1, #0x0346 + 078b 193e lrri $AC0.M, @$AR1 + 078c 18bc lrrd $AC0.L, @$AR1 + 078d 009f 0580 lri $AC1.M, #0x0580 + 078f 0080 0100 lri $AR0, #0x0100 + 0791 02bf 008b call 0x008b + 0793 0081 0346 lri $AR1, #0x0346 + 0795 193e lrri $AC0.M, @$AR1 + 0796 18bc lrrd $AC0.L, @$AR1 + 0797 0098 0200 lri $AX0.L, #0x0200 + 0799 7000 addaxl $ACC0, $AX0.L + 079a 1b3e srri @$AR1, $AC0.M + 079b 1abc srrd @$AR1, $AC0.L +} +079c 029f 0049 jmp 0x0049 +} + +void 079e_AudioFormatRAW20() +{ +079e 8900 clr $ACC1 +079f 009f 0050 lri $AC1.M, #0x0050 +07a1 0083 0520 lri $AR3, #0x0520 +07a3 02bf 07b9 call 0x07b9 +07a5 029f 04e7 jmp 0x04e7 +} + +void 07a7_AudioFormatRAW21() +{ +07a7 00d8 0402 lr $AX0.L, @0x0402 +07a9 8100 clr $ACC0 +07aa 8900 clr $ACC1 +07ab 00dc 0418 lr $AC0.L, @0x0418 +07ad 009a 0050 lri $AX0.H, #0x0050 +07af 9000 mul $AX0.L, $AX0.H +07b0 9400 mulac $AX0.L, $AX0.H, $ACC0 +07b1 1404 lsl $ACC0, #4 +07b2 1ffe mrr $AC1.M, $AC0.M +07b3 0083 0580 lri $AR3, #0x0580 +07b5 02bf 07b9 call 0x07b9 +07b7 029f 04df jmp 0x04df +} + +{ +07b9 0092 0004 lri $CR, #0x0004 +07bb 8100 clr $ACC0 +07bc 2622 lrs $AC0.M, @0x0022 +07bd 2423 lrs $AC0.L, @0x0023 +07be 1f1f mrr $AX0.L, $AC1.M +07bf 009a 0000 lri $AX0.H, #0x0000 +07c1 5800 subax $ACC0, $AX0 +07c2 0290 07d9 jge 0x07d9 +07c4 8900 clr $ACC1 +07c5 00c0 0423 lr $AR0, @0x0423 +07c7 02bf 07fe call 0x07fe +07c9 8100 clr $ACC0 +07ca 1fd8 mrr $AC0.M, $AX0.L +07cb 2223 lrs $AX0.H, @0x0023 +07cc 5400 subr $ACC0, $AX0.H +07cd 0007 dar $AR3 +07ce 1979 lrri $AX1.L, @$AR3 +07cf 005e loop $AC0.M +07d0 1b79 srri @$AR3, $AX1.L +07d1 009f 0001 lri $AC1.M, #0x0001 +07d3 2f01 srs @0x0001, $AC1.M +07d4 8900 clr $ACC1 +07d5 2f23 srs @0x0023, $AC1.M +07d6 0092 00ff lri $CR, #0x00ff +07d8 02df ret +} + +{ +07d9 2e22 srs @0x0022, $AC0.M +07da 2c23 srs @0x0023, $AC0.L +07db 8100 clr $ACC0 +07dc 8900 clr $ACC1 +07dd 264a lrs $AC0.M, @0x004a +07de 271c lrs $AC1.M, @0x001c +07df 5c00 sub $ACC0, $ACC1 +07e0 2e1e srs @0x001e, $AC0.M +07e1 5000 subr $ACC0, $AX0.L +07e2 0290 07f8 jge 0x07f8 +07e4 00c0 041e lr $AR0, @0x041e +07e6 02bf 07fe call 0x07fe +07e8 8100 clr $ACC0 +07e9 1fd8 mrr $AC0.M, $AX0.L +07ea 221e lrs $AX0.H, @0x001e +07eb 5400 subr $ACC0, $AX0.H +07ec 1c1e mrr $AR0, $AC0.M +07ed 8100 clr $ACC0 +07ee 2e1c srs @0x001c, $AC0.M +07ef 2648 lrs $AC0.M, @0x0048 +07f0 2449 lrs $AC0.L, @0x0049 +07f1 2e4c srs @0x004c, $AC0.M +07f2 2c4d srs @0x004d, $AC0.L +07f3 02bf 07fe call 0x07fe +07f5 0092 00ff lri $CR, #0x00ff +07f7 02df ret +} + +{ +07f8 1c18 mrr $AR0, $AX0.L +07f9 02bf 07fe call 0x07fe +07fb 0092 00ff lri $CR, #0x00ff +07fd 02df ret +} + +{ +07fe 8100 clr $ACC0 +07ff 1fc0 mrr $AC0.M, $AR0 +0800 b100 tst $ACC0 +0801 02d5 retz +0802 8900 clr $ACC1 +0803 271c lrs $AC1.M, @0x001c +0804 0340 0001 andi $AC1.M, #0x0001 +0806 009b 0000 lri $AX1.H, #0x0000 +0808 1f3f mrr $AX1.L, $AC1.M +0809 264c lrs $AC0.M, @0x004c +080a 244d lrs $AC0.L, @0x004d +080b 8900 clr $ACC1 +080c 251c lrs $AC1.L, @0x001c +080d 1501 lsl $ACC1, #1 +080e 4c00 add $ACC0, $ACC1 +080f 5a00 subax $ACC0, $AX1 +0810 5a00 subax $ACC0, $AX1 +0811 1c20 mrr $AR1, $AR0 +0812 1fe0 mrr $AC1.M, $AR0 +0813 0502 addis $AC1.M, #0x02 +0814 1c1f mrr $AR0, $AC1.M +0815 009f 0a00 lri $AC1.M, #0x0a00 +0817 0092 00ff lri $CR, #0x00ff +0819 02bf 007e call 0x007e +081b 0092 0004 lri $CR, #0x0004 +081d 271c lrs $AC1.M, @0x001c +081e 1f61 mrr $AX1.H, $AR1 +081f 4700 addr $ACC1, $AX1.H +0820 2f1c srs @0x001c, $AC1.M +0821 0080 0a00 lri $AR0, #0x0a00 +0823 8900 clr $ACC1 +0824 1ff9 mrr $AC1.M, $AX1.L +0825 b900 tst $ACC1 +0826 0274 ifnz +0827 0008 iar $AR0 +0828 8900 clr $ACC1 +0829 1fe1 mrr $AC1.M, $AR1 +082a 191e lrri $AC0.M, @$AR0 +082b 0701 cmpis $AC1.M, #0x01 +082c 0293 0835 jle 0x0835 +082e 191a lrri $AX0.H, @$AR0 +082f 05fe addis $AC1.M, #0xfe +0830 005f loop $AC1.M +0831 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M +0832 1b7e srri @$AR3, $AC0.M +0833 1b7a srri @$AR3, $AX0.H +0834 02df ret +} + +{ +0835 1b7e srri @$AR3, $AC0.M +0836 02df ret +} + +{ +0837 0092 0004 lri $CR, #0x0004 +0839 2201 lrs $AX0.H, @0x0001 +083a 8600 tstaxh $AX0.H +083b 0294 0868 jnz 0x0868 +083d 2204 lrs $AX0.H, @0x0004 +083e 8600 tstaxh $AX0.H +083f 02b4 08bc callnz 0x08bc +0841 2219 lrs $AX0.H, @0x0019 +0842 8600 tstaxh $AX0.H +0843 0295 085d jz 0x085d +0845 009e 0430 lri $AC0.M, #0x0430 +0847 4400 addr $ACC0, $AX0.H +0848 1c1e mrr $AR0, $AC0.M +0849 0e10 lris $AC0.M, #0x10 +084a 5400 subr $ACC0, $AX0.H +084b 1f7e mrr $AX1.H, $AC0.M +084c 02bf 0699 call 0x0699 +084e d900 cmpar $ACC1, $AX1.H +084f 0292 085c jg 0x085c +0851 0295 0858 jz 0x0858 +0853 2619 lrs $AC0.M, @0x0019 +0854 4c00 add $ACC0, $ACC1 +0855 2e19 srs @0x0019, $AC0.M +0856 029f 08b9 jmp 0x08b9 + +0858 8100 clr $ACC0 +0859 2e19 srs @0x0019, $AC0.M +085a 029f 08b9 jmp 0x08b9 + +085c 5700 subr $ACC1, $AX1.H +085d 8100 clr $ACC0 +085e 2605 lrs $AC0.M, @0x0005 +085f b100 tst $ACC0 +0860 0295 0879 jz 0x0879 +0862 8100 clr $ACC0 +0863 2e05 srs @0x0005, $AC0.M +0864 2241 lrs $AX0.H, @0x0041 +0865 8600 tstaxh $AX0.H +0866 0294 086f jnz 0x086f +0868 8100 clr $ACC0 +0869 005f loop $AC1.M +086a 1b7e srri @$AR3, $AC0.M +086b 7400 incm $AC0.M +086c 2e01 srs @0x0001, $AC0.M +086d 029f 08b9 jmp 0x08b9 + +086f 2648 lrs $AC0.M, @0x0048 +0870 2449 lrs $AC0.L, @0x0049 +0871 2e1c srs @0x001c, $AC0.M +0872 2c1d srs @0x001d, $AC0.L +0873 02bf 08c1 call 0x08c1 +0875 2642 lrs $AC0.M, @0x0042 +0876 2443 lrs $AC0.L, @0x0043 +0877 2e3f srs @0x003f, $AC0.M +0878 2c3e srs @0x003e, $AC0.L +0879 00ff 0360 sr @0x0360, $AC1.M +087b 2620 lrs $AC0.M, @0x0020 +087c 2421 lrs $AC0.L, @0x0021 +087d 009f 0005 lri $AC1.M, #0x0005 +087f 02bf 0103 call 0x0103 +0881 0092 0004 lri $CR, #0x0004 +0883 8900 clr $ACC1 +0884 00ff 0362 sr @0x0362, $AC1.M +0886 00df 0360 lr $AC1.M, @0x0360 +0888 02bf 08db call 0x08db +088a 8100 clr $ACC0 +088b 00de 0362 lr $AC0.M, @0x0362 +088d 2240 lrs $AX0.H, @0x0040 +088e 4400 addr $ACC0, $AX0.H +088f 00fe 0362 sr @0x0362, $AC0.M +0891 8100 clr $ACC0 +0892 2622 lrs $AC0.M, @0x0022 +0893 2423 lrs $AC0.L, @0x0023 +0894 0a01 lris $AX0.H, #0x01 +0895 0081 0405 lri $AR1, #0x0405 +0897 7a00 dec $ACC0 +0898 b100 tst $ACC0 +0899 0275 ifz +089a 1a3a srr @$AR1, $AX0.H +089b 2e22 srs @0x0022, $AC0.M +089c 2c23 srs @0x0023, $AC0.L +089d 0710 cmpis $AC1.M, #0x10 +089e 0293 08a7 jle 0x08a7 +08a0 05f0 addis $AC1.M, #0xf0 +08a1 2205 lrs $AX0.H, @0x0005 +08a2 8600 tstaxh $AX0.H +08a3 0294 0862 jnz 0x0862 +08a5 029f 0888 jmp 0x0888 +08a7 0275 ifz +08a8 8900 clr $ACC1 +08a9 2f19 srs @0x0019, $AC1.M +08aa 1fc3 mrr $AC0.M, $AR3 +08ab 04f0 addis $AC0.M, #0xf0 +08ac 1c1e mrr $AR0, $AC0.M +08ad 0083 0430 lri $AR3, #0x0430 +08af 0e10 lris $AC0.M, #0x10 +08b0 02bf 0699 call 0x0699 +08b2 2620 lrs $AC0.M, @0x0020 +08b3 2421 lrs $AC0.L, @0x0021 +08b4 00d8 0362 lr $AX0.L, @0x0362 +08b6 7000 addaxl $ACC0, $AX0.L +08b7 2c21 srs @0x0021, $AC0.L +08b8 2e20 srs @0x0020, $AC0.M +08b9 0092 00ff lri $CR, #0x00ff +08bb 02df ret +} + +{ +08bc 8100 clr $ACC0 +08bd 2e1c srs @0x001c, $AC0.M +08be 2e1d srs @0x001d, $AC0.M +08bf 2e3e srs @0x003e, $AC0.M +08c0 2e3f srs @0x003f, $AC0.M +08c1 231c lrs $AX1.H, @0x001c +08c2 211d lrs $AX1.L, @0x001d +08c3 264a lrs $AC0.M, @0x004a +08c4 244b lrs $AC0.L, @0x004b +08c5 5a00 subax $ACC0, $AX1 +08c6 147c lsr $ACC0, #-4 +08c7 2e22 srs @0x0022, $AC0.M +08c8 2c23 srs @0x0023, $AC0.L +08c9 261c lrs $AC0.M, @0x001c +08ca 241d lrs $AC0.L, @0x001d +08cb 147c lsr $ACC0, #-4 +08cc 2240 lrs $AX0.H, @0x0040 +08cd c010 mulc'mv $AC0.M, $AX0.H : $AX0.L, $AC0.L +08ce 9600 mulmv $AX0.L, $AX0.H, $ACC0 +08cf f000 lsl16 $ACC0 +08d0 4e00 addp $ACC0 +08d1 234c lrs $AX1.H, @0x004c +08d2 214d lrs $AX1.L, @0x004d +08d3 4a00 addax $ACC0, $AX1 +08d4 2e20 srs @0x0020, $AC0.M +08d5 2c21 srs @0x0021, $AC0.L +08d6 8100 clr $ACC0 +08d7 2e05 srs @0x0005, $AC0.M +08d8 2e19 srs @0x0019, $AC0.M +08d9 2e04 srs @0x0004, $AC0.M +08da 02df ret +} + +{ +08db 00ff 0360 sr @0x0360, $AC1.M +08dd 0080 ffd3 lri $AR0, #0xffd3 +08df 0084 0000 lri $IX0, #0x0000 +08e1 199e lrrn $AC0.M, @$AR0 +08e2 1ffe mrr $AC1.M, $AC0.M +08e3 1401 lsl $ACC0, #1 +08e4 0240 001e andi $AC0.M, #0x001e +08e6 0200 0300 addi $AC0.M, #0x0300 +08e8 1c3e mrr $AR1, $AC0.M +08e9 157c lsr $ACC1, #-4 +08ea 0340 000f andi $AC1.M, #0x000f +08ec 0a11 lris $AX0.H, #0x11 +08ed 5500 subr $ACC1, $AX0.H +08ee 009a 00f0 lri $AX0.H, #0x00f0 +08f0 009b 000f lri $AX1.H, #0x000f +08f2 0082 0370 lri $AR2, #0x0370 +08f4 1998 lrrn $AX0.L, @$AR0 +08f5 6000 movr $ACC0, $AX0.L +08f6 1107 08fd bloopi #0x07, 0x08fd +{ + 08f8 3400 andr $AC0.M, $AX0.H + 08f9 1408 lsl $ACC0, #8 + 08fa 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 08fb 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 08fc 140c lsl $ACC0, #12 + 08fd 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M +} +08fe 3400 andr $AC0.M, $AX0.H +08ff 1408 lsl $ACC0, #8 +0900 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M +0901 3600 andr $AC0.M, $AX1.H +0902 140c lsl $ACC0, #12 +0903 1b5e srri @$AR2, $AC0.M +0904 8f00 set40 +0905 1f7f mrr $AX1.H, $AC1.M +0906 203e lrs $AX0.L, @0x003e +0907 273f lrs $AC1.M, @0x003f +0908 193a lrri $AX0.H, @$AR1 +0909 1939 lrri $AX1.L, @$AR1 +090a 0080 0370 lri $AR0, #0x0370 +090c 1c80 mrr $IX0, $AR0 +090d a000 mulx $AX0.L, $AX1.L +090e ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 +090f 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M +0910 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 +0911 1485 asl $ACC0, #5 +0912 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M +0913 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M +0914 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 +0915 1585 asl $ACC1, #5 +0916 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M +0917 1106 0920 bloopi #0x06, 0x0920 +{ + 0919 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M + 091a a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 091b 1485 asl $ACC0, #5 + 091c e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 091d 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M + 091e a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 091f 1585 asl $ACC1, #5 + 0920 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M +} +0921 3a93 asrnrx'mv $ACC0, $AX1.H : $AX0.L, $AC1.M +0922 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 +0923 1485 asl $ACC0, #5 +0924 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M +0925 3b92 asrnrx'mv $ACC1, $AX1.H : $AX0.L, $AC0.M +0926 a500 mulxac $AX0.L, $AX1.L, $ACC1 +0927 1585 asl $ACC1, #5 +0928 1b7f srri @$AR3, $AC1.M +0929 2e3e srs @0x003e, $AC0.M +092a 2f3f srs @0x003f, $AC1.M +092b 8e00 set16 +092c 8900 clr $ACC1 +092d 00df 0360 lr $AC1.M, @0x0360 +092f 02df ret +} + +{ +0930 0083 0520 lri $AR3, #0x0520 +0932 00de 041b lr $AC0.M, @0x041b +0934 1050 loopi #0x50 + 0935 1b7e srri @$AR3, $AC0.M +0936 029f 04e7 jmp 0x04e7 +} + +0938 0000 nop +0939 0000 nop +093a 0000 nop +093b 0000 nop +093c 0000 nop +093d 0000 nop +093e 0000 nop +093f 0000 nop diff --git a/docs/DSP/DSP_UC_Luigi.txt b/docs/DSP/DSP_UC_Luigi.txt index de829733ce..5aa599f797 100644 --- a/docs/DSP/DSP_UC_Luigi.txt +++ b/docs/DSP/DSP_UC_Luigi.txt @@ -1,2507 +1,2507 @@ -// This ucode is interesting because it is very similar to the Zelda ucode, -// but does not make use of exceptions. Hence, it might be possible to get -// it running okay even without understanding how the exceptions work. - -// CRC: 379F1139 -// ector-CRC: 42f64ac4 - -// Notable differences: -// -// Luigi init (not using mail exception): -// sbset #0x02 -// sbset #0x03 -// sbclr #0x04 -// sbset #0x05 -// sbset #0x06 -// set16 -// clr15 -// m0 - -// Zelda init (using mail exception): -// sbclr #0x02 ! -// sbclr #0x03 ! -// sbclr #0x04 -// sbset #0x05 (late, just when it's time to receive messages) -// sbset #0x06 -// set16 -// clr15 -// m0 - -// AX1 init (not using mail exception, same as Luigi init): -// sbset #0x02 -// sbset #0x03 -// sbclr #0x04 -// sbset #0x05 -// sbset #0x06 -// set16 -// clr15 -// m0 - - - -// exception vectors -0000 029f 0010 jmp 0x0010 -0002 0000 nop -0003 0000 nop -0004 02ff rti -0005 0000 nop -0006 02ff rti -0007 0000 nop -0008 02ff rti -0009 0000 nop -000a 02ff rti -000b 0000 nop -000c 02ff rti -000d 0000 nop -000e 02ff rti // This is Zelda's message exception. -000f 0000 nop - -// Reset vector -void 0010_ResetVector() { - // Compare to 0057 in the Zelda ucode - 0010 1302 sbset #0x02 - 0011 1303 sbset #0x03 - 0012 1204 sbclr #0x04 - 0013 1305 sbset #0x05 - 0014 1306 sbset #0x06 - 0015 8e00 set16 - 0016 8c00 clr15 - 0017 8b00 m0 - 0018 009e ffff lri $AC0.M, #0xffff - 001a 1d1e mrr $WR0, $AC0.M - 001b 1d3e mrr $WR1, $AC0.M - 001c 1d5e mrr $WR2, $AC0.M - 001d 1d7e mrr $WR3, $AC0.M - 001e 0092 00ff lri $CR, #0x00ff - 0020 8100 clr $ACC0 - // Clear memory - 0021 009f 1000 lri $AC1.M, #0x1000 - 0023 0080 0000 lri $AR0, #0x0000 - 0025 005f loop $AC1.M - 0026 1b1e srri @$AR0, $AC0.M - 0027 26ff lrs $AC0.M, @CMBL - 0028 16fc 8888 si @DMBH, #0x8888 - 002a 16fd 1111 si @DMBL, #0x1111 - 002c 26fc lrs $AC0.M, @DMBH - 002d 02a0 8000 andf $AC0.M, #0x8000 - 002f 029c 002c jlnz 0x002c - - while (true) { - 0031 8100 clr $ACC0 - 0032 8900 clr $ACC1 - 0033 26fe lrs $AC0.M, @CMBH - 0034 02c0 8000 andcf $AC0.M, #0x8000 - 0036 029c 0031 jlnz 0x0031 - 0038 27ff lrs $AC1.M, @CMBL - 0039 00ff 0345 sr @0x0345, $AC1.M - 003b 1ffe mrr $AC1.M, $AC0.M - 003c 0340 00ff andi $AC1.M, #0x00ff - 003e 00ff 0344 sr @0x0344, $AC1.M - 0040 1479 lsr $ACC0, #-7 - - // Jump table below - 0041 0240 007e andi $AC0.M, #0x007e - 0043 0200 0062 addi $AC0.M, #0x0062 - 0045 00fe 0343 sr @0x0343, $AC0.M - 0047 1c1e mrr $AR0, $AC0.M - 0048 170f jmpr $AR0 - 0049 009e 8000 lri $AC0.M, #0x8000 - 004b 00dc 0343 lr $AC0.L, @0x0343 - 004d 02bf 005a call 0x005a - 004f 029f 0031 jmp 0x0031 - } -} - -void 0051_Unk_Mail() { - 0051 26fe lrs $AC0.M, @CMBH - 0052 02c0 8000 andcf $AC0.M, #0x8000 - 0054 029c 0051 jlnz 0x0051 - 0056 24ff lrs $AC0.L, @CMBL - 0057 1b1e srri @$AR0, $AC0.M - 0058 1b1c srri @$AR0, $AC0.L - 0059 02df ret -} - -void 005a_Unk_Mail() { - 005a 2efc srs @DMBH, $AC0.M - 005b 2cfd srs @DMBL, $AC0.L - 005c 26fc lrs $AC0.M, @DMBH - 005d 02a0 8000 andf $AC0.M, #0x8000 - 005f 029c 005c jlnz 0x005c - 0061 02df ret -} - -// Just a jump table. -0062 029f 0049 jmp 0x0049 -0064 029f 0349 jmp 0x0349 // Command 01 -0066 029f 04eb jmp 0x04eb // Command 02 -0068 029f 0031 jmp 0x0031 -006a 029f 00df jmp 0x00df -006c 029f 00f1 jmp 0x00f1 -006e 029f 06e7 jmp 0x06e7 -0070 029f 069b jmp 0x069b -0072 029f 0703 jmp 0x0703 -0074 029f 06cb jmp 0x06cb -0076 029f 0870 jmp 0x0870 -0078 029f 0744 jmp 0x0744 -007a 029f 0238 jmp 0x0238 - - -void 007c_Unk() { - 007c 193e lrri $AC0.M, @$AR1 - 007d 193c lrri $AC0.L, @$AR1 - 007e 2fcd srs @DSPA, $AC1.M - 007f 0f00 lris $AC1.M, #0x00 - 0080 2fc9 srs @DSCR, $AC1.M - 0081 2ece srs @DSMAH, $AC0.M - 0082 2ccf srs @DSMAL, $AC0.L - 0083 1fe0 mrr $AC1.M, $AR0 - 0084 1501 lsl $ACC1, #1 - 0085 2fcb srs @DSBL, $AC1.M - 0086 02bf 008f call 0x008f - 0088 02df ret -} - - -void 0089_Unk() { - 0089 193e lrri $AC0.M, @$AR1 - 008a 193c lrri $AC0.L, @$AR1 - 008b 2fcd srs @DSPA, $AC1.M - 008c 0f01 lris $AC1.M, #0x01 - 008d 029f 0080 jmp 0x0080 - 008f 26c9 lrs $AC0.M, @DSCR - 0090 02a0 0004 andf $AC0.M, #0x0004 - 0092 029c 008f jlnz 0x008f - 0094 02df ret -} - -void 0095_Unk() { - 0095 193e lrri $AC0.M, @$AR1 - 0096 193c lrri $AC0.L, @$AR1 - 0097 00ff ffcd sr @DSPA, $AC1.M - 0099 0f00 lris $AC1.M, #0x00 - 009a 00ff ffc9 sr @DSCR, $AC1.M - 009c 00fe ffce sr @DSMAH, $AC0.M - 009e 00fc ffcf sr @DSMAL, $AC0.L - 00a0 1fe0 mrr $AC1.M, $AR0 - 00a1 1501 lsl $ACC1, #1 - 00a2 00ff ffcb sr @DSBL, $AC1.M - 00a4 02df ret -} - -void 00a5_Unk() { - 00a5 00de ffc9 lr $AC0.M, @DSCR - 00a7 02a0 0004 andf $AC0.M, #0x0004 - 00a9 029c 00a5 jlnz 0x00a5 - 00ab 02df ret -} - -void 00ac_ReadBlockFromAccelerator() { - 00ac 193e lrri $AC0.M, @$AR1 - 00ad 193c lrri $AC0.L, @$AR1 - 00ae 0240 7fff andi $AC0.M, #0x7fff - // 00b0 02bf 00ba call 0x00ba - 00ba_SetupAccelerator() - - 00b2 007a 00b8 bloop $AX0.H, 0x00b8 - 00b4 26d3 lrs $AC0.M, @UnkZelda - 00b5 1b3e srri @$AR1, $AC0.M - 00b6 0000 nop - 00b7 0000 nop - 00b8 0000 nop - 00b9 02df ret -} - -void 00ba_SetupAccelerator() { - 00ba 1c3f mrr $AR1, $AC1.M - 00bb 009f 0005 lri $AC1.M, #0x0005 - 00bd 2fd1 srs @SampleFormat, $AC1.M - 00be 1f5e mrr $AX0.H, $AC0.M - 00bf 1f1c mrr $AX0.L, $AC0.L - 00c0 2ed4 srs @ACSAH, $AC0.M - 00c1 2cd5 srs @ACSAL, $AC0.L - 00c2 8900 clr $ACC1 - 00c3 1fa0 mrr $AC1.L, $AR0 - 00c4 4c00 add $ACC0, $AC1.L - 00c5 0200 0030 addi $AC0.M, #0x0030 - 00c7 2ed6 srs @ACEAH, $AC0.M - 00c8 2cd7 srs @ACEAL, $AC0.L - 00c9 1fda mrr $AC0.M, $AX0.H - 00ca 1f98 mrr $AC0.L, $AX0.L - 00cb 147f lsr $ACC0, #-1 - 00cc 2ed8 srs @ACCAH, $AC0.M - 00cd 2cd9 srs @ACCAL, $AC0.L - 00ce 1f40 mrr $AX0.H, $AR0 - 00cf 02df ret -} - - -void 00d0_Unk() { - 00d0 193e lrri $AC0.M, @$AR1 - 00d1 193c lrri $AC0.L, @$AR1 - 00d2 0260 8000 ori $AC0.M, #0x8000 - // 00d4 02bf 00ba call 0x00ba - 00ba_SetupAccelerator() - 00d6 007a 00dd bloop $AX0.H, 0x00dd - 00d8 193e lrri $AC0.M, @$AR1 - 00d9 2ed3 srs @UnkZelda, $AC0.M - 00da 0000 nop - 00db 0000 nop - 00dc 0000 nop - 00dd 0000 nop - 00de 02df ret -} - -void 00df_Unk() { - 00df 0080 0346 lri $AR0, #0x0346 - 00e1 02bf 0051 call 0x0051 - 00e3 02bf 0051 call 0x0051 - 00e5 0081 0346 lri $AR1, #0x0346 - 00e7 00df 0349 lr $AC1.M, @0x0349 - 00e9 0340 ffff andi $AC1.M, #0xffff - 00eb 00c0 0345 lr $AR0, @0x0345 - 00ed 02bf 007c call 0x007c - 00ef 029f 0049 jmp 0x0049 - 00f1 0080 0346 lri $AR0, #0x0346 - 00f3 02bf 0051 call 0x0051 - 00f5 02bf 0051 call 0x0051 - 00f7 0081 0346 lri $AR1, #0x0346 - 00f9 00df 0349 lr $AC1.M, @0x0349 - 00fb 0340 ffff andi $AC1.M, #0xffff - 00fd 00c0 0345 lr $AR0, @0x0345 - 00ff 02bf 0089 call 0x0089 - 0101 029f 0049 jmp 0x0049 -} - -void 0103_SetupAcceleratorMystery() { - 0103 0092 00ff lri $CR, #0x00ff - 0105 2fd1 srs @SampleFormat, $AC1.M - 0106 0340 0003 andi $AC1.M, #0x0003 - 0108 1f7f mrr $AX1.H, $AC1.M - 0109 1f5e mrr $AX0.H, $AC0.M - 010a 1f1c mrr $AX0.L, $AC0.L - 010b 0200 0010 addi $AC0.M, #0x0010 - 010d 2ed4 srs @ACSAH, $AC0.M - 010e 2cd5 srs @ACSAL, $AC0.L - 010f 8900 clr $ACC1 - 0110 1fa0 mrr $AC1.L, $AR0 - 0111 4c00 add $ACC0, $AC1.L - 0112 0200 0030 addi $AC0.M, #0x0030 - 0114 2ed6 srs @ACEAH, $AC0.M - 0115 2cd7 srs @ACEAL, $AC0.L - 0116 1fda mrr $AC0.M, $AX0.H - 0117 1f98 mrr $AC0.L, $AX0.L - 0118 1ffb mrr $AC1.M, $AX1.H - 0119 7900 decm $AC1.M - 011a 02ca lsrn - 011b 2ed8 srs @ACCAH, $AC0.M - 011c 2cd9 srs @ACCAL, $AC0.L - 011d 02df ret -} - -void 011e_Unk() { - 011e 1c23 mrr $AR1, $AR3 - 011f 197e lrri $AC0.M, @$AR3 - 0120 191b lrri $AX1.H, @$AR0 - 0121 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - 0122 1120 0128 bloopi #0x20, 0x0128 - 0124 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0125 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0126 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0127 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0128 4900 addax $ACC1, $AX0.L - 0129 1108 012e bloopi #0x08, 0x012e - 012b dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 012c 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 012d dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 012e 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 012f 02df ret -} - - -void 0130_Unk() { - 0130 8f00 set40 - 0131 1c03 mrr $AR0, $AR3 - 0132 00db 038e lr $AX1.H, @0x038e - 0134 009a 0004 lri $AX0.H, #0x0004 - 0136 1978 lrri $AX0.L, @$AR3 - 0137 a843 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR3 - 0138 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0139 1128 013e bloopi #0x28, 0x013e - 013b 38c3 orr'ld $AC0.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 013c ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M - 013d 38c3 orr'ld $AC0.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 013e ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M - 013f 8e00 set16 - 0140 02df ret -} - -void 0141_Unk() { - 0141 00f9 0361 sr @0x0361, $AX1.L - 0143 1fc0 mrr $AC0.M, $AR0 - 0144 0200 fffc addi $AC0.M, #0xfffc - 0146 1c1e mrr $AR0, $AC0.M - 0147 1c5e mrr $AR2, $AC0.M - 0148 0083 043c lri $AR3, #0x043c - 014a 197e lrri $AC0.M, @$AR3 - 014b 197f lrri $AC1.M, @$AR3 - 014c 80a2 nx'sl : $AC0.M, $AX0.H - 014d 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - 014e 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - 014f 1b1f srri @$AR0, $AC1.M - 0150 1c02 mrr $AR0, $AR2 - 0151 8100 clr $ACC0 - 0152 00de 0402 lr $AC0.M, @0x0402 - 0154 00fe 0362 sr @0x0362, $AC0.M - 0156 1474 lsr $ACC0, #-12 - 0157 1f7e mrr $AX1.H, $AC0.M - 0158 1f3c mrr $AX1.L, $AC0.L - 0159 8900 clr $ACC1 - 015a 00dd 0430 lr $AC1.L, @0x0430 - 015c 1504 lsl $ACC1, #4 - 015d 0604 cmpis $ACC0, #0x04 - 015e 0290 01b6 jns 0x01b6 - 0160 1fdd mrr $AC0.M, $AC1.L - 0161 0082 0c00 lri $AR2, #0x0c00 - 0163 1050 loopi #0x50 - 0164 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L - 0165 1fbe mrr $AC1.L, $AC0.M - 0166 00fe 0360 sr @0x0360, $AC0.M - 0168 8900 clr $ACC1 - 0169 1fbe mrr $AC1.L, $AC0.M - 016a 009a fff8 lri $AX0.H, #0xfff8 - 016c 009b 00fc lri $AX1.H, #0x00fc - 016e 00d8 0361 lr $AX0.L, @0x0361 - 0170 0082 0c00 lri $AR2, #0x0c00 - 0172 0083 0c00 lri $AR3, #0x0c00 - 0174 195e lrri $AC0.M, @$AR2 - 0175 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M - 0176 1128 017b bloopi #0x28, 0x017b - 0178 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 - 0179 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H - 017a 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 - 017b 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - 017c 8a00 m2 - 017d 0082 0c00 lri $AR2, #0x0c00 - 017f 00dd 0430 lr $AC1.L, @0x0430 - 0181 1504 lsl $ACC1, #4 - 0182 1fe0 mrr $AC1.M, $AR0 - 0183 8100 clr $ACC0 - 0184 00de 0362 lr $AC0.M, @0x0362 - 0186 1474 lsr $ACC0, #-12 - 0187 1f7e mrr $AX1.H, $AC0.M - 0188 1f3c mrr $AX1.L, $AC0.L - 0189 8f00 set40 - 018a 1943 lrri $AR3, @$AR2 - 018b 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 018c 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 018d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 018e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 018f f200 madd $AX0.L, $AX0.H - 0190 fe00 movpz $ACC0 - 0191 1c1f mrr $AR0, $AC1.M - - 0192 1943 lrri $AR3, @$AR2 - 0193 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0194 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0195 114e 019d bloopi #0x4e, 0x019d - 0197 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0198 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0199 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - - 019a 1c1f mrr $AR0, $AC1.M - 019b 1943 lrri $AR3, @$AR2 - 019c 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 019d 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - 019e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 019f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01a0 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 01a1 fe00 movpz $ACC0 - 01a2 1b3e srri @$AR1, $AC0.M - - 01a3 8b00 m0 - 01a4 8e00 set16 - 01a5 00fe 0433 sr @0x0433, $AC0.M - 01a7 1c1f mrr $AR0, $AC1.M - 01a8 150c lsl $ACC1, #12 - 01a9 0340 0fff andi $AC1.M, #0x0fff - 01ab 00ff 0430 sr @0x0430, $AC1.M - 01ad 0083 043c lri $AR3, #0x043c - 01af 191e lrri $AC0.M, @$AR0 - 01b0 191f lrri $AC1.M, @$AR0 - 01b1 80a0 nx'ls : $AX0.H, $AC0.M - 01b2 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 01b3 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 01b4 1b7f srri @$AR3, $AC1.M - 01b5 02df ret - -subroutine: - 01b6 1fe0 mrr $AC1.M, $AR0 - 01b7 1c1f mrr $AR0, $AC1.M - 01b8 1128 01bf bloopi #0x28, 0x01bf - 01ba 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 01bb 1b3e srri @$AR1, $AC0.M - 01bc 1c1f mrr $AR0, $AC1.M - 01bd 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 01be 1b3e srri @$AR1, $AC0.M - 01bf 1c1f mrr $AR0, $AC1.M - 01c0 029f 01a5 jmp 0x01a5 -} - -void 01c2_Unk() { - 01c2 8a00 m2 - 01c3 0083 03e8 lri $AR3, #0x03e8 - 01c5 191e lrri $AC0.M, @$AR0 - 01c6 191a lrri $AX0.H, @$AR0 - 01c7 1006 loopi #0x06 - 01c8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 01c9 1b7e srri @$AR3, $AC0.M - 01ca 1b7a srri @$AR3, $AX0.H - 01cb 0080 03e8 lri $AR0, #0x03e8 - 01cd 0088 0007 lri $WR0, #0x0007 - 01cf 1150 01dc bloopi #0x50, 0x01dc - 01d1 1c61 mrr $AR3, $AR1 - 01d2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 01d3 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d6 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d7 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01d9 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01da f200 madd $AX0.L, $AX0.H - 01db fe00 movpz $ACC0 - 01dc 1b3e srri @$AR1, $AC0.M - 01dd 0088 ffff lri $WR0, #0xffff - 01df 8b00 m0 - 01e0 02df ret -} - -void 01e1_Unk() { // ZWW: 0b4d_IIR_Filter - 01e1 8a00 m2 - 01e2 05fe addis $ACC1, #0xfe - 01e3 0083 03e8 lri $AR3, #0x03e8 - 01e5 191e lrri $AC0.M, @$AR0 - 01e6 191a lrri $AX0.H, @$AR0 - 01e7 005f loop $AC1.M - 01e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 01e9 1b7e srri @$AR3, $AC0.M - 01ea 1b7a srri @$AR3, $AX0.H - 01eb 0080 03e8 lri $AR0, #0x03e8 - 01ed 0501 addis $ACC1, #0x01 - 01ee 1d1f mrr $WR0, $AC1.M - 01ef 1150 01f7 bloopi #0x50, 0x01f7 - 01f1 1c61 mrr $AR3, $AR1 - 01f2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 01f3 005f loop $AC1.M - 01f4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 01f5 f200 madd $AX0.L, $AX0.H - 01f6 fe00 movpz $ACC0 - 01f7 1b3e srri @$AR1, $AC0.M - 01f8 0088 ffff lri $WR0, #0xffff - 01fa 8b00 m0 - 01fb 02df ret -} - -void 01fc_Unk() { // ZWW: 0b68_4TapFIR - 01fc 0083 03e8 lri $AR3, #0x03e8 - 01fe 191e lrri $AC0.M, @$AR0 - 01ff 191a lrri $AX0.H, @$AR0 - 0200 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0201 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0202 1b7e srri @$AR3, $AC0.M - 0203 1b7a srri @$AR3, $AX0.H - 0204 0080 03e8 lri $AR0, #0x03e8 - 0206 0088 0003 lri $WR0, #0x0003 - 0208 0085 0000 lri $IX1, #0x0000 - 020a 0087 0000 lri $IX3, #0x0000 - 020c 1fc2 mrr $AC0.M, $AR2 - 020d 195b lrri $AX1.H, @$AR2 - 020e 1959 lrri $AX1.L, @$AR2 - 020f 195f lrri $AC1.M, @$AR2 - 0210 195a lrri $AX0.H, @$AR2 - 0211 1c5e mrr $AR2, $AC0.M - 0212 1fda mrr $AC0.M, $AX0.H - 0213 1c61 mrr $AR3, $AR1 - 0214 8a00 m2 - 0215 8f00 set40 - 0216 191a lrri $AX0.H, @$AR0 - 0217 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0218 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0219 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 021a e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 021b b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 021c 1127 0227 bloopi #0x27, 0x0227 - 021e e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - - 021f 197e lrri $AC0.M, @$AR3 - 0220 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0221 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0222 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0223 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - - 0224 197f lrri $AC1.M, @$AR3 - 0225 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0226 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0227 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0228 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0229 197e lrri $AC0.M, @$AR3 - 022a e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 022b eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 022c bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 022d 1bff srrn @$AR3, $AC1.M - 022e 197f lrri $AC1.M, @$AR3 - 022f 8e00 set16 - 0230 8b00 m0 - 0231 0088 ffff lri $WR0, #0xffff - 0233 1b5b srri @$AR2, $AX1.H - 0234 1b59 srri @$AR2, $AX1.L - 0235 1b5f srri @$AR2, $AC1.M - 0236 1b5e srri @$AR2, $AC0.M - 0237 02df ret -} - -void 0238_Unk() { - 0238 0080 0346 lri $AR0, #0x0346 - 023a 02bf 0051 call 0x0051 - 023c 02bf 0051 call 0x0051 - 023e 0081 0346 lri $AR1, #0x0346 - 0240 009f 0580 lri $AC1.M, #0x0580 - 0242 0080 0080 lri $AR0, #0x0080 - 0244 02bf 007c call 0x007c - 0246 0081 0348 lri $AR1, #0x0348 - 0248 009f 0c00 lri $AC1.M, #0x0c00 - 024a 0080 0080 lri $AR0, #0x0080 - 024c 02bf 007c call 0x007c - 024e 0080 0c00 lri $AR0, #0x0c00 - 0250 0081 0580 lri $AR1, #0x0580 - 0252 02bf 01fc call 0x01fc - 0254 0081 0346 lri $AR1, #0x0346 - 0256 009f 0580 lri $AC1.M, #0x0580 - 0258 0080 0080 lri $AR0, #0x0080 - 025a 02bf 0089 call 0x0089 - 025c 0081 0348 lri $AR1, #0x0348 - 025e 009f 0c00 lri $AC1.M, #0x0c00 - 0260 0080 0080 lri $AR0, #0x0080 - 0262 02bf 0089 call 0x0089 - 0264 029f 0049 jmp 0x0049 - 0266 8100 clr $ACC0 - 0267 1f5e mrr $AX0.H, $AC0.M - 0268 00d8 0402 lr $AX0.L, @0x0402 - 026a 00dc 0430 lr $AC0.L, @0x0430 - 026c 0080 0520 lri $AR0, #0x0520 - 026e 00df 0480 lr $AC1.M, @0x0480 - 0270 1501 lsl $ACC1, #1 - 0271 0340 007e andi $AC1.M, #0x007e - 0273 0300 027b addi $AC1.M, #0x027b - 0275 1c5f mrr $AR2, $AC1.M - 0276 175f callr $AR2 - 0277 00fc 0430 sr @0x0430, $AC0.L - 0279 029f 056d jmp 0x056d - 027b 029f 029c jmp 0x029c - 027d 029f 02d7 jmp 0x02d7 - 027f 029f 02bf jmp 0x02bf - 0281 029f 02ac jmp 0x02ac - 0283 029f 02e5 jmp 0x02e5 - 0285 029f 029b jmp 0x029b - 0287 029f 0303 jmp 0x0303 - 0289 029f 0306 jmp 0x0306 - 028b 029f 029b jmp 0x029b - 028d 029f 029b jmp 0x029b - 028f 029f 0324 jmp 0x0324 - 0291 029f 02dd jmp 0x02dd - 0293 029f 02e1 jmp 0x02e1 - 0295 029f 029b jmp 0x029b - 0297 029f 029b jmp 0x029b - 0299 029f 029b jmp 0x029b - 029b 02df ret -} - -void 029c_Unk() { - 029c 1401 lsl $ACC0, #1 - 029d 009b c000 lri $AX1.H, #0xc000 - 029f 0099 4000 lri $AX1.L, #0x4000 - 02a1 1150 02a9 bloopi #0x50, 0x02a9 - 02a3 02c0 0001 andcf $AC0.M, #0x0001 - 02a5 027c iflnz - 02a6 1b1b srri @$AR0, $AX1.H - 02a7 027d iflz - 02a8 1b19 srri @$AR0, $AX1.L - 02a9 4800 addax $ACC0, $AX0.L - 02aa 147f lsr $ACC0, #-1 - 02ab 02df ret -} - -void 02ac_Unk() { - 02ac 1402 lsl $ACC0, #2 - 02ad 8900 clr $ACC1 - 02ae 1fb8 mrr $AC1.L, $AX0.L - 02af 1501 lsl $ACC1, #1 - 02b0 009b c000 lri $AX1.H, #0xc000 - 02b2 0099 4000 lri $AX1.L, #0x4000 - 02b4 1150 02bc bloopi #0x50, 0x02bc - 02b6 02c0 0003 andcf $AC0.M, #0x0003 - 02b8 027c iflnz - 02b9 1b1b srri @$AR0, $AX1.H - 02ba 027d iflz - 02bb 1b19 srri @$AR0, $AX1.L - 02bc 4c00 add $ACC0, $AC1.L - 02bd 147e lsr $ACC0, #-2 - 02be 02df ret -} - -void 02bf_Unk() { // ZWW:08d5 - 02bf 1401 lsl $ACC0, #1 - 02c0 0081 0ca0 lri $AR1, #0x0ca0 - 02c2 009b c000 lri $AX1.H, #0xc000 - 02c4 0099 4000 lri $AX1.L, #0x4000 - 02c6 8900 clr $ACC1 - 02c7 0082 0000 lri $AR2, #0x0000 - 02c9 1150 02d4 bloopi #0x50, 0x02d4 - 02cb 02c0 0001 andcf $AC0.M, #0x0001 - 02cd 027c iflnz - 02ce 1b1b srri @$AR0, $AX1.H - 02cf 027d iflz - 02d0 1b19 srri @$AR0, $AX1.L - 02d1 183d lrr $AC1.L, @$AR1 - 02d2 4900 addax $ACC1, $AX0.L - 02d3 1fe2 mrr $AC1.M, $AR2 - 02d4 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M - 02d5 147f lsr $ACC0, #-1 - 02d6 02df ret -} - -void 02d7_Unk() { // ZWW:08ed - 02d7 8900 clr $ACC1 - 02d8 1fb8 mrr $AC1.L, $AX0.L - 02d9 157f lsr $ACC1, #-1 - 02da 1050 loopi #0x50 - 02db 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L - 02dc 02df ret -} - -void 02dd_Unk() { // ZWW:08f3 - 02dd 0082 0180 lri $AR2, #0x0180 // Three entrances - 02df 029f 02e7 jmp 0x02e7 - 02e1 0082 01c0 lri $AR2, #0x01c0 - 02e3 029f 02e7 jmp 0x02e7 - 02e5 0082 0140 lri $AR2, #0x0140 - 02e7 008a 003f lri $WR2, #0x003f - 02e9 0086 0000 lri $IX2, #0x0000 - 02eb 1406 lsl $ACC0, #6 - 02ec 8900 clr $ACC1 - 02ed 1fb8 mrr $AC1.L, $AX0.L - 02ee 1505 lsl $ACC1, #5 - 02ef 009b 003f lri $AX1.H, #0x003f - 02f1 009a 0000 lri $AX0.H, #0x0000 - 02f3 3600 andr $AC0.M, $AX1.H - 02f4 1cde mrr $IX2, $AC0.M - 02f5 001a addarn $AR2, $IX2 - 02f6 3400 andr $AC0.M, $AX0.H - 02f7 1150 02fd bloopi #0x50, 0x02fd - 02f9 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 02fa 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 02fb 1cde mrr $IX2, $AC0.M - 02fc 340e andr'nr $AC0.M, $AX0.H : $AR2 - 02fd 1b19 srri @$AR0, $AX1.L - 02fe 1fc2 mrr $AC0.M, $AR2 - 02ff 147a lsr $ACC0, #-6 - 0300 008a ffff lri $WR2, #0xffff - 0302 02df ret -} - -void 030_MemsetBlock() { - 0303 1050 loopi #0x50 - 0304 1b18 srri @$AR0, $AX0.L - // 0305 02df ret -} - -void 0306_Unk() { - 0306 0082 0100 lri $AR2, #0x0100 - 0308 008a 003f lri $WR2, #0x003f - 030a 0086 0000 lri $IX2, #0x0000 - 030c 1406 lsl $ACC0, #6 - 030d 8900 clr $ACC1 - 030e 1fb8 mrr $AC1.L, $AX0.L - 030f 1505 lsl $ACC1, #5 - 0310 009b 003f lri $AX1.H, #0x003f - 0312 009a 0000 lri $AX0.H, #0x0000 - 0314 3600 andr $AC0.M, $AX1.H - 0315 1cde mrr $IX2, $AC0.M - 0316 001a addarn $AR2, $IX2 - 0317 3400 andr $AC0.M, $AX0.H - 0318 1150 031e bloopi #0x50, 0x031e - 031a 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 031b 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 031c 1cde mrr $IX2, $AC0.M - 031d 340e andr'nr $AC0.M, $AX0.H : $AR2 - 031e 1b19 srri @$AR0, $AX1.L - 031f 1fc2 mrr $AC0.M, $AR2 - 0320 147a lsr $ACC0, #-6 - 0321 008a ffff lri $WR2, #0xffff - 0323 02df ret -} - -void 0324_Unk() { - 0324 0082 0100 lri $AR2, #0x0100 - 0326 008a 003f lri $WR2, #0x003f - 0328 0086 0000 lri $IX2, #0x0000 - 032a 0081 0ca0 lri $AR1, #0x0ca0 - 032c 1406 lsl $ACC0, #6 - 032d 8900 clr $ACC1 - 032e 1fb8 mrr $AC1.L, $AX0.L - 032f 1505 lsl $ACC1, #5 - 0330 009b 003f lri $AX1.H, #0x003f - 0332 009a 0000 lri $AX0.H, #0x0000 - 0334 3600 andr $AC0.M, $AX1.H - 0335 1cde mrr $IX2, $AC0.M - 0336 001a addarn $AR2, $IX2 - 0337 3400 andr $AC0.M, $AX0.H - 0338 1150 0343 bloopi #0x50, 0x0343 - 033a 1939 lrri $AX1.L, @$AR1 - 033b a000 mulx $AX0.L, $AX1.L - 033c 140a lsl $ACC0, #10 - 033d 4e00 addp $ACC0 - 033e 1476 lsr $ACC0, #-10 - 033f 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 0340 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0341 1cde mrr $IX2, $AC0.M - 0342 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0343 1b19 srri @$AR0, $AX1.L - 0344 1fc2 mrr $AC0.M, $AR2 - 0345 147a lsr $ACC0, #-6 - 0346 008a ffff lri $WR2, #0xffff - 0348 02df ret -} - -// DsetupTable -void 0349_COMMAND_01() { - 0349 0080 0380 lri $AR0, #0x0380 - 034b 02bf 0051 call 0x0051 - 034d 02bf 0051 call 0x0051 - 034f 02bf 0051 call 0x0051 - 0351 02bf 0051 call 0x0051 - - 0353 0081 0382 lri $AR1, #0x0382 - 0355 009f 0000 lri $AC1.M, #0x0000 - 0357 0080 0200 lri $AR0, #0x0200 - // 0359 02bf 007c call 0x007c - 007c_CopyRAMtoDMEM() - - 035b 0081 0384 lri $AR1, #0x0384 - 035d 009f 0300 lri $AC1.M, #0x0300 - 035f 0080 0020 lri $AR0, #0x0020 - 0361 02bf 007c call 0x007c - 007c_CopyRAMtoDMEM() - - - 0363 02bf 03cc call 0x03cc - 0365 00de 0345 lr $AC0.M, @0x0345 - 0367 00fe 0342 sr @0x0342, $AC0.M - 0369 02bf 0af0 call 0x0af0 - 036b 029f 0049 jmp 0x0049 - 036d 00de 0344 lr $AC0.M, @0x0344 - 036f 1404 lsl $ACC0, #4 - 0370 0200 03a8 addi $AC0.M, #0x03a8 - 0372 1c1e mrr $AR0, $AC0.M - 0373 02bf 0051 call 0x0051 - 0375 02bf 0051 call 0x0051 - 0377 02bf 0051 call 0x0051 - 0379 00de 0345 lr $AC0.M, @0x0345 - 037b 1b1e srri @$AR0, $AC0.M - 037c 00de 0344 lr $AC0.M, @0x0344 - 037e 0200 03a4 addi $AC0.M, #0x03a4 - 0380 1c1e mrr $AR0, $AC0.M - 0381 8100 clr $ACC0 - 0382 1b1e srri @$AR0, $AC0.M - 0383 02df ret -} - -void 0384_Unk() { - 0384 00de 0344 lr $AC0.M, @0x0344 - 0386 1404 lsl $ACC0, #4 - 0387 0200 03b0 addi $AC0.M, #0x03b0 - 0389 1c1e mrr $AR0, $AC0.M - 038a 02bf 0051 call 0x0051 - 038c 02bf 0051 call 0x0051 - 038e 02bf 0051 call 0x0051 - 0390 02bf 0051 call 0x0051 - 0392 02df ret -} - -void 0393_Unk() { - 0393 0081 034c lri $AR1, #0x034c - 0395 009f 0400 lri $AC1.M, #0x0400 - 0397 0080 00c0 lri $AR0, #0x00c0 - 0399 02bf 007c call 0x007c - 039b 02df ret -} - -void 039c_Unk() { - 039c 0081 034c lri $AR1, #0x034c - 039e 009f 0400 lri $AC1.M, #0x0400 - 03a0 0080 0080 lri $AR0, #0x0080 - 03a2 0081 034c lri $AR1, #0x034c - 03a4 193e lrri $AC0.M, @$AR1 - 03a5 193c lrri $AC0.L, @$AR1 - 03a6 0098 0000 lri $AX0.L, #0x0000 - 03a8 7000 addaxl $ACC0, $AX0.L - 03a9 02bf 008b call 0x008b - 03ab 02df ret -} - -void 03ac_Unk() { - 03ac 191e lrri $AC0.M, @$AR0 - 03ad 191a lrri $AX0.H, @$AR0 - 03ae 005f loop $AC1.M - 03af 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 03b0 1b7e srri @$AR3, $AC0.M - 03b1 1b7a srri @$AR3, $AX0.H - 03b2 02df ret -} - -// Example call: -//a 03d9 0080 0f40 lri $AR0, #0x0f40 -//a 03db 0082 0d00 lri $AR2, #0x0d00 -//a 03dd 0083 0d60 lri $AR3, #0x0d60 -//a 03df 009f 0028 lri $AC1.M, #0x0028 -//a 03e1 02bf 03b3 call 0x03b3 -// Not sure how AR2 fits into the picture... -void 03b3_XorBuffer(InputBuffer($AR0), OutputBuffer($AR3), HalfLength($AC1.M)) { - 03b3 191e lrri $AC0.M, @$AR0 - 03b4 191a lrri $AX0.H, @$AR0 - 03b5 007f 03ba bloop $AC1.M, 0x03ba - 03b7 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 03b8 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 03b9 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 03ba 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 03bb 0000 nop - 03bc 02df ret -} - -void 03bd_Unk() { - 03bd 8a00 m2 - 03be 157f lsr $ACC1, #-1 - 03bf 1c20 mrr $AR1, $AR0 - 03c0 1c03 mrr $AR0, $AR3 - 03c1 193a lrri $AX0.H, @$AR1 - 03c2 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 - 03c3 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 - 03c4 007f 03c9 bloop $AC1.M, 0x03c9 - 03c6 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 03c7 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 03c8 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 03c9 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 03ca 8b00 m0 - 03cb 02df ret -} - -void 03cc_Unk() { - 03cc 0083 ffa0 lri $AR3, #0xffa0 - 03ce 0080 0300 lri $AR0, #0x0300 - 03d0 009f 000e lri $AC1.M, #0x000e - 03d2 1108 03d7 bloopi #0x08, 0x03d7 - 03d4 191e lrri $AC0.M, @$AR0 - 03d5 1b7e srri @$AR3, $AC0.M - 03d6 191e lrri $AC0.M, @$AR0 - 03d7 1b7e srri @$AR3, $AC0.M - 03d8 02df ret -} - -void 03d9_Unk() { - - 03d9 0080 0f40 lri $AR0, #0x0f40 - 03db 0082 0d00 lri $AR2, #0x0d00 - 03dd 0083 0d60 lri $AR3, #0x0d60 - 03df 009f 0028 lri $AC1.M, #0x0028 - // XorBuffer, why?? - 03e1 02bf 03b3 call 0x03b3 - - // Clear a bunch of buffers. - 03e3 8900 clr $ACC1 - 03e4 009e 0050 lri $AC0.M, #0x0050 - 03e6 0080 0ca0 lri $AR0, #0x0ca0 - 03e8 005e loop $AC0.M - 03e9 1b1f srri @$AR0, $AC1.M - 03ea 0080 0f40 lri $AR0, #0x0f40 - 03ec 005e loop $AC0.M - 03ed 1b1f srri @$AR0, $AC1.M - 03ee 0080 0fa0 lri $AR0, #0x0fa0 - 03f0 005e loop $AC0.M - 03f1 1b1f srri @$AR0, $AC1.M - 03f2 0080 0b00 lri $AR0, #0x0b00 - 03f4 005e loop $AC0.M - 03f5 1b1f srri @$AR0, $AC1.M - 03f6 0080 09a0 lri $AR0, #0x09a0 - 03f8 005e loop $AC0.M - 03f9 1b1f srri @$AR0, $AC1.M - - 03fa 02df ret -} - -void 03fb_Unk() { - 03fb 00c0 03a0 lr $AR0, @0x03a0 - 03fd 191a lrri $AX0.H, @$AR0 - 03fe 00df 03a1 lr $AC1.M, @0x03a1 - 0400 009b 00a0 lri $AX1.H, #0x00a0 - 0402 0081 0393 lri $AR1, #0x0393 - 0404 18bc lrrd $AC0.L, @$AR1 - 0405 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0406 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0407 0080 0050 lri $AR0, #0x0050 - 0409 0508 addis $ACC1, #0x08 - 040a 02bf 007e call 0x007e - 040c 00de 0390 lr $AC0.M, @0x0390 - 040e 02a0 0001 andf $AC0.M, #0x0001 - 0410 029d 041a jlz 0x041a - 0412 0080 0398 lri $AR0, #0x0398 - 0414 009e 0008 lri $AC0.M, #0x0008 - 0416 00c1 03a1 lr $AR1, @0x03a1 - 0418 02bf 01c2 call 0x01c2 - 041a 009f 0050 lri $AC1.M, #0x0050 - 041c 00c0 03a1 lr $AR0, @0x03a1 - 041e 8100 clr $ACC0 - 041f 00de 0394 lr $AC0.M, @0x0394 - 0421 b100 tst $ACC0 - 0422 0295 0429 jz 0x0429 - 0424 1c7e mrr $AR3, $AC0.M - 0425 00d8 0395 lr $AX0.L, @0x0395 - 0427 02bf 03bd call 0x03bd - 0429 009f 0050 lri $AC1.M, #0x0050 - 042b 00c0 03a1 lr $AR0, @0x03a1 - 042d 8100 clr $ACC0 - 042e 00de 0396 lr $AC0.M, @0x0396 - 0430 b100 tst $ACC0 - 0431 0295 0438 jz 0x0438 - 0433 1c7e mrr $AR3, $AC0.M - 0434 00d8 0397 lr $AX0.L, @0x0397 - 0436 02bf 03bd call 0x03bd - 0438 00de 0390 lr $AC0.M, @0x0390 - 043a 02a0 0002 andf $AC0.M, #0x0002 - 043c 02dd retlz - - 043d 0080 0398 lri $AR0, #0x0398 - 043f 009e 0008 lri $AC0.M, #0x0008 - 0441 00c1 03a1 lr $AR1, @0x03a1 - 0443 02bf 01c2 call 0x01c2 - 0445 02df ret -} - -void 0446_Unk() { - 0446 009f 0dc0 lri $AC1.M, #0x0dc0 - 0448 00ff 03a1 sr @0x03a1, $AC1.M - 044a 009f 03a8 lri $AC1.M, #0x03a8 - 044c 00ff 03a2 sr @0x03a2, $AC1.M - 044e 009f 03a4 lri $AC1.M, #0x03a4 - 0450 00ff 03a0 sr @0x03a0, $AC1.M - 0452 1104 047b bloopi #0x04, 0x047b - 0454 00c0 03a2 lr $AR0, @0x03a2 - 0456 0083 0390 lri $AR3, #0x0390 - 0458 009f 000e lri $AC1.M, #0x000e - 045a 02bf 03ac call 0x03ac - 045c 00da 0390 lr $AX0.H, @0x0390 - 045e 8600 tstaxh $AX0.H - 045f 0295 046c jz 0x046c - 0461 00df 03a1 lr $AC1.M, @0x03a1 - 0463 1c7f mrr $AR3, $AC1.M - 0464 0550 addis $ACC1, #0x50 - 0465 1c1f mrr $AR0, $AC1.M - 0466 009f 0006 lri $AC1.M, #0x0006 - 0468 02bf 03ac call 0x03ac - 046a 02bf 03fb call 0x03fb - 046c 00de 03a2 lr $AC0.M, @0x03a2 - 046e 0410 addis $ACC0, #0x10 - 046f 00fe 03a2 sr @0x03a2, $AC0.M - 0471 00de 03a1 lr $AC0.M, @0x03a1 - 0473 0460 addis $ACC0, #0x60 - 0474 00fe 03a1 sr @0x03a1, $AC0.M - 0476 00de 03a0 lr $AC0.M, @0x03a0 - 0478 7400 incm $AC0.M - 0479 00fe 03a0 sr @0x03a0, $AC0.M - 047b 0000 nop - 047c 02df ret -} - -void 047d_Unk() { - 047d 00c0 03a0 lr $AR0, @0x03a0 - 047f 181a lrr $AX0.H, @$AR0 - 0480 8100 clr $ACC0 - 0481 181e lrr $AC0.M, @$AR0 - 0482 00db 0391 lr $AX1.H, @0x0391 - 0484 7400 incm $AC0.M - 0485 d100 cmpar $ACC1, $AX0.H - 0486 0270 ifns - 0487 8100 clr $ACC0 - 0488 1b1e srri @$AR0, $AC0.M - 0489 00df 03a1 lr $AC1.M, @0x03a1 - 048b 009b 00a0 lri $AX1.H, #0x00a0 - 048d 0081 0393 lri $AR1, #0x0393 - 048f 18bc lrrd $AC0.L, @$AR1 - 0490 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0491 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0492 0080 0050 lri $AR0, #0x0050 - 0494 02bf 008b call 0x008b - 0496 02df ret -} - -void 0497_Unk() { - 0497 009f 0dc0 lri $AC1.M, #0x0dc0 - 0499 00ff 03a1 sr @0x03a1, $AC1.M - 049b 009f 03a8 lri $AC1.M, #0x03a8 - 049d 00ff 03a2 sr @0x03a2, $AC1.M - 049f 009f 03a4 lri $AC1.M, #0x03a4 - 04a1 00ff 03a0 sr @0x03a0, $AC1.M - 04a3 1104 04c3 bloopi #0x04, 0x04c3 - 04a5 00c0 03a2 lr $AR0, @0x03a2 - 04a7 0083 0390 lri $AR3, #0x0390 - 04a9 009f 000e lri $AC1.M, #0x000e - 04ab 02bf 03ac call 0x03ac - 04ad 00da 0390 lr $AX0.H, @0x0390 - 04af 8600 tstaxh $AX0.H - 04b0 0295 04b4 jz 0x04b4 - 04b2 02bf 047d call 0x047d - 04b4 00de 03a2 lr $AC0.M, @0x03a2 - 04b6 0410 addis $ACC0, #0x10 - 04b7 00fe 03a2 sr @0x03a2, $AC0.M - 04b9 00de 03a1 lr $AC0.M, @0x03a1 - 04bb 0460 addis $ACC0, #0x60 - 04bc 00fe 03a1 sr @0x03a1, $AC0.M - 04be 00de 03a0 lr $AC0.M, @0x03a0 - 04c0 7400 incm $AC0.M - 04c1 00fe 03a0 sr @0x03a0, $AC0.M - 04c3 0000 nop - 04c4 02df ret -} - -void 04c5_Unk() { - 04c5 0081 0386 lri $AR1, #0x0386 - 04c7 009f 03a8 lri $AC1.M, #0x03a8 - 04c9 0080 0040 lri $AR0, #0x0040 - 04cb 02bf 007c call 0x007c - 04cd 02df ret -} - -void 04ce_Increment32BitAddressAtAR0() { - 04ce 191e lrri $AC0.M, @$AR0 - 04cf 189c lrrd $AC0.L, @$AR0 - 04d0 4800 addax $ACC0, $AX0.L - 04d1 1b1e srri @$AR0, $AC0.M - 04d2 1b1c srri @$AR0, $AC0.L - 04d3 02df ret -} - -void 04d4_Unk() { - 04d4 8100 clr $ACC0 - 04d5 26fe lrs $AC0.M, @CMBH - 04d6 02c0 8000 andcf $AC0.M, #0x8000 - 04d8 029c 04d5 jlnz 0x04d5 - 04da 26ff lrs $AC0.M, @CMBL - 04db 02df ret -} - -void 04dc_Unk() { - 04dc 0080 0388 lri $AR0, #0x0388 - 04de 0081 0051 lri $AR1, #0x0051 - 04e0 173f callr $AR1 - 04e1 00de 0344 lr $AC0.M, @0x0344 - 04e3 00fe 0341 sr @0x0341, $AC0.M - 04e5 00de 0345 lr $AC0.M, @0x0345 - 04e7 00fe 038e sr @0x038e, $AC0.M - 04e9 173f callr $AR1 - 04ea 02df ret -} - -///////////////////////// -// -// -// 0x0341: Number of Frames to render ... - -// 0x034c + 0x034d: RAM address of the current PB block - -// 0x034e: Last Sync message for rendered frame -// 0x0354: PB loop counter - -// 0x0355: Current Frame - -// 0x0380: ??? -// 0x0381: ??? - -// 0x0388: RAM Address of Output Buffer1 -// 0x038a: RAM Address of Output Buffer2 -// -// 0x038f: Output Buffer Address (0x0520 most of the time) -// -// 0x03f8: *0x0433 -// 0x0520: Some kind of sample buffer - -// 0x0d00: Left mix buffer -// 0x0d60: Right mix buffer - -void 04eb_COMMAND_02() // sync frame - 04eb 02bf 04dc call 0x04dc - 04ed 009e 8000 lri $AC0.M, #0x8000 - 04ef 00dc 0341 lr $AC0.L, @0x0341 - 04f1 02bf 005a call 0x005a - 04f3 8100 clr $ACC0 - 04f4 00fe 0355 sr @0x0355, $AC0.M - 04f6 02bf 04c5 call 0x04c5 - 04f8 00de 0341 lr $AC0.M, @0x0341 - 04fa 007e 0698 bloop $AC0.M, 0x0698 - 04fc 02bf 03d9 call 0x03d9 - - 04fe 02bf 0446 call 0x0446 - 0500 02bf 0bb6 call 0x0bb6 - 0502 02bf 04d4 call 0x04d4 - 0504 8100 clr $ACC0 - 0505 00fe 0354 sr @0x0354, $AC0.M - 0507 00de 0342 lr $AC0.M, @0x0342 - 0509 007e 064c bloop $AC0.M, 0x064c - 050b 00d8 0354 lr $AX0.L, @0x0354 - 050d 009a 0180 lri $AX0.H, #0x0180 - 050f 8100 clr $ACC0 - 0510 00de 0380 lr $AC0.M, @0x0380 - 0512 00dc 0381 lr $AC0.L, @0x0381 - 0514 9000 mul $AX0.L, $AX0.H - 0515 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0516 00fe 034c sr @0x034c, $AC0.M - 0518 00fc 034d sr @0x034d, $AC0.L - 051a 02bf 0393 call 0x0393 - 051c 00da 0400 lr $AX0.H, @0x0400 - 051e 8600 tstaxh $AX0.H - 051f 0295 0647 jz 0x0647 - 0521 00da 0401 lr $AX0.H, @0x0401 - 0523 8600 tstaxh $AX0.H - 0524 0294 0647 jnz 0x0647 - 0526 00da 0433 lr $AX0.H, @0x0433 - 0528 00fa 03f8 sr @0x03f8, $AX0.H - 052a 00da 0406 lr $AX0.H, @0x0406 - 052c 8600 tstaxh $AX0.H - 052d 0294 0a5e jnz 0x0a5e - 052f 8100 clr $ACC0 - 0530 00de 0480 lr $AC0.M, @0x0480 - 0532 0609 cmpis $ACC0, #0x09 - 0533 0295 0540 jz 0x0540 - 0535 0620 cmpis $ACC0, #0x20 - 0536 0295 08cd jz 0x08cd - 0538 0621 cmpis $ACC0, #0x21 - 0539 0295 08d6 jz 0x08d6 - 053b 0608 cmpis $ACC0, #0x08 - 053c 0295 0a66 jz 0x0a66 - 053e 029f 0266 jmp 0x0266 - 0540 00d8 0402 lr $AX0.L, @0x0402 - 0542 8100 clr $ACC0 - 0543 8900 clr $ACC1 - 0544 00dc 0430 lr $AC0.L, @0x0430 - 0546 8d00 set15 - 0547 0099 0050 lri $AX1.L, #0x0050 - 0549 a000 mulx $AX0.L, $AX1.L - 054a a400 mulxac $AX0.L, $AX1.L, $ACC0 - 054b 1404 lsl $ACC0, #4 - 054c 8c00 clr15 - 054d 1ffe mrr $AC1.M, $AC0.M - 054e 0083 0580 lri $AR3, #0x0580 - 0550 00da 0481 lr $AX0.H, @0x0481 - 0552 8600 tstaxh $AX0.H - 0553 0295 0563 jz 0x0563 - 0555 00da 0489 lr $AX0.H, @0x0489 - 0557 8100 clr $ACC0 - 0558 00de 048b lr $AC0.M, @0x048b - 055a 3800 orr $AC0.M, $AX0.H - 055b 0240 000f andi $AC0.M, #0x000f - 055d 0295 0563 jz 0x0563 - 055f 02bf 07d5 call 0x07d5 - 0561 029f 0565 jmp 0x0565 - 0563 02bf 0966 call 0x0966 - 0565 0080 0580 lri $AR0, #0x0580 - 0567 0081 0520 lri $AR1, #0x0520 - 0569 0099 0000 lri $AX1.L, #0x0000 - 056b 02bf 0141 call 0x0141 - 056d 00da 04a8 lr $AX0.H, @0x04a8 - 056f 8600 tstaxh $AX0.H - 0570 0295 0576 jz 0x0576 - 0572 0080 0520 lri $AR0, #0x0520 - 0574 02bf 0b90 call 0x0b90 - 0576 009e 0520 lri $AC0.M, #0x0520 - 0578 00fe 038f sr @0x038f, $AC0.M - 057a 8900 clr $ACC1 - 057b 00df 0484 lr $AC1.M, @0x0484 - 057d 0340 001f andi $AC1.M, #0x001f - 057f b900 tst $ACC1 - 0580 0295 05a6 jz 0x05a6 - 0582 00de 038f lr $AC0.M, @0x038f - 0584 5c00 sub $ACC0, $AC1.L - 0585 00fe 038f sr @0x038f, $AC0.M - 0587 1c7e mrr $AR3, $AC0.M - 0588 0080 0440 lri $AR0, #0x0440 - 058a 05fe addis $ACC1, #0xfe - 058b 02bf 03ac call 0x03ac - 058d 0080 0490 lri $AR0, #0x0490 - 058f 00c1 038f lr $AR1, @0x038f - 0591 8900 clr $ACC1 - 0592 00df 0484 lr $AC1.M, @0x0484 - 0594 0340 001f andi $AC1.M, #0x001f - 0596 02bf 01e1 call 0x01e1 - 0598 00de 038f lr $AC0.M, @0x038f - 059a 0450 addis $ACC0, #0x50 - 059b 1c1e mrr $AR0, $AC0.M - 059c 0083 0440 lri $AR3, #0x0440 - 059e 8900 clr $ACC1 - 059f 00df 0484 lr $AC1.M, @0x0484 - 05a1 0340 001f andi $AC1.M, #0x001f - 05a3 05fe addis $ACC1, #0xfe - 05a4 02bf 03ac call 0x03ac - 05a6 00de 0484 lr $AC0.M, @0x0484 - 05a8 0240 0020 andi $AC0.M, #0x0020 - 05aa 0295 05c8 jz 0x05c8 - 05ac 0080 04a4 lri $AR0, #0x04a4 - 05ae 00c1 038f lr $AR1, @0x038f - 05b0 0082 0454 lri $AR2, #0x0454 - 05b2 0083 04a7 lri $AR3, #0x04a7 - 05b4 18fa lrrd $AX0.H, @$AR3 - 05b5 8600 tstaxh $AX0.H - 05b6 0294 05c6 jnz 0x05c6 - 05b8 18fa lrrd $AX0.H, @$AR3 - 05b9 8600 tstaxh $AX0.H - 05ba 0294 05c6 jnz 0x05c6 - 05bc 18fa lrrd $AX0.H, @$AR3 - 05bd 8600 tstaxh $AX0.H - 05be 0294 05c6 jnz 0x05c6 - 05c0 8100 clr $ACC0 - 05c1 18fe lrrd $AC0.M, @$AR3 - 05c2 0280 7fff cmpi $AC0.M, #0x7fff - 05c4 0295 05c8 jz 0x05c8 - 05c6 02bf 01fc call 0x01fc - 05c8 8100 clr $ACC0 - 05c9 1c9e mrr $IX0, $AC0.M - 05ca 1cde mrr $IX2, $AC0.M - 05cb 7400 incm $AC0.M - 05cc 1cfe mrr $IX3, $AC0.M - 05cd 8100 clr $ACC0 - 05ce 00de 0407 lr $AC0.M, @0x0407 - 05d0 b100 tst $ACC0 - 05d1 0295 05e0 jz 0x05e0 - 05d3 00c3 038f lr $AR3, @0x038f - 05d5 0007 dar $AR3 - 05d6 0080 0477 lri $AR0, #0x0477 - 05d8 0084 ffff lri $IX0, #0xffff - 05da 0087 ffff lri $IX3, #0xffff - 05dc 199a lrrn $AX0.H, @$AR0 - 05dd 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - 05de 005e loop $AC0.M - 05df 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - 05e0 00da 0485 lr $AX0.H, @0x0485 - 05e2 8600 tstaxh $AX0.H - 05e3 0295 05f6 jz 0x05f6 - 05e5 8900 clr $ACC1 - 05e6 0086 0005 lri $IX2, #0x0005 - 05e8 0082 040a lri $AR2, #0x040a - 05ea 1106 05ee bloopi #0x06, 0x05ee - 05ec 18de lrrd $AC0.M, @$AR2 - 05ed 147f lsr $ACC0, #-1 - 05ee 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M - 05ef b900 tst $ACC1 - 05f0 0294 05f6 jnz 0x05f6 - 05f2 009a 0001 lri $AX0.H, #0x0001 - 05f4 00fa 0401 sr @0x0401, $AX0.H - 05f6 8f00 set40 - 05f7 0086 0002 lri $IX2, #0x0002 - 05f9 0082 0408 lri $AR2, #0x0408 - 05fb 1106 0626 bloopi #0x06, 0x0626 - 05fd 8100 clr $ACC0 - 05fe 195e lrri $AC0.M, @$AR2 - 05ff 1200 sbclr #0x00 - 0600 b100 tst $ACC0 - 0601 0275 ifz - 0602 1300 sbset #0x00 - 0603 1c7e mrr $AR3, $AC0.M - 0604 195e lrri $AC0.M, @$AR2 - 0605 195f lrri $AC1.M, @$AR2 - 0606 5c00 sub $ACC0, $AC1.L - 0607 14fb asr $ACC0, #-5 - 0608 1f5e mrr $AX0.H, $AC0.M - 0609 1f1c mrr $AX0.L, $AC0.L - 060a 185e lrr $AC0.M, @$AR2 - 060b 0240 00ff andi $AC0.M, #0x00ff - 060d 1f7e mrr $AX1.H, $AC0.M - 060e 185e lrr $AC0.M, @$AR2 - 060f 1478 lsr $ACC0, #-8 - 0610 009c 0000 lri $AC0.L, #0x0000 - 0612 d100 cmpar $ACC1, $AX0.H - 0613 0295 061b jz 0x061b - 0615 185e lrr $AC0.M, @$AR2 - 0616 0272 ifg - 0617 7400 incm $AC0.M - 0618 0271 ifs - 0619 7800 decm $AC0.M - 061a 1a5e srr @$AR2, $AC0.M - 061b 0006 dar $AR2 - 061c 00de 038f lr $AC0.M, @0x038f - 061e 5600 subr $ACC0, $AX1.H - 061f 029d 0624 jlz 0x0624 - 0621 1c1e mrr $AR0, $AC0.M - 0622 02bf 011e call 0x011e - 0624 0000 nop - 0625 1b5f srri @$AR2, $AC1.M - 0626 000a iar $AR2 - 0627 8e00 set16 - 0628 8100 clr $ACC0 - 0629 00de 0407 lr $AC0.M, @0x0407 - 062b b100 tst $ACC0 - 062c 0295 063d jz 0x063d - 062e 00c3 038f lr $AR3, @0x038f - 0630 0087 004f lri $IX3, #0x004f - 0632 001f addarn $AR3, $IX3 - 0633 0080 0477 lri $AR0, #0x0477 - 0635 0084 ffff lri $IX0, #0xffff - 0637 0087 ffff lri $IX3, #0xffff - 0639 19fa lrrn $AX0.H, @$AR3 - 063a 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 063b 005e loop $AC0.M - 063c 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - 063d 00da 0406 lr $AX0.H, @0x0406 - 063f 8600 tstaxh $AX0.H - 0640 0294 0645 jnz 0x0645 - 0642 8100 clr $ACC0 - 0643 00fe 0404 sr @0x0404, $AC0.M - 0645 02bf 039c call 0x039c - - - 0647 00de 0354 lr $AC0.M, @0x0354 - 0649 7400 incm $AC0.M - 064a 00fe 0354 sr @0x0354, $AC0.M - 064c 0000 nop - 064d 16fb 0001 si @DIRQ, #0x0001 - 064f 02bf 0b11 call 0x0b11 - 0651 02bf 0b24 call 0x0b24 - 0653 02bf 0b7b call 0x0b7b - 0655 0080 09a0 lri $AR0, #0x09a0 - 0657 0083 0d00 lri $AR3, #0x0d00 - 0659 009f 0050 lri $AC1.M, #0x0050 - 065b 0098 5a82 lri $AX0.L, #0x5a82 - 065d 02bf 03bd call 0x03bd - 065f 0080 09a0 lri $AR0, #0x09a0 - 0661 0083 0d60 lri $AR3, #0x0d60 - 0663 009f 0050 lri $AC1.M, #0x0050 - 0665 02bf 03bd call 0x03bd - 0667 0083 0d00 lri $AR3, #0x0d00 - 0669 02bf 0130 call 0x0130 - 066b 0081 0388 lri $AR1, #0x0388 - 066d 009f 0d00 lri $AC1.M, #0x0d00 - 066f 0080 0050 lri $AR0, #0x0050 - 0671 02bf 0089 call 0x0089 - 0673 0080 0fa0 lri $AR0, #0x0fa0 - 0675 0083 0d60 lri $AR3, #0x0d60 - 0677 009f 0050 lri $AC1.M, #0x0050 - 0679 0098 8000 lri $AX0.L, #0x8000 - 067b 02bf 03bd call 0x03bd - 067d 0083 0d60 lri $AR3, #0x0d60 - 067f 02bf 0130 call 0x0130 - 0681 0081 038a lri $AR1, #0x038a - 0683 009f 0d60 lri $AC1.M, #0x0d60 - 0685 0080 0050 lri $AR0, #0x0050 - 0687 02bf 0089 call 0x0089 - 0689 009a 0000 lri $AX0.H, #0x0000 - 068b 0098 00a0 lri $AX0.L, #0x00a0 - 068d 0080 0388 lri $AR0, #0x0388 - 068f 02bf 04ce call 0x04ce - 0691 0080 038a lri $AR0, #0x038a - 0693 02bf 04ce call 0x04ce - 0695 02bf 0497 call 0x0497 - 0697 0000 nop - 0698 0000 nop - } - 0699 029f 0031 jmp 0x0031 - 069b 0080 0346 lri $AR0, #0x0346 - 069d 02bf 0051 call 0x0051 - 069f 02bf 0051 call 0x0051 - 06a1 0081 0346 lri $AR1, #0x0346 - 06a3 193e lrri $AC0.M, @$AR1 - 06a4 193c lrri $AC0.L, @$AR1 - 06a5 009f 0400 lri $AC1.M, #0x0400 - 06a7 00c0 0345 lr $AR0, @0x0345 - 06a9 02bf 007e call 0x007e - - 06ab 0081 0348 lri $AR1, #0x0348 - 06ad 193e lrri $AC0.M, @$AR1 - 06ae 193c lrri $AC0.L, @$AR1 - 06af 009f 0800 lri $AC1.M, #0x0800 - 06b1 00c0 0345 lr $AR0, @0x0345 - 06b3 02bf 007e call 0x007e - - 06b5 0081 0346 lri $AR1, #0x0346 - 06b7 193e lrri $AC0.M, @$AR1 - 06b8 193c lrri $AC0.L, @$AR1 - 06b9 009f 0800 lri $AC1.M, #0x0800 - 06bb 00c0 0345 lr $AR0, @0x0345 - 06bd 02bf 008b call 0x008b - - 06bf 0081 0348 lri $AR1, #0x0348 - 06c1 193e lrri $AC0.M, @$AR1 - 06c2 193c lrri $AC0.L, @$AR1 - 06c3 009f 0400 lri $AC1.M, #0x0400 - 06c5 00c0 0345 lr $AR0, @0x0345 - 06c7 02bf 008b call 0x008b - - 06c9 029f 0049 jmp 0x0049 -} - -void 06cb_Unk() { - 06cb 0080 0346 lri $AR0, #0x0346 - 06cd 02bf 0051 call 0x0051 - 06cf 02bf 0051 call 0x0051 - 06d1 0081 0346 lri $AR1, #0x0346 - 06d3 193e lrri $AC0.M, @$AR1 - 06d4 193c lrri $AC0.L, @$AR1 - 06d5 009f 0400 lri $AC1.M, #0x0400 - 06d7 00c0 0345 lr $AR0, @0x0345 - 06d9 02bf 007e call 0x007e - 06db 0081 0348 lri $AR1, #0x0348 - 06dd 193e lrri $AC0.M, @$AR1 - 06de 193c lrri $AC0.L, @$AR1 - 06df 009f 0400 lri $AC1.M, #0x0400 - 06e1 00c0 0345 lr $AR0, @0x0345 - 06e3 02bf 008b call 0x008b - 06e5 029f 0049 jmp 0x0049 -} - -void 06e7_Unk() { - 06e7 0080 0346 lri $AR0, #0x0346 - 06e9 02bf 0051 call 0x0051 - 06eb 02bf 0051 call 0x0051 - 06ed 0081 0346 lri $AR1, #0x0346 - 06ef 193e lrri $AC0.M, @$AR1 - 06f0 193c lrri $AC0.L, @$AR1 - 06f1 009f 0400 lri $AC1.M, #0x0400 - 06f3 00c0 0345 lr $AR0, @0x0345 - 06f5 02bf 00ae call 0x00ae - 06f7 0081 0348 lri $AR1, #0x0348 - 06f9 193e lrri $AC0.M, @$AR1 - 06fa 193c lrri $AC0.L, @$AR1 - 06fb 009f 0400 lri $AC1.M, #0x0400 - 06fd 00c0 0345 lr $AR0, @0x0345 - 06ff 02bf 008b call 0x008b - 0701 029f 0049 jmp 0x0049 - 0703 0080 0346 lri $AR0, #0x0346 - 0705 02bf 0051 call 0x0051 - 0707 02bf 0051 call 0x0051 - 0709 0081 0346 lri $AR1, #0x0346 - 070b 193e lrri $AC0.M, @$AR1 - 070c 193c lrri $AC0.L, @$AR1 - 070d 009f 0400 lri $AC1.M, #0x0400 - 070f 00c0 0344 lr $AR0, @0x0344 - 0711 02bf 007e call 0x007e - 0713 0081 0348 lri $AR1, #0x0348 - 0715 193e lrri $AC0.M, @$AR1 - 0716 193c lrri $AC0.L, @$AR1 - 0717 009f 0800 lri $AC1.M, #0x0800 - 0719 00c0 0344 lr $AR0, @0x0344 - 071b 02bf 007e call 0x007e - 071d 0080 0400 lri $AR0, #0x0400 - 071f 0083 0800 lri $AR3, #0x0800 - 0721 0084 0000 lri $IX0, #0x0000 - 0723 00da 0345 lr $AX0.H, @0x0345 - 0725 00df 0344 lr $AC1.M, @0x0344 - 0727 8f00 set40 - 0728 197b lrri $AX1.H, @$AR3 - 0729 b800 mulx $AX0.H, $AX1.H - 072a 197b lrri $AX1.H, @$AR3 - 072b 007f 0730 bloop $AC1.M, 0x0730 - 072d 199e lrrn $AC0.M, @$AR0 - 072e bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 072f 80b2 nx'sl : $AC0.M, $AX1.H - 0730 0000 nop - 0731 8e00 set16 - 0732 0081 0346 lri $AR1, #0x0346 - 0734 193e lrri $AC0.M, @$AR1 - 0735 193c lrri $AC0.L, @$AR1 - 0736 009f 0400 lri $AC1.M, #0x0400 - 0738 00c0 0344 lr $AR0, @0x0344 - 073a 02bf 008b call 0x008b - 073c 009e 8200 lri $AC0.M, #0x8200 - 073e 00dc 0344 lr $AC0.L, @0x0344 - 0740 02bf 005a call 0x005a - 0742 029f 0031 jmp 0x0031 - 0744 0080 0346 lri $AR0, #0x0346 - 0746 02bf 0051 call 0x0051 - 0748 0081 0346 lri $AR1, #0x0346 - 074a 009f 0400 lri $AC1.M, #0x0400 - 074c 00c0 0345 lr $AR0, @0x0345 - 074e 02bf 007c call 0x007c - 0750 02bf 8644 call 0x8644 - 0752 029f 0049 jmp 0x0049 -} - -void 0754_Unk() { - 0754 009e 0458 lri $AC0.M, #0x0458 - 0756 2231 lrs $AX0.H, @0x0031 - 0757 4400 addr $ACC0, $AX0.H - 0758 1c1e mrr $AR0, $AC0.M - 0759 1fda mrr $AC0.M, $AX0.H - 075a 3280 xorr'ls $AC0.M, $AX1.H : $AX0.L, $AC0.M - 075b 7400 incm $AC0.M - 075c 2232 lrs $AX0.H, @0x0032 - 075d 4400 addr $ACC0, $AX0.H - 075e 0090 0000 lri $AC0.H, #0x0000 - 0760 029f 0771 jmp 0x0771 - 0762 009e 0458 lri $AC0.M, #0x0458 - 0764 2231 lrs $AX0.H, @0x0031 - 0765 4400 addr $ACC0, $AX0.H - 0766 1c1e mrr $AR0, $AC0.M - 0767 1fda mrr $AC0.M, $AX0.H - 0768 3280 xorr'ls $AC0.M, $AX1.H : $AX0.L, $AC0.M - 0769 7400 incm $AC0.M - 076a 2232 lrs $AX0.H, @0x0032 - 076b 4400 addr $ACC0, $AX0.H - 076c 0090 0000 lri $AC0.H, #0x0000 - 076e 8200 cmp - 076f 0270 ifns - 0770 1fdf mrr $AC0.M, $AC1.M - 0771 1f3e mrr $AX1.L, $AC0.M - 0772 02bf 07c8 call 0x07c8 - 0774 2634 lrs $AC0.M, @0x0034 - 0775 2435 lrs $AC0.L, @0x0035 - 0776 7200 addaxl $ACC0, $AX1.L - 0777 5300 subr $ACC1, $AX1.L - 0778 2e34 srs @0x0034, $AC0.M - 0779 2c35 srs @0x0035, $AC0.L - 077a 02df ret -} - -void 077b_Unk() { - 077b 8100 clr $ACC0 - 077c 2234 lrs $AX0.H, @0x0034 - 077d 2035 lrs $AX0.L, @0x0035 - 077e 4800 addax $ACC0, $AX0.L - 077f 147c lsr $ACC0, #-4 - 0780 2e36 srs @0x0036, $AC0.M - 0781 2c37 srs @0x0037, $AC0.L - 0782 2380 lrs $AX1.H, @0xff80 - 0783 8d00 set15 - 0784 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - 0785 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0786 8c00 clr15 - 0787 2035 lrs $AX0.L, @0x0035 - 0788 f000 lsl16 $ACC0 - 0789 4e00 addp $ACC0 - 078a 238c lrs $AX1.H, @0xff8c - 078b 218d lrs $AX1.L, @0xff8d - 078c 4a00 addax $ACC0, $AX1.L - 078d 2e38 srs @0x0038, $AC0.M - 078e 2c39 srs @0x0039, $AC0.L - 078f 1fd8 mrr $AC0.M, $AX0.L - 0790 0240 000f andi $AC0.M, #0x000f - 0792 2e31 srs @0x0031, $AC0.M - 0793 268a lrs $AC0.M, @0xff8a - 0794 248b lrs $AC0.L, @0xff8b - 0795 5800 subax $ACC0, $AX0.L - 0796 2e3a srs @0x003a, $AC0.M - 0797 2c3b srs @0x003b, $AC0.L - 0798 02df ret -} - -void 0799_Unk() { - 0799 2236 lrs $AX0.H, @0x0036 - 079a 2037 lrs $AX0.L, @0x0037 - 079b 8100 clr $ACC0 - 079c 268a lrs $AC0.M, @0xff8a - 079d 248b lrs $AC0.L, @0xff8b - 079e 147c lsr $ACC0, #-4 - 079f 5800 subax $ACC0, $AX0.L - 07a0 0295 07a9 jz 0x07a9 - 07a2 02bf 081b call 0x081b - 07a4 0e10 lris $AC0.M, #0x10 - 07a5 2e32 srs @0x0032, $AC0.M - 07a6 8100 clr $ACC0 - 07a7 2e31 srs @0x0031, $AC0.M - 07a8 02df ret -} - -void 07a9_Unk() { - 07a9 228a lrs $AX0.H, @0xff8a - 07aa 208b lrs $AX0.L, @0xff8b - 07ab 8100 clr $ACC0 - 07ac 2634 lrs $AC0.M, @0x0034 - 07ad 2435 lrs $AC0.L, @0x0035 - 07ae 5800 subax $ACC0, $AX0.L - 07af 0290 07b6 jns 0x07b6 - 07b1 02bf 081b call 0x081b - 07b3 263b lrs $AC0.M, @0x003b - 07b4 029f 07a5 jmp 0x07a5 - 07b6 2688 lrs $AC0.M, @0xff88 - 07b7 2489 lrs $AC0.L, @0xff89 - 07b8 2e34 srs @0x0034, $AC0.M - 07b9 2c35 srs @0x0035, $AC0.L - 07ba 0e10 lris $AC0.M, #0x10 - 07bb 2e32 srs @0x0032, $AC0.M - 07bc 02bf 077b call 0x077b - 07be 2682 lrs $AC0.M, @0xff82 - 07bf 2e67 srs @0x0067, $AC0.M - 07c0 2683 lrs $AC0.M, @0xff83 - 07c1 2e66 srs @0x0066, $AC0.M - 07c2 8100 clr $ACC0 - 07c3 00fe 0362 sr @0x0362, $AC0.M - 07c5 02bf 081b call 0x081b - 07c7 02df ret -} - -void 07c8_Unk() { - 07c8 b100 tst $ACC0 - 07c9 02d5 retz - 07ca 04fe addis $ACC0, #0xfe - 07cb 1f1e mrr $AX0.L, $AC0.M - 07cc 191e lrri $AC0.M, @$AR0 - 07cd 0291 07d3 js 0x07d3 - 07cf 191a lrri $AX0.H, @$AR0 - 07d0 0058 loop $AX0.L - 07d1 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 07d2 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 07d3 1b7e srri @$AR3, $AC0.M - 07d4 02df ret -} - -void 07d5_Unk() { - 07d5 0092 0004 lri $CR, #0x0004 - 07d7 02bf 077b call 0x077b - 07d9 8100 clr $ACC0 - 07da 00fe 0362 sr @0x0362, $AC0.M - 07dc 8100 clr $ACC0 - 07dd 263a lrs $AC0.M, @0x003a - 07de 243b lrs $AC0.L, @0x003b - 07df b100 tst $ACC0 - 07e0 0294 07f2 jnz 0x07f2 - 07e2 02bf 0799 call 0x0799 - 07e4 2231 lrs $AX0.H, @0x0031 - 07e5 8600 tstaxh $AX0.H - 07e6 0294 07ef jnz 0x07ef - 07e8 02bf 0762 call 0x0762 - 07ea b900 tst $ACC1 - 07eb 0295 0818 jz 0x0818 - 07ed 02bf 077b call 0x077b - 07ef 8100 clr $ACC0 - 07f0 263a lrs $AC0.M, @0x003a - 07f1 243b lrs $AC0.L, @0x003b - 07f2 1f1f mrr $AX0.L, $AC1.M - 07f3 009a 0000 lri $AX0.H, #0x0000 - 07f5 5800 subax $ACC0, $AX0.L - 07f6 0290 0805 jns 0x0805 - 07f8 8100 clr $ACC0 - 07f9 2631 lrs $AC0.M, @0x0031 - 07fa b100 tst $ACC0 - 07fb 0294 07ff jnz 0x07ff - 07fd 02bf 0799 call 0x0799 - 07ff 02bf 0754 call 0x0754 - 0801 02bf 077b call 0x077b - 0803 029f 07dc jmp 0x07dc - 0805 8100 clr $ACC0 - 0806 2631 lrs $AC0.M, @0x0031 - 0807 b100 tst $ACC0 - 0808 0294 080c jnz 0x080c - 080a 02bf 0799 call 0x0799 - 080c 02bf 0762 call 0x0762 - 080e b900 tst $ACC1 - 080f 0295 0818 jz 0x0818 - 0811 02bf 077b call 0x077b - 0813 029f 0805 jmp 0x0805 - 0815 8100 clr $ACC0 - 0816 005f loop $AC1.M - 0817 1b7e srri @$AR3, $AC0.M - 0818 0092 00ff lri $CR, #0x00ff - 081a 02df ret -} - -void 081b_Unk() { - 081b 00ff 0360 sr @0x0360, $AC1.M - 081d 00da 0362 lr $AX0.H, @0x0362 - 081f 8600 tstaxh $AX0.H - 0820 0294 082d jnz 0x082d - 0822 0a01 lris $AX0.H, #0x01 - 0823 00fa 0362 sr @0x0362, $AX0.H - 0825 2638 lrs $AC0.M, @0x0038 - 0826 2439 lrs $AC0.L, @0x0039 - 0827 009f 0005 lri $AC1.M, #0x0005 - 0829 02bf 0103 call 0x0103 - 082b 0092 0004 lri $CR, #0x0004 - 082d 0080 ffd3 lri $AR0, #0xffd3 - 082f 0084 0000 lri $IX0, #0x0000 - 0831 199e lrrn $AC0.M, @$AR0 - 0832 1ffe mrr $AC1.M, $AC0.M - 0833 1401 lsl $ACC0, #1 - 0834 0240 001e andi $AC0.M, #0x001e - 0836 0200 0300 addi $AC0.M, #0x0300 - 0838 1c3e mrr $AR1, $AC0.M - 0839 157c lsr $ACC1, #-4 - 083a 0340 000f andi $AC1.M, #0x000f - 083c 0a11 lris $AX0.H, #0x11 - 083d 5500 subr $ACC1, $AX0.H - 083e 009a 00f0 lri $AX0.H, #0x00f0 - 0840 009b 000f lri $AX1.H, #0x000f - 0842 0082 0370 lri $AR2, #0x0370 - 0844 1998 lrrn $AX0.L, @$AR0 - 0845 6000 movr $ACC0, $AX0.L - 0846 1107 084d bloopi #0x07, 0x084d - 0848 3400 andr $AC0.M, $AX0.H - 0849 1408 lsl $ACC0, #8 - 084a 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 084b 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 084c 140c lsl $ACC0, #12 - 084d 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 084e 3400 andr $AC0.M, $AX0.H - 084f 1408 lsl $ACC0, #8 - 0850 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0851 3600 andr $AC0.M, $AX1.H - 0852 140c lsl $ACC0, #12 - 0853 1b5e srri @$AR2, $AC0.M - 0854 8f00 set40 - 0855 1f7f mrr $AX1.H, $AC1.M - 0856 2066 lrs $AX0.L, @0x0066 - 0857 2767 lrs $AC1.M, @0x0067 - 0858 193a lrri $AX0.H, @$AR1 - 0859 1939 lrri $AX1.L, @$AR1 - 085a 0080 0370 lri $AR0, #0x0370 - 085c 0081 0458 lri $AR1, #0x0458 - 085e 1c80 mrr $IX0, $AR0 - 085f a000 mulx $AX0.L, $AX1.L - 0860 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - 0861 1108 086a bloopi #0x08, 0x086a - 0863 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0864 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0865 1485 asl $ACC0, #5 - 0866 e831 maddc's $AC0.M, $AX1.L : @$AR1, $AC0.M - 0867 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 0868 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 0869 1585 asl $ACC1, #5 - 086a ea39 maddc's $AC1.M, $AX1.L : @$AR1, $AC1.M - 086b 8e00 set16 - 086c 8900 clr $ACC1 - 086d 00df 0360 lr $AC1.M, @0x0360 - 086f 02df ret -} - -void 0870_Unk() { - 0870 0080 0346 lri $AR0, #0x0346 - 0872 02bf 0051 call 0x0051 - 0874 8100 clr $ACC0 - 0875 0080 0458 lri $AR0, #0x0458 - 0877 1010 loopi #0x10 - 0878 1b1e srri @$AR0, $AC0.M - 0879 00fe 0482 sr @0x0482, $AC0.M - 087b 00fe 0483 sr @0x0483, $AC0.M - 087d 009c 0000 lri $AC0.L, #0x0000 - 087f 00fe 0434 sr @0x0434, $AC0.M - 0881 00fc 0435 sr @0x0435, $AC0.L - 0883 009e 0100 lri $AC0.M, #0x0100 - 0885 009c f100 lri $AC0.L, #0xf100 - 0887 00fe 048e sr @0x048e, $AC0.M - 0889 00fc 048f sr @0x048f, $AC0.L - 088b 009e 0040 lri $AC0.M, #0x0040 - 088d 009c 0000 lri $AC0.L, #0x0000 - 088f 00fe 048c sr @0x048c, $AC0.M - 0891 00fc 048d sr @0x048d, $AC0.L - 0893 009e 0009 lri $AC0.M, #0x0009 - 0895 00fe 0480 sr @0x0480, $AC0.M - 0897 009e 0010 lri $AC0.M, #0x0010 - 0899 00fe 0432 sr @0x0432, $AC0.M - 089b 009e 0100 lri $AC0.M, #0x0100 - 089d 009c f250 lri $AC0.L, #0xf250 - 089f 00fe 048a sr @0x048a, $AC0.M - 08a1 00fc 048b sr @0x048b, $AC0.L - 08a3 009c 0000 lri $AC0.L, #0x0000 - 08a5 00fe 0488 sr @0x0488, $AC0.M - 08a7 00fc 0489 sr @0x0489, $AC0.L - 08a9 009e 0001 lri $AC0.M, #0x0001 - 08ab 00fe 0481 sr @0x0481, $AC0.M - 08ad 8900 clr $ACC1 - 08ae 00ff 0401 sr @0x0401, $AC1.M - 08b0 1180 08ca bloopi #0x80, 0x08ca - 08b2 0083 0580 lri $AR3, #0x0580 - 08b4 009f 0100 lri $AC1.M, #0x0100 - 08b6 02bf 07d5 call 0x07d5 - 08b8 0081 0346 lri $AR1, #0x0346 - 08ba 193e lrri $AC0.M, @$AR1 - 08bb 18bc lrrd $AC0.L, @$AR1 - 08bc 009f 0580 lri $AC1.M, #0x0580 - 08be 0080 0100 lri $AR0, #0x0100 - 08c0 02bf 008b call 0x008b - 08c2 0081 0346 lri $AR1, #0x0346 - 08c4 193e lrri $AC0.M, @$AR1 - 08c5 18bc lrrd $AC0.L, @$AR1 - 08c6 0098 0200 lri $AX0.L, #0x0200 - 08c8 7000 addaxl $ACC0, $AX0.L - 08c9 1b3e srri @$AR1, $AC0.M - 08ca 1abc srrd @$AR1, $AC0.L - 08cb 029f 0049 jmp 0x0049 -} - -void 08cd_Unk() { - 08cd 8900 clr $ACC1 - 08ce 009f 0050 lri $AC1.M, #0x0050 - 08d0 0083 0520 lri $AR3, #0x0520 - 08d2 02bf 08e8 call 0x08e8 - 08d4 029f 056d jmp 0x056d -} - -void 08d6_Unk() { - 08d6 00d8 0402 lr $AX0.L, @0x0402 - 08d8 8100 clr $ACC0 - 08d9 8900 clr $ACC1 - 08da 00dc 0430 lr $AC0.L, @0x0430 - 08dc 009a 0050 lri $AX0.H, #0x0050 - 08de 9000 mul $AX0.L, $AX0.H - 08df 9400 mulac $AX0.L, $AX0.H, $ACC0 - 08e0 1404 lsl $ACC0, #4 - 08e1 1ffe mrr $AC1.M, $AC0.M - 08e2 0083 0580 lri $AR3, #0x0580 - 08e4 02bf 08e8 call 0x08e8 - 08e6 029f 0565 jmp 0x0565 -} - -void 08e8_Unk() { - 08e8 0092 0004 lri $CR, #0x0004 - 08ea 8100 clr $ACC0 - 08eb 263a lrs $AC0.M, @0x003a - 08ec 243b lrs $AC0.L, @0x003b - 08ed 1f1f mrr $AX0.L, $AC1.M - 08ee 009a 0000 lri $AX0.H, #0x0000 - 08f0 5800 subax $ACC0, $AX0.L - 08f1 0290 0908 jns 0x0908 - 08f3 8900 clr $ACC1 - 08f4 00c0 043b lr $AR0, @0x043b - 08f6 02bf 092d call 0x092d - 08f8 8100 clr $ACC0 - 08f9 1fd8 mrr $AC0.M, $AX0.L - 08fa 223b lrs $AX0.H, @0x003b - 08fb 5400 subr $ACC0, $AX0.H - 08fc 0007 dar $AR3 - 08fd 1979 lrri $AX1.L, @$AR3 - 08fe 005e loop $AC0.M - 08ff 1b79 srri @$AR3, $AX1.L - 0900 009f 0001 lri $AC1.M, #0x0001 - 0902 2f01 srs @0x0001, $AC1.M - 0903 8900 clr $ACC1 - 0904 2f3b srs @0x003b, $AC1.M - 0905 0092 00ff lri $CR, #0x00ff - 0907 02df ret -} - -void 0908_Unk() { - 0908 2e3a srs @0x003a, $AC0.M - 0909 2c3b srs @0x003b, $AC0.L - 090a 8100 clr $ACC0 - 090b 8900 clr $ACC1 - 090c 268a lrs $AC0.M, @0xff8a - 090d 2734 lrs $AC1.M, @0x0034 - 090e 5c00 sub $ACC0, $AC1.L - 090f 2e36 srs @0x0036, $AC0.M - 0910 5000 subr $ACC0, $AX0.L - 0911 0290 0927 jns 0x0927 - 0913 00c0 0436 lr $AR0, @0x0436 - 0915 02bf 092d call 0x092d - 0917 8100 clr $ACC0 - 0918 1fd8 mrr $AC0.M, $AX0.L - 0919 2236 lrs $AX0.H, @0x0036 - 091a 5400 subr $ACC0, $AX0.H - 091b 1c1e mrr $AR0, $AC0.M - 091c 8100 clr $ACC0 - 091d 2e34 srs @0x0034, $AC0.M - 091e 2688 lrs $AC0.M, @0xff88 - 091f 2489 lrs $AC0.L, @0xff89 - 0920 2e8c srs @0xff8c, $AC0.M - 0921 2c8d srs @0xff8d, $AC0.L - 0922 02bf 092d call 0x092d - 0924 0092 00ff lri $CR, #0x00ff - 0926 02df ret -} - -void 0927_Unk() { - 0927 1c18 mrr $AR0, $AX0.L - 0928 02bf 092d call 0x092d - 092a 0092 00ff lri $CR, #0x00ff - 092c 02df ret -} - -void 092d_Unk() { - 092d 8100 clr $ACC0 - 092e 1fc0 mrr $AC0.M, $AR0 - 092f b100 tst $ACC0 - 0930 02d5 retz - 0931 8900 clr $ACC1 - 0932 2734 lrs $AC1.M, @0x0034 - 0933 0340 0001 andi $AC1.M, #0x0001 - 0935 009b 0000 lri $AX1.H, #0x0000 - 0937 1f3f mrr $AX1.L, $AC1.M - 0938 268c lrs $AC0.M, @0xff8c - 0939 248d lrs $AC0.L, @0xff8d - 093a 8900 clr $ACC1 - 093b 2534 lrs $AC1.L, @0x0034 - 093c 1501 lsl $ACC1, #1 - 093d 4c00 add $ACC0, $AC1.L - 093e 5a00 subax $ACC0, $AX1.L - 093f 5a00 subax $ACC0, $AX1.L - 0940 1c20 mrr $AR1, $AR0 - 0941 1fe0 mrr $AC1.M, $AR0 - 0942 0502 addis $ACC1, #0x02 - 0943 1c1f mrr $AR0, $AC1.M - 0944 009f 0a00 lri $AC1.M, #0x0a00 - 0946 0092 00ff lri $CR, #0x00ff - 0948 02bf 007e call 0x007e - 094a 0092 0004 lri $CR, #0x0004 - 094c 2734 lrs $AC1.M, @0x0034 - 094d 1f61 mrr $AX1.H, $AR1 - 094e 4700 addr $ACC1, $AX1.H - 094f 2f34 srs @0x0034, $AC1.M - 0950 0080 0a00 lri $AR0, #0x0a00 - 0952 8900 clr $ACC1 - 0953 1ff9 mrr $AC1.M, $AX1.L - 0954 b900 tst $ACC1 - 0955 0274 ifnz - 0956 0008 iar $AR0 - 0957 8900 clr $ACC1 - 0958 1fe1 mrr $AC1.M, $AR1 - 0959 191e lrri $AC0.M, @$AR0 - 095a 0701 cmpis $ACC1, #0x01 - 095b 0293 0964 jle 0x0964 - 095d 191a lrri $AX0.H, @$AR0 - 095e 05fe addis $ACC1, #0xfe - 095f 005f loop $AC1.M - 0960 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0961 1b7e srri @$AR3, $AC0.M - 0962 1b7a srri @$AR3, $AX0.H - 0963 02df ret -} - -void 0964_Unk() { - 0964 1b7e srri @$AR3, $AC0.M - 0965 02df ret -} - -void 0966_Unk() { - 0966 0092 0004 lri $CR, #0x0004 - 0968 2201 lrs $AX0.H, @0x0001 - 0969 8600 tstaxh $AX0.H - 096a 0294 0997 jnz 0x0997 - 096c 2204 lrs $AX0.H, @0x0004 - 096d 8600 tstaxh $AX0.H - 096e 02b4 09eb callne 0x09eb - 0970 2231 lrs $AX0.H, @0x0031 - 0971 8600 tstaxh $AX0.H - 0972 0295 098c jz 0x098c - 0974 009e 0458 lri $AC0.M, #0x0458 - 0976 4400 addr $ACC0, $AX0.H - 0977 1c1e mrr $AR0, $AC0.M - 0978 0e10 lris $AC0.M, #0x10 - 0979 5400 subr $ACC0, $AX0.H - 097a 1f7e mrr $AX1.H, $AC0.M - 097b 02bf 07c8 call 0x07c8 - 097d d900 cmpar $ACC1, $AX1.H - 097e 0292 098b jg 0x098b - 0980 0295 0987 jz 0x0987 - 0982 2631 lrs $AC0.M, @0x0031 - 0983 4c00 add $ACC0, $AC1.L - 0984 2e31 srs @0x0031, $AC0.M - 0985 029f 09e8 jmp 0x09e8 - 0987 8100 clr $ACC0 - 0988 2e31 srs @0x0031, $AC0.M - 0989 029f 09e8 jmp 0x09e8 - 098b 5700 subr $ACC1, $AX1.H - 098c 8100 clr $ACC0 - 098d 2605 lrs $AC0.M, @0x0005 - 098e b100 tst $ACC0 - 098f 0295 09a8 jz 0x09a8 - 0991 8100 clr $ACC0 - 0992 2e05 srs @0x0005, $AC0.M - 0993 2281 lrs $AX0.H, @0xff81 - 0994 8600 tstaxh $AX0.H - 0995 0294 099e jnz 0x099e - 0997 8100 clr $ACC0 - 0998 005f loop $AC1.M - 0999 1b7e srri @$AR3, $AC0.M - 099a 7400 incm $AC0.M - 099b 2e01 srs @0x0001, $AC0.M - 099c 029f 09e8 jmp 0x09e8 - 099e 2688 lrs $AC0.M, @0xff88 - 099f 2489 lrs $AC0.L, @0xff89 - 09a0 2e34 srs @0x0034, $AC0.M - 09a1 2c35 srs @0x0035, $AC0.L - 09a2 02bf 09f0 call 0x09f0 - 09a4 2682 lrs $AC0.M, @0xff82 - 09a5 2483 lrs $AC0.L, @0xff83 - 09a6 2e67 srs @0x0067, $AC0.M - 09a7 2c66 srs @0x0066, $AC0.L - 09a8 00ff 0360 sr @0x0360, $AC1.M - 09aa 2638 lrs $AC0.M, @0x0038 - 09ab 2439 lrs $AC0.L, @0x0039 - 09ac 009f 0005 lri $AC1.M, #0x0005 - 09ae 02bf 0103 call 0x0103 - 09b0 0092 0004 lri $CR, #0x0004 - 09b2 8900 clr $ACC1 - 09b3 00ff 0362 sr @0x0362, $AC1.M - 09b5 00df 0360 lr $AC1.M, @0x0360 - 09b7 02bf 0a09 call 0x0a09 - 09b9 8100 clr $ACC0 - 09ba 00de 0362 lr $AC0.M, @0x0362 - 09bc 2280 lrs $AX0.H, @0xff80 - 09bd 4400 addr $ACC0, $AX0.H - 09be 00fe 0362 sr @0x0362, $AC0.M - 09c0 8100 clr $ACC0 - 09c1 263a lrs $AC0.M, @0x003a - 09c2 243b lrs $AC0.L, @0x003b - 09c3 0a01 lris $AX0.H, #0x01 - 09c4 0081 0405 lri $AR1, #0x0405 - 09c6 7a00 dec $ACC0 - 09c7 b100 tst $ACC0 - 09c8 0275 ifz - 09c9 1a3a srr @$AR1, $AX0.H - 09ca 2e3a srs @0x003a, $AC0.M - 09cb 2c3b srs @0x003b, $AC0.L - 09cc 0710 cmpis $ACC1, #0x10 - 09cd 0293 09d6 jle 0x09d6 - 09cf 05f0 addis $ACC1, #0xf0 - 09d0 2205 lrs $AX0.H, @0x0005 - 09d1 8600 tstaxh $AX0.H - 09d2 0294 0991 jnz 0x0991 - 09d4 029f 09b7 jmp 0x09b7 - 09d6 0275 ifz - 09d7 8900 clr $ACC1 - 09d8 2f31 srs @0x0031, $AC1.M - 09d9 1fc3 mrr $AC0.M, $AR3 - 09da 04f0 addis $ACC0, #0xf0 - 09db 1c1e mrr $AR0, $AC0.M - 09dc 0083 0458 lri $AR3, #0x0458 - 09de 0e10 lris $AC0.M, #0x10 - 09df 02bf 07c8 call 0x07c8 - 09e1 2638 lrs $AC0.M, @0x0038 - 09e2 2439 lrs $AC0.L, @0x0039 - 09e3 00d8 0362 lr $AX0.L, @0x0362 - 09e5 7000 addaxl $ACC0, $AX0.L - 09e6 2c39 srs @0x0039, $AC0.L - 09e7 2e38 srs @0x0038, $AC0.M - 09e8 0092 00ff lri $CR, #0x00ff - 09ea 02df ret -} - -void 09eb_Unk() { - 09eb 8100 clr $ACC0 - 09ec 2e34 srs @0x0034, $AC0.M - 09ed 2e35 srs @0x0035, $AC0.M - 09ee 2e66 srs @0x0066, $AC0.M - 09ef 2e67 srs @0x0067, $AC0.M - 09f0 2334 lrs $AX1.H, @0x0034 - 09f1 2135 lrs $AX1.L, @0x0035 - 09f2 268a lrs $AC0.M, @0xff8a - 09f3 248b lrs $AC0.L, @0xff8b - 09f4 5a00 subax $ACC0, $AX1.L - 09f5 147c lsr $ACC0, #-4 - 09f6 2e3a srs @0x003a, $AC0.M - 09f7 2c3b srs @0x003b, $AC0.L - 09f8 2634 lrs $AC0.M, @0x0034 - 09f9 2435 lrs $AC0.L, @0x0035 - 09fa 147c lsr $ACC0, #-4 - 09fb 2280 lrs $AX0.H, @0xff80 - 09fc c010 mulc'mv $AC0.M, $AX0.H : $AX0.L, $AC0.L - 09fd 9600 mulmv $AX0.L, $AX0.H, $ACC0 - 09fe f000 lsl16 $ACC0 - 09ff 4e00 addp $ACC0 - 0a00 238c lrs $AX1.H, @0xff8c - 0a01 218d lrs $AX1.L, @0xff8d - 0a02 4a00 addax $ACC0, $AX1.L - 0a03 2e38 srs @0x0038, $AC0.M - 0a04 2c39 srs @0x0039, $AC0.L - 0a05 8100 clr $ACC0 - 0a06 2e05 srs @0x0005, $AC0.M - 0a07 2e31 srs @0x0031, $AC0.M - 0a08 02df ret -} - - -void 0a09_Unk() { - 0a09 00ff 0360 sr @0x0360, $AC1.M - 0a0b 0080 ffd3 lri $AR0, #0xffd3 - 0a0d 0084 0000 lri $IX0, #0x0000 - 0a0f 199e lrrn $AC0.M, @$AR0 - 0a10 1ffe mrr $AC1.M, $AC0.M - 0a11 1401 lsl $ACC0, #1 - 0a12 0240 001e andi $AC0.M, #0x001e - 0a14 0200 0300 addi $AC0.M, #0x0300 - 0a16 1c3e mrr $AR1, $AC0.M - 0a17 157c lsr $ACC1, #-4 - 0a18 0340 000f andi $AC1.M, #0x000f - 0a1a 0a11 lris $AX0.H, #0x11 - 0a1b 5500 subr $ACC1, $AX0.H - 0a1c 009a 00f0 lri $AX0.H, #0x00f0 - 0a1e 009b 000f lri $AX1.H, #0x000f - 0a20 0082 0370 lri $AR2, #0x0370 - 0a22 1998 lrrn $AX0.L, @$AR0 - 0a23 6000 movr $ACC0, $AX0.L - 0a24 1107 0a2b bloopi #0x07, 0x0a2b - 0a26 3400 andr $AC0.M, $AX0.H - 0a27 1408 lsl $ACC0, #8 - 0a28 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0a29 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 0a2a 140c lsl $ACC0, #12 - 0a2b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0a2c 3400 andr $AC0.M, $AX0.H - 0a2d 1408 lsl $ACC0, #8 - 0a2e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0a2f 3600 andr $AC0.M, $AX1.H - 0a30 140c lsl $ACC0, #12 - 0a31 1b5e srri @$AR2, $AC0.M - 0a32 8f00 set40 - 0a33 1f7f mrr $AX1.H, $AC1.M - 0a34 2066 lrs $AX0.L, @0x0066 - 0a35 2767 lrs $AC1.M, @0x0067 - 0a36 193a lrri $AX0.H, @$AR1 - 0a37 1939 lrri $AX1.L, @$AR1 - 0a38 0080 0370 lri $AR0, #0x0370 - 0a3a 1c80 mrr $IX0, $AR0 - 0a3b a000 mulx $AX0.L, $AX1.L - 0a3c ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - 0a3d 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0a3e a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0a3f 1485 asl $ACC0, #5 - 0a40 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 0a41 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 0a42 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 0a43 1585 asl $ACC1, #5 - 0a44 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - 0a45 1106 0a4e bloopi #0x06, 0x0a4e - 0a47 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0a48 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0a49 1485 asl $ACC0, #5 - 0a4a e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 0a4b 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 0a4c a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 0a4d 1585 asl $ACC1, #5 - 0a4e ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - 0a4f 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0a50 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0a51 1485 asl $ACC0, #5 - 0a52 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 0a53 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 0a54 a500 mulxac $AX0.L, $AX1.L, $ACC1 - 0a55 1585 asl $ACC1, #5 - 0a56 1b7f srri @$AR3, $AC1.M - 0a57 2e66 srs @0x0066, $AC0.M - 0a58 2f67 srs @0x0067, $AC1.M - 0a59 8e00 set16 - 0a5a 8900 clr $ACC1 - 0a5b 00df 0360 lr $AC1.M, @0x0360 - 0a5d 02df ret -} - -void 0a5e_Unk() { - 0a5e 0083 0520 lri $AR3, #0x0520 - 0a60 00de 0433 lr $AC0.M, @0x0433 - 0a62 1050 loopi #0x50 - 0a63 1b7e srri @$AR3, $AC0.M - 0a64 029f 056d jmp 0x056d - 0a66 0092 0004 lri $CR, #0x0004 - 0a68 2002 lrs $AX0.L, @0x0002 - 0a69 8100 clr $ACC0 - 0a6a 8900 clr $ACC1 - 0a6b 2430 lrs $AC0.L, @0x0030 - 0a6c 8d00 set15 - 0a6d 0099 0050 lri $AX1.L, #0x0050 - 0a6f a000 mulx $AX0.L, $AX1.L - 0a70 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0a71 1404 lsl $ACC0, #4 - 0a72 8c00 clr15 - 0a73 1ffe mrr $AC1.M, $AC0.M - 0a74 0083 0580 lri $AR3, #0x0580 - 0a76 2201 lrs $AX0.H, @0x0001 - 0a77 8600 tstaxh $AX0.H - 0a78 0294 0a89 jnz 0x0a89 - 0a7a 2204 lrs $AX0.H, @0x0004 - 0a7b 8600 tstaxh $AX0.H - 0a7c 02b4 0ad2 callne 0x0ad2 - 0a7e 8100 clr $ACC0 - 0a7f 2605 lrs $AC0.M, @0x0005 - 0a80 b100 tst $ACC0 - 0a81 0295 0a96 jz 0x0a96 - 0a83 8100 clr $ACC0 - 0a84 2e05 srs @0x0005, $AC0.M - 0a85 2281 lrs $AX0.H, @0xff81 - 0a86 8600 tstaxh $AX0.H - 0a87 0294 0a90 jnz 0x0a90 - 0a89 8100 clr $ACC0 - 0a8a 005f loop $AC1.M - 0a8b 1b7e srri @$AR3, $AC0.M - 0a8c 7400 incm $AC0.M - 0a8d 2e01 srs @0x0001, $AC0.M - 0a8e 029f 0ace jmp 0x0ace - 0a90 2688 lrs $AC0.M, @0xff88 - 0a91 2489 lrs $AC0.L, @0xff89 - 0a92 2e34 srs @0x0034, $AC0.M - 0a93 2c35 srs @0x0035, $AC0.L - 0a94 02bf 0ad5 call 0x0ad5 - 0a96 00ff 0360 sr @0x0360, $AC1.M - 0a98 2638 lrs $AC0.M, @0x0038 - 0a99 2439 lrs $AC0.L, @0x0039 - 0a9a 009f 0005 lri $AC1.M, #0x0005 - 0a9c 02bf 0103 call 0x0103 - 0a9e 0092 0004 lri $CR, #0x0004 - 0aa0 00df 0360 lr $AC1.M, @0x0360 - 0aa2 8100 clr $ACC0 - 0aa3 263a lrs $AC0.M, @0x003a - 0aa4 b100 tst $ACC0 - 0aa5 0294 0ab5 jnz 0x0ab5 - 0aa7 263b lrs $AC0.M, @0x003b - 0aa8 5c00 sub $ACC0, $AC1.L - 0aa9 0290 0ab5 jns 0x0ab5 - 0aab 223b lrs $AX0.H, @0x003b - 0aac 02bf 0ae6 call 0x0ae6 - 0aae 5500 subr $ACC1, $AX0.H - 0aaf 009a 0001 lri $AX0.H, #0x0001 - 0ab1 00fa 0405 sr @0x0405, $AX0.H - 0ab3 029f 0a83 jmp 0x0a83 - 0ab5 1f5f mrr $AX0.H, $AC1.M - 0ab6 02bf 0ae6 call 0x0ae6 - 0ab8 00fa 0362 sr @0x0362, $AX0.H - 0aba 8100 clr $ACC0 - 0abb 263a lrs $AC0.M, @0x003a - 0abc 243b lrs $AC0.L, @0x003b - 0abd 1570 lsr $ACC1, #-16 - 0abe 0a01 lris $AX0.H, #0x01 - 0abf 0081 0405 lri $AR1, #0x0405 - 0ac1 5c00 sub $ACC0, $AC1.L - 0ac2 b100 tst $ACC0 - 0ac3 0275 ifz - 0ac4 1a3a srr @$AR1, $AX0.H - 0ac5 2e3a srs @0x003a, $AC0.M - 0ac6 2c3b srs @0x003b, $AC0.L - 0ac7 2638 lrs $AC0.M, @0x0038 - 0ac8 2439 lrs $AC0.L, @0x0039 - 0ac9 00d8 0362 lr $AX0.L, @0x0362 - 0acb 7000 addaxl $ACC0, $AX0.L - 0acc 2c39 srs @0x0039, $AC0.L - 0acd 2e38 srs @0x0038, $AC0.M - 0ace 0092 00ff lri $CR, #0x00ff - 0ad0 029f 0565 jmp 0x0565 - 0ad2 8100 clr $ACC0 - 0ad3 2e34 srs @0x0034, $AC0.M - 0ad4 2e35 srs @0x0035, $AC0.M - 0ad5 2334 lrs $AX1.H, @0x0034 - 0ad6 2135 lrs $AX1.L, @0x0035 - 0ad7 268a lrs $AC0.M, @0xff8a - 0ad8 248b lrs $AC0.L, @0xff8b - 0ad9 5a00 subax $ACC0, $AX1.L - 0ada 2e3a srs @0x003a, $AC0.M - 0adb 2c3b srs @0x003b, $AC0.L - 0adc 2634 lrs $AC0.M, @0x0034 - 0add 2435 lrs $AC0.L, @0x0035 - 0ade 238c lrs $AX1.H, @0xff8c - 0adf 218d lrs $AX1.L, @0xff8d - 0ae0 4a00 addax $ACC0, $AX1.L - 0ae1 2e38 srs @0x0038, $AC0.M - 0ae2 2c39 srs @0x0039, $AC0.L - 0ae3 8100 clr $ACC0 - 0ae4 2e05 srs @0x0005, $AC0.M - 0ae5 02df ret -} - -void 0ae6_ConvSigned8bitToSigned16bit() { - 0ae6 0080 ffd3 lri $AR0, #0xffd3 - 0ae8 0084 0000 lri $IX0, #0x0000 - 0aea 007a 0aee bloop $AX0.H, 0x0aee - 0aec 199e lrrn $AC0.M, @$AR0 - 0aed 1488 asl $ACC0, #8 - 0aee 1b7e srri @$AR3, $AC0.M - 0aef 02df ret -} - -void 0af0_Unk() { - 0af0 009e ffff lri $AC0.M, #0xffff - 0af2 00fe 03f2 sr @0x03f2, $AC0.M - 0af4 8100 clr $ACC0 - 0af5 00fe 03f0 sr @0x03f0, $AC0.M - 0af7 00fe 03f6 sr @0x03f6, $AC0.M - 0af9 009e 0100 lri $AC0.M, #0x0100 - 0afb 00fe 03f7 sr @0x03f7, $AC0.M - 0afd 00da 03f7 lr $AX0.H, @0x03f7 - 0aff 009e 8000 lri $AC0.M, #0x8000 - 0b01 5400 subr $ACC0, $AX0.H - 0b02 00fe 03f5 sr @0x03f5, $AC0.M - 0b04 009e 0030 lri $AC0.M, #0x0030 - 0b06 00fe 03f3 sr @0x03f3, $AC0.M - 0b08 009e 0010 lri $AC0.M, #0x0010 - 0b0a 00fe 03f4 sr @0x03f4, $AC0.M - 0b0c 009e 0096 lri $AC0.M, #0x0096 - 0b0e 00fe 03f1 sr @0x03f1, $AC0.M - 0b10 02df ret -} - -void 0b11_Unk() { - 0b11 0080 0b00 lri $AR0, #0x0b00 - 0b13 8100 clr $ACC0 - 0b14 00de 03f0 lr $AC0.M, @0x03f0 - 0b16 8900 clr $ACC1 - 0b17 b100 tst $ACC0 - 0b18 0275 ifz - 0b19 0550 addis $ACC1, #0x50 - 0b1a 00ff 03f0 sr @0x03f0, $AC1.M - 0b1c 0200 0b60 addi $AC0.M, #0x0b60 - 0b1e 1c7e mrr $AR3, $AC0.M - 0b1f 009f 004e lri $AC1.M, #0x004e - 0b21 02bf 03ac call 0x03ac - 0b23 02df ret -} - -void 0b24_Unk() { - - 0b24 00de 03f1 lr $AC0.M, @0x03f1 - 0b26 0200 0b60 addi $AC0.M, #0x0b60 - 0b28 1c7e mrr $AR3, $AC0.M - 0b29 8100 clr $ACC0 - 0b2a 8900 clr $ACC1 - 0b2b 009f 00a0 lri $AC1.M, #0x00a0 - 0b2d 00de 03f1 lr $AC0.M, @0x03f1 - 0b2f 5d00 sub $ACC1, $AC0.L - 0b30 009e 0050 lri $AC0.M, #0x0050 - 0b32 0750 cmpis $ACC1, #0x50 - 0b33 0270 ifns - 0b34 5d00 sub $ACC1, $AC0.L - 0b35 00da 03f2 lr $AX0.H, @0x03f2 - 0b37 8600 tstaxh $AX0.H - 0b38 0290 0b56 jns 0x0b56 - 0b3a 00de 03f3 lr $AC0.M, @0x03f3 - 0b3c 5c00 sub $ACC0, $AC1.L - 0b3d 0293 0b41 jle 0x0b41 - 0b3f 029f 0b5b jmp 0x0b5b - 0b41 00db 03f7 lr $AX1.H, @0x03f7 - 0b43 009e 8000 lri $AC0.M, #0x8000 - 0b45 4600 addr $ACC0, $AX1.H - 0b46 029f 0b4d jmp 0x0b4d - 0b48 00db 03f7 lr $AX1.H, @0x03f7 - 0b4a 009e 8000 lri $AC0.M, #0x8000 - 0b4c 5600 subr $ACC0, $AX1.H - 0b4d 00fe 03f5 sr @0x03f5, $AC0.M - 0b4f 1fda mrr $AC0.M, $AX0.H - 0b50 7c00 neg $ACC0 - 0b51 1f5e mrr $AX0.H, $AC0.M - 0b52 00fe 03f2 sr @0x03f2, $AC0.M - 0b54 029f 0b5b jmp 0x0b5b - 0b56 00de 03f4 lr $AC0.M, @0x03f4 - 0b58 5d00 sub $ACC1, $AC0.L - 0b59 0293 0b48 jle 0x0b48 - 0b5b 8900 clr $ACC1 - 0b5c 00dd 03f5 lr $AC1.L, @0x03f5 - 0b5e 1501 lsl $ACC1, #1 - 0b5f 8100 clr $ACC0 - 0b60 00dc 03f6 lr $AC0.L, @0x03f6 - 0b62 008b 009f lri $WR3, #0x009f - 0b64 0080 0b00 lri $AR0, #0x0b00 - 0b66 0099 0000 lri $AX1.L, #0x0000 - 0b68 1150 0b6f bloopi #0x50, 0x0b6f - 0b6a 1878 lrr $AX0.L, @$AR3 - 0b6b 4c00 add $ACC0, $AC1.L - 0b6c 1cfe mrr $IX3, $AC0.M - 0b6d 001f addarn $AR3, $IX3 - 0b6e 1fd9 mrr $AC0.M, $AX1.L - 0b6f 1b18 srri @$AR0, $AX0.L - 0b70 009f 0b60 lri $AC1.M, #0x0b60 - 0b72 1fc3 mrr $AC0.M, $AR3 - 0b73 5c00 sub $ACC0, $AC1.L - 0b74 00fe 03f1 sr @0x03f1, $AC0.M - 0b76 00fc 03f6 sr @0x03f6, $AC0.L - 0b78 008b ffff lri $WR3, #0xffff - 0b7a 02df ret -} - -void 0b7b_Unk() { - 0b7b 009f 0050 lri $AC1.M, #0x0050 - 0b7d 0080 0b00 lri $AR0, #0x0b00 - 0b7f 0083 0d60 lri $AR3, #0x0d60 - 0b81 0098 3fff lri $AX0.L, #0x3fff - 0b83 02bf 03bd call 0x03bd - 0b85 009f 0050 lri $AC1.M, #0x0050 - 0b87 0080 0b00 lri $AR0, #0x0b00 - 0b89 0083 0d00 lri $AR3, #0x0d00 - 0b8b 0098 3fff lri $AX0.L, #0x3fff - 0b8d 02bf 03bd call 0x03bd - 0b8f 02df ret -} - -void 0b90_Unk() { - 0b90 8a00 m2 - 0b91 8f00 set40 - 0b92 8100 clr $ACC0 - 0b93 00de 0404 lr $AC0.M, @0x0404 - 0b95 b100 tst $ACC0 - 0b96 0295 0b9d jz 0x0b9d - 0b98 8100 clr $ACC0 - 0b99 00fe 0478 sr @0x0478, $AC0.M - 0b9b 00fe 0479 sr @0x0479, $AC0.M - 0b9d 00df 0479 lr $AC1.M, @0x0479 - 0b9f 00db 0478 lr $AX1.H, @0x0478 - 0ba1 0099 0000 lri $AX1.L, #0x0000 - 0ba3 0084 0000 lri $IX0, #0x0000 - 0ba5 1150 0bae bloopi #0x50, 0x0bae - 0ba7 199e lrrn $AC0.M, @$AR0 - 0ba8 5c7c sub'ln $ACC0, $AC1.L : $AC1.M, @$AR0 - 0ba9 c000 mulc $AC0.M, $AX0.H - 0baa 6e00 movp $ACC0 - 0bab 1488 asl $ACC0, #8 - 0bac 4a00 addax $ACC0, $AX1.L - 0bad 1b1e srri @$AR0, $AC0.M - 0bae 1f7e mrr $AX1.H, $AC0.M - 0baf 00fb 0478 sr @0x0478, $AX1.H - 0bb1 00ff 0479 sr @0x0479, $AC1.M - 0bb3 8b00 m0 - 0bb4 8e00 set16 - 0bb5 02df ret -} - -void 0bb6_Unk() { - 0bb6 0080 01be lri $AR0, #0x01be - 0bb8 1918 lrri $AX0.L, @$AR0 - 0bb9 191a lrri $AX0.H, @$AR0 - 0bba 0080 0180 lri $AR0, #0x0180 - 0bbc 0083 0180 lri $AR3, #0x0180 - 0bbe 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0bbf 1ffe mrr $AC1.M, $AC0.M - 0bc0 1120 0bc7 bloopi #0x20, 0x0bc7 - 0bc2 7c00 neg $ACC0 - 0bc3 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0bc4 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0bc5 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 0bc6 1501 lsl $ACC1, #1 - 0bc7 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - 0bc8 0080 01fe lri $AR0, #0x01fe - 0bca 191a lrri $AX0.H, @$AR0 - 0bcb 1918 lrri $AX0.L, @$AR0 - 0bcc 0080 01c0 lri $AR0, #0x01c0 - 0bce 0083 01c0 lri $AR3, #0x01c0 - 0bd0 1ff8 mrr $AC1.M, $AX0.L - 0bd1 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0bd2 f800 addpaxz $ACC0, $AX0.H - 0bd3 0240 01ff andi $AC0.M, #0x01ff - 0bd5 0260 2000 ori $AC0.M, #0x2000 - 0bd7 02bf 0bda call 0x0bda - 0bd9 02df ret -} - -void 0bda_Unk() { - 0bda b900 tst $ACC1 - 0bdb 0272 ifg - 0bdc 7c00 neg $ACC0 - 0bdd 1f7e mrr $AX1.H, $AC0.M - 0bde 4700 addr $ACC1, $AX1.H - 0bdf 1110 0be4 bloopi #0x10, 0x0be4 - 0be1 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0be2 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0be3 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0be4 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0be5 02df ret -} - -void 0be6_Nop() { - 0be6 0000 nop - 0be7 0000 nop - 0be8 0000 nop - 0be9 0000 nop - 0bea 0000 nop - 0beb 0000 nop - 0bec 0000 nop - 0bed 0000 nop - 0bee 0000 nop - 0bef 0000 nop +// This ucode is interesting because it is very similar to the Zelda ucode, +// but does not make use of exceptions. Hence, it might be possible to get +// it running okay even without understanding how the exceptions work. + +// CRC: 379F1139 +// ector-CRC: 42f64ac4 + +// Notable differences: +// +// Luigi init (not using mail exception): +// sbset #0x02 +// sbset #0x03 +// sbclr #0x04 +// sbset #0x05 +// sbset #0x06 +// set16 +// clr15 +// m0 + +// Zelda init (using mail exception): +// sbclr #0x02 ! +// sbclr #0x03 ! +// sbclr #0x04 +// sbset #0x05 (late, just when it's time to receive messages) +// sbset #0x06 +// set16 +// clr15 +// m0 + +// AX1 init (not using mail exception, same as Luigi init): +// sbset #0x02 +// sbset #0x03 +// sbclr #0x04 +// sbset #0x05 +// sbset #0x06 +// set16 +// clr15 +// m0 + + + +// exception vectors +0000 029f 0010 jmp 0x0010 +0002 0000 nop +0003 0000 nop +0004 02ff rti +0005 0000 nop +0006 02ff rti +0007 0000 nop +0008 02ff rti +0009 0000 nop +000a 02ff rti +000b 0000 nop +000c 02ff rti +000d 0000 nop +000e 02ff rti // This is Zelda's message exception. +000f 0000 nop + +// Reset vector +void 0010_ResetVector() { + // Compare to 0057 in the Zelda ucode + 0010 1302 sbset #0x02 + 0011 1303 sbset #0x03 + 0012 1204 sbclr #0x04 + 0013 1305 sbset #0x05 + 0014 1306 sbset #0x06 + 0015 8e00 set16 + 0016 8c00 clr15 + 0017 8b00 m0 + 0018 009e ffff lri $AC0.M, #0xffff + 001a 1d1e mrr $WR0, $AC0.M + 001b 1d3e mrr $WR1, $AC0.M + 001c 1d5e mrr $WR2, $AC0.M + 001d 1d7e mrr $WR3, $AC0.M + 001e 0092 00ff lri $CR, #0x00ff + 0020 8100 clr $ACC0 + // Clear memory + 0021 009f 1000 lri $AC1.M, #0x1000 + 0023 0080 0000 lri $AR0, #0x0000 + 0025 005f loop $AC1.M + 0026 1b1e srri @$AR0, $AC0.M + 0027 26ff lrs $AC0.M, @CMBL + 0028 16fc 8888 si @DMBH, #0x8888 + 002a 16fd 1111 si @DMBL, #0x1111 + 002c 26fc lrs $AC0.M, @DMBH + 002d 02a0 8000 andf $AC0.M, #0x8000 + 002f 029c 002c jlnz 0x002c + + while (true) { + 0031 8100 clr $ACC0 + 0032 8900 clr $ACC1 + 0033 26fe lrs $AC0.M, @CMBH + 0034 02c0 8000 andcf $AC0.M, #0x8000 + 0036 029c 0031 jlnz 0x0031 + 0038 27ff lrs $AC1.M, @CMBL + 0039 00ff 0345 sr @0x0345, $AC1.M + 003b 1ffe mrr $AC1.M, $AC0.M + 003c 0340 00ff andi $AC1.M, #0x00ff + 003e 00ff 0344 sr @0x0344, $AC1.M + 0040 1479 lsr $ACC0, #-7 + + // Jump table below + 0041 0240 007e andi $AC0.M, #0x007e + 0043 0200 0062 addi $AC0.M, #0x0062 + 0045 00fe 0343 sr @0x0343, $AC0.M + 0047 1c1e mrr $AR0, $AC0.M + 0048 170f jmpr $AR0 + 0049 009e 8000 lri $AC0.M, #0x8000 + 004b 00dc 0343 lr $AC0.L, @0x0343 + 004d 02bf 005a call 0x005a + 004f 029f 0031 jmp 0x0031 + } +} + +void 0051_Unk_Mail() { + 0051 26fe lrs $AC0.M, @CMBH + 0052 02c0 8000 andcf $AC0.M, #0x8000 + 0054 029c 0051 jlnz 0x0051 + 0056 24ff lrs $AC0.L, @CMBL + 0057 1b1e srri @$AR0, $AC0.M + 0058 1b1c srri @$AR0, $AC0.L + 0059 02df ret +} + +void 005a_Unk_Mail() { + 005a 2efc srs @DMBH, $AC0.M + 005b 2cfd srs @DMBL, $AC0.L + 005c 26fc lrs $AC0.M, @DMBH + 005d 02a0 8000 andf $AC0.M, #0x8000 + 005f 029c 005c jlnz 0x005c + 0061 02df ret +} + +// Just a jump table. +0062 029f 0049 jmp 0x0049 +0064 029f 0349 jmp 0x0349 // Command 01 +0066 029f 04eb jmp 0x04eb // Command 02 +0068 029f 0031 jmp 0x0031 +006a 029f 00df jmp 0x00df +006c 029f 00f1 jmp 0x00f1 +006e 029f 06e7 jmp 0x06e7 +0070 029f 069b jmp 0x069b +0072 029f 0703 jmp 0x0703 +0074 029f 06cb jmp 0x06cb +0076 029f 0870 jmp 0x0870 +0078 029f 0744 jmp 0x0744 +007a 029f 0238 jmp 0x0238 + + +void 007c_Unk() { + 007c 193e lrri $AC0.M, @$AR1 + 007d 193c lrri $AC0.L, @$AR1 + 007e 2fcd srs @DSPA, $AC1.M + 007f 0f00 lris $AC1.M, #0x00 + 0080 2fc9 srs @DSCR, $AC1.M + 0081 2ece srs @DSMAH, $AC0.M + 0082 2ccf srs @DSMAL, $AC0.L + 0083 1fe0 mrr $AC1.M, $AR0 + 0084 1501 lsl $ACC1, #1 + 0085 2fcb srs @DSBL, $AC1.M + 0086 02bf 008f call 0x008f + 0088 02df ret +} + + +void 0089_Unk() { + 0089 193e lrri $AC0.M, @$AR1 + 008a 193c lrri $AC0.L, @$AR1 + 008b 2fcd srs @DSPA, $AC1.M + 008c 0f01 lris $AC1.M, #0x01 + 008d 029f 0080 jmp 0x0080 + 008f 26c9 lrs $AC0.M, @DSCR + 0090 02a0 0004 andf $AC0.M, #0x0004 + 0092 029c 008f jlnz 0x008f + 0094 02df ret +} + +void 0095_Unk() { + 0095 193e lrri $AC0.M, @$AR1 + 0096 193c lrri $AC0.L, @$AR1 + 0097 00ff ffcd sr @DSPA, $AC1.M + 0099 0f00 lris $AC1.M, #0x00 + 009a 00ff ffc9 sr @DSCR, $AC1.M + 009c 00fe ffce sr @DSMAH, $AC0.M + 009e 00fc ffcf sr @DSMAL, $AC0.L + 00a0 1fe0 mrr $AC1.M, $AR0 + 00a1 1501 lsl $ACC1, #1 + 00a2 00ff ffcb sr @DSBL, $AC1.M + 00a4 02df ret +} + +void 00a5_Unk() { + 00a5 00de ffc9 lr $AC0.M, @DSCR + 00a7 02a0 0004 andf $AC0.M, #0x0004 + 00a9 029c 00a5 jlnz 0x00a5 + 00ab 02df ret +} + +void 00ac_ReadBlockFromAccelerator() { + 00ac 193e lrri $AC0.M, @$AR1 + 00ad 193c lrri $AC0.L, @$AR1 + 00ae 0240 7fff andi $AC0.M, #0x7fff + // 00b0 02bf 00ba call 0x00ba + 00ba_SetupAccelerator() + + 00b2 007a 00b8 bloop $AX0.H, 0x00b8 + 00b4 26d3 lrs $AC0.M, @UnkZelda + 00b5 1b3e srri @$AR1, $AC0.M + 00b6 0000 nop + 00b7 0000 nop + 00b8 0000 nop + 00b9 02df ret +} + +void 00ba_SetupAccelerator() { + 00ba 1c3f mrr $AR1, $AC1.M + 00bb 009f 0005 lri $AC1.M, #0x0005 + 00bd 2fd1 srs @SampleFormat, $AC1.M + 00be 1f5e mrr $AX0.H, $AC0.M + 00bf 1f1c mrr $AX0.L, $AC0.L + 00c0 2ed4 srs @ACSAH, $AC0.M + 00c1 2cd5 srs @ACSAL, $AC0.L + 00c2 8900 clr $ACC1 + 00c3 1fa0 mrr $AC1.L, $AR0 + 00c4 4c00 add $ACC0, $AC1.L + 00c5 0200 0030 addi $AC0.M, #0x0030 + 00c7 2ed6 srs @ACEAH, $AC0.M + 00c8 2cd7 srs @ACEAL, $AC0.L + 00c9 1fda mrr $AC0.M, $AX0.H + 00ca 1f98 mrr $AC0.L, $AX0.L + 00cb 147f lsr $ACC0, #-1 + 00cc 2ed8 srs @ACCAH, $AC0.M + 00cd 2cd9 srs @ACCAL, $AC0.L + 00ce 1f40 mrr $AX0.H, $AR0 + 00cf 02df ret +} + + +void 00d0_Unk() { + 00d0 193e lrri $AC0.M, @$AR1 + 00d1 193c lrri $AC0.L, @$AR1 + 00d2 0260 8000 ori $AC0.M, #0x8000 + // 00d4 02bf 00ba call 0x00ba + 00ba_SetupAccelerator() + 00d6 007a 00dd bloop $AX0.H, 0x00dd + 00d8 193e lrri $AC0.M, @$AR1 + 00d9 2ed3 srs @UnkZelda, $AC0.M + 00da 0000 nop + 00db 0000 nop + 00dc 0000 nop + 00dd 0000 nop + 00de 02df ret +} + +void 00df_Unk() { + 00df 0080 0346 lri $AR0, #0x0346 + 00e1 02bf 0051 call 0x0051 + 00e3 02bf 0051 call 0x0051 + 00e5 0081 0346 lri $AR1, #0x0346 + 00e7 00df 0349 lr $AC1.M, @0x0349 + 00e9 0340 ffff andi $AC1.M, #0xffff + 00eb 00c0 0345 lr $AR0, @0x0345 + 00ed 02bf 007c call 0x007c + 00ef 029f 0049 jmp 0x0049 + 00f1 0080 0346 lri $AR0, #0x0346 + 00f3 02bf 0051 call 0x0051 + 00f5 02bf 0051 call 0x0051 + 00f7 0081 0346 lri $AR1, #0x0346 + 00f9 00df 0349 lr $AC1.M, @0x0349 + 00fb 0340 ffff andi $AC1.M, #0xffff + 00fd 00c0 0345 lr $AR0, @0x0345 + 00ff 02bf 0089 call 0x0089 + 0101 029f 0049 jmp 0x0049 +} + +void 0103_SetupAcceleratorMystery() { + 0103 0092 00ff lri $CR, #0x00ff + 0105 2fd1 srs @SampleFormat, $AC1.M + 0106 0340 0003 andi $AC1.M, #0x0003 + 0108 1f7f mrr $AX1.H, $AC1.M + 0109 1f5e mrr $AX0.H, $AC0.M + 010a 1f1c mrr $AX0.L, $AC0.L + 010b 0200 0010 addi $AC0.M, #0x0010 + 010d 2ed4 srs @ACSAH, $AC0.M + 010e 2cd5 srs @ACSAL, $AC0.L + 010f 8900 clr $ACC1 + 0110 1fa0 mrr $AC1.L, $AR0 + 0111 4c00 add $ACC0, $AC1.L + 0112 0200 0030 addi $AC0.M, #0x0030 + 0114 2ed6 srs @ACEAH, $AC0.M + 0115 2cd7 srs @ACEAL, $AC0.L + 0116 1fda mrr $AC0.M, $AX0.H + 0117 1f98 mrr $AC0.L, $AX0.L + 0118 1ffb mrr $AC1.M, $AX1.H + 0119 7900 decm $AC1.M + 011a 02ca lsrn + 011b 2ed8 srs @ACCAH, $AC0.M + 011c 2cd9 srs @ACCAL, $AC0.L + 011d 02df ret +} + +void 011e_Unk() { + 011e 1c23 mrr $AR1, $AR3 + 011f 197e lrri $AC0.M, @$AR3 + 0120 191b lrri $AX1.H, @$AR0 + 0121 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + 0122 1120 0128 bloopi #0x20, 0x0128 + 0124 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0125 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0126 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0127 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0128 4900 addax $ACC1, $AX0.L + 0129 1108 012e bloopi #0x08, 0x012e + 012b dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 012c 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 012d dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 012e 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 012f 02df ret +} + + +void 0130_Unk() { + 0130 8f00 set40 + 0131 1c03 mrr $AR0, $AR3 + 0132 00db 038e lr $AX1.H, @0x038e + 0134 009a 0004 lri $AX0.H, #0x0004 + 0136 1978 lrri $AX0.L, @$AR3 + 0137 a843 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR3 + 0138 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0139 1128 013e bloopi #0x28, 0x013e + 013b 38c3 orr'ld $AC0.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 013c ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M + 013d 38c3 orr'ld $AC0.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 013e ae30 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC0.M + 013f 8e00 set16 + 0140 02df ret +} + +void 0141_Unk() { + 0141 00f9 0361 sr @0x0361, $AX1.L + 0143 1fc0 mrr $AC0.M, $AR0 + 0144 0200 fffc addi $AC0.M, #0xfffc + 0146 1c1e mrr $AR0, $AC0.M + 0147 1c5e mrr $AR2, $AC0.M + 0148 0083 043c lri $AR3, #0x043c + 014a 197e lrri $AC0.M, @$AR3 + 014b 197f lrri $AC1.M, @$AR3 + 014c 80a2 nx'sl : $AC0.M, $AX0.H + 014d 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + 014e 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + 014f 1b1f srri @$AR0, $AC1.M + 0150 1c02 mrr $AR0, $AR2 + 0151 8100 clr $ACC0 + 0152 00de 0402 lr $AC0.M, @0x0402 + 0154 00fe 0362 sr @0x0362, $AC0.M + 0156 1474 lsr $ACC0, #-12 + 0157 1f7e mrr $AX1.H, $AC0.M + 0158 1f3c mrr $AX1.L, $AC0.L + 0159 8900 clr $ACC1 + 015a 00dd 0430 lr $AC1.L, @0x0430 + 015c 1504 lsl $ACC1, #4 + 015d 0604 cmpis $ACC0, #0x04 + 015e 0290 01b6 jns 0x01b6 + 0160 1fdd mrr $AC0.M, $AC1.L + 0161 0082 0c00 lri $AR2, #0x0c00 + 0163 1050 loopi #0x50 + 0164 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L + 0165 1fbe mrr $AC1.L, $AC0.M + 0166 00fe 0360 sr @0x0360, $AC0.M + 0168 8900 clr $ACC1 + 0169 1fbe mrr $AC1.L, $AC0.M + 016a 009a fff8 lri $AX0.H, #0xfff8 + 016c 009b 00fc lri $AX1.H, #0x00fc + 016e 00d8 0361 lr $AX0.L, @0x0361 + 0170 0082 0c00 lri $AR2, #0x0c00 + 0172 0083 0c00 lri $AR3, #0x0c00 + 0174 195e lrri $AC0.M, @$AR2 + 0175 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M + 0176 1128 017b bloopi #0x28, 0x017b + 0178 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 + 0179 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H + 017a 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 + 017b 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + 017c 8a00 m2 + 017d 0082 0c00 lri $AR2, #0x0c00 + 017f 00dd 0430 lr $AC1.L, @0x0430 + 0181 1504 lsl $ACC1, #4 + 0182 1fe0 mrr $AC1.M, $AR0 + 0183 8100 clr $ACC0 + 0184 00de 0362 lr $AC0.M, @0x0362 + 0186 1474 lsr $ACC0, #-12 + 0187 1f7e mrr $AX1.H, $AC0.M + 0188 1f3c mrr $AX1.L, $AC0.L + 0189 8f00 set40 + 018a 1943 lrri $AR3, @$AR2 + 018b 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 018c 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 018d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 018e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 018f f200 madd $AX0.L, $AX0.H + 0190 fe00 movpz $ACC0 + 0191 1c1f mrr $AR0, $AC1.M + + 0192 1943 lrri $AR3, @$AR2 + 0193 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0194 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0195 114e 019d bloopi #0x4e, 0x019d + 0197 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0198 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0199 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + + 019a 1c1f mrr $AR0, $AC1.M + 019b 1943 lrri $AR3, @$AR2 + 019c 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 019d 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + 019e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 019f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01a0 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 01a1 fe00 movpz $ACC0 + 01a2 1b3e srri @$AR1, $AC0.M + + 01a3 8b00 m0 + 01a4 8e00 set16 + 01a5 00fe 0433 sr @0x0433, $AC0.M + 01a7 1c1f mrr $AR0, $AC1.M + 01a8 150c lsl $ACC1, #12 + 01a9 0340 0fff andi $AC1.M, #0x0fff + 01ab 00ff 0430 sr @0x0430, $AC1.M + 01ad 0083 043c lri $AR3, #0x043c + 01af 191e lrri $AC0.M, @$AR0 + 01b0 191f lrri $AC1.M, @$AR0 + 01b1 80a0 nx'ls : $AX0.H, $AC0.M + 01b2 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 01b3 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 01b4 1b7f srri @$AR3, $AC1.M + 01b5 02df ret + +subroutine: + 01b6 1fe0 mrr $AC1.M, $AR0 + 01b7 1c1f mrr $AR0, $AC1.M + 01b8 1128 01bf bloopi #0x28, 0x01bf + 01ba 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 01bb 1b3e srri @$AR1, $AC0.M + 01bc 1c1f mrr $AR0, $AC1.M + 01bd 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 01be 1b3e srri @$AR1, $AC0.M + 01bf 1c1f mrr $AR0, $AC1.M + 01c0 029f 01a5 jmp 0x01a5 +} + +void 01c2_Unk() { + 01c2 8a00 m2 + 01c3 0083 03e8 lri $AR3, #0x03e8 + 01c5 191e lrri $AC0.M, @$AR0 + 01c6 191a lrri $AX0.H, @$AR0 + 01c7 1006 loopi #0x06 + 01c8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 01c9 1b7e srri @$AR3, $AC0.M + 01ca 1b7a srri @$AR3, $AX0.H + 01cb 0080 03e8 lri $AR0, #0x03e8 + 01cd 0088 0007 lri $WR0, #0x0007 + 01cf 1150 01dc bloopi #0x50, 0x01dc + 01d1 1c61 mrr $AR3, $AR1 + 01d2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 01d3 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d6 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d7 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01d9 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01da f200 madd $AX0.L, $AX0.H + 01db fe00 movpz $ACC0 + 01dc 1b3e srri @$AR1, $AC0.M + 01dd 0088 ffff lri $WR0, #0xffff + 01df 8b00 m0 + 01e0 02df ret +} + +void 01e1_Unk() { // ZWW: 0b4d_IIR_Filter + 01e1 8a00 m2 + 01e2 05fe addis $ACC1, #0xfe + 01e3 0083 03e8 lri $AR3, #0x03e8 + 01e5 191e lrri $AC0.M, @$AR0 + 01e6 191a lrri $AX0.H, @$AR0 + 01e7 005f loop $AC1.M + 01e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 01e9 1b7e srri @$AR3, $AC0.M + 01ea 1b7a srri @$AR3, $AX0.H + 01eb 0080 03e8 lri $AR0, #0x03e8 + 01ed 0501 addis $ACC1, #0x01 + 01ee 1d1f mrr $WR0, $AC1.M + 01ef 1150 01f7 bloopi #0x50, 0x01f7 + 01f1 1c61 mrr $AR3, $AR1 + 01f2 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 01f3 005f loop $AC1.M + 01f4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 01f5 f200 madd $AX0.L, $AX0.H + 01f6 fe00 movpz $ACC0 + 01f7 1b3e srri @$AR1, $AC0.M + 01f8 0088 ffff lri $WR0, #0xffff + 01fa 8b00 m0 + 01fb 02df ret +} + +void 01fc_Unk() { // ZWW: 0b68_4TapFIR + 01fc 0083 03e8 lri $AR3, #0x03e8 + 01fe 191e lrri $AC0.M, @$AR0 + 01ff 191a lrri $AX0.H, @$AR0 + 0200 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0201 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0202 1b7e srri @$AR3, $AC0.M + 0203 1b7a srri @$AR3, $AX0.H + 0204 0080 03e8 lri $AR0, #0x03e8 + 0206 0088 0003 lri $WR0, #0x0003 + 0208 0085 0000 lri $IX1, #0x0000 + 020a 0087 0000 lri $IX3, #0x0000 + 020c 1fc2 mrr $AC0.M, $AR2 + 020d 195b lrri $AX1.H, @$AR2 + 020e 1959 lrri $AX1.L, @$AR2 + 020f 195f lrri $AC1.M, @$AR2 + 0210 195a lrri $AX0.H, @$AR2 + 0211 1c5e mrr $AR2, $AC0.M + 0212 1fda mrr $AC0.M, $AX0.H + 0213 1c61 mrr $AR3, $AR1 + 0214 8a00 m2 + 0215 8f00 set40 + 0216 191a lrri $AX0.H, @$AR0 + 0217 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0218 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0219 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 021a e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 021b b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 021c 1127 0227 bloopi #0x27, 0x0227 + 021e e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + + 021f 197e lrri $AC0.M, @$AR3 + 0220 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0221 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0222 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0223 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + + 0224 197f lrri $AC1.M, @$AR3 + 0225 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0226 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0227 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0228 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0229 197e lrri $AC0.M, @$AR3 + 022a e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 022b eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 022c bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 022d 1bff srrn @$AR3, $AC1.M + 022e 197f lrri $AC1.M, @$AR3 + 022f 8e00 set16 + 0230 8b00 m0 + 0231 0088 ffff lri $WR0, #0xffff + 0233 1b5b srri @$AR2, $AX1.H + 0234 1b59 srri @$AR2, $AX1.L + 0235 1b5f srri @$AR2, $AC1.M + 0236 1b5e srri @$AR2, $AC0.M + 0237 02df ret +} + +void 0238_Unk() { + 0238 0080 0346 lri $AR0, #0x0346 + 023a 02bf 0051 call 0x0051 + 023c 02bf 0051 call 0x0051 + 023e 0081 0346 lri $AR1, #0x0346 + 0240 009f 0580 lri $AC1.M, #0x0580 + 0242 0080 0080 lri $AR0, #0x0080 + 0244 02bf 007c call 0x007c + 0246 0081 0348 lri $AR1, #0x0348 + 0248 009f 0c00 lri $AC1.M, #0x0c00 + 024a 0080 0080 lri $AR0, #0x0080 + 024c 02bf 007c call 0x007c + 024e 0080 0c00 lri $AR0, #0x0c00 + 0250 0081 0580 lri $AR1, #0x0580 + 0252 02bf 01fc call 0x01fc + 0254 0081 0346 lri $AR1, #0x0346 + 0256 009f 0580 lri $AC1.M, #0x0580 + 0258 0080 0080 lri $AR0, #0x0080 + 025a 02bf 0089 call 0x0089 + 025c 0081 0348 lri $AR1, #0x0348 + 025e 009f 0c00 lri $AC1.M, #0x0c00 + 0260 0080 0080 lri $AR0, #0x0080 + 0262 02bf 0089 call 0x0089 + 0264 029f 0049 jmp 0x0049 + 0266 8100 clr $ACC0 + 0267 1f5e mrr $AX0.H, $AC0.M + 0268 00d8 0402 lr $AX0.L, @0x0402 + 026a 00dc 0430 lr $AC0.L, @0x0430 + 026c 0080 0520 lri $AR0, #0x0520 + 026e 00df 0480 lr $AC1.M, @0x0480 + 0270 1501 lsl $ACC1, #1 + 0271 0340 007e andi $AC1.M, #0x007e + 0273 0300 027b addi $AC1.M, #0x027b + 0275 1c5f mrr $AR2, $AC1.M + 0276 175f callr $AR2 + 0277 00fc 0430 sr @0x0430, $AC0.L + 0279 029f 056d jmp 0x056d + 027b 029f 029c jmp 0x029c + 027d 029f 02d7 jmp 0x02d7 + 027f 029f 02bf jmp 0x02bf + 0281 029f 02ac jmp 0x02ac + 0283 029f 02e5 jmp 0x02e5 + 0285 029f 029b jmp 0x029b + 0287 029f 0303 jmp 0x0303 + 0289 029f 0306 jmp 0x0306 + 028b 029f 029b jmp 0x029b + 028d 029f 029b jmp 0x029b + 028f 029f 0324 jmp 0x0324 + 0291 029f 02dd jmp 0x02dd + 0293 029f 02e1 jmp 0x02e1 + 0295 029f 029b jmp 0x029b + 0297 029f 029b jmp 0x029b + 0299 029f 029b jmp 0x029b + 029b 02df ret +} + +void 029c_Unk() { + 029c 1401 lsl $ACC0, #1 + 029d 009b c000 lri $AX1.H, #0xc000 + 029f 0099 4000 lri $AX1.L, #0x4000 + 02a1 1150 02a9 bloopi #0x50, 0x02a9 + 02a3 02c0 0001 andcf $AC0.M, #0x0001 + 02a5 027c iflnz + 02a6 1b1b srri @$AR0, $AX1.H + 02a7 027d iflz + 02a8 1b19 srri @$AR0, $AX1.L + 02a9 4800 addax $ACC0, $AX0.L + 02aa 147f lsr $ACC0, #-1 + 02ab 02df ret +} + +void 02ac_Unk() { + 02ac 1402 lsl $ACC0, #2 + 02ad 8900 clr $ACC1 + 02ae 1fb8 mrr $AC1.L, $AX0.L + 02af 1501 lsl $ACC1, #1 + 02b0 009b c000 lri $AX1.H, #0xc000 + 02b2 0099 4000 lri $AX1.L, #0x4000 + 02b4 1150 02bc bloopi #0x50, 0x02bc + 02b6 02c0 0003 andcf $AC0.M, #0x0003 + 02b8 027c iflnz + 02b9 1b1b srri @$AR0, $AX1.H + 02ba 027d iflz + 02bb 1b19 srri @$AR0, $AX1.L + 02bc 4c00 add $ACC0, $AC1.L + 02bd 147e lsr $ACC0, #-2 + 02be 02df ret +} + +void 02bf_Unk() { // ZWW:08d5 + 02bf 1401 lsl $ACC0, #1 + 02c0 0081 0ca0 lri $AR1, #0x0ca0 + 02c2 009b c000 lri $AX1.H, #0xc000 + 02c4 0099 4000 lri $AX1.L, #0x4000 + 02c6 8900 clr $ACC1 + 02c7 0082 0000 lri $AR2, #0x0000 + 02c9 1150 02d4 bloopi #0x50, 0x02d4 + 02cb 02c0 0001 andcf $AC0.M, #0x0001 + 02cd 027c iflnz + 02ce 1b1b srri @$AR0, $AX1.H + 02cf 027d iflz + 02d0 1b19 srri @$AR0, $AX1.L + 02d1 183d lrr $AC1.L, @$AR1 + 02d2 4900 addax $ACC1, $AX0.L + 02d3 1fe2 mrr $AC1.M, $AR2 + 02d4 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M + 02d5 147f lsr $ACC0, #-1 + 02d6 02df ret +} + +void 02d7_Unk() { // ZWW:08ed + 02d7 8900 clr $ACC1 + 02d8 1fb8 mrr $AC1.L, $AX0.L + 02d9 157f lsr $ACC1, #-1 + 02da 1050 loopi #0x50 + 02db 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L + 02dc 02df ret +} + +void 02dd_Unk() { // ZWW:08f3 + 02dd 0082 0180 lri $AR2, #0x0180 // Three entrances + 02df 029f 02e7 jmp 0x02e7 + 02e1 0082 01c0 lri $AR2, #0x01c0 + 02e3 029f 02e7 jmp 0x02e7 + 02e5 0082 0140 lri $AR2, #0x0140 + 02e7 008a 003f lri $WR2, #0x003f + 02e9 0086 0000 lri $IX2, #0x0000 + 02eb 1406 lsl $ACC0, #6 + 02ec 8900 clr $ACC1 + 02ed 1fb8 mrr $AC1.L, $AX0.L + 02ee 1505 lsl $ACC1, #5 + 02ef 009b 003f lri $AX1.H, #0x003f + 02f1 009a 0000 lri $AX0.H, #0x0000 + 02f3 3600 andr $AC0.M, $AX1.H + 02f4 1cde mrr $IX2, $AC0.M + 02f5 001a addarn $AR2, $IX2 + 02f6 3400 andr $AC0.M, $AX0.H + 02f7 1150 02fd bloopi #0x50, 0x02fd + 02f9 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 02fa 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 02fb 1cde mrr $IX2, $AC0.M + 02fc 340e andr'nr $AC0.M, $AX0.H : $AR2 + 02fd 1b19 srri @$AR0, $AX1.L + 02fe 1fc2 mrr $AC0.M, $AR2 + 02ff 147a lsr $ACC0, #-6 + 0300 008a ffff lri $WR2, #0xffff + 0302 02df ret +} + +void 030_MemsetBlock() { + 0303 1050 loopi #0x50 + 0304 1b18 srri @$AR0, $AX0.L + // 0305 02df ret +} + +void 0306_Unk() { + 0306 0082 0100 lri $AR2, #0x0100 + 0308 008a 003f lri $WR2, #0x003f + 030a 0086 0000 lri $IX2, #0x0000 + 030c 1406 lsl $ACC0, #6 + 030d 8900 clr $ACC1 + 030e 1fb8 mrr $AC1.L, $AX0.L + 030f 1505 lsl $ACC1, #5 + 0310 009b 003f lri $AX1.H, #0x003f + 0312 009a 0000 lri $AX0.H, #0x0000 + 0314 3600 andr $AC0.M, $AX1.H + 0315 1cde mrr $IX2, $AC0.M + 0316 001a addarn $AR2, $IX2 + 0317 3400 andr $AC0.M, $AX0.H + 0318 1150 031e bloopi #0x50, 0x031e + 031a 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 031b 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 031c 1cde mrr $IX2, $AC0.M + 031d 340e andr'nr $AC0.M, $AX0.H : $AR2 + 031e 1b19 srri @$AR0, $AX1.L + 031f 1fc2 mrr $AC0.M, $AR2 + 0320 147a lsr $ACC0, #-6 + 0321 008a ffff lri $WR2, #0xffff + 0323 02df ret +} + +void 0324_Unk() { + 0324 0082 0100 lri $AR2, #0x0100 + 0326 008a 003f lri $WR2, #0x003f + 0328 0086 0000 lri $IX2, #0x0000 + 032a 0081 0ca0 lri $AR1, #0x0ca0 + 032c 1406 lsl $ACC0, #6 + 032d 8900 clr $ACC1 + 032e 1fb8 mrr $AC1.L, $AX0.L + 032f 1505 lsl $ACC1, #5 + 0330 009b 003f lri $AX1.H, #0x003f + 0332 009a 0000 lri $AX0.H, #0x0000 + 0334 3600 andr $AC0.M, $AX1.H + 0335 1cde mrr $IX2, $AC0.M + 0336 001a addarn $AR2, $IX2 + 0337 3400 andr $AC0.M, $AX0.H + 0338 1150 0343 bloopi #0x50, 0x0343 + 033a 1939 lrri $AX1.L, @$AR1 + 033b a000 mulx $AX0.L, $AX1.L + 033c 140a lsl $ACC0, #10 + 033d 4e00 addp $ACC0 + 033e 1476 lsr $ACC0, #-10 + 033f 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 0340 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0341 1cde mrr $IX2, $AC0.M + 0342 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0343 1b19 srri @$AR0, $AX1.L + 0344 1fc2 mrr $AC0.M, $AR2 + 0345 147a lsr $ACC0, #-6 + 0346 008a ffff lri $WR2, #0xffff + 0348 02df ret +} + +// DsetupTable +void 0349_COMMAND_01() { + 0349 0080 0380 lri $AR0, #0x0380 + 034b 02bf 0051 call 0x0051 + 034d 02bf 0051 call 0x0051 + 034f 02bf 0051 call 0x0051 + 0351 02bf 0051 call 0x0051 + + 0353 0081 0382 lri $AR1, #0x0382 + 0355 009f 0000 lri $AC1.M, #0x0000 + 0357 0080 0200 lri $AR0, #0x0200 + // 0359 02bf 007c call 0x007c + 007c_CopyRAMtoDMEM() + + 035b 0081 0384 lri $AR1, #0x0384 + 035d 009f 0300 lri $AC1.M, #0x0300 + 035f 0080 0020 lri $AR0, #0x0020 + 0361 02bf 007c call 0x007c + 007c_CopyRAMtoDMEM() + + + 0363 02bf 03cc call 0x03cc + 0365 00de 0345 lr $AC0.M, @0x0345 + 0367 00fe 0342 sr @0x0342, $AC0.M + 0369 02bf 0af0 call 0x0af0 + 036b 029f 0049 jmp 0x0049 + 036d 00de 0344 lr $AC0.M, @0x0344 + 036f 1404 lsl $ACC0, #4 + 0370 0200 03a8 addi $AC0.M, #0x03a8 + 0372 1c1e mrr $AR0, $AC0.M + 0373 02bf 0051 call 0x0051 + 0375 02bf 0051 call 0x0051 + 0377 02bf 0051 call 0x0051 + 0379 00de 0345 lr $AC0.M, @0x0345 + 037b 1b1e srri @$AR0, $AC0.M + 037c 00de 0344 lr $AC0.M, @0x0344 + 037e 0200 03a4 addi $AC0.M, #0x03a4 + 0380 1c1e mrr $AR0, $AC0.M + 0381 8100 clr $ACC0 + 0382 1b1e srri @$AR0, $AC0.M + 0383 02df ret +} + +void 0384_Unk() { + 0384 00de 0344 lr $AC0.M, @0x0344 + 0386 1404 lsl $ACC0, #4 + 0387 0200 03b0 addi $AC0.M, #0x03b0 + 0389 1c1e mrr $AR0, $AC0.M + 038a 02bf 0051 call 0x0051 + 038c 02bf 0051 call 0x0051 + 038e 02bf 0051 call 0x0051 + 0390 02bf 0051 call 0x0051 + 0392 02df ret +} + +void 0393_Unk() { + 0393 0081 034c lri $AR1, #0x034c + 0395 009f 0400 lri $AC1.M, #0x0400 + 0397 0080 00c0 lri $AR0, #0x00c0 + 0399 02bf 007c call 0x007c + 039b 02df ret +} + +void 039c_Unk() { + 039c 0081 034c lri $AR1, #0x034c + 039e 009f 0400 lri $AC1.M, #0x0400 + 03a0 0080 0080 lri $AR0, #0x0080 + 03a2 0081 034c lri $AR1, #0x034c + 03a4 193e lrri $AC0.M, @$AR1 + 03a5 193c lrri $AC0.L, @$AR1 + 03a6 0098 0000 lri $AX0.L, #0x0000 + 03a8 7000 addaxl $ACC0, $AX0.L + 03a9 02bf 008b call 0x008b + 03ab 02df ret +} + +void 03ac_Unk() { + 03ac 191e lrri $AC0.M, @$AR0 + 03ad 191a lrri $AX0.H, @$AR0 + 03ae 005f loop $AC1.M + 03af 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 03b0 1b7e srri @$AR3, $AC0.M + 03b1 1b7a srri @$AR3, $AX0.H + 03b2 02df ret +} + +// Example call: +//a 03d9 0080 0f40 lri $AR0, #0x0f40 +//a 03db 0082 0d00 lri $AR2, #0x0d00 +//a 03dd 0083 0d60 lri $AR3, #0x0d60 +//a 03df 009f 0028 lri $AC1.M, #0x0028 +//a 03e1 02bf 03b3 call 0x03b3 +// Not sure how AR2 fits into the picture... +void 03b3_XorBuffer(InputBuffer($AR0), OutputBuffer($AR3), HalfLength($AC1.M)) { + 03b3 191e lrri $AC0.M, @$AR0 + 03b4 191a lrri $AX0.H, @$AR0 + 03b5 007f 03ba bloop $AC1.M, 0x03ba + 03b7 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 03b8 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 03b9 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 03ba 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 03bb 0000 nop + 03bc 02df ret +} + +void 03bd_Unk() { + 03bd 8a00 m2 + 03be 157f lsr $ACC1, #-1 + 03bf 1c20 mrr $AR1, $AR0 + 03c0 1c03 mrr $AR0, $AR3 + 03c1 193a lrri $AX0.H, @$AR1 + 03c2 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 + 03c3 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 + 03c4 007f 03c9 bloop $AC1.M, 0x03c9 + 03c6 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 03c7 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 03c8 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 03c9 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 03ca 8b00 m0 + 03cb 02df ret +} + +void 03cc_Unk() { + 03cc 0083 ffa0 lri $AR3, #0xffa0 + 03ce 0080 0300 lri $AR0, #0x0300 + 03d0 009f 000e lri $AC1.M, #0x000e + 03d2 1108 03d7 bloopi #0x08, 0x03d7 + 03d4 191e lrri $AC0.M, @$AR0 + 03d5 1b7e srri @$AR3, $AC0.M + 03d6 191e lrri $AC0.M, @$AR0 + 03d7 1b7e srri @$AR3, $AC0.M + 03d8 02df ret +} + +void 03d9_Unk() { + + 03d9 0080 0f40 lri $AR0, #0x0f40 + 03db 0082 0d00 lri $AR2, #0x0d00 + 03dd 0083 0d60 lri $AR3, #0x0d60 + 03df 009f 0028 lri $AC1.M, #0x0028 + // XorBuffer, why?? + 03e1 02bf 03b3 call 0x03b3 + + // Clear a bunch of buffers. + 03e3 8900 clr $ACC1 + 03e4 009e 0050 lri $AC0.M, #0x0050 + 03e6 0080 0ca0 lri $AR0, #0x0ca0 + 03e8 005e loop $AC0.M + 03e9 1b1f srri @$AR0, $AC1.M + 03ea 0080 0f40 lri $AR0, #0x0f40 + 03ec 005e loop $AC0.M + 03ed 1b1f srri @$AR0, $AC1.M + 03ee 0080 0fa0 lri $AR0, #0x0fa0 + 03f0 005e loop $AC0.M + 03f1 1b1f srri @$AR0, $AC1.M + 03f2 0080 0b00 lri $AR0, #0x0b00 + 03f4 005e loop $AC0.M + 03f5 1b1f srri @$AR0, $AC1.M + 03f6 0080 09a0 lri $AR0, #0x09a0 + 03f8 005e loop $AC0.M + 03f9 1b1f srri @$AR0, $AC1.M + + 03fa 02df ret +} + +void 03fb_Unk() { + 03fb 00c0 03a0 lr $AR0, @0x03a0 + 03fd 191a lrri $AX0.H, @$AR0 + 03fe 00df 03a1 lr $AC1.M, @0x03a1 + 0400 009b 00a0 lri $AX1.H, #0x00a0 + 0402 0081 0393 lri $AR1, #0x0393 + 0404 18bc lrrd $AC0.L, @$AR1 + 0405 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0406 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0407 0080 0050 lri $AR0, #0x0050 + 0409 0508 addis $ACC1, #0x08 + 040a 02bf 007e call 0x007e + 040c 00de 0390 lr $AC0.M, @0x0390 + 040e 02a0 0001 andf $AC0.M, #0x0001 + 0410 029d 041a jlz 0x041a + 0412 0080 0398 lri $AR0, #0x0398 + 0414 009e 0008 lri $AC0.M, #0x0008 + 0416 00c1 03a1 lr $AR1, @0x03a1 + 0418 02bf 01c2 call 0x01c2 + 041a 009f 0050 lri $AC1.M, #0x0050 + 041c 00c0 03a1 lr $AR0, @0x03a1 + 041e 8100 clr $ACC0 + 041f 00de 0394 lr $AC0.M, @0x0394 + 0421 b100 tst $ACC0 + 0422 0295 0429 jz 0x0429 + 0424 1c7e mrr $AR3, $AC0.M + 0425 00d8 0395 lr $AX0.L, @0x0395 + 0427 02bf 03bd call 0x03bd + 0429 009f 0050 lri $AC1.M, #0x0050 + 042b 00c0 03a1 lr $AR0, @0x03a1 + 042d 8100 clr $ACC0 + 042e 00de 0396 lr $AC0.M, @0x0396 + 0430 b100 tst $ACC0 + 0431 0295 0438 jz 0x0438 + 0433 1c7e mrr $AR3, $AC0.M + 0434 00d8 0397 lr $AX0.L, @0x0397 + 0436 02bf 03bd call 0x03bd + 0438 00de 0390 lr $AC0.M, @0x0390 + 043a 02a0 0002 andf $AC0.M, #0x0002 + 043c 02dd retlz + + 043d 0080 0398 lri $AR0, #0x0398 + 043f 009e 0008 lri $AC0.M, #0x0008 + 0441 00c1 03a1 lr $AR1, @0x03a1 + 0443 02bf 01c2 call 0x01c2 + 0445 02df ret +} + +void 0446_Unk() { + 0446 009f 0dc0 lri $AC1.M, #0x0dc0 + 0448 00ff 03a1 sr @0x03a1, $AC1.M + 044a 009f 03a8 lri $AC1.M, #0x03a8 + 044c 00ff 03a2 sr @0x03a2, $AC1.M + 044e 009f 03a4 lri $AC1.M, #0x03a4 + 0450 00ff 03a0 sr @0x03a0, $AC1.M + 0452 1104 047b bloopi #0x04, 0x047b + 0454 00c0 03a2 lr $AR0, @0x03a2 + 0456 0083 0390 lri $AR3, #0x0390 + 0458 009f 000e lri $AC1.M, #0x000e + 045a 02bf 03ac call 0x03ac + 045c 00da 0390 lr $AX0.H, @0x0390 + 045e 8600 tstaxh $AX0.H + 045f 0295 046c jz 0x046c + 0461 00df 03a1 lr $AC1.M, @0x03a1 + 0463 1c7f mrr $AR3, $AC1.M + 0464 0550 addis $ACC1, #0x50 + 0465 1c1f mrr $AR0, $AC1.M + 0466 009f 0006 lri $AC1.M, #0x0006 + 0468 02bf 03ac call 0x03ac + 046a 02bf 03fb call 0x03fb + 046c 00de 03a2 lr $AC0.M, @0x03a2 + 046e 0410 addis $ACC0, #0x10 + 046f 00fe 03a2 sr @0x03a2, $AC0.M + 0471 00de 03a1 lr $AC0.M, @0x03a1 + 0473 0460 addis $ACC0, #0x60 + 0474 00fe 03a1 sr @0x03a1, $AC0.M + 0476 00de 03a0 lr $AC0.M, @0x03a0 + 0478 7400 incm $AC0.M + 0479 00fe 03a0 sr @0x03a0, $AC0.M + 047b 0000 nop + 047c 02df ret +} + +void 047d_Unk() { + 047d 00c0 03a0 lr $AR0, @0x03a0 + 047f 181a lrr $AX0.H, @$AR0 + 0480 8100 clr $ACC0 + 0481 181e lrr $AC0.M, @$AR0 + 0482 00db 0391 lr $AX1.H, @0x0391 + 0484 7400 incm $AC0.M + 0485 d100 cmpar $ACC1, $AX0.H + 0486 0270 ifns + 0487 8100 clr $ACC0 + 0488 1b1e srri @$AR0, $AC0.M + 0489 00df 03a1 lr $AC1.M, @0x03a1 + 048b 009b 00a0 lri $AX1.H, #0x00a0 + 048d 0081 0393 lri $AR1, #0x0393 + 048f 18bc lrrd $AC0.L, @$AR1 + 0490 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0491 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0492 0080 0050 lri $AR0, #0x0050 + 0494 02bf 008b call 0x008b + 0496 02df ret +} + +void 0497_Unk() { + 0497 009f 0dc0 lri $AC1.M, #0x0dc0 + 0499 00ff 03a1 sr @0x03a1, $AC1.M + 049b 009f 03a8 lri $AC1.M, #0x03a8 + 049d 00ff 03a2 sr @0x03a2, $AC1.M + 049f 009f 03a4 lri $AC1.M, #0x03a4 + 04a1 00ff 03a0 sr @0x03a0, $AC1.M + 04a3 1104 04c3 bloopi #0x04, 0x04c3 + 04a5 00c0 03a2 lr $AR0, @0x03a2 + 04a7 0083 0390 lri $AR3, #0x0390 + 04a9 009f 000e lri $AC1.M, #0x000e + 04ab 02bf 03ac call 0x03ac + 04ad 00da 0390 lr $AX0.H, @0x0390 + 04af 8600 tstaxh $AX0.H + 04b0 0295 04b4 jz 0x04b4 + 04b2 02bf 047d call 0x047d + 04b4 00de 03a2 lr $AC0.M, @0x03a2 + 04b6 0410 addis $ACC0, #0x10 + 04b7 00fe 03a2 sr @0x03a2, $AC0.M + 04b9 00de 03a1 lr $AC0.M, @0x03a1 + 04bb 0460 addis $ACC0, #0x60 + 04bc 00fe 03a1 sr @0x03a1, $AC0.M + 04be 00de 03a0 lr $AC0.M, @0x03a0 + 04c0 7400 incm $AC0.M + 04c1 00fe 03a0 sr @0x03a0, $AC0.M + 04c3 0000 nop + 04c4 02df ret +} + +void 04c5_Unk() { + 04c5 0081 0386 lri $AR1, #0x0386 + 04c7 009f 03a8 lri $AC1.M, #0x03a8 + 04c9 0080 0040 lri $AR0, #0x0040 + 04cb 02bf 007c call 0x007c + 04cd 02df ret +} + +void 04ce_Increment32BitAddressAtAR0() { + 04ce 191e lrri $AC0.M, @$AR0 + 04cf 189c lrrd $AC0.L, @$AR0 + 04d0 4800 addax $ACC0, $AX0.L + 04d1 1b1e srri @$AR0, $AC0.M + 04d2 1b1c srri @$AR0, $AC0.L + 04d3 02df ret +} + +void 04d4_Unk() { + 04d4 8100 clr $ACC0 + 04d5 26fe lrs $AC0.M, @CMBH + 04d6 02c0 8000 andcf $AC0.M, #0x8000 + 04d8 029c 04d5 jlnz 0x04d5 + 04da 26ff lrs $AC0.M, @CMBL + 04db 02df ret +} + +void 04dc_Unk() { + 04dc 0080 0388 lri $AR0, #0x0388 + 04de 0081 0051 lri $AR1, #0x0051 + 04e0 173f callr $AR1 + 04e1 00de 0344 lr $AC0.M, @0x0344 + 04e3 00fe 0341 sr @0x0341, $AC0.M + 04e5 00de 0345 lr $AC0.M, @0x0345 + 04e7 00fe 038e sr @0x038e, $AC0.M + 04e9 173f callr $AR1 + 04ea 02df ret +} + +///////////////////////// +// +// +// 0x0341: Number of Frames to render ... + +// 0x034c + 0x034d: RAM address of the current PB block + +// 0x034e: Last Sync message for rendered frame +// 0x0354: PB loop counter + +// 0x0355: Current Frame + +// 0x0380: ??? +// 0x0381: ??? + +// 0x0388: RAM Address of Output Buffer1 +// 0x038a: RAM Address of Output Buffer2 +// +// 0x038f: Output Buffer Address (0x0520 most of the time) +// +// 0x03f8: *0x0433 +// 0x0520: Some kind of sample buffer + +// 0x0d00: Left mix buffer +// 0x0d60: Right mix buffer + +void 04eb_COMMAND_02() // sync frame + 04eb 02bf 04dc call 0x04dc + 04ed 009e 8000 lri $AC0.M, #0x8000 + 04ef 00dc 0341 lr $AC0.L, @0x0341 + 04f1 02bf 005a call 0x005a + 04f3 8100 clr $ACC0 + 04f4 00fe 0355 sr @0x0355, $AC0.M + 04f6 02bf 04c5 call 0x04c5 + 04f8 00de 0341 lr $AC0.M, @0x0341 + 04fa 007e 0698 bloop $AC0.M, 0x0698 + 04fc 02bf 03d9 call 0x03d9 + + 04fe 02bf 0446 call 0x0446 + 0500 02bf 0bb6 call 0x0bb6 + 0502 02bf 04d4 call 0x04d4 + 0504 8100 clr $ACC0 + 0505 00fe 0354 sr @0x0354, $AC0.M + 0507 00de 0342 lr $AC0.M, @0x0342 + 0509 007e 064c bloop $AC0.M, 0x064c + 050b 00d8 0354 lr $AX0.L, @0x0354 + 050d 009a 0180 lri $AX0.H, #0x0180 + 050f 8100 clr $ACC0 + 0510 00de 0380 lr $AC0.M, @0x0380 + 0512 00dc 0381 lr $AC0.L, @0x0381 + 0514 9000 mul $AX0.L, $AX0.H + 0515 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0516 00fe 034c sr @0x034c, $AC0.M + 0518 00fc 034d sr @0x034d, $AC0.L + 051a 02bf 0393 call 0x0393 + 051c 00da 0400 lr $AX0.H, @0x0400 + 051e 8600 tstaxh $AX0.H + 051f 0295 0647 jz 0x0647 + 0521 00da 0401 lr $AX0.H, @0x0401 + 0523 8600 tstaxh $AX0.H + 0524 0294 0647 jnz 0x0647 + 0526 00da 0433 lr $AX0.H, @0x0433 + 0528 00fa 03f8 sr @0x03f8, $AX0.H + 052a 00da 0406 lr $AX0.H, @0x0406 + 052c 8600 tstaxh $AX0.H + 052d 0294 0a5e jnz 0x0a5e + 052f 8100 clr $ACC0 + 0530 00de 0480 lr $AC0.M, @0x0480 + 0532 0609 cmpis $ACC0, #0x09 + 0533 0295 0540 jz 0x0540 + 0535 0620 cmpis $ACC0, #0x20 + 0536 0295 08cd jz 0x08cd + 0538 0621 cmpis $ACC0, #0x21 + 0539 0295 08d6 jz 0x08d6 + 053b 0608 cmpis $ACC0, #0x08 + 053c 0295 0a66 jz 0x0a66 + 053e 029f 0266 jmp 0x0266 + 0540 00d8 0402 lr $AX0.L, @0x0402 + 0542 8100 clr $ACC0 + 0543 8900 clr $ACC1 + 0544 00dc 0430 lr $AC0.L, @0x0430 + 0546 8d00 set15 + 0547 0099 0050 lri $AX1.L, #0x0050 + 0549 a000 mulx $AX0.L, $AX1.L + 054a a400 mulxac $AX0.L, $AX1.L, $ACC0 + 054b 1404 lsl $ACC0, #4 + 054c 8c00 clr15 + 054d 1ffe mrr $AC1.M, $AC0.M + 054e 0083 0580 lri $AR3, #0x0580 + 0550 00da 0481 lr $AX0.H, @0x0481 + 0552 8600 tstaxh $AX0.H + 0553 0295 0563 jz 0x0563 + 0555 00da 0489 lr $AX0.H, @0x0489 + 0557 8100 clr $ACC0 + 0558 00de 048b lr $AC0.M, @0x048b + 055a 3800 orr $AC0.M, $AX0.H + 055b 0240 000f andi $AC0.M, #0x000f + 055d 0295 0563 jz 0x0563 + 055f 02bf 07d5 call 0x07d5 + 0561 029f 0565 jmp 0x0565 + 0563 02bf 0966 call 0x0966 + 0565 0080 0580 lri $AR0, #0x0580 + 0567 0081 0520 lri $AR1, #0x0520 + 0569 0099 0000 lri $AX1.L, #0x0000 + 056b 02bf 0141 call 0x0141 + 056d 00da 04a8 lr $AX0.H, @0x04a8 + 056f 8600 tstaxh $AX0.H + 0570 0295 0576 jz 0x0576 + 0572 0080 0520 lri $AR0, #0x0520 + 0574 02bf 0b90 call 0x0b90 + 0576 009e 0520 lri $AC0.M, #0x0520 + 0578 00fe 038f sr @0x038f, $AC0.M + 057a 8900 clr $ACC1 + 057b 00df 0484 lr $AC1.M, @0x0484 + 057d 0340 001f andi $AC1.M, #0x001f + 057f b900 tst $ACC1 + 0580 0295 05a6 jz 0x05a6 + 0582 00de 038f lr $AC0.M, @0x038f + 0584 5c00 sub $ACC0, $AC1.L + 0585 00fe 038f sr @0x038f, $AC0.M + 0587 1c7e mrr $AR3, $AC0.M + 0588 0080 0440 lri $AR0, #0x0440 + 058a 05fe addis $ACC1, #0xfe + 058b 02bf 03ac call 0x03ac + 058d 0080 0490 lri $AR0, #0x0490 + 058f 00c1 038f lr $AR1, @0x038f + 0591 8900 clr $ACC1 + 0592 00df 0484 lr $AC1.M, @0x0484 + 0594 0340 001f andi $AC1.M, #0x001f + 0596 02bf 01e1 call 0x01e1 + 0598 00de 038f lr $AC0.M, @0x038f + 059a 0450 addis $ACC0, #0x50 + 059b 1c1e mrr $AR0, $AC0.M + 059c 0083 0440 lri $AR3, #0x0440 + 059e 8900 clr $ACC1 + 059f 00df 0484 lr $AC1.M, @0x0484 + 05a1 0340 001f andi $AC1.M, #0x001f + 05a3 05fe addis $ACC1, #0xfe + 05a4 02bf 03ac call 0x03ac + 05a6 00de 0484 lr $AC0.M, @0x0484 + 05a8 0240 0020 andi $AC0.M, #0x0020 + 05aa 0295 05c8 jz 0x05c8 + 05ac 0080 04a4 lri $AR0, #0x04a4 + 05ae 00c1 038f lr $AR1, @0x038f + 05b0 0082 0454 lri $AR2, #0x0454 + 05b2 0083 04a7 lri $AR3, #0x04a7 + 05b4 18fa lrrd $AX0.H, @$AR3 + 05b5 8600 tstaxh $AX0.H + 05b6 0294 05c6 jnz 0x05c6 + 05b8 18fa lrrd $AX0.H, @$AR3 + 05b9 8600 tstaxh $AX0.H + 05ba 0294 05c6 jnz 0x05c6 + 05bc 18fa lrrd $AX0.H, @$AR3 + 05bd 8600 tstaxh $AX0.H + 05be 0294 05c6 jnz 0x05c6 + 05c0 8100 clr $ACC0 + 05c1 18fe lrrd $AC0.M, @$AR3 + 05c2 0280 7fff cmpi $AC0.M, #0x7fff + 05c4 0295 05c8 jz 0x05c8 + 05c6 02bf 01fc call 0x01fc + 05c8 8100 clr $ACC0 + 05c9 1c9e mrr $IX0, $AC0.M + 05ca 1cde mrr $IX2, $AC0.M + 05cb 7400 incm $AC0.M + 05cc 1cfe mrr $IX3, $AC0.M + 05cd 8100 clr $ACC0 + 05ce 00de 0407 lr $AC0.M, @0x0407 + 05d0 b100 tst $ACC0 + 05d1 0295 05e0 jz 0x05e0 + 05d3 00c3 038f lr $AR3, @0x038f + 05d5 0007 dar $AR3 + 05d6 0080 0477 lri $AR0, #0x0477 + 05d8 0084 ffff lri $IX0, #0xffff + 05da 0087 ffff lri $IX3, #0xffff + 05dc 199a lrrn $AX0.H, @$AR0 + 05dd 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + 05de 005e loop $AC0.M + 05df 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + 05e0 00da 0485 lr $AX0.H, @0x0485 + 05e2 8600 tstaxh $AX0.H + 05e3 0295 05f6 jz 0x05f6 + 05e5 8900 clr $ACC1 + 05e6 0086 0005 lri $IX2, #0x0005 + 05e8 0082 040a lri $AR2, #0x040a + 05ea 1106 05ee bloopi #0x06, 0x05ee + 05ec 18de lrrd $AC0.M, @$AR2 + 05ed 147f lsr $ACC0, #-1 + 05ee 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M + 05ef b900 tst $ACC1 + 05f0 0294 05f6 jnz 0x05f6 + 05f2 009a 0001 lri $AX0.H, #0x0001 + 05f4 00fa 0401 sr @0x0401, $AX0.H + 05f6 8f00 set40 + 05f7 0086 0002 lri $IX2, #0x0002 + 05f9 0082 0408 lri $AR2, #0x0408 + 05fb 1106 0626 bloopi #0x06, 0x0626 + 05fd 8100 clr $ACC0 + 05fe 195e lrri $AC0.M, @$AR2 + 05ff 1200 sbclr #0x00 + 0600 b100 tst $ACC0 + 0601 0275 ifz + 0602 1300 sbset #0x00 + 0603 1c7e mrr $AR3, $AC0.M + 0604 195e lrri $AC0.M, @$AR2 + 0605 195f lrri $AC1.M, @$AR2 + 0606 5c00 sub $ACC0, $AC1.L + 0607 14fb asr $ACC0, #-5 + 0608 1f5e mrr $AX0.H, $AC0.M + 0609 1f1c mrr $AX0.L, $AC0.L + 060a 185e lrr $AC0.M, @$AR2 + 060b 0240 00ff andi $AC0.M, #0x00ff + 060d 1f7e mrr $AX1.H, $AC0.M + 060e 185e lrr $AC0.M, @$AR2 + 060f 1478 lsr $ACC0, #-8 + 0610 009c 0000 lri $AC0.L, #0x0000 + 0612 d100 cmpar $ACC1, $AX0.H + 0613 0295 061b jz 0x061b + 0615 185e lrr $AC0.M, @$AR2 + 0616 0272 ifg + 0617 7400 incm $AC0.M + 0618 0271 ifs + 0619 7800 decm $AC0.M + 061a 1a5e srr @$AR2, $AC0.M + 061b 0006 dar $AR2 + 061c 00de 038f lr $AC0.M, @0x038f + 061e 5600 subr $ACC0, $AX1.H + 061f 029d 0624 jlz 0x0624 + 0621 1c1e mrr $AR0, $AC0.M + 0622 02bf 011e call 0x011e + 0624 0000 nop + 0625 1b5f srri @$AR2, $AC1.M + 0626 000a iar $AR2 + 0627 8e00 set16 + 0628 8100 clr $ACC0 + 0629 00de 0407 lr $AC0.M, @0x0407 + 062b b100 tst $ACC0 + 062c 0295 063d jz 0x063d + 062e 00c3 038f lr $AR3, @0x038f + 0630 0087 004f lri $IX3, #0x004f + 0632 001f addarn $AR3, $IX3 + 0633 0080 0477 lri $AR0, #0x0477 + 0635 0084 ffff lri $IX0, #0xffff + 0637 0087 ffff lri $IX3, #0xffff + 0639 19fa lrrn $AX0.H, @$AR3 + 063a 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 063b 005e loop $AC0.M + 063c 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + 063d 00da 0406 lr $AX0.H, @0x0406 + 063f 8600 tstaxh $AX0.H + 0640 0294 0645 jnz 0x0645 + 0642 8100 clr $ACC0 + 0643 00fe 0404 sr @0x0404, $AC0.M + 0645 02bf 039c call 0x039c + + + 0647 00de 0354 lr $AC0.M, @0x0354 + 0649 7400 incm $AC0.M + 064a 00fe 0354 sr @0x0354, $AC0.M + 064c 0000 nop + 064d 16fb 0001 si @DIRQ, #0x0001 + 064f 02bf 0b11 call 0x0b11 + 0651 02bf 0b24 call 0x0b24 + 0653 02bf 0b7b call 0x0b7b + 0655 0080 09a0 lri $AR0, #0x09a0 + 0657 0083 0d00 lri $AR3, #0x0d00 + 0659 009f 0050 lri $AC1.M, #0x0050 + 065b 0098 5a82 lri $AX0.L, #0x5a82 + 065d 02bf 03bd call 0x03bd + 065f 0080 09a0 lri $AR0, #0x09a0 + 0661 0083 0d60 lri $AR3, #0x0d60 + 0663 009f 0050 lri $AC1.M, #0x0050 + 0665 02bf 03bd call 0x03bd + 0667 0083 0d00 lri $AR3, #0x0d00 + 0669 02bf 0130 call 0x0130 + 066b 0081 0388 lri $AR1, #0x0388 + 066d 009f 0d00 lri $AC1.M, #0x0d00 + 066f 0080 0050 lri $AR0, #0x0050 + 0671 02bf 0089 call 0x0089 + 0673 0080 0fa0 lri $AR0, #0x0fa0 + 0675 0083 0d60 lri $AR3, #0x0d60 + 0677 009f 0050 lri $AC1.M, #0x0050 + 0679 0098 8000 lri $AX0.L, #0x8000 + 067b 02bf 03bd call 0x03bd + 067d 0083 0d60 lri $AR3, #0x0d60 + 067f 02bf 0130 call 0x0130 + 0681 0081 038a lri $AR1, #0x038a + 0683 009f 0d60 lri $AC1.M, #0x0d60 + 0685 0080 0050 lri $AR0, #0x0050 + 0687 02bf 0089 call 0x0089 + 0689 009a 0000 lri $AX0.H, #0x0000 + 068b 0098 00a0 lri $AX0.L, #0x00a0 + 068d 0080 0388 lri $AR0, #0x0388 + 068f 02bf 04ce call 0x04ce + 0691 0080 038a lri $AR0, #0x038a + 0693 02bf 04ce call 0x04ce + 0695 02bf 0497 call 0x0497 + 0697 0000 nop + 0698 0000 nop + } + 0699 029f 0031 jmp 0x0031 + 069b 0080 0346 lri $AR0, #0x0346 + 069d 02bf 0051 call 0x0051 + 069f 02bf 0051 call 0x0051 + 06a1 0081 0346 lri $AR1, #0x0346 + 06a3 193e lrri $AC0.M, @$AR1 + 06a4 193c lrri $AC0.L, @$AR1 + 06a5 009f 0400 lri $AC1.M, #0x0400 + 06a7 00c0 0345 lr $AR0, @0x0345 + 06a9 02bf 007e call 0x007e + + 06ab 0081 0348 lri $AR1, #0x0348 + 06ad 193e lrri $AC0.M, @$AR1 + 06ae 193c lrri $AC0.L, @$AR1 + 06af 009f 0800 lri $AC1.M, #0x0800 + 06b1 00c0 0345 lr $AR0, @0x0345 + 06b3 02bf 007e call 0x007e + + 06b5 0081 0346 lri $AR1, #0x0346 + 06b7 193e lrri $AC0.M, @$AR1 + 06b8 193c lrri $AC0.L, @$AR1 + 06b9 009f 0800 lri $AC1.M, #0x0800 + 06bb 00c0 0345 lr $AR0, @0x0345 + 06bd 02bf 008b call 0x008b + + 06bf 0081 0348 lri $AR1, #0x0348 + 06c1 193e lrri $AC0.M, @$AR1 + 06c2 193c lrri $AC0.L, @$AR1 + 06c3 009f 0400 lri $AC1.M, #0x0400 + 06c5 00c0 0345 lr $AR0, @0x0345 + 06c7 02bf 008b call 0x008b + + 06c9 029f 0049 jmp 0x0049 +} + +void 06cb_Unk() { + 06cb 0080 0346 lri $AR0, #0x0346 + 06cd 02bf 0051 call 0x0051 + 06cf 02bf 0051 call 0x0051 + 06d1 0081 0346 lri $AR1, #0x0346 + 06d3 193e lrri $AC0.M, @$AR1 + 06d4 193c lrri $AC0.L, @$AR1 + 06d5 009f 0400 lri $AC1.M, #0x0400 + 06d7 00c0 0345 lr $AR0, @0x0345 + 06d9 02bf 007e call 0x007e + 06db 0081 0348 lri $AR1, #0x0348 + 06dd 193e lrri $AC0.M, @$AR1 + 06de 193c lrri $AC0.L, @$AR1 + 06df 009f 0400 lri $AC1.M, #0x0400 + 06e1 00c0 0345 lr $AR0, @0x0345 + 06e3 02bf 008b call 0x008b + 06e5 029f 0049 jmp 0x0049 +} + +void 06e7_Unk() { + 06e7 0080 0346 lri $AR0, #0x0346 + 06e9 02bf 0051 call 0x0051 + 06eb 02bf 0051 call 0x0051 + 06ed 0081 0346 lri $AR1, #0x0346 + 06ef 193e lrri $AC0.M, @$AR1 + 06f0 193c lrri $AC0.L, @$AR1 + 06f1 009f 0400 lri $AC1.M, #0x0400 + 06f3 00c0 0345 lr $AR0, @0x0345 + 06f5 02bf 00ae call 0x00ae + 06f7 0081 0348 lri $AR1, #0x0348 + 06f9 193e lrri $AC0.M, @$AR1 + 06fa 193c lrri $AC0.L, @$AR1 + 06fb 009f 0400 lri $AC1.M, #0x0400 + 06fd 00c0 0345 lr $AR0, @0x0345 + 06ff 02bf 008b call 0x008b + 0701 029f 0049 jmp 0x0049 + 0703 0080 0346 lri $AR0, #0x0346 + 0705 02bf 0051 call 0x0051 + 0707 02bf 0051 call 0x0051 + 0709 0081 0346 lri $AR1, #0x0346 + 070b 193e lrri $AC0.M, @$AR1 + 070c 193c lrri $AC0.L, @$AR1 + 070d 009f 0400 lri $AC1.M, #0x0400 + 070f 00c0 0344 lr $AR0, @0x0344 + 0711 02bf 007e call 0x007e + 0713 0081 0348 lri $AR1, #0x0348 + 0715 193e lrri $AC0.M, @$AR1 + 0716 193c lrri $AC0.L, @$AR1 + 0717 009f 0800 lri $AC1.M, #0x0800 + 0719 00c0 0344 lr $AR0, @0x0344 + 071b 02bf 007e call 0x007e + 071d 0080 0400 lri $AR0, #0x0400 + 071f 0083 0800 lri $AR3, #0x0800 + 0721 0084 0000 lri $IX0, #0x0000 + 0723 00da 0345 lr $AX0.H, @0x0345 + 0725 00df 0344 lr $AC1.M, @0x0344 + 0727 8f00 set40 + 0728 197b lrri $AX1.H, @$AR3 + 0729 b800 mulx $AX0.H, $AX1.H + 072a 197b lrri $AX1.H, @$AR3 + 072b 007f 0730 bloop $AC1.M, 0x0730 + 072d 199e lrrn $AC0.M, @$AR0 + 072e bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 072f 80b2 nx'sl : $AC0.M, $AX1.H + 0730 0000 nop + 0731 8e00 set16 + 0732 0081 0346 lri $AR1, #0x0346 + 0734 193e lrri $AC0.M, @$AR1 + 0735 193c lrri $AC0.L, @$AR1 + 0736 009f 0400 lri $AC1.M, #0x0400 + 0738 00c0 0344 lr $AR0, @0x0344 + 073a 02bf 008b call 0x008b + 073c 009e 8200 lri $AC0.M, #0x8200 + 073e 00dc 0344 lr $AC0.L, @0x0344 + 0740 02bf 005a call 0x005a + 0742 029f 0031 jmp 0x0031 + 0744 0080 0346 lri $AR0, #0x0346 + 0746 02bf 0051 call 0x0051 + 0748 0081 0346 lri $AR1, #0x0346 + 074a 009f 0400 lri $AC1.M, #0x0400 + 074c 00c0 0345 lr $AR0, @0x0345 + 074e 02bf 007c call 0x007c + 0750 02bf 8644 call 0x8644 + 0752 029f 0049 jmp 0x0049 +} + +void 0754_Unk() { + 0754 009e 0458 lri $AC0.M, #0x0458 + 0756 2231 lrs $AX0.H, @0x0031 + 0757 4400 addr $ACC0, $AX0.H + 0758 1c1e mrr $AR0, $AC0.M + 0759 1fda mrr $AC0.M, $AX0.H + 075a 3280 xorr'ls $AC0.M, $AX1.H : $AX0.L, $AC0.M + 075b 7400 incm $AC0.M + 075c 2232 lrs $AX0.H, @0x0032 + 075d 4400 addr $ACC0, $AX0.H + 075e 0090 0000 lri $AC0.H, #0x0000 + 0760 029f 0771 jmp 0x0771 + 0762 009e 0458 lri $AC0.M, #0x0458 + 0764 2231 lrs $AX0.H, @0x0031 + 0765 4400 addr $ACC0, $AX0.H + 0766 1c1e mrr $AR0, $AC0.M + 0767 1fda mrr $AC0.M, $AX0.H + 0768 3280 xorr'ls $AC0.M, $AX1.H : $AX0.L, $AC0.M + 0769 7400 incm $AC0.M + 076a 2232 lrs $AX0.H, @0x0032 + 076b 4400 addr $ACC0, $AX0.H + 076c 0090 0000 lri $AC0.H, #0x0000 + 076e 8200 cmp + 076f 0270 ifns + 0770 1fdf mrr $AC0.M, $AC1.M + 0771 1f3e mrr $AX1.L, $AC0.M + 0772 02bf 07c8 call 0x07c8 + 0774 2634 lrs $AC0.M, @0x0034 + 0775 2435 lrs $AC0.L, @0x0035 + 0776 7200 addaxl $ACC0, $AX1.L + 0777 5300 subr $ACC1, $AX1.L + 0778 2e34 srs @0x0034, $AC0.M + 0779 2c35 srs @0x0035, $AC0.L + 077a 02df ret +} + +void 077b_Unk() { + 077b 8100 clr $ACC0 + 077c 2234 lrs $AX0.H, @0x0034 + 077d 2035 lrs $AX0.L, @0x0035 + 077e 4800 addax $ACC0, $AX0.L + 077f 147c lsr $ACC0, #-4 + 0780 2e36 srs @0x0036, $AC0.M + 0781 2c37 srs @0x0037, $AC0.L + 0782 2380 lrs $AX1.H, @0xff80 + 0783 8d00 set15 + 0784 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + 0785 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0786 8c00 clr15 + 0787 2035 lrs $AX0.L, @0x0035 + 0788 f000 lsl16 $ACC0 + 0789 4e00 addp $ACC0 + 078a 238c lrs $AX1.H, @0xff8c + 078b 218d lrs $AX1.L, @0xff8d + 078c 4a00 addax $ACC0, $AX1.L + 078d 2e38 srs @0x0038, $AC0.M + 078e 2c39 srs @0x0039, $AC0.L + 078f 1fd8 mrr $AC0.M, $AX0.L + 0790 0240 000f andi $AC0.M, #0x000f + 0792 2e31 srs @0x0031, $AC0.M + 0793 268a lrs $AC0.M, @0xff8a + 0794 248b lrs $AC0.L, @0xff8b + 0795 5800 subax $ACC0, $AX0.L + 0796 2e3a srs @0x003a, $AC0.M + 0797 2c3b srs @0x003b, $AC0.L + 0798 02df ret +} + +void 0799_Unk() { + 0799 2236 lrs $AX0.H, @0x0036 + 079a 2037 lrs $AX0.L, @0x0037 + 079b 8100 clr $ACC0 + 079c 268a lrs $AC0.M, @0xff8a + 079d 248b lrs $AC0.L, @0xff8b + 079e 147c lsr $ACC0, #-4 + 079f 5800 subax $ACC0, $AX0.L + 07a0 0295 07a9 jz 0x07a9 + 07a2 02bf 081b call 0x081b + 07a4 0e10 lris $AC0.M, #0x10 + 07a5 2e32 srs @0x0032, $AC0.M + 07a6 8100 clr $ACC0 + 07a7 2e31 srs @0x0031, $AC0.M + 07a8 02df ret +} + +void 07a9_Unk() { + 07a9 228a lrs $AX0.H, @0xff8a + 07aa 208b lrs $AX0.L, @0xff8b + 07ab 8100 clr $ACC0 + 07ac 2634 lrs $AC0.M, @0x0034 + 07ad 2435 lrs $AC0.L, @0x0035 + 07ae 5800 subax $ACC0, $AX0.L + 07af 0290 07b6 jns 0x07b6 + 07b1 02bf 081b call 0x081b + 07b3 263b lrs $AC0.M, @0x003b + 07b4 029f 07a5 jmp 0x07a5 + 07b6 2688 lrs $AC0.M, @0xff88 + 07b7 2489 lrs $AC0.L, @0xff89 + 07b8 2e34 srs @0x0034, $AC0.M + 07b9 2c35 srs @0x0035, $AC0.L + 07ba 0e10 lris $AC0.M, #0x10 + 07bb 2e32 srs @0x0032, $AC0.M + 07bc 02bf 077b call 0x077b + 07be 2682 lrs $AC0.M, @0xff82 + 07bf 2e67 srs @0x0067, $AC0.M + 07c0 2683 lrs $AC0.M, @0xff83 + 07c1 2e66 srs @0x0066, $AC0.M + 07c2 8100 clr $ACC0 + 07c3 00fe 0362 sr @0x0362, $AC0.M + 07c5 02bf 081b call 0x081b + 07c7 02df ret +} + +void 07c8_Unk() { + 07c8 b100 tst $ACC0 + 07c9 02d5 retz + 07ca 04fe addis $ACC0, #0xfe + 07cb 1f1e mrr $AX0.L, $AC0.M + 07cc 191e lrri $AC0.M, @$AR0 + 07cd 0291 07d3 js 0x07d3 + 07cf 191a lrri $AX0.H, @$AR0 + 07d0 0058 loop $AX0.L + 07d1 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 07d2 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 07d3 1b7e srri @$AR3, $AC0.M + 07d4 02df ret +} + +void 07d5_Unk() { + 07d5 0092 0004 lri $CR, #0x0004 + 07d7 02bf 077b call 0x077b + 07d9 8100 clr $ACC0 + 07da 00fe 0362 sr @0x0362, $AC0.M + 07dc 8100 clr $ACC0 + 07dd 263a lrs $AC0.M, @0x003a + 07de 243b lrs $AC0.L, @0x003b + 07df b100 tst $ACC0 + 07e0 0294 07f2 jnz 0x07f2 + 07e2 02bf 0799 call 0x0799 + 07e4 2231 lrs $AX0.H, @0x0031 + 07e5 8600 tstaxh $AX0.H + 07e6 0294 07ef jnz 0x07ef + 07e8 02bf 0762 call 0x0762 + 07ea b900 tst $ACC1 + 07eb 0295 0818 jz 0x0818 + 07ed 02bf 077b call 0x077b + 07ef 8100 clr $ACC0 + 07f0 263a lrs $AC0.M, @0x003a + 07f1 243b lrs $AC0.L, @0x003b + 07f2 1f1f mrr $AX0.L, $AC1.M + 07f3 009a 0000 lri $AX0.H, #0x0000 + 07f5 5800 subax $ACC0, $AX0.L + 07f6 0290 0805 jns 0x0805 + 07f8 8100 clr $ACC0 + 07f9 2631 lrs $AC0.M, @0x0031 + 07fa b100 tst $ACC0 + 07fb 0294 07ff jnz 0x07ff + 07fd 02bf 0799 call 0x0799 + 07ff 02bf 0754 call 0x0754 + 0801 02bf 077b call 0x077b + 0803 029f 07dc jmp 0x07dc + 0805 8100 clr $ACC0 + 0806 2631 lrs $AC0.M, @0x0031 + 0807 b100 tst $ACC0 + 0808 0294 080c jnz 0x080c + 080a 02bf 0799 call 0x0799 + 080c 02bf 0762 call 0x0762 + 080e b900 tst $ACC1 + 080f 0295 0818 jz 0x0818 + 0811 02bf 077b call 0x077b + 0813 029f 0805 jmp 0x0805 + 0815 8100 clr $ACC0 + 0816 005f loop $AC1.M + 0817 1b7e srri @$AR3, $AC0.M + 0818 0092 00ff lri $CR, #0x00ff + 081a 02df ret +} + +void 081b_Unk() { + 081b 00ff 0360 sr @0x0360, $AC1.M + 081d 00da 0362 lr $AX0.H, @0x0362 + 081f 8600 tstaxh $AX0.H + 0820 0294 082d jnz 0x082d + 0822 0a01 lris $AX0.H, #0x01 + 0823 00fa 0362 sr @0x0362, $AX0.H + 0825 2638 lrs $AC0.M, @0x0038 + 0826 2439 lrs $AC0.L, @0x0039 + 0827 009f 0005 lri $AC1.M, #0x0005 + 0829 02bf 0103 call 0x0103 + 082b 0092 0004 lri $CR, #0x0004 + 082d 0080 ffd3 lri $AR0, #0xffd3 + 082f 0084 0000 lri $IX0, #0x0000 + 0831 199e lrrn $AC0.M, @$AR0 + 0832 1ffe mrr $AC1.M, $AC0.M + 0833 1401 lsl $ACC0, #1 + 0834 0240 001e andi $AC0.M, #0x001e + 0836 0200 0300 addi $AC0.M, #0x0300 + 0838 1c3e mrr $AR1, $AC0.M + 0839 157c lsr $ACC1, #-4 + 083a 0340 000f andi $AC1.M, #0x000f + 083c 0a11 lris $AX0.H, #0x11 + 083d 5500 subr $ACC1, $AX0.H + 083e 009a 00f0 lri $AX0.H, #0x00f0 + 0840 009b 000f lri $AX1.H, #0x000f + 0842 0082 0370 lri $AR2, #0x0370 + 0844 1998 lrrn $AX0.L, @$AR0 + 0845 6000 movr $ACC0, $AX0.L + 0846 1107 084d bloopi #0x07, 0x084d + 0848 3400 andr $AC0.M, $AX0.H + 0849 1408 lsl $ACC0, #8 + 084a 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 084b 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 084c 140c lsl $ACC0, #12 + 084d 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 084e 3400 andr $AC0.M, $AX0.H + 084f 1408 lsl $ACC0, #8 + 0850 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0851 3600 andr $AC0.M, $AX1.H + 0852 140c lsl $ACC0, #12 + 0853 1b5e srri @$AR2, $AC0.M + 0854 8f00 set40 + 0855 1f7f mrr $AX1.H, $AC1.M + 0856 2066 lrs $AX0.L, @0x0066 + 0857 2767 lrs $AC1.M, @0x0067 + 0858 193a lrri $AX0.H, @$AR1 + 0859 1939 lrri $AX1.L, @$AR1 + 085a 0080 0370 lri $AR0, #0x0370 + 085c 0081 0458 lri $AR1, #0x0458 + 085e 1c80 mrr $IX0, $AR0 + 085f a000 mulx $AX0.L, $AX1.L + 0860 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + 0861 1108 086a bloopi #0x08, 0x086a + 0863 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0864 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0865 1485 asl $ACC0, #5 + 0866 e831 maddc's $AC0.M, $AX1.L : @$AR1, $AC0.M + 0867 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 0868 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 0869 1585 asl $ACC1, #5 + 086a ea39 maddc's $AC1.M, $AX1.L : @$AR1, $AC1.M + 086b 8e00 set16 + 086c 8900 clr $ACC1 + 086d 00df 0360 lr $AC1.M, @0x0360 + 086f 02df ret +} + +void 0870_Unk() { + 0870 0080 0346 lri $AR0, #0x0346 + 0872 02bf 0051 call 0x0051 + 0874 8100 clr $ACC0 + 0875 0080 0458 lri $AR0, #0x0458 + 0877 1010 loopi #0x10 + 0878 1b1e srri @$AR0, $AC0.M + 0879 00fe 0482 sr @0x0482, $AC0.M + 087b 00fe 0483 sr @0x0483, $AC0.M + 087d 009c 0000 lri $AC0.L, #0x0000 + 087f 00fe 0434 sr @0x0434, $AC0.M + 0881 00fc 0435 sr @0x0435, $AC0.L + 0883 009e 0100 lri $AC0.M, #0x0100 + 0885 009c f100 lri $AC0.L, #0xf100 + 0887 00fe 048e sr @0x048e, $AC0.M + 0889 00fc 048f sr @0x048f, $AC0.L + 088b 009e 0040 lri $AC0.M, #0x0040 + 088d 009c 0000 lri $AC0.L, #0x0000 + 088f 00fe 048c sr @0x048c, $AC0.M + 0891 00fc 048d sr @0x048d, $AC0.L + 0893 009e 0009 lri $AC0.M, #0x0009 + 0895 00fe 0480 sr @0x0480, $AC0.M + 0897 009e 0010 lri $AC0.M, #0x0010 + 0899 00fe 0432 sr @0x0432, $AC0.M + 089b 009e 0100 lri $AC0.M, #0x0100 + 089d 009c f250 lri $AC0.L, #0xf250 + 089f 00fe 048a sr @0x048a, $AC0.M + 08a1 00fc 048b sr @0x048b, $AC0.L + 08a3 009c 0000 lri $AC0.L, #0x0000 + 08a5 00fe 0488 sr @0x0488, $AC0.M + 08a7 00fc 0489 sr @0x0489, $AC0.L + 08a9 009e 0001 lri $AC0.M, #0x0001 + 08ab 00fe 0481 sr @0x0481, $AC0.M + 08ad 8900 clr $ACC1 + 08ae 00ff 0401 sr @0x0401, $AC1.M + 08b0 1180 08ca bloopi #0x80, 0x08ca + 08b2 0083 0580 lri $AR3, #0x0580 + 08b4 009f 0100 lri $AC1.M, #0x0100 + 08b6 02bf 07d5 call 0x07d5 + 08b8 0081 0346 lri $AR1, #0x0346 + 08ba 193e lrri $AC0.M, @$AR1 + 08bb 18bc lrrd $AC0.L, @$AR1 + 08bc 009f 0580 lri $AC1.M, #0x0580 + 08be 0080 0100 lri $AR0, #0x0100 + 08c0 02bf 008b call 0x008b + 08c2 0081 0346 lri $AR1, #0x0346 + 08c4 193e lrri $AC0.M, @$AR1 + 08c5 18bc lrrd $AC0.L, @$AR1 + 08c6 0098 0200 lri $AX0.L, #0x0200 + 08c8 7000 addaxl $ACC0, $AX0.L + 08c9 1b3e srri @$AR1, $AC0.M + 08ca 1abc srrd @$AR1, $AC0.L + 08cb 029f 0049 jmp 0x0049 +} + +void 08cd_Unk() { + 08cd 8900 clr $ACC1 + 08ce 009f 0050 lri $AC1.M, #0x0050 + 08d0 0083 0520 lri $AR3, #0x0520 + 08d2 02bf 08e8 call 0x08e8 + 08d4 029f 056d jmp 0x056d +} + +void 08d6_Unk() { + 08d6 00d8 0402 lr $AX0.L, @0x0402 + 08d8 8100 clr $ACC0 + 08d9 8900 clr $ACC1 + 08da 00dc 0430 lr $AC0.L, @0x0430 + 08dc 009a 0050 lri $AX0.H, #0x0050 + 08de 9000 mul $AX0.L, $AX0.H + 08df 9400 mulac $AX0.L, $AX0.H, $ACC0 + 08e0 1404 lsl $ACC0, #4 + 08e1 1ffe mrr $AC1.M, $AC0.M + 08e2 0083 0580 lri $AR3, #0x0580 + 08e4 02bf 08e8 call 0x08e8 + 08e6 029f 0565 jmp 0x0565 +} + +void 08e8_Unk() { + 08e8 0092 0004 lri $CR, #0x0004 + 08ea 8100 clr $ACC0 + 08eb 263a lrs $AC0.M, @0x003a + 08ec 243b lrs $AC0.L, @0x003b + 08ed 1f1f mrr $AX0.L, $AC1.M + 08ee 009a 0000 lri $AX0.H, #0x0000 + 08f0 5800 subax $ACC0, $AX0.L + 08f1 0290 0908 jns 0x0908 + 08f3 8900 clr $ACC1 + 08f4 00c0 043b lr $AR0, @0x043b + 08f6 02bf 092d call 0x092d + 08f8 8100 clr $ACC0 + 08f9 1fd8 mrr $AC0.M, $AX0.L + 08fa 223b lrs $AX0.H, @0x003b + 08fb 5400 subr $ACC0, $AX0.H + 08fc 0007 dar $AR3 + 08fd 1979 lrri $AX1.L, @$AR3 + 08fe 005e loop $AC0.M + 08ff 1b79 srri @$AR3, $AX1.L + 0900 009f 0001 lri $AC1.M, #0x0001 + 0902 2f01 srs @0x0001, $AC1.M + 0903 8900 clr $ACC1 + 0904 2f3b srs @0x003b, $AC1.M + 0905 0092 00ff lri $CR, #0x00ff + 0907 02df ret +} + +void 0908_Unk() { + 0908 2e3a srs @0x003a, $AC0.M + 0909 2c3b srs @0x003b, $AC0.L + 090a 8100 clr $ACC0 + 090b 8900 clr $ACC1 + 090c 268a lrs $AC0.M, @0xff8a + 090d 2734 lrs $AC1.M, @0x0034 + 090e 5c00 sub $ACC0, $AC1.L + 090f 2e36 srs @0x0036, $AC0.M + 0910 5000 subr $ACC0, $AX0.L + 0911 0290 0927 jns 0x0927 + 0913 00c0 0436 lr $AR0, @0x0436 + 0915 02bf 092d call 0x092d + 0917 8100 clr $ACC0 + 0918 1fd8 mrr $AC0.M, $AX0.L + 0919 2236 lrs $AX0.H, @0x0036 + 091a 5400 subr $ACC0, $AX0.H + 091b 1c1e mrr $AR0, $AC0.M + 091c 8100 clr $ACC0 + 091d 2e34 srs @0x0034, $AC0.M + 091e 2688 lrs $AC0.M, @0xff88 + 091f 2489 lrs $AC0.L, @0xff89 + 0920 2e8c srs @0xff8c, $AC0.M + 0921 2c8d srs @0xff8d, $AC0.L + 0922 02bf 092d call 0x092d + 0924 0092 00ff lri $CR, #0x00ff + 0926 02df ret +} + +void 0927_Unk() { + 0927 1c18 mrr $AR0, $AX0.L + 0928 02bf 092d call 0x092d + 092a 0092 00ff lri $CR, #0x00ff + 092c 02df ret +} + +void 092d_Unk() { + 092d 8100 clr $ACC0 + 092e 1fc0 mrr $AC0.M, $AR0 + 092f b100 tst $ACC0 + 0930 02d5 retz + 0931 8900 clr $ACC1 + 0932 2734 lrs $AC1.M, @0x0034 + 0933 0340 0001 andi $AC1.M, #0x0001 + 0935 009b 0000 lri $AX1.H, #0x0000 + 0937 1f3f mrr $AX1.L, $AC1.M + 0938 268c lrs $AC0.M, @0xff8c + 0939 248d lrs $AC0.L, @0xff8d + 093a 8900 clr $ACC1 + 093b 2534 lrs $AC1.L, @0x0034 + 093c 1501 lsl $ACC1, #1 + 093d 4c00 add $ACC0, $AC1.L + 093e 5a00 subax $ACC0, $AX1.L + 093f 5a00 subax $ACC0, $AX1.L + 0940 1c20 mrr $AR1, $AR0 + 0941 1fe0 mrr $AC1.M, $AR0 + 0942 0502 addis $ACC1, #0x02 + 0943 1c1f mrr $AR0, $AC1.M + 0944 009f 0a00 lri $AC1.M, #0x0a00 + 0946 0092 00ff lri $CR, #0x00ff + 0948 02bf 007e call 0x007e + 094a 0092 0004 lri $CR, #0x0004 + 094c 2734 lrs $AC1.M, @0x0034 + 094d 1f61 mrr $AX1.H, $AR1 + 094e 4700 addr $ACC1, $AX1.H + 094f 2f34 srs @0x0034, $AC1.M + 0950 0080 0a00 lri $AR0, #0x0a00 + 0952 8900 clr $ACC1 + 0953 1ff9 mrr $AC1.M, $AX1.L + 0954 b900 tst $ACC1 + 0955 0274 ifnz + 0956 0008 iar $AR0 + 0957 8900 clr $ACC1 + 0958 1fe1 mrr $AC1.M, $AR1 + 0959 191e lrri $AC0.M, @$AR0 + 095a 0701 cmpis $ACC1, #0x01 + 095b 0293 0964 jle 0x0964 + 095d 191a lrri $AX0.H, @$AR0 + 095e 05fe addis $ACC1, #0xfe + 095f 005f loop $AC1.M + 0960 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0961 1b7e srri @$AR3, $AC0.M + 0962 1b7a srri @$AR3, $AX0.H + 0963 02df ret +} + +void 0964_Unk() { + 0964 1b7e srri @$AR3, $AC0.M + 0965 02df ret +} + +void 0966_Unk() { + 0966 0092 0004 lri $CR, #0x0004 + 0968 2201 lrs $AX0.H, @0x0001 + 0969 8600 tstaxh $AX0.H + 096a 0294 0997 jnz 0x0997 + 096c 2204 lrs $AX0.H, @0x0004 + 096d 8600 tstaxh $AX0.H + 096e 02b4 09eb callne 0x09eb + 0970 2231 lrs $AX0.H, @0x0031 + 0971 8600 tstaxh $AX0.H + 0972 0295 098c jz 0x098c + 0974 009e 0458 lri $AC0.M, #0x0458 + 0976 4400 addr $ACC0, $AX0.H + 0977 1c1e mrr $AR0, $AC0.M + 0978 0e10 lris $AC0.M, #0x10 + 0979 5400 subr $ACC0, $AX0.H + 097a 1f7e mrr $AX1.H, $AC0.M + 097b 02bf 07c8 call 0x07c8 + 097d d900 cmpar $ACC1, $AX1.H + 097e 0292 098b jg 0x098b + 0980 0295 0987 jz 0x0987 + 0982 2631 lrs $AC0.M, @0x0031 + 0983 4c00 add $ACC0, $AC1.L + 0984 2e31 srs @0x0031, $AC0.M + 0985 029f 09e8 jmp 0x09e8 + 0987 8100 clr $ACC0 + 0988 2e31 srs @0x0031, $AC0.M + 0989 029f 09e8 jmp 0x09e8 + 098b 5700 subr $ACC1, $AX1.H + 098c 8100 clr $ACC0 + 098d 2605 lrs $AC0.M, @0x0005 + 098e b100 tst $ACC0 + 098f 0295 09a8 jz 0x09a8 + 0991 8100 clr $ACC0 + 0992 2e05 srs @0x0005, $AC0.M + 0993 2281 lrs $AX0.H, @0xff81 + 0994 8600 tstaxh $AX0.H + 0995 0294 099e jnz 0x099e + 0997 8100 clr $ACC0 + 0998 005f loop $AC1.M + 0999 1b7e srri @$AR3, $AC0.M + 099a 7400 incm $AC0.M + 099b 2e01 srs @0x0001, $AC0.M + 099c 029f 09e8 jmp 0x09e8 + 099e 2688 lrs $AC0.M, @0xff88 + 099f 2489 lrs $AC0.L, @0xff89 + 09a0 2e34 srs @0x0034, $AC0.M + 09a1 2c35 srs @0x0035, $AC0.L + 09a2 02bf 09f0 call 0x09f0 + 09a4 2682 lrs $AC0.M, @0xff82 + 09a5 2483 lrs $AC0.L, @0xff83 + 09a6 2e67 srs @0x0067, $AC0.M + 09a7 2c66 srs @0x0066, $AC0.L + 09a8 00ff 0360 sr @0x0360, $AC1.M + 09aa 2638 lrs $AC0.M, @0x0038 + 09ab 2439 lrs $AC0.L, @0x0039 + 09ac 009f 0005 lri $AC1.M, #0x0005 + 09ae 02bf 0103 call 0x0103 + 09b0 0092 0004 lri $CR, #0x0004 + 09b2 8900 clr $ACC1 + 09b3 00ff 0362 sr @0x0362, $AC1.M + 09b5 00df 0360 lr $AC1.M, @0x0360 + 09b7 02bf 0a09 call 0x0a09 + 09b9 8100 clr $ACC0 + 09ba 00de 0362 lr $AC0.M, @0x0362 + 09bc 2280 lrs $AX0.H, @0xff80 + 09bd 4400 addr $ACC0, $AX0.H + 09be 00fe 0362 sr @0x0362, $AC0.M + 09c0 8100 clr $ACC0 + 09c1 263a lrs $AC0.M, @0x003a + 09c2 243b lrs $AC0.L, @0x003b + 09c3 0a01 lris $AX0.H, #0x01 + 09c4 0081 0405 lri $AR1, #0x0405 + 09c6 7a00 dec $ACC0 + 09c7 b100 tst $ACC0 + 09c8 0275 ifz + 09c9 1a3a srr @$AR1, $AX0.H + 09ca 2e3a srs @0x003a, $AC0.M + 09cb 2c3b srs @0x003b, $AC0.L + 09cc 0710 cmpis $ACC1, #0x10 + 09cd 0293 09d6 jle 0x09d6 + 09cf 05f0 addis $ACC1, #0xf0 + 09d0 2205 lrs $AX0.H, @0x0005 + 09d1 8600 tstaxh $AX0.H + 09d2 0294 0991 jnz 0x0991 + 09d4 029f 09b7 jmp 0x09b7 + 09d6 0275 ifz + 09d7 8900 clr $ACC1 + 09d8 2f31 srs @0x0031, $AC1.M + 09d9 1fc3 mrr $AC0.M, $AR3 + 09da 04f0 addis $ACC0, #0xf0 + 09db 1c1e mrr $AR0, $AC0.M + 09dc 0083 0458 lri $AR3, #0x0458 + 09de 0e10 lris $AC0.M, #0x10 + 09df 02bf 07c8 call 0x07c8 + 09e1 2638 lrs $AC0.M, @0x0038 + 09e2 2439 lrs $AC0.L, @0x0039 + 09e3 00d8 0362 lr $AX0.L, @0x0362 + 09e5 7000 addaxl $ACC0, $AX0.L + 09e6 2c39 srs @0x0039, $AC0.L + 09e7 2e38 srs @0x0038, $AC0.M + 09e8 0092 00ff lri $CR, #0x00ff + 09ea 02df ret +} + +void 09eb_Unk() { + 09eb 8100 clr $ACC0 + 09ec 2e34 srs @0x0034, $AC0.M + 09ed 2e35 srs @0x0035, $AC0.M + 09ee 2e66 srs @0x0066, $AC0.M + 09ef 2e67 srs @0x0067, $AC0.M + 09f0 2334 lrs $AX1.H, @0x0034 + 09f1 2135 lrs $AX1.L, @0x0035 + 09f2 268a lrs $AC0.M, @0xff8a + 09f3 248b lrs $AC0.L, @0xff8b + 09f4 5a00 subax $ACC0, $AX1.L + 09f5 147c lsr $ACC0, #-4 + 09f6 2e3a srs @0x003a, $AC0.M + 09f7 2c3b srs @0x003b, $AC0.L + 09f8 2634 lrs $AC0.M, @0x0034 + 09f9 2435 lrs $AC0.L, @0x0035 + 09fa 147c lsr $ACC0, #-4 + 09fb 2280 lrs $AX0.H, @0xff80 + 09fc c010 mulc'mv $AC0.M, $AX0.H : $AX0.L, $AC0.L + 09fd 9600 mulmv $AX0.L, $AX0.H, $ACC0 + 09fe f000 lsl16 $ACC0 + 09ff 4e00 addp $ACC0 + 0a00 238c lrs $AX1.H, @0xff8c + 0a01 218d lrs $AX1.L, @0xff8d + 0a02 4a00 addax $ACC0, $AX1.L + 0a03 2e38 srs @0x0038, $AC0.M + 0a04 2c39 srs @0x0039, $AC0.L + 0a05 8100 clr $ACC0 + 0a06 2e05 srs @0x0005, $AC0.M + 0a07 2e31 srs @0x0031, $AC0.M + 0a08 02df ret +} + + +void 0a09_Unk() { + 0a09 00ff 0360 sr @0x0360, $AC1.M + 0a0b 0080 ffd3 lri $AR0, #0xffd3 + 0a0d 0084 0000 lri $IX0, #0x0000 + 0a0f 199e lrrn $AC0.M, @$AR0 + 0a10 1ffe mrr $AC1.M, $AC0.M + 0a11 1401 lsl $ACC0, #1 + 0a12 0240 001e andi $AC0.M, #0x001e + 0a14 0200 0300 addi $AC0.M, #0x0300 + 0a16 1c3e mrr $AR1, $AC0.M + 0a17 157c lsr $ACC1, #-4 + 0a18 0340 000f andi $AC1.M, #0x000f + 0a1a 0a11 lris $AX0.H, #0x11 + 0a1b 5500 subr $ACC1, $AX0.H + 0a1c 009a 00f0 lri $AX0.H, #0x00f0 + 0a1e 009b 000f lri $AX1.H, #0x000f + 0a20 0082 0370 lri $AR2, #0x0370 + 0a22 1998 lrrn $AX0.L, @$AR0 + 0a23 6000 movr $ACC0, $AX0.L + 0a24 1107 0a2b bloopi #0x07, 0x0a2b + 0a26 3400 andr $AC0.M, $AX0.H + 0a27 1408 lsl $ACC0, #8 + 0a28 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0a29 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 0a2a 140c lsl $ACC0, #12 + 0a2b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0a2c 3400 andr $AC0.M, $AX0.H + 0a2d 1408 lsl $ACC0, #8 + 0a2e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0a2f 3600 andr $AC0.M, $AX1.H + 0a30 140c lsl $ACC0, #12 + 0a31 1b5e srri @$AR2, $AC0.M + 0a32 8f00 set40 + 0a33 1f7f mrr $AX1.H, $AC1.M + 0a34 2066 lrs $AX0.L, @0x0066 + 0a35 2767 lrs $AC1.M, @0x0067 + 0a36 193a lrri $AX0.H, @$AR1 + 0a37 1939 lrri $AX1.L, @$AR1 + 0a38 0080 0370 lri $AR0, #0x0370 + 0a3a 1c80 mrr $IX0, $AR0 + 0a3b a000 mulx $AX0.L, $AX1.L + 0a3c ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + 0a3d 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0a3e a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0a3f 1485 asl $ACC0, #5 + 0a40 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 0a41 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 0a42 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 0a43 1585 asl $ACC1, #5 + 0a44 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + 0a45 1106 0a4e bloopi #0x06, 0x0a4e + 0a47 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0a48 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0a49 1485 asl $ACC0, #5 + 0a4a e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 0a4b 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 0a4c a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 0a4d 1585 asl $ACC1, #5 + 0a4e ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + 0a4f 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0a50 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0a51 1485 asl $ACC0, #5 + 0a52 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 0a53 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 0a54 a500 mulxac $AX0.L, $AX1.L, $ACC1 + 0a55 1585 asl $ACC1, #5 + 0a56 1b7f srri @$AR3, $AC1.M + 0a57 2e66 srs @0x0066, $AC0.M + 0a58 2f67 srs @0x0067, $AC1.M + 0a59 8e00 set16 + 0a5a 8900 clr $ACC1 + 0a5b 00df 0360 lr $AC1.M, @0x0360 + 0a5d 02df ret +} + +void 0a5e_Unk() { + 0a5e 0083 0520 lri $AR3, #0x0520 + 0a60 00de 0433 lr $AC0.M, @0x0433 + 0a62 1050 loopi #0x50 + 0a63 1b7e srri @$AR3, $AC0.M + 0a64 029f 056d jmp 0x056d + 0a66 0092 0004 lri $CR, #0x0004 + 0a68 2002 lrs $AX0.L, @0x0002 + 0a69 8100 clr $ACC0 + 0a6a 8900 clr $ACC1 + 0a6b 2430 lrs $AC0.L, @0x0030 + 0a6c 8d00 set15 + 0a6d 0099 0050 lri $AX1.L, #0x0050 + 0a6f a000 mulx $AX0.L, $AX1.L + 0a70 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0a71 1404 lsl $ACC0, #4 + 0a72 8c00 clr15 + 0a73 1ffe mrr $AC1.M, $AC0.M + 0a74 0083 0580 lri $AR3, #0x0580 + 0a76 2201 lrs $AX0.H, @0x0001 + 0a77 8600 tstaxh $AX0.H + 0a78 0294 0a89 jnz 0x0a89 + 0a7a 2204 lrs $AX0.H, @0x0004 + 0a7b 8600 tstaxh $AX0.H + 0a7c 02b4 0ad2 callne 0x0ad2 + 0a7e 8100 clr $ACC0 + 0a7f 2605 lrs $AC0.M, @0x0005 + 0a80 b100 tst $ACC0 + 0a81 0295 0a96 jz 0x0a96 + 0a83 8100 clr $ACC0 + 0a84 2e05 srs @0x0005, $AC0.M + 0a85 2281 lrs $AX0.H, @0xff81 + 0a86 8600 tstaxh $AX0.H + 0a87 0294 0a90 jnz 0x0a90 + 0a89 8100 clr $ACC0 + 0a8a 005f loop $AC1.M + 0a8b 1b7e srri @$AR3, $AC0.M + 0a8c 7400 incm $AC0.M + 0a8d 2e01 srs @0x0001, $AC0.M + 0a8e 029f 0ace jmp 0x0ace + 0a90 2688 lrs $AC0.M, @0xff88 + 0a91 2489 lrs $AC0.L, @0xff89 + 0a92 2e34 srs @0x0034, $AC0.M + 0a93 2c35 srs @0x0035, $AC0.L + 0a94 02bf 0ad5 call 0x0ad5 + 0a96 00ff 0360 sr @0x0360, $AC1.M + 0a98 2638 lrs $AC0.M, @0x0038 + 0a99 2439 lrs $AC0.L, @0x0039 + 0a9a 009f 0005 lri $AC1.M, #0x0005 + 0a9c 02bf 0103 call 0x0103 + 0a9e 0092 0004 lri $CR, #0x0004 + 0aa0 00df 0360 lr $AC1.M, @0x0360 + 0aa2 8100 clr $ACC0 + 0aa3 263a lrs $AC0.M, @0x003a + 0aa4 b100 tst $ACC0 + 0aa5 0294 0ab5 jnz 0x0ab5 + 0aa7 263b lrs $AC0.M, @0x003b + 0aa8 5c00 sub $ACC0, $AC1.L + 0aa9 0290 0ab5 jns 0x0ab5 + 0aab 223b lrs $AX0.H, @0x003b + 0aac 02bf 0ae6 call 0x0ae6 + 0aae 5500 subr $ACC1, $AX0.H + 0aaf 009a 0001 lri $AX0.H, #0x0001 + 0ab1 00fa 0405 sr @0x0405, $AX0.H + 0ab3 029f 0a83 jmp 0x0a83 + 0ab5 1f5f mrr $AX0.H, $AC1.M + 0ab6 02bf 0ae6 call 0x0ae6 + 0ab8 00fa 0362 sr @0x0362, $AX0.H + 0aba 8100 clr $ACC0 + 0abb 263a lrs $AC0.M, @0x003a + 0abc 243b lrs $AC0.L, @0x003b + 0abd 1570 lsr $ACC1, #-16 + 0abe 0a01 lris $AX0.H, #0x01 + 0abf 0081 0405 lri $AR1, #0x0405 + 0ac1 5c00 sub $ACC0, $AC1.L + 0ac2 b100 tst $ACC0 + 0ac3 0275 ifz + 0ac4 1a3a srr @$AR1, $AX0.H + 0ac5 2e3a srs @0x003a, $AC0.M + 0ac6 2c3b srs @0x003b, $AC0.L + 0ac7 2638 lrs $AC0.M, @0x0038 + 0ac8 2439 lrs $AC0.L, @0x0039 + 0ac9 00d8 0362 lr $AX0.L, @0x0362 + 0acb 7000 addaxl $ACC0, $AX0.L + 0acc 2c39 srs @0x0039, $AC0.L + 0acd 2e38 srs @0x0038, $AC0.M + 0ace 0092 00ff lri $CR, #0x00ff + 0ad0 029f 0565 jmp 0x0565 + 0ad2 8100 clr $ACC0 + 0ad3 2e34 srs @0x0034, $AC0.M + 0ad4 2e35 srs @0x0035, $AC0.M + 0ad5 2334 lrs $AX1.H, @0x0034 + 0ad6 2135 lrs $AX1.L, @0x0035 + 0ad7 268a lrs $AC0.M, @0xff8a + 0ad8 248b lrs $AC0.L, @0xff8b + 0ad9 5a00 subax $ACC0, $AX1.L + 0ada 2e3a srs @0x003a, $AC0.M + 0adb 2c3b srs @0x003b, $AC0.L + 0adc 2634 lrs $AC0.M, @0x0034 + 0add 2435 lrs $AC0.L, @0x0035 + 0ade 238c lrs $AX1.H, @0xff8c + 0adf 218d lrs $AX1.L, @0xff8d + 0ae0 4a00 addax $ACC0, $AX1.L + 0ae1 2e38 srs @0x0038, $AC0.M + 0ae2 2c39 srs @0x0039, $AC0.L + 0ae3 8100 clr $ACC0 + 0ae4 2e05 srs @0x0005, $AC0.M + 0ae5 02df ret +} + +void 0ae6_ConvSigned8bitToSigned16bit() { + 0ae6 0080 ffd3 lri $AR0, #0xffd3 + 0ae8 0084 0000 lri $IX0, #0x0000 + 0aea 007a 0aee bloop $AX0.H, 0x0aee + 0aec 199e lrrn $AC0.M, @$AR0 + 0aed 1488 asl $ACC0, #8 + 0aee 1b7e srri @$AR3, $AC0.M + 0aef 02df ret +} + +void 0af0_Unk() { + 0af0 009e ffff lri $AC0.M, #0xffff + 0af2 00fe 03f2 sr @0x03f2, $AC0.M + 0af4 8100 clr $ACC0 + 0af5 00fe 03f0 sr @0x03f0, $AC0.M + 0af7 00fe 03f6 sr @0x03f6, $AC0.M + 0af9 009e 0100 lri $AC0.M, #0x0100 + 0afb 00fe 03f7 sr @0x03f7, $AC0.M + 0afd 00da 03f7 lr $AX0.H, @0x03f7 + 0aff 009e 8000 lri $AC0.M, #0x8000 + 0b01 5400 subr $ACC0, $AX0.H + 0b02 00fe 03f5 sr @0x03f5, $AC0.M + 0b04 009e 0030 lri $AC0.M, #0x0030 + 0b06 00fe 03f3 sr @0x03f3, $AC0.M + 0b08 009e 0010 lri $AC0.M, #0x0010 + 0b0a 00fe 03f4 sr @0x03f4, $AC0.M + 0b0c 009e 0096 lri $AC0.M, #0x0096 + 0b0e 00fe 03f1 sr @0x03f1, $AC0.M + 0b10 02df ret +} + +void 0b11_Unk() { + 0b11 0080 0b00 lri $AR0, #0x0b00 + 0b13 8100 clr $ACC0 + 0b14 00de 03f0 lr $AC0.M, @0x03f0 + 0b16 8900 clr $ACC1 + 0b17 b100 tst $ACC0 + 0b18 0275 ifz + 0b19 0550 addis $ACC1, #0x50 + 0b1a 00ff 03f0 sr @0x03f0, $AC1.M + 0b1c 0200 0b60 addi $AC0.M, #0x0b60 + 0b1e 1c7e mrr $AR3, $AC0.M + 0b1f 009f 004e lri $AC1.M, #0x004e + 0b21 02bf 03ac call 0x03ac + 0b23 02df ret +} + +void 0b24_Unk() { + + 0b24 00de 03f1 lr $AC0.M, @0x03f1 + 0b26 0200 0b60 addi $AC0.M, #0x0b60 + 0b28 1c7e mrr $AR3, $AC0.M + 0b29 8100 clr $ACC0 + 0b2a 8900 clr $ACC1 + 0b2b 009f 00a0 lri $AC1.M, #0x00a0 + 0b2d 00de 03f1 lr $AC0.M, @0x03f1 + 0b2f 5d00 sub $ACC1, $AC0.L + 0b30 009e 0050 lri $AC0.M, #0x0050 + 0b32 0750 cmpis $ACC1, #0x50 + 0b33 0270 ifns + 0b34 5d00 sub $ACC1, $AC0.L + 0b35 00da 03f2 lr $AX0.H, @0x03f2 + 0b37 8600 tstaxh $AX0.H + 0b38 0290 0b56 jns 0x0b56 + 0b3a 00de 03f3 lr $AC0.M, @0x03f3 + 0b3c 5c00 sub $ACC0, $AC1.L + 0b3d 0293 0b41 jle 0x0b41 + 0b3f 029f 0b5b jmp 0x0b5b + 0b41 00db 03f7 lr $AX1.H, @0x03f7 + 0b43 009e 8000 lri $AC0.M, #0x8000 + 0b45 4600 addr $ACC0, $AX1.H + 0b46 029f 0b4d jmp 0x0b4d + 0b48 00db 03f7 lr $AX1.H, @0x03f7 + 0b4a 009e 8000 lri $AC0.M, #0x8000 + 0b4c 5600 subr $ACC0, $AX1.H + 0b4d 00fe 03f5 sr @0x03f5, $AC0.M + 0b4f 1fda mrr $AC0.M, $AX0.H + 0b50 7c00 neg $ACC0 + 0b51 1f5e mrr $AX0.H, $AC0.M + 0b52 00fe 03f2 sr @0x03f2, $AC0.M + 0b54 029f 0b5b jmp 0x0b5b + 0b56 00de 03f4 lr $AC0.M, @0x03f4 + 0b58 5d00 sub $ACC1, $AC0.L + 0b59 0293 0b48 jle 0x0b48 + 0b5b 8900 clr $ACC1 + 0b5c 00dd 03f5 lr $AC1.L, @0x03f5 + 0b5e 1501 lsl $ACC1, #1 + 0b5f 8100 clr $ACC0 + 0b60 00dc 03f6 lr $AC0.L, @0x03f6 + 0b62 008b 009f lri $WR3, #0x009f + 0b64 0080 0b00 lri $AR0, #0x0b00 + 0b66 0099 0000 lri $AX1.L, #0x0000 + 0b68 1150 0b6f bloopi #0x50, 0x0b6f + 0b6a 1878 lrr $AX0.L, @$AR3 + 0b6b 4c00 add $ACC0, $AC1.L + 0b6c 1cfe mrr $IX3, $AC0.M + 0b6d 001f addarn $AR3, $IX3 + 0b6e 1fd9 mrr $AC0.M, $AX1.L + 0b6f 1b18 srri @$AR0, $AX0.L + 0b70 009f 0b60 lri $AC1.M, #0x0b60 + 0b72 1fc3 mrr $AC0.M, $AR3 + 0b73 5c00 sub $ACC0, $AC1.L + 0b74 00fe 03f1 sr @0x03f1, $AC0.M + 0b76 00fc 03f6 sr @0x03f6, $AC0.L + 0b78 008b ffff lri $WR3, #0xffff + 0b7a 02df ret +} + +void 0b7b_Unk() { + 0b7b 009f 0050 lri $AC1.M, #0x0050 + 0b7d 0080 0b00 lri $AR0, #0x0b00 + 0b7f 0083 0d60 lri $AR3, #0x0d60 + 0b81 0098 3fff lri $AX0.L, #0x3fff + 0b83 02bf 03bd call 0x03bd + 0b85 009f 0050 lri $AC1.M, #0x0050 + 0b87 0080 0b00 lri $AR0, #0x0b00 + 0b89 0083 0d00 lri $AR3, #0x0d00 + 0b8b 0098 3fff lri $AX0.L, #0x3fff + 0b8d 02bf 03bd call 0x03bd + 0b8f 02df ret +} + +void 0b90_Unk() { + 0b90 8a00 m2 + 0b91 8f00 set40 + 0b92 8100 clr $ACC0 + 0b93 00de 0404 lr $AC0.M, @0x0404 + 0b95 b100 tst $ACC0 + 0b96 0295 0b9d jz 0x0b9d + 0b98 8100 clr $ACC0 + 0b99 00fe 0478 sr @0x0478, $AC0.M + 0b9b 00fe 0479 sr @0x0479, $AC0.M + 0b9d 00df 0479 lr $AC1.M, @0x0479 + 0b9f 00db 0478 lr $AX1.H, @0x0478 + 0ba1 0099 0000 lri $AX1.L, #0x0000 + 0ba3 0084 0000 lri $IX0, #0x0000 + 0ba5 1150 0bae bloopi #0x50, 0x0bae + 0ba7 199e lrrn $AC0.M, @$AR0 + 0ba8 5c7c sub'ln $ACC0, $AC1.L : $AC1.M, @$AR0 + 0ba9 c000 mulc $AC0.M, $AX0.H + 0baa 6e00 movp $ACC0 + 0bab 1488 asl $ACC0, #8 + 0bac 4a00 addax $ACC0, $AX1.L + 0bad 1b1e srri @$AR0, $AC0.M + 0bae 1f7e mrr $AX1.H, $AC0.M + 0baf 00fb 0478 sr @0x0478, $AX1.H + 0bb1 00ff 0479 sr @0x0479, $AC1.M + 0bb3 8b00 m0 + 0bb4 8e00 set16 + 0bb5 02df ret +} + +void 0bb6_Unk() { + 0bb6 0080 01be lri $AR0, #0x01be + 0bb8 1918 lrri $AX0.L, @$AR0 + 0bb9 191a lrri $AX0.H, @$AR0 + 0bba 0080 0180 lri $AR0, #0x0180 + 0bbc 0083 0180 lri $AR3, #0x0180 + 0bbe 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0bbf 1ffe mrr $AC1.M, $AC0.M + 0bc0 1120 0bc7 bloopi #0x20, 0x0bc7 + 0bc2 7c00 neg $ACC0 + 0bc3 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0bc4 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0bc5 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 0bc6 1501 lsl $ACC1, #1 + 0bc7 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + 0bc8 0080 01fe lri $AR0, #0x01fe + 0bca 191a lrri $AX0.H, @$AR0 + 0bcb 1918 lrri $AX0.L, @$AR0 + 0bcc 0080 01c0 lri $AR0, #0x01c0 + 0bce 0083 01c0 lri $AR3, #0x01c0 + 0bd0 1ff8 mrr $AC1.M, $AX0.L + 0bd1 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0bd2 f800 addpaxz $ACC0, $AX0.H + 0bd3 0240 01ff andi $AC0.M, #0x01ff + 0bd5 0260 2000 ori $AC0.M, #0x2000 + 0bd7 02bf 0bda call 0x0bda + 0bd9 02df ret +} + +void 0bda_Unk() { + 0bda b900 tst $ACC1 + 0bdb 0272 ifg + 0bdc 7c00 neg $ACC0 + 0bdd 1f7e mrr $AX1.H, $AC0.M + 0bde 4700 addr $ACC1, $AX1.H + 0bdf 1110 0be4 bloopi #0x10, 0x0be4 + 0be1 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0be2 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0be3 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0be4 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0be5 02df ret +} + +void 0be6_Nop() { + 0be6 0000 nop + 0be7 0000 nop + 0be8 0000 nop + 0be9 0000 nop + 0bea 0000 nop + 0beb 0000 nop + 0bec 0000 nop + 0bed 0000 nop + 0bee 0000 nop + 0bef 0000 nop } \ No newline at end of file diff --git a/docs/DSP/DSP_UC_Pikmin2Wii.txt b/docs/DSP/DSP_UC_Pikmin2Wii.txt index e8deb70e56..c13559a1d9 100644 --- a/docs/DSP/DSP_UC_Pikmin2Wii.txt +++ b/docs/DSP/DSP_UC_Pikmin2Wii.txt @@ -1,2877 +1,2877 @@ -// This one belongs to Pikmin 2 for the Wii and utilizes the mysterious UnkZelda address. Also very different from Pikmin 1 for the Wii - 0000 029f 0012 jmp 0x0012 - 0002 0000 nop - 0003 0000 nop - 0004 02ff rti - 0005 0000 nop - 0006 02ff rti - 0007 0000 nop - 0008 02ff rti - 0009 0000 nop - 000a 02ff rti - 000b 0000 nop - 000c 02ff rti - 000d 0000 nop - 000e 029f 072e jmp 0x072e - 0010 029f 0059 jmp 0x0059 - 0012 1205 sbclr #0x05 - 0013 02bf 0062 call 0x0062 - 0015 8100 clr $ACC0 - 0016 009f 1000 lri $AC1.M, #0x1000 - 0018 0080 0000 lri $AR0, #0x0000 - 001a 005f loop $AC1.M - 001b 1b1e srri @$AR0, $AC0.M - 001c 02bf 07fe call 0x07fe - 001e 02bf 0f72 call 0x0f72 - 0020 0e00 lris $AC0.M, #0x00 - 0021 02bf 07e0 call 0x07e0 - 0023 009e 1111 lri $AC0.M, #0x1111 - 0025 02bf 07ea call 0x07ea - 0027 0e00 lris $AC0.M, #0x00 - 0028 00fe 034e sr @0x034e, $AC0.M - 002a 1305 sbset #0x05 - 002b 3a00 orr $AC0.M, $AX1.H - 002c 7400 incm $AC0.M - 002d 1f7e mrr $AX1.H, $AC0.M - 002e 0240 00ff andi $AC0.M, #0x00ff - 0030 0200 5500 addi $AC0.M, #0x5500 - 0032 02bf 00a0 call 0x00a0 - 0034 029f 083b jmp 0x083b - 0036 00df 0357 lr $AC1.M, @0x0357 - 0038 00ff 0345 sr @0x0345, $AC1.M - 003a 00de 0356 lr $AC0.M, @0x0356 - 003c 1ffe mrr $AC1.M, $AC0.M - 003d 0340 00ff andi $AC1.M, #0x00ff - 003f 00ff 0344 sr @0x0344, $AC1.M - 0041 1479 lsr $ACC0, #-7 - 0042 0240 007e andi $AC0.M, #0x007e - 0044 00fe 0343 sr @0x0343, $AC0.M - 0046 0200 0080 addi $AC0.M, #0x0080 - 0048 1c1e mrr $AR0, $AC0.M - 0049 170f jmpr $AR0 - 004a 0092 00ff lri $CR, #0x00ff - 004c 009e cafe lri $AC0.M, #0xcafe - 004e 02bf 00a0 call 0x00a0 - 0050 0e04 lris $AC0.M, #0x04 - 0051 02bf 07e0 call 0x07e0 - 0053 00de 0356 lr $AC0.M, @0x0356 - 0055 02bf 07ea call 0x07ea - 0057 029f 002b jmp 0x002b - 0059 1205 sbclr #0x05 - 005a 02bf 0062 call 0x0062 - 005c 0e01 lris $AC0.M, #0x01 - 005d 02bf 07e0 call 0x07e0 - 005f 1305 sbset #0x05 - 0060 029f 002b jmp 0x002b - 0062 1202 sbclr #0x02 - 0063 1203 sbclr #0x03 - 0064 1204 sbclr #0x04 - 0065 1306 sbset #0x06 - 0066 8e00 set16 - 0067 8c00 clr15 - 0068 8b00 m0 - 0069 009e ffff lri $AC0.M, #0xffff - 006b 1d1e mrr $WR0, $AC0.M - 006c 1d3e mrr $WR1, $AC0.M - 006d 1d5e mrr $WR2, $AC0.M - 006e 1d7e mrr $WR3, $AC0.M - 006f 0092 00ff lri $CR, #0x00ff - 0071 02df ret - 0072 0081 0358 lri $AR1, #0x0358 - 0074 0090 0000 lri $AC0.H, #0x0000 - 0076 0c00 lris $AC0.L, #0x00 - 0077 007e 007c bloop $AC0.M, 0x007c - 0079 193e lrri $AC0.M, @$AR1 - 007a 1b1e srri @$AR0, $AC0.M - 007b 193e lrri $AC0.M, @$AR1 - 007c 1b1e srri @$AR0, $AC0.M - 007d 02df ret - 007e 029f 004a jmp 0x004a - 0080 029f 004a jmp 0x004a - 0082 029f 00d9 jmp 0x00d9 - 0084 029f 02e3 jmp 0x02e3 - 0086 029f 007e jmp 0x007e - 0088 029f 0677 jmp 0x0677 - 008a 029f 0689 jmp 0x0689 - 008c 029f 004a jmp 0x004a - 008e 029f 05c0 jmp 0x05c0 - 0090 029f 060c jmp 0x060c - 0092 029f 05f0 jmp 0x05f0 - 0094 029f 004a jmp 0x004a - 0096 029f 004a jmp 0x004a - 0098 029f 004a jmp 0x004a - 009a 029f 0103 jmp 0x0103 - 009c 029f 00f6 jmp 0x00f6 - 009e 029f 004a jmp 0x004a - 00a0 00fe 0b00 sr @0x0b00, $AC0.M - 00a2 8100 clr $ACC0 - 00a3 00de 0354 lr $AC0.M, @0x0354 - 00a5 1408 lsl $ACC0, #8 - 00a6 00df 0341 lr $AC1.M, @0x0341 - 00a8 3e00 orc $AC0.M - 00a9 00fe 0b01 sr @0x0b01, $AC0.M - 00ab 00de 0350 lr $AC0.M, @0x0350 - 00ad 00fe 0b02 sr @0x0b02, $AC0.M - 00af 00de 0351 lr $AC0.M, @0x0351 - 00b1 00fe 0b03 sr @0x0b03, $AC0.M - 00b3 00de 0352 lr $AC0.M, @0x0352 - 00b5 00fe 0b04 sr @0x0b04, $AC0.M - 00b7 00de 037d lr $AC0.M, @0x037d - 00b9 00dc 037e lr $AC0.L, @0x037e - 00bb 009f 0b00 lri $AC1.M, #0x0b00 - 00bd 0080 0010 lri $AR0, #0x0010 - 00bf 0090 0001 lri $AC0.H, #0x0001 - 00c1 1c3f mrr $AR1, $AC1.M - 00c2 0f0a lris $AC1.M, #0x0a - 00c3 2fd1 srs @SampleFormat, $AC1.M - 00c4 1f5e mrr $AX0.H, $AC0.M - 00c5 1f1c mrr $AX0.L, $AC0.L - 00c6 009e ffff lri $AC0.M, #0xffff - 00c8 2ed6 srs @ACEAH, $AC0.M - 00c9 2ed7 srs @ACEAL, $AC0.M - 00ca 1fda mrr $AC0.M, $AX0.H - 00cb 1f98 mrr $AC0.L, $AX0.L - 00cc 147f lsr $ACC0, #-1 - 00cd 2ed8 srs @ACCAH, $AC0.M - 00ce 2cd9 srs @ACCAL, $AC0.L - 00cf 1f40 mrr $AX0.H, $AR0 - 00d0 007a 00d7 bloop $AX0.H, 0x00d7 - 00d2 193e lrri $AC0.M, @$AR1 - 00d3 2ed3 srs @UnkZelda, $AC0.M - 00d4 0000 nop - 00d5 0000 nop - 00d6 0000 nop - 00d7 0000 nop - 00d8 02df ret - 00d9 0080 0380 lri $AR0, #0x0380 - 00db 0e04 lris $AC0.M, #0x04 - 00dc 02bf 0072 call 0x0072 - 00de 0081 0382 lri $AR1, #0x0382 - 00e0 009f 0000 lri $AC1.M, #0x0000 - 00e2 0080 0280 lri $AR0, #0x0280 - 00e4 02bf 0647 call 0x0647 - 00e6 0081 0384 lri $AR1, #0x0384 - 00e8 009f 0300 lri $AC1.M, #0x0300 - 00ea 0080 0020 lri $AR0, #0x0020 - 00ec 02bf 0647 call 0x0647 - 00ee 00de 0345 lr $AC0.M, @0x0345 - 00f0 00fe 0342 sr @0x0342, $AC0.M - 00f2 02bf 0d44 call 0x0d44 - 00f4 029f 004a jmp 0x004a - 00f6 0080 037d lri $AR0, #0x037d - 00f8 0e01 lris $AC0.M, #0x01 - 00f9 02bf 0072 call 0x0072 - 00fb 00de 037d lr $AC0.M, @0x037d - 00fd 0240 7fff andi $AC0.M, #0x7fff - 00ff 00fe 037d sr @0x037d, $AC0.M - 0101 029f 004a jmp 0x004a - 0103 0080 0374 lri $AR0, #0x0374 - 0105 0e01 lris $AC0.M, #0x01 - 0106 00fe 0377 sr @0x0377, $AC0.M - 0108 00fe 037c sr @0x037c, $AC0.M - 010a 02bf 0072 call 0x0072 - 010c 00de 0345 lr $AC0.M, @0x0345 - 010e 00fe 0376 sr @0x0376, $AC0.M - 0110 029f 004a jmp 0x004a - 0112 0081 034c lri $AR1, #0x034c - 0114 009f 0400 lri $AC1.M, #0x0400 - 0116 0080 00c0 lri $AR0, #0x00c0 - 0118 02bf 0647 call 0x0647 - 011a 02df ret - 011b 0081 034c lri $AR1, #0x034c - 011d 009f 0400 lri $AC1.M, #0x0400 - 011f 0080 0080 lri $AR0, #0x0080 - 0121 0081 034c lri $AR1, #0x034c - 0123 193e lrri $AC0.M, @$AR1 - 0124 193c lrri $AC0.L, @$AR1 - 0125 0098 0000 lri $AX0.L, #0x0000 - 0127 7000 addaxl $ACC0, $AX0.L - 0128 02bf 0656 call 0x0656 - 012a 02df ret - 012b 191e lrri $AC0.M, @$AR0 - 012c 191a lrri $AX0.H, @$AR0 - 012d 005f loop $AC1.M - 012e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 012f 1b7e srri @$AR3, $AC0.M - 0130 1b7a srri @$AR3, $AX0.H - 0131 02df ret - 0132 0000 nop - 0133 007f 0138 bloop $AC1.M, 0x0138 - 0135 191e lrri $AC0.M, @$AR0 - 0136 1b7e srri @$AR3, $AC0.M - 0137 191e lrri $AC0.M, @$AR0 - 0138 1b7e srri @$AR3, $AC0.M - 0139 0000 nop - 013a 02df ret - 013b 191e lrri $AC0.M, @$AR0 - 013c 191a lrri $AX0.H, @$AR0 - 013d 007f 0142 bloop $AC1.M, 0x0142 - 013f 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 0140 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 0141 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 0142 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0143 0000 nop - 0144 02df ret - 0145 8a00 m2 - 0146 157f lsr $ACC1, #-1 - 0147 1c20 mrr $AR1, $AR0 - 0148 1c03 mrr $AR0, $AR3 - 0149 193a lrri $AX0.H, @$AR1 - 014a 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 - 014b 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 - 014c 007f 0151 bloop $AC1.M, 0x0151 - 014e 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 014f 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 0150 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 0151 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 0152 8b00 m0 - 0153 02df ret - 0154 8a00 m2 - 0155 191a lrri $AX0.H, @$AR0 - 0156 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 - 0157 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0158 005f loop $AC1.M - 0159 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M - 015a 8b00 m0 - 015b 02df ret - 015c 8100 clr $ACC0 - 015d 8900 clr $ACC1 - 015e 0e50 lris $AC0.M, #0x50 - 015f 0080 0d00 lri $AR0, #0x0d00 - 0161 005e loop $AC0.M - 0162 1b1f srri @$AR0, $AC1.M - 0163 0080 0d60 lri $AR0, #0x0d60 - 0165 005e loop $AC0.M - 0166 1b1f srri @$AR0, $AC1.M - 0167 00da 0374 lr $AX0.H, @0x0374 - 0169 8600 tstaxh $AX0.H - 016a 02b5 0f9d callz 0x0f9d - 016c 8100 clr $ACC0 - 016d 8900 clr $ACC1 - 016e 0e50 lris $AC0.M, #0x50 - 016f 0080 0ca0 lri $AR0, #0x0ca0 - 0171 005e loop $AC0.M - 0172 1b1f srri @$AR0, $AC1.M - 0173 0080 0f40 lri $AR0, #0x0f40 - 0175 005e loop $AC0.M - 0176 1b1f srri @$AR0, $AC1.M - 0177 0080 0fa0 lri $AR0, #0x0fa0 - 0179 005e loop $AC0.M - 017a 1b1f srri @$AR0, $AC1.M - 017b 0080 0a00 lri $AR0, #0x0a00 - 017d 005e loop $AC0.M - 017e 1b1f srri @$AR0, $AC1.M - 017f 0080 09a0 lri $AR0, #0x09a0 - 0181 005e loop $AC0.M - 0182 1b1f srri @$AR0, $AC1.M - 0183 0f04 lris $AC1.M, #0x04 - 0184 0080 0e10 lri $AR0, #0x0e10 - 0186 0083 0dc0 lri $AR3, #0x0dc0 - 0188 02bf 0132 call 0x0132 - 018a 0080 0e70 lri $AR0, #0x0e70 - 018c 0083 0e20 lri $AR3, #0x0e20 - 018e 02bf 0132 call 0x0132 - 0190 0080 0ed0 lri $AR0, #0x0ed0 - 0192 0083 0e80 lri $AR3, #0x0e80 - 0194 02bf 0132 call 0x0132 - 0196 0080 0f30 lri $AR0, #0x0f30 - 0198 0083 0ee0 lri $AR3, #0x0ee0 - 019a 02bf 0132 call 0x0132 - 019c 8100 clr $ACC0 - 019d 0e50 lris $AC0.M, #0x50 - 019e 8900 clr $ACC1 - 019f 0080 0dc8 lri $AR0, #0x0dc8 - 01a1 005e loop $AC0.M - 01a2 1b1f srri @$AR0, $AC1.M - 01a3 0080 0e28 lri $AR0, #0x0e28 - 01a5 005e loop $AC0.M - 01a6 1b1f srri @$AR0, $AC1.M - 01a7 0080 0e88 lri $AR0, #0x0e88 - 01a9 005e loop $AC0.M - 01aa 1b1f srri @$AR0, $AC1.M - 01ab 0080 0ee8 lri $AR0, #0x0ee8 - 01ad 005e loop $AC0.M - 01ae 1b1f srri @$AR0, $AC1.M - 01af 02df ret - 01b0 009f 0580 lri $AC1.M, #0x0580 - 01b2 009b 00a0 lri $AX1.H, #0x00a0 - 01b4 0081 0393 lri $AR1, #0x0393 - 01b6 18bc lrrd $AC0.L, @$AR1 - 01b7 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 01b8 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 01b9 0080 0050 lri $AR0, #0x0050 - 01bb 02bf 0649 call 0x0649 - 01bd 02df ret - 01be 00df 03a1 lr $AC1.M, @0x03a1 - 01c0 0508 addis $ACC1, #0x08 - 01c1 0080 0580 lri $AR0, #0x0580 - 01c3 1c7f mrr $AR3, $AC1.M - 01c4 0098 7fff lri $AX0.L, #0x7fff - 01c6 8900 clr $ACC1 - 01c7 0f50 lris $AC1.M, #0x50 - 01c8 02bf 0145 call 0x0145 - 01ca 02df ret - 01cb 00c0 03a0 lr $AR0, @0x03a0 - 01cd 191a lrri $AX0.H, @$AR0 - 01ce 02bf 01b0 call 0x01b0 - 01d0 02bf 01be call 0x01be - 01d2 8100 clr $ACC0 - 01d3 8900 clr $ACC1 - 01d4 00de 0390 lr $AC0.M, @0x0390 - 01d6 02a0 0001 andf $AC0.M, #0x0001 - 01d8 029d 01e1 jlz 0x01e1 - 01da 0080 0398 lri $AR0, #0x0398 - 01dc 0e08 lris $AC0.M, #0x08 - 01dd 00c1 03a1 lr $AR1, @0x03a1 - 01df 02bf 0c86 call 0x0c86 - 01e1 0f50 lris $AC1.M, #0x50 - 01e2 00c0 03a1 lr $AR0, @0x03a1 - 01e4 00da 0394 lr $AX0.H, @0x0394 - 01e6 8600 tstaxh $AX0.H - 01e7 0295 01ee jz 0x01ee - 01e9 1c7a mrr $AR3, $AX0.H - 01ea 00d8 0395 lr $AX0.L, @0x0395 - 01ec 02bf 0145 call 0x0145 - 01ee 0f50 lris $AC1.M, #0x50 - 01ef 00c0 03a1 lr $AR0, @0x03a1 - 01f1 00da 0396 lr $AX0.H, @0x0396 - 01f3 8600 tstaxh $AX0.H - 01f4 0295 01fb jz 0x01fb - 01f6 1c7a mrr $AR3, $AX0.H - 01f7 00d8 0397 lr $AX0.L, @0x0397 - 01f9 02bf 0145 call 0x0145 - 01fb 00de 0390 lr $AC0.M, @0x0390 - 01fd 02a0 0002 andf $AC0.M, #0x0002 - 01ff 02dd retlz - 0200 0080 0398 lri $AR0, #0x0398 - 0202 0e08 lris $AC0.M, #0x08 - 0203 00c1 03a1 lr $AR1, @0x03a1 - 0205 02bf 0c86 call 0x0c86 - 0207 02df ret - 0208 8900 clr $ACC1 - 0209 009f 0dc0 lri $AC1.M, #0x0dc0 - 020b 00ff 03a1 sr @0x03a1, $AC1.M - 020d 009f 03a8 lri $AC1.M, #0x03a8 - 020f 00ff 03a2 sr @0x03a2, $AC1.M - 0211 009f 03a4 lri $AC1.M, #0x03a4 - 0213 00ff 03a0 sr @0x03a0, $AC1.M - 0215 1104 0235 bloopi #0x04, 0x0235 - 0217 00c0 03a2 lr $AR0, @0x03a2 - 0219 0083 0390 lri $AR3, #0x0390 - 021b 8900 clr $ACC1 - 021c 0f08 lris $AC1.M, #0x08 - 021d 02bf 0132 call 0x0132 - 021f 00da 0390 lr $AX0.H, @0x0390 - 0221 8600 tstaxh $AX0.H - 0222 0295 0226 jz 0x0226 - 0224 02bf 01cb call 0x01cb - 0226 8100 clr $ACC0 - 0227 00de 03a2 lr $AC0.M, @0x03a2 - 0229 0410 addis $ACC0, #0x10 - 022a 00fe 03a2 sr @0x03a2, $AC0.M - 022c 00de 03a1 lr $AC0.M, @0x03a1 - 022e 0460 addis $ACC0, #0x60 - 022f 00fe 03a1 sr @0x03a1, $AC0.M - 0231 00de 03a0 lr $AC0.M, @0x03a0 - 0233 7400 incm $AC0.M - 0234 00fe 03a0 sr @0x03a0, $AC0.M - 0236 00da 0374 lr $AX0.H, @0x0374 - 0238 8600 tstaxh $AX0.H - 0239 0294 025f jnz 0x025f - 023b 0f50 lris $AC1.M, #0x50 - 023c 0080 0be0 lri $AR0, #0x0be0 - 023e 0083 0e80 lri $AR3, #0x0e80 - 0240 0098 7fff lri $AX0.L, #0x7fff - 0242 02bf 0145 call 0x0145 - 0244 0f50 lris $AC1.M, #0x50 - 0245 0080 0be0 lri $AR0, #0x0be0 - 0247 0083 0ee0 lri $AR3, #0x0ee0 - 0249 0098 b820 lri $AX0.L, #0xb820 - 024b 02bf 0145 call 0x0145 - 024d 0f28 lris $AC1.M, #0x28 - 024e 0080 0c68 lri $AR0, #0x0c68 - 0250 0083 0e80 lri $AR3, #0x0e80 - 0252 0098 b820 lri $AX0.L, #0xb820 - 0254 02bf 0145 call 0x0145 - 0256 0f28 lris $AC1.M, #0x28 - 0257 0080 0c68 lri $AR0, #0x0c68 - 0259 0083 0ee0 lri $AR3, #0x0ee0 - 025b 0098 7fff lri $AX0.L, #0x7fff - 025d 02bf 0145 call 0x0145 - 025f 8100 clr $ACC0 - 0260 8900 clr $ACC1 - 0261 0e50 lris $AC0.M, #0x50 - 0262 0080 0be0 lri $AR0, #0x0be0 - 0264 005e loop $AC0.M - 0265 1b1f srri @$AR0, $AC1.M - 0266 0080 0c40 lri $AR0, #0x0c40 - 0268 005e loop $AC0.M - 0269 1b1f srri @$AR0, $AC1.M - 026a 02df ret - 026b 00c0 03a0 lr $AR0, @0x03a0 - 026d 181a lrr $AX0.H, @$AR0 - 026e 8100 clr $ACC0 - 026f 181e lrr $AC0.M, @$AR0 - 0270 00db 0391 lr $AX1.H, @0x0391 - 0272 7400 incm $AC0.M - 0273 d100 cmpar $ACC1, $AX0.H - 0274 0270 ifge - 0275 8100 clr $ACC0 - 0276 1b1e srri @$AR0, $AC0.M - 0277 00df 03a1 lr $AC1.M, @0x03a1 - 0279 009b 00a0 lri $AX1.H, #0x00a0 - 027b 0081 0393 lri $AR1, #0x0393 - 027d 18bc lrrd $AC0.L, @$AR1 - 027e b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 027f bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0280 0080 0050 lri $AR0, #0x0050 - 0282 02bf 0656 call 0x0656 - 0284 02df ret - 0285 00da 0374 lr $AX0.H, @0x0374 - 0287 8600 tstaxh $AX0.H - 0288 0294 029e jnz 0x029e - 028a 8900 clr $ACC1 - 028b 0f28 lris $AC1.M, #0x28 - 028c 0080 0c40 lri $AR0, #0x0c40 - 028e 0083 0ea8 lri $AR3, #0x0ea8 - 0290 0098 b820 lri $AX0.L, #0xb820 - 0292 02bf 0145 call 0x0145 - 0294 8900 clr $ACC1 - 0295 0f28 lris $AC1.M, #0x28 - 0296 0080 0c40 lri $AR0, #0x0c40 - 0298 0083 0f08 lri $AR3, #0x0f08 - 029a 0098 7fff lri $AX0.L, #0x7fff - 029c 02bf 0145 call 0x0145 - 029e 009f 0dc0 lri $AC1.M, #0x0dc0 - 02a0 00ff 03a1 sr @0x03a1, $AC1.M - 02a2 009f 03a8 lri $AC1.M, #0x03a8 - 02a4 00ff 03a2 sr @0x03a2, $AC1.M - 02a6 009f 03a4 lri $AC1.M, #0x03a4 - 02a8 00ff 03a0 sr @0x03a0, $AC1.M - 02aa 1104 02c8 bloopi #0x04, 0x02c8 - 02ac 00c0 03a2 lr $AR0, @0x03a2 - 02ae 0083 0390 lri $AR3, #0x0390 - 02b0 0f08 lris $AC1.M, #0x08 - 02b1 02bf 0132 call 0x0132 - 02b3 00da 0390 lr $AX0.H, @0x0390 - 02b5 8600 tstaxh $AX0.H - 02b6 0295 02ba jz 0x02ba - 02b8 02bf 026b call 0x026b - 02ba 00de 03a2 lr $AC0.M, @0x03a2 - 02bc 0410 addis $ACC0, #0x10 - 02bd 00fe 03a2 sr @0x03a2, $AC0.M - 02bf 00de 03a1 lr $AC0.M, @0x03a1 - 02c1 0460 addis $ACC0, #0x60 - 02c2 00fe 03a1 sr @0x03a1, $AC0.M - 02c4 00de 03a0 lr $AC0.M, @0x03a0 - 02c6 7400 incm $AC0.M - 02c7 00fe 03a0 sr @0x03a0, $AC0.M - 02c9 02df ret - 02ca 0081 0386 lri $AR1, #0x0386 - 02cc 009f 03a8 lri $AC1.M, #0x03a8 - 02ce 0080 0040 lri $AR0, #0x0040 - 02d0 02bf 0647 call 0x0647 - 02d2 02df ret - 02d3 191e lrri $AC0.M, @$AR0 - 02d4 189c lrrd $AC0.L, @$AR0 - 02d5 4800 addax $ACC0, $AX0.L - 02d6 1b1e srri @$AR0, $AC0.M - 02d7 1b1c srri @$AR0, $AC0.L - 02d8 02df ret - 02d9 8100 clr $ACC0 - 02da 8900 clr $ACC1 - 02db 00df 0354 lr $AC1.M, @0x0354 - 02dd 00de 034e lr $AC0.M, @0x034e - 02df 8200 cmp - 02e0 0293 02d9 jle 0x02d9 - 02e2 02df ret - 02e3 0080 0388 lri $AR0, #0x0388 - 02e5 0081 0072 lri $AR1, #0x0072 - 02e7 0e02 lris $AC0.M, #0x02 - 02e8 173f callr $AR1 - 02e9 02bf 04d7 call 0x04d7 - 02eb 00de 0344 lr $AC0.M, @0x0344 - 02ed 00fe 0341 sr @0x0341, $AC0.M - 02ef 00de 0345 lr $AC0.M, @0x0345 - 02f1 00fe 038e sr @0x038e, $AC0.M - 02f3 8100 clr $ACC0 - 02f4 00fe 0355 sr @0x0355, $AC0.M - 02f6 02bf 02ca call 0x02ca - 02f8 02bf 069b call 0x069b - 02fa 0092 00ff lri $CR, #0x00ff - 02fc 00de 0341 lr $AC0.M, @0x0341 - 02fe 007e 04ce bloop $AC0.M, 0x04ce - 0300 02bf 015c call 0x015c - 0302 02bf 0208 call 0x0208 - 0304 02bf 0543 call 0x0543 - 0306 02bf 0ad4 call 0x0ad4 - 0308 00de 0355 lr $AC0.M, @0x0355 - 030a 7400 incm $AC0.M - 030b 00fe 0355 sr @0x0355, $AC0.M - 030d 8100 clr $ACC0 - 030e 00fe 0354 sr @0x0354, $AC0.M - 0310 00de 0342 lr $AC0.M, @0x0342 - 0312 007e 046e bloop $AC0.M, 0x046e - 0314 009e fead lri $AC0.M, #0xfead - 0316 02bf 00a0 call 0x00a0 - 0318 02bf 02d9 call 0x02d9 - 031a 009e d0d0 lri $AC0.M, #0xd0d0 - 031c 02bf 00a0 call 0x00a0 - 031e 8100 clr $ACC0 - 031f 8900 clr $ACC1 - 0320 00de 0354 lr $AC0.M, @0x0354 - 0322 147c lsr $ACC0, #-4 - 0323 0200 04fc addi $AC0.M, #0x04fc - 0325 1c1e mrr $AR0, $AC0.M - 0326 181f lrr $AC1.M, @$AR0 - 0327 00de 0354 lr $AC0.M, @0x0354 - 0329 0240 000f andi $AC0.M, #0x000f - 032b 3d80 lsrnr $ACC1 - 032c 03c0 8000 andcf $AC1.M, #0x8000 - 032e 029c 046a jlnz 0x046a - 0330 00d8 0354 lr $AX0.L, @0x0354 - 0332 009a 0180 lri $AX0.H, #0x0180 - 0334 8100 clr $ACC0 - 0335 00de 0380 lr $AC0.M, @0x0380 - 0337 00dc 0381 lr $AC0.L, @0x0381 - 0339 9000 mul $AX0.L, $AX0.H - 033a 9400 mulac $AX0.L, $AX0.H, $ACC0 - 033b 00fe 034c sr @0x034c, $AC0.M - 033d 00fc 034d sr @0x034d, $AC0.L - 033f 02bf 0112 call 0x0112 - 0341 00da 0400 lr $AX0.H, @0x0400 - 0343 8600 tstaxh $AX0.H - 0344 0295 046a jz 0x046a - 0346 00da 0401 lr $AX0.H, @0x0401 - 0348 8600 tstaxh $AX0.H - 0349 0294 046a jnz 0x046a - 034b 00da 0433 lr $AX0.H, @0x0433 - 034d 00fa 03f8 sr @0x03f8, $AX0.H - 034f 00da 0406 lr $AX0.H, @0x0406 - 0351 8600 tstaxh $AX0.H - 0352 0294 0f5d jnz 0x0f5d - 0354 8100 clr $ACC0 - 0355 00de 0480 lr $AC0.M, @0x0480 - 0357 0609 cmpis $ACC0, #0x09 - 0358 0295 036b jz 0x036b - 035a 0605 cmpis $ACC0, #0x05 - 035b 0295 036b jz 0x036b - 035d 0608 cmpis $ACC0, #0x08 - 035e 0295 0b04 jz 0x0b04 - 0360 0610 cmpis $ACC0, #0x10 - 0361 0295 0b81 jz 0x0b81 - 0363 0620 cmpis $ACC0, #0x20 - 0364 0295 0bf2 jz 0x0bf2 - 0366 0621 cmpis $ACC0, #0x21 - 0367 0295 0bfa jz 0x0bfa - 0369 029f 09f1 jmp 0x09f1 - 036b 00d8 0402 lr $AX0.L, @0x0402 - 036d 8100 clr $ACC0 - 036e 8900 clr $ACC1 - 036f 00dc 0430 lr $AC0.L, @0x0430 - 0371 8d00 set15 - 0372 0950 lris $AX1.L, #0x50 - 0373 a000 mulx $AX0.L, $AX1.L - 0374 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0375 1404 lsl $ACC0, #4 - 0376 8c00 clr15 - 0377 1ffe mrr $AC1.M, $AC0.M - 0378 0083 0580 lri $AR3, #0x0580 - 037a 02bf 08b3 call 0x08b3 - 037c 029f 037e jmp 0x037e - 037e 0080 0580 lri $AR0, #0x0580 - 0380 0081 0520 lri $AR1, #0x0520 - 0382 0099 0000 lri $AX1.L, #0x0000 - 0384 02bf 0edd call 0x0edd - 0386 00da 04a8 lr $AX0.H, @0x04a8 - 0388 8600 tstaxh $AX0.H - 0389 0295 038f jz 0x038f - 038b 0080 0520 lri $AR0, #0x0520 - 038d 02bf 0ddc call 0x0ddc - 038f 009e 0520 lri $AC0.M, #0x0520 - 0391 00fe 038f sr @0x038f, $AC0.M - 0393 8900 clr $ACC1 - 0394 00df 0484 lr $AC1.M, @0x0484 - 0396 0340 001f andi $AC1.M, #0x001f - 0398 b900 tst $ACC1 - 0399 0295 03bf jz 0x03bf - 039b 00de 038f lr $AC0.M, @0x038f - 039d 5c00 sub $ACC0, $ACC1 - 039e 00fe 038f sr @0x038f, $AC0.M - 03a0 1c7e mrr $AR3, $AC0.M - 03a1 0080 0440 lri $AR0, #0x0440 - 03a3 05fe addis $ACC1, #0xfe - 03a4 02bf 012b call 0x012b - 03a6 0080 0490 lri $AR0, #0x0490 - 03a8 00c1 038f lr $AR1, @0x038f - 03aa 8900 clr $ACC1 - 03ab 00df 0484 lr $AC1.M, @0x0484 - 03ad 0340 001f andi $AC1.M, #0x001f - 03af 02bf 0ca5 call 0x0ca5 - 03b1 00de 038f lr $AC0.M, @0x038f - 03b3 0450 addis $ACC0, #0x50 - 03b4 1c1e mrr $AR0, $AC0.M - 03b5 0083 0440 lri $AR3, #0x0440 - 03b7 8900 clr $ACC1 - 03b8 00df 0484 lr $AC1.M, @0x0484 - 03ba 0340 001f andi $AC1.M, #0x001f - 03bc 05fe addis $ACC1, #0xfe - 03bd 02bf 012b call 0x012b - 03bf 00de 0484 lr $AC0.M, @0x0484 - 03c1 0240 0020 andi $AC0.M, #0x0020 - 03c3 0295 03e1 jz 0x03e1 - 03c5 0080 04a4 lri $AR0, #0x04a4 - 03c7 00c1 038f lr $AR1, @0x038f - 03c9 0082 0454 lri $AR2, #0x0454 - 03cb 0083 04a7 lri $AR3, #0x04a7 - 03cd 18fa lrrd $AX0.H, @$AR3 - 03ce 8600 tstaxh $AX0.H - 03cf 0294 03df jnz 0x03df - 03d1 18fa lrrd $AX0.H, @$AR3 - 03d2 8600 tstaxh $AX0.H - 03d3 0294 03df jnz 0x03df - 03d5 18fa lrrd $AX0.H, @$AR3 - 03d6 8600 tstaxh $AX0.H - 03d7 0294 03df jnz 0x03df - 03d9 8100 clr $ACC0 - 03da 18fe lrrd $AC0.M, @$AR3 - 03db 0280 7fff cmpi $AC0.M, #0x7fff - 03dd 0295 03e1 jz 0x03e1 - 03df 02bf 0cc0 call 0x0cc0 - 03e1 8100 clr $ACC0 - 03e2 00de 042c lr $AC0.M, @0x042c - 03e4 b100 tst $ACC0 - 03e5 0295 03eb jz 0x03eb - 03e7 02bf 0e2b call 0x0e2b - 03e9 029f 0460 jmp 0x0460 - 03eb 8100 clr $ACC0 - 03ec 1c9e mrr $IX0, $AC0.M - 03ed 1cde mrr $IX2, $AC0.M - 03ee 7400 incm $AC0.M - 03ef 1cfe mrr $IX3, $AC0.M - 03f0 8100 clr $ACC0 - 03f1 00de 0407 lr $AC0.M, @0x0407 - 03f3 b100 tst $ACC0 - 03f4 0295 0403 jz 0x0403 - 03f6 00c3 038f lr $AR3, @0x038f - 03f8 0007 dar $AR3 - 03f9 0080 0477 lri $AR0, #0x0477 - 03fb 0084 ffff lri $IX0, #0xffff - 03fd 0087 ffff lri $IX3, #0xffff - 03ff 199a lrrn $AX0.H, @$AR0 - 0400 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - 0401 005e loop $AC0.M - 0402 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - 0403 00da 0485 lr $AX0.H, @0x0485 - 0405 8600 tstaxh $AX0.H - 0406 0295 0419 jz 0x0419 - 0408 8900 clr $ACC1 - 0409 0086 0005 lri $IX2, #0x0005 - 040b 0082 040a lri $AR2, #0x040a - 040d 1106 0411 bloopi #0x06, 0x0411 - 040f 18de lrrd $AC0.M, @$AR2 - 0410 147f lsr $ACC0, #-1 - 0411 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M - 0412 b900 tst $ACC1 - 0413 0294 0419 jnz 0x0419 - 0415 009a 0001 lri $AX0.H, #0x0001 - 0417 00fa 0401 sr @0x0401, $AX0.H - 0419 8f00 set40 - 041a 0086 0002 lri $IX2, #0x0002 - 041c 0082 0408 lri $AR2, #0x0408 - 041e 1106 0449 bloopi #0x06, 0x0449 - 0420 8100 clr $ACC0 - 0421 195e lrri $AC0.M, @$AR2 - 0422 1200 sbclr #0x00 - 0423 b100 tst $ACC0 - 0424 0275 ifz - 0425 1300 sbset #0x00 - 0426 1c7e mrr $AR3, $AC0.M - 0427 195e lrri $AC0.M, @$AR2 - 0428 195f lrri $AC1.M, @$AR2 - 0429 5c00 sub $ACC0, $ACC1 - 042a 14fb asr $ACC0, #-5 - 042b 1f5e mrr $AX0.H, $AC0.M - 042c 1f1c mrr $AX0.L, $AC0.L - 042d 185e lrr $AC0.M, @$AR2 - 042e 0240 00ff andi $AC0.M, #0x00ff - 0430 1f7e mrr $AX1.H, $AC0.M - 0431 185e lrr $AC0.M, @$AR2 - 0432 1478 lsr $ACC0, #-8 - 0433 009c 0000 lri $AC0.L, #0x0000 - 0435 d100 cmpar $ACC1, $AX0.H - 0436 0295 043e jz 0x043e - 0438 185e lrr $AC0.M, @$AR2 - 0439 0272 ifg - 043a 7400 incm $AC0.M - 043b 0271 ifl - 043c 7800 decm $AC0.M - 043d 1a5e srr @$AR2, $AC0.M - 043e 0006 dar $AR2 - 043f 00de 038f lr $AC0.M, @0x038f - 0441 5600 subr $ACC0, $AX1.H - 0442 029d 0447 jlz 0x0447 - 0444 1c1e mrr $AR0, $AC0.M - 0445 02bf 0e01 call 0x0e01 - 0447 0000 nop - 0448 1b5f srri @$AR2, $AC1.M - 0449 000a iar $AR2 - 044a 8e00 set16 - 044b 8100 clr $ACC0 - 044c 00de 0407 lr $AC0.M, @0x0407 - 044e b100 tst $ACC0 - 044f 0295 0460 jz 0x0460 - 0451 00c3 038f lr $AR3, @0x038f - 0453 0087 004f lri $IX3, #0x004f - 0455 001f addarn $AR3, $IX3 - 0456 0080 0477 lri $AR0, #0x0477 - 0458 0084 ffff lri $IX0, #0xffff - 045a 0087 ffff lri $IX3, #0xffff - 045c 19fa lrrn $AX0.H, @$AR3 - 045d 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 045e 005e loop $AC0.M - 045f 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - 0460 00da 0406 lr $AX0.H, @0x0406 - 0462 8600 tstaxh $AX0.H - 0463 0294 0468 jnz 0x0468 - 0465 8100 clr $ACC0 - 0466 00fe 0404 sr @0x0404, $AC0.M - 0468 02bf 011b call 0x011b - 046a 00de 0354 lr $AC0.M, @0x0354 - 046c 7400 incm $AC0.M - 046d 00fe 0354 sr @0x0354, $AC0.M - 046f 009e b05e lri $AC0.M, #0xb05e - 0471 02bf 00a0 call 0x00a0 - 0473 0e00 lris $AC0.M, #0x00 - 0474 00fe 034e sr @0x034e, $AC0.M - 0476 0e04 lris $AC0.M, #0x04 - 0477 02bf 07e0 call 0x07e0 - 0479 00de 0355 lr $AC0.M, @0x0355 - 047b 0260 ff00 ori $AC0.M, #0xff00 - 047d 02bf 07ea call 0x07ea - 047f 02bf 0d62 call 0x0d62 - 0481 02bf 0d74 call 0x0d74 - 0483 02bf 0dc9 call 0x0dc9 - 0485 00de 0341 lr $AC0.M, @0x0341 - 0487 7800 decm $AC0.M - 0488 00fe 0341 sr @0x0341, $AC0.M - 048a 0080 09a0 lri $AR0, #0x09a0 - 048c 0083 0d00 lri $AR3, #0x0d00 - 048e 0f50 lris $AC1.M, #0x50 - 048f 0098 5a82 lri $AX0.L, #0x5a82 - 0491 02bf 0145 call 0x0145 - 0493 0080 09a0 lri $AR0, #0x09a0 - 0495 0083 0d60 lri $AR3, #0x0d60 - 0497 0f50 lris $AC1.M, #0x50 - 0498 02bf 0145 call 0x0145 - 049a 0083 0d00 lri $AR3, #0x0d00 - 049c 02bf 0e19 call 0x0e19 - 049e 0081 0388 lri $AR1, #0x0388 - 04a0 009f 0d00 lri $AC1.M, #0x0d00 - 04a2 0080 0050 lri $AR0, #0x0050 - 04a4 02bf 0654 call 0x0654 - 04a6 0080 0fa0 lri $AR0, #0x0fa0 - 04a8 0083 0d60 lri $AR3, #0x0d60 - 04aa 0f50 lris $AC1.M, #0x50 - 04ab 0098 8000 lri $AX0.L, #0x8000 - 04ad 02bf 0145 call 0x0145 - 04af 0083 0d60 lri $AR3, #0x0d60 - 04b1 02bf 0e19 call 0x0e19 - 04b3 0081 038a lri $AR1, #0x038a - 04b5 009f 0d60 lri $AC1.M, #0x0d60 - 04b7 0080 0050 lri $AR0, #0x0050 - 04b9 02bf 0654 call 0x0654 - 04bb 009a 0000 lri $AX0.H, #0x0000 - 04bd 0098 00a0 lri $AX0.L, #0x00a0 - 04bf 0080 0388 lri $AR0, #0x0388 - 04c1 02bf 02d3 call 0x02d3 - 04c3 0080 038a lri $AR0, #0x038a - 04c5 02bf 02d3 call 0x02d3 - 04c7 02bf 0285 call 0x0285 - 04c9 02bf 0512 call 0x0512 - 04cb 02bf 04e9 call 0x04e9 - 04cd 0000 nop - 04ce 0000 nop - 04cf 009e 0dac lri $AC0.M, #0x0dac - 04d1 02bf 00a0 call 0x00a0 - 04d3 0080 002b lri $AR0, #0x002b - 04d5 029f 0779 jmp 0x0779 - 04d7 0080 0374 lri $AR0, #0x0374 - 04d9 0e02 lris $AC0.M, #0x02 - 04da 02bf 0074 call 0x0074 - 04dc 00de 0374 lr $AC0.M, @0x0374 - 04de 0240 7fff andi $AC0.M, #0x7fff - 04e0 00fe 0374 sr @0x0374, $AC0.M - 04e2 00de 0376 lr $AC0.M, @0x0376 - 04e4 0240 7fff andi $AC0.M, #0x7fff - 04e6 00fe 0376 sr @0x0376, $AC0.M - 04e8 02df ret - 04e9 00da 0374 lr $AX0.H, @0x0374 - 04eb 8600 tstaxh $AX0.H - 04ec 02d5 retz - 04ed 0083 0f40 lri $AR3, #0x0f40 - 04ef 02bf 0e19 call 0x0e19 - 04f1 0083 0ca0 lri $AR3, #0x0ca0 - 04f3 02bf 0e19 call 0x0e19 - 04f5 0081 0374 lri $AR1, #0x0374 - 04f7 009f 0f40 lri $AC1.M, #0x0f40 - 04f9 0080 0050 lri $AR0, #0x0050 - 04fb 02bf 0654 call 0x0654 - 04fd 0081 0376 lri $AR1, #0x0376 - 04ff 009f 0ca0 lri $AC1.M, #0x0ca0 - 0501 0080 0050 lri $AR0, #0x0050 - 0503 02bf 0654 call 0x0654 - 0505 009a 0000 lri $AX0.H, #0x0000 - 0507 0098 00a0 lri $AX0.L, #0x00a0 - 0509 0080 0374 lri $AR0, #0x0374 - 050b 02bf 02d3 call 0x02d3 - 050d 0080 0376 lri $AR0, #0x0376 - 050f 02bf 02d3 call 0x02d3 - 0511 02df ret - 0512 00da 0374 lr $AX0.H, @0x0374 - 0514 8600 tstaxh $AX0.H - 0515 02d5 retz - 0516 009f 0be0 lri $AC1.M, #0x0be0 - 0518 00ff 03a1 sr @0x03a1, $AC1.M - 051a 00df 03ca lr $AC1.M, @0x03ca - 051c 00ff 0392 sr @0x0392, $AC1.M - 051e 00df 03cb lr $AC1.M, @0x03cb - 0520 00ff 0393 sr @0x0393, $AC1.M - 0522 009f 03a6 lri $AC1.M, #0x03a6 - 0524 00ff 03a0 sr @0x03a0, $AC1.M - 0526 00df 03c9 lr $AC1.M, @0x03c9 - 0528 00ff 0391 sr @0x0391, $AC1.M - 052a 02bf 026b call 0x026b - 052c 009f 0c40 lri $AC1.M, #0x0c40 - 052e 00ff 03a1 sr @0x03a1, $AC1.M - 0530 00df 03da lr $AC1.M, @0x03da - 0532 00ff 0392 sr @0x0392, $AC1.M - 0534 00df 03db lr $AC1.M, @0x03db - 0536 00ff 0393 sr @0x0393, $AC1.M - 0538 009f 03a7 lri $AC1.M, #0x03a7 - 053a 00ff 03a0 sr @0x03a0, $AC1.M - 053c 00df 03d9 lr $AC1.M, @0x03d9 - 053e 00ff 0391 sr @0x0391, $AC1.M - 0540 02bf 026b call 0x026b - 0542 02df ret - 0543 00da 0374 lr $AX0.H, @0x0374 - 0545 8600 tstaxh $AX0.H - 0546 02d5 retz - 0547 00da 03d8 lr $AX0.H, @0x03d8 - 0549 8600 tstaxh $AX0.H - 054a 02d5 retz - 054b 0083 0be0 lri $AR3, #0x0be0 - 054d 0080 0c30 lri $AR0, #0x0c30 - 054f 0f04 lris $AC1.M, #0x04 - 0550 02bf 0132 call 0x0132 - 0552 0083 0c40 lri $AR3, #0x0c40 - 0554 0080 0c90 lri $AR0, #0x0c90 - 0556 0f04 lris $AC1.M, #0x04 - 0557 02bf 0132 call 0x0132 - 0559 00df 03ca lr $AC1.M, @0x03ca - 055b 00ff 0392 sr @0x0392, $AC1.M - 055d 00df 03cb lr $AC1.M, @0x03cb - 055f 00ff 0393 sr @0x0393, $AC1.M - 0561 00df 03a6 lr $AC1.M, @0x03a6 - 0563 7500 incm $AC1.M - 0564 1f5f mrr $AX0.H, $AC1.M - 0565 009f 0be8 lri $AC1.M, #0x0be8 - 0567 02bf 01b2 call 0x01b2 - 0569 00df 03da lr $AC1.M, @0x03da - 056b 00ff 0392 sr @0x0392, $AC1.M - 056d 00df 03db lr $AC1.M, @0x03db - 056f 00ff 0393 sr @0x0393, $AC1.M - 0571 00df 03a7 lr $AC1.M, @0x03a7 - 0573 7500 incm $AC1.M - 0574 1f5f mrr $AX0.H, $AC1.M - 0575 009f 0c48 lri $AC1.M, #0x0c48 - 0577 02bf 01b2 call 0x01b2 - 0579 00de 03c8 lr $AC0.M, @0x03c8 - 057b 02a0 0001 andf $AC0.M, #0x0001 - 057d 029d 0586 jlz 0x0586 - 057f 0080 03d0 lri $AR0, #0x03d0 - 0581 0e08 lris $AC0.M, #0x08 - 0582 0081 0be0 lri $AR1, #0x0be0 - 0584 02bf 0c86 call 0x0c86 - 0586 00de 03d8 lr $AC0.M, @0x03d8 - 0588 02a0 0001 andf $AC0.M, #0x0001 - 058a 029d 0593 jlz 0x0593 - 058c 0080 03e0 lri $AR0, #0x03e0 - 058e 0e08 lris $AC0.M, #0x08 - 058f 0081 0c40 lri $AR1, #0x0c40 - 0591 02bf 0c86 call 0x0c86 - 0593 0f50 lris $AC1.M, #0x50 - 0594 0080 0be0 lri $AR0, #0x0be0 - 0596 0083 0f40 lri $AR3, #0x0f40 - 0598 00d8 03cd lr $AX0.L, @0x03cd - 059a 02bf 0145 call 0x0145 - 059c 0f50 lris $AC1.M, #0x50 - 059d 0080 0c40 lri $AR0, #0x0c40 - 059f 0083 0ca0 lri $AR3, #0x0ca0 - 05a1 00d8 03df lr $AX0.L, @0x03df - 05a3 02bf 0145 call 0x0145 - 05a5 00de 03c8 lr $AC0.M, @0x03c8 - 05a7 02a0 0002 andf $AC0.M, #0x0002 - 05a9 029d 05b2 jlz 0x05b2 - 05ab 0080 03d0 lri $AR0, #0x03d0 - 05ad 0e08 lris $AC0.M, #0x08 - 05ae 0081 0be0 lri $AR1, #0x0be0 - 05b0 02bf 0c86 call 0x0c86 - 05b2 00de 03d8 lr $AC0.M, @0x03d8 - 05b4 02a0 0002 andf $AC0.M, #0x0002 - 05b6 029d 05bf jlz 0x05bf - 05b8 0080 03e0 lri $AR0, #0x03e0 - 05ba 0e08 lris $AC0.M, #0x08 - 05bb 0081 0c40 lri $AR1, #0x0c40 - 05bd 02bf 0c86 call 0x0c86 - 05bf 02df ret - 05c0 0080 0346 lri $AR0, #0x0346 - 05c2 02bf 0072 call 0x0072 - 05c4 02bf 0072 call 0x0072 - 05c6 0081 0346 lri $AR1, #0x0346 - 05c8 193e lrri $AC0.M, @$AR1 - 05c9 193c lrri $AC0.L, @$AR1 - 05ca 009f 0400 lri $AC1.M, #0x0400 - 05cc 00c0 0345 lr $AR0, @0x0345 - 05ce 02bf 0649 call 0x0649 - 05d0 0081 0348 lri $AR1, #0x0348 - 05d2 193e lrri $AC0.M, @$AR1 - 05d3 193c lrri $AC0.L, @$AR1 - 05d4 009f 0800 lri $AC1.M, #0x0800 - 05d6 00c0 0345 lr $AR0, @0x0345 - 05d8 02bf 0649 call 0x0649 - 05da 0081 0346 lri $AR1, #0x0346 - 05dc 193e lrri $AC0.M, @$AR1 - 05dd 193c lrri $AC0.L, @$AR1 - 05de 009f 0800 lri $AC1.M, #0x0800 - 05e0 00c0 0345 lr $AR0, @0x0345 - 05e2 02bf 0656 call 0x0656 - 05e4 0081 0348 lri $AR1, #0x0348 - 05e6 193e lrri $AC0.M, @$AR1 - 05e7 193c lrri $AC0.L, @$AR1 - 05e8 009f 0400 lri $AC1.M, #0x0400 - 05ea 00c0 0345 lr $AR0, @0x0345 - 05ec 02bf 0656 call 0x0656 - 05ee 029f 004a jmp 0x004a - 05f0 0080 0346 lri $AR0, #0x0346 - 05f2 02bf 0072 call 0x0072 - 05f4 02bf 0072 call 0x0072 - 05f6 0081 0346 lri $AR1, #0x0346 - 05f8 193e lrri $AC0.M, @$AR1 - 05f9 193c lrri $AC0.L, @$AR1 - 05fa 009f 0400 lri $AC1.M, #0x0400 - 05fc 00c0 0345 lr $AR0, @0x0345 - 05fe 02bf 0649 call 0x0649 - 0600 0081 0348 lri $AR1, #0x0348 - 0602 193e lrri $AC0.M, @$AR1 - 0603 193c lrri $AC0.L, @$AR1 - 0604 009f 0400 lri $AC1.M, #0x0400 - 0606 00c0 0345 lr $AR0, @0x0345 - 0608 02bf 0656 call 0x0656 - 060a 029f 004a jmp 0x004a - 060c 0080 0346 lri $AR0, #0x0346 - 060e 02bf 0072 call 0x0072 - 0610 02bf 0072 call 0x0072 - 0612 0081 0346 lri $AR1, #0x0346 - 0614 193e lrri $AC0.M, @$AR1 - 0615 193c lrri $AC0.L, @$AR1 - 0616 009f 0400 lri $AC1.M, #0x0400 - 0618 00c0 0344 lr $AR0, @0x0344 - 061a 02bf 0649 call 0x0649 - 061c 0081 0348 lri $AR1, #0x0348 - 061e 193e lrri $AC0.M, @$AR1 - 061f 193c lrri $AC0.L, @$AR1 - 0620 009f 0800 lri $AC1.M, #0x0800 - 0622 00c0 0344 lr $AR0, @0x0344 - 0624 02bf 0649 call 0x0649 - 0626 0080 0400 lri $AR0, #0x0400 - 0628 0083 0800 lri $AR3, #0x0800 - 062a 0084 0000 lri $IX0, #0x0000 - 062c 00da 0345 lr $AX0.H, @0x0345 - 062e 00df 0344 lr $AC1.M, @0x0344 - 0630 8f00 set40 - 0631 197b lrri $AX1.H, @$AR3 - 0632 b800 mulx $AX0.H, $AX1.H - 0633 197b lrri $AX1.H, @$AR3 - 0634 007f 0639 bloop $AC1.M, 0x0639 - 0636 199e lrrn $AC0.M, @$AR0 - 0637 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0638 80b2 nx'sl : $AC0.M, $AX1.H - 0639 0000 nop - 063a 8e00 set16 - 063b 0081 0346 lri $AR1, #0x0346 - 063d 193e lrri $AC0.M, @$AR1 - 063e 193c lrri $AC0.L, @$AR1 - 063f 009f 0400 lri $AC1.M, #0x0400 - 0641 00c0 0344 lr $AR0, @0x0344 - 0643 02bf 0656 call 0x0656 - 0645 029f 004a jmp 0x004a - 0647 193e lrri $AC0.M, @$AR1 - 0648 193c lrri $AC0.L, @$AR1 - 0649 2fcd srs @DSPA, $AC1.M - 064a 0f00 lris $AC1.M, #0x00 - 064b 2fc9 srs @DSCR, $AC1.M - 064c 2ece srs @DSMAH, $AC0.M - 064d 2ccf srs @DSMAL, $AC0.L - 064e 1fe0 mrr $AC1.M, $AR0 - 064f 1501 lsl $ACC1, #1 - 0650 2fcb srs @DSBL, $AC1.M - 0651 02bf 065a call 0x065a - 0653 02df ret - 0654 193e lrri $AC0.M, @$AR1 - 0655 193c lrri $AC0.L, @$AR1 - 0656 2fcd srs @DSPA, $AC1.M - 0657 0f01 lris $AC1.M, #0x01 - 0658 029f 064b jmp 0x064b - 065a 26c9 lrs $AC0.M, @DSCR - 065b 02a0 0004 andf $AC0.M, #0x0004 - 065d 029c 065a jlnz 0x065a - 065f 02df ret - 0660 193e lrri $AC0.M, @$AR1 - 0661 193c lrri $AC0.L, @$AR1 - 0662 00ff ffcd sr @DSPA, $AC1.M - 0664 0f00 lris $AC1.M, #0x00 - 0665 00ff ffc9 sr @DSCR, $AC1.M - 0667 00fe ffce sr @DSMAH, $AC0.M - 0669 00fc ffcf sr @DSMAL, $AC0.L - 066b 1fe0 mrr $AC1.M, $AR0 - 066c 1501 lsl $ACC1, #1 - 066d 00ff ffcb sr @DSBL, $AC1.M - 066f 02df ret - 0670 00de ffc9 lr $AC0.M, @DSCR - 0672 02a0 0004 andf $AC0.M, #0x0004 - 0674 029c 0670 jlnz 0x0670 - 0676 02df ret - 0677 0080 0346 lri $AR0, #0x0346 - 0679 02bf 0072 call 0x0072 - 067b 02bf 0072 call 0x0072 - 067d 0081 0346 lri $AR1, #0x0346 - 067f 00df 0349 lr $AC1.M, @0x0349 - 0681 0340 ffff andi $AC1.M, #0xffff - 0683 00c0 0345 lr $AR0, @0x0345 - 0685 02bf 0647 call 0x0647 - 0687 029f 004a jmp 0x004a - 0689 0080 0346 lri $AR0, #0x0346 - 068b 02bf 0072 call 0x0072 - 068d 02bf 0072 call 0x0072 - 068f 0081 0346 lri $AR1, #0x0346 - 0691 00df 0349 lr $AC1.M, @0x0349 - 0693 0340 ffff andi $AC1.M, #0xffff - 0695 00c0 0345 lr $AR0, @0x0345 - 0697 02bf 0654 call 0x0654 - 0699 029f 004a jmp 0x004a - 069b 0092 00ff lri $CR, #0x00ff - 069d 009e ffff lri $AC0.M, #0xffff - 069f 2ed4 srs @ACSAH, $AC0.M - 06a0 2ed5 srs @ACSAL, $AC0.M - 06a1 2ed6 srs @ACEAH, $AC0.M - 06a2 2ed7 srs @ACEAL, $AC0.M - 06a3 02df ret - 06a4 00ff ffd1 sr @SampleFormat, $AC1.M - 06a6 0340 0003 andi $AC1.M, #0x0003 - 06a8 7900 decm $AC1.M - 06a9 02ca lsrn - 06aa 00df 037d lr $AC1.M, @0x037d - 06ac 00dd 037e lr $AC1.L, @0x037e - 06ae 4c00 add $ACC0, $ACC1 - 06af 00fe ffd8 sr @ACCAH, $AC0.M - 06b1 00fc ffd9 sr @ACCAL, $AC0.L - 06b3 02df ret - 06b4 1fc3 mrr $AC0.M, $AR3 - 06b5 043f addis $ACC0, #0x3f - 06b6 0240 fff0 andi $AC0.M, #0xfff0 - 06b8 00fe ffcd sr @DSPA, $AC0.M - 06ba 1c1a mrr $AR0, $AX0.H - 06bb 00da 037f lr $AX0.H, @0x037f - 06bd 4400 addr $ACC0, $AX0.H - 06be 1f40 mrr $AX0.H, $AR0 - 06bf 1c1e mrr $AR0, $AC0.M - 06c0 1fda mrr $AC0.M, $AX0.H - 06c1 041f addis $ACC0, #0x1f - 06c2 0240 fff0 andi $AC0.M, #0xfff0 - 06c4 1401 lsl $ACC0, #1 - 06c5 00fe ffcb sr @DSBL, $AC0.M - 06c7 00de ffc9 lr $AC0.M, @DSCR - 06c9 02a0 0004 andf $AC0.M, #0x0004 - 06cb 029c 06c7 jlnz 0x06c7 - 06cd 007a 06d0 bloop $AX0.H, 0x06d0 - 06cf 191e lrri $AC0.M, @$AR0 - 06d0 1b7e srri @$AR3, $AC0.M - 06d1 02df ret - 06d2 8900 clr $ACC1 - 06d3 1ffc mrr $AC1.M, $AC0.L - 06d4 0340 001f andi $AC1.M, #0x001f - 06d6 00ff 037f sr @0x037f, $AC1.M - 06d8 1ffc mrr $AC1.M, $AC0.L - 06d9 0340 ffe0 andi $AC1.M, #0xffe0 - 06db 1f9f mrr $AC0.L, $AC1.M - 06dc 00df 037d lr $AC1.M, @0x037d - 06de 00dd 037e lr $AC1.L, @0x037e - 06e0 4c00 add $ACC0, $ACC1 - 06e1 00fe ffce sr @DSMAH, $AC0.M - 06e3 00fc ffcf sr @DSMAL, $AC0.L - 06e5 0f00 lris $AC1.M, #0x00 - 06e6 00ff ffc9 sr @DSCR, $AC1.M - 06e8 02df ret - 06e9 00df 037f lr $AC1.M, @0x037f - 06eb 157f lsr $ACC1, #-1 - 06ec 00ff 037f sr @0x037f, $AC1.M - 06ee 02df ret - 06ef 8600 tstaxh $AX0.H - 06f0 02d5 retz - 06f1 1f1a mrr $AX0.L, $AX0.H - 06f2 009e 0780 lri $AC0.M, #0x0780 - 06f4 00fe ffcd sr @DSPA, $AC0.M - 06f6 1fda mrr $AC0.M, $AX0.H - 06f7 043f addis $ACC0, #0x3f - 06f8 0240 ffe0 andi $AC0.M, #0xffe0 - 06fa 00fe ffcb sr @DSBL, $AC0.M - 06fc 00de ffc9 lr $AC0.M, @DSCR - 06fe 02a0 0004 andf $AC0.M, #0x0004 - 0700 029c 06fc jlnz 0x06fc - 0702 8100 clr $ACC0 - 0703 00de 037f lr $AC0.M, @0x037f - 0705 147f lsr $ACC0, #-1 - 0706 0200 0780 addi $AC0.M, #0x0780 - 0708 1c1e mrr $AR0, $AC0.M - 0709 00de 037f lr $AC0.M, @0x037f - 070b 02a0 0001 andf $AC0.M, #0x0001 - 070d 029d 0716 jlz 0x0716 - 070f 8100 clr $ACC0 - 0710 191e lrri $AC0.M, @$AR0 - 0711 1488 asl $ACC0, #8 - 0712 1b7e srri @$AR3, $AC0.M - 0713 1fda mrr $AC0.M, $AX0.H - 0714 7800 decm $AC0.M - 0715 1f5e mrr $AX0.H, $AC0.M - 0716 8100 clr $ACC0 - 0717 1fda mrr $AC0.M, $AX0.H - 0718 147f lsr $ACC0, #-1 - 0719 007e 0722 bloop $AC0.M, 0x0722 - 071b 8100 clr $ACC0 - 071c 181e lrr $AC0.M, @$AR0 - 071d 0240 ff00 andi $AC0.M, #0xff00 - 071f 1b7e srri @$AR3, $AC0.M - 0720 191e lrri $AC0.M, @$AR0 - 0721 1488 asl $ACC0, #8 - 0722 1b7e srri @$AR3, $AC0.M - 0723 1fda mrr $AC0.M, $AX0.H - 0724 1f58 mrr $AX0.H, $AX0.L - 0725 02a0 0001 andf $AC0.M, #0x0001 - 0727 02dd retlz - 0728 8100 clr $ACC0 - 0729 181e lrr $AC0.M, @$AR0 - 072a 0240 ff00 andi $AC0.M, #0xff00 - 072c 1b7e srri @$AR3, $AC0.M - 072d 02df ret - 072e 1205 sbclr #0x05 - 072f 8e00 set16 - 0730 00f0 03fd sr @0x03fd, $AC0.H - 0732 00fc 03ff sr @0x03ff, $AC0.L - 0734 f400 lsr16 $ACC0 - 0735 00fc 03fe sr @0x03fe, $AC0.L - 0737 00fa 03fa sr @0x03fa, $AX0.H - 0739 8100 clr $ACC0 - 073a 00de fffe lr $AC0.M, @CMBH - 073c 02c0 8000 andcf $AC0.M, #0x8000 - 073e 029c 082f jlnz 0x082f - 0740 00da ffff lr $AX0.H, @CMBL - 0742 8600 tstaxh $AX0.H - 0743 0294 0808 jnz 0x0808 - 0745 00de fffe lr $AC0.M, @CMBH - 0747 02c0 8000 andcf $AC0.M, #0x8000 - 0749 029c 0745 jlnz 0x0745 - 074b 0240 000f andi $AC0.M, #0x000f - 074d 1f5e mrr $AX0.H, $AC0.M - 074e 7400 incm $AC0.M - 074f 0c00 lris $AC0.L, #0x00 - 0750 1404 lsl $ACC0, #4 - 0751 00fe 034e sr @0x034e, $AC0.M - 0753 1fda mrr $AC0.M, $AX0.H - 0754 1f40 mrr $AX0.H, $AR0 - 0755 0200 04fc addi $AC0.M, #0x04fc - 0757 1c1e mrr $AR0, $AC0.M - 0758 00de ffff lr $AC0.M, @CMBL - 075a 1a1e srr @$AR0, $AC0.M - 075b 1c1a mrr $AR0, $AX0.H - 075c 00de 03fe lr $AC0.M, @0x03fe - 075e 00dc 03ff lr $AC0.L, @0x03ff - 0760 00d0 03fd lr $AC0.H, @0x03fd - 0762 00da 03fa lr $AX0.H, @0x03fa - 0764 1305 sbset #0x05 - 0765 02ff rti - 0766 009a 0002 lri $AX0.H, #0x0002 - 0768 00fa 03a3 sr @0x03a3, $AX0.H - 076a 00e0 03f9 sr @0x03f9, $AR0 - 076c 02bf 07f2 call 0x07f2 - 076e 16fc dcd1 si @DMBH, #0xdcd1 - 0770 16fd 0002 si @DMBL, #0x0002 - 0772 16fb 0001 si @DIRQ, #0x0001 - 0774 0021 halt - 0775 078d cmpis $ACC1, #0x8d - 0776 078e cmpis $ACC1, #0x8e - 0777 07ce cmpis $ACC1, #0xce - 0778 07d1 cmpis $ACC1, #0xd1 - 0779 00e0 03f9 sr @0x03f9, $AR0 - 077b 009e 0005 lri $AC0.M, #0x0005 - 077d 02bf 07e0 call 0x07e0 - 077f 8e00 set16 - 0780 8100 clr $ACC0 - 0781 8900 clr $ACC1 - 0782 02bf 07d4 call 0x07d4 - 0784 27ff lrs $AC1.M, @CMBL - 0785 009e 0775 lri $AC0.M, #0x0775 - 0787 4c00 add $ACC0, $ACC1 - 0788 1c7e mrr $AR3, $AC0.M - 0789 0313 ilrr $AC1.M, @$AR3 - 078a 1c7f mrr $AR3, $AC1.M - 078b 176f jmpr $AR3 - 078c 0021 halt - 078d 0021 halt - 078e 009a 0002 lri $AX0.H, #0x0002 - 0790 00fa 03a3 sr @0x03a3, $AX0.H - 0792 8100 clr $ACC0 - 0793 8900 clr $ACC1 - 0794 02bf 07d4 call 0x07d4 - 0796 24ff lrs $AC0.L, @CMBL - 0797 02bf 07da call 0x07da - 0799 25ff lrs $AC1.L, @CMBL - 079a 02bf 07da call 0x07da - 079c 27ff lrs $AC1.M, @CMBL - 079d 2ece srs @DSMAH, $AC0.M - 079e 2ccf srs @DSMAL, $AC0.L - 079f 16c9 0001 si @DSCR, #0x0001 - 07a1 2fcd srs @DSPA, $AC1.M - 07a2 2dcb srs @DSBL, $AC1.L - 07a3 8100 clr $ACC0 - 07a4 8900 clr $ACC1 - 07a5 02bf 07d4 call 0x07d4 - 07a7 24ff lrs $AC0.L, @CMBL - 07a8 1c9e mrr $IX0, $AC0.M - 07a9 1cbc mrr $IX1, $AC0.L - 07aa 02bf 07da call 0x07da - 07ac 25ff lrs $AC1.L, @CMBL - 07ad 02bf 07da call 0x07da - 07af 27ff lrs $AC1.M, @CMBL - 07b0 1cdf mrr $IX2, $AC1.M - 07b1 1cfd mrr $IX3, $AC1.L - 07b2 8100 clr $ACC0 - 07b3 02bf 07d4 call 0x07d4 - 07b5 26ff lrs $AC0.M, @CMBL - 07b6 1c1e mrr $AR0, $AC0.M - 07b7 8900 clr $ACC1 - 07b8 02bf 07da call 0x07da - 07ba 20ff lrs $AX0.L, @CMBL - 07bb 1f5f mrr $AX0.H, $AC1.M - 07bc 02bf 07d4 call 0x07d4 - 07be 21ff lrs $AX1.L, @CMBL - 07bf 02bf 07d4 call 0x07d4 - 07c1 23ff lrs $AX1.H, @CMBL - 07c2 26c9 lrs $AC0.M, @DSCR - 07c3 02a0 0004 andf $AC0.M, #0x0004 - 07c5 029c 07c2 jlnz 0x07c2 - 07c7 1206 sbclr #0x06 - 07c8 1203 sbclr #0x03 - 07c9 1204 sbclr #0x04 - 07ca 1205 sbclr #0x05 - 07cb 029f 80b5 jmp 0x80b5 - 07cd 0021 halt - 07ce 029f 8000 jmp 0x8000 - 07d0 0021 halt - 07d1 00c0 03f9 lr $AR0, @0x03f9 - 07d3 170f jmpr $AR0 - 07d4 26fe lrs $AC0.M, @CMBH - 07d5 02c0 8000 andcf $AC0.M, #0x8000 - 07d7 029c 07d4 jlnz 0x07d4 - 07d9 02df ret - 07da 27fe lrs $AC1.M, @CMBH - 07db 03c0 8000 andcf $AC1.M, #0x8000 - 07dd 029c 07da jlnz 0x07da - 07df 02df ret - 07e0 02bf 07f8 call 0x07f8 - 07e2 16fc dcd1 si @DMBH, #0xdcd1 - 07e4 2efd srs @DMBL, $AC0.M - 07e5 16fb 0001 si @DIRQ, #0x0001 - 07e7 02bf 07f8 call 0x07f8 - 07e9 02df ret - 07ea 02bf 07f8 call 0x07f8 - 07ec 16fc f355 si @DMBH, #0xf355 - 07ee 2efd srs @DMBL, $AC0.M - 07ef 02bf 07f8 call 0x07f8 - 07f1 02df ret - 07f2 26fc lrs $AC0.M, @DMBH - 07f3 02c0 8000 andcf $AC0.M, #0x8000 - 07f5 029d 07f2 jlz 0x07f2 - 07f7 02df ret - 07f8 27fc lrs $AC1.M, @DMBH - 07f9 03c0 8000 andcf $AC1.M, #0x8000 - 07fb 029d 07f8 jlz 0x07f8 - 07fd 02df ret - 07fe 009a 0280 lri $AX0.H, #0x0280 - 0800 00fa 0350 sr @0x0350, $AX0.H - 0802 00fa 0351 sr @0x0351, $AX0.H - 0804 0a00 lris $AX0.H, #0x00 - 0805 00fa 0352 sr @0x0352, $AX0.H - 0807 02df ret - 0808 00e0 03fb sr @0x03fb, $AR0 - 080a 00e8 03fc sr @0x03fc, $WR0 - 080c 00c0 0350 lr $AR0, @0x0350 - 080e 0088 002f lri $WR0, #0x002f - 0810 1b1a srri @$AR0, $AX0.H - 0811 00de fffe lr $AC0.M, @CMBH - 0813 02c0 8000 andcf $AC0.M, #0x8000 - 0815 029c 0811 jlnz 0x0811 - 0817 00dc ffff lr $AC0.L, @CMBL - 0819 1b1e srri @$AR0, $AC0.M - 081a 1b1c srri @$AR0, $AC0.L - 081b 1fda mrr $AC0.M, $AX0.H - 081c 7800 decm $AC0.M - 081d 1f5e mrr $AX0.H, $AC0.M - 081e 8600 tstaxh $AX0.H - 081f 0294 0811 jnz 0x0811 - 0821 8100 clr $ACC0 - 0822 00de 0352 lr $AC0.M, @0x0352 - 0824 7400 incm $AC0.M - 0825 00fe 0352 sr @0x0352, $AC0.M - 0827 00e0 0350 sr @0x0350, $AR0 - 0829 00c0 03fb lr $AR0, @0x03fb - 082b 00c8 03fc lr $WR0, @0x03fc - 082d 029f 075c jmp 0x075c - 082f 00e0 03fb sr @0x03fb, $AR0 - 0831 00e8 03fc sr @0x03fc, $WR0 - 0833 00c0 0350 lr $AR0, @0x0350 - 0835 0088 002f lri $WR0, #0x002f - 0837 0a00 lris $AX0.H, #0x00 - 0838 1b1a srri @$AR0, $AX0.H - 0839 029f 0821 jmp 0x0821 - 083b 00c0 0351 lr $AR0, @0x0351 - 083d 0088 002f lri $WR0, #0x002f - 083f 00da 0352 lr $AX0.H, @0x0352 - 0841 8600 tstaxh $AX0.H - 0842 0295 0863 jz 0x0863 - 0844 1205 sbclr #0x05 - 0845 00da 0352 lr $AX0.H, @0x0352 - 0847 1fda mrr $AC0.M, $AX0.H - 0848 7800 decm $AC0.M - 0849 00fe 0352 sr @0x0352, $AC0.M - 084b 1305 sbset #0x05 - 084c 0081 0356 lri $AR1, #0x0356 - 084e 191e lrri $AC0.M, @$AR0 - 084f 02c0 8000 andcf $AC0.M, #0x8000 - 0851 029d 0867 jlz 0x0867 - 0853 1f5e mrr $AX0.H, $AC0.M - 0854 8600 tstaxh $AX0.H - 0855 0295 086b jz 0x086b - 0857 007a 085c bloop $AX0.H, 0x085c - 0859 191e lrri $AC0.M, @$AR0 - 085a 1b3e srri @$AR1, $AC0.M - 085b 191e lrri $AC0.M, @$AR0 - 085c 1b3e srri @$AR1, $AC0.M - 085d 00e0 0351 sr @0x0351, $AR0 - 085f 0088 ffff lri $WR0, #0xffff - 0861 029f 0036 jmp 0x0036 - 0863 0088 ffff lri $WR0, #0xffff - 0865 029f 002b jmp 0x002b - 0867 00e0 0351 sr @0x0351, $AR0 - 0869 029f 083f jmp 0x083f - 086b 0080 083b lri $AR0, #0x083b - 086d 029f 0766 jmp 0x0766 - 086f 8100 clr $ACC0 - 0870 0e10 lris $AC0.M, #0x10 - 0871 2232 lrs $AX0.H, @0x0032 - 0872 8600 tstaxh $AX0.H - 0873 02d5 retz - 0874 5400 subr $ACC0, $AX0.H - 0875 0200 0458 addi $AC0.M, #0x0458 - 0877 1c1e mrr $AR0, $AC0.M - 0878 1fda mrr $AC0.M, $AX0.H - 0879 04fe addis $ACC0, #0xfe - 087a 1f1e mrr $AX0.L, $AC0.M - 087b 191e lrri $AC0.M, @$AR0 - 087c 0291 0882 jl 0x0882 - 087e 191a lrri $AX0.H, @$AR0 - 087f 0058 loop $AX0.L - 0880 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0881 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 0882 1b7e srri @$AR3, $AC0.M - 0883 02df ret - 0884 02bf 086f call 0x086f - 0886 8100 clr $ACC0 - 0887 2632 lrs $AC0.M, @0x0032 - 0888 5c00 sub $ACC0, $ACC1 - 0889 2e32 srs @0x0032, $AC0.M - 088a 0092 00ff lri $CR, #0x00ff - 088c 02df ret - 088d 00de 04fb lr $AC0.M, @0x04fb - 088f 7400 incm $AC0.M - 0890 00fe 04fb sr @0x04fb, $AC0.M - 0892 8100 clr $ACC0 - 0893 2e32 srs @0x0032, $AC0.M - 0894 2e66 srs @0x0066, $AC0.M - 0895 2e67 srs @0x0067, $AC0.M - 0896 268a lrs $AC0.M, @0xff8a - 0897 248b lrs $AC0.L, @0xff8b - 0898 2e3a srs @0x003a, $AC0.M - 0899 2c3b srs @0x003b, $AC0.L - 089a 268c lrs $AC0.M, @0xff8c - 089b 248d lrs $AC0.L, @0xff8d - 089c 2e38 srs @0x0038, $AC0.M - 089d 2c39 srs @0x0039, $AC0.L - 089e 02df ret - 089f 8100 clr $ACC0 - 08a0 2689 lrs $AC0.M, @0xff89 - 08a1 0240 000f andi $AC0.M, #0x000f - 08a3 1f5e mrr $AX0.H, $AC0.M - 08a4 8100 clr $ACC0 - 08a5 0e10 lris $AC0.M, #0x10 - 08a6 5400 subr $ACC0, $AX0.H - 08a7 2e32 srs @0x0032, $AC0.M - 08a8 268a lrs $AC0.M, @0xff8a - 08a9 248b lrs $AC0.L, @0xff8b - 08aa 2288 lrs $AX0.H, @0xff88 - 08ab 2089 lrs $AX0.L, @0xff89 - 08ac 5800 subax $ACC0, $AX0.L - 08ad 0a00 lris $AX0.H, #0x00 - 08ae 2032 lrs $AX0.L, @0x0032 - 08af 5800 subax $ACC0, $AX0.L - 08b0 2e3a srs @0x003a, $AC0.M - 08b1 2c3b srs @0x003b, $AC0.L - 08b2 02df ret - 08b3 0092 0004 lri $CR, #0x0004 - 08b5 8100 clr $ACC0 - 08b6 2604 lrs $AC0.M, @0x0004 - 08b7 b100 tst $ACC0 - 08b8 02b4 088d callnz 0x088d - 08ba 8100 clr $ACC0 - 08bb 2601 lrs $AC0.M, @0x0001 - 08bc b100 tst $ACC0 - 08bd 0294 095b jnz 0x095b - 08bf 2232 lrs $AX0.H, @0x0032 - 08c0 c900 cmpar $ACC0, $AX1.H - 08c1 0293 0884 jle 0x0884 - 08c3 5500 subr $ACC1, $AX0.H - 08c4 02bf 086f call 0x086f - 08c6 223a lrs $AX0.H, @0x003a - 08c7 8600 tstaxh $AX0.H - 08c8 0294 08cf jnz 0x08cf - 08ca 8100 clr $ACC0 - 08cb 263b lrs $AC0.M, @0x003b - 08cc 8200 cmp - 08cd 0291 0921 jl 0x0921 - 08cf 8100 clr $ACC0 - 08d0 1fdf mrr $AC0.M, $AC1.M - 08d1 040f addis $ACC0, #0x0f - 08d2 147c lsr $ACC0, #-4 - 08d3 1f7e mrr $AX1.H, $AC0.M - 08d4 0c00 lris $AC0.L, #0x00 - 08d5 1404 lsl $ACC0, #4 - 08d6 1f1e mrr $AX0.L, $AC0.M - 08d7 0a00 lris $AX0.H, #0x00 - 08d8 8100 clr $ACC0 - 08d9 263a lrs $AC0.M, @0x003a - 08da 243b lrs $AC0.L, @0x003b - 08db 5800 subax $ACC0, $AX0.L - 08dc 0290 08e7 jge 0x08e7 - 08de 8100 clr $ACC0 - 08df 263b lrs $AC0.M, @0x003b - 08e0 5c00 sub $ACC0, $ACC1 - 08e1 2e32 srs @0x0032, $AC0.M - 08e2 8100 clr $ACC0 - 08e3 2e3a srs @0x003a, $AC0.M - 08e4 2e3b srs @0x003b, $AC0.M - 08e5 029f 08ed jmp 0x08ed - 08e7 2e3a srs @0x003a, $AC0.M - 08e8 2c3b srs @0x003b, $AC0.L - 08e9 0c00 lris $AC0.L, #0x00 - 08ea 1fd8 mrr $AC0.M, $AX0.L - 08eb 5c00 sub $ACC0, $ACC1 - 08ec 2e32 srs @0x0032, $AC0.M - 08ed 8100 clr $ACC0 - 08ee 1fdb mrr $AC0.M, $AX1.H - 08ef 02bf 0961 call 0x0961 - 08f1 2232 lrs $AX0.H, @0x0032 - 08f2 8600 tstaxh $AX0.H - 08f3 0295 091e jz 0x091e - 08f5 0a10 lris $AX0.H, #0x10 - 08f6 8100 clr $ACC0 - 08f7 1fc3 mrr $AC0.M, $AR3 - 08f8 5400 subr $ACC0, $AX0.H - 08f9 1c7e mrr $AR3, $AC0.M - 08fa 0080 0458 lri $AR0, #0x0458 - 08fc 197e lrri $AC0.M, @$AR3 - 08fd 197a lrri $AX0.H, @$AR3 - 08fe 100e loopi #0x0e - 08ff 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H - 0900 1b1e srri @$AR0, $AC0.M - 0901 1b1a srri @$AR0, $AX0.H - 0902 8100 clr $ACC0 - 0903 263a lrs $AC0.M, @0x003a - 0904 243b lrs $AC0.L, @0x003b - 0905 b100 tst $ACC0 - 0906 0294 091e jnz 0x091e - 0908 2232 lrs $AX0.H, @0x0032 - 0909 8600 tstaxh $AX0.H - 090a 0295 091e jz 0x091e - 090c 0080 0467 lri $AR0, #0x0467 - 090e 8100 clr $ACC0 - 090f 268b lrs $AC0.M, @0xff8b - 0910 b100 tst $ACC0 - 0911 0295 091e jz 0x091e - 0913 0200 000f addi $AC0.M, #0x000f - 0915 0240 000f andi $AC0.M, #0x000f - 0917 0200 0458 addi $AC0.M, #0x0458 - 0919 1c7e mrr $AR3, $AC0.M - 091a 007a 091d bloop $AX0.H, 0x091d - 091c 18fe lrrd $AC0.M, @$AR3 - 091d 1a9e srrd @$AR0, $AC0.M - 091e 0092 00ff lri $CR, #0x00ff - 0920 02df ret - 0921 b100 tst $ACC0 - 0922 0295 0931 jz 0x0931 - 0924 5d00 sub $ACC1, $ACC0 - 0925 040f addis $ACC0, #0x0f - 0926 147c lsr $ACC0, #-4 - 0927 0c00 lris $AC0.L, #0x00 - 0928 00e3 0363 sr @0x0363, $AR3 - 092a 02bf 0961 call 0x0961 - 092c 00de 0363 lr $AC0.M, @0x0363 - 092e 223b lrs $AX0.H, @0x003b - 092f 4400 addr $ACC0, $AX0.H - 0930 1c7e mrr $AR3, $AC0.M - 0931 8100 clr $ACC0 - 0932 2681 lrs $AC0.M, @0xff81 - 0933 b100 tst $ACC0 - 0934 0295 0959 jz 0x0959 - 0936 2380 lrs $AX1.H, @0xff80 - 0937 2688 lrs $AC0.M, @0xff88 - 0938 2489 lrs $AC0.L, @0xff89 - 0939 1408 lsl $ACC0, #8 - 093a 14f4 asr $ACC0, #-12 - 093b 2380 lrs $AX1.H, @0xff80 - 093c 8d00 set15 - 093d c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - 093e ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 093f 8c00 clr15 - 0940 f000 lsl16 $ACC0 - 0941 4e00 addp $ACC0 - 0942 238c lrs $AX1.H, @0xff8c - 0943 218d lrs $AX1.L, @0xff8d - 0944 4a00 addax $ACC0, $AX1.L - 0945 2e38 srs @0x0038, $AC0.M - 0946 2c39 srs @0x0039, $AC0.L - 0947 2682 lrs $AC0.M, @0xff82 - 0948 2e67 srs @0x0067, $AC0.M - 0949 2683 lrs $AC0.M, @0xff83 - 094a 2e66 srs @0x0066, $AC0.M - 094b 00e3 0363 sr @0x0363, $AR3 - 094d 0083 0458 lri $AR3, #0x0458 - 094f 8100 clr $ACC0 - 0950 0e01 lris $AC0.M, #0x01 - 0951 02bf 0961 call 0x0961 - 0953 00c3 0363 lr $AR3, @0x0363 - 0955 02bf 089f call 0x089f - 0957 029f 08bf jmp 0x08bf - 0959 0e01 lris $AC0.M, #0x01 - 095a 2e01 srs @0x0001, $AC0.M - 095b 8100 clr $ACC0 - 095c 005f loop $AC1.M - 095d 1b7e srri @$AR3, $AC0.M - 095e 0092 00ff lri $CR, #0x00ff - 0960 02df ret - 0961 00ff 0360 sr @0x0360, $AC1.M - 0963 00fe 0361 sr @0x0361, $AC0.M - 0965 2638 lrs $AC0.M, @0x0038 - 0966 2439 lrs $AC0.L, @0x0039 - 0967 0f05 lris $AC1.M, #0x05 - 0968 02bf 06a4 call 0x06a4 - 096a 2638 lrs $AC0.M, @0x0038 - 096b 2439 lrs $AC0.L, @0x0039 - 096c 8900 clr $ACC1 - 096d 00df 0361 lr $AC1.M, @0x0361 - 096f 2280 lrs $AX0.H, @0xff80 - 0970 d000 mulc $AC1.M, $AX0.H - 0971 6f00 movp $ACC1 - 0972 4c00 add $ACC0, $ACC1 - 0973 2e38 srs @0x0038, $AC0.M - 0974 2c39 srs @0x0039, $AC0.L - 0975 8100 clr $ACC0 - 0976 00de 0361 lr $AC0.M, @0x0361 - 0978 007e 09df bloop $AC0.M, 0x09df - 097a 0080 ffd3 lri $AR0, #0xffd3 - 097c 0084 0000 lri $IX0, #0x0000 - 097e 199e lrrn $AC0.M, @$AR0 - 097f 8900 clr $ACC1 - 0980 1ffe mrr $AC1.M, $AC0.M - 0981 1401 lsl $ACC0, #1 - 0982 0240 001e andi $AC0.M, #0x001e - 0984 0200 0300 addi $AC0.M, #0x0300 - 0986 1c3e mrr $AR1, $AC0.M - 0987 157c lsr $ACC1, #-4 - 0988 0340 000f andi $AC1.M, #0x000f - 098a 0a11 lris $AX0.H, #0x11 - 098b 5500 subr $ACC1, $AX0.H - 098c 8100 clr $ACC0 - 098d 2680 lrs $AC0.M, @0xff80 - 098e 0605 cmpis $ACC0, #0x05 - 098f 0295 09a8 jz 0x09a8 - 0991 009a 00f0 lri $AX0.H, #0x00f0 - 0993 0b0f lris $AX1.H, #0x0f - 0994 0082 0364 lri $AR2, #0x0364 - 0996 1998 lrrn $AX0.L, @$AR0 - 0997 6000 movr $ACC0, $AX0.L - 0998 1107 099f bloopi #0x07, 0x099f - 099a 3400 andr $AC0.M, $AX0.H - 099b 1408 lsl $ACC0, #8 - 099c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 099d 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 099e 140c lsl $ACC0, #12 - 099f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09a0 3400 andr $AC0.M, $AX0.H - 09a1 1408 lsl $ACC0, #8 - 09a2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09a3 3600 andr $AC0.M, $AX1.H - 09a4 140c lsl $ACC0, #12 - 09a5 1b5e srri @$AR2, $AC0.M - 09a6 029f 09c8 jmp 0x09c8 - 09a8 009a c000 lri $AX0.H, #0xc000 - 09aa 0082 0364 lri $AR2, #0x0364 - 09ac 1998 lrrn $AX0.L, @$AR0 - 09ad 6000 movr $ACC0, $AX0.L - 09ae 1103 09bb bloopi #0x03, 0x09bb - 09b0 1408 lsl $ACC0, #8 - 09b1 3400 andr $AC0.M, $AX0.H - 09b2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b3 140a lsl $ACC0, #10 - 09b4 3400 andr $AC0.M, $AX0.H - 09b5 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b6 140c lsl $ACC0, #12 - 09b7 3400 andr $AC0.M, $AX0.H - 09b8 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b9 140e lsl $ACC0, #14 - 09ba 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 - 09bb 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09bc 1408 lsl $ACC0, #8 - 09bd 3400 andr $AC0.M, $AX0.H - 09be 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09bf 140a lsl $ACC0, #10 - 09c0 3400 andr $AC0.M, $AX0.H - 09c1 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09c2 140c lsl $ACC0, #12 - 09c3 3400 andr $AC0.M, $AX0.H - 09c4 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09c5 140e lsl $ACC0, #14 - 09c6 3400 andr $AC0.M, $AX0.H - 09c7 1b5e srri @$AR2, $AC0.M - 09c8 8f00 set40 - 09c9 1f7f mrr $AX1.H, $AC1.M - 09ca 2066 lrs $AX0.L, @0x0066 - 09cb 2767 lrs $AC1.M, @0x0067 - 09cc 193a lrri $AX0.H, @$AR1 - 09cd 1939 lrri $AX1.L, @$AR1 - 09ce 0080 0364 lri $AR0, #0x0364 - 09d0 a000 mulx $AX0.L, $AX1.L - 09d1 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - 09d2 1108 09db bloopi #0x08, 0x09db - 09d4 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 09d5 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 09d6 1485 asl $ACC0, #5 - 09d7 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 09d8 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 09d9 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 09da 1585 asl $ACC1, #5 - 09db ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - 09dc 2f67 srs @0x0067, $AC1.M - 09dd 8e00 set16 - 09de 1ff8 mrr $AC1.M, $AX0.L - 09df 2f66 srs @0x0066, $AC1.M - 09e0 8900 clr $ACC1 - 09e1 00df 0360 lr $AC1.M, @0x0360 - 09e3 02df ret - 09e4 b100 tst $ACC0 - 09e5 02d5 retz - 09e6 04fe addis $ACC0, #0xfe - 09e7 1f1e mrr $AX0.L, $AC0.M - 09e8 191e lrri $AC0.M, @$AR0 - 09e9 0291 09ef jl 0x09ef - 09eb 191a lrri $AX0.H, @$AR0 - 09ec 0058 loop $AX0.L - 09ed 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 09ee 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 09ef 1b7e srri @$AR3, $AC0.M - 09f0 02df ret - 09f1 8100 clr $ACC0 - 09f2 1f5e mrr $AX0.H, $AC0.M - 09f3 00d8 0402 lr $AX0.L, @0x0402 - 09f5 00dc 0430 lr $AC0.L, @0x0430 - 09f7 0080 0520 lri $AR0, #0x0520 - 09f9 00df 0480 lr $AC1.M, @0x0480 - 09fb 1501 lsl $ACC1, #1 - 09fc 0340 007e andi $AC1.M, #0x007e - 09fe 0300 0a06 addi $AC1.M, #0x0a06 - 0a00 1c5f mrr $AR2, $AC1.M - 0a01 175f callr $AR2 - 0a02 00fc 0430 sr @0x0430, $AC0.L - 0a04 029f 0386 jmp 0x0386 - 0a06 029f 0a27 jmp 0x0a27 - 0a08 029f 0a62 jmp 0x0a62 - 0a0a 029f 0a4a jmp 0x0a4a - 0a0c 029f 0a37 jmp 0x0a37 - 0a0e 029f 0a70 jmp 0x0a70 - 0a10 029f 0a26 jmp 0x0a26 - 0a12 029f 0a8e jmp 0x0a8e - 0a14 029f 0a91 jmp 0x0a91 - 0a16 029f 0a26 jmp 0x0a26 - 0a18 029f 0a26 jmp 0x0a26 - 0a1a 029f 0aaf jmp 0x0aaf - 0a1c 029f 0a68 jmp 0x0a68 - 0a1e 029f 0a6c jmp 0x0a6c - 0a20 029f 0a26 jmp 0x0a26 - 0a22 029f 0a26 jmp 0x0a26 - 0a24 029f 0a26 jmp 0x0a26 - 0a26 02df ret - 0a27 1401 lsl $ACC0, #1 - 0a28 009b c000 lri $AX1.H, #0xc000 - 0a2a 0099 4000 lri $AX1.L, #0x4000 - 0a2c 1150 0a34 bloopi #0x50, 0x0a34 - 0a2e 02c0 0001 andcf $AC0.M, #0x0001 - 0a30 027c iflnz - 0a31 1b1b srri @$AR0, $AX1.H - 0a32 027d iflz - 0a33 1b19 srri @$AR0, $AX1.L - 0a34 4800 addax $ACC0, $AX0.L - 0a35 147f lsr $ACC0, #-1 - 0a36 02df ret - 0a37 1402 lsl $ACC0, #2 - 0a38 8900 clr $ACC1 - 0a39 1fb8 mrr $AC1.L, $AX0.L - 0a3a 1501 lsl $ACC1, #1 - 0a3b 009b c000 lri $AX1.H, #0xc000 - 0a3d 0099 4000 lri $AX1.L, #0x4000 - 0a3f 1150 0a47 bloopi #0x50, 0x0a47 - 0a41 02c0 0003 andcf $AC0.M, #0x0003 - 0a43 027c iflnz - 0a44 1b1b srri @$AR0, $AX1.H - 0a45 027d iflz - 0a46 1b19 srri @$AR0, $AX1.L - 0a47 4c00 add $ACC0, $ACC1 - 0a48 147e lsr $ACC0, #-2 - 0a49 02df ret - 0a4a 1401 lsl $ACC0, #1 - 0a4b 0081 0ca0 lri $AR1, #0x0ca0 - 0a4d 009b c000 lri $AX1.H, #0xc000 - 0a4f 0099 4000 lri $AX1.L, #0x4000 - 0a51 8900 clr $ACC1 - 0a52 0082 0000 lri $AR2, #0x0000 - 0a54 1150 0a5f bloopi #0x50, 0x0a5f - 0a56 02c0 0001 andcf $AC0.M, #0x0001 - 0a58 027c iflnz - 0a59 1b1b srri @$AR0, $AX1.H - 0a5a 027d iflz - 0a5b 1b19 srri @$AR0, $AX1.L - 0a5c 183d lrr $AC1.L, @$AR1 - 0a5d 4900 addax $ACC1, $AX0.L - 0a5e 1fe2 mrr $AC1.M, $AR2 - 0a5f 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M - 0a60 147f lsr $ACC0, #-1 - 0a61 02df ret - 0a62 8900 clr $ACC1 - 0a63 1fb8 mrr $AC1.L, $AX0.L - 0a64 157f lsr $ACC1, #-1 - 0a65 1050 loopi #0x50 - 0a66 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L - 0a67 02df ret - 0a68 0082 0180 lri $AR2, #0x0180 - 0a6a 029f 0a72 jmp 0x0a72 - 0a6c 0082 01c0 lri $AR2, #0x01c0 - 0a6e 029f 0a72 jmp 0x0a72 - 0a70 0082 0140 lri $AR2, #0x0140 - 0a72 008a 003f lri $WR2, #0x003f - 0a74 0086 0000 lri $IX2, #0x0000 - 0a76 1406 lsl $ACC0, #6 - 0a77 8900 clr $ACC1 - 0a78 1fb8 mrr $AC1.L, $AX0.L - 0a79 1505 lsl $ACC1, #5 - 0a7a 009b 003f lri $AX1.H, #0x003f - 0a7c 009a 0000 lri $AX0.H, #0x0000 - 0a7e 3600 andr $AC0.M, $AX1.H - 0a7f 1cde mrr $IX2, $AC0.M - 0a80 001a addarn $AR2, $IX2 - 0a81 3400 andr $AC0.M, $AX0.H - 0a82 1150 0a88 bloopi #0x50, 0x0a88 - 0a84 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a85 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a86 1cde mrr $IX2, $AC0.M - 0a87 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a88 1b19 srri @$AR0, $AX1.L - 0a89 1fc2 mrr $AC0.M, $AR2 - 0a8a 147a lsr $ACC0, #-6 - 0a8b 008a ffff lri $WR2, #0xffff - 0a8d 02df ret - 0a8e 1050 loopi #0x50 - 0a8f 1b18 srri @$AR0, $AX0.L - 0a90 02df ret - 0a91 0082 0100 lri $AR2, #0x0100 - 0a93 008a 003f lri $WR2, #0x003f - 0a95 0086 0000 lri $IX2, #0x0000 - 0a97 1406 lsl $ACC0, #6 - 0a98 8900 clr $ACC1 - 0a99 1fb8 mrr $AC1.L, $AX0.L - 0a9a 1505 lsl $ACC1, #5 - 0a9b 009b 003f lri $AX1.H, #0x003f - 0a9d 009a 0000 lri $AX0.H, #0x0000 - 0a9f 3600 andr $AC0.M, $AX1.H - 0aa0 1cde mrr $IX2, $AC0.M - 0aa1 001a addarn $AR2, $IX2 - 0aa2 3400 andr $AC0.M, $AX0.H - 0aa3 1150 0aa9 bloopi #0x50, 0x0aa9 - 0aa5 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0aa6 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0aa7 1cde mrr $IX2, $AC0.M - 0aa8 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0aa9 1b19 srri @$AR0, $AX1.L - 0aaa 1fc2 mrr $AC0.M, $AR2 - 0aab 147a lsr $ACC0, #-6 - 0aac 008a ffff lri $WR2, #0xffff - 0aae 02df ret - 0aaf 0082 0100 lri $AR2, #0x0100 - 0ab1 008a 003f lri $WR2, #0x003f - 0ab3 0086 0000 lri $IX2, #0x0000 - 0ab5 0081 0ca0 lri $AR1, #0x0ca0 - 0ab7 1406 lsl $ACC0, #6 - 0ab8 8900 clr $ACC1 - 0ab9 1fb8 mrr $AC1.L, $AX0.L - 0aba 1505 lsl $ACC1, #5 - 0abb 009b 003f lri $AX1.H, #0x003f - 0abd 009a 0000 lri $AX0.H, #0x0000 - 0abf 3600 andr $AC0.M, $AX1.H - 0ac0 1cde mrr $IX2, $AC0.M - 0ac1 001a addarn $AR2, $IX2 - 0ac2 3400 andr $AC0.M, $AX0.H - 0ac3 1150 0ace bloopi #0x50, 0x0ace - 0ac5 1939 lrri $AX1.L, @$AR1 - 0ac6 a000 mulx $AX0.L, $AX1.L - 0ac7 140a lsl $ACC0, #10 - 0ac8 4e00 addp $ACC0 - 0ac9 1476 lsr $ACC0, #-10 - 0aca 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0acb 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0acc 1cde mrr $IX2, $AC0.M - 0acd 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0ace 1b19 srri @$AR0, $AX1.L - 0acf 1fc2 mrr $AC0.M, $AR2 - 0ad0 147a lsr $ACC0, #-6 - 0ad1 008a ffff lri $WR2, #0xffff - 0ad3 02df ret - 0ad4 0080 01be lri $AR0, #0x01be - 0ad6 1918 lrri $AX0.L, @$AR0 - 0ad7 191a lrri $AX0.H, @$AR0 - 0ad8 0080 0180 lri $AR0, #0x0180 - 0ada 0083 0180 lri $AR3, #0x0180 - 0adc 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0add 1ffe mrr $AC1.M, $AC0.M - 0ade 1120 0ae5 bloopi #0x20, 0x0ae5 - 0ae0 7c00 neg $ACC0 - 0ae1 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0ae2 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0ae3 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 0ae4 1501 lsl $ACC1, #1 - 0ae5 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - 0ae6 0080 01fe lri $AR0, #0x01fe - 0ae8 191a lrri $AX0.H, @$AR0 - 0ae9 1918 lrri $AX0.L, @$AR0 - 0aea 0080 01c0 lri $AR0, #0x01c0 - 0aec 0083 01c0 lri $AR3, #0x01c0 - 0aee 1ff8 mrr $AC1.M, $AX0.L - 0aef 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0af0 f800 addpaxz $ACC0, $AX0.H - 0af1 0240 01ff andi $AC0.M, #0x01ff - 0af3 0260 2000 ori $AC0.M, #0x2000 - 0af5 02bf 0af8 call 0x0af8 - 0af7 02df ret - 0af8 b900 tst $ACC1 - 0af9 0272 ifg - 0afa 7c00 neg $ACC0 - 0afb 1f7e mrr $AX1.H, $AC0.M - 0afc 4700 addr $ACC1, $AX1.H - 0afd 1110 0b02 bloopi #0x10, 0x0b02 - 0aff 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0b00 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0b01 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0b02 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0b03 02df ret - 0b04 02bf 0b71 call 0x0b71 - 0b06 2201 lrs $AX0.H, @0x0001 - 0b07 8600 tstaxh $AX0.H - 0b08 0294 0b19 jnz 0x0b19 - 0b0a 2204 lrs $AX0.H, @0x0004 - 0b0b 8600 tstaxh $AX0.H - 0b0c 02b4 0b60 callnz 0x0b60 - 0b0e 8100 clr $ACC0 - 0b0f 2605 lrs $AC0.M, @0x0005 - 0b10 b100 tst $ACC0 - 0b11 0295 0b26 jz 0x0b26 - 0b13 8100 clr $ACC0 - 0b14 2e05 srs @0x0005, $AC0.M - 0b15 2281 lrs $AX0.H, @0xff81 - 0b16 8600 tstaxh $AX0.H - 0b17 0294 0b20 jnz 0x0b20 - 0b19 8100 clr $ACC0 - 0b1a 005f loop $AC1.M - 0b1b 1b7e srri @$AR3, $AC0.M - 0b1c 7400 incm $AC0.M - 0b1d 2e01 srs @0x0001, $AC0.M - 0b1e 029f 0b59 jmp 0x0b59 - 0b20 2688 lrs $AC0.M, @0xff88 - 0b21 2489 lrs $AC0.L, @0xff89 - 0b22 2e34 srs @0x0034, $AC0.M - 0b23 2c35 srs @0x0035, $AC0.L - 0b24 02bf 0b60 call 0x0b60 - 0b26 00ff 0360 sr @0x0360, $AC1.M - 0b28 2638 lrs $AC0.M, @0x0038 - 0b29 2439 lrs $AC0.L, @0x0039 - 0b2a 02bf 06d2 call 0x06d2 - 0b2c 00df 0360 lr $AC1.M, @0x0360 - 0b2e 8100 clr $ACC0 - 0b2f 263a lrs $AC0.M, @0x003a - 0b30 b100 tst $ACC0 - 0b31 0294 0b40 jnz 0x0b40 - 0b33 263b lrs $AC0.M, @0x003b - 0b34 5c00 sub $ACC0, $ACC1 - 0b35 0290 0b40 jge 0x0b40 - 0b37 223b lrs $AX0.H, @0x003b - 0b38 02bf 06ef call 0x06ef - 0b3a 5500 subr $ACC1, $AX0.H - 0b3b 0a01 lris $AX0.H, #0x01 - 0b3c 00fa 0405 sr @0x0405, $AX0.H - 0b3e 029f 0b13 jmp 0x0b13 - 0b40 1f5f mrr $AX0.H, $AC1.M - 0b41 02bf 06ef call 0x06ef - 0b43 00fa 0362 sr @0x0362, $AX0.H - 0b45 8100 clr $ACC0 - 0b46 263a lrs $AC0.M, @0x003a - 0b47 243b lrs $AC0.L, @0x003b - 0b48 1570 lsr $ACC1, #-16 - 0b49 0a01 lris $AX0.H, #0x01 - 0b4a 0081 0405 lri $AR1, #0x0405 - 0b4c 5c00 sub $ACC0, $ACC1 - 0b4d b100 tst $ACC0 - 0b4e 0275 ifz - 0b4f 1a3a srr @$AR1, $AX0.H - 0b50 2e3a srs @0x003a, $AC0.M - 0b51 2c3b srs @0x003b, $AC0.L - 0b52 2638 lrs $AC0.M, @0x0038 - 0b53 2439 lrs $AC0.L, @0x0039 - 0b54 00d8 0362 lr $AX0.L, @0x0362 - 0b56 7000 addaxl $ACC0, $AX0.L - 0b57 2c39 srs @0x0039, $AC0.L - 0b58 2e38 srs @0x0038, $AC0.M - 0b59 0092 00ff lri $CR, #0x00ff - 0b5b 029f 037e jmp 0x037e - 0b5d 8100 clr $ACC0 - 0b5e 2e34 srs @0x0034, $AC0.M - 0b5f 2e35 srs @0x0035, $AC0.M - 0b60 2334 lrs $AX1.H, @0x0034 - 0b61 2135 lrs $AX1.L, @0x0035 - 0b62 268a lrs $AC0.M, @0xff8a - 0b63 248b lrs $AC0.L, @0xff8b - 0b64 5a00 subax $ACC0, $AX1.L - 0b65 2e3a srs @0x003a, $AC0.M - 0b66 2c3b srs @0x003b, $AC0.L - 0b67 2634 lrs $AC0.M, @0x0034 - 0b68 2435 lrs $AC0.L, @0x0035 - 0b69 238c lrs $AX1.H, @0xff8c - 0b6a 218d lrs $AX1.L, @0xff8d - 0b6b 4a00 addax $ACC0, $AX1.L - 0b6c 2e38 srs @0x0038, $AC0.M - 0b6d 2c39 srs @0x0039, $AC0.L - 0b6e 8100 clr $ACC0 - 0b6f 2e05 srs @0x0005, $AC0.M - 0b70 02df ret - 0b71 0092 0004 lri $CR, #0x0004 - 0b73 2002 lrs $AX0.L, @0x0002 - 0b74 8100 clr $ACC0 - 0b75 8900 clr $ACC1 - 0b76 2430 lrs $AC0.L, @0x0030 - 0b77 8d00 set15 - 0b78 0950 lris $AX1.L, #0x50 - 0b79 a000 mulx $AX0.L, $AX1.L - 0b7a a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0b7b 1404 lsl $ACC0, #4 - 0b7c 8c00 clr15 - 0b7d 1ffe mrr $AC1.M, $AC0.M - 0b7e 0083 0580 lri $AR3, #0x0580 - 0b80 02df ret - 0b81 02bf 0b71 call 0x0b71 - 0b83 2201 lrs $AX0.H, @0x0001 - 0b84 8600 tstaxh $AX0.H - 0b85 0294 0b96 jnz 0x0b96 - 0b87 2204 lrs $AX0.H, @0x0004 - 0b88 8600 tstaxh $AX0.H - 0b89 02b4 0be0 callnz 0x0be0 - 0b8b 8100 clr $ACC0 - 0b8c 2605 lrs $AC0.M, @0x0005 - 0b8d b100 tst $ACC0 - 0b8e 0295 0ba3 jz 0x0ba3 - 0b90 8100 clr $ACC0 - 0b91 2e05 srs @0x0005, $AC0.M - 0b92 2281 lrs $AX0.H, @0xff81 - 0b93 8600 tstaxh $AX0.H - 0b94 0294 0b9d jnz 0x0b9d - 0b96 8100 clr $ACC0 - 0b97 005f loop $AC1.M - 0b98 1b7e srri @$AR3, $AC0.M - 0b99 7400 incm $AC0.M - 0b9a 2e01 srs @0x0001, $AC0.M - 0b9b 029f 0bd9 jmp 0x0bd9 - 0b9d 2688 lrs $AC0.M, @0xff88 - 0b9e 2489 lrs $AC0.L, @0xff89 - 0b9f 2e34 srs @0x0034, $AC0.M - 0ba0 2c35 srs @0x0035, $AC0.L - 0ba1 02bf 0be0 call 0x0be0 - 0ba3 00ff 0360 sr @0x0360, $AC1.M - 0ba5 2638 lrs $AC0.M, @0x0038 - 0ba6 2439 lrs $AC0.L, @0x0039 - 0ba7 02bf 06d2 call 0x06d2 - 0ba9 02bf 06e9 call 0x06e9 - 0bab 00df 0360 lr $AC1.M, @0x0360 - 0bad 8100 clr $ACC0 - 0bae 263a lrs $AC0.M, @0x003a - 0baf b100 tst $ACC0 - 0bb0 0294 0bbf jnz 0x0bbf - 0bb2 263b lrs $AC0.M, @0x003b - 0bb3 5c00 sub $ACC0, $ACC1 - 0bb4 0290 0bbf jge 0x0bbf - 0bb6 223b lrs $AX0.H, @0x003b - 0bb7 02bf 06b4 call 0x06b4 - 0bb9 5500 subr $ACC1, $AX0.H - 0bba 0a01 lris $AX0.H, #0x01 - 0bbb 00fa 0405 sr @0x0405, $AX0.H - 0bbd 029f 0b90 jmp 0x0b90 - 0bbf 1f5f mrr $AX0.H, $AC1.M - 0bc0 02bf 06b4 call 0x06b4 - 0bc2 00fa 0362 sr @0x0362, $AX0.H - 0bc4 8100 clr $ACC0 - 0bc5 263a lrs $AC0.M, @0x003a - 0bc6 243b lrs $AC0.L, @0x003b - 0bc7 1570 lsr $ACC1, #-16 - 0bc8 0a01 lris $AX0.H, #0x01 - 0bc9 0081 0405 lri $AR1, #0x0405 - 0bcb 5c00 sub $ACC0, $ACC1 - 0bcc b100 tst $ACC0 - 0bcd 0275 ifz - 0bce 1a3a srr @$AR1, $AX0.H - 0bcf 2e3a srs @0x003a, $AC0.M - 0bd0 2c3b srs @0x003b, $AC0.L - 0bd1 2638 lrs $AC0.M, @0x0038 - 0bd2 2439 lrs $AC0.L, @0x0039 - 0bd3 00d8 0362 lr $AX0.L, @0x0362 - 0bd5 7000 addaxl $ACC0, $AX0.L - 0bd6 7000 addaxl $ACC0, $AX0.L - 0bd7 2c39 srs @0x0039, $AC0.L - 0bd8 2e38 srs @0x0038, $AC0.M - 0bd9 0092 00ff lri $CR, #0x00ff - 0bdb 029f 037e jmp 0x037e - 0bdd 8100 clr $ACC0 - 0bde 2e34 srs @0x0034, $AC0.M - 0bdf 2e35 srs @0x0035, $AC0.M - 0be0 2334 lrs $AX1.H, @0x0034 - 0be1 2135 lrs $AX1.L, @0x0035 - 0be2 268a lrs $AC0.M, @0xff8a - 0be3 248b lrs $AC0.L, @0xff8b - 0be4 5a00 subax $ACC0, $AX1.L - 0be5 2e3a srs @0x003a, $AC0.M - 0be6 2c3b srs @0x003b, $AC0.L - 0be7 2634 lrs $AC0.M, @0x0034 - 0be8 2435 lrs $AC0.L, @0x0035 - 0be9 1401 lsl $ACC0, #1 - 0bea 238c lrs $AX1.H, @0xff8c - 0beb 218d lrs $AX1.L, @0xff8d - 0bec 4a00 addax $ACC0, $AX1.L - 0bed 2e38 srs @0x0038, $AC0.M - 0bee 2c39 srs @0x0039, $AC0.L - 0bef 8100 clr $ACC0 - 0bf0 2e05 srs @0x0005, $AC0.M - 0bf1 02df ret - 0bf2 8900 clr $ACC1 - 0bf3 0f50 lris $AC1.M, #0x50 - 0bf4 0083 0520 lri $AR3, #0x0520 - 0bf6 02bf 0c0b call 0x0c0b - 0bf8 029f 0386 jmp 0x0386 - 0bfa 00d8 0402 lr $AX0.L, @0x0402 - 0bfc 8100 clr $ACC0 - 0bfd 8900 clr $ACC1 - 0bfe 00dc 0430 lr $AC0.L, @0x0430 - 0c00 0a50 lris $AX0.H, #0x50 - 0c01 9000 mul $AX0.L, $AX0.H - 0c02 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0c03 1404 lsl $ACC0, #4 - 0c04 1ffe mrr $AC1.M, $AC0.M - 0c05 0083 0580 lri $AR3, #0x0580 - 0c07 02bf 0c0b call 0x0c0b - 0c09 029f 037e jmp 0x037e - 0c0b 0092 0004 lri $CR, #0x0004 - 0c0d 8100 clr $ACC0 - 0c0e 263a lrs $AC0.M, @0x003a - 0c0f 243b lrs $AC0.L, @0x003b - 0c10 1f1f mrr $AX0.L, $AC1.M - 0c11 0a00 lris $AX0.H, #0x00 - 0c12 5800 subax $ACC0, $AX0.L - 0c13 0292 0c29 jg 0x0c29 - 0c15 8900 clr $ACC1 - 0c16 00c0 043b lr $AR0, @0x043b - 0c18 02bf 0c4e call 0x0c4e - 0c1a 8100 clr $ACC0 - 0c1b 1fd8 mrr $AC0.M, $AX0.L - 0c1c 223b lrs $AX0.H, @0x003b - 0c1d 5400 subr $ACC0, $AX0.H - 0c1e 0007 dar $AR3 - 0c1f 1979 lrri $AX1.L, @$AR3 - 0c20 005e loop $AC0.M - 0c21 1b79 srri @$AR3, $AX1.L - 0c22 0f01 lris $AC1.M, #0x01 - 0c23 2f01 srs @0x0001, $AC1.M - 0c24 8900 clr $ACC1 - 0c25 2f3b srs @0x003b, $AC1.M - 0c26 0092 00ff lri $CR, #0x00ff - 0c28 02df ret - 0c29 2e3a srs @0x003a, $AC0.M - 0c2a 2c3b srs @0x003b, $AC0.L - 0c2b 8100 clr $ACC0 - 0c2c 8900 clr $ACC1 - 0c2d 268a lrs $AC0.M, @0xff8a - 0c2e 2734 lrs $AC1.M, @0x0034 - 0c2f 5c00 sub $ACC0, $ACC1 - 0c30 2e36 srs @0x0036, $AC0.M - 0c31 5000 subr $ACC0, $AX0.L - 0c32 0290 0c48 jge 0x0c48 - 0c34 00c0 0436 lr $AR0, @0x0436 - 0c36 02bf 0c4e call 0x0c4e - 0c38 8100 clr $ACC0 - 0c39 1fd8 mrr $AC0.M, $AX0.L - 0c3a 2236 lrs $AX0.H, @0x0036 - 0c3b 5400 subr $ACC0, $AX0.H - 0c3c 1c1e mrr $AR0, $AC0.M - 0c3d 8100 clr $ACC0 - 0c3e 2e34 srs @0x0034, $AC0.M - 0c3f 2688 lrs $AC0.M, @0xff88 - 0c40 2489 lrs $AC0.L, @0xff89 - 0c41 2e8c srs @0xff8c, $AC0.M - 0c42 2c8d srs @0xff8d, $AC0.L - 0c43 02bf 0c4e call 0x0c4e - 0c45 0092 00ff lri $CR, #0x00ff - 0c47 02df ret - 0c48 1c18 mrr $AR0, $AX0.L - 0c49 02bf 0c4e call 0x0c4e - 0c4b 0092 00ff lri $CR, #0x00ff - 0c4d 02df ret - 0c4e 8100 clr $ACC0 - 0c4f 1fc0 mrr $AC0.M, $AR0 - 0c50 b100 tst $ACC0 - 0c51 02d5 retz - 0c52 8900 clr $ACC1 - 0c53 2734 lrs $AC1.M, @0x0034 - 0c54 0340 0001 andi $AC1.M, #0x0001 - 0c56 0b00 lris $AX1.H, #0x00 - 0c57 1f3f mrr $AX1.L, $AC1.M - 0c58 268c lrs $AC0.M, @0xff8c - 0c59 248d lrs $AC0.L, @0xff8d - 0c5a 8900 clr $ACC1 - 0c5b 2534 lrs $AC1.L, @0x0034 - 0c5c 1501 lsl $ACC1, #1 - 0c5d 4c00 add $ACC0, $ACC1 - 0c5e 5a00 subax $ACC0, $AX1.L - 0c5f 5a00 subax $ACC0, $AX1.L - 0c60 1c20 mrr $AR1, $AR0 - 0c61 1fe0 mrr $AC1.M, $AR0 - 0c62 0502 addis $ACC1, #0x02 - 0c63 1c1f mrr $AR0, $AC1.M - 0c64 009f 0b00 lri $AC1.M, #0x0b00 - 0c66 0092 00ff lri $CR, #0x00ff - 0c68 02bf 0649 call 0x0649 - 0c6a 0092 0004 lri $CR, #0x0004 - 0c6c 2734 lrs $AC1.M, @0x0034 - 0c6d 1f61 mrr $AX1.H, $AR1 - 0c6e 4700 addr $ACC1, $AX1.H - 0c6f 2f34 srs @0x0034, $AC1.M - 0c70 0080 0b00 lri $AR0, #0x0b00 - 0c72 8900 clr $ACC1 - 0c73 1ff9 mrr $AC1.M, $AX1.L - 0c74 b900 tst $ACC1 - 0c75 0274 ifnz - 0c76 0008 iar $AR0 - 0c77 8900 clr $ACC1 - 0c78 1fe1 mrr $AC1.M, $AR1 - 0c79 191e lrri $AC0.M, @$AR0 - 0c7a 0701 cmpis $ACC1, #0x01 - 0c7b 0293 0c84 jle 0x0c84 - 0c7d 191a lrri $AX0.H, @$AR0 - 0c7e 05fe addis $ACC1, #0xfe - 0c7f 005f loop $AC1.M - 0c80 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c81 1b7e srri @$AR3, $AC0.M - 0c82 1b7a srri @$AR3, $AX0.H - 0c83 02df ret - 0c84 1b7e srri @$AR3, $AC0.M - 0c85 02df ret - 0c86 0083 03e8 lri $AR3, #0x03e8 - 0c88 191e lrri $AC0.M, @$AR0 - 0c89 191a lrri $AX0.H, @$AR0 - 0c8a 1006 loopi #0x06 - 0c8b 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c8c 1b7e srri @$AR3, $AC0.M - 0c8d 1b7a srri @$AR3, $AX0.H - 0c8e 0080 03e8 lri $AR0, #0x03e8 - 0c90 8a00 m2 - 0c91 0088 0007 lri $WR0, #0x0007 - 0c93 1150 0ca0 bloopi #0x50, 0x0ca0 - 0c95 1c61 mrr $AR3, $AR1 - 0c96 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c97 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c98 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c99 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c9a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c9b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c9c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c9d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c9e f200 madd $AX0.L, $AX0.H - 0c9f fe00 movpz $ACC0 - 0ca0 1b3e srri @$AR1, $AC0.M - 0ca1 0088 ffff lri $WR0, #0xffff - 0ca3 8b00 m0 - 0ca4 02df ret - 0ca5 8a00 m2 - 0ca6 05fe addis $ACC1, #0xfe - 0ca7 0083 03e8 lri $AR3, #0x03e8 - 0ca9 191e lrri $AC0.M, @$AR0 - 0caa 191a lrri $AX0.H, @$AR0 - 0cab 005f loop $AC1.M - 0cac 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cad 1b7e srri @$AR3, $AC0.M - 0cae 1b7a srri @$AR3, $AX0.H - 0caf 0080 03e8 lri $AR0, #0x03e8 - 0cb1 0501 addis $ACC1, #0x01 - 0cb2 1d1f mrr $WR0, $AC1.M - 0cb3 1150 0cbb bloopi #0x50, 0x0cbb - 0cb5 1c61 mrr $AR3, $AR1 - 0cb6 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0cb7 005f loop $AC1.M - 0cb8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0cb9 f200 madd $AX0.L, $AX0.H - 0cba fe00 movpz $ACC0 - 0cbb 1b3e srri @$AR1, $AC0.M - 0cbc 0088 ffff lri $WR0, #0xffff - 0cbe 8b00 m0 - 0cbf 02df ret - 0cc0 0083 03e8 lri $AR3, #0x03e8 - 0cc2 191e lrri $AC0.M, @$AR0 - 0cc3 191a lrri $AX0.H, @$AR0 - 0cc4 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cc5 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cc6 1b7e srri @$AR3, $AC0.M - 0cc7 1b7a srri @$AR3, $AX0.H - 0cc8 0080 03e8 lri $AR0, #0x03e8 - 0cca 0088 0003 lri $WR0, #0x0003 - 0ccc 0085 0000 lri $IX1, #0x0000 - 0cce 0087 0000 lri $IX3, #0x0000 - 0cd0 1fc2 mrr $AC0.M, $AR2 - 0cd1 195b lrri $AX1.H, @$AR2 - 0cd2 1959 lrri $AX1.L, @$AR2 - 0cd3 195f lrri $AC1.M, @$AR2 - 0cd4 195a lrri $AX0.H, @$AR2 - 0cd5 1c5e mrr $AR2, $AC0.M - 0cd6 1fda mrr $AC0.M, $AX0.H - 0cd7 1c61 mrr $AR3, $AR1 - 0cd8 8a00 m2 - 0cd9 8f00 set40 - 0cda 191a lrri $AX0.H, @$AR0 - 0cdb b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0cdc e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cdd ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0cde e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0cdf b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0ce0 1127 0ceb bloopi #0x27, 0x0ceb - 0ce2 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ce3 197e lrri $AC0.M, @$AR3 - 0ce4 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ce5 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0ce6 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0ce7 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0ce8 197f lrri $AC1.M, @$AR3 - 0ce9 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0cea e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0ceb b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0cec e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ced 197e lrri $AC0.M, @$AR3 - 0cee e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0cef eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cf0 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 0cf1 1bff srrn @$AR3, $AC1.M - 0cf2 197f lrri $AC1.M, @$AR3 - 0cf3 8e00 set16 - 0cf4 8b00 m0 - 0cf5 0088 ffff lri $WR0, #0xffff - 0cf7 1b5b srri @$AR2, $AX1.H - 0cf8 1b59 srri @$AR2, $AX1.L - 0cf9 1b5f srri @$AR2, $AC1.M - 0cfa 1b5e srri @$AR2, $AC0.M - 0cfb 02df ret - 0cfc 0083 03e8 lri $AR3, #0x03e8 - 0cfe 191e lrri $AC0.M, @$AR0 - 0cff 191a lrri $AX0.H, @$AR0 - 0d00 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0d01 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0d02 1b7e srri @$AR3, $AC0.M - 0d03 1b7a srri @$AR3, $AX0.H - 0d04 0080 03e8 lri $AR0, #0x03e8 - 0d06 0088 0003 lri $WR0, #0x0003 - 0d08 0085 0000 lri $IX1, #0x0000 - 0d0a 0087 0000 lri $IX3, #0x0000 - 0d0c 1fc2 mrr $AC0.M, $AR2 - 0d0d 195b lrri $AX1.H, @$AR2 - 0d0e 1959 lrri $AX1.L, @$AR2 - 0d0f 195f lrri $AC1.M, @$AR2 - 0d10 195a lrri $AX0.H, @$AR2 - 0d11 1c5e mrr $AR2, $AC0.M - 0d12 1fda mrr $AC0.M, $AX0.H - 0d13 1c61 mrr $AR3, $AR1 - 0d14 8a00 m2 - 0d15 8f00 set40 - 0d16 191a lrri $AX0.H, @$AR0 - 0d17 b800 mulx $AX0.H, $AX1.H - 0d18 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0d19 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d1a ea00 maddc $AC1.M, $AX1.L - 0d1b ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0d1c e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0d1d ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0d1e b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0d1f 1127 0d30 bloopi #0x27, 0x0d30 - 0d21 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d22 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0d23 197e lrri $AC0.M, @$AR3 - 0d24 e800 maddc $AC0.M, $AX1.L - 0d25 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0d26 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0d27 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0d28 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0d29 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0d2a e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0d2b 197f lrri $AC1.M, @$AR3 - 0d2c ea00 maddc $AC1.M, $AX1.L - 0d2d ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0d2e e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0d2f ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0d30 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0d31 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d32 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0d33 197e lrri $AC0.M, @$AR3 - 0d34 e800 maddc $AC0.M, $AX1.L - 0d35 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0d36 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0d37 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0d38 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0d39 1bff srrn @$AR3, $AC1.M - 0d3a 197f lrri $AC1.M, @$AR3 - 0d3b 8e00 set16 - 0d3c 8b00 m0 - 0d3d 0088 ffff lri $WR0, #0xffff - 0d3f 1b5b srri @$AR2, $AX1.H - 0d40 1b59 srri @$AR2, $AX1.L - 0d41 1b5f srri @$AR2, $AC1.M - 0d42 1b5e srri @$AR2, $AC0.M - 0d43 02df ret - 0d44 0eff lris $AC0.M, #0xff - 0d45 00fe 03f2 sr @0x03f2, $AC0.M - 0d47 8100 clr $ACC0 - 0d48 00fe 03f0 sr @0x03f0, $AC0.M - 0d4a 00fe 03f6 sr @0x03f6, $AC0.M - 0d4c 009e 0100 lri $AC0.M, #0x0100 - 0d4e 00fe 03f7 sr @0x03f7, $AC0.M - 0d50 00da 03f7 lr $AX0.H, @0x03f7 - 0d52 009e 8000 lri $AC0.M, #0x8000 - 0d54 5400 subr $ACC0, $AX0.H - 0d55 00fe 03f5 sr @0x03f5, $AC0.M - 0d57 0e30 lris $AC0.M, #0x30 - 0d58 00fe 03f3 sr @0x03f3, $AC0.M - 0d5a 0e10 lris $AC0.M, #0x10 - 0d5b 00fe 03f4 sr @0x03f4, $AC0.M - 0d5d 009e 0096 lri $AC0.M, #0x0096 - 0d5f 00fe 03f1 sr @0x03f1, $AC0.M - 0d61 02df ret - 0d62 0080 0a00 lri $AR0, #0x0a00 - 0d64 8100 clr $ACC0 - 0d65 00de 03f0 lr $AC0.M, @0x03f0 - 0d67 8900 clr $ACC1 - 0d68 b100 tst $ACC0 - 0d69 0275 ifz - 0d6a 0550 addis $ACC1, #0x50 - 0d6b 00ff 03f0 sr @0x03f0, $AC1.M - 0d6d 0200 0a60 addi $AC0.M, #0x0a60 - 0d6f 1c7e mrr $AR3, $AC0.M - 0d70 0f4e lris $AC1.M, #0x4e - 0d71 02bf 012b call 0x012b - 0d73 02df ret - 0d74 00de 03f1 lr $AC0.M, @0x03f1 - 0d76 0200 0a60 addi $AC0.M, #0x0a60 - 0d78 1c7e mrr $AR3, $AC0.M - 0d79 8100 clr $ACC0 - 0d7a 8900 clr $ACC1 - 0d7b 009f 00a0 lri $AC1.M, #0x00a0 - 0d7d 00de 03f1 lr $AC0.M, @0x03f1 - 0d7f 5d00 sub $ACC1, $ACC0 - 0d80 0e50 lris $AC0.M, #0x50 - 0d81 0750 cmpis $ACC1, #0x50 - 0d82 0270 ifge - 0d83 5d00 sub $ACC1, $ACC0 - 0d84 00da 03f2 lr $AX0.H, @0x03f2 - 0d86 8600 tstaxh $AX0.H - 0d87 0290 0da5 jge 0x0da5 - 0d89 00de 03f3 lr $AC0.M, @0x03f3 - 0d8b 5c00 sub $ACC0, $ACC1 - 0d8c 0293 0d90 jle 0x0d90 - 0d8e 029f 0daa jmp 0x0daa - 0d90 00db 03f7 lr $AX1.H, @0x03f7 - 0d92 009e 8000 lri $AC0.M, #0x8000 - 0d94 4600 addr $ACC0, $AX1.H - 0d95 029f 0d9c jmp 0x0d9c - 0d97 00db 03f7 lr $AX1.H, @0x03f7 - 0d99 009e 8000 lri $AC0.M, #0x8000 - 0d9b 5600 subr $ACC0, $AX1.H - 0d9c 00fe 03f5 sr @0x03f5, $AC0.M - 0d9e 1fda mrr $AC0.M, $AX0.H - 0d9f 7c00 neg $ACC0 - 0da0 1f5e mrr $AX0.H, $AC0.M - 0da1 00fe 03f2 sr @0x03f2, $AC0.M - 0da3 029f 0daa jmp 0x0daa - 0da5 00de 03f4 lr $AC0.M, @0x03f4 - 0da7 5d00 sub $ACC1, $ACC0 - 0da8 0293 0d97 jle 0x0d97 - 0daa 8900 clr $ACC1 - 0dab 00dd 03f5 lr $AC1.L, @0x03f5 - 0dad 1501 lsl $ACC1, #1 - 0dae 8100 clr $ACC0 - 0daf 00dc 03f6 lr $AC0.L, @0x03f6 - 0db1 008b 009f lri $WR3, #0x009f - 0db3 0080 0a00 lri $AR0, #0x0a00 - 0db5 0900 lris $AX1.L, #0x00 - 0db6 1150 0dbd bloopi #0x50, 0x0dbd - 0db8 1878 lrr $AX0.L, @$AR3 - 0db9 4c00 add $ACC0, $ACC1 - 0dba 1cfe mrr $IX3, $AC0.M - 0dbb 001f addarn $AR3, $IX3 - 0dbc 1fd9 mrr $AC0.M, $AX1.L - 0dbd 1b18 srri @$AR0, $AX0.L - 0dbe 009f 0a60 lri $AC1.M, #0x0a60 - 0dc0 1fc3 mrr $AC0.M, $AR3 - 0dc1 5c00 sub $ACC0, $ACC1 - 0dc2 00fe 03f1 sr @0x03f1, $AC0.M - 0dc4 00fc 03f6 sr @0x03f6, $AC0.L - 0dc6 008b ffff lri $WR3, #0xffff - 0dc8 02df ret - 0dc9 0f50 lris $AC1.M, #0x50 - 0dca 0080 0a00 lri $AR0, #0x0a00 - 0dcc 0083 0d60 lri $AR3, #0x0d60 - 0dce 0098 3fff lri $AX0.L, #0x3fff - 0dd0 02bf 0145 call 0x0145 - 0dd2 0f50 lris $AC1.M, #0x50 - 0dd3 0080 0a00 lri $AR0, #0x0a00 - 0dd5 0083 0d00 lri $AR3, #0x0d00 - 0dd7 0098 3fff lri $AX0.L, #0x3fff - 0dd9 02bf 0145 call 0x0145 - 0ddb 02df ret - 0ddc 8a00 m2 - 0ddd 8f00 set40 - 0dde 8100 clr $ACC0 - 0ddf 00de 0404 lr $AC0.M, @0x0404 - 0de1 b100 tst $ACC0 - 0de2 0295 0de9 jz 0x0de9 - 0de4 8100 clr $ACC0 - 0de5 00fe 0478 sr @0x0478, $AC0.M - 0de7 00fe 0479 sr @0x0479, $AC0.M - 0de9 00df 0479 lr $AC1.M, @0x0479 - 0deb 00db 0478 lr $AX1.H, @0x0478 - 0ded 0900 lris $AX1.L, #0x00 - 0dee 0084 0000 lri $IX0, #0x0000 - 0df0 1150 0df9 bloopi #0x50, 0x0df9 - 0df2 199e lrrn $AC0.M, @$AR0 - 0df3 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 - 0df4 c000 mulc $AC0.M, $AX0.H - 0df5 6e00 movp $ACC0 - 0df6 1488 asl $ACC0, #8 - 0df7 4a00 addax $ACC0, $AX1.L - 0df8 1b1e srri @$AR0, $AC0.M - 0df9 1f7e mrr $AX1.H, $AC0.M - 0dfa 00fb 0478 sr @0x0478, $AX1.H - 0dfc 00ff 0479 sr @0x0479, $AC1.M - 0dfe 8b00 m0 - 0dff 8e00 set16 - 0e00 02df ret - 0e01 b900 tst $ACC1 - 0e02 0294 0e07 jnz 0x0e07 - 0e04 6800 movax $ACC0, $AX0.L - 0e05 b100 tst $ACC0 - 0e06 02d5 retz - 0e07 1c23 mrr $AR1, $AR3 - 0e08 197e lrri $AC0.M, @$AR3 - 0e09 191b lrri $AX1.H, @$AR0 - 0e0a d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - 0e0b 1120 0e11 bloopi #0x20, 0x0e11 - 0e0d dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0e0e 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0e0f dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0e10 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0e11 4900 addax $ACC1, $AX0.L - 0e12 1108 0e17 bloopi #0x08, 0x0e17 - 0e14 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0e15 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0e16 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0e17 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0e18 02df ret - 0e19 8f00 set40 - 0e1a 8d00 set15 - 0e1b 1c03 mrr $AR0, $AR3 - 0e1c 00d9 038e lr $AX1.L, @0x038e - 0e1e 0b04 lris $AX1.H, #0x04 - 0e1f 197a lrri $AX0.H, @$AR3 - 0e20 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 - 0e21 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0e22 1128 0e27 bloopi #0x28, 0x0e27 - 0e24 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0e25 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0e26 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0e27 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0e28 8c00 clr15 - 0e29 8e00 set16 - 0e2a 02df ret - 0e2b 00da 0485 lr $AX0.H, @0x0485 - 0e2d 8600 tstaxh $AX0.H - 0e2e 0295 0e3c jz 0x0e3c - 0e30 8100 clr $ACC0 - 0e31 00de 042a lr $AC0.M, @0x042a - 0e33 147f lsr $ACC0, #-1 - 0e34 00fe 042b sr @0x042b, $AC0.M - 0e36 b100 tst $ACC0 - 0e37 0294 0e3c jnz 0x0e3c - 0e39 0a01 lris $AX0.H, #0x01 - 0e3a 00fa 0401 sr @0x0401, $AX0.H - 0e3c 8f00 set40 - 0e3d 8100 clr $ACC0 - 0e3e 00de 0428 lr $AC0.M, @0x0428 - 0e40 1478 lsr $ACC0, #-8 - 0e41 00df 0428 lr $AC1.M, @0x0428 - 0e43 0340 007f andi $AC1.M, #0x007f - 0e45 1f1e mrr $AX0.L, $AC0.M - 0e46 1f5f mrr $AX0.H, $AC1.M - 0e47 0220 007f xori $ACC0, #0x007f - 0e49 1f3e mrr $AX1.L, $AC0.M - 0e4a 0320 007f xori $ACC1, #0x007f - 0e4c 1f7f mrr $AX1.H, $AC1.M - 0e4d 8100 clr $ACC0 - 0e4e 8900 clr $ACC1 - 0e4f 009f 0200 lri $AC1.M, #0x0200 - 0e51 1fd8 mrr $AC0.M, $AX0.L - 0e52 4c00 add $ACC0, $ACC1 - 0e53 1c1e mrr $AR0, $AC0.M - 0e54 1818 lrr $AX0.L, @$AR0 - 0e55 1fda mrr $AC0.M, $AX0.H - 0e56 4c00 add $ACC0, $ACC1 - 0e57 1c1e mrr $AR0, $AC0.M - 0e58 181a lrr $AX0.H, @$AR0 - 0e59 1fd9 mrr $AC0.M, $AX1.L - 0e5a 4c00 add $ACC0, $ACC1 - 0e5b 1c1e mrr $AR0, $AC0.M - 0e5c 1819 lrr $AX1.L, @$AR0 - 0e5d 1fdb mrr $AC0.M, $AX1.H - 0e5e 4c00 add $ACC0, $ACC1 - 0e5f 1c1e mrr $AR0, $AC0.M - 0e60 181b lrr $AX1.H, @$AR0 - 0e61 8a00 m2 - 0e62 0080 0b00 lri $AR0, #0x0b00 - 0e64 9800 mul $AX1.L, $AX1.H - 0e65 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0e66 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0e67 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M - 0e68 6e30 movp's $ACC0 : @$AR0, $AC0.M - 0e69 1b1e srri @$AR0, $AC0.M - 0e6a 8b00 m0 - 0e6b 0080 0b00 lri $AR0, #0x0b00 - 0e6d 0081 0b04 lri $AR1, #0x0b04 - 0e6f 00da 042a lr $AX0.H, @0x042a - 0e71 02bf 0ebc call 0x0ebc - 0e73 0081 0b08 lri $AR1, #0x0b08 - 0e75 0080 0b00 lri $AR0, #0x0b00 - 0e77 00da 042a lr $AX0.H, @0x042a - 0e79 00de 0429 lr $AC0.M, @0x0429 - 0e7b 8a00 m2 - 0e7c c000 mulc $AC0.M, $AX0.H - 0e7d 8b00 m0 - 0e7e 6e00 movp $ACC0 - 0e7f 1f5e mrr $AX0.H, $AC0.M - 0e80 02bf 0ebc call 0x0ebc - 0e82 0080 0b00 lri $AR0, #0x0b00 - 0e84 0081 0b0c lri $AR1, #0x0b0c - 0e86 8100 clr $ACC0 - 0e87 8900 clr $ACC1 - 0e88 00de 042b lr $AC0.M, @0x042b - 0e8a 00df 042a lr $AC1.M, @0x042a - 0e8c 00fe 042a sr @0x042a, $AC0.M - 0e8e 5c00 sub $ACC0, $ACC1 - 0e8f 1f5e mrr $AX0.H, $AC0.M - 0e90 02bf 0ec7 call 0x0ec7 - 0e92 0080 0b0c lri $AR0, #0x0b0c - 0e94 0081 0b10 lri $AR1, #0x0b10 - 0e96 00da 0429 lr $AX0.H, @0x0429 - 0e98 02bf 0ebc call 0x0ebc - 0e9a 0081 0b04 lri $AR1, #0x0b04 - 0e9c 0082 0b0c lri $AR2, #0x0b0c - 0e9e 0083 0ed5 lri $AR3, #0x0ed5 - 0ea0 1108 0eb9 bloopi #0x08, 0x0eb9 - 0ea2 195f lrri $AC1.M, @$AR2 - 0ea3 15fb asr $ACC1, #-5 - 0ea4 1f1d mrr $AX0.L, $AC1.L - 0ea5 1f5f mrr $AX0.H, $AC1.M - 0ea6 193f lrri $AC1.M, @$AR1 - 0ea7 00e1 0b24 sr @0x0b24, $AR1 - 0ea9 00e2 0b25 sr @0x0b25, $AR2 - 0eab 021b ilrri $AC0.M, @$AR3 - 0eac 00e3 0b26 sr @0x0b26, $AR3 - 0eae 1c7e mrr $AR3, $AC0.M - 0eaf 00c0 038f lr $AR0, @0x038f - 0eb1 02bf 0e01 call 0x0e01 - 0eb3 00c1 0b24 lr $AR1, @0x0b24 - 0eb5 00c2 0b25 lr $AR2, @0x0b25 - 0eb7 00c3 0b26 lr $AR3, @0x0b26 - 0eb9 0000 nop - 0eba 8e00 set16 - 0ebb 02df ret - 0ebc 8a00 m2 - 0ebd 191f lrri $AC1.M, @$AR0 - 0ebe d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 - 0ebf d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 - 0ec0 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0ec1 191f lrri $AC1.M, @$AR0 - 0ec2 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0ec3 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0ec4 1b3e srri @$AR1, $AC0.M - 0ec5 8b00 m0 - 0ec6 02df ret - 0ec7 8a00 m2 - 0ec8 8d00 set15 - 0ec9 1f7e mrr $AX1.H, $AC0.M - 0eca 1918 lrri $AX0.L, @$AR0 - 0ecb a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 - 0ecc ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 - 0ecd ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ece 1918 lrri $AX0.L, @$AR0 - 0ecf ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ed0 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0ed1 1b3e srri @$AR1, $AC0.M - 0ed2 8c00 clr15 - 0ed3 8b00 m0 - 0ed4 02df ret - 0ed5 0d00 lris $AC1.L, #0x00 - 0ed6 0d60 lris $AC1.L, #0x60 - 0ed7 0f40 lris $AC1.M, #0x40 - 0ed8 0ca0 lris $AC0.L, #0xa0 - 0ed9 0e80 lris $AC0.M, #0x80 - 0eda 0ee0 lris $AC0.M, #0xe0 - 0edb 0be0 lris $AX1.H, #0xe0 - 0edc 0c40 lris $AC0.L, #0x40 - 0edd 00f9 0361 sr @0x0361, $AX1.L - 0edf 1fc0 mrr $AC0.M, $AR0 - 0ee0 0200 fffc addi $AC0.M, #0xfffc - 0ee2 1c1e mrr $AR0, $AC0.M - 0ee3 1c5e mrr $AR2, $AC0.M - 0ee4 0083 043c lri $AR3, #0x043c - 0ee6 197e lrri $AC0.M, @$AR3 - 0ee7 197f lrri $AC1.M, @$AR3 - 0ee8 80a2 nx'sl : $AC0.M, $AX0.H - 0ee9 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - 0eea 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - 0eeb 1b1f srri @$AR0, $AC1.M - 0eec 1c02 mrr $AR0, $AR2 - 0eed 8100 clr $ACC0 - 0eee 00de 0402 lr $AC0.M, @0x0402 - 0ef0 00fe 0362 sr @0x0362, $AC0.M - 0ef2 1474 lsr $ACC0, #-12 - 0ef3 1f7e mrr $AX1.H, $AC0.M - 0ef4 1f3c mrr $AX1.L, $AC0.L - 0ef5 8900 clr $ACC1 - 0ef6 00dd 0430 lr $AC1.L, @0x0430 - 0ef8 1504 lsl $ACC1, #4 - 0ef9 0604 cmpis $ACC0, #0x04 - 0efa 0290 0f51 jge 0x0f51 - 0efc 1fdd mrr $AC0.M, $AC1.L - 0efd 0082 02b0 lri $AR2, #0x02b0 - 0eff 1050 loopi #0x50 - 0f00 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L - 0f01 1fbe mrr $AC1.L, $AC0.M - 0f02 00fe 0360 sr @0x0360, $AC0.M - 0f04 8900 clr $ACC1 - 0f05 1fbe mrr $AC1.L, $AC0.M - 0f06 0af8 lris $AX0.H, #0xf8 - 0f07 009b 00fc lri $AX1.H, #0x00fc - 0f09 00d8 0361 lr $AX0.L, @0x0361 - 0f0b 0082 02b0 lri $AR2, #0x02b0 - 0f0d 0083 02b0 lri $AR3, #0x02b0 - 0f0f 195e lrri $AC0.M, @$AR2 - 0f10 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M - 0f11 1128 0f16 bloopi #0x28, 0x0f16 - 0f13 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 - 0f14 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H - 0f15 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 - 0f16 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - 0f17 8a00 m2 - 0f18 0082 02b0 lri $AR2, #0x02b0 - 0f1a 00dd 0430 lr $AC1.L, @0x0430 - 0f1c 1504 lsl $ACC1, #4 - 0f1d 1fe0 mrr $AC1.M, $AR0 - 0f1e 8100 clr $ACC0 - 0f1f 00de 0362 lr $AC0.M, @0x0362 - 0f21 1474 lsr $ACC0, #-12 - 0f22 1f7e mrr $AX1.H, $AC0.M - 0f23 1f3c mrr $AX1.L, $AC0.L - 0f24 8f00 set40 - 0f25 1943 lrri $AR3, @$AR2 - 0f26 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0f27 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f28 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f29 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f2a f200 madd $AX0.L, $AX0.H - 0f2b fe00 movpz $ACC0 - 0f2c 1c1f mrr $AR0, $AC1.M - 0f2d 1943 lrri $AR3, @$AR2 - 0f2e 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0f2f 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f30 114e 0f38 bloopi #0x4e, 0x0f38 - 0f32 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f33 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f34 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0f35 1c1f mrr $AR0, $AC1.M - 0f36 1943 lrri $AR3, @$AR2 - 0f37 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0f38 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - 0f39 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f3a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f3b f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0f3c fe00 movpz $ACC0 - 0f3d 1b3e srri @$AR1, $AC0.M - 0f3e 8b00 m0 - 0f3f 8e00 set16 - 0f40 00fe 0433 sr @0x0433, $AC0.M - 0f42 1c1f mrr $AR0, $AC1.M - 0f43 150c lsl $ACC1, #12 - 0f44 0340 0fff andi $AC1.M, #0x0fff - 0f46 00ff 0430 sr @0x0430, $AC1.M - 0f48 0083 043c lri $AR3, #0x043c - 0f4a 191e lrri $AC0.M, @$AR0 - 0f4b 191f lrri $AC1.M, @$AR0 - 0f4c 80a0 nx'ls : $AX0.H, $AC0.M - 0f4d 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0f4e 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0f4f 1b7f srri @$AR3, $AC1.M - 0f50 02df ret - 0f51 1fe0 mrr $AC1.M, $AR0 - 0f52 1c1f mrr $AR0, $AC1.M - 0f53 1128 0f5a bloopi #0x28, 0x0f5a - 0f55 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f56 1b3e srri @$AR1, $AC0.M - 0f57 1c1f mrr $AR0, $AC1.M - 0f58 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f59 1b3e srri @$AR1, $AC0.M - 0f5a 1c1f mrr $AR0, $AC1.M - 0f5b 029f 0f40 jmp 0x0f40 - 0f5d 0083 0520 lri $AR3, #0x0520 - 0f5f 00de 0433 lr $AC0.M, @0x0433 - 0f61 1050 loopi #0x50 - 0f62 1b7e srri @$AR3, $AC0.M - 0f63 029f 0386 jmp 0x0386 - 0f65 1c20 mrr $AR1, $AR0 - 0f66 185f lrr $AC1.M, @$AR2 - 0f67 1f7f mrr $AX1.H, $AC1.M - 0f68 193a lrri $AX0.H, @$AR1 - 0f69 6400 movr $ACC0, $AX0.H - 0f6a 0078 0f6f bloop $AX0.L, 0x0f6f - 0f6c 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 - 0f6d 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M - 0f6e 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 - 0f6f 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M - 0f70 1a5b srr @$AR2, $AX1.H - 0f71 02df ret - 0f72 0098 8240 lri $AX0.L, #0x8240 - 0f74 00f8 04e8 sr @0x04e8, $AX0.L - 0f76 0098 7fff lri $AX0.L, #0x7fff - 0f78 00f8 04e9 sr @0x04e9, $AX0.L - 0f7a 0098 7dbf lri $AX0.L, #0x7dbf - 0f7c 00f8 04ea sr @0x04ea, $AX0.L - 0f7e 0098 843f lri $AX0.L, #0x843f - 0f80 00f8 04eb sr @0x04eb, $AX0.L - 0f82 0098 b23b lri $AX0.L, #0xb23b - 0f84 00f8 04f0 sr @0x04f0, $AX0.L - 0f86 0098 7fff lri $AX0.L, #0x7fff - 0f88 00f8 04f1 sr @0x04f1, $AX0.L - 0f8a 0098 4dc4 lri $AX0.L, #0x4dc4 - 0f8c 00f8 04f2 sr @0x04f2, $AX0.L - 0f8e 0098 d808 lri $AX0.L, #0xd808 - 0f90 00f8 04f3 sr @0x04f3, $AX0.L - 0f92 0098 0000 lri $AX0.L, #0x0000 - 0f94 0080 04ec lri $AR0, #0x04ec - 0f96 1004 loopi #0x04 - 0f97 1b18 srri @$AR0, $AX0.L - 0f98 0080 04f4 lri $AR0, #0x04f4 - 0f9a 1004 loopi #0x04 - 0f9b 1b18 srri @$AR0, $AX0.L - 0f9c 02df ret - 0f9d 0080 0f40 lri $AR0, #0x0f40 - 0f9f 0083 0b00 lri $AR3, #0x0b00 - 0fa1 8900 clr $ACC1 - 0fa2 0f50 lris $AC1.M, #0x50 - 0fa3 0098 6784 lri $AX0.L, #0x6784 - 0fa5 02bf 0154 call 0x0154 - 0fa7 0080 04e8 lri $AR0, #0x04e8 - 0fa9 0082 04ec lri $AR2, #0x04ec - 0fab 0081 0b00 lri $AR1, #0x0b00 - 0fad 8900 clr $ACC1 - 0fae 0f50 lris $AC1.M, #0x50 - 0faf 0080 0b00 lri $AR0, #0x0b00 - 0fb1 0083 0d00 lri $AR3, #0x0d00 - 0fb3 0098 7fff lri $AX0.L, #0x7fff - 0fb5 02bf 0145 call 0x0145 - 0fb7 8900 clr $ACC1 - 0fb8 0f50 lris $AC1.M, #0x50 - 0fb9 0080 0b00 lri $AR0, #0x0b00 - 0fbb 0083 0d60 lri $AR3, #0x0d60 - 0fbd 0098 b820 lri $AX0.L, #0xb820 - 0fbf 02bf 0145 call 0x0145 - 0fc1 0080 0ca0 lri $AR0, #0x0ca0 - 0fc3 0083 0b00 lri $AR3, #0x0b00 - 0fc5 8900 clr $ACC1 - 0fc6 0f50 lris $AC1.M, #0x50 - 0fc7 0098 6784 lri $AX0.L, #0x6784 - 0fc9 02bf 0154 call 0x0154 - 0fcb 0080 04e8 lri $AR0, #0x04e8 - 0fcd 0082 04f4 lri $AR2, #0x04f4 - 0fcf 0081 0b00 lri $AR1, #0x0b00 - 0fd1 8900 clr $ACC1 - 0fd2 0f50 lris $AC1.M, #0x50 - 0fd3 0080 0b00 lri $AR0, #0x0b00 - 0fd5 0083 0d00 lri $AR3, #0x0d00 - 0fd7 0098 47e0 lri $AX0.L, #0x47e0 - 0fd9 02bf 0145 call 0x0145 - 0fdb 8900 clr $ACC1 - 0fdc 0f50 lris $AC1.M, #0x50 - 0fdd 0080 0b00 lri $AR0, #0x0b00 - 0fdf 0083 0d60 lri $AR3, #0x0d60 - 0fe1 0098 8001 lri $AX0.L, #0x8001 - 0fe3 02bf 0145 call 0x0145 - 0fe5 02df ret - 0fe6 0000 nop - 0fe7 0000 nop - 0fe8 0000 nop - 0fe9 0000 nop - 0fea 0000 nop - 0feb 0000 nop - 0fec 0000 nop - 0fed 0000 nop - 0fee 0000 nop - 0fef 0000 nop +// This one belongs to Pikmin 2 for the Wii and utilizes the mysterious UnkZelda address. Also very different from Pikmin 1 for the Wii + 0000 029f 0012 jmp 0x0012 + 0002 0000 nop + 0003 0000 nop + 0004 02ff rti + 0005 0000 nop + 0006 02ff rti + 0007 0000 nop + 0008 02ff rti + 0009 0000 nop + 000a 02ff rti + 000b 0000 nop + 000c 02ff rti + 000d 0000 nop + 000e 029f 072e jmp 0x072e + 0010 029f 0059 jmp 0x0059 + 0012 1205 sbclr #0x05 + 0013 02bf 0062 call 0x0062 + 0015 8100 clr $ACC0 + 0016 009f 1000 lri $AC1.M, #0x1000 + 0018 0080 0000 lri $AR0, #0x0000 + 001a 005f loop $AC1.M + 001b 1b1e srri @$AR0, $AC0.M + 001c 02bf 07fe call 0x07fe + 001e 02bf 0f72 call 0x0f72 + 0020 0e00 lris $AC0.M, #0x00 + 0021 02bf 07e0 call 0x07e0 + 0023 009e 1111 lri $AC0.M, #0x1111 + 0025 02bf 07ea call 0x07ea + 0027 0e00 lris $AC0.M, #0x00 + 0028 00fe 034e sr @0x034e, $AC0.M + 002a 1305 sbset #0x05 + 002b 3a00 orr $AC0.M, $AX1.H + 002c 7400 incm $AC0.M + 002d 1f7e mrr $AX1.H, $AC0.M + 002e 0240 00ff andi $AC0.M, #0x00ff + 0030 0200 5500 addi $AC0.M, #0x5500 + 0032 02bf 00a0 call 0x00a0 + 0034 029f 083b jmp 0x083b + 0036 00df 0357 lr $AC1.M, @0x0357 + 0038 00ff 0345 sr @0x0345, $AC1.M + 003a 00de 0356 lr $AC0.M, @0x0356 + 003c 1ffe mrr $AC1.M, $AC0.M + 003d 0340 00ff andi $AC1.M, #0x00ff + 003f 00ff 0344 sr @0x0344, $AC1.M + 0041 1479 lsr $ACC0, #-7 + 0042 0240 007e andi $AC0.M, #0x007e + 0044 00fe 0343 sr @0x0343, $AC0.M + 0046 0200 0080 addi $AC0.M, #0x0080 + 0048 1c1e mrr $AR0, $AC0.M + 0049 170f jmpr $AR0 + 004a 0092 00ff lri $CR, #0x00ff + 004c 009e cafe lri $AC0.M, #0xcafe + 004e 02bf 00a0 call 0x00a0 + 0050 0e04 lris $AC0.M, #0x04 + 0051 02bf 07e0 call 0x07e0 + 0053 00de 0356 lr $AC0.M, @0x0356 + 0055 02bf 07ea call 0x07ea + 0057 029f 002b jmp 0x002b + 0059 1205 sbclr #0x05 + 005a 02bf 0062 call 0x0062 + 005c 0e01 lris $AC0.M, #0x01 + 005d 02bf 07e0 call 0x07e0 + 005f 1305 sbset #0x05 + 0060 029f 002b jmp 0x002b + 0062 1202 sbclr #0x02 + 0063 1203 sbclr #0x03 + 0064 1204 sbclr #0x04 + 0065 1306 sbset #0x06 + 0066 8e00 set16 + 0067 8c00 clr15 + 0068 8b00 m0 + 0069 009e ffff lri $AC0.M, #0xffff + 006b 1d1e mrr $WR0, $AC0.M + 006c 1d3e mrr $WR1, $AC0.M + 006d 1d5e mrr $WR2, $AC0.M + 006e 1d7e mrr $WR3, $AC0.M + 006f 0092 00ff lri $CR, #0x00ff + 0071 02df ret + 0072 0081 0358 lri $AR1, #0x0358 + 0074 0090 0000 lri $AC0.H, #0x0000 + 0076 0c00 lris $AC0.L, #0x00 + 0077 007e 007c bloop $AC0.M, 0x007c + 0079 193e lrri $AC0.M, @$AR1 + 007a 1b1e srri @$AR0, $AC0.M + 007b 193e lrri $AC0.M, @$AR1 + 007c 1b1e srri @$AR0, $AC0.M + 007d 02df ret + 007e 029f 004a jmp 0x004a + 0080 029f 004a jmp 0x004a + 0082 029f 00d9 jmp 0x00d9 + 0084 029f 02e3 jmp 0x02e3 + 0086 029f 007e jmp 0x007e + 0088 029f 0677 jmp 0x0677 + 008a 029f 0689 jmp 0x0689 + 008c 029f 004a jmp 0x004a + 008e 029f 05c0 jmp 0x05c0 + 0090 029f 060c jmp 0x060c + 0092 029f 05f0 jmp 0x05f0 + 0094 029f 004a jmp 0x004a + 0096 029f 004a jmp 0x004a + 0098 029f 004a jmp 0x004a + 009a 029f 0103 jmp 0x0103 + 009c 029f 00f6 jmp 0x00f6 + 009e 029f 004a jmp 0x004a + 00a0 00fe 0b00 sr @0x0b00, $AC0.M + 00a2 8100 clr $ACC0 + 00a3 00de 0354 lr $AC0.M, @0x0354 + 00a5 1408 lsl $ACC0, #8 + 00a6 00df 0341 lr $AC1.M, @0x0341 + 00a8 3e00 orc $AC0.M + 00a9 00fe 0b01 sr @0x0b01, $AC0.M + 00ab 00de 0350 lr $AC0.M, @0x0350 + 00ad 00fe 0b02 sr @0x0b02, $AC0.M + 00af 00de 0351 lr $AC0.M, @0x0351 + 00b1 00fe 0b03 sr @0x0b03, $AC0.M + 00b3 00de 0352 lr $AC0.M, @0x0352 + 00b5 00fe 0b04 sr @0x0b04, $AC0.M + 00b7 00de 037d lr $AC0.M, @0x037d + 00b9 00dc 037e lr $AC0.L, @0x037e + 00bb 009f 0b00 lri $AC1.M, #0x0b00 + 00bd 0080 0010 lri $AR0, #0x0010 + 00bf 0090 0001 lri $AC0.H, #0x0001 + 00c1 1c3f mrr $AR1, $AC1.M + 00c2 0f0a lris $AC1.M, #0x0a + 00c3 2fd1 srs @SampleFormat, $AC1.M + 00c4 1f5e mrr $AX0.H, $AC0.M + 00c5 1f1c mrr $AX0.L, $AC0.L + 00c6 009e ffff lri $AC0.M, #0xffff + 00c8 2ed6 srs @ACEAH, $AC0.M + 00c9 2ed7 srs @ACEAL, $AC0.M + 00ca 1fda mrr $AC0.M, $AX0.H + 00cb 1f98 mrr $AC0.L, $AX0.L + 00cc 147f lsr $ACC0, #-1 + 00cd 2ed8 srs @ACCAH, $AC0.M + 00ce 2cd9 srs @ACCAL, $AC0.L + 00cf 1f40 mrr $AX0.H, $AR0 + 00d0 007a 00d7 bloop $AX0.H, 0x00d7 + 00d2 193e lrri $AC0.M, @$AR1 + 00d3 2ed3 srs @UnkZelda, $AC0.M + 00d4 0000 nop + 00d5 0000 nop + 00d6 0000 nop + 00d7 0000 nop + 00d8 02df ret + 00d9 0080 0380 lri $AR0, #0x0380 + 00db 0e04 lris $AC0.M, #0x04 + 00dc 02bf 0072 call 0x0072 + 00de 0081 0382 lri $AR1, #0x0382 + 00e0 009f 0000 lri $AC1.M, #0x0000 + 00e2 0080 0280 lri $AR0, #0x0280 + 00e4 02bf 0647 call 0x0647 + 00e6 0081 0384 lri $AR1, #0x0384 + 00e8 009f 0300 lri $AC1.M, #0x0300 + 00ea 0080 0020 lri $AR0, #0x0020 + 00ec 02bf 0647 call 0x0647 + 00ee 00de 0345 lr $AC0.M, @0x0345 + 00f0 00fe 0342 sr @0x0342, $AC0.M + 00f2 02bf 0d44 call 0x0d44 + 00f4 029f 004a jmp 0x004a + 00f6 0080 037d lri $AR0, #0x037d + 00f8 0e01 lris $AC0.M, #0x01 + 00f9 02bf 0072 call 0x0072 + 00fb 00de 037d lr $AC0.M, @0x037d + 00fd 0240 7fff andi $AC0.M, #0x7fff + 00ff 00fe 037d sr @0x037d, $AC0.M + 0101 029f 004a jmp 0x004a + 0103 0080 0374 lri $AR0, #0x0374 + 0105 0e01 lris $AC0.M, #0x01 + 0106 00fe 0377 sr @0x0377, $AC0.M + 0108 00fe 037c sr @0x037c, $AC0.M + 010a 02bf 0072 call 0x0072 + 010c 00de 0345 lr $AC0.M, @0x0345 + 010e 00fe 0376 sr @0x0376, $AC0.M + 0110 029f 004a jmp 0x004a + 0112 0081 034c lri $AR1, #0x034c + 0114 009f 0400 lri $AC1.M, #0x0400 + 0116 0080 00c0 lri $AR0, #0x00c0 + 0118 02bf 0647 call 0x0647 + 011a 02df ret + 011b 0081 034c lri $AR1, #0x034c + 011d 009f 0400 lri $AC1.M, #0x0400 + 011f 0080 0080 lri $AR0, #0x0080 + 0121 0081 034c lri $AR1, #0x034c + 0123 193e lrri $AC0.M, @$AR1 + 0124 193c lrri $AC0.L, @$AR1 + 0125 0098 0000 lri $AX0.L, #0x0000 + 0127 7000 addaxl $ACC0, $AX0.L + 0128 02bf 0656 call 0x0656 + 012a 02df ret + 012b 191e lrri $AC0.M, @$AR0 + 012c 191a lrri $AX0.H, @$AR0 + 012d 005f loop $AC1.M + 012e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 012f 1b7e srri @$AR3, $AC0.M + 0130 1b7a srri @$AR3, $AX0.H + 0131 02df ret + 0132 0000 nop + 0133 007f 0138 bloop $AC1.M, 0x0138 + 0135 191e lrri $AC0.M, @$AR0 + 0136 1b7e srri @$AR3, $AC0.M + 0137 191e lrri $AC0.M, @$AR0 + 0138 1b7e srri @$AR3, $AC0.M + 0139 0000 nop + 013a 02df ret + 013b 191e lrri $AC0.M, @$AR0 + 013c 191a lrri $AX0.H, @$AR0 + 013d 007f 0142 bloop $AC1.M, 0x0142 + 013f 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 0140 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 0141 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 0142 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0143 0000 nop + 0144 02df ret + 0145 8a00 m2 + 0146 157f lsr $ACC1, #-1 + 0147 1c20 mrr $AR1, $AR0 + 0148 1c03 mrr $AR0, $AR3 + 0149 193a lrri $AX0.H, @$AR1 + 014a 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 + 014b 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 + 014c 007f 0151 bloop $AC1.M, 0x0151 + 014e 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 014f 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 0150 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 0151 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 0152 8b00 m0 + 0153 02df ret + 0154 8a00 m2 + 0155 191a lrri $AX0.H, @$AR0 + 0156 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 + 0157 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0158 005f loop $AC1.M + 0159 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M + 015a 8b00 m0 + 015b 02df ret + 015c 8100 clr $ACC0 + 015d 8900 clr $ACC1 + 015e 0e50 lris $AC0.M, #0x50 + 015f 0080 0d00 lri $AR0, #0x0d00 + 0161 005e loop $AC0.M + 0162 1b1f srri @$AR0, $AC1.M + 0163 0080 0d60 lri $AR0, #0x0d60 + 0165 005e loop $AC0.M + 0166 1b1f srri @$AR0, $AC1.M + 0167 00da 0374 lr $AX0.H, @0x0374 + 0169 8600 tstaxh $AX0.H + 016a 02b5 0f9d callz 0x0f9d + 016c 8100 clr $ACC0 + 016d 8900 clr $ACC1 + 016e 0e50 lris $AC0.M, #0x50 + 016f 0080 0ca0 lri $AR0, #0x0ca0 + 0171 005e loop $AC0.M + 0172 1b1f srri @$AR0, $AC1.M + 0173 0080 0f40 lri $AR0, #0x0f40 + 0175 005e loop $AC0.M + 0176 1b1f srri @$AR0, $AC1.M + 0177 0080 0fa0 lri $AR0, #0x0fa0 + 0179 005e loop $AC0.M + 017a 1b1f srri @$AR0, $AC1.M + 017b 0080 0a00 lri $AR0, #0x0a00 + 017d 005e loop $AC0.M + 017e 1b1f srri @$AR0, $AC1.M + 017f 0080 09a0 lri $AR0, #0x09a0 + 0181 005e loop $AC0.M + 0182 1b1f srri @$AR0, $AC1.M + 0183 0f04 lris $AC1.M, #0x04 + 0184 0080 0e10 lri $AR0, #0x0e10 + 0186 0083 0dc0 lri $AR3, #0x0dc0 + 0188 02bf 0132 call 0x0132 + 018a 0080 0e70 lri $AR0, #0x0e70 + 018c 0083 0e20 lri $AR3, #0x0e20 + 018e 02bf 0132 call 0x0132 + 0190 0080 0ed0 lri $AR0, #0x0ed0 + 0192 0083 0e80 lri $AR3, #0x0e80 + 0194 02bf 0132 call 0x0132 + 0196 0080 0f30 lri $AR0, #0x0f30 + 0198 0083 0ee0 lri $AR3, #0x0ee0 + 019a 02bf 0132 call 0x0132 + 019c 8100 clr $ACC0 + 019d 0e50 lris $AC0.M, #0x50 + 019e 8900 clr $ACC1 + 019f 0080 0dc8 lri $AR0, #0x0dc8 + 01a1 005e loop $AC0.M + 01a2 1b1f srri @$AR0, $AC1.M + 01a3 0080 0e28 lri $AR0, #0x0e28 + 01a5 005e loop $AC0.M + 01a6 1b1f srri @$AR0, $AC1.M + 01a7 0080 0e88 lri $AR0, #0x0e88 + 01a9 005e loop $AC0.M + 01aa 1b1f srri @$AR0, $AC1.M + 01ab 0080 0ee8 lri $AR0, #0x0ee8 + 01ad 005e loop $AC0.M + 01ae 1b1f srri @$AR0, $AC1.M + 01af 02df ret + 01b0 009f 0580 lri $AC1.M, #0x0580 + 01b2 009b 00a0 lri $AX1.H, #0x00a0 + 01b4 0081 0393 lri $AR1, #0x0393 + 01b6 18bc lrrd $AC0.L, @$AR1 + 01b7 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 01b8 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 01b9 0080 0050 lri $AR0, #0x0050 + 01bb 02bf 0649 call 0x0649 + 01bd 02df ret + 01be 00df 03a1 lr $AC1.M, @0x03a1 + 01c0 0508 addis $ACC1, #0x08 + 01c1 0080 0580 lri $AR0, #0x0580 + 01c3 1c7f mrr $AR3, $AC1.M + 01c4 0098 7fff lri $AX0.L, #0x7fff + 01c6 8900 clr $ACC1 + 01c7 0f50 lris $AC1.M, #0x50 + 01c8 02bf 0145 call 0x0145 + 01ca 02df ret + 01cb 00c0 03a0 lr $AR0, @0x03a0 + 01cd 191a lrri $AX0.H, @$AR0 + 01ce 02bf 01b0 call 0x01b0 + 01d0 02bf 01be call 0x01be + 01d2 8100 clr $ACC0 + 01d3 8900 clr $ACC1 + 01d4 00de 0390 lr $AC0.M, @0x0390 + 01d6 02a0 0001 andf $AC0.M, #0x0001 + 01d8 029d 01e1 jlz 0x01e1 + 01da 0080 0398 lri $AR0, #0x0398 + 01dc 0e08 lris $AC0.M, #0x08 + 01dd 00c1 03a1 lr $AR1, @0x03a1 + 01df 02bf 0c86 call 0x0c86 + 01e1 0f50 lris $AC1.M, #0x50 + 01e2 00c0 03a1 lr $AR0, @0x03a1 + 01e4 00da 0394 lr $AX0.H, @0x0394 + 01e6 8600 tstaxh $AX0.H + 01e7 0295 01ee jz 0x01ee + 01e9 1c7a mrr $AR3, $AX0.H + 01ea 00d8 0395 lr $AX0.L, @0x0395 + 01ec 02bf 0145 call 0x0145 + 01ee 0f50 lris $AC1.M, #0x50 + 01ef 00c0 03a1 lr $AR0, @0x03a1 + 01f1 00da 0396 lr $AX0.H, @0x0396 + 01f3 8600 tstaxh $AX0.H + 01f4 0295 01fb jz 0x01fb + 01f6 1c7a mrr $AR3, $AX0.H + 01f7 00d8 0397 lr $AX0.L, @0x0397 + 01f9 02bf 0145 call 0x0145 + 01fb 00de 0390 lr $AC0.M, @0x0390 + 01fd 02a0 0002 andf $AC0.M, #0x0002 + 01ff 02dd retlz + 0200 0080 0398 lri $AR0, #0x0398 + 0202 0e08 lris $AC0.M, #0x08 + 0203 00c1 03a1 lr $AR1, @0x03a1 + 0205 02bf 0c86 call 0x0c86 + 0207 02df ret + 0208 8900 clr $ACC1 + 0209 009f 0dc0 lri $AC1.M, #0x0dc0 + 020b 00ff 03a1 sr @0x03a1, $AC1.M + 020d 009f 03a8 lri $AC1.M, #0x03a8 + 020f 00ff 03a2 sr @0x03a2, $AC1.M + 0211 009f 03a4 lri $AC1.M, #0x03a4 + 0213 00ff 03a0 sr @0x03a0, $AC1.M + 0215 1104 0235 bloopi #0x04, 0x0235 + 0217 00c0 03a2 lr $AR0, @0x03a2 + 0219 0083 0390 lri $AR3, #0x0390 + 021b 8900 clr $ACC1 + 021c 0f08 lris $AC1.M, #0x08 + 021d 02bf 0132 call 0x0132 + 021f 00da 0390 lr $AX0.H, @0x0390 + 0221 8600 tstaxh $AX0.H + 0222 0295 0226 jz 0x0226 + 0224 02bf 01cb call 0x01cb + 0226 8100 clr $ACC0 + 0227 00de 03a2 lr $AC0.M, @0x03a2 + 0229 0410 addis $ACC0, #0x10 + 022a 00fe 03a2 sr @0x03a2, $AC0.M + 022c 00de 03a1 lr $AC0.M, @0x03a1 + 022e 0460 addis $ACC0, #0x60 + 022f 00fe 03a1 sr @0x03a1, $AC0.M + 0231 00de 03a0 lr $AC0.M, @0x03a0 + 0233 7400 incm $AC0.M + 0234 00fe 03a0 sr @0x03a0, $AC0.M + 0236 00da 0374 lr $AX0.H, @0x0374 + 0238 8600 tstaxh $AX0.H + 0239 0294 025f jnz 0x025f + 023b 0f50 lris $AC1.M, #0x50 + 023c 0080 0be0 lri $AR0, #0x0be0 + 023e 0083 0e80 lri $AR3, #0x0e80 + 0240 0098 7fff lri $AX0.L, #0x7fff + 0242 02bf 0145 call 0x0145 + 0244 0f50 lris $AC1.M, #0x50 + 0245 0080 0be0 lri $AR0, #0x0be0 + 0247 0083 0ee0 lri $AR3, #0x0ee0 + 0249 0098 b820 lri $AX0.L, #0xb820 + 024b 02bf 0145 call 0x0145 + 024d 0f28 lris $AC1.M, #0x28 + 024e 0080 0c68 lri $AR0, #0x0c68 + 0250 0083 0e80 lri $AR3, #0x0e80 + 0252 0098 b820 lri $AX0.L, #0xb820 + 0254 02bf 0145 call 0x0145 + 0256 0f28 lris $AC1.M, #0x28 + 0257 0080 0c68 lri $AR0, #0x0c68 + 0259 0083 0ee0 lri $AR3, #0x0ee0 + 025b 0098 7fff lri $AX0.L, #0x7fff + 025d 02bf 0145 call 0x0145 + 025f 8100 clr $ACC0 + 0260 8900 clr $ACC1 + 0261 0e50 lris $AC0.M, #0x50 + 0262 0080 0be0 lri $AR0, #0x0be0 + 0264 005e loop $AC0.M + 0265 1b1f srri @$AR0, $AC1.M + 0266 0080 0c40 lri $AR0, #0x0c40 + 0268 005e loop $AC0.M + 0269 1b1f srri @$AR0, $AC1.M + 026a 02df ret + 026b 00c0 03a0 lr $AR0, @0x03a0 + 026d 181a lrr $AX0.H, @$AR0 + 026e 8100 clr $ACC0 + 026f 181e lrr $AC0.M, @$AR0 + 0270 00db 0391 lr $AX1.H, @0x0391 + 0272 7400 incm $AC0.M + 0273 d100 cmpar $ACC1, $AX0.H + 0274 0270 ifge + 0275 8100 clr $ACC0 + 0276 1b1e srri @$AR0, $AC0.M + 0277 00df 03a1 lr $AC1.M, @0x03a1 + 0279 009b 00a0 lri $AX1.H, #0x00a0 + 027b 0081 0393 lri $AR1, #0x0393 + 027d 18bc lrrd $AC0.L, @$AR1 + 027e b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 027f bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0280 0080 0050 lri $AR0, #0x0050 + 0282 02bf 0656 call 0x0656 + 0284 02df ret + 0285 00da 0374 lr $AX0.H, @0x0374 + 0287 8600 tstaxh $AX0.H + 0288 0294 029e jnz 0x029e + 028a 8900 clr $ACC1 + 028b 0f28 lris $AC1.M, #0x28 + 028c 0080 0c40 lri $AR0, #0x0c40 + 028e 0083 0ea8 lri $AR3, #0x0ea8 + 0290 0098 b820 lri $AX0.L, #0xb820 + 0292 02bf 0145 call 0x0145 + 0294 8900 clr $ACC1 + 0295 0f28 lris $AC1.M, #0x28 + 0296 0080 0c40 lri $AR0, #0x0c40 + 0298 0083 0f08 lri $AR3, #0x0f08 + 029a 0098 7fff lri $AX0.L, #0x7fff + 029c 02bf 0145 call 0x0145 + 029e 009f 0dc0 lri $AC1.M, #0x0dc0 + 02a0 00ff 03a1 sr @0x03a1, $AC1.M + 02a2 009f 03a8 lri $AC1.M, #0x03a8 + 02a4 00ff 03a2 sr @0x03a2, $AC1.M + 02a6 009f 03a4 lri $AC1.M, #0x03a4 + 02a8 00ff 03a0 sr @0x03a0, $AC1.M + 02aa 1104 02c8 bloopi #0x04, 0x02c8 + 02ac 00c0 03a2 lr $AR0, @0x03a2 + 02ae 0083 0390 lri $AR3, #0x0390 + 02b0 0f08 lris $AC1.M, #0x08 + 02b1 02bf 0132 call 0x0132 + 02b3 00da 0390 lr $AX0.H, @0x0390 + 02b5 8600 tstaxh $AX0.H + 02b6 0295 02ba jz 0x02ba + 02b8 02bf 026b call 0x026b + 02ba 00de 03a2 lr $AC0.M, @0x03a2 + 02bc 0410 addis $ACC0, #0x10 + 02bd 00fe 03a2 sr @0x03a2, $AC0.M + 02bf 00de 03a1 lr $AC0.M, @0x03a1 + 02c1 0460 addis $ACC0, #0x60 + 02c2 00fe 03a1 sr @0x03a1, $AC0.M + 02c4 00de 03a0 lr $AC0.M, @0x03a0 + 02c6 7400 incm $AC0.M + 02c7 00fe 03a0 sr @0x03a0, $AC0.M + 02c9 02df ret + 02ca 0081 0386 lri $AR1, #0x0386 + 02cc 009f 03a8 lri $AC1.M, #0x03a8 + 02ce 0080 0040 lri $AR0, #0x0040 + 02d0 02bf 0647 call 0x0647 + 02d2 02df ret + 02d3 191e lrri $AC0.M, @$AR0 + 02d4 189c lrrd $AC0.L, @$AR0 + 02d5 4800 addax $ACC0, $AX0.L + 02d6 1b1e srri @$AR0, $AC0.M + 02d7 1b1c srri @$AR0, $AC0.L + 02d8 02df ret + 02d9 8100 clr $ACC0 + 02da 8900 clr $ACC1 + 02db 00df 0354 lr $AC1.M, @0x0354 + 02dd 00de 034e lr $AC0.M, @0x034e + 02df 8200 cmp + 02e0 0293 02d9 jle 0x02d9 + 02e2 02df ret + 02e3 0080 0388 lri $AR0, #0x0388 + 02e5 0081 0072 lri $AR1, #0x0072 + 02e7 0e02 lris $AC0.M, #0x02 + 02e8 173f callr $AR1 + 02e9 02bf 04d7 call 0x04d7 + 02eb 00de 0344 lr $AC0.M, @0x0344 + 02ed 00fe 0341 sr @0x0341, $AC0.M + 02ef 00de 0345 lr $AC0.M, @0x0345 + 02f1 00fe 038e sr @0x038e, $AC0.M + 02f3 8100 clr $ACC0 + 02f4 00fe 0355 sr @0x0355, $AC0.M + 02f6 02bf 02ca call 0x02ca + 02f8 02bf 069b call 0x069b + 02fa 0092 00ff lri $CR, #0x00ff + 02fc 00de 0341 lr $AC0.M, @0x0341 + 02fe 007e 04ce bloop $AC0.M, 0x04ce + 0300 02bf 015c call 0x015c + 0302 02bf 0208 call 0x0208 + 0304 02bf 0543 call 0x0543 + 0306 02bf 0ad4 call 0x0ad4 + 0308 00de 0355 lr $AC0.M, @0x0355 + 030a 7400 incm $AC0.M + 030b 00fe 0355 sr @0x0355, $AC0.M + 030d 8100 clr $ACC0 + 030e 00fe 0354 sr @0x0354, $AC0.M + 0310 00de 0342 lr $AC0.M, @0x0342 + 0312 007e 046e bloop $AC0.M, 0x046e + 0314 009e fead lri $AC0.M, #0xfead + 0316 02bf 00a0 call 0x00a0 + 0318 02bf 02d9 call 0x02d9 + 031a 009e d0d0 lri $AC0.M, #0xd0d0 + 031c 02bf 00a0 call 0x00a0 + 031e 8100 clr $ACC0 + 031f 8900 clr $ACC1 + 0320 00de 0354 lr $AC0.M, @0x0354 + 0322 147c lsr $ACC0, #-4 + 0323 0200 04fc addi $AC0.M, #0x04fc + 0325 1c1e mrr $AR0, $AC0.M + 0326 181f lrr $AC1.M, @$AR0 + 0327 00de 0354 lr $AC0.M, @0x0354 + 0329 0240 000f andi $AC0.M, #0x000f + 032b 3d80 lsrnr $ACC1 + 032c 03c0 8000 andcf $AC1.M, #0x8000 + 032e 029c 046a jlnz 0x046a + 0330 00d8 0354 lr $AX0.L, @0x0354 + 0332 009a 0180 lri $AX0.H, #0x0180 + 0334 8100 clr $ACC0 + 0335 00de 0380 lr $AC0.M, @0x0380 + 0337 00dc 0381 lr $AC0.L, @0x0381 + 0339 9000 mul $AX0.L, $AX0.H + 033a 9400 mulac $AX0.L, $AX0.H, $ACC0 + 033b 00fe 034c sr @0x034c, $AC0.M + 033d 00fc 034d sr @0x034d, $AC0.L + 033f 02bf 0112 call 0x0112 + 0341 00da 0400 lr $AX0.H, @0x0400 + 0343 8600 tstaxh $AX0.H + 0344 0295 046a jz 0x046a + 0346 00da 0401 lr $AX0.H, @0x0401 + 0348 8600 tstaxh $AX0.H + 0349 0294 046a jnz 0x046a + 034b 00da 0433 lr $AX0.H, @0x0433 + 034d 00fa 03f8 sr @0x03f8, $AX0.H + 034f 00da 0406 lr $AX0.H, @0x0406 + 0351 8600 tstaxh $AX0.H + 0352 0294 0f5d jnz 0x0f5d + 0354 8100 clr $ACC0 + 0355 00de 0480 lr $AC0.M, @0x0480 + 0357 0609 cmpis $ACC0, #0x09 + 0358 0295 036b jz 0x036b + 035a 0605 cmpis $ACC0, #0x05 + 035b 0295 036b jz 0x036b + 035d 0608 cmpis $ACC0, #0x08 + 035e 0295 0b04 jz 0x0b04 + 0360 0610 cmpis $ACC0, #0x10 + 0361 0295 0b81 jz 0x0b81 + 0363 0620 cmpis $ACC0, #0x20 + 0364 0295 0bf2 jz 0x0bf2 + 0366 0621 cmpis $ACC0, #0x21 + 0367 0295 0bfa jz 0x0bfa + 0369 029f 09f1 jmp 0x09f1 + 036b 00d8 0402 lr $AX0.L, @0x0402 + 036d 8100 clr $ACC0 + 036e 8900 clr $ACC1 + 036f 00dc 0430 lr $AC0.L, @0x0430 + 0371 8d00 set15 + 0372 0950 lris $AX1.L, #0x50 + 0373 a000 mulx $AX0.L, $AX1.L + 0374 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0375 1404 lsl $ACC0, #4 + 0376 8c00 clr15 + 0377 1ffe mrr $AC1.M, $AC0.M + 0378 0083 0580 lri $AR3, #0x0580 + 037a 02bf 08b3 call 0x08b3 + 037c 029f 037e jmp 0x037e + 037e 0080 0580 lri $AR0, #0x0580 + 0380 0081 0520 lri $AR1, #0x0520 + 0382 0099 0000 lri $AX1.L, #0x0000 + 0384 02bf 0edd call 0x0edd + 0386 00da 04a8 lr $AX0.H, @0x04a8 + 0388 8600 tstaxh $AX0.H + 0389 0295 038f jz 0x038f + 038b 0080 0520 lri $AR0, #0x0520 + 038d 02bf 0ddc call 0x0ddc + 038f 009e 0520 lri $AC0.M, #0x0520 + 0391 00fe 038f sr @0x038f, $AC0.M + 0393 8900 clr $ACC1 + 0394 00df 0484 lr $AC1.M, @0x0484 + 0396 0340 001f andi $AC1.M, #0x001f + 0398 b900 tst $ACC1 + 0399 0295 03bf jz 0x03bf + 039b 00de 038f lr $AC0.M, @0x038f + 039d 5c00 sub $ACC0, $ACC1 + 039e 00fe 038f sr @0x038f, $AC0.M + 03a0 1c7e mrr $AR3, $AC0.M + 03a1 0080 0440 lri $AR0, #0x0440 + 03a3 05fe addis $ACC1, #0xfe + 03a4 02bf 012b call 0x012b + 03a6 0080 0490 lri $AR0, #0x0490 + 03a8 00c1 038f lr $AR1, @0x038f + 03aa 8900 clr $ACC1 + 03ab 00df 0484 lr $AC1.M, @0x0484 + 03ad 0340 001f andi $AC1.M, #0x001f + 03af 02bf 0ca5 call 0x0ca5 + 03b1 00de 038f lr $AC0.M, @0x038f + 03b3 0450 addis $ACC0, #0x50 + 03b4 1c1e mrr $AR0, $AC0.M + 03b5 0083 0440 lri $AR3, #0x0440 + 03b7 8900 clr $ACC1 + 03b8 00df 0484 lr $AC1.M, @0x0484 + 03ba 0340 001f andi $AC1.M, #0x001f + 03bc 05fe addis $ACC1, #0xfe + 03bd 02bf 012b call 0x012b + 03bf 00de 0484 lr $AC0.M, @0x0484 + 03c1 0240 0020 andi $AC0.M, #0x0020 + 03c3 0295 03e1 jz 0x03e1 + 03c5 0080 04a4 lri $AR0, #0x04a4 + 03c7 00c1 038f lr $AR1, @0x038f + 03c9 0082 0454 lri $AR2, #0x0454 + 03cb 0083 04a7 lri $AR3, #0x04a7 + 03cd 18fa lrrd $AX0.H, @$AR3 + 03ce 8600 tstaxh $AX0.H + 03cf 0294 03df jnz 0x03df + 03d1 18fa lrrd $AX0.H, @$AR3 + 03d2 8600 tstaxh $AX0.H + 03d3 0294 03df jnz 0x03df + 03d5 18fa lrrd $AX0.H, @$AR3 + 03d6 8600 tstaxh $AX0.H + 03d7 0294 03df jnz 0x03df + 03d9 8100 clr $ACC0 + 03da 18fe lrrd $AC0.M, @$AR3 + 03db 0280 7fff cmpi $AC0.M, #0x7fff + 03dd 0295 03e1 jz 0x03e1 + 03df 02bf 0cc0 call 0x0cc0 + 03e1 8100 clr $ACC0 + 03e2 00de 042c lr $AC0.M, @0x042c + 03e4 b100 tst $ACC0 + 03e5 0295 03eb jz 0x03eb + 03e7 02bf 0e2b call 0x0e2b + 03e9 029f 0460 jmp 0x0460 + 03eb 8100 clr $ACC0 + 03ec 1c9e mrr $IX0, $AC0.M + 03ed 1cde mrr $IX2, $AC0.M + 03ee 7400 incm $AC0.M + 03ef 1cfe mrr $IX3, $AC0.M + 03f0 8100 clr $ACC0 + 03f1 00de 0407 lr $AC0.M, @0x0407 + 03f3 b100 tst $ACC0 + 03f4 0295 0403 jz 0x0403 + 03f6 00c3 038f lr $AR3, @0x038f + 03f8 0007 dar $AR3 + 03f9 0080 0477 lri $AR0, #0x0477 + 03fb 0084 ffff lri $IX0, #0xffff + 03fd 0087 ffff lri $IX3, #0xffff + 03ff 199a lrrn $AX0.H, @$AR0 + 0400 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + 0401 005e loop $AC0.M + 0402 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + 0403 00da 0485 lr $AX0.H, @0x0485 + 0405 8600 tstaxh $AX0.H + 0406 0295 0419 jz 0x0419 + 0408 8900 clr $ACC1 + 0409 0086 0005 lri $IX2, #0x0005 + 040b 0082 040a lri $AR2, #0x040a + 040d 1106 0411 bloopi #0x06, 0x0411 + 040f 18de lrrd $AC0.M, @$AR2 + 0410 147f lsr $ACC0, #-1 + 0411 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M + 0412 b900 tst $ACC1 + 0413 0294 0419 jnz 0x0419 + 0415 009a 0001 lri $AX0.H, #0x0001 + 0417 00fa 0401 sr @0x0401, $AX0.H + 0419 8f00 set40 + 041a 0086 0002 lri $IX2, #0x0002 + 041c 0082 0408 lri $AR2, #0x0408 + 041e 1106 0449 bloopi #0x06, 0x0449 + 0420 8100 clr $ACC0 + 0421 195e lrri $AC0.M, @$AR2 + 0422 1200 sbclr #0x00 + 0423 b100 tst $ACC0 + 0424 0275 ifz + 0425 1300 sbset #0x00 + 0426 1c7e mrr $AR3, $AC0.M + 0427 195e lrri $AC0.M, @$AR2 + 0428 195f lrri $AC1.M, @$AR2 + 0429 5c00 sub $ACC0, $ACC1 + 042a 14fb asr $ACC0, #-5 + 042b 1f5e mrr $AX0.H, $AC0.M + 042c 1f1c mrr $AX0.L, $AC0.L + 042d 185e lrr $AC0.M, @$AR2 + 042e 0240 00ff andi $AC0.M, #0x00ff + 0430 1f7e mrr $AX1.H, $AC0.M + 0431 185e lrr $AC0.M, @$AR2 + 0432 1478 lsr $ACC0, #-8 + 0433 009c 0000 lri $AC0.L, #0x0000 + 0435 d100 cmpar $ACC1, $AX0.H + 0436 0295 043e jz 0x043e + 0438 185e lrr $AC0.M, @$AR2 + 0439 0272 ifg + 043a 7400 incm $AC0.M + 043b 0271 ifl + 043c 7800 decm $AC0.M + 043d 1a5e srr @$AR2, $AC0.M + 043e 0006 dar $AR2 + 043f 00de 038f lr $AC0.M, @0x038f + 0441 5600 subr $ACC0, $AX1.H + 0442 029d 0447 jlz 0x0447 + 0444 1c1e mrr $AR0, $AC0.M + 0445 02bf 0e01 call 0x0e01 + 0447 0000 nop + 0448 1b5f srri @$AR2, $AC1.M + 0449 000a iar $AR2 + 044a 8e00 set16 + 044b 8100 clr $ACC0 + 044c 00de 0407 lr $AC0.M, @0x0407 + 044e b100 tst $ACC0 + 044f 0295 0460 jz 0x0460 + 0451 00c3 038f lr $AR3, @0x038f + 0453 0087 004f lri $IX3, #0x004f + 0455 001f addarn $AR3, $IX3 + 0456 0080 0477 lri $AR0, #0x0477 + 0458 0084 ffff lri $IX0, #0xffff + 045a 0087 ffff lri $IX3, #0xffff + 045c 19fa lrrn $AX0.H, @$AR3 + 045d 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 045e 005e loop $AC0.M + 045f 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + 0460 00da 0406 lr $AX0.H, @0x0406 + 0462 8600 tstaxh $AX0.H + 0463 0294 0468 jnz 0x0468 + 0465 8100 clr $ACC0 + 0466 00fe 0404 sr @0x0404, $AC0.M + 0468 02bf 011b call 0x011b + 046a 00de 0354 lr $AC0.M, @0x0354 + 046c 7400 incm $AC0.M + 046d 00fe 0354 sr @0x0354, $AC0.M + 046f 009e b05e lri $AC0.M, #0xb05e + 0471 02bf 00a0 call 0x00a0 + 0473 0e00 lris $AC0.M, #0x00 + 0474 00fe 034e sr @0x034e, $AC0.M + 0476 0e04 lris $AC0.M, #0x04 + 0477 02bf 07e0 call 0x07e0 + 0479 00de 0355 lr $AC0.M, @0x0355 + 047b 0260 ff00 ori $AC0.M, #0xff00 + 047d 02bf 07ea call 0x07ea + 047f 02bf 0d62 call 0x0d62 + 0481 02bf 0d74 call 0x0d74 + 0483 02bf 0dc9 call 0x0dc9 + 0485 00de 0341 lr $AC0.M, @0x0341 + 0487 7800 decm $AC0.M + 0488 00fe 0341 sr @0x0341, $AC0.M + 048a 0080 09a0 lri $AR0, #0x09a0 + 048c 0083 0d00 lri $AR3, #0x0d00 + 048e 0f50 lris $AC1.M, #0x50 + 048f 0098 5a82 lri $AX0.L, #0x5a82 + 0491 02bf 0145 call 0x0145 + 0493 0080 09a0 lri $AR0, #0x09a0 + 0495 0083 0d60 lri $AR3, #0x0d60 + 0497 0f50 lris $AC1.M, #0x50 + 0498 02bf 0145 call 0x0145 + 049a 0083 0d00 lri $AR3, #0x0d00 + 049c 02bf 0e19 call 0x0e19 + 049e 0081 0388 lri $AR1, #0x0388 + 04a0 009f 0d00 lri $AC1.M, #0x0d00 + 04a2 0080 0050 lri $AR0, #0x0050 + 04a4 02bf 0654 call 0x0654 + 04a6 0080 0fa0 lri $AR0, #0x0fa0 + 04a8 0083 0d60 lri $AR3, #0x0d60 + 04aa 0f50 lris $AC1.M, #0x50 + 04ab 0098 8000 lri $AX0.L, #0x8000 + 04ad 02bf 0145 call 0x0145 + 04af 0083 0d60 lri $AR3, #0x0d60 + 04b1 02bf 0e19 call 0x0e19 + 04b3 0081 038a lri $AR1, #0x038a + 04b5 009f 0d60 lri $AC1.M, #0x0d60 + 04b7 0080 0050 lri $AR0, #0x0050 + 04b9 02bf 0654 call 0x0654 + 04bb 009a 0000 lri $AX0.H, #0x0000 + 04bd 0098 00a0 lri $AX0.L, #0x00a0 + 04bf 0080 0388 lri $AR0, #0x0388 + 04c1 02bf 02d3 call 0x02d3 + 04c3 0080 038a lri $AR0, #0x038a + 04c5 02bf 02d3 call 0x02d3 + 04c7 02bf 0285 call 0x0285 + 04c9 02bf 0512 call 0x0512 + 04cb 02bf 04e9 call 0x04e9 + 04cd 0000 nop + 04ce 0000 nop + 04cf 009e 0dac lri $AC0.M, #0x0dac + 04d1 02bf 00a0 call 0x00a0 + 04d3 0080 002b lri $AR0, #0x002b + 04d5 029f 0779 jmp 0x0779 + 04d7 0080 0374 lri $AR0, #0x0374 + 04d9 0e02 lris $AC0.M, #0x02 + 04da 02bf 0074 call 0x0074 + 04dc 00de 0374 lr $AC0.M, @0x0374 + 04de 0240 7fff andi $AC0.M, #0x7fff + 04e0 00fe 0374 sr @0x0374, $AC0.M + 04e2 00de 0376 lr $AC0.M, @0x0376 + 04e4 0240 7fff andi $AC0.M, #0x7fff + 04e6 00fe 0376 sr @0x0376, $AC0.M + 04e8 02df ret + 04e9 00da 0374 lr $AX0.H, @0x0374 + 04eb 8600 tstaxh $AX0.H + 04ec 02d5 retz + 04ed 0083 0f40 lri $AR3, #0x0f40 + 04ef 02bf 0e19 call 0x0e19 + 04f1 0083 0ca0 lri $AR3, #0x0ca0 + 04f3 02bf 0e19 call 0x0e19 + 04f5 0081 0374 lri $AR1, #0x0374 + 04f7 009f 0f40 lri $AC1.M, #0x0f40 + 04f9 0080 0050 lri $AR0, #0x0050 + 04fb 02bf 0654 call 0x0654 + 04fd 0081 0376 lri $AR1, #0x0376 + 04ff 009f 0ca0 lri $AC1.M, #0x0ca0 + 0501 0080 0050 lri $AR0, #0x0050 + 0503 02bf 0654 call 0x0654 + 0505 009a 0000 lri $AX0.H, #0x0000 + 0507 0098 00a0 lri $AX0.L, #0x00a0 + 0509 0080 0374 lri $AR0, #0x0374 + 050b 02bf 02d3 call 0x02d3 + 050d 0080 0376 lri $AR0, #0x0376 + 050f 02bf 02d3 call 0x02d3 + 0511 02df ret + 0512 00da 0374 lr $AX0.H, @0x0374 + 0514 8600 tstaxh $AX0.H + 0515 02d5 retz + 0516 009f 0be0 lri $AC1.M, #0x0be0 + 0518 00ff 03a1 sr @0x03a1, $AC1.M + 051a 00df 03ca lr $AC1.M, @0x03ca + 051c 00ff 0392 sr @0x0392, $AC1.M + 051e 00df 03cb lr $AC1.M, @0x03cb + 0520 00ff 0393 sr @0x0393, $AC1.M + 0522 009f 03a6 lri $AC1.M, #0x03a6 + 0524 00ff 03a0 sr @0x03a0, $AC1.M + 0526 00df 03c9 lr $AC1.M, @0x03c9 + 0528 00ff 0391 sr @0x0391, $AC1.M + 052a 02bf 026b call 0x026b + 052c 009f 0c40 lri $AC1.M, #0x0c40 + 052e 00ff 03a1 sr @0x03a1, $AC1.M + 0530 00df 03da lr $AC1.M, @0x03da + 0532 00ff 0392 sr @0x0392, $AC1.M + 0534 00df 03db lr $AC1.M, @0x03db + 0536 00ff 0393 sr @0x0393, $AC1.M + 0538 009f 03a7 lri $AC1.M, #0x03a7 + 053a 00ff 03a0 sr @0x03a0, $AC1.M + 053c 00df 03d9 lr $AC1.M, @0x03d9 + 053e 00ff 0391 sr @0x0391, $AC1.M + 0540 02bf 026b call 0x026b + 0542 02df ret + 0543 00da 0374 lr $AX0.H, @0x0374 + 0545 8600 tstaxh $AX0.H + 0546 02d5 retz + 0547 00da 03d8 lr $AX0.H, @0x03d8 + 0549 8600 tstaxh $AX0.H + 054a 02d5 retz + 054b 0083 0be0 lri $AR3, #0x0be0 + 054d 0080 0c30 lri $AR0, #0x0c30 + 054f 0f04 lris $AC1.M, #0x04 + 0550 02bf 0132 call 0x0132 + 0552 0083 0c40 lri $AR3, #0x0c40 + 0554 0080 0c90 lri $AR0, #0x0c90 + 0556 0f04 lris $AC1.M, #0x04 + 0557 02bf 0132 call 0x0132 + 0559 00df 03ca lr $AC1.M, @0x03ca + 055b 00ff 0392 sr @0x0392, $AC1.M + 055d 00df 03cb lr $AC1.M, @0x03cb + 055f 00ff 0393 sr @0x0393, $AC1.M + 0561 00df 03a6 lr $AC1.M, @0x03a6 + 0563 7500 incm $AC1.M + 0564 1f5f mrr $AX0.H, $AC1.M + 0565 009f 0be8 lri $AC1.M, #0x0be8 + 0567 02bf 01b2 call 0x01b2 + 0569 00df 03da lr $AC1.M, @0x03da + 056b 00ff 0392 sr @0x0392, $AC1.M + 056d 00df 03db lr $AC1.M, @0x03db + 056f 00ff 0393 sr @0x0393, $AC1.M + 0571 00df 03a7 lr $AC1.M, @0x03a7 + 0573 7500 incm $AC1.M + 0574 1f5f mrr $AX0.H, $AC1.M + 0575 009f 0c48 lri $AC1.M, #0x0c48 + 0577 02bf 01b2 call 0x01b2 + 0579 00de 03c8 lr $AC0.M, @0x03c8 + 057b 02a0 0001 andf $AC0.M, #0x0001 + 057d 029d 0586 jlz 0x0586 + 057f 0080 03d0 lri $AR0, #0x03d0 + 0581 0e08 lris $AC0.M, #0x08 + 0582 0081 0be0 lri $AR1, #0x0be0 + 0584 02bf 0c86 call 0x0c86 + 0586 00de 03d8 lr $AC0.M, @0x03d8 + 0588 02a0 0001 andf $AC0.M, #0x0001 + 058a 029d 0593 jlz 0x0593 + 058c 0080 03e0 lri $AR0, #0x03e0 + 058e 0e08 lris $AC0.M, #0x08 + 058f 0081 0c40 lri $AR1, #0x0c40 + 0591 02bf 0c86 call 0x0c86 + 0593 0f50 lris $AC1.M, #0x50 + 0594 0080 0be0 lri $AR0, #0x0be0 + 0596 0083 0f40 lri $AR3, #0x0f40 + 0598 00d8 03cd lr $AX0.L, @0x03cd + 059a 02bf 0145 call 0x0145 + 059c 0f50 lris $AC1.M, #0x50 + 059d 0080 0c40 lri $AR0, #0x0c40 + 059f 0083 0ca0 lri $AR3, #0x0ca0 + 05a1 00d8 03df lr $AX0.L, @0x03df + 05a3 02bf 0145 call 0x0145 + 05a5 00de 03c8 lr $AC0.M, @0x03c8 + 05a7 02a0 0002 andf $AC0.M, #0x0002 + 05a9 029d 05b2 jlz 0x05b2 + 05ab 0080 03d0 lri $AR0, #0x03d0 + 05ad 0e08 lris $AC0.M, #0x08 + 05ae 0081 0be0 lri $AR1, #0x0be0 + 05b0 02bf 0c86 call 0x0c86 + 05b2 00de 03d8 lr $AC0.M, @0x03d8 + 05b4 02a0 0002 andf $AC0.M, #0x0002 + 05b6 029d 05bf jlz 0x05bf + 05b8 0080 03e0 lri $AR0, #0x03e0 + 05ba 0e08 lris $AC0.M, #0x08 + 05bb 0081 0c40 lri $AR1, #0x0c40 + 05bd 02bf 0c86 call 0x0c86 + 05bf 02df ret + 05c0 0080 0346 lri $AR0, #0x0346 + 05c2 02bf 0072 call 0x0072 + 05c4 02bf 0072 call 0x0072 + 05c6 0081 0346 lri $AR1, #0x0346 + 05c8 193e lrri $AC0.M, @$AR1 + 05c9 193c lrri $AC0.L, @$AR1 + 05ca 009f 0400 lri $AC1.M, #0x0400 + 05cc 00c0 0345 lr $AR0, @0x0345 + 05ce 02bf 0649 call 0x0649 + 05d0 0081 0348 lri $AR1, #0x0348 + 05d2 193e lrri $AC0.M, @$AR1 + 05d3 193c lrri $AC0.L, @$AR1 + 05d4 009f 0800 lri $AC1.M, #0x0800 + 05d6 00c0 0345 lr $AR0, @0x0345 + 05d8 02bf 0649 call 0x0649 + 05da 0081 0346 lri $AR1, #0x0346 + 05dc 193e lrri $AC0.M, @$AR1 + 05dd 193c lrri $AC0.L, @$AR1 + 05de 009f 0800 lri $AC1.M, #0x0800 + 05e0 00c0 0345 lr $AR0, @0x0345 + 05e2 02bf 0656 call 0x0656 + 05e4 0081 0348 lri $AR1, #0x0348 + 05e6 193e lrri $AC0.M, @$AR1 + 05e7 193c lrri $AC0.L, @$AR1 + 05e8 009f 0400 lri $AC1.M, #0x0400 + 05ea 00c0 0345 lr $AR0, @0x0345 + 05ec 02bf 0656 call 0x0656 + 05ee 029f 004a jmp 0x004a + 05f0 0080 0346 lri $AR0, #0x0346 + 05f2 02bf 0072 call 0x0072 + 05f4 02bf 0072 call 0x0072 + 05f6 0081 0346 lri $AR1, #0x0346 + 05f8 193e lrri $AC0.M, @$AR1 + 05f9 193c lrri $AC0.L, @$AR1 + 05fa 009f 0400 lri $AC1.M, #0x0400 + 05fc 00c0 0345 lr $AR0, @0x0345 + 05fe 02bf 0649 call 0x0649 + 0600 0081 0348 lri $AR1, #0x0348 + 0602 193e lrri $AC0.M, @$AR1 + 0603 193c lrri $AC0.L, @$AR1 + 0604 009f 0400 lri $AC1.M, #0x0400 + 0606 00c0 0345 lr $AR0, @0x0345 + 0608 02bf 0656 call 0x0656 + 060a 029f 004a jmp 0x004a + 060c 0080 0346 lri $AR0, #0x0346 + 060e 02bf 0072 call 0x0072 + 0610 02bf 0072 call 0x0072 + 0612 0081 0346 lri $AR1, #0x0346 + 0614 193e lrri $AC0.M, @$AR1 + 0615 193c lrri $AC0.L, @$AR1 + 0616 009f 0400 lri $AC1.M, #0x0400 + 0618 00c0 0344 lr $AR0, @0x0344 + 061a 02bf 0649 call 0x0649 + 061c 0081 0348 lri $AR1, #0x0348 + 061e 193e lrri $AC0.M, @$AR1 + 061f 193c lrri $AC0.L, @$AR1 + 0620 009f 0800 lri $AC1.M, #0x0800 + 0622 00c0 0344 lr $AR0, @0x0344 + 0624 02bf 0649 call 0x0649 + 0626 0080 0400 lri $AR0, #0x0400 + 0628 0083 0800 lri $AR3, #0x0800 + 062a 0084 0000 lri $IX0, #0x0000 + 062c 00da 0345 lr $AX0.H, @0x0345 + 062e 00df 0344 lr $AC1.M, @0x0344 + 0630 8f00 set40 + 0631 197b lrri $AX1.H, @$AR3 + 0632 b800 mulx $AX0.H, $AX1.H + 0633 197b lrri $AX1.H, @$AR3 + 0634 007f 0639 bloop $AC1.M, 0x0639 + 0636 199e lrrn $AC0.M, @$AR0 + 0637 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0638 80b2 nx'sl : $AC0.M, $AX1.H + 0639 0000 nop + 063a 8e00 set16 + 063b 0081 0346 lri $AR1, #0x0346 + 063d 193e lrri $AC0.M, @$AR1 + 063e 193c lrri $AC0.L, @$AR1 + 063f 009f 0400 lri $AC1.M, #0x0400 + 0641 00c0 0344 lr $AR0, @0x0344 + 0643 02bf 0656 call 0x0656 + 0645 029f 004a jmp 0x004a + 0647 193e lrri $AC0.M, @$AR1 + 0648 193c lrri $AC0.L, @$AR1 + 0649 2fcd srs @DSPA, $AC1.M + 064a 0f00 lris $AC1.M, #0x00 + 064b 2fc9 srs @DSCR, $AC1.M + 064c 2ece srs @DSMAH, $AC0.M + 064d 2ccf srs @DSMAL, $AC0.L + 064e 1fe0 mrr $AC1.M, $AR0 + 064f 1501 lsl $ACC1, #1 + 0650 2fcb srs @DSBL, $AC1.M + 0651 02bf 065a call 0x065a + 0653 02df ret + 0654 193e lrri $AC0.M, @$AR1 + 0655 193c lrri $AC0.L, @$AR1 + 0656 2fcd srs @DSPA, $AC1.M + 0657 0f01 lris $AC1.M, #0x01 + 0658 029f 064b jmp 0x064b + 065a 26c9 lrs $AC0.M, @DSCR + 065b 02a0 0004 andf $AC0.M, #0x0004 + 065d 029c 065a jlnz 0x065a + 065f 02df ret + 0660 193e lrri $AC0.M, @$AR1 + 0661 193c lrri $AC0.L, @$AR1 + 0662 00ff ffcd sr @DSPA, $AC1.M + 0664 0f00 lris $AC1.M, #0x00 + 0665 00ff ffc9 sr @DSCR, $AC1.M + 0667 00fe ffce sr @DSMAH, $AC0.M + 0669 00fc ffcf sr @DSMAL, $AC0.L + 066b 1fe0 mrr $AC1.M, $AR0 + 066c 1501 lsl $ACC1, #1 + 066d 00ff ffcb sr @DSBL, $AC1.M + 066f 02df ret + 0670 00de ffc9 lr $AC0.M, @DSCR + 0672 02a0 0004 andf $AC0.M, #0x0004 + 0674 029c 0670 jlnz 0x0670 + 0676 02df ret + 0677 0080 0346 lri $AR0, #0x0346 + 0679 02bf 0072 call 0x0072 + 067b 02bf 0072 call 0x0072 + 067d 0081 0346 lri $AR1, #0x0346 + 067f 00df 0349 lr $AC1.M, @0x0349 + 0681 0340 ffff andi $AC1.M, #0xffff + 0683 00c0 0345 lr $AR0, @0x0345 + 0685 02bf 0647 call 0x0647 + 0687 029f 004a jmp 0x004a + 0689 0080 0346 lri $AR0, #0x0346 + 068b 02bf 0072 call 0x0072 + 068d 02bf 0072 call 0x0072 + 068f 0081 0346 lri $AR1, #0x0346 + 0691 00df 0349 lr $AC1.M, @0x0349 + 0693 0340 ffff andi $AC1.M, #0xffff + 0695 00c0 0345 lr $AR0, @0x0345 + 0697 02bf 0654 call 0x0654 + 0699 029f 004a jmp 0x004a + 069b 0092 00ff lri $CR, #0x00ff + 069d 009e ffff lri $AC0.M, #0xffff + 069f 2ed4 srs @ACSAH, $AC0.M + 06a0 2ed5 srs @ACSAL, $AC0.M + 06a1 2ed6 srs @ACEAH, $AC0.M + 06a2 2ed7 srs @ACEAL, $AC0.M + 06a3 02df ret + 06a4 00ff ffd1 sr @SampleFormat, $AC1.M + 06a6 0340 0003 andi $AC1.M, #0x0003 + 06a8 7900 decm $AC1.M + 06a9 02ca lsrn + 06aa 00df 037d lr $AC1.M, @0x037d + 06ac 00dd 037e lr $AC1.L, @0x037e + 06ae 4c00 add $ACC0, $ACC1 + 06af 00fe ffd8 sr @ACCAH, $AC0.M + 06b1 00fc ffd9 sr @ACCAL, $AC0.L + 06b3 02df ret + 06b4 1fc3 mrr $AC0.M, $AR3 + 06b5 043f addis $ACC0, #0x3f + 06b6 0240 fff0 andi $AC0.M, #0xfff0 + 06b8 00fe ffcd sr @DSPA, $AC0.M + 06ba 1c1a mrr $AR0, $AX0.H + 06bb 00da 037f lr $AX0.H, @0x037f + 06bd 4400 addr $ACC0, $AX0.H + 06be 1f40 mrr $AX0.H, $AR0 + 06bf 1c1e mrr $AR0, $AC0.M + 06c0 1fda mrr $AC0.M, $AX0.H + 06c1 041f addis $ACC0, #0x1f + 06c2 0240 fff0 andi $AC0.M, #0xfff0 + 06c4 1401 lsl $ACC0, #1 + 06c5 00fe ffcb sr @DSBL, $AC0.M + 06c7 00de ffc9 lr $AC0.M, @DSCR + 06c9 02a0 0004 andf $AC0.M, #0x0004 + 06cb 029c 06c7 jlnz 0x06c7 + 06cd 007a 06d0 bloop $AX0.H, 0x06d0 + 06cf 191e lrri $AC0.M, @$AR0 + 06d0 1b7e srri @$AR3, $AC0.M + 06d1 02df ret + 06d2 8900 clr $ACC1 + 06d3 1ffc mrr $AC1.M, $AC0.L + 06d4 0340 001f andi $AC1.M, #0x001f + 06d6 00ff 037f sr @0x037f, $AC1.M + 06d8 1ffc mrr $AC1.M, $AC0.L + 06d9 0340 ffe0 andi $AC1.M, #0xffe0 + 06db 1f9f mrr $AC0.L, $AC1.M + 06dc 00df 037d lr $AC1.M, @0x037d + 06de 00dd 037e lr $AC1.L, @0x037e + 06e0 4c00 add $ACC0, $ACC1 + 06e1 00fe ffce sr @DSMAH, $AC0.M + 06e3 00fc ffcf sr @DSMAL, $AC0.L + 06e5 0f00 lris $AC1.M, #0x00 + 06e6 00ff ffc9 sr @DSCR, $AC1.M + 06e8 02df ret + 06e9 00df 037f lr $AC1.M, @0x037f + 06eb 157f lsr $ACC1, #-1 + 06ec 00ff 037f sr @0x037f, $AC1.M + 06ee 02df ret + 06ef 8600 tstaxh $AX0.H + 06f0 02d5 retz + 06f1 1f1a mrr $AX0.L, $AX0.H + 06f2 009e 0780 lri $AC0.M, #0x0780 + 06f4 00fe ffcd sr @DSPA, $AC0.M + 06f6 1fda mrr $AC0.M, $AX0.H + 06f7 043f addis $ACC0, #0x3f + 06f8 0240 ffe0 andi $AC0.M, #0xffe0 + 06fa 00fe ffcb sr @DSBL, $AC0.M + 06fc 00de ffc9 lr $AC0.M, @DSCR + 06fe 02a0 0004 andf $AC0.M, #0x0004 + 0700 029c 06fc jlnz 0x06fc + 0702 8100 clr $ACC0 + 0703 00de 037f lr $AC0.M, @0x037f + 0705 147f lsr $ACC0, #-1 + 0706 0200 0780 addi $AC0.M, #0x0780 + 0708 1c1e mrr $AR0, $AC0.M + 0709 00de 037f lr $AC0.M, @0x037f + 070b 02a0 0001 andf $AC0.M, #0x0001 + 070d 029d 0716 jlz 0x0716 + 070f 8100 clr $ACC0 + 0710 191e lrri $AC0.M, @$AR0 + 0711 1488 asl $ACC0, #8 + 0712 1b7e srri @$AR3, $AC0.M + 0713 1fda mrr $AC0.M, $AX0.H + 0714 7800 decm $AC0.M + 0715 1f5e mrr $AX0.H, $AC0.M + 0716 8100 clr $ACC0 + 0717 1fda mrr $AC0.M, $AX0.H + 0718 147f lsr $ACC0, #-1 + 0719 007e 0722 bloop $AC0.M, 0x0722 + 071b 8100 clr $ACC0 + 071c 181e lrr $AC0.M, @$AR0 + 071d 0240 ff00 andi $AC0.M, #0xff00 + 071f 1b7e srri @$AR3, $AC0.M + 0720 191e lrri $AC0.M, @$AR0 + 0721 1488 asl $ACC0, #8 + 0722 1b7e srri @$AR3, $AC0.M + 0723 1fda mrr $AC0.M, $AX0.H + 0724 1f58 mrr $AX0.H, $AX0.L + 0725 02a0 0001 andf $AC0.M, #0x0001 + 0727 02dd retlz + 0728 8100 clr $ACC0 + 0729 181e lrr $AC0.M, @$AR0 + 072a 0240 ff00 andi $AC0.M, #0xff00 + 072c 1b7e srri @$AR3, $AC0.M + 072d 02df ret + 072e 1205 sbclr #0x05 + 072f 8e00 set16 + 0730 00f0 03fd sr @0x03fd, $AC0.H + 0732 00fc 03ff sr @0x03ff, $AC0.L + 0734 f400 lsr16 $ACC0 + 0735 00fc 03fe sr @0x03fe, $AC0.L + 0737 00fa 03fa sr @0x03fa, $AX0.H + 0739 8100 clr $ACC0 + 073a 00de fffe lr $AC0.M, @CMBH + 073c 02c0 8000 andcf $AC0.M, #0x8000 + 073e 029c 082f jlnz 0x082f + 0740 00da ffff lr $AX0.H, @CMBL + 0742 8600 tstaxh $AX0.H + 0743 0294 0808 jnz 0x0808 + 0745 00de fffe lr $AC0.M, @CMBH + 0747 02c0 8000 andcf $AC0.M, #0x8000 + 0749 029c 0745 jlnz 0x0745 + 074b 0240 000f andi $AC0.M, #0x000f + 074d 1f5e mrr $AX0.H, $AC0.M + 074e 7400 incm $AC0.M + 074f 0c00 lris $AC0.L, #0x00 + 0750 1404 lsl $ACC0, #4 + 0751 00fe 034e sr @0x034e, $AC0.M + 0753 1fda mrr $AC0.M, $AX0.H + 0754 1f40 mrr $AX0.H, $AR0 + 0755 0200 04fc addi $AC0.M, #0x04fc + 0757 1c1e mrr $AR0, $AC0.M + 0758 00de ffff lr $AC0.M, @CMBL + 075a 1a1e srr @$AR0, $AC0.M + 075b 1c1a mrr $AR0, $AX0.H + 075c 00de 03fe lr $AC0.M, @0x03fe + 075e 00dc 03ff lr $AC0.L, @0x03ff + 0760 00d0 03fd lr $AC0.H, @0x03fd + 0762 00da 03fa lr $AX0.H, @0x03fa + 0764 1305 sbset #0x05 + 0765 02ff rti + 0766 009a 0002 lri $AX0.H, #0x0002 + 0768 00fa 03a3 sr @0x03a3, $AX0.H + 076a 00e0 03f9 sr @0x03f9, $AR0 + 076c 02bf 07f2 call 0x07f2 + 076e 16fc dcd1 si @DMBH, #0xdcd1 + 0770 16fd 0002 si @DMBL, #0x0002 + 0772 16fb 0001 si @DIRQ, #0x0001 + 0774 0021 halt + 0775 078d cmpis $ACC1, #0x8d + 0776 078e cmpis $ACC1, #0x8e + 0777 07ce cmpis $ACC1, #0xce + 0778 07d1 cmpis $ACC1, #0xd1 + 0779 00e0 03f9 sr @0x03f9, $AR0 + 077b 009e 0005 lri $AC0.M, #0x0005 + 077d 02bf 07e0 call 0x07e0 + 077f 8e00 set16 + 0780 8100 clr $ACC0 + 0781 8900 clr $ACC1 + 0782 02bf 07d4 call 0x07d4 + 0784 27ff lrs $AC1.M, @CMBL + 0785 009e 0775 lri $AC0.M, #0x0775 + 0787 4c00 add $ACC0, $ACC1 + 0788 1c7e mrr $AR3, $AC0.M + 0789 0313 ilrr $AC1.M, @$AR3 + 078a 1c7f mrr $AR3, $AC1.M + 078b 176f jmpr $AR3 + 078c 0021 halt + 078d 0021 halt + 078e 009a 0002 lri $AX0.H, #0x0002 + 0790 00fa 03a3 sr @0x03a3, $AX0.H + 0792 8100 clr $ACC0 + 0793 8900 clr $ACC1 + 0794 02bf 07d4 call 0x07d4 + 0796 24ff lrs $AC0.L, @CMBL + 0797 02bf 07da call 0x07da + 0799 25ff lrs $AC1.L, @CMBL + 079a 02bf 07da call 0x07da + 079c 27ff lrs $AC1.M, @CMBL + 079d 2ece srs @DSMAH, $AC0.M + 079e 2ccf srs @DSMAL, $AC0.L + 079f 16c9 0001 si @DSCR, #0x0001 + 07a1 2fcd srs @DSPA, $AC1.M + 07a2 2dcb srs @DSBL, $AC1.L + 07a3 8100 clr $ACC0 + 07a4 8900 clr $ACC1 + 07a5 02bf 07d4 call 0x07d4 + 07a7 24ff lrs $AC0.L, @CMBL + 07a8 1c9e mrr $IX0, $AC0.M + 07a9 1cbc mrr $IX1, $AC0.L + 07aa 02bf 07da call 0x07da + 07ac 25ff lrs $AC1.L, @CMBL + 07ad 02bf 07da call 0x07da + 07af 27ff lrs $AC1.M, @CMBL + 07b0 1cdf mrr $IX2, $AC1.M + 07b1 1cfd mrr $IX3, $AC1.L + 07b2 8100 clr $ACC0 + 07b3 02bf 07d4 call 0x07d4 + 07b5 26ff lrs $AC0.M, @CMBL + 07b6 1c1e mrr $AR0, $AC0.M + 07b7 8900 clr $ACC1 + 07b8 02bf 07da call 0x07da + 07ba 20ff lrs $AX0.L, @CMBL + 07bb 1f5f mrr $AX0.H, $AC1.M + 07bc 02bf 07d4 call 0x07d4 + 07be 21ff lrs $AX1.L, @CMBL + 07bf 02bf 07d4 call 0x07d4 + 07c1 23ff lrs $AX1.H, @CMBL + 07c2 26c9 lrs $AC0.M, @DSCR + 07c3 02a0 0004 andf $AC0.M, #0x0004 + 07c5 029c 07c2 jlnz 0x07c2 + 07c7 1206 sbclr #0x06 + 07c8 1203 sbclr #0x03 + 07c9 1204 sbclr #0x04 + 07ca 1205 sbclr #0x05 + 07cb 029f 80b5 jmp 0x80b5 + 07cd 0021 halt + 07ce 029f 8000 jmp 0x8000 + 07d0 0021 halt + 07d1 00c0 03f9 lr $AR0, @0x03f9 + 07d3 170f jmpr $AR0 + 07d4 26fe lrs $AC0.M, @CMBH + 07d5 02c0 8000 andcf $AC0.M, #0x8000 + 07d7 029c 07d4 jlnz 0x07d4 + 07d9 02df ret + 07da 27fe lrs $AC1.M, @CMBH + 07db 03c0 8000 andcf $AC1.M, #0x8000 + 07dd 029c 07da jlnz 0x07da + 07df 02df ret + 07e0 02bf 07f8 call 0x07f8 + 07e2 16fc dcd1 si @DMBH, #0xdcd1 + 07e4 2efd srs @DMBL, $AC0.M + 07e5 16fb 0001 si @DIRQ, #0x0001 + 07e7 02bf 07f8 call 0x07f8 + 07e9 02df ret + 07ea 02bf 07f8 call 0x07f8 + 07ec 16fc f355 si @DMBH, #0xf355 + 07ee 2efd srs @DMBL, $AC0.M + 07ef 02bf 07f8 call 0x07f8 + 07f1 02df ret + 07f2 26fc lrs $AC0.M, @DMBH + 07f3 02c0 8000 andcf $AC0.M, #0x8000 + 07f5 029d 07f2 jlz 0x07f2 + 07f7 02df ret + 07f8 27fc lrs $AC1.M, @DMBH + 07f9 03c0 8000 andcf $AC1.M, #0x8000 + 07fb 029d 07f8 jlz 0x07f8 + 07fd 02df ret + 07fe 009a 0280 lri $AX0.H, #0x0280 + 0800 00fa 0350 sr @0x0350, $AX0.H + 0802 00fa 0351 sr @0x0351, $AX0.H + 0804 0a00 lris $AX0.H, #0x00 + 0805 00fa 0352 sr @0x0352, $AX0.H + 0807 02df ret + 0808 00e0 03fb sr @0x03fb, $AR0 + 080a 00e8 03fc sr @0x03fc, $WR0 + 080c 00c0 0350 lr $AR0, @0x0350 + 080e 0088 002f lri $WR0, #0x002f + 0810 1b1a srri @$AR0, $AX0.H + 0811 00de fffe lr $AC0.M, @CMBH + 0813 02c0 8000 andcf $AC0.M, #0x8000 + 0815 029c 0811 jlnz 0x0811 + 0817 00dc ffff lr $AC0.L, @CMBL + 0819 1b1e srri @$AR0, $AC0.M + 081a 1b1c srri @$AR0, $AC0.L + 081b 1fda mrr $AC0.M, $AX0.H + 081c 7800 decm $AC0.M + 081d 1f5e mrr $AX0.H, $AC0.M + 081e 8600 tstaxh $AX0.H + 081f 0294 0811 jnz 0x0811 + 0821 8100 clr $ACC0 + 0822 00de 0352 lr $AC0.M, @0x0352 + 0824 7400 incm $AC0.M + 0825 00fe 0352 sr @0x0352, $AC0.M + 0827 00e0 0350 sr @0x0350, $AR0 + 0829 00c0 03fb lr $AR0, @0x03fb + 082b 00c8 03fc lr $WR0, @0x03fc + 082d 029f 075c jmp 0x075c + 082f 00e0 03fb sr @0x03fb, $AR0 + 0831 00e8 03fc sr @0x03fc, $WR0 + 0833 00c0 0350 lr $AR0, @0x0350 + 0835 0088 002f lri $WR0, #0x002f + 0837 0a00 lris $AX0.H, #0x00 + 0838 1b1a srri @$AR0, $AX0.H + 0839 029f 0821 jmp 0x0821 + 083b 00c0 0351 lr $AR0, @0x0351 + 083d 0088 002f lri $WR0, #0x002f + 083f 00da 0352 lr $AX0.H, @0x0352 + 0841 8600 tstaxh $AX0.H + 0842 0295 0863 jz 0x0863 + 0844 1205 sbclr #0x05 + 0845 00da 0352 lr $AX0.H, @0x0352 + 0847 1fda mrr $AC0.M, $AX0.H + 0848 7800 decm $AC0.M + 0849 00fe 0352 sr @0x0352, $AC0.M + 084b 1305 sbset #0x05 + 084c 0081 0356 lri $AR1, #0x0356 + 084e 191e lrri $AC0.M, @$AR0 + 084f 02c0 8000 andcf $AC0.M, #0x8000 + 0851 029d 0867 jlz 0x0867 + 0853 1f5e mrr $AX0.H, $AC0.M + 0854 8600 tstaxh $AX0.H + 0855 0295 086b jz 0x086b + 0857 007a 085c bloop $AX0.H, 0x085c + 0859 191e lrri $AC0.M, @$AR0 + 085a 1b3e srri @$AR1, $AC0.M + 085b 191e lrri $AC0.M, @$AR0 + 085c 1b3e srri @$AR1, $AC0.M + 085d 00e0 0351 sr @0x0351, $AR0 + 085f 0088 ffff lri $WR0, #0xffff + 0861 029f 0036 jmp 0x0036 + 0863 0088 ffff lri $WR0, #0xffff + 0865 029f 002b jmp 0x002b + 0867 00e0 0351 sr @0x0351, $AR0 + 0869 029f 083f jmp 0x083f + 086b 0080 083b lri $AR0, #0x083b + 086d 029f 0766 jmp 0x0766 + 086f 8100 clr $ACC0 + 0870 0e10 lris $AC0.M, #0x10 + 0871 2232 lrs $AX0.H, @0x0032 + 0872 8600 tstaxh $AX0.H + 0873 02d5 retz + 0874 5400 subr $ACC0, $AX0.H + 0875 0200 0458 addi $AC0.M, #0x0458 + 0877 1c1e mrr $AR0, $AC0.M + 0878 1fda mrr $AC0.M, $AX0.H + 0879 04fe addis $ACC0, #0xfe + 087a 1f1e mrr $AX0.L, $AC0.M + 087b 191e lrri $AC0.M, @$AR0 + 087c 0291 0882 jl 0x0882 + 087e 191a lrri $AX0.H, @$AR0 + 087f 0058 loop $AX0.L + 0880 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0881 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 0882 1b7e srri @$AR3, $AC0.M + 0883 02df ret + 0884 02bf 086f call 0x086f + 0886 8100 clr $ACC0 + 0887 2632 lrs $AC0.M, @0x0032 + 0888 5c00 sub $ACC0, $ACC1 + 0889 2e32 srs @0x0032, $AC0.M + 088a 0092 00ff lri $CR, #0x00ff + 088c 02df ret + 088d 00de 04fb lr $AC0.M, @0x04fb + 088f 7400 incm $AC0.M + 0890 00fe 04fb sr @0x04fb, $AC0.M + 0892 8100 clr $ACC0 + 0893 2e32 srs @0x0032, $AC0.M + 0894 2e66 srs @0x0066, $AC0.M + 0895 2e67 srs @0x0067, $AC0.M + 0896 268a lrs $AC0.M, @0xff8a + 0897 248b lrs $AC0.L, @0xff8b + 0898 2e3a srs @0x003a, $AC0.M + 0899 2c3b srs @0x003b, $AC0.L + 089a 268c lrs $AC0.M, @0xff8c + 089b 248d lrs $AC0.L, @0xff8d + 089c 2e38 srs @0x0038, $AC0.M + 089d 2c39 srs @0x0039, $AC0.L + 089e 02df ret + 089f 8100 clr $ACC0 + 08a0 2689 lrs $AC0.M, @0xff89 + 08a1 0240 000f andi $AC0.M, #0x000f + 08a3 1f5e mrr $AX0.H, $AC0.M + 08a4 8100 clr $ACC0 + 08a5 0e10 lris $AC0.M, #0x10 + 08a6 5400 subr $ACC0, $AX0.H + 08a7 2e32 srs @0x0032, $AC0.M + 08a8 268a lrs $AC0.M, @0xff8a + 08a9 248b lrs $AC0.L, @0xff8b + 08aa 2288 lrs $AX0.H, @0xff88 + 08ab 2089 lrs $AX0.L, @0xff89 + 08ac 5800 subax $ACC0, $AX0.L + 08ad 0a00 lris $AX0.H, #0x00 + 08ae 2032 lrs $AX0.L, @0x0032 + 08af 5800 subax $ACC0, $AX0.L + 08b0 2e3a srs @0x003a, $AC0.M + 08b1 2c3b srs @0x003b, $AC0.L + 08b2 02df ret + 08b3 0092 0004 lri $CR, #0x0004 + 08b5 8100 clr $ACC0 + 08b6 2604 lrs $AC0.M, @0x0004 + 08b7 b100 tst $ACC0 + 08b8 02b4 088d callnz 0x088d + 08ba 8100 clr $ACC0 + 08bb 2601 lrs $AC0.M, @0x0001 + 08bc b100 tst $ACC0 + 08bd 0294 095b jnz 0x095b + 08bf 2232 lrs $AX0.H, @0x0032 + 08c0 c900 cmpar $ACC0, $AX1.H + 08c1 0293 0884 jle 0x0884 + 08c3 5500 subr $ACC1, $AX0.H + 08c4 02bf 086f call 0x086f + 08c6 223a lrs $AX0.H, @0x003a + 08c7 8600 tstaxh $AX0.H + 08c8 0294 08cf jnz 0x08cf + 08ca 8100 clr $ACC0 + 08cb 263b lrs $AC0.M, @0x003b + 08cc 8200 cmp + 08cd 0291 0921 jl 0x0921 + 08cf 8100 clr $ACC0 + 08d0 1fdf mrr $AC0.M, $AC1.M + 08d1 040f addis $ACC0, #0x0f + 08d2 147c lsr $ACC0, #-4 + 08d3 1f7e mrr $AX1.H, $AC0.M + 08d4 0c00 lris $AC0.L, #0x00 + 08d5 1404 lsl $ACC0, #4 + 08d6 1f1e mrr $AX0.L, $AC0.M + 08d7 0a00 lris $AX0.H, #0x00 + 08d8 8100 clr $ACC0 + 08d9 263a lrs $AC0.M, @0x003a + 08da 243b lrs $AC0.L, @0x003b + 08db 5800 subax $ACC0, $AX0.L + 08dc 0290 08e7 jge 0x08e7 + 08de 8100 clr $ACC0 + 08df 263b lrs $AC0.M, @0x003b + 08e0 5c00 sub $ACC0, $ACC1 + 08e1 2e32 srs @0x0032, $AC0.M + 08e2 8100 clr $ACC0 + 08e3 2e3a srs @0x003a, $AC0.M + 08e4 2e3b srs @0x003b, $AC0.M + 08e5 029f 08ed jmp 0x08ed + 08e7 2e3a srs @0x003a, $AC0.M + 08e8 2c3b srs @0x003b, $AC0.L + 08e9 0c00 lris $AC0.L, #0x00 + 08ea 1fd8 mrr $AC0.M, $AX0.L + 08eb 5c00 sub $ACC0, $ACC1 + 08ec 2e32 srs @0x0032, $AC0.M + 08ed 8100 clr $ACC0 + 08ee 1fdb mrr $AC0.M, $AX1.H + 08ef 02bf 0961 call 0x0961 + 08f1 2232 lrs $AX0.H, @0x0032 + 08f2 8600 tstaxh $AX0.H + 08f3 0295 091e jz 0x091e + 08f5 0a10 lris $AX0.H, #0x10 + 08f6 8100 clr $ACC0 + 08f7 1fc3 mrr $AC0.M, $AR3 + 08f8 5400 subr $ACC0, $AX0.H + 08f9 1c7e mrr $AR3, $AC0.M + 08fa 0080 0458 lri $AR0, #0x0458 + 08fc 197e lrri $AC0.M, @$AR3 + 08fd 197a lrri $AX0.H, @$AR3 + 08fe 100e loopi #0x0e + 08ff 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H + 0900 1b1e srri @$AR0, $AC0.M + 0901 1b1a srri @$AR0, $AX0.H + 0902 8100 clr $ACC0 + 0903 263a lrs $AC0.M, @0x003a + 0904 243b lrs $AC0.L, @0x003b + 0905 b100 tst $ACC0 + 0906 0294 091e jnz 0x091e + 0908 2232 lrs $AX0.H, @0x0032 + 0909 8600 tstaxh $AX0.H + 090a 0295 091e jz 0x091e + 090c 0080 0467 lri $AR0, #0x0467 + 090e 8100 clr $ACC0 + 090f 268b lrs $AC0.M, @0xff8b + 0910 b100 tst $ACC0 + 0911 0295 091e jz 0x091e + 0913 0200 000f addi $AC0.M, #0x000f + 0915 0240 000f andi $AC0.M, #0x000f + 0917 0200 0458 addi $AC0.M, #0x0458 + 0919 1c7e mrr $AR3, $AC0.M + 091a 007a 091d bloop $AX0.H, 0x091d + 091c 18fe lrrd $AC0.M, @$AR3 + 091d 1a9e srrd @$AR0, $AC0.M + 091e 0092 00ff lri $CR, #0x00ff + 0920 02df ret + 0921 b100 tst $ACC0 + 0922 0295 0931 jz 0x0931 + 0924 5d00 sub $ACC1, $ACC0 + 0925 040f addis $ACC0, #0x0f + 0926 147c lsr $ACC0, #-4 + 0927 0c00 lris $AC0.L, #0x00 + 0928 00e3 0363 sr @0x0363, $AR3 + 092a 02bf 0961 call 0x0961 + 092c 00de 0363 lr $AC0.M, @0x0363 + 092e 223b lrs $AX0.H, @0x003b + 092f 4400 addr $ACC0, $AX0.H + 0930 1c7e mrr $AR3, $AC0.M + 0931 8100 clr $ACC0 + 0932 2681 lrs $AC0.M, @0xff81 + 0933 b100 tst $ACC0 + 0934 0295 0959 jz 0x0959 + 0936 2380 lrs $AX1.H, @0xff80 + 0937 2688 lrs $AC0.M, @0xff88 + 0938 2489 lrs $AC0.L, @0xff89 + 0939 1408 lsl $ACC0, #8 + 093a 14f4 asr $ACC0, #-12 + 093b 2380 lrs $AX1.H, @0xff80 + 093c 8d00 set15 + 093d c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + 093e ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 093f 8c00 clr15 + 0940 f000 lsl16 $ACC0 + 0941 4e00 addp $ACC0 + 0942 238c lrs $AX1.H, @0xff8c + 0943 218d lrs $AX1.L, @0xff8d + 0944 4a00 addax $ACC0, $AX1.L + 0945 2e38 srs @0x0038, $AC0.M + 0946 2c39 srs @0x0039, $AC0.L + 0947 2682 lrs $AC0.M, @0xff82 + 0948 2e67 srs @0x0067, $AC0.M + 0949 2683 lrs $AC0.M, @0xff83 + 094a 2e66 srs @0x0066, $AC0.M + 094b 00e3 0363 sr @0x0363, $AR3 + 094d 0083 0458 lri $AR3, #0x0458 + 094f 8100 clr $ACC0 + 0950 0e01 lris $AC0.M, #0x01 + 0951 02bf 0961 call 0x0961 + 0953 00c3 0363 lr $AR3, @0x0363 + 0955 02bf 089f call 0x089f + 0957 029f 08bf jmp 0x08bf + 0959 0e01 lris $AC0.M, #0x01 + 095a 2e01 srs @0x0001, $AC0.M + 095b 8100 clr $ACC0 + 095c 005f loop $AC1.M + 095d 1b7e srri @$AR3, $AC0.M + 095e 0092 00ff lri $CR, #0x00ff + 0960 02df ret + 0961 00ff 0360 sr @0x0360, $AC1.M + 0963 00fe 0361 sr @0x0361, $AC0.M + 0965 2638 lrs $AC0.M, @0x0038 + 0966 2439 lrs $AC0.L, @0x0039 + 0967 0f05 lris $AC1.M, #0x05 + 0968 02bf 06a4 call 0x06a4 + 096a 2638 lrs $AC0.M, @0x0038 + 096b 2439 lrs $AC0.L, @0x0039 + 096c 8900 clr $ACC1 + 096d 00df 0361 lr $AC1.M, @0x0361 + 096f 2280 lrs $AX0.H, @0xff80 + 0970 d000 mulc $AC1.M, $AX0.H + 0971 6f00 movp $ACC1 + 0972 4c00 add $ACC0, $ACC1 + 0973 2e38 srs @0x0038, $AC0.M + 0974 2c39 srs @0x0039, $AC0.L + 0975 8100 clr $ACC0 + 0976 00de 0361 lr $AC0.M, @0x0361 + 0978 007e 09df bloop $AC0.M, 0x09df + 097a 0080 ffd3 lri $AR0, #0xffd3 + 097c 0084 0000 lri $IX0, #0x0000 + 097e 199e lrrn $AC0.M, @$AR0 + 097f 8900 clr $ACC1 + 0980 1ffe mrr $AC1.M, $AC0.M + 0981 1401 lsl $ACC0, #1 + 0982 0240 001e andi $AC0.M, #0x001e + 0984 0200 0300 addi $AC0.M, #0x0300 + 0986 1c3e mrr $AR1, $AC0.M + 0987 157c lsr $ACC1, #-4 + 0988 0340 000f andi $AC1.M, #0x000f + 098a 0a11 lris $AX0.H, #0x11 + 098b 5500 subr $ACC1, $AX0.H + 098c 8100 clr $ACC0 + 098d 2680 lrs $AC0.M, @0xff80 + 098e 0605 cmpis $ACC0, #0x05 + 098f 0295 09a8 jz 0x09a8 + 0991 009a 00f0 lri $AX0.H, #0x00f0 + 0993 0b0f lris $AX1.H, #0x0f + 0994 0082 0364 lri $AR2, #0x0364 + 0996 1998 lrrn $AX0.L, @$AR0 + 0997 6000 movr $ACC0, $AX0.L + 0998 1107 099f bloopi #0x07, 0x099f + 099a 3400 andr $AC0.M, $AX0.H + 099b 1408 lsl $ACC0, #8 + 099c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 099d 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 099e 140c lsl $ACC0, #12 + 099f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09a0 3400 andr $AC0.M, $AX0.H + 09a1 1408 lsl $ACC0, #8 + 09a2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09a3 3600 andr $AC0.M, $AX1.H + 09a4 140c lsl $ACC0, #12 + 09a5 1b5e srri @$AR2, $AC0.M + 09a6 029f 09c8 jmp 0x09c8 + 09a8 009a c000 lri $AX0.H, #0xc000 + 09aa 0082 0364 lri $AR2, #0x0364 + 09ac 1998 lrrn $AX0.L, @$AR0 + 09ad 6000 movr $ACC0, $AX0.L + 09ae 1103 09bb bloopi #0x03, 0x09bb + 09b0 1408 lsl $ACC0, #8 + 09b1 3400 andr $AC0.M, $AX0.H + 09b2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b3 140a lsl $ACC0, #10 + 09b4 3400 andr $AC0.M, $AX0.H + 09b5 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b6 140c lsl $ACC0, #12 + 09b7 3400 andr $AC0.M, $AX0.H + 09b8 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b9 140e lsl $ACC0, #14 + 09ba 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 + 09bb 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09bc 1408 lsl $ACC0, #8 + 09bd 3400 andr $AC0.M, $AX0.H + 09be 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09bf 140a lsl $ACC0, #10 + 09c0 3400 andr $AC0.M, $AX0.H + 09c1 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09c2 140c lsl $ACC0, #12 + 09c3 3400 andr $AC0.M, $AX0.H + 09c4 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09c5 140e lsl $ACC0, #14 + 09c6 3400 andr $AC0.M, $AX0.H + 09c7 1b5e srri @$AR2, $AC0.M + 09c8 8f00 set40 + 09c9 1f7f mrr $AX1.H, $AC1.M + 09ca 2066 lrs $AX0.L, @0x0066 + 09cb 2767 lrs $AC1.M, @0x0067 + 09cc 193a lrri $AX0.H, @$AR1 + 09cd 1939 lrri $AX1.L, @$AR1 + 09ce 0080 0364 lri $AR0, #0x0364 + 09d0 a000 mulx $AX0.L, $AX1.L + 09d1 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + 09d2 1108 09db bloopi #0x08, 0x09db + 09d4 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 09d5 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 09d6 1485 asl $ACC0, #5 + 09d7 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 09d8 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 09d9 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 09da 1585 asl $ACC1, #5 + 09db ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + 09dc 2f67 srs @0x0067, $AC1.M + 09dd 8e00 set16 + 09de 1ff8 mrr $AC1.M, $AX0.L + 09df 2f66 srs @0x0066, $AC1.M + 09e0 8900 clr $ACC1 + 09e1 00df 0360 lr $AC1.M, @0x0360 + 09e3 02df ret + 09e4 b100 tst $ACC0 + 09e5 02d5 retz + 09e6 04fe addis $ACC0, #0xfe + 09e7 1f1e mrr $AX0.L, $AC0.M + 09e8 191e lrri $AC0.M, @$AR0 + 09e9 0291 09ef jl 0x09ef + 09eb 191a lrri $AX0.H, @$AR0 + 09ec 0058 loop $AX0.L + 09ed 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 09ee 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 09ef 1b7e srri @$AR3, $AC0.M + 09f0 02df ret + 09f1 8100 clr $ACC0 + 09f2 1f5e mrr $AX0.H, $AC0.M + 09f3 00d8 0402 lr $AX0.L, @0x0402 + 09f5 00dc 0430 lr $AC0.L, @0x0430 + 09f7 0080 0520 lri $AR0, #0x0520 + 09f9 00df 0480 lr $AC1.M, @0x0480 + 09fb 1501 lsl $ACC1, #1 + 09fc 0340 007e andi $AC1.M, #0x007e + 09fe 0300 0a06 addi $AC1.M, #0x0a06 + 0a00 1c5f mrr $AR2, $AC1.M + 0a01 175f callr $AR2 + 0a02 00fc 0430 sr @0x0430, $AC0.L + 0a04 029f 0386 jmp 0x0386 + 0a06 029f 0a27 jmp 0x0a27 + 0a08 029f 0a62 jmp 0x0a62 + 0a0a 029f 0a4a jmp 0x0a4a + 0a0c 029f 0a37 jmp 0x0a37 + 0a0e 029f 0a70 jmp 0x0a70 + 0a10 029f 0a26 jmp 0x0a26 + 0a12 029f 0a8e jmp 0x0a8e + 0a14 029f 0a91 jmp 0x0a91 + 0a16 029f 0a26 jmp 0x0a26 + 0a18 029f 0a26 jmp 0x0a26 + 0a1a 029f 0aaf jmp 0x0aaf + 0a1c 029f 0a68 jmp 0x0a68 + 0a1e 029f 0a6c jmp 0x0a6c + 0a20 029f 0a26 jmp 0x0a26 + 0a22 029f 0a26 jmp 0x0a26 + 0a24 029f 0a26 jmp 0x0a26 + 0a26 02df ret + 0a27 1401 lsl $ACC0, #1 + 0a28 009b c000 lri $AX1.H, #0xc000 + 0a2a 0099 4000 lri $AX1.L, #0x4000 + 0a2c 1150 0a34 bloopi #0x50, 0x0a34 + 0a2e 02c0 0001 andcf $AC0.M, #0x0001 + 0a30 027c iflnz + 0a31 1b1b srri @$AR0, $AX1.H + 0a32 027d iflz + 0a33 1b19 srri @$AR0, $AX1.L + 0a34 4800 addax $ACC0, $AX0.L + 0a35 147f lsr $ACC0, #-1 + 0a36 02df ret + 0a37 1402 lsl $ACC0, #2 + 0a38 8900 clr $ACC1 + 0a39 1fb8 mrr $AC1.L, $AX0.L + 0a3a 1501 lsl $ACC1, #1 + 0a3b 009b c000 lri $AX1.H, #0xc000 + 0a3d 0099 4000 lri $AX1.L, #0x4000 + 0a3f 1150 0a47 bloopi #0x50, 0x0a47 + 0a41 02c0 0003 andcf $AC0.M, #0x0003 + 0a43 027c iflnz + 0a44 1b1b srri @$AR0, $AX1.H + 0a45 027d iflz + 0a46 1b19 srri @$AR0, $AX1.L + 0a47 4c00 add $ACC0, $ACC1 + 0a48 147e lsr $ACC0, #-2 + 0a49 02df ret + 0a4a 1401 lsl $ACC0, #1 + 0a4b 0081 0ca0 lri $AR1, #0x0ca0 + 0a4d 009b c000 lri $AX1.H, #0xc000 + 0a4f 0099 4000 lri $AX1.L, #0x4000 + 0a51 8900 clr $ACC1 + 0a52 0082 0000 lri $AR2, #0x0000 + 0a54 1150 0a5f bloopi #0x50, 0x0a5f + 0a56 02c0 0001 andcf $AC0.M, #0x0001 + 0a58 027c iflnz + 0a59 1b1b srri @$AR0, $AX1.H + 0a5a 027d iflz + 0a5b 1b19 srri @$AR0, $AX1.L + 0a5c 183d lrr $AC1.L, @$AR1 + 0a5d 4900 addax $ACC1, $AX0.L + 0a5e 1fe2 mrr $AC1.M, $AR2 + 0a5f 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M + 0a60 147f lsr $ACC0, #-1 + 0a61 02df ret + 0a62 8900 clr $ACC1 + 0a63 1fb8 mrr $AC1.L, $AX0.L + 0a64 157f lsr $ACC1, #-1 + 0a65 1050 loopi #0x50 + 0a66 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L + 0a67 02df ret + 0a68 0082 0180 lri $AR2, #0x0180 + 0a6a 029f 0a72 jmp 0x0a72 + 0a6c 0082 01c0 lri $AR2, #0x01c0 + 0a6e 029f 0a72 jmp 0x0a72 + 0a70 0082 0140 lri $AR2, #0x0140 + 0a72 008a 003f lri $WR2, #0x003f + 0a74 0086 0000 lri $IX2, #0x0000 + 0a76 1406 lsl $ACC0, #6 + 0a77 8900 clr $ACC1 + 0a78 1fb8 mrr $AC1.L, $AX0.L + 0a79 1505 lsl $ACC1, #5 + 0a7a 009b 003f lri $AX1.H, #0x003f + 0a7c 009a 0000 lri $AX0.H, #0x0000 + 0a7e 3600 andr $AC0.M, $AX1.H + 0a7f 1cde mrr $IX2, $AC0.M + 0a80 001a addarn $AR2, $IX2 + 0a81 3400 andr $AC0.M, $AX0.H + 0a82 1150 0a88 bloopi #0x50, 0x0a88 + 0a84 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a85 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a86 1cde mrr $IX2, $AC0.M + 0a87 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a88 1b19 srri @$AR0, $AX1.L + 0a89 1fc2 mrr $AC0.M, $AR2 + 0a8a 147a lsr $ACC0, #-6 + 0a8b 008a ffff lri $WR2, #0xffff + 0a8d 02df ret + 0a8e 1050 loopi #0x50 + 0a8f 1b18 srri @$AR0, $AX0.L + 0a90 02df ret + 0a91 0082 0100 lri $AR2, #0x0100 + 0a93 008a 003f lri $WR2, #0x003f + 0a95 0086 0000 lri $IX2, #0x0000 + 0a97 1406 lsl $ACC0, #6 + 0a98 8900 clr $ACC1 + 0a99 1fb8 mrr $AC1.L, $AX0.L + 0a9a 1505 lsl $ACC1, #5 + 0a9b 009b 003f lri $AX1.H, #0x003f + 0a9d 009a 0000 lri $AX0.H, #0x0000 + 0a9f 3600 andr $AC0.M, $AX1.H + 0aa0 1cde mrr $IX2, $AC0.M + 0aa1 001a addarn $AR2, $IX2 + 0aa2 3400 andr $AC0.M, $AX0.H + 0aa3 1150 0aa9 bloopi #0x50, 0x0aa9 + 0aa5 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0aa6 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0aa7 1cde mrr $IX2, $AC0.M + 0aa8 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0aa9 1b19 srri @$AR0, $AX1.L + 0aaa 1fc2 mrr $AC0.M, $AR2 + 0aab 147a lsr $ACC0, #-6 + 0aac 008a ffff lri $WR2, #0xffff + 0aae 02df ret + 0aaf 0082 0100 lri $AR2, #0x0100 + 0ab1 008a 003f lri $WR2, #0x003f + 0ab3 0086 0000 lri $IX2, #0x0000 + 0ab5 0081 0ca0 lri $AR1, #0x0ca0 + 0ab7 1406 lsl $ACC0, #6 + 0ab8 8900 clr $ACC1 + 0ab9 1fb8 mrr $AC1.L, $AX0.L + 0aba 1505 lsl $ACC1, #5 + 0abb 009b 003f lri $AX1.H, #0x003f + 0abd 009a 0000 lri $AX0.H, #0x0000 + 0abf 3600 andr $AC0.M, $AX1.H + 0ac0 1cde mrr $IX2, $AC0.M + 0ac1 001a addarn $AR2, $IX2 + 0ac2 3400 andr $AC0.M, $AX0.H + 0ac3 1150 0ace bloopi #0x50, 0x0ace + 0ac5 1939 lrri $AX1.L, @$AR1 + 0ac6 a000 mulx $AX0.L, $AX1.L + 0ac7 140a lsl $ACC0, #10 + 0ac8 4e00 addp $ACC0 + 0ac9 1476 lsr $ACC0, #-10 + 0aca 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0acb 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0acc 1cde mrr $IX2, $AC0.M + 0acd 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0ace 1b19 srri @$AR0, $AX1.L + 0acf 1fc2 mrr $AC0.M, $AR2 + 0ad0 147a lsr $ACC0, #-6 + 0ad1 008a ffff lri $WR2, #0xffff + 0ad3 02df ret + 0ad4 0080 01be lri $AR0, #0x01be + 0ad6 1918 lrri $AX0.L, @$AR0 + 0ad7 191a lrri $AX0.H, @$AR0 + 0ad8 0080 0180 lri $AR0, #0x0180 + 0ada 0083 0180 lri $AR3, #0x0180 + 0adc 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0add 1ffe mrr $AC1.M, $AC0.M + 0ade 1120 0ae5 bloopi #0x20, 0x0ae5 + 0ae0 7c00 neg $ACC0 + 0ae1 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0ae2 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0ae3 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 0ae4 1501 lsl $ACC1, #1 + 0ae5 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + 0ae6 0080 01fe lri $AR0, #0x01fe + 0ae8 191a lrri $AX0.H, @$AR0 + 0ae9 1918 lrri $AX0.L, @$AR0 + 0aea 0080 01c0 lri $AR0, #0x01c0 + 0aec 0083 01c0 lri $AR3, #0x01c0 + 0aee 1ff8 mrr $AC1.M, $AX0.L + 0aef 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0af0 f800 addpaxz $ACC0, $AX0.H + 0af1 0240 01ff andi $AC0.M, #0x01ff + 0af3 0260 2000 ori $AC0.M, #0x2000 + 0af5 02bf 0af8 call 0x0af8 + 0af7 02df ret + 0af8 b900 tst $ACC1 + 0af9 0272 ifg + 0afa 7c00 neg $ACC0 + 0afb 1f7e mrr $AX1.H, $AC0.M + 0afc 4700 addr $ACC1, $AX1.H + 0afd 1110 0b02 bloopi #0x10, 0x0b02 + 0aff 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0b00 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0b01 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0b02 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0b03 02df ret + 0b04 02bf 0b71 call 0x0b71 + 0b06 2201 lrs $AX0.H, @0x0001 + 0b07 8600 tstaxh $AX0.H + 0b08 0294 0b19 jnz 0x0b19 + 0b0a 2204 lrs $AX0.H, @0x0004 + 0b0b 8600 tstaxh $AX0.H + 0b0c 02b4 0b60 callnz 0x0b60 + 0b0e 8100 clr $ACC0 + 0b0f 2605 lrs $AC0.M, @0x0005 + 0b10 b100 tst $ACC0 + 0b11 0295 0b26 jz 0x0b26 + 0b13 8100 clr $ACC0 + 0b14 2e05 srs @0x0005, $AC0.M + 0b15 2281 lrs $AX0.H, @0xff81 + 0b16 8600 tstaxh $AX0.H + 0b17 0294 0b20 jnz 0x0b20 + 0b19 8100 clr $ACC0 + 0b1a 005f loop $AC1.M + 0b1b 1b7e srri @$AR3, $AC0.M + 0b1c 7400 incm $AC0.M + 0b1d 2e01 srs @0x0001, $AC0.M + 0b1e 029f 0b59 jmp 0x0b59 + 0b20 2688 lrs $AC0.M, @0xff88 + 0b21 2489 lrs $AC0.L, @0xff89 + 0b22 2e34 srs @0x0034, $AC0.M + 0b23 2c35 srs @0x0035, $AC0.L + 0b24 02bf 0b60 call 0x0b60 + 0b26 00ff 0360 sr @0x0360, $AC1.M + 0b28 2638 lrs $AC0.M, @0x0038 + 0b29 2439 lrs $AC0.L, @0x0039 + 0b2a 02bf 06d2 call 0x06d2 + 0b2c 00df 0360 lr $AC1.M, @0x0360 + 0b2e 8100 clr $ACC0 + 0b2f 263a lrs $AC0.M, @0x003a + 0b30 b100 tst $ACC0 + 0b31 0294 0b40 jnz 0x0b40 + 0b33 263b lrs $AC0.M, @0x003b + 0b34 5c00 sub $ACC0, $ACC1 + 0b35 0290 0b40 jge 0x0b40 + 0b37 223b lrs $AX0.H, @0x003b + 0b38 02bf 06ef call 0x06ef + 0b3a 5500 subr $ACC1, $AX0.H + 0b3b 0a01 lris $AX0.H, #0x01 + 0b3c 00fa 0405 sr @0x0405, $AX0.H + 0b3e 029f 0b13 jmp 0x0b13 + 0b40 1f5f mrr $AX0.H, $AC1.M + 0b41 02bf 06ef call 0x06ef + 0b43 00fa 0362 sr @0x0362, $AX0.H + 0b45 8100 clr $ACC0 + 0b46 263a lrs $AC0.M, @0x003a + 0b47 243b lrs $AC0.L, @0x003b + 0b48 1570 lsr $ACC1, #-16 + 0b49 0a01 lris $AX0.H, #0x01 + 0b4a 0081 0405 lri $AR1, #0x0405 + 0b4c 5c00 sub $ACC0, $ACC1 + 0b4d b100 tst $ACC0 + 0b4e 0275 ifz + 0b4f 1a3a srr @$AR1, $AX0.H + 0b50 2e3a srs @0x003a, $AC0.M + 0b51 2c3b srs @0x003b, $AC0.L + 0b52 2638 lrs $AC0.M, @0x0038 + 0b53 2439 lrs $AC0.L, @0x0039 + 0b54 00d8 0362 lr $AX0.L, @0x0362 + 0b56 7000 addaxl $ACC0, $AX0.L + 0b57 2c39 srs @0x0039, $AC0.L + 0b58 2e38 srs @0x0038, $AC0.M + 0b59 0092 00ff lri $CR, #0x00ff + 0b5b 029f 037e jmp 0x037e + 0b5d 8100 clr $ACC0 + 0b5e 2e34 srs @0x0034, $AC0.M + 0b5f 2e35 srs @0x0035, $AC0.M + 0b60 2334 lrs $AX1.H, @0x0034 + 0b61 2135 lrs $AX1.L, @0x0035 + 0b62 268a lrs $AC0.M, @0xff8a + 0b63 248b lrs $AC0.L, @0xff8b + 0b64 5a00 subax $ACC0, $AX1.L + 0b65 2e3a srs @0x003a, $AC0.M + 0b66 2c3b srs @0x003b, $AC0.L + 0b67 2634 lrs $AC0.M, @0x0034 + 0b68 2435 lrs $AC0.L, @0x0035 + 0b69 238c lrs $AX1.H, @0xff8c + 0b6a 218d lrs $AX1.L, @0xff8d + 0b6b 4a00 addax $ACC0, $AX1.L + 0b6c 2e38 srs @0x0038, $AC0.M + 0b6d 2c39 srs @0x0039, $AC0.L + 0b6e 8100 clr $ACC0 + 0b6f 2e05 srs @0x0005, $AC0.M + 0b70 02df ret + 0b71 0092 0004 lri $CR, #0x0004 + 0b73 2002 lrs $AX0.L, @0x0002 + 0b74 8100 clr $ACC0 + 0b75 8900 clr $ACC1 + 0b76 2430 lrs $AC0.L, @0x0030 + 0b77 8d00 set15 + 0b78 0950 lris $AX1.L, #0x50 + 0b79 a000 mulx $AX0.L, $AX1.L + 0b7a a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0b7b 1404 lsl $ACC0, #4 + 0b7c 8c00 clr15 + 0b7d 1ffe mrr $AC1.M, $AC0.M + 0b7e 0083 0580 lri $AR3, #0x0580 + 0b80 02df ret + 0b81 02bf 0b71 call 0x0b71 + 0b83 2201 lrs $AX0.H, @0x0001 + 0b84 8600 tstaxh $AX0.H + 0b85 0294 0b96 jnz 0x0b96 + 0b87 2204 lrs $AX0.H, @0x0004 + 0b88 8600 tstaxh $AX0.H + 0b89 02b4 0be0 callnz 0x0be0 + 0b8b 8100 clr $ACC0 + 0b8c 2605 lrs $AC0.M, @0x0005 + 0b8d b100 tst $ACC0 + 0b8e 0295 0ba3 jz 0x0ba3 + 0b90 8100 clr $ACC0 + 0b91 2e05 srs @0x0005, $AC0.M + 0b92 2281 lrs $AX0.H, @0xff81 + 0b93 8600 tstaxh $AX0.H + 0b94 0294 0b9d jnz 0x0b9d + 0b96 8100 clr $ACC0 + 0b97 005f loop $AC1.M + 0b98 1b7e srri @$AR3, $AC0.M + 0b99 7400 incm $AC0.M + 0b9a 2e01 srs @0x0001, $AC0.M + 0b9b 029f 0bd9 jmp 0x0bd9 + 0b9d 2688 lrs $AC0.M, @0xff88 + 0b9e 2489 lrs $AC0.L, @0xff89 + 0b9f 2e34 srs @0x0034, $AC0.M + 0ba0 2c35 srs @0x0035, $AC0.L + 0ba1 02bf 0be0 call 0x0be0 + 0ba3 00ff 0360 sr @0x0360, $AC1.M + 0ba5 2638 lrs $AC0.M, @0x0038 + 0ba6 2439 lrs $AC0.L, @0x0039 + 0ba7 02bf 06d2 call 0x06d2 + 0ba9 02bf 06e9 call 0x06e9 + 0bab 00df 0360 lr $AC1.M, @0x0360 + 0bad 8100 clr $ACC0 + 0bae 263a lrs $AC0.M, @0x003a + 0baf b100 tst $ACC0 + 0bb0 0294 0bbf jnz 0x0bbf + 0bb2 263b lrs $AC0.M, @0x003b + 0bb3 5c00 sub $ACC0, $ACC1 + 0bb4 0290 0bbf jge 0x0bbf + 0bb6 223b lrs $AX0.H, @0x003b + 0bb7 02bf 06b4 call 0x06b4 + 0bb9 5500 subr $ACC1, $AX0.H + 0bba 0a01 lris $AX0.H, #0x01 + 0bbb 00fa 0405 sr @0x0405, $AX0.H + 0bbd 029f 0b90 jmp 0x0b90 + 0bbf 1f5f mrr $AX0.H, $AC1.M + 0bc0 02bf 06b4 call 0x06b4 + 0bc2 00fa 0362 sr @0x0362, $AX0.H + 0bc4 8100 clr $ACC0 + 0bc5 263a lrs $AC0.M, @0x003a + 0bc6 243b lrs $AC0.L, @0x003b + 0bc7 1570 lsr $ACC1, #-16 + 0bc8 0a01 lris $AX0.H, #0x01 + 0bc9 0081 0405 lri $AR1, #0x0405 + 0bcb 5c00 sub $ACC0, $ACC1 + 0bcc b100 tst $ACC0 + 0bcd 0275 ifz + 0bce 1a3a srr @$AR1, $AX0.H + 0bcf 2e3a srs @0x003a, $AC0.M + 0bd0 2c3b srs @0x003b, $AC0.L + 0bd1 2638 lrs $AC0.M, @0x0038 + 0bd2 2439 lrs $AC0.L, @0x0039 + 0bd3 00d8 0362 lr $AX0.L, @0x0362 + 0bd5 7000 addaxl $ACC0, $AX0.L + 0bd6 7000 addaxl $ACC0, $AX0.L + 0bd7 2c39 srs @0x0039, $AC0.L + 0bd8 2e38 srs @0x0038, $AC0.M + 0bd9 0092 00ff lri $CR, #0x00ff + 0bdb 029f 037e jmp 0x037e + 0bdd 8100 clr $ACC0 + 0bde 2e34 srs @0x0034, $AC0.M + 0bdf 2e35 srs @0x0035, $AC0.M + 0be0 2334 lrs $AX1.H, @0x0034 + 0be1 2135 lrs $AX1.L, @0x0035 + 0be2 268a lrs $AC0.M, @0xff8a + 0be3 248b lrs $AC0.L, @0xff8b + 0be4 5a00 subax $ACC0, $AX1.L + 0be5 2e3a srs @0x003a, $AC0.M + 0be6 2c3b srs @0x003b, $AC0.L + 0be7 2634 lrs $AC0.M, @0x0034 + 0be8 2435 lrs $AC0.L, @0x0035 + 0be9 1401 lsl $ACC0, #1 + 0bea 238c lrs $AX1.H, @0xff8c + 0beb 218d lrs $AX1.L, @0xff8d + 0bec 4a00 addax $ACC0, $AX1.L + 0bed 2e38 srs @0x0038, $AC0.M + 0bee 2c39 srs @0x0039, $AC0.L + 0bef 8100 clr $ACC0 + 0bf0 2e05 srs @0x0005, $AC0.M + 0bf1 02df ret + 0bf2 8900 clr $ACC1 + 0bf3 0f50 lris $AC1.M, #0x50 + 0bf4 0083 0520 lri $AR3, #0x0520 + 0bf6 02bf 0c0b call 0x0c0b + 0bf8 029f 0386 jmp 0x0386 + 0bfa 00d8 0402 lr $AX0.L, @0x0402 + 0bfc 8100 clr $ACC0 + 0bfd 8900 clr $ACC1 + 0bfe 00dc 0430 lr $AC0.L, @0x0430 + 0c00 0a50 lris $AX0.H, #0x50 + 0c01 9000 mul $AX0.L, $AX0.H + 0c02 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0c03 1404 lsl $ACC0, #4 + 0c04 1ffe mrr $AC1.M, $AC0.M + 0c05 0083 0580 lri $AR3, #0x0580 + 0c07 02bf 0c0b call 0x0c0b + 0c09 029f 037e jmp 0x037e + 0c0b 0092 0004 lri $CR, #0x0004 + 0c0d 8100 clr $ACC0 + 0c0e 263a lrs $AC0.M, @0x003a + 0c0f 243b lrs $AC0.L, @0x003b + 0c10 1f1f mrr $AX0.L, $AC1.M + 0c11 0a00 lris $AX0.H, #0x00 + 0c12 5800 subax $ACC0, $AX0.L + 0c13 0292 0c29 jg 0x0c29 + 0c15 8900 clr $ACC1 + 0c16 00c0 043b lr $AR0, @0x043b + 0c18 02bf 0c4e call 0x0c4e + 0c1a 8100 clr $ACC0 + 0c1b 1fd8 mrr $AC0.M, $AX0.L + 0c1c 223b lrs $AX0.H, @0x003b + 0c1d 5400 subr $ACC0, $AX0.H + 0c1e 0007 dar $AR3 + 0c1f 1979 lrri $AX1.L, @$AR3 + 0c20 005e loop $AC0.M + 0c21 1b79 srri @$AR3, $AX1.L + 0c22 0f01 lris $AC1.M, #0x01 + 0c23 2f01 srs @0x0001, $AC1.M + 0c24 8900 clr $ACC1 + 0c25 2f3b srs @0x003b, $AC1.M + 0c26 0092 00ff lri $CR, #0x00ff + 0c28 02df ret + 0c29 2e3a srs @0x003a, $AC0.M + 0c2a 2c3b srs @0x003b, $AC0.L + 0c2b 8100 clr $ACC0 + 0c2c 8900 clr $ACC1 + 0c2d 268a lrs $AC0.M, @0xff8a + 0c2e 2734 lrs $AC1.M, @0x0034 + 0c2f 5c00 sub $ACC0, $ACC1 + 0c30 2e36 srs @0x0036, $AC0.M + 0c31 5000 subr $ACC0, $AX0.L + 0c32 0290 0c48 jge 0x0c48 + 0c34 00c0 0436 lr $AR0, @0x0436 + 0c36 02bf 0c4e call 0x0c4e + 0c38 8100 clr $ACC0 + 0c39 1fd8 mrr $AC0.M, $AX0.L + 0c3a 2236 lrs $AX0.H, @0x0036 + 0c3b 5400 subr $ACC0, $AX0.H + 0c3c 1c1e mrr $AR0, $AC0.M + 0c3d 8100 clr $ACC0 + 0c3e 2e34 srs @0x0034, $AC0.M + 0c3f 2688 lrs $AC0.M, @0xff88 + 0c40 2489 lrs $AC0.L, @0xff89 + 0c41 2e8c srs @0xff8c, $AC0.M + 0c42 2c8d srs @0xff8d, $AC0.L + 0c43 02bf 0c4e call 0x0c4e + 0c45 0092 00ff lri $CR, #0x00ff + 0c47 02df ret + 0c48 1c18 mrr $AR0, $AX0.L + 0c49 02bf 0c4e call 0x0c4e + 0c4b 0092 00ff lri $CR, #0x00ff + 0c4d 02df ret + 0c4e 8100 clr $ACC0 + 0c4f 1fc0 mrr $AC0.M, $AR0 + 0c50 b100 tst $ACC0 + 0c51 02d5 retz + 0c52 8900 clr $ACC1 + 0c53 2734 lrs $AC1.M, @0x0034 + 0c54 0340 0001 andi $AC1.M, #0x0001 + 0c56 0b00 lris $AX1.H, #0x00 + 0c57 1f3f mrr $AX1.L, $AC1.M + 0c58 268c lrs $AC0.M, @0xff8c + 0c59 248d lrs $AC0.L, @0xff8d + 0c5a 8900 clr $ACC1 + 0c5b 2534 lrs $AC1.L, @0x0034 + 0c5c 1501 lsl $ACC1, #1 + 0c5d 4c00 add $ACC0, $ACC1 + 0c5e 5a00 subax $ACC0, $AX1.L + 0c5f 5a00 subax $ACC0, $AX1.L + 0c60 1c20 mrr $AR1, $AR0 + 0c61 1fe0 mrr $AC1.M, $AR0 + 0c62 0502 addis $ACC1, #0x02 + 0c63 1c1f mrr $AR0, $AC1.M + 0c64 009f 0b00 lri $AC1.M, #0x0b00 + 0c66 0092 00ff lri $CR, #0x00ff + 0c68 02bf 0649 call 0x0649 + 0c6a 0092 0004 lri $CR, #0x0004 + 0c6c 2734 lrs $AC1.M, @0x0034 + 0c6d 1f61 mrr $AX1.H, $AR1 + 0c6e 4700 addr $ACC1, $AX1.H + 0c6f 2f34 srs @0x0034, $AC1.M + 0c70 0080 0b00 lri $AR0, #0x0b00 + 0c72 8900 clr $ACC1 + 0c73 1ff9 mrr $AC1.M, $AX1.L + 0c74 b900 tst $ACC1 + 0c75 0274 ifnz + 0c76 0008 iar $AR0 + 0c77 8900 clr $ACC1 + 0c78 1fe1 mrr $AC1.M, $AR1 + 0c79 191e lrri $AC0.M, @$AR0 + 0c7a 0701 cmpis $ACC1, #0x01 + 0c7b 0293 0c84 jle 0x0c84 + 0c7d 191a lrri $AX0.H, @$AR0 + 0c7e 05fe addis $ACC1, #0xfe + 0c7f 005f loop $AC1.M + 0c80 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c81 1b7e srri @$AR3, $AC0.M + 0c82 1b7a srri @$AR3, $AX0.H + 0c83 02df ret + 0c84 1b7e srri @$AR3, $AC0.M + 0c85 02df ret + 0c86 0083 03e8 lri $AR3, #0x03e8 + 0c88 191e lrri $AC0.M, @$AR0 + 0c89 191a lrri $AX0.H, @$AR0 + 0c8a 1006 loopi #0x06 + 0c8b 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c8c 1b7e srri @$AR3, $AC0.M + 0c8d 1b7a srri @$AR3, $AX0.H + 0c8e 0080 03e8 lri $AR0, #0x03e8 + 0c90 8a00 m2 + 0c91 0088 0007 lri $WR0, #0x0007 + 0c93 1150 0ca0 bloopi #0x50, 0x0ca0 + 0c95 1c61 mrr $AR3, $AR1 + 0c96 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c97 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c98 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c99 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c9a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c9b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c9c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c9d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c9e f200 madd $AX0.L, $AX0.H + 0c9f fe00 movpz $ACC0 + 0ca0 1b3e srri @$AR1, $AC0.M + 0ca1 0088 ffff lri $WR0, #0xffff + 0ca3 8b00 m0 + 0ca4 02df ret + 0ca5 8a00 m2 + 0ca6 05fe addis $ACC1, #0xfe + 0ca7 0083 03e8 lri $AR3, #0x03e8 + 0ca9 191e lrri $AC0.M, @$AR0 + 0caa 191a lrri $AX0.H, @$AR0 + 0cab 005f loop $AC1.M + 0cac 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cad 1b7e srri @$AR3, $AC0.M + 0cae 1b7a srri @$AR3, $AX0.H + 0caf 0080 03e8 lri $AR0, #0x03e8 + 0cb1 0501 addis $ACC1, #0x01 + 0cb2 1d1f mrr $WR0, $AC1.M + 0cb3 1150 0cbb bloopi #0x50, 0x0cbb + 0cb5 1c61 mrr $AR3, $AR1 + 0cb6 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0cb7 005f loop $AC1.M + 0cb8 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0cb9 f200 madd $AX0.L, $AX0.H + 0cba fe00 movpz $ACC0 + 0cbb 1b3e srri @$AR1, $AC0.M + 0cbc 0088 ffff lri $WR0, #0xffff + 0cbe 8b00 m0 + 0cbf 02df ret + 0cc0 0083 03e8 lri $AR3, #0x03e8 + 0cc2 191e lrri $AC0.M, @$AR0 + 0cc3 191a lrri $AX0.H, @$AR0 + 0cc4 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cc5 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cc6 1b7e srri @$AR3, $AC0.M + 0cc7 1b7a srri @$AR3, $AX0.H + 0cc8 0080 03e8 lri $AR0, #0x03e8 + 0cca 0088 0003 lri $WR0, #0x0003 + 0ccc 0085 0000 lri $IX1, #0x0000 + 0cce 0087 0000 lri $IX3, #0x0000 + 0cd0 1fc2 mrr $AC0.M, $AR2 + 0cd1 195b lrri $AX1.H, @$AR2 + 0cd2 1959 lrri $AX1.L, @$AR2 + 0cd3 195f lrri $AC1.M, @$AR2 + 0cd4 195a lrri $AX0.H, @$AR2 + 0cd5 1c5e mrr $AR2, $AC0.M + 0cd6 1fda mrr $AC0.M, $AX0.H + 0cd7 1c61 mrr $AR3, $AR1 + 0cd8 8a00 m2 + 0cd9 8f00 set40 + 0cda 191a lrri $AX0.H, @$AR0 + 0cdb b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0cdc e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cdd ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0cde e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0cdf b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0ce0 1127 0ceb bloopi #0x27, 0x0ceb + 0ce2 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ce3 197e lrri $AC0.M, @$AR3 + 0ce4 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ce5 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0ce6 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0ce7 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0ce8 197f lrri $AC1.M, @$AR3 + 0ce9 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0cea e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0ceb b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0cec e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ced 197e lrri $AC0.M, @$AR3 + 0cee e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0cef eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cf0 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 0cf1 1bff srrn @$AR3, $AC1.M + 0cf2 197f lrri $AC1.M, @$AR3 + 0cf3 8e00 set16 + 0cf4 8b00 m0 + 0cf5 0088 ffff lri $WR0, #0xffff + 0cf7 1b5b srri @$AR2, $AX1.H + 0cf8 1b59 srri @$AR2, $AX1.L + 0cf9 1b5f srri @$AR2, $AC1.M + 0cfa 1b5e srri @$AR2, $AC0.M + 0cfb 02df ret + 0cfc 0083 03e8 lri $AR3, #0x03e8 + 0cfe 191e lrri $AC0.M, @$AR0 + 0cff 191a lrri $AX0.H, @$AR0 + 0d00 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0d01 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0d02 1b7e srri @$AR3, $AC0.M + 0d03 1b7a srri @$AR3, $AX0.H + 0d04 0080 03e8 lri $AR0, #0x03e8 + 0d06 0088 0003 lri $WR0, #0x0003 + 0d08 0085 0000 lri $IX1, #0x0000 + 0d0a 0087 0000 lri $IX3, #0x0000 + 0d0c 1fc2 mrr $AC0.M, $AR2 + 0d0d 195b lrri $AX1.H, @$AR2 + 0d0e 1959 lrri $AX1.L, @$AR2 + 0d0f 195f lrri $AC1.M, @$AR2 + 0d10 195a lrri $AX0.H, @$AR2 + 0d11 1c5e mrr $AR2, $AC0.M + 0d12 1fda mrr $AC0.M, $AX0.H + 0d13 1c61 mrr $AR3, $AR1 + 0d14 8a00 m2 + 0d15 8f00 set40 + 0d16 191a lrri $AX0.H, @$AR0 + 0d17 b800 mulx $AX0.H, $AX1.H + 0d18 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0d19 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d1a ea00 maddc $AC1.M, $AX1.L + 0d1b ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0d1c e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0d1d ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0d1e b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0d1f 1127 0d30 bloopi #0x27, 0x0d30 + 0d21 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d22 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0d23 197e lrri $AC0.M, @$AR3 + 0d24 e800 maddc $AC0.M, $AX1.L + 0d25 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0d26 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0d27 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0d28 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0d29 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0d2a e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0d2b 197f lrri $AC1.M, @$AR3 + 0d2c ea00 maddc $AC1.M, $AX1.L + 0d2d ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0d2e e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0d2f ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0d30 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0d31 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d32 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0d33 197e lrri $AC0.M, @$AR3 + 0d34 e800 maddc $AC0.M, $AX1.L + 0d35 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0d36 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0d37 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0d38 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0d39 1bff srrn @$AR3, $AC1.M + 0d3a 197f lrri $AC1.M, @$AR3 + 0d3b 8e00 set16 + 0d3c 8b00 m0 + 0d3d 0088 ffff lri $WR0, #0xffff + 0d3f 1b5b srri @$AR2, $AX1.H + 0d40 1b59 srri @$AR2, $AX1.L + 0d41 1b5f srri @$AR2, $AC1.M + 0d42 1b5e srri @$AR2, $AC0.M + 0d43 02df ret + 0d44 0eff lris $AC0.M, #0xff + 0d45 00fe 03f2 sr @0x03f2, $AC0.M + 0d47 8100 clr $ACC0 + 0d48 00fe 03f0 sr @0x03f0, $AC0.M + 0d4a 00fe 03f6 sr @0x03f6, $AC0.M + 0d4c 009e 0100 lri $AC0.M, #0x0100 + 0d4e 00fe 03f7 sr @0x03f7, $AC0.M + 0d50 00da 03f7 lr $AX0.H, @0x03f7 + 0d52 009e 8000 lri $AC0.M, #0x8000 + 0d54 5400 subr $ACC0, $AX0.H + 0d55 00fe 03f5 sr @0x03f5, $AC0.M + 0d57 0e30 lris $AC0.M, #0x30 + 0d58 00fe 03f3 sr @0x03f3, $AC0.M + 0d5a 0e10 lris $AC0.M, #0x10 + 0d5b 00fe 03f4 sr @0x03f4, $AC0.M + 0d5d 009e 0096 lri $AC0.M, #0x0096 + 0d5f 00fe 03f1 sr @0x03f1, $AC0.M + 0d61 02df ret + 0d62 0080 0a00 lri $AR0, #0x0a00 + 0d64 8100 clr $ACC0 + 0d65 00de 03f0 lr $AC0.M, @0x03f0 + 0d67 8900 clr $ACC1 + 0d68 b100 tst $ACC0 + 0d69 0275 ifz + 0d6a 0550 addis $ACC1, #0x50 + 0d6b 00ff 03f0 sr @0x03f0, $AC1.M + 0d6d 0200 0a60 addi $AC0.M, #0x0a60 + 0d6f 1c7e mrr $AR3, $AC0.M + 0d70 0f4e lris $AC1.M, #0x4e + 0d71 02bf 012b call 0x012b + 0d73 02df ret + 0d74 00de 03f1 lr $AC0.M, @0x03f1 + 0d76 0200 0a60 addi $AC0.M, #0x0a60 + 0d78 1c7e mrr $AR3, $AC0.M + 0d79 8100 clr $ACC0 + 0d7a 8900 clr $ACC1 + 0d7b 009f 00a0 lri $AC1.M, #0x00a0 + 0d7d 00de 03f1 lr $AC0.M, @0x03f1 + 0d7f 5d00 sub $ACC1, $ACC0 + 0d80 0e50 lris $AC0.M, #0x50 + 0d81 0750 cmpis $ACC1, #0x50 + 0d82 0270 ifge + 0d83 5d00 sub $ACC1, $ACC0 + 0d84 00da 03f2 lr $AX0.H, @0x03f2 + 0d86 8600 tstaxh $AX0.H + 0d87 0290 0da5 jge 0x0da5 + 0d89 00de 03f3 lr $AC0.M, @0x03f3 + 0d8b 5c00 sub $ACC0, $ACC1 + 0d8c 0293 0d90 jle 0x0d90 + 0d8e 029f 0daa jmp 0x0daa + 0d90 00db 03f7 lr $AX1.H, @0x03f7 + 0d92 009e 8000 lri $AC0.M, #0x8000 + 0d94 4600 addr $ACC0, $AX1.H + 0d95 029f 0d9c jmp 0x0d9c + 0d97 00db 03f7 lr $AX1.H, @0x03f7 + 0d99 009e 8000 lri $AC0.M, #0x8000 + 0d9b 5600 subr $ACC0, $AX1.H + 0d9c 00fe 03f5 sr @0x03f5, $AC0.M + 0d9e 1fda mrr $AC0.M, $AX0.H + 0d9f 7c00 neg $ACC0 + 0da0 1f5e mrr $AX0.H, $AC0.M + 0da1 00fe 03f2 sr @0x03f2, $AC0.M + 0da3 029f 0daa jmp 0x0daa + 0da5 00de 03f4 lr $AC0.M, @0x03f4 + 0da7 5d00 sub $ACC1, $ACC0 + 0da8 0293 0d97 jle 0x0d97 + 0daa 8900 clr $ACC1 + 0dab 00dd 03f5 lr $AC1.L, @0x03f5 + 0dad 1501 lsl $ACC1, #1 + 0dae 8100 clr $ACC0 + 0daf 00dc 03f6 lr $AC0.L, @0x03f6 + 0db1 008b 009f lri $WR3, #0x009f + 0db3 0080 0a00 lri $AR0, #0x0a00 + 0db5 0900 lris $AX1.L, #0x00 + 0db6 1150 0dbd bloopi #0x50, 0x0dbd + 0db8 1878 lrr $AX0.L, @$AR3 + 0db9 4c00 add $ACC0, $ACC1 + 0dba 1cfe mrr $IX3, $AC0.M + 0dbb 001f addarn $AR3, $IX3 + 0dbc 1fd9 mrr $AC0.M, $AX1.L + 0dbd 1b18 srri @$AR0, $AX0.L + 0dbe 009f 0a60 lri $AC1.M, #0x0a60 + 0dc0 1fc3 mrr $AC0.M, $AR3 + 0dc1 5c00 sub $ACC0, $ACC1 + 0dc2 00fe 03f1 sr @0x03f1, $AC0.M + 0dc4 00fc 03f6 sr @0x03f6, $AC0.L + 0dc6 008b ffff lri $WR3, #0xffff + 0dc8 02df ret + 0dc9 0f50 lris $AC1.M, #0x50 + 0dca 0080 0a00 lri $AR0, #0x0a00 + 0dcc 0083 0d60 lri $AR3, #0x0d60 + 0dce 0098 3fff lri $AX0.L, #0x3fff + 0dd0 02bf 0145 call 0x0145 + 0dd2 0f50 lris $AC1.M, #0x50 + 0dd3 0080 0a00 lri $AR0, #0x0a00 + 0dd5 0083 0d00 lri $AR3, #0x0d00 + 0dd7 0098 3fff lri $AX0.L, #0x3fff + 0dd9 02bf 0145 call 0x0145 + 0ddb 02df ret + 0ddc 8a00 m2 + 0ddd 8f00 set40 + 0dde 8100 clr $ACC0 + 0ddf 00de 0404 lr $AC0.M, @0x0404 + 0de1 b100 tst $ACC0 + 0de2 0295 0de9 jz 0x0de9 + 0de4 8100 clr $ACC0 + 0de5 00fe 0478 sr @0x0478, $AC0.M + 0de7 00fe 0479 sr @0x0479, $AC0.M + 0de9 00df 0479 lr $AC1.M, @0x0479 + 0deb 00db 0478 lr $AX1.H, @0x0478 + 0ded 0900 lris $AX1.L, #0x00 + 0dee 0084 0000 lri $IX0, #0x0000 + 0df0 1150 0df9 bloopi #0x50, 0x0df9 + 0df2 199e lrrn $AC0.M, @$AR0 + 0df3 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 + 0df4 c000 mulc $AC0.M, $AX0.H + 0df5 6e00 movp $ACC0 + 0df6 1488 asl $ACC0, #8 + 0df7 4a00 addax $ACC0, $AX1.L + 0df8 1b1e srri @$AR0, $AC0.M + 0df9 1f7e mrr $AX1.H, $AC0.M + 0dfa 00fb 0478 sr @0x0478, $AX1.H + 0dfc 00ff 0479 sr @0x0479, $AC1.M + 0dfe 8b00 m0 + 0dff 8e00 set16 + 0e00 02df ret + 0e01 b900 tst $ACC1 + 0e02 0294 0e07 jnz 0x0e07 + 0e04 6800 movax $ACC0, $AX0.L + 0e05 b100 tst $ACC0 + 0e06 02d5 retz + 0e07 1c23 mrr $AR1, $AR3 + 0e08 197e lrri $AC0.M, @$AR3 + 0e09 191b lrri $AX1.H, @$AR0 + 0e0a d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + 0e0b 1120 0e11 bloopi #0x20, 0x0e11 + 0e0d dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0e0e 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0e0f dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0e10 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0e11 4900 addax $ACC1, $AX0.L + 0e12 1108 0e17 bloopi #0x08, 0x0e17 + 0e14 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0e15 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0e16 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0e17 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0e18 02df ret + 0e19 8f00 set40 + 0e1a 8d00 set15 + 0e1b 1c03 mrr $AR0, $AR3 + 0e1c 00d9 038e lr $AX1.L, @0x038e + 0e1e 0b04 lris $AX1.H, #0x04 + 0e1f 197a lrri $AX0.H, @$AR3 + 0e20 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 + 0e21 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0e22 1128 0e27 bloopi #0x28, 0x0e27 + 0e24 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0e25 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0e26 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0e27 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0e28 8c00 clr15 + 0e29 8e00 set16 + 0e2a 02df ret + 0e2b 00da 0485 lr $AX0.H, @0x0485 + 0e2d 8600 tstaxh $AX0.H + 0e2e 0295 0e3c jz 0x0e3c + 0e30 8100 clr $ACC0 + 0e31 00de 042a lr $AC0.M, @0x042a + 0e33 147f lsr $ACC0, #-1 + 0e34 00fe 042b sr @0x042b, $AC0.M + 0e36 b100 tst $ACC0 + 0e37 0294 0e3c jnz 0x0e3c + 0e39 0a01 lris $AX0.H, #0x01 + 0e3a 00fa 0401 sr @0x0401, $AX0.H + 0e3c 8f00 set40 + 0e3d 8100 clr $ACC0 + 0e3e 00de 0428 lr $AC0.M, @0x0428 + 0e40 1478 lsr $ACC0, #-8 + 0e41 00df 0428 lr $AC1.M, @0x0428 + 0e43 0340 007f andi $AC1.M, #0x007f + 0e45 1f1e mrr $AX0.L, $AC0.M + 0e46 1f5f mrr $AX0.H, $AC1.M + 0e47 0220 007f xori $ACC0, #0x007f + 0e49 1f3e mrr $AX1.L, $AC0.M + 0e4a 0320 007f xori $ACC1, #0x007f + 0e4c 1f7f mrr $AX1.H, $AC1.M + 0e4d 8100 clr $ACC0 + 0e4e 8900 clr $ACC1 + 0e4f 009f 0200 lri $AC1.M, #0x0200 + 0e51 1fd8 mrr $AC0.M, $AX0.L + 0e52 4c00 add $ACC0, $ACC1 + 0e53 1c1e mrr $AR0, $AC0.M + 0e54 1818 lrr $AX0.L, @$AR0 + 0e55 1fda mrr $AC0.M, $AX0.H + 0e56 4c00 add $ACC0, $ACC1 + 0e57 1c1e mrr $AR0, $AC0.M + 0e58 181a lrr $AX0.H, @$AR0 + 0e59 1fd9 mrr $AC0.M, $AX1.L + 0e5a 4c00 add $ACC0, $ACC1 + 0e5b 1c1e mrr $AR0, $AC0.M + 0e5c 1819 lrr $AX1.L, @$AR0 + 0e5d 1fdb mrr $AC0.M, $AX1.H + 0e5e 4c00 add $ACC0, $ACC1 + 0e5f 1c1e mrr $AR0, $AC0.M + 0e60 181b lrr $AX1.H, @$AR0 + 0e61 8a00 m2 + 0e62 0080 0b00 lri $AR0, #0x0b00 + 0e64 9800 mul $AX1.L, $AX1.H + 0e65 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0e66 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0e67 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M + 0e68 6e30 movp's $ACC0 : @$AR0, $AC0.M + 0e69 1b1e srri @$AR0, $AC0.M + 0e6a 8b00 m0 + 0e6b 0080 0b00 lri $AR0, #0x0b00 + 0e6d 0081 0b04 lri $AR1, #0x0b04 + 0e6f 00da 042a lr $AX0.H, @0x042a + 0e71 02bf 0ebc call 0x0ebc + 0e73 0081 0b08 lri $AR1, #0x0b08 + 0e75 0080 0b00 lri $AR0, #0x0b00 + 0e77 00da 042a lr $AX0.H, @0x042a + 0e79 00de 0429 lr $AC0.M, @0x0429 + 0e7b 8a00 m2 + 0e7c c000 mulc $AC0.M, $AX0.H + 0e7d 8b00 m0 + 0e7e 6e00 movp $ACC0 + 0e7f 1f5e mrr $AX0.H, $AC0.M + 0e80 02bf 0ebc call 0x0ebc + 0e82 0080 0b00 lri $AR0, #0x0b00 + 0e84 0081 0b0c lri $AR1, #0x0b0c + 0e86 8100 clr $ACC0 + 0e87 8900 clr $ACC1 + 0e88 00de 042b lr $AC0.M, @0x042b + 0e8a 00df 042a lr $AC1.M, @0x042a + 0e8c 00fe 042a sr @0x042a, $AC0.M + 0e8e 5c00 sub $ACC0, $ACC1 + 0e8f 1f5e mrr $AX0.H, $AC0.M + 0e90 02bf 0ec7 call 0x0ec7 + 0e92 0080 0b0c lri $AR0, #0x0b0c + 0e94 0081 0b10 lri $AR1, #0x0b10 + 0e96 00da 0429 lr $AX0.H, @0x0429 + 0e98 02bf 0ebc call 0x0ebc + 0e9a 0081 0b04 lri $AR1, #0x0b04 + 0e9c 0082 0b0c lri $AR2, #0x0b0c + 0e9e 0083 0ed5 lri $AR3, #0x0ed5 + 0ea0 1108 0eb9 bloopi #0x08, 0x0eb9 + 0ea2 195f lrri $AC1.M, @$AR2 + 0ea3 15fb asr $ACC1, #-5 + 0ea4 1f1d mrr $AX0.L, $AC1.L + 0ea5 1f5f mrr $AX0.H, $AC1.M + 0ea6 193f lrri $AC1.M, @$AR1 + 0ea7 00e1 0b24 sr @0x0b24, $AR1 + 0ea9 00e2 0b25 sr @0x0b25, $AR2 + 0eab 021b ilrri $AC0.M, @$AR3 + 0eac 00e3 0b26 sr @0x0b26, $AR3 + 0eae 1c7e mrr $AR3, $AC0.M + 0eaf 00c0 038f lr $AR0, @0x038f + 0eb1 02bf 0e01 call 0x0e01 + 0eb3 00c1 0b24 lr $AR1, @0x0b24 + 0eb5 00c2 0b25 lr $AR2, @0x0b25 + 0eb7 00c3 0b26 lr $AR3, @0x0b26 + 0eb9 0000 nop + 0eba 8e00 set16 + 0ebb 02df ret + 0ebc 8a00 m2 + 0ebd 191f lrri $AC1.M, @$AR0 + 0ebe d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 + 0ebf d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 + 0ec0 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0ec1 191f lrri $AC1.M, @$AR0 + 0ec2 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0ec3 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0ec4 1b3e srri @$AR1, $AC0.M + 0ec5 8b00 m0 + 0ec6 02df ret + 0ec7 8a00 m2 + 0ec8 8d00 set15 + 0ec9 1f7e mrr $AX1.H, $AC0.M + 0eca 1918 lrri $AX0.L, @$AR0 + 0ecb a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 + 0ecc ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 + 0ecd ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ece 1918 lrri $AX0.L, @$AR0 + 0ecf ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ed0 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0ed1 1b3e srri @$AR1, $AC0.M + 0ed2 8c00 clr15 + 0ed3 8b00 m0 + 0ed4 02df ret + 0ed5 0d00 lris $AC1.L, #0x00 + 0ed6 0d60 lris $AC1.L, #0x60 + 0ed7 0f40 lris $AC1.M, #0x40 + 0ed8 0ca0 lris $AC0.L, #0xa0 + 0ed9 0e80 lris $AC0.M, #0x80 + 0eda 0ee0 lris $AC0.M, #0xe0 + 0edb 0be0 lris $AX1.H, #0xe0 + 0edc 0c40 lris $AC0.L, #0x40 + 0edd 00f9 0361 sr @0x0361, $AX1.L + 0edf 1fc0 mrr $AC0.M, $AR0 + 0ee0 0200 fffc addi $AC0.M, #0xfffc + 0ee2 1c1e mrr $AR0, $AC0.M + 0ee3 1c5e mrr $AR2, $AC0.M + 0ee4 0083 043c lri $AR3, #0x043c + 0ee6 197e lrri $AC0.M, @$AR3 + 0ee7 197f lrri $AC1.M, @$AR3 + 0ee8 80a2 nx'sl : $AC0.M, $AX0.H + 0ee9 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + 0eea 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + 0eeb 1b1f srri @$AR0, $AC1.M + 0eec 1c02 mrr $AR0, $AR2 + 0eed 8100 clr $ACC0 + 0eee 00de 0402 lr $AC0.M, @0x0402 + 0ef0 00fe 0362 sr @0x0362, $AC0.M + 0ef2 1474 lsr $ACC0, #-12 + 0ef3 1f7e mrr $AX1.H, $AC0.M + 0ef4 1f3c mrr $AX1.L, $AC0.L + 0ef5 8900 clr $ACC1 + 0ef6 00dd 0430 lr $AC1.L, @0x0430 + 0ef8 1504 lsl $ACC1, #4 + 0ef9 0604 cmpis $ACC0, #0x04 + 0efa 0290 0f51 jge 0x0f51 + 0efc 1fdd mrr $AC0.M, $AC1.L + 0efd 0082 02b0 lri $AR2, #0x02b0 + 0eff 1050 loopi #0x50 + 0f00 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L + 0f01 1fbe mrr $AC1.L, $AC0.M + 0f02 00fe 0360 sr @0x0360, $AC0.M + 0f04 8900 clr $ACC1 + 0f05 1fbe mrr $AC1.L, $AC0.M + 0f06 0af8 lris $AX0.H, #0xf8 + 0f07 009b 00fc lri $AX1.H, #0x00fc + 0f09 00d8 0361 lr $AX0.L, @0x0361 + 0f0b 0082 02b0 lri $AR2, #0x02b0 + 0f0d 0083 02b0 lri $AR3, #0x02b0 + 0f0f 195e lrri $AC0.M, @$AR2 + 0f10 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M + 0f11 1128 0f16 bloopi #0x28, 0x0f16 + 0f13 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 + 0f14 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H + 0f15 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 + 0f16 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + 0f17 8a00 m2 + 0f18 0082 02b0 lri $AR2, #0x02b0 + 0f1a 00dd 0430 lr $AC1.L, @0x0430 + 0f1c 1504 lsl $ACC1, #4 + 0f1d 1fe0 mrr $AC1.M, $AR0 + 0f1e 8100 clr $ACC0 + 0f1f 00de 0362 lr $AC0.M, @0x0362 + 0f21 1474 lsr $ACC0, #-12 + 0f22 1f7e mrr $AX1.H, $AC0.M + 0f23 1f3c mrr $AX1.L, $AC0.L + 0f24 8f00 set40 + 0f25 1943 lrri $AR3, @$AR2 + 0f26 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0f27 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f28 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f29 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f2a f200 madd $AX0.L, $AX0.H + 0f2b fe00 movpz $ACC0 + 0f2c 1c1f mrr $AR0, $AC1.M + 0f2d 1943 lrri $AR3, @$AR2 + 0f2e 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0f2f 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f30 114e 0f38 bloopi #0x4e, 0x0f38 + 0f32 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f33 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f34 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0f35 1c1f mrr $AR0, $AC1.M + 0f36 1943 lrri $AR3, @$AR2 + 0f37 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0f38 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + 0f39 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f3a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f3b f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0f3c fe00 movpz $ACC0 + 0f3d 1b3e srri @$AR1, $AC0.M + 0f3e 8b00 m0 + 0f3f 8e00 set16 + 0f40 00fe 0433 sr @0x0433, $AC0.M + 0f42 1c1f mrr $AR0, $AC1.M + 0f43 150c lsl $ACC1, #12 + 0f44 0340 0fff andi $AC1.M, #0x0fff + 0f46 00ff 0430 sr @0x0430, $AC1.M + 0f48 0083 043c lri $AR3, #0x043c + 0f4a 191e lrri $AC0.M, @$AR0 + 0f4b 191f lrri $AC1.M, @$AR0 + 0f4c 80a0 nx'ls : $AX0.H, $AC0.M + 0f4d 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0f4e 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0f4f 1b7f srri @$AR3, $AC1.M + 0f50 02df ret + 0f51 1fe0 mrr $AC1.M, $AR0 + 0f52 1c1f mrr $AR0, $AC1.M + 0f53 1128 0f5a bloopi #0x28, 0x0f5a + 0f55 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f56 1b3e srri @$AR1, $AC0.M + 0f57 1c1f mrr $AR0, $AC1.M + 0f58 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f59 1b3e srri @$AR1, $AC0.M + 0f5a 1c1f mrr $AR0, $AC1.M + 0f5b 029f 0f40 jmp 0x0f40 + 0f5d 0083 0520 lri $AR3, #0x0520 + 0f5f 00de 0433 lr $AC0.M, @0x0433 + 0f61 1050 loopi #0x50 + 0f62 1b7e srri @$AR3, $AC0.M + 0f63 029f 0386 jmp 0x0386 + 0f65 1c20 mrr $AR1, $AR0 + 0f66 185f lrr $AC1.M, @$AR2 + 0f67 1f7f mrr $AX1.H, $AC1.M + 0f68 193a lrri $AX0.H, @$AR1 + 0f69 6400 movr $ACC0, $AX0.H + 0f6a 0078 0f6f bloop $AX0.L, 0x0f6f + 0f6c 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 + 0f6d 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M + 0f6e 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 + 0f6f 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M + 0f70 1a5b srr @$AR2, $AX1.H + 0f71 02df ret + 0f72 0098 8240 lri $AX0.L, #0x8240 + 0f74 00f8 04e8 sr @0x04e8, $AX0.L + 0f76 0098 7fff lri $AX0.L, #0x7fff + 0f78 00f8 04e9 sr @0x04e9, $AX0.L + 0f7a 0098 7dbf lri $AX0.L, #0x7dbf + 0f7c 00f8 04ea sr @0x04ea, $AX0.L + 0f7e 0098 843f lri $AX0.L, #0x843f + 0f80 00f8 04eb sr @0x04eb, $AX0.L + 0f82 0098 b23b lri $AX0.L, #0xb23b + 0f84 00f8 04f0 sr @0x04f0, $AX0.L + 0f86 0098 7fff lri $AX0.L, #0x7fff + 0f88 00f8 04f1 sr @0x04f1, $AX0.L + 0f8a 0098 4dc4 lri $AX0.L, #0x4dc4 + 0f8c 00f8 04f2 sr @0x04f2, $AX0.L + 0f8e 0098 d808 lri $AX0.L, #0xd808 + 0f90 00f8 04f3 sr @0x04f3, $AX0.L + 0f92 0098 0000 lri $AX0.L, #0x0000 + 0f94 0080 04ec lri $AR0, #0x04ec + 0f96 1004 loopi #0x04 + 0f97 1b18 srri @$AR0, $AX0.L + 0f98 0080 04f4 lri $AR0, #0x04f4 + 0f9a 1004 loopi #0x04 + 0f9b 1b18 srri @$AR0, $AX0.L + 0f9c 02df ret + 0f9d 0080 0f40 lri $AR0, #0x0f40 + 0f9f 0083 0b00 lri $AR3, #0x0b00 + 0fa1 8900 clr $ACC1 + 0fa2 0f50 lris $AC1.M, #0x50 + 0fa3 0098 6784 lri $AX0.L, #0x6784 + 0fa5 02bf 0154 call 0x0154 + 0fa7 0080 04e8 lri $AR0, #0x04e8 + 0fa9 0082 04ec lri $AR2, #0x04ec + 0fab 0081 0b00 lri $AR1, #0x0b00 + 0fad 8900 clr $ACC1 + 0fae 0f50 lris $AC1.M, #0x50 + 0faf 0080 0b00 lri $AR0, #0x0b00 + 0fb1 0083 0d00 lri $AR3, #0x0d00 + 0fb3 0098 7fff lri $AX0.L, #0x7fff + 0fb5 02bf 0145 call 0x0145 + 0fb7 8900 clr $ACC1 + 0fb8 0f50 lris $AC1.M, #0x50 + 0fb9 0080 0b00 lri $AR0, #0x0b00 + 0fbb 0083 0d60 lri $AR3, #0x0d60 + 0fbd 0098 b820 lri $AX0.L, #0xb820 + 0fbf 02bf 0145 call 0x0145 + 0fc1 0080 0ca0 lri $AR0, #0x0ca0 + 0fc3 0083 0b00 lri $AR3, #0x0b00 + 0fc5 8900 clr $ACC1 + 0fc6 0f50 lris $AC1.M, #0x50 + 0fc7 0098 6784 lri $AX0.L, #0x6784 + 0fc9 02bf 0154 call 0x0154 + 0fcb 0080 04e8 lri $AR0, #0x04e8 + 0fcd 0082 04f4 lri $AR2, #0x04f4 + 0fcf 0081 0b00 lri $AR1, #0x0b00 + 0fd1 8900 clr $ACC1 + 0fd2 0f50 lris $AC1.M, #0x50 + 0fd3 0080 0b00 lri $AR0, #0x0b00 + 0fd5 0083 0d00 lri $AR3, #0x0d00 + 0fd7 0098 47e0 lri $AX0.L, #0x47e0 + 0fd9 02bf 0145 call 0x0145 + 0fdb 8900 clr $ACC1 + 0fdc 0f50 lris $AC1.M, #0x50 + 0fdd 0080 0b00 lri $AR0, #0x0b00 + 0fdf 0083 0d60 lri $AR3, #0x0d60 + 0fe1 0098 8001 lri $AX0.L, #0x8001 + 0fe3 02bf 0145 call 0x0145 + 0fe5 02df ret + 0fe6 0000 nop + 0fe7 0000 nop + 0fe8 0000 nop + 0fe9 0000 nop + 0fea 0000 nop + 0feb 0000 nop + 0fec 0000 nop + 0fed 0000 nop + 0fee 0000 nop + 0fef 0000 nop diff --git a/docs/DSP/DSP_UC_PikminWii.txt b/docs/DSP/DSP_UC_PikminWii.txt index 1c808cc201..19373ea920 100644 --- a/docs/DSP/DSP_UC_PikminWii.txt +++ b/docs/DSP/DSP_UC_PikminWii.txt @@ -1,2825 +1,2825 @@ -// What seems to be the latest Zelda/SMG UCode (2009). Seems to work differently than the rest. Also longer and has more ext ops. - - 0000 029f 0012 jmp 0x0012 - 0002 0000 nop - 0003 0000 nop - 0004 02ff rti - 0005 0000 nop - 0006 02ff rti - 0007 0000 nop - 0008 02ff rti - 0009 0000 nop - 000a 02ff rti - 000b 0000 nop - 000c 02ff rti - 000d 0000 nop - 000e 029f 06e0 jmp 0x06e0 - 0010 029f 004c jmp 0x004c - 0012 1205 sbclr #0x05 - 0013 02bf 0055 call 0x0055 - 0015 8100 clr $ACC0 - 0016 009f 1000 lri $AC1.M, #0x1000 - 0018 0080 0000 lri $AR0, #0x0000 - 001a 005f loop $AC1.M - 001b 1b1e srri @$AR0, $AC0.M - 001c 02bf 07b0 call 0x07b0 - 001e 02bf 0f24 call 0x0f24 - 0020 0e00 lris $AC0.M, #0x00 - 0021 02bf 0792 call 0x0792 - 0023 009e 1111 lri $AC0.M, #0x1111 - 0025 02bf 079c call 0x079c - 0027 0e00 lris $AC0.M, #0x00 - 0028 00fe 034e sr @0x034e, $AC0.M - 002a 1305 sbset #0x05 - 002b 029f 07ed jmp 0x07ed - 002d 00df 0357 lr $AC1.M, @0x0357 - 002f 00ff 0345 sr @0x0345, $AC1.M - 0031 00de 0356 lr $AC0.M, @0x0356 - 0033 1ffe mrr $AC1.M, $AC0.M - 0034 0340 00ff andi $AC1.M, #0x00ff - 0036 00ff 0344 sr @0x0344, $AC1.M - 0038 1479 lsr $ACC0, #-7 - 0039 0240 007e andi $AC0.M, #0x007e - 003b 00fe 0343 sr @0x0343, $AC0.M - 003d 0200 0073 addi $AC0.M, #0x0073 - 003f 1c1e mrr $AR0, $AC0.M - 0040 170f jmpr $AR0 - 0041 0092 00ff lri $CR, #0x00ff - 0043 0e04 lris $AC0.M, #0x04 - 0044 02bf 0792 call 0x0792 - 0046 00de 0356 lr $AC0.M, @0x0356 - 0048 02bf 079c call 0x079c - 004a 029f 002b jmp 0x002b - 004c 1205 sbclr #0x05 - 004d 02bf 0055 call 0x0055 - 004f 0e01 lris $AC0.M, #0x01 - 0050 02bf 0792 call 0x0792 - 0052 1305 sbset #0x05 - 0053 029f 002b jmp 0x002b - 0055 1202 sbclr #0x02 - 0056 1203 sbclr #0x03 - 0057 1204 sbclr #0x04 - 0058 1306 sbset #0x06 - 0059 8e00 set16 - 005a 8c00 clr15 - 005b 8b00 m0 - 005c 009e ffff lri $AC0.M, #0xffff - 005e 1d1e mrr $WR0, $AC0.M - 005f 1d3e mrr $WR1, $AC0.M - 0060 1d5e mrr $WR2, $AC0.M - 0061 1d7e mrr $WR3, $AC0.M - 0062 0092 00ff lri $CR, #0x00ff - 0064 02df ret - 0065 0081 0358 lri $AR1, #0x0358 - 0067 0090 0000 lri $AC0.H, #0x0000 - 0069 0c00 lris $AC0.L, #0x00 - 006a 007e 006f bloop $AC0.M, 0x006f - 006c 193e lrri $AC0.M, @$AR1 - 006d 1b1e srri @$AR0, $AC0.M - 006e 193e lrri $AC0.M, @$AR1 - 006f 1b1e srri @$AR0, $AC0.M - 0070 02df ret - 0071 029f 0041 jmp 0x0041 - 0073 029f 0041 jmp 0x0041 - 0075 029f 0093 jmp 0x0093 - 0077 029f 029d jmp 0x029d - 0079 029f 0071 jmp 0x0071 - 007b 029f 0629 jmp 0x0629 - 007d 029f 063b jmp 0x063b - 007f 029f 0041 jmp 0x0041 - 0081 029f 0572 jmp 0x0572 - 0083 029f 05be jmp 0x05be - 0085 029f 05a2 jmp 0x05a2 - 0087 029f 0041 jmp 0x0041 - 0089 029f 0041 jmp 0x0041 - 008b 029f 0041 jmp 0x0041 - 008d 029f 00bd jmp 0x00bd - 008f 029f 00b0 jmp 0x00b0 - 0091 029f 0041 jmp 0x0041 - 0093 0080 0380 lri $AR0, #0x0380 - 0095 0e04 lris $AC0.M, #0x04 - 0096 02bf 0065 call 0x0065 - 0098 0081 0382 lri $AR1, #0x0382 - 009a 009f 0000 lri $AC1.M, #0x0000 - 009c 0080 0280 lri $AR0, #0x0280 - 009e 02bf 05f9 call 0x05f9 - 00a0 0081 0384 lri $AR1, #0x0384 - 00a2 009f 0300 lri $AC1.M, #0x0300 - 00a4 0080 0020 lri $AR0, #0x0020 - 00a6 02bf 05f9 call 0x05f9 - 00a8 00de 0345 lr $AC0.M, @0x0345 - 00aa 00fe 0342 sr @0x0342, $AC0.M - 00ac 02bf 0cf6 call 0x0cf6 - 00ae 029f 0041 jmp 0x0041 - 00b0 0080 037d lri $AR0, #0x037d - 00b2 0e01 lris $AC0.M, #0x01 - 00b3 02bf 0065 call 0x0065 - 00b5 00de 037d lr $AC0.M, @0x037d - 00b7 0240 7fff andi $AC0.M, #0x7fff - 00b9 00fe 037d sr @0x037d, $AC0.M - 00bb 029f 0041 jmp 0x0041 - 00bd 0080 0374 lri $AR0, #0x0374 - 00bf 0e01 lris $AC0.M, #0x01 - 00c0 00fe 0377 sr @0x0377, $AC0.M - 00c2 00fe 037c sr @0x037c, $AC0.M - 00c4 02bf 0065 call 0x0065 - 00c6 00de 0345 lr $AC0.M, @0x0345 - 00c8 00fe 0376 sr @0x0376, $AC0.M - 00ca 029f 0041 jmp 0x0041 - 00cc 0081 034c lri $AR1, #0x034c - 00ce 009f 0400 lri $AC1.M, #0x0400 - 00d0 0080 00c0 lri $AR0, #0x00c0 - 00d2 02bf 05f9 call 0x05f9 - 00d4 02df ret - 00d5 0081 034c lri $AR1, #0x034c - 00d7 009f 0400 lri $AC1.M, #0x0400 - 00d9 0080 0080 lri $AR0, #0x0080 - 00db 0081 034c lri $AR1, #0x034c - 00dd 193e lrri $AC0.M, @$AR1 - 00de 193c lrri $AC0.L, @$AR1 - 00df 0098 0000 lri $AX0.L, #0x0000 - 00e1 7000 addaxl $ACC0, $AX0.L - 00e2 02bf 0608 call 0x0608 - 00e4 02df ret - 00e5 191e lrri $AC0.M, @$AR0 - 00e6 191a lrri $AX0.H, @$AR0 - 00e7 005f loop $AC1.M - 00e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 00e9 1b7e srri @$AR3, $AC0.M - 00ea 1b7a srri @$AR3, $AX0.H - 00eb 02df ret - 00ec 0000 nop - 00ed 007f 00f2 bloop $AC1.M, 0x00f2 - 00ef 191e lrri $AC0.M, @$AR0 - 00f0 1b7e srri @$AR3, $AC0.M - 00f1 191e lrri $AC0.M, @$AR0 - 00f2 1b7e srri @$AR3, $AC0.M - 00f3 0000 nop - 00f4 02df ret - 00f5 191e lrri $AC0.M, @$AR0 - 00f6 191a lrri $AX0.H, @$AR0 - 00f7 007f 00fc bloop $AC1.M, 0x00fc - 00f9 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 00fa 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 00fb 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 00fc 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 00fd 0000 nop - 00fe 02df ret - 00ff 8a00 m2 - 0100 157f lsr $ACC1, #-1 - 0101 1c20 mrr $AR1, $AR0 - 0102 1c03 mrr $AR0, $AR3 - 0103 193a lrri $AX0.H, @$AR1 - 0104 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 - 0105 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 - 0106 007f 010b bloop $AC1.M, 0x010b - 0108 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 0109 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 010a 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 010b 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 010c 8b00 m0 - 010d 02df ret - 010e 8a00 m2 - 010f 191a lrri $AX0.H, @$AR0 - 0110 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 - 0111 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0112 005f loop $AC1.M - 0113 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M - 0114 8b00 m0 - 0115 02df ret - 0116 8100 clr $ACC0 - 0117 8900 clr $ACC1 - 0118 0e50 lris $AC0.M, #0x50 - 0119 0080 0d00 lri $AR0, #0x0d00 - 011b 005e loop $AC0.M - 011c 1b1f srri @$AR0, $AC1.M - 011d 0080 0d60 lri $AR0, #0x0d60 - 011f 005e loop $AC0.M - 0120 1b1f srri @$AR0, $AC1.M - 0121 00da 0374 lr $AX0.H, @0x0374 - 0123 8600 tstaxh $AX0.H - 0124 02b5 0f4f callz 0x0f4f - 0126 8100 clr $ACC0 - 0127 8900 clr $ACC1 - 0128 0e50 lris $AC0.M, #0x50 - 0129 0080 0ca0 lri $AR0, #0x0ca0 - 012b 005e loop $AC0.M - 012c 1b1f srri @$AR0, $AC1.M - 012d 0080 0f40 lri $AR0, #0x0f40 - 012f 005e loop $AC0.M - 0130 1b1f srri @$AR0, $AC1.M - 0131 0080 0fa0 lri $AR0, #0x0fa0 - 0133 005e loop $AC0.M - 0134 1b1f srri @$AR0, $AC1.M - 0135 0080 0a00 lri $AR0, #0x0a00 - 0137 005e loop $AC0.M - 0138 1b1f srri @$AR0, $AC1.M - 0139 0080 09a0 lri $AR0, #0x09a0 - 013b 005e loop $AC0.M - 013c 1b1f srri @$AR0, $AC1.M - 013d 0f04 lris $AC1.M, #0x04 - 013e 0080 0e10 lri $AR0, #0x0e10 - 0140 0083 0dc0 lri $AR3, #0x0dc0 - 0142 02bf 00ec call 0x00ec - 0144 0080 0e70 lri $AR0, #0x0e70 - 0146 0083 0e20 lri $AR3, #0x0e20 - 0148 02bf 00ec call 0x00ec - 014a 0080 0ed0 lri $AR0, #0x0ed0 - 014c 0083 0e80 lri $AR3, #0x0e80 - 014e 02bf 00ec call 0x00ec - 0150 0080 0f30 lri $AR0, #0x0f30 - 0152 0083 0ee0 lri $AR3, #0x0ee0 - 0154 02bf 00ec call 0x00ec - 0156 8100 clr $ACC0 - 0157 0e50 lris $AC0.M, #0x50 - 0158 8900 clr $ACC1 - 0159 0080 0dc8 lri $AR0, #0x0dc8 - 015b 005e loop $AC0.M - 015c 1b1f srri @$AR0, $AC1.M - 015d 0080 0e28 lri $AR0, #0x0e28 - 015f 005e loop $AC0.M - 0160 1b1f srri @$AR0, $AC1.M - 0161 0080 0e88 lri $AR0, #0x0e88 - 0163 005e loop $AC0.M - 0164 1b1f srri @$AR0, $AC1.M - 0165 0080 0ee8 lri $AR0, #0x0ee8 - 0167 005e loop $AC0.M - 0168 1b1f srri @$AR0, $AC1.M - 0169 02df ret - 016a 009f 0580 lri $AC1.M, #0x0580 - 016c 009b 00a0 lri $AX1.H, #0x00a0 - 016e 0081 0393 lri $AR1, #0x0393 - 0170 18bc lrrd $AC0.L, @$AR1 - 0171 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0172 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0173 0080 0050 lri $AR0, #0x0050 - 0175 02bf 05fb call 0x05fb - 0177 02df ret - 0178 00df 03a1 lr $AC1.M, @0x03a1 - 017a 0508 addis $ACC1, #0x08 - 017b 0080 0580 lri $AR0, #0x0580 - 017d 1c7f mrr $AR3, $AC1.M - 017e 0098 7fff lri $AX0.L, #0x7fff - 0180 8900 clr $ACC1 - 0181 0f50 lris $AC1.M, #0x50 - 0182 02bf 00ff call 0x00ff - 0184 02df ret - 0185 00c0 03a0 lr $AR0, @0x03a0 - 0187 191a lrri $AX0.H, @$AR0 - 0188 02bf 016a call 0x016a - 018a 02bf 0178 call 0x0178 - 018c 8100 clr $ACC0 - 018d 8900 clr $ACC1 - 018e 00de 0390 lr $AC0.M, @0x0390 - 0190 02a0 0001 andf $AC0.M, #0x0001 - 0192 029d 019b jlz 0x019b - 0194 0080 0398 lri $AR0, #0x0398 - 0196 0e08 lris $AC0.M, #0x08 - 0197 00c1 03a1 lr $AR1, @0x03a1 - 0199 02bf 0c38 call 0x0c38 - 019b 0f50 lris $AC1.M, #0x50 - 019c 00c0 03a1 lr $AR0, @0x03a1 - 019e 00da 0394 lr $AX0.H, @0x0394 - 01a0 8600 tstaxh $AX0.H - 01a1 0295 01a8 jz 0x01a8 - 01a3 1c7a mrr $AR3, $AX0.H - 01a4 00d8 0395 lr $AX0.L, @0x0395 - 01a6 02bf 00ff call 0x00ff - 01a8 0f50 lris $AC1.M, #0x50 - 01a9 00c0 03a1 lr $AR0, @0x03a1 - 01ab 00da 0396 lr $AX0.H, @0x0396 - 01ad 8600 tstaxh $AX0.H - 01ae 0295 01b5 jz 0x01b5 - 01b0 1c7a mrr $AR3, $AX0.H - 01b1 00d8 0397 lr $AX0.L, @0x0397 - 01b3 02bf 00ff call 0x00ff - 01b5 00de 0390 lr $AC0.M, @0x0390 - 01b7 02a0 0002 andf $AC0.M, #0x0002 - 01b9 02dd retlz - 01ba 0080 0398 lri $AR0, #0x0398 - 01bc 0e08 lris $AC0.M, #0x08 - 01bd 00c1 03a1 lr $AR1, @0x03a1 - 01bf 02bf 0c38 call 0x0c38 - 01c1 02df ret - 01c2 8900 clr $ACC1 - 01c3 009f 0dc0 lri $AC1.M, #0x0dc0 - 01c5 00ff 03a1 sr @0x03a1, $AC1.M - 01c7 009f 03a8 lri $AC1.M, #0x03a8 - 01c9 00ff 03a2 sr @0x03a2, $AC1.M - 01cb 009f 03a4 lri $AC1.M, #0x03a4 - 01cd 00ff 03a0 sr @0x03a0, $AC1.M - 01cf 1104 01ef bloopi #0x04, 0x01ef - 01d1 00c0 03a2 lr $AR0, @0x03a2 - 01d3 0083 0390 lri $AR3, #0x0390 - 01d5 8900 clr $ACC1 - 01d6 0f08 lris $AC1.M, #0x08 - 01d7 02bf 00ec call 0x00ec - 01d9 00da 0390 lr $AX0.H, @0x0390 - 01db 8600 tstaxh $AX0.H - 01dc 0295 01e0 jz 0x01e0 - 01de 02bf 0185 call 0x0185 - 01e0 8100 clr $ACC0 - 01e1 00de 03a2 lr $AC0.M, @0x03a2 - 01e3 0410 addis $ACC0, #0x10 - 01e4 00fe 03a2 sr @0x03a2, $AC0.M - 01e6 00de 03a1 lr $AC0.M, @0x03a1 - 01e8 0460 addis $ACC0, #0x60 - 01e9 00fe 03a1 sr @0x03a1, $AC0.M - 01eb 00de 03a0 lr $AC0.M, @0x03a0 - 01ed 7400 incm $AC0.M - 01ee 00fe 03a0 sr @0x03a0, $AC0.M - 01f0 00da 0374 lr $AX0.H, @0x0374 - 01f2 8600 tstaxh $AX0.H - 01f3 0294 0219 jnz 0x0219 - 01f5 0f50 lris $AC1.M, #0x50 - 01f6 0080 0be0 lri $AR0, #0x0be0 - 01f8 0083 0e80 lri $AR3, #0x0e80 - 01fa 0098 7fff lri $AX0.L, #0x7fff - 01fc 02bf 00ff call 0x00ff - 01fe 0f50 lris $AC1.M, #0x50 - 01ff 0080 0be0 lri $AR0, #0x0be0 - 0201 0083 0ee0 lri $AR3, #0x0ee0 - 0203 0098 b820 lri $AX0.L, #0xb820 - 0205 02bf 00ff call 0x00ff - 0207 0f28 lris $AC1.M, #0x28 - 0208 0080 0c68 lri $AR0, #0x0c68 - 020a 0083 0e80 lri $AR3, #0x0e80 - 020c 0098 b820 lri $AX0.L, #0xb820 - 020e 02bf 00ff call 0x00ff - 0210 0f28 lris $AC1.M, #0x28 - 0211 0080 0c68 lri $AR0, #0x0c68 - 0213 0083 0ee0 lri $AR3, #0x0ee0 - 0215 0098 7fff lri $AX0.L, #0x7fff - 0217 02bf 00ff call 0x00ff - 0219 8100 clr $ACC0 - 021a 8900 clr $ACC1 - 021b 0e50 lris $AC0.M, #0x50 - 021c 0080 0be0 lri $AR0, #0x0be0 - 021e 005e loop $AC0.M - 021f 1b1f srri @$AR0, $AC1.M - 0220 0080 0c40 lri $AR0, #0x0c40 - 0222 005e loop $AC0.M - 0223 1b1f srri @$AR0, $AC1.M - 0224 02df ret - 0225 00c0 03a0 lr $AR0, @0x03a0 - 0227 181a lrr $AX0.H, @$AR0 - 0228 8100 clr $ACC0 - 0229 181e lrr $AC0.M, @$AR0 - 022a 00db 0391 lr $AX1.H, @0x0391 - 022c 7400 incm $AC0.M - 022d d100 cmpar $ACC1, $AX0.H - 022e 0270 ifge - 022f 8100 clr $ACC0 - 0230 1b1e srri @$AR0, $AC0.M - 0231 00df 03a1 lr $AC1.M, @0x03a1 - 0233 009b 00a0 lri $AX1.H, #0x00a0 - 0235 0081 0393 lri $AR1, #0x0393 - 0237 18bc lrrd $AC0.L, @$AR1 - 0238 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0239 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 023a 0080 0050 lri $AR0, #0x0050 - 023c 02bf 0608 call 0x0608 - 023e 02df ret - 023f 00da 0374 lr $AX0.H, @0x0374 - 0241 8600 tstaxh $AX0.H - 0242 0294 0258 jnz 0x0258 - 0244 8900 clr $ACC1 - 0245 0f28 lris $AC1.M, #0x28 - 0246 0080 0c40 lri $AR0, #0x0c40 - 0248 0083 0ea8 lri $AR3, #0x0ea8 - 024a 0098 b820 lri $AX0.L, #0xb820 - 024c 02bf 00ff call 0x00ff - 024e 8900 clr $ACC1 - 024f 0f28 lris $AC1.M, #0x28 - 0250 0080 0c40 lri $AR0, #0x0c40 - 0252 0083 0f08 lri $AR3, #0x0f08 - 0254 0098 7fff lri $AX0.L, #0x7fff - 0256 02bf 00ff call 0x00ff - 0258 009f 0dc0 lri $AC1.M, #0x0dc0 - 025a 00ff 03a1 sr @0x03a1, $AC1.M - 025c 009f 03a8 lri $AC1.M, #0x03a8 - 025e 00ff 03a2 sr @0x03a2, $AC1.M - 0260 009f 03a4 lri $AC1.M, #0x03a4 - 0262 00ff 03a0 sr @0x03a0, $AC1.M - 0264 1104 0282 bloopi #0x04, 0x0282 - 0266 00c0 03a2 lr $AR0, @0x03a2 - 0268 0083 0390 lri $AR3, #0x0390 - 026a 0f08 lris $AC1.M, #0x08 - 026b 02bf 00ec call 0x00ec - 026d 00da 0390 lr $AX0.H, @0x0390 - 026f 8600 tstaxh $AX0.H - 0270 0295 0274 jz 0x0274 - 0272 02bf 0225 call 0x0225 - 0274 00de 03a2 lr $AC0.M, @0x03a2 - 0276 0410 addis $ACC0, #0x10 - 0277 00fe 03a2 sr @0x03a2, $AC0.M - 0279 00de 03a1 lr $AC0.M, @0x03a1 - 027b 0460 addis $ACC0, #0x60 - 027c 00fe 03a1 sr @0x03a1, $AC0.M - 027e 00de 03a0 lr $AC0.M, @0x03a0 - 0280 7400 incm $AC0.M - 0281 00fe 03a0 sr @0x03a0, $AC0.M - 0283 02df ret - 0284 0081 0386 lri $AR1, #0x0386 - 0286 009f 03a8 lri $AC1.M, #0x03a8 - 0288 0080 0040 lri $AR0, #0x0040 - 028a 02bf 05f9 call 0x05f9 - 028c 02df ret - 028d 191e lrri $AC0.M, @$AR0 - 028e 189c lrrd $AC0.L, @$AR0 - 028f 4800 addax $ACC0, $AX0.L - 0290 1b1e srri @$AR0, $AC0.M - 0291 1b1c srri @$AR0, $AC0.L - 0292 02df ret - 0293 8100 clr $ACC0 - 0294 8900 clr $ACC1 - 0295 00df 0354 lr $AC1.M, @0x0354 - 0297 00de 034e lr $AC0.M, @0x034e - 0299 8200 cmp - 029a 0293 0293 jle 0x0293 - 029c 02df ret - 029d 0080 0388 lri $AR0, #0x0388 - 029f 0081 0065 lri $AR1, #0x0065 - 02a1 0e02 lris $AC0.M, #0x02 - 02a2 173f callr $AR1 - 02a3 02bf 047f call 0x047f - 02a5 00de 0344 lr $AC0.M, @0x0344 - 02a7 00fe 0341 sr @0x0341, $AC0.M - 02a9 00de 0345 lr $AC0.M, @0x0345 - 02ab 00fe 038e sr @0x038e, $AC0.M - 02ad 8100 clr $ACC0 - 02ae 00fe 0355 sr @0x0355, $AC0.M - 02b0 02bf 0284 call 0x0284 - 02b2 02bf 064d call 0x064d - 02b4 0092 00ff lri $CR, #0x00ff - 02b6 00de 0341 lr $AC0.M, @0x0341 - 02b8 007e 047a bloop $AC0.M, 0x047a - 02ba 02bf 0116 call 0x0116 - 02bc 02bf 01c2 call 0x01c2 - 02be 02bf 04f5 call 0x04f5 - 02c0 02bf 0a86 call 0x0a86 - 02c2 00de 0355 lr $AC0.M, @0x0355 - 02c4 7400 incm $AC0.M - 02c5 00fe 0355 sr @0x0355, $AC0.M - 02c7 8100 clr $ACC0 - 02c8 00fe 0354 sr @0x0354, $AC0.M - 02ca 00de 0342 lr $AC0.M, @0x0342 - 02cc 007e 0420 bloop $AC0.M, 0x0420 - 02ce 02bf 0293 call 0x0293 - 02d0 8100 clr $ACC0 - 02d1 8900 clr $ACC1 - 02d2 00de 0354 lr $AC0.M, @0x0354 - 02d4 147c lsr $ACC0, #-4 - 02d5 0200 04fc addi $AC0.M, #0x04fc - 02d7 1c1e mrr $AR0, $AC0.M - 02d8 181f lrr $AC1.M, @$AR0 - 02d9 00de 0354 lr $AC0.M, @0x0354 - 02db 0240 000f andi $AC0.M, #0x000f - 02dd 3d80 lsrnr $ACC1 - 02de 03c0 8000 andcf $AC1.M, #0x8000 - 02e0 029c 041c jlnz 0x041c - 02e2 00d8 0354 lr $AX0.L, @0x0354 - 02e4 009a 0180 lri $AX0.H, #0x0180 - 02e6 8100 clr $ACC0 - 02e7 00de 0380 lr $AC0.M, @0x0380 - 02e9 00dc 0381 lr $AC0.L, @0x0381 - 02eb 9000 mul $AX0.L, $AX0.H - 02ec 9400 mulac $AX0.L, $AX0.H, $ACC0 - 02ed 00fe 034c sr @0x034c, $AC0.M - 02ef 00fc 034d sr @0x034d, $AC0.L - 02f1 02bf 00cc call 0x00cc - 02f3 00da 0400 lr $AX0.H, @0x0400 - 02f5 8600 tstaxh $AX0.H - 02f6 0295 041c jz 0x041c - 02f8 00da 0401 lr $AX0.H, @0x0401 - 02fa 8600 tstaxh $AX0.H - 02fb 0294 041c jnz 0x041c - 02fd 00da 0433 lr $AX0.H, @0x0433 - 02ff 00fa 03f8 sr @0x03f8, $AX0.H - 0301 00da 0406 lr $AX0.H, @0x0406 - 0303 8600 tstaxh $AX0.H - 0304 0294 0f0f jnz 0x0f0f - 0306 8100 clr $ACC0 - 0307 00de 0480 lr $AC0.M, @0x0480 - 0309 0609 cmpis $ACC0, #0x09 - 030a 0295 031d jz 0x031d - 030c 0605 cmpis $ACC0, #0x05 - 030d 0295 031d jz 0x031d - 030f 0608 cmpis $ACC0, #0x08 - 0310 0295 0ab6 jz 0x0ab6 - 0312 0610 cmpis $ACC0, #0x10 - 0313 0295 0b33 jz 0x0b33 - 0315 0620 cmpis $ACC0, #0x20 - 0316 0295 0ba4 jz 0x0ba4 - 0318 0621 cmpis $ACC0, #0x21 - 0319 0295 0bac jz 0x0bac - 031b 029f 09a3 jmp 0x09a3 - 031d 00d8 0402 lr $AX0.L, @0x0402 - 031f 8100 clr $ACC0 - 0320 8900 clr $ACC1 - 0321 00dc 0430 lr $AC0.L, @0x0430 - 0323 8d00 set15 - 0324 0950 lris $AX1.L, #0x50 - 0325 a000 mulx $AX0.L, $AX1.L - 0326 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0327 1404 lsl $ACC0, #4 - 0328 8c00 clr15 - 0329 1ffe mrr $AC1.M, $AC0.M - 032a 0083 0580 lri $AR3, #0x0580 - 032c 02bf 0865 call 0x0865 - 032e 029f 0330 jmp 0x0330 - 0330 0080 0580 lri $AR0, #0x0580 - 0332 0081 0520 lri $AR1, #0x0520 - 0334 0099 0000 lri $AX1.L, #0x0000 - 0336 02bf 0e8f call 0x0e8f - 0338 00da 04a8 lr $AX0.H, @0x04a8 - 033a 8600 tstaxh $AX0.H - 033b 0295 0341 jz 0x0341 - 033d 0080 0520 lri $AR0, #0x0520 - 033f 02bf 0d8e call 0x0d8e - 0341 009e 0520 lri $AC0.M, #0x0520 - 0343 00fe 038f sr @0x038f, $AC0.M - 0345 8900 clr $ACC1 - 0346 00df 0484 lr $AC1.M, @0x0484 - 0348 0340 001f andi $AC1.M, #0x001f - 034a b900 tst $ACC1 - 034b 0295 0371 jz 0x0371 - 034d 00de 038f lr $AC0.M, @0x038f - 034f 5c00 sub $ACC0, $ACC1 - 0350 00fe 038f sr @0x038f, $AC0.M - 0352 1c7e mrr $AR3, $AC0.M - 0353 0080 0440 lri $AR0, #0x0440 - 0355 05fe addis $ACC1, #0xfe - 0356 02bf 00e5 call 0x00e5 - 0358 0080 0490 lri $AR0, #0x0490 - 035a 00c1 038f lr $AR1, @0x038f - 035c 8900 clr $ACC1 - 035d 00df 0484 lr $AC1.M, @0x0484 - 035f 0340 001f andi $AC1.M, #0x001f - 0361 02bf 0c57 call 0x0c57 - 0363 00de 038f lr $AC0.M, @0x038f - 0365 0450 addis $ACC0, #0x50 - 0366 1c1e mrr $AR0, $AC0.M - 0367 0083 0440 lri $AR3, #0x0440 - 0369 8900 clr $ACC1 - 036a 00df 0484 lr $AC1.M, @0x0484 - 036c 0340 001f andi $AC1.M, #0x001f - 036e 05fe addis $ACC1, #0xfe - 036f 02bf 00e5 call 0x00e5 - 0371 00de 0484 lr $AC0.M, @0x0484 - 0373 0240 0020 andi $AC0.M, #0x0020 - 0375 0295 0393 jz 0x0393 - 0377 0080 04a4 lri $AR0, #0x04a4 - 0379 00c1 038f lr $AR1, @0x038f - 037b 0082 0454 lri $AR2, #0x0454 - 037d 0083 04a7 lri $AR3, #0x04a7 - 037f 18fa lrrd $AX0.H, @$AR3 - 0380 8600 tstaxh $AX0.H - 0381 0294 0391 jnz 0x0391 - 0383 18fa lrrd $AX0.H, @$AR3 - 0384 8600 tstaxh $AX0.H - 0385 0294 0391 jnz 0x0391 - 0387 18fa lrrd $AX0.H, @$AR3 - 0388 8600 tstaxh $AX0.H - 0389 0294 0391 jnz 0x0391 - 038b 8100 clr $ACC0 - 038c 18fe lrrd $AC0.M, @$AR3 - 038d 0280 7fff cmpi $AC0.M, #0x7fff - 038f 0295 0393 jz 0x0393 - 0391 02bf 0c72 call 0x0c72 - 0393 8100 clr $ACC0 - 0394 00de 042c lr $AC0.M, @0x042c - 0396 b100 tst $ACC0 - 0397 0295 039d jz 0x039d - 0399 02bf 0ddd call 0x0ddd - 039b 029f 0412 jmp 0x0412 - 039d 8100 clr $ACC0 - 039e 1c9e mrr $IX0, $AC0.M - 039f 1cde mrr $IX2, $AC0.M - 03a0 7400 incm $AC0.M - 03a1 1cfe mrr $IX3, $AC0.M - 03a2 8100 clr $ACC0 - 03a3 00de 0407 lr $AC0.M, @0x0407 - 03a5 b100 tst $ACC0 - 03a6 0295 03b5 jz 0x03b5 - 03a8 00c3 038f lr $AR3, @0x038f - 03aa 0007 dar $AR3 - 03ab 0080 0477 lri $AR0, #0x0477 - 03ad 0084 ffff lri $IX0, #0xffff - 03af 0087 ffff lri $IX3, #0xffff - 03b1 199a lrrn $AX0.H, @$AR0 - 03b2 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - 03b3 005e loop $AC0.M - 03b4 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - 03b5 00da 0485 lr $AX0.H, @0x0485 - 03b7 8600 tstaxh $AX0.H - 03b8 0295 03cb jz 0x03cb - 03ba 8900 clr $ACC1 - 03bb 0086 0005 lri $IX2, #0x0005 - 03bd 0082 040a lri $AR2, #0x040a - 03bf 1106 03c3 bloopi #0x06, 0x03c3 - 03c1 18de lrrd $AC0.M, @$AR2 - 03c2 147f lsr $ACC0, #-1 - 03c3 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M - 03c4 b900 tst $ACC1 - 03c5 0294 03cb jnz 0x03cb - 03c7 009a 0001 lri $AX0.H, #0x0001 - 03c9 00fa 0401 sr @0x0401, $AX0.H - 03cb 8f00 set40 - 03cc 0086 0002 lri $IX2, #0x0002 - 03ce 0082 0408 lri $AR2, #0x0408 - 03d0 1106 03fb bloopi #0x06, 0x03fb - 03d2 8100 clr $ACC0 - 03d3 195e lrri $AC0.M, @$AR2 - 03d4 1200 sbclr #0x00 - 03d5 b100 tst $ACC0 - 03d6 0275 ifz - 03d7 1300 sbset #0x00 - 03d8 1c7e mrr $AR3, $AC0.M - 03d9 195e lrri $AC0.M, @$AR2 - 03da 195f lrri $AC1.M, @$AR2 - 03db 5c00 sub $ACC0, $ACC1 - 03dc 14fb asr $ACC0, #-5 - 03dd 1f5e mrr $AX0.H, $AC0.M - 03de 1f1c mrr $AX0.L, $AC0.L - 03df 185e lrr $AC0.M, @$AR2 - 03e0 0240 00ff andi $AC0.M, #0x00ff - 03e2 1f7e mrr $AX1.H, $AC0.M - 03e3 185e lrr $AC0.M, @$AR2 - 03e4 1478 lsr $ACC0, #-8 - 03e5 009c 0000 lri $AC0.L, #0x0000 - 03e7 d100 cmpar $ACC1, $AX0.H - 03e8 0295 03f0 jz 0x03f0 - 03ea 185e lrr $AC0.M, @$AR2 - 03eb 0272 ifg - 03ec 7400 incm $AC0.M - 03ed 0271 ifl - 03ee 7800 decm $AC0.M - 03ef 1a5e srr @$AR2, $AC0.M - 03f0 0006 dar $AR2 - 03f1 00de 038f lr $AC0.M, @0x038f - 03f3 5600 subr $ACC0, $AX1.H - 03f4 029d 03f9 jlz 0x03f9 - 03f6 1c1e mrr $AR0, $AC0.M - 03f7 02bf 0db3 call 0x0db3 - 03f9 0000 nop - 03fa 1b5f srri @$AR2, $AC1.M - 03fb 000a iar $AR2 - 03fc 8e00 set16 - 03fd 8100 clr $ACC0 - 03fe 00de 0407 lr $AC0.M, @0x0407 - 0400 b100 tst $ACC0 - 0401 0295 0412 jz 0x0412 - 0403 00c3 038f lr $AR3, @0x038f - 0405 0087 004f lri $IX3, #0x004f - 0407 001f addarn $AR3, $IX3 - 0408 0080 0477 lri $AR0, #0x0477 - 040a 0084 ffff lri $IX0, #0xffff - 040c 0087 ffff lri $IX3, #0xffff - 040e 19fa lrrn $AX0.H, @$AR3 - 040f 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 0410 005e loop $AC0.M - 0411 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - 0412 00da 0406 lr $AX0.H, @0x0406 - 0414 8600 tstaxh $AX0.H - 0415 0294 041a jnz 0x041a - 0417 8100 clr $ACC0 - 0418 00fe 0404 sr @0x0404, $AC0.M - 041a 02bf 00d5 call 0x00d5 - 041c 00de 0354 lr $AC0.M, @0x0354 - 041e 7400 incm $AC0.M - 041f 00fe 0354 sr @0x0354, $AC0.M - 0421 0e00 lris $AC0.M, #0x00 - 0422 00fe 034e sr @0x034e, $AC0.M - 0424 0e04 lris $AC0.M, #0x04 - 0425 02bf 0792 call 0x0792 - 0427 00de 0355 lr $AC0.M, @0x0355 - 0429 0260 ff00 ori $AC0.M, #0xff00 - 042b 02bf 079c call 0x079c - 042d 02bf 0d14 call 0x0d14 - 042f 02bf 0d26 call 0x0d26 - 0431 02bf 0d7b call 0x0d7b - 0433 00de 0341 lr $AC0.M, @0x0341 - 0435 7800 decm $AC0.M - 0436 00fe 0341 sr @0x0341, $AC0.M - 0438 0080 09a0 lri $AR0, #0x09a0 - 043a 0083 0d00 lri $AR3, #0x0d00 - 043c 0f50 lris $AC1.M, #0x50 - 043d 0098 5a82 lri $AX0.L, #0x5a82 - 043f 02bf 00ff call 0x00ff - 0441 0080 09a0 lri $AR0, #0x09a0 - 0443 0083 0d60 lri $AR3, #0x0d60 - 0445 0f50 lris $AC1.M, #0x50 - 0446 02bf 00ff call 0x00ff - 0448 0083 0d00 lri $AR3, #0x0d00 - 044a 02bf 0dcb call 0x0dcb - 044c 0081 0388 lri $AR1, #0x0388 - 044e 009f 0d00 lri $AC1.M, #0x0d00 - 0450 0080 0050 lri $AR0, #0x0050 - 0452 02bf 0606 call 0x0606 - 0454 0080 0fa0 lri $AR0, #0x0fa0 - 0456 0083 0d60 lri $AR3, #0x0d60 - 0458 0f50 lris $AC1.M, #0x50 - 0459 0098 8000 lri $AX0.L, #0x8000 - 045b 02bf 00ff call 0x00ff - 045d 0083 0d60 lri $AR3, #0x0d60 - 045f 02bf 0dcb call 0x0dcb - 0461 0081 038a lri $AR1, #0x038a - 0463 009f 0d60 lri $AC1.M, #0x0d60 - 0465 0080 0050 lri $AR0, #0x0050 - 0467 02bf 0606 call 0x0606 - 0469 009a 0000 lri $AX0.H, #0x0000 - 046b 0098 00a0 lri $AX0.L, #0x00a0 - 046d 0080 0388 lri $AR0, #0x0388 - 046f 02bf 028d call 0x028d - 0471 0080 038a lri $AR0, #0x038a - 0473 02bf 028d call 0x028d - 0475 02bf 023f call 0x023f - 0477 02bf 0491 call 0x0491 - 0479 0000 nop - 047a 0000 nop - 047b 0080 002b lri $AR0, #0x002b - 047d 029f 072b jmp 0x072b - 047f 0080 0374 lri $AR0, #0x0374 - 0481 0e02 lris $AC0.M, #0x02 - 0482 02bf 0067 call 0x0067 - 0484 00de 0374 lr $AC0.M, @0x0374 - 0486 0240 7fff andi $AC0.M, #0x7fff - 0488 00fe 0374 sr @0x0374, $AC0.M - 048a 00de 0376 lr $AC0.M, @0x0376 - 048c 0240 7fff andi $AC0.M, #0x7fff - 048e 00fe 0376 sr @0x0376, $AC0.M - 0490 02df ret - 0491 00da 0374 lr $AX0.H, @0x0374 - 0493 8600 tstaxh $AX0.H - 0494 02d5 retz - 0495 0083 0f40 lri $AR3, #0x0f40 - 0497 02bf 0dcb call 0x0dcb - 0499 0083 0ca0 lri $AR3, #0x0ca0 - 049b 02bf 0dcb call 0x0dcb - 049d 0081 0374 lri $AR1, #0x0374 - 049f 009f 0f40 lri $AC1.M, #0x0f40 - 04a1 0080 0050 lri $AR0, #0x0050 - 04a3 02bf 0606 call 0x0606 - 04a5 0081 0376 lri $AR1, #0x0376 - 04a7 009f 0ca0 lri $AC1.M, #0x0ca0 - 04a9 0080 0050 lri $AR0, #0x0050 - 04ab 02bf 0606 call 0x0606 - 04ad 009a 0000 lri $AX0.H, #0x0000 - 04af 0098 00a0 lri $AX0.L, #0x00a0 - 04b1 0080 0374 lri $AR0, #0x0374 - 04b3 02bf 028d call 0x028d - 04b5 0080 0376 lri $AR0, #0x0376 - 04b7 02bf 028d call 0x028d - 04b9 02df ret - 04ba 00da 0374 lr $AX0.H, @0x0374 - 04bc 8600 tstaxh $AX0.H - 04bd 02d5 retz - 04be 009f 0be0 lri $AC1.M, #0x0be0 - 04c0 00ff 03a1 sr @0x03a1, $AC1.M - 04c2 00df 03ca lr $AC1.M, @0x03ca - 04c4 00ff 0392 sr @0x0392, $AC1.M - 04c6 00df 03cb lr $AC1.M, @0x03cb - 04c8 00ff 0393 sr @0x0393, $AC1.M - 04ca 009f 03a6 lri $AC1.M, #0x03a6 - 04cc 00ff 03a0 sr @0x03a0, $AC1.M - 04ce 00df 03c9 lr $AC1.M, @0x03c9 - 04d0 00ff 0391 sr @0x0391, $AC1.M - 04d2 00da 03c8 lr $AX0.H, @0x03c8 - 04d4 8600 tstaxh $AX0.H - 04d5 0295 04d9 jz 0x04d9 - 04d7 02bf 0225 call 0x0225 - 04d9 009f 0c40 lri $AC1.M, #0x0c40 - 04db 00ff 03a1 sr @0x03a1, $AC1.M - 04dd 00df 03da lr $AC1.M, @0x03da - 04df 00ff 0392 sr @0x0392, $AC1.M - 04e1 00df 03db lr $AC1.M, @0x03db - 04e3 00ff 0393 sr @0x0393, $AC1.M - 04e5 009f 03a7 lri $AC1.M, #0x03a7 - 04e7 00ff 03a0 sr @0x03a0, $AC1.M - 04e9 00df 03d9 lr $AC1.M, @0x03d9 - 04eb 00ff 0391 sr @0x0391, $AC1.M - 04ed 00da 03d8 lr $AX0.H, @0x03d8 - 04ef 8600 tstaxh $AX0.H - 04f0 0295 04f4 jz 0x04f4 - 04f2 02bf 0225 call 0x0225 - 04f4 02df ret - 04f5 00da 0374 lr $AX0.H, @0x0374 - 04f7 8600 tstaxh $AX0.H - 04f8 02d5 retz - 04f9 00da 03d8 lr $AX0.H, @0x03d8 - 04fb 8600 tstaxh $AX0.H - 04fc 02d5 retz - 04fd 0083 0be0 lri $AR3, #0x0be0 - 04ff 0080 0c30 lri $AR0, #0x0c30 - 0501 0f04 lris $AC1.M, #0x04 - 0502 02bf 00ec call 0x00ec - 0504 0083 0c40 lri $AR3, #0x0c40 - 0506 0080 0c90 lri $AR0, #0x0c90 - 0508 0f04 lris $AC1.M, #0x04 - 0509 02bf 00ec call 0x00ec - 050b 00df 03ca lr $AC1.M, @0x03ca - 050d 00ff 0392 sr @0x0392, $AC1.M - 050f 00df 03cb lr $AC1.M, @0x03cb - 0511 00ff 0393 sr @0x0393, $AC1.M - 0513 00df 03a6 lr $AC1.M, @0x03a6 - 0515 7500 incm $AC1.M - 0516 1f5f mrr $AX0.H, $AC1.M - 0517 009f 0be8 lri $AC1.M, #0x0be8 - 0519 02bf 016c call 0x016c - 051b 00df 03da lr $AC1.M, @0x03da - 051d 00ff 0392 sr @0x0392, $AC1.M - 051f 00df 03db lr $AC1.M, @0x03db - 0521 00ff 0393 sr @0x0393, $AC1.M - 0523 00df 03a7 lr $AC1.M, @0x03a7 - 0525 7500 incm $AC1.M - 0526 1f5f mrr $AX0.H, $AC1.M - 0527 009f 0c48 lri $AC1.M, #0x0c48 - 0529 02bf 016c call 0x016c - 052b 00de 03c8 lr $AC0.M, @0x03c8 - 052d 02a0 0001 andf $AC0.M, #0x0001 - 052f 029d 0538 jlz 0x0538 - 0531 0080 03d0 lri $AR0, #0x03d0 - 0533 0e08 lris $AC0.M, #0x08 - 0534 0081 0be0 lri $AR1, #0x0be0 - 0536 02bf 0c38 call 0x0c38 - 0538 00de 03d8 lr $AC0.M, @0x03d8 - 053a 02a0 0001 andf $AC0.M, #0x0001 - 053c 029d 0545 jlz 0x0545 - 053e 0080 03e0 lri $AR0, #0x03e0 - 0540 0e08 lris $AC0.M, #0x08 - 0541 0081 0c40 lri $AR1, #0x0c40 - 0543 02bf 0c38 call 0x0c38 - 0545 0f50 lris $AC1.M, #0x50 - 0546 0080 0be0 lri $AR0, #0x0be0 - 0548 0083 0f40 lri $AR3, #0x0f40 - 054a 00d8 03cd lr $AX0.L, @0x03cd - 054c 02bf 00ff call 0x00ff - 054e 0f50 lris $AC1.M, #0x50 - 054f 0080 0c40 lri $AR0, #0x0c40 - 0551 0083 0ca0 lri $AR3, #0x0ca0 - 0553 00d8 03df lr $AX0.L, @0x03df - 0555 02bf 00ff call 0x00ff - 0557 00de 03c8 lr $AC0.M, @0x03c8 - 0559 02a0 0002 andf $AC0.M, #0x0002 - 055b 029d 0564 jlz 0x0564 - 055d 0080 03d0 lri $AR0, #0x03d0 - 055f 0e08 lris $AC0.M, #0x08 - 0560 0081 0be0 lri $AR1, #0x0be0 - 0562 02bf 0c38 call 0x0c38 - 0564 00de 03d8 lr $AC0.M, @0x03d8 - 0566 02a0 0002 andf $AC0.M, #0x0002 - 0568 029d 0571 jlz 0x0571 - 056a 0080 03e0 lri $AR0, #0x03e0 - 056c 0e08 lris $AC0.M, #0x08 - 056d 0081 0c40 lri $AR1, #0x0c40 - 056f 02bf 0c38 call 0x0c38 - 0571 02df ret - 0572 0080 0346 lri $AR0, #0x0346 - 0574 02bf 0065 call 0x0065 - 0576 02bf 0065 call 0x0065 - 0578 0081 0346 lri $AR1, #0x0346 - 057a 193e lrri $AC0.M, @$AR1 - 057b 193c lrri $AC0.L, @$AR1 - 057c 009f 0400 lri $AC1.M, #0x0400 - 057e 00c0 0345 lr $AR0, @0x0345 - 0580 02bf 05fb call 0x05fb - 0582 0081 0348 lri $AR1, #0x0348 - 0584 193e lrri $AC0.M, @$AR1 - 0585 193c lrri $AC0.L, @$AR1 - 0586 009f 0800 lri $AC1.M, #0x0800 - 0588 00c0 0345 lr $AR0, @0x0345 - 058a 02bf 05fb call 0x05fb - 058c 0081 0346 lri $AR1, #0x0346 - 058e 193e lrri $AC0.M, @$AR1 - 058f 193c lrri $AC0.L, @$AR1 - 0590 009f 0800 lri $AC1.M, #0x0800 - 0592 00c0 0345 lr $AR0, @0x0345 - 0594 02bf 0608 call 0x0608 - 0596 0081 0348 lri $AR1, #0x0348 - 0598 193e lrri $AC0.M, @$AR1 - 0599 193c lrri $AC0.L, @$AR1 - 059a 009f 0400 lri $AC1.M, #0x0400 - 059c 00c0 0345 lr $AR0, @0x0345 - 059e 02bf 0608 call 0x0608 - 05a0 029f 0041 jmp 0x0041 - 05a2 0080 0346 lri $AR0, #0x0346 - 05a4 02bf 0065 call 0x0065 - 05a6 02bf 0065 call 0x0065 - 05a8 0081 0346 lri $AR1, #0x0346 - 05aa 193e lrri $AC0.M, @$AR1 - 05ab 193c lrri $AC0.L, @$AR1 - 05ac 009f 0400 lri $AC1.M, #0x0400 - 05ae 00c0 0345 lr $AR0, @0x0345 - 05b0 02bf 05fb call 0x05fb - 05b2 0081 0348 lri $AR1, #0x0348 - 05b4 193e lrri $AC0.M, @$AR1 - 05b5 193c lrri $AC0.L, @$AR1 - 05b6 009f 0400 lri $AC1.M, #0x0400 - 05b8 00c0 0345 lr $AR0, @0x0345 - 05ba 02bf 0608 call 0x0608 - 05bc 029f 0041 jmp 0x0041 - 05be 0080 0346 lri $AR0, #0x0346 - 05c0 02bf 0065 call 0x0065 - 05c2 02bf 0065 call 0x0065 - 05c4 0081 0346 lri $AR1, #0x0346 - 05c6 193e lrri $AC0.M, @$AR1 - 05c7 193c lrri $AC0.L, @$AR1 - 05c8 009f 0400 lri $AC1.M, #0x0400 - 05ca 00c0 0344 lr $AR0, @0x0344 - 05cc 02bf 05fb call 0x05fb - 05ce 0081 0348 lri $AR1, #0x0348 - 05d0 193e lrri $AC0.M, @$AR1 - 05d1 193c lrri $AC0.L, @$AR1 - 05d2 009f 0800 lri $AC1.M, #0x0800 - 05d4 00c0 0344 lr $AR0, @0x0344 - 05d6 02bf 05fb call 0x05fb - 05d8 0080 0400 lri $AR0, #0x0400 - 05da 0083 0800 lri $AR3, #0x0800 - 05dc 0084 0000 lri $IX0, #0x0000 - 05de 00da 0345 lr $AX0.H, @0x0345 - 05e0 00df 0344 lr $AC1.M, @0x0344 - 05e2 8f00 set40 - 05e3 197b lrri $AX1.H, @$AR3 - 05e4 b800 mulx $AX0.H, $AX1.H - 05e5 197b lrri $AX1.H, @$AR3 - 05e6 007f 05eb bloop $AC1.M, 0x05eb - 05e8 199e lrrn $AC0.M, @$AR0 - 05e9 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 05ea 80b2 nx'sl : $AC0.M, $AX1.H - 05eb 0000 nop - 05ec 8e00 set16 - 05ed 0081 0346 lri $AR1, #0x0346 - 05ef 193e lrri $AC0.M, @$AR1 - 05f0 193c lrri $AC0.L, @$AR1 - 05f1 009f 0400 lri $AC1.M, #0x0400 - 05f3 00c0 0344 lr $AR0, @0x0344 - 05f5 02bf 0608 call 0x0608 - 05f7 029f 0041 jmp 0x0041 - 05f9 193e lrri $AC0.M, @$AR1 - 05fa 193c lrri $AC0.L, @$AR1 - 05fb 2fcd srs @DSPA, $AC1.M - 05fc 0f00 lris $AC1.M, #0x00 - 05fd 2fc9 srs @DSCR, $AC1.M - 05fe 2ece srs @DSMAH, $AC0.M - 05ff 2ccf srs @DSMAL, $AC0.L - 0600 1fe0 mrr $AC1.M, $AR0 - 0601 1501 lsl $ACC1, #1 - 0602 2fcb srs @DSBL, $AC1.M - 0603 02bf 060c call 0x060c - 0605 02df ret - 0606 193e lrri $AC0.M, @$AR1 - 0607 193c lrri $AC0.L, @$AR1 - 0608 2fcd srs @DSPA, $AC1.M - 0609 0f01 lris $AC1.M, #0x01 - 060a 029f 05fd jmp 0x05fd - 060c 26c9 lrs $AC0.M, @DSCR - 060d 02a0 0004 andf $AC0.M, #0x0004 - 060f 029c 060c jlnz 0x060c - 0611 02df ret - 0612 193e lrri $AC0.M, @$AR1 - 0613 193c lrri $AC0.L, @$AR1 - 0614 00ff ffcd sr @DSPA, $AC1.M - 0616 0f00 lris $AC1.M, #0x00 - 0617 00ff ffc9 sr @DSCR, $AC1.M - 0619 00fe ffce sr @DSMAH, $AC0.M - 061b 00fc ffcf sr @DSMAL, $AC0.L - 061d 1fe0 mrr $AC1.M, $AR0 - 061e 1501 lsl $ACC1, #1 - 061f 00ff ffcb sr @DSBL, $AC1.M - 0621 02df ret - 0622 00de ffc9 lr $AC0.M, @DSCR - 0624 02a0 0004 andf $AC0.M, #0x0004 - 0626 029c 0622 jlnz 0x0622 - 0628 02df ret - 0629 0080 0346 lri $AR0, #0x0346 - 062b 02bf 0065 call 0x0065 - 062d 02bf 0065 call 0x0065 - 062f 0081 0346 lri $AR1, #0x0346 - 0631 00df 0349 lr $AC1.M, @0x0349 - 0633 0340 ffff andi $AC1.M, #0xffff - 0635 00c0 0345 lr $AR0, @0x0345 - 0637 02bf 05f9 call 0x05f9 - 0639 029f 0041 jmp 0x0041 - 063b 0080 0346 lri $AR0, #0x0346 - 063d 02bf 0065 call 0x0065 - 063f 02bf 0065 call 0x0065 - 0641 0081 0346 lri $AR1, #0x0346 - 0643 00df 0349 lr $AC1.M, @0x0349 - 0645 0340 ffff andi $AC1.M, #0xffff - 0647 00c0 0345 lr $AR0, @0x0345 - 0649 02bf 0606 call 0x0606 - 064b 029f 0041 jmp 0x0041 - 064d 0092 00ff lri $CR, #0x00ff - 064f 009e ffff lri $AC0.M, #0xffff - 0651 2ed4 srs @ACSAH, $AC0.M - 0652 2ed5 srs @ACSAL, $AC0.M - 0653 2ed6 srs @ACEAH, $AC0.M - 0654 2ed7 srs @ACEAL, $AC0.M - 0655 02df ret - 0656 00ff ffd1 sr @SampleFormat, $AC1.M - 0658 0340 0003 andi $AC1.M, #0x0003 - 065a 7900 decm $AC1.M - 065b 02ca lsrn - 065c 00df 037d lr $AC1.M, @0x037d - 065e 00dd 037e lr $AC1.L, @0x037e - 0660 4c00 add $ACC0, $ACC1 - 0661 00fe ffd8 sr @ACCAH, $AC0.M - 0663 00fc ffd9 sr @ACCAL, $AC0.L - 0665 02df ret - 0666 1fc3 mrr $AC0.M, $AR3 - 0667 043f addis $ACC0, #0x3f - 0668 0240 fff0 andi $AC0.M, #0xfff0 - 066a 00fe ffcd sr @DSPA, $AC0.M - 066c 1c1a mrr $AR0, $AX0.H - 066d 00da 037f lr $AX0.H, @0x037f - 066f 4400 addr $ACC0, $AX0.H - 0670 1f40 mrr $AX0.H, $AR0 - 0671 1c1e mrr $AR0, $AC0.M - 0672 1fda mrr $AC0.M, $AX0.H - 0673 041f addis $ACC0, #0x1f - 0674 0240 fff0 andi $AC0.M, #0xfff0 - 0676 1401 lsl $ACC0, #1 - 0677 00fe ffcb sr @DSBL, $AC0.M - 0679 00de ffc9 lr $AC0.M, @DSCR - 067b 02a0 0004 andf $AC0.M, #0x0004 - 067d 029c 0679 jlnz 0x0679 - 067f 007a 0682 bloop $AX0.H, 0x0682 - 0681 191e lrri $AC0.M, @$AR0 - 0682 1b7e srri @$AR3, $AC0.M - 0683 02df ret - 0684 8900 clr $ACC1 - 0685 1ffc mrr $AC1.M, $AC0.L - 0686 0340 001f andi $AC1.M, #0x001f - 0688 00ff 037f sr @0x037f, $AC1.M - 068a 1ffc mrr $AC1.M, $AC0.L - 068b 0340 ffe0 andi $AC1.M, #0xffe0 - 068d 1f9f mrr $AC0.L, $AC1.M - 068e 00df 037d lr $AC1.M, @0x037d - 0690 00dd 037e lr $AC1.L, @0x037e - 0692 4c00 add $ACC0, $ACC1 - 0693 00fe ffce sr @DSMAH, $AC0.M - 0695 00fc ffcf sr @DSMAL, $AC0.L - 0697 0f00 lris $AC1.M, #0x00 - 0698 00ff ffc9 sr @DSCR, $AC1.M - 069a 02df ret - 069b 00df 037f lr $AC1.M, @0x037f - 069d 157f lsr $ACC1, #-1 - 069e 00ff 037f sr @0x037f, $AC1.M - 06a0 02df ret - 06a1 8600 tstaxh $AX0.H - 06a2 02d5 retz - 06a3 1f1a mrr $AX0.L, $AX0.H - 06a4 009e 0780 lri $AC0.M, #0x0780 - 06a6 00fe ffcd sr @DSPA, $AC0.M - 06a8 1fda mrr $AC0.M, $AX0.H - 06a9 043f addis $ACC0, #0x3f - 06aa 0240 ffe0 andi $AC0.M, #0xffe0 - 06ac 00fe ffcb sr @DSBL, $AC0.M - 06ae 00de ffc9 lr $AC0.M, @DSCR - 06b0 02a0 0004 andf $AC0.M, #0x0004 - 06b2 029c 06ae jlnz 0x06ae - 06b4 8100 clr $ACC0 - 06b5 00de 037f lr $AC0.M, @0x037f - 06b7 147f lsr $ACC0, #-1 - 06b8 0200 0780 addi $AC0.M, #0x0780 - 06ba 1c1e mrr $AR0, $AC0.M - 06bb 00de 037f lr $AC0.M, @0x037f - 06bd 02a0 0001 andf $AC0.M, #0x0001 - 06bf 029d 06c8 jlz 0x06c8 - 06c1 8100 clr $ACC0 - 06c2 191e lrri $AC0.M, @$AR0 - 06c3 1488 asl $ACC0, #8 - 06c4 1b7e srri @$AR3, $AC0.M - 06c5 1fda mrr $AC0.M, $AX0.H - 06c6 7800 decm $AC0.M - 06c7 1f5e mrr $AX0.H, $AC0.M - 06c8 8100 clr $ACC0 - 06c9 1fda mrr $AC0.M, $AX0.H - 06ca 147f lsr $ACC0, #-1 - 06cb 007e 06d4 bloop $AC0.M, 0x06d4 - 06cd 8100 clr $ACC0 - 06ce 181e lrr $AC0.M, @$AR0 - 06cf 0240 ff00 andi $AC0.M, #0xff00 - 06d1 1b7e srri @$AR3, $AC0.M - 06d2 191e lrri $AC0.M, @$AR0 - 06d3 1488 asl $ACC0, #8 - 06d4 1b7e srri @$AR3, $AC0.M - 06d5 1fda mrr $AC0.M, $AX0.H - 06d6 1f58 mrr $AX0.H, $AX0.L - 06d7 02a0 0001 andf $AC0.M, #0x0001 - 06d9 02dd retlz - 06da 8100 clr $ACC0 - 06db 181e lrr $AC0.M, @$AR0 - 06dc 0240 ff00 andi $AC0.M, #0xff00 - 06de 1b7e srri @$AR3, $AC0.M - 06df 02df ret - 06e0 1205 sbclr #0x05 - 06e1 8e00 set16 - 06e2 00f0 03fd sr @0x03fd, $AC0.H - 06e4 00fc 03ff sr @0x03ff, $AC0.L - 06e6 f400 lsr16 $ACC0 - 06e7 00fc 03fe sr @0x03fe, $AC0.L - 06e9 00fa 03fa sr @0x03fa, $AX0.H - 06eb 8100 clr $ACC0 - 06ec 00de fffe lr $AC0.M, @CMBH - 06ee 02c0 8000 andcf $AC0.M, #0x8000 - 06f0 029c 07e1 jlnz 0x07e1 - 06f2 00da ffff lr $AX0.H, @CMBL - 06f4 8600 tstaxh $AX0.H - 06f5 0294 07ba jnz 0x07ba - 06f7 00de fffe lr $AC0.M, @CMBH - 06f9 02c0 8000 andcf $AC0.M, #0x8000 - 06fb 029c 06f7 jlnz 0x06f7 - 06fd 0240 000f andi $AC0.M, #0x000f - 06ff 1f5e mrr $AX0.H, $AC0.M - 0700 7400 incm $AC0.M - 0701 0c00 lris $AC0.L, #0x00 - 0702 1404 lsl $ACC0, #4 - 0703 00fe 034e sr @0x034e, $AC0.M - 0705 1fda mrr $AC0.M, $AX0.H - 0706 1f40 mrr $AX0.H, $AR0 - 0707 0200 04fc addi $AC0.M, #0x04fc - 0709 1c1e mrr $AR0, $AC0.M - 070a 00de ffff lr $AC0.M, @CMBL - 070c 1a1e srr @$AR0, $AC0.M - 070d 1c1a mrr $AR0, $AX0.H - 070e 00de 03fe lr $AC0.M, @0x03fe - 0710 00dc 03ff lr $AC0.L, @0x03ff - 0712 00d0 03fd lr $AC0.H, @0x03fd - 0714 00da 03fa lr $AX0.H, @0x03fa - 0716 1305 sbset #0x05 - 0717 02ff rti - 0718 009a 0002 lri $AX0.H, #0x0002 - 071a 00fa 03a3 sr @0x03a3, $AX0.H - 071c 00e0 03f9 sr @0x03f9, $AR0 - 071e 02bf 07a4 call 0x07a4 - 0720 16fc dcd1 si @DMBH, #0xdcd1 - 0722 16fd 0002 si @DMBL, #0x0002 - 0724 16fb 0001 si @DIRQ, #0x0001 - 0726 0021 halt - 0727 073f cmpis $ACC1, #0x3f - 0728 0740 cmpis $ACC1, #0x40 - 0729 0780 cmpis $ACC1, #0x80 - 072a 0783 cmpis $ACC1, #0x83 - 072b 00e0 03f9 sr @0x03f9, $AR0 - 072d 009e 0005 lri $AC0.M, #0x0005 - 072f 02bf 0792 call 0x0792 - 0731 8e00 set16 - 0732 8100 clr $ACC0 - 0733 8900 clr $ACC1 - 0734 02bf 0786 call 0x0786 - 0736 27ff lrs $AC1.M, @CMBL - 0737 009e 0727 lri $AC0.M, #0x0727 - 0739 4c00 add $ACC0, $ACC1 - 073a 1c7e mrr $AR3, $AC0.M - 073b 0313 ilrr $AC1.M, @$AR3 - 073c 1c7f mrr $AR3, $AC1.M - 073d 176f jmpr $AR3 - 073e 0021 halt - 073f 0021 halt - 0740 009a 0002 lri $AX0.H, #0x0002 - 0742 00fa 03a3 sr @0x03a3, $AX0.H - 0744 8100 clr $ACC0 - 0745 8900 clr $ACC1 - 0746 02bf 0786 call 0x0786 - 0748 24ff lrs $AC0.L, @CMBL - 0749 02bf 078c call 0x078c - 074b 25ff lrs $AC1.L, @CMBL - 074c 02bf 078c call 0x078c - 074e 27ff lrs $AC1.M, @CMBL - 074f 2ece srs @DSMAH, $AC0.M - 0750 2ccf srs @DSMAL, $AC0.L - 0751 16c9 0001 si @DSCR, #0x0001 - 0753 2fcd srs @DSPA, $AC1.M - 0754 2dcb srs @DSBL, $AC1.L - 0755 8100 clr $ACC0 - 0756 8900 clr $ACC1 - 0757 02bf 0786 call 0x0786 - 0759 24ff lrs $AC0.L, @CMBL - 075a 1c9e mrr $IX0, $AC0.M - 075b 1cbc mrr $IX1, $AC0.L - 075c 02bf 078c call 0x078c - 075e 25ff lrs $AC1.L, @CMBL - 075f 02bf 078c call 0x078c - 0761 27ff lrs $AC1.M, @CMBL - 0762 1cdf mrr $IX2, $AC1.M - 0763 1cfd mrr $IX3, $AC1.L - 0764 8100 clr $ACC0 - 0765 02bf 0786 call 0x0786 - 0767 26ff lrs $AC0.M, @CMBL - 0768 1c1e mrr $AR0, $AC0.M - 0769 8900 clr $ACC1 - 076a 02bf 078c call 0x078c - 076c 20ff lrs $AX0.L, @CMBL - 076d 1f5f mrr $AX0.H, $AC1.M - 076e 02bf 0786 call 0x0786 - 0770 21ff lrs $AX1.L, @CMBL - 0771 02bf 0786 call 0x0786 - 0773 23ff lrs $AX1.H, @CMBL - 0774 26c9 lrs $AC0.M, @DSCR - 0775 02a0 0004 andf $AC0.M, #0x0004 - 0777 029c 0774 jlnz 0x0774 - 0779 1206 sbclr #0x06 - 077a 1203 sbclr #0x03 - 077b 1204 sbclr #0x04 - 077c 1205 sbclr #0x05 - 077d 029f 80b5 jmp 0x80b5 - 077f 0021 halt - 0780 029f 8000 jmp 0x8000 - 0782 0021 halt - 0783 00c0 03f9 lr $AR0, @0x03f9 - 0785 170f jmpr $AR0 - 0786 26fe lrs $AC0.M, @CMBH - 0787 02c0 8000 andcf $AC0.M, #0x8000 - 0789 029c 0786 jlnz 0x0786 - 078b 02df ret - 078c 27fe lrs $AC1.M, @CMBH - 078d 03c0 8000 andcf $AC1.M, #0x8000 - 078f 029c 078c jlnz 0x078c - 0791 02df ret - 0792 02bf 07aa call 0x07aa - 0794 16fc dcd1 si @DMBH, #0xdcd1 - 0796 2efd srs @DMBL, $AC0.M - 0797 16fb 0001 si @DIRQ, #0x0001 - 0799 02bf 07aa call 0x07aa - 079b 02df ret - 079c 02bf 07aa call 0x07aa - 079e 16fc f355 si @DMBH, #0xf355 - 07a0 2efd srs @DMBL, $AC0.M - 07a1 02bf 07aa call 0x07aa - 07a3 02df ret - 07a4 26fc lrs $AC0.M, @DMBH - 07a5 02c0 8000 andcf $AC0.M, #0x8000 - 07a7 029d 07a4 jlz 0x07a4 - 07a9 02df ret - 07aa 27fc lrs $AC1.M, @DMBH - 07ab 03c0 8000 andcf $AC1.M, #0x8000 - 07ad 029d 07aa jlz 0x07aa - 07af 02df ret - 07b0 009a 0280 lri $AX0.H, #0x0280 - 07b2 00fa 0350 sr @0x0350, $AX0.H - 07b4 00fa 0351 sr @0x0351, $AX0.H - 07b6 0a00 lris $AX0.H, #0x00 - 07b7 00fa 0352 sr @0x0352, $AX0.H - 07b9 02df ret - 07ba 00e0 03fb sr @0x03fb, $AR0 - 07bc 00e8 03fc sr @0x03fc, $WR0 - 07be 00c0 0350 lr $AR0, @0x0350 - 07c0 0088 002f lri $WR0, #0x002f - 07c2 1b1a srri @$AR0, $AX0.H - 07c3 00de fffe lr $AC0.M, @CMBH - 07c5 02c0 8000 andcf $AC0.M, #0x8000 - 07c7 029c 07c3 jlnz 0x07c3 - 07c9 00dc ffff lr $AC0.L, @CMBL - 07cb 1b1e srri @$AR0, $AC0.M - 07cc 1b1c srri @$AR0, $AC0.L - 07cd 1fda mrr $AC0.M, $AX0.H - 07ce 7800 decm $AC0.M - 07cf 1f5e mrr $AX0.H, $AC0.M - 07d0 8600 tstaxh $AX0.H - 07d1 0294 07c3 jnz 0x07c3 - 07d3 8100 clr $ACC0 - 07d4 00de 0352 lr $AC0.M, @0x0352 - 07d6 7400 incm $AC0.M - 07d7 00fe 0352 sr @0x0352, $AC0.M - 07d9 00e0 0350 sr @0x0350, $AR0 - 07db 00c0 03fb lr $AR0, @0x03fb - 07dd 00c8 03fc lr $WR0, @0x03fc - 07df 029f 070e jmp 0x070e - 07e1 00e0 03fb sr @0x03fb, $AR0 - 07e3 00e8 03fc sr @0x03fc, $WR0 - 07e5 00c0 0350 lr $AR0, @0x0350 - 07e7 0088 002f lri $WR0, #0x002f - 07e9 0a00 lris $AX0.H, #0x00 - 07ea 1b1a srri @$AR0, $AX0.H - 07eb 029f 07d3 jmp 0x07d3 - 07ed 00c0 0351 lr $AR0, @0x0351 - 07ef 0088 002f lri $WR0, #0x002f - 07f1 00da 0352 lr $AX0.H, @0x0352 - 07f3 8600 tstaxh $AX0.H - 07f4 0295 0815 jz 0x0815 - 07f6 1205 sbclr #0x05 - 07f7 00da 0352 lr $AX0.H, @0x0352 - 07f9 1fda mrr $AC0.M, $AX0.H - 07fa 7800 decm $AC0.M - 07fb 00fe 0352 sr @0x0352, $AC0.M - 07fd 1305 sbset #0x05 - 07fe 0081 0356 lri $AR1, #0x0356 - 0800 191e lrri $AC0.M, @$AR0 - 0801 02c0 8000 andcf $AC0.M, #0x8000 - 0803 029d 0819 jlz 0x0819 - 0805 1f5e mrr $AX0.H, $AC0.M - 0806 8600 tstaxh $AX0.H - 0807 0295 081d jz 0x081d - 0809 007a 080e bloop $AX0.H, 0x080e - 080b 191e lrri $AC0.M, @$AR0 - 080c 1b3e srri @$AR1, $AC0.M - 080d 191e lrri $AC0.M, @$AR0 - 080e 1b3e srri @$AR1, $AC0.M - 080f 00e0 0351 sr @0x0351, $AR0 - 0811 0088 ffff lri $WR0, #0xffff - 0813 029f 002d jmp 0x002d - 0815 0088 ffff lri $WR0, #0xffff - 0817 029f 002b jmp 0x002b - 0819 00e0 0351 sr @0x0351, $AR0 - 081b 029f 07f1 jmp 0x07f1 - 081d 0080 07ed lri $AR0, #0x07ed - 081f 029f 0718 jmp 0x0718 - 0821 8100 clr $ACC0 - 0822 0e10 lris $AC0.M, #0x10 - 0823 2232 lrs $AX0.H, @0x0032 - 0824 8600 tstaxh $AX0.H - 0825 02d5 retz - 0826 5400 subr $ACC0, $AX0.H - 0827 0200 0458 addi $AC0.M, #0x0458 - 0829 1c1e mrr $AR0, $AC0.M - 082a 1fda mrr $AC0.M, $AX0.H - 082b 04fe addis $ACC0, #0xfe - 082c 1f1e mrr $AX0.L, $AC0.M - 082d 191e lrri $AC0.M, @$AR0 - 082e 0291 0834 jl 0x0834 - 0830 191a lrri $AX0.H, @$AR0 - 0831 0058 loop $AX0.L - 0832 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0833 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 0834 1b7e srri @$AR3, $AC0.M - 0835 02df ret - 0836 02bf 0821 call 0x0821 - 0838 8100 clr $ACC0 - 0839 2632 lrs $AC0.M, @0x0032 - 083a 5c00 sub $ACC0, $ACC1 - 083b 2e32 srs @0x0032, $AC0.M - 083c 0092 00ff lri $CR, #0x00ff - 083e 02df ret - 083f 00de 04fb lr $AC0.M, @0x04fb - 0841 7400 incm $AC0.M - 0842 00fe 04fb sr @0x04fb, $AC0.M - 0844 8100 clr $ACC0 - 0845 2e32 srs @0x0032, $AC0.M - 0846 2e66 srs @0x0066, $AC0.M - 0847 2e67 srs @0x0067, $AC0.M - 0848 268a lrs $AC0.M, @0xff8a - 0849 248b lrs $AC0.L, @0xff8b - 084a 2e3a srs @0x003a, $AC0.M - 084b 2c3b srs @0x003b, $AC0.L - 084c 268c lrs $AC0.M, @0xff8c - 084d 248d lrs $AC0.L, @0xff8d - 084e 2e38 srs @0x0038, $AC0.M - 084f 2c39 srs @0x0039, $AC0.L - 0850 02df ret - 0851 8100 clr $ACC0 - 0852 2689 lrs $AC0.M, @0xff89 - 0853 0240 000f andi $AC0.M, #0x000f - 0855 1f5e mrr $AX0.H, $AC0.M - 0856 8100 clr $ACC0 - 0857 0e10 lris $AC0.M, #0x10 - 0858 5400 subr $ACC0, $AX0.H - 0859 2e32 srs @0x0032, $AC0.M - 085a 268a lrs $AC0.M, @0xff8a - 085b 248b lrs $AC0.L, @0xff8b - 085c 2288 lrs $AX0.H, @0xff88 - 085d 2089 lrs $AX0.L, @0xff89 - 085e 5800 subax $ACC0, $AX0.L - 085f 0a00 lris $AX0.H, #0x00 - 0860 2032 lrs $AX0.L, @0x0032 - 0861 5800 subax $ACC0, $AX0.L - 0862 2e3a srs @0x003a, $AC0.M - 0863 2c3b srs @0x003b, $AC0.L - 0864 02df ret - 0865 0092 0004 lri $CR, #0x0004 - 0867 8100 clr $ACC0 - 0868 2604 lrs $AC0.M, @0x0004 - 0869 b100 tst $ACC0 - 086a 02b4 083f callnz 0x083f - 086c 8100 clr $ACC0 - 086d 2601 lrs $AC0.M, @0x0001 - 086e b100 tst $ACC0 - 086f 0294 090d jnz 0x090d - 0871 2232 lrs $AX0.H, @0x0032 - 0872 c900 cmpar $ACC0, $AX1.H - 0873 0293 0836 jle 0x0836 - 0875 5500 subr $ACC1, $AX0.H - 0876 02bf 0821 call 0x0821 - 0878 223a lrs $AX0.H, @0x003a - 0879 8600 tstaxh $AX0.H - 087a 0294 0881 jnz 0x0881 - 087c 8100 clr $ACC0 - 087d 263b lrs $AC0.M, @0x003b - 087e 8200 cmp - 087f 0291 08d3 jl 0x08d3 - 0881 8100 clr $ACC0 - 0882 1fdf mrr $AC0.M, $AC1.M - 0883 040f addis $ACC0, #0x0f - 0884 147c lsr $ACC0, #-4 - 0885 1f7e mrr $AX1.H, $AC0.M - 0886 0c00 lris $AC0.L, #0x00 - 0887 1404 lsl $ACC0, #4 - 0888 1f1e mrr $AX0.L, $AC0.M - 0889 0a00 lris $AX0.H, #0x00 - 088a 8100 clr $ACC0 - 088b 263a lrs $AC0.M, @0x003a - 088c 243b lrs $AC0.L, @0x003b - 088d 5800 subax $ACC0, $AX0.L - 088e 0290 0899 jge 0x0899 - 0890 8100 clr $ACC0 - 0891 263b lrs $AC0.M, @0x003b - 0892 5c00 sub $ACC0, $ACC1 - 0893 2e32 srs @0x0032, $AC0.M - 0894 8100 clr $ACC0 - 0895 2e3a srs @0x003a, $AC0.M - 0896 2e3b srs @0x003b, $AC0.M - 0897 029f 089f jmp 0x089f - 0899 2e3a srs @0x003a, $AC0.M - 089a 2c3b srs @0x003b, $AC0.L - 089b 0c00 lris $AC0.L, #0x00 - 089c 1fd8 mrr $AC0.M, $AX0.L - 089d 5c00 sub $ACC0, $ACC1 - 089e 2e32 srs @0x0032, $AC0.M - 089f 8100 clr $ACC0 - 08a0 1fdb mrr $AC0.M, $AX1.H - 08a1 02bf 0913 call 0x0913 - 08a3 2232 lrs $AX0.H, @0x0032 - 08a4 8600 tstaxh $AX0.H - 08a5 0295 08d0 jz 0x08d0 - 08a7 0a10 lris $AX0.H, #0x10 - 08a8 8100 clr $ACC0 - 08a9 1fc3 mrr $AC0.M, $AR3 - 08aa 5400 subr $ACC0, $AX0.H - 08ab 1c7e mrr $AR3, $AC0.M - 08ac 0080 0458 lri $AR0, #0x0458 - 08ae 197e lrri $AC0.M, @$AR3 - 08af 197a lrri $AX0.H, @$AR3 - 08b0 100e loopi #0x0e - 08b1 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H - 08b2 1b1e srri @$AR0, $AC0.M - 08b3 1b1a srri @$AR0, $AX0.H - 08b4 8100 clr $ACC0 - 08b5 263a lrs $AC0.M, @0x003a - 08b6 243b lrs $AC0.L, @0x003b - 08b7 b100 tst $ACC0 - 08b8 0294 08d0 jnz 0x08d0 - 08ba 2232 lrs $AX0.H, @0x0032 - 08bb 8600 tstaxh $AX0.H - 08bc 0295 08d0 jz 0x08d0 - 08be 0080 0467 lri $AR0, #0x0467 - 08c0 8100 clr $ACC0 - 08c1 268b lrs $AC0.M, @0xff8b - 08c2 b100 tst $ACC0 - 08c3 0295 08d0 jz 0x08d0 - 08c5 0200 000f addi $AC0.M, #0x000f - 08c7 0240 000f andi $AC0.M, #0x000f - 08c9 0200 0458 addi $AC0.M, #0x0458 - 08cb 1c7e mrr $AR3, $AC0.M - 08cc 007a 08cf bloop $AX0.H, 0x08cf - 08ce 18fe lrrd $AC0.M, @$AR3 - 08cf 1a9e srrd @$AR0, $AC0.M - 08d0 0092 00ff lri $CR, #0x00ff - 08d2 02df ret - 08d3 b100 tst $ACC0 - 08d4 0295 08e3 jz 0x08e3 - 08d6 5d00 sub $ACC1, $ACC0 - 08d7 040f addis $ACC0, #0x0f - 08d8 147c lsr $ACC0, #-4 - 08d9 0c00 lris $AC0.L, #0x00 - 08da 00e3 0363 sr @0x0363, $AR3 - 08dc 02bf 0913 call 0x0913 - 08de 00de 0363 lr $AC0.M, @0x0363 - 08e0 223b lrs $AX0.H, @0x003b - 08e1 4400 addr $ACC0, $AX0.H - 08e2 1c7e mrr $AR3, $AC0.M - 08e3 8100 clr $ACC0 - 08e4 2681 lrs $AC0.M, @0xff81 - 08e5 b100 tst $ACC0 - 08e6 0295 090b jz 0x090b - 08e8 2380 lrs $AX1.H, @0xff80 - 08e9 2688 lrs $AC0.M, @0xff88 - 08ea 2489 lrs $AC0.L, @0xff89 - 08eb 1408 lsl $ACC0, #8 - 08ec 14f4 asr $ACC0, #-12 - 08ed 2380 lrs $AX1.H, @0xff80 - 08ee 8d00 set15 - 08ef c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - 08f0 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 08f1 8c00 clr15 - 08f2 f000 lsl16 $ACC0 - 08f3 4e00 addp $ACC0 - 08f4 238c lrs $AX1.H, @0xff8c - 08f5 218d lrs $AX1.L, @0xff8d - 08f6 4a00 addax $ACC0, $AX1.L - 08f7 2e38 srs @0x0038, $AC0.M - 08f8 2c39 srs @0x0039, $AC0.L - 08f9 2682 lrs $AC0.M, @0xff82 - 08fa 2e67 srs @0x0067, $AC0.M - 08fb 2683 lrs $AC0.M, @0xff83 - 08fc 2e66 srs @0x0066, $AC0.M - 08fd 00e3 0363 sr @0x0363, $AR3 - 08ff 0083 0458 lri $AR3, #0x0458 - 0901 8100 clr $ACC0 - 0902 0e01 lris $AC0.M, #0x01 - 0903 02bf 0913 call 0x0913 - 0905 00c3 0363 lr $AR3, @0x0363 - 0907 02bf 0851 call 0x0851 - 0909 029f 0871 jmp 0x0871 - 090b 0e01 lris $AC0.M, #0x01 - 090c 2e01 srs @0x0001, $AC0.M - 090d 8100 clr $ACC0 - 090e 005f loop $AC1.M - 090f 1b7e srri @$AR3, $AC0.M - 0910 0092 00ff lri $CR, #0x00ff - 0912 02df ret - 0913 00ff 0360 sr @0x0360, $AC1.M - 0915 00fe 0361 sr @0x0361, $AC0.M - 0917 2638 lrs $AC0.M, @0x0038 - 0918 2439 lrs $AC0.L, @0x0039 - 0919 0f05 lris $AC1.M, #0x05 - 091a 02bf 0656 call 0x0656 - 091c 2638 lrs $AC0.M, @0x0038 - 091d 2439 lrs $AC0.L, @0x0039 - 091e 8900 clr $ACC1 - 091f 00df 0361 lr $AC1.M, @0x0361 - 0921 2280 lrs $AX0.H, @0xff80 - 0922 d000 mulc $AC1.M, $AX0.H - 0923 6f00 movp $ACC1 - 0924 4c00 add $ACC0, $ACC1 - 0925 2e38 srs @0x0038, $AC0.M - 0926 2c39 srs @0x0039, $AC0.L - 0927 8100 clr $ACC0 - 0928 00de 0361 lr $AC0.M, @0x0361 - 092a 007e 0991 bloop $AC0.M, 0x0991 - 092c 0080 ffd3 lri $AR0, #0xffd3 - 092e 0084 0000 lri $IX0, #0x0000 - 0930 199e lrrn $AC0.M, @$AR0 - 0931 8900 clr $ACC1 - 0932 1ffe mrr $AC1.M, $AC0.M - 0933 1401 lsl $ACC0, #1 - 0934 0240 001e andi $AC0.M, #0x001e - 0936 0200 0300 addi $AC0.M, #0x0300 - 0938 1c3e mrr $AR1, $AC0.M - 0939 157c lsr $ACC1, #-4 - 093a 0340 000f andi $AC1.M, #0x000f - 093c 0a11 lris $AX0.H, #0x11 - 093d 5500 subr $ACC1, $AX0.H - 093e 8100 clr $ACC0 - 093f 2680 lrs $AC0.M, @0xff80 - 0940 0605 cmpis $ACC0, #0x05 - 0941 0295 095a jz 0x095a - 0943 009a 00f0 lri $AX0.H, #0x00f0 - 0945 0b0f lris $AX1.H, #0x0f - 0946 0082 0364 lri $AR2, #0x0364 - 0948 1998 lrrn $AX0.L, @$AR0 - 0949 6000 movr $ACC0, $AX0.L - 094a 1107 0951 bloopi #0x07, 0x0951 - 094c 3400 andr $AC0.M, $AX0.H - 094d 1408 lsl $ACC0, #8 - 094e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 094f 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 0950 140c lsl $ACC0, #12 - 0951 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0952 3400 andr $AC0.M, $AX0.H - 0953 1408 lsl $ACC0, #8 - 0954 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0955 3600 andr $AC0.M, $AX1.H - 0956 140c lsl $ACC0, #12 - 0957 1b5e srri @$AR2, $AC0.M - 0958 029f 097a jmp 0x097a - 095a 009a c000 lri $AX0.H, #0xc000 - 095c 0082 0364 lri $AR2, #0x0364 - 095e 1998 lrrn $AX0.L, @$AR0 - 095f 6000 movr $ACC0, $AX0.L - 0960 1103 096d bloopi #0x03, 0x096d - 0962 1408 lsl $ACC0, #8 - 0963 3400 andr $AC0.M, $AX0.H - 0964 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0965 140a lsl $ACC0, #10 - 0966 3400 andr $AC0.M, $AX0.H - 0967 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0968 140c lsl $ACC0, #12 - 0969 3400 andr $AC0.M, $AX0.H - 096a 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 096b 140e lsl $ACC0, #14 - 096c 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 - 096d 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 096e 1408 lsl $ACC0, #8 - 096f 3400 andr $AC0.M, $AX0.H - 0970 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0971 140a lsl $ACC0, #10 - 0972 3400 andr $AC0.M, $AX0.H - 0973 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0974 140c lsl $ACC0, #12 - 0975 3400 andr $AC0.M, $AX0.H - 0976 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0977 140e lsl $ACC0, #14 - 0978 3400 andr $AC0.M, $AX0.H - 0979 1b5e srri @$AR2, $AC0.M - 097a 8f00 set40 - 097b 1f7f mrr $AX1.H, $AC1.M - 097c 2066 lrs $AX0.L, @0x0066 - 097d 2767 lrs $AC1.M, @0x0067 - 097e 193a lrri $AX0.H, @$AR1 - 097f 1939 lrri $AX1.L, @$AR1 - 0980 0080 0364 lri $AR0, #0x0364 - 0982 a000 mulx $AX0.L, $AX1.L - 0983 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - 0984 1108 098d bloopi #0x08, 0x098d - 0986 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0987 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0988 1485 asl $ACC0, #5 - 0989 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 098a 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 098b a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 098c 1585 asl $ACC1, #5 - 098d ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - 098e 2f67 srs @0x0067, $AC1.M - 098f 8e00 set16 - 0990 1ff8 mrr $AC1.M, $AX0.L - 0991 2f66 srs @0x0066, $AC1.M - 0992 8900 clr $ACC1 - 0993 00df 0360 lr $AC1.M, @0x0360 - 0995 02df ret - 0996 b100 tst $ACC0 - 0997 02d5 retz - 0998 04fe addis $ACC0, #0xfe - 0999 1f1e mrr $AX0.L, $AC0.M - 099a 191e lrri $AC0.M, @$AR0 - 099b 0291 09a1 jl 0x09a1 - 099d 191a lrri $AX0.H, @$AR0 - 099e 0058 loop $AX0.L - 099f 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 09a0 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 09a1 1b7e srri @$AR3, $AC0.M - 09a2 02df ret - 09a3 8100 clr $ACC0 - 09a4 1f5e mrr $AX0.H, $AC0.M - 09a5 00d8 0402 lr $AX0.L, @0x0402 - 09a7 00dc 0430 lr $AC0.L, @0x0430 - 09a9 0080 0520 lri $AR0, #0x0520 - 09ab 00df 0480 lr $AC1.M, @0x0480 - 09ad 1501 lsl $ACC1, #1 - 09ae 0340 007e andi $AC1.M, #0x007e - 09b0 0300 09b8 addi $AC1.M, #0x09b8 - 09b2 1c5f mrr $AR2, $AC1.M - 09b3 175f callr $AR2 - 09b4 00fc 0430 sr @0x0430, $AC0.L - 09b6 029f 0338 jmp 0x0338 - 09b8 029f 09d9 jmp 0x09d9 - 09ba 029f 0a14 jmp 0x0a14 - 09bc 029f 09fc jmp 0x09fc - 09be 029f 09e9 jmp 0x09e9 - 09c0 029f 0a22 jmp 0x0a22 - 09c2 029f 09d8 jmp 0x09d8 - 09c4 029f 0a40 jmp 0x0a40 - 09c6 029f 0a43 jmp 0x0a43 - 09c8 029f 09d8 jmp 0x09d8 - 09ca 029f 09d8 jmp 0x09d8 - 09cc 029f 0a61 jmp 0x0a61 - 09ce 029f 0a1a jmp 0x0a1a - 09d0 029f 0a1e jmp 0x0a1e - 09d2 029f 09d8 jmp 0x09d8 - 09d4 029f 09d8 jmp 0x09d8 - 09d6 029f 09d8 jmp 0x09d8 - 09d8 02df ret - 09d9 1401 lsl $ACC0, #1 - 09da 009b c000 lri $AX1.H, #0xc000 - 09dc 0099 4000 lri $AX1.L, #0x4000 - 09de 1150 09e6 bloopi #0x50, 0x09e6 - 09e0 02c0 0001 andcf $AC0.M, #0x0001 - 09e2 027c iflnz - 09e3 1b1b srri @$AR0, $AX1.H - 09e4 027d iflz - 09e5 1b19 srri @$AR0, $AX1.L - 09e6 4800 addax $ACC0, $AX0.L - 09e7 147f lsr $ACC0, #-1 - 09e8 02df ret - 09e9 1402 lsl $ACC0, #2 - 09ea 8900 clr $ACC1 - 09eb 1fb8 mrr $AC1.L, $AX0.L - 09ec 1501 lsl $ACC1, #1 - 09ed 009b c000 lri $AX1.H, #0xc000 - 09ef 0099 4000 lri $AX1.L, #0x4000 - 09f1 1150 09f9 bloopi #0x50, 0x09f9 - 09f3 02c0 0003 andcf $AC0.M, #0x0003 - 09f5 027c iflnz - 09f6 1b1b srri @$AR0, $AX1.H - 09f7 027d iflz - 09f8 1b19 srri @$AR0, $AX1.L - 09f9 4c00 add $ACC0, $ACC1 - 09fa 147e lsr $ACC0, #-2 - 09fb 02df ret - 09fc 1401 lsl $ACC0, #1 - 09fd 0081 0ca0 lri $AR1, #0x0ca0 - 09ff 009b c000 lri $AX1.H, #0xc000 - 0a01 0099 4000 lri $AX1.L, #0x4000 - 0a03 8900 clr $ACC1 - 0a04 0082 0000 lri $AR2, #0x0000 - 0a06 1150 0a11 bloopi #0x50, 0x0a11 - 0a08 02c0 0001 andcf $AC0.M, #0x0001 - 0a0a 027c iflnz - 0a0b 1b1b srri @$AR0, $AX1.H - 0a0c 027d iflz - 0a0d 1b19 srri @$AR0, $AX1.L - 0a0e 183d lrr $AC1.L, @$AR1 - 0a0f 4900 addax $ACC1, $AX0.L - 0a10 1fe2 mrr $AC1.M, $AR2 - 0a11 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M - 0a12 147f lsr $ACC0, #-1 - 0a13 02df ret - 0a14 8900 clr $ACC1 - 0a15 1fb8 mrr $AC1.L, $AX0.L - 0a16 157f lsr $ACC1, #-1 - 0a17 1050 loopi #0x50 - 0a18 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L - 0a19 02df ret - 0a1a 0082 0180 lri $AR2, #0x0180 - 0a1c 029f 0a24 jmp 0x0a24 - 0a1e 0082 01c0 lri $AR2, #0x01c0 - 0a20 029f 0a24 jmp 0x0a24 - 0a22 0082 0140 lri $AR2, #0x0140 - 0a24 008a 003f lri $WR2, #0x003f - 0a26 0086 0000 lri $IX2, #0x0000 - 0a28 1406 lsl $ACC0, #6 - 0a29 8900 clr $ACC1 - 0a2a 1fb8 mrr $AC1.L, $AX0.L - 0a2b 1505 lsl $ACC1, #5 - 0a2c 009b 003f lri $AX1.H, #0x003f - 0a2e 009a 0000 lri $AX0.H, #0x0000 - 0a30 3600 andr $AC0.M, $AX1.H - 0a31 1cde mrr $IX2, $AC0.M - 0a32 001a addarn $AR2, $IX2 - 0a33 3400 andr $AC0.M, $AX0.H - 0a34 1150 0a3a bloopi #0x50, 0x0a3a - 0a36 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a37 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a38 1cde mrr $IX2, $AC0.M - 0a39 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a3a 1b19 srri @$AR0, $AX1.L - 0a3b 1fc2 mrr $AC0.M, $AR2 - 0a3c 147a lsr $ACC0, #-6 - 0a3d 008a ffff lri $WR2, #0xffff - 0a3f 02df ret - 0a40 1050 loopi #0x50 - 0a41 1b18 srri @$AR0, $AX0.L - 0a42 02df ret - 0a43 0082 0100 lri $AR2, #0x0100 - 0a45 008a 003f lri $WR2, #0x003f - 0a47 0086 0000 lri $IX2, #0x0000 - 0a49 1406 lsl $ACC0, #6 - 0a4a 8900 clr $ACC1 - 0a4b 1fb8 mrr $AC1.L, $AX0.L - 0a4c 1505 lsl $ACC1, #5 - 0a4d 009b 003f lri $AX1.H, #0x003f - 0a4f 009a 0000 lri $AX0.H, #0x0000 - 0a51 3600 andr $AC0.M, $AX1.H - 0a52 1cde mrr $IX2, $AC0.M - 0a53 001a addarn $AR2, $IX2 - 0a54 3400 andr $AC0.M, $AX0.H - 0a55 1150 0a5b bloopi #0x50, 0x0a5b - 0a57 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a58 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a59 1cde mrr $IX2, $AC0.M - 0a5a 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a5b 1b19 srri @$AR0, $AX1.L - 0a5c 1fc2 mrr $AC0.M, $AR2 - 0a5d 147a lsr $ACC0, #-6 - 0a5e 008a ffff lri $WR2, #0xffff - 0a60 02df ret - 0a61 0082 0100 lri $AR2, #0x0100 - 0a63 008a 003f lri $WR2, #0x003f - 0a65 0086 0000 lri $IX2, #0x0000 - 0a67 0081 0ca0 lri $AR1, #0x0ca0 - 0a69 1406 lsl $ACC0, #6 - 0a6a 8900 clr $ACC1 - 0a6b 1fb8 mrr $AC1.L, $AX0.L - 0a6c 1505 lsl $ACC1, #5 - 0a6d 009b 003f lri $AX1.H, #0x003f - 0a6f 009a 0000 lri $AX0.H, #0x0000 - 0a71 3600 andr $AC0.M, $AX1.H - 0a72 1cde mrr $IX2, $AC0.M - 0a73 001a addarn $AR2, $IX2 - 0a74 3400 andr $AC0.M, $AX0.H - 0a75 1150 0a80 bloopi #0x50, 0x0a80 - 0a77 1939 lrri $AX1.L, @$AR1 - 0a78 a000 mulx $AX0.L, $AX1.L - 0a79 140a lsl $ACC0, #10 - 0a7a 4e00 addp $ACC0 - 0a7b 1476 lsr $ACC0, #-10 - 0a7c 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a7d 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a7e 1cde mrr $IX2, $AC0.M - 0a7f 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a80 1b19 srri @$AR0, $AX1.L - 0a81 1fc2 mrr $AC0.M, $AR2 - 0a82 147a lsr $ACC0, #-6 - 0a83 008a ffff lri $WR2, #0xffff - 0a85 02df ret - 0a86 0080 01be lri $AR0, #0x01be - 0a88 1918 lrri $AX0.L, @$AR0 - 0a89 191a lrri $AX0.H, @$AR0 - 0a8a 0080 0180 lri $AR0, #0x0180 - 0a8c 0083 0180 lri $AR3, #0x0180 - 0a8e 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0a8f 1ffe mrr $AC1.M, $AC0.M - 0a90 1120 0a97 bloopi #0x20, 0x0a97 - 0a92 7c00 neg $ACC0 - 0a93 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0a94 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0a95 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 0a96 1501 lsl $ACC1, #1 - 0a97 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - 0a98 0080 01fe lri $AR0, #0x01fe - 0a9a 191a lrri $AX0.H, @$AR0 - 0a9b 1918 lrri $AX0.L, @$AR0 - 0a9c 0080 01c0 lri $AR0, #0x01c0 - 0a9e 0083 01c0 lri $AR3, #0x01c0 - 0aa0 1ff8 mrr $AC1.M, $AX0.L - 0aa1 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0aa2 f800 addpaxz $ACC0, $AX0.H - 0aa3 0240 01ff andi $AC0.M, #0x01ff - 0aa5 0260 2000 ori $AC0.M, #0x2000 - 0aa7 02bf 0aaa call 0x0aaa - 0aa9 02df ret - 0aaa b900 tst $ACC1 - 0aab 0272 ifg - 0aac 7c00 neg $ACC0 - 0aad 1f7e mrr $AX1.H, $AC0.M - 0aae 4700 addr $ACC1, $AX1.H - 0aaf 1110 0ab4 bloopi #0x10, 0x0ab4 - 0ab1 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0ab2 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0ab3 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0ab4 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0ab5 02df ret - 0ab6 02bf 0b23 call 0x0b23 - 0ab8 2201 lrs $AX0.H, @0x0001 - 0ab9 8600 tstaxh $AX0.H - 0aba 0294 0acb jnz 0x0acb - 0abc 2204 lrs $AX0.H, @0x0004 - 0abd 8600 tstaxh $AX0.H - 0abe 02b4 0b12 callnz 0x0b12 - 0ac0 8100 clr $ACC0 - 0ac1 2605 lrs $AC0.M, @0x0005 - 0ac2 b100 tst $ACC0 - 0ac3 0295 0ad8 jz 0x0ad8 - 0ac5 8100 clr $ACC0 - 0ac6 2e05 srs @0x0005, $AC0.M - 0ac7 2281 lrs $AX0.H, @0xff81 - 0ac8 8600 tstaxh $AX0.H - 0ac9 0294 0ad2 jnz 0x0ad2 - 0acb 8100 clr $ACC0 - 0acc 005f loop $AC1.M - 0acd 1b7e srri @$AR3, $AC0.M - 0ace 7400 incm $AC0.M - 0acf 2e01 srs @0x0001, $AC0.M - 0ad0 029f 0b0b jmp 0x0b0b - 0ad2 2688 lrs $AC0.M, @0xff88 - 0ad3 2489 lrs $AC0.L, @0xff89 - 0ad4 2e34 srs @0x0034, $AC0.M - 0ad5 2c35 srs @0x0035, $AC0.L - 0ad6 02bf 0b12 call 0x0b12 - 0ad8 00ff 0360 sr @0x0360, $AC1.M - 0ada 2638 lrs $AC0.M, @0x0038 - 0adb 2439 lrs $AC0.L, @0x0039 - 0adc 02bf 0684 call 0x0684 - 0ade 00df 0360 lr $AC1.M, @0x0360 - 0ae0 8100 clr $ACC0 - 0ae1 263a lrs $AC0.M, @0x003a - 0ae2 b100 tst $ACC0 - 0ae3 0294 0af2 jnz 0x0af2 - 0ae5 263b lrs $AC0.M, @0x003b - 0ae6 5c00 sub $ACC0, $ACC1 - 0ae7 0290 0af2 jge 0x0af2 - 0ae9 223b lrs $AX0.H, @0x003b - 0aea 02bf 06a1 call 0x06a1 - 0aec 5500 subr $ACC1, $AX0.H - 0aed 0a01 lris $AX0.H, #0x01 - 0aee 00fa 0405 sr @0x0405, $AX0.H - 0af0 029f 0ac5 jmp 0x0ac5 - 0af2 1f5f mrr $AX0.H, $AC1.M - 0af3 02bf 06a1 call 0x06a1 - 0af5 00fa 0362 sr @0x0362, $AX0.H - 0af7 8100 clr $ACC0 - 0af8 263a lrs $AC0.M, @0x003a - 0af9 243b lrs $AC0.L, @0x003b - 0afa 1570 lsr $ACC1, #-16 - 0afb 0a01 lris $AX0.H, #0x01 - 0afc 0081 0405 lri $AR1, #0x0405 - 0afe 5c00 sub $ACC0, $ACC1 - 0aff b100 tst $ACC0 - 0b00 0275 ifz - 0b01 1a3a srr @$AR1, $AX0.H - 0b02 2e3a srs @0x003a, $AC0.M - 0b03 2c3b srs @0x003b, $AC0.L - 0b04 2638 lrs $AC0.M, @0x0038 - 0b05 2439 lrs $AC0.L, @0x0039 - 0b06 00d8 0362 lr $AX0.L, @0x0362 - 0b08 7000 addaxl $ACC0, $AX0.L - 0b09 2c39 srs @0x0039, $AC0.L - 0b0a 2e38 srs @0x0038, $AC0.M - 0b0b 0092 00ff lri $CR, #0x00ff - 0b0d 029f 0330 jmp 0x0330 - 0b0f 8100 clr $ACC0 - 0b10 2e34 srs @0x0034, $AC0.M - 0b11 2e35 srs @0x0035, $AC0.M - 0b12 2334 lrs $AX1.H, @0x0034 - 0b13 2135 lrs $AX1.L, @0x0035 - 0b14 268a lrs $AC0.M, @0xff8a - 0b15 248b lrs $AC0.L, @0xff8b - 0b16 5a00 subax $ACC0, $AX1.L - 0b17 2e3a srs @0x003a, $AC0.M - 0b18 2c3b srs @0x003b, $AC0.L - 0b19 2634 lrs $AC0.M, @0x0034 - 0b1a 2435 lrs $AC0.L, @0x0035 - 0b1b 238c lrs $AX1.H, @0xff8c - 0b1c 218d lrs $AX1.L, @0xff8d - 0b1d 4a00 addax $ACC0, $AX1.L - 0b1e 2e38 srs @0x0038, $AC0.M - 0b1f 2c39 srs @0x0039, $AC0.L - 0b20 8100 clr $ACC0 - 0b21 2e05 srs @0x0005, $AC0.M - 0b22 02df ret - 0b23 0092 0004 lri $CR, #0x0004 - 0b25 2002 lrs $AX0.L, @0x0002 - 0b26 8100 clr $ACC0 - 0b27 8900 clr $ACC1 - 0b28 2430 lrs $AC0.L, @0x0030 - 0b29 8d00 set15 - 0b2a 0950 lris $AX1.L, #0x50 - 0b2b a000 mulx $AX0.L, $AX1.L - 0b2c a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0b2d 1404 lsl $ACC0, #4 - 0b2e 8c00 clr15 - 0b2f 1ffe mrr $AC1.M, $AC0.M - 0b30 0083 0580 lri $AR3, #0x0580 - 0b32 02df ret - 0b33 02bf 0b23 call 0x0b23 - 0b35 2201 lrs $AX0.H, @0x0001 - 0b36 8600 tstaxh $AX0.H - 0b37 0294 0b48 jnz 0x0b48 - 0b39 2204 lrs $AX0.H, @0x0004 - 0b3a 8600 tstaxh $AX0.H - 0b3b 02b4 0b92 callnz 0x0b92 - 0b3d 8100 clr $ACC0 - 0b3e 2605 lrs $AC0.M, @0x0005 - 0b3f b100 tst $ACC0 - 0b40 0295 0b55 jz 0x0b55 - 0b42 8100 clr $ACC0 - 0b43 2e05 srs @0x0005, $AC0.M - 0b44 2281 lrs $AX0.H, @0xff81 - 0b45 8600 tstaxh $AX0.H - 0b46 0294 0b4f jnz 0x0b4f - 0b48 8100 clr $ACC0 - 0b49 005f loop $AC1.M - 0b4a 1b7e srri @$AR3, $AC0.M - 0b4b 7400 incm $AC0.M - 0b4c 2e01 srs @0x0001, $AC0.M - 0b4d 029f 0b8b jmp 0x0b8b - 0b4f 2688 lrs $AC0.M, @0xff88 - 0b50 2489 lrs $AC0.L, @0xff89 - 0b51 2e34 srs @0x0034, $AC0.M - 0b52 2c35 srs @0x0035, $AC0.L - 0b53 02bf 0b92 call 0x0b92 - 0b55 00ff 0360 sr @0x0360, $AC1.M - 0b57 2638 lrs $AC0.M, @0x0038 - 0b58 2439 lrs $AC0.L, @0x0039 - 0b59 02bf 0684 call 0x0684 - 0b5b 02bf 069b call 0x069b - 0b5d 00df 0360 lr $AC1.M, @0x0360 - 0b5f 8100 clr $ACC0 - 0b60 263a lrs $AC0.M, @0x003a - 0b61 b100 tst $ACC0 - 0b62 0294 0b71 jnz 0x0b71 - 0b64 263b lrs $AC0.M, @0x003b - 0b65 5c00 sub $ACC0, $ACC1 - 0b66 0290 0b71 jge 0x0b71 - 0b68 223b lrs $AX0.H, @0x003b - 0b69 02bf 0666 call 0x0666 - 0b6b 5500 subr $ACC1, $AX0.H - 0b6c 0a01 lris $AX0.H, #0x01 - 0b6d 00fa 0405 sr @0x0405, $AX0.H - 0b6f 029f 0b42 jmp 0x0b42 - 0b71 1f5f mrr $AX0.H, $AC1.M - 0b72 02bf 0666 call 0x0666 - 0b74 00fa 0362 sr @0x0362, $AX0.H - 0b76 8100 clr $ACC0 - 0b77 263a lrs $AC0.M, @0x003a - 0b78 243b lrs $AC0.L, @0x003b - 0b79 1570 lsr $ACC1, #-16 - 0b7a 0a01 lris $AX0.H, #0x01 - 0b7b 0081 0405 lri $AR1, #0x0405 - 0b7d 5c00 sub $ACC0, $ACC1 - 0b7e b100 tst $ACC0 - 0b7f 0275 ifz - 0b80 1a3a srr @$AR1, $AX0.H - 0b81 2e3a srs @0x003a, $AC0.M - 0b82 2c3b srs @0x003b, $AC0.L - 0b83 2638 lrs $AC0.M, @0x0038 - 0b84 2439 lrs $AC0.L, @0x0039 - 0b85 00d8 0362 lr $AX0.L, @0x0362 - 0b87 7000 addaxl $ACC0, $AX0.L - 0b88 7000 addaxl $ACC0, $AX0.L - 0b89 2c39 srs @0x0039, $AC0.L - 0b8a 2e38 srs @0x0038, $AC0.M - 0b8b 0092 00ff lri $CR, #0x00ff - 0b8d 029f 0330 jmp 0x0330 - 0b8f 8100 clr $ACC0 - 0b90 2e34 srs @0x0034, $AC0.M - 0b91 2e35 srs @0x0035, $AC0.M - 0b92 2334 lrs $AX1.H, @0x0034 - 0b93 2135 lrs $AX1.L, @0x0035 - 0b94 268a lrs $AC0.M, @0xff8a - 0b95 248b lrs $AC0.L, @0xff8b - 0b96 5a00 subax $ACC0, $AX1.L - 0b97 2e3a srs @0x003a, $AC0.M - 0b98 2c3b srs @0x003b, $AC0.L - 0b99 2634 lrs $AC0.M, @0x0034 - 0b9a 2435 lrs $AC0.L, @0x0035 - 0b9b 1401 lsl $ACC0, #1 - 0b9c 238c lrs $AX1.H, @0xff8c - 0b9d 218d lrs $AX1.L, @0xff8d - 0b9e 4a00 addax $ACC0, $AX1.L - 0b9f 2e38 srs @0x0038, $AC0.M - 0ba0 2c39 srs @0x0039, $AC0.L - 0ba1 8100 clr $ACC0 - 0ba2 2e05 srs @0x0005, $AC0.M - 0ba3 02df ret - 0ba4 8900 clr $ACC1 - 0ba5 0f50 lris $AC1.M, #0x50 - 0ba6 0083 0520 lri $AR3, #0x0520 - 0ba8 02bf 0bbd call 0x0bbd - 0baa 029f 0338 jmp 0x0338 - 0bac 00d8 0402 lr $AX0.L, @0x0402 - 0bae 8100 clr $ACC0 - 0baf 8900 clr $ACC1 - 0bb0 00dc 0430 lr $AC0.L, @0x0430 - 0bb2 0a50 lris $AX0.H, #0x50 - 0bb3 9000 mul $AX0.L, $AX0.H - 0bb4 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0bb5 1404 lsl $ACC0, #4 - 0bb6 1ffe mrr $AC1.M, $AC0.M - 0bb7 0083 0580 lri $AR3, #0x0580 - 0bb9 02bf 0bbd call 0x0bbd - 0bbb 029f 0330 jmp 0x0330 - 0bbd 0092 0004 lri $CR, #0x0004 - 0bbf 8100 clr $ACC0 - 0bc0 263a lrs $AC0.M, @0x003a - 0bc1 243b lrs $AC0.L, @0x003b - 0bc2 1f1f mrr $AX0.L, $AC1.M - 0bc3 0a00 lris $AX0.H, #0x00 - 0bc4 5800 subax $ACC0, $AX0.L - 0bc5 0292 0bdb jg 0x0bdb - 0bc7 8900 clr $ACC1 - 0bc8 00c0 043b lr $AR0, @0x043b - 0bca 02bf 0c00 call 0x0c00 - 0bcc 8100 clr $ACC0 - 0bcd 1fd8 mrr $AC0.M, $AX0.L - 0bce 223b lrs $AX0.H, @0x003b - 0bcf 5400 subr $ACC0, $AX0.H - 0bd0 0007 dar $AR3 - 0bd1 1979 lrri $AX1.L, @$AR3 - 0bd2 005e loop $AC0.M - 0bd3 1b79 srri @$AR3, $AX1.L - 0bd4 0f01 lris $AC1.M, #0x01 - 0bd5 2f01 srs @0x0001, $AC1.M - 0bd6 8900 clr $ACC1 - 0bd7 2f3b srs @0x003b, $AC1.M - 0bd8 0092 00ff lri $CR, #0x00ff - 0bda 02df ret - 0bdb 2e3a srs @0x003a, $AC0.M - 0bdc 2c3b srs @0x003b, $AC0.L - 0bdd 8100 clr $ACC0 - 0bde 8900 clr $ACC1 - 0bdf 268a lrs $AC0.M, @0xff8a - 0be0 2734 lrs $AC1.M, @0x0034 - 0be1 5c00 sub $ACC0, $ACC1 - 0be2 2e36 srs @0x0036, $AC0.M - 0be3 5000 subr $ACC0, $AX0.L - 0be4 0290 0bfa jge 0x0bfa - 0be6 00c0 0436 lr $AR0, @0x0436 - 0be8 02bf 0c00 call 0x0c00 - 0bea 8100 clr $ACC0 - 0beb 1fd8 mrr $AC0.M, $AX0.L - 0bec 2236 lrs $AX0.H, @0x0036 - 0bed 5400 subr $ACC0, $AX0.H - 0bee 1c1e mrr $AR0, $AC0.M - 0bef 8100 clr $ACC0 - 0bf0 2e34 srs @0x0034, $AC0.M - 0bf1 2688 lrs $AC0.M, @0xff88 - 0bf2 2489 lrs $AC0.L, @0xff89 - 0bf3 2e8c srs @0xff8c, $AC0.M - 0bf4 2c8d srs @0xff8d, $AC0.L - 0bf5 02bf 0c00 call 0x0c00 - 0bf7 0092 00ff lri $CR, #0x00ff - 0bf9 02df ret - 0bfa 1c18 mrr $AR0, $AX0.L - 0bfb 02bf 0c00 call 0x0c00 - 0bfd 0092 00ff lri $CR, #0x00ff - 0bff 02df ret - 0c00 8100 clr $ACC0 - 0c01 1fc0 mrr $AC0.M, $AR0 - 0c02 b100 tst $ACC0 - 0c03 02d5 retz - 0c04 8900 clr $ACC1 - 0c05 2734 lrs $AC1.M, @0x0034 - 0c06 0340 0001 andi $AC1.M, #0x0001 - 0c08 0b00 lris $AX1.H, #0x00 - 0c09 1f3f mrr $AX1.L, $AC1.M - 0c0a 268c lrs $AC0.M, @0xff8c - 0c0b 248d lrs $AC0.L, @0xff8d - 0c0c 8900 clr $ACC1 - 0c0d 2534 lrs $AC1.L, @0x0034 - 0c0e 1501 lsl $ACC1, #1 - 0c0f 4c00 add $ACC0, $ACC1 - 0c10 5a00 subax $ACC0, $AX1.L - 0c11 5a00 subax $ACC0, $AX1.L - 0c12 1c20 mrr $AR1, $AR0 - 0c13 1fe0 mrr $AC1.M, $AR0 - 0c14 0502 addis $ACC1, #0x02 - 0c15 1c1f mrr $AR0, $AC1.M - 0c16 009f 0b00 lri $AC1.M, #0x0b00 - 0c18 0092 00ff lri $CR, #0x00ff - 0c1a 02bf 05fb call 0x05fb - 0c1c 0092 0004 lri $CR, #0x0004 - 0c1e 2734 lrs $AC1.M, @0x0034 - 0c1f 1f61 mrr $AX1.H, $AR1 - 0c20 4700 addr $ACC1, $AX1.H - 0c21 2f34 srs @0x0034, $AC1.M - 0c22 0080 0b00 lri $AR0, #0x0b00 - 0c24 8900 clr $ACC1 - 0c25 1ff9 mrr $AC1.M, $AX1.L - 0c26 b900 tst $ACC1 - 0c27 0274 ifnz - 0c28 0008 iar $AR0 - 0c29 8900 clr $ACC1 - 0c2a 1fe1 mrr $AC1.M, $AR1 - 0c2b 191e lrri $AC0.M, @$AR0 - 0c2c 0701 cmpis $ACC1, #0x01 - 0c2d 0293 0c36 jle 0x0c36 - 0c2f 191a lrri $AX0.H, @$AR0 - 0c30 05fe addis $ACC1, #0xfe - 0c31 005f loop $AC1.M - 0c32 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c33 1b7e srri @$AR3, $AC0.M - 0c34 1b7a srri @$AR3, $AX0.H - 0c35 02df ret - 0c36 1b7e srri @$AR3, $AC0.M - 0c37 02df ret - 0c38 0083 03e8 lri $AR3, #0x03e8 - 0c3a 191e lrri $AC0.M, @$AR0 - 0c3b 191a lrri $AX0.H, @$AR0 - 0c3c 1006 loopi #0x06 - 0c3d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c3e 1b7e srri @$AR3, $AC0.M - 0c3f 1b7a srri @$AR3, $AX0.H - 0c40 0080 03e8 lri $AR0, #0x03e8 - 0c42 8a00 m2 - 0c43 0088 0007 lri $WR0, #0x0007 - 0c45 1150 0c52 bloopi #0x50, 0x0c52 - 0c47 1c61 mrr $AR3, $AR1 - 0c48 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c49 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c4f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c50 f200 madd $AX0.L, $AX0.H - 0c51 fe00 movpz $ACC0 - 0c52 1b3e srri @$AR1, $AC0.M - 0c53 0088 ffff lri $WR0, #0xffff - 0c55 8b00 m0 - 0c56 02df ret - 0c57 8a00 m2 - 0c58 05fe addis $ACC1, #0xfe - 0c59 0083 03e8 lri $AR3, #0x03e8 - 0c5b 191e lrri $AC0.M, @$AR0 - 0c5c 191a lrri $AX0.H, @$AR0 - 0c5d 005f loop $AC1.M - 0c5e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c5f 1b7e srri @$AR3, $AC0.M - 0c60 1b7a srri @$AR3, $AX0.H - 0c61 0080 03e8 lri $AR0, #0x03e8 - 0c63 0501 addis $ACC1, #0x01 - 0c64 1d1f mrr $WR0, $AC1.M - 0c65 1150 0c6d bloopi #0x50, 0x0c6d - 0c67 1c61 mrr $AR3, $AR1 - 0c68 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c69 005f loop $AC1.M - 0c6a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c6b f200 madd $AX0.L, $AX0.H - 0c6c fe00 movpz $ACC0 - 0c6d 1b3e srri @$AR1, $AC0.M - 0c6e 0088 ffff lri $WR0, #0xffff - 0c70 8b00 m0 - 0c71 02df ret - 0c72 0083 03e8 lri $AR3, #0x03e8 - 0c74 191e lrri $AC0.M, @$AR0 - 0c75 191a lrri $AX0.H, @$AR0 - 0c76 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c77 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c78 1b7e srri @$AR3, $AC0.M - 0c79 1b7a srri @$AR3, $AX0.H - 0c7a 0080 03e8 lri $AR0, #0x03e8 - 0c7c 0088 0003 lri $WR0, #0x0003 - 0c7e 0085 0000 lri $IX1, #0x0000 - 0c80 0087 0000 lri $IX3, #0x0000 - 0c82 1fc2 mrr $AC0.M, $AR2 - 0c83 195b lrri $AX1.H, @$AR2 - 0c84 1959 lrri $AX1.L, @$AR2 - 0c85 195f lrri $AC1.M, @$AR2 - 0c86 195a lrri $AX0.H, @$AR2 - 0c87 1c5e mrr $AR2, $AC0.M - 0c88 1fda mrr $AC0.M, $AX0.H - 0c89 1c61 mrr $AR3, $AR1 - 0c8a 8a00 m2 - 0c8b 8f00 set40 - 0c8c 191a lrri $AX0.H, @$AR0 - 0c8d b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0c8e e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0c8f ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0c90 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0c91 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0c92 1127 0c9d bloopi #0x27, 0x0c9d - 0c94 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0c95 197e lrri $AC0.M, @$AR3 - 0c96 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0c97 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0c98 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0c99 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0c9a 197f lrri $AC1.M, @$AR3 - 0c9b ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0c9c e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0c9d b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0c9e e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0c9f 197e lrri $AC0.M, @$AR3 - 0ca0 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ca1 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0ca2 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 0ca3 1bff srrn @$AR3, $AC1.M - 0ca4 197f lrri $AC1.M, @$AR3 - 0ca5 8e00 set16 - 0ca6 8b00 m0 - 0ca7 0088 ffff lri $WR0, #0xffff - 0ca9 1b5b srri @$AR2, $AX1.H - 0caa 1b59 srri @$AR2, $AX1.L - 0cab 1b5f srri @$AR2, $AC1.M - 0cac 1b5e srri @$AR2, $AC0.M - 0cad 02df ret - 0cae 0083 03e8 lri $AR3, #0x03e8 - 0cb0 191e lrri $AC0.M, @$AR0 - 0cb1 191a lrri $AX0.H, @$AR0 - 0cb2 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cb3 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cb4 1b7e srri @$AR3, $AC0.M - 0cb5 1b7a srri @$AR3, $AX0.H - 0cb6 0080 03e8 lri $AR0, #0x03e8 - 0cb8 0088 0003 lri $WR0, #0x0003 - 0cba 0085 0000 lri $IX1, #0x0000 - 0cbc 0087 0000 lri $IX3, #0x0000 - 0cbe 1fc2 mrr $AC0.M, $AR2 - 0cbf 195b lrri $AX1.H, @$AR2 - 0cc0 1959 lrri $AX1.L, @$AR2 - 0cc1 195f lrri $AC1.M, @$AR2 - 0cc2 195a lrri $AX0.H, @$AR2 - 0cc3 1c5e mrr $AR2, $AC0.M - 0cc4 1fda mrr $AC0.M, $AX0.H - 0cc5 1c61 mrr $AR3, $AR1 - 0cc6 8a00 m2 - 0cc7 8f00 set40 - 0cc8 191a lrri $AX0.H, @$AR0 - 0cc9 b800 mulx $AX0.H, $AX1.H - 0cca e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0ccb e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0ccc ea00 maddc $AC1.M, $AX1.L - 0ccd ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0cce e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0ccf ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0cd0 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0cd1 1127 0ce2 bloopi #0x27, 0x0ce2 - 0cd3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cd4 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0cd5 197e lrri $AC0.M, @$AR3 - 0cd6 e800 maddc $AC0.M, $AX1.L - 0cd7 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0cd8 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0cd9 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cda bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0cdb e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0cdc e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0cdd 197f lrri $AC1.M, @$AR3 - 0cde ea00 maddc $AC1.M, $AX1.L - 0cdf ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0ce0 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0ce1 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0ce2 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0ce3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0ce4 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ce5 197e lrri $AC0.M, @$AR3 - 0ce6 e800 maddc $AC0.M, $AX1.L - 0ce7 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ce8 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0ce9 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cea bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0ceb 1bff srrn @$AR3, $AC1.M - 0cec 197f lrri $AC1.M, @$AR3 - 0ced 8e00 set16 - 0cee 8b00 m0 - 0cef 0088 ffff lri $WR0, #0xffff - 0cf1 1b5b srri @$AR2, $AX1.H - 0cf2 1b59 srri @$AR2, $AX1.L - 0cf3 1b5f srri @$AR2, $AC1.M - 0cf4 1b5e srri @$AR2, $AC0.M - 0cf5 02df ret - 0cf6 0eff lris $AC0.M, #0xff - 0cf7 00fe 03f2 sr @0x03f2, $AC0.M - 0cf9 8100 clr $ACC0 - 0cfa 00fe 03f0 sr @0x03f0, $AC0.M - 0cfc 00fe 03f6 sr @0x03f6, $AC0.M - 0cfe 009e 0100 lri $AC0.M, #0x0100 - 0d00 00fe 03f7 sr @0x03f7, $AC0.M - 0d02 00da 03f7 lr $AX0.H, @0x03f7 - 0d04 009e 8000 lri $AC0.M, #0x8000 - 0d06 5400 subr $ACC0, $AX0.H - 0d07 00fe 03f5 sr @0x03f5, $AC0.M - 0d09 0e30 lris $AC0.M, #0x30 - 0d0a 00fe 03f3 sr @0x03f3, $AC0.M - 0d0c 0e10 lris $AC0.M, #0x10 - 0d0d 00fe 03f4 sr @0x03f4, $AC0.M - 0d0f 009e 0096 lri $AC0.M, #0x0096 - 0d11 00fe 03f1 sr @0x03f1, $AC0.M - 0d13 02df ret - 0d14 0080 0a00 lri $AR0, #0x0a00 - 0d16 8100 clr $ACC0 - 0d17 00de 03f0 lr $AC0.M, @0x03f0 - 0d19 8900 clr $ACC1 - 0d1a b100 tst $ACC0 - 0d1b 0275 ifz - 0d1c 0550 addis $ACC1, #0x50 - 0d1d 00ff 03f0 sr @0x03f0, $AC1.M - 0d1f 0200 0a60 addi $AC0.M, #0x0a60 - 0d21 1c7e mrr $AR3, $AC0.M - 0d22 0f4e lris $AC1.M, #0x4e - 0d23 02bf 00e5 call 0x00e5 - 0d25 02df ret - 0d26 00de 03f1 lr $AC0.M, @0x03f1 - 0d28 0200 0a60 addi $AC0.M, #0x0a60 - 0d2a 1c7e mrr $AR3, $AC0.M - 0d2b 8100 clr $ACC0 - 0d2c 8900 clr $ACC1 - 0d2d 009f 00a0 lri $AC1.M, #0x00a0 - 0d2f 00de 03f1 lr $AC0.M, @0x03f1 - 0d31 5d00 sub $ACC1, $ACC0 - 0d32 0e50 lris $AC0.M, #0x50 - 0d33 0750 cmpis $ACC1, #0x50 - 0d34 0270 ifge - 0d35 5d00 sub $ACC1, $ACC0 - 0d36 00da 03f2 lr $AX0.H, @0x03f2 - 0d38 8600 tstaxh $AX0.H - 0d39 0290 0d57 jge 0x0d57 - 0d3b 00de 03f3 lr $AC0.M, @0x03f3 - 0d3d 5c00 sub $ACC0, $ACC1 - 0d3e 0293 0d42 jle 0x0d42 - 0d40 029f 0d5c jmp 0x0d5c - 0d42 00db 03f7 lr $AX1.H, @0x03f7 - 0d44 009e 8000 lri $AC0.M, #0x8000 - 0d46 4600 addr $ACC0, $AX1.H - 0d47 029f 0d4e jmp 0x0d4e - 0d49 00db 03f7 lr $AX1.H, @0x03f7 - 0d4b 009e 8000 lri $AC0.M, #0x8000 - 0d4d 5600 subr $ACC0, $AX1.H - 0d4e 00fe 03f5 sr @0x03f5, $AC0.M - 0d50 1fda mrr $AC0.M, $AX0.H - 0d51 7c00 neg $ACC0 - 0d52 1f5e mrr $AX0.H, $AC0.M - 0d53 00fe 03f2 sr @0x03f2, $AC0.M - 0d55 029f 0d5c jmp 0x0d5c - 0d57 00de 03f4 lr $AC0.M, @0x03f4 - 0d59 5d00 sub $ACC1, $ACC0 - 0d5a 0293 0d49 jle 0x0d49 - 0d5c 8900 clr $ACC1 - 0d5d 00dd 03f5 lr $AC1.L, @0x03f5 - 0d5f 1501 lsl $ACC1, #1 - 0d60 8100 clr $ACC0 - 0d61 00dc 03f6 lr $AC0.L, @0x03f6 - 0d63 008b 009f lri $WR3, #0x009f - 0d65 0080 0a00 lri $AR0, #0x0a00 - 0d67 0900 lris $AX1.L, #0x00 - 0d68 1150 0d6f bloopi #0x50, 0x0d6f - 0d6a 1878 lrr $AX0.L, @$AR3 - 0d6b 4c00 add $ACC0, $ACC1 - 0d6c 1cfe mrr $IX3, $AC0.M - 0d6d 001f addarn $AR3, $IX3 - 0d6e 1fd9 mrr $AC0.M, $AX1.L - 0d6f 1b18 srri @$AR0, $AX0.L - 0d70 009f 0a60 lri $AC1.M, #0x0a60 - 0d72 1fc3 mrr $AC0.M, $AR3 - 0d73 5c00 sub $ACC0, $ACC1 - 0d74 00fe 03f1 sr @0x03f1, $AC0.M - 0d76 00fc 03f6 sr @0x03f6, $AC0.L - 0d78 008b ffff lri $WR3, #0xffff - 0d7a 02df ret - 0d7b 0f50 lris $AC1.M, #0x50 - 0d7c 0080 0a00 lri $AR0, #0x0a00 - 0d7e 0083 0d60 lri $AR3, #0x0d60 - 0d80 0098 3fff lri $AX0.L, #0x3fff - 0d82 02bf 00ff call 0x00ff - 0d84 0f50 lris $AC1.M, #0x50 - 0d85 0080 0a00 lri $AR0, #0x0a00 - 0d87 0083 0d00 lri $AR3, #0x0d00 - 0d89 0098 3fff lri $AX0.L, #0x3fff - 0d8b 02bf 00ff call 0x00ff - 0d8d 02df ret - 0d8e 8a00 m2 - 0d8f 8f00 set40 - 0d90 8100 clr $ACC0 - 0d91 00de 0404 lr $AC0.M, @0x0404 - 0d93 b100 tst $ACC0 - 0d94 0295 0d9b jz 0x0d9b - 0d96 8100 clr $ACC0 - 0d97 00fe 0478 sr @0x0478, $AC0.M - 0d99 00fe 0479 sr @0x0479, $AC0.M - 0d9b 00df 0479 lr $AC1.M, @0x0479 - 0d9d 00db 0478 lr $AX1.H, @0x0478 - 0d9f 0900 lris $AX1.L, #0x00 - 0da0 0084 0000 lri $IX0, #0x0000 - 0da2 1150 0dab bloopi #0x50, 0x0dab - 0da4 199e lrrn $AC0.M, @$AR0 - 0da5 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 - 0da6 c000 mulc $AC0.M, $AX0.H - 0da7 6e00 movp $ACC0 - 0da8 1488 asl $ACC0, #8 - 0da9 4a00 addax $ACC0, $AX1.L - 0daa 1b1e srri @$AR0, $AC0.M - 0dab 1f7e mrr $AX1.H, $AC0.M - 0dac 00fb 0478 sr @0x0478, $AX1.H - 0dae 00ff 0479 sr @0x0479, $AC1.M - 0db0 8b00 m0 - 0db1 8e00 set16 - 0db2 02df ret - 0db3 b900 tst $ACC1 - 0db4 0294 0db9 jnz 0x0db9 - 0db6 6800 movax $ACC0, $AX0.L - 0db7 b100 tst $ACC0 - 0db8 02d5 retz - 0db9 1c23 mrr $AR1, $AR3 - 0dba 197e lrri $AC0.M, @$AR3 - 0dbb 191b lrri $AX1.H, @$AR0 - 0dbc d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - 0dbd 1120 0dc3 bloopi #0x20, 0x0dc3 - 0dbf dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0dc0 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dc1 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0dc2 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dc3 4900 addax $ACC1, $AX0.L - 0dc4 1108 0dc9 bloopi #0x08, 0x0dc9 - 0dc6 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0dc7 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dc8 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0dc9 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dca 02df ret - 0dcb 8f00 set40 - 0dcc 8d00 set15 - 0dcd 1c03 mrr $AR0, $AR3 - 0dce 00d9 038e lr $AX1.L, @0x038e - 0dd0 0b04 lris $AX1.H, #0x04 - 0dd1 197a lrri $AX0.H, @$AR3 - 0dd2 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 - 0dd3 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0dd4 1128 0dd9 bloopi #0x28, 0x0dd9 - 0dd6 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0dd7 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dd8 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0dd9 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dda 8c00 clr15 - 0ddb 8e00 set16 - 0ddc 02df ret - 0ddd 00da 0485 lr $AX0.H, @0x0485 - 0ddf 8600 tstaxh $AX0.H - 0de0 0295 0dee jz 0x0dee - 0de2 8100 clr $ACC0 - 0de3 00de 042a lr $AC0.M, @0x042a - 0de5 147f lsr $ACC0, #-1 - 0de6 00fe 042b sr @0x042b, $AC0.M - 0de8 b100 tst $ACC0 - 0de9 0294 0dee jnz 0x0dee - 0deb 0a01 lris $AX0.H, #0x01 - 0dec 00fa 0401 sr @0x0401, $AX0.H - 0dee 8f00 set40 - 0def 8100 clr $ACC0 - 0df0 00de 0428 lr $AC0.M, @0x0428 - 0df2 1478 lsr $ACC0, #-8 - 0df3 00df 0428 lr $AC1.M, @0x0428 - 0df5 0340 007f andi $AC1.M, #0x007f - 0df7 1f1e mrr $AX0.L, $AC0.M - 0df8 1f5f mrr $AX0.H, $AC1.M - 0df9 0220 007f xori $ACC0, #0x007f - 0dfb 1f3e mrr $AX1.L, $AC0.M - 0dfc 0320 007f xori $ACC1, #0x007f - 0dfe 1f7f mrr $AX1.H, $AC1.M - 0dff 8100 clr $ACC0 - 0e00 8900 clr $ACC1 - 0e01 009f 0200 lri $AC1.M, #0x0200 - 0e03 1fd8 mrr $AC0.M, $AX0.L - 0e04 4c00 add $ACC0, $ACC1 - 0e05 1c1e mrr $AR0, $AC0.M - 0e06 1818 lrr $AX0.L, @$AR0 - 0e07 1fda mrr $AC0.M, $AX0.H - 0e08 4c00 add $ACC0, $ACC1 - 0e09 1c1e mrr $AR0, $AC0.M - 0e0a 181a lrr $AX0.H, @$AR0 - 0e0b 1fd9 mrr $AC0.M, $AX1.L - 0e0c 4c00 add $ACC0, $ACC1 - 0e0d 1c1e mrr $AR0, $AC0.M - 0e0e 1819 lrr $AX1.L, @$AR0 - 0e0f 1fdb mrr $AC0.M, $AX1.H - 0e10 4c00 add $ACC0, $ACC1 - 0e11 1c1e mrr $AR0, $AC0.M - 0e12 181b lrr $AX1.H, @$AR0 - 0e13 8a00 m2 - 0e14 0080 0b00 lri $AR0, #0x0b00 - 0e16 9800 mul $AX1.L, $AX1.H - 0e17 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0e18 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0e19 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M - 0e1a 6e30 movp's $ACC0 : @$AR0, $AC0.M - 0e1b 1b1e srri @$AR0, $AC0.M - 0e1c 8b00 m0 - 0e1d 0080 0b00 lri $AR0, #0x0b00 - 0e1f 0081 0b04 lri $AR1, #0x0b04 - 0e21 00da 042a lr $AX0.H, @0x042a - 0e23 02bf 0e6e call 0x0e6e - 0e25 0081 0b08 lri $AR1, #0x0b08 - 0e27 0080 0b00 lri $AR0, #0x0b00 - 0e29 00da 042a lr $AX0.H, @0x042a - 0e2b 00de 0429 lr $AC0.M, @0x0429 - 0e2d 8a00 m2 - 0e2e c000 mulc $AC0.M, $AX0.H - 0e2f 8b00 m0 - 0e30 6e00 movp $ACC0 - 0e31 1f5e mrr $AX0.H, $AC0.M - 0e32 02bf 0e6e call 0x0e6e - 0e34 0080 0b00 lri $AR0, #0x0b00 - 0e36 0081 0b0c lri $AR1, #0x0b0c - 0e38 8100 clr $ACC0 - 0e39 8900 clr $ACC1 - 0e3a 00de 042b lr $AC0.M, @0x042b - 0e3c 00df 042a lr $AC1.M, @0x042a - 0e3e 00fe 042a sr @0x042a, $AC0.M - 0e40 5c00 sub $ACC0, $ACC1 - 0e41 1f5e mrr $AX0.H, $AC0.M - 0e42 02bf 0e79 call 0x0e79 - 0e44 0080 0b0c lri $AR0, #0x0b0c - 0e46 0081 0b10 lri $AR1, #0x0b10 - 0e48 00da 0429 lr $AX0.H, @0x0429 - 0e4a 02bf 0e6e call 0x0e6e - 0e4c 0081 0b04 lri $AR1, #0x0b04 - 0e4e 0082 0b0c lri $AR2, #0x0b0c - 0e50 0083 0e87 lri $AR3, #0x0e87 - 0e52 1108 0e6b bloopi #0x08, 0x0e6b - 0e54 195f lrri $AC1.M, @$AR2 - 0e55 15fb asr $ACC1, #-5 - 0e56 1f1d mrr $AX0.L, $AC1.L - 0e57 1f5f mrr $AX0.H, $AC1.M - 0e58 193f lrri $AC1.M, @$AR1 - 0e59 00e1 0b24 sr @0x0b24, $AR1 - 0e5b 00e2 0b25 sr @0x0b25, $AR2 - 0e5d 021b ilrri $AC0.M, @$AR3 - 0e5e 00e3 0b26 sr @0x0b26, $AR3 - 0e60 1c7e mrr $AR3, $AC0.M - 0e61 00c0 038f lr $AR0, @0x038f - 0e63 02bf 0db3 call 0x0db3 - 0e65 00c1 0b24 lr $AR1, @0x0b24 - 0e67 00c2 0b25 lr $AR2, @0x0b25 - 0e69 00c3 0b26 lr $AR3, @0x0b26 - 0e6b 0000 nop - 0e6c 8e00 set16 - 0e6d 02df ret - 0e6e 8a00 m2 - 0e6f 191f lrri $AC1.M, @$AR0 - 0e70 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 - 0e71 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 - 0e72 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e73 191f lrri $AC1.M, @$AR0 - 0e74 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e75 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0e76 1b3e srri @$AR1, $AC0.M - 0e77 8b00 m0 - 0e78 02df ret - 0e79 8a00 m2 - 0e7a 8d00 set15 - 0e7b 1f7e mrr $AX1.H, $AC0.M - 0e7c 1918 lrri $AX0.L, @$AR0 - 0e7d a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 - 0e7e ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 - 0e7f ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e80 1918 lrri $AX0.L, @$AR0 - 0e81 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e82 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0e83 1b3e srri @$AR1, $AC0.M - 0e84 8c00 clr15 - 0e85 8b00 m0 - 0e86 02df ret - 0e87 0d00 lris $AC1.L, #0x00 - 0e88 0d60 lris $AC1.L, #0x60 - 0e89 0f40 lris $AC1.M, #0x40 - 0e8a 0ca0 lris $AC0.L, #0xa0 - 0e8b 0e80 lris $AC0.M, #0x80 - 0e8c 0ee0 lris $AC0.M, #0xe0 - 0e8d 0be0 lris $AX1.H, #0xe0 - 0e8e 0c40 lris $AC0.L, #0x40 - 0e8f 00f9 0361 sr @0x0361, $AX1.L - 0e91 1fc0 mrr $AC0.M, $AR0 - 0e92 0200 fffc addi $AC0.M, #0xfffc - 0e94 1c1e mrr $AR0, $AC0.M - 0e95 1c5e mrr $AR2, $AC0.M - 0e96 0083 043c lri $AR3, #0x043c - 0e98 197e lrri $AC0.M, @$AR3 - 0e99 197f lrri $AC1.M, @$AR3 - 0e9a 80a2 nx'sl : $AC0.M, $AX0.H - 0e9b 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - 0e9c 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - 0e9d 1b1f srri @$AR0, $AC1.M - 0e9e 1c02 mrr $AR0, $AR2 - 0e9f 8100 clr $ACC0 - 0ea0 00de 0402 lr $AC0.M, @0x0402 - 0ea2 00fe 0362 sr @0x0362, $AC0.M - 0ea4 1474 lsr $ACC0, #-12 - 0ea5 1f7e mrr $AX1.H, $AC0.M - 0ea6 1f3c mrr $AX1.L, $AC0.L - 0ea7 8900 clr $ACC1 - 0ea8 00dd 0430 lr $AC1.L, @0x0430 - 0eaa 1504 lsl $ACC1, #4 - 0eab 0604 cmpis $ACC0, #0x04 - 0eac 0290 0f03 jge 0x0f03 - 0eae 1fdd mrr $AC0.M, $AC1.L - 0eaf 0082 02b0 lri $AR2, #0x02b0 - 0eb1 1050 loopi #0x50 - 0eb2 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L - 0eb3 1fbe mrr $AC1.L, $AC0.M - 0eb4 00fe 0360 sr @0x0360, $AC0.M - 0eb6 8900 clr $ACC1 - 0eb7 1fbe mrr $AC1.L, $AC0.M - 0eb8 0af8 lris $AX0.H, #0xf8 - 0eb9 009b 00fc lri $AX1.H, #0x00fc - 0ebb 00d8 0361 lr $AX0.L, @0x0361 - 0ebd 0082 02b0 lri $AR2, #0x02b0 - 0ebf 0083 02b0 lri $AR3, #0x02b0 - 0ec1 195e lrri $AC0.M, @$AR2 - 0ec2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M - 0ec3 1128 0ec8 bloopi #0x28, 0x0ec8 - 0ec5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 - 0ec6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H - 0ec7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 - 0ec8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - 0ec9 8a00 m2 - 0eca 0082 02b0 lri $AR2, #0x02b0 - 0ecc 00dd 0430 lr $AC1.L, @0x0430 - 0ece 1504 lsl $ACC1, #4 - 0ecf 1fe0 mrr $AC1.M, $AR0 - 0ed0 8100 clr $ACC0 - 0ed1 00de 0362 lr $AC0.M, @0x0362 - 0ed3 1474 lsr $ACC0, #-12 - 0ed4 1f7e mrr $AX1.H, $AC0.M - 0ed5 1f3c mrr $AX1.L, $AC0.L - 0ed6 8f00 set40 - 0ed7 1943 lrri $AR3, @$AR2 - 0ed8 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ed9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0eda f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0edb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0edc f200 madd $AX0.L, $AX0.H - 0edd fe00 movpz $ACC0 - 0ede 1c1f mrr $AR0, $AC1.M - 0edf 1943 lrri $AR3, @$AR2 - 0ee0 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ee1 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ee2 114e 0eea bloopi #0x4e, 0x0eea - 0ee4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ee5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ee6 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0ee7 1c1f mrr $AR0, $AC1.M - 0ee8 1943 lrri $AR3, @$AR2 - 0ee9 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0eea 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - 0eeb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0eec f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0eed f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0eee fe00 movpz $ACC0 - 0eef 1b3e srri @$AR1, $AC0.M - 0ef0 8b00 m0 - 0ef1 8e00 set16 - 0ef2 00fe 0433 sr @0x0433, $AC0.M - 0ef4 1c1f mrr $AR0, $AC1.M - 0ef5 150c lsl $ACC1, #12 - 0ef6 0340 0fff andi $AC1.M, #0x0fff - 0ef8 00ff 0430 sr @0x0430, $AC1.M - 0efa 0083 043c lri $AR3, #0x043c - 0efc 191e lrri $AC0.M, @$AR0 - 0efd 191f lrri $AC1.M, @$AR0 - 0efe 80a0 nx'ls : $AX0.H, $AC0.M - 0eff 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0f00 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0f01 1b7f srri @$AR3, $AC1.M - 0f02 02df ret - 0f03 1fe0 mrr $AC1.M, $AR0 - 0f04 1c1f mrr $AR0, $AC1.M - 0f05 1128 0f0c bloopi #0x28, 0x0f0c - 0f07 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f08 1b3e srri @$AR1, $AC0.M - 0f09 1c1f mrr $AR0, $AC1.M - 0f0a 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f0b 1b3e srri @$AR1, $AC0.M - 0f0c 1c1f mrr $AR0, $AC1.M - 0f0d 029f 0ef2 jmp 0x0ef2 - 0f0f 0083 0520 lri $AR3, #0x0520 - 0f11 00de 0433 lr $AC0.M, @0x0433 - 0f13 1050 loopi #0x50 - 0f14 1b7e srri @$AR3, $AC0.M - 0f15 029f 0338 jmp 0x0338 - 0f17 1c20 mrr $AR1, $AR0 - 0f18 185f lrr $AC1.M, @$AR2 - 0f19 1f7f mrr $AX1.H, $AC1.M - 0f1a 193a lrri $AX0.H, @$AR1 - 0f1b 6400 movr $ACC0, $AX0.H - 0f1c 0078 0f21 bloop $AX0.L, 0x0f21 - 0f1e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 - 0f1f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M - 0f20 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 - 0f21 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M - 0f22 1a5b srr @$AR2, $AX1.H - 0f23 02df ret - 0f24 0098 8240 lri $AX0.L, #0x8240 - 0f26 00f8 04e8 sr @0x04e8, $AX0.L - 0f28 0098 7fff lri $AX0.L, #0x7fff - 0f2a 00f8 04e9 sr @0x04e9, $AX0.L - 0f2c 0098 7dbf lri $AX0.L, #0x7dbf - 0f2e 00f8 04ea sr @0x04ea, $AX0.L - 0f30 0098 843f lri $AX0.L, #0x843f - 0f32 00f8 04eb sr @0x04eb, $AX0.L - 0f34 0098 b23b lri $AX0.L, #0xb23b - 0f36 00f8 04f0 sr @0x04f0, $AX0.L - 0f38 0098 7fff lri $AX0.L, #0x7fff - 0f3a 00f8 04f1 sr @0x04f1, $AX0.L - 0f3c 0098 4dc4 lri $AX0.L, #0x4dc4 - 0f3e 00f8 04f2 sr @0x04f2, $AX0.L - 0f40 0098 d808 lri $AX0.L, #0xd808 - 0f42 00f8 04f3 sr @0x04f3, $AX0.L - 0f44 0098 0000 lri $AX0.L, #0x0000 - 0f46 0080 04ec lri $AR0, #0x04ec - 0f48 1004 loopi #0x04 - 0f49 1b18 srri @$AR0, $AX0.L - 0f4a 0080 04f4 lri $AR0, #0x04f4 - 0f4c 1004 loopi #0x04 - 0f4d 1b18 srri @$AR0, $AX0.L - 0f4e 02df ret - 0f4f 0080 0f40 lri $AR0, #0x0f40 - 0f51 0083 0b00 lri $AR3, #0x0b00 - 0f53 8900 clr $ACC1 - 0f54 0f50 lris $AC1.M, #0x50 - 0f55 0098 6784 lri $AX0.L, #0x6784 - 0f57 02bf 010e call 0x010e - 0f59 0080 04e8 lri $AR0, #0x04e8 - 0f5b 0082 04ec lri $AR2, #0x04ec - 0f5d 0081 0b00 lri $AR1, #0x0b00 - 0f5f 8900 clr $ACC1 - 0f60 0f50 lris $AC1.M, #0x50 - 0f61 0080 0b00 lri $AR0, #0x0b00 - 0f63 0083 0d00 lri $AR3, #0x0d00 - 0f65 0098 7fff lri $AX0.L, #0x7fff - 0f67 02bf 00ff call 0x00ff - 0f69 8900 clr $ACC1 - 0f6a 0f50 lris $AC1.M, #0x50 - 0f6b 0080 0b00 lri $AR0, #0x0b00 - 0f6d 0083 0d60 lri $AR3, #0x0d60 - 0f6f 0098 b820 lri $AX0.L, #0xb820 - 0f71 02bf 00ff call 0x00ff - 0f73 0080 0ca0 lri $AR0, #0x0ca0 - 0f75 0083 0b00 lri $AR3, #0x0b00 - 0f77 8900 clr $ACC1 - 0f78 0f50 lris $AC1.M, #0x50 - 0f79 0098 6784 lri $AX0.L, #0x6784 - 0f7b 02bf 010e call 0x010e - 0f7d 0080 04e8 lri $AR0, #0x04e8 - 0f7f 0082 04f4 lri $AR2, #0x04f4 - 0f81 0081 0b00 lri $AR1, #0x0b00 - 0f83 8900 clr $ACC1 - 0f84 0f50 lris $AC1.M, #0x50 - 0f85 0080 0b00 lri $AR0, #0x0b00 - 0f87 0083 0d00 lri $AR3, #0x0d00 - 0f89 0098 47e0 lri $AX0.L, #0x47e0 - 0f8b 02bf 00ff call 0x00ff - 0f8d 8900 clr $ACC1 - 0f8e 0f50 lris $AC1.M, #0x50 - 0f8f 0080 0b00 lri $AR0, #0x0b00 - 0f91 0083 0d60 lri $AR3, #0x0d60 - 0f93 0098 8001 lri $AX0.L, #0x8001 - 0f95 02bf 00ff call 0x00ff - 0f97 02df ret - 0f98 0000 nop - 0f99 0000 nop - 0f9a 0000 nop - 0f9b 0000 nop - 0f9c 0000 nop - 0f9d 0000 nop - 0f9e 0000 nop - 0f9f 0000 nop +// What seems to be the latest Zelda/SMG UCode (2009). Seems to work differently than the rest. Also longer and has more ext ops. + + 0000 029f 0012 jmp 0x0012 + 0002 0000 nop + 0003 0000 nop + 0004 02ff rti + 0005 0000 nop + 0006 02ff rti + 0007 0000 nop + 0008 02ff rti + 0009 0000 nop + 000a 02ff rti + 000b 0000 nop + 000c 02ff rti + 000d 0000 nop + 000e 029f 06e0 jmp 0x06e0 + 0010 029f 004c jmp 0x004c + 0012 1205 sbclr #0x05 + 0013 02bf 0055 call 0x0055 + 0015 8100 clr $ACC0 + 0016 009f 1000 lri $AC1.M, #0x1000 + 0018 0080 0000 lri $AR0, #0x0000 + 001a 005f loop $AC1.M + 001b 1b1e srri @$AR0, $AC0.M + 001c 02bf 07b0 call 0x07b0 + 001e 02bf 0f24 call 0x0f24 + 0020 0e00 lris $AC0.M, #0x00 + 0021 02bf 0792 call 0x0792 + 0023 009e 1111 lri $AC0.M, #0x1111 + 0025 02bf 079c call 0x079c + 0027 0e00 lris $AC0.M, #0x00 + 0028 00fe 034e sr @0x034e, $AC0.M + 002a 1305 sbset #0x05 + 002b 029f 07ed jmp 0x07ed + 002d 00df 0357 lr $AC1.M, @0x0357 + 002f 00ff 0345 sr @0x0345, $AC1.M + 0031 00de 0356 lr $AC0.M, @0x0356 + 0033 1ffe mrr $AC1.M, $AC0.M + 0034 0340 00ff andi $AC1.M, #0x00ff + 0036 00ff 0344 sr @0x0344, $AC1.M + 0038 1479 lsr $ACC0, #-7 + 0039 0240 007e andi $AC0.M, #0x007e + 003b 00fe 0343 sr @0x0343, $AC0.M + 003d 0200 0073 addi $AC0.M, #0x0073 + 003f 1c1e mrr $AR0, $AC0.M + 0040 170f jmpr $AR0 + 0041 0092 00ff lri $CR, #0x00ff + 0043 0e04 lris $AC0.M, #0x04 + 0044 02bf 0792 call 0x0792 + 0046 00de 0356 lr $AC0.M, @0x0356 + 0048 02bf 079c call 0x079c + 004a 029f 002b jmp 0x002b + 004c 1205 sbclr #0x05 + 004d 02bf 0055 call 0x0055 + 004f 0e01 lris $AC0.M, #0x01 + 0050 02bf 0792 call 0x0792 + 0052 1305 sbset #0x05 + 0053 029f 002b jmp 0x002b + 0055 1202 sbclr #0x02 + 0056 1203 sbclr #0x03 + 0057 1204 sbclr #0x04 + 0058 1306 sbset #0x06 + 0059 8e00 set16 + 005a 8c00 clr15 + 005b 8b00 m0 + 005c 009e ffff lri $AC0.M, #0xffff + 005e 1d1e mrr $WR0, $AC0.M + 005f 1d3e mrr $WR1, $AC0.M + 0060 1d5e mrr $WR2, $AC0.M + 0061 1d7e mrr $WR3, $AC0.M + 0062 0092 00ff lri $CR, #0x00ff + 0064 02df ret + 0065 0081 0358 lri $AR1, #0x0358 + 0067 0090 0000 lri $AC0.H, #0x0000 + 0069 0c00 lris $AC0.L, #0x00 + 006a 007e 006f bloop $AC0.M, 0x006f + 006c 193e lrri $AC0.M, @$AR1 + 006d 1b1e srri @$AR0, $AC0.M + 006e 193e lrri $AC0.M, @$AR1 + 006f 1b1e srri @$AR0, $AC0.M + 0070 02df ret + 0071 029f 0041 jmp 0x0041 + 0073 029f 0041 jmp 0x0041 + 0075 029f 0093 jmp 0x0093 + 0077 029f 029d jmp 0x029d + 0079 029f 0071 jmp 0x0071 + 007b 029f 0629 jmp 0x0629 + 007d 029f 063b jmp 0x063b + 007f 029f 0041 jmp 0x0041 + 0081 029f 0572 jmp 0x0572 + 0083 029f 05be jmp 0x05be + 0085 029f 05a2 jmp 0x05a2 + 0087 029f 0041 jmp 0x0041 + 0089 029f 0041 jmp 0x0041 + 008b 029f 0041 jmp 0x0041 + 008d 029f 00bd jmp 0x00bd + 008f 029f 00b0 jmp 0x00b0 + 0091 029f 0041 jmp 0x0041 + 0093 0080 0380 lri $AR0, #0x0380 + 0095 0e04 lris $AC0.M, #0x04 + 0096 02bf 0065 call 0x0065 + 0098 0081 0382 lri $AR1, #0x0382 + 009a 009f 0000 lri $AC1.M, #0x0000 + 009c 0080 0280 lri $AR0, #0x0280 + 009e 02bf 05f9 call 0x05f9 + 00a0 0081 0384 lri $AR1, #0x0384 + 00a2 009f 0300 lri $AC1.M, #0x0300 + 00a4 0080 0020 lri $AR0, #0x0020 + 00a6 02bf 05f9 call 0x05f9 + 00a8 00de 0345 lr $AC0.M, @0x0345 + 00aa 00fe 0342 sr @0x0342, $AC0.M + 00ac 02bf 0cf6 call 0x0cf6 + 00ae 029f 0041 jmp 0x0041 + 00b0 0080 037d lri $AR0, #0x037d + 00b2 0e01 lris $AC0.M, #0x01 + 00b3 02bf 0065 call 0x0065 + 00b5 00de 037d lr $AC0.M, @0x037d + 00b7 0240 7fff andi $AC0.M, #0x7fff + 00b9 00fe 037d sr @0x037d, $AC0.M + 00bb 029f 0041 jmp 0x0041 + 00bd 0080 0374 lri $AR0, #0x0374 + 00bf 0e01 lris $AC0.M, #0x01 + 00c0 00fe 0377 sr @0x0377, $AC0.M + 00c2 00fe 037c sr @0x037c, $AC0.M + 00c4 02bf 0065 call 0x0065 + 00c6 00de 0345 lr $AC0.M, @0x0345 + 00c8 00fe 0376 sr @0x0376, $AC0.M + 00ca 029f 0041 jmp 0x0041 + 00cc 0081 034c lri $AR1, #0x034c + 00ce 009f 0400 lri $AC1.M, #0x0400 + 00d0 0080 00c0 lri $AR0, #0x00c0 + 00d2 02bf 05f9 call 0x05f9 + 00d4 02df ret + 00d5 0081 034c lri $AR1, #0x034c + 00d7 009f 0400 lri $AC1.M, #0x0400 + 00d9 0080 0080 lri $AR0, #0x0080 + 00db 0081 034c lri $AR1, #0x034c + 00dd 193e lrri $AC0.M, @$AR1 + 00de 193c lrri $AC0.L, @$AR1 + 00df 0098 0000 lri $AX0.L, #0x0000 + 00e1 7000 addaxl $ACC0, $AX0.L + 00e2 02bf 0608 call 0x0608 + 00e4 02df ret + 00e5 191e lrri $AC0.M, @$AR0 + 00e6 191a lrri $AX0.H, @$AR0 + 00e7 005f loop $AC1.M + 00e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 00e9 1b7e srri @$AR3, $AC0.M + 00ea 1b7a srri @$AR3, $AX0.H + 00eb 02df ret + 00ec 0000 nop + 00ed 007f 00f2 bloop $AC1.M, 0x00f2 + 00ef 191e lrri $AC0.M, @$AR0 + 00f0 1b7e srri @$AR3, $AC0.M + 00f1 191e lrri $AC0.M, @$AR0 + 00f2 1b7e srri @$AR3, $AC0.M + 00f3 0000 nop + 00f4 02df ret + 00f5 191e lrri $AC0.M, @$AR0 + 00f6 191a lrri $AX0.H, @$AR0 + 00f7 007f 00fc bloop $AC1.M, 0x00fc + 00f9 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 00fa 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 00fb 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 00fc 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 00fd 0000 nop + 00fe 02df ret + 00ff 8a00 m2 + 0100 157f lsr $ACC1, #-1 + 0101 1c20 mrr $AR1, $AR0 + 0102 1c03 mrr $AR0, $AR3 + 0103 193a lrri $AX0.H, @$AR1 + 0104 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 + 0105 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 + 0106 007f 010b bloop $AC1.M, 0x010b + 0108 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 0109 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 010a 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 010b 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 010c 8b00 m0 + 010d 02df ret + 010e 8a00 m2 + 010f 191a lrri $AX0.H, @$AR0 + 0110 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 + 0111 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0112 005f loop $AC1.M + 0113 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M + 0114 8b00 m0 + 0115 02df ret + 0116 8100 clr $ACC0 + 0117 8900 clr $ACC1 + 0118 0e50 lris $AC0.M, #0x50 + 0119 0080 0d00 lri $AR0, #0x0d00 + 011b 005e loop $AC0.M + 011c 1b1f srri @$AR0, $AC1.M + 011d 0080 0d60 lri $AR0, #0x0d60 + 011f 005e loop $AC0.M + 0120 1b1f srri @$AR0, $AC1.M + 0121 00da 0374 lr $AX0.H, @0x0374 + 0123 8600 tstaxh $AX0.H + 0124 02b5 0f4f callz 0x0f4f + 0126 8100 clr $ACC0 + 0127 8900 clr $ACC1 + 0128 0e50 lris $AC0.M, #0x50 + 0129 0080 0ca0 lri $AR0, #0x0ca0 + 012b 005e loop $AC0.M + 012c 1b1f srri @$AR0, $AC1.M + 012d 0080 0f40 lri $AR0, #0x0f40 + 012f 005e loop $AC0.M + 0130 1b1f srri @$AR0, $AC1.M + 0131 0080 0fa0 lri $AR0, #0x0fa0 + 0133 005e loop $AC0.M + 0134 1b1f srri @$AR0, $AC1.M + 0135 0080 0a00 lri $AR0, #0x0a00 + 0137 005e loop $AC0.M + 0138 1b1f srri @$AR0, $AC1.M + 0139 0080 09a0 lri $AR0, #0x09a0 + 013b 005e loop $AC0.M + 013c 1b1f srri @$AR0, $AC1.M + 013d 0f04 lris $AC1.M, #0x04 + 013e 0080 0e10 lri $AR0, #0x0e10 + 0140 0083 0dc0 lri $AR3, #0x0dc0 + 0142 02bf 00ec call 0x00ec + 0144 0080 0e70 lri $AR0, #0x0e70 + 0146 0083 0e20 lri $AR3, #0x0e20 + 0148 02bf 00ec call 0x00ec + 014a 0080 0ed0 lri $AR0, #0x0ed0 + 014c 0083 0e80 lri $AR3, #0x0e80 + 014e 02bf 00ec call 0x00ec + 0150 0080 0f30 lri $AR0, #0x0f30 + 0152 0083 0ee0 lri $AR3, #0x0ee0 + 0154 02bf 00ec call 0x00ec + 0156 8100 clr $ACC0 + 0157 0e50 lris $AC0.M, #0x50 + 0158 8900 clr $ACC1 + 0159 0080 0dc8 lri $AR0, #0x0dc8 + 015b 005e loop $AC0.M + 015c 1b1f srri @$AR0, $AC1.M + 015d 0080 0e28 lri $AR0, #0x0e28 + 015f 005e loop $AC0.M + 0160 1b1f srri @$AR0, $AC1.M + 0161 0080 0e88 lri $AR0, #0x0e88 + 0163 005e loop $AC0.M + 0164 1b1f srri @$AR0, $AC1.M + 0165 0080 0ee8 lri $AR0, #0x0ee8 + 0167 005e loop $AC0.M + 0168 1b1f srri @$AR0, $AC1.M + 0169 02df ret + 016a 009f 0580 lri $AC1.M, #0x0580 + 016c 009b 00a0 lri $AX1.H, #0x00a0 + 016e 0081 0393 lri $AR1, #0x0393 + 0170 18bc lrrd $AC0.L, @$AR1 + 0171 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0172 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0173 0080 0050 lri $AR0, #0x0050 + 0175 02bf 05fb call 0x05fb + 0177 02df ret + 0178 00df 03a1 lr $AC1.M, @0x03a1 + 017a 0508 addis $ACC1, #0x08 + 017b 0080 0580 lri $AR0, #0x0580 + 017d 1c7f mrr $AR3, $AC1.M + 017e 0098 7fff lri $AX0.L, #0x7fff + 0180 8900 clr $ACC1 + 0181 0f50 lris $AC1.M, #0x50 + 0182 02bf 00ff call 0x00ff + 0184 02df ret + 0185 00c0 03a0 lr $AR0, @0x03a0 + 0187 191a lrri $AX0.H, @$AR0 + 0188 02bf 016a call 0x016a + 018a 02bf 0178 call 0x0178 + 018c 8100 clr $ACC0 + 018d 8900 clr $ACC1 + 018e 00de 0390 lr $AC0.M, @0x0390 + 0190 02a0 0001 andf $AC0.M, #0x0001 + 0192 029d 019b jlz 0x019b + 0194 0080 0398 lri $AR0, #0x0398 + 0196 0e08 lris $AC0.M, #0x08 + 0197 00c1 03a1 lr $AR1, @0x03a1 + 0199 02bf 0c38 call 0x0c38 + 019b 0f50 lris $AC1.M, #0x50 + 019c 00c0 03a1 lr $AR0, @0x03a1 + 019e 00da 0394 lr $AX0.H, @0x0394 + 01a0 8600 tstaxh $AX0.H + 01a1 0295 01a8 jz 0x01a8 + 01a3 1c7a mrr $AR3, $AX0.H + 01a4 00d8 0395 lr $AX0.L, @0x0395 + 01a6 02bf 00ff call 0x00ff + 01a8 0f50 lris $AC1.M, #0x50 + 01a9 00c0 03a1 lr $AR0, @0x03a1 + 01ab 00da 0396 lr $AX0.H, @0x0396 + 01ad 8600 tstaxh $AX0.H + 01ae 0295 01b5 jz 0x01b5 + 01b0 1c7a mrr $AR3, $AX0.H + 01b1 00d8 0397 lr $AX0.L, @0x0397 + 01b3 02bf 00ff call 0x00ff + 01b5 00de 0390 lr $AC0.M, @0x0390 + 01b7 02a0 0002 andf $AC0.M, #0x0002 + 01b9 02dd retlz + 01ba 0080 0398 lri $AR0, #0x0398 + 01bc 0e08 lris $AC0.M, #0x08 + 01bd 00c1 03a1 lr $AR1, @0x03a1 + 01bf 02bf 0c38 call 0x0c38 + 01c1 02df ret + 01c2 8900 clr $ACC1 + 01c3 009f 0dc0 lri $AC1.M, #0x0dc0 + 01c5 00ff 03a1 sr @0x03a1, $AC1.M + 01c7 009f 03a8 lri $AC1.M, #0x03a8 + 01c9 00ff 03a2 sr @0x03a2, $AC1.M + 01cb 009f 03a4 lri $AC1.M, #0x03a4 + 01cd 00ff 03a0 sr @0x03a0, $AC1.M + 01cf 1104 01ef bloopi #0x04, 0x01ef + 01d1 00c0 03a2 lr $AR0, @0x03a2 + 01d3 0083 0390 lri $AR3, #0x0390 + 01d5 8900 clr $ACC1 + 01d6 0f08 lris $AC1.M, #0x08 + 01d7 02bf 00ec call 0x00ec + 01d9 00da 0390 lr $AX0.H, @0x0390 + 01db 8600 tstaxh $AX0.H + 01dc 0295 01e0 jz 0x01e0 + 01de 02bf 0185 call 0x0185 + 01e0 8100 clr $ACC0 + 01e1 00de 03a2 lr $AC0.M, @0x03a2 + 01e3 0410 addis $ACC0, #0x10 + 01e4 00fe 03a2 sr @0x03a2, $AC0.M + 01e6 00de 03a1 lr $AC0.M, @0x03a1 + 01e8 0460 addis $ACC0, #0x60 + 01e9 00fe 03a1 sr @0x03a1, $AC0.M + 01eb 00de 03a0 lr $AC0.M, @0x03a0 + 01ed 7400 incm $AC0.M + 01ee 00fe 03a0 sr @0x03a0, $AC0.M + 01f0 00da 0374 lr $AX0.H, @0x0374 + 01f2 8600 tstaxh $AX0.H + 01f3 0294 0219 jnz 0x0219 + 01f5 0f50 lris $AC1.M, #0x50 + 01f6 0080 0be0 lri $AR0, #0x0be0 + 01f8 0083 0e80 lri $AR3, #0x0e80 + 01fa 0098 7fff lri $AX0.L, #0x7fff + 01fc 02bf 00ff call 0x00ff + 01fe 0f50 lris $AC1.M, #0x50 + 01ff 0080 0be0 lri $AR0, #0x0be0 + 0201 0083 0ee0 lri $AR3, #0x0ee0 + 0203 0098 b820 lri $AX0.L, #0xb820 + 0205 02bf 00ff call 0x00ff + 0207 0f28 lris $AC1.M, #0x28 + 0208 0080 0c68 lri $AR0, #0x0c68 + 020a 0083 0e80 lri $AR3, #0x0e80 + 020c 0098 b820 lri $AX0.L, #0xb820 + 020e 02bf 00ff call 0x00ff + 0210 0f28 lris $AC1.M, #0x28 + 0211 0080 0c68 lri $AR0, #0x0c68 + 0213 0083 0ee0 lri $AR3, #0x0ee0 + 0215 0098 7fff lri $AX0.L, #0x7fff + 0217 02bf 00ff call 0x00ff + 0219 8100 clr $ACC0 + 021a 8900 clr $ACC1 + 021b 0e50 lris $AC0.M, #0x50 + 021c 0080 0be0 lri $AR0, #0x0be0 + 021e 005e loop $AC0.M + 021f 1b1f srri @$AR0, $AC1.M + 0220 0080 0c40 lri $AR0, #0x0c40 + 0222 005e loop $AC0.M + 0223 1b1f srri @$AR0, $AC1.M + 0224 02df ret + 0225 00c0 03a0 lr $AR0, @0x03a0 + 0227 181a lrr $AX0.H, @$AR0 + 0228 8100 clr $ACC0 + 0229 181e lrr $AC0.M, @$AR0 + 022a 00db 0391 lr $AX1.H, @0x0391 + 022c 7400 incm $AC0.M + 022d d100 cmpar $ACC1, $AX0.H + 022e 0270 ifge + 022f 8100 clr $ACC0 + 0230 1b1e srri @$AR0, $AC0.M + 0231 00df 03a1 lr $AC1.M, @0x03a1 + 0233 009b 00a0 lri $AX1.H, #0x00a0 + 0235 0081 0393 lri $AR1, #0x0393 + 0237 18bc lrrd $AC0.L, @$AR1 + 0238 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0239 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 023a 0080 0050 lri $AR0, #0x0050 + 023c 02bf 0608 call 0x0608 + 023e 02df ret + 023f 00da 0374 lr $AX0.H, @0x0374 + 0241 8600 tstaxh $AX0.H + 0242 0294 0258 jnz 0x0258 + 0244 8900 clr $ACC1 + 0245 0f28 lris $AC1.M, #0x28 + 0246 0080 0c40 lri $AR0, #0x0c40 + 0248 0083 0ea8 lri $AR3, #0x0ea8 + 024a 0098 b820 lri $AX0.L, #0xb820 + 024c 02bf 00ff call 0x00ff + 024e 8900 clr $ACC1 + 024f 0f28 lris $AC1.M, #0x28 + 0250 0080 0c40 lri $AR0, #0x0c40 + 0252 0083 0f08 lri $AR3, #0x0f08 + 0254 0098 7fff lri $AX0.L, #0x7fff + 0256 02bf 00ff call 0x00ff + 0258 009f 0dc0 lri $AC1.M, #0x0dc0 + 025a 00ff 03a1 sr @0x03a1, $AC1.M + 025c 009f 03a8 lri $AC1.M, #0x03a8 + 025e 00ff 03a2 sr @0x03a2, $AC1.M + 0260 009f 03a4 lri $AC1.M, #0x03a4 + 0262 00ff 03a0 sr @0x03a0, $AC1.M + 0264 1104 0282 bloopi #0x04, 0x0282 + 0266 00c0 03a2 lr $AR0, @0x03a2 + 0268 0083 0390 lri $AR3, #0x0390 + 026a 0f08 lris $AC1.M, #0x08 + 026b 02bf 00ec call 0x00ec + 026d 00da 0390 lr $AX0.H, @0x0390 + 026f 8600 tstaxh $AX0.H + 0270 0295 0274 jz 0x0274 + 0272 02bf 0225 call 0x0225 + 0274 00de 03a2 lr $AC0.M, @0x03a2 + 0276 0410 addis $ACC0, #0x10 + 0277 00fe 03a2 sr @0x03a2, $AC0.M + 0279 00de 03a1 lr $AC0.M, @0x03a1 + 027b 0460 addis $ACC0, #0x60 + 027c 00fe 03a1 sr @0x03a1, $AC0.M + 027e 00de 03a0 lr $AC0.M, @0x03a0 + 0280 7400 incm $AC0.M + 0281 00fe 03a0 sr @0x03a0, $AC0.M + 0283 02df ret + 0284 0081 0386 lri $AR1, #0x0386 + 0286 009f 03a8 lri $AC1.M, #0x03a8 + 0288 0080 0040 lri $AR0, #0x0040 + 028a 02bf 05f9 call 0x05f9 + 028c 02df ret + 028d 191e lrri $AC0.M, @$AR0 + 028e 189c lrrd $AC0.L, @$AR0 + 028f 4800 addax $ACC0, $AX0.L + 0290 1b1e srri @$AR0, $AC0.M + 0291 1b1c srri @$AR0, $AC0.L + 0292 02df ret + 0293 8100 clr $ACC0 + 0294 8900 clr $ACC1 + 0295 00df 0354 lr $AC1.M, @0x0354 + 0297 00de 034e lr $AC0.M, @0x034e + 0299 8200 cmp + 029a 0293 0293 jle 0x0293 + 029c 02df ret + 029d 0080 0388 lri $AR0, #0x0388 + 029f 0081 0065 lri $AR1, #0x0065 + 02a1 0e02 lris $AC0.M, #0x02 + 02a2 173f callr $AR1 + 02a3 02bf 047f call 0x047f + 02a5 00de 0344 lr $AC0.M, @0x0344 + 02a7 00fe 0341 sr @0x0341, $AC0.M + 02a9 00de 0345 lr $AC0.M, @0x0345 + 02ab 00fe 038e sr @0x038e, $AC0.M + 02ad 8100 clr $ACC0 + 02ae 00fe 0355 sr @0x0355, $AC0.M + 02b0 02bf 0284 call 0x0284 + 02b2 02bf 064d call 0x064d + 02b4 0092 00ff lri $CR, #0x00ff + 02b6 00de 0341 lr $AC0.M, @0x0341 + 02b8 007e 047a bloop $AC0.M, 0x047a + 02ba 02bf 0116 call 0x0116 + 02bc 02bf 01c2 call 0x01c2 + 02be 02bf 04f5 call 0x04f5 + 02c0 02bf 0a86 call 0x0a86 + 02c2 00de 0355 lr $AC0.M, @0x0355 + 02c4 7400 incm $AC0.M + 02c5 00fe 0355 sr @0x0355, $AC0.M + 02c7 8100 clr $ACC0 + 02c8 00fe 0354 sr @0x0354, $AC0.M + 02ca 00de 0342 lr $AC0.M, @0x0342 + 02cc 007e 0420 bloop $AC0.M, 0x0420 + 02ce 02bf 0293 call 0x0293 + 02d0 8100 clr $ACC0 + 02d1 8900 clr $ACC1 + 02d2 00de 0354 lr $AC0.M, @0x0354 + 02d4 147c lsr $ACC0, #-4 + 02d5 0200 04fc addi $AC0.M, #0x04fc + 02d7 1c1e mrr $AR0, $AC0.M + 02d8 181f lrr $AC1.M, @$AR0 + 02d9 00de 0354 lr $AC0.M, @0x0354 + 02db 0240 000f andi $AC0.M, #0x000f + 02dd 3d80 lsrnr $ACC1 + 02de 03c0 8000 andcf $AC1.M, #0x8000 + 02e0 029c 041c jlnz 0x041c + 02e2 00d8 0354 lr $AX0.L, @0x0354 + 02e4 009a 0180 lri $AX0.H, #0x0180 + 02e6 8100 clr $ACC0 + 02e7 00de 0380 lr $AC0.M, @0x0380 + 02e9 00dc 0381 lr $AC0.L, @0x0381 + 02eb 9000 mul $AX0.L, $AX0.H + 02ec 9400 mulac $AX0.L, $AX0.H, $ACC0 + 02ed 00fe 034c sr @0x034c, $AC0.M + 02ef 00fc 034d sr @0x034d, $AC0.L + 02f1 02bf 00cc call 0x00cc + 02f3 00da 0400 lr $AX0.H, @0x0400 + 02f5 8600 tstaxh $AX0.H + 02f6 0295 041c jz 0x041c + 02f8 00da 0401 lr $AX0.H, @0x0401 + 02fa 8600 tstaxh $AX0.H + 02fb 0294 041c jnz 0x041c + 02fd 00da 0433 lr $AX0.H, @0x0433 + 02ff 00fa 03f8 sr @0x03f8, $AX0.H + 0301 00da 0406 lr $AX0.H, @0x0406 + 0303 8600 tstaxh $AX0.H + 0304 0294 0f0f jnz 0x0f0f + 0306 8100 clr $ACC0 + 0307 00de 0480 lr $AC0.M, @0x0480 + 0309 0609 cmpis $ACC0, #0x09 + 030a 0295 031d jz 0x031d + 030c 0605 cmpis $ACC0, #0x05 + 030d 0295 031d jz 0x031d + 030f 0608 cmpis $ACC0, #0x08 + 0310 0295 0ab6 jz 0x0ab6 + 0312 0610 cmpis $ACC0, #0x10 + 0313 0295 0b33 jz 0x0b33 + 0315 0620 cmpis $ACC0, #0x20 + 0316 0295 0ba4 jz 0x0ba4 + 0318 0621 cmpis $ACC0, #0x21 + 0319 0295 0bac jz 0x0bac + 031b 029f 09a3 jmp 0x09a3 + 031d 00d8 0402 lr $AX0.L, @0x0402 + 031f 8100 clr $ACC0 + 0320 8900 clr $ACC1 + 0321 00dc 0430 lr $AC0.L, @0x0430 + 0323 8d00 set15 + 0324 0950 lris $AX1.L, #0x50 + 0325 a000 mulx $AX0.L, $AX1.L + 0326 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0327 1404 lsl $ACC0, #4 + 0328 8c00 clr15 + 0329 1ffe mrr $AC1.M, $AC0.M + 032a 0083 0580 lri $AR3, #0x0580 + 032c 02bf 0865 call 0x0865 + 032e 029f 0330 jmp 0x0330 + 0330 0080 0580 lri $AR0, #0x0580 + 0332 0081 0520 lri $AR1, #0x0520 + 0334 0099 0000 lri $AX1.L, #0x0000 + 0336 02bf 0e8f call 0x0e8f + 0338 00da 04a8 lr $AX0.H, @0x04a8 + 033a 8600 tstaxh $AX0.H + 033b 0295 0341 jz 0x0341 + 033d 0080 0520 lri $AR0, #0x0520 + 033f 02bf 0d8e call 0x0d8e + 0341 009e 0520 lri $AC0.M, #0x0520 + 0343 00fe 038f sr @0x038f, $AC0.M + 0345 8900 clr $ACC1 + 0346 00df 0484 lr $AC1.M, @0x0484 + 0348 0340 001f andi $AC1.M, #0x001f + 034a b900 tst $ACC1 + 034b 0295 0371 jz 0x0371 + 034d 00de 038f lr $AC0.M, @0x038f + 034f 5c00 sub $ACC0, $ACC1 + 0350 00fe 038f sr @0x038f, $AC0.M + 0352 1c7e mrr $AR3, $AC0.M + 0353 0080 0440 lri $AR0, #0x0440 + 0355 05fe addis $ACC1, #0xfe + 0356 02bf 00e5 call 0x00e5 + 0358 0080 0490 lri $AR0, #0x0490 + 035a 00c1 038f lr $AR1, @0x038f + 035c 8900 clr $ACC1 + 035d 00df 0484 lr $AC1.M, @0x0484 + 035f 0340 001f andi $AC1.M, #0x001f + 0361 02bf 0c57 call 0x0c57 + 0363 00de 038f lr $AC0.M, @0x038f + 0365 0450 addis $ACC0, #0x50 + 0366 1c1e mrr $AR0, $AC0.M + 0367 0083 0440 lri $AR3, #0x0440 + 0369 8900 clr $ACC1 + 036a 00df 0484 lr $AC1.M, @0x0484 + 036c 0340 001f andi $AC1.M, #0x001f + 036e 05fe addis $ACC1, #0xfe + 036f 02bf 00e5 call 0x00e5 + 0371 00de 0484 lr $AC0.M, @0x0484 + 0373 0240 0020 andi $AC0.M, #0x0020 + 0375 0295 0393 jz 0x0393 + 0377 0080 04a4 lri $AR0, #0x04a4 + 0379 00c1 038f lr $AR1, @0x038f + 037b 0082 0454 lri $AR2, #0x0454 + 037d 0083 04a7 lri $AR3, #0x04a7 + 037f 18fa lrrd $AX0.H, @$AR3 + 0380 8600 tstaxh $AX0.H + 0381 0294 0391 jnz 0x0391 + 0383 18fa lrrd $AX0.H, @$AR3 + 0384 8600 tstaxh $AX0.H + 0385 0294 0391 jnz 0x0391 + 0387 18fa lrrd $AX0.H, @$AR3 + 0388 8600 tstaxh $AX0.H + 0389 0294 0391 jnz 0x0391 + 038b 8100 clr $ACC0 + 038c 18fe lrrd $AC0.M, @$AR3 + 038d 0280 7fff cmpi $AC0.M, #0x7fff + 038f 0295 0393 jz 0x0393 + 0391 02bf 0c72 call 0x0c72 + 0393 8100 clr $ACC0 + 0394 00de 042c lr $AC0.M, @0x042c + 0396 b100 tst $ACC0 + 0397 0295 039d jz 0x039d + 0399 02bf 0ddd call 0x0ddd + 039b 029f 0412 jmp 0x0412 + 039d 8100 clr $ACC0 + 039e 1c9e mrr $IX0, $AC0.M + 039f 1cde mrr $IX2, $AC0.M + 03a0 7400 incm $AC0.M + 03a1 1cfe mrr $IX3, $AC0.M + 03a2 8100 clr $ACC0 + 03a3 00de 0407 lr $AC0.M, @0x0407 + 03a5 b100 tst $ACC0 + 03a6 0295 03b5 jz 0x03b5 + 03a8 00c3 038f lr $AR3, @0x038f + 03aa 0007 dar $AR3 + 03ab 0080 0477 lri $AR0, #0x0477 + 03ad 0084 ffff lri $IX0, #0xffff + 03af 0087 ffff lri $IX3, #0xffff + 03b1 199a lrrn $AX0.H, @$AR0 + 03b2 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + 03b3 005e loop $AC0.M + 03b4 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + 03b5 00da 0485 lr $AX0.H, @0x0485 + 03b7 8600 tstaxh $AX0.H + 03b8 0295 03cb jz 0x03cb + 03ba 8900 clr $ACC1 + 03bb 0086 0005 lri $IX2, #0x0005 + 03bd 0082 040a lri $AR2, #0x040a + 03bf 1106 03c3 bloopi #0x06, 0x03c3 + 03c1 18de lrrd $AC0.M, @$AR2 + 03c2 147f lsr $ACC0, #-1 + 03c3 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M + 03c4 b900 tst $ACC1 + 03c5 0294 03cb jnz 0x03cb + 03c7 009a 0001 lri $AX0.H, #0x0001 + 03c9 00fa 0401 sr @0x0401, $AX0.H + 03cb 8f00 set40 + 03cc 0086 0002 lri $IX2, #0x0002 + 03ce 0082 0408 lri $AR2, #0x0408 + 03d0 1106 03fb bloopi #0x06, 0x03fb + 03d2 8100 clr $ACC0 + 03d3 195e lrri $AC0.M, @$AR2 + 03d4 1200 sbclr #0x00 + 03d5 b100 tst $ACC0 + 03d6 0275 ifz + 03d7 1300 sbset #0x00 + 03d8 1c7e mrr $AR3, $AC0.M + 03d9 195e lrri $AC0.M, @$AR2 + 03da 195f lrri $AC1.M, @$AR2 + 03db 5c00 sub $ACC0, $ACC1 + 03dc 14fb asr $ACC0, #-5 + 03dd 1f5e mrr $AX0.H, $AC0.M + 03de 1f1c mrr $AX0.L, $AC0.L + 03df 185e lrr $AC0.M, @$AR2 + 03e0 0240 00ff andi $AC0.M, #0x00ff + 03e2 1f7e mrr $AX1.H, $AC0.M + 03e3 185e lrr $AC0.M, @$AR2 + 03e4 1478 lsr $ACC0, #-8 + 03e5 009c 0000 lri $AC0.L, #0x0000 + 03e7 d100 cmpar $ACC1, $AX0.H + 03e8 0295 03f0 jz 0x03f0 + 03ea 185e lrr $AC0.M, @$AR2 + 03eb 0272 ifg + 03ec 7400 incm $AC0.M + 03ed 0271 ifl + 03ee 7800 decm $AC0.M + 03ef 1a5e srr @$AR2, $AC0.M + 03f0 0006 dar $AR2 + 03f1 00de 038f lr $AC0.M, @0x038f + 03f3 5600 subr $ACC0, $AX1.H + 03f4 029d 03f9 jlz 0x03f9 + 03f6 1c1e mrr $AR0, $AC0.M + 03f7 02bf 0db3 call 0x0db3 + 03f9 0000 nop + 03fa 1b5f srri @$AR2, $AC1.M + 03fb 000a iar $AR2 + 03fc 8e00 set16 + 03fd 8100 clr $ACC0 + 03fe 00de 0407 lr $AC0.M, @0x0407 + 0400 b100 tst $ACC0 + 0401 0295 0412 jz 0x0412 + 0403 00c3 038f lr $AR3, @0x038f + 0405 0087 004f lri $IX3, #0x004f + 0407 001f addarn $AR3, $IX3 + 0408 0080 0477 lri $AR0, #0x0477 + 040a 0084 ffff lri $IX0, #0xffff + 040c 0087 ffff lri $IX3, #0xffff + 040e 19fa lrrn $AX0.H, @$AR3 + 040f 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 0410 005e loop $AC0.M + 0411 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + 0412 00da 0406 lr $AX0.H, @0x0406 + 0414 8600 tstaxh $AX0.H + 0415 0294 041a jnz 0x041a + 0417 8100 clr $ACC0 + 0418 00fe 0404 sr @0x0404, $AC0.M + 041a 02bf 00d5 call 0x00d5 + 041c 00de 0354 lr $AC0.M, @0x0354 + 041e 7400 incm $AC0.M + 041f 00fe 0354 sr @0x0354, $AC0.M + 0421 0e00 lris $AC0.M, #0x00 + 0422 00fe 034e sr @0x034e, $AC0.M + 0424 0e04 lris $AC0.M, #0x04 + 0425 02bf 0792 call 0x0792 + 0427 00de 0355 lr $AC0.M, @0x0355 + 0429 0260 ff00 ori $AC0.M, #0xff00 + 042b 02bf 079c call 0x079c + 042d 02bf 0d14 call 0x0d14 + 042f 02bf 0d26 call 0x0d26 + 0431 02bf 0d7b call 0x0d7b + 0433 00de 0341 lr $AC0.M, @0x0341 + 0435 7800 decm $AC0.M + 0436 00fe 0341 sr @0x0341, $AC0.M + 0438 0080 09a0 lri $AR0, #0x09a0 + 043a 0083 0d00 lri $AR3, #0x0d00 + 043c 0f50 lris $AC1.M, #0x50 + 043d 0098 5a82 lri $AX0.L, #0x5a82 + 043f 02bf 00ff call 0x00ff + 0441 0080 09a0 lri $AR0, #0x09a0 + 0443 0083 0d60 lri $AR3, #0x0d60 + 0445 0f50 lris $AC1.M, #0x50 + 0446 02bf 00ff call 0x00ff + 0448 0083 0d00 lri $AR3, #0x0d00 + 044a 02bf 0dcb call 0x0dcb + 044c 0081 0388 lri $AR1, #0x0388 + 044e 009f 0d00 lri $AC1.M, #0x0d00 + 0450 0080 0050 lri $AR0, #0x0050 + 0452 02bf 0606 call 0x0606 + 0454 0080 0fa0 lri $AR0, #0x0fa0 + 0456 0083 0d60 lri $AR3, #0x0d60 + 0458 0f50 lris $AC1.M, #0x50 + 0459 0098 8000 lri $AX0.L, #0x8000 + 045b 02bf 00ff call 0x00ff + 045d 0083 0d60 lri $AR3, #0x0d60 + 045f 02bf 0dcb call 0x0dcb + 0461 0081 038a lri $AR1, #0x038a + 0463 009f 0d60 lri $AC1.M, #0x0d60 + 0465 0080 0050 lri $AR0, #0x0050 + 0467 02bf 0606 call 0x0606 + 0469 009a 0000 lri $AX0.H, #0x0000 + 046b 0098 00a0 lri $AX0.L, #0x00a0 + 046d 0080 0388 lri $AR0, #0x0388 + 046f 02bf 028d call 0x028d + 0471 0080 038a lri $AR0, #0x038a + 0473 02bf 028d call 0x028d + 0475 02bf 023f call 0x023f + 0477 02bf 0491 call 0x0491 + 0479 0000 nop + 047a 0000 nop + 047b 0080 002b lri $AR0, #0x002b + 047d 029f 072b jmp 0x072b + 047f 0080 0374 lri $AR0, #0x0374 + 0481 0e02 lris $AC0.M, #0x02 + 0482 02bf 0067 call 0x0067 + 0484 00de 0374 lr $AC0.M, @0x0374 + 0486 0240 7fff andi $AC0.M, #0x7fff + 0488 00fe 0374 sr @0x0374, $AC0.M + 048a 00de 0376 lr $AC0.M, @0x0376 + 048c 0240 7fff andi $AC0.M, #0x7fff + 048e 00fe 0376 sr @0x0376, $AC0.M + 0490 02df ret + 0491 00da 0374 lr $AX0.H, @0x0374 + 0493 8600 tstaxh $AX0.H + 0494 02d5 retz + 0495 0083 0f40 lri $AR3, #0x0f40 + 0497 02bf 0dcb call 0x0dcb + 0499 0083 0ca0 lri $AR3, #0x0ca0 + 049b 02bf 0dcb call 0x0dcb + 049d 0081 0374 lri $AR1, #0x0374 + 049f 009f 0f40 lri $AC1.M, #0x0f40 + 04a1 0080 0050 lri $AR0, #0x0050 + 04a3 02bf 0606 call 0x0606 + 04a5 0081 0376 lri $AR1, #0x0376 + 04a7 009f 0ca0 lri $AC1.M, #0x0ca0 + 04a9 0080 0050 lri $AR0, #0x0050 + 04ab 02bf 0606 call 0x0606 + 04ad 009a 0000 lri $AX0.H, #0x0000 + 04af 0098 00a0 lri $AX0.L, #0x00a0 + 04b1 0080 0374 lri $AR0, #0x0374 + 04b3 02bf 028d call 0x028d + 04b5 0080 0376 lri $AR0, #0x0376 + 04b7 02bf 028d call 0x028d + 04b9 02df ret + 04ba 00da 0374 lr $AX0.H, @0x0374 + 04bc 8600 tstaxh $AX0.H + 04bd 02d5 retz + 04be 009f 0be0 lri $AC1.M, #0x0be0 + 04c0 00ff 03a1 sr @0x03a1, $AC1.M + 04c2 00df 03ca lr $AC1.M, @0x03ca + 04c4 00ff 0392 sr @0x0392, $AC1.M + 04c6 00df 03cb lr $AC1.M, @0x03cb + 04c8 00ff 0393 sr @0x0393, $AC1.M + 04ca 009f 03a6 lri $AC1.M, #0x03a6 + 04cc 00ff 03a0 sr @0x03a0, $AC1.M + 04ce 00df 03c9 lr $AC1.M, @0x03c9 + 04d0 00ff 0391 sr @0x0391, $AC1.M + 04d2 00da 03c8 lr $AX0.H, @0x03c8 + 04d4 8600 tstaxh $AX0.H + 04d5 0295 04d9 jz 0x04d9 + 04d7 02bf 0225 call 0x0225 + 04d9 009f 0c40 lri $AC1.M, #0x0c40 + 04db 00ff 03a1 sr @0x03a1, $AC1.M + 04dd 00df 03da lr $AC1.M, @0x03da + 04df 00ff 0392 sr @0x0392, $AC1.M + 04e1 00df 03db lr $AC1.M, @0x03db + 04e3 00ff 0393 sr @0x0393, $AC1.M + 04e5 009f 03a7 lri $AC1.M, #0x03a7 + 04e7 00ff 03a0 sr @0x03a0, $AC1.M + 04e9 00df 03d9 lr $AC1.M, @0x03d9 + 04eb 00ff 0391 sr @0x0391, $AC1.M + 04ed 00da 03d8 lr $AX0.H, @0x03d8 + 04ef 8600 tstaxh $AX0.H + 04f0 0295 04f4 jz 0x04f4 + 04f2 02bf 0225 call 0x0225 + 04f4 02df ret + 04f5 00da 0374 lr $AX0.H, @0x0374 + 04f7 8600 tstaxh $AX0.H + 04f8 02d5 retz + 04f9 00da 03d8 lr $AX0.H, @0x03d8 + 04fb 8600 tstaxh $AX0.H + 04fc 02d5 retz + 04fd 0083 0be0 lri $AR3, #0x0be0 + 04ff 0080 0c30 lri $AR0, #0x0c30 + 0501 0f04 lris $AC1.M, #0x04 + 0502 02bf 00ec call 0x00ec + 0504 0083 0c40 lri $AR3, #0x0c40 + 0506 0080 0c90 lri $AR0, #0x0c90 + 0508 0f04 lris $AC1.M, #0x04 + 0509 02bf 00ec call 0x00ec + 050b 00df 03ca lr $AC1.M, @0x03ca + 050d 00ff 0392 sr @0x0392, $AC1.M + 050f 00df 03cb lr $AC1.M, @0x03cb + 0511 00ff 0393 sr @0x0393, $AC1.M + 0513 00df 03a6 lr $AC1.M, @0x03a6 + 0515 7500 incm $AC1.M + 0516 1f5f mrr $AX0.H, $AC1.M + 0517 009f 0be8 lri $AC1.M, #0x0be8 + 0519 02bf 016c call 0x016c + 051b 00df 03da lr $AC1.M, @0x03da + 051d 00ff 0392 sr @0x0392, $AC1.M + 051f 00df 03db lr $AC1.M, @0x03db + 0521 00ff 0393 sr @0x0393, $AC1.M + 0523 00df 03a7 lr $AC1.M, @0x03a7 + 0525 7500 incm $AC1.M + 0526 1f5f mrr $AX0.H, $AC1.M + 0527 009f 0c48 lri $AC1.M, #0x0c48 + 0529 02bf 016c call 0x016c + 052b 00de 03c8 lr $AC0.M, @0x03c8 + 052d 02a0 0001 andf $AC0.M, #0x0001 + 052f 029d 0538 jlz 0x0538 + 0531 0080 03d0 lri $AR0, #0x03d0 + 0533 0e08 lris $AC0.M, #0x08 + 0534 0081 0be0 lri $AR1, #0x0be0 + 0536 02bf 0c38 call 0x0c38 + 0538 00de 03d8 lr $AC0.M, @0x03d8 + 053a 02a0 0001 andf $AC0.M, #0x0001 + 053c 029d 0545 jlz 0x0545 + 053e 0080 03e0 lri $AR0, #0x03e0 + 0540 0e08 lris $AC0.M, #0x08 + 0541 0081 0c40 lri $AR1, #0x0c40 + 0543 02bf 0c38 call 0x0c38 + 0545 0f50 lris $AC1.M, #0x50 + 0546 0080 0be0 lri $AR0, #0x0be0 + 0548 0083 0f40 lri $AR3, #0x0f40 + 054a 00d8 03cd lr $AX0.L, @0x03cd + 054c 02bf 00ff call 0x00ff + 054e 0f50 lris $AC1.M, #0x50 + 054f 0080 0c40 lri $AR0, #0x0c40 + 0551 0083 0ca0 lri $AR3, #0x0ca0 + 0553 00d8 03df lr $AX0.L, @0x03df + 0555 02bf 00ff call 0x00ff + 0557 00de 03c8 lr $AC0.M, @0x03c8 + 0559 02a0 0002 andf $AC0.M, #0x0002 + 055b 029d 0564 jlz 0x0564 + 055d 0080 03d0 lri $AR0, #0x03d0 + 055f 0e08 lris $AC0.M, #0x08 + 0560 0081 0be0 lri $AR1, #0x0be0 + 0562 02bf 0c38 call 0x0c38 + 0564 00de 03d8 lr $AC0.M, @0x03d8 + 0566 02a0 0002 andf $AC0.M, #0x0002 + 0568 029d 0571 jlz 0x0571 + 056a 0080 03e0 lri $AR0, #0x03e0 + 056c 0e08 lris $AC0.M, #0x08 + 056d 0081 0c40 lri $AR1, #0x0c40 + 056f 02bf 0c38 call 0x0c38 + 0571 02df ret + 0572 0080 0346 lri $AR0, #0x0346 + 0574 02bf 0065 call 0x0065 + 0576 02bf 0065 call 0x0065 + 0578 0081 0346 lri $AR1, #0x0346 + 057a 193e lrri $AC0.M, @$AR1 + 057b 193c lrri $AC0.L, @$AR1 + 057c 009f 0400 lri $AC1.M, #0x0400 + 057e 00c0 0345 lr $AR0, @0x0345 + 0580 02bf 05fb call 0x05fb + 0582 0081 0348 lri $AR1, #0x0348 + 0584 193e lrri $AC0.M, @$AR1 + 0585 193c lrri $AC0.L, @$AR1 + 0586 009f 0800 lri $AC1.M, #0x0800 + 0588 00c0 0345 lr $AR0, @0x0345 + 058a 02bf 05fb call 0x05fb + 058c 0081 0346 lri $AR1, #0x0346 + 058e 193e lrri $AC0.M, @$AR1 + 058f 193c lrri $AC0.L, @$AR1 + 0590 009f 0800 lri $AC1.M, #0x0800 + 0592 00c0 0345 lr $AR0, @0x0345 + 0594 02bf 0608 call 0x0608 + 0596 0081 0348 lri $AR1, #0x0348 + 0598 193e lrri $AC0.M, @$AR1 + 0599 193c lrri $AC0.L, @$AR1 + 059a 009f 0400 lri $AC1.M, #0x0400 + 059c 00c0 0345 lr $AR0, @0x0345 + 059e 02bf 0608 call 0x0608 + 05a0 029f 0041 jmp 0x0041 + 05a2 0080 0346 lri $AR0, #0x0346 + 05a4 02bf 0065 call 0x0065 + 05a6 02bf 0065 call 0x0065 + 05a8 0081 0346 lri $AR1, #0x0346 + 05aa 193e lrri $AC0.M, @$AR1 + 05ab 193c lrri $AC0.L, @$AR1 + 05ac 009f 0400 lri $AC1.M, #0x0400 + 05ae 00c0 0345 lr $AR0, @0x0345 + 05b0 02bf 05fb call 0x05fb + 05b2 0081 0348 lri $AR1, #0x0348 + 05b4 193e lrri $AC0.M, @$AR1 + 05b5 193c lrri $AC0.L, @$AR1 + 05b6 009f 0400 lri $AC1.M, #0x0400 + 05b8 00c0 0345 lr $AR0, @0x0345 + 05ba 02bf 0608 call 0x0608 + 05bc 029f 0041 jmp 0x0041 + 05be 0080 0346 lri $AR0, #0x0346 + 05c0 02bf 0065 call 0x0065 + 05c2 02bf 0065 call 0x0065 + 05c4 0081 0346 lri $AR1, #0x0346 + 05c6 193e lrri $AC0.M, @$AR1 + 05c7 193c lrri $AC0.L, @$AR1 + 05c8 009f 0400 lri $AC1.M, #0x0400 + 05ca 00c0 0344 lr $AR0, @0x0344 + 05cc 02bf 05fb call 0x05fb + 05ce 0081 0348 lri $AR1, #0x0348 + 05d0 193e lrri $AC0.M, @$AR1 + 05d1 193c lrri $AC0.L, @$AR1 + 05d2 009f 0800 lri $AC1.M, #0x0800 + 05d4 00c0 0344 lr $AR0, @0x0344 + 05d6 02bf 05fb call 0x05fb + 05d8 0080 0400 lri $AR0, #0x0400 + 05da 0083 0800 lri $AR3, #0x0800 + 05dc 0084 0000 lri $IX0, #0x0000 + 05de 00da 0345 lr $AX0.H, @0x0345 + 05e0 00df 0344 lr $AC1.M, @0x0344 + 05e2 8f00 set40 + 05e3 197b lrri $AX1.H, @$AR3 + 05e4 b800 mulx $AX0.H, $AX1.H + 05e5 197b lrri $AX1.H, @$AR3 + 05e6 007f 05eb bloop $AC1.M, 0x05eb + 05e8 199e lrrn $AC0.M, @$AR0 + 05e9 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 05ea 80b2 nx'sl : $AC0.M, $AX1.H + 05eb 0000 nop + 05ec 8e00 set16 + 05ed 0081 0346 lri $AR1, #0x0346 + 05ef 193e lrri $AC0.M, @$AR1 + 05f0 193c lrri $AC0.L, @$AR1 + 05f1 009f 0400 lri $AC1.M, #0x0400 + 05f3 00c0 0344 lr $AR0, @0x0344 + 05f5 02bf 0608 call 0x0608 + 05f7 029f 0041 jmp 0x0041 + 05f9 193e lrri $AC0.M, @$AR1 + 05fa 193c lrri $AC0.L, @$AR1 + 05fb 2fcd srs @DSPA, $AC1.M + 05fc 0f00 lris $AC1.M, #0x00 + 05fd 2fc9 srs @DSCR, $AC1.M + 05fe 2ece srs @DSMAH, $AC0.M + 05ff 2ccf srs @DSMAL, $AC0.L + 0600 1fe0 mrr $AC1.M, $AR0 + 0601 1501 lsl $ACC1, #1 + 0602 2fcb srs @DSBL, $AC1.M + 0603 02bf 060c call 0x060c + 0605 02df ret + 0606 193e lrri $AC0.M, @$AR1 + 0607 193c lrri $AC0.L, @$AR1 + 0608 2fcd srs @DSPA, $AC1.M + 0609 0f01 lris $AC1.M, #0x01 + 060a 029f 05fd jmp 0x05fd + 060c 26c9 lrs $AC0.M, @DSCR + 060d 02a0 0004 andf $AC0.M, #0x0004 + 060f 029c 060c jlnz 0x060c + 0611 02df ret + 0612 193e lrri $AC0.M, @$AR1 + 0613 193c lrri $AC0.L, @$AR1 + 0614 00ff ffcd sr @DSPA, $AC1.M + 0616 0f00 lris $AC1.M, #0x00 + 0617 00ff ffc9 sr @DSCR, $AC1.M + 0619 00fe ffce sr @DSMAH, $AC0.M + 061b 00fc ffcf sr @DSMAL, $AC0.L + 061d 1fe0 mrr $AC1.M, $AR0 + 061e 1501 lsl $ACC1, #1 + 061f 00ff ffcb sr @DSBL, $AC1.M + 0621 02df ret + 0622 00de ffc9 lr $AC0.M, @DSCR + 0624 02a0 0004 andf $AC0.M, #0x0004 + 0626 029c 0622 jlnz 0x0622 + 0628 02df ret + 0629 0080 0346 lri $AR0, #0x0346 + 062b 02bf 0065 call 0x0065 + 062d 02bf 0065 call 0x0065 + 062f 0081 0346 lri $AR1, #0x0346 + 0631 00df 0349 lr $AC1.M, @0x0349 + 0633 0340 ffff andi $AC1.M, #0xffff + 0635 00c0 0345 lr $AR0, @0x0345 + 0637 02bf 05f9 call 0x05f9 + 0639 029f 0041 jmp 0x0041 + 063b 0080 0346 lri $AR0, #0x0346 + 063d 02bf 0065 call 0x0065 + 063f 02bf 0065 call 0x0065 + 0641 0081 0346 lri $AR1, #0x0346 + 0643 00df 0349 lr $AC1.M, @0x0349 + 0645 0340 ffff andi $AC1.M, #0xffff + 0647 00c0 0345 lr $AR0, @0x0345 + 0649 02bf 0606 call 0x0606 + 064b 029f 0041 jmp 0x0041 + 064d 0092 00ff lri $CR, #0x00ff + 064f 009e ffff lri $AC0.M, #0xffff + 0651 2ed4 srs @ACSAH, $AC0.M + 0652 2ed5 srs @ACSAL, $AC0.M + 0653 2ed6 srs @ACEAH, $AC0.M + 0654 2ed7 srs @ACEAL, $AC0.M + 0655 02df ret + 0656 00ff ffd1 sr @SampleFormat, $AC1.M + 0658 0340 0003 andi $AC1.M, #0x0003 + 065a 7900 decm $AC1.M + 065b 02ca lsrn + 065c 00df 037d lr $AC1.M, @0x037d + 065e 00dd 037e lr $AC1.L, @0x037e + 0660 4c00 add $ACC0, $ACC1 + 0661 00fe ffd8 sr @ACCAH, $AC0.M + 0663 00fc ffd9 sr @ACCAL, $AC0.L + 0665 02df ret + 0666 1fc3 mrr $AC0.M, $AR3 + 0667 043f addis $ACC0, #0x3f + 0668 0240 fff0 andi $AC0.M, #0xfff0 + 066a 00fe ffcd sr @DSPA, $AC0.M + 066c 1c1a mrr $AR0, $AX0.H + 066d 00da 037f lr $AX0.H, @0x037f + 066f 4400 addr $ACC0, $AX0.H + 0670 1f40 mrr $AX0.H, $AR0 + 0671 1c1e mrr $AR0, $AC0.M + 0672 1fda mrr $AC0.M, $AX0.H + 0673 041f addis $ACC0, #0x1f + 0674 0240 fff0 andi $AC0.M, #0xfff0 + 0676 1401 lsl $ACC0, #1 + 0677 00fe ffcb sr @DSBL, $AC0.M + 0679 00de ffc9 lr $AC0.M, @DSCR + 067b 02a0 0004 andf $AC0.M, #0x0004 + 067d 029c 0679 jlnz 0x0679 + 067f 007a 0682 bloop $AX0.H, 0x0682 + 0681 191e lrri $AC0.M, @$AR0 + 0682 1b7e srri @$AR3, $AC0.M + 0683 02df ret + 0684 8900 clr $ACC1 + 0685 1ffc mrr $AC1.M, $AC0.L + 0686 0340 001f andi $AC1.M, #0x001f + 0688 00ff 037f sr @0x037f, $AC1.M + 068a 1ffc mrr $AC1.M, $AC0.L + 068b 0340 ffe0 andi $AC1.M, #0xffe0 + 068d 1f9f mrr $AC0.L, $AC1.M + 068e 00df 037d lr $AC1.M, @0x037d + 0690 00dd 037e lr $AC1.L, @0x037e + 0692 4c00 add $ACC0, $ACC1 + 0693 00fe ffce sr @DSMAH, $AC0.M + 0695 00fc ffcf sr @DSMAL, $AC0.L + 0697 0f00 lris $AC1.M, #0x00 + 0698 00ff ffc9 sr @DSCR, $AC1.M + 069a 02df ret + 069b 00df 037f lr $AC1.M, @0x037f + 069d 157f lsr $ACC1, #-1 + 069e 00ff 037f sr @0x037f, $AC1.M + 06a0 02df ret + 06a1 8600 tstaxh $AX0.H + 06a2 02d5 retz + 06a3 1f1a mrr $AX0.L, $AX0.H + 06a4 009e 0780 lri $AC0.M, #0x0780 + 06a6 00fe ffcd sr @DSPA, $AC0.M + 06a8 1fda mrr $AC0.M, $AX0.H + 06a9 043f addis $ACC0, #0x3f + 06aa 0240 ffe0 andi $AC0.M, #0xffe0 + 06ac 00fe ffcb sr @DSBL, $AC0.M + 06ae 00de ffc9 lr $AC0.M, @DSCR + 06b0 02a0 0004 andf $AC0.M, #0x0004 + 06b2 029c 06ae jlnz 0x06ae + 06b4 8100 clr $ACC0 + 06b5 00de 037f lr $AC0.M, @0x037f + 06b7 147f lsr $ACC0, #-1 + 06b8 0200 0780 addi $AC0.M, #0x0780 + 06ba 1c1e mrr $AR0, $AC0.M + 06bb 00de 037f lr $AC0.M, @0x037f + 06bd 02a0 0001 andf $AC0.M, #0x0001 + 06bf 029d 06c8 jlz 0x06c8 + 06c1 8100 clr $ACC0 + 06c2 191e lrri $AC0.M, @$AR0 + 06c3 1488 asl $ACC0, #8 + 06c4 1b7e srri @$AR3, $AC0.M + 06c5 1fda mrr $AC0.M, $AX0.H + 06c6 7800 decm $AC0.M + 06c7 1f5e mrr $AX0.H, $AC0.M + 06c8 8100 clr $ACC0 + 06c9 1fda mrr $AC0.M, $AX0.H + 06ca 147f lsr $ACC0, #-1 + 06cb 007e 06d4 bloop $AC0.M, 0x06d4 + 06cd 8100 clr $ACC0 + 06ce 181e lrr $AC0.M, @$AR0 + 06cf 0240 ff00 andi $AC0.M, #0xff00 + 06d1 1b7e srri @$AR3, $AC0.M + 06d2 191e lrri $AC0.M, @$AR0 + 06d3 1488 asl $ACC0, #8 + 06d4 1b7e srri @$AR3, $AC0.M + 06d5 1fda mrr $AC0.M, $AX0.H + 06d6 1f58 mrr $AX0.H, $AX0.L + 06d7 02a0 0001 andf $AC0.M, #0x0001 + 06d9 02dd retlz + 06da 8100 clr $ACC0 + 06db 181e lrr $AC0.M, @$AR0 + 06dc 0240 ff00 andi $AC0.M, #0xff00 + 06de 1b7e srri @$AR3, $AC0.M + 06df 02df ret + 06e0 1205 sbclr #0x05 + 06e1 8e00 set16 + 06e2 00f0 03fd sr @0x03fd, $AC0.H + 06e4 00fc 03ff sr @0x03ff, $AC0.L + 06e6 f400 lsr16 $ACC0 + 06e7 00fc 03fe sr @0x03fe, $AC0.L + 06e9 00fa 03fa sr @0x03fa, $AX0.H + 06eb 8100 clr $ACC0 + 06ec 00de fffe lr $AC0.M, @CMBH + 06ee 02c0 8000 andcf $AC0.M, #0x8000 + 06f0 029c 07e1 jlnz 0x07e1 + 06f2 00da ffff lr $AX0.H, @CMBL + 06f4 8600 tstaxh $AX0.H + 06f5 0294 07ba jnz 0x07ba + 06f7 00de fffe lr $AC0.M, @CMBH + 06f9 02c0 8000 andcf $AC0.M, #0x8000 + 06fb 029c 06f7 jlnz 0x06f7 + 06fd 0240 000f andi $AC0.M, #0x000f + 06ff 1f5e mrr $AX0.H, $AC0.M + 0700 7400 incm $AC0.M + 0701 0c00 lris $AC0.L, #0x00 + 0702 1404 lsl $ACC0, #4 + 0703 00fe 034e sr @0x034e, $AC0.M + 0705 1fda mrr $AC0.M, $AX0.H + 0706 1f40 mrr $AX0.H, $AR0 + 0707 0200 04fc addi $AC0.M, #0x04fc + 0709 1c1e mrr $AR0, $AC0.M + 070a 00de ffff lr $AC0.M, @CMBL + 070c 1a1e srr @$AR0, $AC0.M + 070d 1c1a mrr $AR0, $AX0.H + 070e 00de 03fe lr $AC0.M, @0x03fe + 0710 00dc 03ff lr $AC0.L, @0x03ff + 0712 00d0 03fd lr $AC0.H, @0x03fd + 0714 00da 03fa lr $AX0.H, @0x03fa + 0716 1305 sbset #0x05 + 0717 02ff rti + 0718 009a 0002 lri $AX0.H, #0x0002 + 071a 00fa 03a3 sr @0x03a3, $AX0.H + 071c 00e0 03f9 sr @0x03f9, $AR0 + 071e 02bf 07a4 call 0x07a4 + 0720 16fc dcd1 si @DMBH, #0xdcd1 + 0722 16fd 0002 si @DMBL, #0x0002 + 0724 16fb 0001 si @DIRQ, #0x0001 + 0726 0021 halt + 0727 073f cmpis $ACC1, #0x3f + 0728 0740 cmpis $ACC1, #0x40 + 0729 0780 cmpis $ACC1, #0x80 + 072a 0783 cmpis $ACC1, #0x83 + 072b 00e0 03f9 sr @0x03f9, $AR0 + 072d 009e 0005 lri $AC0.M, #0x0005 + 072f 02bf 0792 call 0x0792 + 0731 8e00 set16 + 0732 8100 clr $ACC0 + 0733 8900 clr $ACC1 + 0734 02bf 0786 call 0x0786 + 0736 27ff lrs $AC1.M, @CMBL + 0737 009e 0727 lri $AC0.M, #0x0727 + 0739 4c00 add $ACC0, $ACC1 + 073a 1c7e mrr $AR3, $AC0.M + 073b 0313 ilrr $AC1.M, @$AR3 + 073c 1c7f mrr $AR3, $AC1.M + 073d 176f jmpr $AR3 + 073e 0021 halt + 073f 0021 halt + 0740 009a 0002 lri $AX0.H, #0x0002 + 0742 00fa 03a3 sr @0x03a3, $AX0.H + 0744 8100 clr $ACC0 + 0745 8900 clr $ACC1 + 0746 02bf 0786 call 0x0786 + 0748 24ff lrs $AC0.L, @CMBL + 0749 02bf 078c call 0x078c + 074b 25ff lrs $AC1.L, @CMBL + 074c 02bf 078c call 0x078c + 074e 27ff lrs $AC1.M, @CMBL + 074f 2ece srs @DSMAH, $AC0.M + 0750 2ccf srs @DSMAL, $AC0.L + 0751 16c9 0001 si @DSCR, #0x0001 + 0753 2fcd srs @DSPA, $AC1.M + 0754 2dcb srs @DSBL, $AC1.L + 0755 8100 clr $ACC0 + 0756 8900 clr $ACC1 + 0757 02bf 0786 call 0x0786 + 0759 24ff lrs $AC0.L, @CMBL + 075a 1c9e mrr $IX0, $AC0.M + 075b 1cbc mrr $IX1, $AC0.L + 075c 02bf 078c call 0x078c + 075e 25ff lrs $AC1.L, @CMBL + 075f 02bf 078c call 0x078c + 0761 27ff lrs $AC1.M, @CMBL + 0762 1cdf mrr $IX2, $AC1.M + 0763 1cfd mrr $IX3, $AC1.L + 0764 8100 clr $ACC0 + 0765 02bf 0786 call 0x0786 + 0767 26ff lrs $AC0.M, @CMBL + 0768 1c1e mrr $AR0, $AC0.M + 0769 8900 clr $ACC1 + 076a 02bf 078c call 0x078c + 076c 20ff lrs $AX0.L, @CMBL + 076d 1f5f mrr $AX0.H, $AC1.M + 076e 02bf 0786 call 0x0786 + 0770 21ff lrs $AX1.L, @CMBL + 0771 02bf 0786 call 0x0786 + 0773 23ff lrs $AX1.H, @CMBL + 0774 26c9 lrs $AC0.M, @DSCR + 0775 02a0 0004 andf $AC0.M, #0x0004 + 0777 029c 0774 jlnz 0x0774 + 0779 1206 sbclr #0x06 + 077a 1203 sbclr #0x03 + 077b 1204 sbclr #0x04 + 077c 1205 sbclr #0x05 + 077d 029f 80b5 jmp 0x80b5 + 077f 0021 halt + 0780 029f 8000 jmp 0x8000 + 0782 0021 halt + 0783 00c0 03f9 lr $AR0, @0x03f9 + 0785 170f jmpr $AR0 + 0786 26fe lrs $AC0.M, @CMBH + 0787 02c0 8000 andcf $AC0.M, #0x8000 + 0789 029c 0786 jlnz 0x0786 + 078b 02df ret + 078c 27fe lrs $AC1.M, @CMBH + 078d 03c0 8000 andcf $AC1.M, #0x8000 + 078f 029c 078c jlnz 0x078c + 0791 02df ret + 0792 02bf 07aa call 0x07aa + 0794 16fc dcd1 si @DMBH, #0xdcd1 + 0796 2efd srs @DMBL, $AC0.M + 0797 16fb 0001 si @DIRQ, #0x0001 + 0799 02bf 07aa call 0x07aa + 079b 02df ret + 079c 02bf 07aa call 0x07aa + 079e 16fc f355 si @DMBH, #0xf355 + 07a0 2efd srs @DMBL, $AC0.M + 07a1 02bf 07aa call 0x07aa + 07a3 02df ret + 07a4 26fc lrs $AC0.M, @DMBH + 07a5 02c0 8000 andcf $AC0.M, #0x8000 + 07a7 029d 07a4 jlz 0x07a4 + 07a9 02df ret + 07aa 27fc lrs $AC1.M, @DMBH + 07ab 03c0 8000 andcf $AC1.M, #0x8000 + 07ad 029d 07aa jlz 0x07aa + 07af 02df ret + 07b0 009a 0280 lri $AX0.H, #0x0280 + 07b2 00fa 0350 sr @0x0350, $AX0.H + 07b4 00fa 0351 sr @0x0351, $AX0.H + 07b6 0a00 lris $AX0.H, #0x00 + 07b7 00fa 0352 sr @0x0352, $AX0.H + 07b9 02df ret + 07ba 00e0 03fb sr @0x03fb, $AR0 + 07bc 00e8 03fc sr @0x03fc, $WR0 + 07be 00c0 0350 lr $AR0, @0x0350 + 07c0 0088 002f lri $WR0, #0x002f + 07c2 1b1a srri @$AR0, $AX0.H + 07c3 00de fffe lr $AC0.M, @CMBH + 07c5 02c0 8000 andcf $AC0.M, #0x8000 + 07c7 029c 07c3 jlnz 0x07c3 + 07c9 00dc ffff lr $AC0.L, @CMBL + 07cb 1b1e srri @$AR0, $AC0.M + 07cc 1b1c srri @$AR0, $AC0.L + 07cd 1fda mrr $AC0.M, $AX0.H + 07ce 7800 decm $AC0.M + 07cf 1f5e mrr $AX0.H, $AC0.M + 07d0 8600 tstaxh $AX0.H + 07d1 0294 07c3 jnz 0x07c3 + 07d3 8100 clr $ACC0 + 07d4 00de 0352 lr $AC0.M, @0x0352 + 07d6 7400 incm $AC0.M + 07d7 00fe 0352 sr @0x0352, $AC0.M + 07d9 00e0 0350 sr @0x0350, $AR0 + 07db 00c0 03fb lr $AR0, @0x03fb + 07dd 00c8 03fc lr $WR0, @0x03fc + 07df 029f 070e jmp 0x070e + 07e1 00e0 03fb sr @0x03fb, $AR0 + 07e3 00e8 03fc sr @0x03fc, $WR0 + 07e5 00c0 0350 lr $AR0, @0x0350 + 07e7 0088 002f lri $WR0, #0x002f + 07e9 0a00 lris $AX0.H, #0x00 + 07ea 1b1a srri @$AR0, $AX0.H + 07eb 029f 07d3 jmp 0x07d3 + 07ed 00c0 0351 lr $AR0, @0x0351 + 07ef 0088 002f lri $WR0, #0x002f + 07f1 00da 0352 lr $AX0.H, @0x0352 + 07f3 8600 tstaxh $AX0.H + 07f4 0295 0815 jz 0x0815 + 07f6 1205 sbclr #0x05 + 07f7 00da 0352 lr $AX0.H, @0x0352 + 07f9 1fda mrr $AC0.M, $AX0.H + 07fa 7800 decm $AC0.M + 07fb 00fe 0352 sr @0x0352, $AC0.M + 07fd 1305 sbset #0x05 + 07fe 0081 0356 lri $AR1, #0x0356 + 0800 191e lrri $AC0.M, @$AR0 + 0801 02c0 8000 andcf $AC0.M, #0x8000 + 0803 029d 0819 jlz 0x0819 + 0805 1f5e mrr $AX0.H, $AC0.M + 0806 8600 tstaxh $AX0.H + 0807 0295 081d jz 0x081d + 0809 007a 080e bloop $AX0.H, 0x080e + 080b 191e lrri $AC0.M, @$AR0 + 080c 1b3e srri @$AR1, $AC0.M + 080d 191e lrri $AC0.M, @$AR0 + 080e 1b3e srri @$AR1, $AC0.M + 080f 00e0 0351 sr @0x0351, $AR0 + 0811 0088 ffff lri $WR0, #0xffff + 0813 029f 002d jmp 0x002d + 0815 0088 ffff lri $WR0, #0xffff + 0817 029f 002b jmp 0x002b + 0819 00e0 0351 sr @0x0351, $AR0 + 081b 029f 07f1 jmp 0x07f1 + 081d 0080 07ed lri $AR0, #0x07ed + 081f 029f 0718 jmp 0x0718 + 0821 8100 clr $ACC0 + 0822 0e10 lris $AC0.M, #0x10 + 0823 2232 lrs $AX0.H, @0x0032 + 0824 8600 tstaxh $AX0.H + 0825 02d5 retz + 0826 5400 subr $ACC0, $AX0.H + 0827 0200 0458 addi $AC0.M, #0x0458 + 0829 1c1e mrr $AR0, $AC0.M + 082a 1fda mrr $AC0.M, $AX0.H + 082b 04fe addis $ACC0, #0xfe + 082c 1f1e mrr $AX0.L, $AC0.M + 082d 191e lrri $AC0.M, @$AR0 + 082e 0291 0834 jl 0x0834 + 0830 191a lrri $AX0.H, @$AR0 + 0831 0058 loop $AX0.L + 0832 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0833 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 0834 1b7e srri @$AR3, $AC0.M + 0835 02df ret + 0836 02bf 0821 call 0x0821 + 0838 8100 clr $ACC0 + 0839 2632 lrs $AC0.M, @0x0032 + 083a 5c00 sub $ACC0, $ACC1 + 083b 2e32 srs @0x0032, $AC0.M + 083c 0092 00ff lri $CR, #0x00ff + 083e 02df ret + 083f 00de 04fb lr $AC0.M, @0x04fb + 0841 7400 incm $AC0.M + 0842 00fe 04fb sr @0x04fb, $AC0.M + 0844 8100 clr $ACC0 + 0845 2e32 srs @0x0032, $AC0.M + 0846 2e66 srs @0x0066, $AC0.M + 0847 2e67 srs @0x0067, $AC0.M + 0848 268a lrs $AC0.M, @0xff8a + 0849 248b lrs $AC0.L, @0xff8b + 084a 2e3a srs @0x003a, $AC0.M + 084b 2c3b srs @0x003b, $AC0.L + 084c 268c lrs $AC0.M, @0xff8c + 084d 248d lrs $AC0.L, @0xff8d + 084e 2e38 srs @0x0038, $AC0.M + 084f 2c39 srs @0x0039, $AC0.L + 0850 02df ret + 0851 8100 clr $ACC0 + 0852 2689 lrs $AC0.M, @0xff89 + 0853 0240 000f andi $AC0.M, #0x000f + 0855 1f5e mrr $AX0.H, $AC0.M + 0856 8100 clr $ACC0 + 0857 0e10 lris $AC0.M, #0x10 + 0858 5400 subr $ACC0, $AX0.H + 0859 2e32 srs @0x0032, $AC0.M + 085a 268a lrs $AC0.M, @0xff8a + 085b 248b lrs $AC0.L, @0xff8b + 085c 2288 lrs $AX0.H, @0xff88 + 085d 2089 lrs $AX0.L, @0xff89 + 085e 5800 subax $ACC0, $AX0.L + 085f 0a00 lris $AX0.H, #0x00 + 0860 2032 lrs $AX0.L, @0x0032 + 0861 5800 subax $ACC0, $AX0.L + 0862 2e3a srs @0x003a, $AC0.M + 0863 2c3b srs @0x003b, $AC0.L + 0864 02df ret + 0865 0092 0004 lri $CR, #0x0004 + 0867 8100 clr $ACC0 + 0868 2604 lrs $AC0.M, @0x0004 + 0869 b100 tst $ACC0 + 086a 02b4 083f callnz 0x083f + 086c 8100 clr $ACC0 + 086d 2601 lrs $AC0.M, @0x0001 + 086e b100 tst $ACC0 + 086f 0294 090d jnz 0x090d + 0871 2232 lrs $AX0.H, @0x0032 + 0872 c900 cmpar $ACC0, $AX1.H + 0873 0293 0836 jle 0x0836 + 0875 5500 subr $ACC1, $AX0.H + 0876 02bf 0821 call 0x0821 + 0878 223a lrs $AX0.H, @0x003a + 0879 8600 tstaxh $AX0.H + 087a 0294 0881 jnz 0x0881 + 087c 8100 clr $ACC0 + 087d 263b lrs $AC0.M, @0x003b + 087e 8200 cmp + 087f 0291 08d3 jl 0x08d3 + 0881 8100 clr $ACC0 + 0882 1fdf mrr $AC0.M, $AC1.M + 0883 040f addis $ACC0, #0x0f + 0884 147c lsr $ACC0, #-4 + 0885 1f7e mrr $AX1.H, $AC0.M + 0886 0c00 lris $AC0.L, #0x00 + 0887 1404 lsl $ACC0, #4 + 0888 1f1e mrr $AX0.L, $AC0.M + 0889 0a00 lris $AX0.H, #0x00 + 088a 8100 clr $ACC0 + 088b 263a lrs $AC0.M, @0x003a + 088c 243b lrs $AC0.L, @0x003b + 088d 5800 subax $ACC0, $AX0.L + 088e 0290 0899 jge 0x0899 + 0890 8100 clr $ACC0 + 0891 263b lrs $AC0.M, @0x003b + 0892 5c00 sub $ACC0, $ACC1 + 0893 2e32 srs @0x0032, $AC0.M + 0894 8100 clr $ACC0 + 0895 2e3a srs @0x003a, $AC0.M + 0896 2e3b srs @0x003b, $AC0.M + 0897 029f 089f jmp 0x089f + 0899 2e3a srs @0x003a, $AC0.M + 089a 2c3b srs @0x003b, $AC0.L + 089b 0c00 lris $AC0.L, #0x00 + 089c 1fd8 mrr $AC0.M, $AX0.L + 089d 5c00 sub $ACC0, $ACC1 + 089e 2e32 srs @0x0032, $AC0.M + 089f 8100 clr $ACC0 + 08a0 1fdb mrr $AC0.M, $AX1.H + 08a1 02bf 0913 call 0x0913 + 08a3 2232 lrs $AX0.H, @0x0032 + 08a4 8600 tstaxh $AX0.H + 08a5 0295 08d0 jz 0x08d0 + 08a7 0a10 lris $AX0.H, #0x10 + 08a8 8100 clr $ACC0 + 08a9 1fc3 mrr $AC0.M, $AR3 + 08aa 5400 subr $ACC0, $AX0.H + 08ab 1c7e mrr $AR3, $AC0.M + 08ac 0080 0458 lri $AR0, #0x0458 + 08ae 197e lrri $AC0.M, @$AR3 + 08af 197a lrri $AX0.H, @$AR3 + 08b0 100e loopi #0x0e + 08b1 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H + 08b2 1b1e srri @$AR0, $AC0.M + 08b3 1b1a srri @$AR0, $AX0.H + 08b4 8100 clr $ACC0 + 08b5 263a lrs $AC0.M, @0x003a + 08b6 243b lrs $AC0.L, @0x003b + 08b7 b100 tst $ACC0 + 08b8 0294 08d0 jnz 0x08d0 + 08ba 2232 lrs $AX0.H, @0x0032 + 08bb 8600 tstaxh $AX0.H + 08bc 0295 08d0 jz 0x08d0 + 08be 0080 0467 lri $AR0, #0x0467 + 08c0 8100 clr $ACC0 + 08c1 268b lrs $AC0.M, @0xff8b + 08c2 b100 tst $ACC0 + 08c3 0295 08d0 jz 0x08d0 + 08c5 0200 000f addi $AC0.M, #0x000f + 08c7 0240 000f andi $AC0.M, #0x000f + 08c9 0200 0458 addi $AC0.M, #0x0458 + 08cb 1c7e mrr $AR3, $AC0.M + 08cc 007a 08cf bloop $AX0.H, 0x08cf + 08ce 18fe lrrd $AC0.M, @$AR3 + 08cf 1a9e srrd @$AR0, $AC0.M + 08d0 0092 00ff lri $CR, #0x00ff + 08d2 02df ret + 08d3 b100 tst $ACC0 + 08d4 0295 08e3 jz 0x08e3 + 08d6 5d00 sub $ACC1, $ACC0 + 08d7 040f addis $ACC0, #0x0f + 08d8 147c lsr $ACC0, #-4 + 08d9 0c00 lris $AC0.L, #0x00 + 08da 00e3 0363 sr @0x0363, $AR3 + 08dc 02bf 0913 call 0x0913 + 08de 00de 0363 lr $AC0.M, @0x0363 + 08e0 223b lrs $AX0.H, @0x003b + 08e1 4400 addr $ACC0, $AX0.H + 08e2 1c7e mrr $AR3, $AC0.M + 08e3 8100 clr $ACC0 + 08e4 2681 lrs $AC0.M, @0xff81 + 08e5 b100 tst $ACC0 + 08e6 0295 090b jz 0x090b + 08e8 2380 lrs $AX1.H, @0xff80 + 08e9 2688 lrs $AC0.M, @0xff88 + 08ea 2489 lrs $AC0.L, @0xff89 + 08eb 1408 lsl $ACC0, #8 + 08ec 14f4 asr $ACC0, #-12 + 08ed 2380 lrs $AX1.H, @0xff80 + 08ee 8d00 set15 + 08ef c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + 08f0 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 08f1 8c00 clr15 + 08f2 f000 lsl16 $ACC0 + 08f3 4e00 addp $ACC0 + 08f4 238c lrs $AX1.H, @0xff8c + 08f5 218d lrs $AX1.L, @0xff8d + 08f6 4a00 addax $ACC0, $AX1.L + 08f7 2e38 srs @0x0038, $AC0.M + 08f8 2c39 srs @0x0039, $AC0.L + 08f9 2682 lrs $AC0.M, @0xff82 + 08fa 2e67 srs @0x0067, $AC0.M + 08fb 2683 lrs $AC0.M, @0xff83 + 08fc 2e66 srs @0x0066, $AC0.M + 08fd 00e3 0363 sr @0x0363, $AR3 + 08ff 0083 0458 lri $AR3, #0x0458 + 0901 8100 clr $ACC0 + 0902 0e01 lris $AC0.M, #0x01 + 0903 02bf 0913 call 0x0913 + 0905 00c3 0363 lr $AR3, @0x0363 + 0907 02bf 0851 call 0x0851 + 0909 029f 0871 jmp 0x0871 + 090b 0e01 lris $AC0.M, #0x01 + 090c 2e01 srs @0x0001, $AC0.M + 090d 8100 clr $ACC0 + 090e 005f loop $AC1.M + 090f 1b7e srri @$AR3, $AC0.M + 0910 0092 00ff lri $CR, #0x00ff + 0912 02df ret + 0913 00ff 0360 sr @0x0360, $AC1.M + 0915 00fe 0361 sr @0x0361, $AC0.M + 0917 2638 lrs $AC0.M, @0x0038 + 0918 2439 lrs $AC0.L, @0x0039 + 0919 0f05 lris $AC1.M, #0x05 + 091a 02bf 0656 call 0x0656 + 091c 2638 lrs $AC0.M, @0x0038 + 091d 2439 lrs $AC0.L, @0x0039 + 091e 8900 clr $ACC1 + 091f 00df 0361 lr $AC1.M, @0x0361 + 0921 2280 lrs $AX0.H, @0xff80 + 0922 d000 mulc $AC1.M, $AX0.H + 0923 6f00 movp $ACC1 + 0924 4c00 add $ACC0, $ACC1 + 0925 2e38 srs @0x0038, $AC0.M + 0926 2c39 srs @0x0039, $AC0.L + 0927 8100 clr $ACC0 + 0928 00de 0361 lr $AC0.M, @0x0361 + 092a 007e 0991 bloop $AC0.M, 0x0991 + 092c 0080 ffd3 lri $AR0, #0xffd3 + 092e 0084 0000 lri $IX0, #0x0000 + 0930 199e lrrn $AC0.M, @$AR0 + 0931 8900 clr $ACC1 + 0932 1ffe mrr $AC1.M, $AC0.M + 0933 1401 lsl $ACC0, #1 + 0934 0240 001e andi $AC0.M, #0x001e + 0936 0200 0300 addi $AC0.M, #0x0300 + 0938 1c3e mrr $AR1, $AC0.M + 0939 157c lsr $ACC1, #-4 + 093a 0340 000f andi $AC1.M, #0x000f + 093c 0a11 lris $AX0.H, #0x11 + 093d 5500 subr $ACC1, $AX0.H + 093e 8100 clr $ACC0 + 093f 2680 lrs $AC0.M, @0xff80 + 0940 0605 cmpis $ACC0, #0x05 + 0941 0295 095a jz 0x095a + 0943 009a 00f0 lri $AX0.H, #0x00f0 + 0945 0b0f lris $AX1.H, #0x0f + 0946 0082 0364 lri $AR2, #0x0364 + 0948 1998 lrrn $AX0.L, @$AR0 + 0949 6000 movr $ACC0, $AX0.L + 094a 1107 0951 bloopi #0x07, 0x0951 + 094c 3400 andr $AC0.M, $AX0.H + 094d 1408 lsl $ACC0, #8 + 094e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 094f 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 0950 140c lsl $ACC0, #12 + 0951 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0952 3400 andr $AC0.M, $AX0.H + 0953 1408 lsl $ACC0, #8 + 0954 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0955 3600 andr $AC0.M, $AX1.H + 0956 140c lsl $ACC0, #12 + 0957 1b5e srri @$AR2, $AC0.M + 0958 029f 097a jmp 0x097a + 095a 009a c000 lri $AX0.H, #0xc000 + 095c 0082 0364 lri $AR2, #0x0364 + 095e 1998 lrrn $AX0.L, @$AR0 + 095f 6000 movr $ACC0, $AX0.L + 0960 1103 096d bloopi #0x03, 0x096d + 0962 1408 lsl $ACC0, #8 + 0963 3400 andr $AC0.M, $AX0.H + 0964 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0965 140a lsl $ACC0, #10 + 0966 3400 andr $AC0.M, $AX0.H + 0967 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0968 140c lsl $ACC0, #12 + 0969 3400 andr $AC0.M, $AX0.H + 096a 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 096b 140e lsl $ACC0, #14 + 096c 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 + 096d 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 096e 1408 lsl $ACC0, #8 + 096f 3400 andr $AC0.M, $AX0.H + 0970 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0971 140a lsl $ACC0, #10 + 0972 3400 andr $AC0.M, $AX0.H + 0973 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0974 140c lsl $ACC0, #12 + 0975 3400 andr $AC0.M, $AX0.H + 0976 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0977 140e lsl $ACC0, #14 + 0978 3400 andr $AC0.M, $AX0.H + 0979 1b5e srri @$AR2, $AC0.M + 097a 8f00 set40 + 097b 1f7f mrr $AX1.H, $AC1.M + 097c 2066 lrs $AX0.L, @0x0066 + 097d 2767 lrs $AC1.M, @0x0067 + 097e 193a lrri $AX0.H, @$AR1 + 097f 1939 lrri $AX1.L, @$AR1 + 0980 0080 0364 lri $AR0, #0x0364 + 0982 a000 mulx $AX0.L, $AX1.L + 0983 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + 0984 1108 098d bloopi #0x08, 0x098d + 0986 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0987 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0988 1485 asl $ACC0, #5 + 0989 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 098a 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 098b a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 098c 1585 asl $ACC1, #5 + 098d ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + 098e 2f67 srs @0x0067, $AC1.M + 098f 8e00 set16 + 0990 1ff8 mrr $AC1.M, $AX0.L + 0991 2f66 srs @0x0066, $AC1.M + 0992 8900 clr $ACC1 + 0993 00df 0360 lr $AC1.M, @0x0360 + 0995 02df ret + 0996 b100 tst $ACC0 + 0997 02d5 retz + 0998 04fe addis $ACC0, #0xfe + 0999 1f1e mrr $AX0.L, $AC0.M + 099a 191e lrri $AC0.M, @$AR0 + 099b 0291 09a1 jl 0x09a1 + 099d 191a lrri $AX0.H, @$AR0 + 099e 0058 loop $AX0.L + 099f 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 09a0 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 09a1 1b7e srri @$AR3, $AC0.M + 09a2 02df ret + 09a3 8100 clr $ACC0 + 09a4 1f5e mrr $AX0.H, $AC0.M + 09a5 00d8 0402 lr $AX0.L, @0x0402 + 09a7 00dc 0430 lr $AC0.L, @0x0430 + 09a9 0080 0520 lri $AR0, #0x0520 + 09ab 00df 0480 lr $AC1.M, @0x0480 + 09ad 1501 lsl $ACC1, #1 + 09ae 0340 007e andi $AC1.M, #0x007e + 09b0 0300 09b8 addi $AC1.M, #0x09b8 + 09b2 1c5f mrr $AR2, $AC1.M + 09b3 175f callr $AR2 + 09b4 00fc 0430 sr @0x0430, $AC0.L + 09b6 029f 0338 jmp 0x0338 + 09b8 029f 09d9 jmp 0x09d9 + 09ba 029f 0a14 jmp 0x0a14 + 09bc 029f 09fc jmp 0x09fc + 09be 029f 09e9 jmp 0x09e9 + 09c0 029f 0a22 jmp 0x0a22 + 09c2 029f 09d8 jmp 0x09d8 + 09c4 029f 0a40 jmp 0x0a40 + 09c6 029f 0a43 jmp 0x0a43 + 09c8 029f 09d8 jmp 0x09d8 + 09ca 029f 09d8 jmp 0x09d8 + 09cc 029f 0a61 jmp 0x0a61 + 09ce 029f 0a1a jmp 0x0a1a + 09d0 029f 0a1e jmp 0x0a1e + 09d2 029f 09d8 jmp 0x09d8 + 09d4 029f 09d8 jmp 0x09d8 + 09d6 029f 09d8 jmp 0x09d8 + 09d8 02df ret + 09d9 1401 lsl $ACC0, #1 + 09da 009b c000 lri $AX1.H, #0xc000 + 09dc 0099 4000 lri $AX1.L, #0x4000 + 09de 1150 09e6 bloopi #0x50, 0x09e6 + 09e0 02c0 0001 andcf $AC0.M, #0x0001 + 09e2 027c iflnz + 09e3 1b1b srri @$AR0, $AX1.H + 09e4 027d iflz + 09e5 1b19 srri @$AR0, $AX1.L + 09e6 4800 addax $ACC0, $AX0.L + 09e7 147f lsr $ACC0, #-1 + 09e8 02df ret + 09e9 1402 lsl $ACC0, #2 + 09ea 8900 clr $ACC1 + 09eb 1fb8 mrr $AC1.L, $AX0.L + 09ec 1501 lsl $ACC1, #1 + 09ed 009b c000 lri $AX1.H, #0xc000 + 09ef 0099 4000 lri $AX1.L, #0x4000 + 09f1 1150 09f9 bloopi #0x50, 0x09f9 + 09f3 02c0 0003 andcf $AC0.M, #0x0003 + 09f5 027c iflnz + 09f6 1b1b srri @$AR0, $AX1.H + 09f7 027d iflz + 09f8 1b19 srri @$AR0, $AX1.L + 09f9 4c00 add $ACC0, $ACC1 + 09fa 147e lsr $ACC0, #-2 + 09fb 02df ret + 09fc 1401 lsl $ACC0, #1 + 09fd 0081 0ca0 lri $AR1, #0x0ca0 + 09ff 009b c000 lri $AX1.H, #0xc000 + 0a01 0099 4000 lri $AX1.L, #0x4000 + 0a03 8900 clr $ACC1 + 0a04 0082 0000 lri $AR2, #0x0000 + 0a06 1150 0a11 bloopi #0x50, 0x0a11 + 0a08 02c0 0001 andcf $AC0.M, #0x0001 + 0a0a 027c iflnz + 0a0b 1b1b srri @$AR0, $AX1.H + 0a0c 027d iflz + 0a0d 1b19 srri @$AR0, $AX1.L + 0a0e 183d lrr $AC1.L, @$AR1 + 0a0f 4900 addax $ACC1, $AX0.L + 0a10 1fe2 mrr $AC1.M, $AR2 + 0a11 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M + 0a12 147f lsr $ACC0, #-1 + 0a13 02df ret + 0a14 8900 clr $ACC1 + 0a15 1fb8 mrr $AC1.L, $AX0.L + 0a16 157f lsr $ACC1, #-1 + 0a17 1050 loopi #0x50 + 0a18 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L + 0a19 02df ret + 0a1a 0082 0180 lri $AR2, #0x0180 + 0a1c 029f 0a24 jmp 0x0a24 + 0a1e 0082 01c0 lri $AR2, #0x01c0 + 0a20 029f 0a24 jmp 0x0a24 + 0a22 0082 0140 lri $AR2, #0x0140 + 0a24 008a 003f lri $WR2, #0x003f + 0a26 0086 0000 lri $IX2, #0x0000 + 0a28 1406 lsl $ACC0, #6 + 0a29 8900 clr $ACC1 + 0a2a 1fb8 mrr $AC1.L, $AX0.L + 0a2b 1505 lsl $ACC1, #5 + 0a2c 009b 003f lri $AX1.H, #0x003f + 0a2e 009a 0000 lri $AX0.H, #0x0000 + 0a30 3600 andr $AC0.M, $AX1.H + 0a31 1cde mrr $IX2, $AC0.M + 0a32 001a addarn $AR2, $IX2 + 0a33 3400 andr $AC0.M, $AX0.H + 0a34 1150 0a3a bloopi #0x50, 0x0a3a + 0a36 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a37 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a38 1cde mrr $IX2, $AC0.M + 0a39 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a3a 1b19 srri @$AR0, $AX1.L + 0a3b 1fc2 mrr $AC0.M, $AR2 + 0a3c 147a lsr $ACC0, #-6 + 0a3d 008a ffff lri $WR2, #0xffff + 0a3f 02df ret + 0a40 1050 loopi #0x50 + 0a41 1b18 srri @$AR0, $AX0.L + 0a42 02df ret + 0a43 0082 0100 lri $AR2, #0x0100 + 0a45 008a 003f lri $WR2, #0x003f + 0a47 0086 0000 lri $IX2, #0x0000 + 0a49 1406 lsl $ACC0, #6 + 0a4a 8900 clr $ACC1 + 0a4b 1fb8 mrr $AC1.L, $AX0.L + 0a4c 1505 lsl $ACC1, #5 + 0a4d 009b 003f lri $AX1.H, #0x003f + 0a4f 009a 0000 lri $AX0.H, #0x0000 + 0a51 3600 andr $AC0.M, $AX1.H + 0a52 1cde mrr $IX2, $AC0.M + 0a53 001a addarn $AR2, $IX2 + 0a54 3400 andr $AC0.M, $AX0.H + 0a55 1150 0a5b bloopi #0x50, 0x0a5b + 0a57 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a58 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a59 1cde mrr $IX2, $AC0.M + 0a5a 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a5b 1b19 srri @$AR0, $AX1.L + 0a5c 1fc2 mrr $AC0.M, $AR2 + 0a5d 147a lsr $ACC0, #-6 + 0a5e 008a ffff lri $WR2, #0xffff + 0a60 02df ret + 0a61 0082 0100 lri $AR2, #0x0100 + 0a63 008a 003f lri $WR2, #0x003f + 0a65 0086 0000 lri $IX2, #0x0000 + 0a67 0081 0ca0 lri $AR1, #0x0ca0 + 0a69 1406 lsl $ACC0, #6 + 0a6a 8900 clr $ACC1 + 0a6b 1fb8 mrr $AC1.L, $AX0.L + 0a6c 1505 lsl $ACC1, #5 + 0a6d 009b 003f lri $AX1.H, #0x003f + 0a6f 009a 0000 lri $AX0.H, #0x0000 + 0a71 3600 andr $AC0.M, $AX1.H + 0a72 1cde mrr $IX2, $AC0.M + 0a73 001a addarn $AR2, $IX2 + 0a74 3400 andr $AC0.M, $AX0.H + 0a75 1150 0a80 bloopi #0x50, 0x0a80 + 0a77 1939 lrri $AX1.L, @$AR1 + 0a78 a000 mulx $AX0.L, $AX1.L + 0a79 140a lsl $ACC0, #10 + 0a7a 4e00 addp $ACC0 + 0a7b 1476 lsr $ACC0, #-10 + 0a7c 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a7d 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a7e 1cde mrr $IX2, $AC0.M + 0a7f 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a80 1b19 srri @$AR0, $AX1.L + 0a81 1fc2 mrr $AC0.M, $AR2 + 0a82 147a lsr $ACC0, #-6 + 0a83 008a ffff lri $WR2, #0xffff + 0a85 02df ret + 0a86 0080 01be lri $AR0, #0x01be + 0a88 1918 lrri $AX0.L, @$AR0 + 0a89 191a lrri $AX0.H, @$AR0 + 0a8a 0080 0180 lri $AR0, #0x0180 + 0a8c 0083 0180 lri $AR3, #0x0180 + 0a8e 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0a8f 1ffe mrr $AC1.M, $AC0.M + 0a90 1120 0a97 bloopi #0x20, 0x0a97 + 0a92 7c00 neg $ACC0 + 0a93 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0a94 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0a95 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 0a96 1501 lsl $ACC1, #1 + 0a97 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + 0a98 0080 01fe lri $AR0, #0x01fe + 0a9a 191a lrri $AX0.H, @$AR0 + 0a9b 1918 lrri $AX0.L, @$AR0 + 0a9c 0080 01c0 lri $AR0, #0x01c0 + 0a9e 0083 01c0 lri $AR3, #0x01c0 + 0aa0 1ff8 mrr $AC1.M, $AX0.L + 0aa1 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0aa2 f800 addpaxz $ACC0, $AX0.H + 0aa3 0240 01ff andi $AC0.M, #0x01ff + 0aa5 0260 2000 ori $AC0.M, #0x2000 + 0aa7 02bf 0aaa call 0x0aaa + 0aa9 02df ret + 0aaa b900 tst $ACC1 + 0aab 0272 ifg + 0aac 7c00 neg $ACC0 + 0aad 1f7e mrr $AX1.H, $AC0.M + 0aae 4700 addr $ACC1, $AX1.H + 0aaf 1110 0ab4 bloopi #0x10, 0x0ab4 + 0ab1 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0ab2 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0ab3 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0ab4 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0ab5 02df ret + 0ab6 02bf 0b23 call 0x0b23 + 0ab8 2201 lrs $AX0.H, @0x0001 + 0ab9 8600 tstaxh $AX0.H + 0aba 0294 0acb jnz 0x0acb + 0abc 2204 lrs $AX0.H, @0x0004 + 0abd 8600 tstaxh $AX0.H + 0abe 02b4 0b12 callnz 0x0b12 + 0ac0 8100 clr $ACC0 + 0ac1 2605 lrs $AC0.M, @0x0005 + 0ac2 b100 tst $ACC0 + 0ac3 0295 0ad8 jz 0x0ad8 + 0ac5 8100 clr $ACC0 + 0ac6 2e05 srs @0x0005, $AC0.M + 0ac7 2281 lrs $AX0.H, @0xff81 + 0ac8 8600 tstaxh $AX0.H + 0ac9 0294 0ad2 jnz 0x0ad2 + 0acb 8100 clr $ACC0 + 0acc 005f loop $AC1.M + 0acd 1b7e srri @$AR3, $AC0.M + 0ace 7400 incm $AC0.M + 0acf 2e01 srs @0x0001, $AC0.M + 0ad0 029f 0b0b jmp 0x0b0b + 0ad2 2688 lrs $AC0.M, @0xff88 + 0ad3 2489 lrs $AC0.L, @0xff89 + 0ad4 2e34 srs @0x0034, $AC0.M + 0ad5 2c35 srs @0x0035, $AC0.L + 0ad6 02bf 0b12 call 0x0b12 + 0ad8 00ff 0360 sr @0x0360, $AC1.M + 0ada 2638 lrs $AC0.M, @0x0038 + 0adb 2439 lrs $AC0.L, @0x0039 + 0adc 02bf 0684 call 0x0684 + 0ade 00df 0360 lr $AC1.M, @0x0360 + 0ae0 8100 clr $ACC0 + 0ae1 263a lrs $AC0.M, @0x003a + 0ae2 b100 tst $ACC0 + 0ae3 0294 0af2 jnz 0x0af2 + 0ae5 263b lrs $AC0.M, @0x003b + 0ae6 5c00 sub $ACC0, $ACC1 + 0ae7 0290 0af2 jge 0x0af2 + 0ae9 223b lrs $AX0.H, @0x003b + 0aea 02bf 06a1 call 0x06a1 + 0aec 5500 subr $ACC1, $AX0.H + 0aed 0a01 lris $AX0.H, #0x01 + 0aee 00fa 0405 sr @0x0405, $AX0.H + 0af0 029f 0ac5 jmp 0x0ac5 + 0af2 1f5f mrr $AX0.H, $AC1.M + 0af3 02bf 06a1 call 0x06a1 + 0af5 00fa 0362 sr @0x0362, $AX0.H + 0af7 8100 clr $ACC0 + 0af8 263a lrs $AC0.M, @0x003a + 0af9 243b lrs $AC0.L, @0x003b + 0afa 1570 lsr $ACC1, #-16 + 0afb 0a01 lris $AX0.H, #0x01 + 0afc 0081 0405 lri $AR1, #0x0405 + 0afe 5c00 sub $ACC0, $ACC1 + 0aff b100 tst $ACC0 + 0b00 0275 ifz + 0b01 1a3a srr @$AR1, $AX0.H + 0b02 2e3a srs @0x003a, $AC0.M + 0b03 2c3b srs @0x003b, $AC0.L + 0b04 2638 lrs $AC0.M, @0x0038 + 0b05 2439 lrs $AC0.L, @0x0039 + 0b06 00d8 0362 lr $AX0.L, @0x0362 + 0b08 7000 addaxl $ACC0, $AX0.L + 0b09 2c39 srs @0x0039, $AC0.L + 0b0a 2e38 srs @0x0038, $AC0.M + 0b0b 0092 00ff lri $CR, #0x00ff + 0b0d 029f 0330 jmp 0x0330 + 0b0f 8100 clr $ACC0 + 0b10 2e34 srs @0x0034, $AC0.M + 0b11 2e35 srs @0x0035, $AC0.M + 0b12 2334 lrs $AX1.H, @0x0034 + 0b13 2135 lrs $AX1.L, @0x0035 + 0b14 268a lrs $AC0.M, @0xff8a + 0b15 248b lrs $AC0.L, @0xff8b + 0b16 5a00 subax $ACC0, $AX1.L + 0b17 2e3a srs @0x003a, $AC0.M + 0b18 2c3b srs @0x003b, $AC0.L + 0b19 2634 lrs $AC0.M, @0x0034 + 0b1a 2435 lrs $AC0.L, @0x0035 + 0b1b 238c lrs $AX1.H, @0xff8c + 0b1c 218d lrs $AX1.L, @0xff8d + 0b1d 4a00 addax $ACC0, $AX1.L + 0b1e 2e38 srs @0x0038, $AC0.M + 0b1f 2c39 srs @0x0039, $AC0.L + 0b20 8100 clr $ACC0 + 0b21 2e05 srs @0x0005, $AC0.M + 0b22 02df ret + 0b23 0092 0004 lri $CR, #0x0004 + 0b25 2002 lrs $AX0.L, @0x0002 + 0b26 8100 clr $ACC0 + 0b27 8900 clr $ACC1 + 0b28 2430 lrs $AC0.L, @0x0030 + 0b29 8d00 set15 + 0b2a 0950 lris $AX1.L, #0x50 + 0b2b a000 mulx $AX0.L, $AX1.L + 0b2c a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0b2d 1404 lsl $ACC0, #4 + 0b2e 8c00 clr15 + 0b2f 1ffe mrr $AC1.M, $AC0.M + 0b30 0083 0580 lri $AR3, #0x0580 + 0b32 02df ret + 0b33 02bf 0b23 call 0x0b23 + 0b35 2201 lrs $AX0.H, @0x0001 + 0b36 8600 tstaxh $AX0.H + 0b37 0294 0b48 jnz 0x0b48 + 0b39 2204 lrs $AX0.H, @0x0004 + 0b3a 8600 tstaxh $AX0.H + 0b3b 02b4 0b92 callnz 0x0b92 + 0b3d 8100 clr $ACC0 + 0b3e 2605 lrs $AC0.M, @0x0005 + 0b3f b100 tst $ACC0 + 0b40 0295 0b55 jz 0x0b55 + 0b42 8100 clr $ACC0 + 0b43 2e05 srs @0x0005, $AC0.M + 0b44 2281 lrs $AX0.H, @0xff81 + 0b45 8600 tstaxh $AX0.H + 0b46 0294 0b4f jnz 0x0b4f + 0b48 8100 clr $ACC0 + 0b49 005f loop $AC1.M + 0b4a 1b7e srri @$AR3, $AC0.M + 0b4b 7400 incm $AC0.M + 0b4c 2e01 srs @0x0001, $AC0.M + 0b4d 029f 0b8b jmp 0x0b8b + 0b4f 2688 lrs $AC0.M, @0xff88 + 0b50 2489 lrs $AC0.L, @0xff89 + 0b51 2e34 srs @0x0034, $AC0.M + 0b52 2c35 srs @0x0035, $AC0.L + 0b53 02bf 0b92 call 0x0b92 + 0b55 00ff 0360 sr @0x0360, $AC1.M + 0b57 2638 lrs $AC0.M, @0x0038 + 0b58 2439 lrs $AC0.L, @0x0039 + 0b59 02bf 0684 call 0x0684 + 0b5b 02bf 069b call 0x069b + 0b5d 00df 0360 lr $AC1.M, @0x0360 + 0b5f 8100 clr $ACC0 + 0b60 263a lrs $AC0.M, @0x003a + 0b61 b100 tst $ACC0 + 0b62 0294 0b71 jnz 0x0b71 + 0b64 263b lrs $AC0.M, @0x003b + 0b65 5c00 sub $ACC0, $ACC1 + 0b66 0290 0b71 jge 0x0b71 + 0b68 223b lrs $AX0.H, @0x003b + 0b69 02bf 0666 call 0x0666 + 0b6b 5500 subr $ACC1, $AX0.H + 0b6c 0a01 lris $AX0.H, #0x01 + 0b6d 00fa 0405 sr @0x0405, $AX0.H + 0b6f 029f 0b42 jmp 0x0b42 + 0b71 1f5f mrr $AX0.H, $AC1.M + 0b72 02bf 0666 call 0x0666 + 0b74 00fa 0362 sr @0x0362, $AX0.H + 0b76 8100 clr $ACC0 + 0b77 263a lrs $AC0.M, @0x003a + 0b78 243b lrs $AC0.L, @0x003b + 0b79 1570 lsr $ACC1, #-16 + 0b7a 0a01 lris $AX0.H, #0x01 + 0b7b 0081 0405 lri $AR1, #0x0405 + 0b7d 5c00 sub $ACC0, $ACC1 + 0b7e b100 tst $ACC0 + 0b7f 0275 ifz + 0b80 1a3a srr @$AR1, $AX0.H + 0b81 2e3a srs @0x003a, $AC0.M + 0b82 2c3b srs @0x003b, $AC0.L + 0b83 2638 lrs $AC0.M, @0x0038 + 0b84 2439 lrs $AC0.L, @0x0039 + 0b85 00d8 0362 lr $AX0.L, @0x0362 + 0b87 7000 addaxl $ACC0, $AX0.L + 0b88 7000 addaxl $ACC0, $AX0.L + 0b89 2c39 srs @0x0039, $AC0.L + 0b8a 2e38 srs @0x0038, $AC0.M + 0b8b 0092 00ff lri $CR, #0x00ff + 0b8d 029f 0330 jmp 0x0330 + 0b8f 8100 clr $ACC0 + 0b90 2e34 srs @0x0034, $AC0.M + 0b91 2e35 srs @0x0035, $AC0.M + 0b92 2334 lrs $AX1.H, @0x0034 + 0b93 2135 lrs $AX1.L, @0x0035 + 0b94 268a lrs $AC0.M, @0xff8a + 0b95 248b lrs $AC0.L, @0xff8b + 0b96 5a00 subax $ACC0, $AX1.L + 0b97 2e3a srs @0x003a, $AC0.M + 0b98 2c3b srs @0x003b, $AC0.L + 0b99 2634 lrs $AC0.M, @0x0034 + 0b9a 2435 lrs $AC0.L, @0x0035 + 0b9b 1401 lsl $ACC0, #1 + 0b9c 238c lrs $AX1.H, @0xff8c + 0b9d 218d lrs $AX1.L, @0xff8d + 0b9e 4a00 addax $ACC0, $AX1.L + 0b9f 2e38 srs @0x0038, $AC0.M + 0ba0 2c39 srs @0x0039, $AC0.L + 0ba1 8100 clr $ACC0 + 0ba2 2e05 srs @0x0005, $AC0.M + 0ba3 02df ret + 0ba4 8900 clr $ACC1 + 0ba5 0f50 lris $AC1.M, #0x50 + 0ba6 0083 0520 lri $AR3, #0x0520 + 0ba8 02bf 0bbd call 0x0bbd + 0baa 029f 0338 jmp 0x0338 + 0bac 00d8 0402 lr $AX0.L, @0x0402 + 0bae 8100 clr $ACC0 + 0baf 8900 clr $ACC1 + 0bb0 00dc 0430 lr $AC0.L, @0x0430 + 0bb2 0a50 lris $AX0.H, #0x50 + 0bb3 9000 mul $AX0.L, $AX0.H + 0bb4 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0bb5 1404 lsl $ACC0, #4 + 0bb6 1ffe mrr $AC1.M, $AC0.M + 0bb7 0083 0580 lri $AR3, #0x0580 + 0bb9 02bf 0bbd call 0x0bbd + 0bbb 029f 0330 jmp 0x0330 + 0bbd 0092 0004 lri $CR, #0x0004 + 0bbf 8100 clr $ACC0 + 0bc0 263a lrs $AC0.M, @0x003a + 0bc1 243b lrs $AC0.L, @0x003b + 0bc2 1f1f mrr $AX0.L, $AC1.M + 0bc3 0a00 lris $AX0.H, #0x00 + 0bc4 5800 subax $ACC0, $AX0.L + 0bc5 0292 0bdb jg 0x0bdb + 0bc7 8900 clr $ACC1 + 0bc8 00c0 043b lr $AR0, @0x043b + 0bca 02bf 0c00 call 0x0c00 + 0bcc 8100 clr $ACC0 + 0bcd 1fd8 mrr $AC0.M, $AX0.L + 0bce 223b lrs $AX0.H, @0x003b + 0bcf 5400 subr $ACC0, $AX0.H + 0bd0 0007 dar $AR3 + 0bd1 1979 lrri $AX1.L, @$AR3 + 0bd2 005e loop $AC0.M + 0bd3 1b79 srri @$AR3, $AX1.L + 0bd4 0f01 lris $AC1.M, #0x01 + 0bd5 2f01 srs @0x0001, $AC1.M + 0bd6 8900 clr $ACC1 + 0bd7 2f3b srs @0x003b, $AC1.M + 0bd8 0092 00ff lri $CR, #0x00ff + 0bda 02df ret + 0bdb 2e3a srs @0x003a, $AC0.M + 0bdc 2c3b srs @0x003b, $AC0.L + 0bdd 8100 clr $ACC0 + 0bde 8900 clr $ACC1 + 0bdf 268a lrs $AC0.M, @0xff8a + 0be0 2734 lrs $AC1.M, @0x0034 + 0be1 5c00 sub $ACC0, $ACC1 + 0be2 2e36 srs @0x0036, $AC0.M + 0be3 5000 subr $ACC0, $AX0.L + 0be4 0290 0bfa jge 0x0bfa + 0be6 00c0 0436 lr $AR0, @0x0436 + 0be8 02bf 0c00 call 0x0c00 + 0bea 8100 clr $ACC0 + 0beb 1fd8 mrr $AC0.M, $AX0.L + 0bec 2236 lrs $AX0.H, @0x0036 + 0bed 5400 subr $ACC0, $AX0.H + 0bee 1c1e mrr $AR0, $AC0.M + 0bef 8100 clr $ACC0 + 0bf0 2e34 srs @0x0034, $AC0.M + 0bf1 2688 lrs $AC0.M, @0xff88 + 0bf2 2489 lrs $AC0.L, @0xff89 + 0bf3 2e8c srs @0xff8c, $AC0.M + 0bf4 2c8d srs @0xff8d, $AC0.L + 0bf5 02bf 0c00 call 0x0c00 + 0bf7 0092 00ff lri $CR, #0x00ff + 0bf9 02df ret + 0bfa 1c18 mrr $AR0, $AX0.L + 0bfb 02bf 0c00 call 0x0c00 + 0bfd 0092 00ff lri $CR, #0x00ff + 0bff 02df ret + 0c00 8100 clr $ACC0 + 0c01 1fc0 mrr $AC0.M, $AR0 + 0c02 b100 tst $ACC0 + 0c03 02d5 retz + 0c04 8900 clr $ACC1 + 0c05 2734 lrs $AC1.M, @0x0034 + 0c06 0340 0001 andi $AC1.M, #0x0001 + 0c08 0b00 lris $AX1.H, #0x00 + 0c09 1f3f mrr $AX1.L, $AC1.M + 0c0a 268c lrs $AC0.M, @0xff8c + 0c0b 248d lrs $AC0.L, @0xff8d + 0c0c 8900 clr $ACC1 + 0c0d 2534 lrs $AC1.L, @0x0034 + 0c0e 1501 lsl $ACC1, #1 + 0c0f 4c00 add $ACC0, $ACC1 + 0c10 5a00 subax $ACC0, $AX1.L + 0c11 5a00 subax $ACC0, $AX1.L + 0c12 1c20 mrr $AR1, $AR0 + 0c13 1fe0 mrr $AC1.M, $AR0 + 0c14 0502 addis $ACC1, #0x02 + 0c15 1c1f mrr $AR0, $AC1.M + 0c16 009f 0b00 lri $AC1.M, #0x0b00 + 0c18 0092 00ff lri $CR, #0x00ff + 0c1a 02bf 05fb call 0x05fb + 0c1c 0092 0004 lri $CR, #0x0004 + 0c1e 2734 lrs $AC1.M, @0x0034 + 0c1f 1f61 mrr $AX1.H, $AR1 + 0c20 4700 addr $ACC1, $AX1.H + 0c21 2f34 srs @0x0034, $AC1.M + 0c22 0080 0b00 lri $AR0, #0x0b00 + 0c24 8900 clr $ACC1 + 0c25 1ff9 mrr $AC1.M, $AX1.L + 0c26 b900 tst $ACC1 + 0c27 0274 ifnz + 0c28 0008 iar $AR0 + 0c29 8900 clr $ACC1 + 0c2a 1fe1 mrr $AC1.M, $AR1 + 0c2b 191e lrri $AC0.M, @$AR0 + 0c2c 0701 cmpis $ACC1, #0x01 + 0c2d 0293 0c36 jle 0x0c36 + 0c2f 191a lrri $AX0.H, @$AR0 + 0c30 05fe addis $ACC1, #0xfe + 0c31 005f loop $AC1.M + 0c32 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c33 1b7e srri @$AR3, $AC0.M + 0c34 1b7a srri @$AR3, $AX0.H + 0c35 02df ret + 0c36 1b7e srri @$AR3, $AC0.M + 0c37 02df ret + 0c38 0083 03e8 lri $AR3, #0x03e8 + 0c3a 191e lrri $AC0.M, @$AR0 + 0c3b 191a lrri $AX0.H, @$AR0 + 0c3c 1006 loopi #0x06 + 0c3d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c3e 1b7e srri @$AR3, $AC0.M + 0c3f 1b7a srri @$AR3, $AX0.H + 0c40 0080 03e8 lri $AR0, #0x03e8 + 0c42 8a00 m2 + 0c43 0088 0007 lri $WR0, #0x0007 + 0c45 1150 0c52 bloopi #0x50, 0x0c52 + 0c47 1c61 mrr $AR3, $AR1 + 0c48 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c49 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4d f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c4f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c50 f200 madd $AX0.L, $AX0.H + 0c51 fe00 movpz $ACC0 + 0c52 1b3e srri @$AR1, $AC0.M + 0c53 0088 ffff lri $WR0, #0xffff + 0c55 8b00 m0 + 0c56 02df ret + 0c57 8a00 m2 + 0c58 05fe addis $ACC1, #0xfe + 0c59 0083 03e8 lri $AR3, #0x03e8 + 0c5b 191e lrri $AC0.M, @$AR0 + 0c5c 191a lrri $AX0.H, @$AR0 + 0c5d 005f loop $AC1.M + 0c5e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c5f 1b7e srri @$AR3, $AC0.M + 0c60 1b7a srri @$AR3, $AX0.H + 0c61 0080 03e8 lri $AR0, #0x03e8 + 0c63 0501 addis $ACC1, #0x01 + 0c64 1d1f mrr $WR0, $AC1.M + 0c65 1150 0c6d bloopi #0x50, 0x0c6d + 0c67 1c61 mrr $AR3, $AR1 + 0c68 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c69 005f loop $AC1.M + 0c6a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c6b f200 madd $AX0.L, $AX0.H + 0c6c fe00 movpz $ACC0 + 0c6d 1b3e srri @$AR1, $AC0.M + 0c6e 0088 ffff lri $WR0, #0xffff + 0c70 8b00 m0 + 0c71 02df ret + 0c72 0083 03e8 lri $AR3, #0x03e8 + 0c74 191e lrri $AC0.M, @$AR0 + 0c75 191a lrri $AX0.H, @$AR0 + 0c76 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c77 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c78 1b7e srri @$AR3, $AC0.M + 0c79 1b7a srri @$AR3, $AX0.H + 0c7a 0080 03e8 lri $AR0, #0x03e8 + 0c7c 0088 0003 lri $WR0, #0x0003 + 0c7e 0085 0000 lri $IX1, #0x0000 + 0c80 0087 0000 lri $IX3, #0x0000 + 0c82 1fc2 mrr $AC0.M, $AR2 + 0c83 195b lrri $AX1.H, @$AR2 + 0c84 1959 lrri $AX1.L, @$AR2 + 0c85 195f lrri $AC1.M, @$AR2 + 0c86 195a lrri $AX0.H, @$AR2 + 0c87 1c5e mrr $AR2, $AC0.M + 0c88 1fda mrr $AC0.M, $AX0.H + 0c89 1c61 mrr $AR3, $AR1 + 0c8a 8a00 m2 + 0c8b 8f00 set40 + 0c8c 191a lrri $AX0.H, @$AR0 + 0c8d b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0c8e e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0c8f ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0c90 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0c91 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0c92 1127 0c9d bloopi #0x27, 0x0c9d + 0c94 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0c95 197e lrri $AC0.M, @$AR3 + 0c96 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0c97 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0c98 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0c99 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0c9a 197f lrri $AC1.M, @$AR3 + 0c9b ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0c9c e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0c9d b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0c9e e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0c9f 197e lrri $AC0.M, @$AR3 + 0ca0 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ca1 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0ca2 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 0ca3 1bff srrn @$AR3, $AC1.M + 0ca4 197f lrri $AC1.M, @$AR3 + 0ca5 8e00 set16 + 0ca6 8b00 m0 + 0ca7 0088 ffff lri $WR0, #0xffff + 0ca9 1b5b srri @$AR2, $AX1.H + 0caa 1b59 srri @$AR2, $AX1.L + 0cab 1b5f srri @$AR2, $AC1.M + 0cac 1b5e srri @$AR2, $AC0.M + 0cad 02df ret + 0cae 0083 03e8 lri $AR3, #0x03e8 + 0cb0 191e lrri $AC0.M, @$AR0 + 0cb1 191a lrri $AX0.H, @$AR0 + 0cb2 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cb3 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cb4 1b7e srri @$AR3, $AC0.M + 0cb5 1b7a srri @$AR3, $AX0.H + 0cb6 0080 03e8 lri $AR0, #0x03e8 + 0cb8 0088 0003 lri $WR0, #0x0003 + 0cba 0085 0000 lri $IX1, #0x0000 + 0cbc 0087 0000 lri $IX3, #0x0000 + 0cbe 1fc2 mrr $AC0.M, $AR2 + 0cbf 195b lrri $AX1.H, @$AR2 + 0cc0 1959 lrri $AX1.L, @$AR2 + 0cc1 195f lrri $AC1.M, @$AR2 + 0cc2 195a lrri $AX0.H, @$AR2 + 0cc3 1c5e mrr $AR2, $AC0.M + 0cc4 1fda mrr $AC0.M, $AX0.H + 0cc5 1c61 mrr $AR3, $AR1 + 0cc6 8a00 m2 + 0cc7 8f00 set40 + 0cc8 191a lrri $AX0.H, @$AR0 + 0cc9 b800 mulx $AX0.H, $AX1.H + 0cca e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0ccb e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0ccc ea00 maddc $AC1.M, $AX1.L + 0ccd ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0cce e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0ccf ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0cd0 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0cd1 1127 0ce2 bloopi #0x27, 0x0ce2 + 0cd3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cd4 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0cd5 197e lrri $AC0.M, @$AR3 + 0cd6 e800 maddc $AC0.M, $AX1.L + 0cd7 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0cd8 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0cd9 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cda bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0cdb e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0cdc e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0cdd 197f lrri $AC1.M, @$AR3 + 0cde ea00 maddc $AC1.M, $AX1.L + 0cdf ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0ce0 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0ce1 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0ce2 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0ce3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0ce4 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ce5 197e lrri $AC0.M, @$AR3 + 0ce6 e800 maddc $AC0.M, $AX1.L + 0ce7 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ce8 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0ce9 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cea bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0ceb 1bff srrn @$AR3, $AC1.M + 0cec 197f lrri $AC1.M, @$AR3 + 0ced 8e00 set16 + 0cee 8b00 m0 + 0cef 0088 ffff lri $WR0, #0xffff + 0cf1 1b5b srri @$AR2, $AX1.H + 0cf2 1b59 srri @$AR2, $AX1.L + 0cf3 1b5f srri @$AR2, $AC1.M + 0cf4 1b5e srri @$AR2, $AC0.M + 0cf5 02df ret + 0cf6 0eff lris $AC0.M, #0xff + 0cf7 00fe 03f2 sr @0x03f2, $AC0.M + 0cf9 8100 clr $ACC0 + 0cfa 00fe 03f0 sr @0x03f0, $AC0.M + 0cfc 00fe 03f6 sr @0x03f6, $AC0.M + 0cfe 009e 0100 lri $AC0.M, #0x0100 + 0d00 00fe 03f7 sr @0x03f7, $AC0.M + 0d02 00da 03f7 lr $AX0.H, @0x03f7 + 0d04 009e 8000 lri $AC0.M, #0x8000 + 0d06 5400 subr $ACC0, $AX0.H + 0d07 00fe 03f5 sr @0x03f5, $AC0.M + 0d09 0e30 lris $AC0.M, #0x30 + 0d0a 00fe 03f3 sr @0x03f3, $AC0.M + 0d0c 0e10 lris $AC0.M, #0x10 + 0d0d 00fe 03f4 sr @0x03f4, $AC0.M + 0d0f 009e 0096 lri $AC0.M, #0x0096 + 0d11 00fe 03f1 sr @0x03f1, $AC0.M + 0d13 02df ret + 0d14 0080 0a00 lri $AR0, #0x0a00 + 0d16 8100 clr $ACC0 + 0d17 00de 03f0 lr $AC0.M, @0x03f0 + 0d19 8900 clr $ACC1 + 0d1a b100 tst $ACC0 + 0d1b 0275 ifz + 0d1c 0550 addis $ACC1, #0x50 + 0d1d 00ff 03f0 sr @0x03f0, $AC1.M + 0d1f 0200 0a60 addi $AC0.M, #0x0a60 + 0d21 1c7e mrr $AR3, $AC0.M + 0d22 0f4e lris $AC1.M, #0x4e + 0d23 02bf 00e5 call 0x00e5 + 0d25 02df ret + 0d26 00de 03f1 lr $AC0.M, @0x03f1 + 0d28 0200 0a60 addi $AC0.M, #0x0a60 + 0d2a 1c7e mrr $AR3, $AC0.M + 0d2b 8100 clr $ACC0 + 0d2c 8900 clr $ACC1 + 0d2d 009f 00a0 lri $AC1.M, #0x00a0 + 0d2f 00de 03f1 lr $AC0.M, @0x03f1 + 0d31 5d00 sub $ACC1, $ACC0 + 0d32 0e50 lris $AC0.M, #0x50 + 0d33 0750 cmpis $ACC1, #0x50 + 0d34 0270 ifge + 0d35 5d00 sub $ACC1, $ACC0 + 0d36 00da 03f2 lr $AX0.H, @0x03f2 + 0d38 8600 tstaxh $AX0.H + 0d39 0290 0d57 jge 0x0d57 + 0d3b 00de 03f3 lr $AC0.M, @0x03f3 + 0d3d 5c00 sub $ACC0, $ACC1 + 0d3e 0293 0d42 jle 0x0d42 + 0d40 029f 0d5c jmp 0x0d5c + 0d42 00db 03f7 lr $AX1.H, @0x03f7 + 0d44 009e 8000 lri $AC0.M, #0x8000 + 0d46 4600 addr $ACC0, $AX1.H + 0d47 029f 0d4e jmp 0x0d4e + 0d49 00db 03f7 lr $AX1.H, @0x03f7 + 0d4b 009e 8000 lri $AC0.M, #0x8000 + 0d4d 5600 subr $ACC0, $AX1.H + 0d4e 00fe 03f5 sr @0x03f5, $AC0.M + 0d50 1fda mrr $AC0.M, $AX0.H + 0d51 7c00 neg $ACC0 + 0d52 1f5e mrr $AX0.H, $AC0.M + 0d53 00fe 03f2 sr @0x03f2, $AC0.M + 0d55 029f 0d5c jmp 0x0d5c + 0d57 00de 03f4 lr $AC0.M, @0x03f4 + 0d59 5d00 sub $ACC1, $ACC0 + 0d5a 0293 0d49 jle 0x0d49 + 0d5c 8900 clr $ACC1 + 0d5d 00dd 03f5 lr $AC1.L, @0x03f5 + 0d5f 1501 lsl $ACC1, #1 + 0d60 8100 clr $ACC0 + 0d61 00dc 03f6 lr $AC0.L, @0x03f6 + 0d63 008b 009f lri $WR3, #0x009f + 0d65 0080 0a00 lri $AR0, #0x0a00 + 0d67 0900 lris $AX1.L, #0x00 + 0d68 1150 0d6f bloopi #0x50, 0x0d6f + 0d6a 1878 lrr $AX0.L, @$AR3 + 0d6b 4c00 add $ACC0, $ACC1 + 0d6c 1cfe mrr $IX3, $AC0.M + 0d6d 001f addarn $AR3, $IX3 + 0d6e 1fd9 mrr $AC0.M, $AX1.L + 0d6f 1b18 srri @$AR0, $AX0.L + 0d70 009f 0a60 lri $AC1.M, #0x0a60 + 0d72 1fc3 mrr $AC0.M, $AR3 + 0d73 5c00 sub $ACC0, $ACC1 + 0d74 00fe 03f1 sr @0x03f1, $AC0.M + 0d76 00fc 03f6 sr @0x03f6, $AC0.L + 0d78 008b ffff lri $WR3, #0xffff + 0d7a 02df ret + 0d7b 0f50 lris $AC1.M, #0x50 + 0d7c 0080 0a00 lri $AR0, #0x0a00 + 0d7e 0083 0d60 lri $AR3, #0x0d60 + 0d80 0098 3fff lri $AX0.L, #0x3fff + 0d82 02bf 00ff call 0x00ff + 0d84 0f50 lris $AC1.M, #0x50 + 0d85 0080 0a00 lri $AR0, #0x0a00 + 0d87 0083 0d00 lri $AR3, #0x0d00 + 0d89 0098 3fff lri $AX0.L, #0x3fff + 0d8b 02bf 00ff call 0x00ff + 0d8d 02df ret + 0d8e 8a00 m2 + 0d8f 8f00 set40 + 0d90 8100 clr $ACC0 + 0d91 00de 0404 lr $AC0.M, @0x0404 + 0d93 b100 tst $ACC0 + 0d94 0295 0d9b jz 0x0d9b + 0d96 8100 clr $ACC0 + 0d97 00fe 0478 sr @0x0478, $AC0.M + 0d99 00fe 0479 sr @0x0479, $AC0.M + 0d9b 00df 0479 lr $AC1.M, @0x0479 + 0d9d 00db 0478 lr $AX1.H, @0x0478 + 0d9f 0900 lris $AX1.L, #0x00 + 0da0 0084 0000 lri $IX0, #0x0000 + 0da2 1150 0dab bloopi #0x50, 0x0dab + 0da4 199e lrrn $AC0.M, @$AR0 + 0da5 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 + 0da6 c000 mulc $AC0.M, $AX0.H + 0da7 6e00 movp $ACC0 + 0da8 1488 asl $ACC0, #8 + 0da9 4a00 addax $ACC0, $AX1.L + 0daa 1b1e srri @$AR0, $AC0.M + 0dab 1f7e mrr $AX1.H, $AC0.M + 0dac 00fb 0478 sr @0x0478, $AX1.H + 0dae 00ff 0479 sr @0x0479, $AC1.M + 0db0 8b00 m0 + 0db1 8e00 set16 + 0db2 02df ret + 0db3 b900 tst $ACC1 + 0db4 0294 0db9 jnz 0x0db9 + 0db6 6800 movax $ACC0, $AX0.L + 0db7 b100 tst $ACC0 + 0db8 02d5 retz + 0db9 1c23 mrr $AR1, $AR3 + 0dba 197e lrri $AC0.M, @$AR3 + 0dbb 191b lrri $AX1.H, @$AR0 + 0dbc d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + 0dbd 1120 0dc3 bloopi #0x20, 0x0dc3 + 0dbf dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0dc0 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dc1 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0dc2 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dc3 4900 addax $ACC1, $AX0.L + 0dc4 1108 0dc9 bloopi #0x08, 0x0dc9 + 0dc6 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0dc7 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dc8 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0dc9 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dca 02df ret + 0dcb 8f00 set40 + 0dcc 8d00 set15 + 0dcd 1c03 mrr $AR0, $AR3 + 0dce 00d9 038e lr $AX1.L, @0x038e + 0dd0 0b04 lris $AX1.H, #0x04 + 0dd1 197a lrri $AX0.H, @$AR3 + 0dd2 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 + 0dd3 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0dd4 1128 0dd9 bloopi #0x28, 0x0dd9 + 0dd6 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0dd7 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dd8 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0dd9 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dda 8c00 clr15 + 0ddb 8e00 set16 + 0ddc 02df ret + 0ddd 00da 0485 lr $AX0.H, @0x0485 + 0ddf 8600 tstaxh $AX0.H + 0de0 0295 0dee jz 0x0dee + 0de2 8100 clr $ACC0 + 0de3 00de 042a lr $AC0.M, @0x042a + 0de5 147f lsr $ACC0, #-1 + 0de6 00fe 042b sr @0x042b, $AC0.M + 0de8 b100 tst $ACC0 + 0de9 0294 0dee jnz 0x0dee + 0deb 0a01 lris $AX0.H, #0x01 + 0dec 00fa 0401 sr @0x0401, $AX0.H + 0dee 8f00 set40 + 0def 8100 clr $ACC0 + 0df0 00de 0428 lr $AC0.M, @0x0428 + 0df2 1478 lsr $ACC0, #-8 + 0df3 00df 0428 lr $AC1.M, @0x0428 + 0df5 0340 007f andi $AC1.M, #0x007f + 0df7 1f1e mrr $AX0.L, $AC0.M + 0df8 1f5f mrr $AX0.H, $AC1.M + 0df9 0220 007f xori $ACC0, #0x007f + 0dfb 1f3e mrr $AX1.L, $AC0.M + 0dfc 0320 007f xori $ACC1, #0x007f + 0dfe 1f7f mrr $AX1.H, $AC1.M + 0dff 8100 clr $ACC0 + 0e00 8900 clr $ACC1 + 0e01 009f 0200 lri $AC1.M, #0x0200 + 0e03 1fd8 mrr $AC0.M, $AX0.L + 0e04 4c00 add $ACC0, $ACC1 + 0e05 1c1e mrr $AR0, $AC0.M + 0e06 1818 lrr $AX0.L, @$AR0 + 0e07 1fda mrr $AC0.M, $AX0.H + 0e08 4c00 add $ACC0, $ACC1 + 0e09 1c1e mrr $AR0, $AC0.M + 0e0a 181a lrr $AX0.H, @$AR0 + 0e0b 1fd9 mrr $AC0.M, $AX1.L + 0e0c 4c00 add $ACC0, $ACC1 + 0e0d 1c1e mrr $AR0, $AC0.M + 0e0e 1819 lrr $AX1.L, @$AR0 + 0e0f 1fdb mrr $AC0.M, $AX1.H + 0e10 4c00 add $ACC0, $ACC1 + 0e11 1c1e mrr $AR0, $AC0.M + 0e12 181b lrr $AX1.H, @$AR0 + 0e13 8a00 m2 + 0e14 0080 0b00 lri $AR0, #0x0b00 + 0e16 9800 mul $AX1.L, $AX1.H + 0e17 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0e18 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0e19 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M + 0e1a 6e30 movp's $ACC0 : @$AR0, $AC0.M + 0e1b 1b1e srri @$AR0, $AC0.M + 0e1c 8b00 m0 + 0e1d 0080 0b00 lri $AR0, #0x0b00 + 0e1f 0081 0b04 lri $AR1, #0x0b04 + 0e21 00da 042a lr $AX0.H, @0x042a + 0e23 02bf 0e6e call 0x0e6e + 0e25 0081 0b08 lri $AR1, #0x0b08 + 0e27 0080 0b00 lri $AR0, #0x0b00 + 0e29 00da 042a lr $AX0.H, @0x042a + 0e2b 00de 0429 lr $AC0.M, @0x0429 + 0e2d 8a00 m2 + 0e2e c000 mulc $AC0.M, $AX0.H + 0e2f 8b00 m0 + 0e30 6e00 movp $ACC0 + 0e31 1f5e mrr $AX0.H, $AC0.M + 0e32 02bf 0e6e call 0x0e6e + 0e34 0080 0b00 lri $AR0, #0x0b00 + 0e36 0081 0b0c lri $AR1, #0x0b0c + 0e38 8100 clr $ACC0 + 0e39 8900 clr $ACC1 + 0e3a 00de 042b lr $AC0.M, @0x042b + 0e3c 00df 042a lr $AC1.M, @0x042a + 0e3e 00fe 042a sr @0x042a, $AC0.M + 0e40 5c00 sub $ACC0, $ACC1 + 0e41 1f5e mrr $AX0.H, $AC0.M + 0e42 02bf 0e79 call 0x0e79 + 0e44 0080 0b0c lri $AR0, #0x0b0c + 0e46 0081 0b10 lri $AR1, #0x0b10 + 0e48 00da 0429 lr $AX0.H, @0x0429 + 0e4a 02bf 0e6e call 0x0e6e + 0e4c 0081 0b04 lri $AR1, #0x0b04 + 0e4e 0082 0b0c lri $AR2, #0x0b0c + 0e50 0083 0e87 lri $AR3, #0x0e87 + 0e52 1108 0e6b bloopi #0x08, 0x0e6b + 0e54 195f lrri $AC1.M, @$AR2 + 0e55 15fb asr $ACC1, #-5 + 0e56 1f1d mrr $AX0.L, $AC1.L + 0e57 1f5f mrr $AX0.H, $AC1.M + 0e58 193f lrri $AC1.M, @$AR1 + 0e59 00e1 0b24 sr @0x0b24, $AR1 + 0e5b 00e2 0b25 sr @0x0b25, $AR2 + 0e5d 021b ilrri $AC0.M, @$AR3 + 0e5e 00e3 0b26 sr @0x0b26, $AR3 + 0e60 1c7e mrr $AR3, $AC0.M + 0e61 00c0 038f lr $AR0, @0x038f + 0e63 02bf 0db3 call 0x0db3 + 0e65 00c1 0b24 lr $AR1, @0x0b24 + 0e67 00c2 0b25 lr $AR2, @0x0b25 + 0e69 00c3 0b26 lr $AR3, @0x0b26 + 0e6b 0000 nop + 0e6c 8e00 set16 + 0e6d 02df ret + 0e6e 8a00 m2 + 0e6f 191f lrri $AC1.M, @$AR0 + 0e70 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 + 0e71 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 + 0e72 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e73 191f lrri $AC1.M, @$AR0 + 0e74 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e75 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0e76 1b3e srri @$AR1, $AC0.M + 0e77 8b00 m0 + 0e78 02df ret + 0e79 8a00 m2 + 0e7a 8d00 set15 + 0e7b 1f7e mrr $AX1.H, $AC0.M + 0e7c 1918 lrri $AX0.L, @$AR0 + 0e7d a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 + 0e7e ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 + 0e7f ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e80 1918 lrri $AX0.L, @$AR0 + 0e81 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e82 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0e83 1b3e srri @$AR1, $AC0.M + 0e84 8c00 clr15 + 0e85 8b00 m0 + 0e86 02df ret + 0e87 0d00 lris $AC1.L, #0x00 + 0e88 0d60 lris $AC1.L, #0x60 + 0e89 0f40 lris $AC1.M, #0x40 + 0e8a 0ca0 lris $AC0.L, #0xa0 + 0e8b 0e80 lris $AC0.M, #0x80 + 0e8c 0ee0 lris $AC0.M, #0xe0 + 0e8d 0be0 lris $AX1.H, #0xe0 + 0e8e 0c40 lris $AC0.L, #0x40 + 0e8f 00f9 0361 sr @0x0361, $AX1.L + 0e91 1fc0 mrr $AC0.M, $AR0 + 0e92 0200 fffc addi $AC0.M, #0xfffc + 0e94 1c1e mrr $AR0, $AC0.M + 0e95 1c5e mrr $AR2, $AC0.M + 0e96 0083 043c lri $AR3, #0x043c + 0e98 197e lrri $AC0.M, @$AR3 + 0e99 197f lrri $AC1.M, @$AR3 + 0e9a 80a2 nx'sl : $AC0.M, $AX0.H + 0e9b 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + 0e9c 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + 0e9d 1b1f srri @$AR0, $AC1.M + 0e9e 1c02 mrr $AR0, $AR2 + 0e9f 8100 clr $ACC0 + 0ea0 00de 0402 lr $AC0.M, @0x0402 + 0ea2 00fe 0362 sr @0x0362, $AC0.M + 0ea4 1474 lsr $ACC0, #-12 + 0ea5 1f7e mrr $AX1.H, $AC0.M + 0ea6 1f3c mrr $AX1.L, $AC0.L + 0ea7 8900 clr $ACC1 + 0ea8 00dd 0430 lr $AC1.L, @0x0430 + 0eaa 1504 lsl $ACC1, #4 + 0eab 0604 cmpis $ACC0, #0x04 + 0eac 0290 0f03 jge 0x0f03 + 0eae 1fdd mrr $AC0.M, $AC1.L + 0eaf 0082 02b0 lri $AR2, #0x02b0 + 0eb1 1050 loopi #0x50 + 0eb2 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L + 0eb3 1fbe mrr $AC1.L, $AC0.M + 0eb4 00fe 0360 sr @0x0360, $AC0.M + 0eb6 8900 clr $ACC1 + 0eb7 1fbe mrr $AC1.L, $AC0.M + 0eb8 0af8 lris $AX0.H, #0xf8 + 0eb9 009b 00fc lri $AX1.H, #0x00fc + 0ebb 00d8 0361 lr $AX0.L, @0x0361 + 0ebd 0082 02b0 lri $AR2, #0x02b0 + 0ebf 0083 02b0 lri $AR3, #0x02b0 + 0ec1 195e lrri $AC0.M, @$AR2 + 0ec2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M + 0ec3 1128 0ec8 bloopi #0x28, 0x0ec8 + 0ec5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 + 0ec6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H + 0ec7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 + 0ec8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + 0ec9 8a00 m2 + 0eca 0082 02b0 lri $AR2, #0x02b0 + 0ecc 00dd 0430 lr $AC1.L, @0x0430 + 0ece 1504 lsl $ACC1, #4 + 0ecf 1fe0 mrr $AC1.M, $AR0 + 0ed0 8100 clr $ACC0 + 0ed1 00de 0362 lr $AC0.M, @0x0362 + 0ed3 1474 lsr $ACC0, #-12 + 0ed4 1f7e mrr $AX1.H, $AC0.M + 0ed5 1f3c mrr $AX1.L, $AC0.L + 0ed6 8f00 set40 + 0ed7 1943 lrri $AR3, @$AR2 + 0ed8 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ed9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0eda f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0edb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0edc f200 madd $AX0.L, $AX0.H + 0edd fe00 movpz $ACC0 + 0ede 1c1f mrr $AR0, $AC1.M + 0edf 1943 lrri $AR3, @$AR2 + 0ee0 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ee1 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ee2 114e 0eea bloopi #0x4e, 0x0eea + 0ee4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ee5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ee6 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0ee7 1c1f mrr $AR0, $AC1.M + 0ee8 1943 lrri $AR3, @$AR2 + 0ee9 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0eea 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + 0eeb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0eec f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0eed f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0eee fe00 movpz $ACC0 + 0eef 1b3e srri @$AR1, $AC0.M + 0ef0 8b00 m0 + 0ef1 8e00 set16 + 0ef2 00fe 0433 sr @0x0433, $AC0.M + 0ef4 1c1f mrr $AR0, $AC1.M + 0ef5 150c lsl $ACC1, #12 + 0ef6 0340 0fff andi $AC1.M, #0x0fff + 0ef8 00ff 0430 sr @0x0430, $AC1.M + 0efa 0083 043c lri $AR3, #0x043c + 0efc 191e lrri $AC0.M, @$AR0 + 0efd 191f lrri $AC1.M, @$AR0 + 0efe 80a0 nx'ls : $AX0.H, $AC0.M + 0eff 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0f00 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0f01 1b7f srri @$AR3, $AC1.M + 0f02 02df ret + 0f03 1fe0 mrr $AC1.M, $AR0 + 0f04 1c1f mrr $AR0, $AC1.M + 0f05 1128 0f0c bloopi #0x28, 0x0f0c + 0f07 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f08 1b3e srri @$AR1, $AC0.M + 0f09 1c1f mrr $AR0, $AC1.M + 0f0a 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f0b 1b3e srri @$AR1, $AC0.M + 0f0c 1c1f mrr $AR0, $AC1.M + 0f0d 029f 0ef2 jmp 0x0ef2 + 0f0f 0083 0520 lri $AR3, #0x0520 + 0f11 00de 0433 lr $AC0.M, @0x0433 + 0f13 1050 loopi #0x50 + 0f14 1b7e srri @$AR3, $AC0.M + 0f15 029f 0338 jmp 0x0338 + 0f17 1c20 mrr $AR1, $AR0 + 0f18 185f lrr $AC1.M, @$AR2 + 0f19 1f7f mrr $AX1.H, $AC1.M + 0f1a 193a lrri $AX0.H, @$AR1 + 0f1b 6400 movr $ACC0, $AX0.H + 0f1c 0078 0f21 bloop $AX0.L, 0x0f21 + 0f1e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 + 0f1f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M + 0f20 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 + 0f21 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M + 0f22 1a5b srr @$AR2, $AX1.H + 0f23 02df ret + 0f24 0098 8240 lri $AX0.L, #0x8240 + 0f26 00f8 04e8 sr @0x04e8, $AX0.L + 0f28 0098 7fff lri $AX0.L, #0x7fff + 0f2a 00f8 04e9 sr @0x04e9, $AX0.L + 0f2c 0098 7dbf lri $AX0.L, #0x7dbf + 0f2e 00f8 04ea sr @0x04ea, $AX0.L + 0f30 0098 843f lri $AX0.L, #0x843f + 0f32 00f8 04eb sr @0x04eb, $AX0.L + 0f34 0098 b23b lri $AX0.L, #0xb23b + 0f36 00f8 04f0 sr @0x04f0, $AX0.L + 0f38 0098 7fff lri $AX0.L, #0x7fff + 0f3a 00f8 04f1 sr @0x04f1, $AX0.L + 0f3c 0098 4dc4 lri $AX0.L, #0x4dc4 + 0f3e 00f8 04f2 sr @0x04f2, $AX0.L + 0f40 0098 d808 lri $AX0.L, #0xd808 + 0f42 00f8 04f3 sr @0x04f3, $AX0.L + 0f44 0098 0000 lri $AX0.L, #0x0000 + 0f46 0080 04ec lri $AR0, #0x04ec + 0f48 1004 loopi #0x04 + 0f49 1b18 srri @$AR0, $AX0.L + 0f4a 0080 04f4 lri $AR0, #0x04f4 + 0f4c 1004 loopi #0x04 + 0f4d 1b18 srri @$AR0, $AX0.L + 0f4e 02df ret + 0f4f 0080 0f40 lri $AR0, #0x0f40 + 0f51 0083 0b00 lri $AR3, #0x0b00 + 0f53 8900 clr $ACC1 + 0f54 0f50 lris $AC1.M, #0x50 + 0f55 0098 6784 lri $AX0.L, #0x6784 + 0f57 02bf 010e call 0x010e + 0f59 0080 04e8 lri $AR0, #0x04e8 + 0f5b 0082 04ec lri $AR2, #0x04ec + 0f5d 0081 0b00 lri $AR1, #0x0b00 + 0f5f 8900 clr $ACC1 + 0f60 0f50 lris $AC1.M, #0x50 + 0f61 0080 0b00 lri $AR0, #0x0b00 + 0f63 0083 0d00 lri $AR3, #0x0d00 + 0f65 0098 7fff lri $AX0.L, #0x7fff + 0f67 02bf 00ff call 0x00ff + 0f69 8900 clr $ACC1 + 0f6a 0f50 lris $AC1.M, #0x50 + 0f6b 0080 0b00 lri $AR0, #0x0b00 + 0f6d 0083 0d60 lri $AR3, #0x0d60 + 0f6f 0098 b820 lri $AX0.L, #0xb820 + 0f71 02bf 00ff call 0x00ff + 0f73 0080 0ca0 lri $AR0, #0x0ca0 + 0f75 0083 0b00 lri $AR3, #0x0b00 + 0f77 8900 clr $ACC1 + 0f78 0f50 lris $AC1.M, #0x50 + 0f79 0098 6784 lri $AX0.L, #0x6784 + 0f7b 02bf 010e call 0x010e + 0f7d 0080 04e8 lri $AR0, #0x04e8 + 0f7f 0082 04f4 lri $AR2, #0x04f4 + 0f81 0081 0b00 lri $AR1, #0x0b00 + 0f83 8900 clr $ACC1 + 0f84 0f50 lris $AC1.M, #0x50 + 0f85 0080 0b00 lri $AR0, #0x0b00 + 0f87 0083 0d00 lri $AR3, #0x0d00 + 0f89 0098 47e0 lri $AX0.L, #0x47e0 + 0f8b 02bf 00ff call 0x00ff + 0f8d 8900 clr $ACC1 + 0f8e 0f50 lris $AC1.M, #0x50 + 0f8f 0080 0b00 lri $AR0, #0x0b00 + 0f91 0083 0d60 lri $AR3, #0x0d60 + 0f93 0098 8001 lri $AX0.L, #0x8001 + 0f95 02bf 00ff call 0x00ff + 0f97 02df ret + 0f98 0000 nop + 0f99 0000 nop + 0f9a 0000 nop + 0f9b 0000 nop + 0f9c 0000 nop + 0f9d 0000 nop + 0f9e 0000 nop + 0f9f 0000 nop diff --git a/docs/DSP/DSP_UC_SuperMarioGalaxy.txt b/docs/DSP/DSP_UC_SuperMarioGalaxy.txt index 5dea255728..9909314224 100644 --- a/docs/DSP/DSP_UC_SuperMarioGalaxy.txt +++ b/docs/DSP/DSP_UC_SuperMarioGalaxy.txt @@ -1,3174 +1,3174 @@ - // Memory map: - // - // 0x0D00: final right buffer #1 - // 0x0D60: final left buffer #1 - // 0x0F40: final right buffer #2 - // 0x0CA0: final left buffer #2 - - 0000 029f 0012 jmp 0x0012 // Reset() - 0002 0000 nop - 0003 0000 nop - 0004 02ff rti - 0005 0000 nop - 0006 02ff rti - 0007 0000 nop - 0008 02ff rti - 0009 0000 nop - 000a 02ff rti - 000b 0000 nop - 000c 02ff rti - 000d 0000 nop - 000e 029f 06e9 jmp 0x06e9 // Exception_0E() - - 0010 029f 004c jmp 0x004c // TaskStart() - -// Reset() - 0012 1205 sbclr #0x05 - 0013 02bf 0055 call 0x0055 - 0015 8100 clr $ACC0 - 0016 009f 1000 lri $AC1.M, #0x1000 - 0018 0080 0000 lri $AR0, #0x0000 - 001a 005f loop $AC1.M - 001b 1b1e srri @$AR0, $AC0.M - 001c 02bf 07b9 call 0x07b9 // InitGlobalVars() - 001e 02bf 0f0a call 0x0f0a // InitUnkTable() - 0020 0e00 lris $AC0.M, #0x00 - 0021 02bf 079b call 0x079b // SendMail_DCD1(0x0000) - 0023 009e 1111 lri $AC0.M, #0x1111 - 0025 02bf 07a5 call 0x07a5 // sendMail_F355(0x1111) - 0027 0e00 lris $AC0.M, #0x00 - 0028 00fe 034e sr @0x034e, $AC0.M - 002a 1305 sbset #0x05 - 002b 029f 07f6 jmp 0x07f6 // jump to MessageLoop() - -// OpcodeHandler() - 002d 00df 0357 lr $AC1.M, @0x0357 - 002f 00ff 0345 sr @0x0345, $AC1.M - 0031 00de 0356 lr $AC0.M, @0x0356 - 0033 1ffe mrr $AC1.M, $AC0.M - 0034 0340 00ff andi $AC1.M, #0x00ff - 0036 00ff 0344 sr @0x0344, $AC1.M - 0038 1479 lsr $ACC0, #-7 - 0039 0240 007e andi $AC0.M, #0x007e - 003b 00fe 0343 sr @0x0343, $AC0.M - 003d 0200 0073 addi $AC0.M, #0x0073 // Opcode jump table address (0x0073) - 003f 1c1e mrr $AR0, $AC0.M - 0040 170f jmpr $AR0 // jump to opcode handler - 0041 0092 00ff lri $CR, #0x00ff // Return address from opcode handler - 0043 0e04 lris $AC0.M, #0x04 - 0044 02bf 079b call 0x079b // SendMail_DCD1(0x0004) - 0046 00de 0356 lr $AC0.M, @0x0356 - 0048 02bf 07a5 call 0x07a5 // SendMail_F355(mail_high_part) - 004a 029f 002b jmp 0x002b // jump back to MessageLoop() - -// TaskStart() - 004c 1205 sbclr #0x05 - 004d 02bf 0055 call 0x0055 - 004f 0e01 lris $AC0.M, #0x01 - 0050 02bf 079b call 0x079b // SendMail_DCD1(0x0001) - 0052 1305 sbset #0x05 - 0053 029f 002b jmp 0x002b // jump back to MessageLoop() - -// - 0055 1202 sbclr #0x02 - 0056 1203 sbclr #0x03 - 0057 1204 sbclr #0x04 - 0058 1306 sbset #0x06 - 0059 8e00 set16 - 005a 8c00 clr15 - 005b 8b00 m0 - 005c 009e ffff lri $AC0.M, #0xffff - 005e 1d1e mrr $WR0, $AC0.M - 005f 1d3e mrr $WR1, $AC0.M - 0060 1d5e mrr $WR2, $AC0.M - 0061 1d7e mrr $WR3, $AC0.M - 0062 0092 00ff lri $CR, #0x00ff - 0064 02df ret - -// ReadWholeMessage() - 0065 0081 0358 lri $AR1, #0x0358 - 0067 0090 0000 lri $AC0.H, #0x0000 - 0069 0c00 lris $AC0.L, #0x00 - 006a 007e 006f bloop $AC0.M, 0x006f - 006c 193e lrri $AC0.M, @$AR1 - 006d 1b1e srri @$AR0, $AC0.M - 006e 193e lrri $AC0.M, @$AR1 - 006f 1b1e srri @$AR0, $AC0.M - 0070 02df ret - -// Opcode_03() (dummy) - 0071 029f 0041 jmp 0x0041 - -// Opcode jump table (16 opcodes available) - 0073 029f 0041 jmp 0x0041 // 0 (dummy) - 0075 029f 0093 jmp 0x0093 // 1 (DsetupTable) - 0077 029f 029d jmp 0x029d // 2 (SyncFrame) - 0079 029f 0071 jmp 0x0071 // 3 (dummy) - 007b 029f 0616 jmp 0x0616 // 4 () - 007d 029f 0628 jmp 0x0628 // 5 () - 007f 029f 0041 jmp 0x0041 // 6 (dummy) - 0081 029f 055f jmp 0x055f // 7 () - 0083 029f 05ab jmp 0x05ab // 8 () - 0085 029f 058f jmp 0x058f // 9 () - 0087 029f 0041 jmp 0x0041 // A (dummy) - 0089 029f 0041 jmp 0x0041 // B (dummy) - 008b 029f 0041 jmp 0x0041 // C (dummy) - 008d 029f 00bd jmp 0x00bd // D (DsetDolbyDelay) - 008f 029f 00b0 jmp 0x00b0 // E () - 0091 029f 0041 jmp 0x0041 // F (dummy) - -// Opcode_01() - DsetupTable -// Message body: 5 mails -// Mail 1: bit0-15 = max (see inner loop of SyncFrame), bit16-32 = 0, bit24-30 = command (0x01) -// Mail 2: Address in main memory of parameter blocks used during mixing; there are X blocks of 384 bytes (192 words) each -// Mail 3: Address in main memory of something (640 words copied to 0x0000) -// Mail 4: Address in main memory of something (32 words copied to 0x0300) -// Mail 5: Address in main memory of other parameter blocks; there are 4 blocks (or more?) of 32 bytes (16 words) each -// Stores the mail body to 0x0380. - 0093 0080 0380 lri $AR0, #0x0380 - 0095 0e04 lris $AC0.M, #0x04 - 0096 02bf 0065 call 0x0065 - 0098 0081 0382 lri $AR1, #0x0382 - 009a 009f 0000 lri $AC1.M, #0x0000 - 009c 0080 0280 lri $AR0, #0x0280 - 009e 02bf 05e6 call 0x05e6 // DmaCopy(0x0000, Dword[0x0382], 0x280) - 00a0 0081 0384 lri $AR1, #0x0384 - 00a2 009f 0300 lri $AC1.M, #0x0300 - 00a4 0080 0020 lri $AR0, #0x0020 - 00a6 02bf 05e6 call 0x05e6 // DmaCopy(0x0300, Dword[0x0384], 32) - 00a8 00de 0345 lr $AC0.M, @0x0345 - 00aa 00fe 0342 sr @0x0342, $AC0.M - 00ac 02bf 0d01 call 0x0d01 - 00ae 029f 0041 jmp 0x0041 - -// Opcode_0E() - 00b0 0080 037d lri $AR0, #0x037d - 00b2 0e01 lris $AC0.M, #0x01 - 00b3 02bf 0065 call 0x0065 - 00b5 00de 037d lr $AC0.M, @0x037d - 00b7 0240 7fff andi $AC0.M, #0x7fff - 00b9 00fe 037d sr @0x037d, $AC0.M - 00bb 029f 0041 jmp 0x0041 - -// Opcode_0D() - DsetDolbyDelay - 00bd 0080 0374 lri $AR0, #0x0374 - 00bf 0e01 lris $AC0.M, #0x01 - 00c0 00fe 0377 sr @0x0377, $AC0.M - 00c2 00fe 037c sr @0x037c, $AC0.M - 00c4 02bf 0065 call 0x0065 - 00c6 00de 0345 lr $AC0.M, @0x0345 - 00c8 00fe 0376 sr @0x0376, $AC0.M - 00ca 029f 0041 jmp 0x0041 - -// read PB - 00cc 0081 034c lri $AR1, #0x034c - 00ce 009f 0400 lri $AC1.M, #0x0400 - 00d0 0080 00c0 lri $AR0, #0x00c0 - 00d2 02bf 05e6 call 0x05e6 // DmaCopy(0x0400, Dword[0x034C], 192) - 00d4 02df ret - -// writeback PB - 00d5 0081 034c lri $AR1, #0x034c - 00d7 009f 0400 lri $AC1.M, #0x0400 - 00d9 0080 0080 lri $AR0, #0x0080 - 00db 0081 034c lri $AR1, #0x034c - 00dd 193e lrri $AC0.M, @$AR1 - 00de 193c lrri $AC0.L, @$AR1 - 00df 0098 0000 lri $AX0.L, #0x0000 - 00e1 7000 addaxl $ACC0, $AX0.L - 00e2 02bf 05f5 call 0x05f5 // DmaCopy(Dword[0x034C], 0x0400, 128) - 00e4 02df ret - -// - 00e5 191e lrri $AC0.M, @$AR0 - 00e6 191a lrri $AX0.H, @$AR0 - 00e7 005f loop $AC1.M - 00e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 00e9 1b7e srri @$AR3, $AC0.M - 00ea 1b7a srri @$AR3, $AX0.H - 00eb 02df ret - -// memcpy(destination, source, length) -// AR0 = source address -// AR3 = destination address -// AC1.M = length in dwords - 00ec 0000 nop - 00ed 007f 00f2 bloop $AC1.M, 0x00f2 - 00ef 191e lrri $AC0.M, @$AR0 - 00f0 1b7e srri @$AR3, $AC0.M - 00f1 191e lrri $AC0.M, @$AR0 - 00f2 1b7e srri @$AR3, $AC0.M - 00f3 0000 nop - 00f4 02df ret - -// - 00f5 191e lrri $AC0.M, @$AR0 - 00f6 191a lrri $AX0.H, @$AR0 - 00f7 007f 00fc bloop $AC1.M, 0x00fc - 00f9 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 00fa 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 00fb 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 00fc 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 00fd 0000 nop - 00fe 02df ret - -// multiply routine -// AC1.M = size in words -// AR0 = source addres -// AR3 = destination address - 00ff 8a00 m2 // multiply result by 2 - 0100 157f lsr $ACC1, #-1 // size >>= 1 (process buffers per dwords) - 0101 1c20 mrr $AR1, $AR0 // AR1 = AR0 - 0102 1c03 mrr $AR0, $AR3 // AR0 = AR3 - 0103 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++; - 0104 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 // prod = AX0.L * AX0.H; AX0.H = Mem[AR1]; AR1++; - 0105 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; AX1.H = Mem[AR3]; AR3++; - - 0106 007f 010b bloop $AC1.M, 0x010b - 0108 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 // ACC0 += AX1.H; AX0.H = Mem[AR1]; AR1++; - 0109 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; ... - 010a 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 010b 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - - 010c 8b00 m0 // don't multiply result - 010d 02df ret - -// - 010e 8a00 m2 - 010f 191a lrri $AX0.H, @$AR0 - 0110 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 - 0111 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0112 005f loop $AC1.M - 0113 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M - 0114 8b00 m0 - 0115 02df ret - -// ClearBuffers() -// clears: -// - 80 words at 0x0D00 (right buffer #1) -// - 80 words at 0x0D60 (left buffer #1) -// - 80 words at 0x0CA0 (left buffer #2) -// - 80 words at 0x0F40 (right buffer #2) -// - 80 words at 0x0FA0 -// - 80 words at 0x0A00 -// - 80 words at 0x09A0 -// - 80 words at 0x0DC8 -// - 80 words at 0x0E28 -// - 80 words at 0x0E88 -// - 80 words at 0x0EE8 -// copies: -// - 8 words from 0x0E10 to 0x0DC0 -// - 8 words from 0x0E70 to 0x0E20 -// - 8 words from 0x0ED0 to 0x0E80 -// - 8 words from 0x0F30 to 0x0EE0 - 0116 8100 clr $ACC0 - 0117 8900 clr $ACC1 - 0118 0e50 lris $AC0.M, #0x50 - 0119 0080 0d00 lri $AR0, #0x0d00 - 011b 005e loop $AC0.M - 011c 1b1f srri @$AR0, $AC1.M - 011d 0080 0d60 lri $AR0, #0x0d60 - 011f 005e loop $AC0.M - 0120 1b1f srri @$AR0, $AC1.M - 0121 00da 0374 lr $AX0.H, @0x0374 - 0123 8600 tstaxh $AX0.H - 0124 02b5 0f35 callz 0x0f35 // call this mixer if right buffer address is 0??? uh??? - 0126 8100 clr $ACC0 - 0127 8900 clr $ACC1 - 0128 0e50 lris $AC0.M, #0x50 - 0129 0080 0ca0 lri $AR0, #0x0ca0 - 012b 005e loop $AC0.M - 012c 1b1f srri @$AR0, $AC1.M - 012d 0080 0f40 lri $AR0, #0x0f40 - 012f 005e loop $AC0.M - 0130 1b1f srri @$AR0, $AC1.M - 0131 0080 0fa0 lri $AR0, #0x0fa0 - 0133 005e loop $AC0.M - 0134 1b1f srri @$AR0, $AC1.M - 0135 0080 0a00 lri $AR0, #0x0a00 - 0137 005e loop $AC0.M - 0138 1b1f srri @$AR0, $AC1.M - 0139 0080 09a0 lri $AR0, #0x09a0 - 013b 005e loop $AC0.M - 013c 1b1f srri @$AR0, $AC1.M - 013d 0f04 lris $AC1.M, #0x04 - 013e 0080 0e10 lri $AR0, #0x0e10 - 0140 0083 0dc0 lri $AR3, #0x0dc0 - 0142 02bf 00ec call 0x00ec // memcpy(0x0DC0, 0x0E10, 4); - 0144 0080 0e70 lri $AR0, #0x0e70 - 0146 0083 0e20 lri $AR3, #0x0e20 - 0148 02bf 00ec call 0x00ec // memcpy(0x0E20, 0x0E70, 4); - 014a 0080 0ed0 lri $AR0, #0x0ed0 - 014c 0083 0e80 lri $AR3, #0x0e80 - 014e 02bf 00ec call 0x00ec // memcpy(0x0E80, 0x0ED0, 4); - 0150 0080 0f30 lri $AR0, #0x0f30 - 0152 0083 0ee0 lri $AR3, #0x0ee0 - 0154 02bf 00ec call 0x00ec // memcpy(0x0EE0, 0x0F30, 4); - 0156 8100 clr $ACC0 - 0157 0e50 lris $AC0.M, #0x50 - 0158 8900 clr $ACC1 - 0159 0080 0dc8 lri $AR0, #0x0dc8 - 015b 005e loop $AC0.M - 015c 1b1f srri @$AR0, $AC1.M - 015d 0080 0e28 lri $AR0, #0x0e28 - 015f 005e loop $AC0.M - 0160 1b1f srri @$AR0, $AC1.M - 0161 0080 0e88 lri $AR0, #0x0e88 - 0163 005e loop $AC0.M - 0164 1b1f srri @$AR0, $AC1.M - 0165 0080 0ee8 lri $AR0, #0x0ee8 - 0167 005e loop $AC0.M - 0168 1b1f srri @$AR0, $AC1.M - 0169 02df ret - -// - 016a 009f 0580 lri $AC1.M, #0x0580 - 016c 009b 00a0 lri $AX1.H, #0x00a0 - 016e 0081 0393 lri $AR1, #0x0393 - 0170 18bc lrrd $AC0.L, @$AR1 // AC0.L = Mem[0x0393]; - 0171 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 // AC0.M = Mem[0x0392]; - 0172 bc00 mulxac $AX0.H, $AX1.H, $ACC0 // ACC0 += (AX0.H * AX1.H); (Mem[0x03A4] * 160) - 0173 0080 0050 lri $AR0, #0x0050 - 0175 02bf 05e8 call 0x05e8 // DmaCopy(0x0580, ((Dword[0x0392 << 16) | Dword[0x0393]) + (Mem[0x03A4] * 160), 80); - 0177 02df ret - -// - 0178 00df 03a1 lr $AC1.M, @0x03a1 - 017a 0508 addis $ACC1, #0x08 - 017b 0080 0580 lri $AR0, #0x0580 - 017d 1c7f mrr $AR3, $AC1.M - 017e 0098 7fff lri $AX0.L, #0x7fff - 0180 8900 clr $ACC1 - 0181 0f50 lris $AC1.M, #0x50 - 0182 02bf 00ff call 0x00ff // mult routine - 0184 02df ret - -// mix? - 0185 00c0 03a0 lr $AR0, @0x03a0 - 0187 191a lrri $AX0.H, @$AR0 // AX0.H = Mem[0x03A4]; - 0188 02bf 016a call 0x016a // get music? - 018a 02bf 0178 call 0x0178 - 018c 8100 clr $ACC0 - 018d 8900 clr $ACC1 - 018e 00de 0390 lr $AC0.M, @0x0390 // First word of PB: status; 1 = playing, 0 = not playing - 0190 02a0 0001 andf $AC0.M, #0x0001 - 0192 029d 019b jlz 0x019b - 0194 0080 0398 lri $AR0, #0x0398 // - 0196 0e08 lris $AC0.M, #0x08 - 0197 00c1 03a1 lr $AR1, @0x03a1 - 0199 02bf 0c43 call 0x0c43 // ??? - 019b 0f50 lris $AC1.M, #0x50 - 019c 00c0 03a1 lr $AR0, @0x03a1 - 019e 00da 0394 lr $AX0.H, @0x0394 // - 01a0 8600 tstaxh $AX0.H - 01a1 0295 01a8 jz 0x01a8 - 01a3 1c7a mrr $AR3, $AX0.H - 01a4 00d8 0395 lr $AX0.L, @0x0395 - 01a6 02bf 00ff call 0x00ff // mult routine - 01a8 0f50 lris $AC1.M, #0x50 - 01a9 00c0 03a1 lr $AR0, @0x03a1 - 01ab 00da 0396 lr $AX0.H, @0x0396 - 01ad 8600 tstaxh $AX0.H - 01ae 0295 01b5 jz 0x01b5 - 01b0 1c7a mrr $AR3, $AX0.H - 01b1 00d8 0397 lr $AX0.L, @0x0397 - 01b3 02bf 00ff call 0x00ff - 01b5 00de 0390 lr $AC0.M, @0x0390 - 01b7 02a0 0002 andf $AC0.M, #0x0002 - 01b9 02dd retlz - 01ba 0080 0398 lri $AR0, #0x0398 - 01bc 0e08 lris $AC0.M, #0x08 - 01bd 00c1 03a1 lr $AR1, @0x03a1 - 01bf 02bf 0c43 call 0x0c43 - 01c1 02df ret - -// mix background music? called by cmd 02 (SyncFrame) -// uses the 4 first PBs -// so these PBs would be for background music? - 01c2 8900 clr $ACC1 - 01c3 009f 0dc0 lri $AC1.M, #0x0dc0 - 01c5 00ff 03a1 sr @0x03a1, $AC1.M - 01c7 009f 03a8 lri $AC1.M, #0x03a8 - 01c9 00ff 03a2 sr @0x03a2, $AC1.M - 01cb 009f 03a4 lri $AC1.M, #0x03a4 - 01cd 00ff 03a0 sr @0x03a0, $AC1.M - - 01cf 1104 01ef bloopi #0x04, 0x01ef // Perform mixing for 4 PBs - 01d1 00c0 03a2 lr $AR0, @0x03a2 // Inited to 0x03A8 - 01d3 0083 0390 lri $AR3, #0x0390 - 01d5 8900 clr $ACC1 - 01d6 0f08 lris $AC1.M, #0x08 - 01d7 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8); Copy the current PB to 0x0390 - 01d9 00da 0390 lr $AX0.H, @0x0390 - 01db 8600 tstaxh $AX0.H - 01dc 0295 01e0 jz 0x01e0 // skip the call below if [0x0390] is nonzero? ([0x0390] = first word of PB, probably start/stop flag?) - 01de 02bf 0185 call 0x0185 // mix? - 01e0 8100 clr $ACC0 - 01e1 00de 03a2 lr $AC0.M, @0x03a2 - 01e3 0410 addis $ACC0, #0x10 // Increment address to next PB - 01e4 00fe 03a2 sr @0x03a2, $AC0.M - 01e6 00de 03a1 lr $AC0.M, @0x03a1 - 01e8 0460 addis $ACC0, #0x60 // Increment another value (buffer address???) - 01e9 00fe 03a1 sr @0x03a1, $AC0.M - 01eb 00de 03a0 lr $AC0.M, @0x03a0 - 01ed 7400 incm $AC0.M // Increment another value (address of something) - 01ee 00fe 03a0 sr @0x03a0, $AC0.M - - 01f0 00da 0374 lr $AX0.H, @0x0374 - 01f2 8600 tstaxh $AX0.H - 01f3 0294 0219 jnz 0x0219 - 01f5 0f50 lris $AC1.M, #0x50 - 01f6 0080 0be0 lri $AR0, #0x0be0 - 01f8 0083 0e80 lri $AR3, #0x0e80 - 01fa 0098 7fff lri $AX0.L, #0x7fff // +32767 - 01fc 02bf 00ff call 0x00ff // mult routine - 01fe 0f50 lris $AC1.M, #0x50 - 01ff 0080 0be0 lri $AR0, #0x0be0 - 0201 0083 0ee0 lri $AR3, #0x0ee0 - 0203 0098 b820 lri $AX0.L, #0xb820 // -18400 - 0205 02bf 00ff call 0x00ff // mult routine - 0207 0f28 lris $AC1.M, #0x28 - 0208 0080 0c68 lri $AR0, #0x0c68 - 020a 0083 0e80 lri $AR3, #0x0e80 - 020c 0098 b820 lri $AX0.L, #0xb820 // -18400 - 020e 02bf 00ff call 0x00ff // mult routine - 0210 0f28 lris $AC1.M, #0x28 - 0211 0080 0c68 lri $AR0, #0x0c68 - 0213 0083 0ee0 lri $AR3, #0x0ee0 - 0215 0098 7fff lri $AX0.L, #0x7fff // +32767 - 0217 02bf 00ff call 0x00ff // mult routine - // clear buffers at 0x0BE0 and 0x0C40 (80 words(160 bytes) each) - 0219 8100 clr $ACC0 - 021a 8900 clr $ACC1 - 021b 0e50 lris $AC0.M, #0x50 - 021c 0080 0be0 lri $AR0, #0x0be0 - 021e 005e loop $AC0.M - 021f 1b1f srri @$AR0, $AC1.M - 0220 0080 0c40 lri $AR0, #0x0c40 - 0222 005e loop $AC0.M - 0223 1b1f srri @$AR0, $AC1.M - 0224 02df ret - -// - 0225 00c0 03a0 lr $AR0, @0x03a0 - 0227 181a lrr $AX0.H, @$AR0 - 0228 8100 clr $ACC0 - 0229 181e lrr $AC0.M, @$AR0 - 022a 00db 0391 lr $AX1.H, @0x0391 - 022c 7400 incm $AC0.M - 022d d100 cmpar $ACC1, $AX0.H - 022e 0270 ifns - 022f 8100 clr $ACC0 - 0230 1b1e srri @$AR0, $AC0.M - 0231 00df 03a1 lr $AC1.M, @0x03a1 - 0233 009b 00a0 lri $AX1.H, #0x00a0 - 0235 0081 0393 lri $AR1, #0x0393 - 0237 18bc lrrd $AC0.L, @$AR1 - 0238 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0239 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 023a 0080 0050 lri $AR0, #0x0050 - 023c 02bf 05f5 call 0x05f5 // DmaCopy((Mem[0x0392] << 16 | Mem[0x0393]), Mem[0x03A1], 80); - 023e 02df ret - -// another mixer? - 023f 00da 0374 lr $AX0.H, @0x0374 - 0241 8600 tstaxh $AX0.H - 0242 0294 0258 jnz 0x0258 - 0244 8900 clr $ACC1 - 0245 0f28 lris $AC1.M, #0x28 - 0246 0080 0c40 lri $AR0, #0x0c40 - 0248 0083 0ea8 lri $AR3, #0x0ea8 - 024a 0098 b820 lri $AX0.L, #0xb820 - 024c 02bf 00ff call 0x00ff - 024e 8900 clr $ACC1 - 024f 0f28 lris $AC1.M, #0x28 - 0250 0080 0c40 lri $AR0, #0x0c40 - 0252 0083 0f08 lri $AR3, #0x0f08 - 0254 0098 7fff lri $AX0.L, #0x7fff - 0256 02bf 00ff call 0x00ff - 0258 009f 0dc0 lri $AC1.M, #0x0dc0 - 025a 00ff 03a1 sr @0x03a1, $AC1.M - 025c 009f 03a8 lri $AC1.M, #0x03a8 - 025e 00ff 03a2 sr @0x03a2, $AC1.M - 0260 009f 03a4 lri $AC1.M, #0x03a4 - 0262 00ff 03a0 sr @0x03a0, $AC1.M - - 0264 1104 0282 bloopi #0x04, 0x0282 - 0266 00c0 03a2 lr $AR0, @0x03a2 - 0268 0083 0390 lri $AR3, #0x0390 - 026a 0f08 lris $AC1.M, #0x08 - 026b 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8); - 026d 00da 0390 lr $AX0.H, @0x0390 - 026f 8600 tstaxh $AX0.H - 0270 0295 0274 jz 0x0274 - 0272 02bf 0225 call 0x0225 - 0274 00de 03a2 lr $AC0.M, @0x03a2 - 0276 0410 addis $ACC0, #0x10 - 0277 00fe 03a2 sr @0x03a2, $AC0.M - 0279 00de 03a1 lr $AC0.M, @0x03a1 - 027b 0460 addis $ACC0, #0x60 - 027c 00fe 03a1 sr @0x03a1, $AC0.M - 027e 00de 03a0 lr $AC0.M, @0x03a0 - 0280 7400 incm $AC0.M - 0281 00fe 03a0 sr @0x03a0, $AC0.M - - 0283 02df ret - -// CopyPBs() -// Copies some main memory region to 0x03A8 -// The memory region contains what seems to be PBs... -// Each PB is 32 bytes (16 words) long -// The transfer copies 64 words, ie 4 PBs. -// There may be more PBs, though. Dunno... - 0284 0081 0386 lri $AR1, #0x0386 // address of PBs, set by DsetupTable - 0286 009f 03a8 lri $AC1.M, #0x03a8 - 0288 0080 0040 lri $AR0, #0x0040 - 028a 02bf 05e6 call 0x05e6 // DmaCopy(0x03A8, Dword[0x0386], 64) - 028c 02df ret - -// Helper -// Increment the 32-bit value at AR0 by the value -// in AX0.L. - 028d 191e lrri $AC0.M, @$AR0 - 028e 189c lrrd $AC0.L, @$AR0 - 028f 4800 addax $ACC0, $AX0.L - 0290 1b1e srri @$AR0, $AC0.M - 0291 1b1c srri @$AR0, $AC0.L - 0292 02df ret - -// WaitForNextSyncMessage() -// Note: the wait loop continues until two values become non-equal. -// One of these values is set when sync mails are received. -// These mails, as well as 'regular' mails, are processed by the -// exception 7 handler. That's why that wait loop never checks for -// new mails. - 0293 8100 clr $ACC0 - 0294 8900 clr $ACC1 - 0295 00df 0354 lr $AC1.M, @0x0354 - 0297 00de 034e lr $AC0.M, @0x034e - 0299 8200 cmp - 029a 0293 0293 jle 0x0293 - 029c 02df ret - -// Opcode_02() - SyncFrame -// Message body: 5 mails -// Mail 1: bit0-15 = some number, bit16-32 = number of buffers to fill, bit24-30 = command (0x02) -// Mail 2: Address of right buffers in main memory (each buffer is 160 bytes long) -// Mail 3: Address of left buffers in main memory (each buffer is 160 bytes long) -// Mail 4: unused (zero) -// Mail 5: unused (zero) -// Stores the message body to 0x0388 and 0x0374. -// Performs mixing synchronously with the game. - 029d 0080 0388 lri $AR0, #0x0388 - 029f 0081 0065 lri $AR1, #0x0065 - 02a1 0e02 lris $AC0.M, #0x02 // Copy only 2 mails. The 2 last mails are unused. - 02a2 173f callr $AR1 // Copy message body to 0x0388 - 02a3 02bf 0476 call 0x0476 // Copy message body to 0x0374 - 02a5 00de 0344 lr $AC0.M, @0x0344 - 02a7 00fe 0341 sr @0x0341, $AC0.M - 02a9 00de 0345 lr $AC0.M, @0x0345 - 02ab 00fe 038e sr @0x038e, $AC0.M // Mem[0x038E] = Mem[0x0345] (set by DsetupTable) - 02ad 8100 clr $ACC0 - 02ae 00fe 0355 sr @0x0355, $AC0.M - 02b0 02bf 0284 call 0x0284 // Copy 4 PBs to 0x03A8 - 02b2 0092 00ff lri $CR, #0x00ff - 02b4 00de 0341 lr $AC0.M, @0x0341 - - 02b6 007e 0471 bloop $AC0.M, 0x0471 // Outer loop: for(i = 0; i < number_of_buffers; i++) - 02b8 02bf 0116 call 0x0116 // ClearBuffers() - 02ba 02bf 01c2 call 0x01c2 // ??? mix background music? echo processing? - 02bc 02bf 04e2 call 0x04e2 // ??? again a mixer? - 02be 02bf 0a91 call 0x0a91 // ??? multiplications - 02c0 00de 0355 lr $AC0.M, @0x0355 - 02c2 7400 incm $AC0.M // increment some counter - 02c3 00fe 0355 sr @0x0355, $AC0.M - 02c5 8100 clr $ACC0 - 02c6 00fe 0354 sr @0x0354, $AC0.M // reset some counter - 02c8 00de 0342 lr $AC0.M, @0x0342 - - 02ca 007e 0415 bloop $AC0.M, 0x0415 // Inner loop: for(j = 0; j < max (usually 64; set by DsetupTable); j++) - 02cc 02bf 0293 call 0x0293 // WaitForNextSyncMessage() - 02ce 8100 clr $ACC0 - 02cf 8900 clr $ACC1 - 02d0 00de 0354 lr $AC0.M, @0x0354 - 02d2 147c lsr $ACC0, #-4 - 02d3 0200 04fc addi $AC0.M, #0x04fc - 02d5 1c1e mrr $AR0, $AC0.M - 02d6 181f lrr $AC1.M, @$AR0 - 02d7 00de 0354 lr $AC0.M, @0x0354 - 02d9 0240 000f andi $AC0.M, #0x000f - 02db 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M - 02dc 03c0 8000 andcf $AC1.M, #0x8000 - 02de 029c 0411 jlnz 0x0411 // skip if (AC1.M & 0x8000) != 0x8000 - 02e0 00d8 0354 lr $AX0.L, @0x0354 - 02e2 009a 0180 lri $AX0.H, #0x0180 - 02e4 8100 clr $ACC0 - 02e5 00de 0380 lr $AC0.M, @0x0380 - 02e7 00dc 0381 lr $AC0.L, @0x0381 - 02e9 9000 mul $AX0.L, $AX0.H - 02ea 9400 mulac $AX0.L, $AX0.H, $ACC0 // ACC0 += (j * 384); - 02eb 00fe 034c sr @0x034c, $AC0.M - 02ed 00fc 034d sr @0x034d, $AC0.L - 02ef 02bf 00cc call 0x00cc // read PB; dma transfer from (Dword[0x0380] + (j*384)) to 0x0400, 192 words - 02f1 00da 0400 lr $AX0.H, @0x0400 - 02f3 8600 tstaxh $AX0.H - 02f4 0295 0411 jz 0x0411 // skip if Mem[0x0400] is zero - 02f6 00da 0401 lr $AX0.H, @0x0401 - 02f8 8600 tstaxh $AX0.H - 02f9 0294 0411 jnz 0x0411 // skip if Mem[0x0401] is nonzero - 02fb 00da 0433 lr $AX0.H, @0x0433 - 02fd 00fa 03f8 sr @0x03f8, $AX0.H // Mem[0x03F8] = Mem[0x0433] - 02ff 00da 0406 lr $AX0.H, @0x0406 - 0301 8600 tstaxh $AX0.H - 0302 0294 0ef5 jnz 0x0ef5 // jump to 0x0EF5 if Mem[0x0406] is nonzero - 0304 8100 clr $ACC0 - 0305 00de 0480 lr $AC0.M, @0x0480 // switch (Mem[0x0480]) ; sound format? - 0307 0609 cmpis $ACC0, #0x09 // case 0x09: (smg) - 0308 0295 031b jz 0x031b - 030a 0605 cmpis $ACC0, #0x05 // case 0x05: - 030b 0295 031b jz 0x031b - 030d 0608 cmpis $ACC0, #0x08 // case 0x08: - 030e 0295 0ac1 jz 0x0ac1 - 0310 0610 cmpis $ACC0, #0x10 // case 0x10: (smg) - 0311 0295 0b3e jz 0x0b3e - 0313 0620 cmpis $ACC0, #0x20 // case 0x20: - 0314 0295 0baf jz 0x0baf - 0316 0621 cmpis $ACC0, #0x21 // case 0x21: - 0317 0295 0bb7 jz 0x0bb7 - 0319 029f 09ae jmp 0x09ae // default: - // sound types 9 and 5 - // no compression? - 031b 00d8 0402 lr $AX0.L, @0x0402 // 0x0D71 - 031d 8100 clr $ACC0 - 031e 8900 clr $ACC1 - 031f 00dc 0430 lr $AC0.L, @0x0430 // 0x0000 - 0321 8d00 set15 - 0322 0950 lris $AX1.L, #0x50 - 0323 a000 mulx $AX0.L, $AX1.L - 0324 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0325 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0430] + (Mem[0x0402] * 80)) << 4; (AC0.L = 0x3500; AC0.M = 0x0043; AC0.H = 0x00;) - 0326 8c00 clr15 - 0327 1ffe mrr $AC1.M, $AC0.M // AC1.M = 0x0043; - 0328 0083 0580 lri $AR3, #0x0580 // AR3 = 0x0580; - 032a 02bf 086e call 0x086e - 032c 029f 032e jmp 0x032e - - 032e 0080 0580 lri $AR0, #0x0580 - 0330 0081 0520 lri $AR1, #0x0520 - 0332 0099 0000 lri $AX1.L, #0x0000 - 0334 02bf 0e75 call 0x0e75 // store ramp - - 0336 009e 0520 lri $AC0.M, #0x0520 - 0338 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] = 0x0520; - 033a 8900 clr $ACC1 - 033b 00df 0484 lr $AC1.M, @0x0484 - 033d 0340 001f andi $AC1.M, #0x001f - 033f b900 tst $ACC1 - 0340 0295 0366 jz 0x0366 - 0342 00de 038f lr $AC0.M, @0x038f - 0344 5c00 sub $ACC0, $AC1.L - 0345 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] -= AC1.L; uh? - 0347 1c7e mrr $AR3, $AC0.M - 0348 0080 0440 lri $AR0, #0x0440 - 034a 05fe addis $ACC1, #0xfe - 034b 02bf 00e5 call 0x00e5 // ??? - 034d 0080 0490 lri $AR0, #0x0490 - 034f 00c1 038f lr $AR1, @0x038f - 0351 8900 clr $ACC1 - 0352 00df 0484 lr $AC1.M, @0x0484 - 0354 0340 001f andi $AC1.M, #0x001f - 0356 02bf 0c62 call 0x0c62 // ??? - 0358 00de 038f lr $AC0.M, @0x038f - 035a 0450 addis $ACC0, #0x50 - 035b 1c1e mrr $AR0, $AC0.M - 035c 0083 0440 lri $AR3, #0x0440 - 035e 8900 clr $ACC1 - 035f 00df 0484 lr $AC1.M, @0x0484 - 0361 0340 001f andi $AC1.M, #0x001f - 0363 05fe addis $ACC1, #0xfe - 0364 02bf 00e5 call 0x00e5 // ??? - - 0366 00de 0484 lr $AC0.M, @0x0484 - 0368 0240 0020 andi $AC0.M, #0x0020 - 036a 0295 0388 jz 0x0388 - 036c 0080 04a4 lri $AR0, #0x04a4 - 036e 00c1 038f lr $AR1, @0x038f - 0370 0082 0454 lri $AR2, #0x0454 - 0372 0083 04a7 lri $AR3, #0x04a7 - 0374 18fa lrrd $AX0.H, @$AR3 - 0375 8600 tstaxh $AX0.H - 0376 0294 0386 jnz 0x0386 - 0378 18fa lrrd $AX0.H, @$AR3 - 0379 8600 tstaxh $AX0.H - 037a 0294 0386 jnz 0x0386 - 037c 18fa lrrd $AX0.H, @$AR3 - 037d 8600 tstaxh $AX0.H - 037e 0294 0386 jnz 0x0386 - 0380 8100 clr $ACC0 - 0381 18fe lrrd $AC0.M, @$AR3 - 0382 0280 7fff cmpi $AC0.M, #0x7fff - 0384 0295 0388 jz 0x0388 - 0386 02bf 0c7d call 0x0c7d // ??? - - 0388 8100 clr $ACC0 - 0389 00de 042c lr $AC0.M, @0x042c // 0x0001 - 038b b100 tst $ACC0 - 038c 0295 0392 jz 0x0392 - 038e 02bf 0dc3 call 0x0dc3 // ??? - 0390 029f 0407 jmp 0x0407 - - 0392 8100 clr $ACC0 - 0393 1c9e mrr $IX0, $AC0.M - 0394 1cde mrr $IX2, $AC0.M - 0395 7400 incm $AC0.M - 0396 1cfe mrr $IX3, $AC0.M - 0397 8100 clr $ACC0 - 0398 00de 0407 lr $AC0.M, @0x0407 - 039a b100 tst $ACC0 - 039b 0295 03aa jz 0x03aa - 039d 00c3 038f lr $AR3, @0x038f - 039f 0007 dar $AR3 - 03a0 0080 0477 lri $AR0, #0x0477 - 03a2 0084 ffff lri $IX0, #0xffff - 03a4 0087 ffff lri $IX3, #0xffff - 03a6 199a lrrn $AX0.H, @$AR0 - 03a7 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - 03a8 005e loop $AC0.M - 03a9 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - 03aa 00da 0485 lr $AX0.H, @0x0485 - 03ac 8600 tstaxh $AX0.H - 03ad 0295 03c0 jz 0x03c0 - 03af 8900 clr $ACC1 - 03b0 0086 0005 lri $IX2, #0x0005 - 03b2 0082 040a lri $AR2, #0x040a - - 03b4 1106 03b8 bloopi #0x06, 0x03b8 - 03b6 18de lrrd $AC0.M, @$AR2 - 03b7 147f lsr $ACC0, #-1 - 03b8 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M - - 03b9 b900 tst $ACC1 - 03ba 0294 03c0 jnz 0x03c0 - 03bc 009a 0001 lri $AX0.H, #0x0001 - 03be 00fa 0401 sr @0x0401, $AX0.H // Key Off - 03c0 8f00 set40 - 03c1 0086 0002 lri $IX2, #0x0002 - 03c3 0082 0408 lri $AR2, #0x0408 - - 03c5 1106 03f0 bloopi #0x06, 0x03f0 - 03c7 8100 clr $ACC0 - 03c8 195e lrri $AC0.M, @$AR2 - 03c9 1200 sbclr #0x00 - 03ca b100 tst $ACC0 - 03cb 0275 ifz - 03cc 1300 sbset #0x00 - 03cd 1c7e mrr $AR3, $AC0.M - 03ce 195e lrri $AC0.M, @$AR2 - 03cf 195f lrri $AC1.M, @$AR2 - 03d0 5c00 sub $ACC0, $AC1.L - 03d1 14fb asr $ACC0, #-5 - 03d2 1f5e mrr $AX0.H, $AC0.M - 03d3 1f1c mrr $AX0.L, $AC0.L - 03d4 185e lrr $AC0.M, @$AR2 - 03d5 0240 00ff andi $AC0.M, #0x00ff - 03d7 1f7e mrr $AX1.H, $AC0.M - 03d8 185e lrr $AC0.M, @$AR2 - 03d9 1478 lsr $ACC0, #-8 - 03da 009c 0000 lri $AC0.L, #0x0000 - 03dc d100 cmpar $ACC1, $AX0.H - 03dd 0295 03e5 jz 0x03e5 - 03df 185e lrr $AC0.M, @$AR2 - 03e0 0272 ifg - 03e1 7400 incm $AC0.M - 03e2 0271 ifs - 03e3 7800 decm $AC0.M - 03e4 1a5e srr @$AR2, $AC0.M - 03e5 0006 dar $AR2 - 03e6 00de 038f lr $AC0.M, @0x038f - 03e8 5600 subr $ACC0, $AX1.H - 03e9 029d 03ee jlz 0x03ee - 03eb 1c1e mrr $AR0, $AC0.M - 03ec 02bf 0d99 call 0x0d99 // ??? - 03ee 0000 nop - 03ef 1b5f srri @$AR2, $AC1.M - 03f0 000a iar $AR2 - - 03f1 8e00 set16 - 03f2 8100 clr $ACC0 - 03f3 00de 0407 lr $AC0.M, @0x0407 - 03f5 b100 tst $ACC0 - 03f6 0295 0407 jz 0x0407 - 03f8 00c3 038f lr $AR3, @0x038f - 03fa 0087 004f lri $IX3, #0x004f - 03fc 001f addarn $AR3, $IX3 - 03fd 0080 0477 lri $AR0, #0x0477 - 03ff 0084 ffff lri $IX0, #0xffff - 0401 0087 ffff lri $IX3, #0xffff - 0403 19fa lrrn $AX0.H, @$AR3 - 0404 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 0405 005e loop $AC0.M - 0406 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - - 0407 00da 0406 lr $AX0.H, @0x0406 - 0409 8600 tstaxh $AX0.H - 040a 0294 040f jnz 0x040f // skip zeroing of Mem[0x0404] if Mem[0x0406] is nonzero - 040c 8100 clr $ACC0 - 040d 00fe 0404 sr @0x0404, $AC0.M // Mem[0x0404] = 0x0000; - 040f 02bf 00d5 call 0x00d5 // write back PB - 0411 00de 0354 lr $AC0.M, @0x0354 - 0413 7400 incm $AC0.M // increment some counter - 0414 00fe 0354 sr @0x0354, $AC0.M - // end of inner loop - 0416 0e00 lris $AC0.M, #0x00 - 0417 00fe 034e sr @0x034e, $AC0.M - 0419 0e04 lris $AC0.M, #0x04 - 041a 02bf 079b call 0x079b // SendMail_DCD1(0x0004) - 041c 00de 0355 lr $AC0.M, @0x0355 - 041e 0260 ff00 ori $AC0.M, #0xff00 - 0420 02bf 07a5 call 0x07a5 // SendMail_F355(0xFF00 | Mem[0x0355]) - 0422 02bf 0d1f call 0x0d1f // ??? - 0424 02bf 0d31 call 0x0d31 // ??? - 0426 02bf 0d86 call 0x0d86 // perform mults on buffer #1 - 0428 00de 0341 lr $AC0.M, @0x0341 - 042a 7800 decm $AC0.M // decrement some counter - 042b 00fe 0341 sr @0x0341, $AC0.M - 042d 0080 09a0 lri $AR0, #0x09a0 - 042f 0083 0d00 lri $AR3, #0x0d00 - 0431 0f50 lris $AC1.M, #0x50 - 0432 0098 5a82 lri $AX0.L, #0x5a82 - 0434 02bf 00ff call 0x00ff // operations on right buffer - 0436 0080 09a0 lri $AR0, #0x09a0 - 0438 0083 0d60 lri $AR3, #0x0d60 - 043a 0f50 lris $AC1.M, #0x50 - 043b 02bf 00ff call 0x00ff // operations on left buffer - 043d 0083 0d00 lri $AR3, #0x0d00 - 043f 02bf 0db1 call 0x0db1 // operations on right buffer - 0441 0081 0388 lri $AR1, #0x0388 - 0443 009f 0d00 lri $AC1.M, #0x0d00 - 0445 0080 0050 lri $AR0, #0x0050 - 0447 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0388], 0x0D00, 80); Copy the final right buffer to main memory - 0449 0080 0fa0 lri $AR0, #0x0fa0 - 044b 0083 0d60 lri $AR3, #0x0d60 - 044d 0f50 lris $AC1.M, #0x50 - 044e 0098 8000 lri $AX0.L, #0x8000 - 0450 02bf 00ff call 0x00ff // operations on left buffer (uh? again?) - 0452 0083 0d60 lri $AR3, #0x0d60 - 0454 02bf 0db1 call 0x0db1 // operations on left buffer - 0456 0081 038a lri $AR1, #0x038a - 0458 009f 0d60 lri $AC1.M, #0x0d60 - 045a 0080 0050 lri $AR0, #0x0050 - 045c 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x038A], 0x0D60, 80); Copy the final left buffer to main memory - 045e 009a 0000 lri $AX0.H, #0x0000 - 0460 0098 00a0 lri $AX0.L, #0x00a0 - 0462 0080 0388 lri $AR0, #0x0388 - 0464 02bf 028d call 0x028d // Increment right buffer address - 0466 0080 038a lri $AR0, #0x038a - 0468 02bf 028d call 0x028d // Increment left buffer address - 046a 02bf 023f call 0x023f // call that other mixer - 046c 02bf 04b1 call 0x04b1 - 046e 02bf 0488 call 0x0488 // copy other buffers to main memory - 0470 0000 nop - 0471 0000 nop - // end of outer loop - 0472 0080 002b lri $AR0, #0x002b - 0474 029f 0734 jmp 0x0734 - -// copy the message body to 0x0374 - 0476 0080 0374 lri $AR0, #0x0374 - 0478 0e02 lris $AC0.M, #0x02 - 0479 02bf 0067 call 0x0067 - 047b 00de 0374 lr $AC0.M, @0x0374 - 047d 0240 7fff andi $AC0.M, #0x7fff - 047f 00fe 0374 sr @0x0374, $AC0.M - 0481 00de 0376 lr $AC0.M, @0x0376 - 0483 0240 7fff andi $AC0.M, #0x7fff - 0485 00fe 0376 sr @0x0376, $AC0.M - 0487 02df ret - -// copy other buffers to main memory -// that's probably why the mail body of cmd 0x02 is copied -// to two locations... - 0488 00da 0374 lr $AX0.H, @0x0374 - 048a 8600 tstaxh $AX0.H // Return immediately if right buffer address is zero - 048b 02d5 retz // But what happens if the left buffer address is zero? - 048c 0083 0f40 lri $AR3, #0x0f40 - 048e 02bf 0db1 call 0x0db1 // copy right buffer - 0490 0083 0ca0 lri $AR3, #0x0ca0 - 0492 02bf 0db1 call 0x0db1 // copy left buffer - 0494 0081 0374 lri $AR1, #0x0374 - 0496 009f 0f40 lri $AC1.M, #0x0f40 - 0498 0080 0050 lri $AR0, #0x0050 - 049a 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0374], 0x0F40, 80); Right buffer - 049c 0081 0376 lri $AR1, #0x0376 - 049e 009f 0ca0 lri $AC1.M, #0x0ca0 - 04a0 0080 0050 lri $AR0, #0x0050 - 04a2 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0376], 0x0CA0, 80); Left buffer - 04a4 009a 0000 lri $AX0.H, #0x0000 - 04a6 0098 00a0 lri $AX0.L, #0x00a0 - 04a8 0080 0374 lri $AR0, #0x0374 - 04aa 02bf 028d call 0x028d // Increment right buffer address - 04ac 0080 0376 lri $AR0, #0x0376 - 04ae 02bf 028d call 0x028d // Increment left buffer address - 04b0 02df ret - -// - 04b1 00da 0374 lr $AX0.H, @0x0374 - 04b3 8600 tstaxh $AX0.H - 04b4 02d5 retz - 04b5 009f 0be0 lri $AC1.M, #0x0be0 - 04b7 00ff 03a1 sr @0x03a1, $AC1.M - 04b9 00df 03ca lr $AC1.M, @0x03ca - 04bb 00ff 0392 sr @0x0392, $AC1.M - 04bd 00df 03cb lr $AC1.M, @0x03cb - 04bf 00ff 0393 sr @0x0393, $AC1.M - 04c1 009f 03a6 lri $AC1.M, #0x03a6 - 04c3 00ff 03a0 sr @0x03a0, $AC1.M - 04c5 00df 03c9 lr $AC1.M, @0x03c9 - 04c7 00ff 0391 sr @0x0391, $AC1.M - 04c9 02bf 0225 call 0x0225 - 04cb 009f 0c40 lri $AC1.M, #0x0c40 - 04cd 00ff 03a1 sr @0x03a1, $AC1.M - 04cf 00df 03da lr $AC1.M, @0x03da - 04d1 00ff 0392 sr @0x0392, $AC1.M - 04d3 00df 03db lr $AC1.M, @0x03db - 04d5 00ff 0393 sr @0x0393, $AC1.M - 04d7 009f 03a7 lri $AC1.M, #0x03a7 - 04d9 00ff 03a0 sr @0x03a0, $AC1.M - 04db 00df 03d9 lr $AC1.M, @0x03d9 - 04dd 00ff 0391 sr @0x0391, $AC1.M - 04df 02bf 0225 call 0x0225 - 04e1 02df ret - -// mixer? - 04e2 00da 0374 lr $AX0.H, @0x0374 // Check if right buffer address is zero - 04e4 8600 tstaxh $AX0.H - 04e5 02d5 retz - 04e6 00da 03d8 lr $AX0.H, @0x03d8 // uh? - 04e8 8600 tstaxh $AX0.H - 04e9 02d5 retz - 04ea 0083 0be0 lri $AR3, #0x0be0 - 04ec 0080 0c30 lri $AR0, #0x0c30 - 04ee 0f04 lris $AC1.M, #0x04 - 04ef 02bf 00ec call 0x00ec // memcpy(0x0BE0, 0x0C30, 4); - 04f1 0083 0c40 lri $AR3, #0x0c40 - 04f3 0080 0c90 lri $AR0, #0x0c90 - 04f5 0f04 lris $AC1.M, #0x04 - 04f6 02bf 00ec call 0x00ec // memcpy(0x0C40, 0x0C90, 4); - 04f8 00df 03ca lr $AC1.M, @0x03ca - 04fa 00ff 0392 sr @0x0392, $AC1.M - 04fc 00df 03cb lr $AC1.M, @0x03cb - 04fe 00ff 0393 sr @0x0393, $AC1.M - 0500 00df 03a6 lr $AC1.M, @0x03a6 - 0502 7500 incm $AC1.M - 0503 1f5f mrr $AX0.H, $AC1.M - 0504 009f 0be8 lri $AC1.M, #0x0be8 - 0506 02bf 016c call 0x016c - 0508 00df 03da lr $AC1.M, @0x03da - 050a 00ff 0392 sr @0x0392, $AC1.M - 050c 00df 03db lr $AC1.M, @0x03db - 050e 00ff 0393 sr @0x0393, $AC1.M - 0510 00df 03a7 lr $AC1.M, @0x03a7 - 0512 7500 incm $AC1.M - 0513 1f5f mrr $AX0.H, $AC1.M - 0514 009f 0c48 lri $AC1.M, #0x0c48 - 0516 02bf 016c call 0x016c - 0518 00de 03c8 lr $AC0.M, @0x03c8 - 051a 02a0 0001 andf $AC0.M, #0x0001 - 051c 029d 0525 jlz 0x0525 - 051e 0080 03d0 lri $AR0, #0x03d0 - 0520 0e08 lris $AC0.M, #0x08 - 0521 0081 0be0 lri $AR1, #0x0be0 - 0523 02bf 0c43 call 0x0c43 - 0525 00de 03d8 lr $AC0.M, @0x03d8 - 0527 02a0 0001 andf $AC0.M, #0x0001 - 0529 029d 0532 jlz 0x0532 - 052b 0080 03e0 lri $AR0, #0x03e0 - 052d 0e08 lris $AC0.M, #0x08 - 052e 0081 0c40 lri $AR1, #0x0c40 - 0530 02bf 0c43 call 0x0c43 - 0532 0f50 lris $AC1.M, #0x50 - 0533 0080 0be0 lri $AR0, #0x0be0 - 0535 0083 0f40 lri $AR3, #0x0f40 - 0537 00d8 03cd lr $AX0.L, @0x03cd - 0539 02bf 00ff call 0x00ff - 053b 0f50 lris $AC1.M, #0x50 - 053c 0080 0c40 lri $AR0, #0x0c40 - 053e 0083 0ca0 lri $AR3, #0x0ca0 - 0540 00d8 03df lr $AX0.L, @0x03df - 0542 02bf 00ff call 0x00ff - 0544 00de 03c8 lr $AC0.M, @0x03c8 - 0546 02a0 0002 andf $AC0.M, #0x0002 - 0548 029d 0551 jlz 0x0551 - 054a 0080 03d0 lri $AR0, #0x03d0 - 054c 0e08 lris $AC0.M, #0x08 - 054d 0081 0be0 lri $AR1, #0x0be0 - 054f 02bf 0c43 call 0x0c43 - 0551 00de 03d8 lr $AC0.M, @0x03d8 - 0553 02a0 0002 andf $AC0.M, #0x0002 - 0555 029d 055e jlz 0x055e - 0557 0080 03e0 lri $AR0, #0x03e0 - 0559 0e08 lris $AC0.M, #0x08 - 055a 0081 0c40 lri $AR1, #0x0c40 - 055c 02bf 0c43 call 0x0c43 - 055e 02df ret - -// Opcode_07() - - 055f 0080 0346 lri $AR0, #0x0346 - 0561 02bf 0065 call 0x0065 - 0563 02bf 0065 call 0x0065 - 0565 0081 0346 lri $AR1, #0x0346 - 0567 193e lrri $AC0.M, @$AR1 - 0568 193c lrri $AC0.L, @$AR1 - 0569 009f 0400 lri $AC1.M, #0x0400 - 056b 00c0 0345 lr $AR0, @0x0345 - 056d 02bf 05e8 call 0x05e8 - 056f 0081 0348 lri $AR1, #0x0348 - 0571 193e lrri $AC0.M, @$AR1 - 0572 193c lrri $AC0.L, @$AR1 - 0573 009f 0800 lri $AC1.M, #0x0800 - 0575 00c0 0345 lr $AR0, @0x0345 - 0577 02bf 05e8 call 0x05e8 - 0579 0081 0346 lri $AR1, #0x0346 - 057b 193e lrri $AC0.M, @$AR1 - 057c 193c lrri $AC0.L, @$AR1 - 057d 009f 0800 lri $AC1.M, #0x0800 - 057f 00c0 0345 lr $AR0, @0x0345 - 0581 02bf 05f5 call 0x05f5 - 0583 0081 0348 lri $AR1, #0x0348 - 0585 193e lrri $AC0.M, @$AR1 - 0586 193c lrri $AC0.L, @$AR1 - 0587 009f 0400 lri $AC1.M, #0x0400 - 0589 00c0 0345 lr $AR0, @0x0345 - 058b 02bf 05f5 call 0x05f5 - 058d 029f 0041 jmp 0x0041 - -// Opcode_09() - - 058f 0080 0346 lri $AR0, #0x0346 - 0591 02bf 0065 call 0x0065 - 0593 02bf 0065 call 0x0065 - 0595 0081 0346 lri $AR1, #0x0346 - 0597 193e lrri $AC0.M, @$AR1 - 0598 193c lrri $AC0.L, @$AR1 - 0599 009f 0400 lri $AC1.M, #0x0400 - 059b 00c0 0345 lr $AR0, @0x0345 - 059d 02bf 05e8 call 0x05e8 - 059f 0081 0348 lri $AR1, #0x0348 - 05a1 193e lrri $AC0.M, @$AR1 - 05a2 193c lrri $AC0.L, @$AR1 - 05a3 009f 0400 lri $AC1.M, #0x0400 - 05a5 00c0 0345 lr $AR0, @0x0345 - 05a7 02bf 05f5 call 0x05f5 - 05a9 029f 0041 jmp 0x0041 - -// Opcode_08() - - 05ab 0080 0346 lri $AR0, #0x0346 - 05ad 02bf 0065 call 0x0065 - 05af 02bf 0065 call 0x0065 - 05b1 0081 0346 lri $AR1, #0x0346 - 05b3 193e lrri $AC0.M, @$AR1 - 05b4 193c lrri $AC0.L, @$AR1 - 05b5 009f 0400 lri $AC1.M, #0x0400 - 05b7 00c0 0344 lr $AR0, @0x0344 - 05b9 02bf 05e8 call 0x05e8 - 05bb 0081 0348 lri $AR1, #0x0348 - 05bd 193e lrri $AC0.M, @$AR1 - 05be 193c lrri $AC0.L, @$AR1 - 05bf 009f 0800 lri $AC1.M, #0x0800 - 05c1 00c0 0344 lr $AR0, @0x0344 - 05c3 02bf 05e8 call 0x05e8 - 05c5 0080 0400 lri $AR0, #0x0400 - 05c7 0083 0800 lri $AR3, #0x0800 - 05c9 0084 0000 lri $IX0, #0x0000 - 05cb 00da 0345 lr $AX0.H, @0x0345 - 05cd 00df 0344 lr $AC1.M, @0x0344 - 05cf 8f00 set40 - 05d0 197b lrri $AX1.H, @$AR3 - 05d1 b800 mulx $AX0.H, $AX1.H - 05d2 197b lrri $AX1.H, @$AR3 - 05d3 007f 05d8 bloop $AC1.M, 0x05d8 - 05d5 199e lrrn $AC0.M, @$AR0 - 05d6 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 05d7 80b2 nx'sl : $AC0.M, $AX1.H - 05d8 0000 nop - 05d9 8e00 set16 - 05da 0081 0346 lri $AR1, #0x0346 - 05dc 193e lrri $AC0.M, @$AR1 - 05dd 193c lrri $AC0.L, @$AR1 - 05de 009f 0400 lri $AC1.M, #0x0400 - 05e0 00c0 0344 lr $AR0, @0x0344 - 05e2 02bf 05f5 call 0x05f5 - 05e4 029f 0041 jmp 0x0041 - -// DmaCopy(destination, source, len) -// AR1 = source: pointer to the main memory (32-bit) address -// AC1.M = destination: DSP memory address -// AR0 = len: length in words - 05e6 193e lrri $AC0.M, @$AR1 - 05e7 193c lrri $AC0.L, @$AR1 - 05e8 2fcd srs @DSPA, $AC1.M - 05e9 0f00 lris $AC1.M, #0x00 - 05ea 2fc9 srs @DSCR, $AC1.M - 05eb 2ece srs @DSMAH, $AC0.M - 05ec 2ccf srs @DSMAL, $AC0.L - 05ed 1fe0 mrr $AC1.M, $AR0 - 05ee 1501 lsl $ACC1, #1 - 05ef 2fcb srs @DSBL, $AC1.M - 05f0 02bf 05f9 call 0x05f9 - 05f2 02df ret - -// DmaCopy(destination, source, len) -// AR1 = destination: pointer to the main memory (32-bit) address -// AC1.M = source: DSP memory address -// AR0 = len: length in words - 05f3 193e lrri $AC0.M, @$AR1 - 05f4 193c lrri $AC0.L, @$AR1 - 05f5 2fcd srs @DSPA, $AC1.M - 05f6 0f01 lris $AC1.M, #0x01 - 05f7 029f 05ea jmp 0x05ea - -// wait for dma completion? - 05f9 26c9 lrs $AC0.M, @DSCR - 05fa 02a0 0004 andf $AC0.M, #0x0004 - 05fc 029c 05f9 jlnz 0x05f9 - 05fe 02df ret - -// unused dma routine - 05ff 193e lrri $AC0.M, @$AR1 - 0600 193c lrri $AC0.L, @$AR1 - 0601 00ff ffcd sr @DSPA, $AC1.M - 0603 0f00 lris $AC1.M, #0x00 - 0604 00ff ffc9 sr @DSCR, $AC1.M - 0606 00fe ffce sr @DSMAH, $AC0.M - 0608 00fc ffcf sr @DSMAL, $AC0.L - 060a 1fe0 mrr $AC1.M, $AR0 - 060b 1501 lsl $ACC1, #1 - 060c 00ff ffcb sr @DSBL, $AC1.M - 060e 02df ret - -// - 060f 00de ffc9 lr $AC0.M, @DSCR - 0611 02a0 0004 andf $AC0.M, #0x0004 - 0613 029c 060f jlnz 0x060f - 0615 02df ret - -// Opcode_04() - - 0616 0080 0346 lri $AR0, #0x0346 - 0618 02bf 0065 call 0x0065 - 061a 02bf 0065 call 0x0065 // wtf? - 061c 0081 0346 lri $AR1, #0x0346 - 061e 00df 0349 lr $AC1.M, @0x0349 - 0620 0340 ffff andi $AC1.M, #0xffff - 0622 00c0 0345 lr $AR0, @0x0345 - 0624 02bf 05e6 call 0x05e6 // DmaCopy(0x0349, Dword[0x0346], Mem[0x0345]) - 0626 029f 0041 jmp 0x0041 - -// Opcode_05() - - 0628 0080 0346 lri $AR0, #0x0346 - 062a 02bf 0065 call 0x0065 - 062c 02bf 0065 call 0x0065 // wtf? - 062e 0081 0346 lri $AR1, #0x0346 - 0630 00df 0349 lr $AC1.M, @0x0349 - 0632 0340 ffff andi $AC1.M, #0xffff - 0634 00c0 0345 lr $AR0, @0x0345 - 0636 02bf 05f3 call 0x05f3 - 0638 029f 0041 jmp 0x0041 - -// ReadSoundData(addr) -// AC0.M:AC0.L = main memory address -// read 128 samples of PCM8 sound from main memory to DSP memory at 0x0B00 - 063a 1ffc mrr $AC1.M, $AC0.L - 063b 0340 001f andi $AC1.M, #0x001f - 063d 00ff 037f sr @0x037f, $AC1.M - 063f 1ffc mrr $AC1.M, $AC0.L - 0640 0340 ffe0 andi $AC1.M, #0xffe0 - 0642 1f9f mrr $AC0.L, $AC1.M - 0643 00df 037d lr $AC1.M, @0x037d - 0645 00dd 037e lr $AC1.L, @0x037e - 0647 4c00 add $ACC0, $AC1.L - 0648 00fe ffce sr @DSMAH, $AC0.M - 064a 00fc ffcf sr @DSMAL, $AC0.L - 064c 0f00 lris $AC1.M, #0x00 - 064d 00ff ffc9 sr @DSCR, $AC1.M - 064f 009f 0b20 lri $AC1.M, #0x0b20 - 0651 00ff ffcd sr @DSPA, $AC1.M - 0653 0f40 lris $AC1.M, #0x40 - 0654 00ff ffcb sr @DSBL, $AC1.M - 0656 00de ffc9 lr $AC0.M, @DSCR - 0658 02a0 0004 andf $AC0.M, #0x0004 - 065a 029c 0656 jlnz 0x0656 - 065c 1fe1 mrr $AC1.M, $AR1 - 065d 0081 0b00 lri $AR1, #0x0b00 // Dst = 0x0B00; - 065f 0080 0b20 lri $AR0, #0x0b20 // Src = 0x0B20; - // for(i = 0; i < 32; i++) - 0661 1120 066a bloopi #0x20, 0x066a - 0663 8100 clr $ACC0 - 0664 191e lrri $AC0.M, @$AR0 - 0665 1478 lsr $ACC0, #-8 - 0666 1b3e srri @$AR1, $AC0.M // Dst[i*2] = Src[i] >> 8; - 0667 1408 lsl $ACC0, #8 - 0668 0240 00ff andi $AC0.M, #0x00ff - 066a 1b3e srri @$AR1, $AC0.M // Dst[i*2 + 1] = Src[i] & 0xFF; - - 066b 1c3f mrr $AR1, $AC1.M // Keep AR1 value to 0x0B00 - 066c 029f 092b jmp 0x092b - 066e 02df ret - -// dma? - 066f 1fc3 mrr $AC0.M, $AR3 - 0670 043f addis $ACC0, #0x3f - 0671 0240 fff0 andi $AC0.M, #0xfff0 - 0673 00fe ffcd sr @DSPA, $AC0.M - 0675 1c1a mrr $AR0, $AX0.H - 0676 00da 037f lr $AX0.H, @0x037f - 0678 4400 addr $ACC0, $AX0.H - 0679 1f40 mrr $AX0.H, $AR0 - 067a 1c1e mrr $AR0, $AC0.M - 067b 1fda mrr $AC0.M, $AX0.H - 067c 041f addis $ACC0, #0x1f - 067d 0240 fff0 andi $AC0.M, #0xfff0 - 067f 1401 lsl $ACC0, #1 - 0680 00fe ffcb sr @DSBL, $AC0.M - 0682 00de ffc9 lr $AC0.M, @DSCR - 0684 02a0 0004 andf $AC0.M, #0x0004 - 0686 029c 0682 jlnz 0x0682 - 0688 007a 068b bloop $AX0.H, 0x068b - 068a 191e lrri $AC0.M, @$AR0 - 068b 1b7e srri @$AR3, $AC0.M - 068c 02df ret - -// setup DSMAH, DSMAL and DSCR (RAM -> DSP memory) - 068d 8900 clr $ACC1 - 068e 1ffc mrr $AC1.M, $AC0.L - 068f 0340 001f andi $AC1.M, #0x001f - 0691 00ff 037f sr @0x037f, $AC1.M - 0693 1ffc mrr $AC1.M, $AC0.L - 0694 0340 ffe0 andi $AC1.M, #0xffe0 // addr &= 0xFFFFFFE0; - 0696 1f9f mrr $AC0.L, $AC1.M - 0697 00df 037d lr $AC1.M, @0x037d // 0x1000 - 0699 00dd 037e lr $AC1.L, @0x037e // 0x0800 - 069b 4c00 add $ACC0, $AC1.L // addr += 0x10000800; - 069c 00fe ffce sr @DSMAH, $AC0.M - 069e 00fc ffcf sr @DSMAL, $AC0.L - 06a0 0f00 lris $AC1.M, #0x00 - 06a1 00ff ffc9 sr @DSCR, $AC1.M - 06a3 02df ret - -// setup DSPA and DSBL (and thus complete DMA transfer) -// memory transferred is stored (temporarily) to 0x0780 -// then it's copied to the address specified by AR3 - 06a4 00df 037f lr $AC1.M, @0x037f - 06a6 157f lsr $ACC1, #-1 - 06a7 00ff 037f sr @0x037f, $AC1.M - 06a9 02df ret - 06aa 8600 tstaxh $AX0.H - 06ab 02d5 retz - 06ac 1f1a mrr $AX0.L, $AX0.H - 06ad 009e 0780 lri $AC0.M, #0x0780 - 06af 00fe ffcd sr @DSPA, $AC0.M - 06b1 1fda mrr $AC0.M, $AX0.H - 06b2 043f addis $ACC0, #0x3f - 06b3 0240 ffe0 andi $AC0.M, #0xffe0 - 06b5 00fe ffcb sr @DSBL, $AC0.M - 06b7 00de ffc9 lr $AC0.M, @DSCR - 06b9 02a0 0004 andf $AC0.M, #0x0004 - 06bb 029c 06b7 jlnz 0x06b7 - 06bd 8100 clr $ACC0 - 06be 00de 037f lr $AC0.M, @0x037f - 06c0 147f lsr $ACC0, #-1 - 06c1 0200 0780 addi $AC0.M, #0x0780 - 06c3 1c1e mrr $AR0, $AC0.M - 06c4 00de 037f lr $AC0.M, @0x037f - 06c6 02a0 0001 andf $AC0.M, #0x0001 - 06c8 029d 06d1 jlz 0x06d1 - 06ca 8100 clr $ACC0 - 06cb 191e lrri $AC0.M, @$AR0 - 06cc 1488 asl $ACC0, #8 - 06cd 1b7e srri @$AR3, $AC0.M - 06ce 1fda mrr $AC0.M, $AX0.H - 06cf 7800 decm $AC0.M - 06d0 1f5e mrr $AX0.H, $AC0.M - 06d1 8100 clr $ACC0 - 06d2 1fda mrr $AC0.M, $AX0.H - 06d3 147f lsr $ACC0, #-1 - - 06d4 007e 06dd bloop $AC0.M, 0x06dd - 06d6 8100 clr $ACC0 - 06d7 181e lrr $AC0.M, @$AR0 - 06d8 0240 ff00 andi $AC0.M, #0xff00 - 06da 1b7e srri @$AR3, $AC0.M - 06db 191e lrri $AC0.M, @$AR0 - 06dc 1488 asl $ACC0, #8 - 06dd 1b7e srri @$AR3, $AC0.M - - 06de 1fda mrr $AC0.M, $AX0.H - 06df 1f58 mrr $AX0.H, $AX0.L - 06e0 02a0 0001 andf $AC0.M, #0x0001 - 06e2 02dd retlz - 06e3 8100 clr $ACC0 - 06e4 181e lrr $AC0.M, @$AR0 - 06e5 0240 ff00 andi $AC0.M, #0xff00 - 06e7 1b7e srri @$AR3, $AC0.M - 06e8 02df ret - -// Exception_0E() - 06e9 1205 sbclr #0x05 - 06ea 8e00 set16 - 06eb 00f0 03fd sr @0x03fd, $AC0.H - 06ed 00fc 03ff sr @0x03ff, $AC0.L - 06ef f400 lsr16 $ACC0 - 06f0 00fc 03fe sr @0x03fe, $AC0.L - 06f2 00fa 03fa sr @0x03fa, $AX0.H - 06f4 8100 clr $ACC0 - 06f5 00de fffe lr $AC0.M, @CMBH // check for new mail - 06f7 02c0 8000 andcf $AC0.M, #0x8000 - 06f9 029c 07ea jlnz 0x07ea // If we received no mail - 06fb 00da ffff lr $AX0.H, @CMBL - 06fd 8600 tstaxh $AX0.H - 06fe 0294 07c3 jnz 0x07c3 // If we received a mail beginning a list, WaitForNextMails() - - 0700 00de fffe lr $AC0.M, @CMBH // if we received an empty mail, wait for the next mail - 0702 02c0 8000 andcf $AC0.M, #0x8000 - 0704 029c 0700 jlnz 0x0700 - 0706 0240 000f andi $AC0.M, #0x000f // get the number in the high part of the mail - 0708 1f5e mrr $AX0.H, $AC0.M - 0709 7400 incm $AC0.M // number++; - 070a 0c00 lris $AC0.L, #0x00 - 070b 1404 lsl $ACC0, #4 // number <<= 4; - 070c 00fe 034e sr @0x034e, $AC0.M - 070e 1fda mrr $AC0.M, $AX0.H - 070f 1f40 mrr $AX0.H, $AR0 - 0710 0200 04fc addi $AC0.M, #0x04fc - 0712 1c1e mrr $AR0, $AC0.M - 0713 00de ffff lr $AC0.M, @CMBL - 0715 1a1e srr @$AR0, $AC0.M - 0716 1c1a mrr $AR0, $AX0.H - - 0717 00de 03fe lr $AC0.M, @0x03fe - 0719 00dc 03ff lr $AC0.L, @0x03ff - 071b 00d0 03fd lr $AC0.H, @0x03fd - 071d 00da 03fa lr $AX0.H, @0x03fa - 071f 1305 sbset #0x05 - 0720 02ff rti - -// DoYield() - 0721 009a 0002 lri $AX0.H, #0x0002 - 0723 00fa 03a3 sr @0x03a3, $AX0.H - 0725 00e0 03f9 sr @0x03f9, $AR0 - 0727 02bf 07ad call 0x07ad - 0729 16fc dcd1 si @DMBH, #0xdcd1 - 072b 16fd 0002 si @DMBL, #0x0002 - 072d 16fb 0001 si @DIRQ, #0x0001 - 072f 0021 halt - -// Function jump table - 0730 0748 cmpis $ACC1, #0x48 // Function 0: halt - 0731 0749 cmpis $ACC1, #0x49 // Function 1: dump memory? and halt - 0732 0789 cmpis $ACC1, #0x89 // Function 2: jump to 0x8000 and halt - 0733 078c cmpis $ACC1, #0x8c // Function 3: return to MessageLoop() - -// Execute function according to mail received (0xCDD1000X) -// Warning: any function number above 3 will likely crash -// as no range check is performed. -// AR0 = 0x002B - 0734 00e0 03f9 sr @0x03f9, $AR0 - 0736 009e 0005 lri $AC0.M, #0x0005 - 0738 02bf 079b call 0x079b // SendMail_DCD1(0x0005) - 073a 8e00 set16 - 073b 8100 clr $ACC0 - 073c 8900 clr $ACC1 - 073d 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 073f 27ff lrs $AC1.M, @CMBL - 0740 009e 0730 lri $AC0.M, #0x0730 - 0742 4c00 add $ACC0, $AC1.L - 0743 1c7e mrr $AR3, $AC0.M - 0744 0313 ilrr $AC1.M, @$AR3 - 0745 1c7f mrr $AR3, $AC1.M - 0746 176f jmpr $AR3 - 0747 0021 halt -// Function 0 - 0748 0021 halt -// Function 1 - 0749 009a 0002 lri $AX0.H, #0x0002 - 074b 00fa 03a3 sr @0x03a3, $AX0.H - 074d 8100 clr $ACC0 - 074e 8900 clr $ACC1 - 074f 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 0751 24ff lrs $AC0.L, @CMBL - 0752 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() - 0754 25ff lrs $AC1.L, @CMBL - 0755 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() - 0757 27ff lrs $AC1.M, @CMBL - 0758 2ece srs @DSMAH, $AC0.M - 0759 2ccf srs @DSMAL, $AC0.L - 075a 16c9 0001 si @DSCR, #0x0001 - 075c 2fcd srs @DSPA, $AC1.M - 075d 2dcb srs @DSBL, $AC1.L - 075e 8100 clr $ACC0 - 075f 8900 clr $ACC1 - 0760 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 0762 24ff lrs $AC0.L, @CMBL - 0763 1c9e mrr $IX0, $AC0.M - 0764 1cbc mrr $IX1, $AC0.L - 0765 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() - 0767 25ff lrs $AC1.L, @CMBL - 0768 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() - 076a 27ff lrs $AC1.M, @CMBL - 076b 1cdf mrr $IX2, $AC1.M - 076c 1cfd mrr $IX3, $AC1.L - 076d 8100 clr $ACC0 - 076e 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 0770 26ff lrs $AC0.M, @CMBL - 0771 1c1e mrr $AR0, $AC0.M - 0772 8900 clr $ACC1 - 0773 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() - 0775 20ff lrs $AX0.L, @CMBL - 0776 1f5f mrr $AX0.H, $AC1.M - 0777 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 0779 21ff lrs $AX1.L, @CMBL - 077a 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() - 077c 23ff lrs $AX1.H, @CMBL - 077d 26c9 lrs $AC0.M, @DSCR - 077e 02a0 0004 andf $AC0.M, #0x0004 - 0780 029c 077d jlnz 0x077d - 0782 1206 sbclr #0x06 - 0783 1203 sbclr #0x03 - 0784 1204 sbclr #0x04 - 0785 1205 sbclr #0x05 - 0786 029f 80b5 jmp 0x80b5 - 0788 0021 halt -// Function 2 - 0789 029f 8000 jmp 0x8000 - 078b 0021 halt -// Function 3 - 078c 00c0 03f9 lr $AR0, @0x03f9 - 078e 170f jmpr $AR0 - -// WaitUntilCPUMailboxIsFull_AC0() - 078f 26fe lrs $AC0.M, @CMBH - 0790 02c0 8000 andcf $AC0.M, #0x8000 - 0792 029c 078f jlnz 0x078f - 0794 02df ret - -// WaitUntilCPUMailboxIsFull_AC1() - 0795 27fe lrs $AC1.M, @CMBH - 0796 03c0 8000 andcf $AC1.M, #0x8000 - 0798 029c 0795 jlnz 0x0795 - 079a 02df ret - -// SendMail_DCD1() // seems to additionally trigger an IRQ - 079b 02bf 07b3 call 0x07b3 - 079d 16fc dcd1 si @DMBH, #0xdcd1 - 079f 2efd srs @DMBL, $AC0.M - 07a0 16fb 0001 si @DIRQ, #0x0001 - 07a2 02bf 07b3 call 0x07b3 - 07a4 02df ret - -// SendMail_F355() - 07a5 02bf 07b3 call 0x07b3 - 07a7 16fc f355 si @DMBH, #0xf355 - 07a9 2efd srs @DMBL, $AC0.M - 07aa 02bf 07b3 call 0x07b3 - 07ac 02df ret - -// WaitUntilMailboxIsReady_AC0() - 07ad 26fc lrs $AC0.M, @DMBH - 07ae 02c0 8000 andcf $AC0.M, #0x8000 - 07b0 029d 07ad jlz 0x07ad - 07b2 02df ret - -// WaitUntilMailboxIsReady_AC1() - 07b3 27fc lrs $AC1.M, @DMBH - 07b4 03c0 8000 andcf $AC1.M, #0x8000 - 07b6 029d 07b3 jlz 0x07b3 - 07b8 02df ret - -// InitGlobalVars() - 07b9 009a 0280 lri $AX0.H, #0x0280 - 07bb 00fa 0350 sr @0x0350, $AX0.H - 07bd 00fa 0351 sr @0x0351, $AX0.H - 07bf 0a00 lris $AX0.H, #0x00 - 07c0 00fa 0352 sr @0x0352, $AX0.H - 07c2 02df ret - -// WaitForNextMails() -// AX0.H: low part of current mail (num of mails to wait for) - 07c3 00e0 03fb sr @0x03fb, $AR0 - 07c5 00e8 03fc sr @0x03fc, $WR0 - 07c7 00c0 0350 lr $AR0, @0x0350 - 07c9 0088 002f lri $WR0, #0x002f - 07cb 1b1a srri @$AR0, $AX0.H - 07cc 00de fffe lr $AC0.M, @CMBH - 07ce 02c0 8000 andcf $AC0.M, #0x8000 - 07d0 029c 07cc jlnz 0x07cc - 07d2 00dc ffff lr $AC0.L, @CMBL - 07d4 1b1e srri @$AR0, $AC0.M - 07d5 1b1c srri @$AR0, $AC0.L - 07d6 1fda mrr $AC0.M, $AX0.H - 07d7 7800 decm $AC0.M - 07d8 1f5e mrr $AX0.H, $AC0.M - 07d9 8600 tstaxh $AX0.H - 07da 0294 07cc jnz 0x07cc - - 07dc 8100 clr $ACC0 - 07dd 00de 0352 lr $AC0.M, @0x0352 - 07df 7400 incm $AC0.M - 07e0 00fe 0352 sr @0x0352, $AC0.M - 07e2 00e0 0350 sr @0x0350, $AR0 - 07e4 00c0 03fb lr $AR0, @0x03fb - 07e6 00c8 03fc lr $WR0, @0x03fc - 07e8 029f 0717 jmp 0x0717 - - // noMail() - 07ea 00e0 03fb sr @0x03fb, $AR0 - 07ec 00e8 03fc sr @0x03fc, $WR0 - 07ee 00c0 0350 lr $AR0, @0x0350 - 07f0 0088 002f lri $WR0, #0x002f - 07f2 0a00 lris $AX0.H, #0x00 - 07f3 1b1a srri @$AR0, $AX0.H - 07f4 029f 07dc jmp 0x07dc - -// MessageLoop() - 07f6 00c0 0351 lr $AR0, @0x0351 - 07f8 0088 002f lri $WR0, #0x002f - 07fa 00da 0352 lr $AX0.H, @0x0352 - 07fc 8600 tstaxh $AX0.H - 07fd 0295 081e jz 0x081e // jump back to MessageLoop - 07ff 1205 sbclr #0x05 - 0800 00da 0352 lr $AX0.H, @0x0352 - 0802 1fda mrr $AC0.M, $AX0.H - 0803 7800 decm $AC0.M - 0804 00fe 0352 sr @0x0352, $AC0.M - 0806 1305 sbset #0x05 - 0807 0081 0356 lri $AR1, #0x0356 - 0809 191e lrri $AC0.M, @$AR0 - 080a 02c0 8000 andcf $AC0.M, #0x8000 - 080c 029d 0822 jlz 0x0822 // ??? - 080e 1f5e mrr $AX0.H, $AC0.M - 080f 8600 tstaxh $AX0.H - 0810 0295 0826 jz 0x0826 // Yield() - 0812 007a 0817 bloop $AX0.H, 0x0817 - 0814 191e lrri $AC0.M, @$AR0 - 0815 1b3e srri @$AR1, $AC0.M - 0816 191e lrri $AC0.M, @$AR0 - 0817 1b3e srri @$AR1, $AC0.M - 0818 00e0 0351 sr @0x0351, $AR0 - 081a 0088 ffff lri $WR0, #0xffff - 081c 029f 002d jmp 0x002d // jump to OpcodeHandler() - 081e 0088 ffff lri $WR0, #0xffff - 0820 029f 002b jmp 0x002b // jump back to MessageLoop() - -// - 0822 00e0 0351 sr @0x0351, $AR0 - 0824 029f 07fa jmp 0x07fa - -// Yield() - 0826 0080 07f6 lri $AR0, #0x07f6 - 0828 029f 0721 jmp 0x0721 // DoYield() (halts) - -// interesting - writes value(s) to output - 082a 8100 clr $ACC0 - 082b 0e10 lris $AC0.M, #0x10 - 082c 2232 lrs $AX0.H, @0x0032 - 082d 8600 tstaxh $AX0.H - 082e 02d5 retz - 082f 5400 subr $ACC0, $AX0.H - 0830 0200 0458 addi $AC0.M, #0x0458 // source addr = (0x10 - Mem[0x0032]) + 0x0458 - 0832 1c1e mrr $AR0, $AC0.M - 0833 1fda mrr $AC0.M, $AX0.H - 0834 04fe addis $ACC0, #0xfe - 0835 1f1e mrr $AX0.L, $AC0.M // AX0.L = Mem[0x0032] - 2; - 0836 191e lrri $AC0.M, @$AR0 - 0837 0291 083d js 0x083d - 0839 191a lrri $AX0.H, @$AR0 - - 083a 0058 loop $AX0.L - 083b 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - - 083c 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 083d 1b7e srri @$AR3, $AC0.M // store value to output - 083e 02df ret - -// - 083f 02bf 082a call 0x082a - 0841 8100 clr $ACC0 - 0842 2632 lrs $AC0.M, @0x0032 - 0843 5c00 sub $ACC0, $AC1.L - 0844 2e32 srs @0x0032, $AC0.M - 0845 0092 00ff lri $CR, #0x00ff - 0847 02df ret - -// increment one value, then zero out other values - 0848 00de 04fb lr $AC0.M, @0x04fb - 084a 7400 incm $AC0.M - 084b 00fe 04fb sr @0x04fb, $AC0.M - 084d 8100 clr $ACC0 - 084e 2e32 srs @0x0032, $AC0.M - 084f 2e66 srs @0x0066, $AC0.M - 0850 2e67 srs @0x0067, $AC0.M - 0851 268a lrs $AC0.M, @0xff8a - 0852 248b lrs $AC0.L, @0xff8b - 0853 2e3a srs @0x003a, $AC0.M - 0854 2c3b srs @0x003b, $AC0.L - 0855 268c lrs $AC0.M, @0xff8c - 0856 248d lrs $AC0.L, @0xff8d - 0857 2e38 srs @0x0038, $AC0.M - 0858 2c39 srs @0x0039, $AC0.L - 0859 02df ret - -// - 085a 8100 clr $ACC0 - 085b 2689 lrs $AC0.M, @0xff89 - 085c 0240 000f andi $AC0.M, #0x000f - 085e 1f5e mrr $AX0.H, $AC0.M - 085f 8100 clr $ACC0 - 0860 0e10 lris $AC0.M, #0x10 - 0861 5400 subr $ACC0, $AX0.H - 0862 2e32 srs @0x0032, $AC0.M - 0863 268a lrs $AC0.M, @0xff8a - 0864 248b lrs $AC0.L, @0xff8b - 0865 2288 lrs $AX0.H, @0xff88 - 0866 2089 lrs $AX0.L, @0xff89 - 0867 5800 subax $ACC0, $AX0.L - 0868 0a00 lris $AX0.H, #0x00 - 0869 2032 lrs $AX0.L, @0x0032 - 086a 5800 subax $ACC0, $AX0.L - 086b 2e3a srs @0x003a, $AC0.M - 086c 2c3b srs @0x003b, $AC0.L - 086d 02df ret - -// mixer for sound types 5 and 9 -// AR3 = 0x0580 (out address) -// AC1.M = 0x0043, AC1.L = 0x0000 - 086e 0092 0004 lri $CR, #0x0004 - 0870 8100 clr $ACC0 - 0871 2604 lrs $AC0.M, @0x0004 - 0872 b100 tst $ACC0 - 0873 02b4 0848 callne 0x0848 // nothing much interesting - 0875 8100 clr $ACC0 - 0876 2601 lrs $AC0.M, @0x0001 - 0877 b100 tst $ACC0 - 0878 0294 0916 jnz 0x0916 // end - 087a 2232 lrs $AX0.H, @0x0032 - 087b c900 cmpar $ACC0, $AX1.H - 087c 0293 083f jle 0x083f // direct return (calls 0x082A though) - 087e 5500 subr $ACC1, $AX0.H - 087f 02bf 082a call 0x082a // interesting: stores value(s) to Mem[AR3] (output) - 0881 223a lrs $AX0.H, @0x003a - 0882 8600 tstaxh $AX0.H - 0883 0294 088a jnz 0x088a - 0885 8100 clr $ACC0 - 0886 263b lrs $AC0.M, @0x003b - 0887 8200 cmp - 0888 0291 08dc js 0x08dc - 088a 8100 clr $ACC0 - 088b 1fdf mrr $AC0.M, $AC1.M - 088c 040f addis $ACC0, #0x0f - 088d 147c lsr $ACC0, #-4 - 088e 1f7e mrr $AX1.H, $AC0.M - 088f 0c00 lris $AC0.L, #0x00 - 0890 1404 lsl $ACC0, #4 - 0891 1f1e mrr $AX0.L, $AC0.M - 0892 0a00 lris $AX0.H, #0x00 - 0893 8100 clr $ACC0 - 0894 263a lrs $AC0.M, @0x003a - 0895 243b lrs $AC0.L, @0x003b - 0896 5800 subax $ACC0, $AX0.L - 0897 0290 08a2 jns 0x08a2 - 0899 8100 clr $ACC0 - 089a 263b lrs $AC0.M, @0x003b - 089b 5c00 sub $ACC0, $AC1.L - 089c 2e32 srs @0x0032, $AC0.M - 089d 8100 clr $ACC0 - 089e 2e3a srs @0x003a, $AC0.M - 089f 2e3b srs @0x003b, $AC0.M - 08a0 029f 08a8 jmp 0x08a8 - 08a2 2e3a srs @0x003a, $AC0.M - 08a3 2c3b srs @0x003b, $AC0.L - 08a4 0c00 lris $AC0.L, #0x00 - 08a5 1fd8 mrr $AC0.M, $AX0.L - 08a6 5c00 sub $ACC0, $AC1.L - 08a7 2e32 srs @0x0032, $AC0.M - 08a8 8100 clr $ACC0 - 08a9 1fdb mrr $AC0.M, $AX1.H - 08aa 02bf 091c call 0x091c // afc decoder - 08ac 2232 lrs $AX0.H, @0x0032 - 08ad 8600 tstaxh $AX0.H - 08ae 0295 08d9 jz 0x08d9 // end - 08b0 0a10 lris $AX0.H, #0x10 - 08b1 8100 clr $ACC0 - 08b2 1fc3 mrr $AC0.M, $AR3 - 08b3 5400 subr $ACC0, $AX0.H - 08b4 1c7e mrr $AR3, $AC0.M - 08b5 0080 0458 lri $AR0, #0x0458 - 08b7 197e lrri $AC0.M, @$AR3 - 08b8 197a lrri $AX0.H, @$AR3 - - 08b9 100e loopi #0x0e - 08ba 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H - - 08bb 1b1e srri @$AR0, $AC0.M - 08bc 1b1a srri @$AR0, $AX0.H - 08bd 8100 clr $ACC0 - 08be 263a lrs $AC0.M, @0x003a - 08bf 243b lrs $AC0.L, @0x003b - 08c0 b100 tst $ACC0 - 08c1 0294 08d9 jnz 0x08d9 // end - 08c3 2232 lrs $AX0.H, @0x0032 - 08c4 8600 tstaxh $AX0.H - 08c5 0295 08d9 jz 0x08d9 // end - 08c7 0080 0467 lri $AR0, #0x0467 - 08c9 8100 clr $ACC0 - 08ca 268b lrs $AC0.M, @0xff8b - 08cb b100 tst $ACC0 - 08cc 0295 08d9 jz 0x08d9 // end - 08ce 0200 000f addi $AC0.M, #0x000f - 08d0 0240 000f andi $AC0.M, #0x000f - 08d2 0200 0458 addi $AC0.M, #0x0458 - 08d4 1c7e mrr $AR3, $AC0.M - - 08d5 007a 08d8 bloop $AX0.H, 0x08d8 - 08d7 18fe lrrd $AC0.M, @$AR3 - 08d8 1a9e srrd @$AR0, $AC0.M - - 08d9 0092 00ff lri $CR, #0x00ff - 08db 02df ret - -// - 08dc b100 tst $ACC0 - 08dd 0295 08ec jz 0x08ec - 08df 5d00 sub $ACC1, $AC0.L - 08e0 040f addis $ACC0, #0x0f - 08e1 147c lsr $ACC0, #-4 - 08e2 0c00 lris $AC0.L, #0x00 - 08e3 00e3 0363 sr @0x0363, $AR3 - 08e5 02bf 091c call 0x091c - 08e7 00de 0363 lr $AC0.M, @0x0363 - 08e9 223b lrs $AX0.H, @0x003b - 08ea 4400 addr $ACC0, $AX0.H - 08eb 1c7e mrr $AR3, $AC0.M - 08ec 8100 clr $ACC0 - 08ed 2681 lrs $AC0.M, @0xff81 - 08ee b100 tst $ACC0 - 08ef 0295 0914 jz 0x0914 - 08f1 2380 lrs $AX1.H, @0xff80 - 08f2 2688 lrs $AC0.M, @0xff88 - 08f3 2489 lrs $AC0.L, @0xff89 - 08f4 1408 lsl $ACC0, #8 - 08f5 14f4 asr $ACC0, #-12 - 08f6 2380 lrs $AX1.H, @0xff80 - 08f7 8d00 set15 - 08f8 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - 08f9 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 08fa 8c00 clr15 - 08fb f000 lsl16 $ACC0 - 08fc 4e00 addp $ACC0 - 08fd 238c lrs $AX1.H, @0xff8c - 08fe 218d lrs $AX1.L, @0xff8d - 08ff 4a00 addax $ACC0, $AX1.L - 0900 2e38 srs @0x0038, $AC0.M - 0901 2c39 srs @0x0039, $AC0.L - 0902 2682 lrs $AC0.M, @0xff82 - 0903 2e67 srs @0x0067, $AC0.M - 0904 2683 lrs $AC0.M, @0xff83 - 0905 2e66 srs @0x0066, $AC0.M - 0906 00e3 0363 sr @0x0363, $AR3 - 0908 0083 0458 lri $AR3, #0x0458 - 090a 8100 clr $ACC0 - 090b 0e01 lris $AC0.M, #0x01 - 090c 02bf 091c call 0x091c - 090e 00c3 0363 lr $AR3, @0x0363 - 0910 02bf 085a call 0x085a - 0912 029f 087a jmp 0x087a - 0914 0e01 lris $AC0.M, #0x01 - 0915 2e01 srs @0x0001, $AC0.M - 0916 8100 clr $ACC0 - 0917 005f loop $AC1.M - 0918 1b7e srri @$AR3, $AC0.M - 0919 0092 00ff lri $CR, #0x00ff - 091b 02df ret - -// afc decoder (for sound formats 5 and 9) -// AC0.M = num of blocks to do? (0x4) -// AC1.M = - 091c 00ff 0360 sr @0x0360, $AC1.M - 091e 00fe 0361 sr @0x0361, $AC0.M - 0920 8100 clr $ACC0 - 0921 00de 0361 lr $AC0.M, @0x0361 - - 0923 007e 099c bloop $AC0.M, 0x099c - 0925 2638 lrs $AC0.M, @0x0038 - 0926 2439 lrs $AC0.L, @0x0039 - 0927 0092 00ff lri $CR, #0x00ff - 0929 029f 063a jmp 0x063a // ReadSoundData(Dword[0x0038]) - 092b 0092 0004 lri $CR, #0x0004 - 092d 2638 lrs $AC0.M, @0x0038 - 092e 2439 lrs $AC0.L, @0x0039 - 092f 8900 clr $ACC1 - 0930 2580 lrs $AC1.L, @0xff80 - 0931 4c00 add $ACC0, $AC1.L - 0932 2e38 srs @0x0038, $AC0.M - 0933 2c39 srs @0x0039, $AC0.L - 0934 00de 037f lr $AC0.M, @0x037f - 0936 0200 0b00 addi $AC0.M, #0x0b00 // buffer where read sound data is stored (128 bytes) - 0938 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x0B00 + Mem[0x037F]; (Mem[0x037F] seems to be the offset in buffer to the actual block...) - 0939 0084 0001 lri $IX0, #0x0001 // IX0 = 0x0001; - 093b 199e lrrn $AC0.M, @$AR0 // AC0.M = Mem[AR0]; AR0++; read first byte in buffer - 093c 8900 clr $ACC1 - 093d 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M = first_byte; - 093e 1401 lsl $ACC0, #1 - 093f 0240 001e andi $AC0.M, #0x001e - 0941 0200 0300 addi $AC0.M, #0x0300 - 0943 1c3e mrr $AR1, $AC0.M // AR1 = ((first_byte << 1) & 0x1E) + 0x0300; - 0944 157c lsr $ACC1, #-4 - 0945 0340 000f andi $AC1.M, #0x000f - 0947 0a11 lris $AX0.H, #0x11 - 0948 5500 subr $ACC1, $AX0.H // AC1.M = ((first_byte >> 4) & 0xF) - 0x11; - 0949 8100 clr $ACC0 - 094a 2680 lrs $AC0.M, @0xff80 - 094b 0605 cmpis $ACC0, #0x05 - 094c 0295 0965 jz 0x0965 // skip loop below (execute another loop) for sound format 5 - - 094e 009a 00f0 lri $AX0.H, #0x00f0 // these masks... for adpcm sound surely - 0950 0b0f lris $AX1.H, #0x0f - 0951 0082 0364 lri $AR2, #0x0364 // AR2 = 0x0364; - 0953 1998 lrrn $AX0.L, @$AR0 // AX0.L = Mem[AR0]; AR0++; - 0954 6000 movr $ACC0, $AX0.L // AC0.HM = AX0; AC0.L = 0x0000; - // loop for sound format 9 (looks like adpcm) - // decompose sound data into nibbles and store it to 0x0364 (again a temp buffer!) - // for(i = 0; i < 7; i++) - 0955 1107 095c bloopi #0x07, 0x095c - 0957 3400 andr $AC0.M, $AX0.H // AC0.M &= 0x00F0; - 0958 1408 lsl $ACC0, #8 // ACC0 <<= 8; - 0959 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++; - 095a 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 // AC0.M &= 0x000F; AX0.L = Mem[AR0]; AR0++; - 095b 140c lsl $ACC0, #12 // ACC0 <<= 12; - 095c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++; - - 095d 3400 andr $AC0.M, $AX0.H - 095e 1408 lsl $ACC0, #8 - 095f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0960 3600 andr $AC0.M, $AX1.H - 0961 140c lsl $ACC0, #12 - 0962 1b5e srri @$AR2, $AC0.M - 0963 029f 0985 jmp 0x0985 - // below for sound format 5 only - 0965 009a c000 lri $AX0.H, #0xc000 - 0967 0082 0364 lri $AR2, #0x0364 - 0969 1998 lrrn $AX0.L, @$AR0 - 096a 6000 movr $ACC0, $AX0.L - // loop for sound format 5 - 096b 1103 0978 bloopi #0x03, 0x0978 - 096d 1408 lsl $ACC0, #8 - 096e 3400 andr $AC0.M, $AX0.H - 096f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0970 140a lsl $ACC0, #10 - 0971 3400 andr $AC0.M, $AX0.H - 0972 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0973 140c lsl $ACC0, #12 - 0974 3400 andr $AC0.M, $AX0.H - 0975 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0976 140e lsl $ACC0, #14 - 0977 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 - 0978 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - - 0979 1408 lsl $ACC0, #8 - 097a 3400 andr $AC0.M, $AX0.H - 097b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 097c 140a lsl $ACC0, #10 - 097d 3400 andr $AC0.M, $AX0.H - 097e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 097f 140c lsl $ACC0, #12 - 0980 3400 andr $AC0.M, $AX0.H - 0981 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0982 140e lsl $ACC0, #14 - 0983 3400 andr $AC0.M, $AX0.H - 0984 1b5e srri @$AR2, $AC0.M - - 0985 8f00 set40 - 0986 1f7f mrr $AX1.H, $AC1.M // AX1.H = AC1.M = ((first_byte >> 4) & 0xF) - 0x11; - 0987 2066 lrs $AX0.L, @0x0066 // AX0.L = Mem[0x0066]; - 0988 2767 lrs $AC1.M, @0x0067 // AC1.M = Mem[0x0067]; - 0989 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++; load coefs from 0x0300+ - 098a 1939 lrri $AX1.L, @$AR1 // AX1.L = Mem[AR1]; AR1++; - 098b 0080 0364 lri $AR0, #0x0364 // AR0 = 0x0364; - 098d a000 mulx $AX0.L, $AX1.L // prod = AX0.L * AX1.L; - 098e ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 // prod += AC1.M * AX1.L; AC0.M = Mem[AR0]; AR0++; - - 098f 1108 0998 bloopi #0x08, 0x0998 - 0991 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L // AC0.M |= AX1.H; Mem[AR3] = AC1.M; AR3++; AX1.L = Mem[AR0]; AR0++; - 0992 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 // ACC0 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++; - 0993 1485 asl $ACC0, #5 // ACC0 <<= 5; - 0994 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M // prod += AC0.M * AX1.L; Mem[AR3] = AC0.M; AR3++; - 0995 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L // AC1.M |= AX1.H; Mem[AR3] = AC0.M; AR3++; AX1.L = Mem[AR0]; AR0++; - 0996 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 // ACC1 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++; - 0997 1585 asl $ACC1, #5 // ACC1 <<= 5; - 0998 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M // prod += AC1.M * AX1.L; Mem[AR3] = AC1.M; AR3++; - - 0999 2f67 srs @0x0067, $AC1.M - 099a 8e00 set16 - 099b 1ff8 mrr $AC1.M, $AX0.L - 099c 2f66 srs @0x0066, $AC1.M - // end of outer loop - 099d 8900 clr $ACC1 - 099e 00df 0360 lr $AC1.M, @0x0360 - 09a0 02df ret - -// - 09a1 b100 tst $ACC0 - 09a2 02d5 retz - 09a3 04fe addis $ACC0, #0xfe - 09a4 1f1e mrr $AX0.L, $AC0.M - 09a5 191e lrri $AC0.M, @$AR0 - 09a6 0291 09ac js 0x09ac - 09a8 191a lrri $AX0.H, @$AR0 - 09a9 0058 loop $AX0.L - 09aa 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 09ab 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 09ac 1b7e srri @$AR3, $AC0.M - 09ad 02df ret - -// decode audio? - 09ae 8100 clr $ACC0 - 09af 1f5e mrr $AX0.H, $AC0.M - 09b0 00d8 0402 lr $AX0.L, @0x0402 - 09b2 00dc 0430 lr $AC0.L, @0x0430 - 09b4 0080 0520 lri $AR0, #0x0520 - 09b6 00df 0480 lr $AC1.M, @0x0480 // sound format??? - 09b8 1501 lsl $ACC1, #1 - 09b9 0340 007e andi $AC1.M, #0x007e - 09bb 0300 09c3 addi $AC1.M, #0x09c3 - 09bd 1c5f mrr $AR2, $AC1.M - 09be 175f callr $AR2 // jump to one of the functions - 09bf 00fc 0430 sr @0x0430, $AC0.L - 09c1 029f 0336 jmp 0x0336 // return to SyncFrame func - // jump table - 09c3 029f 09e4 jmp 0x09e4 // 0x0: - 09c5 029f 0a1f jmp 0x0a1f // 0x1: - 09c7 029f 0a07 jmp 0x0a07 // 0x2: - 09c9 029f 09f4 jmp 0x09f4 // 0x3: - 09cb 029f 0a2d jmp 0x0a2d // 0x4: - 09cd 029f 09e3 jmp 0x09e3 // 0x5: dummy - 09cf 029f 0a4b jmp 0x0a4b // 0x6: - 09d1 029f 0a4e jmp 0x0a4e // 0x7: - 09d3 029f 09e3 jmp 0x09e3 // 0x8: dummy - 09d5 029f 09e3 jmp 0x09e3 // 0x9: dummy - 09d7 029f 0a6c jmp 0x0a6c // 0xA: - 09d9 029f 0a25 jmp 0x0a25 // 0xB: - 09db 029f 0a29 jmp 0x0a29 // 0xC: - 09dd 029f 09e3 jmp 0x09e3 // 0xD: dummy - 09df 029f 09e3 jmp 0x09e3 // 0xE: dummy - 09e1 029f 09e3 jmp 0x09e3 // 0xF: dummy - 09e3 02df ret // direct return for dummy funcs - -// Func_00() - 09e4 1401 lsl $ACC0, #1 - 09e5 009b c000 lri $AX1.H, #0xc000 - 09e7 0099 4000 lri $AX1.L, #0x4000 - 09e9 1150 09f1 bloopi #0x50, 0x09f1 - 09eb 02c0 0001 andcf $AC0.M, #0x0001 - 09ed 027c iflnz - 09ee 1b1b srri @$AR0, $AX1.H - 09ef 027d iflz - 09f0 1b19 srri @$AR0, $AX1.L - 09f1 4800 addax $ACC0, $AX0.L - 09f2 147f lsr $ACC0, #-1 - 09f3 02df ret - 09f4 1402 lsl $ACC0, #2 - 09f5 8900 clr $ACC1 - 09f6 1fb8 mrr $AC1.L, $AX0.L - 09f7 1501 lsl $ACC1, #1 - 09f8 009b c000 lri $AX1.H, #0xc000 - 09fa 0099 4000 lri $AX1.L, #0x4000 - 09fc 1150 0a04 bloopi #0x50, 0x0a04 - 09fe 02c0 0003 andcf $AC0.M, #0x0003 - 0a00 027c iflnz - 0a01 1b1b srri @$AR0, $AX1.H - 0a02 027d iflz - 0a03 1b19 srri @$AR0, $AX1.L - 0a04 4c00 add $ACC0, $AC1.L - 0a05 147e lsr $ACC0, #-2 - 0a06 02df ret - 0a07 1401 lsl $ACC0, #1 - 0a08 0081 0ca0 lri $AR1, #0x0ca0 - 0a0a 009b c000 lri $AX1.H, #0xc000 - 0a0c 0099 4000 lri $AX1.L, #0x4000 - 0a0e 8900 clr $ACC1 - 0a0f 0082 0000 lri $AR2, #0x0000 - 0a11 1150 0a1c bloopi #0x50, 0x0a1c - 0a13 02c0 0001 andcf $AC0.M, #0x0001 - 0a15 027c iflnz - 0a16 1b1b srri @$AR0, $AX1.H - 0a17 027d iflz - 0a18 1b19 srri @$AR0, $AX1.L - 0a19 183d lrr $AC1.L, @$AR1 - 0a1a 4900 addax $ACC1, $AX0.L - 0a1b 1fe2 mrr $AC1.M, $AR2 - 0a1c 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M - 0a1d 147f lsr $ACC0, #-1 - 0a1e 02df ret - 0a1f 8900 clr $ACC1 - 0a20 1fb8 mrr $AC1.L, $AX0.L - 0a21 157f lsr $ACC1, #-1 - 0a22 1050 loopi #0x50 - 0a23 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L - 0a24 02df ret - 0a25 0082 0180 lri $AR2, #0x0180 - 0a27 029f 0a2f jmp 0x0a2f - 0a29 0082 01c0 lri $AR2, #0x01c0 - 0a2b 029f 0a2f jmp 0x0a2f - 0a2d 0082 0140 lri $AR2, #0x0140 - 0a2f 008a 003f lri $WR2, #0x003f - 0a31 0086 0000 lri $IX2, #0x0000 - 0a33 1406 lsl $ACC0, #6 - 0a34 8900 clr $ACC1 - 0a35 1fb8 mrr $AC1.L, $AX0.L - 0a36 1505 lsl $ACC1, #5 - 0a37 009b 003f lri $AX1.H, #0x003f - 0a39 009a 0000 lri $AX0.H, #0x0000 - 0a3b 3600 andr $AC0.M, $AX1.H - 0a3c 1cde mrr $IX2, $AC0.M - 0a3d 001a addarn $AR2, $IX2 - 0a3e 3400 andr $AC0.M, $AX0.H - 0a3f 1150 0a45 bloopi #0x50, 0x0a45 - 0a41 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 0a42 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a43 1cde mrr $IX2, $AC0.M - 0a44 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a45 1b19 srri @$AR0, $AX1.L - 0a46 1fc2 mrr $AC0.M, $AR2 - 0a47 147a lsr $ACC0, #-6 - 0a48 008a ffff lri $WR2, #0xffff - 0a4a 02df ret - 0a4b 1050 loopi #0x50 - 0a4c 1b18 srri @$AR0, $AX0.L - 0a4d 02df ret - 0a4e 0082 0100 lri $AR2, #0x0100 - 0a50 008a 003f lri $WR2, #0x003f - 0a52 0086 0000 lri $IX2, #0x0000 - 0a54 1406 lsl $ACC0, #6 - 0a55 8900 clr $ACC1 - 0a56 1fb8 mrr $AC1.L, $AX0.L - 0a57 1505 lsl $ACC1, #5 - 0a58 009b 003f lri $AX1.H, #0x003f - 0a5a 009a 0000 lri $AX0.H, #0x0000 - 0a5c 3600 andr $AC0.M, $AX1.H - 0a5d 1cde mrr $IX2, $AC0.M - 0a5e 001a addarn $AR2, $IX2 - 0a5f 3400 andr $AC0.M, $AX0.H - 0a60 1150 0a66 bloopi #0x50, 0x0a66 - 0a62 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 0a63 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a64 1cde mrr $IX2, $AC0.M - 0a65 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a66 1b19 srri @$AR0, $AX1.L - 0a67 1fc2 mrr $AC0.M, $AR2 - 0a68 147a lsr $ACC0, #-6 - 0a69 008a ffff lri $WR2, #0xffff - 0a6b 02df ret - -// - 0a6c 0082 0100 lri $AR2, #0x0100 - 0a6e 008a 003f lri $WR2, #0x003f - 0a70 0086 0000 lri $IX2, #0x0000 - 0a72 0081 0ca0 lri $AR1, #0x0ca0 - 0a74 1406 lsl $ACC0, #6 - 0a75 8900 clr $ACC1 - 0a76 1fb8 mrr $AC1.L, $AX0.L - 0a77 1505 lsl $ACC1, #5 - 0a78 009b 003f lri $AX1.H, #0x003f - 0a7a 009a 0000 lri $AX0.H, #0x0000 - 0a7c 3600 andr $AC0.M, $AX1.H - 0a7d 1cde mrr $IX2, $AC0.M - 0a7e 001a addarn $AR2, $IX2 - 0a7f 3400 andr $AC0.M, $AX0.H - - 0a80 1150 0a8b bloopi #0x50, 0x0a8b - 0a82 1939 lrri $AX1.L, @$AR1 - 0a83 a000 mulx $AX0.L, $AX1.L - 0a84 140a lsl $ACC0, #10 - 0a85 4e00 addp $ACC0 - 0a86 1476 lsr $ACC0, #-10 - 0a87 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 - 0a88 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a89 1cde mrr $IX2, $AC0.M - 0a8a 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a8b 1b19 srri @$AR0, $AX1.L - - 0a8c 1fc2 mrr $AC0.M, $AR2 - 0a8d 147a lsr $ACC0, #-6 - 0a8e 008a ffff lri $WR2, #0xffff - 0a90 02df ret - -// - 0a91 0080 01be lri $AR0, #0x01be - 0a93 1918 lrri $AX0.L, @$AR0 - 0a94 191a lrri $AX0.H, @$AR0 - 0a95 0080 0180 lri $AR0, #0x0180 - 0a97 0083 0180 lri $AR3, #0x0180 - 0a99 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0a9a 1ffe mrr $AC1.M, $AC0.M - 0a9b 1120 0aa2 bloopi #0x20, 0x0aa2 - 0a9d 7c00 neg $ACC0 - 0a9e d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0a9f 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0aa0 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 0aa1 1501 lsl $ACC1, #1 - 0aa2 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - 0aa3 0080 01fe lri $AR0, #0x01fe - 0aa5 191a lrri $AX0.H, @$AR0 - 0aa6 1918 lrri $AX0.L, @$AR0 - 0aa7 0080 01c0 lri $AR0, #0x01c0 - 0aa9 0083 01c0 lri $AR3, #0x01c0 - 0aab 1ff8 mrr $AC1.M, $AX0.L - 0aac 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0aad f800 addpaxz $ACC0, $AX0.H - 0aae 0240 01ff andi $AC0.M, #0x01ff - 0ab0 0260 2000 ori $AC0.M, #0x2000 - 0ab2 02bf 0ab5 call 0x0ab5 - 0ab4 02df ret - 0ab5 b900 tst $ACC1 - 0ab6 0272 ifg - 0ab7 7c00 neg $ACC0 - 0ab8 1f7e mrr $AX1.H, $AC0.M - 0ab9 4700 addr $ACC1, $AX1.H - 0aba 1110 0abf bloopi #0x10, 0x0abf - 0abc 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0abd 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0abe 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0abf 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0ac0 02df ret - -// - 0ac1 02bf 0b2e call 0x0b2e - 0ac3 2201 lrs $AX0.H, @0x0001 - 0ac4 8600 tstaxh $AX0.H - 0ac5 0294 0ad6 jnz 0x0ad6 - 0ac7 2204 lrs $AX0.H, @0x0004 - 0ac8 8600 tstaxh $AX0.H - 0ac9 02b4 0b1d callne 0x0b1d - 0acb 8100 clr $ACC0 - 0acc 2605 lrs $AC0.M, @0x0005 - 0acd b100 tst $ACC0 - 0ace 0295 0ae3 jz 0x0ae3 - 0ad0 8100 clr $ACC0 - 0ad1 2e05 srs @0x0005, $AC0.M - 0ad2 2281 lrs $AX0.H, @0xff81 - 0ad3 8600 tstaxh $AX0.H - 0ad4 0294 0add jnz 0x0add - 0ad6 8100 clr $ACC0 - 0ad7 005f loop $AC1.M - 0ad8 1b7e srri @$AR3, $AC0.M - 0ad9 7400 incm $AC0.M - 0ada 2e01 srs @0x0001, $AC0.M - 0adb 029f 0b16 jmp 0x0b16 - 0add 2688 lrs $AC0.M, @0xff88 - 0ade 2489 lrs $AC0.L, @0xff89 - 0adf 2e34 srs @0x0034, $AC0.M - 0ae0 2c35 srs @0x0035, $AC0.L - 0ae1 02bf 0b1d call 0x0b1d - 0ae3 00ff 0360 sr @0x0360, $AC1.M - 0ae5 2638 lrs $AC0.M, @0x0038 - 0ae6 2439 lrs $AC0.L, @0x0039 - 0ae7 02bf 068d call 0x068d - 0ae9 00df 0360 lr $AC1.M, @0x0360 - 0aeb 8100 clr $ACC0 - 0aec 263a lrs $AC0.M, @0x003a - 0aed b100 tst $ACC0 - 0aee 0294 0afd jnz 0x0afd - 0af0 263b lrs $AC0.M, @0x003b - 0af1 5c00 sub $ACC0, $AC1.L - 0af2 0290 0afd jns 0x0afd - 0af4 223b lrs $AX0.H, @0x003b - 0af5 02bf 06aa call 0x06aa - 0af7 5500 subr $ACC1, $AX0.H - 0af8 0a01 lris $AX0.H, #0x01 - 0af9 00fa 0405 sr @0x0405, $AX0.H - 0afb 029f 0ad0 jmp 0x0ad0 - 0afd 1f5f mrr $AX0.H, $AC1.M - 0afe 02bf 06aa call 0x06aa - 0b00 00fa 0362 sr @0x0362, $AX0.H - 0b02 8100 clr $ACC0 - 0b03 263a lrs $AC0.M, @0x003a - 0b04 243b lrs $AC0.L, @0x003b - 0b05 1570 lsr $ACC1, #-16 - 0b06 0a01 lris $AX0.H, #0x01 - 0b07 0081 0405 lri $AR1, #0x0405 - 0b09 5c00 sub $ACC0, $AC1.L - 0b0a b100 tst $ACC0 - 0b0b 0275 ifz - 0b0c 1a3a srr @$AR1, $AX0.H - 0b0d 2e3a srs @0x003a, $AC0.M - 0b0e 2c3b srs @0x003b, $AC0.L - 0b0f 2638 lrs $AC0.M, @0x0038 - 0b10 2439 lrs $AC0.L, @0x0039 - 0b11 00d8 0362 lr $AX0.L, @0x0362 - 0b13 7000 addaxl $ACC0, $AX0.L - 0b14 2c39 srs @0x0039, $AC0.L - 0b15 2e38 srs @0x0038, $AC0.M - 0b16 0092 00ff lri $CR, #0x00ff - 0b18 029f 032e jmp 0x032e - 0b1a 8100 clr $ACC0 - 0b1b 2e34 srs @0x0034, $AC0.M - 0b1c 2e35 srs @0x0035, $AC0.M - 0b1d 2334 lrs $AX1.H, @0x0034 - 0b1e 2135 lrs $AX1.L, @0x0035 - 0b1f 268a lrs $AC0.M, @0xff8a - 0b20 248b lrs $AC0.L, @0xff8b - 0b21 5a00 subax $ACC0, $AX1.L - 0b22 2e3a srs @0x003a, $AC0.M - 0b23 2c3b srs @0x003b, $AC0.L - 0b24 2634 lrs $AC0.M, @0x0034 - 0b25 2435 lrs $AC0.L, @0x0035 - 0b26 238c lrs $AX1.H, @0xff8c - 0b27 218d lrs $AX1.L, @0xff8d - 0b28 4a00 addax $ACC0, $AX1.L - 0b29 2e38 srs @0x0038, $AC0.M - 0b2a 2c39 srs @0x0039, $AC0.L - 0b2b 8100 clr $ACC0 - 0b2c 2e05 srs @0x0005, $AC0.M - 0b2d 02df ret - -// - 0b2e 0092 0004 lri $CR, #0x0004 - 0b30 2002 lrs $AX0.L, @0x0002 - 0b31 8100 clr $ACC0 - 0b32 8900 clr $ACC1 - 0b33 2430 lrs $AC0.L, @0x0030 - 0b34 8d00 set15 - 0b35 0950 lris $AX1.L, #0x50 - 0b36 a000 mulx $AX0.L, $AX1.L - 0b37 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0b38 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0002] * 80) << 4; - 0b39 8c00 clr15 - 0b3a 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M; - 0b3b 0083 0580 lri $AR3, #0x0580 - 0b3d 02df ret - -// process sound format 0x10 (smg) -// read data stored at 0x0000 by DsetupTable -// stores the output to 0x0580 - 0b3e 02bf 0b2e call 0x0b2e // prepare regs - 0b40 2201 lrs $AX0.H, @0x0001 - 0b41 8600 tstaxh $AX0.H - 0b42 0294 0b53 jnz 0x0b53 - 0b44 2204 lrs $AX0.H, @0x0004 - 0b45 8600 tstaxh $AX0.H - 0b46 02b4 0b9d callne 0x0b9d - 0b48 8100 clr $ACC0 - 0b49 2605 lrs $AC0.M, @0x0005 - 0b4a b100 tst $ACC0 - 0b4b 0295 0b60 jz 0x0b60 - 0b4d 8100 clr $ACC0 - 0b4e 2e05 srs @0x0005, $AC0.M - 0b4f 2281 lrs $AX0.H, @0xff81 - 0b50 8600 tstaxh $AX0.H - 0b51 0294 0b5a jnz 0x0b5a - - 0b53 8100 clr $ACC0 - - 0b54 005f loop $AC1.M - 0b55 1b7e srri @$AR3, $AC0.M // store zero to output - - 0b56 7400 incm $AC0.M - 0b57 2e01 srs @0x0001, $AC0.M - 0b58 029f 0b96 jmp 0x0b96 - - 0b5a 2688 lrs $AC0.M, @0xff88 - 0b5b 2489 lrs $AC0.L, @0xff89 - 0b5c 2e34 srs @0x0034, $AC0.M - 0b5d 2c35 srs @0x0035, $AC0.L - 0b5e 02bf 0b9d call 0x0b9d - - 0b60 00ff 0360 sr @0x0360, $AC1.M - 0b62 2638 lrs $AC0.M, @0x0038 - 0b63 2439 lrs $AC0.L, @0x0039 - // DMA transfer from main memory address Dword[0x0038] to 0x0580 - // Dword[0x0038] = Dword[0xFF8C] - 0b64 02bf 068d call 0x068d - 0b66 02bf 06a4 call 0x06a4 - 0b68 00df 0360 lr $AC1.M, @0x0360 - 0b6a 8100 clr $ACC0 - 0b6b 263a lrs $AC0.M, @0x003a - 0b6c b100 tst $ACC0 - 0b6d 0294 0b7c jnz 0x0b7c - 0b6f 263b lrs $AC0.M, @0x003b - 0b70 5c00 sub $ACC0, $AC1.L - 0b71 0290 0b7c jns 0x0b7c - 0b73 223b lrs $AX0.H, @0x003b - 0b74 02bf 066f call 0x066f // dma? - 0b76 5500 subr $ACC1, $AX0.H - 0b77 0a01 lris $AX0.H, #0x01 - 0b78 00fa 0405 sr @0x0405, $AX0.H - 0b7a 029f 0b4d jmp 0x0b4d - 0b7c 1f5f mrr $AX0.H, $AC1.M - 0b7d 02bf 066f call 0x066f // dma? - 0b7f 00fa 0362 sr @0x0362, $AX0.H - 0b81 8100 clr $ACC0 - 0b82 263a lrs $AC0.M, @0x003a - 0b83 243b lrs $AC0.L, @0x003b - 0b84 1570 lsr $ACC1, #-16 - 0b85 0a01 lris $AX0.H, #0x01 - 0b86 0081 0405 lri $AR1, #0x0405 - 0b88 5c00 sub $ACC0, $AC1.L - 0b89 b100 tst $ACC0 - 0b8a 0275 ifz - 0b8b 1a3a srr @$AR1, $AX0.H - 0b8c 2e3a srs @0x003a, $AC0.M - 0b8d 2c3b srs @0x003b, $AC0.L - 0b8e 2638 lrs $AC0.M, @0x0038 - 0b8f 2439 lrs $AC0.L, @0x0039 - 0b90 00d8 0362 lr $AX0.L, @0x0362 - 0b92 7000 addaxl $ACC0, $AX0.L - 0b93 7000 addaxl $ACC0, $AX0.L - 0b94 2c39 srs @0x0039, $AC0.L - 0b95 2e38 srs @0x0038, $AC0.M - 0b96 0092 00ff lri $CR, #0x00ff - 0b98 029f 032e jmp 0x032e - -// - 0b9a 8100 clr $ACC0 - - 0b9b 2e34 srs @0x0034, $AC0.M - 0b9c 2e35 srs @0x0035, $AC0.M - - 0b9d 2334 lrs $AX1.H, @0x0034 - 0b9e 2135 lrs $AX1.L, @0x0035 - 0b9f 268a lrs $AC0.M, @0xff8a - 0ba0 248b lrs $AC0.L, @0xff8b - 0ba1 5a00 subax $ACC0, $AX1.L - 0ba2 2e3a srs @0x003a, $AC0.M - 0ba3 2c3b srs @0x003b, $AC0.L - 0ba4 2634 lrs $AC0.M, @0x0034 - 0ba5 2435 lrs $AC0.L, @0x0035 - 0ba6 1401 lsl $ACC0, #1 - 0ba7 238c lrs $AX1.H, @0xff8c - 0ba8 218d lrs $AX1.L, @0xff8d - 0ba9 4a00 addax $ACC0, $AX1.L - 0baa 2e38 srs @0x0038, $AC0.M - 0bab 2c39 srs @0x0039, $AC0.L - 0bac 8100 clr $ACC0 - 0bad 2e05 srs @0x0005, $AC0.M - 0bae 02df ret - -// - 0baf 8900 clr $ACC1 - 0bb0 0f50 lris $AC1.M, #0x50 - 0bb1 0083 0520 lri $AR3, #0x0520 - 0bb3 02bf 0bc8 call 0x0bc8 - 0bb5 029f 0336 jmp 0x0336 - 0bb7 00d8 0402 lr $AX0.L, @0x0402 - 0bb9 8100 clr $ACC0 - 0bba 8900 clr $ACC1 - 0bbb 00dc 0430 lr $AC0.L, @0x0430 - 0bbd 0a50 lris $AX0.H, #0x50 - 0bbe 9000 mul $AX0.L, $AX0.H - 0bbf 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0bc0 1404 lsl $ACC0, #4 - 0bc1 1ffe mrr $AC1.M, $AC0.M - 0bc2 0083 0580 lri $AR3, #0x0580 - 0bc4 02bf 0bc8 call 0x0bc8 - 0bc6 029f 032e jmp 0x032e - -// - 0bc8 0092 0004 lri $CR, #0x0004 - 0bca 8100 clr $ACC0 - 0bcb 263a lrs $AC0.M, @0x003a - 0bcc 243b lrs $AC0.L, @0x003b - 0bcd 1f1f mrr $AX0.L, $AC1.M - 0bce 0a00 lris $AX0.H, #0x00 - 0bcf 5800 subax $ACC0, $AX0.L - 0bd0 0292 0be6 jg 0x0be6 - 0bd2 8900 clr $ACC1 - 0bd3 00c0 043b lr $AR0, @0x043b - 0bd5 02bf 0c0b call 0x0c0b - 0bd7 8100 clr $ACC0 - 0bd8 1fd8 mrr $AC0.M, $AX0.L - 0bd9 223b lrs $AX0.H, @0x003b - 0bda 5400 subr $ACC0, $AX0.H - 0bdb 0007 dar $AR3 - 0bdc 1979 lrri $AX1.L, @$AR3 - 0bdd 005e loop $AC0.M - 0bde 1b79 srri @$AR3, $AX1.L - 0bdf 0f01 lris $AC1.M, #0x01 - 0be0 2f01 srs @0x0001, $AC1.M - 0be1 8900 clr $ACC1 - 0be2 2f3b srs @0x003b, $AC1.M - 0be3 0092 00ff lri $CR, #0x00ff - 0be5 02df ret - -// - 0be6 2e3a srs @0x003a, $AC0.M - 0be7 2c3b srs @0x003b, $AC0.L - 0be8 8100 clr $ACC0 - 0be9 8900 clr $ACC1 - 0bea 268a lrs $AC0.M, @0xff8a - 0beb 2734 lrs $AC1.M, @0x0034 - 0bec 5c00 sub $ACC0, $AC1.L - 0bed 2e36 srs @0x0036, $AC0.M - 0bee 5000 subr $ACC0, $AX0.L - 0bef 0290 0c05 jns 0x0c05 - 0bf1 00c0 0436 lr $AR0, @0x0436 - 0bf3 02bf 0c0b call 0x0c0b - 0bf5 8100 clr $ACC0 - 0bf6 1fd8 mrr $AC0.M, $AX0.L - 0bf7 2236 lrs $AX0.H, @0x0036 - 0bf8 5400 subr $ACC0, $AX0.H - 0bf9 1c1e mrr $AR0, $AC0.M - 0bfa 8100 clr $ACC0 - 0bfb 2e34 srs @0x0034, $AC0.M - 0bfc 2688 lrs $AC0.M, @0xff88 - 0bfd 2489 lrs $AC0.L, @0xff89 - 0bfe 2e8c srs @0xff8c, $AC0.M - 0bff 2c8d srs @0xff8d, $AC0.L - 0c00 02bf 0c0b call 0x0c0b - 0c02 0092 00ff lri $CR, #0x00ff - 0c04 02df ret - -// - 0c05 1c18 mrr $AR0, $AX0.L - 0c06 02bf 0c0b call 0x0c0b - 0c08 0092 00ff lri $CR, #0x00ff - 0c0a 02df ret - -// - 0c0b 8100 clr $ACC0 - 0c0c 1fc0 mrr $AC0.M, $AR0 - 0c0d b100 tst $ACC0 - 0c0e 02d5 retz - 0c0f 8900 clr $ACC1 - 0c10 2734 lrs $AC1.M, @0x0034 - 0c11 0340 0001 andi $AC1.M, #0x0001 - 0c13 0b00 lris $AX1.H, #0x00 - 0c14 1f3f mrr $AX1.L, $AC1.M - 0c15 268c lrs $AC0.M, @0xff8c - 0c16 248d lrs $AC0.L, @0xff8d - 0c17 8900 clr $ACC1 - 0c18 2534 lrs $AC1.L, @0x0034 - 0c19 1501 lsl $ACC1, #1 - 0c1a 4c00 add $ACC0, $AC1.L - 0c1b 5a00 subax $ACC0, $AX1.L - 0c1c 5a00 subax $ACC0, $AX1.L - 0c1d 1c20 mrr $AR1, $AR0 - 0c1e 1fe0 mrr $AC1.M, $AR0 - 0c1f 0502 addis $ACC1, #0x02 - 0c20 1c1f mrr $AR0, $AC1.M - 0c21 009f 0b00 lri $AC1.M, #0x0b00 - 0c23 0092 00ff lri $CR, #0x00ff - 0c25 02bf 05e8 call 0x05e8 - 0c27 0092 0004 lri $CR, #0x0004 - 0c29 2734 lrs $AC1.M, @0x0034 - 0c2a 1f61 mrr $AX1.H, $AR1 - 0c2b 4700 addr $ACC1, $AX1.H - 0c2c 2f34 srs @0x0034, $AC1.M - 0c2d 0080 0b00 lri $AR0, #0x0b00 - 0c2f 8900 clr $ACC1 - 0c30 1ff9 mrr $AC1.M, $AX1.L - 0c31 b900 tst $ACC1 - 0c32 0274 ifnz - 0c33 0008 iar $AR0 - 0c34 8900 clr $ACC1 - 0c35 1fe1 mrr $AC1.M, $AR1 - 0c36 191e lrri $AC0.M, @$AR0 - 0c37 0701 cmpis $ACC1, #0x01 - 0c38 0293 0c41 jle 0x0c41 - 0c3a 191a lrri $AX0.H, @$AR0 - 0c3b 05fe addis $ACC1, #0xfe - 0c3c 005f loop $AC1.M - 0c3d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c3e 1b7e srri @$AR3, $AC0.M - 0c3f 1b7a srri @$AR3, $AX0.H - 0c40 02df ret - -// uh? - 0c41 1b7e srri @$AR3, $AC0.M - 0c42 02df ret - -// ??? -// AR0 = some count??? address??? -// AC0.M = -// AR1 = - 0c43 0083 03e8 lri $AR3, #0x03e8 - 0c45 191e lrri $AC0.M, @$AR0 - 0c46 191a lrri $AX0.H, @$AR0 - 0c47 1006 loopi #0x06 - 0c48 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c49 1b7e srri @$AR3, $AC0.M - 0c4a 1b7a srri @$AR3, $AX0.H - 0c4b 0080 03e8 lri $AR0, #0x03e8 - 0c4d 8a00 m2 - 0c4e 0088 0007 lri $WR0, #0x0007 - - 0c50 1150 0c5d bloopi #0x50, 0x0c5d - 0c52 1c61 mrr $AR3, $AR1 - 0c53 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c54 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c55 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c56 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c57 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c58 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c59 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c5a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c5b f200 madd $AX0.L, $AX0.H - 0c5c fe00 movpz $ACC0 - 0c5d 1b3e srri @$AR1, $AC0.M - - 0c5e 0088 ffff lri $WR0, #0xffff - 0c60 8b00 m0 - 0c61 02df ret - -// - 0c62 8a00 m2 - 0c63 05fe addis $ACC1, #0xfe - 0c64 0083 03e8 lri $AR3, #0x03e8 - 0c66 191e lrri $AC0.M, @$AR0 - 0c67 191a lrri $AX0.H, @$AR0 - 0c68 005f loop $AC1.M - 0c69 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c6a 1b7e srri @$AR3, $AC0.M - 0c6b 1b7a srri @$AR3, $AX0.H - 0c6c 0080 03e8 lri $AR0, #0x03e8 - 0c6e 0501 addis $ACC1, #0x01 - 0c6f 1d1f mrr $WR0, $AC1.M - 0c70 1150 0c78 bloopi #0x50, 0x0c78 - 0c72 1c61 mrr $AR3, $AR1 - 0c73 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c74 005f loop $AC1.M - 0c75 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c76 f200 madd $AX0.L, $AX0.H - 0c77 fe00 movpz $ACC0 - 0c78 1b3e srri @$AR1, $AC0.M - 0c79 0088 ffff lri $WR0, #0xffff - 0c7b 8b00 m0 - 0c7c 02df ret - 0c7d 0083 03e8 lri $AR3, #0x03e8 - 0c7f 191e lrri $AC0.M, @$AR0 - 0c80 191a lrri $AX0.H, @$AR0 - 0c81 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c82 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c83 1b7e srri @$AR3, $AC0.M - 0c84 1b7a srri @$AR3, $AX0.H - 0c85 0080 03e8 lri $AR0, #0x03e8 - 0c87 0088 0003 lri $WR0, #0x0003 - 0c89 0085 0000 lri $IX1, #0x0000 - 0c8b 0087 0000 lri $IX3, #0x0000 - 0c8d 1fc2 mrr $AC0.M, $AR2 - 0c8e 195b lrri $AX1.H, @$AR2 - 0c8f 1959 lrri $AX1.L, @$AR2 - 0c90 195f lrri $AC1.M, @$AR2 - 0c91 195a lrri $AX0.H, @$AR2 - 0c92 1c5e mrr $AR2, $AC0.M - 0c93 1fda mrr $AC0.M, $AX0.H - 0c94 1c61 mrr $AR3, $AR1 - 0c95 8a00 m2 - 0c96 8f00 set40 - 0c97 191a lrri $AX0.H, @$AR0 - 0c98 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0c99 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0c9a ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0c9b e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0c9c b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0c9d 1127 0ca8 bloopi #0x27, 0x0ca8 - 0c9f e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ca0 197e lrri $AC0.M, @$AR3 - 0ca1 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ca2 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0ca3 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0ca4 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0ca5 197f lrri $AC1.M, @$AR3 - 0ca6 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0ca7 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0ca8 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0ca9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0caa 197e lrri $AC0.M, @$AR3 - 0cab e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0cac eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cad bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 0cae 1bff srrn @$AR3, $AC1.M - 0caf 197f lrri $AC1.M, @$AR3 - 0cb0 8e00 set16 - 0cb1 8b00 m0 - 0cb2 0088 ffff lri $WR0, #0xffff - 0cb4 1b5b srri @$AR2, $AX1.H - 0cb5 1b59 srri @$AR2, $AX1.L - 0cb6 1b5f srri @$AR2, $AC1.M - 0cb7 1b5e srri @$AR2, $AC0.M - 0cb8 02df ret - 0cb9 0083 03e8 lri $AR3, #0x03e8 - 0cbb 191e lrri $AC0.M, @$AR0 - 0cbc 191a lrri $AX0.H, @$AR0 - 0cbd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cbe 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cbf 1b7e srri @$AR3, $AC0.M - 0cc0 1b7a srri @$AR3, $AX0.H - 0cc1 0080 03e8 lri $AR0, #0x03e8 - 0cc3 0088 0003 lri $WR0, #0x0003 - 0cc5 0085 0000 lri $IX1, #0x0000 - 0cc7 0087 0000 lri $IX3, #0x0000 - 0cc9 1fc2 mrr $AC0.M, $AR2 - 0cca 195b lrri $AX1.H, @$AR2 - 0ccb 1959 lrri $AX1.L, @$AR2 - 0ccc 195f lrri $AC1.M, @$AR2 - 0ccd 195a lrri $AX0.H, @$AR2 - 0cce 1c5e mrr $AR2, $AC0.M - 0ccf 1fda mrr $AC0.M, $AX0.H - 0cd0 1c61 mrr $AR3, $AR1 - 0cd1 8a00 m2 - 0cd2 8f00 set40 - 0cd3 191a lrri $AX0.H, @$AR0 - 0cd4 b800 mulx $AX0.H, $AX1.H - 0cd5 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0cd6 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cd7 ea00 maddc $AC1.M, $AX1.L - 0cd8 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0cd9 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0cda ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0cdb b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0cdc 1127 0ced bloopi #0x27, 0x0ced - 0cde e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cdf e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ce0 197e lrri $AC0.M, @$AR3 - 0ce1 e800 maddc $AC0.M, $AX1.L - 0ce2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ce3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0ce4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0ce5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0ce6 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0ce7 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0ce8 197f lrri $AC1.M, @$AR3 - 0ce9 ea00 maddc $AC1.M, $AX1.L - 0cea ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0ceb e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0cec ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0ced b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0cee e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cef e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0cf0 197e lrri $AC0.M, @$AR3 - 0cf1 e800 maddc $AC0.M, $AX1.L - 0cf2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0cf3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0cf4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cf5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0cf6 1bff srrn @$AR3, $AC1.M - 0cf7 197f lrri $AC1.M, @$AR3 - 0cf8 8e00 set16 - 0cf9 8b00 m0 - 0cfa 0088 ffff lri $WR0, #0xffff - 0cfc 1b5b srri @$AR2, $AX1.H - 0cfd 1b59 srri @$AR2, $AX1.L - 0cfe 1b5f srri @$AR2, $AC1.M - 0cff 1b5e srri @$AR2, $AC0.M - 0d00 02df ret - -// stores an offset table??? called by DsetupTable -// Mem[0x03F0] = 0x0000; -// Mem[0x03F1] = 0x0096; -// Mem[0x03F2] = 0x00FF; -// Mem[0x03F3] = 0x0030; -// Mem[0x03F4] = 0x0010; -// Mem[0x03F5] = 0x7F00; -// Mem[0x03F6] = 0x0000; -// Mem[0x03F7] = 0x0100; - 0d01 0eff lris $AC0.M, #0xff - 0d02 00fe 03f2 sr @0x03f2, $AC0.M - 0d04 8100 clr $ACC0 - 0d05 00fe 03f0 sr @0x03f0, $AC0.M - 0d07 00fe 03f6 sr @0x03f6, $AC0.M - 0d09 009e 0100 lri $AC0.M, #0x0100 - 0d0b 00fe 03f7 sr @0x03f7, $AC0.M - 0d0d 00da 03f7 lr $AX0.H, @0x03f7 - 0d0f 009e 8000 lri $AC0.M, #0x8000 - 0d11 5400 subr $ACC0, $AX0.H - 0d12 00fe 03f5 sr @0x03f5, $AC0.M - 0d14 0e30 lris $AC0.M, #0x30 - 0d15 00fe 03f3 sr @0x03f3, $AC0.M - 0d17 0e10 lris $AC0.M, #0x10 - 0d18 00fe 03f4 sr @0x03f4, $AC0.M - 0d1a 009e 0096 lri $AC0.M, #0x0096 - 0d1c 00fe 03f1 sr @0x03f1, $AC0.M - 0d1e 02df ret - -// - 0d1f 0080 0a00 lri $AR0, #0x0a00 - 0d21 8100 clr $ACC0 - 0d22 00de 03f0 lr $AC0.M, @0x03f0 - 0d24 8900 clr $ACC1 - 0d25 b100 tst $ACC0 - 0d26 0275 ifz - 0d27 0550 addis $ACC1, #0x50 - 0d28 00ff 03f0 sr @0x03f0, $AC1.M - 0d2a 0200 0a60 addi $AC0.M, #0x0a60 - 0d2c 1c7e mrr $AR3, $AC0.M - 0d2d 0f4e lris $AC1.M, #0x4e - 0d2e 02bf 00e5 call 0x00e5 - 0d30 02df ret - -// - 0d31 00de 03f1 lr $AC0.M, @0x03f1 - 0d33 0200 0a60 addi $AC0.M, #0x0a60 - 0d35 1c7e mrr $AR3, $AC0.M - 0d36 8100 clr $ACC0 - 0d37 8900 clr $ACC1 - 0d38 009f 00a0 lri $AC1.M, #0x00a0 - 0d3a 00de 03f1 lr $AC0.M, @0x03f1 - 0d3c 5d00 sub $ACC1, $AC0.L - 0d3d 0e50 lris $AC0.M, #0x50 - 0d3e 0750 cmpis $ACC1, #0x50 - 0d3f 0270 ifns - 0d40 5d00 sub $ACC1, $AC0.L - 0d41 00da 03f2 lr $AX0.H, @0x03f2 - 0d43 8600 tstaxh $AX0.H - 0d44 0290 0d62 jns 0x0d62 - 0d46 00de 03f3 lr $AC0.M, @0x03f3 - 0d48 5c00 sub $ACC0, $AC1.L - 0d49 0293 0d4d jle 0x0d4d - 0d4b 029f 0d67 jmp 0x0d67 - 0d4d 00db 03f7 lr $AX1.H, @0x03f7 - 0d4f 009e 8000 lri $AC0.M, #0x8000 - 0d51 4600 addr $ACC0, $AX1.H - 0d52 029f 0d59 jmp 0x0d59 - 0d54 00db 03f7 lr $AX1.H, @0x03f7 - 0d56 009e 8000 lri $AC0.M, #0x8000 - 0d58 5600 subr $ACC0, $AX1.H - 0d59 00fe 03f5 sr @0x03f5, $AC0.M - 0d5b 1fda mrr $AC0.M, $AX0.H - 0d5c 7c00 neg $ACC0 - 0d5d 1f5e mrr $AX0.H, $AC0.M - 0d5e 00fe 03f2 sr @0x03f2, $AC0.M - 0d60 029f 0d67 jmp 0x0d67 - 0d62 00de 03f4 lr $AC0.M, @0x03f4 - 0d64 5d00 sub $ACC1, $AC0.L - 0d65 0293 0d54 jle 0x0d54 - 0d67 8900 clr $ACC1 - 0d68 00dd 03f5 lr $AC1.L, @0x03f5 - 0d6a 1501 lsl $ACC1, #1 - 0d6b 8100 clr $ACC0 - 0d6c 00dc 03f6 lr $AC0.L, @0x03f6 - 0d6e 008b 009f lri $WR3, #0x009f - 0d70 0080 0a00 lri $AR0, #0x0a00 - 0d72 0900 lris $AX1.L, #0x00 - // fill buffer at 0x0A00 with buffer at (0x0A60 + Mem[0x03F1]) - 0d73 1150 0d7a bloopi #0x50, 0x0d7a - 0d75 1878 lrr $AX0.L, @$AR3 - 0d76 4c00 add $ACC0, $AC1.L - 0d77 1cfe mrr $IX3, $AC0.M - 0d78 001f addarn $AR3, $IX3 - 0d79 1fd9 mrr $AC0.M, $AX1.L - 0d7a 1b18 srri @$AR0, $AX0.L - - 0d7b 009f 0a60 lri $AC1.M, #0x0a60 - 0d7d 1fc3 mrr $AC0.M, $AR3 - 0d7e 5c00 sub $ACC0, $AC1.L - 0d7f 00fe 03f1 sr @0x03f1, $AC0.M - 0d81 00fc 03f6 sr @0x03f6, $AC0.L - 0d83 008b ffff lri $WR3, #0xffff - 0d85 02df ret - -// copy buffer at 0x0A00 to right & left buffers - 0d86 0f50 lris $AC1.M, #0x50 - 0d87 0080 0a00 lri $AR0, #0x0a00 - 0d89 0083 0d60 lri $AR3, #0x0d60 - 0d8b 0098 3fff lri $AX0.L, #0x3fff - 0d8d 02bf 00ff call 0x00ff - 0d8f 0f50 lris $AC1.M, #0x50 - 0d90 0080 0a00 lri $AR0, #0x0a00 - 0d92 0083 0d00 lri $AR3, #0x0d00 - 0d94 0098 3fff lri $AX0.L, #0x3fff - 0d96 02bf 00ff call 0x00ff - 0d98 02df ret - -// ??? -// ACC1: ??? - 0d99 b900 tst $ACC1 - 0d9a 0294 0d9f jnz 0x0d9f - 0d9c 6800 movax $ACC0, $AX0.L - 0d9d b100 tst $ACC0 - 0d9e 02d5 retz - 0d9f 1c23 mrr $AR1, $AR3 - 0da0 197e lrri $AC0.M, @$AR3 - 0da1 191b lrri $AX1.H, @$AR0 - 0da2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - - 0da3 1120 0da9 bloopi #0x20, 0x0da9 - 0da5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0da6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0da7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0da8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0da9 4900 addax $ACC1, $AX0.L - - 0daa 1108 0daf bloopi #0x08, 0x0daf - 0dac dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0dad 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dae dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0daf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - - 0db0 02df ret - -// interleave two buffers - 0db1 8f00 set40 - 0db2 8d00 set15 - 0db3 1c03 mrr $AR0, $AR3 - 0db4 00d9 038e lr $AX1.L, @0x038e // (0x0040) set by DsetupTable - 0db6 0b04 lris $AX1.H, #0x04 - 0db7 197a lrri $AX0.H, @$AR3 - 0db8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 - 0db9 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0dba 1128 0dbf bloopi #0x28, 0x0dbf - 0dbc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0dbd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dbe 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0dbf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dc0 8c00 clr15 - 0dc1 8e00 set16 - 0dc2 02df ret - -// ??? - 0dc3 00da 0485 lr $AX0.H, @0x0485 - 0dc5 8600 tstaxh $AX0.H - 0dc6 0295 0dd4 jz 0x0dd4 - 0dc8 8100 clr $ACC0 - 0dc9 00de 042a lr $AC0.M, @0x042a - 0dcb 147f lsr $ACC0, #-1 - 0dcc 00fe 042b sr @0x042b, $AC0.M - 0dce b100 tst $ACC0 - 0dcf 0294 0dd4 jnz 0x0dd4 - 0dd1 0a01 lris $AX0.H, #0x01 - 0dd2 00fa 0401 sr @0x0401, $AX0.H - - 0dd4 8f00 set40 - 0dd5 8100 clr $ACC0 - 0dd6 00de 0428 lr $AC0.M, @0x0428 - 0dd8 1478 lsr $ACC0, #-8 - 0dd9 00df 0428 lr $AC1.M, @0x0428 - 0ddb 0340 007f andi $AC1.M, #0x007f - 0ddd 1f1e mrr $AX0.L, $AC0.M - 0dde 1f5f mrr $AX0.H, $AC1.M - 0ddf 0220 007f xori $ACC0, #0x007f - 0de1 1f3e mrr $AX1.L, $AC0.M - 0de2 0320 007f xori $ACC1, #0x007f - 0de4 1f7f mrr $AX1.H, $AC1.M - 0de5 8100 clr $ACC0 - 0de6 8900 clr $ACC1 - 0de7 009f 0200 lri $AC1.M, #0x0200 - 0de9 1fd8 mrr $AC0.M, $AX0.L - 0dea 4c00 add $ACC0, $AC1.L - 0deb 1c1e mrr $AR0, $AC0.M - 0dec 1818 lrr $AX0.L, @$AR0 - 0ded 1fda mrr $AC0.M, $AX0.H - 0dee 4c00 add $ACC0, $AC1.L - 0def 1c1e mrr $AR0, $AC0.M - 0df0 181a lrr $AX0.H, @$AR0 - 0df1 1fd9 mrr $AC0.M, $AX1.L - 0df2 4c00 add $ACC0, $AC1.L - 0df3 1c1e mrr $AR0, $AC0.M - 0df4 1819 lrr $AX1.L, @$AR0 - 0df5 1fdb mrr $AC0.M, $AX1.H - 0df6 4c00 add $ACC0, $AC1.L - 0df7 1c1e mrr $AR0, $AC0.M - 0df8 181b lrr $AX1.H, @$AR0 - 0df9 8a00 m2 - 0dfa 0080 0b00 lri $AR0, #0x0b00 - 0dfc 9800 mul $AX1.L, $AX1.H - 0dfd ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0dfe b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dff 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M - 0e00 6e30 movp's $ACC0 : @$AR0, $AC0.M - 0e01 1b1e srri @$AR0, $AC0.M - 0e02 8b00 m0 - 0e03 0080 0b00 lri $AR0, #0x0b00 - 0e05 0081 0b04 lri $AR1, #0x0b04 - 0e07 00da 042a lr $AX0.H, @0x042a - 0e09 02bf 0e54 call 0x0e54 - 0e0b 0081 0b08 lri $AR1, #0x0b08 - 0e0d 0080 0b00 lri $AR0, #0x0b00 - 0e0f 00da 042a lr $AX0.H, @0x042a - 0e11 00de 0429 lr $AC0.M, @0x0429 - 0e13 8a00 m2 - 0e14 c000 mulc $AC0.M, $AX0.H - 0e15 8b00 m0 - 0e16 6e00 movp $ACC0 - 0e17 1f5e mrr $AX0.H, $AC0.M - 0e18 02bf 0e54 call 0x0e54 - 0e1a 0080 0b00 lri $AR0, #0x0b00 - 0e1c 0081 0b0c lri $AR1, #0x0b0c - 0e1e 8100 clr $ACC0 - 0e1f 8900 clr $ACC1 - 0e20 00de 042b lr $AC0.M, @0x042b - 0e22 00df 042a lr $AC1.M, @0x042a - 0e24 00fe 042a sr @0x042a, $AC0.M - 0e26 5c00 sub $ACC0, $AC1.L - 0e27 1f5e mrr $AX0.H, $AC0.M - 0e28 02bf 0e5f call 0x0e5f - 0e2a 0080 0b0c lri $AR0, #0x0b0c - 0e2c 0081 0b10 lri $AR1, #0x0b10 - 0e2e 00da 0429 lr $AX0.H, @0x0429 - 0e30 02bf 0e54 call 0x0e54 - 0e32 0081 0b04 lri $AR1, #0x0b04 - 0e34 0082 0b0c lri $AR2, #0x0b0c - 0e36 0083 0e6d lri $AR3, #0x0e6d - 0e38 1108 0e51 bloopi #0x08, 0x0e51 - 0e3a 195f lrri $AC1.M, @$AR2 - 0e3b 15fb asr $ACC1, #-5 - 0e3c 1f1d mrr $AX0.L, $AC1.L - 0e3d 1f5f mrr $AX0.H, $AC1.M - 0e3e 193f lrri $AC1.M, @$AR1 - 0e3f 00e1 0b24 sr @0x0b24, $AR1 - 0e41 00e2 0b25 sr @0x0b25, $AR2 - 0e43 021b ilrri $AC0.M, @$AR3 - 0e44 00e3 0b26 sr @0x0b26, $AR3 - 0e46 1c7e mrr $AR3, $AC0.M - 0e47 00c0 038f lr $AR0, @0x038f - 0e49 02bf 0d99 call 0x0d99 - 0e4b 00c1 0b24 lr $AR1, @0x0b24 - 0e4d 00c2 0b25 lr $AR2, @0x0b25 - 0e4f 00c3 0b26 lr $AR3, @0x0b26 - 0e51 0000 nop - 0e52 8e00 set16 - 0e53 02df ret - -// - 0e54 8a00 m2 - 0e55 191f lrri $AC1.M, @$AR0 - 0e56 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 - 0e57 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 - 0e58 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e59 191f lrri $AC1.M, @$AR0 - 0e5a d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e5b 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0e5c 1b3e srri @$AR1, $AC0.M - 0e5d 8b00 m0 - 0e5e 02df ret - 0e5f 8a00 m2 - 0e60 8d00 set15 - 0e61 1f7e mrr $AX1.H, $AC0.M - 0e62 1918 lrri $AX0.L, @$AR0 - 0e63 a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 - 0e64 ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 - 0e65 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e66 1918 lrri $AX0.L, @$AR0 - 0e67 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0e68 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0e69 1b3e srri @$AR1, $AC0.M - 0e6a 8c00 clr15 - 0e6b 8b00 m0 - 0e6c 02df ret - 0e6d 0d00 lris $AC1.L, #0x00 - 0e6e 0d60 lris $AC1.L, #0x60 - 0e6f 0f40 lris $AC1.M, #0x40 - 0e70 0ca0 lris $AC0.L, #0xa0 - 0e71 0e80 lris $AC0.M, #0x80 - 0e72 0ee0 lris $AC0.M, #0xe0 - 0e73 0be0 lris $AX1.H, #0xe0 - 0e74 0c40 lris $AC0.L, #0x40 - -// store ramp??? -// AR0 = 0x0580 (left buffer?) -// AR1 = 0x0520 (right buffer?) - 0e75 00f9 0361 sr @0x0361, $AX1.L - 0e77 1fc0 mrr $AC0.M, $AR0 - 0e78 0200 fffc addi $AC0.M, #0xfffc // AC0.M = AR0 - 4; - 0e7a 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x057C; - 0e7b 1c5e mrr $AR2, $AC0.M // AR2 = AC0.M = 0x057C; - 0e7c 0083 043c lri $AR3, #0x043c // AR3 = 0x043C; - 0e7e 197e lrri $AC0.M, @$AR3 // AC0.M = Mem[AR3]; AR3++; - 0e7f 197f lrri $AC1.M, @$AR3 // AC1.M = Mem[AR3]; AR3++; - 0e80 80a2 nx'sl : $AC0.M, $AX0.H // AX0.H = Mem[AR3]; AR3++; Mem[AR0] = AC0.M; AR0++; - 0e81 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - 0e82 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - 0e83 1b1f srri @$AR0, $AC1.M - 0e84 1c02 mrr $AR0, $AR2 // AR0 = AR2; (0x0580) - 0e85 8100 clr $ACC0 - 0e86 00de 0402 lr $AC0.M, @0x0402 // AC0.M = Mem[0x0402]; (0x0FFC) (ACC0 = 0x0FFC0000) - 0e88 00fe 0362 sr @0x0362, $AC0.M // Mem[0x0362] = AC0.M; - 0e8a 1474 lsr $ACC0, #-12 // ACC0 >>= 12; - 0e8b 1f7e mrr $AX1.H, $AC0.M // AX1.H = AC0.M; (0x0000) - 0e8c 1f3c mrr $AX1.L, $AC0.L // AX1.L = AC0.L; (0xFFC0) - 0e8d 8900 clr $ACC1 - 0e8e 00dd 0430 lr $AC1.L, @0x0430 // AC1.L = Mem[0x0430]; - 0e90 1504 lsl $ACC1, #4 // ACC1 <<= 4; - 0e91 0604 cmpis $ACC0, #0x04 - 0e92 0290 0ee9 jns 0x0ee9 - 0e94 1fdd mrr $AC0.M, $AC1.L - 0e95 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0; temp buffer? - // store a ramp. for example, the ramp is 0xFFC0, 0xFF80, 0xFF40, 0xFF00, 0xFEC0 and so on... if start value (Mem[0x0402]) is 0x0FFC. - 0e97 1050 loopi #0x50 // for(i = 0; i < 80; i++) - 0e98 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L // ACC1 += AX1.L; Mem[AR2] = AC1.L; AR2++; - - 0e99 1fbe mrr $AC1.L, $AC0.M - 0e9a 00fe 0360 sr @0x0360, $AC0.M - 0e9c 8900 clr $ACC1 - 0e9d 1fbe mrr $AC1.L, $AC0.M - 0e9e 0af8 lris $AX0.H, #0xf8 // AX0.H = 0x00F8; - 0e9f 009b 00fc lri $AX1.H, #0x00fc // AX1.H = 0x00FC; - 0ea1 00d8 0361 lr $AX0.L, @0x0361 // AX0.L = Mem[0x0361]; - 0ea3 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0; - 0ea5 0083 02b0 lri $AR3, #0x02b0 // AR3 = 0x02B0; - 0ea7 195e lrri $AC0.M, @$AR2 // AC0.M = Mem[AR2]; - 0ea8 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M // AC0.M &= 0x00F8; AX0.L = Mem[AR0]; AR0++; Mem[AR3] = AC0.M; AR3++; - // do some processing on the ramp we just made, and merge it to the buffer at 0x0580 - 0ea9 1128 0eae bloopi #0x28, 0x0eae // - 0eab 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 // AC0.M &= AX1.H; AC1.M = Mem[AR2]; AR2++; - 0eac 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H // AC1.M &= 0x00F8; Mem[AR0] = AC1.M; AR0++; AX1.H = Mem[AR3]; AR3++; - 0ead 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 // ... - 0eae 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - - 0eaf 8a00 m2 // multiply by 2 - 0eb0 0082 02b0 lri $AR2, #0x02b0 - 0eb2 00dd 0430 lr $AC1.L, @0x0430 - 0eb4 1504 lsl $ACC1, #4 - 0eb5 1fe0 mrr $AC1.M, $AR0 - 0eb6 8100 clr $ACC0 - 0eb7 00de 0362 lr $AC0.M, @0x0362 - 0eb9 1474 lsr $ACC0, #-12 - 0eba 1f7e mrr $AX1.H, $AC0.M // AX1.H = 0x0000 - 0ebb 1f3c mrr $AX1.L, $AC0.L // AX1.L = 0xFFC0 - 0ebc 8f00 set40 - 0ebd 1943 lrri $AR3, @$AR2 - 0ebe 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ebf 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ec0 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ec1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ec2 f200 madd $AX0.L, $AX0.H - 0ec3 fe00 movpz $ACC0 - 0ec4 1c1f mrr $AR0, $AC1.M - 0ec5 1943 lrri $AR3, @$AR2 - 0ec6 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ec7 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - - 0ec8 114e 0ed0 bloopi #0x4e, 0x0ed0 // uh? 0x4E? skip two samples? - 0eca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ecb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ecc f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0ecd 1c1f mrr $AR0, $AC1.M - 0ece 1943 lrri $AR3, @$AR2 - 0ecf 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ed0 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - - 0ed1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ed2 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ed3 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0ed4 fe00 movpz $ACC0 - 0ed5 1b3e srri @$AR1, $AC0.M - 0ed6 8b00 m0 // don't multiply by 2 - 0ed7 8e00 set16 - 0ed8 00fe 0433 sr @0x0433, $AC0.M - 0eda 1c1f mrr $AR0, $AC1.M - 0edb 150c lsl $ACC1, #12 - 0edc 0340 0fff andi $AC1.M, #0x0fff - 0ede 00ff 0430 sr @0x0430, $AC1.M - 0ee0 0083 043c lri $AR3, #0x043c - 0ee2 191e lrri $AC0.M, @$AR0 - 0ee3 191f lrri $AC1.M, @$AR0 - 0ee4 80a0 nx'ls : $AX0.H, $AC0.M - 0ee5 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0ee6 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0ee7 1b7f srri @$AR3, $AC1.M - 0ee8 02df ret - -// - 0ee9 1fe0 mrr $AC1.M, $AR0 - 0eea 1c1f mrr $AR0, $AC1.M - // copy buffer at 0x0580 to buffer at 0x0520? - 0eeb 1128 0ef2 bloopi #0x28, 0x0ef2 - 0eed 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0eee 1b3e srri @$AR1, $AC0.M - 0eef 1c1f mrr $AR0, $AC1.M - 0ef0 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0ef1 1b3e srri @$AR1, $AC0.M - 0ef2 1c1f mrr $AR0, $AC1.M - - 0ef3 029f 0ed8 jmp 0x0ed8 - -// - 0ef5 0083 0520 lri $AR3, #0x0520 - 0ef7 00de 0433 lr $AC0.M, @0x0433 - 0ef9 1050 loopi #0x50 - 0efa 1b7e srri @$AR3, $AC0.M - 0efb 029f 0336 jmp 0x0336 - -// - 0efd 1c20 mrr $AR1, $AR0 - 0efe 185f lrr $AC1.M, @$AR2 - 0eff 1f7f mrr $AX1.H, $AC1.M - 0f00 193a lrri $AX0.H, @$AR1 - 0f01 6400 movr $ACC0, $AX0.H - 0f02 0078 0f07 bloop $AX0.L, 0x0f07 - 0f04 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 - 0f05 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M - 0f06 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 - 0f07 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M - 0f08 1a5b srr @$AR2, $AX1.H - 0f09 02df ret - -// InitUnkTable() - 0f0a 0098 8240 lri $AX0.L, #0x8240 - 0f0c 00f8 04e8 sr @0x04e8, $AX0.L - 0f0e 0098 7fff lri $AX0.L, #0x7fff - 0f10 00f8 04e9 sr @0x04e9, $AX0.L - 0f12 0098 7dbf lri $AX0.L, #0x7dbf - 0f14 00f8 04ea sr @0x04ea, $AX0.L - 0f16 0098 843f lri $AX0.L, #0x843f - 0f18 00f8 04eb sr @0x04eb, $AX0.L - 0f1a 0098 b23b lri $AX0.L, #0xb23b - 0f1c 00f8 04f0 sr @0x04f0, $AX0.L - 0f1e 0098 7fff lri $AX0.L, #0x7fff - 0f20 00f8 04f1 sr @0x04f1, $AX0.L - 0f22 0098 4dc4 lri $AX0.L, #0x4dc4 - 0f24 00f8 04f2 sr @0x04f2, $AX0.L - 0f26 0098 d808 lri $AX0.L, #0xd808 - 0f28 00f8 04f3 sr @0x04f3, $AX0.L - 0f2a 0098 0000 lri $AX0.L, #0x0000 - 0f2c 0080 04ec lri $AR0, #0x04ec - 0f2e 1004 loopi #0x04 - 0f2f 1b18 srri @$AR0, $AX0.L - 0f30 0080 04f4 lri $AR0, #0x04f4 - 0f32 1004 loopi #0x04 - 0f33 1b18 srri @$AR0, $AX0.L - 0f34 02df ret - -// mixer? - 0f35 0080 0f40 lri $AR0, #0x0f40 - 0f37 0083 0b00 lri $AR3, #0x0b00 - 0f39 8900 clr $ACC1 - 0f3a 0f50 lris $AC1.M, #0x50 - 0f3b 0098 6784 lri $AX0.L, #0x6784 - 0f3d 02bf 010e call 0x010e - 0f3f 0080 04e8 lri $AR0, #0x04e8 - 0f41 0082 04ec lri $AR2, #0x04ec - 0f43 0081 0b00 lri $AR1, #0x0b00 - 0f45 8900 clr $ACC1 - 0f46 0f50 lris $AC1.M, #0x50 - 0f47 0080 0b00 lri $AR0, #0x0b00 - 0f49 0083 0d00 lri $AR3, #0x0d00 - 0f4b 0098 7fff lri $AX0.L, #0x7fff - 0f4d 02bf 00ff call 0x00ff - 0f4f 8900 clr $ACC1 - 0f50 0f50 lris $AC1.M, #0x50 - 0f51 0080 0b00 lri $AR0, #0x0b00 - 0f53 0083 0d60 lri $AR3, #0x0d60 - 0f55 0098 b820 lri $AX0.L, #0xb820 - 0f57 02bf 00ff call 0x00ff - 0f59 0080 0ca0 lri $AR0, #0x0ca0 - 0f5b 0083 0b00 lri $AR3, #0x0b00 - 0f5d 8900 clr $ACC1 - 0f5e 0f50 lris $AC1.M, #0x50 - 0f5f 0098 6784 lri $AX0.L, #0x6784 - 0f61 02bf 010e call 0x010e - 0f63 0080 04e8 lri $AR0, #0x04e8 - 0f65 0082 04f4 lri $AR2, #0x04f4 - 0f67 0081 0b00 lri $AR1, #0x0b00 - 0f69 8900 clr $ACC1 - 0f6a 0f50 lris $AC1.M, #0x50 - 0f6b 0080 0b00 lri $AR0, #0x0b00 - 0f6d 0083 0d00 lri $AR3, #0x0d00 - 0f6f 0098 47e0 lri $AX0.L, #0x47e0 - 0f71 02bf 00ff call 0x00ff - 0f73 8900 clr $ACC1 - 0f74 0f50 lris $AC1.M, #0x50 - 0f75 0080 0b00 lri $AR0, #0x0b00 - 0f77 0083 0d60 lri $AR3, #0x0d60 - 0f79 0098 8001 lri $AX0.L, #0x8001 - 0f7b 02bf 00ff call 0x00ff - 0f7d 02df ret - - 0f7e 0000 nop + // Memory map: + // + // 0x0D00: final right buffer #1 + // 0x0D60: final left buffer #1 + // 0x0F40: final right buffer #2 + // 0x0CA0: final left buffer #2 + + 0000 029f 0012 jmp 0x0012 // Reset() + 0002 0000 nop + 0003 0000 nop + 0004 02ff rti + 0005 0000 nop + 0006 02ff rti + 0007 0000 nop + 0008 02ff rti + 0009 0000 nop + 000a 02ff rti + 000b 0000 nop + 000c 02ff rti + 000d 0000 nop + 000e 029f 06e9 jmp 0x06e9 // Exception_0E() + + 0010 029f 004c jmp 0x004c // TaskStart() + +// Reset() + 0012 1205 sbclr #0x05 + 0013 02bf 0055 call 0x0055 + 0015 8100 clr $ACC0 + 0016 009f 1000 lri $AC1.M, #0x1000 + 0018 0080 0000 lri $AR0, #0x0000 + 001a 005f loop $AC1.M + 001b 1b1e srri @$AR0, $AC0.M + 001c 02bf 07b9 call 0x07b9 // InitGlobalVars() + 001e 02bf 0f0a call 0x0f0a // InitUnkTable() + 0020 0e00 lris $AC0.M, #0x00 + 0021 02bf 079b call 0x079b // SendMail_DCD1(0x0000) + 0023 009e 1111 lri $AC0.M, #0x1111 + 0025 02bf 07a5 call 0x07a5 // sendMail_F355(0x1111) + 0027 0e00 lris $AC0.M, #0x00 + 0028 00fe 034e sr @0x034e, $AC0.M + 002a 1305 sbset #0x05 + 002b 029f 07f6 jmp 0x07f6 // jump to MessageLoop() + +// OpcodeHandler() + 002d 00df 0357 lr $AC1.M, @0x0357 + 002f 00ff 0345 sr @0x0345, $AC1.M + 0031 00de 0356 lr $AC0.M, @0x0356 + 0033 1ffe mrr $AC1.M, $AC0.M + 0034 0340 00ff andi $AC1.M, #0x00ff + 0036 00ff 0344 sr @0x0344, $AC1.M + 0038 1479 lsr $ACC0, #-7 + 0039 0240 007e andi $AC0.M, #0x007e + 003b 00fe 0343 sr @0x0343, $AC0.M + 003d 0200 0073 addi $AC0.M, #0x0073 // Opcode jump table address (0x0073) + 003f 1c1e mrr $AR0, $AC0.M + 0040 170f jmpr $AR0 // jump to opcode handler + 0041 0092 00ff lri $CR, #0x00ff // Return address from opcode handler + 0043 0e04 lris $AC0.M, #0x04 + 0044 02bf 079b call 0x079b // SendMail_DCD1(0x0004) + 0046 00de 0356 lr $AC0.M, @0x0356 + 0048 02bf 07a5 call 0x07a5 // SendMail_F355(mail_high_part) + 004a 029f 002b jmp 0x002b // jump back to MessageLoop() + +// TaskStart() + 004c 1205 sbclr #0x05 + 004d 02bf 0055 call 0x0055 + 004f 0e01 lris $AC0.M, #0x01 + 0050 02bf 079b call 0x079b // SendMail_DCD1(0x0001) + 0052 1305 sbset #0x05 + 0053 029f 002b jmp 0x002b // jump back to MessageLoop() + +// + 0055 1202 sbclr #0x02 + 0056 1203 sbclr #0x03 + 0057 1204 sbclr #0x04 + 0058 1306 sbset #0x06 + 0059 8e00 set16 + 005a 8c00 clr15 + 005b 8b00 m0 + 005c 009e ffff lri $AC0.M, #0xffff + 005e 1d1e mrr $WR0, $AC0.M + 005f 1d3e mrr $WR1, $AC0.M + 0060 1d5e mrr $WR2, $AC0.M + 0061 1d7e mrr $WR3, $AC0.M + 0062 0092 00ff lri $CR, #0x00ff + 0064 02df ret + +// ReadWholeMessage() + 0065 0081 0358 lri $AR1, #0x0358 + 0067 0090 0000 lri $AC0.H, #0x0000 + 0069 0c00 lris $AC0.L, #0x00 + 006a 007e 006f bloop $AC0.M, 0x006f + 006c 193e lrri $AC0.M, @$AR1 + 006d 1b1e srri @$AR0, $AC0.M + 006e 193e lrri $AC0.M, @$AR1 + 006f 1b1e srri @$AR0, $AC0.M + 0070 02df ret + +// Opcode_03() (dummy) + 0071 029f 0041 jmp 0x0041 + +// Opcode jump table (16 opcodes available) + 0073 029f 0041 jmp 0x0041 // 0 (dummy) + 0075 029f 0093 jmp 0x0093 // 1 (DsetupTable) + 0077 029f 029d jmp 0x029d // 2 (SyncFrame) + 0079 029f 0071 jmp 0x0071 // 3 (dummy) + 007b 029f 0616 jmp 0x0616 // 4 () + 007d 029f 0628 jmp 0x0628 // 5 () + 007f 029f 0041 jmp 0x0041 // 6 (dummy) + 0081 029f 055f jmp 0x055f // 7 () + 0083 029f 05ab jmp 0x05ab // 8 () + 0085 029f 058f jmp 0x058f // 9 () + 0087 029f 0041 jmp 0x0041 // A (dummy) + 0089 029f 0041 jmp 0x0041 // B (dummy) + 008b 029f 0041 jmp 0x0041 // C (dummy) + 008d 029f 00bd jmp 0x00bd // D (DsetDolbyDelay) + 008f 029f 00b0 jmp 0x00b0 // E () + 0091 029f 0041 jmp 0x0041 // F (dummy) + +// Opcode_01() - DsetupTable +// Message body: 5 mails +// Mail 1: bit0-15 = max (see inner loop of SyncFrame), bit16-32 = 0, bit24-30 = command (0x01) +// Mail 2: Address in main memory of parameter blocks used during mixing; there are X blocks of 384 bytes (192 words) each +// Mail 3: Address in main memory of something (640 words copied to 0x0000) +// Mail 4: Address in main memory of something (32 words copied to 0x0300) +// Mail 5: Address in main memory of other parameter blocks; there are 4 blocks (or more?) of 32 bytes (16 words) each +// Stores the mail body to 0x0380. + 0093 0080 0380 lri $AR0, #0x0380 + 0095 0e04 lris $AC0.M, #0x04 + 0096 02bf 0065 call 0x0065 + 0098 0081 0382 lri $AR1, #0x0382 + 009a 009f 0000 lri $AC1.M, #0x0000 + 009c 0080 0280 lri $AR0, #0x0280 + 009e 02bf 05e6 call 0x05e6 // DmaCopy(0x0000, Dword[0x0382], 0x280) + 00a0 0081 0384 lri $AR1, #0x0384 + 00a2 009f 0300 lri $AC1.M, #0x0300 + 00a4 0080 0020 lri $AR0, #0x0020 + 00a6 02bf 05e6 call 0x05e6 // DmaCopy(0x0300, Dword[0x0384], 32) + 00a8 00de 0345 lr $AC0.M, @0x0345 + 00aa 00fe 0342 sr @0x0342, $AC0.M + 00ac 02bf 0d01 call 0x0d01 + 00ae 029f 0041 jmp 0x0041 + +// Opcode_0E() + 00b0 0080 037d lri $AR0, #0x037d + 00b2 0e01 lris $AC0.M, #0x01 + 00b3 02bf 0065 call 0x0065 + 00b5 00de 037d lr $AC0.M, @0x037d + 00b7 0240 7fff andi $AC0.M, #0x7fff + 00b9 00fe 037d sr @0x037d, $AC0.M + 00bb 029f 0041 jmp 0x0041 + +// Opcode_0D() - DsetDolbyDelay + 00bd 0080 0374 lri $AR0, #0x0374 + 00bf 0e01 lris $AC0.M, #0x01 + 00c0 00fe 0377 sr @0x0377, $AC0.M + 00c2 00fe 037c sr @0x037c, $AC0.M + 00c4 02bf 0065 call 0x0065 + 00c6 00de 0345 lr $AC0.M, @0x0345 + 00c8 00fe 0376 sr @0x0376, $AC0.M + 00ca 029f 0041 jmp 0x0041 + +// read PB + 00cc 0081 034c lri $AR1, #0x034c + 00ce 009f 0400 lri $AC1.M, #0x0400 + 00d0 0080 00c0 lri $AR0, #0x00c0 + 00d2 02bf 05e6 call 0x05e6 // DmaCopy(0x0400, Dword[0x034C], 192) + 00d4 02df ret + +// writeback PB + 00d5 0081 034c lri $AR1, #0x034c + 00d7 009f 0400 lri $AC1.M, #0x0400 + 00d9 0080 0080 lri $AR0, #0x0080 + 00db 0081 034c lri $AR1, #0x034c + 00dd 193e lrri $AC0.M, @$AR1 + 00de 193c lrri $AC0.L, @$AR1 + 00df 0098 0000 lri $AX0.L, #0x0000 + 00e1 7000 addaxl $ACC0, $AX0.L + 00e2 02bf 05f5 call 0x05f5 // DmaCopy(Dword[0x034C], 0x0400, 128) + 00e4 02df ret + +// + 00e5 191e lrri $AC0.M, @$AR0 + 00e6 191a lrri $AX0.H, @$AR0 + 00e7 005f loop $AC1.M + 00e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 00e9 1b7e srri @$AR3, $AC0.M + 00ea 1b7a srri @$AR3, $AX0.H + 00eb 02df ret + +// memcpy(destination, source, length) +// AR0 = source address +// AR3 = destination address +// AC1.M = length in dwords + 00ec 0000 nop + 00ed 007f 00f2 bloop $AC1.M, 0x00f2 + 00ef 191e lrri $AC0.M, @$AR0 + 00f0 1b7e srri @$AR3, $AC0.M + 00f1 191e lrri $AC0.M, @$AR0 + 00f2 1b7e srri @$AR3, $AC0.M + 00f3 0000 nop + 00f4 02df ret + +// + 00f5 191e lrri $AC0.M, @$AR0 + 00f6 191a lrri $AX0.H, @$AR0 + 00f7 007f 00fc bloop $AC1.M, 0x00fc + 00f9 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 00fa 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 00fb 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 00fc 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 00fd 0000 nop + 00fe 02df ret + +// multiply routine +// AC1.M = size in words +// AR0 = source addres +// AR3 = destination address + 00ff 8a00 m2 // multiply result by 2 + 0100 157f lsr $ACC1, #-1 // size >>= 1 (process buffers per dwords) + 0101 1c20 mrr $AR1, $AR0 // AR1 = AR0 + 0102 1c03 mrr $AR0, $AR3 // AR0 = AR3 + 0103 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++; + 0104 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 // prod = AX0.L * AX0.H; AX0.H = Mem[AR1]; AR1++; + 0105 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; AX1.H = Mem[AR3]; AR3++; + + 0106 007f 010b bloop $AC1.M, 0x010b + 0108 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 // ACC0 += AX1.H; AX0.H = Mem[AR1]; AR1++; + 0109 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; ... + 010a 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 010b 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + + 010c 8b00 m0 // don't multiply result + 010d 02df ret + +// + 010e 8a00 m2 + 010f 191a lrri $AX0.H, @$AR0 + 0110 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 + 0111 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0112 005f loop $AC1.M + 0113 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M + 0114 8b00 m0 + 0115 02df ret + +// ClearBuffers() +// clears: +// - 80 words at 0x0D00 (right buffer #1) +// - 80 words at 0x0D60 (left buffer #1) +// - 80 words at 0x0CA0 (left buffer #2) +// - 80 words at 0x0F40 (right buffer #2) +// - 80 words at 0x0FA0 +// - 80 words at 0x0A00 +// - 80 words at 0x09A0 +// - 80 words at 0x0DC8 +// - 80 words at 0x0E28 +// - 80 words at 0x0E88 +// - 80 words at 0x0EE8 +// copies: +// - 8 words from 0x0E10 to 0x0DC0 +// - 8 words from 0x0E70 to 0x0E20 +// - 8 words from 0x0ED0 to 0x0E80 +// - 8 words from 0x0F30 to 0x0EE0 + 0116 8100 clr $ACC0 + 0117 8900 clr $ACC1 + 0118 0e50 lris $AC0.M, #0x50 + 0119 0080 0d00 lri $AR0, #0x0d00 + 011b 005e loop $AC0.M + 011c 1b1f srri @$AR0, $AC1.M + 011d 0080 0d60 lri $AR0, #0x0d60 + 011f 005e loop $AC0.M + 0120 1b1f srri @$AR0, $AC1.M + 0121 00da 0374 lr $AX0.H, @0x0374 + 0123 8600 tstaxh $AX0.H + 0124 02b5 0f35 callz 0x0f35 // call this mixer if right buffer address is 0??? uh??? + 0126 8100 clr $ACC0 + 0127 8900 clr $ACC1 + 0128 0e50 lris $AC0.M, #0x50 + 0129 0080 0ca0 lri $AR0, #0x0ca0 + 012b 005e loop $AC0.M + 012c 1b1f srri @$AR0, $AC1.M + 012d 0080 0f40 lri $AR0, #0x0f40 + 012f 005e loop $AC0.M + 0130 1b1f srri @$AR0, $AC1.M + 0131 0080 0fa0 lri $AR0, #0x0fa0 + 0133 005e loop $AC0.M + 0134 1b1f srri @$AR0, $AC1.M + 0135 0080 0a00 lri $AR0, #0x0a00 + 0137 005e loop $AC0.M + 0138 1b1f srri @$AR0, $AC1.M + 0139 0080 09a0 lri $AR0, #0x09a0 + 013b 005e loop $AC0.M + 013c 1b1f srri @$AR0, $AC1.M + 013d 0f04 lris $AC1.M, #0x04 + 013e 0080 0e10 lri $AR0, #0x0e10 + 0140 0083 0dc0 lri $AR3, #0x0dc0 + 0142 02bf 00ec call 0x00ec // memcpy(0x0DC0, 0x0E10, 4); + 0144 0080 0e70 lri $AR0, #0x0e70 + 0146 0083 0e20 lri $AR3, #0x0e20 + 0148 02bf 00ec call 0x00ec // memcpy(0x0E20, 0x0E70, 4); + 014a 0080 0ed0 lri $AR0, #0x0ed0 + 014c 0083 0e80 lri $AR3, #0x0e80 + 014e 02bf 00ec call 0x00ec // memcpy(0x0E80, 0x0ED0, 4); + 0150 0080 0f30 lri $AR0, #0x0f30 + 0152 0083 0ee0 lri $AR3, #0x0ee0 + 0154 02bf 00ec call 0x00ec // memcpy(0x0EE0, 0x0F30, 4); + 0156 8100 clr $ACC0 + 0157 0e50 lris $AC0.M, #0x50 + 0158 8900 clr $ACC1 + 0159 0080 0dc8 lri $AR0, #0x0dc8 + 015b 005e loop $AC0.M + 015c 1b1f srri @$AR0, $AC1.M + 015d 0080 0e28 lri $AR0, #0x0e28 + 015f 005e loop $AC0.M + 0160 1b1f srri @$AR0, $AC1.M + 0161 0080 0e88 lri $AR0, #0x0e88 + 0163 005e loop $AC0.M + 0164 1b1f srri @$AR0, $AC1.M + 0165 0080 0ee8 lri $AR0, #0x0ee8 + 0167 005e loop $AC0.M + 0168 1b1f srri @$AR0, $AC1.M + 0169 02df ret + +// + 016a 009f 0580 lri $AC1.M, #0x0580 + 016c 009b 00a0 lri $AX1.H, #0x00a0 + 016e 0081 0393 lri $AR1, #0x0393 + 0170 18bc lrrd $AC0.L, @$AR1 // AC0.L = Mem[0x0393]; + 0171 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 // AC0.M = Mem[0x0392]; + 0172 bc00 mulxac $AX0.H, $AX1.H, $ACC0 // ACC0 += (AX0.H * AX1.H); (Mem[0x03A4] * 160) + 0173 0080 0050 lri $AR0, #0x0050 + 0175 02bf 05e8 call 0x05e8 // DmaCopy(0x0580, ((Dword[0x0392 << 16) | Dword[0x0393]) + (Mem[0x03A4] * 160), 80); + 0177 02df ret + +// + 0178 00df 03a1 lr $AC1.M, @0x03a1 + 017a 0508 addis $ACC1, #0x08 + 017b 0080 0580 lri $AR0, #0x0580 + 017d 1c7f mrr $AR3, $AC1.M + 017e 0098 7fff lri $AX0.L, #0x7fff + 0180 8900 clr $ACC1 + 0181 0f50 lris $AC1.M, #0x50 + 0182 02bf 00ff call 0x00ff // mult routine + 0184 02df ret + +// mix? + 0185 00c0 03a0 lr $AR0, @0x03a0 + 0187 191a lrri $AX0.H, @$AR0 // AX0.H = Mem[0x03A4]; + 0188 02bf 016a call 0x016a // get music? + 018a 02bf 0178 call 0x0178 + 018c 8100 clr $ACC0 + 018d 8900 clr $ACC1 + 018e 00de 0390 lr $AC0.M, @0x0390 // First word of PB: status; 1 = playing, 0 = not playing + 0190 02a0 0001 andf $AC0.M, #0x0001 + 0192 029d 019b jlz 0x019b + 0194 0080 0398 lri $AR0, #0x0398 // + 0196 0e08 lris $AC0.M, #0x08 + 0197 00c1 03a1 lr $AR1, @0x03a1 + 0199 02bf 0c43 call 0x0c43 // ??? + 019b 0f50 lris $AC1.M, #0x50 + 019c 00c0 03a1 lr $AR0, @0x03a1 + 019e 00da 0394 lr $AX0.H, @0x0394 // + 01a0 8600 tstaxh $AX0.H + 01a1 0295 01a8 jz 0x01a8 + 01a3 1c7a mrr $AR3, $AX0.H + 01a4 00d8 0395 lr $AX0.L, @0x0395 + 01a6 02bf 00ff call 0x00ff // mult routine + 01a8 0f50 lris $AC1.M, #0x50 + 01a9 00c0 03a1 lr $AR0, @0x03a1 + 01ab 00da 0396 lr $AX0.H, @0x0396 + 01ad 8600 tstaxh $AX0.H + 01ae 0295 01b5 jz 0x01b5 + 01b0 1c7a mrr $AR3, $AX0.H + 01b1 00d8 0397 lr $AX0.L, @0x0397 + 01b3 02bf 00ff call 0x00ff + 01b5 00de 0390 lr $AC0.M, @0x0390 + 01b7 02a0 0002 andf $AC0.M, #0x0002 + 01b9 02dd retlz + 01ba 0080 0398 lri $AR0, #0x0398 + 01bc 0e08 lris $AC0.M, #0x08 + 01bd 00c1 03a1 lr $AR1, @0x03a1 + 01bf 02bf 0c43 call 0x0c43 + 01c1 02df ret + +// mix background music? called by cmd 02 (SyncFrame) +// uses the 4 first PBs +// so these PBs would be for background music? + 01c2 8900 clr $ACC1 + 01c3 009f 0dc0 lri $AC1.M, #0x0dc0 + 01c5 00ff 03a1 sr @0x03a1, $AC1.M + 01c7 009f 03a8 lri $AC1.M, #0x03a8 + 01c9 00ff 03a2 sr @0x03a2, $AC1.M + 01cb 009f 03a4 lri $AC1.M, #0x03a4 + 01cd 00ff 03a0 sr @0x03a0, $AC1.M + + 01cf 1104 01ef bloopi #0x04, 0x01ef // Perform mixing for 4 PBs + 01d1 00c0 03a2 lr $AR0, @0x03a2 // Inited to 0x03A8 + 01d3 0083 0390 lri $AR3, #0x0390 + 01d5 8900 clr $ACC1 + 01d6 0f08 lris $AC1.M, #0x08 + 01d7 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8); Copy the current PB to 0x0390 + 01d9 00da 0390 lr $AX0.H, @0x0390 + 01db 8600 tstaxh $AX0.H + 01dc 0295 01e0 jz 0x01e0 // skip the call below if [0x0390] is nonzero? ([0x0390] = first word of PB, probably start/stop flag?) + 01de 02bf 0185 call 0x0185 // mix? + 01e0 8100 clr $ACC0 + 01e1 00de 03a2 lr $AC0.M, @0x03a2 + 01e3 0410 addis $ACC0, #0x10 // Increment address to next PB + 01e4 00fe 03a2 sr @0x03a2, $AC0.M + 01e6 00de 03a1 lr $AC0.M, @0x03a1 + 01e8 0460 addis $ACC0, #0x60 // Increment another value (buffer address???) + 01e9 00fe 03a1 sr @0x03a1, $AC0.M + 01eb 00de 03a0 lr $AC0.M, @0x03a0 + 01ed 7400 incm $AC0.M // Increment another value (address of something) + 01ee 00fe 03a0 sr @0x03a0, $AC0.M + + 01f0 00da 0374 lr $AX0.H, @0x0374 + 01f2 8600 tstaxh $AX0.H + 01f3 0294 0219 jnz 0x0219 + 01f5 0f50 lris $AC1.M, #0x50 + 01f6 0080 0be0 lri $AR0, #0x0be0 + 01f8 0083 0e80 lri $AR3, #0x0e80 + 01fa 0098 7fff lri $AX0.L, #0x7fff // +32767 + 01fc 02bf 00ff call 0x00ff // mult routine + 01fe 0f50 lris $AC1.M, #0x50 + 01ff 0080 0be0 lri $AR0, #0x0be0 + 0201 0083 0ee0 lri $AR3, #0x0ee0 + 0203 0098 b820 lri $AX0.L, #0xb820 // -18400 + 0205 02bf 00ff call 0x00ff // mult routine + 0207 0f28 lris $AC1.M, #0x28 + 0208 0080 0c68 lri $AR0, #0x0c68 + 020a 0083 0e80 lri $AR3, #0x0e80 + 020c 0098 b820 lri $AX0.L, #0xb820 // -18400 + 020e 02bf 00ff call 0x00ff // mult routine + 0210 0f28 lris $AC1.M, #0x28 + 0211 0080 0c68 lri $AR0, #0x0c68 + 0213 0083 0ee0 lri $AR3, #0x0ee0 + 0215 0098 7fff lri $AX0.L, #0x7fff // +32767 + 0217 02bf 00ff call 0x00ff // mult routine + // clear buffers at 0x0BE0 and 0x0C40 (80 words(160 bytes) each) + 0219 8100 clr $ACC0 + 021a 8900 clr $ACC1 + 021b 0e50 lris $AC0.M, #0x50 + 021c 0080 0be0 lri $AR0, #0x0be0 + 021e 005e loop $AC0.M + 021f 1b1f srri @$AR0, $AC1.M + 0220 0080 0c40 lri $AR0, #0x0c40 + 0222 005e loop $AC0.M + 0223 1b1f srri @$AR0, $AC1.M + 0224 02df ret + +// + 0225 00c0 03a0 lr $AR0, @0x03a0 + 0227 181a lrr $AX0.H, @$AR0 + 0228 8100 clr $ACC0 + 0229 181e lrr $AC0.M, @$AR0 + 022a 00db 0391 lr $AX1.H, @0x0391 + 022c 7400 incm $AC0.M + 022d d100 cmpar $ACC1, $AX0.H + 022e 0270 ifns + 022f 8100 clr $ACC0 + 0230 1b1e srri @$AR0, $AC0.M + 0231 00df 03a1 lr $AC1.M, @0x03a1 + 0233 009b 00a0 lri $AX1.H, #0x00a0 + 0235 0081 0393 lri $AR1, #0x0393 + 0237 18bc lrrd $AC0.L, @$AR1 + 0238 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0239 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 023a 0080 0050 lri $AR0, #0x0050 + 023c 02bf 05f5 call 0x05f5 // DmaCopy((Mem[0x0392] << 16 | Mem[0x0393]), Mem[0x03A1], 80); + 023e 02df ret + +// another mixer? + 023f 00da 0374 lr $AX0.H, @0x0374 + 0241 8600 tstaxh $AX0.H + 0242 0294 0258 jnz 0x0258 + 0244 8900 clr $ACC1 + 0245 0f28 lris $AC1.M, #0x28 + 0246 0080 0c40 lri $AR0, #0x0c40 + 0248 0083 0ea8 lri $AR3, #0x0ea8 + 024a 0098 b820 lri $AX0.L, #0xb820 + 024c 02bf 00ff call 0x00ff + 024e 8900 clr $ACC1 + 024f 0f28 lris $AC1.M, #0x28 + 0250 0080 0c40 lri $AR0, #0x0c40 + 0252 0083 0f08 lri $AR3, #0x0f08 + 0254 0098 7fff lri $AX0.L, #0x7fff + 0256 02bf 00ff call 0x00ff + 0258 009f 0dc0 lri $AC1.M, #0x0dc0 + 025a 00ff 03a1 sr @0x03a1, $AC1.M + 025c 009f 03a8 lri $AC1.M, #0x03a8 + 025e 00ff 03a2 sr @0x03a2, $AC1.M + 0260 009f 03a4 lri $AC1.M, #0x03a4 + 0262 00ff 03a0 sr @0x03a0, $AC1.M + + 0264 1104 0282 bloopi #0x04, 0x0282 + 0266 00c0 03a2 lr $AR0, @0x03a2 + 0268 0083 0390 lri $AR3, #0x0390 + 026a 0f08 lris $AC1.M, #0x08 + 026b 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8); + 026d 00da 0390 lr $AX0.H, @0x0390 + 026f 8600 tstaxh $AX0.H + 0270 0295 0274 jz 0x0274 + 0272 02bf 0225 call 0x0225 + 0274 00de 03a2 lr $AC0.M, @0x03a2 + 0276 0410 addis $ACC0, #0x10 + 0277 00fe 03a2 sr @0x03a2, $AC0.M + 0279 00de 03a1 lr $AC0.M, @0x03a1 + 027b 0460 addis $ACC0, #0x60 + 027c 00fe 03a1 sr @0x03a1, $AC0.M + 027e 00de 03a0 lr $AC0.M, @0x03a0 + 0280 7400 incm $AC0.M + 0281 00fe 03a0 sr @0x03a0, $AC0.M + + 0283 02df ret + +// CopyPBs() +// Copies some main memory region to 0x03A8 +// The memory region contains what seems to be PBs... +// Each PB is 32 bytes (16 words) long +// The transfer copies 64 words, ie 4 PBs. +// There may be more PBs, though. Dunno... + 0284 0081 0386 lri $AR1, #0x0386 // address of PBs, set by DsetupTable + 0286 009f 03a8 lri $AC1.M, #0x03a8 + 0288 0080 0040 lri $AR0, #0x0040 + 028a 02bf 05e6 call 0x05e6 // DmaCopy(0x03A8, Dword[0x0386], 64) + 028c 02df ret + +// Helper +// Increment the 32-bit value at AR0 by the value +// in AX0.L. + 028d 191e lrri $AC0.M, @$AR0 + 028e 189c lrrd $AC0.L, @$AR0 + 028f 4800 addax $ACC0, $AX0.L + 0290 1b1e srri @$AR0, $AC0.M + 0291 1b1c srri @$AR0, $AC0.L + 0292 02df ret + +// WaitForNextSyncMessage() +// Note: the wait loop continues until two values become non-equal. +// One of these values is set when sync mails are received. +// These mails, as well as 'regular' mails, are processed by the +// exception 7 handler. That's why that wait loop never checks for +// new mails. + 0293 8100 clr $ACC0 + 0294 8900 clr $ACC1 + 0295 00df 0354 lr $AC1.M, @0x0354 + 0297 00de 034e lr $AC0.M, @0x034e + 0299 8200 cmp + 029a 0293 0293 jle 0x0293 + 029c 02df ret + +// Opcode_02() - SyncFrame +// Message body: 5 mails +// Mail 1: bit0-15 = some number, bit16-32 = number of buffers to fill, bit24-30 = command (0x02) +// Mail 2: Address of right buffers in main memory (each buffer is 160 bytes long) +// Mail 3: Address of left buffers in main memory (each buffer is 160 bytes long) +// Mail 4: unused (zero) +// Mail 5: unused (zero) +// Stores the message body to 0x0388 and 0x0374. +// Performs mixing synchronously with the game. + 029d 0080 0388 lri $AR0, #0x0388 + 029f 0081 0065 lri $AR1, #0x0065 + 02a1 0e02 lris $AC0.M, #0x02 // Copy only 2 mails. The 2 last mails are unused. + 02a2 173f callr $AR1 // Copy message body to 0x0388 + 02a3 02bf 0476 call 0x0476 // Copy message body to 0x0374 + 02a5 00de 0344 lr $AC0.M, @0x0344 + 02a7 00fe 0341 sr @0x0341, $AC0.M + 02a9 00de 0345 lr $AC0.M, @0x0345 + 02ab 00fe 038e sr @0x038e, $AC0.M // Mem[0x038E] = Mem[0x0345] (set by DsetupTable) + 02ad 8100 clr $ACC0 + 02ae 00fe 0355 sr @0x0355, $AC0.M + 02b0 02bf 0284 call 0x0284 // Copy 4 PBs to 0x03A8 + 02b2 0092 00ff lri $CR, #0x00ff + 02b4 00de 0341 lr $AC0.M, @0x0341 + + 02b6 007e 0471 bloop $AC0.M, 0x0471 // Outer loop: for(i = 0; i < number_of_buffers; i++) + 02b8 02bf 0116 call 0x0116 // ClearBuffers() + 02ba 02bf 01c2 call 0x01c2 // ??? mix background music? echo processing? + 02bc 02bf 04e2 call 0x04e2 // ??? again a mixer? + 02be 02bf 0a91 call 0x0a91 // ??? multiplications + 02c0 00de 0355 lr $AC0.M, @0x0355 + 02c2 7400 incm $AC0.M // increment some counter + 02c3 00fe 0355 sr @0x0355, $AC0.M + 02c5 8100 clr $ACC0 + 02c6 00fe 0354 sr @0x0354, $AC0.M // reset some counter + 02c8 00de 0342 lr $AC0.M, @0x0342 + + 02ca 007e 0415 bloop $AC0.M, 0x0415 // Inner loop: for(j = 0; j < max (usually 64; set by DsetupTable); j++) + 02cc 02bf 0293 call 0x0293 // WaitForNextSyncMessage() + 02ce 8100 clr $ACC0 + 02cf 8900 clr $ACC1 + 02d0 00de 0354 lr $AC0.M, @0x0354 + 02d2 147c lsr $ACC0, #-4 + 02d3 0200 04fc addi $AC0.M, #0x04fc + 02d5 1c1e mrr $AR0, $AC0.M + 02d6 181f lrr $AC1.M, @$AR0 + 02d7 00de 0354 lr $AC0.M, @0x0354 + 02d9 0240 000f andi $AC0.M, #0x000f + 02db 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M + 02dc 03c0 8000 andcf $AC1.M, #0x8000 + 02de 029c 0411 jlnz 0x0411 // skip if (AC1.M & 0x8000) != 0x8000 + 02e0 00d8 0354 lr $AX0.L, @0x0354 + 02e2 009a 0180 lri $AX0.H, #0x0180 + 02e4 8100 clr $ACC0 + 02e5 00de 0380 lr $AC0.M, @0x0380 + 02e7 00dc 0381 lr $AC0.L, @0x0381 + 02e9 9000 mul $AX0.L, $AX0.H + 02ea 9400 mulac $AX0.L, $AX0.H, $ACC0 // ACC0 += (j * 384); + 02eb 00fe 034c sr @0x034c, $AC0.M + 02ed 00fc 034d sr @0x034d, $AC0.L + 02ef 02bf 00cc call 0x00cc // read PB; dma transfer from (Dword[0x0380] + (j*384)) to 0x0400, 192 words + 02f1 00da 0400 lr $AX0.H, @0x0400 + 02f3 8600 tstaxh $AX0.H + 02f4 0295 0411 jz 0x0411 // skip if Mem[0x0400] is zero + 02f6 00da 0401 lr $AX0.H, @0x0401 + 02f8 8600 tstaxh $AX0.H + 02f9 0294 0411 jnz 0x0411 // skip if Mem[0x0401] is nonzero + 02fb 00da 0433 lr $AX0.H, @0x0433 + 02fd 00fa 03f8 sr @0x03f8, $AX0.H // Mem[0x03F8] = Mem[0x0433] + 02ff 00da 0406 lr $AX0.H, @0x0406 + 0301 8600 tstaxh $AX0.H + 0302 0294 0ef5 jnz 0x0ef5 // jump to 0x0EF5 if Mem[0x0406] is nonzero + 0304 8100 clr $ACC0 + 0305 00de 0480 lr $AC0.M, @0x0480 // switch (Mem[0x0480]) ; sound format? + 0307 0609 cmpis $ACC0, #0x09 // case 0x09: (smg) + 0308 0295 031b jz 0x031b + 030a 0605 cmpis $ACC0, #0x05 // case 0x05: + 030b 0295 031b jz 0x031b + 030d 0608 cmpis $ACC0, #0x08 // case 0x08: + 030e 0295 0ac1 jz 0x0ac1 + 0310 0610 cmpis $ACC0, #0x10 // case 0x10: (smg) + 0311 0295 0b3e jz 0x0b3e + 0313 0620 cmpis $ACC0, #0x20 // case 0x20: + 0314 0295 0baf jz 0x0baf + 0316 0621 cmpis $ACC0, #0x21 // case 0x21: + 0317 0295 0bb7 jz 0x0bb7 + 0319 029f 09ae jmp 0x09ae // default: + // sound types 9 and 5 + // no compression? + 031b 00d8 0402 lr $AX0.L, @0x0402 // 0x0D71 + 031d 8100 clr $ACC0 + 031e 8900 clr $ACC1 + 031f 00dc 0430 lr $AC0.L, @0x0430 // 0x0000 + 0321 8d00 set15 + 0322 0950 lris $AX1.L, #0x50 + 0323 a000 mulx $AX0.L, $AX1.L + 0324 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0325 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0430] + (Mem[0x0402] * 80)) << 4; (AC0.L = 0x3500; AC0.M = 0x0043; AC0.H = 0x00;) + 0326 8c00 clr15 + 0327 1ffe mrr $AC1.M, $AC0.M // AC1.M = 0x0043; + 0328 0083 0580 lri $AR3, #0x0580 // AR3 = 0x0580; + 032a 02bf 086e call 0x086e + 032c 029f 032e jmp 0x032e + + 032e 0080 0580 lri $AR0, #0x0580 + 0330 0081 0520 lri $AR1, #0x0520 + 0332 0099 0000 lri $AX1.L, #0x0000 + 0334 02bf 0e75 call 0x0e75 // store ramp + + 0336 009e 0520 lri $AC0.M, #0x0520 + 0338 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] = 0x0520; + 033a 8900 clr $ACC1 + 033b 00df 0484 lr $AC1.M, @0x0484 + 033d 0340 001f andi $AC1.M, #0x001f + 033f b900 tst $ACC1 + 0340 0295 0366 jz 0x0366 + 0342 00de 038f lr $AC0.M, @0x038f + 0344 5c00 sub $ACC0, $AC1.L + 0345 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] -= AC1.L; uh? + 0347 1c7e mrr $AR3, $AC0.M + 0348 0080 0440 lri $AR0, #0x0440 + 034a 05fe addis $ACC1, #0xfe + 034b 02bf 00e5 call 0x00e5 // ??? + 034d 0080 0490 lri $AR0, #0x0490 + 034f 00c1 038f lr $AR1, @0x038f + 0351 8900 clr $ACC1 + 0352 00df 0484 lr $AC1.M, @0x0484 + 0354 0340 001f andi $AC1.M, #0x001f + 0356 02bf 0c62 call 0x0c62 // ??? + 0358 00de 038f lr $AC0.M, @0x038f + 035a 0450 addis $ACC0, #0x50 + 035b 1c1e mrr $AR0, $AC0.M + 035c 0083 0440 lri $AR3, #0x0440 + 035e 8900 clr $ACC1 + 035f 00df 0484 lr $AC1.M, @0x0484 + 0361 0340 001f andi $AC1.M, #0x001f + 0363 05fe addis $ACC1, #0xfe + 0364 02bf 00e5 call 0x00e5 // ??? + + 0366 00de 0484 lr $AC0.M, @0x0484 + 0368 0240 0020 andi $AC0.M, #0x0020 + 036a 0295 0388 jz 0x0388 + 036c 0080 04a4 lri $AR0, #0x04a4 + 036e 00c1 038f lr $AR1, @0x038f + 0370 0082 0454 lri $AR2, #0x0454 + 0372 0083 04a7 lri $AR3, #0x04a7 + 0374 18fa lrrd $AX0.H, @$AR3 + 0375 8600 tstaxh $AX0.H + 0376 0294 0386 jnz 0x0386 + 0378 18fa lrrd $AX0.H, @$AR3 + 0379 8600 tstaxh $AX0.H + 037a 0294 0386 jnz 0x0386 + 037c 18fa lrrd $AX0.H, @$AR3 + 037d 8600 tstaxh $AX0.H + 037e 0294 0386 jnz 0x0386 + 0380 8100 clr $ACC0 + 0381 18fe lrrd $AC0.M, @$AR3 + 0382 0280 7fff cmpi $AC0.M, #0x7fff + 0384 0295 0388 jz 0x0388 + 0386 02bf 0c7d call 0x0c7d // ??? + + 0388 8100 clr $ACC0 + 0389 00de 042c lr $AC0.M, @0x042c // 0x0001 + 038b b100 tst $ACC0 + 038c 0295 0392 jz 0x0392 + 038e 02bf 0dc3 call 0x0dc3 // ??? + 0390 029f 0407 jmp 0x0407 + + 0392 8100 clr $ACC0 + 0393 1c9e mrr $IX0, $AC0.M + 0394 1cde mrr $IX2, $AC0.M + 0395 7400 incm $AC0.M + 0396 1cfe mrr $IX3, $AC0.M + 0397 8100 clr $ACC0 + 0398 00de 0407 lr $AC0.M, @0x0407 + 039a b100 tst $ACC0 + 039b 0295 03aa jz 0x03aa + 039d 00c3 038f lr $AR3, @0x038f + 039f 0007 dar $AR3 + 03a0 0080 0477 lri $AR0, #0x0477 + 03a2 0084 ffff lri $IX0, #0xffff + 03a4 0087 ffff lri $IX3, #0xffff + 03a6 199a lrrn $AX0.H, @$AR0 + 03a7 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + 03a8 005e loop $AC0.M + 03a9 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + 03aa 00da 0485 lr $AX0.H, @0x0485 + 03ac 8600 tstaxh $AX0.H + 03ad 0295 03c0 jz 0x03c0 + 03af 8900 clr $ACC1 + 03b0 0086 0005 lri $IX2, #0x0005 + 03b2 0082 040a lri $AR2, #0x040a + + 03b4 1106 03b8 bloopi #0x06, 0x03b8 + 03b6 18de lrrd $AC0.M, @$AR2 + 03b7 147f lsr $ACC0, #-1 + 03b8 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M + + 03b9 b900 tst $ACC1 + 03ba 0294 03c0 jnz 0x03c0 + 03bc 009a 0001 lri $AX0.H, #0x0001 + 03be 00fa 0401 sr @0x0401, $AX0.H // Key Off + 03c0 8f00 set40 + 03c1 0086 0002 lri $IX2, #0x0002 + 03c3 0082 0408 lri $AR2, #0x0408 + + 03c5 1106 03f0 bloopi #0x06, 0x03f0 + 03c7 8100 clr $ACC0 + 03c8 195e lrri $AC0.M, @$AR2 + 03c9 1200 sbclr #0x00 + 03ca b100 tst $ACC0 + 03cb 0275 ifz + 03cc 1300 sbset #0x00 + 03cd 1c7e mrr $AR3, $AC0.M + 03ce 195e lrri $AC0.M, @$AR2 + 03cf 195f lrri $AC1.M, @$AR2 + 03d0 5c00 sub $ACC0, $AC1.L + 03d1 14fb asr $ACC0, #-5 + 03d2 1f5e mrr $AX0.H, $AC0.M + 03d3 1f1c mrr $AX0.L, $AC0.L + 03d4 185e lrr $AC0.M, @$AR2 + 03d5 0240 00ff andi $AC0.M, #0x00ff + 03d7 1f7e mrr $AX1.H, $AC0.M + 03d8 185e lrr $AC0.M, @$AR2 + 03d9 1478 lsr $ACC0, #-8 + 03da 009c 0000 lri $AC0.L, #0x0000 + 03dc d100 cmpar $ACC1, $AX0.H + 03dd 0295 03e5 jz 0x03e5 + 03df 185e lrr $AC0.M, @$AR2 + 03e0 0272 ifg + 03e1 7400 incm $AC0.M + 03e2 0271 ifs + 03e3 7800 decm $AC0.M + 03e4 1a5e srr @$AR2, $AC0.M + 03e5 0006 dar $AR2 + 03e6 00de 038f lr $AC0.M, @0x038f + 03e8 5600 subr $ACC0, $AX1.H + 03e9 029d 03ee jlz 0x03ee + 03eb 1c1e mrr $AR0, $AC0.M + 03ec 02bf 0d99 call 0x0d99 // ??? + 03ee 0000 nop + 03ef 1b5f srri @$AR2, $AC1.M + 03f0 000a iar $AR2 + + 03f1 8e00 set16 + 03f2 8100 clr $ACC0 + 03f3 00de 0407 lr $AC0.M, @0x0407 + 03f5 b100 tst $ACC0 + 03f6 0295 0407 jz 0x0407 + 03f8 00c3 038f lr $AR3, @0x038f + 03fa 0087 004f lri $IX3, #0x004f + 03fc 001f addarn $AR3, $IX3 + 03fd 0080 0477 lri $AR0, #0x0477 + 03ff 0084 ffff lri $IX0, #0xffff + 0401 0087 ffff lri $IX3, #0xffff + 0403 19fa lrrn $AX0.H, @$AR3 + 0404 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 0405 005e loop $AC0.M + 0406 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + + 0407 00da 0406 lr $AX0.H, @0x0406 + 0409 8600 tstaxh $AX0.H + 040a 0294 040f jnz 0x040f // skip zeroing of Mem[0x0404] if Mem[0x0406] is nonzero + 040c 8100 clr $ACC0 + 040d 00fe 0404 sr @0x0404, $AC0.M // Mem[0x0404] = 0x0000; + 040f 02bf 00d5 call 0x00d5 // write back PB + 0411 00de 0354 lr $AC0.M, @0x0354 + 0413 7400 incm $AC0.M // increment some counter + 0414 00fe 0354 sr @0x0354, $AC0.M + // end of inner loop + 0416 0e00 lris $AC0.M, #0x00 + 0417 00fe 034e sr @0x034e, $AC0.M + 0419 0e04 lris $AC0.M, #0x04 + 041a 02bf 079b call 0x079b // SendMail_DCD1(0x0004) + 041c 00de 0355 lr $AC0.M, @0x0355 + 041e 0260 ff00 ori $AC0.M, #0xff00 + 0420 02bf 07a5 call 0x07a5 // SendMail_F355(0xFF00 | Mem[0x0355]) + 0422 02bf 0d1f call 0x0d1f // ??? + 0424 02bf 0d31 call 0x0d31 // ??? + 0426 02bf 0d86 call 0x0d86 // perform mults on buffer #1 + 0428 00de 0341 lr $AC0.M, @0x0341 + 042a 7800 decm $AC0.M // decrement some counter + 042b 00fe 0341 sr @0x0341, $AC0.M + 042d 0080 09a0 lri $AR0, #0x09a0 + 042f 0083 0d00 lri $AR3, #0x0d00 + 0431 0f50 lris $AC1.M, #0x50 + 0432 0098 5a82 lri $AX0.L, #0x5a82 + 0434 02bf 00ff call 0x00ff // operations on right buffer + 0436 0080 09a0 lri $AR0, #0x09a0 + 0438 0083 0d60 lri $AR3, #0x0d60 + 043a 0f50 lris $AC1.M, #0x50 + 043b 02bf 00ff call 0x00ff // operations on left buffer + 043d 0083 0d00 lri $AR3, #0x0d00 + 043f 02bf 0db1 call 0x0db1 // operations on right buffer + 0441 0081 0388 lri $AR1, #0x0388 + 0443 009f 0d00 lri $AC1.M, #0x0d00 + 0445 0080 0050 lri $AR0, #0x0050 + 0447 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0388], 0x0D00, 80); Copy the final right buffer to main memory + 0449 0080 0fa0 lri $AR0, #0x0fa0 + 044b 0083 0d60 lri $AR3, #0x0d60 + 044d 0f50 lris $AC1.M, #0x50 + 044e 0098 8000 lri $AX0.L, #0x8000 + 0450 02bf 00ff call 0x00ff // operations on left buffer (uh? again?) + 0452 0083 0d60 lri $AR3, #0x0d60 + 0454 02bf 0db1 call 0x0db1 // operations on left buffer + 0456 0081 038a lri $AR1, #0x038a + 0458 009f 0d60 lri $AC1.M, #0x0d60 + 045a 0080 0050 lri $AR0, #0x0050 + 045c 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x038A], 0x0D60, 80); Copy the final left buffer to main memory + 045e 009a 0000 lri $AX0.H, #0x0000 + 0460 0098 00a0 lri $AX0.L, #0x00a0 + 0462 0080 0388 lri $AR0, #0x0388 + 0464 02bf 028d call 0x028d // Increment right buffer address + 0466 0080 038a lri $AR0, #0x038a + 0468 02bf 028d call 0x028d // Increment left buffer address + 046a 02bf 023f call 0x023f // call that other mixer + 046c 02bf 04b1 call 0x04b1 + 046e 02bf 0488 call 0x0488 // copy other buffers to main memory + 0470 0000 nop + 0471 0000 nop + // end of outer loop + 0472 0080 002b lri $AR0, #0x002b + 0474 029f 0734 jmp 0x0734 + +// copy the message body to 0x0374 + 0476 0080 0374 lri $AR0, #0x0374 + 0478 0e02 lris $AC0.M, #0x02 + 0479 02bf 0067 call 0x0067 + 047b 00de 0374 lr $AC0.M, @0x0374 + 047d 0240 7fff andi $AC0.M, #0x7fff + 047f 00fe 0374 sr @0x0374, $AC0.M + 0481 00de 0376 lr $AC0.M, @0x0376 + 0483 0240 7fff andi $AC0.M, #0x7fff + 0485 00fe 0376 sr @0x0376, $AC0.M + 0487 02df ret + +// copy other buffers to main memory +// that's probably why the mail body of cmd 0x02 is copied +// to two locations... + 0488 00da 0374 lr $AX0.H, @0x0374 + 048a 8600 tstaxh $AX0.H // Return immediately if right buffer address is zero + 048b 02d5 retz // But what happens if the left buffer address is zero? + 048c 0083 0f40 lri $AR3, #0x0f40 + 048e 02bf 0db1 call 0x0db1 // copy right buffer + 0490 0083 0ca0 lri $AR3, #0x0ca0 + 0492 02bf 0db1 call 0x0db1 // copy left buffer + 0494 0081 0374 lri $AR1, #0x0374 + 0496 009f 0f40 lri $AC1.M, #0x0f40 + 0498 0080 0050 lri $AR0, #0x0050 + 049a 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0374], 0x0F40, 80); Right buffer + 049c 0081 0376 lri $AR1, #0x0376 + 049e 009f 0ca0 lri $AC1.M, #0x0ca0 + 04a0 0080 0050 lri $AR0, #0x0050 + 04a2 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0376], 0x0CA0, 80); Left buffer + 04a4 009a 0000 lri $AX0.H, #0x0000 + 04a6 0098 00a0 lri $AX0.L, #0x00a0 + 04a8 0080 0374 lri $AR0, #0x0374 + 04aa 02bf 028d call 0x028d // Increment right buffer address + 04ac 0080 0376 lri $AR0, #0x0376 + 04ae 02bf 028d call 0x028d // Increment left buffer address + 04b0 02df ret + +// + 04b1 00da 0374 lr $AX0.H, @0x0374 + 04b3 8600 tstaxh $AX0.H + 04b4 02d5 retz + 04b5 009f 0be0 lri $AC1.M, #0x0be0 + 04b7 00ff 03a1 sr @0x03a1, $AC1.M + 04b9 00df 03ca lr $AC1.M, @0x03ca + 04bb 00ff 0392 sr @0x0392, $AC1.M + 04bd 00df 03cb lr $AC1.M, @0x03cb + 04bf 00ff 0393 sr @0x0393, $AC1.M + 04c1 009f 03a6 lri $AC1.M, #0x03a6 + 04c3 00ff 03a0 sr @0x03a0, $AC1.M + 04c5 00df 03c9 lr $AC1.M, @0x03c9 + 04c7 00ff 0391 sr @0x0391, $AC1.M + 04c9 02bf 0225 call 0x0225 + 04cb 009f 0c40 lri $AC1.M, #0x0c40 + 04cd 00ff 03a1 sr @0x03a1, $AC1.M + 04cf 00df 03da lr $AC1.M, @0x03da + 04d1 00ff 0392 sr @0x0392, $AC1.M + 04d3 00df 03db lr $AC1.M, @0x03db + 04d5 00ff 0393 sr @0x0393, $AC1.M + 04d7 009f 03a7 lri $AC1.M, #0x03a7 + 04d9 00ff 03a0 sr @0x03a0, $AC1.M + 04db 00df 03d9 lr $AC1.M, @0x03d9 + 04dd 00ff 0391 sr @0x0391, $AC1.M + 04df 02bf 0225 call 0x0225 + 04e1 02df ret + +// mixer? + 04e2 00da 0374 lr $AX0.H, @0x0374 // Check if right buffer address is zero + 04e4 8600 tstaxh $AX0.H + 04e5 02d5 retz + 04e6 00da 03d8 lr $AX0.H, @0x03d8 // uh? + 04e8 8600 tstaxh $AX0.H + 04e9 02d5 retz + 04ea 0083 0be0 lri $AR3, #0x0be0 + 04ec 0080 0c30 lri $AR0, #0x0c30 + 04ee 0f04 lris $AC1.M, #0x04 + 04ef 02bf 00ec call 0x00ec // memcpy(0x0BE0, 0x0C30, 4); + 04f1 0083 0c40 lri $AR3, #0x0c40 + 04f3 0080 0c90 lri $AR0, #0x0c90 + 04f5 0f04 lris $AC1.M, #0x04 + 04f6 02bf 00ec call 0x00ec // memcpy(0x0C40, 0x0C90, 4); + 04f8 00df 03ca lr $AC1.M, @0x03ca + 04fa 00ff 0392 sr @0x0392, $AC1.M + 04fc 00df 03cb lr $AC1.M, @0x03cb + 04fe 00ff 0393 sr @0x0393, $AC1.M + 0500 00df 03a6 lr $AC1.M, @0x03a6 + 0502 7500 incm $AC1.M + 0503 1f5f mrr $AX0.H, $AC1.M + 0504 009f 0be8 lri $AC1.M, #0x0be8 + 0506 02bf 016c call 0x016c + 0508 00df 03da lr $AC1.M, @0x03da + 050a 00ff 0392 sr @0x0392, $AC1.M + 050c 00df 03db lr $AC1.M, @0x03db + 050e 00ff 0393 sr @0x0393, $AC1.M + 0510 00df 03a7 lr $AC1.M, @0x03a7 + 0512 7500 incm $AC1.M + 0513 1f5f mrr $AX0.H, $AC1.M + 0514 009f 0c48 lri $AC1.M, #0x0c48 + 0516 02bf 016c call 0x016c + 0518 00de 03c8 lr $AC0.M, @0x03c8 + 051a 02a0 0001 andf $AC0.M, #0x0001 + 051c 029d 0525 jlz 0x0525 + 051e 0080 03d0 lri $AR0, #0x03d0 + 0520 0e08 lris $AC0.M, #0x08 + 0521 0081 0be0 lri $AR1, #0x0be0 + 0523 02bf 0c43 call 0x0c43 + 0525 00de 03d8 lr $AC0.M, @0x03d8 + 0527 02a0 0001 andf $AC0.M, #0x0001 + 0529 029d 0532 jlz 0x0532 + 052b 0080 03e0 lri $AR0, #0x03e0 + 052d 0e08 lris $AC0.M, #0x08 + 052e 0081 0c40 lri $AR1, #0x0c40 + 0530 02bf 0c43 call 0x0c43 + 0532 0f50 lris $AC1.M, #0x50 + 0533 0080 0be0 lri $AR0, #0x0be0 + 0535 0083 0f40 lri $AR3, #0x0f40 + 0537 00d8 03cd lr $AX0.L, @0x03cd + 0539 02bf 00ff call 0x00ff + 053b 0f50 lris $AC1.M, #0x50 + 053c 0080 0c40 lri $AR0, #0x0c40 + 053e 0083 0ca0 lri $AR3, #0x0ca0 + 0540 00d8 03df lr $AX0.L, @0x03df + 0542 02bf 00ff call 0x00ff + 0544 00de 03c8 lr $AC0.M, @0x03c8 + 0546 02a0 0002 andf $AC0.M, #0x0002 + 0548 029d 0551 jlz 0x0551 + 054a 0080 03d0 lri $AR0, #0x03d0 + 054c 0e08 lris $AC0.M, #0x08 + 054d 0081 0be0 lri $AR1, #0x0be0 + 054f 02bf 0c43 call 0x0c43 + 0551 00de 03d8 lr $AC0.M, @0x03d8 + 0553 02a0 0002 andf $AC0.M, #0x0002 + 0555 029d 055e jlz 0x055e + 0557 0080 03e0 lri $AR0, #0x03e0 + 0559 0e08 lris $AC0.M, #0x08 + 055a 0081 0c40 lri $AR1, #0x0c40 + 055c 02bf 0c43 call 0x0c43 + 055e 02df ret + +// Opcode_07() - + 055f 0080 0346 lri $AR0, #0x0346 + 0561 02bf 0065 call 0x0065 + 0563 02bf 0065 call 0x0065 + 0565 0081 0346 lri $AR1, #0x0346 + 0567 193e lrri $AC0.M, @$AR1 + 0568 193c lrri $AC0.L, @$AR1 + 0569 009f 0400 lri $AC1.M, #0x0400 + 056b 00c0 0345 lr $AR0, @0x0345 + 056d 02bf 05e8 call 0x05e8 + 056f 0081 0348 lri $AR1, #0x0348 + 0571 193e lrri $AC0.M, @$AR1 + 0572 193c lrri $AC0.L, @$AR1 + 0573 009f 0800 lri $AC1.M, #0x0800 + 0575 00c0 0345 lr $AR0, @0x0345 + 0577 02bf 05e8 call 0x05e8 + 0579 0081 0346 lri $AR1, #0x0346 + 057b 193e lrri $AC0.M, @$AR1 + 057c 193c lrri $AC0.L, @$AR1 + 057d 009f 0800 lri $AC1.M, #0x0800 + 057f 00c0 0345 lr $AR0, @0x0345 + 0581 02bf 05f5 call 0x05f5 + 0583 0081 0348 lri $AR1, #0x0348 + 0585 193e lrri $AC0.M, @$AR1 + 0586 193c lrri $AC0.L, @$AR1 + 0587 009f 0400 lri $AC1.M, #0x0400 + 0589 00c0 0345 lr $AR0, @0x0345 + 058b 02bf 05f5 call 0x05f5 + 058d 029f 0041 jmp 0x0041 + +// Opcode_09() - + 058f 0080 0346 lri $AR0, #0x0346 + 0591 02bf 0065 call 0x0065 + 0593 02bf 0065 call 0x0065 + 0595 0081 0346 lri $AR1, #0x0346 + 0597 193e lrri $AC0.M, @$AR1 + 0598 193c lrri $AC0.L, @$AR1 + 0599 009f 0400 lri $AC1.M, #0x0400 + 059b 00c0 0345 lr $AR0, @0x0345 + 059d 02bf 05e8 call 0x05e8 + 059f 0081 0348 lri $AR1, #0x0348 + 05a1 193e lrri $AC0.M, @$AR1 + 05a2 193c lrri $AC0.L, @$AR1 + 05a3 009f 0400 lri $AC1.M, #0x0400 + 05a5 00c0 0345 lr $AR0, @0x0345 + 05a7 02bf 05f5 call 0x05f5 + 05a9 029f 0041 jmp 0x0041 + +// Opcode_08() - + 05ab 0080 0346 lri $AR0, #0x0346 + 05ad 02bf 0065 call 0x0065 + 05af 02bf 0065 call 0x0065 + 05b1 0081 0346 lri $AR1, #0x0346 + 05b3 193e lrri $AC0.M, @$AR1 + 05b4 193c lrri $AC0.L, @$AR1 + 05b5 009f 0400 lri $AC1.M, #0x0400 + 05b7 00c0 0344 lr $AR0, @0x0344 + 05b9 02bf 05e8 call 0x05e8 + 05bb 0081 0348 lri $AR1, #0x0348 + 05bd 193e lrri $AC0.M, @$AR1 + 05be 193c lrri $AC0.L, @$AR1 + 05bf 009f 0800 lri $AC1.M, #0x0800 + 05c1 00c0 0344 lr $AR0, @0x0344 + 05c3 02bf 05e8 call 0x05e8 + 05c5 0080 0400 lri $AR0, #0x0400 + 05c7 0083 0800 lri $AR3, #0x0800 + 05c9 0084 0000 lri $IX0, #0x0000 + 05cb 00da 0345 lr $AX0.H, @0x0345 + 05cd 00df 0344 lr $AC1.M, @0x0344 + 05cf 8f00 set40 + 05d0 197b lrri $AX1.H, @$AR3 + 05d1 b800 mulx $AX0.H, $AX1.H + 05d2 197b lrri $AX1.H, @$AR3 + 05d3 007f 05d8 bloop $AC1.M, 0x05d8 + 05d5 199e lrrn $AC0.M, @$AR0 + 05d6 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 05d7 80b2 nx'sl : $AC0.M, $AX1.H + 05d8 0000 nop + 05d9 8e00 set16 + 05da 0081 0346 lri $AR1, #0x0346 + 05dc 193e lrri $AC0.M, @$AR1 + 05dd 193c lrri $AC0.L, @$AR1 + 05de 009f 0400 lri $AC1.M, #0x0400 + 05e0 00c0 0344 lr $AR0, @0x0344 + 05e2 02bf 05f5 call 0x05f5 + 05e4 029f 0041 jmp 0x0041 + +// DmaCopy(destination, source, len) +// AR1 = source: pointer to the main memory (32-bit) address +// AC1.M = destination: DSP memory address +// AR0 = len: length in words + 05e6 193e lrri $AC0.M, @$AR1 + 05e7 193c lrri $AC0.L, @$AR1 + 05e8 2fcd srs @DSPA, $AC1.M + 05e9 0f00 lris $AC1.M, #0x00 + 05ea 2fc9 srs @DSCR, $AC1.M + 05eb 2ece srs @DSMAH, $AC0.M + 05ec 2ccf srs @DSMAL, $AC0.L + 05ed 1fe0 mrr $AC1.M, $AR0 + 05ee 1501 lsl $ACC1, #1 + 05ef 2fcb srs @DSBL, $AC1.M + 05f0 02bf 05f9 call 0x05f9 + 05f2 02df ret + +// DmaCopy(destination, source, len) +// AR1 = destination: pointer to the main memory (32-bit) address +// AC1.M = source: DSP memory address +// AR0 = len: length in words + 05f3 193e lrri $AC0.M, @$AR1 + 05f4 193c lrri $AC0.L, @$AR1 + 05f5 2fcd srs @DSPA, $AC1.M + 05f6 0f01 lris $AC1.M, #0x01 + 05f7 029f 05ea jmp 0x05ea + +// wait for dma completion? + 05f9 26c9 lrs $AC0.M, @DSCR + 05fa 02a0 0004 andf $AC0.M, #0x0004 + 05fc 029c 05f9 jlnz 0x05f9 + 05fe 02df ret + +// unused dma routine + 05ff 193e lrri $AC0.M, @$AR1 + 0600 193c lrri $AC0.L, @$AR1 + 0601 00ff ffcd sr @DSPA, $AC1.M + 0603 0f00 lris $AC1.M, #0x00 + 0604 00ff ffc9 sr @DSCR, $AC1.M + 0606 00fe ffce sr @DSMAH, $AC0.M + 0608 00fc ffcf sr @DSMAL, $AC0.L + 060a 1fe0 mrr $AC1.M, $AR0 + 060b 1501 lsl $ACC1, #1 + 060c 00ff ffcb sr @DSBL, $AC1.M + 060e 02df ret + +// + 060f 00de ffc9 lr $AC0.M, @DSCR + 0611 02a0 0004 andf $AC0.M, #0x0004 + 0613 029c 060f jlnz 0x060f + 0615 02df ret + +// Opcode_04() - + 0616 0080 0346 lri $AR0, #0x0346 + 0618 02bf 0065 call 0x0065 + 061a 02bf 0065 call 0x0065 // wtf? + 061c 0081 0346 lri $AR1, #0x0346 + 061e 00df 0349 lr $AC1.M, @0x0349 + 0620 0340 ffff andi $AC1.M, #0xffff + 0622 00c0 0345 lr $AR0, @0x0345 + 0624 02bf 05e6 call 0x05e6 // DmaCopy(0x0349, Dword[0x0346], Mem[0x0345]) + 0626 029f 0041 jmp 0x0041 + +// Opcode_05() - + 0628 0080 0346 lri $AR0, #0x0346 + 062a 02bf 0065 call 0x0065 + 062c 02bf 0065 call 0x0065 // wtf? + 062e 0081 0346 lri $AR1, #0x0346 + 0630 00df 0349 lr $AC1.M, @0x0349 + 0632 0340 ffff andi $AC1.M, #0xffff + 0634 00c0 0345 lr $AR0, @0x0345 + 0636 02bf 05f3 call 0x05f3 + 0638 029f 0041 jmp 0x0041 + +// ReadSoundData(addr) +// AC0.M:AC0.L = main memory address +// read 128 samples of PCM8 sound from main memory to DSP memory at 0x0B00 + 063a 1ffc mrr $AC1.M, $AC0.L + 063b 0340 001f andi $AC1.M, #0x001f + 063d 00ff 037f sr @0x037f, $AC1.M + 063f 1ffc mrr $AC1.M, $AC0.L + 0640 0340 ffe0 andi $AC1.M, #0xffe0 + 0642 1f9f mrr $AC0.L, $AC1.M + 0643 00df 037d lr $AC1.M, @0x037d + 0645 00dd 037e lr $AC1.L, @0x037e + 0647 4c00 add $ACC0, $AC1.L + 0648 00fe ffce sr @DSMAH, $AC0.M + 064a 00fc ffcf sr @DSMAL, $AC0.L + 064c 0f00 lris $AC1.M, #0x00 + 064d 00ff ffc9 sr @DSCR, $AC1.M + 064f 009f 0b20 lri $AC1.M, #0x0b20 + 0651 00ff ffcd sr @DSPA, $AC1.M + 0653 0f40 lris $AC1.M, #0x40 + 0654 00ff ffcb sr @DSBL, $AC1.M + 0656 00de ffc9 lr $AC0.M, @DSCR + 0658 02a0 0004 andf $AC0.M, #0x0004 + 065a 029c 0656 jlnz 0x0656 + 065c 1fe1 mrr $AC1.M, $AR1 + 065d 0081 0b00 lri $AR1, #0x0b00 // Dst = 0x0B00; + 065f 0080 0b20 lri $AR0, #0x0b20 // Src = 0x0B20; + // for(i = 0; i < 32; i++) + 0661 1120 066a bloopi #0x20, 0x066a + 0663 8100 clr $ACC0 + 0664 191e lrri $AC0.M, @$AR0 + 0665 1478 lsr $ACC0, #-8 + 0666 1b3e srri @$AR1, $AC0.M // Dst[i*2] = Src[i] >> 8; + 0667 1408 lsl $ACC0, #8 + 0668 0240 00ff andi $AC0.M, #0x00ff + 066a 1b3e srri @$AR1, $AC0.M // Dst[i*2 + 1] = Src[i] & 0xFF; + + 066b 1c3f mrr $AR1, $AC1.M // Keep AR1 value to 0x0B00 + 066c 029f 092b jmp 0x092b + 066e 02df ret + +// dma? + 066f 1fc3 mrr $AC0.M, $AR3 + 0670 043f addis $ACC0, #0x3f + 0671 0240 fff0 andi $AC0.M, #0xfff0 + 0673 00fe ffcd sr @DSPA, $AC0.M + 0675 1c1a mrr $AR0, $AX0.H + 0676 00da 037f lr $AX0.H, @0x037f + 0678 4400 addr $ACC0, $AX0.H + 0679 1f40 mrr $AX0.H, $AR0 + 067a 1c1e mrr $AR0, $AC0.M + 067b 1fda mrr $AC0.M, $AX0.H + 067c 041f addis $ACC0, #0x1f + 067d 0240 fff0 andi $AC0.M, #0xfff0 + 067f 1401 lsl $ACC0, #1 + 0680 00fe ffcb sr @DSBL, $AC0.M + 0682 00de ffc9 lr $AC0.M, @DSCR + 0684 02a0 0004 andf $AC0.M, #0x0004 + 0686 029c 0682 jlnz 0x0682 + 0688 007a 068b bloop $AX0.H, 0x068b + 068a 191e lrri $AC0.M, @$AR0 + 068b 1b7e srri @$AR3, $AC0.M + 068c 02df ret + +// setup DSMAH, DSMAL and DSCR (RAM -> DSP memory) + 068d 8900 clr $ACC1 + 068e 1ffc mrr $AC1.M, $AC0.L + 068f 0340 001f andi $AC1.M, #0x001f + 0691 00ff 037f sr @0x037f, $AC1.M + 0693 1ffc mrr $AC1.M, $AC0.L + 0694 0340 ffe0 andi $AC1.M, #0xffe0 // addr &= 0xFFFFFFE0; + 0696 1f9f mrr $AC0.L, $AC1.M + 0697 00df 037d lr $AC1.M, @0x037d // 0x1000 + 0699 00dd 037e lr $AC1.L, @0x037e // 0x0800 + 069b 4c00 add $ACC0, $AC1.L // addr += 0x10000800; + 069c 00fe ffce sr @DSMAH, $AC0.M + 069e 00fc ffcf sr @DSMAL, $AC0.L + 06a0 0f00 lris $AC1.M, #0x00 + 06a1 00ff ffc9 sr @DSCR, $AC1.M + 06a3 02df ret + +// setup DSPA and DSBL (and thus complete DMA transfer) +// memory transferred is stored (temporarily) to 0x0780 +// then it's copied to the address specified by AR3 + 06a4 00df 037f lr $AC1.M, @0x037f + 06a6 157f lsr $ACC1, #-1 + 06a7 00ff 037f sr @0x037f, $AC1.M + 06a9 02df ret + 06aa 8600 tstaxh $AX0.H + 06ab 02d5 retz + 06ac 1f1a mrr $AX0.L, $AX0.H + 06ad 009e 0780 lri $AC0.M, #0x0780 + 06af 00fe ffcd sr @DSPA, $AC0.M + 06b1 1fda mrr $AC0.M, $AX0.H + 06b2 043f addis $ACC0, #0x3f + 06b3 0240 ffe0 andi $AC0.M, #0xffe0 + 06b5 00fe ffcb sr @DSBL, $AC0.M + 06b7 00de ffc9 lr $AC0.M, @DSCR + 06b9 02a0 0004 andf $AC0.M, #0x0004 + 06bb 029c 06b7 jlnz 0x06b7 + 06bd 8100 clr $ACC0 + 06be 00de 037f lr $AC0.M, @0x037f + 06c0 147f lsr $ACC0, #-1 + 06c1 0200 0780 addi $AC0.M, #0x0780 + 06c3 1c1e mrr $AR0, $AC0.M + 06c4 00de 037f lr $AC0.M, @0x037f + 06c6 02a0 0001 andf $AC0.M, #0x0001 + 06c8 029d 06d1 jlz 0x06d1 + 06ca 8100 clr $ACC0 + 06cb 191e lrri $AC0.M, @$AR0 + 06cc 1488 asl $ACC0, #8 + 06cd 1b7e srri @$AR3, $AC0.M + 06ce 1fda mrr $AC0.M, $AX0.H + 06cf 7800 decm $AC0.M + 06d0 1f5e mrr $AX0.H, $AC0.M + 06d1 8100 clr $ACC0 + 06d2 1fda mrr $AC0.M, $AX0.H + 06d3 147f lsr $ACC0, #-1 + + 06d4 007e 06dd bloop $AC0.M, 0x06dd + 06d6 8100 clr $ACC0 + 06d7 181e lrr $AC0.M, @$AR0 + 06d8 0240 ff00 andi $AC0.M, #0xff00 + 06da 1b7e srri @$AR3, $AC0.M + 06db 191e lrri $AC0.M, @$AR0 + 06dc 1488 asl $ACC0, #8 + 06dd 1b7e srri @$AR3, $AC0.M + + 06de 1fda mrr $AC0.M, $AX0.H + 06df 1f58 mrr $AX0.H, $AX0.L + 06e0 02a0 0001 andf $AC0.M, #0x0001 + 06e2 02dd retlz + 06e3 8100 clr $ACC0 + 06e4 181e lrr $AC0.M, @$AR0 + 06e5 0240 ff00 andi $AC0.M, #0xff00 + 06e7 1b7e srri @$AR3, $AC0.M + 06e8 02df ret + +// Exception_0E() + 06e9 1205 sbclr #0x05 + 06ea 8e00 set16 + 06eb 00f0 03fd sr @0x03fd, $AC0.H + 06ed 00fc 03ff sr @0x03ff, $AC0.L + 06ef f400 lsr16 $ACC0 + 06f0 00fc 03fe sr @0x03fe, $AC0.L + 06f2 00fa 03fa sr @0x03fa, $AX0.H + 06f4 8100 clr $ACC0 + 06f5 00de fffe lr $AC0.M, @CMBH // check for new mail + 06f7 02c0 8000 andcf $AC0.M, #0x8000 + 06f9 029c 07ea jlnz 0x07ea // If we received no mail + 06fb 00da ffff lr $AX0.H, @CMBL + 06fd 8600 tstaxh $AX0.H + 06fe 0294 07c3 jnz 0x07c3 // If we received a mail beginning a list, WaitForNextMails() + + 0700 00de fffe lr $AC0.M, @CMBH // if we received an empty mail, wait for the next mail + 0702 02c0 8000 andcf $AC0.M, #0x8000 + 0704 029c 0700 jlnz 0x0700 + 0706 0240 000f andi $AC0.M, #0x000f // get the number in the high part of the mail + 0708 1f5e mrr $AX0.H, $AC0.M + 0709 7400 incm $AC0.M // number++; + 070a 0c00 lris $AC0.L, #0x00 + 070b 1404 lsl $ACC0, #4 // number <<= 4; + 070c 00fe 034e sr @0x034e, $AC0.M + 070e 1fda mrr $AC0.M, $AX0.H + 070f 1f40 mrr $AX0.H, $AR0 + 0710 0200 04fc addi $AC0.M, #0x04fc + 0712 1c1e mrr $AR0, $AC0.M + 0713 00de ffff lr $AC0.M, @CMBL + 0715 1a1e srr @$AR0, $AC0.M + 0716 1c1a mrr $AR0, $AX0.H + + 0717 00de 03fe lr $AC0.M, @0x03fe + 0719 00dc 03ff lr $AC0.L, @0x03ff + 071b 00d0 03fd lr $AC0.H, @0x03fd + 071d 00da 03fa lr $AX0.H, @0x03fa + 071f 1305 sbset #0x05 + 0720 02ff rti + +// DoYield() + 0721 009a 0002 lri $AX0.H, #0x0002 + 0723 00fa 03a3 sr @0x03a3, $AX0.H + 0725 00e0 03f9 sr @0x03f9, $AR0 + 0727 02bf 07ad call 0x07ad + 0729 16fc dcd1 si @DMBH, #0xdcd1 + 072b 16fd 0002 si @DMBL, #0x0002 + 072d 16fb 0001 si @DIRQ, #0x0001 + 072f 0021 halt + +// Function jump table + 0730 0748 cmpis $ACC1, #0x48 // Function 0: halt + 0731 0749 cmpis $ACC1, #0x49 // Function 1: dump memory? and halt + 0732 0789 cmpis $ACC1, #0x89 // Function 2: jump to 0x8000 and halt + 0733 078c cmpis $ACC1, #0x8c // Function 3: return to MessageLoop() + +// Execute function according to mail received (0xCDD1000X) +// Warning: any function number above 3 will likely crash +// as no range check is performed. +// AR0 = 0x002B + 0734 00e0 03f9 sr @0x03f9, $AR0 + 0736 009e 0005 lri $AC0.M, #0x0005 + 0738 02bf 079b call 0x079b // SendMail_DCD1(0x0005) + 073a 8e00 set16 + 073b 8100 clr $ACC0 + 073c 8900 clr $ACC1 + 073d 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 073f 27ff lrs $AC1.M, @CMBL + 0740 009e 0730 lri $AC0.M, #0x0730 + 0742 4c00 add $ACC0, $AC1.L + 0743 1c7e mrr $AR3, $AC0.M + 0744 0313 ilrr $AC1.M, @$AR3 + 0745 1c7f mrr $AR3, $AC1.M + 0746 176f jmpr $AR3 + 0747 0021 halt +// Function 0 + 0748 0021 halt +// Function 1 + 0749 009a 0002 lri $AX0.H, #0x0002 + 074b 00fa 03a3 sr @0x03a3, $AX0.H + 074d 8100 clr $ACC0 + 074e 8900 clr $ACC1 + 074f 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 0751 24ff lrs $AC0.L, @CMBL + 0752 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() + 0754 25ff lrs $AC1.L, @CMBL + 0755 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() + 0757 27ff lrs $AC1.M, @CMBL + 0758 2ece srs @DSMAH, $AC0.M + 0759 2ccf srs @DSMAL, $AC0.L + 075a 16c9 0001 si @DSCR, #0x0001 + 075c 2fcd srs @DSPA, $AC1.M + 075d 2dcb srs @DSBL, $AC1.L + 075e 8100 clr $ACC0 + 075f 8900 clr $ACC1 + 0760 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 0762 24ff lrs $AC0.L, @CMBL + 0763 1c9e mrr $IX0, $AC0.M + 0764 1cbc mrr $IX1, $AC0.L + 0765 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() + 0767 25ff lrs $AC1.L, @CMBL + 0768 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() + 076a 27ff lrs $AC1.M, @CMBL + 076b 1cdf mrr $IX2, $AC1.M + 076c 1cfd mrr $IX3, $AC1.L + 076d 8100 clr $ACC0 + 076e 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 0770 26ff lrs $AC0.M, @CMBL + 0771 1c1e mrr $AR0, $AC0.M + 0772 8900 clr $ACC1 + 0773 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1() + 0775 20ff lrs $AX0.L, @CMBL + 0776 1f5f mrr $AX0.H, $AC1.M + 0777 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 0779 21ff lrs $AX1.L, @CMBL + 077a 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0() + 077c 23ff lrs $AX1.H, @CMBL + 077d 26c9 lrs $AC0.M, @DSCR + 077e 02a0 0004 andf $AC0.M, #0x0004 + 0780 029c 077d jlnz 0x077d + 0782 1206 sbclr #0x06 + 0783 1203 sbclr #0x03 + 0784 1204 sbclr #0x04 + 0785 1205 sbclr #0x05 + 0786 029f 80b5 jmp 0x80b5 + 0788 0021 halt +// Function 2 + 0789 029f 8000 jmp 0x8000 + 078b 0021 halt +// Function 3 + 078c 00c0 03f9 lr $AR0, @0x03f9 + 078e 170f jmpr $AR0 + +// WaitUntilCPUMailboxIsFull_AC0() + 078f 26fe lrs $AC0.M, @CMBH + 0790 02c0 8000 andcf $AC0.M, #0x8000 + 0792 029c 078f jlnz 0x078f + 0794 02df ret + +// WaitUntilCPUMailboxIsFull_AC1() + 0795 27fe lrs $AC1.M, @CMBH + 0796 03c0 8000 andcf $AC1.M, #0x8000 + 0798 029c 0795 jlnz 0x0795 + 079a 02df ret + +// SendMail_DCD1() // seems to additionally trigger an IRQ + 079b 02bf 07b3 call 0x07b3 + 079d 16fc dcd1 si @DMBH, #0xdcd1 + 079f 2efd srs @DMBL, $AC0.M + 07a0 16fb 0001 si @DIRQ, #0x0001 + 07a2 02bf 07b3 call 0x07b3 + 07a4 02df ret + +// SendMail_F355() + 07a5 02bf 07b3 call 0x07b3 + 07a7 16fc f355 si @DMBH, #0xf355 + 07a9 2efd srs @DMBL, $AC0.M + 07aa 02bf 07b3 call 0x07b3 + 07ac 02df ret + +// WaitUntilMailboxIsReady_AC0() + 07ad 26fc lrs $AC0.M, @DMBH + 07ae 02c0 8000 andcf $AC0.M, #0x8000 + 07b0 029d 07ad jlz 0x07ad + 07b2 02df ret + +// WaitUntilMailboxIsReady_AC1() + 07b3 27fc lrs $AC1.M, @DMBH + 07b4 03c0 8000 andcf $AC1.M, #0x8000 + 07b6 029d 07b3 jlz 0x07b3 + 07b8 02df ret + +// InitGlobalVars() + 07b9 009a 0280 lri $AX0.H, #0x0280 + 07bb 00fa 0350 sr @0x0350, $AX0.H + 07bd 00fa 0351 sr @0x0351, $AX0.H + 07bf 0a00 lris $AX0.H, #0x00 + 07c0 00fa 0352 sr @0x0352, $AX0.H + 07c2 02df ret + +// WaitForNextMails() +// AX0.H: low part of current mail (num of mails to wait for) + 07c3 00e0 03fb sr @0x03fb, $AR0 + 07c5 00e8 03fc sr @0x03fc, $WR0 + 07c7 00c0 0350 lr $AR0, @0x0350 + 07c9 0088 002f lri $WR0, #0x002f + 07cb 1b1a srri @$AR0, $AX0.H + 07cc 00de fffe lr $AC0.M, @CMBH + 07ce 02c0 8000 andcf $AC0.M, #0x8000 + 07d0 029c 07cc jlnz 0x07cc + 07d2 00dc ffff lr $AC0.L, @CMBL + 07d4 1b1e srri @$AR0, $AC0.M + 07d5 1b1c srri @$AR0, $AC0.L + 07d6 1fda mrr $AC0.M, $AX0.H + 07d7 7800 decm $AC0.M + 07d8 1f5e mrr $AX0.H, $AC0.M + 07d9 8600 tstaxh $AX0.H + 07da 0294 07cc jnz 0x07cc + + 07dc 8100 clr $ACC0 + 07dd 00de 0352 lr $AC0.M, @0x0352 + 07df 7400 incm $AC0.M + 07e0 00fe 0352 sr @0x0352, $AC0.M + 07e2 00e0 0350 sr @0x0350, $AR0 + 07e4 00c0 03fb lr $AR0, @0x03fb + 07e6 00c8 03fc lr $WR0, @0x03fc + 07e8 029f 0717 jmp 0x0717 + + // noMail() + 07ea 00e0 03fb sr @0x03fb, $AR0 + 07ec 00e8 03fc sr @0x03fc, $WR0 + 07ee 00c0 0350 lr $AR0, @0x0350 + 07f0 0088 002f lri $WR0, #0x002f + 07f2 0a00 lris $AX0.H, #0x00 + 07f3 1b1a srri @$AR0, $AX0.H + 07f4 029f 07dc jmp 0x07dc + +// MessageLoop() + 07f6 00c0 0351 lr $AR0, @0x0351 + 07f8 0088 002f lri $WR0, #0x002f + 07fa 00da 0352 lr $AX0.H, @0x0352 + 07fc 8600 tstaxh $AX0.H + 07fd 0295 081e jz 0x081e // jump back to MessageLoop + 07ff 1205 sbclr #0x05 + 0800 00da 0352 lr $AX0.H, @0x0352 + 0802 1fda mrr $AC0.M, $AX0.H + 0803 7800 decm $AC0.M + 0804 00fe 0352 sr @0x0352, $AC0.M + 0806 1305 sbset #0x05 + 0807 0081 0356 lri $AR1, #0x0356 + 0809 191e lrri $AC0.M, @$AR0 + 080a 02c0 8000 andcf $AC0.M, #0x8000 + 080c 029d 0822 jlz 0x0822 // ??? + 080e 1f5e mrr $AX0.H, $AC0.M + 080f 8600 tstaxh $AX0.H + 0810 0295 0826 jz 0x0826 // Yield() + 0812 007a 0817 bloop $AX0.H, 0x0817 + 0814 191e lrri $AC0.M, @$AR0 + 0815 1b3e srri @$AR1, $AC0.M + 0816 191e lrri $AC0.M, @$AR0 + 0817 1b3e srri @$AR1, $AC0.M + 0818 00e0 0351 sr @0x0351, $AR0 + 081a 0088 ffff lri $WR0, #0xffff + 081c 029f 002d jmp 0x002d // jump to OpcodeHandler() + 081e 0088 ffff lri $WR0, #0xffff + 0820 029f 002b jmp 0x002b // jump back to MessageLoop() + +// + 0822 00e0 0351 sr @0x0351, $AR0 + 0824 029f 07fa jmp 0x07fa + +// Yield() + 0826 0080 07f6 lri $AR0, #0x07f6 + 0828 029f 0721 jmp 0x0721 // DoYield() (halts) + +// interesting - writes value(s) to output + 082a 8100 clr $ACC0 + 082b 0e10 lris $AC0.M, #0x10 + 082c 2232 lrs $AX0.H, @0x0032 + 082d 8600 tstaxh $AX0.H + 082e 02d5 retz + 082f 5400 subr $ACC0, $AX0.H + 0830 0200 0458 addi $AC0.M, #0x0458 // source addr = (0x10 - Mem[0x0032]) + 0x0458 + 0832 1c1e mrr $AR0, $AC0.M + 0833 1fda mrr $AC0.M, $AX0.H + 0834 04fe addis $ACC0, #0xfe + 0835 1f1e mrr $AX0.L, $AC0.M // AX0.L = Mem[0x0032] - 2; + 0836 191e lrri $AC0.M, @$AR0 + 0837 0291 083d js 0x083d + 0839 191a lrri $AX0.H, @$AR0 + + 083a 0058 loop $AX0.L + 083b 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + + 083c 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 083d 1b7e srri @$AR3, $AC0.M // store value to output + 083e 02df ret + +// + 083f 02bf 082a call 0x082a + 0841 8100 clr $ACC0 + 0842 2632 lrs $AC0.M, @0x0032 + 0843 5c00 sub $ACC0, $AC1.L + 0844 2e32 srs @0x0032, $AC0.M + 0845 0092 00ff lri $CR, #0x00ff + 0847 02df ret + +// increment one value, then zero out other values + 0848 00de 04fb lr $AC0.M, @0x04fb + 084a 7400 incm $AC0.M + 084b 00fe 04fb sr @0x04fb, $AC0.M + 084d 8100 clr $ACC0 + 084e 2e32 srs @0x0032, $AC0.M + 084f 2e66 srs @0x0066, $AC0.M + 0850 2e67 srs @0x0067, $AC0.M + 0851 268a lrs $AC0.M, @0xff8a + 0852 248b lrs $AC0.L, @0xff8b + 0853 2e3a srs @0x003a, $AC0.M + 0854 2c3b srs @0x003b, $AC0.L + 0855 268c lrs $AC0.M, @0xff8c + 0856 248d lrs $AC0.L, @0xff8d + 0857 2e38 srs @0x0038, $AC0.M + 0858 2c39 srs @0x0039, $AC0.L + 0859 02df ret + +// + 085a 8100 clr $ACC0 + 085b 2689 lrs $AC0.M, @0xff89 + 085c 0240 000f andi $AC0.M, #0x000f + 085e 1f5e mrr $AX0.H, $AC0.M + 085f 8100 clr $ACC0 + 0860 0e10 lris $AC0.M, #0x10 + 0861 5400 subr $ACC0, $AX0.H + 0862 2e32 srs @0x0032, $AC0.M + 0863 268a lrs $AC0.M, @0xff8a + 0864 248b lrs $AC0.L, @0xff8b + 0865 2288 lrs $AX0.H, @0xff88 + 0866 2089 lrs $AX0.L, @0xff89 + 0867 5800 subax $ACC0, $AX0.L + 0868 0a00 lris $AX0.H, #0x00 + 0869 2032 lrs $AX0.L, @0x0032 + 086a 5800 subax $ACC0, $AX0.L + 086b 2e3a srs @0x003a, $AC0.M + 086c 2c3b srs @0x003b, $AC0.L + 086d 02df ret + +// mixer for sound types 5 and 9 +// AR3 = 0x0580 (out address) +// AC1.M = 0x0043, AC1.L = 0x0000 + 086e 0092 0004 lri $CR, #0x0004 + 0870 8100 clr $ACC0 + 0871 2604 lrs $AC0.M, @0x0004 + 0872 b100 tst $ACC0 + 0873 02b4 0848 callne 0x0848 // nothing much interesting + 0875 8100 clr $ACC0 + 0876 2601 lrs $AC0.M, @0x0001 + 0877 b100 tst $ACC0 + 0878 0294 0916 jnz 0x0916 // end + 087a 2232 lrs $AX0.H, @0x0032 + 087b c900 cmpar $ACC0, $AX1.H + 087c 0293 083f jle 0x083f // direct return (calls 0x082A though) + 087e 5500 subr $ACC1, $AX0.H + 087f 02bf 082a call 0x082a // interesting: stores value(s) to Mem[AR3] (output) + 0881 223a lrs $AX0.H, @0x003a + 0882 8600 tstaxh $AX0.H + 0883 0294 088a jnz 0x088a + 0885 8100 clr $ACC0 + 0886 263b lrs $AC0.M, @0x003b + 0887 8200 cmp + 0888 0291 08dc js 0x08dc + 088a 8100 clr $ACC0 + 088b 1fdf mrr $AC0.M, $AC1.M + 088c 040f addis $ACC0, #0x0f + 088d 147c lsr $ACC0, #-4 + 088e 1f7e mrr $AX1.H, $AC0.M + 088f 0c00 lris $AC0.L, #0x00 + 0890 1404 lsl $ACC0, #4 + 0891 1f1e mrr $AX0.L, $AC0.M + 0892 0a00 lris $AX0.H, #0x00 + 0893 8100 clr $ACC0 + 0894 263a lrs $AC0.M, @0x003a + 0895 243b lrs $AC0.L, @0x003b + 0896 5800 subax $ACC0, $AX0.L + 0897 0290 08a2 jns 0x08a2 + 0899 8100 clr $ACC0 + 089a 263b lrs $AC0.M, @0x003b + 089b 5c00 sub $ACC0, $AC1.L + 089c 2e32 srs @0x0032, $AC0.M + 089d 8100 clr $ACC0 + 089e 2e3a srs @0x003a, $AC0.M + 089f 2e3b srs @0x003b, $AC0.M + 08a0 029f 08a8 jmp 0x08a8 + 08a2 2e3a srs @0x003a, $AC0.M + 08a3 2c3b srs @0x003b, $AC0.L + 08a4 0c00 lris $AC0.L, #0x00 + 08a5 1fd8 mrr $AC0.M, $AX0.L + 08a6 5c00 sub $ACC0, $AC1.L + 08a7 2e32 srs @0x0032, $AC0.M + 08a8 8100 clr $ACC0 + 08a9 1fdb mrr $AC0.M, $AX1.H + 08aa 02bf 091c call 0x091c // afc decoder + 08ac 2232 lrs $AX0.H, @0x0032 + 08ad 8600 tstaxh $AX0.H + 08ae 0295 08d9 jz 0x08d9 // end + 08b0 0a10 lris $AX0.H, #0x10 + 08b1 8100 clr $ACC0 + 08b2 1fc3 mrr $AC0.M, $AR3 + 08b3 5400 subr $ACC0, $AX0.H + 08b4 1c7e mrr $AR3, $AC0.M + 08b5 0080 0458 lri $AR0, #0x0458 + 08b7 197e lrri $AC0.M, @$AR3 + 08b8 197a lrri $AX0.H, @$AR3 + + 08b9 100e loopi #0x0e + 08ba 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H + + 08bb 1b1e srri @$AR0, $AC0.M + 08bc 1b1a srri @$AR0, $AX0.H + 08bd 8100 clr $ACC0 + 08be 263a lrs $AC0.M, @0x003a + 08bf 243b lrs $AC0.L, @0x003b + 08c0 b100 tst $ACC0 + 08c1 0294 08d9 jnz 0x08d9 // end + 08c3 2232 lrs $AX0.H, @0x0032 + 08c4 8600 tstaxh $AX0.H + 08c5 0295 08d9 jz 0x08d9 // end + 08c7 0080 0467 lri $AR0, #0x0467 + 08c9 8100 clr $ACC0 + 08ca 268b lrs $AC0.M, @0xff8b + 08cb b100 tst $ACC0 + 08cc 0295 08d9 jz 0x08d9 // end + 08ce 0200 000f addi $AC0.M, #0x000f + 08d0 0240 000f andi $AC0.M, #0x000f + 08d2 0200 0458 addi $AC0.M, #0x0458 + 08d4 1c7e mrr $AR3, $AC0.M + + 08d5 007a 08d8 bloop $AX0.H, 0x08d8 + 08d7 18fe lrrd $AC0.M, @$AR3 + 08d8 1a9e srrd @$AR0, $AC0.M + + 08d9 0092 00ff lri $CR, #0x00ff + 08db 02df ret + +// + 08dc b100 tst $ACC0 + 08dd 0295 08ec jz 0x08ec + 08df 5d00 sub $ACC1, $AC0.L + 08e0 040f addis $ACC0, #0x0f + 08e1 147c lsr $ACC0, #-4 + 08e2 0c00 lris $AC0.L, #0x00 + 08e3 00e3 0363 sr @0x0363, $AR3 + 08e5 02bf 091c call 0x091c + 08e7 00de 0363 lr $AC0.M, @0x0363 + 08e9 223b lrs $AX0.H, @0x003b + 08ea 4400 addr $ACC0, $AX0.H + 08eb 1c7e mrr $AR3, $AC0.M + 08ec 8100 clr $ACC0 + 08ed 2681 lrs $AC0.M, @0xff81 + 08ee b100 tst $ACC0 + 08ef 0295 0914 jz 0x0914 + 08f1 2380 lrs $AX1.H, @0xff80 + 08f2 2688 lrs $AC0.M, @0xff88 + 08f3 2489 lrs $AC0.L, @0xff89 + 08f4 1408 lsl $ACC0, #8 + 08f5 14f4 asr $ACC0, #-12 + 08f6 2380 lrs $AX1.H, @0xff80 + 08f7 8d00 set15 + 08f8 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + 08f9 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 08fa 8c00 clr15 + 08fb f000 lsl16 $ACC0 + 08fc 4e00 addp $ACC0 + 08fd 238c lrs $AX1.H, @0xff8c + 08fe 218d lrs $AX1.L, @0xff8d + 08ff 4a00 addax $ACC0, $AX1.L + 0900 2e38 srs @0x0038, $AC0.M + 0901 2c39 srs @0x0039, $AC0.L + 0902 2682 lrs $AC0.M, @0xff82 + 0903 2e67 srs @0x0067, $AC0.M + 0904 2683 lrs $AC0.M, @0xff83 + 0905 2e66 srs @0x0066, $AC0.M + 0906 00e3 0363 sr @0x0363, $AR3 + 0908 0083 0458 lri $AR3, #0x0458 + 090a 8100 clr $ACC0 + 090b 0e01 lris $AC0.M, #0x01 + 090c 02bf 091c call 0x091c + 090e 00c3 0363 lr $AR3, @0x0363 + 0910 02bf 085a call 0x085a + 0912 029f 087a jmp 0x087a + 0914 0e01 lris $AC0.M, #0x01 + 0915 2e01 srs @0x0001, $AC0.M + 0916 8100 clr $ACC0 + 0917 005f loop $AC1.M + 0918 1b7e srri @$AR3, $AC0.M + 0919 0092 00ff lri $CR, #0x00ff + 091b 02df ret + +// afc decoder (for sound formats 5 and 9) +// AC0.M = num of blocks to do? (0x4) +// AC1.M = + 091c 00ff 0360 sr @0x0360, $AC1.M + 091e 00fe 0361 sr @0x0361, $AC0.M + 0920 8100 clr $ACC0 + 0921 00de 0361 lr $AC0.M, @0x0361 + + 0923 007e 099c bloop $AC0.M, 0x099c + 0925 2638 lrs $AC0.M, @0x0038 + 0926 2439 lrs $AC0.L, @0x0039 + 0927 0092 00ff lri $CR, #0x00ff + 0929 029f 063a jmp 0x063a // ReadSoundData(Dword[0x0038]) + 092b 0092 0004 lri $CR, #0x0004 + 092d 2638 lrs $AC0.M, @0x0038 + 092e 2439 lrs $AC0.L, @0x0039 + 092f 8900 clr $ACC1 + 0930 2580 lrs $AC1.L, @0xff80 + 0931 4c00 add $ACC0, $AC1.L + 0932 2e38 srs @0x0038, $AC0.M + 0933 2c39 srs @0x0039, $AC0.L + 0934 00de 037f lr $AC0.M, @0x037f + 0936 0200 0b00 addi $AC0.M, #0x0b00 // buffer where read sound data is stored (128 bytes) + 0938 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x0B00 + Mem[0x037F]; (Mem[0x037F] seems to be the offset in buffer to the actual block...) + 0939 0084 0001 lri $IX0, #0x0001 // IX0 = 0x0001; + 093b 199e lrrn $AC0.M, @$AR0 // AC0.M = Mem[AR0]; AR0++; read first byte in buffer + 093c 8900 clr $ACC1 + 093d 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M = first_byte; + 093e 1401 lsl $ACC0, #1 + 093f 0240 001e andi $AC0.M, #0x001e + 0941 0200 0300 addi $AC0.M, #0x0300 + 0943 1c3e mrr $AR1, $AC0.M // AR1 = ((first_byte << 1) & 0x1E) + 0x0300; + 0944 157c lsr $ACC1, #-4 + 0945 0340 000f andi $AC1.M, #0x000f + 0947 0a11 lris $AX0.H, #0x11 + 0948 5500 subr $ACC1, $AX0.H // AC1.M = ((first_byte >> 4) & 0xF) - 0x11; + 0949 8100 clr $ACC0 + 094a 2680 lrs $AC0.M, @0xff80 + 094b 0605 cmpis $ACC0, #0x05 + 094c 0295 0965 jz 0x0965 // skip loop below (execute another loop) for sound format 5 + + 094e 009a 00f0 lri $AX0.H, #0x00f0 // these masks... for adpcm sound surely + 0950 0b0f lris $AX1.H, #0x0f + 0951 0082 0364 lri $AR2, #0x0364 // AR2 = 0x0364; + 0953 1998 lrrn $AX0.L, @$AR0 // AX0.L = Mem[AR0]; AR0++; + 0954 6000 movr $ACC0, $AX0.L // AC0.HM = AX0; AC0.L = 0x0000; + // loop for sound format 9 (looks like adpcm) + // decompose sound data into nibbles and store it to 0x0364 (again a temp buffer!) + // for(i = 0; i < 7; i++) + 0955 1107 095c bloopi #0x07, 0x095c + 0957 3400 andr $AC0.M, $AX0.H // AC0.M &= 0x00F0; + 0958 1408 lsl $ACC0, #8 // ACC0 <<= 8; + 0959 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++; + 095a 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 // AC0.M &= 0x000F; AX0.L = Mem[AR0]; AR0++; + 095b 140c lsl $ACC0, #12 // ACC0 <<= 12; + 095c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++; + + 095d 3400 andr $AC0.M, $AX0.H + 095e 1408 lsl $ACC0, #8 + 095f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0960 3600 andr $AC0.M, $AX1.H + 0961 140c lsl $ACC0, #12 + 0962 1b5e srri @$AR2, $AC0.M + 0963 029f 0985 jmp 0x0985 + // below for sound format 5 only + 0965 009a c000 lri $AX0.H, #0xc000 + 0967 0082 0364 lri $AR2, #0x0364 + 0969 1998 lrrn $AX0.L, @$AR0 + 096a 6000 movr $ACC0, $AX0.L + // loop for sound format 5 + 096b 1103 0978 bloopi #0x03, 0x0978 + 096d 1408 lsl $ACC0, #8 + 096e 3400 andr $AC0.M, $AX0.H + 096f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0970 140a lsl $ACC0, #10 + 0971 3400 andr $AC0.M, $AX0.H + 0972 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0973 140c lsl $ACC0, #12 + 0974 3400 andr $AC0.M, $AX0.H + 0975 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0976 140e lsl $ACC0, #14 + 0977 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 + 0978 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + + 0979 1408 lsl $ACC0, #8 + 097a 3400 andr $AC0.M, $AX0.H + 097b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 097c 140a lsl $ACC0, #10 + 097d 3400 andr $AC0.M, $AX0.H + 097e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 097f 140c lsl $ACC0, #12 + 0980 3400 andr $AC0.M, $AX0.H + 0981 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0982 140e lsl $ACC0, #14 + 0983 3400 andr $AC0.M, $AX0.H + 0984 1b5e srri @$AR2, $AC0.M + + 0985 8f00 set40 + 0986 1f7f mrr $AX1.H, $AC1.M // AX1.H = AC1.M = ((first_byte >> 4) & 0xF) - 0x11; + 0987 2066 lrs $AX0.L, @0x0066 // AX0.L = Mem[0x0066]; + 0988 2767 lrs $AC1.M, @0x0067 // AC1.M = Mem[0x0067]; + 0989 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++; load coefs from 0x0300+ + 098a 1939 lrri $AX1.L, @$AR1 // AX1.L = Mem[AR1]; AR1++; + 098b 0080 0364 lri $AR0, #0x0364 // AR0 = 0x0364; + 098d a000 mulx $AX0.L, $AX1.L // prod = AX0.L * AX1.L; + 098e ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 // prod += AC1.M * AX1.L; AC0.M = Mem[AR0]; AR0++; + + 098f 1108 0998 bloopi #0x08, 0x0998 + 0991 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L // AC0.M |= AX1.H; Mem[AR3] = AC1.M; AR3++; AX1.L = Mem[AR0]; AR0++; + 0992 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 // ACC0 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++; + 0993 1485 asl $ACC0, #5 // ACC0 <<= 5; + 0994 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M // prod += AC0.M * AX1.L; Mem[AR3] = AC0.M; AR3++; + 0995 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L // AC1.M |= AX1.H; Mem[AR3] = AC0.M; AR3++; AX1.L = Mem[AR0]; AR0++; + 0996 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 // ACC1 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++; + 0997 1585 asl $ACC1, #5 // ACC1 <<= 5; + 0998 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M // prod += AC1.M * AX1.L; Mem[AR3] = AC1.M; AR3++; + + 0999 2f67 srs @0x0067, $AC1.M + 099a 8e00 set16 + 099b 1ff8 mrr $AC1.M, $AX0.L + 099c 2f66 srs @0x0066, $AC1.M + // end of outer loop + 099d 8900 clr $ACC1 + 099e 00df 0360 lr $AC1.M, @0x0360 + 09a0 02df ret + +// + 09a1 b100 tst $ACC0 + 09a2 02d5 retz + 09a3 04fe addis $ACC0, #0xfe + 09a4 1f1e mrr $AX0.L, $AC0.M + 09a5 191e lrri $AC0.M, @$AR0 + 09a6 0291 09ac js 0x09ac + 09a8 191a lrri $AX0.H, @$AR0 + 09a9 0058 loop $AX0.L + 09aa 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 09ab 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 09ac 1b7e srri @$AR3, $AC0.M + 09ad 02df ret + +// decode audio? + 09ae 8100 clr $ACC0 + 09af 1f5e mrr $AX0.H, $AC0.M + 09b0 00d8 0402 lr $AX0.L, @0x0402 + 09b2 00dc 0430 lr $AC0.L, @0x0430 + 09b4 0080 0520 lri $AR0, #0x0520 + 09b6 00df 0480 lr $AC1.M, @0x0480 // sound format??? + 09b8 1501 lsl $ACC1, #1 + 09b9 0340 007e andi $AC1.M, #0x007e + 09bb 0300 09c3 addi $AC1.M, #0x09c3 + 09bd 1c5f mrr $AR2, $AC1.M + 09be 175f callr $AR2 // jump to one of the functions + 09bf 00fc 0430 sr @0x0430, $AC0.L + 09c1 029f 0336 jmp 0x0336 // return to SyncFrame func + // jump table + 09c3 029f 09e4 jmp 0x09e4 // 0x0: + 09c5 029f 0a1f jmp 0x0a1f // 0x1: + 09c7 029f 0a07 jmp 0x0a07 // 0x2: + 09c9 029f 09f4 jmp 0x09f4 // 0x3: + 09cb 029f 0a2d jmp 0x0a2d // 0x4: + 09cd 029f 09e3 jmp 0x09e3 // 0x5: dummy + 09cf 029f 0a4b jmp 0x0a4b // 0x6: + 09d1 029f 0a4e jmp 0x0a4e // 0x7: + 09d3 029f 09e3 jmp 0x09e3 // 0x8: dummy + 09d5 029f 09e3 jmp 0x09e3 // 0x9: dummy + 09d7 029f 0a6c jmp 0x0a6c // 0xA: + 09d9 029f 0a25 jmp 0x0a25 // 0xB: + 09db 029f 0a29 jmp 0x0a29 // 0xC: + 09dd 029f 09e3 jmp 0x09e3 // 0xD: dummy + 09df 029f 09e3 jmp 0x09e3 // 0xE: dummy + 09e1 029f 09e3 jmp 0x09e3 // 0xF: dummy + 09e3 02df ret // direct return for dummy funcs + +// Func_00() + 09e4 1401 lsl $ACC0, #1 + 09e5 009b c000 lri $AX1.H, #0xc000 + 09e7 0099 4000 lri $AX1.L, #0x4000 + 09e9 1150 09f1 bloopi #0x50, 0x09f1 + 09eb 02c0 0001 andcf $AC0.M, #0x0001 + 09ed 027c iflnz + 09ee 1b1b srri @$AR0, $AX1.H + 09ef 027d iflz + 09f0 1b19 srri @$AR0, $AX1.L + 09f1 4800 addax $ACC0, $AX0.L + 09f2 147f lsr $ACC0, #-1 + 09f3 02df ret + 09f4 1402 lsl $ACC0, #2 + 09f5 8900 clr $ACC1 + 09f6 1fb8 mrr $AC1.L, $AX0.L + 09f7 1501 lsl $ACC1, #1 + 09f8 009b c000 lri $AX1.H, #0xc000 + 09fa 0099 4000 lri $AX1.L, #0x4000 + 09fc 1150 0a04 bloopi #0x50, 0x0a04 + 09fe 02c0 0003 andcf $AC0.M, #0x0003 + 0a00 027c iflnz + 0a01 1b1b srri @$AR0, $AX1.H + 0a02 027d iflz + 0a03 1b19 srri @$AR0, $AX1.L + 0a04 4c00 add $ACC0, $AC1.L + 0a05 147e lsr $ACC0, #-2 + 0a06 02df ret + 0a07 1401 lsl $ACC0, #1 + 0a08 0081 0ca0 lri $AR1, #0x0ca0 + 0a0a 009b c000 lri $AX1.H, #0xc000 + 0a0c 0099 4000 lri $AX1.L, #0x4000 + 0a0e 8900 clr $ACC1 + 0a0f 0082 0000 lri $AR2, #0x0000 + 0a11 1150 0a1c bloopi #0x50, 0x0a1c + 0a13 02c0 0001 andcf $AC0.M, #0x0001 + 0a15 027c iflnz + 0a16 1b1b srri @$AR0, $AX1.H + 0a17 027d iflz + 0a18 1b19 srri @$AR0, $AX1.L + 0a19 183d lrr $AC1.L, @$AR1 + 0a1a 4900 addax $ACC1, $AX0.L + 0a1b 1fe2 mrr $AC1.M, $AR2 + 0a1c 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M + 0a1d 147f lsr $ACC0, #-1 + 0a1e 02df ret + 0a1f 8900 clr $ACC1 + 0a20 1fb8 mrr $AC1.L, $AX0.L + 0a21 157f lsr $ACC1, #-1 + 0a22 1050 loopi #0x50 + 0a23 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L + 0a24 02df ret + 0a25 0082 0180 lri $AR2, #0x0180 + 0a27 029f 0a2f jmp 0x0a2f + 0a29 0082 01c0 lri $AR2, #0x01c0 + 0a2b 029f 0a2f jmp 0x0a2f + 0a2d 0082 0140 lri $AR2, #0x0140 + 0a2f 008a 003f lri $WR2, #0x003f + 0a31 0086 0000 lri $IX2, #0x0000 + 0a33 1406 lsl $ACC0, #6 + 0a34 8900 clr $ACC1 + 0a35 1fb8 mrr $AC1.L, $AX0.L + 0a36 1505 lsl $ACC1, #5 + 0a37 009b 003f lri $AX1.H, #0x003f + 0a39 009a 0000 lri $AX0.H, #0x0000 + 0a3b 3600 andr $AC0.M, $AX1.H + 0a3c 1cde mrr $IX2, $AC0.M + 0a3d 001a addarn $AR2, $IX2 + 0a3e 3400 andr $AC0.M, $AX0.H + 0a3f 1150 0a45 bloopi #0x50, 0x0a45 + 0a41 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 0a42 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a43 1cde mrr $IX2, $AC0.M + 0a44 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a45 1b19 srri @$AR0, $AX1.L + 0a46 1fc2 mrr $AC0.M, $AR2 + 0a47 147a lsr $ACC0, #-6 + 0a48 008a ffff lri $WR2, #0xffff + 0a4a 02df ret + 0a4b 1050 loopi #0x50 + 0a4c 1b18 srri @$AR0, $AX0.L + 0a4d 02df ret + 0a4e 0082 0100 lri $AR2, #0x0100 + 0a50 008a 003f lri $WR2, #0x003f + 0a52 0086 0000 lri $IX2, #0x0000 + 0a54 1406 lsl $ACC0, #6 + 0a55 8900 clr $ACC1 + 0a56 1fb8 mrr $AC1.L, $AX0.L + 0a57 1505 lsl $ACC1, #5 + 0a58 009b 003f lri $AX1.H, #0x003f + 0a5a 009a 0000 lri $AX0.H, #0x0000 + 0a5c 3600 andr $AC0.M, $AX1.H + 0a5d 1cde mrr $IX2, $AC0.M + 0a5e 001a addarn $AR2, $IX2 + 0a5f 3400 andr $AC0.M, $AX0.H + 0a60 1150 0a66 bloopi #0x50, 0x0a66 + 0a62 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 0a63 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a64 1cde mrr $IX2, $AC0.M + 0a65 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a66 1b19 srri @$AR0, $AX1.L + 0a67 1fc2 mrr $AC0.M, $AR2 + 0a68 147a lsr $ACC0, #-6 + 0a69 008a ffff lri $WR2, #0xffff + 0a6b 02df ret + +// + 0a6c 0082 0100 lri $AR2, #0x0100 + 0a6e 008a 003f lri $WR2, #0x003f + 0a70 0086 0000 lri $IX2, #0x0000 + 0a72 0081 0ca0 lri $AR1, #0x0ca0 + 0a74 1406 lsl $ACC0, #6 + 0a75 8900 clr $ACC1 + 0a76 1fb8 mrr $AC1.L, $AX0.L + 0a77 1505 lsl $ACC1, #5 + 0a78 009b 003f lri $AX1.H, #0x003f + 0a7a 009a 0000 lri $AX0.H, #0x0000 + 0a7c 3600 andr $AC0.M, $AX1.H + 0a7d 1cde mrr $IX2, $AC0.M + 0a7e 001a addarn $AR2, $IX2 + 0a7f 3400 andr $AC0.M, $AX0.H + + 0a80 1150 0a8b bloopi #0x50, 0x0a8b + 0a82 1939 lrri $AX1.L, @$AR1 + 0a83 a000 mulx $AX0.L, $AX1.L + 0a84 140a lsl $ACC0, #10 + 0a85 4e00 addp $ACC0 + 0a86 1476 lsr $ACC0, #-10 + 0a87 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2 + 0a88 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a89 1cde mrr $IX2, $AC0.M + 0a8a 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a8b 1b19 srri @$AR0, $AX1.L + + 0a8c 1fc2 mrr $AC0.M, $AR2 + 0a8d 147a lsr $ACC0, #-6 + 0a8e 008a ffff lri $WR2, #0xffff + 0a90 02df ret + +// + 0a91 0080 01be lri $AR0, #0x01be + 0a93 1918 lrri $AX0.L, @$AR0 + 0a94 191a lrri $AX0.H, @$AR0 + 0a95 0080 0180 lri $AR0, #0x0180 + 0a97 0083 0180 lri $AR3, #0x0180 + 0a99 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0a9a 1ffe mrr $AC1.M, $AC0.M + 0a9b 1120 0aa2 bloopi #0x20, 0x0aa2 + 0a9d 7c00 neg $ACC0 + 0a9e d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0a9f 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0aa0 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 0aa1 1501 lsl $ACC1, #1 + 0aa2 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + 0aa3 0080 01fe lri $AR0, #0x01fe + 0aa5 191a lrri $AX0.H, @$AR0 + 0aa6 1918 lrri $AX0.L, @$AR0 + 0aa7 0080 01c0 lri $AR0, #0x01c0 + 0aa9 0083 01c0 lri $AR3, #0x01c0 + 0aab 1ff8 mrr $AC1.M, $AX0.L + 0aac 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0aad f800 addpaxz $ACC0, $AX0.H + 0aae 0240 01ff andi $AC0.M, #0x01ff + 0ab0 0260 2000 ori $AC0.M, #0x2000 + 0ab2 02bf 0ab5 call 0x0ab5 + 0ab4 02df ret + 0ab5 b900 tst $ACC1 + 0ab6 0272 ifg + 0ab7 7c00 neg $ACC0 + 0ab8 1f7e mrr $AX1.H, $AC0.M + 0ab9 4700 addr $ACC1, $AX1.H + 0aba 1110 0abf bloopi #0x10, 0x0abf + 0abc 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0abd 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0abe 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0abf 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0ac0 02df ret + +// + 0ac1 02bf 0b2e call 0x0b2e + 0ac3 2201 lrs $AX0.H, @0x0001 + 0ac4 8600 tstaxh $AX0.H + 0ac5 0294 0ad6 jnz 0x0ad6 + 0ac7 2204 lrs $AX0.H, @0x0004 + 0ac8 8600 tstaxh $AX0.H + 0ac9 02b4 0b1d callne 0x0b1d + 0acb 8100 clr $ACC0 + 0acc 2605 lrs $AC0.M, @0x0005 + 0acd b100 tst $ACC0 + 0ace 0295 0ae3 jz 0x0ae3 + 0ad0 8100 clr $ACC0 + 0ad1 2e05 srs @0x0005, $AC0.M + 0ad2 2281 lrs $AX0.H, @0xff81 + 0ad3 8600 tstaxh $AX0.H + 0ad4 0294 0add jnz 0x0add + 0ad6 8100 clr $ACC0 + 0ad7 005f loop $AC1.M + 0ad8 1b7e srri @$AR3, $AC0.M + 0ad9 7400 incm $AC0.M + 0ada 2e01 srs @0x0001, $AC0.M + 0adb 029f 0b16 jmp 0x0b16 + 0add 2688 lrs $AC0.M, @0xff88 + 0ade 2489 lrs $AC0.L, @0xff89 + 0adf 2e34 srs @0x0034, $AC0.M + 0ae0 2c35 srs @0x0035, $AC0.L + 0ae1 02bf 0b1d call 0x0b1d + 0ae3 00ff 0360 sr @0x0360, $AC1.M + 0ae5 2638 lrs $AC0.M, @0x0038 + 0ae6 2439 lrs $AC0.L, @0x0039 + 0ae7 02bf 068d call 0x068d + 0ae9 00df 0360 lr $AC1.M, @0x0360 + 0aeb 8100 clr $ACC0 + 0aec 263a lrs $AC0.M, @0x003a + 0aed b100 tst $ACC0 + 0aee 0294 0afd jnz 0x0afd + 0af0 263b lrs $AC0.M, @0x003b + 0af1 5c00 sub $ACC0, $AC1.L + 0af2 0290 0afd jns 0x0afd + 0af4 223b lrs $AX0.H, @0x003b + 0af5 02bf 06aa call 0x06aa + 0af7 5500 subr $ACC1, $AX0.H + 0af8 0a01 lris $AX0.H, #0x01 + 0af9 00fa 0405 sr @0x0405, $AX0.H + 0afb 029f 0ad0 jmp 0x0ad0 + 0afd 1f5f mrr $AX0.H, $AC1.M + 0afe 02bf 06aa call 0x06aa + 0b00 00fa 0362 sr @0x0362, $AX0.H + 0b02 8100 clr $ACC0 + 0b03 263a lrs $AC0.M, @0x003a + 0b04 243b lrs $AC0.L, @0x003b + 0b05 1570 lsr $ACC1, #-16 + 0b06 0a01 lris $AX0.H, #0x01 + 0b07 0081 0405 lri $AR1, #0x0405 + 0b09 5c00 sub $ACC0, $AC1.L + 0b0a b100 tst $ACC0 + 0b0b 0275 ifz + 0b0c 1a3a srr @$AR1, $AX0.H + 0b0d 2e3a srs @0x003a, $AC0.M + 0b0e 2c3b srs @0x003b, $AC0.L + 0b0f 2638 lrs $AC0.M, @0x0038 + 0b10 2439 lrs $AC0.L, @0x0039 + 0b11 00d8 0362 lr $AX0.L, @0x0362 + 0b13 7000 addaxl $ACC0, $AX0.L + 0b14 2c39 srs @0x0039, $AC0.L + 0b15 2e38 srs @0x0038, $AC0.M + 0b16 0092 00ff lri $CR, #0x00ff + 0b18 029f 032e jmp 0x032e + 0b1a 8100 clr $ACC0 + 0b1b 2e34 srs @0x0034, $AC0.M + 0b1c 2e35 srs @0x0035, $AC0.M + 0b1d 2334 lrs $AX1.H, @0x0034 + 0b1e 2135 lrs $AX1.L, @0x0035 + 0b1f 268a lrs $AC0.M, @0xff8a + 0b20 248b lrs $AC0.L, @0xff8b + 0b21 5a00 subax $ACC0, $AX1.L + 0b22 2e3a srs @0x003a, $AC0.M + 0b23 2c3b srs @0x003b, $AC0.L + 0b24 2634 lrs $AC0.M, @0x0034 + 0b25 2435 lrs $AC0.L, @0x0035 + 0b26 238c lrs $AX1.H, @0xff8c + 0b27 218d lrs $AX1.L, @0xff8d + 0b28 4a00 addax $ACC0, $AX1.L + 0b29 2e38 srs @0x0038, $AC0.M + 0b2a 2c39 srs @0x0039, $AC0.L + 0b2b 8100 clr $ACC0 + 0b2c 2e05 srs @0x0005, $AC0.M + 0b2d 02df ret + +// + 0b2e 0092 0004 lri $CR, #0x0004 + 0b30 2002 lrs $AX0.L, @0x0002 + 0b31 8100 clr $ACC0 + 0b32 8900 clr $ACC1 + 0b33 2430 lrs $AC0.L, @0x0030 + 0b34 8d00 set15 + 0b35 0950 lris $AX1.L, #0x50 + 0b36 a000 mulx $AX0.L, $AX1.L + 0b37 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0b38 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0002] * 80) << 4; + 0b39 8c00 clr15 + 0b3a 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M; + 0b3b 0083 0580 lri $AR3, #0x0580 + 0b3d 02df ret + +// process sound format 0x10 (smg) +// read data stored at 0x0000 by DsetupTable +// stores the output to 0x0580 + 0b3e 02bf 0b2e call 0x0b2e // prepare regs + 0b40 2201 lrs $AX0.H, @0x0001 + 0b41 8600 tstaxh $AX0.H + 0b42 0294 0b53 jnz 0x0b53 + 0b44 2204 lrs $AX0.H, @0x0004 + 0b45 8600 tstaxh $AX0.H + 0b46 02b4 0b9d callne 0x0b9d + 0b48 8100 clr $ACC0 + 0b49 2605 lrs $AC0.M, @0x0005 + 0b4a b100 tst $ACC0 + 0b4b 0295 0b60 jz 0x0b60 + 0b4d 8100 clr $ACC0 + 0b4e 2e05 srs @0x0005, $AC0.M + 0b4f 2281 lrs $AX0.H, @0xff81 + 0b50 8600 tstaxh $AX0.H + 0b51 0294 0b5a jnz 0x0b5a + + 0b53 8100 clr $ACC0 + + 0b54 005f loop $AC1.M + 0b55 1b7e srri @$AR3, $AC0.M // store zero to output + + 0b56 7400 incm $AC0.M + 0b57 2e01 srs @0x0001, $AC0.M + 0b58 029f 0b96 jmp 0x0b96 + + 0b5a 2688 lrs $AC0.M, @0xff88 + 0b5b 2489 lrs $AC0.L, @0xff89 + 0b5c 2e34 srs @0x0034, $AC0.M + 0b5d 2c35 srs @0x0035, $AC0.L + 0b5e 02bf 0b9d call 0x0b9d + + 0b60 00ff 0360 sr @0x0360, $AC1.M + 0b62 2638 lrs $AC0.M, @0x0038 + 0b63 2439 lrs $AC0.L, @0x0039 + // DMA transfer from main memory address Dword[0x0038] to 0x0580 + // Dword[0x0038] = Dword[0xFF8C] + 0b64 02bf 068d call 0x068d + 0b66 02bf 06a4 call 0x06a4 + 0b68 00df 0360 lr $AC1.M, @0x0360 + 0b6a 8100 clr $ACC0 + 0b6b 263a lrs $AC0.M, @0x003a + 0b6c b100 tst $ACC0 + 0b6d 0294 0b7c jnz 0x0b7c + 0b6f 263b lrs $AC0.M, @0x003b + 0b70 5c00 sub $ACC0, $AC1.L + 0b71 0290 0b7c jns 0x0b7c + 0b73 223b lrs $AX0.H, @0x003b + 0b74 02bf 066f call 0x066f // dma? + 0b76 5500 subr $ACC1, $AX0.H + 0b77 0a01 lris $AX0.H, #0x01 + 0b78 00fa 0405 sr @0x0405, $AX0.H + 0b7a 029f 0b4d jmp 0x0b4d + 0b7c 1f5f mrr $AX0.H, $AC1.M + 0b7d 02bf 066f call 0x066f // dma? + 0b7f 00fa 0362 sr @0x0362, $AX0.H + 0b81 8100 clr $ACC0 + 0b82 263a lrs $AC0.M, @0x003a + 0b83 243b lrs $AC0.L, @0x003b + 0b84 1570 lsr $ACC1, #-16 + 0b85 0a01 lris $AX0.H, #0x01 + 0b86 0081 0405 lri $AR1, #0x0405 + 0b88 5c00 sub $ACC0, $AC1.L + 0b89 b100 tst $ACC0 + 0b8a 0275 ifz + 0b8b 1a3a srr @$AR1, $AX0.H + 0b8c 2e3a srs @0x003a, $AC0.M + 0b8d 2c3b srs @0x003b, $AC0.L + 0b8e 2638 lrs $AC0.M, @0x0038 + 0b8f 2439 lrs $AC0.L, @0x0039 + 0b90 00d8 0362 lr $AX0.L, @0x0362 + 0b92 7000 addaxl $ACC0, $AX0.L + 0b93 7000 addaxl $ACC0, $AX0.L + 0b94 2c39 srs @0x0039, $AC0.L + 0b95 2e38 srs @0x0038, $AC0.M + 0b96 0092 00ff lri $CR, #0x00ff + 0b98 029f 032e jmp 0x032e + +// + 0b9a 8100 clr $ACC0 + + 0b9b 2e34 srs @0x0034, $AC0.M + 0b9c 2e35 srs @0x0035, $AC0.M + + 0b9d 2334 lrs $AX1.H, @0x0034 + 0b9e 2135 lrs $AX1.L, @0x0035 + 0b9f 268a lrs $AC0.M, @0xff8a + 0ba0 248b lrs $AC0.L, @0xff8b + 0ba1 5a00 subax $ACC0, $AX1.L + 0ba2 2e3a srs @0x003a, $AC0.M + 0ba3 2c3b srs @0x003b, $AC0.L + 0ba4 2634 lrs $AC0.M, @0x0034 + 0ba5 2435 lrs $AC0.L, @0x0035 + 0ba6 1401 lsl $ACC0, #1 + 0ba7 238c lrs $AX1.H, @0xff8c + 0ba8 218d lrs $AX1.L, @0xff8d + 0ba9 4a00 addax $ACC0, $AX1.L + 0baa 2e38 srs @0x0038, $AC0.M + 0bab 2c39 srs @0x0039, $AC0.L + 0bac 8100 clr $ACC0 + 0bad 2e05 srs @0x0005, $AC0.M + 0bae 02df ret + +// + 0baf 8900 clr $ACC1 + 0bb0 0f50 lris $AC1.M, #0x50 + 0bb1 0083 0520 lri $AR3, #0x0520 + 0bb3 02bf 0bc8 call 0x0bc8 + 0bb5 029f 0336 jmp 0x0336 + 0bb7 00d8 0402 lr $AX0.L, @0x0402 + 0bb9 8100 clr $ACC0 + 0bba 8900 clr $ACC1 + 0bbb 00dc 0430 lr $AC0.L, @0x0430 + 0bbd 0a50 lris $AX0.H, #0x50 + 0bbe 9000 mul $AX0.L, $AX0.H + 0bbf 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0bc0 1404 lsl $ACC0, #4 + 0bc1 1ffe mrr $AC1.M, $AC0.M + 0bc2 0083 0580 lri $AR3, #0x0580 + 0bc4 02bf 0bc8 call 0x0bc8 + 0bc6 029f 032e jmp 0x032e + +// + 0bc8 0092 0004 lri $CR, #0x0004 + 0bca 8100 clr $ACC0 + 0bcb 263a lrs $AC0.M, @0x003a + 0bcc 243b lrs $AC0.L, @0x003b + 0bcd 1f1f mrr $AX0.L, $AC1.M + 0bce 0a00 lris $AX0.H, #0x00 + 0bcf 5800 subax $ACC0, $AX0.L + 0bd0 0292 0be6 jg 0x0be6 + 0bd2 8900 clr $ACC1 + 0bd3 00c0 043b lr $AR0, @0x043b + 0bd5 02bf 0c0b call 0x0c0b + 0bd7 8100 clr $ACC0 + 0bd8 1fd8 mrr $AC0.M, $AX0.L + 0bd9 223b lrs $AX0.H, @0x003b + 0bda 5400 subr $ACC0, $AX0.H + 0bdb 0007 dar $AR3 + 0bdc 1979 lrri $AX1.L, @$AR3 + 0bdd 005e loop $AC0.M + 0bde 1b79 srri @$AR3, $AX1.L + 0bdf 0f01 lris $AC1.M, #0x01 + 0be0 2f01 srs @0x0001, $AC1.M + 0be1 8900 clr $ACC1 + 0be2 2f3b srs @0x003b, $AC1.M + 0be3 0092 00ff lri $CR, #0x00ff + 0be5 02df ret + +// + 0be6 2e3a srs @0x003a, $AC0.M + 0be7 2c3b srs @0x003b, $AC0.L + 0be8 8100 clr $ACC0 + 0be9 8900 clr $ACC1 + 0bea 268a lrs $AC0.M, @0xff8a + 0beb 2734 lrs $AC1.M, @0x0034 + 0bec 5c00 sub $ACC0, $AC1.L + 0bed 2e36 srs @0x0036, $AC0.M + 0bee 5000 subr $ACC0, $AX0.L + 0bef 0290 0c05 jns 0x0c05 + 0bf1 00c0 0436 lr $AR0, @0x0436 + 0bf3 02bf 0c0b call 0x0c0b + 0bf5 8100 clr $ACC0 + 0bf6 1fd8 mrr $AC0.M, $AX0.L + 0bf7 2236 lrs $AX0.H, @0x0036 + 0bf8 5400 subr $ACC0, $AX0.H + 0bf9 1c1e mrr $AR0, $AC0.M + 0bfa 8100 clr $ACC0 + 0bfb 2e34 srs @0x0034, $AC0.M + 0bfc 2688 lrs $AC0.M, @0xff88 + 0bfd 2489 lrs $AC0.L, @0xff89 + 0bfe 2e8c srs @0xff8c, $AC0.M + 0bff 2c8d srs @0xff8d, $AC0.L + 0c00 02bf 0c0b call 0x0c0b + 0c02 0092 00ff lri $CR, #0x00ff + 0c04 02df ret + +// + 0c05 1c18 mrr $AR0, $AX0.L + 0c06 02bf 0c0b call 0x0c0b + 0c08 0092 00ff lri $CR, #0x00ff + 0c0a 02df ret + +// + 0c0b 8100 clr $ACC0 + 0c0c 1fc0 mrr $AC0.M, $AR0 + 0c0d b100 tst $ACC0 + 0c0e 02d5 retz + 0c0f 8900 clr $ACC1 + 0c10 2734 lrs $AC1.M, @0x0034 + 0c11 0340 0001 andi $AC1.M, #0x0001 + 0c13 0b00 lris $AX1.H, #0x00 + 0c14 1f3f mrr $AX1.L, $AC1.M + 0c15 268c lrs $AC0.M, @0xff8c + 0c16 248d lrs $AC0.L, @0xff8d + 0c17 8900 clr $ACC1 + 0c18 2534 lrs $AC1.L, @0x0034 + 0c19 1501 lsl $ACC1, #1 + 0c1a 4c00 add $ACC0, $AC1.L + 0c1b 5a00 subax $ACC0, $AX1.L + 0c1c 5a00 subax $ACC0, $AX1.L + 0c1d 1c20 mrr $AR1, $AR0 + 0c1e 1fe0 mrr $AC1.M, $AR0 + 0c1f 0502 addis $ACC1, #0x02 + 0c20 1c1f mrr $AR0, $AC1.M + 0c21 009f 0b00 lri $AC1.M, #0x0b00 + 0c23 0092 00ff lri $CR, #0x00ff + 0c25 02bf 05e8 call 0x05e8 + 0c27 0092 0004 lri $CR, #0x0004 + 0c29 2734 lrs $AC1.M, @0x0034 + 0c2a 1f61 mrr $AX1.H, $AR1 + 0c2b 4700 addr $ACC1, $AX1.H + 0c2c 2f34 srs @0x0034, $AC1.M + 0c2d 0080 0b00 lri $AR0, #0x0b00 + 0c2f 8900 clr $ACC1 + 0c30 1ff9 mrr $AC1.M, $AX1.L + 0c31 b900 tst $ACC1 + 0c32 0274 ifnz + 0c33 0008 iar $AR0 + 0c34 8900 clr $ACC1 + 0c35 1fe1 mrr $AC1.M, $AR1 + 0c36 191e lrri $AC0.M, @$AR0 + 0c37 0701 cmpis $ACC1, #0x01 + 0c38 0293 0c41 jle 0x0c41 + 0c3a 191a lrri $AX0.H, @$AR0 + 0c3b 05fe addis $ACC1, #0xfe + 0c3c 005f loop $AC1.M + 0c3d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c3e 1b7e srri @$AR3, $AC0.M + 0c3f 1b7a srri @$AR3, $AX0.H + 0c40 02df ret + +// uh? + 0c41 1b7e srri @$AR3, $AC0.M + 0c42 02df ret + +// ??? +// AR0 = some count??? address??? +// AC0.M = +// AR1 = + 0c43 0083 03e8 lri $AR3, #0x03e8 + 0c45 191e lrri $AC0.M, @$AR0 + 0c46 191a lrri $AX0.H, @$AR0 + 0c47 1006 loopi #0x06 + 0c48 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c49 1b7e srri @$AR3, $AC0.M + 0c4a 1b7a srri @$AR3, $AX0.H + 0c4b 0080 03e8 lri $AR0, #0x03e8 + 0c4d 8a00 m2 + 0c4e 0088 0007 lri $WR0, #0x0007 + + 0c50 1150 0c5d bloopi #0x50, 0x0c5d + 0c52 1c61 mrr $AR3, $AR1 + 0c53 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c54 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c55 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c56 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c57 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c58 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c59 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c5a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c5b f200 madd $AX0.L, $AX0.H + 0c5c fe00 movpz $ACC0 + 0c5d 1b3e srri @$AR1, $AC0.M + + 0c5e 0088 ffff lri $WR0, #0xffff + 0c60 8b00 m0 + 0c61 02df ret + +// + 0c62 8a00 m2 + 0c63 05fe addis $ACC1, #0xfe + 0c64 0083 03e8 lri $AR3, #0x03e8 + 0c66 191e lrri $AC0.M, @$AR0 + 0c67 191a lrri $AX0.H, @$AR0 + 0c68 005f loop $AC1.M + 0c69 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c6a 1b7e srri @$AR3, $AC0.M + 0c6b 1b7a srri @$AR3, $AX0.H + 0c6c 0080 03e8 lri $AR0, #0x03e8 + 0c6e 0501 addis $ACC1, #0x01 + 0c6f 1d1f mrr $WR0, $AC1.M + 0c70 1150 0c78 bloopi #0x50, 0x0c78 + 0c72 1c61 mrr $AR3, $AR1 + 0c73 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c74 005f loop $AC1.M + 0c75 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c76 f200 madd $AX0.L, $AX0.H + 0c77 fe00 movpz $ACC0 + 0c78 1b3e srri @$AR1, $AC0.M + 0c79 0088 ffff lri $WR0, #0xffff + 0c7b 8b00 m0 + 0c7c 02df ret + 0c7d 0083 03e8 lri $AR3, #0x03e8 + 0c7f 191e lrri $AC0.M, @$AR0 + 0c80 191a lrri $AX0.H, @$AR0 + 0c81 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c82 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c83 1b7e srri @$AR3, $AC0.M + 0c84 1b7a srri @$AR3, $AX0.H + 0c85 0080 03e8 lri $AR0, #0x03e8 + 0c87 0088 0003 lri $WR0, #0x0003 + 0c89 0085 0000 lri $IX1, #0x0000 + 0c8b 0087 0000 lri $IX3, #0x0000 + 0c8d 1fc2 mrr $AC0.M, $AR2 + 0c8e 195b lrri $AX1.H, @$AR2 + 0c8f 1959 lrri $AX1.L, @$AR2 + 0c90 195f lrri $AC1.M, @$AR2 + 0c91 195a lrri $AX0.H, @$AR2 + 0c92 1c5e mrr $AR2, $AC0.M + 0c93 1fda mrr $AC0.M, $AX0.H + 0c94 1c61 mrr $AR3, $AR1 + 0c95 8a00 m2 + 0c96 8f00 set40 + 0c97 191a lrri $AX0.H, @$AR0 + 0c98 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0c99 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0c9a ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0c9b e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0c9c b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0c9d 1127 0ca8 bloopi #0x27, 0x0ca8 + 0c9f e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ca0 197e lrri $AC0.M, @$AR3 + 0ca1 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ca2 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0ca3 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0ca4 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0ca5 197f lrri $AC1.M, @$AR3 + 0ca6 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0ca7 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0ca8 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0ca9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0caa 197e lrri $AC0.M, @$AR3 + 0cab e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0cac eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cad bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 0cae 1bff srrn @$AR3, $AC1.M + 0caf 197f lrri $AC1.M, @$AR3 + 0cb0 8e00 set16 + 0cb1 8b00 m0 + 0cb2 0088 ffff lri $WR0, #0xffff + 0cb4 1b5b srri @$AR2, $AX1.H + 0cb5 1b59 srri @$AR2, $AX1.L + 0cb6 1b5f srri @$AR2, $AC1.M + 0cb7 1b5e srri @$AR2, $AC0.M + 0cb8 02df ret + 0cb9 0083 03e8 lri $AR3, #0x03e8 + 0cbb 191e lrri $AC0.M, @$AR0 + 0cbc 191a lrri $AX0.H, @$AR0 + 0cbd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cbe 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cbf 1b7e srri @$AR3, $AC0.M + 0cc0 1b7a srri @$AR3, $AX0.H + 0cc1 0080 03e8 lri $AR0, #0x03e8 + 0cc3 0088 0003 lri $WR0, #0x0003 + 0cc5 0085 0000 lri $IX1, #0x0000 + 0cc7 0087 0000 lri $IX3, #0x0000 + 0cc9 1fc2 mrr $AC0.M, $AR2 + 0cca 195b lrri $AX1.H, @$AR2 + 0ccb 1959 lrri $AX1.L, @$AR2 + 0ccc 195f lrri $AC1.M, @$AR2 + 0ccd 195a lrri $AX0.H, @$AR2 + 0cce 1c5e mrr $AR2, $AC0.M + 0ccf 1fda mrr $AC0.M, $AX0.H + 0cd0 1c61 mrr $AR3, $AR1 + 0cd1 8a00 m2 + 0cd2 8f00 set40 + 0cd3 191a lrri $AX0.H, @$AR0 + 0cd4 b800 mulx $AX0.H, $AX1.H + 0cd5 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0cd6 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cd7 ea00 maddc $AC1.M, $AX1.L + 0cd8 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0cd9 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0cda ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0cdb b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0cdc 1127 0ced bloopi #0x27, 0x0ced + 0cde e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cdf e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ce0 197e lrri $AC0.M, @$AR3 + 0ce1 e800 maddc $AC0.M, $AX1.L + 0ce2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ce3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0ce4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0ce5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0ce6 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0ce7 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0ce8 197f lrri $AC1.M, @$AR3 + 0ce9 ea00 maddc $AC1.M, $AX1.L + 0cea ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0ceb e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0cec ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0ced b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0cee e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cef e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0cf0 197e lrri $AC0.M, @$AR3 + 0cf1 e800 maddc $AC0.M, $AX1.L + 0cf2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0cf3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0cf4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cf5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0cf6 1bff srrn @$AR3, $AC1.M + 0cf7 197f lrri $AC1.M, @$AR3 + 0cf8 8e00 set16 + 0cf9 8b00 m0 + 0cfa 0088 ffff lri $WR0, #0xffff + 0cfc 1b5b srri @$AR2, $AX1.H + 0cfd 1b59 srri @$AR2, $AX1.L + 0cfe 1b5f srri @$AR2, $AC1.M + 0cff 1b5e srri @$AR2, $AC0.M + 0d00 02df ret + +// stores an offset table??? called by DsetupTable +// Mem[0x03F0] = 0x0000; +// Mem[0x03F1] = 0x0096; +// Mem[0x03F2] = 0x00FF; +// Mem[0x03F3] = 0x0030; +// Mem[0x03F4] = 0x0010; +// Mem[0x03F5] = 0x7F00; +// Mem[0x03F6] = 0x0000; +// Mem[0x03F7] = 0x0100; + 0d01 0eff lris $AC0.M, #0xff + 0d02 00fe 03f2 sr @0x03f2, $AC0.M + 0d04 8100 clr $ACC0 + 0d05 00fe 03f0 sr @0x03f0, $AC0.M + 0d07 00fe 03f6 sr @0x03f6, $AC0.M + 0d09 009e 0100 lri $AC0.M, #0x0100 + 0d0b 00fe 03f7 sr @0x03f7, $AC0.M + 0d0d 00da 03f7 lr $AX0.H, @0x03f7 + 0d0f 009e 8000 lri $AC0.M, #0x8000 + 0d11 5400 subr $ACC0, $AX0.H + 0d12 00fe 03f5 sr @0x03f5, $AC0.M + 0d14 0e30 lris $AC0.M, #0x30 + 0d15 00fe 03f3 sr @0x03f3, $AC0.M + 0d17 0e10 lris $AC0.M, #0x10 + 0d18 00fe 03f4 sr @0x03f4, $AC0.M + 0d1a 009e 0096 lri $AC0.M, #0x0096 + 0d1c 00fe 03f1 sr @0x03f1, $AC0.M + 0d1e 02df ret + +// + 0d1f 0080 0a00 lri $AR0, #0x0a00 + 0d21 8100 clr $ACC0 + 0d22 00de 03f0 lr $AC0.M, @0x03f0 + 0d24 8900 clr $ACC1 + 0d25 b100 tst $ACC0 + 0d26 0275 ifz + 0d27 0550 addis $ACC1, #0x50 + 0d28 00ff 03f0 sr @0x03f0, $AC1.M + 0d2a 0200 0a60 addi $AC0.M, #0x0a60 + 0d2c 1c7e mrr $AR3, $AC0.M + 0d2d 0f4e lris $AC1.M, #0x4e + 0d2e 02bf 00e5 call 0x00e5 + 0d30 02df ret + +// + 0d31 00de 03f1 lr $AC0.M, @0x03f1 + 0d33 0200 0a60 addi $AC0.M, #0x0a60 + 0d35 1c7e mrr $AR3, $AC0.M + 0d36 8100 clr $ACC0 + 0d37 8900 clr $ACC1 + 0d38 009f 00a0 lri $AC1.M, #0x00a0 + 0d3a 00de 03f1 lr $AC0.M, @0x03f1 + 0d3c 5d00 sub $ACC1, $AC0.L + 0d3d 0e50 lris $AC0.M, #0x50 + 0d3e 0750 cmpis $ACC1, #0x50 + 0d3f 0270 ifns + 0d40 5d00 sub $ACC1, $AC0.L + 0d41 00da 03f2 lr $AX0.H, @0x03f2 + 0d43 8600 tstaxh $AX0.H + 0d44 0290 0d62 jns 0x0d62 + 0d46 00de 03f3 lr $AC0.M, @0x03f3 + 0d48 5c00 sub $ACC0, $AC1.L + 0d49 0293 0d4d jle 0x0d4d + 0d4b 029f 0d67 jmp 0x0d67 + 0d4d 00db 03f7 lr $AX1.H, @0x03f7 + 0d4f 009e 8000 lri $AC0.M, #0x8000 + 0d51 4600 addr $ACC0, $AX1.H + 0d52 029f 0d59 jmp 0x0d59 + 0d54 00db 03f7 lr $AX1.H, @0x03f7 + 0d56 009e 8000 lri $AC0.M, #0x8000 + 0d58 5600 subr $ACC0, $AX1.H + 0d59 00fe 03f5 sr @0x03f5, $AC0.M + 0d5b 1fda mrr $AC0.M, $AX0.H + 0d5c 7c00 neg $ACC0 + 0d5d 1f5e mrr $AX0.H, $AC0.M + 0d5e 00fe 03f2 sr @0x03f2, $AC0.M + 0d60 029f 0d67 jmp 0x0d67 + 0d62 00de 03f4 lr $AC0.M, @0x03f4 + 0d64 5d00 sub $ACC1, $AC0.L + 0d65 0293 0d54 jle 0x0d54 + 0d67 8900 clr $ACC1 + 0d68 00dd 03f5 lr $AC1.L, @0x03f5 + 0d6a 1501 lsl $ACC1, #1 + 0d6b 8100 clr $ACC0 + 0d6c 00dc 03f6 lr $AC0.L, @0x03f6 + 0d6e 008b 009f lri $WR3, #0x009f + 0d70 0080 0a00 lri $AR0, #0x0a00 + 0d72 0900 lris $AX1.L, #0x00 + // fill buffer at 0x0A00 with buffer at (0x0A60 + Mem[0x03F1]) + 0d73 1150 0d7a bloopi #0x50, 0x0d7a + 0d75 1878 lrr $AX0.L, @$AR3 + 0d76 4c00 add $ACC0, $AC1.L + 0d77 1cfe mrr $IX3, $AC0.M + 0d78 001f addarn $AR3, $IX3 + 0d79 1fd9 mrr $AC0.M, $AX1.L + 0d7a 1b18 srri @$AR0, $AX0.L + + 0d7b 009f 0a60 lri $AC1.M, #0x0a60 + 0d7d 1fc3 mrr $AC0.M, $AR3 + 0d7e 5c00 sub $ACC0, $AC1.L + 0d7f 00fe 03f1 sr @0x03f1, $AC0.M + 0d81 00fc 03f6 sr @0x03f6, $AC0.L + 0d83 008b ffff lri $WR3, #0xffff + 0d85 02df ret + +// copy buffer at 0x0A00 to right & left buffers + 0d86 0f50 lris $AC1.M, #0x50 + 0d87 0080 0a00 lri $AR0, #0x0a00 + 0d89 0083 0d60 lri $AR3, #0x0d60 + 0d8b 0098 3fff lri $AX0.L, #0x3fff + 0d8d 02bf 00ff call 0x00ff + 0d8f 0f50 lris $AC1.M, #0x50 + 0d90 0080 0a00 lri $AR0, #0x0a00 + 0d92 0083 0d00 lri $AR3, #0x0d00 + 0d94 0098 3fff lri $AX0.L, #0x3fff + 0d96 02bf 00ff call 0x00ff + 0d98 02df ret + +// ??? +// ACC1: ??? + 0d99 b900 tst $ACC1 + 0d9a 0294 0d9f jnz 0x0d9f + 0d9c 6800 movax $ACC0, $AX0.L + 0d9d b100 tst $ACC0 + 0d9e 02d5 retz + 0d9f 1c23 mrr $AR1, $AR3 + 0da0 197e lrri $AC0.M, @$AR3 + 0da1 191b lrri $AX1.H, @$AR0 + 0da2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + + 0da3 1120 0da9 bloopi #0x20, 0x0da9 + 0da5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0da6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0da7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0da8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0da9 4900 addax $ACC1, $AX0.L + + 0daa 1108 0daf bloopi #0x08, 0x0daf + 0dac dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0dad 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dae dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0daf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + + 0db0 02df ret + +// interleave two buffers + 0db1 8f00 set40 + 0db2 8d00 set15 + 0db3 1c03 mrr $AR0, $AR3 + 0db4 00d9 038e lr $AX1.L, @0x038e // (0x0040) set by DsetupTable + 0db6 0b04 lris $AX1.H, #0x04 + 0db7 197a lrri $AX0.H, @$AR3 + 0db8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 + 0db9 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0dba 1128 0dbf bloopi #0x28, 0x0dbf + 0dbc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0dbd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dbe 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0dbf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dc0 8c00 clr15 + 0dc1 8e00 set16 + 0dc2 02df ret + +// ??? + 0dc3 00da 0485 lr $AX0.H, @0x0485 + 0dc5 8600 tstaxh $AX0.H + 0dc6 0295 0dd4 jz 0x0dd4 + 0dc8 8100 clr $ACC0 + 0dc9 00de 042a lr $AC0.M, @0x042a + 0dcb 147f lsr $ACC0, #-1 + 0dcc 00fe 042b sr @0x042b, $AC0.M + 0dce b100 tst $ACC0 + 0dcf 0294 0dd4 jnz 0x0dd4 + 0dd1 0a01 lris $AX0.H, #0x01 + 0dd2 00fa 0401 sr @0x0401, $AX0.H + + 0dd4 8f00 set40 + 0dd5 8100 clr $ACC0 + 0dd6 00de 0428 lr $AC0.M, @0x0428 + 0dd8 1478 lsr $ACC0, #-8 + 0dd9 00df 0428 lr $AC1.M, @0x0428 + 0ddb 0340 007f andi $AC1.M, #0x007f + 0ddd 1f1e mrr $AX0.L, $AC0.M + 0dde 1f5f mrr $AX0.H, $AC1.M + 0ddf 0220 007f xori $ACC0, #0x007f + 0de1 1f3e mrr $AX1.L, $AC0.M + 0de2 0320 007f xori $ACC1, #0x007f + 0de4 1f7f mrr $AX1.H, $AC1.M + 0de5 8100 clr $ACC0 + 0de6 8900 clr $ACC1 + 0de7 009f 0200 lri $AC1.M, #0x0200 + 0de9 1fd8 mrr $AC0.M, $AX0.L + 0dea 4c00 add $ACC0, $AC1.L + 0deb 1c1e mrr $AR0, $AC0.M + 0dec 1818 lrr $AX0.L, @$AR0 + 0ded 1fda mrr $AC0.M, $AX0.H + 0dee 4c00 add $ACC0, $AC1.L + 0def 1c1e mrr $AR0, $AC0.M + 0df0 181a lrr $AX0.H, @$AR0 + 0df1 1fd9 mrr $AC0.M, $AX1.L + 0df2 4c00 add $ACC0, $AC1.L + 0df3 1c1e mrr $AR0, $AC0.M + 0df4 1819 lrr $AX1.L, @$AR0 + 0df5 1fdb mrr $AC0.M, $AX1.H + 0df6 4c00 add $ACC0, $AC1.L + 0df7 1c1e mrr $AR0, $AC0.M + 0df8 181b lrr $AX1.H, @$AR0 + 0df9 8a00 m2 + 0dfa 0080 0b00 lri $AR0, #0x0b00 + 0dfc 9800 mul $AX1.L, $AX1.H + 0dfd ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0dfe b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dff 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M + 0e00 6e30 movp's $ACC0 : @$AR0, $AC0.M + 0e01 1b1e srri @$AR0, $AC0.M + 0e02 8b00 m0 + 0e03 0080 0b00 lri $AR0, #0x0b00 + 0e05 0081 0b04 lri $AR1, #0x0b04 + 0e07 00da 042a lr $AX0.H, @0x042a + 0e09 02bf 0e54 call 0x0e54 + 0e0b 0081 0b08 lri $AR1, #0x0b08 + 0e0d 0080 0b00 lri $AR0, #0x0b00 + 0e0f 00da 042a lr $AX0.H, @0x042a + 0e11 00de 0429 lr $AC0.M, @0x0429 + 0e13 8a00 m2 + 0e14 c000 mulc $AC0.M, $AX0.H + 0e15 8b00 m0 + 0e16 6e00 movp $ACC0 + 0e17 1f5e mrr $AX0.H, $AC0.M + 0e18 02bf 0e54 call 0x0e54 + 0e1a 0080 0b00 lri $AR0, #0x0b00 + 0e1c 0081 0b0c lri $AR1, #0x0b0c + 0e1e 8100 clr $ACC0 + 0e1f 8900 clr $ACC1 + 0e20 00de 042b lr $AC0.M, @0x042b + 0e22 00df 042a lr $AC1.M, @0x042a + 0e24 00fe 042a sr @0x042a, $AC0.M + 0e26 5c00 sub $ACC0, $AC1.L + 0e27 1f5e mrr $AX0.H, $AC0.M + 0e28 02bf 0e5f call 0x0e5f + 0e2a 0080 0b0c lri $AR0, #0x0b0c + 0e2c 0081 0b10 lri $AR1, #0x0b10 + 0e2e 00da 0429 lr $AX0.H, @0x0429 + 0e30 02bf 0e54 call 0x0e54 + 0e32 0081 0b04 lri $AR1, #0x0b04 + 0e34 0082 0b0c lri $AR2, #0x0b0c + 0e36 0083 0e6d lri $AR3, #0x0e6d + 0e38 1108 0e51 bloopi #0x08, 0x0e51 + 0e3a 195f lrri $AC1.M, @$AR2 + 0e3b 15fb asr $ACC1, #-5 + 0e3c 1f1d mrr $AX0.L, $AC1.L + 0e3d 1f5f mrr $AX0.H, $AC1.M + 0e3e 193f lrri $AC1.M, @$AR1 + 0e3f 00e1 0b24 sr @0x0b24, $AR1 + 0e41 00e2 0b25 sr @0x0b25, $AR2 + 0e43 021b ilrri $AC0.M, @$AR3 + 0e44 00e3 0b26 sr @0x0b26, $AR3 + 0e46 1c7e mrr $AR3, $AC0.M + 0e47 00c0 038f lr $AR0, @0x038f + 0e49 02bf 0d99 call 0x0d99 + 0e4b 00c1 0b24 lr $AR1, @0x0b24 + 0e4d 00c2 0b25 lr $AR2, @0x0b25 + 0e4f 00c3 0b26 lr $AR3, @0x0b26 + 0e51 0000 nop + 0e52 8e00 set16 + 0e53 02df ret + +// + 0e54 8a00 m2 + 0e55 191f lrri $AC1.M, @$AR0 + 0e56 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 + 0e57 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 + 0e58 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e59 191f lrri $AC1.M, @$AR0 + 0e5a d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e5b 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0e5c 1b3e srri @$AR1, $AC0.M + 0e5d 8b00 m0 + 0e5e 02df ret + 0e5f 8a00 m2 + 0e60 8d00 set15 + 0e61 1f7e mrr $AX1.H, $AC0.M + 0e62 1918 lrri $AX0.L, @$AR0 + 0e63 a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 + 0e64 ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 + 0e65 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e66 1918 lrri $AX0.L, @$AR0 + 0e67 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0e68 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0e69 1b3e srri @$AR1, $AC0.M + 0e6a 8c00 clr15 + 0e6b 8b00 m0 + 0e6c 02df ret + 0e6d 0d00 lris $AC1.L, #0x00 + 0e6e 0d60 lris $AC1.L, #0x60 + 0e6f 0f40 lris $AC1.M, #0x40 + 0e70 0ca0 lris $AC0.L, #0xa0 + 0e71 0e80 lris $AC0.M, #0x80 + 0e72 0ee0 lris $AC0.M, #0xe0 + 0e73 0be0 lris $AX1.H, #0xe0 + 0e74 0c40 lris $AC0.L, #0x40 + +// store ramp??? +// AR0 = 0x0580 (left buffer?) +// AR1 = 0x0520 (right buffer?) + 0e75 00f9 0361 sr @0x0361, $AX1.L + 0e77 1fc0 mrr $AC0.M, $AR0 + 0e78 0200 fffc addi $AC0.M, #0xfffc // AC0.M = AR0 - 4; + 0e7a 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x057C; + 0e7b 1c5e mrr $AR2, $AC0.M // AR2 = AC0.M = 0x057C; + 0e7c 0083 043c lri $AR3, #0x043c // AR3 = 0x043C; + 0e7e 197e lrri $AC0.M, @$AR3 // AC0.M = Mem[AR3]; AR3++; + 0e7f 197f lrri $AC1.M, @$AR3 // AC1.M = Mem[AR3]; AR3++; + 0e80 80a2 nx'sl : $AC0.M, $AX0.H // AX0.H = Mem[AR3]; AR3++; Mem[AR0] = AC0.M; AR0++; + 0e81 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + 0e82 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + 0e83 1b1f srri @$AR0, $AC1.M + 0e84 1c02 mrr $AR0, $AR2 // AR0 = AR2; (0x0580) + 0e85 8100 clr $ACC0 + 0e86 00de 0402 lr $AC0.M, @0x0402 // AC0.M = Mem[0x0402]; (0x0FFC) (ACC0 = 0x0FFC0000) + 0e88 00fe 0362 sr @0x0362, $AC0.M // Mem[0x0362] = AC0.M; + 0e8a 1474 lsr $ACC0, #-12 // ACC0 >>= 12; + 0e8b 1f7e mrr $AX1.H, $AC0.M // AX1.H = AC0.M; (0x0000) + 0e8c 1f3c mrr $AX1.L, $AC0.L // AX1.L = AC0.L; (0xFFC0) + 0e8d 8900 clr $ACC1 + 0e8e 00dd 0430 lr $AC1.L, @0x0430 // AC1.L = Mem[0x0430]; + 0e90 1504 lsl $ACC1, #4 // ACC1 <<= 4; + 0e91 0604 cmpis $ACC0, #0x04 + 0e92 0290 0ee9 jns 0x0ee9 + 0e94 1fdd mrr $AC0.M, $AC1.L + 0e95 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0; temp buffer? + // store a ramp. for example, the ramp is 0xFFC0, 0xFF80, 0xFF40, 0xFF00, 0xFEC0 and so on... if start value (Mem[0x0402]) is 0x0FFC. + 0e97 1050 loopi #0x50 // for(i = 0; i < 80; i++) + 0e98 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L // ACC1 += AX1.L; Mem[AR2] = AC1.L; AR2++; + + 0e99 1fbe mrr $AC1.L, $AC0.M + 0e9a 00fe 0360 sr @0x0360, $AC0.M + 0e9c 8900 clr $ACC1 + 0e9d 1fbe mrr $AC1.L, $AC0.M + 0e9e 0af8 lris $AX0.H, #0xf8 // AX0.H = 0x00F8; + 0e9f 009b 00fc lri $AX1.H, #0x00fc // AX1.H = 0x00FC; + 0ea1 00d8 0361 lr $AX0.L, @0x0361 // AX0.L = Mem[0x0361]; + 0ea3 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0; + 0ea5 0083 02b0 lri $AR3, #0x02b0 // AR3 = 0x02B0; + 0ea7 195e lrri $AC0.M, @$AR2 // AC0.M = Mem[AR2]; + 0ea8 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M // AC0.M &= 0x00F8; AX0.L = Mem[AR0]; AR0++; Mem[AR3] = AC0.M; AR3++; + // do some processing on the ramp we just made, and merge it to the buffer at 0x0580 + 0ea9 1128 0eae bloopi #0x28, 0x0eae // + 0eab 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 // AC0.M &= AX1.H; AC1.M = Mem[AR2]; AR2++; + 0eac 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H // AC1.M &= 0x00F8; Mem[AR0] = AC1.M; AR0++; AX1.H = Mem[AR3]; AR3++; + 0ead 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 // ... + 0eae 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + + 0eaf 8a00 m2 // multiply by 2 + 0eb0 0082 02b0 lri $AR2, #0x02b0 + 0eb2 00dd 0430 lr $AC1.L, @0x0430 + 0eb4 1504 lsl $ACC1, #4 + 0eb5 1fe0 mrr $AC1.M, $AR0 + 0eb6 8100 clr $ACC0 + 0eb7 00de 0362 lr $AC0.M, @0x0362 + 0eb9 1474 lsr $ACC0, #-12 + 0eba 1f7e mrr $AX1.H, $AC0.M // AX1.H = 0x0000 + 0ebb 1f3c mrr $AX1.L, $AC0.L // AX1.L = 0xFFC0 + 0ebc 8f00 set40 + 0ebd 1943 lrri $AR3, @$AR2 + 0ebe 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ebf 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ec0 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ec1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ec2 f200 madd $AX0.L, $AX0.H + 0ec3 fe00 movpz $ACC0 + 0ec4 1c1f mrr $AR0, $AC1.M + 0ec5 1943 lrri $AR3, @$AR2 + 0ec6 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ec7 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + + 0ec8 114e 0ed0 bloopi #0x4e, 0x0ed0 // uh? 0x4E? skip two samples? + 0eca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ecb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ecc f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0ecd 1c1f mrr $AR0, $AC1.M + 0ece 1943 lrri $AR3, @$AR2 + 0ecf 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ed0 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + + 0ed1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ed2 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ed3 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0ed4 fe00 movpz $ACC0 + 0ed5 1b3e srri @$AR1, $AC0.M + 0ed6 8b00 m0 // don't multiply by 2 + 0ed7 8e00 set16 + 0ed8 00fe 0433 sr @0x0433, $AC0.M + 0eda 1c1f mrr $AR0, $AC1.M + 0edb 150c lsl $ACC1, #12 + 0edc 0340 0fff andi $AC1.M, #0x0fff + 0ede 00ff 0430 sr @0x0430, $AC1.M + 0ee0 0083 043c lri $AR3, #0x043c + 0ee2 191e lrri $AC0.M, @$AR0 + 0ee3 191f lrri $AC1.M, @$AR0 + 0ee4 80a0 nx'ls : $AX0.H, $AC0.M + 0ee5 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0ee6 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0ee7 1b7f srri @$AR3, $AC1.M + 0ee8 02df ret + +// + 0ee9 1fe0 mrr $AC1.M, $AR0 + 0eea 1c1f mrr $AR0, $AC1.M + // copy buffer at 0x0580 to buffer at 0x0520? + 0eeb 1128 0ef2 bloopi #0x28, 0x0ef2 + 0eed 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0eee 1b3e srri @$AR1, $AC0.M + 0eef 1c1f mrr $AR0, $AC1.M + 0ef0 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0ef1 1b3e srri @$AR1, $AC0.M + 0ef2 1c1f mrr $AR0, $AC1.M + + 0ef3 029f 0ed8 jmp 0x0ed8 + +// + 0ef5 0083 0520 lri $AR3, #0x0520 + 0ef7 00de 0433 lr $AC0.M, @0x0433 + 0ef9 1050 loopi #0x50 + 0efa 1b7e srri @$AR3, $AC0.M + 0efb 029f 0336 jmp 0x0336 + +// + 0efd 1c20 mrr $AR1, $AR0 + 0efe 185f lrr $AC1.M, @$AR2 + 0eff 1f7f mrr $AX1.H, $AC1.M + 0f00 193a lrri $AX0.H, @$AR1 + 0f01 6400 movr $ACC0, $AX0.H + 0f02 0078 0f07 bloop $AX0.L, 0x0f07 + 0f04 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 + 0f05 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M + 0f06 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 + 0f07 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M + 0f08 1a5b srr @$AR2, $AX1.H + 0f09 02df ret + +// InitUnkTable() + 0f0a 0098 8240 lri $AX0.L, #0x8240 + 0f0c 00f8 04e8 sr @0x04e8, $AX0.L + 0f0e 0098 7fff lri $AX0.L, #0x7fff + 0f10 00f8 04e9 sr @0x04e9, $AX0.L + 0f12 0098 7dbf lri $AX0.L, #0x7dbf + 0f14 00f8 04ea sr @0x04ea, $AX0.L + 0f16 0098 843f lri $AX0.L, #0x843f + 0f18 00f8 04eb sr @0x04eb, $AX0.L + 0f1a 0098 b23b lri $AX0.L, #0xb23b + 0f1c 00f8 04f0 sr @0x04f0, $AX0.L + 0f1e 0098 7fff lri $AX0.L, #0x7fff + 0f20 00f8 04f1 sr @0x04f1, $AX0.L + 0f22 0098 4dc4 lri $AX0.L, #0x4dc4 + 0f24 00f8 04f2 sr @0x04f2, $AX0.L + 0f26 0098 d808 lri $AX0.L, #0xd808 + 0f28 00f8 04f3 sr @0x04f3, $AX0.L + 0f2a 0098 0000 lri $AX0.L, #0x0000 + 0f2c 0080 04ec lri $AR0, #0x04ec + 0f2e 1004 loopi #0x04 + 0f2f 1b18 srri @$AR0, $AX0.L + 0f30 0080 04f4 lri $AR0, #0x04f4 + 0f32 1004 loopi #0x04 + 0f33 1b18 srri @$AR0, $AX0.L + 0f34 02df ret + +// mixer? + 0f35 0080 0f40 lri $AR0, #0x0f40 + 0f37 0083 0b00 lri $AR3, #0x0b00 + 0f39 8900 clr $ACC1 + 0f3a 0f50 lris $AC1.M, #0x50 + 0f3b 0098 6784 lri $AX0.L, #0x6784 + 0f3d 02bf 010e call 0x010e + 0f3f 0080 04e8 lri $AR0, #0x04e8 + 0f41 0082 04ec lri $AR2, #0x04ec + 0f43 0081 0b00 lri $AR1, #0x0b00 + 0f45 8900 clr $ACC1 + 0f46 0f50 lris $AC1.M, #0x50 + 0f47 0080 0b00 lri $AR0, #0x0b00 + 0f49 0083 0d00 lri $AR3, #0x0d00 + 0f4b 0098 7fff lri $AX0.L, #0x7fff + 0f4d 02bf 00ff call 0x00ff + 0f4f 8900 clr $ACC1 + 0f50 0f50 lris $AC1.M, #0x50 + 0f51 0080 0b00 lri $AR0, #0x0b00 + 0f53 0083 0d60 lri $AR3, #0x0d60 + 0f55 0098 b820 lri $AX0.L, #0xb820 + 0f57 02bf 00ff call 0x00ff + 0f59 0080 0ca0 lri $AR0, #0x0ca0 + 0f5b 0083 0b00 lri $AR3, #0x0b00 + 0f5d 8900 clr $ACC1 + 0f5e 0f50 lris $AC1.M, #0x50 + 0f5f 0098 6784 lri $AX0.L, #0x6784 + 0f61 02bf 010e call 0x010e + 0f63 0080 04e8 lri $AR0, #0x04e8 + 0f65 0082 04f4 lri $AR2, #0x04f4 + 0f67 0081 0b00 lri $AR1, #0x0b00 + 0f69 8900 clr $ACC1 + 0f6a 0f50 lris $AC1.M, #0x50 + 0f6b 0080 0b00 lri $AR0, #0x0b00 + 0f6d 0083 0d00 lri $AR3, #0x0d00 + 0f6f 0098 47e0 lri $AX0.L, #0x47e0 + 0f71 02bf 00ff call 0x00ff + 0f73 8900 clr $ACC1 + 0f74 0f50 lris $AC1.M, #0x50 + 0f75 0080 0b00 lri $AR0, #0x0b00 + 0f77 0083 0d60 lri $AR3, #0x0d60 + 0f79 0098 8001 lri $AX0.L, #0x8001 + 0f7b 02bf 00ff call 0x00ff + 0f7d 02df ret + + 0f7e 0000 nop 0f7f 0000 nop \ No newline at end of file diff --git a/docs/DSP/DSP_UC_Zelda.txt b/docs/DSP/DSP_UC_Zelda.txt index 7cd14f2784..cc812f3922 100644 --- a/docs/DSP/DSP_UC_Zelda.txt +++ b/docs/DSP/DSP_UC_Zelda.txt @@ -1,5081 +1,5081 @@ -/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -All code is now wrapped in void Function() {} - the new DSP LLE debugger -can parse this file and auto read symbols using those. - -BIG Questions: - - - Who resets the 0x0350 to the beginning of the command block? Wrap register? - - What does 00eb_Unk_BufferMultAddToDest?? - - Why is a PB-Transfer from RAM to DMEM 0xC0 shorts long but DMEM to RAM just 0x80 - -DSP functionality to test: - - Interrupts (7) - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */ -// -// memory map -// todo - define syntax for this so it can be auto read. - -// -0x0000 to 0x280 // Unknown table -0x0280 // command queue - -/////////////////////////////////////////// - -0x0300 to 0x0320 // AFC COEF table - -0x0342 // low part of the DSetupTable /(Luigi2us) thinks it is the number of PBs -0x0343 // current command code (the code for the switch - casement table) seems to be for debug... nobody loads it -0x0344 // high part of the (command & 0xFF) ... prolly some kind of paramter -0x0345 // low part of the command - -0x034e (0x0000) - -/////////////////////////////////////////// - - - -/////////////////////////////////////////// -// Initialized at 0688_InitCommandBlock() -0x0350 (0x0280) // address to end of the command queue -0x0351 (0x0280) // address to start of the command queue -0x0352 (0x0000) // number of commands - - -0x0356[] // current command queue... eg: 0x81000040 for DsetupTable -0x0358 // first parameter of the command ... - - -0x0364 // Temp Buffer for AFC Decoder - -/////////////////////////////////////////// -0x0380 // RAM Address of the PBs -0x0381 // - -0x038e // used by COMMAND_02 copies the low part of the command to this place - - -0x03a8 // COMMAND_02 copies a struct with the size of 0x40 to the place - -/////////////////////////////////////////// -// used by 05b8_NewMail() exception to store register and restore registers -0x03fa to 0x03ff - -// shared and used by COMMAND_01 (DSetupTable) -0x03f0 // 0x00 -0x03f1 // 0x96 -0x03f2 // 0xFF -0x03f3 // 0x30 -0x03f5 // 0x10 -0x03f6 // 0x00 -0x03f7 // 0x100 ... got some more math... have to recheck it - - -0x03f9 // used by COMMAND_02... if the program decides to continue the UCode it stores the continue address... - -////////////////////////////////////////////// -// current PB in DSyncFrame -0x0400 -. -. -. -0x04C0 - - -/// -0x0400 - must be != 0 to be a valid block -0x0401 - must be != 0 to be a valid block - -0x0402 - Sample Decode Offset ?? Offset = (*0x402 * 0x50) - -0x0404 - Initialize Sample Decoder -0x0406 - Direct Stream ... no sample decoder is needed. - At the end of the PB Handling 0x0404 is set to 0 if it is NOT a direct stream - -0x0430 - Base Address ?? (0x0430 + Offset) << 4 - -0x042c flag if > 0 033d_unk() does something - - -0x0433 stored to 0x03f8 ... i think that is the current sample buffer - -0x0458 hmmm.... - -0x0480 if 0x0406 is zero check how we have to decode this data... - -0x0484 seems to contain filter settings... -0x0484 & 0x1f -> (02ed to 030f) -0x0484 & 0x20 - -0x04a8 if != zero sample is modified with function at 0x0c84.. perhaps an filter or volume - - -//////////////////////////////////////// -0x04d3 "offset to sample data" ???? - -There's definitely a bunch of sample data stored in each PB but I don't know exactly how. - - -/////////////////////////////////////////// -// Initialized at 0e14_Unk() -0x04e8 (0x8240) -0x04e9 (0x7FFF) -0x04ea (0x7DBF) -0x04eb (0x843f) -0x04ec (0x0000) -0x04ed (0x0000) -0x04ee (0x0000) -0x04ef (0x0000) - -0x04f0 (0xb23b) -0x04f1 (0x7FFF) -0x04f2 (0x4dc4) -0x04f3 (0xd808) -0x04f4 (0x0000) -0x04f5 (0x0000) -0x04f6 (0x0000) -0x04f7 (0x0000) - -/////////////////////////////////////////// -0x04fc... // used for some kind of data exchange between SyncFrame and MailExceptionHandler - // It is like this: - // (0x04fc + lastRenderedFrame) must be "something" :) - -0x0580.. Unresampled audio data is decoded to here - -/////////////////////////////////////////// -// Initialized at 04c0_Unk()... used by SyncFrame -0x0B00 to 0x0C00 -// The memory at 0b00 seems to be generally used as scratch space for various things. - - -////////////////////////////////////////// - -0x0dc0 -- ?????????? - - -// -// exception vector -// -0000 029f 0012 jmp 0x0012 -> ResetVector() -0002 0000 nop -0003 0000 nop -0004 02ff rti -0005 0000 nop -0006 02ff rti -0007 0000 nop -0008 02ff rti -0009 0000 nop -000a 02ff rti -000b 0000 nop -000c 02ff rti -000d 0000 nop -000e 029f 05b8 jmp 0x05b8 -> 05b8_NewMail() - -0010 029f 004e jmp 0x004e -> 004e_ContinueUCode() ??? - -// reset vector - -void 0012_ResetVector() -{ - // 0012 1205 sbclr #0x05 - - // 0013 02bf 0057 call 0x0057 - 0057_InitHardware() - - /* - 0015 8100 clr $ACC0 - 0016 009f 1000 lri $AC1.M, #0x1000 - 0018 0080 0000 lri $AR0, #0x0000 - 001a 005f loop $AC1.M - 001b 1b1e srri @$AR0, $AC0.M - Clear memory - */ - { - short ACC0 = 0; - short AR0 = 0x0000; - for (int i=0; i<0x1000; i++) - { - *AR0 = ACC0; - AR0++; - } - } - - // 001c 02bf 0688 call 0x0688 - 0688_InitCommandBlock(); - - // 001e 02bf 04c0 call 0x04c0 - 04c0_UnknownInit(); - - // 0020 02bf 0e14 call 0x0e14 - 0e14_DolbyInit(); // Init from 0x04e8 to 0x04f8 - - // 0022 0e00 lris $AC0.M, #0x00 - // 0023 02bf 066a call 0x066a - SendMB_DCD1(0x0000) - - // 0025 009e 1111 lri $AC0.M, #0x1111 - // 0027 02bf 0674 call 0x0674 - SendMB_F355(0x1111) - - // 0029 0e00 lris $AC0.M, #0x00 - // 002a 00fe 034e sr @0x034e, $AC0.M - *0x034e = 0x00 - - 002c 1305 sbset #0x05 - - // 002d 029f 06c5 jmp 0x06c5 - - // - // an exception will be raised if a new mail is inside the mailbox - // the exception handler will copy the command to an address and the - // 06c5_CopyCommandBlock creates a copy of the command to 0x0356 - // -:WaitForNewCommandBlock - while (06c5_CopyCommandBlock() == 0x002d); - - // 002f 00df 0357 lr $AC1.M, @0x0357 - // 0031 00ff 0345 sr @0x0345, $AC1.M - - *0x0345 = *0x0357 - - // 0033 00de 0356 lr $AC0.M, @0x0356 - // 0035 1ffe mrr $AC1.M, $AC0.M - // 0036 0340 00ff andi $AC1.M, #0x00ff - // 0038 00ff 0344 sr @0x0344, $AC1.M - - short upperCommand = *0x0356 // AC0 = upperCommand - *0x0344 = upperCommand & 0x00FF - - // 003a 1479 lsr $ACC0, #-7 - // 003b 0240 007e andi $AC0.M, #0x007e - // 003d 00fe 0343 sr @0x0343, $AC0.M - upperCommand = (upperCommand >> 7) & 0x7e // F|RES: i think duddy is wrong here ... a negative must be a shift right - *0x0343 = upperCommand - - // 003f 0200 0075 addi $AC0.M, #0x0075 - // 0041 1c1e mrr $AR0, $AC0.M - // 0042 170f jmpr $AR0 - // switch casement of the commands.. jump table is at 0075 - - switch (upperCommand >> 1) // command must be shift >> 1 in our source code because the jump table is aligned with 2 Bytes - { - // case 0x00: 0x0043 - case 0x01: 0095_COMMAND_01(); break; - case 0x02: 0243_COMMAND_02(); break; - - case 0x03: 0x0073 - case 0x04: 0095_COMMAND_04(); break; - case 0x05: 0x0592 - case 0x06: 0x0469 - case 0x07: 0x041d - case 0x08: 0x0485 - case 0x09: 0x044d - // case 0x0A: 0x0043 - // case 0x0B: 0x0043 - // case 0x0C: 0x0043 - case 0x0D: 0x00b2 - // case 0x0E: 0x0043 - // case 0x0F: 0x0043 - } - - # 0043 0092 00ff lri $CR, #0x00ff - - // 0045 0e04 lris $AC0.M, #0x04 - // 0046 02bf 066a call 0x066a - SendMB_DCD1(0x0004) - - // 0048 00de 0356 lr $AC0.M, @0x0356 - // 004a 02bf 0674 call 0x0674 - SendMB_F355(@0x0356) - - // 004c 029f 002d jmp 0x002d - GOTO :WaitForNewCommandBlock -} - -void 004e_ContinueUCode??() -{ - # 004e 1205 sbclr #0x05 - - // 004f 02bf 0057 call 0x0057 - 0057_InitHardware() - - // 0051 0e01 lris $AC0.M, #0x01 - // 0052 02bf 066a call 0x066a - SendMB_DCD1(0x0001) - - # 0054 1305 sbset #0x05 - - // 0055 029f 002d jmp 0x002d - GOTO :WaitForNewCommandBlock -} - -void 0057_InitHardware() -{ - 0057 1202 sbclr #0x02 - 0058 1203 sbclr #0x03 - 0059 1204 sbclr #0x04 - 005a 1306 sbset #0x06 - 005b 8e00 set16 - 005c 8c00 clr15 - 005d 8b00 m0 - - // Set all indexing wrappers to max range. - 005e 009e ffff lri $AC0.M, #0xffff - 0060 1d1e mrr $WR0, $AC0.M - 0061 1d3e mrr $WR1, $AC0.M - 0062 1d5e mrr $WR2, $AC0.M - 0063 1d7e mrr $WR3, $AC0.M - - // Have CR point to the HW interface. - 0064 0092 00ff lri $CR, #0x00ff - // 0066 02df ret -} - -void 0067_CopyCommand(_destAddr($AR0), _loopCount($AC0.M)) -{ - // 0067 0090 0000 lri $AC0.H, #0x0000 - // 0069 0c00 lris $AC0.L, #0x00 - // 006a 0081 0358 lri $AR1, #0x0358 - AC0.H = 0x0000 - AC0.L = 0x00 - AR1 = 0x0358 - - // 006c 007e 0071 bloop $AC0.M, 0x0071 - // 006e 193e lrri $AC0.M, @$AR1 - // 006f 1b1e srri @$AR0, $AC0.M - // 0070 193e lrri $AC0.M, @$AR1 - // 0071 1b1e srri @$AR0, $AC0.M - - for (int i=0; i<_loopCount; i++) - { - *_destAddr++ = *AR1.M++ - *_destAddr++ = *AR1.M++ - } - - // 0072 02df ret -} - -/* - 0073 029f 0043 jmp 0x0043 - 0075 029f 0043 jmp 0x0043 - 0077 029f 0095 jmp 0x0095 - 0079 029f 0243 jmp 0x0243 - 007b 029f 0073 jmp 0x0073 - 007d 029f 0580 jmp 0x0580 - 007f 029f 0592 jmp 0x0592 - 0081 029f 0469 jmp 0x0469 - 0083 029f 041d jmp 0x041d - 0085 029f 0485 jmp 0x0485 - 0087 029f 044d jmp 0x044d - 0089 029f 0043 jmp 0x0043 - 008b 029f 0043 jmp 0x0043 - 008d 029f 0043 jmp 0x0043 - 008f 029f 00b2 jmp 0x00b2 - 0091 029f 0043 jmp 0x0043 - 0093 029f 0043 jmp 0x0043 -jump table for command code decoding - */ - -// DsetupTable -void 0095_COMMAND_01() -{ - // 0095 0080 0380 lri $AR0, #0x0380 - // 0097 0e04 lris $AC0.M, #0x04 - // 0098 02bf 0067 call 0x0067 - 0067_CopyCommand(0x0380, 0x04) - - // 009a 0081 0382 lri $AR1, #0x0382 - // 009c 009f 0000 lri $AC1.M, #0x0000 - // 009e 0080 0280 lri $AR0, #0x0280 - // 00a0 02bf 0523 call 0x0523 - 0523_CopyRAMtoDMEM(0x0382, 0x0000, 0x0280) - - // 00a2 0081 0384 lri $AR1, #0x0384 - // 00a4 009f 0300 lri $AC1.M, #0x0300 - // 00a6 0080 0020 lri $AR0, #0x0020 - // 00a8 02bf 0523 call 0x0523 - 0523_CopyRAMtoDMEM(0x0384, 0x0300, 0x0020) - - // 00aa 00de 0345 lr $AC0.M, @0x0345 - // 00ac 00fe 0342 sr @0x0342, $AC0.M - *0x0342 = *0x0345 - - // 00ae 02bf 0bec call 0x0bec - 0bec_Unk() - - // 00b0 029f 0043 jmp 0x0043 -} - -// Command 0xD -void 00b2_Unk_CommandD() { - 00b2 0080 0374 lri $AR0, #0x0374 - 00b4 0e01 lris $AC0.M, #0x01 - 00b5 00fe 0377 sr @0x0377, $AC0.M - 00b7 00fe 037c sr @0x037c, $AC0.M - 00b9 02bf 0067 call 0x0067 // CopyCommand - - // 00bb 00de 0345 lr $AC0.M, @0x0345 - // 00bd 00fe 0376 sr @0x0376, $AC0.M - *0x0376 = *0x0345; - - 00bf 029f 0043 jmp 0x0043 -} - -void 00c1_CopyPBToDMEM() -{ - // 00c1 0081 034c lri $AR1, #0x034c - // 00c3 009f 0400 lri $AC1.M, #0x0400 - // 00c5 0080 00c0 lri $AR0, #0x00c0 - // 00c7 02bf 0523 call 0x0523 - // 00c9 02df ret - - 0523_CopyRAMtoDMEM(0x034c, 0x0400, 0x00c0); -} - - -void 00ca_CopyPBToRAM() -{ - // 00ca 0081 034c lri $AR1, #0x034c - // 00cc 009f 0400 lri $AC1.M, #0x0400 - // 00ce 0080 0080 lri $AR0, #0x0080 - // 00d0 0081 034c lri $AR1, #0x034c - AR1 = 0x034c - AC1.M = 0x0400 - AR0 = 0x0080 - - // 00d2 193e lrri $AC0.M, @$AR1 - // 00d3 193c lrri $AC0.L, @$AR1 - AC0.M = *0x034c - AC0.L = *0x034d - - // 00d4 0098 0000 lri $AX0.L, #0x0000 - // 00d6 7000 addaxl $ACC0, $AX0.L - // 00d7 02bf 0532 call 0x0532 - - 0532_DMEMtoRAM(0x0400, ACC0, 0x0080) - - // 00d9 02df ret -} - - -void 00da_CopyBuffer(_src($AR0), _dest($AR3), LenMinusOne(_AC1.M)) -{ - 00da 191e lrri $AC0.M, @$AR0 - 00db 191a lrri $AX0.H, @$AR0 - 00dc 005f loop $AC1.M - 00dd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 00de 1b7e srri @$AR3, $AC0.M - 00df 1b7a srri @$AR3, $AX0.H - // 00e0 02df ret -} - - -void 00e1_XorBuffer( .., _LenInDWORDs(_AC1.M)) { - 00e1 191e lrri $AC0.M, @$AR0 - 00e2 191a lrri $AX0.H, @$AR0 - // 00e3 007f 00e8 bloop $AC1.M, 0x00e8 - for (int i = 0; i < AC1.M; i++) { - 00e5 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 00e6 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 00e7 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 00e8 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - } - // 00e9 0000 nop - // 00ea 02df ret -} - - -// --- the disasm looks buggy... AR3 seems to be the destination but it isnt used at all... no idea -// Hm, SL actually is able to use AR3 implicitly. -void 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) -{ - // 00eb 8a00 m2 // All multiplication results are multiplied by 2. - // 00ec 157f lsr $ACC1, #-1 //_size/2 - 00ed 1c20 mrr $AR1, $AR0 - 00ee 1c03 mrr $AR0, $AR3 // 'sl stores to AR0 - - // SW pipelineing strikes again... - 00ef 193a lrri $AX0.H, @$AR1 - 00f0 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 - 00f1 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 - // 00f2 007f 00f7 bloop $AC1.M, 0x00f7 - for (int i = 0; i < _size/2; i++) { - AX0.H = *AR1; - PROD = * - // 00f4 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - // 00f5 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - // 00f6 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - // 00f7 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - ACC0 += AX1 - AX0.H = *AR1; - *(AR3++) = AC0.M; - ACC0 = PROD; - PROD = AX0.L * AX0.H; - ... - } - - // In simplified form: - AR1 = AR0; - AR0 = AR3; - for (int i = 0; i < _size; i++) { - *AR0 = ((*AR0 << 16) + *AR1 * Factor) >> 16); - } - - // 00f8 8b00 m0 // Restore multiplication results. - // 00f9 02df ret -} - -void 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) -{ - //00fa 8a00 m2 - 00fb 191a lrri $AX0.H, @$AR0 - 00fc 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 - 00fd 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 00fe 005f loop $AC1.M - 00ff 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M - - //0100 8b00 m0 - //0101 02df ret -} - - - // Clears the 0d00 and 0d60 buffers, plus a lot of other intermediate buffers. - // Also does some other things. -void 0102_PrepareFrameBuffers() - { - // 0102 8100 clr $ACC0 - // 0103 8900 clr $ACC1 - // 0104 0e50 lris $AC0.M, #0x50 - ACC0 = 0 - ACC1 = 0 - AC0.M = 0x50 - - // 0105 0080 0d00 lri $AR0, #0x0d00 - // 0107 005e loop $AC0.M - // 0108 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0d00++ = 0x00 - - // 0109 0080 0d60 lri $AR0, #0x0d60 - // 010b 005e loop $AC0.M - // 010c 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0d60++ = 0x00 - - // 10d 02bf 0e3f call 0x0e3f - - // This one adds and multiplies buffers together. Maybe surround or reverb stuff. - 0e3f_DolbyMixdown() - - // 010f 8100 clr $ACC0 - // 0110 8900 clr $ACC1 - // 0111 0e50 lris $AC0.M, #0x50 - ACC0 = 0 - ACC1 = 0 - AC0.M = 0x50 - - // 0112 0080 0ca0 lri $AR0, #0x0ca0 - // 0114 005e loop $AC0.M - // 0115 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0ca0++ = 0x00 - - // 0116 0080 0f40 lri $AR0, #0x0f40 - // 0118 005e loop $AC0.M - // 0119 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0f40++ = 0x00 - - // 011a 0080 0fa0 lri $AR0, #0x0fa0 - // 011c 005e loop $AC0.M - // 011d 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0fa0++ = 0x00 - - // 011e 0080 0a00 lri $AR0, #0x0a00 - // 0120 005e loop $AC0.M - // 0121 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x0a00++ = 0x00 - - // 0122 0080 09a0 lri $AR0, #0x09a0 - // 0124 005e loop $AC0.M - // 0125 1b1f srri @$AR0, $AC1.M - for (int i=0; i<0x50; i++) - *0x09a0++ = 0x00 - - // 0126 02df ret -} - - -void 0127_Unk() { - 0127 00c0 03a0 lr $AR0, @0x03a0 - 0129 191a lrri $AX0.H, @$AR0 - 012a 00df 03a1 lr $AC1.M, @0x03a1 - 012c 009b 00a0 lri $AX1.H, #0x00a0 - 012e 0081 0393 lri $AR1, #0x0393 - 0130 18bc lrrd $AC0.L, @$AR1 - 0131 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 0132 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0133 0080 0050 lri $AR0, #0x0050 - 0135 0508 addis $ACC1, #0x08 - 0136 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - // 0525_CopyRAMtoDMEM(... ,.. , 0x50) - - // 0138 00de 0390 lr $AC0.M, @0x0390 - // 013a 02a0 0001 andf $AC0.M, #0x0001 - // 013c 029d 0145 jlz 0x0145 - if (*0x0390 & 1) { - 013e 0080 0398 lri $AR0, #0x0398 - 0140 0e08 lris $AC0.M, #0x08 - 0141 00c1 03a1 lr $AR1, @0x03a1 - 0143 02bf 0b2e call 0x0b2e // 0b2e_Unk_Multiply - } - 0145 0f50 lris $AC1.M, #0x50 - 0146 00c0 03a1 lr $AR0, @0x03a1 - 0148 00da 0394 lr $AX0.H, @0x0394 - // 014a 8600 tstaxh $AX0.H - // 014b 0295 0152 jz 0x0152 - if (*0x0394 != 0) { - 014d 1c7a mrr $AR3, $AX0.H - 014e 00d8 0395 lr $AX0.L, @0x0395 - 0150 02bf 00eb call 0x00eb // 00eb_Unk_BufferMultAddToDest - } - 0152 0f50 lris $AC1.M, #0x50 - 0153 00c0 03a1 lr $AR0, @0x03a1 - 0155 00da 0396 lr $AX0.H, @0x0396 - 0157 8600 tstaxh $AX0.H - 0158 0295 015f jz 0x015f - 015a 1c7a mrr $AR3, $AX0.H - 015b 00d8 0397 lr $AX0.L, @0x0397 - 015d 02bf 00eb call 0x00eb // 00eb_Unk_BufferMultAddToDest - - // 015f 00de 0390 lr $AC0.M, @0x0390 - // 0161 02a0 0002 andf $AC0.M, #0x0002 - // 0163 02dd retlz - if (*0x390 & 2) - return; - - 0164 0080 0398 lri $AR0, #0x0398 - 0166 0e08 lris $AC0.M, #0x08 - 0167 00c1 03a1 lr $AR1, @0x03a1 - 0169 02bf 0b2e call 0x0b2e // 0b2e_Unk_Multiply - 016b 02df ret -} - - -// Looks similar to something else... -void 016c_Unk_SetupMemAt_0c00() -{ - 016c 8900 clr $ACC1 - - // 016d 009f 0dc0 lri $AC1.M, #0x0dc0 - // 016f 00ff 03a1 sr @0x03a1, $AC1.M - *0x03a1 = 0x0dc0; - // 0171 009f 03a8 lri $AC1.M, #0x03a8 - // 0173 00ff 03a2 sr @0x03a2, $AC1.M - *0x03a2 = 0x03a8; - // 0175 009f 03a4 lri $AC1.M, #0x03a4 - // 0177 00ff 03a0 sr @0x03a0, $AC1.M - *0x03a0 = 0x03a4; - - // Dangerous bloopi! It points to the SECOND HALF of a 2-word instruction so - // a naive check won't catch it! I think our current code does, though. - - // 0179 1104 019f bloopi #0x04, 0x019f - for (int i = 0; i < 4; i++) { - // 017b 00c0 03a2 lr $AR0, @0x03a2 - // 017d 0083 0390 lri $AR3, #0x0390 - // 017f 0f0e lris $AC1.M, #0x0e - // 0180 02bf 00da call 0x00da - 00da_CopyBuffer(@0x03a2, 0x0390, 0x0e) - - 0182 00da 0390 lr $AX0.H, @0x0390 - 0184 8600 tstaxh $AX0.H - 0185 0295 0191 jz 0x0191 - if (*0x0390) { - 0187 00df 03a1 lr $AC1.M, @0x03a1 - 0189 1c7f mrr $AR3, $AC1.M - 018a 0550 addis $ACC1, #0x50 - - // 018b 1c1f mrr $AR0, $AC1.M - // 018c 0f06 lris $AC1.M, #0x06 - // 018d 02bf 00da call 0x00da - 00da_CopyBuffer($AC1.M, $AR3, 0x06); - - // 018f 02bf 0127 call 0x0127 - 0127_Unk(); - } - // 0191 00de 03a2 lr $AC0.M, @0x03a2 - // 0193 0410 addis $ACC0, #0x10 - // 0194 00fe 03a2 sr @0x03a2, $AC0.M - (*0x03a2) += 0x10; - - // 0196 00de 03a1 lr $AC0.M, @0x03a1 - // 0198 0460 addis $ACC0, #0x60 - // 0199 00fe 03a1 sr @0x03a1, $AC0.M - (*0x03a1) += 0x60; - - // 019b 00de 03a0 lr $AC0.M, @0x03a0 - // 019d 7400 incm $AC0.M - // 019e 00fe 03a0 sr @0x03a0, $AC0.M - (*0x0ea0)++; - } - - // 01a0 0f50 lris $AC1.M, #0x50 - // 01a1 0080 0c00 lri $AR0, #0x0c00 - // 01a3 0083 0e80 lri $AR3, #0x0e80 - // 01a5 0098 7fff lri $AX0.L, #0x7fff - // 01a7 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src(0x0c00), _Dest(0x0e80), _size(0x50), _factor(0x7fff)) - - // 01a9 0f50 lris $AC1.M, #0x50 - // 01aa 0080 0c00 lri $AR0, #0x0c00 - // 01ac 0083 0ee0 lri $AR3, #0x0ee0 - // 01ae 0098 b820 lri $AX0.L, #0xb820 - // 01b0 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src(0x0c00), _Dest(0x0ee0), _size(0x50), _factor(0xb820)) - - // 01b2 0f28 lris $AC1.M, #0x28 - // 01b3 0080 0c78 lri $AR0, #0x0c78 - // 01b5 0083 0e80 lri $AR3, #0x0e80 - // 01b7 0098 b820 lri $AX0.L, #0xb820 - // 01b9 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src(0x0c78), _Dest(0x0e80), _size(0x28), _factor(0xb820)) - // 01bb 0f28 lris $AC1.M, #0x28 - // 01bc 0080 0c78 lri $AR0, #0x0c78 - // 01be 0083 0ee0 lri $AR3, #0x0ee0 - // 01c0 0098 7fff lri $AX0.L, #0x7fff - // 01c2 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src(0x0c78), _Dest(0x0e80), _size(0x28), _factor(0x7fff)) - - // Zero the temporary buffers 0x0c00 and 0x0c50 - 01c4 8100 clr $ACC0 - 01c5 8900 clr $ACC1 - 01c6 0e50 lris $AC0.M, #0x50 - 01c7 0080 0c00 lri $AR0, #0x0c00 - 01c9 005e loop $AC0.M - 01ca 1b1f srri @$AR0, $AC1.M - 01cb 0080 0c50 lri $AR0, #0x0c50 - 01cd 005e loop $AC0.M - 01ce 1b1f srri @$AR0, $AC1.M - - // 01cf 02df ret -} - -void 01d0_Unk() { - // 01d0 00c0 03a0 lr $AR0, @0x03a0 - // 01d2 181a lrr $AX0.H, @$AR0 - AX0.H = *0x03a0; - - // 01d3 8100 clr $ACC0 - // 01d4 181e lrr $AC0.M, @$AR0 - AC0.M = *0x03a0; - - // 01d5 00db 0391 lr $AX1.H, @0x0391 - AX1.H = *0x0391; - - // 01d7 7400 incm $AC0.M - AC0.M++; - - // 01d8 d100 cmpar $ACC1, $AX0.H - // 01d9 0270 ifge - if (ACC1 - AX0.H >= 0) { - 01da 8100 clr $ACC0 - } - - 01db 1b1e srri @$AR0, $AC0.M - 01dc 00df 03a1 lr $AC1.M, @0x03a1 - 01de 009b 00a0 lri $AX1.H, #0x00a0 - 01e0 0081 0393 lri $AR1, #0x0393 - 01e2 18bc lrrd $AC0.L, @$AR1 - 01e3 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 01e4 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - - // 01e5 0080 0050 lri $AR0, #0x0050 - // 01e7 02bf 0532 call 0x0532 - 0532_DMEMtoRAM(_DMEM(AC1.M), _pMemAddr(ACC0), 0x50) - - 01e9 02df ret -} - -void 01ea_Unk() { - 01ea 8900 clr $ACC1 - // 01eb 0f28 lris $AC1.M, #0x28 // half of 0x50 - // 01ec 0080 0c50 lri $AR0, #0x0c50 - // 01ee 0083 0ea8 lri $AR3, #0x0ea8 - // 01f0 0098 b820 lri $AX0.L, #0xb820 - // 01f2 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - 01f4 8900 clr $ACC1 - // 01f5 0f28 lris $AC1.M, #0x28 - // 01f6 0080 0c50 lri $AR0, #0x0c50 - // 01f8 0083 0f08 lri $AR3, #0x0f08 - // 01fa 0098 7fff lri $AX0.L, #0x7fff - // 01fc 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - - // 01fe 009f 0dc0 lri $AC1.M, #0x0dc0 - // 0200 00ff 03a1 sr @0x03a1, $AC1.M - // 0202 009f 03a8 lri $AC1.M, #0x03a8 - // 0204 00ff 03a2 sr @0x03a2, $AC1.M - // 0206 009f 03a4 lri $AC1.M, #0x03a4 - // 0208 00ff 03a0 sr @0x03a0, $AC1.M - (*0x03a1) = 0x0dc0; - (*0x03a2) = 0x03a8; - (*0x03a0) = 0x03a4; - - // Dangerous bloopi! It points to the SECOND HALF of a 2-word instruction so - // a naive check won't catch it! I think our current code does, though. - - // 020a 1104 0228 bloopi #0x04, 0x0228 - for (int i = 0; i < 4; i++) { - // 020c 00c0 03a2 lr $AR0, @0x03a2 - // 020e 0083 0390 lri $AR3, #0x0390 - // 0210 0f0e lris $AC1.M, #0x0e - // 0211 02bf 00da call 0x00da - 00da_CopyBuffer(_src(*0x03a2), _dest(0x0390), _LenInDWORDs(0xE)) - - // 0213 00da 0390 lr $AX0.H, @0x0390 - // 0215 8600 tstaxh $AX0.H - // 0216 0295 021a jz 0x021a - if (*0x0390) { - // 0218 02bf 01d0 call 0x01d0 - - // Copy some buffer to RAM? - 01d0_Unk(); - } - - // 021a 00de 03a2 lr $AC0.M, @0x03a2 - // 021c 0410 addis $ACC0, #0x10 - // 021d 00fe 03a2 sr @0x03a2, $AC0.M - (*0x03a2) += 0x10; - - // 021f 00de 03a1 lr $AC0.M, @0x03a1 - // 0221 0460 addis $ACC0, #0x60 - // 0222 00fe 03a1 sr @0x03a1, $AC0.M - (*0x03a1) += 0x60; - - // 0224 00de 03a0 lr $AC0.M, @0x03a0 - // 0226 7400 incm $AC0.M - // 0227 00fe 03a0 sr @0x03a0, $AC0.M - (*0x03a0)++; - } - 0229 02df ret -} - - -void 022a_Copy_XXX_From_RAM_To_0x03a8() -{ - // 022a 0081 0386 lri $AR1, #0x0386 - // 022c 009f 03a8 lri $AC1.M, #0x03a8 - // 022e 0080 0040 lri $AR0, #0x0040 - // 0230 02bf 0523 call 0x0523 - 0523_CopyRAMtoDMEM(0x0386, 0x03a8, 0x0040); - - // 0232 02df ret -} - - -void 0233_Increase_32BitAddress_InMem(_MemAddr(AR0), _Bytes(AX0.L)) -{ - // 0233 191e lrri $AC0.M, @$AR0 - // 0234 189c lrrd $AC0.L, @$AR0 - // 0235 4800 addax $ACC0, $AX0 - // 0236 1b1e srri @$AR0, $AC0.M - // 0237 1b1c srri @$AR0, $AC0.L - - *((u32*)AR0) += AX0 - - // 0238 02df ret -} - - -void 0239_WaitUntilLastFrameGotSynced() -{ - // 0239 8100 clr $ACC0 - // 023a 8900 clr $ACC1 - // 023b 00df 0354 lr $AC1.M, @0x0354 - // 023d 00de 034e lr $AC0.M, @0x034e - // 023f 8200 cmp - // 0240 0293 0239 jle 0x0239 // loop - do { - - } while (*0x0354 > *0x034e); // TODO: CHECK - - // 0242 02df ret -} - -///////////////////////// -// -// -// 0x0341: Number of Frames to render ... - -// 0x034c + 0x034d: RAM address of the current PB block - -// 0x034e: Last Sync message for rendered frame -// 0x0354: PB loop counter - -// 0x0355: Current Frame - -// 0x0380: ??? -// 0x0381: ??? - -// 0x0388: RAM Address of Output Buffer1 -// 0x038a: RAM Address of Output Buffer2 -// -// 0x038f: Output Buffer Address (0x0520 most of the time) -// -// 0x03f8: *0x0433 -// 0x0520: Some kind of sample buffer - -// 0x0d00: Left mix buffer -// 0x0d60: Right mix buffer - -void 0243_COMMAND_02() // sync frame -{ - // 0243 0080 0388 lri $AR0, #0x0388 - // 0245 0081 0067 lri $AR1, #0x0067 - // 0247 0e02 lris $AC0.M, #0x02 - // 0248 173f callr $AR1 - 0067_CopyCommand(0x0388, 0x02); - - // 0249 00de 0344 lr $AC0.M, @0x0344 - // 024b 00fe 0341 sr @0x0341, $AC0.M - *0x0341 = *0x0344; - - // 024d 00de 0345 lr $AC0.M, @0x0345 - // 024f 00fe 038e sr @0x038e, $AC0.M - *0x038e = *0x0345; - - // 0251 8100 clr $ACC0 - // 0252 00fe 0355 sr @0x0355, $AC0.M - *0x0355 = 0x00; - - // 0254 02bf 022a call 0x022a - 022a_Copy_XXX_From_RAM_To_0x03a8(); // perhaps an PB ?? - - // 0256 02bf 05a4 call 0x05a4 - 05A4_ResetAccelerator(); - - - // 0258 00de 0341 lr $AC0.M, @0x0341 - // 025a 007e 0418 bloop $AC0.M, 0x0418 - - // Frame size is 0xa0 * *0x0341 - for (int j=0; j< *0x0341; j++) // 0x0341 = high part of the (command & 0xFF) ... perhaps number of frames to render?? - { - // 025c 02bf 0102 call 0x0102 - 0102_PrepareFrameBuffers(); - - // 025e 02bf 016c call 0x016c - 016c_Unk_SetupMemAt_0c00(); - - // 0260 02bf 095f call 0x095f - 095f_Unk_SetupMemAt0_0180(); - - // 0262 00de 0355 lr $AC0.M, @0x0355 - // 0264 7400 incm $AC0.M - // 0265 00fe 0355 sr @0x0355, $AC0.M - (*0x0355)++; - - // 0267 8100 clr $ACC0 - // 0268 00fe 0354 sr @0x0354, $AC0.M - *0x0354 = 0; // PB counter - - // 026a 00de 0342 lr $AC0.M, @0x0342 - // 026c 007e 03c0 bloop $AC0.M, 0x03c0 - for (int i=0; i<*0x0342; i++) // 0x0342 - low part of the DSetupTable Command. Number of PBs? - { - // 026e 02bf 0239 call 0x0239 - 0239_WaitUntilLastFrameGotSynced(); - - // 0270 8100 clr $ACC0 - // 0271 8900 clr $ACC1 - ACC0 = 0; - ACC1 = 0; - - // this block is for masking out PBs... the lower part of the sync messages are updating this mask - // but i am not 100 percent sure how it works - { - // 0272 00de 0354 lr $AC0.M, @0x0354 - // 0274 147c lsr $ACC0, #-4 - // 0275 0200 04fc addi $AC0.M, #0x04fc - // 0277 1c1e mrr $AR0, $AC0.M - AC0.M = *0x0354 >> 4; - AR0 = AC0.M + 0x04fc; - - 0278 181f lrr $AC1.M, @$AR0 - 0279 00de 0354 lr $AC0.M, @0x0354 - 027b 0240 000f andi $AC0.M, #0x000f - // 027d 3d80 lsrnr - ACC1 <<= ACC0 - - 027e 03c0 8000 andcf $AC1.M, #0x8000 - // 0280 029c 03bc jlnz 0x03bc - GOTO NEXT_BLOCK: - } - - // 0282 00d8 0354 lr $AX0.L, @0x0354 - // 0284 009a 0180 lri $AX0.H, #0x0180 - // 0286 8100 clr $ACC0 - // 0287 00de 0380 lr $AC0.M, @0x0380 - // 0289 00dc 0381 lr $AC0.L, @0x0381 - // 028b 9000 mul $AX0.L, $AX0.H - // 028c 9400 mulac $AX0.L, $AX0.H, $ACC0 - // 028d 00fe 034c sr @0x034c, $AC0.M - // 028f 00fc 034d sr @0x034d, $AC0.L - AX0.L = *0x0354 // number of rendered frames - AX0.H = 0x0180 // PB Size with dummy buffer - ACC0 = (*0x0380 << 16) | *0x0381 - ACC0 += AX0.L * AX0.H - - // Compute the RAM address of the current PB. - *0x034C = AC0.M - *0x034D = AC0.L - - // Copy the current PB to 0x400, so we can access it from DSP code. - // 0291 02bf 00c1 call 0x00c1 - 00c1_CopyPBToDMEM() - - // 0293 00da 0400 lr $AX0.H, @0x0400 - // 0295 8600 tstaxh $AX0.H - // 0296 0295 03bc jz 0x03bc - if (*0x0400 == 0x00) - GOTO NEXT_BLOCK: - - // 0298 00da 0401 lr $AX0.H, @0x0401 - // 029a 8600 tstaxh $AX0.H - // 029b 0294 03bc jnz 0x03bc - if (*0x0401 != 0x00) - GOTO NEXT_BLOCK: - - // 029d 00da 0433 lr $AX0.H, @0x0433 - // 029f 00fa 03f8 sr @0x03f8, $AX0.H - *0x03f8 = *0x0433 - - // 02a1 00da 0406 lr $AX0.H, @0x0406 - // 02a3 8600 tstaxh $AX0.H - // 02a4 0294 0dff jnz 0x0dff - if (*0x0406 != 0x00) - { - // The Code at 0x0dff sets the value from *0x0433 to 0x50 shorts at 0x0520. - // Then it JMPs to ContinueWithBlock. - 0dff_Zero520_50(). - } - else - { - // 02a6 8100 clr $ACC0 - // 02a7 00de 0480 lr $AC0.M, @0x0480 - // 02a9 0609 cmpis $ACC0, #0x09 - // 02aa 0295 02bd jz 0x02bd - // 02ac 0605 cmpis $ACC0, #0x05 - // 02ad 0295 02bd jz 0x02bd - // 02af 0608 cmpis $ACC0, #0x08 - // 02b0 0295 098f jz 0x098f - // 02b2 0610 cmpis $ACC0, #0x10 - // 02b3 0295 0a14 jz 0x0a14 - // 02b5 0620 cmpis $ACC0, #0x20 - // 02b6 0295 0a9a jz 0x0a9a - // 02b8 0621 cmpis $ACC0, #0x21 - // 02b9 0295 0aa2 jz 0x0aa2 - // 02bb 029f 087c jmp 0x087c - - switch(*0x0480) - { - case 0x05: - case 0x09: GOTO 02BD: - case 0x08: GOTO 098f: - case 0x10: GOTO 0a14: - case 0x20: GOTO 0a9a: - case 0x21: GOTO 0aa2: - default: GOTO 087C: - } - - // This is the common decoding prep for 0x05 and 0x09. - - // 02bd 00d8 0402 lr $AX0.L, @0x0402 // delta? - // 02bf 8100 clr $ACC0 - // 02c0 8900 clr $ACC1 - // 02c1 00dc 0430 lr $AC0.L, @0x0430 // current fraction? - // 02c3 8d00 set15 // unsigned multiplication - // 02c4 0950 lris $AX1.L, #0x50 - // 02c5 a000 mulx $AX0.L, $AX1.L - // 02c6 a400 mulxac $AX0.L, $AX1.L, $ACC0 - // 02c7 1404 lsl $ACC0, #4 - // 02c8 8c00 clr15 - - // 0x0402 is delta ("Ratio"). - // Is this a computation of the starting point for decoding? - // If so 0x430 is the current sample position fraction and - AX0.L = *0x0402 - ACC0 = *0x430 + (AX0.L * 0x50) - ACC0 >>= 4 - - // 02c9 1ffe mrr $AC1.M, $AC0.M - // 02ca 0083 0580 lri $AR3, #0x0580 - // 02cc 02bf 073d call 0x073d - - // AC1.M here is ACC0.M! Effectively a shift right 16. The above fraction stuff seems to make sense. - 073d_DECODE_0x05_0x09(0x0580, AC1.M, 0x50) - - // NOP jump here. - // 02ce 029f 02d0 jmp 0x02d0 - - Resample_From0580To0520: - // 02d0 0080 0580 lri $AR0, #0x0580 - // 02d2 0081 0520 lri $AR1, #0x0520 - // 02d4 0099 0000 lri $AX1.L, #0x0000 - // 02d6 02bf 0d7f call 0x0d7f - 0d7f_ResampleAudioData(0x0580, 0x0520, 0x0000); - } - - // A block of audio is now present at 0x520. - - ContinueWithBlock: - // Apply various per-voice effects. - - // First up, a trivial in-place filter, if $0x04a8 is set. - - // 02d8 00da 04a8 lr $AX0.H, @0x04a8 - // 02da 8600 tstaxh $AX0.H - // 02db 0295 02e1 jz 0x02e1 - // 02dd 0080 0520 lri $AR0, #0x0520 - // 02df 02bf 0c84 call 0x0c84 - if (0x04a8 != 0) - void 0c84_FilterBufferInPlace(_sampleAddr($AR0), multiplier($AX0.H)) - - // 02e1 009e 0520 lri $AC0.M, #0x0520 - // 02e3 00fe 038f sr @0x038f, $AC0.M - *0x038f = 0x0520 - - // 02e5 8900 clr $ACC1 - // 02e6 00df 0484 lr $AC1.M, @0x0484 - // 02e8 0340 001f andi $AC1.M, #0x001f - // 02ea b900 tst $ACC1 - // 02eb 0295 0311 jz 0x0311 - if ((*0x0484 & 0x1f) != 0x00) - { - // 02ed 00de 038f lr $AC0.M, @0x038f - // 02ef 5c00 sub $ACC0, $ACC1 - // 02f0 00fe 038f sr @0x038f, $AC0.M - (*0x038f) -= AC1.M; - - // 02f2 1c7e mrr $AR3, $AC0.M - // 02f3 0080 0440 lri $AR0, #0x0440 - // 02f5 05fe addis $ACC1, #0xfe - // 02f6 02bf 00da call 0x00da - 00da_CopyBuffer(0x0440, (*0x038f), (*0x0484) + 0xfe) - - // 02f8 0080 0490 lri $AR0, #0x0490 - // 02fa 00c1 038f lr $AR1, @0x038f - // 02fc 8900 clr $ACC1 - // 02fd 00df 0484 lr $AC1.M, @0x0484 - // 02ff 0340 001f andi $AC1.M, #0x001f - // 0301 02bf 0b4d call 0x0b4d - 0b4d_IIR_Filter(In(0x0490), Out(*0x038f), FilterLength(*0x0484 & 0x1f)) - - 0303 00de 038f lr $AC0.M, @0x038f - 0305 0450 addis $ACC0, #0x50 - 0306 1c1e mrr $AR0, $AC0.M - // 0307 0083 0440 lri $AR3, #0x0440 - 0309 8900 clr $ACC1 - 030a 00df 0484 lr $AC1.M, @0x0484 - 030c 0340 001f andi $AC1.M, #0x001f - 030e 05fe addis $ACC1, #0xfe - // 030f 02bf 00da call 0x00da - 00da_CopyBuffer(, 0x0440) - } - - // 0311 00de 0484 lr $AC0.M, @0x0484 - // 0313 0240 0020 andi $AC0.M, #0x0020 - // 0315 0295 0333 jz 0x0333 - if ((*0x0484 & 0x0020) != 0) - { - 0317 0080 04a4 lri $AR0, #0x04a4 - 0319 00c1 038f lr $AR1, @0x038f - 031b 0082 0454 lri $AR2, #0x0454 - 031d 0083 04a7 lri $AR3, #0x04a7 - - // 031f 18fa lrrd $AX0.H, @$AR3 - // 0320 8600 tstaxh $AX0.H - // 0321 0294 0331 jnz 0x0331 - if (!*0x04a7) { - // 0323 18fa lrrd $AX0.H, @$AR3 - // 0324 8600 tstaxh $AX0.H - // 0325 0294 0331 jnz 0x0331 - if (!*0x04a6) { - // 0327 18fa lrrd $AX0.H, @$AR3 - // 0328 8600 tstaxh $AX0.H - // 0329 0294 0331 jnz 0x0331 - if (!*0x04a5) { - // 032b 8100 clr $ACC0 - // 032c 18fe lrrd $AC0.M, @$AR3 - // 032d 0280 7fff cmpi $AC0.M, #0x7fff - // 032f 0295 0333 jz 0x0333 - if (*0x04a4 != 0x7FFF) { - // 0331 02bf 0b68 call 0x0b68 - 0b68_4TapFIR(InBuffer($AR2), FilterBuffer($AR0), OutBuffer($AR1)); - } - } - } - } - } - - // Check volume mode, apply volume as appropriate - - // 0333 8100 clr $ACC0 - // 0334 00de 042c lr $AC0.M, @0x042c - // 0336 b100 tst $ACC0 - // 0337 0295 033d jz 0x033d - - if (*0x042c != 0) // Volume mode != 0 - { - // 0339 02bf 0cd3 call 0x0cd3 - // 033b 029f 03b2 jmp 0x03b2 - 0cd3_VolumeMixer1() // The complex one, probably with surround and stuff - } - else - { - // Volume mode == 0 - simple(r) volumes - // 033d 8100 clr $ACC0 - // 033e 1c9e mrr $IX0, $AC0.M - // 033f 1cde mrr $IX2, $AC0.M - // 0340 7400 incm $AC0.M - // 0341 1cfe mrr $IX3, $AC0.M - // 0342 8100 clr $ACC0 - $IX0 = 0; - $IX2 = 0; - $IX3 = 1; - - // 0343 00de 0407 lr $AC0.M, @0x0407 - // 0345 b100 tst $ACC0 - // 0346 0295 0355 jz 0x0355 - if (*0x0407 != 0) // Unknown, in zelda always 0x10, apparently. - { - // Seems like this all boils down to a backwards copy of - // 0x0470-0x0477 to *(*(0x038f)); - // Is that where we save samples in the PB, so that filters - // have something to read from at the start of each block? - - // 0348 00c3 038f lr $AR3, @0x038f - // 034a 0007 dar $AR3 - $AR3 = *(0x038f) - 1; - // 034b 0080 0477 lri $AR0, #0x0477 - // 034d 0084 ffff lri $IX0, #0xffff - // 034f 0087 ffff lri $IX3, #0xffff - $AR0 = 0x477; - $IX0 = -1; - $IX3 = -1; - // 0351 199a lrrn $AX0.H, @$AR0 - AX0.H = *$AR0; - AR0 += IX0; - - // 0352 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - $ACC1 = $AX0.H; - $AX0.H = *$AR0; - $AR0 += IX0; - // 0353 005e loop $AC0.M - for (int i = 0; i < AC0.M; i++) { - 0354 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - } - } - - // 0355 00da 0485 lr $AX0.H, @0x0485 - // 0357 8600 tstaxh $AX0.H - // 0358 0295 036b jz 0x036b - if (*0x0485 != 0) - { - 035a 8900 clr $ACC1 - 035b 0086 0005 lri $IX2, #0x0005 // 5 - 1 = 4, see loop - 035d 0082 040a lri $AR2, #0x040a - // 035f 1106 0363 bloopi #0x06, 0x0363 - - // Store half of every 4th value from 0x040a onwards in the position before. (!!!!) - // This really doesn't make a lot of sense. - // At the same time, keep their sum in ACC1. - for (int i = 0; i < 0x6; i++) { - // 0361 18de lrrd $AC0.M, @$AR2 - // 0362 147f lsr $ACC0, #-1 - // 0363 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M - $AC0.M = *$AR2 >> 1; - $AR2--; - $ACC1 += $ACC0; - *$AR2 = $ACC0; - $AR2 += 5; - } - // 0364 b900 tst $ACC1 - // 0365 0294 036b jnz 0x036b - - // Volume has dropped to 0 on all channels, stop sound? - if (sum == 0) { - // 0367 009a 0001 lri $AX0.H, #0x0001 - // 0369 00fa 0401 sr @0x0401, $AX0.H // Write 1 to KeyOff. - } - } - - // 036b 8f00 set40 - // 036c 0086 0002 lri $IX2, #0x0002 - // 036e 0082 0408 lri $AR2, #0x0408 - $IX2 = 0x0002; - $AR2 = 0x0408; - - // Volume data starts at 0x0408, it's like this: - // 1 word controls sbset #0x00 apparently - // 2 volume values - // 1 other word. - - // 0370 1106 039b bloopi #0x06, 0x039b - for (int i = 0; i < 6; i++) - { - // 0372 8100 clr $ACC0 - // 0373 195e lrri $AC0.M, @$AR2 - // 0374 1200 sbclr #0x00 // W T F??? - // 0375 b100 tst $ACC0 - // 0376 0275 ifz - // 0377 1300 sbset #0x00 - // sbset #0x00 is logic zero ... we use it to store a bit here. see 0394 - if (*$AR2 == 0) { - sbset #0x00 - } else { - sbclr #0x00 - } - - 0378 1c7e mrr $AR3, $AC0.M - - 0379 195e lrri $AC0.M, @$AR2 // Load the two volume values - 037a 195f lrri $AC1.M, @$AR2 - - // 037b 5c00 sub $ACC0, $ACC1 // Subtract them - find volume delta? - // 037c 14fb asr $ACC0, #-5 - // 037d 1f5e mrr $AX0.H, $AC0.M - // 037e 1f1c mrr $AX0.L, $AC0.L - $AX0 = (vol1 - vol2) >> 5; // 32 steps .. - - // Read the value after the volumes. - - // 037f 185e lrr $AC0.M, @$AR2 - // 0380 0240 00ff andi $AC0.M, #0x00ff - // 0382 1f7e mrr $AX1.H, $AC0.M - $AX1.H = *$AR2 & 0xFF; - - // 0383 185e lrr $AC0.M, @$AR2 - // 0384 1478 lsr $ACC0, #-8 - // 0385 009c 0000 lri $AC0.L, #0x0000 - $AC0.M = *$AR2 >> 8; - - // ACC1 is here the second volume. Compare to delta. - // Adjust *$AR2 for some reason accordingly... - - // 0387 d100 cmpar $ACC1, $AX0.H - // 0388 0295 0390 jz 0x0390 - // 038a 185e lrr $AC0.M, @$AR2 - // 038b 0272 ifg - // 038c 7400 incm $AC0.M - // 038d 0271 ifl - // 038e 7800 decm $AC0.M - // 038f 1a5e srr @$AR2, $AC0.M - if ($ACC1 < $AX0.H) { - (*$AR2)--; - } else if ($ACC1 > $AX0.H) { - (*$AR2)++ - } - - // 0390 0006 dar $AR2 - $AR2--; - - // $AR2 again points at the second volume. - - 0391 00de 038f lr $AC0.M, @0x038f - - // Per channel mini-delay? - 0393 5600 subr $ACC0, $AX1.H // see 0382 - - // Use that stored logic zero bit, to skip mixing if the first word is (or isn't? not sure) 0. - // 0394 029d 0399 jlz 0x0399 - if (!logic zero) { - // 0396 1c1e mrr $AR0, $AC0.M - // 0397 02bf 0ca9 call 0x0ca9 - 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), VolumeDelta($AX0), MultiplierData($AR0), Buffer($AR3)) - } - // 0399 0000 nop - // 039a 1b5f srri @$AR2, $AC1.M - // Update the second volume. - *($AR2++) = $AC1.M; - // 039b 000a iar $AR2 - $AR2++; // Next block of four values. - } - - // 039c 8e00 set16 - - // 039d 8100 clr $ACC0 - // 039e 00de 0407 lr $AC0.M, @0x0407 - // 03a0 b100 tst $ACC0 - // 03a1 0295 03b2 jz 0x03b2 - if (*0x0407 != 0) - { - // Stash away the last bunch of samples into 0x0477 and backwards, - // so that filter kernels and resampler have some previous data to - // read from the next time. - 03a3 00c3 038f lr $AR3, @0x038f - 03a5 0087 004f lri $IX3, #0x004f - 03a7 001f addarn $AR3, $IX3 - 03a8 0080 0477 lri $AR0, #0x0477 - 03aa 0084 ffff lri $IX0, #0xffff - 03ac 0087 ffff lri $IX3, #0xffff - 03ae 19fa lrrn $AX0.H, @$AR3 - 03af 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 03b0 005e loop $AC0.M - 03b1 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - } - } - - // 03b2 00da 0406 lr $AX0.H, @0x0406 - // 03b4 8600 tstaxh $AX0.H - // 03b5 0294 03ba jnz 0x03ba - if (*0x0406 == 0) - { - // 03b7 8100 clr $ACC0 - // 03b8 00fe 0404 sr @0x0404, $AC0.M - *0x0404 = 0x0000 - } - - // 03ba 02bf 00ca call 0x00ca - 00ca_CopyPBToRAM() - - NEXT_BLOCK: - 03bc 00de 0354 lr $AC0.M, @0x0354 - 03be 7400 incm $AC0.M - 03bf 00fe 0354 sr @0x0354, $AC0.M - } - - // Done mixing all voices, sync up with host before the final mixdown. - - // 03c1 0e00 lris $AC0.M, #0x00 - // 03c2 00fe 034e sr @0x034e, $AC0.M - *0x034e = 0x00 - - // 03c4 0e04 lris $AC0.M, #0x04 - // 03c5 02bf 066a call 0x066a - SendMB_DCD1(0x0004) - - // 03c7 00de 0355 lr $AC0.M, @0x0355 - // 03c9 0260 ff00 ori $AC0.M, #0xff00 - // 03cb 02bf 0674 call 0x0674 - SendMB_F355(*0x0355 | 0xFF00) // *0x0355 - current frame - - - // Buffer 0D00 and 0D60 are the final L & R mixing buffers. - - // This is where global effects are applied, and final mixdown is done. - - // 03cd 02bf 0c0a call 0x0c0a - 0c0a_Unk() // Copy 0a00 to 0a60? - - // 03cf 02bf 0c1c call 0x0c1c - 0c1c_ComputeReverbFrom0a60To0a00() // Not sure if this really is reverb but could be. - - // 03d1 02bf 0c71 call 0x0c71 - 0c71_AddBufferA00ToD60AndD00(); // add A00 on top of 0x0D00 and 0x0D60 - - // 03d3 00de 0341 lr $AC0.M, @0x0341 - // 03d5 7800 decm $AC0.M - // 03d6 00fe 0341 sr @0x0341, $AC0.M - - (*0x0341)--; - - // The audio at 09a0 is added to both channels, - // then the channel buffers are copied to RAM. - // For unknown reasons, the audio at 0x0fa0 is ONLY added to the right channel. - - // 03d8 0080 09a0 lri $AR0, #0x09a0 - // 03da 0083 0d00 lri $AR3, #0x0d00 - // 03dc 0f50 lris $AC1.M, #0x50 - // 03dd 0098 5a82 lri $AX0.L, #0x5a82 - // 03df 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(0x09a0, 0x0d00, 0x50, 0x5a82) - - // 03e1 0080 09a0 lri $AR0, #0x09a0 - // 03e3 0083 0d60 lri $AR3, #0x0d60 - // 03e5 0f50 lris $AC1.M, #0x50 - // 03e6 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(0x09a0, 0x0d60, 0x50, 0x5a82) - - // 03e8 0083 0d00 lri $AR3, #0x0d00 - // 03ea 02bf 0cc1 call 0x0cc1 - 0cc1_StrangeORRFilter(0x0d00) - - // 03ec 0081 0388 lri $AR1, #0x0388 - // 03ee 009f 0d00 lri $AC1.M, #0x0d00 - // 03f0 0080 0050 lri $AR0, #0x0050 - // 03f2 02bf 0530 call 0x0530 - 0530_DMEMtoRAM_Ind(0x0d00, 0x0388, 0x050) - - // 03f4 0080 0fa0 lri $AR0, #0x0fa0 - // 03f6 0083 0d60 lri $AR3, #0x0d60 - // 03f8 0f50 lris $AC1.M, #0x50 - // 03f9 0098 8000 lri $AX0.L, #0x8000 - // 03fb 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(0x0fa0, 0x0d60, 0x50, 0x8000) - - // 03fd 0083 0d60 lri $AR3, #0x0d60 - // 03ff 02bf 0cc1 call 0x0cc1 - 0cc1_StrangeORRFilter(0x0d60) - - // 0401 0081 038a lri $AR1, #0x038a - // 0403 009f 0d60 lri $AC1.M, #0x0d60 - // 0405 0080 0050 lri $AR0, #0x0050 - // 0407 02bf 0530 call 0x0530 - 0530_DMEMtoRAM_Ind(0x0d60, 0x038a, 0x050) - - - // Move both RAM output buffer pointers forward, 0xa0 bytes (0x50 samples). - - // 0409 009a 0000 lri $AX0.H, #0x0000 - // 040b 0098 00a0 lri $AX0.L, #0x00a0 - // 040d 0080 0388 lri $AR0, #0x0388 - // 040f 02bf 0233 call 0x0233 - 0233_Increase_32BitAddress_InMem(0x0388, 0xa0) - // 0411 0080 038a lri $AR0, #0x038a - // 0413 02bf 0233 call 0x0233 - 0233_Increase_32BitAddress_InMem(0x038a, 0xa0) - - - // 0415 02bf 01ea call 0x01ea - 01ea_Unk(); - - 0417 0000 nop - 0418 0000 nop - } - - // 0419 0080 002d lri $AR0, #0x002d - // 041b 029f 0603 jmp 0x0603 - 0603_Unk(0x02d) -} - -// Command 07 - not seen used. -void 041d_Unk() { - 041d 0080 0346 lri $AR0, #0x0346 - // 041f 02bf 0067 call 0x0067 - 0067_CopyCommand(_destAddr(#0x0346), _loopCount($AC0.M)) - // 0421 02bf 0067 call 0x0067 - 0067_CopyCommand(_destAddr(#0x0346), _loopCount($AC0.M)) - - 0423 0081 0346 lri $AR1, #0x0346 - 0425 193e lrri $AC0.M, @$AR1 - 0426 193c lrri $AC0.L, @$AR1 - 0427 009f 0400 lri $AC1.M, #0x0400 - 0429 00c0 0345 lr $AR0, @0x0345 - 042b 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 042d 0081 0348 lri $AR1, #0x0348 - 042f 193e lrri $AC0.M, @$AR1 - 0430 193c lrri $AC0.L, @$AR1 - 0431 009f 0800 lri $AC1.M, #0x0800 - 0433 00c0 0345 lr $AR0, @0x0345 - 0435 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 0437 0081 0346 lri $AR1, #0x0346 - 0439 193e lrri $AC0.M, @$AR1 - 043a 193c lrri $AC0.L, @$AR1 - 043b 009f 0800 lri $AC1.M, #0x0800 - 043d 00c0 0345 lr $AR0, @0x0345 - 043f 02bf 0532 call 0x0532 - 0441 0081 0348 lri $AR1, #0x0348 - 0443 193e lrri $AC0.M, @$AR1 - 0444 193c lrri $AC0.L, @$AR1 - 0445 009f 0400 lri $AC1.M, #0x0400 - 0447 00c0 0345 lr $AR0, @0x0345 - 0449 02bf 0532 call 0x0532 - 044b 029f 0043 jmp 0x0043 -} - -void 044d_COMMAND_07() -{ - 044d 0080 0346 lri $AR0, #0x0346 - 044f 02bf 0067 call 0x0067 - 0451 02bf 0067 call 0x0067 - 0453 0081 0346 lri $AR1, #0x0346 - 0455 193e lrri $AC0.M, @$AR1 - 0456 193c lrri $AC0.L, @$AR1 - 0457 009f 0400 lri $AC1.M, #0x0400 - 0459 00c0 0345 lr $AR0, @0x0345 - 045b 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 045d 0081 0348 lri $AR1, #0x0348 - 045f 193e lrri $AC0.M, @$AR1 - 0460 193c lrri $AC0.L, @$AR1 - 0461 009f 0400 lri $AC1.M, #0x0400 - 0463 00c0 0345 lr $AR0, @0x0345 - 0465 02bf 0532 call 0x0532 - 0467 029f 0043 jmp 0x0043 -} - -void 0469_COMMAND_06_09() -{ - 0469 0080 0346 lri $AR0, #0x0346 - 046b 02bf 0067 call 0x0067 - 046d 02bf 0067 call 0x0067 - 046f 0081 0346 lri $AR1, #0x0346 - 0471 193e lrri $AC0.M, @$AR1 - 0472 193c lrri $AC0.L, @$AR1 - 0473 009f 0400 lri $AC1.M, #0x0400 - 0475 00c0 0345 lr $AR0, @0x0345 - // 0477 02bf 0555 call 0x0555 // ReadFromMysteryReg - 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AC0.M)) { - - 0479 0081 0348 lri $AR1, #0x0348 - 047b 193e lrri $AC0.M, @$AR1 - 047c 193c lrri $AC0.L, @$AR1 - 047d 009f 0400 lri $AC1.M, #0x0400 - 047f 00c0 0345 lr $AR0, @0x0345 - 0481 02bf 0532 call 0x0532 - 0483 029f 0043 jmp 0x0043 -} - -void 0485_COMMAND_08() -{ - 0485 0080 0346 lri $AR0, #0x0346 - 0487 02bf 0067 call 0x0067 - 0489 02bf 0067 call 0x0067 - 048b 0081 0346 lri $AR1, #0x0346 - 048d 193e lrri $AC0.M, @$AR1 - 048e 193c lrri $AC0.L, @$AR1 - 048f 009f 0400 lri $AC1.M, #0x0400 - 0491 00c0 0344 lr $AR0, @0x0344 - 0493 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 0495 0081 0348 lri $AR1, #0x0348 - 0497 193e lrri $AC0.M, @$AR1 - 0498 193c lrri $AC0.L, @$AR1 - 0499 009f 0800 lri $AC1.M, #0x0800 - 049b 00c0 0344 lr $AR0, @0x0344 - 049d 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 049f 0080 0400 lri $AR0, #0x0400 - 04a1 0083 0800 lri $AR3, #0x0800 - 04a3 0084 0000 lri $IX0, #0x0000 - 04a5 00da 0345 lr $AX0.H, @0x0345 - 04a7 00df 0344 lr $AC1.M, @0x0344 - 04a9 8f00 set40 - 04aa 197b lrri $AX1.H, @$AR3 - 04ab b800 mulx $AX0.H, $AX1.H - 04ac 197b lrri $AX1.H, @$AR3 - 04ad 007f 04b2 bloop $AC1.M, 0x04b2 - 04af 199e lrrn $AC0.M, @$AR0 - 04b0 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 04b1 80b2 nx'sl : $AC0.M, $AX1.H - 04b2 0000 nop - 04b3 8e00 set16 - 04b4 0081 0346 lri $AR1, #0x0346 - 04b6 193e lrri $AC0.M, @$AR1 - 04b7 193c lrri $AC0.L, @$AR1 - 04b8 009f 0400 lri $AC1.M, #0x0400 - 04ba 00c0 0344 lr $AR0, @0x0344 - 04bc 02bf 0532 call 0x0532 - 04be 029f 0043 jmp 0x0043 -} - - -// Zeroes 256 words @ 0x0b00, calls 0x0573 -void 04c0_UnknownInit() -{ - 04c0 0092 00ff lri $CR, #0x00ff - 04c2 8100 clr $ACC0 - 04c3 0080 0b00 lri $AR0, #0x0b00 - 04c5 10ff loopi #0xff - 04c6 1b1e srri @$AR0, $AC0.M - 04c7 1b1e srri @$AR0, $AC0.M - 04c8 8100 clr $ACC0 - 04c9 009f 0b00 lri $AC1.M, #0x0b00 - 04cb 0080 0100 lri $AR0, #0x0100 - 04cd 02bf 0573 call 0x0573 - - 04cf 02df ret -} - - -void 04d0_Unk() { - // 04d0 02bf 04e1 call 0x04e1 - 04e1_Read0x40WordsFromZeroTo0b00() - - // 04fb is incremented when you reset a voice - 04d2 00df 04fb lr $AC1.M, @0x04fb - 04d4 009e 0b00 lri $AC0.M, #0x0b00 - 04d6 4c00 add $ACC0, $ACC1 - 04d7 1c1e mrr $AR0, $AC0.M - - 04d8 181e lrr $AC0.M, @$AR0 - 04d9 7400 incm $AC0.M - 04da 1a1e srr @$AR0, $AC0.M - *(AR0)++ - - 04db 02bf 04ea call 0x04ea - 04dd 8100 clr $ACC0 - 04de 00fe 04fb sr @0x04fb, $AC0.M - 04e0 02df ret -} - -void 04e1_Read0x40WordsFromZeroTo0b00() { - 04e1 0092 00ff lri $CR, #0x00ff - 04e3 8100 clr $ACC0 - 04e4 009f 0b00 lri $AC1.M, #0x0b00 - 04e6 0080 0040 lri $AR0, #0x0040 - // 04e8 029f 0555 jmp 0x0555 - GOTO 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AR0)) { -} - -void 04ea_Call0573With0b00And0050() { - 04ea 8100 clr $ACC0 - 04eb 009f 0b00 lri $AC1.M, #0x0b00 - 04ed 0080 0050 lri $AR0, #0x0050 - 04ef 029f 0573 jmp 0x0573 - // I don't get it, the above doesn't match the parameters - 0573_Mystery_Write(InBuffer($AR1), _COUNT(AX0.H)); -} - - -void 04f1_Read0x40WordsFromZeroTo0b00() { - // 04f1 02bf 04e1 call 0x04e1 - 04e1_Read0x40WordsFromZeroTo0b00(); -} - -void 04f3_strange() { - 04f3 8900 clr $ACC1 - 04f4 0080 04fc lri $AR0, #0x04fc - 04f6 8100 clr $ACC0 - - // Count the masked voices, look at all four mask words - // 04f7 1104 0505 bloopi #0x04, 0x0505 - for (int j = 0; j < 4; j++) { - 04f9 0000 nop - 04fa 191e lrri $AC0.M, @$AR0 - 04fb 0000 nop - - 04fc 1110 0503 bloopi #0x10, 0x0503 - for (int i = 0; i < 0x10; i++) { - 04fe 02c0 0001 andcf $AC0.M, #0x0001 - 0500 027d iflz - 0501 7500 incm $AC1.M // count up - 0502 147f lsr $ACC0, #-1 - 0503 0000 nop - } - 0504 0000 nop - 0505 0000 nop - } - // AC1.M now contains the count of all voices masked/unmasked (not sure which) - - // Copy the voice masks to 0x0b48 ... - 0506 00de 04fc lr $AC0.M, @0x04fc - 0508 00fe 0b48 sr @0x0b48, $AC0.M - 050a 00de 04fd lr $AC0.M, @0x04fd - 050c 00fe 0b49 sr @0x0b49, $AC0.M - 050e 00de 04fe lr $AC0.M, @0x04fe - 0510 00fe 0b4a sr @0x0b4a, $AC0.M - 0512 00de 04ff lr $AC0.M, @0x04ff - 0514 00fe 0b4b sr @0x0b4b, $AC0.M - - 0516 009e 0b00 lri $AC0.M, #0x0b00 - 0518 4c00 add $ACC0, $ACC1 // The value is in AC1.M, this must be wrong disasm - 0519 1c1e mrr $AR0, $AC0.M - - // Increment the counter at [ #0b00 + masked voice count] - // why would you do this? making bucket histogram over the number of active voices? - 051a 181e lrr $AC0.M, @$AR0 - 051b 7400 incm $AC0.M - 051c 1a1e srr @$AR0, $AC0.M - - 051d 02bf 04ea call 0x04ea // 04ea_Call0573With0b00And0050() - 051f 02df ret -} - -void PointlessFunction_Unused() { - 0520 02bf 04ea call 0x04ea // 04ea_Call0573With0b00And0050() - 0522 02df ret -} - - -// the first parameter is a pointer to the real RAM addr -void 0523_CopyRAMtoDMEM(&_srcRAM($AR1), _destDMEM($AC1.M), _len($AR0)) -{ - // 0523 193e lrri $AC0.M, @$AR1 - // 0524 193c lrri $AC0.L, @$AR1 - AC0 = *AR1++ << 16 | *AR1 - -void 0525_CopyRAMtoDMEM(_srcRAM($AR1), _destDMEM($AC1.M), _len($AR0)) -{ - 0525 2fcd srs @DSPA, $AC1.M - 0526 0f00 lris $AC1.M, #0x00 - - // ugly jump to share code... i am not going to document it ^^ - 0527 2fc9 srs @DSCR, $AC1.M - 0528 2ece srs @DSMAH, $AC0.M - 0529 2ccf srs @DSMAL, $AC0.L - 052a 1fe0 mrr $AC1.M, $AR0 - 052b 1501 lsl $ACC1, #1 - 052c 2fcb srs @DSBL, $AC1.M - - // 052d 02bf 0536 call 0x0536 - 0536_WaitForDMATransfer() - - // 052f 02df ret -} - -void 0530_DMEMtoRAM_Ind(_DMEM(AC1.M), _pMemAddr(AR1), _len(AR0)) -{ - // 0530 193e lrri $AC0.M, @$AR1 - // 0531 193c lrri $AC0.L, @$AR1 - AC0 = *AR1++ << 16 | *AR1 - // continues.... - -void 0532_DMEMtoRAM(_DMEM(AC1.M), _pMemAddr(ACC0), _len(AR0)) -{ - 0532 2fcd srs @DSPA, $AC1.M - 0533 0f01 lris $AC1.M, #0x01 - 0534 029f 0527 jmp 0x0527 -} - -void 0536_WaitForDMATransfer() -{ - 0536 26c9 lrs $AC0.M, @DSCR - 0537 02a0 0004 andf $AC0.M, #0x0004 - 0539 029c 0536 jlnz 0x0536 - 053b 02df ret -} - -// Can't find any calls to this one. -void 053c_Unk_Unused() { - 053c 193e lrri $AC0.M, @$AR1 - 053d 193c lrri $AC0.L, @$AR1 - 053e 00ff ffcd sr @DSPA, $AC1.M - 0540 0f00 lris $AC1.M, #0x00 - 0541 00ff ffc9 sr @DSCR, $AC1.M - 0543 00fe ffce sr @DSMAH, $AC0.M - 0545 00fc ffcf sr @DSMAL, $AC0.L - 0547 1fe0 mrr $AC1.M, $AR0 - 0548 1501 lsl $ACC1, #1 - 0549 00ff ffcb sr @DSBL, $AC1.M - 054b 02df ret -} - -void 054c_WaitForDMATransfer2_Unused() { - 054c 00de ffc9 lr $AC0.M, @DSCR - 054e 02a0 0004 andf $AC0.M, #0x0004 - 0550 029c 054c jlnz 0x054c - 0552 02df ret -} - -void 0553_UnknownReadFromMysteryReg_Unused() { - 0553 193e lrri $AC0.M, @$AR1 - 0554 193c lrri $AC0.L, @$AR1 - // continues... - -void 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AC0.M)) { - // 0555 0240 7fff andi $AC0.M, #0x7fff - // 0557 02bf 0561 call 0x0561 - 0561_SetupAcceleratorForMysteryAccess(ACC0 & 0x7FFFFFFF, AR0, AC1.M); - // After that, length is now in AX0.H - - // 0559 007a 055f bloop $AX0.H, 0x055f - for (int i = 0; i < AX0.H; i++) { - // 055b 26d3 lrs $AC0.M, @Unk Zelda - // 055c 1b3e srri @$AR1, $AC0.M - *(AR1++) = ReadFromUnknownAcceleratorRegister(); - } - // 055d 0000 nop - // 055e 0000 nop - // 055f 0000 nop - // 0560 02df ret -} - -void 0561_SetupAcceleratorForMysteryAccess(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AR0)) { - 0561 1c3f mrr $AR1, $AC1.M - 0562 0f0a lris $AC1.M, #0x0a - 0563 2fd1 srs @SampleFormat, $AC1.M - 0564 1f5e mrr $AX0.H, $AC0.M - 0565 1f1c mrr $AX0.L, $AC0.L - // Store 0xFFFFFFFF value as end address - Zelda does not use the looping hardware - 0566 009e ffff lri $AC0.M, #0xffff - 0568 2ed6 srs @ACEAH, $AC0.M // end address - 0569 2ed7 srs @ACEAL, $AC0.M - 056a 1fda mrr $AC0.M, $AX0.H - 056b 1f98 mrr $AC0.L, $AX0.L - // Divide "current" address by 2. - 056c 147f lsr $ACC0, #-1 - 056d 2ed8 srs @ACCAH, $AC0.M // Current address - 056e 2cd9 srs @ACCAL, $AC0.L - 056f 1f40 mrr $AX0.H, $AR0 - 0570 02df ret -} - -// Writes to UnkZelda, nops -void 0571_Mystery_Write_FirstLoadTwoRegs_Unused() { - 0571 193e lrri $AC0.M, @$AR1 - 0572 193c lrri $AC0.L, @$AR1 - -void 0573_Mystery_Write(InBuffer($AR1), SourceBuffer(AC1.M), _COUNT(AX0.H)) { - 0573 0090 0001 lri $AC0.H, #0x0001 - // 0575 02bf 0561 call 0x0561 - 0561_SetupAcceleratorForMysteryAccess(ACC0, AR0, AC1.M); - 0577 007a 057e bloop $AX0.H, 0x057e - 0579 193e lrri $AC0.M, @$AR1 - 057a 2ed3 srs @Unk Zelda, $AC0.M - 057b 0000 nop // seems the above store takes some time, - 057c 0000 nop // whatever it does, so ... 4 nops does the trick I guess - 057d 0000 nop - 057e 0000 nop - 057f 02df ret -} - - -void 0580_COMMAND_04() -{ - // commando looks buggy... - // it copies data to the switch casement data address... sounds like BS - - 0580 0080 0346 lri $AR0, #0x0346 - 0582 02bf 0067 call 0x0067 - 0584 02bf 0067 call 0x0067 - - 0067_CopyCommand(0x0346, mssing AC0.M??) - - 0586 0081 0346 lri $AR1, #0x0346 - 0588 00df 0349 lr $AC1.M, @0x0349 - 058a 0340 ffff andi $AC1.M, #0xffff - 058c 00c0 0345 lr $AR0, @0x0345 - 058e 02bf 0523 call 0x0523 - 0590 029f 0043 jmp 0x0043 -} - -void 0592_COMMAND_05() -{ - 0592 0080 0346 lri $AR0, #0x0346 - 0594 02bf 0067 call 0x0067 - 0596 02bf 0067 call 0x0067 - - // 0598 0081 0346 lri $AR1, #0x0346 - // 059a 00df 0349 lr $AC1.M, @0x0349 - // 059c 0340 ffff andi $AC1.M, #0xffff - // 059e 00c0 0345 lr $AR0, @0x0345 - // 05a0 02bf 0530 call 0x0530 - 0530_DMEMtoRAM_Ind((*0x0349)&0xFFFF, 0x0346, *0x0345) - - // 05a2 029f 0043 jmp 0x0043 - // jumps back to send sync messages .... -} - - -void 05A4_ResetAccelerator() -{ - 05a4 0092 00ff lri $CR, #0x00ff - 05a6 009e ffff lri $AC0.M, #0xffff - 05a8 2ed4 srs @ACSAH, $AC0.M - 05a9 2ed5 srs @ACSAL, $AC0.M - 05aa 2ed6 srs @ACEAH, $AC0.M - 05ab 2ed7 srs @ACEAL, $AC0.M - 05ac 02df ret -} - - -void 05ad_SetupAccelerator(_acceleratorH(AC0.M), _accleratorL(AC0.L), _format(AC1.M)) -{ - // 05ad 00ff ffd1 sr @SampleFormat, $AC1.M - *SampleFormat = AC1.M - - // 05af 0340 0003 andi $AC1.M, #0x0003 - // 05b1 7900 decm $AC1.M - // 05b2 02ca lsrn // ACC0 >>= AC1.M - // 05b3 00fe ffd8 sr @ACCAH, $AC0.M - // 05b5 00fc ffd9 sr @ACCAL, $AC0.L - - *ACCAH/ACCAL = address >> ((sampleFormat & 3) - 1); - // ACCAH/ACCAL is current read address - // Hm, this seems to imply some direct relationship between the sample format number and - // the nibbles-per-sample value - - // 05b7 02df ret -} - -void 05b8_NewMail() { - # 05b8 1205 sbclr #0x05 - # 05b9 8e00 set16 - - /* - 05ba 00f0 03fd sr @0x03fd, $AC0.H - 05bc 00fc 03ff sr @0x03ff, $AC0.L - 05be f400 lsr16 $ACC0 - 05bf 00fc 03fe sr @0x03fe, $AC0.L - 05c1 00fa 03fa sr @0x03fa, $AX0.H - 05c3 8100 clr $ACC0 - - save AC0 register - */ - - *0x03fd = AC0.H - *0x03ff = AC0.L - ACC0 >>= 16 - *0x03fe = AC0.L - *0x03fa = AX0.H - - // 05c4 00de fffe lr $AC0.M, @CMBH - // 05c6 02c0 8000 andcf $AC0.M, #0x8000 - // 05c8 029c 06b9 jlnz 0x06b9 - if (@CMBH & 0x8000 > 0) - { - !MISSING! - } - - // 05ca 00da ffff lr $AX0.H, @CMBL - // 05cc 8600 tstaxh $AX0.H - // 05cd 0294 0692 jnz 0x0692 - if (*CMBL != 0) - { - !MISSING! - } - - - // 05cf 00de fffe lr $AC0.M, @CMBH - // 05d1 02c0 8000 andcf $AC0.M, #0x8000 - // 05d3 029c 05cf jlnz 0x05cf - while(@CMBH & 0x8000 > 0); - - - // 05d5 0240 000f andi $AC0.M, #0x000f - // 05d7 1f5e mrr $AX0.H, $AC0.M - // 05d8 7400 incm $AC0.M - // 05d9 0c00 lris $AC0.L, #0x00 - // 05da 1404 lsl $ACC0, #4 - // 05db 00fe 034e sr @0x034e, $AC0.M - AC0.M = *CMBH & 0x000F - AX0.H = AC0.M - *0x034e = (AC0.M++) << 4 - - - // 05dd 1fda mrr $AC0.M, $AX0.H - // 05de 1f40 mrr $AX0.H, $AR0 - // 05df 0200 04fc addi $AC0.M, #0x04fc - // 05e1 1c1e mrr $AR0, $AC0.M - - AX0.H = AR0 // save AR0 - - AC0.M = *CMBH & 0x000F - AC0.M += 0x04fc - AR0 = AC0.M - - // 05e2 00de ffff lr $AC0.M, @CMBL - // 05e4 1a1e srr @$AR0, $AC0.M - // 05e5 1c1a mrr $AR0, $AX0.H - AC0.M = *CMBL - *AR0 = AC0.M - AR0 = AX.H // restore AR0 - - -EndOfMailException: - - /* - 05e6 00de 03fe lr $AC0.M, @0x03fe - 05e8 00dc 03ff lr $AC0.L, @0x03ff - 05ea 00d0 03fd lr $AC0.H, @0x03fd - 05ec 00da 03fa lr $AX0.H, @0x03fa - restore AC0 register - */ - AC0.M = *0x03fe - AC0.L = *0x03ff - AC0.H = *0x03fd - AX0.H = *0x03fa - - # 05ee 1305 sbset #0x05 - - 05ef 02ff rti -} - -void 05f0_HaltUCode() -{ - 05f0 009a 0002 lri $AX0.H, #0x0002 - 05f2 00fa 03a3 sr @0x03a3, $AX0.H - 05f4 00e0 03f9 sr @0x03f9, $AR0 - /* - 05f6 02bf 067c call 0x067c - */ - 067c_Unk() - - 05f8 16fc dcd1 si @DMBH, #0xdcd1 - 05fa 16fd 0002 si @DMBL, #0x0002 - 05fc 16fb 0001 si @DIRQ, #0x0001 - 05fe 0021 halt -} - -// Sync Table -05ff 0617 cmpis $ACC0, #0x17 -0600 0618 cmpis $ACC0, #0x18 -0601 0658 cmpis $ACC0, #0x58 -0602 065b cmpis $ACC0, #0x5b - -void 0603_Unk(_returnAddr($AR0)) -{ - // 0603 00e0 03f9 sr @0x03f9, $AR0 - 0x03f9 = _returnAddr - - // 0605 009e 0005 lri $AC0.M, #0x0005 - // 0607 02bf 066a call 0x066a - SendMB_DCD1(0x0005) - - # 0609 8e00 set16 - // 060a 8100 clr $ACC0 - // 060b 8900 clr $ACC1 - ACC0 = 0 - ACC1 = 0 - - // 060c 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - // 060e 27ff lrs $AC1.M, @CMBL - // 060f 009e 05ff lri $AC0.M, #0x05ff - // 0611 4c00 add $ACC0, $ACC1 - AC0.M = 0x05ff + *CMBL - - // 0612 1c7e mrr $AR3, $AC0.M - // 0613 0313 ilrr $AC1.M, @$AR3 - // 0614 1c7f mrr $AR3, $AC1.M - AR3 = *AC0.M <- "BUT FROM Instrcution Memory (look at sync table about)" - - // 0615 176f jmpr $AR3 - switch(AR3 - 0x05FF) - { - case 0x00: HALT(); break; - case 0x00: HALT(); break; - case 0x01: 0658_SoftReset(); break; - case 0x02: 065b_ContinueWithUCode(); break; - } - -} - - -0616 0021 halt -0617 0021 halt - -void 0618_Unk() { - 0618 009a 0002 lri $AX0.H, #0x0002 - 061a 00fa 03a3 sr @0x03a3, $AX0.H - 061c 8100 clr $ACC0 - 061d 8900 clr $ACC1 - //061e 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - 0620 24ff lrs $AC0.L, @CMBL - - //0621 02bf 0664 call 0x0664 - 0664_WaitForCPUMailBox_AC1() - - 0623 25ff lrs $AC1.L, @CMBL - - //0624 02bf 0664 call 0x0664 - 0664_WaitForCPUMailBox_AC1() - - 0626 27ff lrs $AC1.M, @CMBL - 0627 2ece srs @DSMAH, $AC0.M - 0628 2ccf srs @DSMAL, $AC0.L - 0629 16c9 0001 si @DSCR, #0x0001 - 062b 2fcd srs @DSPA, $AC1.M - 062c 2dcb srs @DSBL, $AC1.L - 062d 8100 clr $ACC0 - 062e 8900 clr $ACC1 - - //062f 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - 0631 24ff lrs $AC0.L, @CMBL - 0632 1c9e mrr $IX0, $AC0.M - 0633 1cbc mrr $IX1, $AC0.L - //0634 02bf 0664 call 0x0664 - 0664_WaitForCPUMailBox_AC1() - - 0636 25ff lrs $AC1.L, @CMBL - - //0637 02bf 0664 call 0x0664 - 0664_WaitForCPUMailBox_AC1() - - 0639 27ff lrs $AC1.M, @CMBL - 063a 1cdf mrr $IX2, $AC1.M - 063b 1cfd mrr $IX3, $AC1.L - 063c 8100 clr $ACC0 - - //063d 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - 063f 26ff lrs $AC0.M, @CMBL - 0640 1c1e mrr $AR0, $AC0.M - 0641 8900 clr $ACC1 - //0642 02bf 0664 call 0x0664 - 0664_WaitForCPUMailBox_AC1() - - 0644 20ff lrs $AX0.L, @CMBL - 0645 1f5f mrr $AX0.H, $AC1.M - //0646 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - 0648 21ff lrs $AX1.L, @CMBL - - //0649 02bf 065e call 0x065e - 065e_WaitForCPUMailBox_AC0() - - 064b 23ff lrs $AX1.H, @CMBL - 064c 26c9 lrs $AC0.M, @DSCR - 064d 02a0 0004 andf $AC0.M, #0x0004 - 064f 029c 064c jlnz 0x064c - 0651 1206 sbclr #0x06 - 0652 1203 sbclr #0x03 - 0653 1204 sbclr #0x04 - 0654 1205 sbclr #0x05 - 0655 029f 80b5 jmp 0x80b5 - **** GOTO ROM!! - 0657 0021 halt -} - -void 0658_SoftReset() { - 0658 029f 8000 jmp 0x8000 - 065a 0021 halt -} - -void 065b_ContinueWithUCode() -{ - // 065b 00c0 03f9 lr $AR0, @0x03f9 - // 065d 170f jmpr $AR0 - GOTO *0x03f9; -} - - -void 065e_WaitForCPUMailBox_AC0() -{ - 065e 26fe lrs $AC0.M, @CMBH - 065f 02c0 8000 andcf $AC0.M, #0x8000 - 0661 029c 065e jlnz 0x065e - 0663 02df ret -} - -void 0664_WaitForCPUMailBox_AC1() -{ - 0664 27fe lrs $AC1.M, @CMBH - 0665 03c0 8000 andcf $AC1.M, #0x8000 - 0667 029c 0664 jlnz 0x0664 - 0669 02df ret -} -void SendMB_DCD1(_low) - { - // 066a 02bf 0682 call 0x0682 - WaitForEmptyDSPMailBox_ovAC1(); - - // 066c 16fc dcd1 si @DMBH, #0xdcd1 - // 066e 2efd srs @DMBL, $AC0.M - // 066f 16fb 0001 si @DIRQ, #0x0001 - - *DMBH = 0xDCD1 - *DMBL = _low - *DIRQ = 0x0001 - - // 0671 02bf 0682 call 0x0682 - WaitForEmptyDSPMailBox_ovAC1() - - // 0673 02df ret -} - - -void SendMB_F355(_low) -{ - // 0674 02bf 0682 call 0x0682 - WaitForEmptyDSPMailBox_ovAC1(); - - // 0676 16fc f355 si @DMBH, #0xf355 - // 0678 2efd srs @DMBL, $AC0.M - - *DMBH = 0xf355 - *DMBL = _low - - // 0679 02bf 0682 call 0x0682 - WaitForEmptyDSPMailBox_ovAC1(); - - // 067b 02df ret -} - - -void 067c_Unk() -{ - 067c 26fc lrs $AC0.M, @DMBH - 067d 02c0 8000 andcf $AC0.M, #0x8000 - 067f 029d 067c jlz 0x067c - 0681 02df ret -} - - -void WaitForEmptyDSPMailBox_ovAC1.M() - { - // 0682 27fc lrs $AC1.M, @DMBH - // 0683 03c0 8000 andcf $AC1.M, #0x8000 - // 0685 029d 0682 jlz 0x0682 - while (*DMBH & 0x8000); - - // 0687 02df ret -} - - -void 0688_InitCommandBlock() -{ - // 0688 009a 0280 lri $AX0.H, #0x0280 - // 068a 00fa 0350 sr @0x0350, $AX0.H - // 068c 00fa 0351 sr @0x0351, $AX0.H - *0x0350 = 0x0280 - *0x0351 = 0x0280 - - // 068e 0a00 lris $AX0.H, #0x00 - // 068f 00fa 0352 sr @0x0352, $AX0.H - *0x0352 = 0x00 - - // 0691 02df ret -} - - // - // this block is called by the new mail exception - // it seems to copy a new command to the address @0x0350 and increase the - // number of commands at 0x0352 - // - { - 0692 00e0 03fb sr @0x03fb, $AR0 - 0694 00e8 03fc sr @0x03fc, $WR0 - 0696 00c0 0350 lr $AR0, @0x0350 - 0698 0088 002f lri $WR0, #0x002f - - do { - 069a 1b1a srri @$AR0, $AX0.H - - // 069b 00de fffe lr $AC0.M, @CMBH - // 069d 02c0 8000 andcf $AC0.M, #0x8000 - // 069f 029c 069b jlnz 0x069b - while (!CMBH & 0x8000) - ; - 06a1 00dc ffff lr $AC0.L, @CMBL - 06a3 1b1e srri @$AR0, $AC0.M - 06a4 1b1c srri @$AR0, $AC0.L - 06a5 1fda mrr $AC0.M, $AX0.H - 06a6 7800 decm $AC0.M - 06a7 1f5e mrr $AX0.H, $AC0.M - - // 06a8 8600 tstaxh $AX0.H - // 06a9 0294 069b jnz 0x069b - } while (AX0.H); - - /* - 06ab 8100 clr $ACC0 - 06ac 00de 0352 lr $AC0.M, @0x0352 - 06ae 7400 incm $AC0.M - 06af 00fe 0352 sr @0x0352, $AC0.M - increase number of commands - */ - *0x0352 = *0x0352++ - - - 06b1 00e0 0350 sr @0x0350, $AR0 - 06b3 00c0 03fb lr $AR0, @0x03fb - 06b5 00c8 03fc lr $WR0, @0x03fc - - // 06b7 029f 05e6 jmp 0x05e6 - GOTO EndOfMailException // return values and leave exception - - // looks like a read from ring buffer [0x350, 0x37f] - // note the use of the wrap register WR0. - 06b9 00e0 03fb sr @0x03fb, $AR0 - 06bb 00e8 03fc sr @0x03fc, $WR0 - 06bd 00c0 0350 lr $AR0, @0x0350 - 06bf 0088 002f lri $WR0, #0x002f - 06c1 0a00 lris $AX0.H, #0x00 - 06c2 1b1a srri @$AR0, $AX0.H - 06c3 029f 06ab jmp 0x06ab -} - - -void 06c5_CopyCommandBlock() - { - // 06c5 00c0 0351 lr $AR0, @0x0351 - short srcCommandQueueAddr = *0x0351 - - // 06c7 0088 002f lri $WR0, #0x002f - $WR0 = #0x002f - - -:start - /* - 06c9 00da 0352 lr $AX0.H, @0x0352 - 06cb 8600 tstaxh $AX0.H - 06cc 0295 06ed jz 0x06ed - check how many commands are inside the "queue" - */ - - if (*0x352 == 0) - { - $WR0 = #0xffff - return 0x2d; - } - - /* - 06ce 1205 sbclr #0x05 - 06cf 00da 0352 lr $AX0.H, @0x0352 - 06d1 1fda mrr $AC0.M, $AX0.H - 06d2 7800 decm $AC0.M - 06d3 00fe 0352 sr @0x0352, $AC0.M - 06d5 1305 sbset #0x05 - decrement number of commands in queue - */ - *0x352--; - - // 06d6 0081 0356 lri $AR1, #0x0356 - short destCommandQueueAddr = 0x0356 - - // 06d8 191e lrri $AC0.M, @$AR0 - // 06d9 02c0 8000 andcf $AC0.M, #0x8000 - // 06db 029d 06f1 jlz 0x06f1 - // 06dd 1f5e mrr $AX0.H, $AC0.M - // 06de 8600 tstaxh $AX0.H - // 06df 0295 06f5 jz 0x06f5 - - // check if command is valid - - short numCommands = *srcCommandQueueAddr++ - numCommands &= 0x8000 - if (numCommands < 0) - { - *0x0351 = srcCommandQueueAddr - GOTO :start - } - - if (numCommands == 0) - { - 05f0_HaltUCode() - } - - /* - 06e1 007a 06e6 bloop $AX0.H, 0x06e6 - 06e3 191e lrri $AC0.M, @$AR0 - 06e4 1b3e srri @$AR1, $AC0.M - 06e5 191e lrri $AC0.M, @$AR0 - 06e6 1b3e srri @$AR1, $AC0.M - - copy command queue - */ - - for (int i=0; i> 4 - - //07c5 2380 lrs $AX1.H, @0xff80 - //07c6 8d00 set15 - //07c7 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - - $AX0.l = (PB.LoopStartPos >> 4) & 0xffff; - prod = (PB.LoopStartPos >> 4 & 0xffff0000)*PB.Format; - - //07c8 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - - $ACC0 = (PB.LoopStartPos >> 4 & 0xffff0000)*PB.Format; - prod = ((PB.LoopStartPos >> 4) & 0xffff)*PB.Format; - - //07c9 8c00 clr15 - //07ca f000 lsl16 $ACC0 - - $ACC0 = (((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16 - - //07cb 4e00 addp $ACC0 - - $ACC0 = ((((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16)+ - (((PB.LoopStartPos >> 4) & 0xffff)*PB.Format) - - // 07cc 238c lrs $AX1.H, @0xff8c - // 07cd 218d lrs $AX1.L, @0xff8d - // 07ce 4a00 addax $ACC0, $AX1 - - $ACC0 = (((((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16)+ - (((PB.LoopStartPos >> 4) & 0xffff)*PB.Format))+PB.StartAddr - - // 07cf 2e38 srs @0x0038, $AC0.M - // 07d0 2c39 srs @0x0039, $AC0.L - - PB.CurAddr = $ACC0 & 0xffffffff; - - // 07d1 2682 lrs $AC0.M, @0xff82 - // 07d2 2e67 srs @0x0067, $AC0.M - // 07d3 2683 lrs $AC0.M, @0xff83 - // 07d4 2e66 srs @0x0066, $AC0.M - //Unconditionally (!) copy YN1 and YN2 from loopyn2 and loopyn1 - - PB.YN1 = PB.LoopYN1; - PB.YN2 = PB.LoopYN2; - - 07d5 00e3 0363 sr @0x0363, $AR3 - 07d7 0083 0458 lri $AR3, #0x0458 - 07d9 8100 clr $ACC0 - 07da 0e01 lris $AC0.M, #0x01 - - // 07db 02bf 07eb call 0x07eb - 07eb_AFCDecoder(); - - 07dd 00c3 0363 lr $AR3, @0x0363 - 07df 02bf 0729 call 0x0729 - 07e1 029f 0749 jmp 0x0749 - - // No repeat - // stop rendering of this PB (0x401 == 1) and clear the output buffer with zeroes... - //07e3 0e01 lris $AC0.M, #0x01 - //07e4 2e01 srs @0x0001, $AC0.M - - PB.KeyOff = 1; - - early_out: - // Zero the buffer. - 07e5 8100 clr $ACC0 - 07e6 005f loop $AC1.M - 07e7 1b7e srri @$AR3, $AC0.M - 07e8 0092 00ff lri $CR, #0x00ff - - // 07ea 02df ret - return - } -} - - - - -void 07eb_AFCDecoder(_numberOfSample(AC0.M)) -{ - // 07eb 00ff 0360 sr @0x0360, $AC1.M - // 07ed 00fe 0361 sr @0x0361, $AC0.M - // 07ef 2638 lrs $AC0.M, @0x0038 - // 07f0 2439 lrs $AC0.L, @0x0039 - // 07f1 0f05 lris $AC1.M, #0x05 - // 07f2 02bf 05ad call 0x05ad - 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) - - // 07f4 2638 lrs $AC0.M, @0x0038 - // 07f5 2439 lrs $AC0.L, @0x0039 - // 07f6 8900 clr $ACC1 - // 07f7 00df 0361 lr $AC1.M, @0x0361 - // 07f9 2280 lrs $AX0.H, @0xff80 - // 07fa d000 mulc $AC1.M, $AX0.H - // 07fb 6f00 movp $ACC1 - // 07fc 4c00 add $ACC0, $ACC1 - // 07fd 2e38 srs @0x0038, $AC0.M - // 07fe 2c39 srs @0x0039, $AC0.L - // increase sample offset in ARAM - AC0 = (*0x0038 << 16) | *0x0039 - AC1 = AC0 + _numberOfSample * *0x0480 // bytes per sample - *0x0038 = AC0.M - *0x0039 = AC0.L - - - // 07ff 8100 clr $ACC0 - // 0800 00de 0361 lr $AC0.M, @0x0361 - //0802 007e 086b bloop $AC0.M, 0x086b - for (int i = 0; i < _numberOfSample; i++) - { - // Look for the lrrn below to find the ARAM reads. - - // FFD3 seems to be some interface to do plain single byte reads - // from ARAM with no ADPCM fanciness or similar. - - // It loads through AR0 loaded with immediate #ffd3, not through - // lrs, so CR doesn't affect the effective address. - - 0804 0080 ffd3 lri $AR0, #0xffd3 - 0806 0084 0000 lri $IX0, #0x0000 - 0808 199e lrrn $AC0.M, @$AR0 - 0809 8900 clr $ACC1 - 080a 1ffe mrr $AC1.M, $AC0.M - 080b 1401 lsl $ACC0, #1 - 080c 0240 001e andi $AC0.M, #0x001e - 080e 0200 0300 addi $AC0.M, #0x0300 // AFC COEF Table - 0810 1c3e mrr $AR1, $AC0.M - 0811 157c lsr $ACC1, #-4 - 0812 0340 000f andi $AC1.M, #0x000f - 0814 0a11 lris $AX0.H, #0x11 - 0815 5500 subr $ACC1, $AX0.H - - // 0816 8100 clr $ACC0 - // 0817 2680 lrs $AC0.M, @0xff80 - // 0818 0605 cmpis $ACC0, #0x05 - // 0819 0295 0832 jz 0x0832 - if (*0x480 != 0x5) // ( == 0x09) - { - 081b 009a 00f0 lri $AX0.H, #0x00f0 - 081d 0b0f lris $AX1.H, #0x0f - 081e 0082 0364 lri $AR2, #0x0364 - 0820 1998 lrrn $AX0.L, @$AR0 - 0821 6000 movr $ACC0, $AX0.L - - // Unpack 14 of the nibbles.. - 0822 1107 0829 bloopi #0x07, 0x0829 - for (int j=0; j<7; j++) - { - 0824 3400 andr $AC0.M, $AX0.H - 0825 1408 lsl $ACC0, #8 - 0826 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - - 0827 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 0828 140c lsl $ACC0, #12 - 0829 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - } - // Then do the last two .. - 082a 3400 andr $AC0.M, $AX0.H - 082b 1408 lsl $ACC0, #8 - 082c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 082d 3600 andr $AC0.M, $AX1.H - 082e 140c lsl $ACC0, #12 - 082f 1b5e srri @$AR2, $AC0.M - - 0830 029f 0852 jmp 0x0852 - } - else // (*0x480 == 5) - { - 0832 009a c000 lri $AX0.H, #0xc000 - 0834 0082 0364 lri $AR2, #0x0364 - 0836 1998 lrrn $AX0.L, @$AR0 - 0837 6000 movr $ACC0, $AX0.L - - // Unpack half nibbles (half quality, ~half space) - //0838 1103 0845 bloopi #0x03, 0x0845 - for (j=0; j<3; j++) - { - 083a 1408 lsl $ACC0, #8 - 083b 3400 andr $AC0.M, $AX0.H - 083c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 083d 140a lsl $ACC0, #10 - 083e 3400 andr $AC0.M, $AX0.H - 083f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0840 140c lsl $ACC0, #12 - 0841 3400 andr $AC0.M, $AX0.H - 0842 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0843 140e lsl $ACC0, #14 - 0844 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 - 0845 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - } - - 0846 1408 lsl $ACC0, #8 - 0847 3400 andr $AC0.M, $AX0.H - 0848 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0849 140a lsl $ACC0, #10 - 084a 3400 andr $AC0.M, $AX0.H - 084b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 084c 140c lsl $ACC0, #12 - 084d 3400 andr $AC0.M, $AX0.H - 084e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 084f 140e lsl $ACC0, #14 - 0850 3400 andr $AC0.M, $AX0.H - 0851 1b5e srri @$AR2, $AC0.M - } - - 0852 8f00 set40 - 0853 1f7f mrr $AX1.H, $AC1.M - 0854 2066 lrs $AX0.L, @0x0066 - 0855 2767 lrs $AC1.M, @0x0067 - 0856 193a lrri $AX0.H, @$AR1 - 0857 1939 lrri $AX1.L, @$AR1 - 0858 0080 0364 lri $AR0, #0x0364 - 085a 1c80 mrr $IX0, $AR0 - 085b a000 mulx $AX0.L, $AX1.L - 085c ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - - // ADPCM decoding main loop. - 085d 1108 0866 bloopi #0x08, 0x0866 - for (int i=0; i<8; i++) - { - 085f 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 0860 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 0861 1485 asl $ACC0, #5 - 0862 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 0863 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 0864 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 0865 1585 asl $ACC1, #5 - 0866 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - } - 0867 2f67 srs @0x0067, $AC1.M - 0868 8e00 set16 - 0869 1ff8 mrr $AC1.M, $AX0.L - 086a 2f66 srs @0x0066, $AC1.M - 086b 8900 clr $ACC1 - } - 086c 00df 0360 lr $AC1.M, @0x0360 - 086e 02df ret -} - - - - - - // probably unreachable - { - // 086f b100 tst $ACC0 - // 0870 02d5 retz - if (!$ACC0) return; - - 0871 04fe addis $ACC0, #0xfe - 0872 1f1e mrr $AX0.L, $AC0.M - 0873 191e lrri $AC0.M, @$AR0 - 0874 0291 087a jl 0x087a - 0876 191a lrri $AX0.H, @$AR0 - 0877 0058 loop $AX0.L - 0878 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0879 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 087a 1b7e srri @$AR3, $AC0.M - 087b 02df ret -} - - -//////////////////////////////////////////// DEFAULT DECODER -void 087c_DefaultDecoder() -{ - // 087c 8100 clr $ACC0 - // 087d 1f5e mrr $AX0.H, $AC0.M - // 087e 00d8 0402 lr $AX0.L, @0x0402 - - ACC0 = 0; - AX0.L = *0x0402; // == PB.RatioInt - - // Sample fraction is stored in a common way, but sample position is not, so - // it's in the individual decoders. Some decoders, like square wave, only care about - // fractional sample position. So here we just load up the fractional sample - // position before handing control over. - - // 0880 00dc 0430 lr $AC0.L, @0x0430 - // 0882 0080 0520 lri $AR0, #0x0520 - - AC0.L = *0x430; // == PB.CurSampleFrac - AR0 = 0x0520; - - // 0884 00df 0480 lr $AC1.M, @0x0480 - // 0886 1501 lsl $ACC1, #1 - // 0887 0340 007e andi $AC1.M, #0x007e - // 0889 0300 0891 addi $AC1.M, #0x0891 - // 088b 1c5f mrr $AR2, $AC1.M - // 088c 175f callr $AR2 // (*$AR2)() <-- See jump table at 0x0891 - - AC1.M = ((*0x480 * 2) & 0x007e) + 0x0891; // == ((PB.Format * 2) & 0x007e) + 0x0891 - AR2 = AC1.M; - - JumpTable0891(PB.Format); - - //088d 00fc 0430 sr @0x0430, $AC0.L - *0x430 = AC0.L; // *0x430 == PB.CurSampleFrac - - // 088f 029f 02d8 jmp 0x02d8 - GOTO ContinueWithBlock: // in SyncFrame -} - - -// Jump table -// switch(PB.Format) -0891 029f 08b2 jmp 0x08b2 // case 0x0 // 08b2_Decoder0x0_SquareWave (used in ZWW) -0893 029f 08ed jmp 0x08ed // case 0x1 // 08ed_Decoder0x1_SawWave (used in ZWW) -0895 029f 08d5 jmp 0x08d5 // case 0x2 // 08d5_Decoder0x2_SquareSaw (hasn't been spotted) -0897 029f 08c2 jmp 0x08c2 // case 0x3 // 08c2_Decoder0x3_RectangleWave (hasn't been spotted) -0899 029f 08fb jmp 0x08fb // case 0x4 // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) -089b 029f 08b1 jmp 0x08b1 // case 0x5 (can never happen) -089d 029f 0919 jmp 0x0919 // case 0x6 // 0919_Decoder0x6_Constant (hasn't been spotted) -089f 029f 091c jmp 0x091c // case 0x7 // 091c_Decoder0x7_WaveTable (used in Pikmin) -08a1 029f 08b1 jmp 0x08b1 // case 0x8 (can never happen) -08a3 029f 08b1 jmp 0x08b1 // case 0x9 (can never happen) -08a5 029f 093a jmp 0x093a // case 0xa (hasn't been spotted) -08a7 029f 08f3 jmp 0x08f3 // case 0xb // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) (used in Pikmin) -08a9 029f 08f7 jmp 0x08f7 // case 0xc // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) (Zelda force field in temple of gods) -08ab 029f 08b1 jmp 0x08b1 // case 0xd (unused) -08ad 029f 08b1 jmp 0x08b1 // case 0xe (unused) -08af 029f 08b1 jmp 0x08b1 // case 0xf (unused) -08b1 02df ret - -void 08b2_Decoder0x0_SquareWave(ACC0, AR0, AX0.L) { - // 08b2 1401 lsl $ACC0, #1 - t = samplePosition * 2; - - // Set up sound buffers - // 08b3 009b c000 lri $AX1.H, #0xc000 - // 08b5 0099 4000 lri $AX1.L, #0x4000 - - // 08b7 1150 08bf bloopi #0x50, 0x08bf - for(int i = 0; i < 80; i++) { - //08b9 02c0 0001 andcf $AC0.M, #0x0001 - //08bb 027c iflnz - // 08bc 1b1b srri @$AR0, $AX1.H - //08bd 027d iflz - // 08be 1b19 srri @$AR0, $AX1.L - if(($AC0.M & 1) == 1) - *$AR0++ = 0x4000; - else - *$AR0++ = 0xc000; - - // 08bf 4800 addax $ACC0, $AX0 - t += PB.Ratio; - } - // 08c0 147f lsr $ACC0, #-1 - t /= 2; - - // 08c1 02df ret -} - -void 08c2_Decoder0x3_RectangleWave(ACC0, AR0, AX0.L) { - 08c2 1402 lsl $ACC0, #2 // t = PB.CurSampleFrac * 4 - 08c3 8900 clr $ACC1 // ACC1 = 0 - 08c4 1fb8 mrr $AC1.L, $AX0.L // AC1.L = PB.RatioInt - 08c5 1501 lsl $ACC1, #1 // ACC1 *= 2 - 08c6 009b c000 lri $AX1.H, #0xc000 - 08c8 0099 4000 lri $AX1.L, #0x4000 - // 08ca 1150 08d2 bloopi #0x50, 0x08d2 - for(int i = 0; i < 80; i++) { - // 08cc 02c0 0003 andcf $AC0.M, #0x0003 - // 08ce 027c iflnz - // 08cf 1b1b srri @$AR0, $AX1.H - // 08d0 027d iflz - // 08d1 1b19 srri @$AR0, $AX1.L - // 08d2 4c00 add $ACC0, $ACC1 - - if (($AC0.M & 3) == 3) - *$AR0++ = 0x4000; - else - *$AR0++ = 0xc000; - - t += (PB.RatioInt * 2); - } - // 08d3 147e lsr $ACC0, #-2 - t /= 4; - - // 08d4 02df ret -} - -void 08d5_Decoder0x2_SquareSaw(ACC0, AR0, AX0.L) { - 08d5 1401 lsl $ACC0, #1 - 08d6 0081 0ca0 lri $AR1, #0x0ca0 - 08d8 009b c000 lri $AX1.H, #0xc000 - 08da 0099 4000 lri $AX1.L, #0x4000 - 08dc 8900 clr $ACC1 - 08dd 0082 0000 lri $AR2, #0x0000 - 08df 1150 08ea bloopi #0x50, 0x08ea - 08e1 02c0 0001 andcf $AC0.M, #0x0001 - 08e3 027c iflnz - 08e4 1b1b srri @$AR0, $AX1.H - 08e5 027d iflz - 08e6 1b19 srri @$AR0, $AX1.L - 08e7 183d lrr $AC1.L, @$AR1 - 08e8 4900 addax $ACC1, $AX0 - 08e9 1fe2 mrr $AC1.M, $AR2 - 08ea 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M - 08eb 147f lsr $ACC0, #-1 - // 08ec 02df ret -} - -void 08ed_Decoder0x1_SawWave(ACC0, AR0, AX0.L) { - // 08ed 8900 clr $ACC1 - // 08ee 1fb8 mrr $AC1.L, $AX0.L - // 08ef 157f lsr $ACC1, #-1 - - // At this point AX0.L is PB.RatioInt and AC0.L is PB.CurSampleFrac - ACC1 = 0; - AC1.L = AX0.L * 2; - - // 08f0 1050 loopi #0x50 - for(int i = 0; i < 0x50; i++) { - // 08f1 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L - ACC0 += ACC1; - *$AR0++ = AC0.L; - } - // 08f2 02df ret -} - - -void 08f3_Decoder0x4_0xb_0xc_WaveTable(ACC0, AR0, AX0.L) { - // See 091c - - 08f3 0082 0180 lri $AR2, #0x0180 // Entrance 1, 0x0b - 08f5 029f 08fd jmp 0x08fd - - 08f7 0082 01c0 lri $AR2, #0x01c0 // Entrance 2, 0x0c - 08f9 029f 08fd jmp 0x08fd - - 08fb 0082 0140 lri $AR2, #0x0140 // Entrance 3, 0x04 - - 08fd 008a 003f lri $WR2, #0x003f - 08ff 0086 0000 lri $IX2, #0x0000 - 0901 1406 lsl $ACC0, #6 - 0902 8900 clr $ACC1 - 0903 1fb8 mrr $AC1.L, $AX0.L - 0904 1505 lsl $ACC1, #5 - 0905 009b 003f lri $AX1.H, #0x003f - 0907 009a 0000 lri $AX0.H, #0x0000 - 0909 3600 andr $AC0.M, $AX1.H - 090a 1cde mrr $IX2, $AC0.M - 090b 001a addarn $AR2, $IX2 - 090c 3400 andr $AC0.M, $AX0.H - 090d 1150 0913 bloopi #0x50, 0x0913 - 090f 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0910 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0911 1cde mrr $IX2, $AC0.M - 0912 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0913 1b19 srri @$AR0, $AX1.L - 0914 1fc2 mrr $AC0.M, $AR2 - 0915 147a lsr $ACC0, #-6 - 0916 008a ffff lri $WR2, #0xffff - // 0918 02df ret -} - -void 0919_Decoder0x6_Constant(AR0, AX0.L) { - // case 0x6: Fills the buffer with PB.RatioInt (zero?) - - // 0919 1050 loopi #0x50 - // 091a 1b18 srri @$AR0, $AX0.L - - for(int i = 0; i < 0x50; i++) - *AR0++ = AX0.L; // PB.RatioInt - - // 091b 02df ret -} - -void 091c_Decoder0x7_WaveTable(ACC0, AR0, AX0.L) { - // So AR2 is where it reads the data from, and it updates ACC0 to the final read address in the end - // Questions: How does the wrap register change the data access? - - // 091c 0082 0100 lri $AR2, #0x0100 - // 091e 008a 003f lri $WR2, #0x003f - // 0920 0086 0000 lri $IX2, #0x0000 - // 0922 1406 lsl $ACC0, #6 - // 0923 8900 clr $ACC1 - // 0924 1fb8 mrr $AC1.L, $AX0.L - // 0925 1505 lsl $ACC1, #5 - - - WR2 = 0x003f; - ACC0 <<= 6; - ACC1 = AX0.L << 5; - - - // 0926 009b 003f lri $AX1.H, #0x003f - // 0928 009a 0000 lri $AX0.H, #0x0000 - // 092a 3600 andr $AC0.M, $AX1.H - // 092b 1cde mrr $IX2, $AC0.M - // 092c 001a addarn $AR2, $IX2 - // 092d 3400 andr $AC0.M, $AX0.H - - AC0.M &= 0x003f; - IX2 = AC0.M; - AR2 = 0x0100 + IX2; - - AC0.M = 0; - - - // 092e 1150 0934 bloopi #0x50, 0x0934 - for(int i = 0; i < 0x50; i++) { - // 0930 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - - ACC0 += ACC1; - AX1.L = *AR2++; - - // 0931 3606 andr'dr $AC0.M, $AX1.H : $AR2 - AC0.M &= 0x003f; - AR2--; - - // 0932 1cde mrr $IX2, $AC0.M - IX2 = AC0.M; - - // 0933 340e andr'nr $AC0.M, $AX0.H : $AR2 - AC0.M = 0; - AR2 += IX2; - - // 0934 1b19 srri @$AR0, $AX1.L - *AR0++ = AX1.L; - - } - - // 0935 1fc2 mrr $AC0.M, $AR2 - // 0936 147a lsr $ACC0, #-6 - // 0937 008a ffff lri $WR2, #0xffff - - AC0.M = AR2; - ACC0 >>= 6; - WR2 = 0xffff; - - // 0939 02df ret -} - -void 093a_Unk() { - 093a 0082 0100 lri $AR2, #0x0100 - 093c 008a 003f lri $WR2, #0x003f - 093e 0086 0000 lri $IX2, #0x0000 - 0940 0081 0ca0 lri $AR1, #0x0ca0 - 0942 1406 lsl $ACC0, #6 - 0943 8900 clr $ACC1 - 0944 1fb8 mrr $AC1.L, $AX0.L - 0945 1505 lsl $ACC1, #5 - 0946 009b 003f lri $AX1.H, #0x003f - 0948 009a 0000 lri $AX0.H, #0x0000 - 094a 3600 andr $AC0.M, $AX1.H - 094b 1cde mrr $IX2, $AC0.M - 094c 001a addarn $AR2, $IX2 - 094d 3400 andr $AC0.M, $AX0.H - 094e 1150 0959 bloopi #0x50, 0x0959 - 0950 1939 lrri $AX1.L, @$AR1 - 0951 a000 mulx $AX0.L, $AX1.L - 0952 140a lsl $ACC0, #10 - 0953 4e00 addp $ACC0 - 0954 1476 lsr $ACC0, #-10 - 0955 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0956 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0957 1cde mrr $IX2, $AC0.M - 0958 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0959 1b19 srri @$AR0, $AX1.L - 095a 1fc2 mrr $AC0.M, $AR2 - 095b 147a lsr $ACC0, #-6 - 095c 008a ffff lri $WR2, #0xffff - 095e 02df ret -} - -void 095f_Unk_SetupMemAt0_0180() { - 095f 0080 01be lri $AR0, #0x01be - 0961 1918 lrri $AX0.L, @$AR0 - 0962 191a lrri $AX0.H, @$AR0 - 0963 0080 0180 lri $AR0, #0x0180 - 0965 0083 0180 lri $AR3, #0x0180 - 0967 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0968 1ffe mrr $AC1.M, $AC0.M - // 0969 1120 0970 bloopi #0x20, 0x0970 - for (int i = 0; i < 0x20; i++) { - 096b 7c00 neg $ACC0 - 096c d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 096d 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 096e c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 096f 1501 lsl $ACC1, #1 - 0970 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - } - 0971 0080 01fe lri $AR0, #0x01fe - 0973 191a lrri $AX0.H, @$AR0 - 0974 1918 lrri $AX0.L, @$AR0 - 0975 0080 01c0 lri $AR0, #0x01c0 - 0977 0083 01c0 lri $AR3, #0x01c0 - 0979 1ff8 mrr $AC1.M, $AX0.L - 097a 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 097b f800 addpaxz $ACC0, $AX0.H - 097c 0240 01ff andi $AC0.M, #0x01ff - 097e 0260 2000 ori $AC0.M, #0x2000 - - //0980 02bf 0983 call 0x0983 - 0983_WriteRamp($ACC0, $ACC1, Dest($AR3)) - - // 0982 02df ret -} - -void 0983_WriteRamp(ACC0, ACC1, Dest($AR3)) { - // 0983 b900 tst $ACC1 - // 0984 0272 ifg - // 0985 7c00 neg $ACC0 - if ($ACC1 > 0) { - $ACC0 = -$ACC0; - } - - // 0986 1f7e mrr $AX1.H, $AC0.M - // 0987 4700 addr $ACC1, $AX1.H - - // 0988 1110 098d bloopi #0x10, 0x098d - for (int i = 0; i < 0x10; i++) { - 098a 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 098b 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 098c 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 098d 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - } - 098e 02df ret -} - -//////////////////////////////////////////// 0x08 DECODER -// Hardcoded destination 0x0580. -void Decoder0x08() { - 098f 0092 0004 lri $CR, #0x0004 - 0991 2002 lrs $AX0.L, @0x0002 - 0992 8100 clr $ACC0 - 0993 8900 clr $ACC1 - 0994 2430 lrs $AC0.L, @0x0030 // CurSampleFrac - - // 0995 8d00 set15 - // 0996 0950 lris $AX1.L, #0x50 - // 0997 a000 mulx $AX0.L, $AX1.L - // 0998 a400 mulxac $AX0.L, $AX1.L, $ACC0 - // 0999 1404 lsl $ACC0, #4 - // 099a 8c00 clr15 - // Compute how much data we need to read, to get 0x50 samples after resampling. - // AC0.L is cursamplefrace, AX0.L is ratio. - $ACC0 = PB.CurrentSampleFrac + 0x50 * PB.Ratio; - - 099b 1ffe mrr $AC1.M, $AC0.M - 099c 0083 0580 lri $AR3, #0x0580 - 099e 2201 lrs $AX0.H, @0x0001 - 099f 8600 tstaxh $AX0.H - 09a0 0294 09b1 jnz 0x09b1 - - // 09a2 2204 lrs $AX0.H, @0x0004 - // 09a3 8600 tstaxh $AX0.H - // 09a4 02b4 09f9 callne 0x09f9 - if (*0x0404) { // NeedsReset - 09f9_UpdateSampleCounters8(); - } - - 09a6 8100 clr $ACC0 - 09a7 2605 lrs $AC0.M, @0x0005 - 09a8 b100 tst $ACC0 - 09a9 0295 09be jz 0x09be - -label09ab: - 09ab 8100 clr $ACC0 - 09ac 2e05 srs @0x0005, $AC0.M - 09ad 2281 lrs $AX0.H, @0xff81 - 09ae 8600 tstaxh $AX0.H - 09af 0294 09b8 jnz 0x09b8 - 09b1 8100 clr $ACC0 - 09b2 005f loop $AC1.M - 09b3 1b7e srri @$AR3, $AC0.M - 09b4 7400 incm $AC0.M - 09b5 2e01 srs @0x0001, $AC0.M - 09b6 029f 09f2 jmp 0x09f2 - 09b8 2688 lrs $AC0.M, @0xff88 - 09b9 2489 lrs $AC0.L, @0xff89 - 09ba 2e34 srs @0x0034, $AC0.M - 09bb 2c35 srs @0x0035, $AC0.L - // 09bc 02bf 09f9 call 0x09f9 - 09f9_UpdateSampleCounters8(); - - 09be 00ff 0360 sr @0x0360, $AC1.M - - 09c0 2638 lrs $AC0.M, @0x0038 - 09c1 2439 lrs $AC0.L, @0x0039 - 09c2 0f05 lris $AC1.M, #0x05 // Sample format 5 - // 09c3 02bf 05ad call 0x05ad - 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) - - 09c5 00df 0360 lr $AC1.M, @0x0360 - 09c7 8100 clr $ACC0 - // 09c8 263a lrs $AC0.M, @0x003a - // 09c9 b100 tst $ACC0 - // 09ca 0294 09d9 jnz 0x09d9 - if (*(0x043a)) { - 09cc 263b lrs $AC0.M, @0x003b - 09cd 5c00 sub $ACC0, $ACC1 - 09ce 0290 09d9 jge 0x09d9 - - 09d0 223b lrs $AX0.H, @0x003b - // 09d1 02bf 0a0a call 0x0a0a // Load more samples. - 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)) - - 09d3 5500 subr $ACC1, $AX0.H - // 09d4 0a01 lris $AX0.H, #0x01 - // 09d5 00fa 0405 sr @0x0405, $AX0.H - *0x405 = 1; // PB.ReachedEnd = 1; - - 09d7 029f 09ab jmp 0x09ab - } - - 09d9 1f5f mrr $AX0.H, $AC1.M - // 09da 02bf 0a0a call 0x0a0a // Load more samples. - 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)); - - // Stash AX0.H away, it gets read again at 09ef. - 09dc 00fa 0362 sr @0x0362, $AX0.H - - 09de 8100 clr $ACC0 - 09df 263a lrs $AC0.M, @0x003a - 09e0 243b lrs $AC0.L, @0x003b - 09e1 1570 lsr $ACC1, #-16 - - // 09e2 0a01 lris $AX0.H, #0x01 - // 09e3 0081 0405 lri $AR1, #0x0405 - // 09e5 5c00 sub $ACC0, $ACC1 - // 09e6 b100 tst $ACC0 - // 09e7 0275 ifz - // 09e8 1a3a srr @$AR1, $AX0.H - - ACC0 -= ACC1; - if(ACC0 == 0) - *0x405 = 1; // PB.ReachedEnd = 1 - - 09e9 2e3a srs @0x003a, $AC0.M - 09ea 2c3b srs @0x003b, $AC0.L - 09eb 2638 lrs $AC0.M, @0x0038 - 09ec 2439 lrs $AC0.L, @0x0039 - 09ed 00d8 0362 lr $AX0.L, @0x0362 - 09ef 7000 addaxl $ACC0, $AX0.L - 09f0 2c39 srs @0x0039, $AC0.L - 09f1 2e38 srs @0x0038, $AC0.M - - // 09f2 0092 00ff lri $CR, #0x00ff - // 09f4 029f 02d0 jmp 0x02d0 - GOTO Resample_From0580To0520: -} - - -// unreachable code -void Unreachable() { - 09f6 8100 clr $ACC0 - 09f7 2e34 srs @0x0034, $AC0.M - 09f8 2e35 srs @0x0035, $AC0.M -} - -void 09f9_UpdateSampleCounters8() { - 09f9 2334 lrs $AX1.H, @0x0034 - 09fa 2135 lrs $AX1.L, @0x0035 - 09fb 268a lrs $AC0.M, @0xff8a - 09fc 248b lrs $AC0.L, @0xff8b - 09fd 5a00 subax $ACC0, $AX1 - 09fe 2e3a srs @0x003a, $AC0.M - 09ff 2c3b srs @0x003b, $AC0.L - 0a00 2634 lrs $AC0.M, @0x0034 - 0a01 2435 lrs $AC0.L, @0x0035 - 0a02 238c lrs $AX1.H, @0xff8c - 0a03 218d lrs $AX1.L, @0xff8d - 0a04 4a00 addax $ACC0, $AX1 - 0a05 2e38 srs @0x0038, $AC0.M - 0a06 2c39 srs @0x0039, $AC0.L - 0a07 8100 clr $ACC0 - 0a08 2e05 srs @0x0005, $AC0.M - // 0a09 02df ret -} - -void 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)) { - // Read from ARAM. Convert 8-bit samples to 16-bit. - // 0a0a 0080 ffd3 lri $AR0, #0xffd3 - // 0a0c 0084 0000 lri $IX0, #0x0000 - // 0a0e 007a 0a12 bloop $AX0.H, 0x0a12 - // 0a10 199e lrrn $AC0.M, @$AR0 - // 0a11 1488 asl $ACC0, #8 - // 0a12 1b7e srri @$AR3, $AC0.M - // 0a13 02df ret - for (int i = 0; i < $AX0.H; i++) { - *($AR3++) = (*0xffd3) << 8; // ffd3 is the non-adpcm alternative read address for the accelerator. - } -} - - -//////////////////////////////////////////// 0x10 DECODER -// Hardcoded destination 0x0580. -// This should be the easiest decoder to decipher in full -- except the really -// trivial ones like the synths. -// It's almost identical to Decoder0x08 -void Decoder0x10() { - // 0a14 0092 0004 lri $CR, #0x0004 - 0a16 2002 lrs $AX0.L, @0x0002 - 0a17 8100 clr $ACC0 - 0a18 8900 clr $ACC1 - // 0a19 2430 lrs $AC0.L, @0x0030 - 0a1a 8d00 set15 - - // 0a1b 0950 lris $AX1.L, #0x50 - // 0a1c a000 mulx $AX0.L, $AX1.L - // 0a1d a400 mulxac $AX0.L, $AX1.L, $ACC0 - // 0a1e 1404 lsl $ACC0, #4 - // 0a1f 8c00 clr15 - - // Compute how much data we need to read, to get 0x50 samples after resampling. - // AC0.L is cursamplefrac, AX0.L is ratio. - $ACC0 = (PB.CurrentSampleFrac + 0x50 * PB.Ratio) << 4; - - 0a20 1ffe mrr $AC1.M, $AC0.M - 0a21 0083 0580 lri $AR3, #0x0580 - 0a23 2201 lrs $AX0.H, @0x0001 - 0a24 8600 tstaxh $AX0.H - 0a25 0294 0a36 jnz 0x0a36 /// Jump! See jump destination below. - - 0a27 2204 lrs $AX0.H, @0x0004 - 0a28 8600 tstaxh $AX0.H - 0a29 02b4 0a7f callne 0x0a7f - if (*0x0404) // "NeedsReset" - { - 0a7f_UpdateSampleCounters10() - } - - 0a2b 8100 clr $ACC0 - - 0a2c 2605 lrs $AC0.M, @0x0005 - 0a2d b100 tst $ACC0 - 0a2e 0295 0a43 jz 0x0a43 - if (*0x405) { - - retry_0a30: - 0a30 8100 clr $ACC0 - 0a31 2e05 srs @0x0005, $AC0.M - 0a32 2281 lrs $AX0.H, @0xff81 - 0a33 8600 tstaxh $AX0.H - 0a34 0294 0a3d jnz 0x0a3d - if (!*401) { //// <<<<<<<<<<<< Jump destination - 0a36 8100 clr $ACC0 - 0a37 005f loop $AC1.M - 0a38 1b7e srri @$AR3, $AC0.M - 0a39 7400 incm $AC0.M - 0a3a 2e01 srs @0x0001, $AC0.M - 0a3b 029f 0a78 jmp 0x0a78 // quit - } else { - // Copy [88,89] to [34,35] - 0a3d 2688 lrs $AC0.M, @0xff88 - 0a3e 2489 lrs $AC0.L, @0xff89 - 0a3f 2e34 srs @0x0034, $AC0.M - 0a40 2c35 srs @0x0035, $AC0.L - 0a41 02bf 0a7f call 0x0a7f - 0a7f_UpdateSampleCounters10() - } - } - - 0a43: - 0a43 00ff 0360 sr @0x0360, $AC1.M - 0a45 2638 lrs $AC0.M, @0x0038 - 0a46 2439 lrs $AC0.L, @0x0039 - 0a47 0f06 lris $AC1.M, #0x06 // Sample format 6 - // 0a48 02bf 05ad call 0x05ad - 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) - - 0a4a 00df 0360 lr $AC1.M, @0x0360 - 0a4c 8100 clr $ACC0 - 0a4d 263a lrs $AC0.M, @0x003a - 0a4e b100 tst $ACC0 - 0a4f 0294 0a5e jnz 0x0a5e - if (!*0x043a) { - 0a51 263b lrs $AC0.M, @0x003b - 0a52 5c00 sub $ACC0, $ACC1 - 0a53 0290 0a5e jge 0x0a5e - if (0x43b <= ACC1) { // not sure, but .. not enough samples? - 0a55 223b lrs $AX0.H, @0x003b - // 0a56 02bf 0a91 call 0x0a91 // Read more samples - 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)); - 0a58 5500 subr $ACC1, $AX0.H - // 0a59 0a01 lris $AX0.H, #0x01 - // 0a5a 00fa 0405 sr @0x0405, $AX0.H - *0x405 = 1; // PB.ReachedEnd - - 0a5c 029f 0a30 jmp 0x0a30 // GOTO retry_0a30; - } - } - - 0a5e 1f5f mrr $AX0.H, $AC1.M - // 0a5f 02bf 0a91 call 0x0a91 // Read more samples - 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)) - - // Stash AX0.H away, it gets read again at 0a72. - 0a61 00fa 0362 sr @0x0362, $AX0.H - - 0a63 8100 clr $ACC0 - 0a64 263a lrs $AC0.M, @0x003a - 0a65 243b lrs $AC0.L, @0x003b - 0a66 1570 lsr $ACC1, #-16 - // 0a67 0a01 lris $AX0.H, #0x01 - // 0a68 0081 0405 lri $AR1, #0x0405 - // 0a6a 5c00 sub $ACC0, $ACC1 - // 0a6b b100 tst $ACC0 - // 0a6c 0275 ifz - // 0a6d 1a3a srr @$AR1, $AX0.H - - ACC0 -= ACC1; - if(ACC0 == 0) - *0x405 = 1; // PB.ReachedEnd = 1 - - 0a6e 2e3a srs @0x003a, $AC0.M - 0a6f 2c3b srs @0x003b, $AC0.L - 0a70 2638 lrs $AC0.M, @0x0038 - 0a71 2439 lrs $AC0.L, @0x0039 - 0a72 00d8 0362 lr $AX0.L, @0x0362 - 0a74 7000 addaxl $ACC0, $AX0.L - 0a75 7000 addaxl $ACC0, $AX0.L - 0a76 2c39 srs @0x0039, $AC0.L - 0a77 2e38 srs @0x0038, $AC0.M - - // 0a78 0092 00ff lri $CR, #0x00ff - // 0a7a 029f 02d0 jmp 0x02d0 - GOTO Resample_From0580To0520: -} - -void 0a7c_UnkUnused() { - 0a7c 8100 clr $ACC0 - 0a7d 2e34 srs @0x0034, $AC0.M - 0a7e 2e35 srs @0x0035, $AC0.M - -// used by 0x10 decoder -void 0a7f_UpdateSampleCounters10() { - 0a7f 2334 lrs $AX1.H, @0x0034 - 0a80 2135 lrs $AX1.L, @0x0035 - 0a81 268a lrs $AC0.M, @0xff8a - 0a82 248b lrs $AC0.L, @0xff8b - 0a83 5a00 subax $ACC0, $AX1 // Subtract [34,35] from [8a, 8b] - 0a84 2e3a srs @0x003a, $AC0.M - 0a85 2c3b srs @0x003b, $AC0.L - 0a86 2634 lrs $AC0.M, @0x0034 - 0a87 2435 lrs $AC0.L, @0x0035 - 0a88 1401 lsl $ACC0, #1 // This shift is not done in UpdateSampleCounters8. - 0a89 238c lrs $AX1.H, @0xff8c - 0a8a 218d lrs $AX1.L, @0xff8d - 0a8b 4a00 addax $ACC0, $AX1 // Add [34,35]<<1 to [8c, 8d] - 0a8c 2e38 srs @0x0038, $AC0.M - 0a8d 2c39 srs @0x0039, $AC0.L - 0a8e 8100 clr $ACC0 - 0a8f 2e05 srs @0x0005, $AC0.M - 0a90 02df ret -} - - -// Read AX0.H samples from the accelerator. -void 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)) { - // 0a91 0080 ffd3 lri $AR0, #0xffd3 - // 0a93 0084 0000 lri $IX0, #0x0000 - // 0a95 007a 0a98 bloop $AX0.H, 0x0a98 - // 0a97 199e lrrn $AC0.M, @$AR0 - // 0a98 1b7e srri @$AR3, $AC0.M - // 0a99 02df ret - - for (int i = 0; i < $AX0.H; i++) { - *($AR3++) = *0xffd3; // ffd3 is the non-adpcm alternative read address for the accelerator. - } -} - -//////////////////////////////////////////// 0x20 DECODER -// Same as 0x21 but with no resampling. -{ - // 0a9a 8900 clr $ACC1 - // 0a9b 0f50 lris $AC1.M, #0x50 - // 0a9c 0083 0520 lri $AR3, #0x0520 - // 0a9e 02bf 0ab3 call 0x0ab3 - - ACC1 = 0; - AC1.M = 0x50; - AR3 = 0x520; - - 0ab3_Decoder0x21Core(AC1.M=0x50, AR3=#0x0520); - - // 0aa0 029f 02d8 jmp 0x02d8 - GOTO ContinueWithBlock: // in SyncFrame -} - -//////////////////////////////////////////// 0x21 DECODER -void 0aa2_Decoder0x21() { - // 0aa2 00d8 0402 lr $AX0.L, @0x0402 - // 0aa4 8100 clr $ACC0 - // 0aa5 8900 clr $ACC1 - AX0.L = *0x0402; - ACC0 = 0 - ACC1 = 0 - // 0aa6 00dc 0430 lr $AC0.L, @0x0430 - // 0aa8 0a50 lris $AX0.H, #0x50 - // 0aa9 9000 mul $AX0.L, $AX0.H - // 0aaa 9400 mulac $AX0.L, $AX0.H, $ACC0 - // 0aab 1404 lsl $ACC0, #4 - ACC0 = (*0x0430 + (*0x0402 * 0x50)) << 4; - - // 0aac 1ffe mrr $AC1.M, $AC0.M - ACC1 = ACC0 & 0xFFFF0000; - - // 0aad 0083 0580 lri $AR3, #0x0580 - // 0aaf 02bf 0ab3 call 0x0ab3 // 0ab3_Decoder0x21Core - 0ab3_Decoder0x21Core(AC1.M, AR3=#0x0580); - - // 0ab1 029f 02d0 jmp 0x02d0 - GOTO Resample_From0580To0520: -} - -// 0x21 Decoder Core -// Decoder 0x21 simply streams raw audio from RAM (not ARAM!) by using DMA. -// Lots of buffer wrap trickery etc but no actual decoding. -void 0ab3_Decoder0x21Core(AC1.M, AR3) { - // 0ab3 0092 0004 lri $CR, #0x0004 - // 0ab5 8100 clr $ACC0 - // 0ab6 263a lrs $AC0.M, @0x003a - // 0ab7 243b lrs $AC0.L, @0x003b - // 0ab8 1f1f mrr $AX0.L, $AC1.M - // 0ab9 0a00 lris $AX0.H, #0x00 - // 0aba 5800 subax $ACC0, $AX0 - ACC0 = [0x043a,0x043b]; - ACC0 -= AC1.M; - - - // 0abb 0292 0ad1 jg 0x0ad1 - if ([0x043a,0x043b] <= AC1.M) { - // Happens when sound has finished playing? - - // 0abd 8900 clr $ACC1 - // 0abe 00c0 043b lr $AR0, @0x043b - ACC1 = 0; - AR0 = *0x043b; - - // 0ac0 02bf 0af6 call 0x0af6 // 0af6_Decoder0x21_MoreStuff() - 0af6_Decoder0x21_MoreStuff(AR0=*0x043b, AR3); - - // 0ac2 8100 clr $ACC0 - // 0ac3 1fd8 mrr $AC0.M, $AX0.L - // 0ac4 223b lrs $AX0.H, @0x003b - // 0ac5 5400 subr $ACC0, $AX0.H - // 0ac6 0007 dar $AR3 - // 0ac7 1979 lrri $AX1.L, @$AR3 - - ACC0 = 0; - AX0.H = *0x043b; - AC0.M = AX0.L - *0x043b; - - AX1.L = *$AR3; - - // Looks like duplication of the first memory address AC0.M times - - // 0ac8 005e loop $AC0.M - for(int i = 0; i < AC0.M; i++) { - // 0ac9 1b79 srri @$AR3, $AX1.L - *$AR3++ = AX1.L; - } - - // 0aca 0f01 lris $AC1.M, #0x01 - // 0acb 2f01 srs @0x0001, $AC1.M - // 0acc 8900 clr $ACC1 - // 0acd 2f3b srs @0x003b, $AC1.M - - ACC1 = 0; - - // Looks like some finalization of the PB - *0x0401 = 1; // KeyOff - *0x043b = 0; // RemLength - - - 0ace 0092 00ff lri $CR, #0x00ff - //0ad0 02df ret - return; - } - - // 0ad1 2e3a srs @0x003a, $AC0.M - // 0ad2 2c3b srs @0x003b, $AC0.L - - *0x043a = AC0.M; - *0x043b = AC0.L; - - // 0ad3 8100 clr $ACC0 - // 0ad4 8900 clr $ACC1 - // 0ad5 268a lrs $AC0.M, @0xff8a - // 0ad6 2734 lrs $AC1.M, @0x0034 - - ACC0 = 0; - ACC1 = 0; - AC0.M = *0x048a; - AC1.M = *0x0434; - - // 0ad7 5c00 sub $ACC0, $ACC1 - // 0ad8 2e36 srs @0x0036, $AC0.M - - ACC0 -= AC1.L; - *0x0436 = (ACC0 & 0xFFFF0000) >> 16; - - // 0ad9 5000 subr $ACC0, $AX0.L - ACC0 -= AX0.L; - - 0ada 0290 0af0 jge 0x0af0 - if (ACC0 < 0) { - // 0adc 00c0 0436 lr $AR0, @0x0436 - // 0ade 02bf 0af6 call 0x0af6 - 0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3); - - // 0ae0 8100 clr $ACC0 - // 0ae1 1fd8 mrr $AC0.M, $AX0.L - - ACC0 = 0; - AC0.M = AX0.L; - - // 0ae2 2236 lrs $AX0.H, @0x0036 // 0x0436 - AX0.H = *0x0436; - - // 0ae3 5400 subr $ACC0, $AX0.H - // 0ae4 1c1e mrr $AR0, $AC0.M - // 0ae5 8100 clr $ACC0 - // 0ae6 2e34 srs @0x0034, $AC0.M - - ACC0 -= AX0.H; - AR0 = (ACC0 & 0xFFFF0000) >> 16; - ACC0 = 0; - *0x0434 = 0; - - // 0ae7 2688 lrs $AC0.M, @0xff88 // 0x0488 - // 0ae8 2489 lrs $AC0.L, @0xff89 // 0x0489 - // 0ae9 2e8c srs @0xff8c, $AC0.M - // 0aea 2c8d srs @0xff8d, $AC0.L - - *0x048c = *0x0488; - *0x048d = *0x0489; - - // 0aeb 02bf 0af6 call 0x0af6 - 0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3); - - 0aed 0092 00ff lri $CR, #0x00ff - // 0aef 02df ret - return; - } - - // 0af0 1c18 mrr $AR0, $AX0.L - // 0af1 02bf 0af6 call 0x0af6 - - AR0 = AX0.L; - 0af6_Decoder0x21_MoreStuff(AR0=AX0.L, AR3); - - 0af3 0092 00ff lri $CR, #0x00ff - // 0af5 02df ret -} - - - -// CR = 0x4 -// Does strange stuff with PB[0x34] and the address PB[0x8c,d] -// Does not touch AX0.L -void 0af6_Decoder0x21_MoreStuff($AR0, $AR3) { - // 0af6 8100 clr $ACC0 - // 0af7 1fc0 mrr $AC0.M, $AR0 - // 0af8 b100 tst $ACC0 - // 0af9 02d5 retz - if (!AR0) - return; - - // 0afa 8900 clr $ACC1 - // 0afb 2734 lrs $AC1.M, @0x0034 - // 0afc 0340 0001 andi $AC1.M, #0x0001 - // 0afe 0b00 lris $AX1.H, #0x00 - // 0aff 1f3f mrr $AX1.L, $AC1.M - - AX1.L = *0x0434 & 1; - - // 0b00 268c lrs $AC0.M, @0xff8c - // 0b01 248d lrs $AC0.L, @0xff8d - // 0b02 8900 clr $ACC1 - // 0b03 2534 lrs $AC1.L, @0x0034 - // 0b04 1501 lsl $ACC1, #1 - // 0b05 4c00 add $ACC0, $ACC1 - - // 0b06 5a00 subax $ACC0, $AX1 - // 0b07 5a00 subax $ACC0, $AX1 - - ACC0 = [8c,8d] + *0x0434 * 2 - ((*0x0434 & 1) * 2); - - // 0b08 1c20 mrr $AR1, $AR0 - - AR1 = AR0; - - // 0b09 1fe0 mrr $AC1.M, $AR0 - // 0b0a 0502 addis $ACC1, #0x02 - ACC1 = ($AR0 << 16) + 0x20000; - - // - // 0b0b 1c1f mrr $AR0, $AC1.M - // 0b0c 009f 0b00 lri $AC1.M, #0x0b00 - 0b0e 0092 00ff lri $CR, #0x00ff - - AR0 = AC1.M; - AC1.M = 0x0b00; - - // Load more audio from RAM by DMA?? - - // 0b10 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM - 0525_CopyRAMtoDMEM($AR1 == $ACC1 >> 16, 0x0b00, $AR0) - - // 0b12 0092 0004 lri $CR, #0x0004 - - // 0b14 2734 lrs $AC1.M, @0x0034 - // 0b15 1f61 mrr $AX1.H, $AR1 - // 0b16 4700 addr $ACC1, $AX1.H - // 0b17 2f34 srs @0x0034, $AC1.M - *0x0434 += AR1; - - // 0b18 0080 0b00 lri $AR0, #0x0b00 - // 0b1a 8900 clr $ACC1 - // 0b1b 1ff9 mrr $AC1.M, $AX1.L - // 0b1c b900 tst $ACC1 - // 0b1d 0274 ifnz - if (AX1.L) { - // 0b1e 0008 iar $AR0 - $AR0++; - } - // 0b1f 8900 clr $ACC1 - // 0b20 1fe1 mrr $AC1.M, $AR1 - // 0b21 191e lrri $AC0.M, @$AR0 - // 0b22 0701 cmpis $ACC1, #0x01 - ACC1 = 0; - AC1.M = AR1; - AC0.M = *$AR0++; - // 0b23 0293 0b2c jle 0x0b2c - if (AC1.M > 1) { - // 0b25 191a lrri $AX0.H, @$AR0 - // 0b26 05fe addis $ACC1, #0xfe - AX0.H = *$AR0++; - ACC1 += 0xfe0000; - - // 0b27 005f loop $AC1.M - for(int i = 0; i < AC1.M; i++) { - // 0b28 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - AC0.L = 0; - AC0.H = AX0.H; - AC0.M = AX0.H; - AX0.H = *$AR0++; - *$AR3++ = AC0.M; - } - //0b29 1b7e srri @$AR3, $AC0.M - //0b2a 1b7a srri @$AR3, $AX0.H - //0b2b 02df ret - - *$AR3++ = AC0.M; - *$AR3++ = AX0.H; - } else { - //0b2c 1b7e srri @$AR3, $AC0.M - //0b2d 02df ret - *$AR3++ = AC0.M; - } -} - - -void 0b2e_Unk_Multiply() { // ZWW: 01c2_Unk - 0b2e 8a00 m2 - 0b2f 0083 03e8 lri $AR3, #0x03e8 - 0b31 191e lrri $AC0.M, @$AR0 - 0b32 191a lrri $AX0.H, @$AR0 - 0b33 1006 loopi #0x06 - 0b34 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0b35 1b7e srri @$AR3, $AC0.M - 0b36 1b7a srri @$AR3, $AX0.H - 0b37 0080 03e8 lri $AR0, #0x03e8 - 0b39 0088 0007 lri $WR0, #0x0007 - 0b3b 1150 0b48 bloopi #0x50, 0x0b48 - for (int i = 0; i < 0x50; i++) { - 0b3d 1c61 mrr $AR3, $AR1 - 0b3e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0b3f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b40 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b41 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b42 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b43 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b44 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b45 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b46 f200 madd $AX0.L, $AX0.H - 0b47 fe00 movpz $ACC0 - 0b48 1b3e srri @$AR1, $AC0.M - } - 0b49 0088 ffff lri $WR0, #0xffff - 0b4b 8b00 m0 - 0b4c 02df ret -} - -// looks kind of like a IIR filter? -// Hardcoded buffer length = 0x50 -void 0b4d_IIR_Filter(InBuffer($AR0), OutBuffer($AR1), FilterLength(AC1.M)) { - 0b4d 8a00 m2 - 0b4e 05fe addis $ACC1, #0xfe - 0b4f 0083 03e8 lri $AR3, #0x03e8 - 0b51 191e lrri $AC0.M, @$AR0 - 0b52 191a lrri $AX0.H, @$AR0 - 0b53 005f loop $AC1.M - 0b54 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - - 0b55 1b7e srri @$AR3, $AC0.M - 0b56 1b7a srri @$AR3, $AX0.H - 0b57 0080 03e8 lri $AR0, #0x03e8 - 0b59 0501 addis $ACC1, #0x01 - 0b5a 1d1f mrr $WR0, $AC1.M - // 0b5b 1150 0b63 bloopi #0x50, 0x0b63 - for (int i = 0; i < 0x50; i++) { - 0b5d 1c61 mrr $AR3, $AR1 - 0b5e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0b5f 005f loop $AC1.M - 0b60 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0b61 f200 madd $AX0.L, $AX0.H - 0b62 fe00 movpz $ACC0 - 0b63 1b3e srri @$AR1, $AC0.M - } - 0b64 0088 ffff lri $WR0, #0xffff - 0b66 8b00 m0 - 0b67 02df ret -} - -// Looks like a 4-tap FIR filter. -// Hardcoded buffer length = 0x50 -// Uses 0x03e8 as some scratch space, i think . -void 0b68_4TapFIR(InBuffer($AR2), FilterBuffer($AR0), OutBuffer($AR1)) { - 0b68 0083 03e8 lri $AR3, #0x03e8 - 0b6a 191e lrri $AC0.M, @$AR0 - 0b6b 191a lrri $AX0.H, @$AR0 - 0b6c 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0b6d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0b6e 1b7e srri @$AR3, $AC0.M - 0b6f 1b7a srri @$AR3, $AX0.H - 0b70 0080 03e8 lri $AR0, #0x03e8 - 0b72 0088 0003 lri $WR0, #0x0003 // That's a short wrap - filter coefs? - 0b74 0085 0000 lri $IX1, #0x0000 - 0b76 0087 0000 lri $IX3, #0x0000 - 0b78 1fc2 mrr $AC0.M, $AR2 - 0b79 195b lrri $AX1.H, @$AR2 - 0b7a 1959 lrri $AX1.L, @$AR2 - 0b7b 195f lrri $AC1.M, @$AR2 - 0b7c 195a lrri $AX0.H, @$AR2 - 0b7d 1c5e mrr $AR2, $AC0.M - 0b7e 1fda mrr $AC0.M, $AX0.H - 0b7f 1c61 mrr $AR3, $AR1 - 0b80 8a00 m2 - 0b81 8f00 set40 - 0b82 191a lrri $AX0.H, @$AR0 - 0b83 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0b84 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0b85 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0b86 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0b87 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0b88 1127 0b93 bloopi #0x27, 0x0b93 - for (int i = 0; i < 0x27; i++) { - 0b8a e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M // end of first iteration - - 0b8b 197e lrri $AC0.M, @$AR3 - 0b8c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0b8d eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0b8e bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0b8f e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M // e - - 0b90 197f lrri $AC1.M, @$AR3 // start of first iteration - 0b91 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0b92 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0b93 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - } - 0b94 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0b95 197e lrri $AC0.M, @$AR3 - 0b96 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0b97 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0b98 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 0b99 1bff srrn @$AR3, $AC1.M - 0b9a 197f lrri $AC1.M, @$AR3 - 0b9b 8e00 set16 - 0b9c 8b00 m0 - 0b9d 0088 ffff lri $WR0, #0xffff - 0b9f 1b5b srri @$AR2, $AX1.H - 0ba0 1b59 srri @$AR2, $AX1.L - 0ba1 1b5f srri @$AR2, $AC1.M - 0ba2 1b5e srri @$AR2, $AC0.M - 0ba3 02df ret -} - -// Fixed length 0x50. -void 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) { - 0ba4 0083 03e8 lri $AR3, #0x03e8 - - // Load 4 parameters from *$AR0, copy them into the tiny ring buffer - // later handled by $AR0/$WR0 (filter state?) - 0ba6 191e lrri $AC0.M, @$AR0 - 0ba7 191a lrri $AX0.H, @$AR0 - 0ba8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0ba9 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0baa 1b7e srri @$AR3, $AC0.M - 0bab 1b7a srri @$AR3, $AX0.H - 0bac 0080 03e8 lri $AR0, #0x03e8 - 0bae 0088 0003 lri $WR0, #0x0003 // That's a short wrap - filter coefs? - 0bb0 0085 0000 lri $IX1, #0x0000 - 0bb2 0087 0000 lri $IX3, #0x0000 - - // Load more parameters from *$AR2 - 0bb4 1fc2 mrr $AC0.M, $AR2 - 0bb5 195b lrri $AX1.H, @$AR2 - 0bb6 1959 lrri $AX1.L, @$AR2 - 0bb7 195f lrri $AC1.M, @$AR2 - 0bb8 195a lrri $AX0.H, @$AR2 - - 0bb9 1c5e mrr $AR2, $AC0.M - 0bba 1fda mrr $AC0.M, $AX0.H - - // Setup AR3, now ready to read in data. - 0bbb 1c61 mrr $AR3, $AR1 - 0bbc 8a00 m2 - 0bbd 8f00 set40 - - // Start the pipeline - 0bbe 191a lrri $AX0.H, @$AR0 - 0bbf b800 mulx $AX0.H, $AX1.H - 0bc0 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0bc1 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0bc2 ea00 maddc $AC1.M, $AX1.L - 0bc3 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0bc4 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0bc5 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0bc6 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - - 0bc7 1127 0bd8 bloopi #0x27, 0x0bd8 - // (half of 0x50) - 1, -1 due to the software pipelining. - for (int i = 0; i < 0x27; i++) { - 0bc9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0bca e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - - 0bcb 197e lrri $AC0.M, @$AR3 - 0bcc e800 maddc $AC0.M, $AX1.L - 0bcd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0bce ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0bcf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0bd0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0bd1 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0bd2 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - - 0bd3 197f lrri $AC1.M, @$AR3 - 0bd4 ea00 maddc $AC1.M, $AX1.L - 0bd5 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0bd6 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0bd7 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0bd8 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - } - 0bd9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0bda e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - - 0bdb 197e lrri $AC0.M, @$AR3 - 0bdc e800 maddc $AC0.M, $AX1.L - 0bdd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0bde ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0bdf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0be0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0be1 1bff srrn @$AR3, $AC1.M - - 0be2 197f lrri $AC1.M, @$AR3 - 0be3 8e00 set16 - 0be4 8b00 m0 - 0be5 0088 ffff lri $WR0, #0xffff - 0be7 1b5b srri @$AR2, $AX1.H - 0be8 1b59 srri @$AR2, $AX1.L - 0be9 1b5f srri @$AR2, $AC1.M - 0bea 1b5e srri @$AR2, $AC0.M - // 0beb 02df ret -} - -void 0bec_Unk() { - // 0bec 0eff lris $AC0.M, #0xff - // 0bed 00fe 03f2 sr @0x03f2, $AC0.M - *0x03f2 = 0xFF - - // 0bef 8100 clr $ACC0 - // 0bf0 00fe 03f0 sr @0x03f0, $AC0.M - // 0bf2 00fe 03f6 sr @0x03f6, $AC0.M - *0x03f0 = 0x00 - *0x03f6 = 0x00 - - // 0bf4 009e 0100 lri $AC0.M, #0x0100 - // 0bf6 00fe 03f7 sr @0x03f7, $AC0.M - *0x03f7 = 0x100 - - 0bf8 00da 03f7 lr $AX0.H, @0x03f7 - 0bfa 009e 8000 lri $AC0.M, #0x8000 - 0bfc 5400 subr $ACC0, $AX0.H - 0bfd 00fe 03f5 sr @0x03f5, $AC0.M - - // 0bff 0e30 lris $AC0.M, #0x30 - // 0c00 00fe 03f3 sr @0x03f3, $AC0.M - *0x03f3 = 0x0030 - - // 0c02 0e10 lris $AC0.M, #0x10 - // 0c03 00fe 03f4 sr @0x03f4, $AC0.M - *0x03f5 = 0x0010 - - // 0c05 009e 0096 lri $AC0.M, #0x0096 - // 0c07 00fe 03f1 sr @0x03f1, $AC0.M - *0x03f1 = 0x0096 - - // 0c09 02df ret -} - -void 0c0a_Unk() { - // 0c0a 0080 0a00 lri $AR0, #0x0a00 - // 0c0c 8100 clr $ACC0 - // 0c0d 00de 03f0 lr $AC0.M, @0x03f0 - // 0c0f 8900 clr $ACC1 - // 0c10 b100 tst $ACC0 - - // 0c11 0275 ifz - // 0c12 0550 addis $ACC1, #0x50 - $AC0.M = *(0x03f0); - if (*(0x03f0) == 0) { - $ACC1 = 0x50 << 16; - } - // 0c13 00ff 03f0 sr @0x03f0, $AC1.M - *(0x03f0) = $ACC1; - - // 0c15 0200 0a60 addi $AC0.M, #0x0a60 - // 0c17 1c7e mrr $AR3, $AC0.M - // 0c18 0f4e lris $AC1.M, #0x4e - - $AC0.M += 0xa60; - $AR3 = $AC0.M - $AC1.M = 0x4e; - - // 0c19 02bf 00da call 0x00da - 00da_CopyBuffer(src=0x0a00, dst=$AC0.M, #0x4e) - - // 0c1b 02df ret -} - -// The control flow of this thing is NOT easy ... -// Reads from buffer at 0x0a60 -// Writes to buffer at 0x0a00 -void 0c1c_ComputeReverbFrom0a60To0a00() -{ - // 0c1c 00de 03f1 lr $AC0.M, @0x03f1 - // 0c1e 0200 0a60 addi $AC0.M, #0x0a60 - // 0c20 1c7e mrr $AR3, $AC0.M - $AR3 = 0x0a60 + *(0x03f1); - - 0c21 8100 clr $ACC0 - 0c22 8900 clr $ACC1 - 0c23 009f 00a0 lri $AC1.M, #0x00a0 - 0c25 00de 03f1 lr $AC0.M, @0x03f1 - 0c27 5d00 sub $ACC1, $ACC0 - 0c28 0e50 lris $AC0.M, #0x50 - 0c29 0750 cmpis $ACC1, #0x50 - 0c2a 0270 ifge - 0c2b 5d00 sub $ACC1, $ACC0 - 0c2c 00da 03f2 lr $AX0.H, @0x03f2 - 0c2e 8600 tstaxh $AX0.H - 0c2f 0290 0c4d jge 0x0c4d - 0c31 00de 03f3 lr $AC0.M, @0x03f3 - 0c33 5c00 sub $ACC0, $ACC1 - 0c34 0293 0c38 jle 0x0c38 - 0c36 029f 0c52 jmp 0x0c52 // done: - - 0c38 00db 03f7 lr $AX1.H, @0x03f7 - 0c3a 009e 8000 lri $AC0.M, #0x8000 - 0c3c 4600 addr $ACC0, $AX1.H - 0c3d 029f 0c44 jmp 0x0c44 - - 0c3f 00db 03f7 lr $AX1.H, @0x03f7 - 0c41 009e 8000 lri $AC0.M, #0x8000 - 0c43 5600 subr $ACC0, $AX1.H - - 0c44 00fe 03f5 sr @0x03f5, $AC0.M - 0c46 1fda mrr $AC0.M, $AX0.H - 0c47 7c00 neg $ACC0 - 0c48 1f5e mrr $AX0.H, $AC0.M - 0c49 00fe 03f2 sr @0x03f2, $AC0.M - 0c4b 029f 0c52 jmp 0x0c52 // done: - - 0c4d 00de 03f4 lr $AC0.M, @0x03f4 - 0c4f 5d00 sub $ACC1, $ACC0 - 0c50 0293 0c3f jle 0x0c3f - -done: - 0c52 8900 clr $ACC1 - 0c53 00dd 03f5 lr $AC1.L, @0x03f5 - 0c55 1501 lsl $ACC1, #1 - 0c56 8100 clr $ACC0 - 0c57 00dc 03f6 lr $AC0.L, @0x03f6 - 0c59 008b 009f lri $WR3, #0x009f // 0xa0 wrap - 0c5b 0080 0a00 lri $AR0, #0x0a00 - 0c5d 0900 lris $AX1.L, #0x00 - - // This is the loop that used to go crazy in the LLE emulation - // before we fixed addarn to obey the wrapping register. - - // Feels like some crazy delay function with a slowly drifting delay time. - - // Could this be part of a reverb? Or just a flanger? - - // 0c5e 1150 0c65 bloopi #0x50, 0x0c65 - for (int i = 0; i < 0x50; i++) { - 0c60 1878 lrr $AX0.L, @$AR3 - 0c61 4c00 add $ACC0, $ACC1 - 0c62 1cfe mrr $IX3, $AC0.M - 0c63 001f addarn $AR3, $IX3 - 0c64 1fd9 mrr $AC0.M, $AX1.L - 0c65 1b18 srri @$AR0, $AX0.L - - $AX0.L = *AR3; - $ACC0 += $ACC1; - $IX3 = $AC0.M; - $AR3 += $IX3; - $AC0.M = $AX1.L; - *(AR0++) = $AX0.L; - } - - 0c66 009f 0a60 lri $AC1.M, #0x0a60 - 0c68 1fc3 mrr $AC0.M, $AR3 - 0c69 5c00 sub $ACC0, $ACC1 - 0c6a 00fe 03f1 sr @0x03f1, $AC0.M - 0c6c 00fc 03f6 sr @0x03f6, $AC0.L - 0c6e 008b ffff lri $WR3, #0xffff // restore wrap - // 0c70 02df ret -} - - -void 0c71_AddBufferA00ToD60AndD00() -{ - // 0c71 0f50 lris $AC1.M, #0x50 - // 0c72 0080 0a00 lri $AR0, #0x0a00 - // 0c74 0083 0d60 lri $AR3, #0x0d60 - // 0c76 0098 3fff lri $AX0.L, #0x3fff - // 0c78 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(0x0a00, 0x0d60, 0x50, 0x3fff) - - // 0c7a 0f50 lris $AC1.M, #0x50 - // 0c7b 0080 0a00 lri $AR0, #0x0a00 - // 0c7d 0083 0d00 lri $AR3, #0x0d00 - // 0c7f 0098 3fff lri $AX0.L, #0x3fff - // 0c81 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(0x0a00, 0x0d00, 0x50, 0x3fff) - - // 0c83 02df ret -} - -void 0c84_FilterBufferInPlace(_sampleAddr($AR0), multiplier($AX0.H)) -{ - // 0c84 8a00 m2 - // 0c85 8f00 set40 - // 0c86 8100 clr $ACC0 - // 0c87 00de 0404 lr $AC0.M, @0x0404 - // 0c89 b100 tst $ACC0 - // 0c8a 0295 0c91 jz 0x0c91 - if (*(0x0404)) { - // 0c8c 8100 clr $ACC0 - // 0c8d 00fe 0478 sr @0x0478, $AC0.M - // 0c8f 00fe 0479 sr @0x0479, $AC0.M - *0x0478 = 0; - *0x0479 = 0; - } - // 0c91 00df 0479 lr $AC1.M, @0x0479 - // 0c93 00db 0478 lr $AX1.H, @0x0478 - // 0c95 0900 lris $AX1.L, #0x00 - // 0c96 0084 0000 lri $IX0, #0x0000 - // 0c98 1150 0ca1 bloopi #0x50, 0x0ca1 - $AC1.M = *0x0479; - $AX1.H = *0x0478; - - // ACC1 always contains the value from the previous iteration. - for (int i = 0; i < 0x50; i++) { - // 0c9a 199e lrrn $AC0.M, @$AR0 - // 0c9b 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 - // 0c9c c000 mulc $AC0.M, $AX0.H // Where does AX0.H get set? - // 0c9d 6e00 movp $ACC0 - // 0c9e 1488 asl $ACC0, #8 - // 0c9f 4a00 addax $ACC0, $AX1 - // 0ca0 1b1e srri @$AR0, $AC0.M - // 0ca1 1f7e mrr $AX1.H, $AC0.M - *$AC0.M = *$AR0; - $ACC0 -= $ACC1; - ( $AC1.M = *AR0; ) - $ACC0 = ($AC0.M * $AX0.H * 2 << 8) + ($AX1.L); - *($AR0++) = $AC0.M; - $AX1.H = $AC0.M; - - // Write back - 0ca2 00fb 0478 sr @0x0478, $AX1.H - 0ca4 00ff 0479 sr @0x0479, $AC1.M - - // 0ca6 8b00 m0 - // 0ca7 8e00 set16 - // 0ca8 02df ret -} - -// Called from both volume handlers. -// ACC1 is volume, AX is volume delta. -void 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), Delta($AX0), InBuffer($AR0), Buffer($AR3)) { - // 0ca9 b900 tst $ACC1 - // 0caa 0294 0caf jnz 0x0caf - if (!ACC1) { - // 0cac 6800 movax $ACC0, $AX0.L - // 0cad b100 tst $ACC0 - // 0cae 02d5 retz - if (!AX0.L) - // If incoming volume is zero and ramp delta is zero, - // not really much point to do anything. - return - } - 0caf 1c23 mrr $AR1, $AR3 - 0cb0 197e lrri $AC0.M, @$AR3 - - // This is another heavily software pipelined loop, so it's very confusing. - // See the docs for mulc and mulcac if you want to have any hope of understanding it. - // - // Produce the first result, so it's ready in the prod register. - 0cb1 191b lrri $AX1.H, @$AR0 - 0cb2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - - // 0cb3 1120 0cb9 bloopi #0x20, 0x0cb9 - for (int i = 0; i < 0x20; i++) { - 0cb5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0cb6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - - 0cb7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0cb8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M // Store 1 - - // Walk the ramp. Somewhat odd that it's done only every 2 samples. - 0cb9 4900 addax $ACC1, $AX0 - } - - // 0cba 1108 0cbf bloopi #0x08, 0x0cbf - for (int i = 0; i < 0x8; i++) { - 0cbc dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0cbd 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - - 0cbe dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0cbf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - } - - // NOTE - The above two loops are very similar and the sum of their lengths is - // 0x28 - which is half of 0x50. And each does two loads and two stores, so together - // it's 50. Just strange that the addax is missing in the second loop. - - // It looks like we're dealing with crappy volume ramping - the delta is computed using - // (vol2 - vol1) >> 5! That's why it can only ramp the volume the first 64 (0x20 * 2) samples! - - 0cc0 02df ret -} - - -// What a strange filter .. ORR? -void 0cc1_StrangeORRFilter(_pBuffer(AR3)) -{ - 0cc1 8f00 set40 - 0cc2 8d00 set15 // X multiplications unsigned - 0cc3 1c03 mrr $AR0, $AR3 - 0cc4 00d9 038e lr $AX1.L, @0x038e - 0cc6 0b04 lris $AX1.H, #0x04 - - // pipeline starts here. - 0cc7 197a lrri $AX0.H, @$AR3 - 0cc8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 - 0cc9 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0cca 1128 0ccf bloopi #0x28, 0x0ccf - 0ccc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0ccd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0cce 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0ccf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0cd0 8c00 clr15 - 0cd1 8e00 set16 - - // 0cd2 02df ret -} - - -// called from sync frame if (*0x042c != 0) -// That is, if volume mode != 0. -// It first seems to compute a lot of parameters and store them at 0x0b00 forwards. -// Then it uses those as input for the usual (ramped?) mixes. -void 0cd3_VolumeMixer1() -{ - // 0cd3 00da 0485 lr $AX0.H, @0x0485 - // 0cd5 8600 tstaxh $AX0.H - // 0cd6 0295 0ce5 jz 0x0ce5 - if (*0x0485 != 0) { - // 0cd8 8100 clr $ACC0 - // 0cd9 00de 042a lr $AC0.M, @0x042a - // 0cdb 147f lsr $ACC0, #-1 - // 0cdc 00fe 042b sr @0x042b, $AC0.M - *(0x042b) = *(0x042a) >> 1; - - // 0cde b100 tst $ACC0 - // 0cdf 0294 0ce5 jnz 0x0ce5 - if (*0x042b == 0) { - // 0ce1 009a 0001 lri $AX0.H, #0x0001 - // 0ce3 00fa 0401 sr @0x0401, $AX0.H - *(0x0401) = 1; // KeyOff - } - } - - // 0ce5 8f00 set40 - // 0ce6 8100 clr $ACC0 - // 0ce7 00de 0428 lr $AC0.M, @0x0428 - // 0ce9 1478 lsr $ACC0, #-8 - (ACC0 = *(0x0428) << 8); - - // 0cea 00df 0428 lr $AC1.M, @0x0428 - // 0cec 0340 007f andi $AC1.M, #0x007f - // 0cee 1f1e mrr $AX0.L, $AC0.M - // 0cef 1f5f mrr $AX0.H, $AC1.M - // 0cf0 0220 007f xori $ACC0, #0x007f - // 0cf2 1f3e mrr $AX1.L, $AC0.M - // 0cf3 0320 007f xori $ACC1, #0x007f - // 0cf5 1f7f mrr $AX1.H, $AC1.M - AX0.L = *(0x0428) >> 8; - AX0.H = *(0x0428) & 0x7F; - AX1.L = AX0.L ^ 0x7f; - AX1.H = AX1.H ^ 0x7f; - - // 0cf6 8100 clr $ACC0 - // 0cf7 8900 clr $ACC1 - // 0cf8 009f 0200 lri $AC1.M, #0x0200 - - // 0cfa 1fd8 mrr $AC0.M, $AX0.L - // 0cfb 4c00 add $ACC0, $ACC1 # broken disasm? this doesn't make much sense. - // 0cfc 1c1e mrr $AR0, $AC0.M - // 0cfd 1818 lrr $AX0.L, @$AR0 - AR0 = AX0.L + 0x0200; - AX0.L = *AR0; - - // 0cfe 1fda mrr $AC0.M, $AX0.H - // 0cff 4c00 add $ACC0, $ACC1 - // 0d00 1c1e mrr $AR0, $AC0.M - // 0d01 181a lrr $AX0.H, @$AR0 - AR0 = AX0.H + 0x200; - AX0.H = *AR0; - - // 0d02 1fd9 mrr $AC0.M, $AX1.L - // 0d03 4c00 add $ACC0, $ACC1 - // 0d04 1c1e mrr $AR0, $AC0.M - // 0d05 1819 lrr $AX1.L, @$AR0 - AR0 = AX1.L + 0x200; - AX1.L = *AR0 - - // 0d06 1fdb mrr $AC0.M, $AX1.H - // 0d07 4c00 add $ACC0, $ACC1 - // 0d08 1c1e mrr $AR0, $AC0.M - // 0d09 181b lrr $AX1.H, @$AR0 - AR0 = AX1.H + 0x200; - AX1.H = *AR0; - - // 0d0a 0080 0b00 lri $AR0, #0x0b00 - // 0d0c 9800 mul $AX1.L, $AX1.H - // 0d0d ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - // 0d0e b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - // 0d0f 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M - // 0d10 6e30 movp's $ACC0 : @$AR0, $AC0.M - // 0d11 1b1e srri @$AR0, $AC0.M - - // The above is heavily "sw-pipelined" but I think it turns into: - $AR0 = 0x0b00; - *$AR0++ = AX1.L * AX1.H; - *$AR0++ = AX0.L * AX1.H; - *$AR0++ = AX0.H * AX1.L; - *$AR0++ = AX0.L * AX0.H; - - // 0d12 0080 0b00 lri $AR0, #0x0b00 - // 0d14 0081 0b04 lri $AR1, #0x0b04 - // 0d16 00da 042a lr $AX0.H, @0x042a - // 0d18 02bf 0d62 call 0x0d62 // some tricky multiplication - 0d62_Mul4ByAX0H(0x0b00, 0x0b04, *(0x042a)); - - // 0d1a 0081 0b08 lri $AR1, #0x0b08 - // 0d1c 0080 0b04 lri $AR0, #0x0b04 - // 0d1e 00da 042a lr $AX0.H, @0x042a // interesting - // 0d20 00de 0429 lr $AC0.M, @0x0429 // interesting - // 0d22 c000 mulc $AC0.M, $AX0.H - // 0d23 6e00 movp $ACC0 - // 0d24 1481 asl $ACC0, #1 - // 0d25 1f5e mrr $AX0.H, $AC0.M - - 0d62_Mul4ByAX0H(0x0b00, 0x0b04, (*(0x042a) * *(0x0429) << 1) >> 16); - // 0d26 02bf 0d62 call 0x0d62 // some tricky multiplication - - // 0d28 0080 0b00 lri $AR0, #0x0b00 - // 0d2a 0081 0b0c lri $AR1, #0x0b0c - // 0d2c 8100 clr $ACC0 - // 0d2d 8900 clr $ACC1 - // 0d2e 00de 042b lr $AC0.M, @0x042b // interesting - // 0d30 00df 042a lr $AC1.M, @0x042a // interesting - // 0d32 00fe 042a sr @0x042a, $AC0.M - *(0x042a) = *(0x042b); - - // 0d34 5c00 sub $ACC0, $ACC1 - // 0d35 1f5e mrr $AX0.H, $AC0.M - // 0d36 02bf 0d6b call 0x0d6b // some other tricky multiplication - 0d6b_Mul4ByAC0M_Unsigned(0xb00, 0x0b0c, $AC0.M(*(0x042a) - *(0x042b))) // does not touch AX0.H - - // 0d38 0080 0b0c lri $AR0, #0x0b0c - // 0d3a 0081 0b10 lri $AR1, #0x0b10 - // 0d3c 00da 0429 lr $AX0.H, @0x0429 // interesting - 0d3e 02bf 0d62 call 0x0d62 // some tricky multiplication - 0d62_Mul4ByAX0H(0x0b0c, 0x0b10, *(0x0429)); - - // 0d40 0081 0b04 lri $AR1, #0x0b04 - // 0d42 0082 0b0c lri $AR2, #0x0b0c - // 0d44 0083 0d77 lri $AR3, #0x0d77 - - // So basically the below loop is: - // For i in 0 to 8: - // Call 0ca9_RampedMultiplyAddBuffer($AR0 = *0x038f, $AR3=0x0d77[i], AX0=0xb0c[i]<<11, AC1.M=0x0b04[i]) - - // 0d46 1108 0d5f bloopi #0x08, 0x0d5f - for (int i = 0; i < 8; i++) { - // 0d48 195f lrri $AC1.M, @$AR2 - // 0d49 15fb asr $ACC1, #-5 - // 0d4a 1f1d mrr $AX0.L, $AC1.L - // 0d4b 1f5f mrr $AX0.H, $AC1.M - // Compute volume delta - AX0 = *AR2++ << 11; - - // 0d4c 193f lrri $AC1.M, @$AR1 - AC1.M = *AR1++; - - // 0d4d 00e1 0b24 sr @0x0b24, $AR1 - // 0d4f 00e2 0b25 sr @0x0b25, $AR2 - // 0d51 021b ilrri $AC0.M, @$AR3 // Buffer address table lookup (see below) - // 0d52 00e3 0b26 sr @0x0b26, $AR3 - (Stash AR1, AR2, AR3) - // 0d54 1c7e mrr $AR3, $AC0.M - // 0d55 00c0 038f lr $AR0, @0x038f - // 0d57 02bf 0ca9 call 0x0ca9 - 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), Delta($AX0), InBuffer($AR0), Buffer($AR3)) - - // 0d59 00c1 0b24 lr $AR1, @0x0b24 - // 0d5b 00c2 0b25 lr $AR2, @0x0b25 - // 0d5d 00c3 0b26 lr $AR3, @0x0b26 - (Restore AR1, AR2, AR3) - 0d5f 0000 nop - } - - // 0d60 8e00 set16 - // 0d61 02df ret -} - -void 0d62_Mul4ByAX0H(in_buffer($AR0), out_buffer($AR1), multiplicand($AX0.H)) { - // 0d62 191f lrri $AC1.M, @$AR0 - // 0d63 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 - // 0d64 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 - // 0d65 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - // 0d66 191f lrri $AC1.M, @$AR0 - // 0d67 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - // 0d68 6e31 movp's $ACC0 : @$AR1, $AC0.M - // 0d69 1b3e srri @$AR1, $AC0.M - // 0d6a 02df ret - // The above is a crazy sw-pipelined way to write: - for (int i = 0; i < 4; i++) { - out_buffer[i] = (s16)in_buffer[i] * (s16)multiplicand >> 16; - } -} - -void 0d6b_Mul4ByAC0M_Unsigned(in_buffer($AR0), out_buffer($AR1), multiplicand($AX1.H)) { - // 0d6b 8d00 set15 - // 0d6c 1f7e mrr $AX1.H, $AC0.M - // 0d6d 1918 lrri $AX0.L, @$AR0 - // 0d6e a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 - // 0d6f ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 - // 0d70 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - // 0d71 1918 lrri $AX0.L, @$AR0 - // 0d72 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - // 0d73 6e31 movp's $ACC0 : @$AR1, $AC0.M - // 0d74 1b3e srri @$AR1, $AC0.M - // 0d75 8c00 clr15 - // 0d76 02df ret - // The above is a crazy sw-pipelined way to write: - for (int i = 0; i < 4; i++) { - out_buffer[i] = in_buffer[i] * multiplicand >> 16; //(unsigned multiplication) - } -} - -// table for 0cd3_Unk -// This is a bunch of buffer addresses! -short table = {0x0d00, 0x0d60, 0x0f40, 0x0ca0, 0x0e80, 0x0ee0, 0x0c00, 0x0c50}; - -0d77 0d00 -0d78 0d60 -0d79 0f40 -0d7a 0ca0 -0d7b 0e80 -0d7c 0ee0 -0d7d 0c00 -0d7e 0c50 - -void 0d7f_ResampleAudioData(_src($AR0), _dest($AR1), param(AX1.L) = 0, _option??) -{ - 0d7f 00f9 0361 sr @0x0361, $AX1.L // always 0 - - // 0d81 1fc0 mrr $AC0.M, $AR0 - // 0d82 0200 fffc addi $AC0.M, #0xfffc - // 0d84 1c1e mrr $AR0, $AC0.M - // 0d85 1c5e mrr $AR2, $AC0.M - - // We read a little bit BEFORE the input. The next piece of code takes care of that... - $AR0 = $AR0 - 4; - $AR2 = $AR0; - - // 0x043c to 0x043f is storage for old sample data. - 0d86 0083 043c lri $AR3, #0x043c - - // Pipelined tiny memcpy - first four are loads, last four are stores. middle two overlap. - // 0d88 197e lrri $AC0.M, @$AR3 - // 0d89 197f lrri $AC1.M, @$AR3 - // 0d8a 80a2 nx'sl : $AC0.M, $AX0.H - // 0d8b 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - // 0d8c 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - // 0d8d 1b1f srri @$AR0, $AC1.M - for (int i = 0; i < 4; i++) - *($AR0++) = *($AR3++); - - // Point $AR0 back at 4 words before the start of the in buffer. - // 0d8e 1c02 mrr $AR0, $AR2 - - 0d8f 8100 clr $ACC0 - // 0d90 00de 0402 lr $AC0.M, @0x0402 // Ratio int - // 0d92 00fe 0362 sr @0x0362, $AC0.M - // 0d94 1474 lsr $ACC0, #-12 - // 0d95 1f7e mrr $AX1.H, $AC0.M - // 0d96 1f3c mrr $AX1.L, $AC0.L - *0x0362 = PB.Ratio; - $AX1 = PB.Ratio << 4; - - 0d97 8900 clr $ACC1 - 0d98 00dd 0430 lr $AC1.L, @0x0430 // Sample position frac - 0d9a 1504 lsl $ACC1, #4 - - // $ACC0 here still contains ratio << 12; - 0d9b 0604 cmpis $ACC0, #0x04 - // 0d9c 0290 0df3 jge 0x0df3 // subroutine - - // If ratio too low, don't bother resampling? - GOTONS JustCopyWithoutResampling; - - 0d9e 1fdd mrr $AC0.M, $AC1.L - 0d9f 0082 02b0 lri $AR2, #0x02b0 - - // Store a ramp at 0x2b0? Lookup table for read addresses? - 0da1 1050 loopi #0x50 - 0da2 4b2a addax's $ACC1, $AX1 : @$AR2, $AC1.L - - 0da3 1fbe mrr $AC1.L, $AC0.M - 0da4 00fe 0360 sr @0x0360, $AC0.M - 0da6 8900 clr $ACC1 - 0da7 1fbe mrr $AC1.L, $AC0.M - - 0da8 0af8 lris $AX0.H, #0xf8 - 0da9 009b 00fc lri $AX1.H, #0x00fc - 0dab 00d8 0361 lr $AX0.L, @0x0361 // parameter was stashed here. - - // 0x02b0 is where the ramp from above is stored. - 0dad 0082 02b0 lri $AR2, #0x02b0 - 0daf 0083 02b0 lri $AR3, #0x02b0 - 0db1 195e lrri $AC0.M, @$AR2 - - // I really don't understand what the purpose of this loop is. - 0db2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M - // 0db3 1128 0db8 bloopi #0x28, 0x0db8 - for (int i = 0; i < 0x50; i += 2) { - 0db5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 - 0db6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H - 0db7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 - 0db8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - } - - 0db9 8a00 m2 // All muls doubled. - - // 0x02b0 is where the ramp from above is stored. - 0dba 0082 02b0 lri $AR2, #0x02b0 - - 0dbc 00dd 0430 lr $AC1.L, @0x0430 - 0dbe 1504 lsl $ACC1, #4 - 0dbf 1fe0 mrr $AC1.M, $AR0 - 0dc0 8100 clr $ACC0 - 0dc1 00de 0362 lr $AC0.M, @0x0362 - 0dc3 1474 lsr $ACC0, #-12 - 0dc4 1f7e mrr $AX1.H, $AC0.M - 0dc5 1f3c mrr $AX1.L, $AC0.L - - // Resample with some nice filter of some sort, using unreadable - // pipelined DSP code... gah. - - 0dc6 8f00 set40 // Loaded ACx.M values extend to the entire ACC. Don't see any actual use though. - - // Yep, this pretty much confirms that 0x02b0 is precomputed read addresses. - 0dc7 1943 lrri $AR3, @$AR2 - 0dc8 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 - 0dc9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0dca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0dcb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0dcc f200 madd $AX0.L, $AX0.H - 0dcd fe00 movpz $ACC0 - 0dce 1c1f mrr $AR0, $AC1.M - 0dcf 1943 lrri $AR3, @$AR2 - 0dd0 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 - 0dd1 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - // 0dd2 114e 0dda bloopi #0x4e, 0x0dda - // Count the stores - 0x4e stores in the main loop, two more afterwards. - // Deeply pipelined. - for (int i = 0; i < 0x4e; i++) { - 0dd4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0dd5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0dd6 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0dd7 1c1f mrr $AR0, $AC1.M - 0dd8 1943 lrri $AR3, @$AR2 - 0dd9 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 - 0dda 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - } - 0ddb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ddc f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0ddd f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0dde fe00 movpz $ACC0 - 0ddf 1b3e srri @$AR1, $AC0.M - - // Things back to normal. - // 0de0 8b00 m0 - // 0de1 8e00 set16 - -back_from_JustCopyWithoutResampling: - 0de2 00fe 0433 sr @0x0433, $AC0.M - 0de4 1c1f mrr $AR0, $AC1.M - 0de5 150c lsl $ACC1, #12 - 0de6 0340 0fff andi $AC1.M, #0x0fff - 0de8 00ff 0430 sr @0x0430, $AC1.M - - // Store the last 4 samples or something undecoded - // back into the PB. - 0dea 0083 043c lri $AR3, #0x043c - 0dec 191e lrri $AC0.M, @$AR0 - 0ded 191f lrri $AC1.M, @$AR0 - 0dee 80a0 nx'ls : $AX0.H, $AC0.M - 0def 64a1 movr'ls $AC0.M, $AX0.H : $AX0.H, $AC1.M - 0df0 6533 movr's $AC1.M, $AX0.H : @$AR3, $AC0.M - 0df1 1b7f srri @$AR3, $AC1.M - // 0df2 02df ret - return; - -JustCopyWithoutResampling: - // 0df3 1fe0 mrr $AC1.M, $AR0 - // 0df4 1c1f mrr $AR0, $AC1.M // This instruction looks very pointless. - - // 0df5 1128 0dfc bloopi #0x28, 0x0dfc - // 0df7 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 - // 0df8 1b3e srri @$AR1, $AC0.M - // 0df9 1c1f mrr $AR0, $AC1.M - // 0dfa 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 - // 0dfb 1b3e srri @$AR1, $AC0.M - // 0dfc 1c1f mrr $AR0, $AC1.M - for (int i = 0; i < 0x50; i++) { - $ACC1 += $AX1; // This is to still advance the playback position. - $AC0.M = *($AR0++); - *($AR1++) = $AC0.M; - $AR0 = $AC1.M; // Undo the increment - } - - // Looks like $AR0 stays unchanged, while $AR1 gets incremented by 0x50. - 0dfd 029f 0de2 jmp 0x0de2 -} - - -// Small utility jumped to from SyncFrame. -// sets 50 shorts from 0x520 to zero. -void 0dff_Zero520_50() { - 0dff 0083 0520 lri $AR3, #0x0520 - 0e01 00de 0433 lr $AC0.M, @0x0433 - 0e03 1050 loopi #0x50 - 0e04 1b7e srri @$AR3, $AC0.M - // 0e05 029f 02d8 jmp 0x02d8 - GOTO ContinueWithBlock: // in SyncFrame -} - -// No-one calls this routine. -void 0e07_UnUsed() { - 0e07 1c20 mrr $AR1, $AR0 - 0e08 185f lrr $AC1.M, @$AR2 - 0e09 1f7f mrr $AX1.H, $AC1.M - 0e0a 193a lrri $AX0.H, @$AR1 - 0e0b 6400 movr $ACC0, $AX0.H - 0e0c 0078 0e11 bloop $AX0.L, 0x0e11 - 0e0e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 - 0e0f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M - 0e10 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 - 0e11 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M - 0e12 1a5b srr @$AR2, $AX1.H - // 0e13 02df ret -} - -void 0e14_DolbyInit() -{ - // Init parameters/coefficients for UnknownFilter - 0e14 0098 8240 lri $AX0.L, #0x8240 - 0e16 00f8 04e8 sr @0x04e8, $AX0.L - 0e18 0098 7fff lri $AX0.L, #0x7fff - 0e1a 00f8 04e9 sr @0x04e9, $AX0.L - 0e1c 0098 7dbf lri $AX0.L, #0x7dbf - 0e1e 00f8 04ea sr @0x04ea, $AX0.L - 0e20 0098 843f lri $AX0.L, #0x843f - 0e22 00f8 04eb sr @0x04eb, $AX0.L - 0e24 0098 b23b lri $AX0.L, #0xb23b - 0e26 00f8 04f0 sr @0x04f0, $AX0.L - 0e28 0098 7fff lri $AX0.L, #0x7fff - 0e2a 00f8 04f1 sr @0x04f1, $AX0.L - 0e2c 0098 4dc4 lri $AX0.L, #0x4dc4 - 0e2e 00f8 04f2 sr @0x04f2, $AX0.L - 0e30 0098 d808 lri $AX0.L, #0xd808 - 0e32 00f8 04f3 sr @0x04f3, $AX0.L - - // Zero the UnknownFilter states. - 0e34 0098 0000 lri $AX0.L, #0x0000 - 0e36 0080 04ec lri $AR0, #0x04ec - 0e38 1004 loopi #0x04 - 0e39 1b18 srri @$AR0, $AX0.L - 0e3a 0080 04f4 lri $AR0, #0x04f4 - 0e3c 1004 loopi #0x04 - 0e3d 1b18 srri @$AR0, $AX0.L - // 0e3e 02df ret -} - -// I'm going to guess that this is Dolby mixing. -void 0e3f_DolbyMixdown() -{ - 0e3f 0080 0f40 lri $AR0, #0x0f40 - 0e41 0083 0b00 lri $AR3, #0x0b00 - 0e43 8900 clr $ACC1 - 0e44 0f50 lris $AC1.M, #0x50 - 0e45 0098 6784 lri $AX0.L, #0x6784 - //0e47 02bf 00fa call 0x00fa // XorBuffer - 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) - - 0e49 0080 04e8 lri $AR0, #0x04e8 - 0e4b 0082 04ec lri $AR2, #0x04ec - 0e4d 0081 0b00 lri $AR1, #0x0b00 - 0e4f 02bf 0ba4 call 0x0ba4 // 0ba4_UnknownFilter - 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) - - 0e51 8900 clr $ACC1 - 0e52 0f50 lris $AC1.M, #0x50 - 0e53 0080 0b00 lri $AR0, #0x0b00 - 0e55 0083 0d00 lri $AR3, #0x0d00 - 0e57 0098 7fff lri $AX0.L, #0x7fff - // 0e59 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - 0e5b 8900 clr $ACC1 - 0e5c 0f50 lris $AC1.M, #0x50 - 0e5d 0080 0b00 lri $AR0, #0x0b00 - 0e5f 0083 0d60 lri $AR3, #0x0d60 - 0e61 0098 b820 lri $AX0.L, #0xb820 - // 0e63 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - 0e65 0080 0ca0 lri $AR0, #0x0ca0 - 0e67 0083 0b00 lri $AR3, #0x0b00 - 0e69 8900 clr $ACC1 - 0e6a 0f50 lris $AC1.M, #0x50 - 0e6b 0098 6784 lri $AX0.L, #0x6784 - // 0e6d 02bf 00fa call 0x00fa // XorBuffer - 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) - - 0e6f 0080 04e8 lri $AR0, #0x04e8 - 0e71 0082 04f4 lri $AR2, #0x04f4 - 0e73 0081 0b00 lri $AR1, #0x0b00 - // 0e75 02bf 0ba4 call 0x0ba4 // 0ba4_UnknownFilter - 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) - - 0e77 8900 clr $ACC1 - 0e78 0f50 lris $AC1.M, #0x50 - 0e79 0080 0b00 lri $AR0, #0x0b00 - 0e7b 0083 0d00 lri $AR3, #0x0d00 - 0e7d 0098 47e0 lri $AX0.L, #0x47e0 - // 0e7f 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - 0e81 8900 clr $ACC1 - 0e82 0f50 lris $AC1.M, #0x50 - 0e83 0080 0b00 lri $AR0, #0x0b00 - 0e85 0083 0d60 lri $AR3, #0x0d60 - 0e87 0098 8001 lri $AX0.L, #0x8001 - // 0e89 02bf 00eb call 0x00eb - 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) - - // 0e8b 02df ret -} - - -void Nops() { - 0e8c 0000 nop - 0e8d 0000 nop - 0e8e 0000 nop - 0e8f 0000 nop -} +/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +All code is now wrapped in void Function() {} - the new DSP LLE debugger +can parse this file and auto read symbols using those. + +BIG Questions: + + - Who resets the 0x0350 to the beginning of the command block? Wrap register? + - What does 00eb_Unk_BufferMultAddToDest?? + - Why is a PB-Transfer from RAM to DMEM 0xC0 shorts long but DMEM to RAM just 0x80 + +DSP functionality to test: + - Interrupts (7) + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */ +// +// memory map +// todo - define syntax for this so it can be auto read. + +// +0x0000 to 0x280 // Unknown table +0x0280 // command queue + +/////////////////////////////////////////// + +0x0300 to 0x0320 // AFC COEF table + +0x0342 // low part of the DSetupTable /(Luigi2us) thinks it is the number of PBs +0x0343 // current command code (the code for the switch - casement table) seems to be for debug... nobody loads it +0x0344 // high part of the (command & 0xFF) ... prolly some kind of paramter +0x0345 // low part of the command + +0x034e (0x0000) + +/////////////////////////////////////////// + + + +/////////////////////////////////////////// +// Initialized at 0688_InitCommandBlock() +0x0350 (0x0280) // address to end of the command queue +0x0351 (0x0280) // address to start of the command queue +0x0352 (0x0000) // number of commands + + +0x0356[] // current command queue... eg: 0x81000040 for DsetupTable +0x0358 // first parameter of the command ... + + +0x0364 // Temp Buffer for AFC Decoder + +/////////////////////////////////////////// +0x0380 // RAM Address of the PBs +0x0381 // + +0x038e // used by COMMAND_02 copies the low part of the command to this place + + +0x03a8 // COMMAND_02 copies a struct with the size of 0x40 to the place + +/////////////////////////////////////////// +// used by 05b8_NewMail() exception to store register and restore registers +0x03fa to 0x03ff + +// shared and used by COMMAND_01 (DSetupTable) +0x03f0 // 0x00 +0x03f1 // 0x96 +0x03f2 // 0xFF +0x03f3 // 0x30 +0x03f5 // 0x10 +0x03f6 // 0x00 +0x03f7 // 0x100 ... got some more math... have to recheck it + + +0x03f9 // used by COMMAND_02... if the program decides to continue the UCode it stores the continue address... + +////////////////////////////////////////////// +// current PB in DSyncFrame +0x0400 +. +. +. +0x04C0 + + +/// +0x0400 - must be != 0 to be a valid block +0x0401 - must be != 0 to be a valid block + +0x0402 - Sample Decode Offset ?? Offset = (*0x402 * 0x50) + +0x0404 - Initialize Sample Decoder +0x0406 - Direct Stream ... no sample decoder is needed. + At the end of the PB Handling 0x0404 is set to 0 if it is NOT a direct stream + +0x0430 - Base Address ?? (0x0430 + Offset) << 4 + +0x042c flag if > 0 033d_unk() does something + + +0x0433 stored to 0x03f8 ... i think that is the current sample buffer + +0x0458 hmmm.... + +0x0480 if 0x0406 is zero check how we have to decode this data... + +0x0484 seems to contain filter settings... +0x0484 & 0x1f -> (02ed to 030f) +0x0484 & 0x20 + +0x04a8 if != zero sample is modified with function at 0x0c84.. perhaps an filter or volume + + +//////////////////////////////////////// +0x04d3 "offset to sample data" ???? + +There's definitely a bunch of sample data stored in each PB but I don't know exactly how. + + +/////////////////////////////////////////// +// Initialized at 0e14_Unk() +0x04e8 (0x8240) +0x04e9 (0x7FFF) +0x04ea (0x7DBF) +0x04eb (0x843f) +0x04ec (0x0000) +0x04ed (0x0000) +0x04ee (0x0000) +0x04ef (0x0000) + +0x04f0 (0xb23b) +0x04f1 (0x7FFF) +0x04f2 (0x4dc4) +0x04f3 (0xd808) +0x04f4 (0x0000) +0x04f5 (0x0000) +0x04f6 (0x0000) +0x04f7 (0x0000) + +/////////////////////////////////////////// +0x04fc... // used for some kind of data exchange between SyncFrame and MailExceptionHandler + // It is like this: + // (0x04fc + lastRenderedFrame) must be "something" :) + +0x0580.. Unresampled audio data is decoded to here + +/////////////////////////////////////////// +// Initialized at 04c0_Unk()... used by SyncFrame +0x0B00 to 0x0C00 +// The memory at 0b00 seems to be generally used as scratch space for various things. + + +////////////////////////////////////////// + +0x0dc0 -- ?????????? + + +// +// exception vector +// +0000 029f 0012 jmp 0x0012 -> ResetVector() +0002 0000 nop +0003 0000 nop +0004 02ff rti +0005 0000 nop +0006 02ff rti +0007 0000 nop +0008 02ff rti +0009 0000 nop +000a 02ff rti +000b 0000 nop +000c 02ff rti +000d 0000 nop +000e 029f 05b8 jmp 0x05b8 -> 05b8_NewMail() + +0010 029f 004e jmp 0x004e -> 004e_ContinueUCode() ??? + +// reset vector + +void 0012_ResetVector() +{ + // 0012 1205 sbclr #0x05 + + // 0013 02bf 0057 call 0x0057 + 0057_InitHardware() + + /* + 0015 8100 clr $ACC0 + 0016 009f 1000 lri $AC1.M, #0x1000 + 0018 0080 0000 lri $AR0, #0x0000 + 001a 005f loop $AC1.M + 001b 1b1e srri @$AR0, $AC0.M + Clear memory + */ + { + short ACC0 = 0; + short AR0 = 0x0000; + for (int i=0; i<0x1000; i++) + { + *AR0 = ACC0; + AR0++; + } + } + + // 001c 02bf 0688 call 0x0688 + 0688_InitCommandBlock(); + + // 001e 02bf 04c0 call 0x04c0 + 04c0_UnknownInit(); + + // 0020 02bf 0e14 call 0x0e14 + 0e14_DolbyInit(); // Init from 0x04e8 to 0x04f8 + + // 0022 0e00 lris $AC0.M, #0x00 + // 0023 02bf 066a call 0x066a + SendMB_DCD1(0x0000) + + // 0025 009e 1111 lri $AC0.M, #0x1111 + // 0027 02bf 0674 call 0x0674 + SendMB_F355(0x1111) + + // 0029 0e00 lris $AC0.M, #0x00 + // 002a 00fe 034e sr @0x034e, $AC0.M + *0x034e = 0x00 + + 002c 1305 sbset #0x05 + + // 002d 029f 06c5 jmp 0x06c5 + + // + // an exception will be raised if a new mail is inside the mailbox + // the exception handler will copy the command to an address and the + // 06c5_CopyCommandBlock creates a copy of the command to 0x0356 + // +:WaitForNewCommandBlock + while (06c5_CopyCommandBlock() == 0x002d); + + // 002f 00df 0357 lr $AC1.M, @0x0357 + // 0031 00ff 0345 sr @0x0345, $AC1.M + + *0x0345 = *0x0357 + + // 0033 00de 0356 lr $AC0.M, @0x0356 + // 0035 1ffe mrr $AC1.M, $AC0.M + // 0036 0340 00ff andi $AC1.M, #0x00ff + // 0038 00ff 0344 sr @0x0344, $AC1.M + + short upperCommand = *0x0356 // AC0 = upperCommand + *0x0344 = upperCommand & 0x00FF + + // 003a 1479 lsr $ACC0, #-7 + // 003b 0240 007e andi $AC0.M, #0x007e + // 003d 00fe 0343 sr @0x0343, $AC0.M + upperCommand = (upperCommand >> 7) & 0x7e // F|RES: i think duddy is wrong here ... a negative must be a shift right + *0x0343 = upperCommand + + // 003f 0200 0075 addi $AC0.M, #0x0075 + // 0041 1c1e mrr $AR0, $AC0.M + // 0042 170f jmpr $AR0 + // switch casement of the commands.. jump table is at 0075 + + switch (upperCommand >> 1) // command must be shift >> 1 in our source code because the jump table is aligned with 2 Bytes + { + // case 0x00: 0x0043 + case 0x01: 0095_COMMAND_01(); break; + case 0x02: 0243_COMMAND_02(); break; + + case 0x03: 0x0073 + case 0x04: 0095_COMMAND_04(); break; + case 0x05: 0x0592 + case 0x06: 0x0469 + case 0x07: 0x041d + case 0x08: 0x0485 + case 0x09: 0x044d + // case 0x0A: 0x0043 + // case 0x0B: 0x0043 + // case 0x0C: 0x0043 + case 0x0D: 0x00b2 + // case 0x0E: 0x0043 + // case 0x0F: 0x0043 + } + + # 0043 0092 00ff lri $CR, #0x00ff + + // 0045 0e04 lris $AC0.M, #0x04 + // 0046 02bf 066a call 0x066a + SendMB_DCD1(0x0004) + + // 0048 00de 0356 lr $AC0.M, @0x0356 + // 004a 02bf 0674 call 0x0674 + SendMB_F355(@0x0356) + + // 004c 029f 002d jmp 0x002d + GOTO :WaitForNewCommandBlock +} + +void 004e_ContinueUCode??() +{ + # 004e 1205 sbclr #0x05 + + // 004f 02bf 0057 call 0x0057 + 0057_InitHardware() + + // 0051 0e01 lris $AC0.M, #0x01 + // 0052 02bf 066a call 0x066a + SendMB_DCD1(0x0001) + + # 0054 1305 sbset #0x05 + + // 0055 029f 002d jmp 0x002d + GOTO :WaitForNewCommandBlock +} + +void 0057_InitHardware() +{ + 0057 1202 sbclr #0x02 + 0058 1203 sbclr #0x03 + 0059 1204 sbclr #0x04 + 005a 1306 sbset #0x06 + 005b 8e00 set16 + 005c 8c00 clr15 + 005d 8b00 m0 + + // Set all indexing wrappers to max range. + 005e 009e ffff lri $AC0.M, #0xffff + 0060 1d1e mrr $WR0, $AC0.M + 0061 1d3e mrr $WR1, $AC0.M + 0062 1d5e mrr $WR2, $AC0.M + 0063 1d7e mrr $WR3, $AC0.M + + // Have CR point to the HW interface. + 0064 0092 00ff lri $CR, #0x00ff + // 0066 02df ret +} + +void 0067_CopyCommand(_destAddr($AR0), _loopCount($AC0.M)) +{ + // 0067 0090 0000 lri $AC0.H, #0x0000 + // 0069 0c00 lris $AC0.L, #0x00 + // 006a 0081 0358 lri $AR1, #0x0358 + AC0.H = 0x0000 + AC0.L = 0x00 + AR1 = 0x0358 + + // 006c 007e 0071 bloop $AC0.M, 0x0071 + // 006e 193e lrri $AC0.M, @$AR1 + // 006f 1b1e srri @$AR0, $AC0.M + // 0070 193e lrri $AC0.M, @$AR1 + // 0071 1b1e srri @$AR0, $AC0.M + + for (int i=0; i<_loopCount; i++) + { + *_destAddr++ = *AR1.M++ + *_destAddr++ = *AR1.M++ + } + + // 0072 02df ret +} + +/* + 0073 029f 0043 jmp 0x0043 + 0075 029f 0043 jmp 0x0043 + 0077 029f 0095 jmp 0x0095 + 0079 029f 0243 jmp 0x0243 + 007b 029f 0073 jmp 0x0073 + 007d 029f 0580 jmp 0x0580 + 007f 029f 0592 jmp 0x0592 + 0081 029f 0469 jmp 0x0469 + 0083 029f 041d jmp 0x041d + 0085 029f 0485 jmp 0x0485 + 0087 029f 044d jmp 0x044d + 0089 029f 0043 jmp 0x0043 + 008b 029f 0043 jmp 0x0043 + 008d 029f 0043 jmp 0x0043 + 008f 029f 00b2 jmp 0x00b2 + 0091 029f 0043 jmp 0x0043 + 0093 029f 0043 jmp 0x0043 +jump table for command code decoding + */ + +// DsetupTable +void 0095_COMMAND_01() +{ + // 0095 0080 0380 lri $AR0, #0x0380 + // 0097 0e04 lris $AC0.M, #0x04 + // 0098 02bf 0067 call 0x0067 + 0067_CopyCommand(0x0380, 0x04) + + // 009a 0081 0382 lri $AR1, #0x0382 + // 009c 009f 0000 lri $AC1.M, #0x0000 + // 009e 0080 0280 lri $AR0, #0x0280 + // 00a0 02bf 0523 call 0x0523 + 0523_CopyRAMtoDMEM(0x0382, 0x0000, 0x0280) + + // 00a2 0081 0384 lri $AR1, #0x0384 + // 00a4 009f 0300 lri $AC1.M, #0x0300 + // 00a6 0080 0020 lri $AR0, #0x0020 + // 00a8 02bf 0523 call 0x0523 + 0523_CopyRAMtoDMEM(0x0384, 0x0300, 0x0020) + + // 00aa 00de 0345 lr $AC0.M, @0x0345 + // 00ac 00fe 0342 sr @0x0342, $AC0.M + *0x0342 = *0x0345 + + // 00ae 02bf 0bec call 0x0bec + 0bec_Unk() + + // 00b0 029f 0043 jmp 0x0043 +} + +// Command 0xD +void 00b2_Unk_CommandD() { + 00b2 0080 0374 lri $AR0, #0x0374 + 00b4 0e01 lris $AC0.M, #0x01 + 00b5 00fe 0377 sr @0x0377, $AC0.M + 00b7 00fe 037c sr @0x037c, $AC0.M + 00b9 02bf 0067 call 0x0067 // CopyCommand + + // 00bb 00de 0345 lr $AC0.M, @0x0345 + // 00bd 00fe 0376 sr @0x0376, $AC0.M + *0x0376 = *0x0345; + + 00bf 029f 0043 jmp 0x0043 +} + +void 00c1_CopyPBToDMEM() +{ + // 00c1 0081 034c lri $AR1, #0x034c + // 00c3 009f 0400 lri $AC1.M, #0x0400 + // 00c5 0080 00c0 lri $AR0, #0x00c0 + // 00c7 02bf 0523 call 0x0523 + // 00c9 02df ret + + 0523_CopyRAMtoDMEM(0x034c, 0x0400, 0x00c0); +} + + +void 00ca_CopyPBToRAM() +{ + // 00ca 0081 034c lri $AR1, #0x034c + // 00cc 009f 0400 lri $AC1.M, #0x0400 + // 00ce 0080 0080 lri $AR0, #0x0080 + // 00d0 0081 034c lri $AR1, #0x034c + AR1 = 0x034c + AC1.M = 0x0400 + AR0 = 0x0080 + + // 00d2 193e lrri $AC0.M, @$AR1 + // 00d3 193c lrri $AC0.L, @$AR1 + AC0.M = *0x034c + AC0.L = *0x034d + + // 00d4 0098 0000 lri $AX0.L, #0x0000 + // 00d6 7000 addaxl $ACC0, $AX0.L + // 00d7 02bf 0532 call 0x0532 + + 0532_DMEMtoRAM(0x0400, ACC0, 0x0080) + + // 00d9 02df ret +} + + +void 00da_CopyBuffer(_src($AR0), _dest($AR3), LenMinusOne(_AC1.M)) +{ + 00da 191e lrri $AC0.M, @$AR0 + 00db 191a lrri $AX0.H, @$AR0 + 00dc 005f loop $AC1.M + 00dd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 00de 1b7e srri @$AR3, $AC0.M + 00df 1b7a srri @$AR3, $AX0.H + // 00e0 02df ret +} + + +void 00e1_XorBuffer( .., _LenInDWORDs(_AC1.M)) { + 00e1 191e lrri $AC0.M, @$AR0 + 00e2 191a lrri $AX0.H, @$AR0 + // 00e3 007f 00e8 bloop $AC1.M, 0x00e8 + for (int i = 0; i < AC1.M; i++) { + 00e5 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 00e6 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 00e7 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 00e8 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + } + // 00e9 0000 nop + // 00ea 02df ret +} + + +// --- the disasm looks buggy... AR3 seems to be the destination but it isnt used at all... no idea +// Hm, SL actually is able to use AR3 implicitly. +void 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) +{ + // 00eb 8a00 m2 // All multiplication results are multiplied by 2. + // 00ec 157f lsr $ACC1, #-1 //_size/2 + 00ed 1c20 mrr $AR1, $AR0 + 00ee 1c03 mrr $AR0, $AR3 // 'sl stores to AR0 + + // SW pipelineing strikes again... + 00ef 193a lrri $AX0.H, @$AR1 + 00f0 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 + 00f1 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 + // 00f2 007f 00f7 bloop $AC1.M, 0x00f7 + for (int i = 0; i < _size/2; i++) { + AX0.H = *AR1; + PROD = * + // 00f4 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + // 00f5 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + // 00f6 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + // 00f7 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + ACC0 += AX1 + AX0.H = *AR1; + *(AR3++) = AC0.M; + ACC0 = PROD; + PROD = AX0.L * AX0.H; + ... + } + + // In simplified form: + AR1 = AR0; + AR0 = AR3; + for (int i = 0; i < _size; i++) { + *AR0 = ((*AR0 << 16) + *AR1 * Factor) >> 16); + } + + // 00f8 8b00 m0 // Restore multiplication results. + // 00f9 02df ret +} + +void 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) +{ + //00fa 8a00 m2 + 00fb 191a lrri $AX0.H, @$AR0 + 00fc 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 + 00fd 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 00fe 005f loop $AC1.M + 00ff 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M + + //0100 8b00 m0 + //0101 02df ret +} + + + // Clears the 0d00 and 0d60 buffers, plus a lot of other intermediate buffers. + // Also does some other things. +void 0102_PrepareFrameBuffers() + { + // 0102 8100 clr $ACC0 + // 0103 8900 clr $ACC1 + // 0104 0e50 lris $AC0.M, #0x50 + ACC0 = 0 + ACC1 = 0 + AC0.M = 0x50 + + // 0105 0080 0d00 lri $AR0, #0x0d00 + // 0107 005e loop $AC0.M + // 0108 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0d00++ = 0x00 + + // 0109 0080 0d60 lri $AR0, #0x0d60 + // 010b 005e loop $AC0.M + // 010c 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0d60++ = 0x00 + + // 10d 02bf 0e3f call 0x0e3f + + // This one adds and multiplies buffers together. Maybe surround or reverb stuff. + 0e3f_DolbyMixdown() + + // 010f 8100 clr $ACC0 + // 0110 8900 clr $ACC1 + // 0111 0e50 lris $AC0.M, #0x50 + ACC0 = 0 + ACC1 = 0 + AC0.M = 0x50 + + // 0112 0080 0ca0 lri $AR0, #0x0ca0 + // 0114 005e loop $AC0.M + // 0115 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0ca0++ = 0x00 + + // 0116 0080 0f40 lri $AR0, #0x0f40 + // 0118 005e loop $AC0.M + // 0119 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0f40++ = 0x00 + + // 011a 0080 0fa0 lri $AR0, #0x0fa0 + // 011c 005e loop $AC0.M + // 011d 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0fa0++ = 0x00 + + // 011e 0080 0a00 lri $AR0, #0x0a00 + // 0120 005e loop $AC0.M + // 0121 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x0a00++ = 0x00 + + // 0122 0080 09a0 lri $AR0, #0x09a0 + // 0124 005e loop $AC0.M + // 0125 1b1f srri @$AR0, $AC1.M + for (int i=0; i<0x50; i++) + *0x09a0++ = 0x00 + + // 0126 02df ret +} + + +void 0127_Unk() { + 0127 00c0 03a0 lr $AR0, @0x03a0 + 0129 191a lrri $AX0.H, @$AR0 + 012a 00df 03a1 lr $AC1.M, @0x03a1 + 012c 009b 00a0 lri $AX1.H, #0x00a0 + 012e 0081 0393 lri $AR1, #0x0393 + 0130 18bc lrrd $AC0.L, @$AR1 + 0131 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 0132 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0133 0080 0050 lri $AR0, #0x0050 + 0135 0508 addis $ACC1, #0x08 + 0136 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + // 0525_CopyRAMtoDMEM(... ,.. , 0x50) + + // 0138 00de 0390 lr $AC0.M, @0x0390 + // 013a 02a0 0001 andf $AC0.M, #0x0001 + // 013c 029d 0145 jlz 0x0145 + if (*0x0390 & 1) { + 013e 0080 0398 lri $AR0, #0x0398 + 0140 0e08 lris $AC0.M, #0x08 + 0141 00c1 03a1 lr $AR1, @0x03a1 + 0143 02bf 0b2e call 0x0b2e // 0b2e_Unk_Multiply + } + 0145 0f50 lris $AC1.M, #0x50 + 0146 00c0 03a1 lr $AR0, @0x03a1 + 0148 00da 0394 lr $AX0.H, @0x0394 + // 014a 8600 tstaxh $AX0.H + // 014b 0295 0152 jz 0x0152 + if (*0x0394 != 0) { + 014d 1c7a mrr $AR3, $AX0.H + 014e 00d8 0395 lr $AX0.L, @0x0395 + 0150 02bf 00eb call 0x00eb // 00eb_Unk_BufferMultAddToDest + } + 0152 0f50 lris $AC1.M, #0x50 + 0153 00c0 03a1 lr $AR0, @0x03a1 + 0155 00da 0396 lr $AX0.H, @0x0396 + 0157 8600 tstaxh $AX0.H + 0158 0295 015f jz 0x015f + 015a 1c7a mrr $AR3, $AX0.H + 015b 00d8 0397 lr $AX0.L, @0x0397 + 015d 02bf 00eb call 0x00eb // 00eb_Unk_BufferMultAddToDest + + // 015f 00de 0390 lr $AC0.M, @0x0390 + // 0161 02a0 0002 andf $AC0.M, #0x0002 + // 0163 02dd retlz + if (*0x390 & 2) + return; + + 0164 0080 0398 lri $AR0, #0x0398 + 0166 0e08 lris $AC0.M, #0x08 + 0167 00c1 03a1 lr $AR1, @0x03a1 + 0169 02bf 0b2e call 0x0b2e // 0b2e_Unk_Multiply + 016b 02df ret +} + + +// Looks similar to something else... +void 016c_Unk_SetupMemAt_0c00() +{ + 016c 8900 clr $ACC1 + + // 016d 009f 0dc0 lri $AC1.M, #0x0dc0 + // 016f 00ff 03a1 sr @0x03a1, $AC1.M + *0x03a1 = 0x0dc0; + // 0171 009f 03a8 lri $AC1.M, #0x03a8 + // 0173 00ff 03a2 sr @0x03a2, $AC1.M + *0x03a2 = 0x03a8; + // 0175 009f 03a4 lri $AC1.M, #0x03a4 + // 0177 00ff 03a0 sr @0x03a0, $AC1.M + *0x03a0 = 0x03a4; + + // Dangerous bloopi! It points to the SECOND HALF of a 2-word instruction so + // a naive check won't catch it! I think our current code does, though. + + // 0179 1104 019f bloopi #0x04, 0x019f + for (int i = 0; i < 4; i++) { + // 017b 00c0 03a2 lr $AR0, @0x03a2 + // 017d 0083 0390 lri $AR3, #0x0390 + // 017f 0f0e lris $AC1.M, #0x0e + // 0180 02bf 00da call 0x00da + 00da_CopyBuffer(@0x03a2, 0x0390, 0x0e) + + 0182 00da 0390 lr $AX0.H, @0x0390 + 0184 8600 tstaxh $AX0.H + 0185 0295 0191 jz 0x0191 + if (*0x0390) { + 0187 00df 03a1 lr $AC1.M, @0x03a1 + 0189 1c7f mrr $AR3, $AC1.M + 018a 0550 addis $ACC1, #0x50 + + // 018b 1c1f mrr $AR0, $AC1.M + // 018c 0f06 lris $AC1.M, #0x06 + // 018d 02bf 00da call 0x00da + 00da_CopyBuffer($AC1.M, $AR3, 0x06); + + // 018f 02bf 0127 call 0x0127 + 0127_Unk(); + } + // 0191 00de 03a2 lr $AC0.M, @0x03a2 + // 0193 0410 addis $ACC0, #0x10 + // 0194 00fe 03a2 sr @0x03a2, $AC0.M + (*0x03a2) += 0x10; + + // 0196 00de 03a1 lr $AC0.M, @0x03a1 + // 0198 0460 addis $ACC0, #0x60 + // 0199 00fe 03a1 sr @0x03a1, $AC0.M + (*0x03a1) += 0x60; + + // 019b 00de 03a0 lr $AC0.M, @0x03a0 + // 019d 7400 incm $AC0.M + // 019e 00fe 03a0 sr @0x03a0, $AC0.M + (*0x0ea0)++; + } + + // 01a0 0f50 lris $AC1.M, #0x50 + // 01a1 0080 0c00 lri $AR0, #0x0c00 + // 01a3 0083 0e80 lri $AR3, #0x0e80 + // 01a5 0098 7fff lri $AX0.L, #0x7fff + // 01a7 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src(0x0c00), _Dest(0x0e80), _size(0x50), _factor(0x7fff)) + + // 01a9 0f50 lris $AC1.M, #0x50 + // 01aa 0080 0c00 lri $AR0, #0x0c00 + // 01ac 0083 0ee0 lri $AR3, #0x0ee0 + // 01ae 0098 b820 lri $AX0.L, #0xb820 + // 01b0 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src(0x0c00), _Dest(0x0ee0), _size(0x50), _factor(0xb820)) + + // 01b2 0f28 lris $AC1.M, #0x28 + // 01b3 0080 0c78 lri $AR0, #0x0c78 + // 01b5 0083 0e80 lri $AR3, #0x0e80 + // 01b7 0098 b820 lri $AX0.L, #0xb820 + // 01b9 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src(0x0c78), _Dest(0x0e80), _size(0x28), _factor(0xb820)) + // 01bb 0f28 lris $AC1.M, #0x28 + // 01bc 0080 0c78 lri $AR0, #0x0c78 + // 01be 0083 0ee0 lri $AR3, #0x0ee0 + // 01c0 0098 7fff lri $AX0.L, #0x7fff + // 01c2 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src(0x0c78), _Dest(0x0e80), _size(0x28), _factor(0x7fff)) + + // Zero the temporary buffers 0x0c00 and 0x0c50 + 01c4 8100 clr $ACC0 + 01c5 8900 clr $ACC1 + 01c6 0e50 lris $AC0.M, #0x50 + 01c7 0080 0c00 lri $AR0, #0x0c00 + 01c9 005e loop $AC0.M + 01ca 1b1f srri @$AR0, $AC1.M + 01cb 0080 0c50 lri $AR0, #0x0c50 + 01cd 005e loop $AC0.M + 01ce 1b1f srri @$AR0, $AC1.M + + // 01cf 02df ret +} + +void 01d0_Unk() { + // 01d0 00c0 03a0 lr $AR0, @0x03a0 + // 01d2 181a lrr $AX0.H, @$AR0 + AX0.H = *0x03a0; + + // 01d3 8100 clr $ACC0 + // 01d4 181e lrr $AC0.M, @$AR0 + AC0.M = *0x03a0; + + // 01d5 00db 0391 lr $AX1.H, @0x0391 + AX1.H = *0x0391; + + // 01d7 7400 incm $AC0.M + AC0.M++; + + // 01d8 d100 cmpar $ACC1, $AX0.H + // 01d9 0270 ifge + if (ACC1 - AX0.H >= 0) { + 01da 8100 clr $ACC0 + } + + 01db 1b1e srri @$AR0, $AC0.M + 01dc 00df 03a1 lr $AC1.M, @0x03a1 + 01de 009b 00a0 lri $AX1.H, #0x00a0 + 01e0 0081 0393 lri $AR1, #0x0393 + 01e2 18bc lrrd $AC0.L, @$AR1 + 01e3 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 01e4 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + + // 01e5 0080 0050 lri $AR0, #0x0050 + // 01e7 02bf 0532 call 0x0532 + 0532_DMEMtoRAM(_DMEM(AC1.M), _pMemAddr(ACC0), 0x50) + + 01e9 02df ret +} + +void 01ea_Unk() { + 01ea 8900 clr $ACC1 + // 01eb 0f28 lris $AC1.M, #0x28 // half of 0x50 + // 01ec 0080 0c50 lri $AR0, #0x0c50 + // 01ee 0083 0ea8 lri $AR3, #0x0ea8 + // 01f0 0098 b820 lri $AX0.L, #0xb820 + // 01f2 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + 01f4 8900 clr $ACC1 + // 01f5 0f28 lris $AC1.M, #0x28 + // 01f6 0080 0c50 lri $AR0, #0x0c50 + // 01f8 0083 0f08 lri $AR3, #0x0f08 + // 01fa 0098 7fff lri $AX0.L, #0x7fff + // 01fc 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + + // 01fe 009f 0dc0 lri $AC1.M, #0x0dc0 + // 0200 00ff 03a1 sr @0x03a1, $AC1.M + // 0202 009f 03a8 lri $AC1.M, #0x03a8 + // 0204 00ff 03a2 sr @0x03a2, $AC1.M + // 0206 009f 03a4 lri $AC1.M, #0x03a4 + // 0208 00ff 03a0 sr @0x03a0, $AC1.M + (*0x03a1) = 0x0dc0; + (*0x03a2) = 0x03a8; + (*0x03a0) = 0x03a4; + + // Dangerous bloopi! It points to the SECOND HALF of a 2-word instruction so + // a naive check won't catch it! I think our current code does, though. + + // 020a 1104 0228 bloopi #0x04, 0x0228 + for (int i = 0; i < 4; i++) { + // 020c 00c0 03a2 lr $AR0, @0x03a2 + // 020e 0083 0390 lri $AR3, #0x0390 + // 0210 0f0e lris $AC1.M, #0x0e + // 0211 02bf 00da call 0x00da + 00da_CopyBuffer(_src(*0x03a2), _dest(0x0390), _LenInDWORDs(0xE)) + + // 0213 00da 0390 lr $AX0.H, @0x0390 + // 0215 8600 tstaxh $AX0.H + // 0216 0295 021a jz 0x021a + if (*0x0390) { + // 0218 02bf 01d0 call 0x01d0 + + // Copy some buffer to RAM? + 01d0_Unk(); + } + + // 021a 00de 03a2 lr $AC0.M, @0x03a2 + // 021c 0410 addis $ACC0, #0x10 + // 021d 00fe 03a2 sr @0x03a2, $AC0.M + (*0x03a2) += 0x10; + + // 021f 00de 03a1 lr $AC0.M, @0x03a1 + // 0221 0460 addis $ACC0, #0x60 + // 0222 00fe 03a1 sr @0x03a1, $AC0.M + (*0x03a1) += 0x60; + + // 0224 00de 03a0 lr $AC0.M, @0x03a0 + // 0226 7400 incm $AC0.M + // 0227 00fe 03a0 sr @0x03a0, $AC0.M + (*0x03a0)++; + } + 0229 02df ret +} + + +void 022a_Copy_XXX_From_RAM_To_0x03a8() +{ + // 022a 0081 0386 lri $AR1, #0x0386 + // 022c 009f 03a8 lri $AC1.M, #0x03a8 + // 022e 0080 0040 lri $AR0, #0x0040 + // 0230 02bf 0523 call 0x0523 + 0523_CopyRAMtoDMEM(0x0386, 0x03a8, 0x0040); + + // 0232 02df ret +} + + +void 0233_Increase_32BitAddress_InMem(_MemAddr(AR0), _Bytes(AX0.L)) +{ + // 0233 191e lrri $AC0.M, @$AR0 + // 0234 189c lrrd $AC0.L, @$AR0 + // 0235 4800 addax $ACC0, $AX0 + // 0236 1b1e srri @$AR0, $AC0.M + // 0237 1b1c srri @$AR0, $AC0.L + + *((u32*)AR0) += AX0 + + // 0238 02df ret +} + + +void 0239_WaitUntilLastFrameGotSynced() +{ + // 0239 8100 clr $ACC0 + // 023a 8900 clr $ACC1 + // 023b 00df 0354 lr $AC1.M, @0x0354 + // 023d 00de 034e lr $AC0.M, @0x034e + // 023f 8200 cmp + // 0240 0293 0239 jle 0x0239 // loop + do { + + } while (*0x0354 > *0x034e); // TODO: CHECK + + // 0242 02df ret +} + +///////////////////////// +// +// +// 0x0341: Number of Frames to render ... + +// 0x034c + 0x034d: RAM address of the current PB block + +// 0x034e: Last Sync message for rendered frame +// 0x0354: PB loop counter + +// 0x0355: Current Frame + +// 0x0380: ??? +// 0x0381: ??? + +// 0x0388: RAM Address of Output Buffer1 +// 0x038a: RAM Address of Output Buffer2 +// +// 0x038f: Output Buffer Address (0x0520 most of the time) +// +// 0x03f8: *0x0433 +// 0x0520: Some kind of sample buffer + +// 0x0d00: Left mix buffer +// 0x0d60: Right mix buffer + +void 0243_COMMAND_02() // sync frame +{ + // 0243 0080 0388 lri $AR0, #0x0388 + // 0245 0081 0067 lri $AR1, #0x0067 + // 0247 0e02 lris $AC0.M, #0x02 + // 0248 173f callr $AR1 + 0067_CopyCommand(0x0388, 0x02); + + // 0249 00de 0344 lr $AC0.M, @0x0344 + // 024b 00fe 0341 sr @0x0341, $AC0.M + *0x0341 = *0x0344; + + // 024d 00de 0345 lr $AC0.M, @0x0345 + // 024f 00fe 038e sr @0x038e, $AC0.M + *0x038e = *0x0345; + + // 0251 8100 clr $ACC0 + // 0252 00fe 0355 sr @0x0355, $AC0.M + *0x0355 = 0x00; + + // 0254 02bf 022a call 0x022a + 022a_Copy_XXX_From_RAM_To_0x03a8(); // perhaps an PB ?? + + // 0256 02bf 05a4 call 0x05a4 + 05A4_ResetAccelerator(); + + + // 0258 00de 0341 lr $AC0.M, @0x0341 + // 025a 007e 0418 bloop $AC0.M, 0x0418 + + // Frame size is 0xa0 * *0x0341 + for (int j=0; j< *0x0341; j++) // 0x0341 = high part of the (command & 0xFF) ... perhaps number of frames to render?? + { + // 025c 02bf 0102 call 0x0102 + 0102_PrepareFrameBuffers(); + + // 025e 02bf 016c call 0x016c + 016c_Unk_SetupMemAt_0c00(); + + // 0260 02bf 095f call 0x095f + 095f_Unk_SetupMemAt0_0180(); + + // 0262 00de 0355 lr $AC0.M, @0x0355 + // 0264 7400 incm $AC0.M + // 0265 00fe 0355 sr @0x0355, $AC0.M + (*0x0355)++; + + // 0267 8100 clr $ACC0 + // 0268 00fe 0354 sr @0x0354, $AC0.M + *0x0354 = 0; // PB counter + + // 026a 00de 0342 lr $AC0.M, @0x0342 + // 026c 007e 03c0 bloop $AC0.M, 0x03c0 + for (int i=0; i<*0x0342; i++) // 0x0342 - low part of the DSetupTable Command. Number of PBs? + { + // 026e 02bf 0239 call 0x0239 + 0239_WaitUntilLastFrameGotSynced(); + + // 0270 8100 clr $ACC0 + // 0271 8900 clr $ACC1 + ACC0 = 0; + ACC1 = 0; + + // this block is for masking out PBs... the lower part of the sync messages are updating this mask + // but i am not 100 percent sure how it works + { + // 0272 00de 0354 lr $AC0.M, @0x0354 + // 0274 147c lsr $ACC0, #-4 + // 0275 0200 04fc addi $AC0.M, #0x04fc + // 0277 1c1e mrr $AR0, $AC0.M + AC0.M = *0x0354 >> 4; + AR0 = AC0.M + 0x04fc; + + 0278 181f lrr $AC1.M, @$AR0 + 0279 00de 0354 lr $AC0.M, @0x0354 + 027b 0240 000f andi $AC0.M, #0x000f + // 027d 3d80 lsrnr + ACC1 <<= ACC0 + + 027e 03c0 8000 andcf $AC1.M, #0x8000 + // 0280 029c 03bc jlnz 0x03bc + GOTO NEXT_BLOCK: + } + + // 0282 00d8 0354 lr $AX0.L, @0x0354 + // 0284 009a 0180 lri $AX0.H, #0x0180 + // 0286 8100 clr $ACC0 + // 0287 00de 0380 lr $AC0.M, @0x0380 + // 0289 00dc 0381 lr $AC0.L, @0x0381 + // 028b 9000 mul $AX0.L, $AX0.H + // 028c 9400 mulac $AX0.L, $AX0.H, $ACC0 + // 028d 00fe 034c sr @0x034c, $AC0.M + // 028f 00fc 034d sr @0x034d, $AC0.L + AX0.L = *0x0354 // number of rendered frames + AX0.H = 0x0180 // PB Size with dummy buffer + ACC0 = (*0x0380 << 16) | *0x0381 + ACC0 += AX0.L * AX0.H + + // Compute the RAM address of the current PB. + *0x034C = AC0.M + *0x034D = AC0.L + + // Copy the current PB to 0x400, so we can access it from DSP code. + // 0291 02bf 00c1 call 0x00c1 + 00c1_CopyPBToDMEM() + + // 0293 00da 0400 lr $AX0.H, @0x0400 + // 0295 8600 tstaxh $AX0.H + // 0296 0295 03bc jz 0x03bc + if (*0x0400 == 0x00) + GOTO NEXT_BLOCK: + + // 0298 00da 0401 lr $AX0.H, @0x0401 + // 029a 8600 tstaxh $AX0.H + // 029b 0294 03bc jnz 0x03bc + if (*0x0401 != 0x00) + GOTO NEXT_BLOCK: + + // 029d 00da 0433 lr $AX0.H, @0x0433 + // 029f 00fa 03f8 sr @0x03f8, $AX0.H + *0x03f8 = *0x0433 + + // 02a1 00da 0406 lr $AX0.H, @0x0406 + // 02a3 8600 tstaxh $AX0.H + // 02a4 0294 0dff jnz 0x0dff + if (*0x0406 != 0x00) + { + // The Code at 0x0dff sets the value from *0x0433 to 0x50 shorts at 0x0520. + // Then it JMPs to ContinueWithBlock. + 0dff_Zero520_50(). + } + else + { + // 02a6 8100 clr $ACC0 + // 02a7 00de 0480 lr $AC0.M, @0x0480 + // 02a9 0609 cmpis $ACC0, #0x09 + // 02aa 0295 02bd jz 0x02bd + // 02ac 0605 cmpis $ACC0, #0x05 + // 02ad 0295 02bd jz 0x02bd + // 02af 0608 cmpis $ACC0, #0x08 + // 02b0 0295 098f jz 0x098f + // 02b2 0610 cmpis $ACC0, #0x10 + // 02b3 0295 0a14 jz 0x0a14 + // 02b5 0620 cmpis $ACC0, #0x20 + // 02b6 0295 0a9a jz 0x0a9a + // 02b8 0621 cmpis $ACC0, #0x21 + // 02b9 0295 0aa2 jz 0x0aa2 + // 02bb 029f 087c jmp 0x087c + + switch(*0x0480) + { + case 0x05: + case 0x09: GOTO 02BD: + case 0x08: GOTO 098f: + case 0x10: GOTO 0a14: + case 0x20: GOTO 0a9a: + case 0x21: GOTO 0aa2: + default: GOTO 087C: + } + + // This is the common decoding prep for 0x05 and 0x09. + + // 02bd 00d8 0402 lr $AX0.L, @0x0402 // delta? + // 02bf 8100 clr $ACC0 + // 02c0 8900 clr $ACC1 + // 02c1 00dc 0430 lr $AC0.L, @0x0430 // current fraction? + // 02c3 8d00 set15 // unsigned multiplication + // 02c4 0950 lris $AX1.L, #0x50 + // 02c5 a000 mulx $AX0.L, $AX1.L + // 02c6 a400 mulxac $AX0.L, $AX1.L, $ACC0 + // 02c7 1404 lsl $ACC0, #4 + // 02c8 8c00 clr15 + + // 0x0402 is delta ("Ratio"). + // Is this a computation of the starting point for decoding? + // If so 0x430 is the current sample position fraction and + AX0.L = *0x0402 + ACC0 = *0x430 + (AX0.L * 0x50) + ACC0 >>= 4 + + // 02c9 1ffe mrr $AC1.M, $AC0.M + // 02ca 0083 0580 lri $AR3, #0x0580 + // 02cc 02bf 073d call 0x073d + + // AC1.M here is ACC0.M! Effectively a shift right 16. The above fraction stuff seems to make sense. + 073d_DECODE_0x05_0x09(0x0580, AC1.M, 0x50) + + // NOP jump here. + // 02ce 029f 02d0 jmp 0x02d0 + + Resample_From0580To0520: + // 02d0 0080 0580 lri $AR0, #0x0580 + // 02d2 0081 0520 lri $AR1, #0x0520 + // 02d4 0099 0000 lri $AX1.L, #0x0000 + // 02d6 02bf 0d7f call 0x0d7f + 0d7f_ResampleAudioData(0x0580, 0x0520, 0x0000); + } + + // A block of audio is now present at 0x520. + + ContinueWithBlock: + // Apply various per-voice effects. + + // First up, a trivial in-place filter, if $0x04a8 is set. + + // 02d8 00da 04a8 lr $AX0.H, @0x04a8 + // 02da 8600 tstaxh $AX0.H + // 02db 0295 02e1 jz 0x02e1 + // 02dd 0080 0520 lri $AR0, #0x0520 + // 02df 02bf 0c84 call 0x0c84 + if (0x04a8 != 0) + void 0c84_FilterBufferInPlace(_sampleAddr($AR0), multiplier($AX0.H)) + + // 02e1 009e 0520 lri $AC0.M, #0x0520 + // 02e3 00fe 038f sr @0x038f, $AC0.M + *0x038f = 0x0520 + + // 02e5 8900 clr $ACC1 + // 02e6 00df 0484 lr $AC1.M, @0x0484 + // 02e8 0340 001f andi $AC1.M, #0x001f + // 02ea b900 tst $ACC1 + // 02eb 0295 0311 jz 0x0311 + if ((*0x0484 & 0x1f) != 0x00) + { + // 02ed 00de 038f lr $AC0.M, @0x038f + // 02ef 5c00 sub $ACC0, $ACC1 + // 02f0 00fe 038f sr @0x038f, $AC0.M + (*0x038f) -= AC1.M; + + // 02f2 1c7e mrr $AR3, $AC0.M + // 02f3 0080 0440 lri $AR0, #0x0440 + // 02f5 05fe addis $ACC1, #0xfe + // 02f6 02bf 00da call 0x00da + 00da_CopyBuffer(0x0440, (*0x038f), (*0x0484) + 0xfe) + + // 02f8 0080 0490 lri $AR0, #0x0490 + // 02fa 00c1 038f lr $AR1, @0x038f + // 02fc 8900 clr $ACC1 + // 02fd 00df 0484 lr $AC1.M, @0x0484 + // 02ff 0340 001f andi $AC1.M, #0x001f + // 0301 02bf 0b4d call 0x0b4d + 0b4d_IIR_Filter(In(0x0490), Out(*0x038f), FilterLength(*0x0484 & 0x1f)) + + 0303 00de 038f lr $AC0.M, @0x038f + 0305 0450 addis $ACC0, #0x50 + 0306 1c1e mrr $AR0, $AC0.M + // 0307 0083 0440 lri $AR3, #0x0440 + 0309 8900 clr $ACC1 + 030a 00df 0484 lr $AC1.M, @0x0484 + 030c 0340 001f andi $AC1.M, #0x001f + 030e 05fe addis $ACC1, #0xfe + // 030f 02bf 00da call 0x00da + 00da_CopyBuffer(, 0x0440) + } + + // 0311 00de 0484 lr $AC0.M, @0x0484 + // 0313 0240 0020 andi $AC0.M, #0x0020 + // 0315 0295 0333 jz 0x0333 + if ((*0x0484 & 0x0020) != 0) + { + 0317 0080 04a4 lri $AR0, #0x04a4 + 0319 00c1 038f lr $AR1, @0x038f + 031b 0082 0454 lri $AR2, #0x0454 + 031d 0083 04a7 lri $AR3, #0x04a7 + + // 031f 18fa lrrd $AX0.H, @$AR3 + // 0320 8600 tstaxh $AX0.H + // 0321 0294 0331 jnz 0x0331 + if (!*0x04a7) { + // 0323 18fa lrrd $AX0.H, @$AR3 + // 0324 8600 tstaxh $AX0.H + // 0325 0294 0331 jnz 0x0331 + if (!*0x04a6) { + // 0327 18fa lrrd $AX0.H, @$AR3 + // 0328 8600 tstaxh $AX0.H + // 0329 0294 0331 jnz 0x0331 + if (!*0x04a5) { + // 032b 8100 clr $ACC0 + // 032c 18fe lrrd $AC0.M, @$AR3 + // 032d 0280 7fff cmpi $AC0.M, #0x7fff + // 032f 0295 0333 jz 0x0333 + if (*0x04a4 != 0x7FFF) { + // 0331 02bf 0b68 call 0x0b68 + 0b68_4TapFIR(InBuffer($AR2), FilterBuffer($AR0), OutBuffer($AR1)); + } + } + } + } + } + + // Check volume mode, apply volume as appropriate + + // 0333 8100 clr $ACC0 + // 0334 00de 042c lr $AC0.M, @0x042c + // 0336 b100 tst $ACC0 + // 0337 0295 033d jz 0x033d + + if (*0x042c != 0) // Volume mode != 0 + { + // 0339 02bf 0cd3 call 0x0cd3 + // 033b 029f 03b2 jmp 0x03b2 + 0cd3_VolumeMixer1() // The complex one, probably with surround and stuff + } + else + { + // Volume mode == 0 - simple(r) volumes + // 033d 8100 clr $ACC0 + // 033e 1c9e mrr $IX0, $AC0.M + // 033f 1cde mrr $IX2, $AC0.M + // 0340 7400 incm $AC0.M + // 0341 1cfe mrr $IX3, $AC0.M + // 0342 8100 clr $ACC0 + $IX0 = 0; + $IX2 = 0; + $IX3 = 1; + + // 0343 00de 0407 lr $AC0.M, @0x0407 + // 0345 b100 tst $ACC0 + // 0346 0295 0355 jz 0x0355 + if (*0x0407 != 0) // Unknown, in zelda always 0x10, apparently. + { + // Seems like this all boils down to a backwards copy of + // 0x0470-0x0477 to *(*(0x038f)); + // Is that where we save samples in the PB, so that filters + // have something to read from at the start of each block? + + // 0348 00c3 038f lr $AR3, @0x038f + // 034a 0007 dar $AR3 + $AR3 = *(0x038f) - 1; + // 034b 0080 0477 lri $AR0, #0x0477 + // 034d 0084 ffff lri $IX0, #0xffff + // 034f 0087 ffff lri $IX3, #0xffff + $AR0 = 0x477; + $IX0 = -1; + $IX3 = -1; + // 0351 199a lrrn $AX0.H, @$AR0 + AX0.H = *$AR0; + AR0 += IX0; + + // 0352 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + $ACC1 = $AX0.H; + $AX0.H = *$AR0; + $AR0 += IX0; + // 0353 005e loop $AC0.M + for (int i = 0; i < AC0.M; i++) { + 0354 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + } + } + + // 0355 00da 0485 lr $AX0.H, @0x0485 + // 0357 8600 tstaxh $AX0.H + // 0358 0295 036b jz 0x036b + if (*0x0485 != 0) + { + 035a 8900 clr $ACC1 + 035b 0086 0005 lri $IX2, #0x0005 // 5 - 1 = 4, see loop + 035d 0082 040a lri $AR2, #0x040a + // 035f 1106 0363 bloopi #0x06, 0x0363 + + // Store half of every 4th value from 0x040a onwards in the position before. (!!!!) + // This really doesn't make a lot of sense. + // At the same time, keep their sum in ACC1. + for (int i = 0; i < 0x6; i++) { + // 0361 18de lrrd $AC0.M, @$AR2 + // 0362 147f lsr $ACC0, #-1 + // 0363 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M + $AC0.M = *$AR2 >> 1; + $AR2--; + $ACC1 += $ACC0; + *$AR2 = $ACC0; + $AR2 += 5; + } + // 0364 b900 tst $ACC1 + // 0365 0294 036b jnz 0x036b + + // Volume has dropped to 0 on all channels, stop sound? + if (sum == 0) { + // 0367 009a 0001 lri $AX0.H, #0x0001 + // 0369 00fa 0401 sr @0x0401, $AX0.H // Write 1 to KeyOff. + } + } + + // 036b 8f00 set40 + // 036c 0086 0002 lri $IX2, #0x0002 + // 036e 0082 0408 lri $AR2, #0x0408 + $IX2 = 0x0002; + $AR2 = 0x0408; + + // Volume data starts at 0x0408, it's like this: + // 1 word controls sbset #0x00 apparently + // 2 volume values + // 1 other word. + + // 0370 1106 039b bloopi #0x06, 0x039b + for (int i = 0; i < 6; i++) + { + // 0372 8100 clr $ACC0 + // 0373 195e lrri $AC0.M, @$AR2 + // 0374 1200 sbclr #0x00 // W T F??? + // 0375 b100 tst $ACC0 + // 0376 0275 ifz + // 0377 1300 sbset #0x00 + // sbset #0x00 is logic zero ... we use it to store a bit here. see 0394 + if (*$AR2 == 0) { + sbset #0x00 + } else { + sbclr #0x00 + } + + 0378 1c7e mrr $AR3, $AC0.M + + 0379 195e lrri $AC0.M, @$AR2 // Load the two volume values + 037a 195f lrri $AC1.M, @$AR2 + + // 037b 5c00 sub $ACC0, $ACC1 // Subtract them - find volume delta? + // 037c 14fb asr $ACC0, #-5 + // 037d 1f5e mrr $AX0.H, $AC0.M + // 037e 1f1c mrr $AX0.L, $AC0.L + $AX0 = (vol1 - vol2) >> 5; // 32 steps .. + + // Read the value after the volumes. + + // 037f 185e lrr $AC0.M, @$AR2 + // 0380 0240 00ff andi $AC0.M, #0x00ff + // 0382 1f7e mrr $AX1.H, $AC0.M + $AX1.H = *$AR2 & 0xFF; + + // 0383 185e lrr $AC0.M, @$AR2 + // 0384 1478 lsr $ACC0, #-8 + // 0385 009c 0000 lri $AC0.L, #0x0000 + $AC0.M = *$AR2 >> 8; + + // ACC1 is here the second volume. Compare to delta. + // Adjust *$AR2 for some reason accordingly... + + // 0387 d100 cmpar $ACC1, $AX0.H + // 0388 0295 0390 jz 0x0390 + // 038a 185e lrr $AC0.M, @$AR2 + // 038b 0272 ifg + // 038c 7400 incm $AC0.M + // 038d 0271 ifl + // 038e 7800 decm $AC0.M + // 038f 1a5e srr @$AR2, $AC0.M + if ($ACC1 < $AX0.H) { + (*$AR2)--; + } else if ($ACC1 > $AX0.H) { + (*$AR2)++ + } + + // 0390 0006 dar $AR2 + $AR2--; + + // $AR2 again points at the second volume. + + 0391 00de 038f lr $AC0.M, @0x038f + + // Per channel mini-delay? + 0393 5600 subr $ACC0, $AX1.H // see 0382 + + // Use that stored logic zero bit, to skip mixing if the first word is (or isn't? not sure) 0. + // 0394 029d 0399 jlz 0x0399 + if (!logic zero) { + // 0396 1c1e mrr $AR0, $AC0.M + // 0397 02bf 0ca9 call 0x0ca9 + 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), VolumeDelta($AX0), MultiplierData($AR0), Buffer($AR3)) + } + // 0399 0000 nop + // 039a 1b5f srri @$AR2, $AC1.M + // Update the second volume. + *($AR2++) = $AC1.M; + // 039b 000a iar $AR2 + $AR2++; // Next block of four values. + } + + // 039c 8e00 set16 + + // 039d 8100 clr $ACC0 + // 039e 00de 0407 lr $AC0.M, @0x0407 + // 03a0 b100 tst $ACC0 + // 03a1 0295 03b2 jz 0x03b2 + if (*0x0407 != 0) + { + // Stash away the last bunch of samples into 0x0477 and backwards, + // so that filter kernels and resampler have some previous data to + // read from the next time. + 03a3 00c3 038f lr $AR3, @0x038f + 03a5 0087 004f lri $IX3, #0x004f + 03a7 001f addarn $AR3, $IX3 + 03a8 0080 0477 lri $AR0, #0x0477 + 03aa 0084 ffff lri $IX0, #0xffff + 03ac 0087 ffff lri $IX3, #0xffff + 03ae 19fa lrrn $AX0.H, @$AR3 + 03af 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 03b0 005e loop $AC0.M + 03b1 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + } + } + + // 03b2 00da 0406 lr $AX0.H, @0x0406 + // 03b4 8600 tstaxh $AX0.H + // 03b5 0294 03ba jnz 0x03ba + if (*0x0406 == 0) + { + // 03b7 8100 clr $ACC0 + // 03b8 00fe 0404 sr @0x0404, $AC0.M + *0x0404 = 0x0000 + } + + // 03ba 02bf 00ca call 0x00ca + 00ca_CopyPBToRAM() + + NEXT_BLOCK: + 03bc 00de 0354 lr $AC0.M, @0x0354 + 03be 7400 incm $AC0.M + 03bf 00fe 0354 sr @0x0354, $AC0.M + } + + // Done mixing all voices, sync up with host before the final mixdown. + + // 03c1 0e00 lris $AC0.M, #0x00 + // 03c2 00fe 034e sr @0x034e, $AC0.M + *0x034e = 0x00 + + // 03c4 0e04 lris $AC0.M, #0x04 + // 03c5 02bf 066a call 0x066a + SendMB_DCD1(0x0004) + + // 03c7 00de 0355 lr $AC0.M, @0x0355 + // 03c9 0260 ff00 ori $AC0.M, #0xff00 + // 03cb 02bf 0674 call 0x0674 + SendMB_F355(*0x0355 | 0xFF00) // *0x0355 - current frame + + + // Buffer 0D00 and 0D60 are the final L & R mixing buffers. + + // This is where global effects are applied, and final mixdown is done. + + // 03cd 02bf 0c0a call 0x0c0a + 0c0a_Unk() // Copy 0a00 to 0a60? + + // 03cf 02bf 0c1c call 0x0c1c + 0c1c_ComputeReverbFrom0a60To0a00() // Not sure if this really is reverb but could be. + + // 03d1 02bf 0c71 call 0x0c71 + 0c71_AddBufferA00ToD60AndD00(); // add A00 on top of 0x0D00 and 0x0D60 + + // 03d3 00de 0341 lr $AC0.M, @0x0341 + // 03d5 7800 decm $AC0.M + // 03d6 00fe 0341 sr @0x0341, $AC0.M + + (*0x0341)--; + + // The audio at 09a0 is added to both channels, + // then the channel buffers are copied to RAM. + // For unknown reasons, the audio at 0x0fa0 is ONLY added to the right channel. + + // 03d8 0080 09a0 lri $AR0, #0x09a0 + // 03da 0083 0d00 lri $AR3, #0x0d00 + // 03dc 0f50 lris $AC1.M, #0x50 + // 03dd 0098 5a82 lri $AX0.L, #0x5a82 + // 03df 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(0x09a0, 0x0d00, 0x50, 0x5a82) + + // 03e1 0080 09a0 lri $AR0, #0x09a0 + // 03e3 0083 0d60 lri $AR3, #0x0d60 + // 03e5 0f50 lris $AC1.M, #0x50 + // 03e6 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(0x09a0, 0x0d60, 0x50, 0x5a82) + + // 03e8 0083 0d00 lri $AR3, #0x0d00 + // 03ea 02bf 0cc1 call 0x0cc1 + 0cc1_StrangeORRFilter(0x0d00) + + // 03ec 0081 0388 lri $AR1, #0x0388 + // 03ee 009f 0d00 lri $AC1.M, #0x0d00 + // 03f0 0080 0050 lri $AR0, #0x0050 + // 03f2 02bf 0530 call 0x0530 + 0530_DMEMtoRAM_Ind(0x0d00, 0x0388, 0x050) + + // 03f4 0080 0fa0 lri $AR0, #0x0fa0 + // 03f6 0083 0d60 lri $AR3, #0x0d60 + // 03f8 0f50 lris $AC1.M, #0x50 + // 03f9 0098 8000 lri $AX0.L, #0x8000 + // 03fb 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(0x0fa0, 0x0d60, 0x50, 0x8000) + + // 03fd 0083 0d60 lri $AR3, #0x0d60 + // 03ff 02bf 0cc1 call 0x0cc1 + 0cc1_StrangeORRFilter(0x0d60) + + // 0401 0081 038a lri $AR1, #0x038a + // 0403 009f 0d60 lri $AC1.M, #0x0d60 + // 0405 0080 0050 lri $AR0, #0x0050 + // 0407 02bf 0530 call 0x0530 + 0530_DMEMtoRAM_Ind(0x0d60, 0x038a, 0x050) + + + // Move both RAM output buffer pointers forward, 0xa0 bytes (0x50 samples). + + // 0409 009a 0000 lri $AX0.H, #0x0000 + // 040b 0098 00a0 lri $AX0.L, #0x00a0 + // 040d 0080 0388 lri $AR0, #0x0388 + // 040f 02bf 0233 call 0x0233 + 0233_Increase_32BitAddress_InMem(0x0388, 0xa0) + // 0411 0080 038a lri $AR0, #0x038a + // 0413 02bf 0233 call 0x0233 + 0233_Increase_32BitAddress_InMem(0x038a, 0xa0) + + + // 0415 02bf 01ea call 0x01ea + 01ea_Unk(); + + 0417 0000 nop + 0418 0000 nop + } + + // 0419 0080 002d lri $AR0, #0x002d + // 041b 029f 0603 jmp 0x0603 + 0603_Unk(0x02d) +} + +// Command 07 - not seen used. +void 041d_Unk() { + 041d 0080 0346 lri $AR0, #0x0346 + // 041f 02bf 0067 call 0x0067 + 0067_CopyCommand(_destAddr(#0x0346), _loopCount($AC0.M)) + // 0421 02bf 0067 call 0x0067 + 0067_CopyCommand(_destAddr(#0x0346), _loopCount($AC0.M)) + + 0423 0081 0346 lri $AR1, #0x0346 + 0425 193e lrri $AC0.M, @$AR1 + 0426 193c lrri $AC0.L, @$AR1 + 0427 009f 0400 lri $AC1.M, #0x0400 + 0429 00c0 0345 lr $AR0, @0x0345 + 042b 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 042d 0081 0348 lri $AR1, #0x0348 + 042f 193e lrri $AC0.M, @$AR1 + 0430 193c lrri $AC0.L, @$AR1 + 0431 009f 0800 lri $AC1.M, #0x0800 + 0433 00c0 0345 lr $AR0, @0x0345 + 0435 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 0437 0081 0346 lri $AR1, #0x0346 + 0439 193e lrri $AC0.M, @$AR1 + 043a 193c lrri $AC0.L, @$AR1 + 043b 009f 0800 lri $AC1.M, #0x0800 + 043d 00c0 0345 lr $AR0, @0x0345 + 043f 02bf 0532 call 0x0532 + 0441 0081 0348 lri $AR1, #0x0348 + 0443 193e lrri $AC0.M, @$AR1 + 0444 193c lrri $AC0.L, @$AR1 + 0445 009f 0400 lri $AC1.M, #0x0400 + 0447 00c0 0345 lr $AR0, @0x0345 + 0449 02bf 0532 call 0x0532 + 044b 029f 0043 jmp 0x0043 +} + +void 044d_COMMAND_07() +{ + 044d 0080 0346 lri $AR0, #0x0346 + 044f 02bf 0067 call 0x0067 + 0451 02bf 0067 call 0x0067 + 0453 0081 0346 lri $AR1, #0x0346 + 0455 193e lrri $AC0.M, @$AR1 + 0456 193c lrri $AC0.L, @$AR1 + 0457 009f 0400 lri $AC1.M, #0x0400 + 0459 00c0 0345 lr $AR0, @0x0345 + 045b 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 045d 0081 0348 lri $AR1, #0x0348 + 045f 193e lrri $AC0.M, @$AR1 + 0460 193c lrri $AC0.L, @$AR1 + 0461 009f 0400 lri $AC1.M, #0x0400 + 0463 00c0 0345 lr $AR0, @0x0345 + 0465 02bf 0532 call 0x0532 + 0467 029f 0043 jmp 0x0043 +} + +void 0469_COMMAND_06_09() +{ + 0469 0080 0346 lri $AR0, #0x0346 + 046b 02bf 0067 call 0x0067 + 046d 02bf 0067 call 0x0067 + 046f 0081 0346 lri $AR1, #0x0346 + 0471 193e lrri $AC0.M, @$AR1 + 0472 193c lrri $AC0.L, @$AR1 + 0473 009f 0400 lri $AC1.M, #0x0400 + 0475 00c0 0345 lr $AR0, @0x0345 + // 0477 02bf 0555 call 0x0555 // ReadFromMysteryReg + 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AC0.M)) { + + 0479 0081 0348 lri $AR1, #0x0348 + 047b 193e lrri $AC0.M, @$AR1 + 047c 193c lrri $AC0.L, @$AR1 + 047d 009f 0400 lri $AC1.M, #0x0400 + 047f 00c0 0345 lr $AR0, @0x0345 + 0481 02bf 0532 call 0x0532 + 0483 029f 0043 jmp 0x0043 +} + +void 0485_COMMAND_08() +{ + 0485 0080 0346 lri $AR0, #0x0346 + 0487 02bf 0067 call 0x0067 + 0489 02bf 0067 call 0x0067 + 048b 0081 0346 lri $AR1, #0x0346 + 048d 193e lrri $AC0.M, @$AR1 + 048e 193c lrri $AC0.L, @$AR1 + 048f 009f 0400 lri $AC1.M, #0x0400 + 0491 00c0 0344 lr $AR0, @0x0344 + 0493 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 0495 0081 0348 lri $AR1, #0x0348 + 0497 193e lrri $AC0.M, @$AR1 + 0498 193c lrri $AC0.L, @$AR1 + 0499 009f 0800 lri $AC1.M, #0x0800 + 049b 00c0 0344 lr $AR0, @0x0344 + 049d 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 049f 0080 0400 lri $AR0, #0x0400 + 04a1 0083 0800 lri $AR3, #0x0800 + 04a3 0084 0000 lri $IX0, #0x0000 + 04a5 00da 0345 lr $AX0.H, @0x0345 + 04a7 00df 0344 lr $AC1.M, @0x0344 + 04a9 8f00 set40 + 04aa 197b lrri $AX1.H, @$AR3 + 04ab b800 mulx $AX0.H, $AX1.H + 04ac 197b lrri $AX1.H, @$AR3 + 04ad 007f 04b2 bloop $AC1.M, 0x04b2 + 04af 199e lrrn $AC0.M, @$AR0 + 04b0 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 04b1 80b2 nx'sl : $AC0.M, $AX1.H + 04b2 0000 nop + 04b3 8e00 set16 + 04b4 0081 0346 lri $AR1, #0x0346 + 04b6 193e lrri $AC0.M, @$AR1 + 04b7 193c lrri $AC0.L, @$AR1 + 04b8 009f 0400 lri $AC1.M, #0x0400 + 04ba 00c0 0344 lr $AR0, @0x0344 + 04bc 02bf 0532 call 0x0532 + 04be 029f 0043 jmp 0x0043 +} + + +// Zeroes 256 words @ 0x0b00, calls 0x0573 +void 04c0_UnknownInit() +{ + 04c0 0092 00ff lri $CR, #0x00ff + 04c2 8100 clr $ACC0 + 04c3 0080 0b00 lri $AR0, #0x0b00 + 04c5 10ff loopi #0xff + 04c6 1b1e srri @$AR0, $AC0.M + 04c7 1b1e srri @$AR0, $AC0.M + 04c8 8100 clr $ACC0 + 04c9 009f 0b00 lri $AC1.M, #0x0b00 + 04cb 0080 0100 lri $AR0, #0x0100 + 04cd 02bf 0573 call 0x0573 + + 04cf 02df ret +} + + +void 04d0_Unk() { + // 04d0 02bf 04e1 call 0x04e1 + 04e1_Read0x40WordsFromZeroTo0b00() + + // 04fb is incremented when you reset a voice + 04d2 00df 04fb lr $AC1.M, @0x04fb + 04d4 009e 0b00 lri $AC0.M, #0x0b00 + 04d6 4c00 add $ACC0, $ACC1 + 04d7 1c1e mrr $AR0, $AC0.M + + 04d8 181e lrr $AC0.M, @$AR0 + 04d9 7400 incm $AC0.M + 04da 1a1e srr @$AR0, $AC0.M + *(AR0)++ + + 04db 02bf 04ea call 0x04ea + 04dd 8100 clr $ACC0 + 04de 00fe 04fb sr @0x04fb, $AC0.M + 04e0 02df ret +} + +void 04e1_Read0x40WordsFromZeroTo0b00() { + 04e1 0092 00ff lri $CR, #0x00ff + 04e3 8100 clr $ACC0 + 04e4 009f 0b00 lri $AC1.M, #0x0b00 + 04e6 0080 0040 lri $AR0, #0x0040 + // 04e8 029f 0555 jmp 0x0555 + GOTO 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AR0)) { +} + +void 04ea_Call0573With0b00And0050() { + 04ea 8100 clr $ACC0 + 04eb 009f 0b00 lri $AC1.M, #0x0b00 + 04ed 0080 0050 lri $AR0, #0x0050 + 04ef 029f 0573 jmp 0x0573 + // I don't get it, the above doesn't match the parameters + 0573_Mystery_Write(InBuffer($AR1), _COUNT(AX0.H)); +} + + +void 04f1_Read0x40WordsFromZeroTo0b00() { + // 04f1 02bf 04e1 call 0x04e1 + 04e1_Read0x40WordsFromZeroTo0b00(); +} + +void 04f3_strange() { + 04f3 8900 clr $ACC1 + 04f4 0080 04fc lri $AR0, #0x04fc + 04f6 8100 clr $ACC0 + + // Count the masked voices, look at all four mask words + // 04f7 1104 0505 bloopi #0x04, 0x0505 + for (int j = 0; j < 4; j++) { + 04f9 0000 nop + 04fa 191e lrri $AC0.M, @$AR0 + 04fb 0000 nop + + 04fc 1110 0503 bloopi #0x10, 0x0503 + for (int i = 0; i < 0x10; i++) { + 04fe 02c0 0001 andcf $AC0.M, #0x0001 + 0500 027d iflz + 0501 7500 incm $AC1.M // count up + 0502 147f lsr $ACC0, #-1 + 0503 0000 nop + } + 0504 0000 nop + 0505 0000 nop + } + // AC1.M now contains the count of all voices masked/unmasked (not sure which) + + // Copy the voice masks to 0x0b48 ... + 0506 00de 04fc lr $AC0.M, @0x04fc + 0508 00fe 0b48 sr @0x0b48, $AC0.M + 050a 00de 04fd lr $AC0.M, @0x04fd + 050c 00fe 0b49 sr @0x0b49, $AC0.M + 050e 00de 04fe lr $AC0.M, @0x04fe + 0510 00fe 0b4a sr @0x0b4a, $AC0.M + 0512 00de 04ff lr $AC0.M, @0x04ff + 0514 00fe 0b4b sr @0x0b4b, $AC0.M + + 0516 009e 0b00 lri $AC0.M, #0x0b00 + 0518 4c00 add $ACC0, $ACC1 // The value is in AC1.M, this must be wrong disasm + 0519 1c1e mrr $AR0, $AC0.M + + // Increment the counter at [ #0b00 + masked voice count] + // why would you do this? making bucket histogram over the number of active voices? + 051a 181e lrr $AC0.M, @$AR0 + 051b 7400 incm $AC0.M + 051c 1a1e srr @$AR0, $AC0.M + + 051d 02bf 04ea call 0x04ea // 04ea_Call0573With0b00And0050() + 051f 02df ret +} + +void PointlessFunction_Unused() { + 0520 02bf 04ea call 0x04ea // 04ea_Call0573With0b00And0050() + 0522 02df ret +} + + +// the first parameter is a pointer to the real RAM addr +void 0523_CopyRAMtoDMEM(&_srcRAM($AR1), _destDMEM($AC1.M), _len($AR0)) +{ + // 0523 193e lrri $AC0.M, @$AR1 + // 0524 193c lrri $AC0.L, @$AR1 + AC0 = *AR1++ << 16 | *AR1 + +void 0525_CopyRAMtoDMEM(_srcRAM($AR1), _destDMEM($AC1.M), _len($AR0)) +{ + 0525 2fcd srs @DSPA, $AC1.M + 0526 0f00 lris $AC1.M, #0x00 + + // ugly jump to share code... i am not going to document it ^^ + 0527 2fc9 srs @DSCR, $AC1.M + 0528 2ece srs @DSMAH, $AC0.M + 0529 2ccf srs @DSMAL, $AC0.L + 052a 1fe0 mrr $AC1.M, $AR0 + 052b 1501 lsl $ACC1, #1 + 052c 2fcb srs @DSBL, $AC1.M + + // 052d 02bf 0536 call 0x0536 + 0536_WaitForDMATransfer() + + // 052f 02df ret +} + +void 0530_DMEMtoRAM_Ind(_DMEM(AC1.M), _pMemAddr(AR1), _len(AR0)) +{ + // 0530 193e lrri $AC0.M, @$AR1 + // 0531 193c lrri $AC0.L, @$AR1 + AC0 = *AR1++ << 16 | *AR1 + // continues.... + +void 0532_DMEMtoRAM(_DMEM(AC1.M), _pMemAddr(ACC0), _len(AR0)) +{ + 0532 2fcd srs @DSPA, $AC1.M + 0533 0f01 lris $AC1.M, #0x01 + 0534 029f 0527 jmp 0x0527 +} + +void 0536_WaitForDMATransfer() +{ + 0536 26c9 lrs $AC0.M, @DSCR + 0537 02a0 0004 andf $AC0.M, #0x0004 + 0539 029c 0536 jlnz 0x0536 + 053b 02df ret +} + +// Can't find any calls to this one. +void 053c_Unk_Unused() { + 053c 193e lrri $AC0.M, @$AR1 + 053d 193c lrri $AC0.L, @$AR1 + 053e 00ff ffcd sr @DSPA, $AC1.M + 0540 0f00 lris $AC1.M, #0x00 + 0541 00ff ffc9 sr @DSCR, $AC1.M + 0543 00fe ffce sr @DSMAH, $AC0.M + 0545 00fc ffcf sr @DSMAL, $AC0.L + 0547 1fe0 mrr $AC1.M, $AR0 + 0548 1501 lsl $ACC1, #1 + 0549 00ff ffcb sr @DSBL, $AC1.M + 054b 02df ret +} + +void 054c_WaitForDMATransfer2_Unused() { + 054c 00de ffc9 lr $AC0.M, @DSCR + 054e 02a0 0004 andf $AC0.M, #0x0004 + 0550 029c 054c jlnz 0x054c + 0552 02df ret +} + +void 0553_UnknownReadFromMysteryReg_Unused() { + 0553 193e lrri $AC0.M, @$AR1 + 0554 193c lrri $AC0.L, @$AR1 + // continues... + +void 0555_UnknownReadFromMysteryReg(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AC0.M)) { + // 0555 0240 7fff andi $AC0.M, #0x7fff + // 0557 02bf 0561 call 0x0561 + 0561_SetupAcceleratorForMysteryAccess(ACC0 & 0x7FFFFFFF, AR0, AC1.M); + // After that, length is now in AX0.H + + // 0559 007a 055f bloop $AX0.H, 0x055f + for (int i = 0; i < AX0.H; i++) { + // 055b 26d3 lrs $AC0.M, @Unk Zelda + // 055c 1b3e srri @$AR1, $AC0.M + *(AR1++) = ReadFromUnknownAcceleratorRegister(); + } + // 055d 0000 nop + // 055e 0000 nop + // 055f 0000 nop + // 0560 02df ret +} + +void 0561_SetupAcceleratorForMysteryAccess(ARAMAddress(ACC0), DestBuffer(AC1.M), Length(AR0)) { + 0561 1c3f mrr $AR1, $AC1.M + 0562 0f0a lris $AC1.M, #0x0a + 0563 2fd1 srs @SampleFormat, $AC1.M + 0564 1f5e mrr $AX0.H, $AC0.M + 0565 1f1c mrr $AX0.L, $AC0.L + // Store 0xFFFFFFFF value as end address - Zelda does not use the looping hardware + 0566 009e ffff lri $AC0.M, #0xffff + 0568 2ed6 srs @ACEAH, $AC0.M // end address + 0569 2ed7 srs @ACEAL, $AC0.M + 056a 1fda mrr $AC0.M, $AX0.H + 056b 1f98 mrr $AC0.L, $AX0.L + // Divide "current" address by 2. + 056c 147f lsr $ACC0, #-1 + 056d 2ed8 srs @ACCAH, $AC0.M // Current address + 056e 2cd9 srs @ACCAL, $AC0.L + 056f 1f40 mrr $AX0.H, $AR0 + 0570 02df ret +} + +// Writes to UnkZelda, nops +void 0571_Mystery_Write_FirstLoadTwoRegs_Unused() { + 0571 193e lrri $AC0.M, @$AR1 + 0572 193c lrri $AC0.L, @$AR1 + +void 0573_Mystery_Write(InBuffer($AR1), SourceBuffer(AC1.M), _COUNT(AX0.H)) { + 0573 0090 0001 lri $AC0.H, #0x0001 + // 0575 02bf 0561 call 0x0561 + 0561_SetupAcceleratorForMysteryAccess(ACC0, AR0, AC1.M); + 0577 007a 057e bloop $AX0.H, 0x057e + 0579 193e lrri $AC0.M, @$AR1 + 057a 2ed3 srs @Unk Zelda, $AC0.M + 057b 0000 nop // seems the above store takes some time, + 057c 0000 nop // whatever it does, so ... 4 nops does the trick I guess + 057d 0000 nop + 057e 0000 nop + 057f 02df ret +} + + +void 0580_COMMAND_04() +{ + // commando looks buggy... + // it copies data to the switch casement data address... sounds like BS + + 0580 0080 0346 lri $AR0, #0x0346 + 0582 02bf 0067 call 0x0067 + 0584 02bf 0067 call 0x0067 + + 0067_CopyCommand(0x0346, mssing AC0.M??) + + 0586 0081 0346 lri $AR1, #0x0346 + 0588 00df 0349 lr $AC1.M, @0x0349 + 058a 0340 ffff andi $AC1.M, #0xffff + 058c 00c0 0345 lr $AR0, @0x0345 + 058e 02bf 0523 call 0x0523 + 0590 029f 0043 jmp 0x0043 +} + +void 0592_COMMAND_05() +{ + 0592 0080 0346 lri $AR0, #0x0346 + 0594 02bf 0067 call 0x0067 + 0596 02bf 0067 call 0x0067 + + // 0598 0081 0346 lri $AR1, #0x0346 + // 059a 00df 0349 lr $AC1.M, @0x0349 + // 059c 0340 ffff andi $AC1.M, #0xffff + // 059e 00c0 0345 lr $AR0, @0x0345 + // 05a0 02bf 0530 call 0x0530 + 0530_DMEMtoRAM_Ind((*0x0349)&0xFFFF, 0x0346, *0x0345) + + // 05a2 029f 0043 jmp 0x0043 + // jumps back to send sync messages .... +} + + +void 05A4_ResetAccelerator() +{ + 05a4 0092 00ff lri $CR, #0x00ff + 05a6 009e ffff lri $AC0.M, #0xffff + 05a8 2ed4 srs @ACSAH, $AC0.M + 05a9 2ed5 srs @ACSAL, $AC0.M + 05aa 2ed6 srs @ACEAH, $AC0.M + 05ab 2ed7 srs @ACEAL, $AC0.M + 05ac 02df ret +} + + +void 05ad_SetupAccelerator(_acceleratorH(AC0.M), _accleratorL(AC0.L), _format(AC1.M)) +{ + // 05ad 00ff ffd1 sr @SampleFormat, $AC1.M + *SampleFormat = AC1.M + + // 05af 0340 0003 andi $AC1.M, #0x0003 + // 05b1 7900 decm $AC1.M + // 05b2 02ca lsrn // ACC0 >>= AC1.M + // 05b3 00fe ffd8 sr @ACCAH, $AC0.M + // 05b5 00fc ffd9 sr @ACCAL, $AC0.L + + *ACCAH/ACCAL = address >> ((sampleFormat & 3) - 1); + // ACCAH/ACCAL is current read address + // Hm, this seems to imply some direct relationship between the sample format number and + // the nibbles-per-sample value + + // 05b7 02df ret +} + +void 05b8_NewMail() { + # 05b8 1205 sbclr #0x05 + # 05b9 8e00 set16 + + /* + 05ba 00f0 03fd sr @0x03fd, $AC0.H + 05bc 00fc 03ff sr @0x03ff, $AC0.L + 05be f400 lsr16 $ACC0 + 05bf 00fc 03fe sr @0x03fe, $AC0.L + 05c1 00fa 03fa sr @0x03fa, $AX0.H + 05c3 8100 clr $ACC0 + + save AC0 register + */ + + *0x03fd = AC0.H + *0x03ff = AC0.L + ACC0 >>= 16 + *0x03fe = AC0.L + *0x03fa = AX0.H + + // 05c4 00de fffe lr $AC0.M, @CMBH + // 05c6 02c0 8000 andcf $AC0.M, #0x8000 + // 05c8 029c 06b9 jlnz 0x06b9 + if (@CMBH & 0x8000 > 0) + { + !MISSING! + } + + // 05ca 00da ffff lr $AX0.H, @CMBL + // 05cc 8600 tstaxh $AX0.H + // 05cd 0294 0692 jnz 0x0692 + if (*CMBL != 0) + { + !MISSING! + } + + + // 05cf 00de fffe lr $AC0.M, @CMBH + // 05d1 02c0 8000 andcf $AC0.M, #0x8000 + // 05d3 029c 05cf jlnz 0x05cf + while(@CMBH & 0x8000 > 0); + + + // 05d5 0240 000f andi $AC0.M, #0x000f + // 05d7 1f5e mrr $AX0.H, $AC0.M + // 05d8 7400 incm $AC0.M + // 05d9 0c00 lris $AC0.L, #0x00 + // 05da 1404 lsl $ACC0, #4 + // 05db 00fe 034e sr @0x034e, $AC0.M + AC0.M = *CMBH & 0x000F + AX0.H = AC0.M + *0x034e = (AC0.M++) << 4 + + + // 05dd 1fda mrr $AC0.M, $AX0.H + // 05de 1f40 mrr $AX0.H, $AR0 + // 05df 0200 04fc addi $AC0.M, #0x04fc + // 05e1 1c1e mrr $AR0, $AC0.M + + AX0.H = AR0 // save AR0 + + AC0.M = *CMBH & 0x000F + AC0.M += 0x04fc + AR0 = AC0.M + + // 05e2 00de ffff lr $AC0.M, @CMBL + // 05e4 1a1e srr @$AR0, $AC0.M + // 05e5 1c1a mrr $AR0, $AX0.H + AC0.M = *CMBL + *AR0 = AC0.M + AR0 = AX.H // restore AR0 + + +EndOfMailException: + + /* + 05e6 00de 03fe lr $AC0.M, @0x03fe + 05e8 00dc 03ff lr $AC0.L, @0x03ff + 05ea 00d0 03fd lr $AC0.H, @0x03fd + 05ec 00da 03fa lr $AX0.H, @0x03fa + restore AC0 register + */ + AC0.M = *0x03fe + AC0.L = *0x03ff + AC0.H = *0x03fd + AX0.H = *0x03fa + + # 05ee 1305 sbset #0x05 + + 05ef 02ff rti +} + +void 05f0_HaltUCode() +{ + 05f0 009a 0002 lri $AX0.H, #0x0002 + 05f2 00fa 03a3 sr @0x03a3, $AX0.H + 05f4 00e0 03f9 sr @0x03f9, $AR0 + /* + 05f6 02bf 067c call 0x067c + */ + 067c_Unk() + + 05f8 16fc dcd1 si @DMBH, #0xdcd1 + 05fa 16fd 0002 si @DMBL, #0x0002 + 05fc 16fb 0001 si @DIRQ, #0x0001 + 05fe 0021 halt +} + +// Sync Table +05ff 0617 cmpis $ACC0, #0x17 +0600 0618 cmpis $ACC0, #0x18 +0601 0658 cmpis $ACC0, #0x58 +0602 065b cmpis $ACC0, #0x5b + +void 0603_Unk(_returnAddr($AR0)) +{ + // 0603 00e0 03f9 sr @0x03f9, $AR0 + 0x03f9 = _returnAddr + + // 0605 009e 0005 lri $AC0.M, #0x0005 + // 0607 02bf 066a call 0x066a + SendMB_DCD1(0x0005) + + # 0609 8e00 set16 + // 060a 8100 clr $ACC0 + // 060b 8900 clr $ACC1 + ACC0 = 0 + ACC1 = 0 + + // 060c 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + // 060e 27ff lrs $AC1.M, @CMBL + // 060f 009e 05ff lri $AC0.M, #0x05ff + // 0611 4c00 add $ACC0, $ACC1 + AC0.M = 0x05ff + *CMBL + + // 0612 1c7e mrr $AR3, $AC0.M + // 0613 0313 ilrr $AC1.M, @$AR3 + // 0614 1c7f mrr $AR3, $AC1.M + AR3 = *AC0.M <- "BUT FROM Instrcution Memory (look at sync table about)" + + // 0615 176f jmpr $AR3 + switch(AR3 - 0x05FF) + { + case 0x00: HALT(); break; + case 0x00: HALT(); break; + case 0x01: 0658_SoftReset(); break; + case 0x02: 065b_ContinueWithUCode(); break; + } + +} + + +0616 0021 halt +0617 0021 halt + +void 0618_Unk() { + 0618 009a 0002 lri $AX0.H, #0x0002 + 061a 00fa 03a3 sr @0x03a3, $AX0.H + 061c 8100 clr $ACC0 + 061d 8900 clr $ACC1 + //061e 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + 0620 24ff lrs $AC0.L, @CMBL + + //0621 02bf 0664 call 0x0664 + 0664_WaitForCPUMailBox_AC1() + + 0623 25ff lrs $AC1.L, @CMBL + + //0624 02bf 0664 call 0x0664 + 0664_WaitForCPUMailBox_AC1() + + 0626 27ff lrs $AC1.M, @CMBL + 0627 2ece srs @DSMAH, $AC0.M + 0628 2ccf srs @DSMAL, $AC0.L + 0629 16c9 0001 si @DSCR, #0x0001 + 062b 2fcd srs @DSPA, $AC1.M + 062c 2dcb srs @DSBL, $AC1.L + 062d 8100 clr $ACC0 + 062e 8900 clr $ACC1 + + //062f 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + 0631 24ff lrs $AC0.L, @CMBL + 0632 1c9e mrr $IX0, $AC0.M + 0633 1cbc mrr $IX1, $AC0.L + //0634 02bf 0664 call 0x0664 + 0664_WaitForCPUMailBox_AC1() + + 0636 25ff lrs $AC1.L, @CMBL + + //0637 02bf 0664 call 0x0664 + 0664_WaitForCPUMailBox_AC1() + + 0639 27ff lrs $AC1.M, @CMBL + 063a 1cdf mrr $IX2, $AC1.M + 063b 1cfd mrr $IX3, $AC1.L + 063c 8100 clr $ACC0 + + //063d 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + 063f 26ff lrs $AC0.M, @CMBL + 0640 1c1e mrr $AR0, $AC0.M + 0641 8900 clr $ACC1 + //0642 02bf 0664 call 0x0664 + 0664_WaitForCPUMailBox_AC1() + + 0644 20ff lrs $AX0.L, @CMBL + 0645 1f5f mrr $AX0.H, $AC1.M + //0646 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + 0648 21ff lrs $AX1.L, @CMBL + + //0649 02bf 065e call 0x065e + 065e_WaitForCPUMailBox_AC0() + + 064b 23ff lrs $AX1.H, @CMBL + 064c 26c9 lrs $AC0.M, @DSCR + 064d 02a0 0004 andf $AC0.M, #0x0004 + 064f 029c 064c jlnz 0x064c + 0651 1206 sbclr #0x06 + 0652 1203 sbclr #0x03 + 0653 1204 sbclr #0x04 + 0654 1205 sbclr #0x05 + 0655 029f 80b5 jmp 0x80b5 + **** GOTO ROM!! + 0657 0021 halt +} + +void 0658_SoftReset() { + 0658 029f 8000 jmp 0x8000 + 065a 0021 halt +} + +void 065b_ContinueWithUCode() +{ + // 065b 00c0 03f9 lr $AR0, @0x03f9 + // 065d 170f jmpr $AR0 + GOTO *0x03f9; +} + + +void 065e_WaitForCPUMailBox_AC0() +{ + 065e 26fe lrs $AC0.M, @CMBH + 065f 02c0 8000 andcf $AC0.M, #0x8000 + 0661 029c 065e jlnz 0x065e + 0663 02df ret +} + +void 0664_WaitForCPUMailBox_AC1() +{ + 0664 27fe lrs $AC1.M, @CMBH + 0665 03c0 8000 andcf $AC1.M, #0x8000 + 0667 029c 0664 jlnz 0x0664 + 0669 02df ret +} +void SendMB_DCD1(_low) + { + // 066a 02bf 0682 call 0x0682 + WaitForEmptyDSPMailBox_ovAC1(); + + // 066c 16fc dcd1 si @DMBH, #0xdcd1 + // 066e 2efd srs @DMBL, $AC0.M + // 066f 16fb 0001 si @DIRQ, #0x0001 + + *DMBH = 0xDCD1 + *DMBL = _low + *DIRQ = 0x0001 + + // 0671 02bf 0682 call 0x0682 + WaitForEmptyDSPMailBox_ovAC1() + + // 0673 02df ret +} + + +void SendMB_F355(_low) +{ + // 0674 02bf 0682 call 0x0682 + WaitForEmptyDSPMailBox_ovAC1(); + + // 0676 16fc f355 si @DMBH, #0xf355 + // 0678 2efd srs @DMBL, $AC0.M + + *DMBH = 0xf355 + *DMBL = _low + + // 0679 02bf 0682 call 0x0682 + WaitForEmptyDSPMailBox_ovAC1(); + + // 067b 02df ret +} + + +void 067c_Unk() +{ + 067c 26fc lrs $AC0.M, @DMBH + 067d 02c0 8000 andcf $AC0.M, #0x8000 + 067f 029d 067c jlz 0x067c + 0681 02df ret +} + + +void WaitForEmptyDSPMailBox_ovAC1.M() + { + // 0682 27fc lrs $AC1.M, @DMBH + // 0683 03c0 8000 andcf $AC1.M, #0x8000 + // 0685 029d 0682 jlz 0x0682 + while (*DMBH & 0x8000); + + // 0687 02df ret +} + + +void 0688_InitCommandBlock() +{ + // 0688 009a 0280 lri $AX0.H, #0x0280 + // 068a 00fa 0350 sr @0x0350, $AX0.H + // 068c 00fa 0351 sr @0x0351, $AX0.H + *0x0350 = 0x0280 + *0x0351 = 0x0280 + + // 068e 0a00 lris $AX0.H, #0x00 + // 068f 00fa 0352 sr @0x0352, $AX0.H + *0x0352 = 0x00 + + // 0691 02df ret +} + + // + // this block is called by the new mail exception + // it seems to copy a new command to the address @0x0350 and increase the + // number of commands at 0x0352 + // + { + 0692 00e0 03fb sr @0x03fb, $AR0 + 0694 00e8 03fc sr @0x03fc, $WR0 + 0696 00c0 0350 lr $AR0, @0x0350 + 0698 0088 002f lri $WR0, #0x002f + + do { + 069a 1b1a srri @$AR0, $AX0.H + + // 069b 00de fffe lr $AC0.M, @CMBH + // 069d 02c0 8000 andcf $AC0.M, #0x8000 + // 069f 029c 069b jlnz 0x069b + while (!CMBH & 0x8000) + ; + 06a1 00dc ffff lr $AC0.L, @CMBL + 06a3 1b1e srri @$AR0, $AC0.M + 06a4 1b1c srri @$AR0, $AC0.L + 06a5 1fda mrr $AC0.M, $AX0.H + 06a6 7800 decm $AC0.M + 06a7 1f5e mrr $AX0.H, $AC0.M + + // 06a8 8600 tstaxh $AX0.H + // 06a9 0294 069b jnz 0x069b + } while (AX0.H); + + /* + 06ab 8100 clr $ACC0 + 06ac 00de 0352 lr $AC0.M, @0x0352 + 06ae 7400 incm $AC0.M + 06af 00fe 0352 sr @0x0352, $AC0.M + increase number of commands + */ + *0x0352 = *0x0352++ + + + 06b1 00e0 0350 sr @0x0350, $AR0 + 06b3 00c0 03fb lr $AR0, @0x03fb + 06b5 00c8 03fc lr $WR0, @0x03fc + + // 06b7 029f 05e6 jmp 0x05e6 + GOTO EndOfMailException // return values and leave exception + + // looks like a read from ring buffer [0x350, 0x37f] + // note the use of the wrap register WR0. + 06b9 00e0 03fb sr @0x03fb, $AR0 + 06bb 00e8 03fc sr @0x03fc, $WR0 + 06bd 00c0 0350 lr $AR0, @0x0350 + 06bf 0088 002f lri $WR0, #0x002f + 06c1 0a00 lris $AX0.H, #0x00 + 06c2 1b1a srri @$AR0, $AX0.H + 06c3 029f 06ab jmp 0x06ab +} + + +void 06c5_CopyCommandBlock() + { + // 06c5 00c0 0351 lr $AR0, @0x0351 + short srcCommandQueueAddr = *0x0351 + + // 06c7 0088 002f lri $WR0, #0x002f + $WR0 = #0x002f + + +:start + /* + 06c9 00da 0352 lr $AX0.H, @0x0352 + 06cb 8600 tstaxh $AX0.H + 06cc 0295 06ed jz 0x06ed + check how many commands are inside the "queue" + */ + + if (*0x352 == 0) + { + $WR0 = #0xffff + return 0x2d; + } + + /* + 06ce 1205 sbclr #0x05 + 06cf 00da 0352 lr $AX0.H, @0x0352 + 06d1 1fda mrr $AC0.M, $AX0.H + 06d2 7800 decm $AC0.M + 06d3 00fe 0352 sr @0x0352, $AC0.M + 06d5 1305 sbset #0x05 + decrement number of commands in queue + */ + *0x352--; + + // 06d6 0081 0356 lri $AR1, #0x0356 + short destCommandQueueAddr = 0x0356 + + // 06d8 191e lrri $AC0.M, @$AR0 + // 06d9 02c0 8000 andcf $AC0.M, #0x8000 + // 06db 029d 06f1 jlz 0x06f1 + // 06dd 1f5e mrr $AX0.H, $AC0.M + // 06de 8600 tstaxh $AX0.H + // 06df 0295 06f5 jz 0x06f5 + + // check if command is valid + + short numCommands = *srcCommandQueueAddr++ + numCommands &= 0x8000 + if (numCommands < 0) + { + *0x0351 = srcCommandQueueAddr + GOTO :start + } + + if (numCommands == 0) + { + 05f0_HaltUCode() + } + + /* + 06e1 007a 06e6 bloop $AX0.H, 0x06e6 + 06e3 191e lrri $AC0.M, @$AR0 + 06e4 1b3e srri @$AR1, $AC0.M + 06e5 191e lrri $AC0.M, @$AR0 + 06e6 1b3e srri @$AR1, $AC0.M + + copy command queue + */ + + for (int i=0; i> 4 + + //07c5 2380 lrs $AX1.H, @0xff80 + //07c6 8d00 set15 + //07c7 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + + $AX0.l = (PB.LoopStartPos >> 4) & 0xffff; + prod = (PB.LoopStartPos >> 4 & 0xffff0000)*PB.Format; + + //07c8 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + + $ACC0 = (PB.LoopStartPos >> 4 & 0xffff0000)*PB.Format; + prod = ((PB.LoopStartPos >> 4) & 0xffff)*PB.Format; + + //07c9 8c00 clr15 + //07ca f000 lsl16 $ACC0 + + $ACC0 = (((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16 + + //07cb 4e00 addp $ACC0 + + $ACC0 = ((((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16)+ + (((PB.LoopStartPos >> 4) & 0xffff)*PB.Format) + + // 07cc 238c lrs $AX1.H, @0xff8c + // 07cd 218d lrs $AX1.L, @0xff8d + // 07ce 4a00 addax $ACC0, $AX1 + + $ACC0 = (((((PB.LoopStartPos >> 4) & 0xffff0000)*PB.Format)<<16)+ + (((PB.LoopStartPos >> 4) & 0xffff)*PB.Format))+PB.StartAddr + + // 07cf 2e38 srs @0x0038, $AC0.M + // 07d0 2c39 srs @0x0039, $AC0.L + + PB.CurAddr = $ACC0 & 0xffffffff; + + // 07d1 2682 lrs $AC0.M, @0xff82 + // 07d2 2e67 srs @0x0067, $AC0.M + // 07d3 2683 lrs $AC0.M, @0xff83 + // 07d4 2e66 srs @0x0066, $AC0.M + //Unconditionally (!) copy YN1 and YN2 from loopyn2 and loopyn1 + + PB.YN1 = PB.LoopYN1; + PB.YN2 = PB.LoopYN2; + + 07d5 00e3 0363 sr @0x0363, $AR3 + 07d7 0083 0458 lri $AR3, #0x0458 + 07d9 8100 clr $ACC0 + 07da 0e01 lris $AC0.M, #0x01 + + // 07db 02bf 07eb call 0x07eb + 07eb_AFCDecoder(); + + 07dd 00c3 0363 lr $AR3, @0x0363 + 07df 02bf 0729 call 0x0729 + 07e1 029f 0749 jmp 0x0749 + + // No repeat + // stop rendering of this PB (0x401 == 1) and clear the output buffer with zeroes... + //07e3 0e01 lris $AC0.M, #0x01 + //07e4 2e01 srs @0x0001, $AC0.M + + PB.KeyOff = 1; + + early_out: + // Zero the buffer. + 07e5 8100 clr $ACC0 + 07e6 005f loop $AC1.M + 07e7 1b7e srri @$AR3, $AC0.M + 07e8 0092 00ff lri $CR, #0x00ff + + // 07ea 02df ret + return + } +} + + + + +void 07eb_AFCDecoder(_numberOfSample(AC0.M)) +{ + // 07eb 00ff 0360 sr @0x0360, $AC1.M + // 07ed 00fe 0361 sr @0x0361, $AC0.M + // 07ef 2638 lrs $AC0.M, @0x0038 + // 07f0 2439 lrs $AC0.L, @0x0039 + // 07f1 0f05 lris $AC1.M, #0x05 + // 07f2 02bf 05ad call 0x05ad + 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) + + // 07f4 2638 lrs $AC0.M, @0x0038 + // 07f5 2439 lrs $AC0.L, @0x0039 + // 07f6 8900 clr $ACC1 + // 07f7 00df 0361 lr $AC1.M, @0x0361 + // 07f9 2280 lrs $AX0.H, @0xff80 + // 07fa d000 mulc $AC1.M, $AX0.H + // 07fb 6f00 movp $ACC1 + // 07fc 4c00 add $ACC0, $ACC1 + // 07fd 2e38 srs @0x0038, $AC0.M + // 07fe 2c39 srs @0x0039, $AC0.L + // increase sample offset in ARAM + AC0 = (*0x0038 << 16) | *0x0039 + AC1 = AC0 + _numberOfSample * *0x0480 // bytes per sample + *0x0038 = AC0.M + *0x0039 = AC0.L + + + // 07ff 8100 clr $ACC0 + // 0800 00de 0361 lr $AC0.M, @0x0361 + //0802 007e 086b bloop $AC0.M, 0x086b + for (int i = 0; i < _numberOfSample; i++) + { + // Look for the lrrn below to find the ARAM reads. + + // FFD3 seems to be some interface to do plain single byte reads + // from ARAM with no ADPCM fanciness or similar. + + // It loads through AR0 loaded with immediate #ffd3, not through + // lrs, so CR doesn't affect the effective address. + + 0804 0080 ffd3 lri $AR0, #0xffd3 + 0806 0084 0000 lri $IX0, #0x0000 + 0808 199e lrrn $AC0.M, @$AR0 + 0809 8900 clr $ACC1 + 080a 1ffe mrr $AC1.M, $AC0.M + 080b 1401 lsl $ACC0, #1 + 080c 0240 001e andi $AC0.M, #0x001e + 080e 0200 0300 addi $AC0.M, #0x0300 // AFC COEF Table + 0810 1c3e mrr $AR1, $AC0.M + 0811 157c lsr $ACC1, #-4 + 0812 0340 000f andi $AC1.M, #0x000f + 0814 0a11 lris $AX0.H, #0x11 + 0815 5500 subr $ACC1, $AX0.H + + // 0816 8100 clr $ACC0 + // 0817 2680 lrs $AC0.M, @0xff80 + // 0818 0605 cmpis $ACC0, #0x05 + // 0819 0295 0832 jz 0x0832 + if (*0x480 != 0x5) // ( == 0x09) + { + 081b 009a 00f0 lri $AX0.H, #0x00f0 + 081d 0b0f lris $AX1.H, #0x0f + 081e 0082 0364 lri $AR2, #0x0364 + 0820 1998 lrrn $AX0.L, @$AR0 + 0821 6000 movr $ACC0, $AX0.L + + // Unpack 14 of the nibbles.. + 0822 1107 0829 bloopi #0x07, 0x0829 + for (int j=0; j<7; j++) + { + 0824 3400 andr $AC0.M, $AX0.H + 0825 1408 lsl $ACC0, #8 + 0826 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + + 0827 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 0828 140c lsl $ACC0, #12 + 0829 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + } + // Then do the last two .. + 082a 3400 andr $AC0.M, $AX0.H + 082b 1408 lsl $ACC0, #8 + 082c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 082d 3600 andr $AC0.M, $AX1.H + 082e 140c lsl $ACC0, #12 + 082f 1b5e srri @$AR2, $AC0.M + + 0830 029f 0852 jmp 0x0852 + } + else // (*0x480 == 5) + { + 0832 009a c000 lri $AX0.H, #0xc000 + 0834 0082 0364 lri $AR2, #0x0364 + 0836 1998 lrrn $AX0.L, @$AR0 + 0837 6000 movr $ACC0, $AX0.L + + // Unpack half nibbles (half quality, ~half space) + //0838 1103 0845 bloopi #0x03, 0x0845 + for (j=0; j<3; j++) + { + 083a 1408 lsl $ACC0, #8 + 083b 3400 andr $AC0.M, $AX0.H + 083c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 083d 140a lsl $ACC0, #10 + 083e 3400 andr $AC0.M, $AX0.H + 083f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0840 140c lsl $ACC0, #12 + 0841 3400 andr $AC0.M, $AX0.H + 0842 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0843 140e lsl $ACC0, #14 + 0844 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 + 0845 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + } + + 0846 1408 lsl $ACC0, #8 + 0847 3400 andr $AC0.M, $AX0.H + 0848 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0849 140a lsl $ACC0, #10 + 084a 3400 andr $AC0.M, $AX0.H + 084b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 084c 140c lsl $ACC0, #12 + 084d 3400 andr $AC0.M, $AX0.H + 084e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 084f 140e lsl $ACC0, #14 + 0850 3400 andr $AC0.M, $AX0.H + 0851 1b5e srri @$AR2, $AC0.M + } + + 0852 8f00 set40 + 0853 1f7f mrr $AX1.H, $AC1.M + 0854 2066 lrs $AX0.L, @0x0066 + 0855 2767 lrs $AC1.M, @0x0067 + 0856 193a lrri $AX0.H, @$AR1 + 0857 1939 lrri $AX1.L, @$AR1 + 0858 0080 0364 lri $AR0, #0x0364 + 085a 1c80 mrr $IX0, $AR0 + 085b a000 mulx $AX0.L, $AX1.L + 085c ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + + // ADPCM decoding main loop. + 085d 1108 0866 bloopi #0x08, 0x0866 + for (int i=0; i<8; i++) + { + 085f 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 0860 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 0861 1485 asl $ACC0, #5 + 0862 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 0863 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 0864 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 0865 1585 asl $ACC1, #5 + 0866 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + } + 0867 2f67 srs @0x0067, $AC1.M + 0868 8e00 set16 + 0869 1ff8 mrr $AC1.M, $AX0.L + 086a 2f66 srs @0x0066, $AC1.M + 086b 8900 clr $ACC1 + } + 086c 00df 0360 lr $AC1.M, @0x0360 + 086e 02df ret +} + + + + + + // probably unreachable + { + // 086f b100 tst $ACC0 + // 0870 02d5 retz + if (!$ACC0) return; + + 0871 04fe addis $ACC0, #0xfe + 0872 1f1e mrr $AX0.L, $AC0.M + 0873 191e lrri $AC0.M, @$AR0 + 0874 0291 087a jl 0x087a + 0876 191a lrri $AX0.H, @$AR0 + 0877 0058 loop $AX0.L + 0878 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0879 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 087a 1b7e srri @$AR3, $AC0.M + 087b 02df ret +} + + +//////////////////////////////////////////// DEFAULT DECODER +void 087c_DefaultDecoder() +{ + // 087c 8100 clr $ACC0 + // 087d 1f5e mrr $AX0.H, $AC0.M + // 087e 00d8 0402 lr $AX0.L, @0x0402 + + ACC0 = 0; + AX0.L = *0x0402; // == PB.RatioInt + + // Sample fraction is stored in a common way, but sample position is not, so + // it's in the individual decoders. Some decoders, like square wave, only care about + // fractional sample position. So here we just load up the fractional sample + // position before handing control over. + + // 0880 00dc 0430 lr $AC0.L, @0x0430 + // 0882 0080 0520 lri $AR0, #0x0520 + + AC0.L = *0x430; // == PB.CurSampleFrac + AR0 = 0x0520; + + // 0884 00df 0480 lr $AC1.M, @0x0480 + // 0886 1501 lsl $ACC1, #1 + // 0887 0340 007e andi $AC1.M, #0x007e + // 0889 0300 0891 addi $AC1.M, #0x0891 + // 088b 1c5f mrr $AR2, $AC1.M + // 088c 175f callr $AR2 // (*$AR2)() <-- See jump table at 0x0891 + + AC1.M = ((*0x480 * 2) & 0x007e) + 0x0891; // == ((PB.Format * 2) & 0x007e) + 0x0891 + AR2 = AC1.M; + + JumpTable0891(PB.Format); + + //088d 00fc 0430 sr @0x0430, $AC0.L + *0x430 = AC0.L; // *0x430 == PB.CurSampleFrac + + // 088f 029f 02d8 jmp 0x02d8 + GOTO ContinueWithBlock: // in SyncFrame +} + + +// Jump table +// switch(PB.Format) +0891 029f 08b2 jmp 0x08b2 // case 0x0 // 08b2_Decoder0x0_SquareWave (used in ZWW) +0893 029f 08ed jmp 0x08ed // case 0x1 // 08ed_Decoder0x1_SawWave (used in ZWW) +0895 029f 08d5 jmp 0x08d5 // case 0x2 // 08d5_Decoder0x2_SquareSaw (hasn't been spotted) +0897 029f 08c2 jmp 0x08c2 // case 0x3 // 08c2_Decoder0x3_RectangleWave (hasn't been spotted) +0899 029f 08fb jmp 0x08fb // case 0x4 // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) +089b 029f 08b1 jmp 0x08b1 // case 0x5 (can never happen) +089d 029f 0919 jmp 0x0919 // case 0x6 // 0919_Decoder0x6_Constant (hasn't been spotted) +089f 029f 091c jmp 0x091c // case 0x7 // 091c_Decoder0x7_WaveTable (used in Pikmin) +08a1 029f 08b1 jmp 0x08b1 // case 0x8 (can never happen) +08a3 029f 08b1 jmp 0x08b1 // case 0x9 (can never happen) +08a5 029f 093a jmp 0x093a // case 0xa (hasn't been spotted) +08a7 029f 08f3 jmp 0x08f3 // case 0xb // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) (used in Pikmin) +08a9 029f 08f7 jmp 0x08f7 // case 0xc // void 08f3_Decoder0x4_0xb_0xc_WaveTable (used in Pikmin) (Zelda force field in temple of gods) +08ab 029f 08b1 jmp 0x08b1 // case 0xd (unused) +08ad 029f 08b1 jmp 0x08b1 // case 0xe (unused) +08af 029f 08b1 jmp 0x08b1 // case 0xf (unused) +08b1 02df ret + +void 08b2_Decoder0x0_SquareWave(ACC0, AR0, AX0.L) { + // 08b2 1401 lsl $ACC0, #1 + t = samplePosition * 2; + + // Set up sound buffers + // 08b3 009b c000 lri $AX1.H, #0xc000 + // 08b5 0099 4000 lri $AX1.L, #0x4000 + + // 08b7 1150 08bf bloopi #0x50, 0x08bf + for(int i = 0; i < 80; i++) { + //08b9 02c0 0001 andcf $AC0.M, #0x0001 + //08bb 027c iflnz + // 08bc 1b1b srri @$AR0, $AX1.H + //08bd 027d iflz + // 08be 1b19 srri @$AR0, $AX1.L + if(($AC0.M & 1) == 1) + *$AR0++ = 0x4000; + else + *$AR0++ = 0xc000; + + // 08bf 4800 addax $ACC0, $AX0 + t += PB.Ratio; + } + // 08c0 147f lsr $ACC0, #-1 + t /= 2; + + // 08c1 02df ret +} + +void 08c2_Decoder0x3_RectangleWave(ACC0, AR0, AX0.L) { + 08c2 1402 lsl $ACC0, #2 // t = PB.CurSampleFrac * 4 + 08c3 8900 clr $ACC1 // ACC1 = 0 + 08c4 1fb8 mrr $AC1.L, $AX0.L // AC1.L = PB.RatioInt + 08c5 1501 lsl $ACC1, #1 // ACC1 *= 2 + 08c6 009b c000 lri $AX1.H, #0xc000 + 08c8 0099 4000 lri $AX1.L, #0x4000 + // 08ca 1150 08d2 bloopi #0x50, 0x08d2 + for(int i = 0; i < 80; i++) { + // 08cc 02c0 0003 andcf $AC0.M, #0x0003 + // 08ce 027c iflnz + // 08cf 1b1b srri @$AR0, $AX1.H + // 08d0 027d iflz + // 08d1 1b19 srri @$AR0, $AX1.L + // 08d2 4c00 add $ACC0, $ACC1 + + if (($AC0.M & 3) == 3) + *$AR0++ = 0x4000; + else + *$AR0++ = 0xc000; + + t += (PB.RatioInt * 2); + } + // 08d3 147e lsr $ACC0, #-2 + t /= 4; + + // 08d4 02df ret +} + +void 08d5_Decoder0x2_SquareSaw(ACC0, AR0, AX0.L) { + 08d5 1401 lsl $ACC0, #1 + 08d6 0081 0ca0 lri $AR1, #0x0ca0 + 08d8 009b c000 lri $AX1.H, #0xc000 + 08da 0099 4000 lri $AX1.L, #0x4000 + 08dc 8900 clr $ACC1 + 08dd 0082 0000 lri $AR2, #0x0000 + 08df 1150 08ea bloopi #0x50, 0x08ea + 08e1 02c0 0001 andcf $AC0.M, #0x0001 + 08e3 027c iflnz + 08e4 1b1b srri @$AR0, $AX1.H + 08e5 027d iflz + 08e6 1b19 srri @$AR0, $AX1.L + 08e7 183d lrr $AC1.L, @$AR1 + 08e8 4900 addax $ACC1, $AX0 + 08e9 1fe2 mrr $AC1.M, $AR2 + 08ea 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M + 08eb 147f lsr $ACC0, #-1 + // 08ec 02df ret +} + +void 08ed_Decoder0x1_SawWave(ACC0, AR0, AX0.L) { + // 08ed 8900 clr $ACC1 + // 08ee 1fb8 mrr $AC1.L, $AX0.L + // 08ef 157f lsr $ACC1, #-1 + + // At this point AX0.L is PB.RatioInt and AC0.L is PB.CurSampleFrac + ACC1 = 0; + AC1.L = AX0.L * 2; + + // 08f0 1050 loopi #0x50 + for(int i = 0; i < 0x50; i++) { + // 08f1 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L + ACC0 += ACC1; + *$AR0++ = AC0.L; + } + // 08f2 02df ret +} + + +void 08f3_Decoder0x4_0xb_0xc_WaveTable(ACC0, AR0, AX0.L) { + // See 091c + + 08f3 0082 0180 lri $AR2, #0x0180 // Entrance 1, 0x0b + 08f5 029f 08fd jmp 0x08fd + + 08f7 0082 01c0 lri $AR2, #0x01c0 // Entrance 2, 0x0c + 08f9 029f 08fd jmp 0x08fd + + 08fb 0082 0140 lri $AR2, #0x0140 // Entrance 3, 0x04 + + 08fd 008a 003f lri $WR2, #0x003f + 08ff 0086 0000 lri $IX2, #0x0000 + 0901 1406 lsl $ACC0, #6 + 0902 8900 clr $ACC1 + 0903 1fb8 mrr $AC1.L, $AX0.L + 0904 1505 lsl $ACC1, #5 + 0905 009b 003f lri $AX1.H, #0x003f + 0907 009a 0000 lri $AX0.H, #0x0000 + 0909 3600 andr $AC0.M, $AX1.H + 090a 1cde mrr $IX2, $AC0.M + 090b 001a addarn $AR2, $IX2 + 090c 3400 andr $AC0.M, $AX0.H + 090d 1150 0913 bloopi #0x50, 0x0913 + 090f 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0910 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0911 1cde mrr $IX2, $AC0.M + 0912 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0913 1b19 srri @$AR0, $AX1.L + 0914 1fc2 mrr $AC0.M, $AR2 + 0915 147a lsr $ACC0, #-6 + 0916 008a ffff lri $WR2, #0xffff + // 0918 02df ret +} + +void 0919_Decoder0x6_Constant(AR0, AX0.L) { + // case 0x6: Fills the buffer with PB.RatioInt (zero?) + + // 0919 1050 loopi #0x50 + // 091a 1b18 srri @$AR0, $AX0.L + + for(int i = 0; i < 0x50; i++) + *AR0++ = AX0.L; // PB.RatioInt + + // 091b 02df ret +} + +void 091c_Decoder0x7_WaveTable(ACC0, AR0, AX0.L) { + // So AR2 is where it reads the data from, and it updates ACC0 to the final read address in the end + // Questions: How does the wrap register change the data access? + + // 091c 0082 0100 lri $AR2, #0x0100 + // 091e 008a 003f lri $WR2, #0x003f + // 0920 0086 0000 lri $IX2, #0x0000 + // 0922 1406 lsl $ACC0, #6 + // 0923 8900 clr $ACC1 + // 0924 1fb8 mrr $AC1.L, $AX0.L + // 0925 1505 lsl $ACC1, #5 + + + WR2 = 0x003f; + ACC0 <<= 6; + ACC1 = AX0.L << 5; + + + // 0926 009b 003f lri $AX1.H, #0x003f + // 0928 009a 0000 lri $AX0.H, #0x0000 + // 092a 3600 andr $AC0.M, $AX1.H + // 092b 1cde mrr $IX2, $AC0.M + // 092c 001a addarn $AR2, $IX2 + // 092d 3400 andr $AC0.M, $AX0.H + + AC0.M &= 0x003f; + IX2 = AC0.M; + AR2 = 0x0100 + IX2; + + AC0.M = 0; + + + // 092e 1150 0934 bloopi #0x50, 0x0934 + for(int i = 0; i < 0x50; i++) { + // 0930 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + + ACC0 += ACC1; + AX1.L = *AR2++; + + // 0931 3606 andr'dr $AC0.M, $AX1.H : $AR2 + AC0.M &= 0x003f; + AR2--; + + // 0932 1cde mrr $IX2, $AC0.M + IX2 = AC0.M; + + // 0933 340e andr'nr $AC0.M, $AX0.H : $AR2 + AC0.M = 0; + AR2 += IX2; + + // 0934 1b19 srri @$AR0, $AX1.L + *AR0++ = AX1.L; + + } + + // 0935 1fc2 mrr $AC0.M, $AR2 + // 0936 147a lsr $ACC0, #-6 + // 0937 008a ffff lri $WR2, #0xffff + + AC0.M = AR2; + ACC0 >>= 6; + WR2 = 0xffff; + + // 0939 02df ret +} + +void 093a_Unk() { + 093a 0082 0100 lri $AR2, #0x0100 + 093c 008a 003f lri $WR2, #0x003f + 093e 0086 0000 lri $IX2, #0x0000 + 0940 0081 0ca0 lri $AR1, #0x0ca0 + 0942 1406 lsl $ACC0, #6 + 0943 8900 clr $ACC1 + 0944 1fb8 mrr $AC1.L, $AX0.L + 0945 1505 lsl $ACC1, #5 + 0946 009b 003f lri $AX1.H, #0x003f + 0948 009a 0000 lri $AX0.H, #0x0000 + 094a 3600 andr $AC0.M, $AX1.H + 094b 1cde mrr $IX2, $AC0.M + 094c 001a addarn $AR2, $IX2 + 094d 3400 andr $AC0.M, $AX0.H + 094e 1150 0959 bloopi #0x50, 0x0959 + 0950 1939 lrri $AX1.L, @$AR1 + 0951 a000 mulx $AX0.L, $AX1.L + 0952 140a lsl $ACC0, #10 + 0953 4e00 addp $ACC0 + 0954 1476 lsr $ACC0, #-10 + 0955 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0956 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0957 1cde mrr $IX2, $AC0.M + 0958 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0959 1b19 srri @$AR0, $AX1.L + 095a 1fc2 mrr $AC0.M, $AR2 + 095b 147a lsr $ACC0, #-6 + 095c 008a ffff lri $WR2, #0xffff + 095e 02df ret +} + +void 095f_Unk_SetupMemAt0_0180() { + 095f 0080 01be lri $AR0, #0x01be + 0961 1918 lrri $AX0.L, @$AR0 + 0962 191a lrri $AX0.H, @$AR0 + 0963 0080 0180 lri $AR0, #0x0180 + 0965 0083 0180 lri $AR3, #0x0180 + 0967 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0968 1ffe mrr $AC1.M, $AC0.M + // 0969 1120 0970 bloopi #0x20, 0x0970 + for (int i = 0; i < 0x20; i++) { + 096b 7c00 neg $ACC0 + 096c d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 096d 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 096e c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 096f 1501 lsl $ACC1, #1 + 0970 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + } + 0971 0080 01fe lri $AR0, #0x01fe + 0973 191a lrri $AX0.H, @$AR0 + 0974 1918 lrri $AX0.L, @$AR0 + 0975 0080 01c0 lri $AR0, #0x01c0 + 0977 0083 01c0 lri $AR3, #0x01c0 + 0979 1ff8 mrr $AC1.M, $AX0.L + 097a 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 097b f800 addpaxz $ACC0, $AX0.H + 097c 0240 01ff andi $AC0.M, #0x01ff + 097e 0260 2000 ori $AC0.M, #0x2000 + + //0980 02bf 0983 call 0x0983 + 0983_WriteRamp($ACC0, $ACC1, Dest($AR3)) + + // 0982 02df ret +} + +void 0983_WriteRamp(ACC0, ACC1, Dest($AR3)) { + // 0983 b900 tst $ACC1 + // 0984 0272 ifg + // 0985 7c00 neg $ACC0 + if ($ACC1 > 0) { + $ACC0 = -$ACC0; + } + + // 0986 1f7e mrr $AX1.H, $AC0.M + // 0987 4700 addr $ACC1, $AX1.H + + // 0988 1110 098d bloopi #0x10, 0x098d + for (int i = 0; i < 0x10; i++) { + 098a 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 098b 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 098c 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 098d 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + } + 098e 02df ret +} + +//////////////////////////////////////////// 0x08 DECODER +// Hardcoded destination 0x0580. +void Decoder0x08() { + 098f 0092 0004 lri $CR, #0x0004 + 0991 2002 lrs $AX0.L, @0x0002 + 0992 8100 clr $ACC0 + 0993 8900 clr $ACC1 + 0994 2430 lrs $AC0.L, @0x0030 // CurSampleFrac + + // 0995 8d00 set15 + // 0996 0950 lris $AX1.L, #0x50 + // 0997 a000 mulx $AX0.L, $AX1.L + // 0998 a400 mulxac $AX0.L, $AX1.L, $ACC0 + // 0999 1404 lsl $ACC0, #4 + // 099a 8c00 clr15 + // Compute how much data we need to read, to get 0x50 samples after resampling. + // AC0.L is cursamplefrace, AX0.L is ratio. + $ACC0 = PB.CurrentSampleFrac + 0x50 * PB.Ratio; + + 099b 1ffe mrr $AC1.M, $AC0.M + 099c 0083 0580 lri $AR3, #0x0580 + 099e 2201 lrs $AX0.H, @0x0001 + 099f 8600 tstaxh $AX0.H + 09a0 0294 09b1 jnz 0x09b1 + + // 09a2 2204 lrs $AX0.H, @0x0004 + // 09a3 8600 tstaxh $AX0.H + // 09a4 02b4 09f9 callne 0x09f9 + if (*0x0404) { // NeedsReset + 09f9_UpdateSampleCounters8(); + } + + 09a6 8100 clr $ACC0 + 09a7 2605 lrs $AC0.M, @0x0005 + 09a8 b100 tst $ACC0 + 09a9 0295 09be jz 0x09be + +label09ab: + 09ab 8100 clr $ACC0 + 09ac 2e05 srs @0x0005, $AC0.M + 09ad 2281 lrs $AX0.H, @0xff81 + 09ae 8600 tstaxh $AX0.H + 09af 0294 09b8 jnz 0x09b8 + 09b1 8100 clr $ACC0 + 09b2 005f loop $AC1.M + 09b3 1b7e srri @$AR3, $AC0.M + 09b4 7400 incm $AC0.M + 09b5 2e01 srs @0x0001, $AC0.M + 09b6 029f 09f2 jmp 0x09f2 + 09b8 2688 lrs $AC0.M, @0xff88 + 09b9 2489 lrs $AC0.L, @0xff89 + 09ba 2e34 srs @0x0034, $AC0.M + 09bb 2c35 srs @0x0035, $AC0.L + // 09bc 02bf 09f9 call 0x09f9 + 09f9_UpdateSampleCounters8(); + + 09be 00ff 0360 sr @0x0360, $AC1.M + + 09c0 2638 lrs $AC0.M, @0x0038 + 09c1 2439 lrs $AC0.L, @0x0039 + 09c2 0f05 lris $AC1.M, #0x05 // Sample format 5 + // 09c3 02bf 05ad call 0x05ad + 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) + + 09c5 00df 0360 lr $AC1.M, @0x0360 + 09c7 8100 clr $ACC0 + // 09c8 263a lrs $AC0.M, @0x003a + // 09c9 b100 tst $ACC0 + // 09ca 0294 09d9 jnz 0x09d9 + if (*(0x043a)) { + 09cc 263b lrs $AC0.M, @0x003b + 09cd 5c00 sub $ACC0, $ACC1 + 09ce 0290 09d9 jge 0x09d9 + + 09d0 223b lrs $AX0.H, @0x003b + // 09d1 02bf 0a0a call 0x0a0a // Load more samples. + 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)) + + 09d3 5500 subr $ACC1, $AX0.H + // 09d4 0a01 lris $AX0.H, #0x01 + // 09d5 00fa 0405 sr @0x0405, $AX0.H + *0x405 = 1; // PB.ReachedEnd = 1; + + 09d7 029f 09ab jmp 0x09ab + } + + 09d9 1f5f mrr $AX0.H, $AC1.M + // 09da 02bf 0a0a call 0x0a0a // Load more samples. + 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)); + + // Stash AX0.H away, it gets read again at 09ef. + 09dc 00fa 0362 sr @0x0362, $AX0.H + + 09de 8100 clr $ACC0 + 09df 263a lrs $AC0.M, @0x003a + 09e0 243b lrs $AC0.L, @0x003b + 09e1 1570 lsr $ACC1, #-16 + + // 09e2 0a01 lris $AX0.H, #0x01 + // 09e3 0081 0405 lri $AR1, #0x0405 + // 09e5 5c00 sub $ACC0, $ACC1 + // 09e6 b100 tst $ACC0 + // 09e7 0275 ifz + // 09e8 1a3a srr @$AR1, $AX0.H + + ACC0 -= ACC1; + if(ACC0 == 0) + *0x405 = 1; // PB.ReachedEnd = 1 + + 09e9 2e3a srs @0x003a, $AC0.M + 09ea 2c3b srs @0x003b, $AC0.L + 09eb 2638 lrs $AC0.M, @0x0038 + 09ec 2439 lrs $AC0.L, @0x0039 + 09ed 00d8 0362 lr $AX0.L, @0x0362 + 09ef 7000 addaxl $ACC0, $AX0.L + 09f0 2c39 srs @0x0039, $AC0.L + 09f1 2e38 srs @0x0038, $AC0.M + + // 09f2 0092 00ff lri $CR, #0x00ff + // 09f4 029f 02d0 jmp 0x02d0 + GOTO Resample_From0580To0520: +} + + +// unreachable code +void Unreachable() { + 09f6 8100 clr $ACC0 + 09f7 2e34 srs @0x0034, $AC0.M + 09f8 2e35 srs @0x0035, $AC0.M +} + +void 09f9_UpdateSampleCounters8() { + 09f9 2334 lrs $AX1.H, @0x0034 + 09fa 2135 lrs $AX1.L, @0x0035 + 09fb 268a lrs $AC0.M, @0xff8a + 09fc 248b lrs $AC0.L, @0xff8b + 09fd 5a00 subax $ACC0, $AX1 + 09fe 2e3a srs @0x003a, $AC0.M + 09ff 2c3b srs @0x003b, $AC0.L + 0a00 2634 lrs $AC0.M, @0x0034 + 0a01 2435 lrs $AC0.L, @0x0035 + 0a02 238c lrs $AX1.H, @0xff8c + 0a03 218d lrs $AX1.L, @0xff8d + 0a04 4a00 addax $ACC0, $AX1 + 0a05 2e38 srs @0x0038, $AC0.M + 0a06 2c39 srs @0x0039, $AC0.L + 0a07 8100 clr $ACC0 + 0a08 2e05 srs @0x0005, $AC0.M + // 0a09 02df ret +} + +void 0a0a_ReadFromAccelerator8To16(OutBuffer($AR3), Count($AX0.H)) { + // Read from ARAM. Convert 8-bit samples to 16-bit. + // 0a0a 0080 ffd3 lri $AR0, #0xffd3 + // 0a0c 0084 0000 lri $IX0, #0x0000 + // 0a0e 007a 0a12 bloop $AX0.H, 0x0a12 + // 0a10 199e lrrn $AC0.M, @$AR0 + // 0a11 1488 asl $ACC0, #8 + // 0a12 1b7e srri @$AR3, $AC0.M + // 0a13 02df ret + for (int i = 0; i < $AX0.H; i++) { + *($AR3++) = (*0xffd3) << 8; // ffd3 is the non-adpcm alternative read address for the accelerator. + } +} + + +//////////////////////////////////////////// 0x10 DECODER +// Hardcoded destination 0x0580. +// This should be the easiest decoder to decipher in full -- except the really +// trivial ones like the synths. +// It's almost identical to Decoder0x08 +void Decoder0x10() { + // 0a14 0092 0004 lri $CR, #0x0004 + 0a16 2002 lrs $AX0.L, @0x0002 + 0a17 8100 clr $ACC0 + 0a18 8900 clr $ACC1 + // 0a19 2430 lrs $AC0.L, @0x0030 + 0a1a 8d00 set15 + + // 0a1b 0950 lris $AX1.L, #0x50 + // 0a1c a000 mulx $AX0.L, $AX1.L + // 0a1d a400 mulxac $AX0.L, $AX1.L, $ACC0 + // 0a1e 1404 lsl $ACC0, #4 + // 0a1f 8c00 clr15 + + // Compute how much data we need to read, to get 0x50 samples after resampling. + // AC0.L is cursamplefrac, AX0.L is ratio. + $ACC0 = (PB.CurrentSampleFrac + 0x50 * PB.Ratio) << 4; + + 0a20 1ffe mrr $AC1.M, $AC0.M + 0a21 0083 0580 lri $AR3, #0x0580 + 0a23 2201 lrs $AX0.H, @0x0001 + 0a24 8600 tstaxh $AX0.H + 0a25 0294 0a36 jnz 0x0a36 /// Jump! See jump destination below. + + 0a27 2204 lrs $AX0.H, @0x0004 + 0a28 8600 tstaxh $AX0.H + 0a29 02b4 0a7f callne 0x0a7f + if (*0x0404) // "NeedsReset" + { + 0a7f_UpdateSampleCounters10() + } + + 0a2b 8100 clr $ACC0 + + 0a2c 2605 lrs $AC0.M, @0x0005 + 0a2d b100 tst $ACC0 + 0a2e 0295 0a43 jz 0x0a43 + if (*0x405) { + + retry_0a30: + 0a30 8100 clr $ACC0 + 0a31 2e05 srs @0x0005, $AC0.M + 0a32 2281 lrs $AX0.H, @0xff81 + 0a33 8600 tstaxh $AX0.H + 0a34 0294 0a3d jnz 0x0a3d + if (!*401) { //// <<<<<<<<<<<< Jump destination + 0a36 8100 clr $ACC0 + 0a37 005f loop $AC1.M + 0a38 1b7e srri @$AR3, $AC0.M + 0a39 7400 incm $AC0.M + 0a3a 2e01 srs @0x0001, $AC0.M + 0a3b 029f 0a78 jmp 0x0a78 // quit + } else { + // Copy [88,89] to [34,35] + 0a3d 2688 lrs $AC0.M, @0xff88 + 0a3e 2489 lrs $AC0.L, @0xff89 + 0a3f 2e34 srs @0x0034, $AC0.M + 0a40 2c35 srs @0x0035, $AC0.L + 0a41 02bf 0a7f call 0x0a7f + 0a7f_UpdateSampleCounters10() + } + } + + 0a43: + 0a43 00ff 0360 sr @0x0360, $AC1.M + 0a45 2638 lrs $AC0.M, @0x0038 + 0a46 2439 lrs $AC0.L, @0x0039 + 0a47 0f06 lris $AC1.M, #0x06 // Sample format 6 + // 0a48 02bf 05ad call 0x05ad + 05ad_SetupAccelerator(AC0.M, AC0.L, AC1.M) + + 0a4a 00df 0360 lr $AC1.M, @0x0360 + 0a4c 8100 clr $ACC0 + 0a4d 263a lrs $AC0.M, @0x003a + 0a4e b100 tst $ACC0 + 0a4f 0294 0a5e jnz 0x0a5e + if (!*0x043a) { + 0a51 263b lrs $AC0.M, @0x003b + 0a52 5c00 sub $ACC0, $ACC1 + 0a53 0290 0a5e jge 0x0a5e + if (0x43b <= ACC1) { // not sure, but .. not enough samples? + 0a55 223b lrs $AX0.H, @0x003b + // 0a56 02bf 0a91 call 0x0a91 // Read more samples + 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)); + 0a58 5500 subr $ACC1, $AX0.H + // 0a59 0a01 lris $AX0.H, #0x01 + // 0a5a 00fa 0405 sr @0x0405, $AX0.H + *0x405 = 1; // PB.ReachedEnd + + 0a5c 029f 0a30 jmp 0x0a30 // GOTO retry_0a30; + } + } + + 0a5e 1f5f mrr $AX0.H, $AC1.M + // 0a5f 02bf 0a91 call 0x0a91 // Read more samples + 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)) + + // Stash AX0.H away, it gets read again at 0a72. + 0a61 00fa 0362 sr @0x0362, $AX0.H + + 0a63 8100 clr $ACC0 + 0a64 263a lrs $AC0.M, @0x003a + 0a65 243b lrs $AC0.L, @0x003b + 0a66 1570 lsr $ACC1, #-16 + // 0a67 0a01 lris $AX0.H, #0x01 + // 0a68 0081 0405 lri $AR1, #0x0405 + // 0a6a 5c00 sub $ACC0, $ACC1 + // 0a6b b100 tst $ACC0 + // 0a6c 0275 ifz + // 0a6d 1a3a srr @$AR1, $AX0.H + + ACC0 -= ACC1; + if(ACC0 == 0) + *0x405 = 1; // PB.ReachedEnd = 1 + + 0a6e 2e3a srs @0x003a, $AC0.M + 0a6f 2c3b srs @0x003b, $AC0.L + 0a70 2638 lrs $AC0.M, @0x0038 + 0a71 2439 lrs $AC0.L, @0x0039 + 0a72 00d8 0362 lr $AX0.L, @0x0362 + 0a74 7000 addaxl $ACC0, $AX0.L + 0a75 7000 addaxl $ACC0, $AX0.L + 0a76 2c39 srs @0x0039, $AC0.L + 0a77 2e38 srs @0x0038, $AC0.M + + // 0a78 0092 00ff lri $CR, #0x00ff + // 0a7a 029f 02d0 jmp 0x02d0 + GOTO Resample_From0580To0520: +} + +void 0a7c_UnkUnused() { + 0a7c 8100 clr $ACC0 + 0a7d 2e34 srs @0x0034, $AC0.M + 0a7e 2e35 srs @0x0035, $AC0.M + +// used by 0x10 decoder +void 0a7f_UpdateSampleCounters10() { + 0a7f 2334 lrs $AX1.H, @0x0034 + 0a80 2135 lrs $AX1.L, @0x0035 + 0a81 268a lrs $AC0.M, @0xff8a + 0a82 248b lrs $AC0.L, @0xff8b + 0a83 5a00 subax $ACC0, $AX1 // Subtract [34,35] from [8a, 8b] + 0a84 2e3a srs @0x003a, $AC0.M + 0a85 2c3b srs @0x003b, $AC0.L + 0a86 2634 lrs $AC0.M, @0x0034 + 0a87 2435 lrs $AC0.L, @0x0035 + 0a88 1401 lsl $ACC0, #1 // This shift is not done in UpdateSampleCounters8. + 0a89 238c lrs $AX1.H, @0xff8c + 0a8a 218d lrs $AX1.L, @0xff8d + 0a8b 4a00 addax $ACC0, $AX1 // Add [34,35]<<1 to [8c, 8d] + 0a8c 2e38 srs @0x0038, $AC0.M + 0a8d 2c39 srs @0x0039, $AC0.L + 0a8e 8100 clr $ACC0 + 0a8f 2e05 srs @0x0005, $AC0.M + 0a90 02df ret +} + + +// Read AX0.H samples from the accelerator. +void 0a91_ReadFromAccelerator(OutBuffer($AR3), Count($AX0.H)) { + // 0a91 0080 ffd3 lri $AR0, #0xffd3 + // 0a93 0084 0000 lri $IX0, #0x0000 + // 0a95 007a 0a98 bloop $AX0.H, 0x0a98 + // 0a97 199e lrrn $AC0.M, @$AR0 + // 0a98 1b7e srri @$AR3, $AC0.M + // 0a99 02df ret + + for (int i = 0; i < $AX0.H; i++) { + *($AR3++) = *0xffd3; // ffd3 is the non-adpcm alternative read address for the accelerator. + } +} + +//////////////////////////////////////////// 0x20 DECODER +// Same as 0x21 but with no resampling. +{ + // 0a9a 8900 clr $ACC1 + // 0a9b 0f50 lris $AC1.M, #0x50 + // 0a9c 0083 0520 lri $AR3, #0x0520 + // 0a9e 02bf 0ab3 call 0x0ab3 + + ACC1 = 0; + AC1.M = 0x50; + AR3 = 0x520; + + 0ab3_Decoder0x21Core(AC1.M=0x50, AR3=#0x0520); + + // 0aa0 029f 02d8 jmp 0x02d8 + GOTO ContinueWithBlock: // in SyncFrame +} + +//////////////////////////////////////////// 0x21 DECODER +void 0aa2_Decoder0x21() { + // 0aa2 00d8 0402 lr $AX0.L, @0x0402 + // 0aa4 8100 clr $ACC0 + // 0aa5 8900 clr $ACC1 + AX0.L = *0x0402; + ACC0 = 0 + ACC1 = 0 + // 0aa6 00dc 0430 lr $AC0.L, @0x0430 + // 0aa8 0a50 lris $AX0.H, #0x50 + // 0aa9 9000 mul $AX0.L, $AX0.H + // 0aaa 9400 mulac $AX0.L, $AX0.H, $ACC0 + // 0aab 1404 lsl $ACC0, #4 + ACC0 = (*0x0430 + (*0x0402 * 0x50)) << 4; + + // 0aac 1ffe mrr $AC1.M, $AC0.M + ACC1 = ACC0 & 0xFFFF0000; + + // 0aad 0083 0580 lri $AR3, #0x0580 + // 0aaf 02bf 0ab3 call 0x0ab3 // 0ab3_Decoder0x21Core + 0ab3_Decoder0x21Core(AC1.M, AR3=#0x0580); + + // 0ab1 029f 02d0 jmp 0x02d0 + GOTO Resample_From0580To0520: +} + +// 0x21 Decoder Core +// Decoder 0x21 simply streams raw audio from RAM (not ARAM!) by using DMA. +// Lots of buffer wrap trickery etc but no actual decoding. +void 0ab3_Decoder0x21Core(AC1.M, AR3) { + // 0ab3 0092 0004 lri $CR, #0x0004 + // 0ab5 8100 clr $ACC0 + // 0ab6 263a lrs $AC0.M, @0x003a + // 0ab7 243b lrs $AC0.L, @0x003b + // 0ab8 1f1f mrr $AX0.L, $AC1.M + // 0ab9 0a00 lris $AX0.H, #0x00 + // 0aba 5800 subax $ACC0, $AX0 + ACC0 = [0x043a,0x043b]; + ACC0 -= AC1.M; + + + // 0abb 0292 0ad1 jg 0x0ad1 + if ([0x043a,0x043b] <= AC1.M) { + // Happens when sound has finished playing? + + // 0abd 8900 clr $ACC1 + // 0abe 00c0 043b lr $AR0, @0x043b + ACC1 = 0; + AR0 = *0x043b; + + // 0ac0 02bf 0af6 call 0x0af6 // 0af6_Decoder0x21_MoreStuff() + 0af6_Decoder0x21_MoreStuff(AR0=*0x043b, AR3); + + // 0ac2 8100 clr $ACC0 + // 0ac3 1fd8 mrr $AC0.M, $AX0.L + // 0ac4 223b lrs $AX0.H, @0x003b + // 0ac5 5400 subr $ACC0, $AX0.H + // 0ac6 0007 dar $AR3 + // 0ac7 1979 lrri $AX1.L, @$AR3 + + ACC0 = 0; + AX0.H = *0x043b; + AC0.M = AX0.L - *0x043b; + + AX1.L = *$AR3; + + // Looks like duplication of the first memory address AC0.M times + + // 0ac8 005e loop $AC0.M + for(int i = 0; i < AC0.M; i++) { + // 0ac9 1b79 srri @$AR3, $AX1.L + *$AR3++ = AX1.L; + } + + // 0aca 0f01 lris $AC1.M, #0x01 + // 0acb 2f01 srs @0x0001, $AC1.M + // 0acc 8900 clr $ACC1 + // 0acd 2f3b srs @0x003b, $AC1.M + + ACC1 = 0; + + // Looks like some finalization of the PB + *0x0401 = 1; // KeyOff + *0x043b = 0; // RemLength + + + 0ace 0092 00ff lri $CR, #0x00ff + //0ad0 02df ret + return; + } + + // 0ad1 2e3a srs @0x003a, $AC0.M + // 0ad2 2c3b srs @0x003b, $AC0.L + + *0x043a = AC0.M; + *0x043b = AC0.L; + + // 0ad3 8100 clr $ACC0 + // 0ad4 8900 clr $ACC1 + // 0ad5 268a lrs $AC0.M, @0xff8a + // 0ad6 2734 lrs $AC1.M, @0x0034 + + ACC0 = 0; + ACC1 = 0; + AC0.M = *0x048a; + AC1.M = *0x0434; + + // 0ad7 5c00 sub $ACC0, $ACC1 + // 0ad8 2e36 srs @0x0036, $AC0.M + + ACC0 -= AC1.L; + *0x0436 = (ACC0 & 0xFFFF0000) >> 16; + + // 0ad9 5000 subr $ACC0, $AX0.L + ACC0 -= AX0.L; + + 0ada 0290 0af0 jge 0x0af0 + if (ACC0 < 0) { + // 0adc 00c0 0436 lr $AR0, @0x0436 + // 0ade 02bf 0af6 call 0x0af6 + 0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3); + + // 0ae0 8100 clr $ACC0 + // 0ae1 1fd8 mrr $AC0.M, $AX0.L + + ACC0 = 0; + AC0.M = AX0.L; + + // 0ae2 2236 lrs $AX0.H, @0x0036 // 0x0436 + AX0.H = *0x0436; + + // 0ae3 5400 subr $ACC0, $AX0.H + // 0ae4 1c1e mrr $AR0, $AC0.M + // 0ae5 8100 clr $ACC0 + // 0ae6 2e34 srs @0x0034, $AC0.M + + ACC0 -= AX0.H; + AR0 = (ACC0 & 0xFFFF0000) >> 16; + ACC0 = 0; + *0x0434 = 0; + + // 0ae7 2688 lrs $AC0.M, @0xff88 // 0x0488 + // 0ae8 2489 lrs $AC0.L, @0xff89 // 0x0489 + // 0ae9 2e8c srs @0xff8c, $AC0.M + // 0aea 2c8d srs @0xff8d, $AC0.L + + *0x048c = *0x0488; + *0x048d = *0x0489; + + // 0aeb 02bf 0af6 call 0x0af6 + 0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3); + + 0aed 0092 00ff lri $CR, #0x00ff + // 0aef 02df ret + return; + } + + // 0af0 1c18 mrr $AR0, $AX0.L + // 0af1 02bf 0af6 call 0x0af6 + + AR0 = AX0.L; + 0af6_Decoder0x21_MoreStuff(AR0=AX0.L, AR3); + + 0af3 0092 00ff lri $CR, #0x00ff + // 0af5 02df ret +} + + + +// CR = 0x4 +// Does strange stuff with PB[0x34] and the address PB[0x8c,d] +// Does not touch AX0.L +void 0af6_Decoder0x21_MoreStuff($AR0, $AR3) { + // 0af6 8100 clr $ACC0 + // 0af7 1fc0 mrr $AC0.M, $AR0 + // 0af8 b100 tst $ACC0 + // 0af9 02d5 retz + if (!AR0) + return; + + // 0afa 8900 clr $ACC1 + // 0afb 2734 lrs $AC1.M, @0x0034 + // 0afc 0340 0001 andi $AC1.M, #0x0001 + // 0afe 0b00 lris $AX1.H, #0x00 + // 0aff 1f3f mrr $AX1.L, $AC1.M + + AX1.L = *0x0434 & 1; + + // 0b00 268c lrs $AC0.M, @0xff8c + // 0b01 248d lrs $AC0.L, @0xff8d + // 0b02 8900 clr $ACC1 + // 0b03 2534 lrs $AC1.L, @0x0034 + // 0b04 1501 lsl $ACC1, #1 + // 0b05 4c00 add $ACC0, $ACC1 + + // 0b06 5a00 subax $ACC0, $AX1 + // 0b07 5a00 subax $ACC0, $AX1 + + ACC0 = [8c,8d] + *0x0434 * 2 - ((*0x0434 & 1) * 2); + + // 0b08 1c20 mrr $AR1, $AR0 + + AR1 = AR0; + + // 0b09 1fe0 mrr $AC1.M, $AR0 + // 0b0a 0502 addis $ACC1, #0x02 + ACC1 = ($AR0 << 16) + 0x20000; + + // + // 0b0b 1c1f mrr $AR0, $AC1.M + // 0b0c 009f 0b00 lri $AC1.M, #0x0b00 + 0b0e 0092 00ff lri $CR, #0x00ff + + AR0 = AC1.M; + AC1.M = 0x0b00; + + // Load more audio from RAM by DMA?? + + // 0b10 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM + 0525_CopyRAMtoDMEM($AR1 == $ACC1 >> 16, 0x0b00, $AR0) + + // 0b12 0092 0004 lri $CR, #0x0004 + + // 0b14 2734 lrs $AC1.M, @0x0034 + // 0b15 1f61 mrr $AX1.H, $AR1 + // 0b16 4700 addr $ACC1, $AX1.H + // 0b17 2f34 srs @0x0034, $AC1.M + *0x0434 += AR1; + + // 0b18 0080 0b00 lri $AR0, #0x0b00 + // 0b1a 8900 clr $ACC1 + // 0b1b 1ff9 mrr $AC1.M, $AX1.L + // 0b1c b900 tst $ACC1 + // 0b1d 0274 ifnz + if (AX1.L) { + // 0b1e 0008 iar $AR0 + $AR0++; + } + // 0b1f 8900 clr $ACC1 + // 0b20 1fe1 mrr $AC1.M, $AR1 + // 0b21 191e lrri $AC0.M, @$AR0 + // 0b22 0701 cmpis $ACC1, #0x01 + ACC1 = 0; + AC1.M = AR1; + AC0.M = *$AR0++; + // 0b23 0293 0b2c jle 0x0b2c + if (AC1.M > 1) { + // 0b25 191a lrri $AX0.H, @$AR0 + // 0b26 05fe addis $ACC1, #0xfe + AX0.H = *$AR0++; + ACC1 += 0xfe0000; + + // 0b27 005f loop $AC1.M + for(int i = 0; i < AC1.M; i++) { + // 0b28 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + AC0.L = 0; + AC0.H = AX0.H; + AC0.M = AX0.H; + AX0.H = *$AR0++; + *$AR3++ = AC0.M; + } + //0b29 1b7e srri @$AR3, $AC0.M + //0b2a 1b7a srri @$AR3, $AX0.H + //0b2b 02df ret + + *$AR3++ = AC0.M; + *$AR3++ = AX0.H; + } else { + //0b2c 1b7e srri @$AR3, $AC0.M + //0b2d 02df ret + *$AR3++ = AC0.M; + } +} + + +void 0b2e_Unk_Multiply() { // ZWW: 01c2_Unk + 0b2e 8a00 m2 + 0b2f 0083 03e8 lri $AR3, #0x03e8 + 0b31 191e lrri $AC0.M, @$AR0 + 0b32 191a lrri $AX0.H, @$AR0 + 0b33 1006 loopi #0x06 + 0b34 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0b35 1b7e srri @$AR3, $AC0.M + 0b36 1b7a srri @$AR3, $AX0.H + 0b37 0080 03e8 lri $AR0, #0x03e8 + 0b39 0088 0007 lri $WR0, #0x0007 + 0b3b 1150 0b48 bloopi #0x50, 0x0b48 + for (int i = 0; i < 0x50; i++) { + 0b3d 1c61 mrr $AR3, $AR1 + 0b3e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0b3f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b40 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b41 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b42 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b43 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b44 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b45 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b46 f200 madd $AX0.L, $AX0.H + 0b47 fe00 movpz $ACC0 + 0b48 1b3e srri @$AR1, $AC0.M + } + 0b49 0088 ffff lri $WR0, #0xffff + 0b4b 8b00 m0 + 0b4c 02df ret +} + +// looks kind of like a IIR filter? +// Hardcoded buffer length = 0x50 +void 0b4d_IIR_Filter(InBuffer($AR0), OutBuffer($AR1), FilterLength(AC1.M)) { + 0b4d 8a00 m2 + 0b4e 05fe addis $ACC1, #0xfe + 0b4f 0083 03e8 lri $AR3, #0x03e8 + 0b51 191e lrri $AC0.M, @$AR0 + 0b52 191a lrri $AX0.H, @$AR0 + 0b53 005f loop $AC1.M + 0b54 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + + 0b55 1b7e srri @$AR3, $AC0.M + 0b56 1b7a srri @$AR3, $AX0.H + 0b57 0080 03e8 lri $AR0, #0x03e8 + 0b59 0501 addis $ACC1, #0x01 + 0b5a 1d1f mrr $WR0, $AC1.M + // 0b5b 1150 0b63 bloopi #0x50, 0x0b63 + for (int i = 0; i < 0x50; i++) { + 0b5d 1c61 mrr $AR3, $AR1 + 0b5e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0b5f 005f loop $AC1.M + 0b60 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0b61 f200 madd $AX0.L, $AX0.H + 0b62 fe00 movpz $ACC0 + 0b63 1b3e srri @$AR1, $AC0.M + } + 0b64 0088 ffff lri $WR0, #0xffff + 0b66 8b00 m0 + 0b67 02df ret +} + +// Looks like a 4-tap FIR filter. +// Hardcoded buffer length = 0x50 +// Uses 0x03e8 as some scratch space, i think . +void 0b68_4TapFIR(InBuffer($AR2), FilterBuffer($AR0), OutBuffer($AR1)) { + 0b68 0083 03e8 lri $AR3, #0x03e8 + 0b6a 191e lrri $AC0.M, @$AR0 + 0b6b 191a lrri $AX0.H, @$AR0 + 0b6c 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0b6d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0b6e 1b7e srri @$AR3, $AC0.M + 0b6f 1b7a srri @$AR3, $AX0.H + 0b70 0080 03e8 lri $AR0, #0x03e8 + 0b72 0088 0003 lri $WR0, #0x0003 // That's a short wrap - filter coefs? + 0b74 0085 0000 lri $IX1, #0x0000 + 0b76 0087 0000 lri $IX3, #0x0000 + 0b78 1fc2 mrr $AC0.M, $AR2 + 0b79 195b lrri $AX1.H, @$AR2 + 0b7a 1959 lrri $AX1.L, @$AR2 + 0b7b 195f lrri $AC1.M, @$AR2 + 0b7c 195a lrri $AX0.H, @$AR2 + 0b7d 1c5e mrr $AR2, $AC0.M + 0b7e 1fda mrr $AC0.M, $AX0.H + 0b7f 1c61 mrr $AR3, $AR1 + 0b80 8a00 m2 + 0b81 8f00 set40 + 0b82 191a lrri $AX0.H, @$AR0 + 0b83 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0b84 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0b85 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0b86 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0b87 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0b88 1127 0b93 bloopi #0x27, 0x0b93 + for (int i = 0; i < 0x27; i++) { + 0b8a e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M // end of first iteration + + 0b8b 197e lrri $AC0.M, @$AR3 + 0b8c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0b8d eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0b8e bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0b8f e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M // e + + 0b90 197f lrri $AC1.M, @$AR3 // start of first iteration + 0b91 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0b92 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0b93 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + } + 0b94 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0b95 197e lrri $AC0.M, @$AR3 + 0b96 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0b97 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0b98 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 0b99 1bff srrn @$AR3, $AC1.M + 0b9a 197f lrri $AC1.M, @$AR3 + 0b9b 8e00 set16 + 0b9c 8b00 m0 + 0b9d 0088 ffff lri $WR0, #0xffff + 0b9f 1b5b srri @$AR2, $AX1.H + 0ba0 1b59 srri @$AR2, $AX1.L + 0ba1 1b5f srri @$AR2, $AC1.M + 0ba2 1b5e srri @$AR2, $AC0.M + 0ba3 02df ret +} + +// Fixed length 0x50. +void 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) { + 0ba4 0083 03e8 lri $AR3, #0x03e8 + + // Load 4 parameters from *$AR0, copy them into the tiny ring buffer + // later handled by $AR0/$WR0 (filter state?) + 0ba6 191e lrri $AC0.M, @$AR0 + 0ba7 191a lrri $AX0.H, @$AR0 + 0ba8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0ba9 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0baa 1b7e srri @$AR3, $AC0.M + 0bab 1b7a srri @$AR3, $AX0.H + 0bac 0080 03e8 lri $AR0, #0x03e8 + 0bae 0088 0003 lri $WR0, #0x0003 // That's a short wrap - filter coefs? + 0bb0 0085 0000 lri $IX1, #0x0000 + 0bb2 0087 0000 lri $IX3, #0x0000 + + // Load more parameters from *$AR2 + 0bb4 1fc2 mrr $AC0.M, $AR2 + 0bb5 195b lrri $AX1.H, @$AR2 + 0bb6 1959 lrri $AX1.L, @$AR2 + 0bb7 195f lrri $AC1.M, @$AR2 + 0bb8 195a lrri $AX0.H, @$AR2 + + 0bb9 1c5e mrr $AR2, $AC0.M + 0bba 1fda mrr $AC0.M, $AX0.H + + // Setup AR3, now ready to read in data. + 0bbb 1c61 mrr $AR3, $AR1 + 0bbc 8a00 m2 + 0bbd 8f00 set40 + + // Start the pipeline + 0bbe 191a lrri $AX0.H, @$AR0 + 0bbf b800 mulx $AX0.H, $AX1.H + 0bc0 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0bc1 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0bc2 ea00 maddc $AC1.M, $AX1.L + 0bc3 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0bc4 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0bc5 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0bc6 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + + 0bc7 1127 0bd8 bloopi #0x27, 0x0bd8 + // (half of 0x50) - 1, -1 due to the software pipelining. + for (int i = 0; i < 0x27; i++) { + 0bc9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0bca e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + + 0bcb 197e lrri $AC0.M, @$AR3 + 0bcc e800 maddc $AC0.M, $AX1.L + 0bcd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0bce ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0bcf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0bd0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0bd1 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0bd2 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + + 0bd3 197f lrri $AC1.M, @$AR3 + 0bd4 ea00 maddc $AC1.M, $AX1.L + 0bd5 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0bd6 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0bd7 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0bd8 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + } + 0bd9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0bda e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + + 0bdb 197e lrri $AC0.M, @$AR3 + 0bdc e800 maddc $AC0.M, $AX1.L + 0bdd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0bde ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0bdf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0be0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0be1 1bff srrn @$AR3, $AC1.M + + 0be2 197f lrri $AC1.M, @$AR3 + 0be3 8e00 set16 + 0be4 8b00 m0 + 0be5 0088 ffff lri $WR0, #0xffff + 0be7 1b5b srri @$AR2, $AX1.H + 0be8 1b59 srri @$AR2, $AX1.L + 0be9 1b5f srri @$AR2, $AC1.M + 0bea 1b5e srri @$AR2, $AC0.M + // 0beb 02df ret +} + +void 0bec_Unk() { + // 0bec 0eff lris $AC0.M, #0xff + // 0bed 00fe 03f2 sr @0x03f2, $AC0.M + *0x03f2 = 0xFF + + // 0bef 8100 clr $ACC0 + // 0bf0 00fe 03f0 sr @0x03f0, $AC0.M + // 0bf2 00fe 03f6 sr @0x03f6, $AC0.M + *0x03f0 = 0x00 + *0x03f6 = 0x00 + + // 0bf4 009e 0100 lri $AC0.M, #0x0100 + // 0bf6 00fe 03f7 sr @0x03f7, $AC0.M + *0x03f7 = 0x100 + + 0bf8 00da 03f7 lr $AX0.H, @0x03f7 + 0bfa 009e 8000 lri $AC0.M, #0x8000 + 0bfc 5400 subr $ACC0, $AX0.H + 0bfd 00fe 03f5 sr @0x03f5, $AC0.M + + // 0bff 0e30 lris $AC0.M, #0x30 + // 0c00 00fe 03f3 sr @0x03f3, $AC0.M + *0x03f3 = 0x0030 + + // 0c02 0e10 lris $AC0.M, #0x10 + // 0c03 00fe 03f4 sr @0x03f4, $AC0.M + *0x03f5 = 0x0010 + + // 0c05 009e 0096 lri $AC0.M, #0x0096 + // 0c07 00fe 03f1 sr @0x03f1, $AC0.M + *0x03f1 = 0x0096 + + // 0c09 02df ret +} + +void 0c0a_Unk() { + // 0c0a 0080 0a00 lri $AR0, #0x0a00 + // 0c0c 8100 clr $ACC0 + // 0c0d 00de 03f0 lr $AC0.M, @0x03f0 + // 0c0f 8900 clr $ACC1 + // 0c10 b100 tst $ACC0 + + // 0c11 0275 ifz + // 0c12 0550 addis $ACC1, #0x50 + $AC0.M = *(0x03f0); + if (*(0x03f0) == 0) { + $ACC1 = 0x50 << 16; + } + // 0c13 00ff 03f0 sr @0x03f0, $AC1.M + *(0x03f0) = $ACC1; + + // 0c15 0200 0a60 addi $AC0.M, #0x0a60 + // 0c17 1c7e mrr $AR3, $AC0.M + // 0c18 0f4e lris $AC1.M, #0x4e + + $AC0.M += 0xa60; + $AR3 = $AC0.M + $AC1.M = 0x4e; + + // 0c19 02bf 00da call 0x00da + 00da_CopyBuffer(src=0x0a00, dst=$AC0.M, #0x4e) + + // 0c1b 02df ret +} + +// The control flow of this thing is NOT easy ... +// Reads from buffer at 0x0a60 +// Writes to buffer at 0x0a00 +void 0c1c_ComputeReverbFrom0a60To0a00() +{ + // 0c1c 00de 03f1 lr $AC0.M, @0x03f1 + // 0c1e 0200 0a60 addi $AC0.M, #0x0a60 + // 0c20 1c7e mrr $AR3, $AC0.M + $AR3 = 0x0a60 + *(0x03f1); + + 0c21 8100 clr $ACC0 + 0c22 8900 clr $ACC1 + 0c23 009f 00a0 lri $AC1.M, #0x00a0 + 0c25 00de 03f1 lr $AC0.M, @0x03f1 + 0c27 5d00 sub $ACC1, $ACC0 + 0c28 0e50 lris $AC0.M, #0x50 + 0c29 0750 cmpis $ACC1, #0x50 + 0c2a 0270 ifge + 0c2b 5d00 sub $ACC1, $ACC0 + 0c2c 00da 03f2 lr $AX0.H, @0x03f2 + 0c2e 8600 tstaxh $AX0.H + 0c2f 0290 0c4d jge 0x0c4d + 0c31 00de 03f3 lr $AC0.M, @0x03f3 + 0c33 5c00 sub $ACC0, $ACC1 + 0c34 0293 0c38 jle 0x0c38 + 0c36 029f 0c52 jmp 0x0c52 // done: + + 0c38 00db 03f7 lr $AX1.H, @0x03f7 + 0c3a 009e 8000 lri $AC0.M, #0x8000 + 0c3c 4600 addr $ACC0, $AX1.H + 0c3d 029f 0c44 jmp 0x0c44 + + 0c3f 00db 03f7 lr $AX1.H, @0x03f7 + 0c41 009e 8000 lri $AC0.M, #0x8000 + 0c43 5600 subr $ACC0, $AX1.H + + 0c44 00fe 03f5 sr @0x03f5, $AC0.M + 0c46 1fda mrr $AC0.M, $AX0.H + 0c47 7c00 neg $ACC0 + 0c48 1f5e mrr $AX0.H, $AC0.M + 0c49 00fe 03f2 sr @0x03f2, $AC0.M + 0c4b 029f 0c52 jmp 0x0c52 // done: + + 0c4d 00de 03f4 lr $AC0.M, @0x03f4 + 0c4f 5d00 sub $ACC1, $ACC0 + 0c50 0293 0c3f jle 0x0c3f + +done: + 0c52 8900 clr $ACC1 + 0c53 00dd 03f5 lr $AC1.L, @0x03f5 + 0c55 1501 lsl $ACC1, #1 + 0c56 8100 clr $ACC0 + 0c57 00dc 03f6 lr $AC0.L, @0x03f6 + 0c59 008b 009f lri $WR3, #0x009f // 0xa0 wrap + 0c5b 0080 0a00 lri $AR0, #0x0a00 + 0c5d 0900 lris $AX1.L, #0x00 + + // This is the loop that used to go crazy in the LLE emulation + // before we fixed addarn to obey the wrapping register. + + // Feels like some crazy delay function with a slowly drifting delay time. + + // Could this be part of a reverb? Or just a flanger? + + // 0c5e 1150 0c65 bloopi #0x50, 0x0c65 + for (int i = 0; i < 0x50; i++) { + 0c60 1878 lrr $AX0.L, @$AR3 + 0c61 4c00 add $ACC0, $ACC1 + 0c62 1cfe mrr $IX3, $AC0.M + 0c63 001f addarn $AR3, $IX3 + 0c64 1fd9 mrr $AC0.M, $AX1.L + 0c65 1b18 srri @$AR0, $AX0.L + + $AX0.L = *AR3; + $ACC0 += $ACC1; + $IX3 = $AC0.M; + $AR3 += $IX3; + $AC0.M = $AX1.L; + *(AR0++) = $AX0.L; + } + + 0c66 009f 0a60 lri $AC1.M, #0x0a60 + 0c68 1fc3 mrr $AC0.M, $AR3 + 0c69 5c00 sub $ACC0, $ACC1 + 0c6a 00fe 03f1 sr @0x03f1, $AC0.M + 0c6c 00fc 03f6 sr @0x03f6, $AC0.L + 0c6e 008b ffff lri $WR3, #0xffff // restore wrap + // 0c70 02df ret +} + + +void 0c71_AddBufferA00ToD60AndD00() +{ + // 0c71 0f50 lris $AC1.M, #0x50 + // 0c72 0080 0a00 lri $AR0, #0x0a00 + // 0c74 0083 0d60 lri $AR3, #0x0d60 + // 0c76 0098 3fff lri $AX0.L, #0x3fff + // 0c78 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(0x0a00, 0x0d60, 0x50, 0x3fff) + + // 0c7a 0f50 lris $AC1.M, #0x50 + // 0c7b 0080 0a00 lri $AR0, #0x0a00 + // 0c7d 0083 0d00 lri $AR3, #0x0d00 + // 0c7f 0098 3fff lri $AX0.L, #0x3fff + // 0c81 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(0x0a00, 0x0d00, 0x50, 0x3fff) + + // 0c83 02df ret +} + +void 0c84_FilterBufferInPlace(_sampleAddr($AR0), multiplier($AX0.H)) +{ + // 0c84 8a00 m2 + // 0c85 8f00 set40 + // 0c86 8100 clr $ACC0 + // 0c87 00de 0404 lr $AC0.M, @0x0404 + // 0c89 b100 tst $ACC0 + // 0c8a 0295 0c91 jz 0x0c91 + if (*(0x0404)) { + // 0c8c 8100 clr $ACC0 + // 0c8d 00fe 0478 sr @0x0478, $AC0.M + // 0c8f 00fe 0479 sr @0x0479, $AC0.M + *0x0478 = 0; + *0x0479 = 0; + } + // 0c91 00df 0479 lr $AC1.M, @0x0479 + // 0c93 00db 0478 lr $AX1.H, @0x0478 + // 0c95 0900 lris $AX1.L, #0x00 + // 0c96 0084 0000 lri $IX0, #0x0000 + // 0c98 1150 0ca1 bloopi #0x50, 0x0ca1 + $AC1.M = *0x0479; + $AX1.H = *0x0478; + + // ACC1 always contains the value from the previous iteration. + for (int i = 0; i < 0x50; i++) { + // 0c9a 199e lrrn $AC0.M, @$AR0 + // 0c9b 5c7c sub'ln $ACC0, $ACC1 : $AC1.M, @$AR0 + // 0c9c c000 mulc $AC0.M, $AX0.H // Where does AX0.H get set? + // 0c9d 6e00 movp $ACC0 + // 0c9e 1488 asl $ACC0, #8 + // 0c9f 4a00 addax $ACC0, $AX1 + // 0ca0 1b1e srri @$AR0, $AC0.M + // 0ca1 1f7e mrr $AX1.H, $AC0.M + *$AC0.M = *$AR0; + $ACC0 -= $ACC1; + ( $AC1.M = *AR0; ) + $ACC0 = ($AC0.M * $AX0.H * 2 << 8) + ($AX1.L); + *($AR0++) = $AC0.M; + $AX1.H = $AC0.M; + + // Write back + 0ca2 00fb 0478 sr @0x0478, $AX1.H + 0ca4 00ff 0479 sr @0x0479, $AC1.M + + // 0ca6 8b00 m0 + // 0ca7 8e00 set16 + // 0ca8 02df ret +} + +// Called from both volume handlers. +// ACC1 is volume, AX is volume delta. +void 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), Delta($AX0), InBuffer($AR0), Buffer($AR3)) { + // 0ca9 b900 tst $ACC1 + // 0caa 0294 0caf jnz 0x0caf + if (!ACC1) { + // 0cac 6800 movax $ACC0, $AX0.L + // 0cad b100 tst $ACC0 + // 0cae 02d5 retz + if (!AX0.L) + // If incoming volume is zero and ramp delta is zero, + // not really much point to do anything. + return + } + 0caf 1c23 mrr $AR1, $AR3 + 0cb0 197e lrri $AC0.M, @$AR3 + + // This is another heavily software pipelined loop, so it's very confusing. + // See the docs for mulc and mulcac if you want to have any hope of understanding it. + // + // Produce the first result, so it's ready in the prod register. + 0cb1 191b lrri $AX1.H, @$AR0 + 0cb2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + + // 0cb3 1120 0cb9 bloopi #0x20, 0x0cb9 + for (int i = 0; i < 0x20; i++) { + 0cb5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0cb6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + + 0cb7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0cb8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M // Store 1 + + // Walk the ramp. Somewhat odd that it's done only every 2 samples. + 0cb9 4900 addax $ACC1, $AX0 + } + + // 0cba 1108 0cbf bloopi #0x08, 0x0cbf + for (int i = 0; i < 0x8; i++) { + 0cbc dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0cbd 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + + 0cbe dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0cbf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + } + + // NOTE - The above two loops are very similar and the sum of their lengths is + // 0x28 - which is half of 0x50. And each does two loads and two stores, so together + // it's 50. Just strange that the addax is missing in the second loop. + + // It looks like we're dealing with crappy volume ramping - the delta is computed using + // (vol2 - vol1) >> 5! That's why it can only ramp the volume the first 64 (0x20 * 2) samples! + + 0cc0 02df ret +} + + +// What a strange filter .. ORR? +void 0cc1_StrangeORRFilter(_pBuffer(AR3)) +{ + 0cc1 8f00 set40 + 0cc2 8d00 set15 // X multiplications unsigned + 0cc3 1c03 mrr $AR0, $AR3 + 0cc4 00d9 038e lr $AX1.L, @0x038e + 0cc6 0b04 lris $AX1.H, #0x04 + + // pipeline starts here. + 0cc7 197a lrri $AX0.H, @$AR3 + 0cc8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 + 0cc9 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0cca 1128 0ccf bloopi #0x28, 0x0ccf + 0ccc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0ccd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0cce 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0ccf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0cd0 8c00 clr15 + 0cd1 8e00 set16 + + // 0cd2 02df ret +} + + +// called from sync frame if (*0x042c != 0) +// That is, if volume mode != 0. +// It first seems to compute a lot of parameters and store them at 0x0b00 forwards. +// Then it uses those as input for the usual (ramped?) mixes. +void 0cd3_VolumeMixer1() +{ + // 0cd3 00da 0485 lr $AX0.H, @0x0485 + // 0cd5 8600 tstaxh $AX0.H + // 0cd6 0295 0ce5 jz 0x0ce5 + if (*0x0485 != 0) { + // 0cd8 8100 clr $ACC0 + // 0cd9 00de 042a lr $AC0.M, @0x042a + // 0cdb 147f lsr $ACC0, #-1 + // 0cdc 00fe 042b sr @0x042b, $AC0.M + *(0x042b) = *(0x042a) >> 1; + + // 0cde b100 tst $ACC0 + // 0cdf 0294 0ce5 jnz 0x0ce5 + if (*0x042b == 0) { + // 0ce1 009a 0001 lri $AX0.H, #0x0001 + // 0ce3 00fa 0401 sr @0x0401, $AX0.H + *(0x0401) = 1; // KeyOff + } + } + + // 0ce5 8f00 set40 + // 0ce6 8100 clr $ACC0 + // 0ce7 00de 0428 lr $AC0.M, @0x0428 + // 0ce9 1478 lsr $ACC0, #-8 + (ACC0 = *(0x0428) << 8); + + // 0cea 00df 0428 lr $AC1.M, @0x0428 + // 0cec 0340 007f andi $AC1.M, #0x007f + // 0cee 1f1e mrr $AX0.L, $AC0.M + // 0cef 1f5f mrr $AX0.H, $AC1.M + // 0cf0 0220 007f xori $ACC0, #0x007f + // 0cf2 1f3e mrr $AX1.L, $AC0.M + // 0cf3 0320 007f xori $ACC1, #0x007f + // 0cf5 1f7f mrr $AX1.H, $AC1.M + AX0.L = *(0x0428) >> 8; + AX0.H = *(0x0428) & 0x7F; + AX1.L = AX0.L ^ 0x7f; + AX1.H = AX1.H ^ 0x7f; + + // 0cf6 8100 clr $ACC0 + // 0cf7 8900 clr $ACC1 + // 0cf8 009f 0200 lri $AC1.M, #0x0200 + + // 0cfa 1fd8 mrr $AC0.M, $AX0.L + // 0cfb 4c00 add $ACC0, $ACC1 # broken disasm? this doesn't make much sense. + // 0cfc 1c1e mrr $AR0, $AC0.M + // 0cfd 1818 lrr $AX0.L, @$AR0 + AR0 = AX0.L + 0x0200; + AX0.L = *AR0; + + // 0cfe 1fda mrr $AC0.M, $AX0.H + // 0cff 4c00 add $ACC0, $ACC1 + // 0d00 1c1e mrr $AR0, $AC0.M + // 0d01 181a lrr $AX0.H, @$AR0 + AR0 = AX0.H + 0x200; + AX0.H = *AR0; + + // 0d02 1fd9 mrr $AC0.M, $AX1.L + // 0d03 4c00 add $ACC0, $ACC1 + // 0d04 1c1e mrr $AR0, $AC0.M + // 0d05 1819 lrr $AX1.L, @$AR0 + AR0 = AX1.L + 0x200; + AX1.L = *AR0 + + // 0d06 1fdb mrr $AC0.M, $AX1.H + // 0d07 4c00 add $ACC0, $ACC1 + // 0d08 1c1e mrr $AR0, $AC0.M + // 0d09 181b lrr $AX1.H, @$AR0 + AR0 = AX1.H + 0x200; + AX1.H = *AR0; + + // 0d0a 0080 0b00 lri $AR0, #0x0b00 + // 0d0c 9800 mul $AX1.L, $AX1.H + // 0d0d ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + // 0d0e b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + // 0d0f 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M + // 0d10 6e30 movp's $ACC0 : @$AR0, $AC0.M + // 0d11 1b1e srri @$AR0, $AC0.M + + // The above is heavily "sw-pipelined" but I think it turns into: + $AR0 = 0x0b00; + *$AR0++ = AX1.L * AX1.H; + *$AR0++ = AX0.L * AX1.H; + *$AR0++ = AX0.H * AX1.L; + *$AR0++ = AX0.L * AX0.H; + + // 0d12 0080 0b00 lri $AR0, #0x0b00 + // 0d14 0081 0b04 lri $AR1, #0x0b04 + // 0d16 00da 042a lr $AX0.H, @0x042a + // 0d18 02bf 0d62 call 0x0d62 // some tricky multiplication + 0d62_Mul4ByAX0H(0x0b00, 0x0b04, *(0x042a)); + + // 0d1a 0081 0b08 lri $AR1, #0x0b08 + // 0d1c 0080 0b04 lri $AR0, #0x0b04 + // 0d1e 00da 042a lr $AX0.H, @0x042a // interesting + // 0d20 00de 0429 lr $AC0.M, @0x0429 // interesting + // 0d22 c000 mulc $AC0.M, $AX0.H + // 0d23 6e00 movp $ACC0 + // 0d24 1481 asl $ACC0, #1 + // 0d25 1f5e mrr $AX0.H, $AC0.M + + 0d62_Mul4ByAX0H(0x0b00, 0x0b04, (*(0x042a) * *(0x0429) << 1) >> 16); + // 0d26 02bf 0d62 call 0x0d62 // some tricky multiplication + + // 0d28 0080 0b00 lri $AR0, #0x0b00 + // 0d2a 0081 0b0c lri $AR1, #0x0b0c + // 0d2c 8100 clr $ACC0 + // 0d2d 8900 clr $ACC1 + // 0d2e 00de 042b lr $AC0.M, @0x042b // interesting + // 0d30 00df 042a lr $AC1.M, @0x042a // interesting + // 0d32 00fe 042a sr @0x042a, $AC0.M + *(0x042a) = *(0x042b); + + // 0d34 5c00 sub $ACC0, $ACC1 + // 0d35 1f5e mrr $AX0.H, $AC0.M + // 0d36 02bf 0d6b call 0x0d6b // some other tricky multiplication + 0d6b_Mul4ByAC0M_Unsigned(0xb00, 0x0b0c, $AC0.M(*(0x042a) - *(0x042b))) // does not touch AX0.H + + // 0d38 0080 0b0c lri $AR0, #0x0b0c + // 0d3a 0081 0b10 lri $AR1, #0x0b10 + // 0d3c 00da 0429 lr $AX0.H, @0x0429 // interesting + 0d3e 02bf 0d62 call 0x0d62 // some tricky multiplication + 0d62_Mul4ByAX0H(0x0b0c, 0x0b10, *(0x0429)); + + // 0d40 0081 0b04 lri $AR1, #0x0b04 + // 0d42 0082 0b0c lri $AR2, #0x0b0c + // 0d44 0083 0d77 lri $AR3, #0x0d77 + + // So basically the below loop is: + // For i in 0 to 8: + // Call 0ca9_RampedMultiplyAddBuffer($AR0 = *0x038f, $AR3=0x0d77[i], AX0=0xb0c[i]<<11, AC1.M=0x0b04[i]) + + // 0d46 1108 0d5f bloopi #0x08, 0x0d5f + for (int i = 0; i < 8; i++) { + // 0d48 195f lrri $AC1.M, @$AR2 + // 0d49 15fb asr $ACC1, #-5 + // 0d4a 1f1d mrr $AX0.L, $AC1.L + // 0d4b 1f5f mrr $AX0.H, $AC1.M + // Compute volume delta + AX0 = *AR2++ << 11; + + // 0d4c 193f lrri $AC1.M, @$AR1 + AC1.M = *AR1++; + + // 0d4d 00e1 0b24 sr @0x0b24, $AR1 + // 0d4f 00e2 0b25 sr @0x0b25, $AR2 + // 0d51 021b ilrri $AC0.M, @$AR3 // Buffer address table lookup (see below) + // 0d52 00e3 0b26 sr @0x0b26, $AR3 + (Stash AR1, AR2, AR3) + // 0d54 1c7e mrr $AR3, $AC0.M + // 0d55 00c0 038f lr $AR0, @0x038f + // 0d57 02bf 0ca9 call 0x0ca9 + 0ca9_RampedMultiplyAddBuffer(Volume($ACC1), Delta($AX0), InBuffer($AR0), Buffer($AR3)) + + // 0d59 00c1 0b24 lr $AR1, @0x0b24 + // 0d5b 00c2 0b25 lr $AR2, @0x0b25 + // 0d5d 00c3 0b26 lr $AR3, @0x0b26 + (Restore AR1, AR2, AR3) + 0d5f 0000 nop + } + + // 0d60 8e00 set16 + // 0d61 02df ret +} + +void 0d62_Mul4ByAX0H(in_buffer($AR0), out_buffer($AR1), multiplicand($AX0.H)) { + // 0d62 191f lrri $AC1.M, @$AR0 + // 0d63 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 + // 0d64 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 + // 0d65 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + // 0d66 191f lrri $AC1.M, @$AR0 + // 0d67 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + // 0d68 6e31 movp's $ACC0 : @$AR1, $AC0.M + // 0d69 1b3e srri @$AR1, $AC0.M + // 0d6a 02df ret + // The above is a crazy sw-pipelined way to write: + for (int i = 0; i < 4; i++) { + out_buffer[i] = (s16)in_buffer[i] * (s16)multiplicand >> 16; + } +} + +void 0d6b_Mul4ByAC0M_Unsigned(in_buffer($AR0), out_buffer($AR1), multiplicand($AX1.H)) { + // 0d6b 8d00 set15 + // 0d6c 1f7e mrr $AX1.H, $AC0.M + // 0d6d 1918 lrri $AX0.L, @$AR0 + // 0d6e a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 + // 0d6f ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 + // 0d70 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + // 0d71 1918 lrri $AX0.L, @$AR0 + // 0d72 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + // 0d73 6e31 movp's $ACC0 : @$AR1, $AC0.M + // 0d74 1b3e srri @$AR1, $AC0.M + // 0d75 8c00 clr15 + // 0d76 02df ret + // The above is a crazy sw-pipelined way to write: + for (int i = 0; i < 4; i++) { + out_buffer[i] = in_buffer[i] * multiplicand >> 16; //(unsigned multiplication) + } +} + +// table for 0cd3_Unk +// This is a bunch of buffer addresses! +short table = {0x0d00, 0x0d60, 0x0f40, 0x0ca0, 0x0e80, 0x0ee0, 0x0c00, 0x0c50}; + +0d77 0d00 +0d78 0d60 +0d79 0f40 +0d7a 0ca0 +0d7b 0e80 +0d7c 0ee0 +0d7d 0c00 +0d7e 0c50 + +void 0d7f_ResampleAudioData(_src($AR0), _dest($AR1), param(AX1.L) = 0, _option??) +{ + 0d7f 00f9 0361 sr @0x0361, $AX1.L // always 0 + + // 0d81 1fc0 mrr $AC0.M, $AR0 + // 0d82 0200 fffc addi $AC0.M, #0xfffc + // 0d84 1c1e mrr $AR0, $AC0.M + // 0d85 1c5e mrr $AR2, $AC0.M + + // We read a little bit BEFORE the input. The next piece of code takes care of that... + $AR0 = $AR0 - 4; + $AR2 = $AR0; + + // 0x043c to 0x043f is storage for old sample data. + 0d86 0083 043c lri $AR3, #0x043c + + // Pipelined tiny memcpy - first four are loads, last four are stores. middle two overlap. + // 0d88 197e lrri $AC0.M, @$AR3 + // 0d89 197f lrri $AC1.M, @$AR3 + // 0d8a 80a2 nx'sl : $AC0.M, $AX0.H + // 0d8b 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + // 0d8c 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + // 0d8d 1b1f srri @$AR0, $AC1.M + for (int i = 0; i < 4; i++) + *($AR0++) = *($AR3++); + + // Point $AR0 back at 4 words before the start of the in buffer. + // 0d8e 1c02 mrr $AR0, $AR2 + + 0d8f 8100 clr $ACC0 + // 0d90 00de 0402 lr $AC0.M, @0x0402 // Ratio int + // 0d92 00fe 0362 sr @0x0362, $AC0.M + // 0d94 1474 lsr $ACC0, #-12 + // 0d95 1f7e mrr $AX1.H, $AC0.M + // 0d96 1f3c mrr $AX1.L, $AC0.L + *0x0362 = PB.Ratio; + $AX1 = PB.Ratio << 4; + + 0d97 8900 clr $ACC1 + 0d98 00dd 0430 lr $AC1.L, @0x0430 // Sample position frac + 0d9a 1504 lsl $ACC1, #4 + + // $ACC0 here still contains ratio << 12; + 0d9b 0604 cmpis $ACC0, #0x04 + // 0d9c 0290 0df3 jge 0x0df3 // subroutine + + // If ratio too low, don't bother resampling? + GOTONS JustCopyWithoutResampling; + + 0d9e 1fdd mrr $AC0.M, $AC1.L + 0d9f 0082 02b0 lri $AR2, #0x02b0 + + // Store a ramp at 0x2b0? Lookup table for read addresses? + 0da1 1050 loopi #0x50 + 0da2 4b2a addax's $ACC1, $AX1 : @$AR2, $AC1.L + + 0da3 1fbe mrr $AC1.L, $AC0.M + 0da4 00fe 0360 sr @0x0360, $AC0.M + 0da6 8900 clr $ACC1 + 0da7 1fbe mrr $AC1.L, $AC0.M + + 0da8 0af8 lris $AX0.H, #0xf8 + 0da9 009b 00fc lri $AX1.H, #0x00fc + 0dab 00d8 0361 lr $AX0.L, @0x0361 // parameter was stashed here. + + // 0x02b0 is where the ramp from above is stored. + 0dad 0082 02b0 lri $AR2, #0x02b0 + 0daf 0083 02b0 lri $AR3, #0x02b0 + 0db1 195e lrri $AC0.M, @$AR2 + + // I really don't understand what the purpose of this loop is. + 0db2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M + // 0db3 1128 0db8 bloopi #0x28, 0x0db8 + for (int i = 0; i < 0x50; i += 2) { + 0db5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 + 0db6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H + 0db7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 + 0db8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + } + + 0db9 8a00 m2 // All muls doubled. + + // 0x02b0 is where the ramp from above is stored. + 0dba 0082 02b0 lri $AR2, #0x02b0 + + 0dbc 00dd 0430 lr $AC1.L, @0x0430 + 0dbe 1504 lsl $ACC1, #4 + 0dbf 1fe0 mrr $AC1.M, $AR0 + 0dc0 8100 clr $ACC0 + 0dc1 00de 0362 lr $AC0.M, @0x0362 + 0dc3 1474 lsr $ACC0, #-12 + 0dc4 1f7e mrr $AX1.H, $AC0.M + 0dc5 1f3c mrr $AX1.L, $AC0.L + + // Resample with some nice filter of some sort, using unreadable + // pipelined DSP code... gah. + + 0dc6 8f00 set40 // Loaded ACx.M values extend to the entire ACC. Don't see any actual use though. + + // Yep, this pretty much confirms that 0x02b0 is precomputed read addresses. + 0dc7 1943 lrri $AR3, @$AR2 + 0dc8 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 + 0dc9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0dca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0dcb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0dcc f200 madd $AX0.L, $AX0.H + 0dcd fe00 movpz $ACC0 + 0dce 1c1f mrr $AR0, $AC1.M + 0dcf 1943 lrri $AR3, @$AR2 + 0dd0 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 + 0dd1 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + // 0dd2 114e 0dda bloopi #0x4e, 0x0dda + // Count the stores - 0x4e stores in the main loop, two more afterwards. + // Deeply pipelined. + for (int i = 0; i < 0x4e; i++) { + 0dd4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0dd5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0dd6 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0dd7 1c1f mrr $AR0, $AC1.M + 0dd8 1943 lrri $AR3, @$AR2 + 0dd9 4bc3 addax'ld $ACC1, $AX1 : $AX0.L, $AX1.L, @$AR3 + 0dda 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + } + 0ddb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ddc f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0ddd f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0dde fe00 movpz $ACC0 + 0ddf 1b3e srri @$AR1, $AC0.M + + // Things back to normal. + // 0de0 8b00 m0 + // 0de1 8e00 set16 + +back_from_JustCopyWithoutResampling: + 0de2 00fe 0433 sr @0x0433, $AC0.M + 0de4 1c1f mrr $AR0, $AC1.M + 0de5 150c lsl $ACC1, #12 + 0de6 0340 0fff andi $AC1.M, #0x0fff + 0de8 00ff 0430 sr @0x0430, $AC1.M + + // Store the last 4 samples or something undecoded + // back into the PB. + 0dea 0083 043c lri $AR3, #0x043c + 0dec 191e lrri $AC0.M, @$AR0 + 0ded 191f lrri $AC1.M, @$AR0 + 0dee 80a0 nx'ls : $AX0.H, $AC0.M + 0def 64a1 movr'ls $AC0.M, $AX0.H : $AX0.H, $AC1.M + 0df0 6533 movr's $AC1.M, $AX0.H : @$AR3, $AC0.M + 0df1 1b7f srri @$AR3, $AC1.M + // 0df2 02df ret + return; + +JustCopyWithoutResampling: + // 0df3 1fe0 mrr $AC1.M, $AR0 + // 0df4 1c1f mrr $AR0, $AC1.M // This instruction looks very pointless. + + // 0df5 1128 0dfc bloopi #0x28, 0x0dfc + // 0df7 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 + // 0df8 1b3e srri @$AR1, $AC0.M + // 0df9 1c1f mrr $AR0, $AC1.M + // 0dfa 4b70 addax'l $ACC1, $AX1 : $AC0.M, @$AR0 + // 0dfb 1b3e srri @$AR1, $AC0.M + // 0dfc 1c1f mrr $AR0, $AC1.M + for (int i = 0; i < 0x50; i++) { + $ACC1 += $AX1; // This is to still advance the playback position. + $AC0.M = *($AR0++); + *($AR1++) = $AC0.M; + $AR0 = $AC1.M; // Undo the increment + } + + // Looks like $AR0 stays unchanged, while $AR1 gets incremented by 0x50. + 0dfd 029f 0de2 jmp 0x0de2 +} + + +// Small utility jumped to from SyncFrame. +// sets 50 shorts from 0x520 to zero. +void 0dff_Zero520_50() { + 0dff 0083 0520 lri $AR3, #0x0520 + 0e01 00de 0433 lr $AC0.M, @0x0433 + 0e03 1050 loopi #0x50 + 0e04 1b7e srri @$AR3, $AC0.M + // 0e05 029f 02d8 jmp 0x02d8 + GOTO ContinueWithBlock: // in SyncFrame +} + +// No-one calls this routine. +void 0e07_UnUsed() { + 0e07 1c20 mrr $AR1, $AR0 + 0e08 185f lrr $AC1.M, @$AR2 + 0e09 1f7f mrr $AX1.H, $AC1.M + 0e0a 193a lrri $AX0.H, @$AR1 + 0e0b 6400 movr $ACC0, $AX0.H + 0e0c 0078 0e11 bloop $AX0.L, 0x0e11 + 0e0e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 + 0e0f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M + 0e10 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 + 0e11 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M + 0e12 1a5b srr @$AR2, $AX1.H + // 0e13 02df ret +} + +void 0e14_DolbyInit() +{ + // Init parameters/coefficients for UnknownFilter + 0e14 0098 8240 lri $AX0.L, #0x8240 + 0e16 00f8 04e8 sr @0x04e8, $AX0.L + 0e18 0098 7fff lri $AX0.L, #0x7fff + 0e1a 00f8 04e9 sr @0x04e9, $AX0.L + 0e1c 0098 7dbf lri $AX0.L, #0x7dbf + 0e1e 00f8 04ea sr @0x04ea, $AX0.L + 0e20 0098 843f lri $AX0.L, #0x843f + 0e22 00f8 04eb sr @0x04eb, $AX0.L + 0e24 0098 b23b lri $AX0.L, #0xb23b + 0e26 00f8 04f0 sr @0x04f0, $AX0.L + 0e28 0098 7fff lri $AX0.L, #0x7fff + 0e2a 00f8 04f1 sr @0x04f1, $AX0.L + 0e2c 0098 4dc4 lri $AX0.L, #0x4dc4 + 0e2e 00f8 04f2 sr @0x04f2, $AX0.L + 0e30 0098 d808 lri $AX0.L, #0xd808 + 0e32 00f8 04f3 sr @0x04f3, $AX0.L + + // Zero the UnknownFilter states. + 0e34 0098 0000 lri $AX0.L, #0x0000 + 0e36 0080 04ec lri $AR0, #0x04ec + 0e38 1004 loopi #0x04 + 0e39 1b18 srri @$AR0, $AX0.L + 0e3a 0080 04f4 lri $AR0, #0x04f4 + 0e3c 1004 loopi #0x04 + 0e3d 1b18 srri @$AR0, $AX0.L + // 0e3e 02df ret +} + +// I'm going to guess that this is Dolby mixing. +void 0e3f_DolbyMixdown() +{ + 0e3f 0080 0f40 lri $AR0, #0x0f40 + 0e41 0083 0b00 lri $AR3, #0x0b00 + 0e43 8900 clr $ACC1 + 0e44 0f50 lris $AC1.M, #0x50 + 0e45 0098 6784 lri $AX0.L, #0x6784 + //0e47 02bf 00fa call 0x00fa // XorBuffer + 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) + + 0e49 0080 04e8 lri $AR0, #0x04e8 + 0e4b 0082 04ec lri $AR2, #0x04ec + 0e4d 0081 0b00 lri $AR1, #0x0b00 + 0e4f 02bf 0ba4 call 0x0ba4 // 0ba4_UnknownFilter + 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) + + 0e51 8900 clr $ACC1 + 0e52 0f50 lris $AC1.M, #0x50 + 0e53 0080 0b00 lri $AR0, #0x0b00 + 0e55 0083 0d00 lri $AR3, #0x0d00 + 0e57 0098 7fff lri $AX0.L, #0x7fff + // 0e59 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + 0e5b 8900 clr $ACC1 + 0e5c 0f50 lris $AC1.M, #0x50 + 0e5d 0080 0b00 lri $AR0, #0x0b00 + 0e5f 0083 0d60 lri $AR3, #0x0d60 + 0e61 0098 b820 lri $AX0.L, #0xb820 + // 0e63 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + 0e65 0080 0ca0 lri $AR0, #0x0ca0 + 0e67 0083 0b00 lri $AR3, #0x0b00 + 0e69 8900 clr $ACC1 + 0e6a 0f50 lris $AC1.M, #0x50 + 0e6b 0098 6784 lri $AX0.L, #0x6784 + // 0e6d 02bf 00fa call 0x00fa // XorBuffer + 00fa_BufferMultiply(src($AR0), dst($AR3), count($AC1.M), $mult($AX0.L)) + + 0e6f 0080 04e8 lri $AR0, #0x04e8 + 0e71 0082 04f4 lri $AR2, #0x04f4 + 0e73 0081 0b00 lri $AR1, #0x0b00 + // 0e75 02bf 0ba4 call 0x0ba4 // 0ba4_UnknownFilter + 0ba4_UnknownFilter(params($AR0), buffer($AR1), filter_state($AR2)) + + 0e77 8900 clr $ACC1 + 0e78 0f50 lris $AC1.M, #0x50 + 0e79 0080 0b00 lri $AR0, #0x0b00 + 0e7b 0083 0d00 lri $AR3, #0x0d00 + 0e7d 0098 47e0 lri $AX0.L, #0x47e0 + // 0e7f 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + 0e81 8900 clr $ACC1 + 0e82 0f50 lris $AC1.M, #0x50 + 0e83 0080 0b00 lri $AR0, #0x0b00 + 0e85 0083 0d60 lri $AR3, #0x0d60 + 0e87 0098 8001 lri $AX0.L, #0x8001 + // 0e89 02bf 00eb call 0x00eb + 00eb_Unk_BufferMultAddToDest(_Src=($AR0), _Dest($AR3), _size($AC1.M), _factor($AX0.L)) + + // 0e8b 02df ret +} + + +void Nops() { + 0e8c 0000 nop + 0e8d 0000 nop + 0e8e 0000 nop + 0e8f 0000 nop +} diff --git a/docs/DSP/DSP_UC_Zelda_Wii.txt b/docs/DSP/DSP_UC_Zelda_Wii.txt index 89fb8bb4e8..a70c3274ec 100644 --- a/docs/DSP/DSP_UC_Zelda_Wii.txt +++ b/docs/DSP/DSP_UC_Zelda_Wii.txt @@ -1,2850 +1,2850 @@ - 0000 029f 0012 jmp 0x0012 - 0002 0000 nop - 0003 0000 nop - 0004 02ff rti - 0005 0000 nop - 0006 02ff rti - 0007 0000 nop - 0008 02ff rti - 0009 0000 nop - 000a 02ff rti - 000b 0000 nop - 000c 02ff rti - 000d 0000 nop - 000e 029f 0725 jmp 0x0725 - 0010 029f 0059 jmp 0x0059 - 0012 1205 sbclr #0x05 - 0013 02bf 0062 call 0x0062 - 0015 8100 clr $ACC0 - 0016 009f 1000 lri $AC1.M, #0x1000 - 0018 0080 0000 lri $AR0, #0x0000 - 001a 005f loop $AC1.M - 001b 1b1e srri @$AR0, $AC0.M - 001c 02bf 07f5 call 0x07f5 - 001e 02bf 0f44 call 0x0f44 - 0020 0e00 lris $AC0.M, #0x00 - 0021 02bf 07d7 call 0x07d7 - 0023 009e 1111 lri $AC0.M, #0x1111 -// SEND_f355(0x1111) - 0025 02bf 07e1 call 0x07e1 - 0027 0e00 lris $AC0.M, #0x00 - 0028 00fe 034e sr @0x034e, $AC0.M - 002a 1305 sbset #0x05 - 002b 3a00 orr $AC0.M, $AX1.H - 002c 7400 incm $AC0.M - 002d 1f7e mrr $AX1.H, $AC0.M - 002e 0240 00ff andi $AC0.M, #0x00ff - 0030 0200 5500 addi $AC0.M, #0x5500 - 0032 02bf 00a0 call 0x00a0 - 0034 029f 0832 jmp 0x0832 - 0036 00df 0357 lr $AC1.M, @0x0357 - 0038 00ff 0345 sr @0x0345, $AC1.M - 003a 00de 0356 lr $AC0.M, @0x0356 - 003c 1ffe mrr $AC1.M, $AC0.M - 003d 0340 00ff andi $AC1.M, #0x00ff - 003f 00ff 0344 sr @0x0344, $AC1.M - 0041 1479 lsr $ACC0, #-7 - 0042 0240 007e andi $AC0.M, #0x007e - 0044 00fe 0343 sr @0x0343, $AC0.M - 0046 0200 0080 addi $AC0.M, #0x0080 - 0048 1c1e mrr $AR0, $AC0.M - 0049 170f jmpr $AR0 - 004a 0092 00ff lri $CR, #0x00ff - 004c 009e cafe lri $AC0.M, #0xcafe - 004e 02bf 00a0 call 0x00a0 - 0050 0e04 lris $AC0.M, #0x04 - 0051 02bf 07d7 call 0x07d7 - 0053 00de 0356 lr $AC0.M, @0x0356 - 0055 02bf 07e1 call 0x07e1 - 0057 029f 002b jmp 0x002b - 0059 1205 sbclr #0x05 - 005a 02bf 0062 call 0x0062 - 005c 0e01 lris $AC0.M, #0x01 - 005d 02bf 07d7 call 0x07d7 - 005f 1305 sbset #0x05 - 0060 029f 002b jmp 0x002b - 0062 1202 sbclr #0x02 - 0063 1203 sbclr #0x03 - 0064 1204 sbclr #0x04 - 0065 1306 sbset #0x06 - 0066 8e00 set16 - 0067 8c00 clr15 - 0068 8b00 m0 - 0069 009e ffff lri $AC0.M, #0xffff - 006b 1d1e mrr $WR0, $AC0.M - 006c 1d3e mrr $WR1, $AC0.M - 006d 1d5e mrr $WR2, $AC0.M - 006e 1d7e mrr $WR3, $AC0.M - 006f 0092 00ff lri $CR, #0x00ff - 0071 02df ret - 0072 0081 0358 lri $AR1, #0x0358 - 0074 0090 0000 lri $AC0.H, #0x0000 - 0076 0c00 lris $AC0.L, #0x00 - 0077 007e 007c bloop $AC0.M, 0x007c - 0079 193e lrri $AC0.M, @$AR1 - 007a 1b1e srri @$AR0, $AC0.M - 007b 193e lrri $AC0.M, @$AR1 - 007c 1b1e srri @$AR0, $AC0.M - 007d 02df ret - 007e 029f 004a jmp 0x004a - 0080 029f 004a jmp 0x004a - 0082 029f 00d9 jmp 0x00d9 - 0084 029f 02e3 jmp 0x02e3 - 0086 029f 007e jmp 0x007e - 0088 029f 066e jmp 0x066e - 008a 029f 0680 jmp 0x0680 - 008c 029f 004a jmp 0x004a - 008e 029f 05b7 jmp 0x05b7 - 0090 029f 0603 jmp 0x0603 - 0092 029f 05e7 jmp 0x05e7 - 0094 029f 004a jmp 0x004a - 0096 029f 004a jmp 0x004a - 0098 029f 004a jmp 0x004a - 009a 029f 0103 jmp 0x0103 - 009c 029f 00f6 jmp 0x00f6 - 009e 029f 004a jmp 0x004a - 00a0 00fe 0b00 sr @0x0b00, $AC0.M - 00a2 8100 clr $ACC0 - 00a3 00de 0354 lr $AC0.M, @0x0354 - 00a5 1408 lsl $ACC0, #8 - 00a6 00df 0341 lr $AC1.M, @0x0341 - 00a8 3e00 cw 0x3e00 ; *** UNKNOWN OPCODE *** - 00a9 00fe 0b01 sr @0x0b01, $AC0.M - 00ab 00de 0350 lr $AC0.M, @0x0350 - 00ad 00fe 0b02 sr @0x0b02, $AC0.M - 00af 00de 0351 lr $AC0.M, @0x0351 - 00b1 00fe 0b03 sr @0x0b03, $AC0.M - 00b3 00de 0352 lr $AC0.M, @0x0352 - 00b5 00fe 0b04 sr @0x0b04, $AC0.M - 00b7 00de 037d lr $AC0.M, @0x037d - 00b9 00dc 037e lr $AC0.L, @0x037e - 00bb 009f 0b00 lri $AC1.M, #0x0b00 - 00bd 0080 0010 lri $AR0, #0x0010 - 00bf 0090 0001 lri $AC0.H, #0x0001 - 00c1 1c3f mrr $AR1, $AC1.M - 00c2 0f0a lris $AC1.M, #0x0a - 00c3 2fd1 srs @SampleFormat, $AC1.M - 00c4 1f5e mrr $AX0.H, $AC0.M - 00c5 1f1c mrr $AX0.L, $AC0.L - 00c6 009e ffff lri $AC0.M, #0xffff - 00c8 2ed6 srs @ACEAH, $AC0.M - 00c9 2ed7 srs @ACEAL, $AC0.M - 00ca 1fda mrr $AC0.M, $AX0.H - 00cb 1f98 mrr $AC0.L, $AX0.L - 00cc 147f lsr $ACC0, #-1 - 00cd 2ed8 srs @ACCAH, $AC0.M - 00ce 2cd9 srs @ACCAL, $AC0.L - 00cf 1f40 mrr $AX0.H, $AR0 - 00d0 007a 00d7 bloop $AX0.H, 0x00d7 - 00d2 193e lrri $AC0.M, @$AR1 - 00d3 2ed3 srs @UnkZelda, $AC0.M - 00d4 0000 nop - 00d5 0000 nop - 00d6 0000 nop - 00d7 0000 nop - 00d8 02df ret - 00d9 0080 0380 lri $AR0, #0x0380 - 00db 0e04 lris $AC0.M, #0x04 - 00dc 02bf 0072 call 0x0072 - 00de 0081 0382 lri $AR1, #0x0382 - 00e0 009f 0000 lri $AC1.M, #0x0000 - 00e2 0080 0280 lri $AR0, #0x0280 - 00e4 02bf 063e call 0x063e - 00e6 0081 0384 lri $AR1, #0x0384 - 00e8 009f 0300 lri $AC1.M, #0x0300 - 00ea 0080 0020 lri $AR0, #0x0020 - 00ec 02bf 063e call 0x063e - 00ee 00de 0345 lr $AC0.M, @0x0345 - 00f0 00fe 0342 sr @0x0342, $AC0.M - 00f2 02bf 0d3b call 0x0d3b - 00f4 029f 004a jmp 0x004a - 00f6 0080 037d lri $AR0, #0x037d - 00f8 0e01 lris $AC0.M, #0x01 - 00f9 02bf 0072 call 0x0072 - 00fb 00de 037d lr $AC0.M, @0x037d - 00fd 0240 7fff andi $AC0.M, #0x7fff - 00ff 00fe 037d sr @0x037d, $AC0.M - 0101 029f 004a jmp 0x004a - 0103 0080 0374 lri $AR0, #0x0374 - 0105 0e01 lris $AC0.M, #0x01 - 0106 00fe 0377 sr @0x0377, $AC0.M - 0108 00fe 037c sr @0x037c, $AC0.M - 010a 02bf 0072 call 0x0072 - 010c 00de 0345 lr $AC0.M, @0x0345 - 010e 00fe 0376 sr @0x0376, $AC0.M - 0110 029f 004a jmp 0x004a - 0112 0081 034c lri $AR1, #0x034c - 0114 009f 0400 lri $AC1.M, #0x0400 - 0116 0080 00c0 lri $AR0, #0x00c0 - 0118 02bf 063e call 0x063e - 011a 02df ret - 011b 0081 034c lri $AR1, #0x034c - 011d 009f 0400 lri $AC1.M, #0x0400 - 011f 0080 0080 lri $AR0, #0x0080 - 0121 0081 034c lri $AR1, #0x034c - 0123 193e lrri $AC0.M, @$AR1 - 0124 193c lrri $AC0.L, @$AR1 - 0125 0098 0000 lri $AX0.L, #0x0000 - 0127 7000 addaxl $ACC0, $AX0.L - 0128 02bf 064d call 0x064d - 012a 02df ret - 012b 191e lrri $AC0.M, @$AR0 - 012c 191a lrri $AX0.H, @$AR0 - 012d 005f loop $AC1.M - 012e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 012f 1b7e srri @$AR3, $AC0.M - 0130 1b7a srri @$AR3, $AX0.H - 0131 02df ret - 0132 0000 nop - 0133 007f 0138 bloop $AC1.M, 0x0138 - 0135 191e lrri $AC0.M, @$AR0 - 0136 1b7e srri @$AR3, $AC0.M - 0137 191e lrri $AC0.M, @$AR0 - 0138 1b7e srri @$AR3, $AC0.M - 0139 0000 nop - 013a 02df ret - 013b 191e lrri $AC0.M, @$AR0 - 013c 191a lrri $AX0.H, @$AR0 - 013d 007f 0142 bloop $AC1.M, 0x0142 - 013f 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H - 0140 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M - 0141 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H - 0142 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0143 0000 nop - 0144 02df ret - 0145 8a00 m2 - 0146 157f lsr $ACC1, #-1 - 0147 1c20 mrr $AR1, $AR0 - 0148 1c03 mrr $AR0, $AR3 - 0149 193a lrri $AX0.H, @$AR1 - 014a 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 - 014b 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 - 014c 007f 0151 bloop $AC1.M, 0x0151 - 014e 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 014f 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 0150 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 - 0151 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H - 0152 8b00 m0 - 0153 02df ret - 0154 8a00 m2 - 0155 191a lrri $AX0.H, @$AR0 - 0156 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 - 0157 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0158 005f loop $AC1.M - 0159 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M - 015a 8b00 m0 - 015b 02df ret - 015c 8100 clr $ACC0 - 015d 8900 clr $ACC1 - 015e 0e50 lris $AC0.M, #0x50 - 015f 0080 0d00 lri $AR0, #0x0d00 - 0161 005e loop $AC0.M - 0162 1b1f srri @$AR0, $AC1.M - 0163 0080 0d60 lri $AR0, #0x0d60 - 0165 005e loop $AC0.M - 0166 1b1f srri @$AR0, $AC1.M - 0167 00da 0374 lr $AX0.H, @0x0374 - 0169 8600 tstaxh $AX0.H - 016a 02b5 0f6f callz 0x0f6f - 016c 8100 clr $ACC0 - 016d 8900 clr $ACC1 - 016e 0e50 lris $AC0.M, #0x50 - 016f 0080 0ca0 lri $AR0, #0x0ca0 - 0171 005e loop $AC0.M - 0172 1b1f srri @$AR0, $AC1.M - 0173 0080 0f40 lri $AR0, #0x0f40 - 0175 005e loop $AC0.M - 0176 1b1f srri @$AR0, $AC1.M - 0177 0080 0fa0 lri $AR0, #0x0fa0 - 0179 005e loop $AC0.M - 017a 1b1f srri @$AR0, $AC1.M - 017b 0080 0a00 lri $AR0, #0x0a00 - 017d 005e loop $AC0.M - 017e 1b1f srri @$AR0, $AC1.M - 017f 0080 09a0 lri $AR0, #0x09a0 - 0181 005e loop $AC0.M - 0182 1b1f srri @$AR0, $AC1.M - 0183 0f04 lris $AC1.M, #0x04 - 0184 0080 0e10 lri $AR0, #0x0e10 - 0186 0083 0dc0 lri $AR3, #0x0dc0 - 0188 02bf 0132 call 0x0132 - 018a 0080 0e70 lri $AR0, #0x0e70 - 018c 0083 0e20 lri $AR3, #0x0e20 - 018e 02bf 0132 call 0x0132 - 0190 0080 0ed0 lri $AR0, #0x0ed0 - 0192 0083 0e80 lri $AR3, #0x0e80 - 0194 02bf 0132 call 0x0132 - 0196 0080 0f30 lri $AR0, #0x0f30 - 0198 0083 0ee0 lri $AR3, #0x0ee0 - 019a 02bf 0132 call 0x0132 - 019c 8100 clr $ACC0 - 019d 0e50 lris $AC0.M, #0x50 - 019e 8900 clr $ACC1 - 019f 0080 0dc8 lri $AR0, #0x0dc8 - 01a1 005e loop $AC0.M - 01a2 1b1f srri @$AR0, $AC1.M - 01a3 0080 0e28 lri $AR0, #0x0e28 - 01a5 005e loop $AC0.M - 01a6 1b1f srri @$AR0, $AC1.M - 01a7 0080 0e88 lri $AR0, #0x0e88 - 01a9 005e loop $AC0.M - 01aa 1b1f srri @$AR0, $AC1.M - 01ab 0080 0ee8 lri $AR0, #0x0ee8 - 01ad 005e loop $AC0.M - 01ae 1b1f srri @$AR0, $AC1.M - 01af 02df ret - 01b0 009f 0580 lri $AC1.M, #0x0580 - 01b2 009b 00a0 lri $AX1.H, #0x00a0 - 01b4 0081 0393 lri $AR1, #0x0393 - 01b6 18bc lrrd $AC0.L, @$AR1 - 01b7 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 01b8 bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 01b9 0080 0050 lri $AR0, #0x0050 - 01bb 02bf 0640 call 0x0640 - 01bd 02df ret - 01be 00df 03a1 lr $AC1.M, @0x03a1 - 01c0 0508 addis $ACC1, #0x08 - 01c1 0080 0580 lri $AR0, #0x0580 - 01c3 1c7f mrr $AR3, $AC1.M - 01c4 0098 7fff lri $AX0.L, #0x7fff - 01c6 8900 clr $ACC1 - 01c7 0f50 lris $AC1.M, #0x50 - 01c8 02bf 0145 call 0x0145 - 01ca 02df ret - 01cb 00c0 03a0 lr $AR0, @0x03a0 - 01cd 191a lrri $AX0.H, @$AR0 - 01ce 02bf 01b0 call 0x01b0 - 01d0 02bf 01be call 0x01be - 01d2 8100 clr $ACC0 - 01d3 8900 clr $ACC1 - 01d4 00de 0390 lr $AC0.M, @0x0390 - 01d6 02a0 0001 andf $AC0.M, #0x0001 - 01d8 029d 01e1 jlz 0x01e1 - 01da 0080 0398 lri $AR0, #0x0398 - 01dc 0e08 lris $AC0.M, #0x08 - 01dd 00c1 03a1 lr $AR1, @0x03a1 - 01df 02bf 0c7d call 0x0c7d - 01e1 0f50 lris $AC1.M, #0x50 - 01e2 00c0 03a1 lr $AR0, @0x03a1 - 01e4 00da 0394 lr $AX0.H, @0x0394 - 01e6 8600 tstaxh $AX0.H - 01e7 0295 01ee jz 0x01ee - 01e9 1c7a mrr $AR3, $AX0.H - 01ea 00d8 0395 lr $AX0.L, @0x0395 - 01ec 02bf 0145 call 0x0145 - 01ee 0f50 lris $AC1.M, #0x50 - 01ef 00c0 03a1 lr $AR0, @0x03a1 - 01f1 00da 0396 lr $AX0.H, @0x0396 - 01f3 8600 tstaxh $AX0.H - 01f4 0295 01fb jz 0x01fb - 01f6 1c7a mrr $AR3, $AX0.H - 01f7 00d8 0397 lr $AX0.L, @0x0397 - 01f9 02bf 0145 call 0x0145 - 01fb 00de 0390 lr $AC0.M, @0x0390 - 01fd 02a0 0002 andf $AC0.M, #0x0002 - 01ff 02dd retlz - 0200 0080 0398 lri $AR0, #0x0398 - 0202 0e08 lris $AC0.M, #0x08 - 0203 00c1 03a1 lr $AR1, @0x03a1 - 0205 02bf 0c7d call 0x0c7d - 0207 02df ret - 0208 8900 clr $ACC1 - 0209 009f 0dc0 lri $AC1.M, #0x0dc0 - 020b 00ff 03a1 sr @0x03a1, $AC1.M - 020d 009f 03a8 lri $AC1.M, #0x03a8 - 020f 00ff 03a2 sr @0x03a2, $AC1.M - 0211 009f 03a4 lri $AC1.M, #0x03a4 - 0213 00ff 03a0 sr @0x03a0, $AC1.M - 0215 1104 0235 bloopi #0x04, 0x0235 - 0217 00c0 03a2 lr $AR0, @0x03a2 - 0219 0083 0390 lri $AR3, #0x0390 - 021b 8900 clr $ACC1 - 021c 0f08 lris $AC1.M, #0x08 - 021d 02bf 0132 call 0x0132 - 021f 00da 0390 lr $AX0.H, @0x0390 - 0221 8600 tstaxh $AX0.H - 0222 0295 0226 jz 0x0226 - 0224 02bf 01cb call 0x01cb - 0226 8100 clr $ACC0 - 0227 00de 03a2 lr $AC0.M, @0x03a2 - 0229 0410 addis $ACC0, #0x10 - 022a 00fe 03a2 sr @0x03a2, $AC0.M - 022c 00de 03a1 lr $AC0.M, @0x03a1 - 022e 0460 addis $ACC0, #0x60 - 022f 00fe 03a1 sr @0x03a1, $AC0.M - 0231 00de 03a0 lr $AC0.M, @0x03a0 - 0233 7400 incm $AC0.M - 0234 00fe 03a0 sr @0x03a0, $AC0.M - 0236 00da 0374 lr $AX0.H, @0x0374 - 0238 8600 tstaxh $AX0.H - 0239 0294 025f jnz 0x025f - 023b 0f50 lris $AC1.M, #0x50 - 023c 0080 0be0 lri $AR0, #0x0be0 - 023e 0083 0e80 lri $AR3, #0x0e80 - 0240 0098 7fff lri $AX0.L, #0x7fff - 0242 02bf 0145 call 0x0145 - 0244 0f50 lris $AC1.M, #0x50 - 0245 0080 0be0 lri $AR0, #0x0be0 - 0247 0083 0ee0 lri $AR3, #0x0ee0 - 0249 0098 b820 lri $AX0.L, #0xb820 - 024b 02bf 0145 call 0x0145 - 024d 0f28 lris $AC1.M, #0x28 - 024e 0080 0c68 lri $AR0, #0x0c68 - 0250 0083 0e80 lri $AR3, #0x0e80 - 0252 0098 b820 lri $AX0.L, #0xb820 - 0254 02bf 0145 call 0x0145 - 0256 0f28 lris $AC1.M, #0x28 - 0257 0080 0c68 lri $AR0, #0x0c68 - 0259 0083 0ee0 lri $AR3, #0x0ee0 - 025b 0098 7fff lri $AX0.L, #0x7fff - 025d 02bf 0145 call 0x0145 - 025f 8100 clr $ACC0 - 0260 8900 clr $ACC1 - 0261 0e50 lris $AC0.M, #0x50 - 0262 0080 0be0 lri $AR0, #0x0be0 - 0264 005e loop $AC0.M - 0265 1b1f srri @$AR0, $AC1.M - 0266 0080 0c40 lri $AR0, #0x0c40 - 0268 005e loop $AC0.M - 0269 1b1f srri @$AR0, $AC1.M - 026a 02df ret - 026b 00c0 03a0 lr $AR0, @0x03a0 - 026d 181a lrr $AX0.H, @$AR0 - 026e 8100 clr $ACC0 - 026f 181e lrr $AC0.M, @$AR0 - 0270 00db 0391 lr $AX1.H, @0x0391 - 0272 7400 incm $AC0.M - 0273 d100 cmpar $ACC1, $AX0.H - 0274 0270 ifge - 0275 8100 clr $ACC0 - 0276 1b1e srri @$AR0, $AC0.M - 0277 00df 03a1 lr $AC1.M, @0x03a1 - 0279 009b 00a0 lri $AX1.H, #0x00a0 - 027b 0081 0393 lri $AR1, #0x0393 - 027d 18bc lrrd $AC0.L, @$AR1 - 027e b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 - 027f bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 0280 0080 0050 lri $AR0, #0x0050 - 0282 02bf 064d call 0x064d - 0284 02df ret - 0285 00da 0374 lr $AX0.H, @0x0374 - 0287 8600 tstaxh $AX0.H - 0288 0294 029e jnz 0x029e - 028a 8900 clr $ACC1 - 028b 0f28 lris $AC1.M, #0x28 - 028c 0080 0c40 lri $AR0, #0x0c40 - 028e 0083 0ea8 lri $AR3, #0x0ea8 - 0290 0098 b820 lri $AX0.L, #0xb820 - 0292 02bf 0145 call 0x0145 - 0294 8900 clr $ACC1 - 0295 0f28 lris $AC1.M, #0x28 - 0296 0080 0c40 lri $AR0, #0x0c40 - 0298 0083 0f08 lri $AR3, #0x0f08 - 029a 0098 7fff lri $AX0.L, #0x7fff - 029c 02bf 0145 call 0x0145 - 029e 009f 0dc0 lri $AC1.M, #0x0dc0 - 02a0 00ff 03a1 sr @0x03a1, $AC1.M - 02a2 009f 03a8 lri $AC1.M, #0x03a8 - 02a4 00ff 03a2 sr @0x03a2, $AC1.M - 02a6 009f 03a4 lri $AC1.M, #0x03a4 - 02a8 00ff 03a0 sr @0x03a0, $AC1.M - 02aa 1104 02c8 bloopi #0x04, 0x02c8 - 02ac 00c0 03a2 lr $AR0, @0x03a2 - 02ae 0083 0390 lri $AR3, #0x0390 - 02b0 0f08 lris $AC1.M, #0x08 - 02b1 02bf 0132 call 0x0132 - 02b3 00da 0390 lr $AX0.H, @0x0390 - 02b5 8600 tstaxh $AX0.H - 02b6 0295 02ba jz 0x02ba - 02b8 02bf 026b call 0x026b - 02ba 00de 03a2 lr $AC0.M, @0x03a2 - 02bc 0410 addis $ACC0, #0x10 - 02bd 00fe 03a2 sr @0x03a2, $AC0.M - 02bf 00de 03a1 lr $AC0.M, @0x03a1 - 02c1 0460 addis $ACC0, #0x60 - 02c2 00fe 03a1 sr @0x03a1, $AC0.M - 02c4 00de 03a0 lr $AC0.M, @0x03a0 - 02c6 7400 incm $AC0.M - 02c7 00fe 03a0 sr @0x03a0, $AC0.M - 02c9 02df ret - 02ca 0081 0386 lri $AR1, #0x0386 - 02cc 009f 03a8 lri $AC1.M, #0x03a8 - 02ce 0080 0040 lri $AR0, #0x0040 - 02d0 02bf 063e call 0x063e - 02d2 02df ret - 02d3 191e lrri $AC0.M, @$AR0 - 02d4 189c lrrd $AC0.L, @$AR0 - 02d5 4800 addax $ACC0, $AX0.L - 02d6 1b1e srri @$AR0, $AC0.M - 02d7 1b1c srri @$AR0, $AC0.L - 02d8 02df ret - 02d9 8100 clr $ACC0 - 02da 8900 clr $ACC1 - 02db 00df 0354 lr $AC1.M, @0x0354 - 02dd 00de 034e lr $AC0.M, @0x034e - 02df 8200 cmp - 02e0 0293 02d9 jle 0x02d9 - 02e2 02df ret - 02e3 0080 0388 lri $AR0, #0x0388 - 02e5 0081 0072 lri $AR1, #0x0072 - 02e7 0e02 lris $AC0.M, #0x02 - 02e8 173f callr $AR1 - 02e9 02bf 04ce call 0x04ce - 02eb 00de 0344 lr $AC0.M, @0x0344 - 02ed 00fe 0341 sr @0x0341, $AC0.M - 02ef 00de 0345 lr $AC0.M, @0x0345 - 02f1 00fe 038e sr @0x038e, $AC0.M - 02f3 8100 clr $ACC0 - 02f4 00fe 0355 sr @0x0355, $AC0.M - 02f6 02bf 02ca call 0x02ca - 02f8 02bf 0692 call 0x0692 - 02fa 0092 00ff lri $CR, #0x00ff - 02fc 00de 0341 lr $AC0.M, @0x0341 - 02fe 007e 04c5 bloop $AC0.M, 0x04c5 - 0300 02bf 015c call 0x015c - 0302 02bf 0208 call 0x0208 - 0304 02bf 053a call 0x053a - 0306 02bf 0acb call 0x0acb - 0308 00de 0355 lr $AC0.M, @0x0355 - 030a 7400 incm $AC0.M - 030b 00fe 0355 sr @0x0355, $AC0.M - 030d 8100 clr $ACC0 - 030e 00fe 0354 sr @0x0354, $AC0.M - 0310 00de 0342 lr $AC0.M, @0x0342 - 0312 007e 0465 bloop $AC0.M, 0x0465 - 0314 009e fead lri $AC0.M, #0xfead - 0316 02bf 00a0 call 0x00a0 - 0318 02bf 02d9 call 0x02d9 - 031a 009e d0d0 lri $AC0.M, #0xd0d0 - 031c 02bf 00a0 call 0x00a0 - 031e 8100 clr $ACC0 - 031f 8900 clr $ACC1 - 0320 00de 0354 lr $AC0.M, @0x0354 - 0322 147c lsr $ACC0, #-4 - 0323 0200 04fc addi $AC0.M, #0x04fc - 0325 1c1e mrr $AR0, $AC0.M - 0326 181f lrr $AC1.M, @$AR0 - 0327 00de 0354 lr $AC0.M, @0x0354 - 0329 0240 000f andi $AC0.M, #0x000f - 032b 3d80 lsrnr $ACC1 - 032c 03c0 8000 andcf $AC1.M, #0x8000 - 032e 029c 0461 jlnz 0x0461 - 0330 00d8 0354 lr $AX0.L, @0x0354 - 0332 009a 0180 lri $AX0.H, #0x0180 - 0334 8100 clr $ACC0 - 0335 00de 0380 lr $AC0.M, @0x0380 - 0337 00dc 0381 lr $AC0.L, @0x0381 - 0339 9000 mul $AX0.L, $AX0.H - 033a 9400 mulac $AX0.L, $AX0.H, $ACC0 - 033b 00fe 034c sr @0x034c, $AC0.M - 033d 00fc 034d sr @0x034d, $AC0.L - 033f 02bf 0112 call 0x0112 - 0341 00da 0400 lr $AX0.H, @0x0400 - 0343 8600 tstaxh $AX0.H - 0344 0295 0461 jz 0x0461 - 0346 00da 0401 lr $AX0.H, @0x0401 - 0348 8600 tstaxh $AX0.H - 0349 0294 0461 jnz 0x0461 - 034b 00da 0433 lr $AX0.H, @0x0433 - 034d 00fa 03f8 sr @0x03f8, $AX0.H - 034f 00da 0406 lr $AX0.H, @0x0406 - 0351 8600 tstaxh $AX0.H - 0352 0294 0f2f jnz 0x0f2f - 0354 8100 clr $ACC0 - 0355 00de 0480 lr $AC0.M, @0x0480 - 0357 0609 cmpis $ACC0, #0x09 - 0358 0295 036b jz 0x036b - 035a 0605 cmpis $ACC0, #0x05 - 035b 0295 036b jz 0x036b - 035d 0608 cmpis $ACC0, #0x08 - 035e 0295 0afb jz 0x0afb - 0360 0610 cmpis $ACC0, #0x10 - 0361 0295 0b78 jz 0x0b78 - 0363 0620 cmpis $ACC0, #0x20 - 0364 0295 0be9 jz 0x0be9 - 0366 0621 cmpis $ACC0, #0x21 - 0367 0295 0bf1 jz 0x0bf1 - 0369 029f 09e8 jmp 0x09e8 - 036b 00d8 0402 lr $AX0.L, @0x0402 - 036d 8100 clr $ACC0 - 036e 8900 clr $ACC1 - 036f 00dc 0430 lr $AC0.L, @0x0430 - 0371 8d00 set15 - 0372 0950 lris $AX1.L, #0x50 - 0373 a000 mulx $AX0.L, $AX1.L - 0374 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0375 1404 lsl $ACC0, #4 - 0376 8c00 clr15 - 0377 1ffe mrr $AC1.M, $AC0.M - 0378 0083 0580 lri $AR3, #0x0580 - 037a 02bf 08aa call 0x08aa - 037c 029f 037e jmp 0x037e - 037e 0080 0580 lri $AR0, #0x0580 - 0380 0081 0520 lri $AR1, #0x0520 - 0382 0099 0000 lri $AX1.L, #0x0000 - 0384 02bf 0eaf call 0x0eaf - 0386 009e 0520 lri $AC0.M, #0x0520 - 0388 00fe 038f sr @0x038f, $AC0.M - 038a 8900 clr $ACC1 - 038b 00df 0484 lr $AC1.M, @0x0484 - 038d 0340 001f andi $AC1.M, #0x001f - 038f b900 tst $ACC1 - 0390 0295 03b6 jz 0x03b6 - 0392 00de 038f lr $AC0.M, @0x038f - 0394 5c00 sub $ACC0, $ACC1 - 0395 00fe 038f sr @0x038f, $AC0.M - 0397 1c7e mrr $AR3, $AC0.M - 0398 0080 0440 lri $AR0, #0x0440 - 039a 05fe addis $ACC1, #0xfe - 039b 02bf 012b call 0x012b - 039d 0080 0490 lri $AR0, #0x0490 - 039f 00c1 038f lr $AR1, @0x038f - 03a1 8900 clr $ACC1 - 03a2 00df 0484 lr $AC1.M, @0x0484 - 03a4 0340 001f andi $AC1.M, #0x001f - 03a6 02bf 0c9c call 0x0c9c - 03a8 00de 038f lr $AC0.M, @0x038f - 03aa 0450 addis $ACC0, #0x50 - 03ab 1c1e mrr $AR0, $AC0.M - 03ac 0083 0440 lri $AR3, #0x0440 - 03ae 8900 clr $ACC1 - 03af 00df 0484 lr $AC1.M, @0x0484 - 03b1 0340 001f andi $AC1.M, #0x001f - 03b3 05fe addis $ACC1, #0xfe - 03b4 02bf 012b call 0x012b - 03b6 00de 0484 lr $AC0.M, @0x0484 - 03b8 0240 0020 andi $AC0.M, #0x0020 - 03ba 0295 03d8 jz 0x03d8 - 03bc 0080 04a4 lri $AR0, #0x04a4 - 03be 00c1 038f lr $AR1, @0x038f - 03c0 0082 0454 lri $AR2, #0x0454 - 03c2 0083 04a7 lri $AR3, #0x04a7 - 03c4 18fa lrrd $AX0.H, @$AR3 - 03c5 8600 tstaxh $AX0.H - 03c6 0294 03d6 jnz 0x03d6 - 03c8 18fa lrrd $AX0.H, @$AR3 - 03c9 8600 tstaxh $AX0.H - 03ca 0294 03d6 jnz 0x03d6 - 03cc 18fa lrrd $AX0.H, @$AR3 - 03cd 8600 tstaxh $AX0.H - 03ce 0294 03d6 jnz 0x03d6 - 03d0 8100 clr $ACC0 - 03d1 18fe lrrd $AC0.M, @$AR3 - 03d2 0280 7fff cmpi $AC0.M, #0x7fff - 03d4 0295 03d8 jz 0x03d8 - 03d6 02bf 0cb7 call 0x0cb7 - 03d8 8100 clr $ACC0 - 03d9 00de 042c lr $AC0.M, @0x042c - 03db b100 tst $ACC0 - 03dc 0295 03e2 jz 0x03e2 - 03de 02bf 0dfd call 0x0dfd - 03e0 029f 0457 jmp 0x0457 - 03e2 8100 clr $ACC0 - 03e3 1c9e mrr $IX0, $AC0.M - 03e4 1cde mrr $IX2, $AC0.M - 03e5 7400 incm $AC0.M - 03e6 1cfe mrr $IX3, $AC0.M - 03e7 8100 clr $ACC0 - 03e8 00de 0407 lr $AC0.M, @0x0407 - 03ea b100 tst $ACC0 - 03eb 0295 03fa jz 0x03fa - 03ed 00c3 038f lr $AR3, @0x038f - 03ef 0007 dar $AR3 - 03f0 0080 0477 lri $AR0, #0x0477 - 03f2 0084 ffff lri $IX0, #0xffff - 03f4 0087 ffff lri $IX3, #0xffff - 03f6 199a lrrn $AX0.H, @$AR0 - 03f7 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 - 03f8 005e loop $AC0.M - 03f9 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M - 03fa 00da 0485 lr $AX0.H, @0x0485 - 03fc 8600 tstaxh $AX0.H - 03fd 0295 0410 jz 0x0410 - 03ff 8900 clr $ACC1 - 0400 0086 0005 lri $IX2, #0x0005 - 0402 0082 040a lri $AR2, #0x040a - 0404 1106 0408 bloopi #0x06, 0x0408 - 0406 18de lrrd $AC0.M, @$AR2 - 0407 147f lsr $ACC0, #-1 - 0408 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M - 0409 b900 tst $ACC1 - 040a 0294 0410 jnz 0x0410 - 040c 009a 0001 lri $AX0.H, #0x0001 - 040e 00fa 0401 sr @0x0401, $AX0.H - 0410 8f00 set40 - 0411 0086 0002 lri $IX2, #0x0002 - 0413 0082 0408 lri $AR2, #0x0408 - 0415 1106 0440 bloopi #0x06, 0x0440 - 0417 8100 clr $ACC0 - 0418 195e lrri $AC0.M, @$AR2 - 0419 1200 sbclr #0x00 - 041a b100 tst $ACC0 - 041b 0275 ifz - 041c 1300 sbset #0x00 - 041d 1c7e mrr $AR3, $AC0.M - 041e 195e lrri $AC0.M, @$AR2 - 041f 195f lrri $AC1.M, @$AR2 - 0420 5c00 sub $ACC0, $ACC1 - 0421 14fb asr $ACC0, #-5 - 0422 1f5e mrr $AX0.H, $AC0.M - 0423 1f1c mrr $AX0.L, $AC0.L - 0424 185e lrr $AC0.M, @$AR2 - 0425 0240 00ff andi $AC0.M, #0x00ff - 0427 1f7e mrr $AX1.H, $AC0.M - 0428 185e lrr $AC0.M, @$AR2 - 0429 1478 lsr $ACC0, #-8 - 042a 009c 0000 lri $AC0.L, #0x0000 - 042c d100 cmpar $ACC1, $AX0.H - 042d 0295 0435 jz 0x0435 - 042f 185e lrr $AC0.M, @$AR2 - 0430 0272 ifg - 0431 7400 incm $AC0.M - 0432 0271 ifl - 0433 7800 decm $AC0.M - 0434 1a5e srr @$AR2, $AC0.M - 0435 0006 dar $AR2 - 0436 00de 038f lr $AC0.M, @0x038f - 0438 5600 subr $ACC0, $AX1.H - 0439 029d 043e jlz 0x043e - 043b 1c1e mrr $AR0, $AC0.M - 043c 02bf 0dd3 call 0x0dd3 - 043e 0000 nop - 043f 1b5f srri @$AR2, $AC1.M - 0440 000a iar $AR2 - 0441 8e00 set16 - 0442 8100 clr $ACC0 - 0443 00de 0407 lr $AC0.M, @0x0407 - 0445 b100 tst $ACC0 - 0446 0295 0457 jz 0x0457 - 0448 00c3 038f lr $AR3, @0x038f - 044a 0087 004f lri $IX3, #0x004f - 044c 001f addarn $AR3, $IX3 - 044d 0080 0477 lri $AR0, #0x0477 - 044f 0084 ffff lri $IX0, #0xffff - 0451 0087 ffff lri $IX3, #0xffff - 0453 19fa lrrn $AX0.H, @$AR3 - 0454 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 - 0455 005e loop $AC0.M - 0456 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H - 0457 00da 0406 lr $AX0.H, @0x0406 - 0459 8600 tstaxh $AX0.H - 045a 0294 045f jnz 0x045f - 045c 8100 clr $ACC0 - 045d 00fe 0404 sr @0x0404, $AC0.M - 045f 02bf 011b call 0x011b - 0461 00de 0354 lr $AC0.M, @0x0354 - 0463 7400 incm $AC0.M - 0464 00fe 0354 sr @0x0354, $AC0.M - 0466 009e b05e lri $AC0.M, #0xb05e - 0468 02bf 00a0 call 0x00a0 - 046a 0e00 lris $AC0.M, #0x00 - 046b 00fe 034e sr @0x034e, $AC0.M - 046d 0e04 lris $AC0.M, #0x04 - 046e 02bf 07d7 call 0x07d7 - 0470 00de 0355 lr $AC0.M, @0x0355 - 0472 0260 ff00 ori $AC0.M, #0xff00 - 0474 02bf 07e1 call 0x07e1 - 0476 02bf 0d59 call 0x0d59 - 0478 02bf 0d6b call 0x0d6b - 047a 02bf 0dc0 call 0x0dc0 - 047c 00de 0341 lr $AC0.M, @0x0341 - 047e 7800 decm $AC0.M - 047f 00fe 0341 sr @0x0341, $AC0.M - 0481 0080 09a0 lri $AR0, #0x09a0 - 0483 0083 0d00 lri $AR3, #0x0d00 - 0485 0f50 lris $AC1.M, #0x50 - 0486 0098 5a82 lri $AX0.L, #0x5a82 - 0488 02bf 0145 call 0x0145 - 048a 0080 09a0 lri $AR0, #0x09a0 - 048c 0083 0d60 lri $AR3, #0x0d60 - 048e 0f50 lris $AC1.M, #0x50 - 048f 02bf 0145 call 0x0145 - 0491 0083 0d00 lri $AR3, #0x0d00 - 0493 02bf 0deb call 0x0deb - 0495 0081 0388 lri $AR1, #0x0388 - 0497 009f 0d00 lri $AC1.M, #0x0d00 - 0499 0080 0050 lri $AR0, #0x0050 - 049b 02bf 064b call 0x064b - 049d 0080 0fa0 lri $AR0, #0x0fa0 - 049f 0083 0d60 lri $AR3, #0x0d60 - 04a1 0f50 lris $AC1.M, #0x50 - 04a2 0098 8000 lri $AX0.L, #0x8000 - 04a4 02bf 0145 call 0x0145 - 04a6 0083 0d60 lri $AR3, #0x0d60 - 04a8 02bf 0deb call 0x0deb - 04aa 0081 038a lri $AR1, #0x038a - 04ac 009f 0d60 lri $AC1.M, #0x0d60 - 04ae 0080 0050 lri $AR0, #0x0050 - 04b0 02bf 064b call 0x064b - 04b2 009a 0000 lri $AX0.H, #0x0000 - 04b4 0098 00a0 lri $AX0.L, #0x00a0 - 04b6 0080 0388 lri $AR0, #0x0388 - 04b8 02bf 02d3 call 0x02d3 - 04ba 0080 038a lri $AR0, #0x038a - 04bc 02bf 02d3 call 0x02d3 - 04be 02bf 0285 call 0x0285 - 04c0 02bf 0509 call 0x0509 - 04c2 02bf 04e0 call 0x04e0 - 04c4 0000 nop - 04c5 0000 nop - 04c6 009e 0dac lri $AC0.M, #0x0dac - 04c8 02bf 00a0 call 0x00a0 - 04ca 0080 002b lri $AR0, #0x002b - 04cc 029f 0770 jmp 0x0770 - 04ce 0080 0374 lri $AR0, #0x0374 - 04d0 0e02 lris $AC0.M, #0x02 - 04d1 02bf 0074 call 0x0074 - 04d3 00de 0374 lr $AC0.M, @0x0374 - 04d5 0240 7fff andi $AC0.M, #0x7fff - 04d7 00fe 0374 sr @0x0374, $AC0.M - 04d9 00de 0376 lr $AC0.M, @0x0376 - 04db 0240 7fff andi $AC0.M, #0x7fff - 04dd 00fe 0376 sr @0x0376, $AC0.M - 04df 02df ret - 04e0 00da 0374 lr $AX0.H, @0x0374 - 04e2 8600 tstaxh $AX0.H - 04e3 02d5 retz - 04e4 0083 0f40 lri $AR3, #0x0f40 - 04e6 02bf 0deb call 0x0deb - 04e8 0083 0ca0 lri $AR3, #0x0ca0 - 04ea 02bf 0deb call 0x0deb - 04ec 0081 0374 lri $AR1, #0x0374 - 04ee 009f 0f40 lri $AC1.M, #0x0f40 - 04f0 0080 0050 lri $AR0, #0x0050 - 04f2 02bf 064b call 0x064b - 04f4 0081 0376 lri $AR1, #0x0376 - 04f6 009f 0ca0 lri $AC1.M, #0x0ca0 - 04f8 0080 0050 lri $AR0, #0x0050 - 04fa 02bf 064b call 0x064b - 04fc 009a 0000 lri $AX0.H, #0x0000 - 04fe 0098 00a0 lri $AX0.L, #0x00a0 - 0500 0080 0374 lri $AR0, #0x0374 - 0502 02bf 02d3 call 0x02d3 - 0504 0080 0376 lri $AR0, #0x0376 - 0506 02bf 02d3 call 0x02d3 - 0508 02df ret - 0509 00da 0374 lr $AX0.H, @0x0374 - 050b 8600 tstaxh $AX0.H - 050c 02d5 retz - 050d 009f 0be0 lri $AC1.M, #0x0be0 - 050f 00ff 03a1 sr @0x03a1, $AC1.M - 0511 00df 03ca lr $AC1.M, @0x03ca - 0513 00ff 0392 sr @0x0392, $AC1.M - 0515 00df 03cb lr $AC1.M, @0x03cb - 0517 00ff 0393 sr @0x0393, $AC1.M - 0519 009f 03a6 lri $AC1.M, #0x03a6 - 051b 00ff 03a0 sr @0x03a0, $AC1.M - 051d 00df 03c9 lr $AC1.M, @0x03c9 - 051f 00ff 0391 sr @0x0391, $AC1.M - 0521 02bf 026b call 0x026b - 0523 009f 0c40 lri $AC1.M, #0x0c40 - 0525 00ff 03a1 sr @0x03a1, $AC1.M - 0527 00df 03da lr $AC1.M, @0x03da - 0529 00ff 0392 sr @0x0392, $AC1.M - 052b 00df 03db lr $AC1.M, @0x03db - 052d 00ff 0393 sr @0x0393, $AC1.M - 052f 009f 03a7 lri $AC1.M, #0x03a7 - 0531 00ff 03a0 sr @0x03a0, $AC1.M - 0533 00df 03d9 lr $AC1.M, @0x03d9 - 0535 00ff 0391 sr @0x0391, $AC1.M - 0537 02bf 026b call 0x026b - 0539 02df ret - 053a 00da 0374 lr $AX0.H, @0x0374 - 053c 8600 tstaxh $AX0.H - 053d 02d5 retz - 053e 00da 03d8 lr $AX0.H, @0x03d8 - 0540 8600 tstaxh $AX0.H - 0541 02d5 retz - 0542 0083 0be0 lri $AR3, #0x0be0 - 0544 0080 0c30 lri $AR0, #0x0c30 - 0546 0f04 lris $AC1.M, #0x04 - 0547 02bf 0132 call 0x0132 - 0549 0083 0c40 lri $AR3, #0x0c40 - 054b 0080 0c90 lri $AR0, #0x0c90 - 054d 0f04 lris $AC1.M, #0x04 - 054e 02bf 0132 call 0x0132 - 0550 00df 03ca lr $AC1.M, @0x03ca - 0552 00ff 0392 sr @0x0392, $AC1.M - 0554 00df 03cb lr $AC1.M, @0x03cb - 0556 00ff 0393 sr @0x0393, $AC1.M - 0558 00df 03a6 lr $AC1.M, @0x03a6 - 055a 7500 incm $AC1.M - 055b 1f5f mrr $AX0.H, $AC1.M - 055c 009f 0be8 lri $AC1.M, #0x0be8 - 055e 02bf 01b2 call 0x01b2 - 0560 00df 03da lr $AC1.M, @0x03da - 0562 00ff 0392 sr @0x0392, $AC1.M - 0564 00df 03db lr $AC1.M, @0x03db - 0566 00ff 0393 sr @0x0393, $AC1.M - 0568 00df 03a7 lr $AC1.M, @0x03a7 - 056a 7500 incm $AC1.M - 056b 1f5f mrr $AX0.H, $AC1.M - 056c 009f 0c48 lri $AC1.M, #0x0c48 - 056e 02bf 01b2 call 0x01b2 - 0570 00de 03c8 lr $AC0.M, @0x03c8 - 0572 02a0 0001 andf $AC0.M, #0x0001 - 0574 029d 057d jlz 0x057d - 0576 0080 03d0 lri $AR0, #0x03d0 - 0578 0e08 lris $AC0.M, #0x08 - 0579 0081 0be0 lri $AR1, #0x0be0 - 057b 02bf 0c7d call 0x0c7d - 057d 00de 03d8 lr $AC0.M, @0x03d8 - 057f 02a0 0001 andf $AC0.M, #0x0001 - 0581 029d 058a jlz 0x058a - 0583 0080 03e0 lri $AR0, #0x03e0 - 0585 0e08 lris $AC0.M, #0x08 - 0586 0081 0c40 lri $AR1, #0x0c40 - 0588 02bf 0c7d call 0x0c7d - 058a 0f50 lris $AC1.M, #0x50 - 058b 0080 0be0 lri $AR0, #0x0be0 - 058d 0083 0f40 lri $AR3, #0x0f40 - 058f 00d8 03cd lr $AX0.L, @0x03cd - 0591 02bf 0145 call 0x0145 - 0593 0f50 lris $AC1.M, #0x50 - 0594 0080 0c40 lri $AR0, #0x0c40 - 0596 0083 0ca0 lri $AR3, #0x0ca0 - 0598 00d8 03df lr $AX0.L, @0x03df - 059a 02bf 0145 call 0x0145 - 059c 00de 03c8 lr $AC0.M, @0x03c8 - 059e 02a0 0002 andf $AC0.M, #0x0002 - 05a0 029d 05a9 jlz 0x05a9 - 05a2 0080 03d0 lri $AR0, #0x03d0 - 05a4 0e08 lris $AC0.M, #0x08 - 05a5 0081 0be0 lri $AR1, #0x0be0 - 05a7 02bf 0c7d call 0x0c7d - 05a9 00de 03d8 lr $AC0.M, @0x03d8 - 05ab 02a0 0002 andf $AC0.M, #0x0002 - 05ad 029d 05b6 jlz 0x05b6 - 05af 0080 03e0 lri $AR0, #0x03e0 - 05b1 0e08 lris $AC0.M, #0x08 - 05b2 0081 0c40 lri $AR1, #0x0c40 - 05b4 02bf 0c7d call 0x0c7d - 05b6 02df ret - 05b7 0080 0346 lri $AR0, #0x0346 - 05b9 02bf 0072 call 0x0072 - 05bb 02bf 0072 call 0x0072 - 05bd 0081 0346 lri $AR1, #0x0346 - 05bf 193e lrri $AC0.M, @$AR1 - 05c0 193c lrri $AC0.L, @$AR1 - 05c1 009f 0400 lri $AC1.M, #0x0400 - 05c3 00c0 0345 lr $AR0, @0x0345 - 05c5 02bf 0640 call 0x0640 - 05c7 0081 0348 lri $AR1, #0x0348 - 05c9 193e lrri $AC0.M, @$AR1 - 05ca 193c lrri $AC0.L, @$AR1 - 05cb 009f 0800 lri $AC1.M, #0x0800 - 05cd 00c0 0345 lr $AR0, @0x0345 - 05cf 02bf 0640 call 0x0640 - 05d1 0081 0346 lri $AR1, #0x0346 - 05d3 193e lrri $AC0.M, @$AR1 - 05d4 193c lrri $AC0.L, @$AR1 - 05d5 009f 0800 lri $AC1.M, #0x0800 - 05d7 00c0 0345 lr $AR0, @0x0345 - 05d9 02bf 064d call 0x064d - 05db 0081 0348 lri $AR1, #0x0348 - 05dd 193e lrri $AC0.M, @$AR1 - 05de 193c lrri $AC0.L, @$AR1 - 05df 009f 0400 lri $AC1.M, #0x0400 - 05e1 00c0 0345 lr $AR0, @0x0345 - 05e3 02bf 064d call 0x064d - 05e5 029f 004a jmp 0x004a - 05e7 0080 0346 lri $AR0, #0x0346 - 05e9 02bf 0072 call 0x0072 - 05eb 02bf 0072 call 0x0072 - 05ed 0081 0346 lri $AR1, #0x0346 - 05ef 193e lrri $AC0.M, @$AR1 - 05f0 193c lrri $AC0.L, @$AR1 - 05f1 009f 0400 lri $AC1.M, #0x0400 - 05f3 00c0 0345 lr $AR0, @0x0345 - 05f5 02bf 0640 call 0x0640 - 05f7 0081 0348 lri $AR1, #0x0348 - 05f9 193e lrri $AC0.M, @$AR1 - 05fa 193c lrri $AC0.L, @$AR1 - 05fb 009f 0400 lri $AC1.M, #0x0400 - 05fd 00c0 0345 lr $AR0, @0x0345 - 05ff 02bf 064d call 0x064d - 0601 029f 004a jmp 0x004a - 0603 0080 0346 lri $AR0, #0x0346 - 0605 02bf 0072 call 0x0072 - 0607 02bf 0072 call 0x0072 - 0609 0081 0346 lri $AR1, #0x0346 - 060b 193e lrri $AC0.M, @$AR1 - 060c 193c lrri $AC0.L, @$AR1 - 060d 009f 0400 lri $AC1.M, #0x0400 - 060f 00c0 0344 lr $AR0, @0x0344 - 0611 02bf 0640 call 0x0640 - 0613 0081 0348 lri $AR1, #0x0348 - 0615 193e lrri $AC0.M, @$AR1 - 0616 193c lrri $AC0.L, @$AR1 - 0617 009f 0800 lri $AC1.M, #0x0800 - 0619 00c0 0344 lr $AR0, @0x0344 - 061b 02bf 0640 call 0x0640 - 061d 0080 0400 lri $AR0, #0x0400 - 061f 0083 0800 lri $AR3, #0x0800 - 0621 0084 0000 lri $IX0, #0x0000 - 0623 00da 0345 lr $AX0.H, @0x0345 - 0625 00df 0344 lr $AC1.M, @0x0344 - 0627 8f00 set40 - 0628 197b lrri $AX1.H, @$AR3 - 0629 b800 mulx $AX0.H, $AX1.H - 062a 197b lrri $AX1.H, @$AR3 - 062b 007f 0630 bloop $AC1.M, 0x0630 - 062d 199e lrrn $AC0.M, @$AR0 - 062e bc00 mulxac $AX0.H, $AX1.H, $ACC0 - 062f 80b2 nx'sl : $AC0.M, $AX1.H - 0630 0000 nop - 0631 8e00 set16 - 0632 0081 0346 lri $AR1, #0x0346 - 0634 193e lrri $AC0.M, @$AR1 - 0635 193c lrri $AC0.L, @$AR1 - 0636 009f 0400 lri $AC1.M, #0x0400 - 0638 00c0 0344 lr $AR0, @0x0344 - 063a 02bf 064d call 0x064d - 063c 029f 004a jmp 0x004a - 063e 193e lrri $AC0.M, @$AR1 - 063f 193c lrri $AC0.L, @$AR1 - 0640 2fcd srs @DSPA, $AC1.M - 0641 0f00 lris $AC1.M, #0x00 - 0642 2fc9 srs @DSCR, $AC1.M - 0643 2ece srs @DSMAH, $AC0.M - 0644 2ccf srs @DSMAL, $AC0.L - 0645 1fe0 mrr $AC1.M, $AR0 - 0646 1501 lsl $ACC1, #1 - 0647 2fcb srs @DSBL, $AC1.M - 0648 02bf 0651 call 0x0651 - 064a 02df ret - 064b 193e lrri $AC0.M, @$AR1 - 064c 193c lrri $AC0.L, @$AR1 - 064d 2fcd srs @DSPA, $AC1.M - 064e 0f01 lris $AC1.M, #0x01 - 064f 029f 0642 jmp 0x0642 - 0651 26c9 lrs $AC0.M, @DSCR - 0652 02a0 0004 andf $AC0.M, #0x0004 - 0654 029c 0651 jlnz 0x0651 - 0656 02df ret - 0657 193e lrri $AC0.M, @$AR1 - 0658 193c lrri $AC0.L, @$AR1 - 0659 00ff ffcd sr @DSPA, $AC1.M - 065b 0f00 lris $AC1.M, #0x00 - 065c 00ff ffc9 sr @DSCR, $AC1.M - 065e 00fe ffce sr @DSMAH, $AC0.M - 0660 00fc ffcf sr @DSMAL, $AC0.L - 0662 1fe0 mrr $AC1.M, $AR0 - 0663 1501 lsl $ACC1, #1 - 0664 00ff ffcb sr @DSBL, $AC1.M - 0666 02df ret - 0667 00de ffc9 lr $AC0.M, @DSCR - 0669 02a0 0004 andf $AC0.M, #0x0004 - 066b 029c 0667 jlnz 0x0667 - 066d 02df ret - 066e 0080 0346 lri $AR0, #0x0346 - 0670 02bf 0072 call 0x0072 - 0672 02bf 0072 call 0x0072 - 0674 0081 0346 lri $AR1, #0x0346 - 0676 00df 0349 lr $AC1.M, @0x0349 - 0678 0340 ffff andi $AC1.M, #0xffff - 067a 00c0 0345 lr $AR0, @0x0345 - 067c 02bf 063e call 0x063e - 067e 029f 004a jmp 0x004a - 0680 0080 0346 lri $AR0, #0x0346 - 0682 02bf 0072 call 0x0072 - 0684 02bf 0072 call 0x0072 - 0686 0081 0346 lri $AR1, #0x0346 - 0688 00df 0349 lr $AC1.M, @0x0349 - 068a 0340 ffff andi $AC1.M, #0xffff - 068c 00c0 0345 lr $AR0, @0x0345 - 068e 02bf 064b call 0x064b - 0690 029f 004a jmp 0x004a - 0692 0092 00ff lri $CR, #0x00ff - 0694 009e ffff lri $AC0.M, #0xffff - 0696 2ed4 srs @ACSAH, $AC0.M - 0697 2ed5 srs @ACSAL, $AC0.M - 0698 2ed6 srs @ACEAH, $AC0.M - 0699 2ed7 srs @ACEAL, $AC0.M - 069a 02df ret - 069b 00ff ffd1 sr @SampleFormat, $AC1.M - 069d 0340 0003 andi $AC1.M, #0x0003 - 069f 7900 decm $AC1.M - 06a0 02ca lsrn - 06a1 00df 037d lr $AC1.M, @0x037d - 06a3 00dd 037e lr $AC1.L, @0x037e - 06a5 4c00 add $ACC0, $ACC1 - 06a6 00fe ffd8 sr @ACCAH, $AC0.M - 06a8 00fc ffd9 sr @ACCAL, $AC0.L - 06aa 02df ret - 06ab 1fc3 mrr $AC0.M, $AR3 - 06ac 043f addis $ACC0, #0x3f - 06ad 0240 fff0 andi $AC0.M, #0xfff0 - 06af 00fe ffcd sr @DSPA, $AC0.M - 06b1 1c1a mrr $AR0, $AX0.H - 06b2 00da 037f lr $AX0.H, @0x037f - 06b4 4400 addr $ACC0, $AX0.H - 06b5 1f40 mrr $AX0.H, $AR0 - 06b6 1c1e mrr $AR0, $AC0.M - 06b7 1fda mrr $AC0.M, $AX0.H - 06b8 041f addis $ACC0, #0x1f - 06b9 0240 fff0 andi $AC0.M, #0xfff0 - 06bb 1401 lsl $ACC0, #1 - 06bc 00fe ffcb sr @DSBL, $AC0.M - 06be 00de ffc9 lr $AC0.M, @DSCR - 06c0 02a0 0004 andf $AC0.M, #0x0004 - 06c2 029c 06be jlnz 0x06be - 06c4 007a 06c7 bloop $AX0.H, 0x06c7 - 06c6 191e lrri $AC0.M, @$AR0 - 06c7 1b7e srri @$AR3, $AC0.M - 06c8 02df ret - 06c9 8900 clr $ACC1 - 06ca 1ffc mrr $AC1.M, $AC0.L - 06cb 0340 001f andi $AC1.M, #0x001f - 06cd 00ff 037f sr @0x037f, $AC1.M - 06cf 1ffc mrr $AC1.M, $AC0.L - 06d0 0340 ffe0 andi $AC1.M, #0xffe0 - 06d2 1f9f mrr $AC0.L, $AC1.M - 06d3 00df 037d lr $AC1.M, @0x037d - 06d5 00dd 037e lr $AC1.L, @0x037e - 06d7 4c00 add $ACC0, $ACC1 - 06d8 00fe ffce sr @DSMAH, $AC0.M - 06da 00fc ffcf sr @DSMAL, $AC0.L - 06dc 0f00 lris $AC1.M, #0x00 - 06dd 00ff ffc9 sr @DSCR, $AC1.M - 06df 02df ret - 06e0 00df 037f lr $AC1.M, @0x037f - 06e2 157f lsr $ACC1, #-1 - 06e3 00ff 037f sr @0x037f, $AC1.M - 06e5 02df ret - 06e6 8600 tstaxh $AX0.H - 06e7 02d5 retz - 06e8 1f1a mrr $AX0.L, $AX0.H - 06e9 009e 0780 lri $AC0.M, #0x0780 - 06eb 00fe ffcd sr @DSPA, $AC0.M - 06ed 1fda mrr $AC0.M, $AX0.H - 06ee 043f addis $ACC0, #0x3f - 06ef 0240 ffe0 andi $AC0.M, #0xffe0 - 06f1 00fe ffcb sr @DSBL, $AC0.M - 06f3 00de ffc9 lr $AC0.M, @DSCR - 06f5 02a0 0004 andf $AC0.M, #0x0004 - 06f7 029c 06f3 jlnz 0x06f3 - 06f9 8100 clr $ACC0 - 06fa 00de 037f lr $AC0.M, @0x037f - 06fc 147f lsr $ACC0, #-1 - 06fd 0200 0780 addi $AC0.M, #0x0780 - 06ff 1c1e mrr $AR0, $AC0.M - 0700 00de 037f lr $AC0.M, @0x037f - 0702 02a0 0001 andf $AC0.M, #0x0001 - 0704 029d 070d jlz 0x070d - 0706 8100 clr $ACC0 - 0707 191e lrri $AC0.M, @$AR0 - 0708 1488 asl $ACC0, #8 - 0709 1b7e srri @$AR3, $AC0.M - 070a 1fda mrr $AC0.M, $AX0.H - 070b 7800 decm $AC0.M - 070c 1f5e mrr $AX0.H, $AC0.M - 070d 8100 clr $ACC0 - 070e 1fda mrr $AC0.M, $AX0.H - 070f 147f lsr $ACC0, #-1 - 0710 007e 0719 bloop $AC0.M, 0x0719 - 0712 8100 clr $ACC0 - 0713 181e lrr $AC0.M, @$AR0 - 0714 0240 ff00 andi $AC0.M, #0xff00 - 0716 1b7e srri @$AR3, $AC0.M - 0717 191e lrri $AC0.M, @$AR0 - 0718 1488 asl $ACC0, #8 - 0719 1b7e srri @$AR3, $AC0.M - 071a 1fda mrr $AC0.M, $AX0.H - 071b 1f58 mrr $AX0.H, $AX0.L - 071c 02a0 0001 andf $AC0.M, #0x0001 - 071e 02dd retlz - 071f 8100 clr $ACC0 - 0720 181e lrr $AC0.M, @$AR0 - 0721 0240 ff00 andi $AC0.M, #0xff00 - 0723 1b7e srri @$AR3, $AC0.M - 0724 02df ret - 0725 1205 sbclr #0x05 - 0726 8e00 set16 - 0727 00f0 03fd sr @0x03fd, $AC0.H - 0729 00fc 03ff sr @0x03ff, $AC0.L - 072b f400 lsr16 $ACC0 - 072c 00fc 03fe sr @0x03fe, $AC0.L - 072e 00fa 03fa sr @0x03fa, $AX0.H - 0730 8100 clr $ACC0 - 0731 00de fffe lr $AC0.M, @CMBH - 0733 02c0 8000 andcf $AC0.M, #0x8000 - 0735 029c 0826 jlnz 0x0826 - 0737 00da ffff lr $AX0.H, @CMBL - 0739 8600 tstaxh $AX0.H - 073a 0294 07ff jnz 0x07ff - 073c 00de fffe lr $AC0.M, @CMBH - 073e 02c0 8000 andcf $AC0.M, #0x8000 - 0740 029c 073c jlnz 0x073c - 0742 0240 000f andi $AC0.M, #0x000f - 0744 1f5e mrr $AX0.H, $AC0.M - 0745 7400 incm $AC0.M - 0746 0c00 lris $AC0.L, #0x00 - 0747 1404 lsl $ACC0, #4 - 0748 00fe 034e sr @0x034e, $AC0.M - 074a 1fda mrr $AC0.M, $AX0.H - 074b 1f40 mrr $AX0.H, $AR0 - 074c 0200 04fc addi $AC0.M, #0x04fc - 074e 1c1e mrr $AR0, $AC0.M - 074f 00de ffff lr $AC0.M, @CMBL - 0751 1a1e srr @$AR0, $AC0.M - 0752 1c1a mrr $AR0, $AX0.H - 0753 00de 03fe lr $AC0.M, @0x03fe - 0755 00dc 03ff lr $AC0.L, @0x03ff - 0757 00d0 03fd lr $AC0.H, @0x03fd - 0759 00da 03fa lr $AX0.H, @0x03fa - 075b 1305 sbset #0x05 - 075c 02ff rti - 075d 009a 0002 lri $AX0.H, #0x0002 - 075f 00fa 03a3 sr @0x03a3, $AX0.H - 0761 00e0 03f9 sr @0x03f9, $AR0 - 0763 02bf 07e9 call 0x07e9 - 0765 16fc dcd1 si @DMBH, #0xdcd1 - 0767 16fd 0002 si @DMBL, #0x0002 - 0769 16fb 0001 si @DIRQ, #0x0001 - 076b 0021 halt - 076c 0784 cmpis $ACC1, #0x84 - 076d 0785 cmpis $ACC1, #0x85 - 076e 07c5 cmpis $ACC1, #0xc5 - 076f 07c8 cmpis $ACC1, #0xc8 - 0770 00e0 03f9 sr @0x03f9, $AR0 - 0772 009e 0005 lri $AC0.M, #0x0005 - 0774 02bf 07d7 call 0x07d7 - 0776 8e00 set16 - 0777 8100 clr $ACC0 - 0778 8900 clr $ACC1 - 0779 02bf 07cb call 0x07cb - 077b 27ff lrs $AC1.M, @CMBL - 077c 009e 076c lri $AC0.M, #0x076c - 077e 4c00 add $ACC0, $ACC1 - 077f 1c7e mrr $AR3, $AC0.M - 0780 0313 ilrr $AC1.M, @$AR3 - 0781 1c7f mrr $AR3, $AC1.M - 0782 176f jmpr $AR3 - 0783 0021 halt - 0784 0021 halt - 0785 009a 0002 lri $AX0.H, #0x0002 - 0787 00fa 03a3 sr @0x03a3, $AX0.H - 0789 8100 clr $ACC0 - 078a 8900 clr $ACC1 - 078b 02bf 07cb call 0x07cb - 078d 24ff lrs $AC0.L, @CMBL - 078e 02bf 07d1 call 0x07d1 - 0790 25ff lrs $AC1.L, @CMBL - 0791 02bf 07d1 call 0x07d1 - 0793 27ff lrs $AC1.M, @CMBL - 0794 2ece srs @DSMAH, $AC0.M - 0795 2ccf srs @DSMAL, $AC0.L - 0796 16c9 0001 si @DSCR, #0x0001 - 0798 2fcd srs @DSPA, $AC1.M - 0799 2dcb srs @DSBL, $AC1.L - 079a 8100 clr $ACC0 - 079b 8900 clr $ACC1 - 079c 02bf 07cb call 0x07cb - 079e 24ff lrs $AC0.L, @CMBL - 079f 1c9e mrr $IX0, $AC0.M - 07a0 1cbc mrr $IX1, $AC0.L - 07a1 02bf 07d1 call 0x07d1 - 07a3 25ff lrs $AC1.L, @CMBL - 07a4 02bf 07d1 call 0x07d1 - 07a6 27ff lrs $AC1.M, @CMBL - 07a7 1cdf mrr $IX2, $AC1.M - 07a8 1cfd mrr $IX3, $AC1.L - 07a9 8100 clr $ACC0 - 07aa 02bf 07cb call 0x07cb - 07ac 26ff lrs $AC0.M, @CMBL - 07ad 1c1e mrr $AR0, $AC0.M - 07ae 8900 clr $ACC1 - 07af 02bf 07d1 call 0x07d1 - 07b1 20ff lrs $AX0.L, @CMBL - 07b2 1f5f mrr $AX0.H, $AC1.M - 07b3 02bf 07cb call 0x07cb - 07b5 21ff lrs $AX1.L, @CMBL - 07b6 02bf 07cb call 0x07cb - 07b8 23ff lrs $AX1.H, @CMBL - 07b9 26c9 lrs $AC0.M, @DSCR - 07ba 02a0 0004 andf $AC0.M, #0x0004 - 07bc 029c 07b9 jlnz 0x07b9 - 07be 1206 sbclr #0x06 - 07bf 1203 sbclr #0x03 - 07c0 1204 sbclr #0x04 - 07c1 1205 sbclr #0x05 - 07c2 029f 80b5 jmp 0x80b5 - 07c4 0021 halt - 07c5 029f 8000 jmp 0x8000 - 07c7 0021 halt - 07c8 00c0 03f9 lr $AR0, @0x03f9 - 07ca 170f jmpr $AR0 - 07cb 26fe lrs $AC0.M, @CMBH - 07cc 02c0 8000 andcf $AC0.M, #0x8000 - 07ce 029c 07cb jlnz 0x07cb - 07d0 02df ret - 07d1 27fe lrs $AC1.M, @CMBH - 07d2 03c0 8000 andcf $AC1.M, #0x8000 - 07d4 029c 07d1 jlnz 0x07d1 - 07d6 02df ret - -void SEND_DCD1(AC0.M) { - 07d7 02bf 07ef call 0x07ef - 07d9 16fc dcd1 si @DMBH, #0xdcd1 - 07db 2efd srs @DMBL, $AC0.M - 07dc 16fb 0001 si @DIRQ, #0x0001 - 07de 02bf 07ef call 0x07ef - 07e0 02df ret -} - -void SEND_F355(AC0.M) { - 07e1 02bf 07ef call 0x07ef - 07e3 16fc f355 si @DMBH, #0xf355 - 07e5 2efd srs @DMBL, $AC0.M - 07e6 02bf 07ef call 0x07ef - 07e8 02df ret -} - - 07e9 26fc lrs $AC0.M, @DMBH - 07ea 02c0 8000 andcf $AC0.M, #0x8000 - 07ec 029d 07e9 jlz 0x07e9 - 07ee 02df ret - 07ef 27fc lrs $AC1.M, @DMBH - 07f0 03c0 8000 andcf $AC1.M, #0x8000 - 07f2 029d 07ef jlz 0x07ef - 07f4 02df ret - 07f5 009a 0280 lri $AX0.H, #0x0280 - 07f7 00fa 0350 sr @0x0350, $AX0.H - 07f9 00fa 0351 sr @0x0351, $AX0.H - 07fb 0a00 lris $AX0.H, #0x00 - 07fc 00fa 0352 sr @0x0352, $AX0.H - 07fe 02df ret - 07ff 00e0 03fb sr @0x03fb, $AR0 - 0801 00e8 03fc sr @0x03fc, $WR0 - 0803 00c0 0350 lr $AR0, @0x0350 - 0805 0088 002f lri $WR0, #0x002f - 0807 1b1a srri @$AR0, $AX0.H - 0808 00de fffe lr $AC0.M, @CMBH - 080a 02c0 8000 andcf $AC0.M, #0x8000 - 080c 029c 0808 jlnz 0x0808 - 080e 00dc ffff lr $AC0.L, @CMBL - 0810 1b1e srri @$AR0, $AC0.M - 0811 1b1c srri @$AR0, $AC0.L - 0812 1fda mrr $AC0.M, $AX0.H - 0813 7800 decm $AC0.M - 0814 1f5e mrr $AX0.H, $AC0.M - 0815 8600 tstaxh $AX0.H - 0816 0294 0808 jnz 0x0808 - 0818 8100 clr $ACC0 - 0819 00de 0352 lr $AC0.M, @0x0352 - 081b 7400 incm $AC0.M - 081c 00fe 0352 sr @0x0352, $AC0.M - 081e 00e0 0350 sr @0x0350, $AR0 - 0820 00c0 03fb lr $AR0, @0x03fb - 0822 00c8 03fc lr $WR0, @0x03fc - 0824 029f 0753 jmp 0x0753 - 0826 00e0 03fb sr @0x03fb, $AR0 - 0828 00e8 03fc sr @0x03fc, $WR0 - 082a 00c0 0350 lr $AR0, @0x0350 - 082c 0088 002f lri $WR0, #0x002f - 082e 0a00 lris $AX0.H, #0x00 - 082f 1b1a srri @$AR0, $AX0.H - 0830 029f 0818 jmp 0x0818 - 0832 00c0 0351 lr $AR0, @0x0351 - 0834 0088 002f lri $WR0, #0x002f - 0836 00da 0352 lr $AX0.H, @0x0352 - 0838 8600 tstaxh $AX0.H - 0839 0295 085a jz 0x085a - 083b 1205 sbclr #0x05 - 083c 00da 0352 lr $AX0.H, @0x0352 - 083e 1fda mrr $AC0.M, $AX0.H - 083f 7800 decm $AC0.M - 0840 00fe 0352 sr @0x0352, $AC0.M - 0842 1305 sbset #0x05 - 0843 0081 0356 lri $AR1, #0x0356 - 0845 191e lrri $AC0.M, @$AR0 - 0846 02c0 8000 andcf $AC0.M, #0x8000 - 0848 029d 085e jlz 0x085e - 084a 1f5e mrr $AX0.H, $AC0.M - 084b 8600 tstaxh $AX0.H - 084c 0295 0862 jz 0x0862 - 084e 007a 0853 bloop $AX0.H, 0x0853 - 0850 191e lrri $AC0.M, @$AR0 - 0851 1b3e srri @$AR1, $AC0.M - 0852 191e lrri $AC0.M, @$AR0 - 0853 1b3e srri @$AR1, $AC0.M - 0854 00e0 0351 sr @0x0351, $AR0 - 0856 0088 ffff lri $WR0, #0xffff - 0858 029f 0036 jmp 0x0036 - 085a 0088 ffff lri $WR0, #0xffff - 085c 029f 002b jmp 0x002b - 085e 00e0 0351 sr @0x0351, $AR0 - 0860 029f 0836 jmp 0x0836 - 0862 0080 0832 lri $AR0, #0x0832 - 0864 029f 075d jmp 0x075d - 0866 8100 clr $ACC0 - 0867 0e10 lris $AC0.M, #0x10 - 0868 2232 lrs $AX0.H, @0x0032 - 0869 8600 tstaxh $AX0.H - 086a 02d5 retz - 086b 5400 subr $ACC0, $AX0.H - 086c 0200 0458 addi $AC0.M, #0x0458 - 086e 1c1e mrr $AR0, $AC0.M - 086f 1fda mrr $AC0.M, $AX0.H - 0870 04fe addis $ACC0, #0xfe - 0871 1f1e mrr $AX0.L, $AC0.M - 0872 191e lrri $AC0.M, @$AR0 - 0873 0291 0879 jl 0x0879 - 0875 191a lrri $AX0.H, @$AR0 - 0876 0058 loop $AX0.L - 0877 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0878 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 0879 1b7e srri @$AR3, $AC0.M - 087a 02df ret - 087b 02bf 0866 call 0x0866 - 087d 8100 clr $ACC0 - 087e 2632 lrs $AC0.M, @0x0032 - 087f 5c00 sub $ACC0, $ACC1 - 0880 2e32 srs @0x0032, $AC0.M - 0881 0092 00ff lri $CR, #0x00ff - 0883 02df ret - 0884 00de 04fb lr $AC0.M, @0x04fb - 0886 7400 incm $AC0.M - 0887 00fe 04fb sr @0x04fb, $AC0.M - 0889 8100 clr $ACC0 - 088a 2e32 srs @0x0032, $AC0.M - 088b 2e66 srs @0x0066, $AC0.M - 088c 2e67 srs @0x0067, $AC0.M - 088d 268a lrs $AC0.M, @0xff8a - 088e 248b lrs $AC0.L, @0xff8b - 088f 2e3a srs @0x003a, $AC0.M - 0890 2c3b srs @0x003b, $AC0.L - 0891 268c lrs $AC0.M, @0xff8c - 0892 248d lrs $AC0.L, @0xff8d - 0893 2e38 srs @0x0038, $AC0.M - 0894 2c39 srs @0x0039, $AC0.L - 0895 02df ret - 0896 8100 clr $ACC0 - 0897 2689 lrs $AC0.M, @0xff89 - 0898 0240 000f andi $AC0.M, #0x000f - 089a 1f5e mrr $AX0.H, $AC0.M - 089b 8100 clr $ACC0 - 089c 0e10 lris $AC0.M, #0x10 - 089d 5400 subr $ACC0, $AX0.H - 089e 2e32 srs @0x0032, $AC0.M - 089f 268a lrs $AC0.M, @0xff8a - 08a0 248b lrs $AC0.L, @0xff8b - 08a1 2288 lrs $AX0.H, @0xff88 - 08a2 2089 lrs $AX0.L, @0xff89 - 08a3 5800 subax $ACC0, $AX0.L - 08a4 0a00 lris $AX0.H, #0x00 - 08a5 2032 lrs $AX0.L, @0x0032 - 08a6 5800 subax $ACC0, $AX0.L - 08a7 2e3a srs @0x003a, $AC0.M - 08a8 2c3b srs @0x003b, $AC0.L - 08a9 02df ret - 08aa 0092 0004 lri $CR, #0x0004 - 08ac 8100 clr $ACC0 - 08ad 2604 lrs $AC0.M, @0x0004 - 08ae b100 tst $ACC0 - 08af 02b4 0884 callnz 0x0884 - 08b1 8100 clr $ACC0 - 08b2 2601 lrs $AC0.M, @0x0001 - 08b3 b100 tst $ACC0 - 08b4 0294 0952 jnz 0x0952 - 08b6 2232 lrs $AX0.H, @0x0032 - 08b7 c900 cmpar $ACC0, $AX1.H - 08b8 0293 087b jle 0x087b - 08ba 5500 subr $ACC1, $AX0.H - 08bb 02bf 0866 call 0x0866 - 08bd 223a lrs $AX0.H, @0x003a - 08be 8600 tstaxh $AX0.H - 08bf 0294 08c6 jnz 0x08c6 - 08c1 8100 clr $ACC0 - 08c2 263b lrs $AC0.M, @0x003b - 08c3 8200 cmp - 08c4 0291 0918 jl 0x0918 - 08c6 8100 clr $ACC0 - 08c7 1fdf mrr $AC0.M, $AC1.M - 08c8 040f addis $ACC0, #0x0f - 08c9 147c lsr $ACC0, #-4 - 08ca 1f7e mrr $AX1.H, $AC0.M - 08cb 0c00 lris $AC0.L, #0x00 - 08cc 1404 lsl $ACC0, #4 - 08cd 1f1e mrr $AX0.L, $AC0.M - 08ce 0a00 lris $AX0.H, #0x00 - 08cf 8100 clr $ACC0 - 08d0 263a lrs $AC0.M, @0x003a - 08d1 243b lrs $AC0.L, @0x003b - 08d2 5800 subax $ACC0, $AX0.L - 08d3 0290 08de jge 0x08de - 08d5 8100 clr $ACC0 - 08d6 263b lrs $AC0.M, @0x003b - 08d7 5c00 sub $ACC0, $ACC1 - 08d8 2e32 srs @0x0032, $AC0.M - 08d9 8100 clr $ACC0 - 08da 2e3a srs @0x003a, $AC0.M - 08db 2e3b srs @0x003b, $AC0.M - 08dc 029f 08e4 jmp 0x08e4 - 08de 2e3a srs @0x003a, $AC0.M - 08df 2c3b srs @0x003b, $AC0.L - 08e0 0c00 lris $AC0.L, #0x00 - 08e1 1fd8 mrr $AC0.M, $AX0.L - 08e2 5c00 sub $ACC0, $ACC1 - 08e3 2e32 srs @0x0032, $AC0.M - 08e4 8100 clr $ACC0 - 08e5 1fdb mrr $AC0.M, $AX1.H - 08e6 02bf 0958 call 0x0958 - 08e8 2232 lrs $AX0.H, @0x0032 - 08e9 8600 tstaxh $AX0.H - 08ea 0295 0915 jz 0x0915 - 08ec 0a10 lris $AX0.H, #0x10 - 08ed 8100 clr $ACC0 - 08ee 1fc3 mrr $AC0.M, $AR3 - 08ef 5400 subr $ACC0, $AX0.H - 08f0 1c7e mrr $AR3, $AC0.M - 08f1 0080 0458 lri $AR0, #0x0458 - 08f3 197e lrri $AC0.M, @$AR3 - 08f4 197a lrri $AX0.H, @$AR3 - 08f5 100e loopi #0x0e - 08f6 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H - 08f7 1b1e srri @$AR0, $AC0.M - 08f8 1b1a srri @$AR0, $AX0.H - 08f9 8100 clr $ACC0 - 08fa 263a lrs $AC0.M, @0x003a - 08fb 243b lrs $AC0.L, @0x003b - 08fc b100 tst $ACC0 - 08fd 0294 0915 jnz 0x0915 - 08ff 2232 lrs $AX0.H, @0x0032 - 0900 8600 tstaxh $AX0.H - 0901 0295 0915 jz 0x0915 - 0903 0080 0467 lri $AR0, #0x0467 - 0905 8100 clr $ACC0 - 0906 268b lrs $AC0.M, @0xff8b - 0907 b100 tst $ACC0 - 0908 0295 0915 jz 0x0915 - 090a 0200 000f addi $AC0.M, #0x000f - 090c 0240 000f andi $AC0.M, #0x000f - 090e 0200 0458 addi $AC0.M, #0x0458 - 0910 1c7e mrr $AR3, $AC0.M - 0911 007a 0914 bloop $AX0.H, 0x0914 - 0913 18fe lrrd $AC0.M, @$AR3 - 0914 1a9e srrd @$AR0, $AC0.M - 0915 0092 00ff lri $CR, #0x00ff - 0917 02df ret - 0918 b100 tst $ACC0 - 0919 0295 0928 jz 0x0928 - 091b 5d00 sub $ACC1, $ACC0 - 091c 040f addis $ACC0, #0x0f - 091d 147c lsr $ACC0, #-4 - 091e 0c00 lris $AC0.L, #0x00 - 091f 00e3 0363 sr @0x0363, $AR3 - 0921 02bf 0958 call 0x0958 - 0923 00de 0363 lr $AC0.M, @0x0363 - 0925 223b lrs $AX0.H, @0x003b - 0926 4400 addr $ACC0, $AX0.H - 0927 1c7e mrr $AR3, $AC0.M - 0928 8100 clr $ACC0 - 0929 2681 lrs $AC0.M, @0xff81 - 092a b100 tst $ACC0 - 092b 0295 0950 jz 0x0950 - 092d 2380 lrs $AX1.H, @0xff80 - 092e 2688 lrs $AC0.M, @0xff88 - 092f 2489 lrs $AC0.L, @0xff89 - 0930 1408 lsl $ACC0, #8 - 0931 14f4 asr $ACC0, #-12 - 0932 2380 lrs $AX1.H, @0xff80 - 0933 8d00 set15 - 0934 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L - 0935 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0936 8c00 clr15 - 0937 f000 lsl16 $ACC0 - 0938 4e00 addp $ACC0 - 0939 238c lrs $AX1.H, @0xff8c - 093a 218d lrs $AX1.L, @0xff8d - 093b 4a00 addax $ACC0, $AX1.L - 093c 2e38 srs @0x0038, $AC0.M - 093d 2c39 srs @0x0039, $AC0.L - 093e 2682 lrs $AC0.M, @0xff82 - 093f 2e67 srs @0x0067, $AC0.M - 0940 2683 lrs $AC0.M, @0xff83 - 0941 2e66 srs @0x0066, $AC0.M - 0942 00e3 0363 sr @0x0363, $AR3 - 0944 0083 0458 lri $AR3, #0x0458 - 0946 8100 clr $ACC0 - 0947 0e01 lris $AC0.M, #0x01 - 0948 02bf 0958 call 0x0958 - 094a 00c3 0363 lr $AR3, @0x0363 - 094c 02bf 0896 call 0x0896 - 094e 029f 08b6 jmp 0x08b6 - 0950 0e01 lris $AC0.M, #0x01 - 0951 2e01 srs @0x0001, $AC0.M - 0952 8100 clr $ACC0 - 0953 005f loop $AC1.M - 0954 1b7e srri @$AR3, $AC0.M - 0955 0092 00ff lri $CR, #0x00ff - 0957 02df ret - 0958 00ff 0360 sr @0x0360, $AC1.M - 095a 00fe 0361 sr @0x0361, $AC0.M - 095c 2638 lrs $AC0.M, @0x0038 - 095d 2439 lrs $AC0.L, @0x0039 - 095e 0f05 lris $AC1.M, #0x05 - 095f 02bf 069b call 0x069b - 0961 2638 lrs $AC0.M, @0x0038 - 0962 2439 lrs $AC0.L, @0x0039 - 0963 8900 clr $ACC1 - 0964 00df 0361 lr $AC1.M, @0x0361 - 0966 2280 lrs $AX0.H, @0xff80 - 0967 d000 mulc $AC1.M, $AX0.H - 0968 6f00 movp $ACC1 - 0969 4c00 add $ACC0, $ACC1 - 096a 2e38 srs @0x0038, $AC0.M - 096b 2c39 srs @0x0039, $AC0.L - 096c 8100 clr $ACC0 - 096d 00de 0361 lr $AC0.M, @0x0361 - 096f 007e 09d6 bloop $AC0.M, 0x09d6 - 0971 0080 ffd3 lri $AR0, #0xffd3 - 0973 0084 0000 lri $IX0, #0x0000 - 0975 199e lrrn $AC0.M, @$AR0 - 0976 8900 clr $ACC1 - 0977 1ffe mrr $AC1.M, $AC0.M - 0978 1401 lsl $ACC0, #1 - 0979 0240 001e andi $AC0.M, #0x001e - 097b 0200 0300 addi $AC0.M, #0x0300 - 097d 1c3e mrr $AR1, $AC0.M - 097e 157c lsr $ACC1, #-4 - 097f 0340 000f andi $AC1.M, #0x000f - 0981 0a11 lris $AX0.H, #0x11 - 0982 5500 subr $ACC1, $AX0.H - 0983 8100 clr $ACC0 - 0984 2680 lrs $AC0.M, @0xff80 - 0985 0605 cmpis $ACC0, #0x05 - 0986 0295 099f jz 0x099f - 0988 009a 00f0 lri $AX0.H, #0x00f0 - 098a 0b0f lris $AX1.H, #0x0f - 098b 0082 0364 lri $AR2, #0x0364 - 098d 1998 lrrn $AX0.L, @$AR0 - 098e 6000 movr $ACC0, $AX0.L - 098f 1107 0996 bloopi #0x07, 0x0996 - 0991 3400 andr $AC0.M, $AX0.H - 0992 1408 lsl $ACC0, #8 - 0993 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0994 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 - 0995 140c lsl $ACC0, #12 - 0996 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 0997 3400 andr $AC0.M, $AX0.H - 0998 1408 lsl $ACC0, #8 - 0999 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 099a 3600 andr $AC0.M, $AX1.H - 099b 140c lsl $ACC0, #12 - 099c 1b5e srri @$AR2, $AC0.M - 099d 029f 09bf jmp 0x09bf - 099f 009a c000 lri $AX0.H, #0xc000 - 09a1 0082 0364 lri $AR2, #0x0364 - 09a3 1998 lrrn $AX0.L, @$AR0 - 09a4 6000 movr $ACC0, $AX0.L - 09a5 1103 09b2 bloopi #0x03, 0x09b2 - 09a7 1408 lsl $ACC0, #8 - 09a8 3400 andr $AC0.M, $AX0.H - 09a9 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09aa 140a lsl $ACC0, #10 - 09ab 3400 andr $AC0.M, $AX0.H - 09ac 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09ad 140c lsl $ACC0, #12 - 09ae 3400 andr $AC0.M, $AX0.H - 09af 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b0 140e lsl $ACC0, #14 - 09b1 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 - 09b2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b3 1408 lsl $ACC0, #8 - 09b4 3400 andr $AC0.M, $AX0.H - 09b5 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b6 140a lsl $ACC0, #10 - 09b7 3400 andr $AC0.M, $AX0.H - 09b8 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09b9 140c lsl $ACC0, #12 - 09ba 3400 andr $AC0.M, $AX0.H - 09bb 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M - 09bc 140e lsl $ACC0, #14 - 09bd 3400 andr $AC0.M, $AX0.H - 09be 1b5e srri @$AR2, $AC0.M - 09bf 8f00 set40 - 09c0 1f7f mrr $AX1.H, $AC1.M - 09c1 2066 lrs $AX0.L, @0x0066 - 09c2 2767 lrs $AC1.M, @0x0067 - 09c3 193a lrri $AX0.H, @$AR1 - 09c4 1939 lrri $AX1.L, @$AR1 - 09c5 0080 0364 lri $AR0, #0x0364 - 09c7 a000 mulx $AX0.L, $AX1.L - 09c8 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 - 09c9 1108 09d2 bloopi #0x08, 0x09d2 - 09cb 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L - 09cc a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 - 09cd 1485 asl $ACC0, #5 - 09ce e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M - 09cf 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L - 09d0 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 - 09d1 1585 asl $ACC1, #5 - 09d2 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M - 09d3 2f67 srs @0x0067, $AC1.M - 09d4 8e00 set16 - 09d5 1ff8 mrr $AC1.M, $AX0.L - 09d6 2f66 srs @0x0066, $AC1.M - 09d7 8900 clr $ACC1 - 09d8 00df 0360 lr $AC1.M, @0x0360 - 09da 02df ret - 09db b100 tst $ACC0 - 09dc 02d5 retz - 09dd 04fe addis $ACC0, #0xfe - 09de 1f1e mrr $AX0.L, $AC0.M - 09df 191e lrri $AC0.M, @$AR0 - 09e0 0291 09e6 jl 0x09e6 - 09e2 191a lrri $AX0.H, @$AR0 - 09e3 0058 loop $AX0.L - 09e4 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 09e5 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M - 09e6 1b7e srri @$AR3, $AC0.M - 09e7 02df ret - 09e8 8100 clr $ACC0 - 09e9 1f5e mrr $AX0.H, $AC0.M - 09ea 00d8 0402 lr $AX0.L, @0x0402 - 09ec 00dc 0430 lr $AC0.L, @0x0430 - 09ee 0080 0520 lri $AR0, #0x0520 - 09f0 00df 0480 lr $AC1.M, @0x0480 - 09f2 1501 lsl $ACC1, #1 - 09f3 0340 007e andi $AC1.M, #0x007e - 09f5 0300 09fd addi $AC1.M, #0x09fd - 09f7 1c5f mrr $AR2, $AC1.M - 09f8 175f callr $AR2 - 09f9 00fc 0430 sr @0x0430, $AC0.L - 09fb 029f 0386 jmp 0x0386 - 09fd 029f 0a1e jmp 0x0a1e - 09ff 029f 0a59 jmp 0x0a59 - 0a01 029f 0a41 jmp 0x0a41 - 0a03 029f 0a2e jmp 0x0a2e - 0a05 029f 0a67 jmp 0x0a67 - 0a07 029f 0a1d jmp 0x0a1d - 0a09 029f 0a85 jmp 0x0a85 - 0a0b 029f 0a88 jmp 0x0a88 - 0a0d 029f 0a1d jmp 0x0a1d - 0a0f 029f 0a1d jmp 0x0a1d - 0a11 029f 0aa6 jmp 0x0aa6 - 0a13 029f 0a5f jmp 0x0a5f - 0a15 029f 0a63 jmp 0x0a63 - 0a17 029f 0a1d jmp 0x0a1d - 0a19 029f 0a1d jmp 0x0a1d - 0a1b 029f 0a1d jmp 0x0a1d - 0a1d 02df ret - 0a1e 1401 lsl $ACC0, #1 - 0a1f 009b c000 lri $AX1.H, #0xc000 - 0a21 0099 4000 lri $AX1.L, #0x4000 - 0a23 1150 0a2b bloopi #0x50, 0x0a2b - 0a25 02c0 0001 andcf $AC0.M, #0x0001 - 0a27 027c iflnz - 0a28 1b1b srri @$AR0, $AX1.H - 0a29 027d iflz - 0a2a 1b19 srri @$AR0, $AX1.L - 0a2b 4800 addax $ACC0, $AX0.L - 0a2c 147f lsr $ACC0, #-1 - 0a2d 02df ret - 0a2e 1402 lsl $ACC0, #2 - 0a2f 8900 clr $ACC1 - 0a30 1fb8 mrr $AC1.L, $AX0.L - 0a31 1501 lsl $ACC1, #1 - 0a32 009b c000 lri $AX1.H, #0xc000 - 0a34 0099 4000 lri $AX1.L, #0x4000 - 0a36 1150 0a3e bloopi #0x50, 0x0a3e - 0a38 02c0 0003 andcf $AC0.M, #0x0003 - 0a3a 027c iflnz - 0a3b 1b1b srri @$AR0, $AX1.H - 0a3c 027d iflz - 0a3d 1b19 srri @$AR0, $AX1.L - 0a3e 4c00 add $ACC0, $ACC1 - 0a3f 147e lsr $ACC0, #-2 - 0a40 02df ret - 0a41 1401 lsl $ACC0, #1 - 0a42 0081 0ca0 lri $AR1, #0x0ca0 - 0a44 009b c000 lri $AX1.H, #0xc000 - 0a46 0099 4000 lri $AX1.L, #0x4000 - 0a48 8900 clr $ACC1 - 0a49 0082 0000 lri $AR2, #0x0000 - 0a4b 1150 0a56 bloopi #0x50, 0x0a56 - 0a4d 02c0 0001 andcf $AC0.M, #0x0001 - 0a4f 027c iflnz - 0a50 1b1b srri @$AR0, $AX1.H - 0a51 027d iflz - 0a52 1b19 srri @$AR0, $AX1.L - 0a53 183d lrr $AC1.L, @$AR1 - 0a54 4900 addax $ACC1, $AX0.L - 0a55 1fe2 mrr $AC1.M, $AR2 - 0a56 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M - 0a57 147f lsr $ACC0, #-1 - 0a58 02df ret - 0a59 8900 clr $ACC1 - 0a5a 1fb8 mrr $AC1.L, $AX0.L - 0a5b 157f lsr $ACC1, #-1 - 0a5c 1050 loopi #0x50 - 0a5d 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L - 0a5e 02df ret - 0a5f 0082 0180 lri $AR2, #0x0180 - 0a61 029f 0a69 jmp 0x0a69 - 0a63 0082 01c0 lri $AR2, #0x01c0 - 0a65 029f 0a69 jmp 0x0a69 - 0a67 0082 0140 lri $AR2, #0x0140 - 0a69 008a 003f lri $WR2, #0x003f - 0a6b 0086 0000 lri $IX2, #0x0000 - 0a6d 1406 lsl $ACC0, #6 - 0a6e 8900 clr $ACC1 - 0a6f 1fb8 mrr $AC1.L, $AX0.L - 0a70 1505 lsl $ACC1, #5 - 0a71 009b 003f lri $AX1.H, #0x003f - 0a73 009a 0000 lri $AX0.H, #0x0000 - 0a75 3600 andr $AC0.M, $AX1.H - 0a76 1cde mrr $IX2, $AC0.M - 0a77 001a addarn $AR2, $IX2 - 0a78 3400 andr $AC0.M, $AX0.H - 0a79 1150 0a7f bloopi #0x50, 0x0a7f - 0a7b 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a7c 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a7d 1cde mrr $IX2, $AC0.M - 0a7e 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0a7f 1b19 srri @$AR0, $AX1.L - 0a80 1fc2 mrr $AC0.M, $AR2 - 0a81 147a lsr $ACC0, #-6 - 0a82 008a ffff lri $WR2, #0xffff - 0a84 02df ret - 0a85 1050 loopi #0x50 - 0a86 1b18 srri @$AR0, $AX0.L - 0a87 02df ret - 0a88 0082 0100 lri $AR2, #0x0100 - 0a8a 008a 003f lri $WR2, #0x003f - 0a8c 0086 0000 lri $IX2, #0x0000 - 0a8e 1406 lsl $ACC0, #6 - 0a8f 8900 clr $ACC1 - 0a90 1fb8 mrr $AC1.L, $AX0.L - 0a91 1505 lsl $ACC1, #5 - 0a92 009b 003f lri $AX1.H, #0x003f - 0a94 009a 0000 lri $AX0.H, #0x0000 - 0a96 3600 andr $AC0.M, $AX1.H - 0a97 1cde mrr $IX2, $AC0.M - 0a98 001a addarn $AR2, $IX2 - 0a99 3400 andr $AC0.M, $AX0.H - 0a9a 1150 0aa0 bloopi #0x50, 0x0aa0 - 0a9c 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0a9d 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0a9e 1cde mrr $IX2, $AC0.M - 0a9f 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0aa0 1b19 srri @$AR0, $AX1.L - 0aa1 1fc2 mrr $AC0.M, $AR2 - 0aa2 147a lsr $ACC0, #-6 - 0aa3 008a ffff lri $WR2, #0xffff - 0aa5 02df ret - 0aa6 0082 0100 lri $AR2, #0x0100 - 0aa8 008a 003f lri $WR2, #0x003f - 0aaa 0086 0000 lri $IX2, #0x0000 - 0aac 0081 0ca0 lri $AR1, #0x0ca0 - 0aae 1406 lsl $ACC0, #6 - 0aaf 8900 clr $ACC1 - 0ab0 1fb8 mrr $AC1.L, $AX0.L - 0ab1 1505 lsl $ACC1, #5 - 0ab2 009b 003f lri $AX1.H, #0x003f - 0ab4 009a 0000 lri $AX0.H, #0x0000 - 0ab6 3600 andr $AC0.M, $AX1.H - 0ab7 1cde mrr $IX2, $AC0.M - 0ab8 001a addarn $AR2, $IX2 - 0ab9 3400 andr $AC0.M, $AX0.H - 0aba 1150 0ac5 bloopi #0x50, 0x0ac5 - 0abc 1939 lrri $AX1.L, @$AR1 - 0abd a000 mulx $AX0.L, $AX1.L - 0abe 140a lsl $ACC0, #10 - 0abf 4e00 addp $ACC0 - 0ac0 1476 lsr $ACC0, #-10 - 0ac1 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 - 0ac2 3606 andr'dr $AC0.M, $AX1.H : $AR2 - 0ac3 1cde mrr $IX2, $AC0.M - 0ac4 340e andr'nr $AC0.M, $AX0.H : $AR2 - 0ac5 1b19 srri @$AR0, $AX1.L - 0ac6 1fc2 mrr $AC0.M, $AR2 - 0ac7 147a lsr $ACC0, #-6 - 0ac8 008a ffff lri $WR2, #0xffff - 0aca 02df ret - 0acb 0080 01be lri $AR0, #0x01be - 0acd 1918 lrri $AX0.L, @$AR0 - 0ace 191a lrri $AX0.H, @$AR0 - 0acf 0080 0180 lri $AR0, #0x0180 - 0ad1 0083 0180 lri $AR3, #0x0180 - 0ad3 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0ad4 1ffe mrr $AC1.M, $AC0.M - 0ad5 1120 0adc bloopi #0x20, 0x0adc - 0ad7 7c00 neg $ACC0 - 0ad8 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 - 0ad9 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0ada c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 - 0adb 1501 lsl $ACC1, #1 - 0adc 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M - 0add 0080 01fe lri $AR0, #0x01fe - 0adf 191a lrri $AX0.H, @$AR0 - 0ae0 1918 lrri $AX0.L, @$AR0 - 0ae1 0080 01c0 lri $AR0, #0x01c0 - 0ae3 0083 01c0 lri $AR3, #0x01c0 - 0ae5 1ff8 mrr $AC1.M, $AX0.L - 0ae6 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 - 0ae7 f800 addpaxz $ACC0, $AX0.H - 0ae8 0240 01ff andi $AC0.M, #0x01ff - 0aea 0260 2000 ori $AC0.M, #0x2000 - 0aec 02bf 0aef call 0x0aef - 0aee 02df ret - 0aef b900 tst $ACC1 - 0af0 0272 ifg - 0af1 7c00 neg $ACC0 - 0af2 1f7e mrr $AX1.H, $AC0.M - 0af3 4700 addr $ACC1, $AX1.H - 0af4 1110 0af9 bloopi #0x10, 0x0af9 - 0af6 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0af7 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0af8 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0af9 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M - 0afa 02df ret - 0afb 02bf 0b68 call 0x0b68 - 0afd 2201 lrs $AX0.H, @0x0001 - 0afe 8600 tstaxh $AX0.H - 0aff 0294 0b10 jnz 0x0b10 - 0b01 2204 lrs $AX0.H, @0x0004 - 0b02 8600 tstaxh $AX0.H - 0b03 02b4 0b57 callnz 0x0b57 - 0b05 8100 clr $ACC0 - 0b06 2605 lrs $AC0.M, @0x0005 - 0b07 b100 tst $ACC0 - 0b08 0295 0b1d jz 0x0b1d - 0b0a 8100 clr $ACC0 - 0b0b 2e05 srs @0x0005, $AC0.M - 0b0c 2281 lrs $AX0.H, @0xff81 - 0b0d 8600 tstaxh $AX0.H - 0b0e 0294 0b17 jnz 0x0b17 - 0b10 8100 clr $ACC0 - 0b11 005f loop $AC1.M - 0b12 1b7e srri @$AR3, $AC0.M - 0b13 7400 incm $AC0.M - 0b14 2e01 srs @0x0001, $AC0.M - 0b15 029f 0b50 jmp 0x0b50 - 0b17 2688 lrs $AC0.M, @0xff88 - 0b18 2489 lrs $AC0.L, @0xff89 - 0b19 2e34 srs @0x0034, $AC0.M - 0b1a 2c35 srs @0x0035, $AC0.L - 0b1b 02bf 0b57 call 0x0b57 - 0b1d 00ff 0360 sr @0x0360, $AC1.M - 0b1f 2638 lrs $AC0.M, @0x0038 - 0b20 2439 lrs $AC0.L, @0x0039 - 0b21 02bf 06c9 call 0x06c9 - 0b23 00df 0360 lr $AC1.M, @0x0360 - 0b25 8100 clr $ACC0 - 0b26 263a lrs $AC0.M, @0x003a - 0b27 b100 tst $ACC0 - 0b28 0294 0b37 jnz 0x0b37 - 0b2a 263b lrs $AC0.M, @0x003b - 0b2b 5c00 sub $ACC0, $ACC1 - 0b2c 0290 0b37 jge 0x0b37 - 0b2e 223b lrs $AX0.H, @0x003b - 0b2f 02bf 06e6 call 0x06e6 - 0b31 5500 subr $ACC1, $AX0.H - 0b32 0a01 lris $AX0.H, #0x01 - 0b33 00fa 0405 sr @0x0405, $AX0.H - 0b35 029f 0b0a jmp 0x0b0a - 0b37 1f5f mrr $AX0.H, $AC1.M - 0b38 02bf 06e6 call 0x06e6 - 0b3a 00fa 0362 sr @0x0362, $AX0.H - 0b3c 8100 clr $ACC0 - 0b3d 263a lrs $AC0.M, @0x003a - 0b3e 243b lrs $AC0.L, @0x003b - 0b3f 1570 lsr $ACC1, #-16 - 0b40 0a01 lris $AX0.H, #0x01 - 0b41 0081 0405 lri $AR1, #0x0405 - 0b43 5c00 sub $ACC0, $ACC1 - 0b44 b100 tst $ACC0 - 0b45 0275 ifz - 0b46 1a3a srr @$AR1, $AX0.H - 0b47 2e3a srs @0x003a, $AC0.M - 0b48 2c3b srs @0x003b, $AC0.L - 0b49 2638 lrs $AC0.M, @0x0038 - 0b4a 2439 lrs $AC0.L, @0x0039 - 0b4b 00d8 0362 lr $AX0.L, @0x0362 - 0b4d 7000 addaxl $ACC0, $AX0.L - 0b4e 2c39 srs @0x0039, $AC0.L - 0b4f 2e38 srs @0x0038, $AC0.M - 0b50 0092 00ff lri $CR, #0x00ff - 0b52 029f 037e jmp 0x037e - 0b54 8100 clr $ACC0 - 0b55 2e34 srs @0x0034, $AC0.M - 0b56 2e35 srs @0x0035, $AC0.M - 0b57 2334 lrs $AX1.H, @0x0034 - 0b58 2135 lrs $AX1.L, @0x0035 - 0b59 268a lrs $AC0.M, @0xff8a - 0b5a 248b lrs $AC0.L, @0xff8b - 0b5b 5a00 subax $ACC0, $AX1.L - 0b5c 2e3a srs @0x003a, $AC0.M - 0b5d 2c3b srs @0x003b, $AC0.L - 0b5e 2634 lrs $AC0.M, @0x0034 - 0b5f 2435 lrs $AC0.L, @0x0035 - 0b60 238c lrs $AX1.H, @0xff8c - 0b61 218d lrs $AX1.L, @0xff8d - 0b62 4a00 addax $ACC0, $AX1.L - 0b63 2e38 srs @0x0038, $AC0.M - 0b64 2c39 srs @0x0039, $AC0.L - 0b65 8100 clr $ACC0 - 0b66 2e05 srs @0x0005, $AC0.M - 0b67 02df ret - 0b68 0092 0004 lri $CR, #0x0004 - 0b6a 2002 lrs $AX0.L, @0x0002 - 0b6b 8100 clr $ACC0 - 0b6c 8900 clr $ACC1 - 0b6d 2430 lrs $AC0.L, @0x0030 - 0b6e 8d00 set15 - 0b6f 0950 lris $AX1.L, #0x50 - 0b70 a000 mulx $AX0.L, $AX1.L - 0b71 a400 mulxac $AX0.L, $AX1.L, $ACC0 - 0b72 1404 lsl $ACC0, #4 - 0b73 8c00 clr15 - 0b74 1ffe mrr $AC1.M, $AC0.M - 0b75 0083 0580 lri $AR3, #0x0580 - 0b77 02df ret - 0b78 02bf 0b68 call 0x0b68 - 0b7a 2201 lrs $AX0.H, @0x0001 - 0b7b 8600 tstaxh $AX0.H - 0b7c 0294 0b8d jnz 0x0b8d - 0b7e 2204 lrs $AX0.H, @0x0004 - 0b7f 8600 tstaxh $AX0.H - 0b80 02b4 0bd7 callnz 0x0bd7 - 0b82 8100 clr $ACC0 - 0b83 2605 lrs $AC0.M, @0x0005 - 0b84 b100 tst $ACC0 - 0b85 0295 0b9a jz 0x0b9a - 0b87 8100 clr $ACC0 - 0b88 2e05 srs @0x0005, $AC0.M - 0b89 2281 lrs $AX0.H, @0xff81 - 0b8a 8600 tstaxh $AX0.H - 0b8b 0294 0b94 jnz 0x0b94 - 0b8d 8100 clr $ACC0 - 0b8e 005f loop $AC1.M - 0b8f 1b7e srri @$AR3, $AC0.M - 0b90 7400 incm $AC0.M - 0b91 2e01 srs @0x0001, $AC0.M - 0b92 029f 0bd0 jmp 0x0bd0 - 0b94 2688 lrs $AC0.M, @0xff88 - 0b95 2489 lrs $AC0.L, @0xff89 - 0b96 2e34 srs @0x0034, $AC0.M - 0b97 2c35 srs @0x0035, $AC0.L - 0b98 02bf 0bd7 call 0x0bd7 - 0b9a 00ff 0360 sr @0x0360, $AC1.M - 0b9c 2638 lrs $AC0.M, @0x0038 - 0b9d 2439 lrs $AC0.L, @0x0039 - 0b9e 02bf 06c9 call 0x06c9 - 0ba0 02bf 06e0 call 0x06e0 - 0ba2 00df 0360 lr $AC1.M, @0x0360 - 0ba4 8100 clr $ACC0 - 0ba5 263a lrs $AC0.M, @0x003a - 0ba6 b100 tst $ACC0 - 0ba7 0294 0bb6 jnz 0x0bb6 - 0ba9 263b lrs $AC0.M, @0x003b - 0baa 5c00 sub $ACC0, $ACC1 - 0bab 0290 0bb6 jge 0x0bb6 - 0bad 223b lrs $AX0.H, @0x003b - 0bae 02bf 06ab call 0x06ab - 0bb0 5500 subr $ACC1, $AX0.H - 0bb1 0a01 lris $AX0.H, #0x01 - 0bb2 00fa 0405 sr @0x0405, $AX0.H - 0bb4 029f 0b87 jmp 0x0b87 - 0bb6 1f5f mrr $AX0.H, $AC1.M - 0bb7 02bf 06ab call 0x06ab - 0bb9 00fa 0362 sr @0x0362, $AX0.H - 0bbb 8100 clr $ACC0 - 0bbc 263a lrs $AC0.M, @0x003a - 0bbd 243b lrs $AC0.L, @0x003b - 0bbe 1570 lsr $ACC1, #-16 - 0bbf 0a01 lris $AX0.H, #0x01 - 0bc0 0081 0405 lri $AR1, #0x0405 - 0bc2 5c00 sub $ACC0, $ACC1 - 0bc3 b100 tst $ACC0 - 0bc4 0275 ifz - 0bc5 1a3a srr @$AR1, $AX0.H - 0bc6 2e3a srs @0x003a, $AC0.M - 0bc7 2c3b srs @0x003b, $AC0.L - 0bc8 2638 lrs $AC0.M, @0x0038 - 0bc9 2439 lrs $AC0.L, @0x0039 - 0bca 00d8 0362 lr $AX0.L, @0x0362 - 0bcc 7000 addaxl $ACC0, $AX0.L - 0bcd 7000 addaxl $ACC0, $AX0.L - 0bce 2c39 srs @0x0039, $AC0.L - 0bcf 2e38 srs @0x0038, $AC0.M - 0bd0 0092 00ff lri $CR, #0x00ff - 0bd2 029f 037e jmp 0x037e - 0bd4 8100 clr $ACC0 - 0bd5 2e34 srs @0x0034, $AC0.M - 0bd6 2e35 srs @0x0035, $AC0.M - 0bd7 2334 lrs $AX1.H, @0x0034 - 0bd8 2135 lrs $AX1.L, @0x0035 - 0bd9 268a lrs $AC0.M, @0xff8a - 0bda 248b lrs $AC0.L, @0xff8b - 0bdb 5a00 subax $ACC0, $AX1.L - 0bdc 2e3a srs @0x003a, $AC0.M - 0bdd 2c3b srs @0x003b, $AC0.L - 0bde 2634 lrs $AC0.M, @0x0034 - 0bdf 2435 lrs $AC0.L, @0x0035 - 0be0 1401 lsl $ACC0, #1 - 0be1 238c lrs $AX1.H, @0xff8c - 0be2 218d lrs $AX1.L, @0xff8d - 0be3 4a00 addax $ACC0, $AX1.L - 0be4 2e38 srs @0x0038, $AC0.M - 0be5 2c39 srs @0x0039, $AC0.L - 0be6 8100 clr $ACC0 - 0be7 2e05 srs @0x0005, $AC0.M - 0be8 02df ret - 0be9 8900 clr $ACC1 - 0bea 0f50 lris $AC1.M, #0x50 - 0beb 0083 0520 lri $AR3, #0x0520 - 0bed 02bf 0c02 call 0x0c02 - 0bef 029f 0386 jmp 0x0386 - 0bf1 00d8 0402 lr $AX0.L, @0x0402 - 0bf3 8100 clr $ACC0 - 0bf4 8900 clr $ACC1 - 0bf5 00dc 0430 lr $AC0.L, @0x0430 - 0bf7 0a50 lris $AX0.H, #0x50 - 0bf8 9000 mul $AX0.L, $AX0.H - 0bf9 9400 mulac $AX0.L, $AX0.H, $ACC0 - 0bfa 1404 lsl $ACC0, #4 - 0bfb 1ffe mrr $AC1.M, $AC0.M - 0bfc 0083 0580 lri $AR3, #0x0580 - 0bfe 02bf 0c02 call 0x0c02 - 0c00 029f 037e jmp 0x037e - 0c02 0092 0004 lri $CR, #0x0004 - 0c04 8100 clr $ACC0 - 0c05 263a lrs $AC0.M, @0x003a - 0c06 243b lrs $AC0.L, @0x003b - 0c07 1f1f mrr $AX0.L, $AC1.M - 0c08 0a00 lris $AX0.H, #0x00 - 0c09 5800 subax $ACC0, $AX0.L - 0c0a 0292 0c20 jg 0x0c20 - 0c0c 8900 clr $ACC1 - 0c0d 00c0 043b lr $AR0, @0x043b - 0c0f 02bf 0c45 call 0x0c45 - 0c11 8100 clr $ACC0 - 0c12 1fd8 mrr $AC0.M, $AX0.L - 0c13 223b lrs $AX0.H, @0x003b - 0c14 5400 subr $ACC0, $AX0.H - 0c15 0007 dar $AR3 - 0c16 1979 lrri $AX1.L, @$AR3 - 0c17 005e loop $AC0.M - 0c18 1b79 srri @$AR3, $AX1.L - 0c19 0f01 lris $AC1.M, #0x01 - 0c1a 2f01 srs @0x0001, $AC1.M - 0c1b 8900 clr $ACC1 - 0c1c 2f3b srs @0x003b, $AC1.M - 0c1d 0092 00ff lri $CR, #0x00ff - 0c1f 02df ret - 0c20 2e3a srs @0x003a, $AC0.M - 0c21 2c3b srs @0x003b, $AC0.L - 0c22 8100 clr $ACC0 - 0c23 8900 clr $ACC1 - 0c24 268a lrs $AC0.M, @0xff8a - 0c25 2734 lrs $AC1.M, @0x0034 - 0c26 5c00 sub $ACC0, $ACC1 - 0c27 2e36 srs @0x0036, $AC0.M - 0c28 5000 subr $ACC0, $AX0.L - 0c29 0290 0c3f jge 0x0c3f - 0c2b 00c0 0436 lr $AR0, @0x0436 - 0c2d 02bf 0c45 call 0x0c45 - 0c2f 8100 clr $ACC0 - 0c30 1fd8 mrr $AC0.M, $AX0.L - 0c31 2236 lrs $AX0.H, @0x0036 - 0c32 5400 subr $ACC0, $AX0.H - 0c33 1c1e mrr $AR0, $AC0.M - 0c34 8100 clr $ACC0 - 0c35 2e34 srs @0x0034, $AC0.M - 0c36 2688 lrs $AC0.M, @0xff88 - 0c37 2489 lrs $AC0.L, @0xff89 - 0c38 2e8c srs @0xff8c, $AC0.M - 0c39 2c8d srs @0xff8d, $AC0.L - 0c3a 02bf 0c45 call 0x0c45 - 0c3c 0092 00ff lri $CR, #0x00ff - 0c3e 02df ret - 0c3f 1c18 mrr $AR0, $AX0.L - 0c40 02bf 0c45 call 0x0c45 - 0c42 0092 00ff lri $CR, #0x00ff - 0c44 02df ret - 0c45 8100 clr $ACC0 - 0c46 1fc0 mrr $AC0.M, $AR0 - 0c47 b100 tst $ACC0 - 0c48 02d5 retz - 0c49 8900 clr $ACC1 - 0c4a 2734 lrs $AC1.M, @0x0034 - 0c4b 0340 0001 andi $AC1.M, #0x0001 - 0c4d 0b00 lris $AX1.H, #0x00 - 0c4e 1f3f mrr $AX1.L, $AC1.M - 0c4f 268c lrs $AC0.M, @0xff8c - 0c50 248d lrs $AC0.L, @0xff8d - 0c51 8900 clr $ACC1 - 0c52 2534 lrs $AC1.L, @0x0034 - 0c53 1501 lsl $ACC1, #1 - 0c54 4c00 add $ACC0, $ACC1 - 0c55 5a00 subax $ACC0, $AX1.L - 0c56 5a00 subax $ACC0, $AX1.L - 0c57 1c20 mrr $AR1, $AR0 - 0c58 1fe0 mrr $AC1.M, $AR0 - 0c59 0502 addis $ACC1, #0x02 - 0c5a 1c1f mrr $AR0, $AC1.M - 0c5b 009f 0b00 lri $AC1.M, #0x0b00 - 0c5d 0092 00ff lri $CR, #0x00ff - 0c5f 02bf 0640 call 0x0640 - 0c61 0092 0004 lri $CR, #0x0004 - 0c63 2734 lrs $AC1.M, @0x0034 - 0c64 1f61 mrr $AX1.H, $AR1 - 0c65 4700 addr $ACC1, $AX1.H - 0c66 2f34 srs @0x0034, $AC1.M - 0c67 0080 0b00 lri $AR0, #0x0b00 - 0c69 8900 clr $ACC1 - 0c6a 1ff9 mrr $AC1.M, $AX1.L - 0c6b b900 tst $ACC1 - 0c6c 0274 ifnz - 0c6d 0008 iar $AR0 - 0c6e 8900 clr $ACC1 - 0c6f 1fe1 mrr $AC1.M, $AR1 - 0c70 191e lrri $AC0.M, @$AR0 - 0c71 0701 cmpis $ACC1, #0x01 - 0c72 0293 0c7b jle 0x0c7b - 0c74 191a lrri $AX0.H, @$AR0 - 0c75 05fe addis $ACC1, #0xfe - 0c76 005f loop $AC1.M - 0c77 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c78 1b7e srri @$AR3, $AC0.M - 0c79 1b7a srri @$AR3, $AX0.H - 0c7a 02df ret - 0c7b 1b7e srri @$AR3, $AC0.M - 0c7c 02df ret - 0c7d 0083 03e8 lri $AR3, #0x03e8 - 0c7f 191e lrri $AC0.M, @$AR0 - 0c80 191a lrri $AX0.H, @$AR0 - 0c81 1006 loopi #0x06 - 0c82 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0c83 1b7e srri @$AR3, $AC0.M - 0c84 1b7a srri @$AR3, $AX0.H - 0c85 0080 03e8 lri $AR0, #0x03e8 - 0c87 8a00 m2 - 0c88 0088 0007 lri $WR0, #0x0007 - 0c8a 1150 0c97 bloopi #0x50, 0x0c97 - 0c8c 1c61 mrr $AR3, $AR1 - 0c8d 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0c8e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c8f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c90 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c91 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c92 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c93 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c94 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0c95 f200 madd $AX0.L, $AX0.H - 0c96 fe00 movpz $ACC0 - 0c97 1b3e srri @$AR1, $AC0.M - 0c98 0088 ffff lri $WR0, #0xffff - 0c9a 8b00 m0 - 0c9b 02df ret - 0c9c 8a00 m2 - 0c9d 05fe addis $ACC1, #0xfe - 0c9e 0083 03e8 lri $AR3, #0x03e8 - 0ca0 191e lrri $AC0.M, @$AR0 - 0ca1 191a lrri $AX0.H, @$AR0 - 0ca2 005f loop $AC1.M - 0ca3 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0ca4 1b7e srri @$AR3, $AC0.M - 0ca5 1b7a srri @$AR3, $AX0.H - 0ca6 0080 03e8 lri $AR0, #0x03e8 - 0ca8 0501 addis $ACC1, #0x01 - 0ca9 1d1f mrr $WR0, $AC1.M - 0caa 1150 0cb2 bloopi #0x50, 0x0cb2 - 0cac 1c61 mrr $AR3, $AR1 - 0cad 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 - 0cae 005f loop $AC1.M - 0caf f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0cb0 f200 madd $AX0.L, $AX0.H - 0cb1 fe00 movpz $ACC0 - 0cb2 1b3e srri @$AR1, $AC0.M - 0cb3 0088 ffff lri $WR0, #0xffff - 0cb5 8b00 m0 - 0cb6 02df ret - 0cb7 0083 03e8 lri $AR3, #0x03e8 - 0cb9 191e lrri $AC0.M, @$AR0 - 0cba 191a lrri $AX0.H, @$AR0 - 0cbb 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cbc 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cbd 1b7e srri @$AR3, $AC0.M - 0cbe 1b7a srri @$AR3, $AX0.H - 0cbf 0080 03e8 lri $AR0, #0x03e8 - 0cc1 0088 0003 lri $WR0, #0x0003 - 0cc3 0085 0000 lri $IX1, #0x0000 - 0cc5 0087 0000 lri $IX3, #0x0000 - 0cc7 1fc2 mrr $AC0.M, $AR2 - 0cc8 195b lrri $AX1.H, @$AR2 - 0cc9 1959 lrri $AX1.L, @$AR2 - 0cca 195f lrri $AC1.M, @$AR2 - 0ccb 195a lrri $AX0.H, @$AR2 - 0ccc 1c5e mrr $AR2, $AC0.M - 0ccd 1fda mrr $AC0.M, $AX0.H - 0cce 1c61 mrr $AR3, $AR1 - 0ccf 8a00 m2 - 0cd0 8f00 set40 - 0cd1 191a lrri $AX0.H, @$AR0 - 0cd2 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0cd3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0cd4 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0cd5 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0cd6 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0cd7 1127 0ce2 bloopi #0x27, 0x0ce2 - 0cd9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0cda 197e lrri $AC0.M, @$AR3 - 0cdb e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0cdc eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0cdd bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 - 0cde e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0cdf 197f lrri $AC1.M, @$AR3 - 0ce0 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0ce1 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0ce2 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 - 0ce3 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0ce4 197e lrri $AC0.M, @$AR3 - 0ce5 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0ce6 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0ce7 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 - 0ce8 1bff srrn @$AR3, $AC1.M - 0ce9 197f lrri $AC1.M, @$AR3 - 0cea 8e00 set16 - 0ceb 8b00 m0 - 0cec 0088 ffff lri $WR0, #0xffff - 0cee 1b5b srri @$AR2, $AX1.H - 0cef 1b59 srri @$AR2, $AX1.L - 0cf0 1b5f srri @$AR2, $AC1.M - 0cf1 1b5e srri @$AR2, $AC0.M - 0cf2 02df ret - 0cf3 0083 03e8 lri $AR3, #0x03e8 - 0cf5 191e lrri $AC0.M, @$AR0 - 0cf6 191a lrri $AX0.H, @$AR0 - 0cf7 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cf8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M - 0cf9 1b7e srri @$AR3, $AC0.M - 0cfa 1b7a srri @$AR3, $AX0.H - 0cfb 0080 03e8 lri $AR0, #0x03e8 - 0cfd 0088 0003 lri $WR0, #0x0003 - 0cff 0085 0000 lri $IX1, #0x0000 - 0d01 0087 0000 lri $IX3, #0x0000 - 0d03 1fc2 mrr $AC0.M, $AR2 - 0d04 195b lrri $AX1.H, @$AR2 - 0d05 1959 lrri $AX1.L, @$AR2 - 0d06 195f lrri $AC1.M, @$AR2 - 0d07 195a lrri $AX0.H, @$AR2 - 0d08 1c5e mrr $AR2, $AC0.M - 0d09 1fda mrr $AC0.M, $AX0.H - 0d0a 1c61 mrr $AR3, $AR1 - 0d0b 8a00 m2 - 0d0c 8f00 set40 - 0d0d 191a lrri $AX0.H, @$AR0 - 0d0e b800 mulx $AX0.H, $AX1.H - 0d0f e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0d10 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d11 ea00 maddc $AC1.M, $AX1.L - 0d12 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0d13 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0d14 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0d15 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0d16 1127 0d27 bloopi #0x27, 0x0d27 - 0d18 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d19 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0d1a 197e lrri $AC0.M, @$AR3 - 0d1b e800 maddc $AC0.M, $AX1.L - 0d1c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0d1d ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0d1e eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0d1f bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0d20 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 - 0d21 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M - 0d22 197f lrri $AC1.M, @$AR3 - 0d23 ea00 maddc $AC1.M, $AX1.L - 0d24 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 - 0d25 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 - 0d26 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 - 0d27 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 - 0d28 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 - 0d29 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M - 0d2a 197e lrri $AC0.M, @$AR3 - 0d2b e800 maddc $AC0.M, $AX1.L - 0d2c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 - 0d2d ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 - 0d2e eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 - 0d2f bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 - 0d30 1bff srrn @$AR3, $AC1.M - 0d31 197f lrri $AC1.M, @$AR3 - 0d32 8e00 set16 - 0d33 8b00 m0 - 0d34 0088 ffff lri $WR0, #0xffff - 0d36 1b5b srri @$AR2, $AX1.H - 0d37 1b59 srri @$AR2, $AX1.L - 0d38 1b5f srri @$AR2, $AC1.M - 0d39 1b5e srri @$AR2, $AC0.M - 0d3a 02df ret - 0d3b 0eff lris $AC0.M, #0xff - 0d3c 00fe 03f2 sr @0x03f2, $AC0.M - 0d3e 8100 clr $ACC0 - 0d3f 00fe 03f0 sr @0x03f0, $AC0.M - 0d41 00fe 03f6 sr @0x03f6, $AC0.M - 0d43 009e 0100 lri $AC0.M, #0x0100 - 0d45 00fe 03f7 sr @0x03f7, $AC0.M - 0d47 00da 03f7 lr $AX0.H, @0x03f7 - 0d49 009e 8000 lri $AC0.M, #0x8000 - 0d4b 5400 subr $ACC0, $AX0.H - 0d4c 00fe 03f5 sr @0x03f5, $AC0.M - 0d4e 0e30 lris $AC0.M, #0x30 - 0d4f 00fe 03f3 sr @0x03f3, $AC0.M - 0d51 0e10 lris $AC0.M, #0x10 - 0d52 00fe 03f4 sr @0x03f4, $AC0.M - 0d54 009e 0096 lri $AC0.M, #0x0096 - 0d56 00fe 03f1 sr @0x03f1, $AC0.M - 0d58 02df ret - 0d59 0080 0a00 lri $AR0, #0x0a00 - 0d5b 8100 clr $ACC0 - 0d5c 00de 03f0 lr $AC0.M, @0x03f0 - 0d5e 8900 clr $ACC1 - 0d5f b100 tst $ACC0 - 0d60 0275 ifz - 0d61 0550 addis $ACC1, #0x50 - 0d62 00ff 03f0 sr @0x03f0, $AC1.M - 0d64 0200 0a60 addi $AC0.M, #0x0a60 - 0d66 1c7e mrr $AR3, $AC0.M - 0d67 0f4e lris $AC1.M, #0x4e - 0d68 02bf 012b call 0x012b - 0d6a 02df ret - 0d6b 00de 03f1 lr $AC0.M, @0x03f1 - 0d6d 0200 0a60 addi $AC0.M, #0x0a60 - 0d6f 1c7e mrr $AR3, $AC0.M - 0d70 8100 clr $ACC0 - 0d71 8900 clr $ACC1 - 0d72 009f 00a0 lri $AC1.M, #0x00a0 - 0d74 00de 03f1 lr $AC0.M, @0x03f1 - 0d76 5d00 sub $ACC1, $ACC0 - 0d77 0e50 lris $AC0.M, #0x50 - 0d78 0750 cmpis $ACC1, #0x50 - 0d79 0270 ifge - 0d7a 5d00 sub $ACC1, $ACC0 - 0d7b 00da 03f2 lr $AX0.H, @0x03f2 - 0d7d 8600 tstaxh $AX0.H - 0d7e 0290 0d9c jge 0x0d9c - 0d80 00de 03f3 lr $AC0.M, @0x03f3 - 0d82 5c00 sub $ACC0, $ACC1 - 0d83 0293 0d87 jle 0x0d87 - 0d85 029f 0da1 jmp 0x0da1 - 0d87 00db 03f7 lr $AX1.H, @0x03f7 - 0d89 009e 8000 lri $AC0.M, #0x8000 - 0d8b 4600 addr $ACC0, $AX1.H - 0d8c 029f 0d93 jmp 0x0d93 - 0d8e 00db 03f7 lr $AX1.H, @0x03f7 - 0d90 009e 8000 lri $AC0.M, #0x8000 - 0d92 5600 subr $ACC0, $AX1.H - 0d93 00fe 03f5 sr @0x03f5, $AC0.M - 0d95 1fda mrr $AC0.M, $AX0.H - 0d96 7c00 neg $ACC0 - 0d97 1f5e mrr $AX0.H, $AC0.M - 0d98 00fe 03f2 sr @0x03f2, $AC0.M - 0d9a 029f 0da1 jmp 0x0da1 - 0d9c 00de 03f4 lr $AC0.M, @0x03f4 - 0d9e 5d00 sub $ACC1, $ACC0 - 0d9f 0293 0d8e jle 0x0d8e - 0da1 8900 clr $ACC1 - 0da2 00dd 03f5 lr $AC1.L, @0x03f5 - 0da4 1501 lsl $ACC1, #1 - 0da5 8100 clr $ACC0 - 0da6 00dc 03f6 lr $AC0.L, @0x03f6 - 0da8 008b 009f lri $WR3, #0x009f - 0daa 0080 0a00 lri $AR0, #0x0a00 - 0dac 0900 lris $AX1.L, #0x00 - 0dad 1150 0db4 bloopi #0x50, 0x0db4 - 0daf 1878 lrr $AX0.L, @$AR3 - 0db0 4c00 add $ACC0, $ACC1 - 0db1 1cfe mrr $IX3, $AC0.M - 0db2 001f addarn $AR3, $IX3 - 0db3 1fd9 mrr $AC0.M, $AX1.L - 0db4 1b18 srri @$AR0, $AX0.L - 0db5 009f 0a60 lri $AC1.M, #0x0a60 - 0db7 1fc3 mrr $AC0.M, $AR3 - 0db8 5c00 sub $ACC0, $ACC1 - 0db9 00fe 03f1 sr @0x03f1, $AC0.M - 0dbb 00fc 03f6 sr @0x03f6, $AC0.L - 0dbd 008b ffff lri $WR3, #0xffff - 0dbf 02df ret - 0dc0 0f50 lris $AC1.M, #0x50 - 0dc1 0080 0a00 lri $AR0, #0x0a00 - 0dc3 0083 0d60 lri $AR3, #0x0d60 - 0dc5 0098 3fff lri $AX0.L, #0x3fff - 0dc7 02bf 0145 call 0x0145 - 0dc9 0f50 lris $AC1.M, #0x50 - 0dca 0080 0a00 lri $AR0, #0x0a00 - 0dcc 0083 0d00 lri $AR3, #0x0d00 - 0dce 0098 3fff lri $AX0.L, #0x3fff - 0dd0 02bf 0145 call 0x0145 - 0dd2 02df ret - 0dd3 b900 tst $ACC1 - 0dd4 0294 0dd9 jnz 0x0dd9 - 0dd6 6800 movax $ACC0, $AX0.L - 0dd7 b100 tst $ACC0 - 0dd8 02d5 retz - 0dd9 1c23 mrr $AR1, $AR3 - 0dda 197e lrri $AC0.M, @$AR3 - 0ddb 191b lrri $AX1.H, @$AR0 - 0ddc d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 - 0ddd 1120 0de3 bloopi #0x20, 0x0de3 - 0ddf dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0de0 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0de1 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0de2 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0de3 4900 addax $ACC1, $AX0.L - 0de4 1108 0de9 bloopi #0x08, 0x0de9 - 0de6 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0de7 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0de8 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 - 0de9 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M - 0dea 02df ret - 0deb 8f00 set40 - 0dec 8d00 set15 - 0ded 1c03 mrr $AR0, $AR3 - 0dee 00d9 038e lr $AX1.L, @0x038e - 0df0 0b04 lris $AX1.H, #0x04 - 0df1 197a lrri $AX0.H, @$AR3 - 0df2 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 - 0df3 b600 mulxmv $AX0.H, $AX1.L, $ACC0 - 0df4 1128 0df9 bloopi #0x28, 0x0df9 - 0df6 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0df7 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0df8 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 - 0df9 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0dfa 8c00 clr15 - 0dfb 8e00 set16 - 0dfc 02df ret - 0dfd 00da 0485 lr $AX0.H, @0x0485 - 0dff 8600 tstaxh $AX0.H - 0e00 0295 0e0e jz 0x0e0e - 0e02 8100 clr $ACC0 - 0e03 00de 042a lr $AC0.M, @0x042a - 0e05 147f lsr $ACC0, #-1 - 0e06 00fe 042b sr @0x042b, $AC0.M - 0e08 b100 tst $ACC0 - 0e09 0294 0e0e jnz 0x0e0e - 0e0b 0a01 lris $AX0.H, #0x01 - 0e0c 00fa 0401 sr @0x0401, $AX0.H - 0e0e 8f00 set40 - 0e0f 8100 clr $ACC0 - 0e10 00de 0428 lr $AC0.M, @0x0428 - 0e12 1478 lsr $ACC0, #-8 - 0e13 00df 0428 lr $AC1.M, @0x0428 - 0e15 0340 007f andi $AC1.M, #0x007f - 0e17 1f1e mrr $AX0.L, $AC0.M - 0e18 1f5f mrr $AX0.H, $AC1.M - 0e19 0220 007f xori $ACC0, #0x007f - 0e1b 1f3e mrr $AX1.L, $AC0.M - 0e1c 0320 007f xori $ACC1, #0x007f - 0e1e 1f7f mrr $AX1.H, $AC1.M - 0e1f 8100 clr $ACC0 - 0e20 8900 clr $ACC1 - 0e21 009f 0200 lri $AC1.M, #0x0200 - 0e23 1fd8 mrr $AC0.M, $AX0.L - 0e24 4c00 add $ACC0, $ACC1 - 0e25 1c1e mrr $AR0, $AC0.M - 0e26 1818 lrr $AX0.L, @$AR0 - 0e27 1fda mrr $AC0.M, $AX0.H - 0e28 4c00 add $ACC0, $ACC1 - 0e29 1c1e mrr $AR0, $AC0.M - 0e2a 181a lrr $AX0.H, @$AR0 - 0e2b 1fd9 mrr $AC0.M, $AX1.L - 0e2c 4c00 add $ACC0, $ACC1 - 0e2d 1c1e mrr $AR0, $AC0.M - 0e2e 1819 lrr $AX1.L, @$AR0 - 0e2f 1fdb mrr $AC0.M, $AX1.H - 0e30 4c00 add $ACC0, $ACC1 - 0e31 1c1e mrr $AR0, $AC0.M - 0e32 181b lrr $AX1.H, @$AR0 - 0e33 8a00 m2 - 0e34 0080 0b00 lri $AR0, #0x0b00 - 0e36 9800 mul $AX1.L, $AX1.H - 0e37 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 - 0e38 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M - 0e39 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M - 0e3a 6e30 movp's $ACC0 : @$AR0, $AC0.M - 0e3b 1b1e srri @$AR0, $AC0.M - 0e3c 8b00 m0 - 0e3d 0080 0b00 lri $AR0, #0x0b00 - 0e3f 0081 0b04 lri $AR1, #0x0b04 - 0e41 00da 042a lr $AX0.H, @0x042a - 0e43 02bf 0e8e call 0x0e8e - 0e45 0081 0b08 lri $AR1, #0x0b08 - 0e47 0080 0b00 lri $AR0, #0x0b00 - 0e49 00da 042a lr $AX0.H, @0x042a - 0e4b 00de 0429 lr $AC0.M, @0x0429 - 0e4d 8a00 m2 - 0e4e c000 mulc $AC0.M, $AX0.H - 0e4f 8b00 m0 - 0e50 6e00 movp $ACC0 - 0e51 1f5e mrr $AX0.H, $AC0.M - 0e52 02bf 0e8e call 0x0e8e - 0e54 0080 0b00 lri $AR0, #0x0b00 - 0e56 0081 0b0c lri $AR1, #0x0b0c - 0e58 8100 clr $ACC0 - 0e59 8900 clr $ACC1 - 0e5a 00de 042b lr $AC0.M, @0x042b - 0e5c 00df 042a lr $AC1.M, @0x042a - 0e5e 00fe 042a sr @0x042a, $AC0.M - 0e60 5c00 sub $ACC0, $ACC1 - 0e61 1f5e mrr $AX0.H, $AC0.M - 0e62 02bf 0e99 call 0x0e99 - 0e64 0080 0b0c lri $AR0, #0x0b0c - 0e66 0081 0b10 lri $AR1, #0x0b10 - 0e68 00da 0429 lr $AX0.H, @0x0429 - 0e6a 02bf 0e8e call 0x0e8e - 0e6c 0081 0b04 lri $AR1, #0x0b04 - 0e6e 0082 0b0c lri $AR2, #0x0b0c - 0e70 0083 0ea7 lri $AR3, #0x0ea7 - 0e72 1108 0e8b bloopi #0x08, 0x0e8b - 0e74 195f lrri $AC1.M, @$AR2 - 0e75 15fb asr $ACC1, #-5 - 0e76 1f1d mrr $AX0.L, $AC1.L - 0e77 1f5f mrr $AX0.H, $AC1.M - 0e78 193f lrri $AC1.M, @$AR1 - 0e79 00e1 0b24 sr @0x0b24, $AR1 - 0e7b 00e2 0b25 sr @0x0b25, $AR2 - 0e7d 021b ilrri $AC0.M, @$AR3 - 0e7e 00e3 0b26 sr @0x0b26, $AR3 - 0e80 1c7e mrr $AR3, $AC0.M - 0e81 00c0 038f lr $AR0, @0x038f - 0e83 02bf 0dd3 call 0x0dd3 - 0e85 00c1 0b24 lr $AR1, @0x0b24 - 0e87 00c2 0b25 lr $AR2, @0x0b25 - 0e89 00c3 0b26 lr $AR3, @0x0b26 - 0e8b 0000 nop - 0e8c 8e00 set16 - 0e8d 02df ret - 0e8e 8a00 m2 - 0e8f 191f lrri $AC1.M, @$AR0 - 0e90 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 - 0e91 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 - 0e92 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e93 191f lrri $AC1.M, @$AR0 - 0e94 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M - 0e95 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0e96 1b3e srri @$AR1, $AC0.M - 0e97 8b00 m0 - 0e98 02df ret - 0e99 8a00 m2 - 0e9a 8d00 set15 - 0e9b 1f7e mrr $AX1.H, $AC0.M - 0e9c 1918 lrri $AX0.L, @$AR0 - 0e9d a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 - 0e9e ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 - 0e9f ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ea0 1918 lrri $AX0.L, @$AR0 - 0ea1 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M - 0ea2 6e31 movp's $ACC0 : @$AR1, $AC0.M - 0ea3 1b3e srri @$AR1, $AC0.M - 0ea4 8c00 clr15 - 0ea5 8b00 m0 - 0ea6 02df ret - 0ea7 0d00 lris $AC1.L, #0x00 - 0ea8 0d60 lris $AC1.L, #0x60 - 0ea9 0f40 lris $AC1.M, #0x40 - 0eaa 0ca0 lris $AC0.L, #0xa0 - 0eab 0e80 lris $AC0.M, #0x80 - 0eac 0ee0 lris $AC0.M, #0xe0 - 0ead 0be0 lris $AX1.H, #0xe0 - 0eae 0c40 lris $AC0.L, #0x40 - 0eaf 00f9 0361 sr @0x0361, $AX1.L - 0eb1 1fc0 mrr $AC0.M, $AR0 - 0eb2 0200 fffc addi $AC0.M, #0xfffc - 0eb4 1c1e mrr $AR0, $AC0.M - 0eb5 1c5e mrr $AR2, $AC0.M - 0eb6 0083 043c lri $AR3, #0x043c - 0eb8 197e lrri $AC0.M, @$AR3 - 0eb9 197f lrri $AC1.M, @$AR3 - 0eba 80a2 nx'sl : $AC0.M, $AX0.H - 0ebb 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H - 0ebc 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M - 0ebd 1b1f srri @$AR0, $AC1.M - 0ebe 1c02 mrr $AR0, $AR2 - 0ebf 8100 clr $ACC0 - 0ec0 00de 0402 lr $AC0.M, @0x0402 - 0ec2 00fe 0362 sr @0x0362, $AC0.M - 0ec4 1474 lsr $ACC0, #-12 - 0ec5 1f7e mrr $AX1.H, $AC0.M - 0ec6 1f3c mrr $AX1.L, $AC0.L - 0ec7 8900 clr $ACC1 - 0ec8 00dd 0430 lr $AC1.L, @0x0430 - 0eca 1504 lsl $ACC1, #4 - 0ecb 0604 cmpis $ACC0, #0x04 - 0ecc 0290 0f23 jge 0x0f23 - 0ece 1fdd mrr $AC0.M, $AC1.L - 0ecf 0082 02b0 lri $AR2, #0x02b0 - 0ed1 1050 loopi #0x50 - 0ed2 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L - 0ed3 1fbe mrr $AC1.L, $AC0.M - 0ed4 00fe 0360 sr @0x0360, $AC0.M - 0ed6 8900 clr $ACC1 - 0ed7 1fbe mrr $AC1.L, $AC0.M - 0ed8 0af8 lris $AX0.H, #0xf8 - 0ed9 009b 00fc lri $AX1.H, #0x00fc - 0edb 00d8 0361 lr $AX0.L, @0x0361 - 0edd 0082 02b0 lri $AR2, #0x02b0 - 0edf 0083 02b0 lri $AR3, #0x02b0 - 0ee1 195e lrri $AC0.M, @$AR2 - 0ee2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M - 0ee3 1128 0ee8 bloopi #0x28, 0x0ee8 - 0ee5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 - 0ee6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H - 0ee7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 - 0ee8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H - 0ee9 8a00 m2 - 0eea 0082 02b0 lri $AR2, #0x02b0 - 0eec 00dd 0430 lr $AC1.L, @0x0430 - 0eee 1504 lsl $ACC1, #4 - 0eef 1fe0 mrr $AC1.M, $AR0 - 0ef0 8100 clr $ACC0 - 0ef1 00de 0362 lr $AC0.M, @0x0362 - 0ef3 1474 lsr $ACC0, #-12 - 0ef4 1f7e mrr $AX1.H, $AC0.M - 0ef5 1f3c mrr $AX1.L, $AC0.L - 0ef6 8f00 set40 - 0ef7 1943 lrri $AR3, @$AR2 - 0ef8 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0ef9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0efa f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0efb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0efc f200 madd $AX0.L, $AX0.H - 0efd fe00 movpz $ACC0 - 0efe 1c1f mrr $AR0, $AC1.M - 0eff 1943 lrri $AR3, @$AR2 - 0f00 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0f01 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f02 114e 0f0a bloopi #0x4e, 0x0f0a - 0f04 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f05 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f06 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0f07 1c1f mrr $AR0, $AC1.M - 0f08 1943 lrri $AR3, @$AR2 - 0f09 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 - 0f0a 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 - 0f0b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f0c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 - 0f0d f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M - 0f0e fe00 movpz $ACC0 - 0f0f 1b3e srri @$AR1, $AC0.M - 0f10 8b00 m0 - 0f11 8e00 set16 - 0f12 00fe 0433 sr @0x0433, $AC0.M - 0f14 1c1f mrr $AR0, $AC1.M - 0f15 150c lsl $ACC1, #12 - 0f16 0340 0fff andi $AC1.M, #0x0fff - 0f18 00ff 0430 sr @0x0430, $AC1.M - 0f1a 0083 043c lri $AR3, #0x043c - 0f1c 191e lrri $AC0.M, @$AR0 - 0f1d 191f lrri $AC1.M, @$AR0 - 0f1e 80a0 nx'ls : $AX0.H, $AC0.M - 0f1f 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M - 0f20 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M - 0f21 1b7f srri @$AR3, $AC1.M - 0f22 02df ret - 0f23 1fe0 mrr $AC1.M, $AR0 - 0f24 1c1f mrr $AR0, $AC1.M - 0f25 1128 0f2c bloopi #0x28, 0x0f2c - 0f27 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f28 1b3e srri @$AR1, $AC0.M - 0f29 1c1f mrr $AR0, $AC1.M - 0f2a 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 - 0f2b 1b3e srri @$AR1, $AC0.M - 0f2c 1c1f mrr $AR0, $AC1.M - 0f2d 029f 0f12 jmp 0x0f12 - 0f2f 0083 0520 lri $AR3, #0x0520 - 0f31 00de 0433 lr $AC0.M, @0x0433 - 0f33 1050 loopi #0x50 - 0f34 1b7e srri @$AR3, $AC0.M - 0f35 029f 0386 jmp 0x0386 - 0f37 1c20 mrr $AR1, $AR0 - 0f38 185f lrr $AC1.M, @$AR2 - 0f39 1f7f mrr $AX1.H, $AC1.M - 0f3a 193a lrri $AX0.H, @$AR1 - 0f3b 6400 movr $ACC0, $AX0.H - 0f3c 0078 0f41 bloop $AX0.L, 0x0f41 - 0f3e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 - 0f3f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M - 0f40 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 - 0f41 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M - 0f42 1a5b srr @$AR2, $AX1.H - 0f43 02df ret - 0f44 0098 8240 lri $AX0.L, #0x8240 - 0f46 00f8 04e8 sr @0x04e8, $AX0.L - 0f48 0098 7fff lri $AX0.L, #0x7fff - 0f4a 00f8 04e9 sr @0x04e9, $AX0.L - 0f4c 0098 7dbf lri $AX0.L, #0x7dbf - 0f4e 00f8 04ea sr @0x04ea, $AX0.L - 0f50 0098 843f lri $AX0.L, #0x843f - 0f52 00f8 04eb sr @0x04eb, $AX0.L - 0f54 0098 b23b lri $AX0.L, #0xb23b - 0f56 00f8 04f0 sr @0x04f0, $AX0.L - 0f58 0098 7fff lri $AX0.L, #0x7fff - 0f5a 00f8 04f1 sr @0x04f1, $AX0.L - 0f5c 0098 4dc4 lri $AX0.L, #0x4dc4 - 0f5e 00f8 04f2 sr @0x04f2, $AX0.L - 0f60 0098 d808 lri $AX0.L, #0xd808 - 0f62 00f8 04f3 sr @0x04f3, $AX0.L - 0f64 0098 0000 lri $AX0.L, #0x0000 - 0f66 0080 04ec lri $AR0, #0x04ec - 0f68 1004 loopi #0x04 - 0f69 1b18 srri @$AR0, $AX0.L - 0f6a 0080 04f4 lri $AR0, #0x04f4 - 0f6c 1004 loopi #0x04 - 0f6d 1b18 srri @$AR0, $AX0.L - 0f6e 02df ret - 0f6f 0080 0f40 lri $AR0, #0x0f40 - 0f71 0083 0b00 lri $AR3, #0x0b00 - 0f73 8900 clr $ACC1 - 0f74 0f50 lris $AC1.M, #0x50 - 0f75 0098 6784 lri $AX0.L, #0x6784 - 0f77 02bf 0154 call 0x0154 - 0f79 0080 04e8 lri $AR0, #0x04e8 - 0f7b 0082 04ec lri $AR2, #0x04ec - 0f7d 0081 0b00 lri $AR1, #0x0b00 - 0f7f 8900 clr $ACC1 - 0f80 0f50 lris $AC1.M, #0x50 - 0f81 0080 0b00 lri $AR0, #0x0b00 - 0f83 0083 0d00 lri $AR3, #0x0d00 - 0f85 0098 7fff lri $AX0.L, #0x7fff - 0f87 02bf 0145 call 0x0145 - 0f89 8900 clr $ACC1 - 0f8a 0f50 lris $AC1.M, #0x50 - 0f8b 0080 0b00 lri $AR0, #0x0b00 - 0f8d 0083 0d60 lri $AR3, #0x0d60 - 0f8f 0098 b820 lri $AX0.L, #0xb820 - 0f91 02bf 0145 call 0x0145 - 0f93 0080 0ca0 lri $AR0, #0x0ca0 - 0f95 0083 0b00 lri $AR3, #0x0b00 - 0f97 8900 clr $ACC1 - 0f98 0f50 lris $AC1.M, #0x50 - 0f99 0098 6784 lri $AX0.L, #0x6784 - 0f9b 02bf 0154 call 0x0154 - 0f9d 0080 04e8 lri $AR0, #0x04e8 - 0f9f 0082 04f4 lri $AR2, #0x04f4 - 0fa1 0081 0b00 lri $AR1, #0x0b00 - 0fa3 8900 clr $ACC1 - 0fa4 0f50 lris $AC1.M, #0x50 - 0fa5 0080 0b00 lri $AR0, #0x0b00 - 0fa7 0083 0d00 lri $AR3, #0x0d00 - 0fa9 0098 47e0 lri $AX0.L, #0x47e0 - 0fab 02bf 0145 call 0x0145 - 0fad 8900 clr $ACC1 - 0fae 0f50 lris $AC1.M, #0x50 - 0faf 0080 0b00 lri $AR0, #0x0b00 - 0fb1 0083 0d60 lri $AR3, #0x0d60 - 0fb3 0098 8001 lri $AX0.L, #0x8001 - 0fb5 02bf 0145 call 0x0145 - 0fb7 02df ret - 0fb8 0000 nop - 0fb9 0000 nop - 0fba 0000 nop - 0fbb 0000 nop - 0fbc 0000 nop - 0fbd 0000 nop - 0fbe 0000 nop - 0fbf 0000 nop + 0000 029f 0012 jmp 0x0012 + 0002 0000 nop + 0003 0000 nop + 0004 02ff rti + 0005 0000 nop + 0006 02ff rti + 0007 0000 nop + 0008 02ff rti + 0009 0000 nop + 000a 02ff rti + 000b 0000 nop + 000c 02ff rti + 000d 0000 nop + 000e 029f 0725 jmp 0x0725 + 0010 029f 0059 jmp 0x0059 + 0012 1205 sbclr #0x05 + 0013 02bf 0062 call 0x0062 + 0015 8100 clr $ACC0 + 0016 009f 1000 lri $AC1.M, #0x1000 + 0018 0080 0000 lri $AR0, #0x0000 + 001a 005f loop $AC1.M + 001b 1b1e srri @$AR0, $AC0.M + 001c 02bf 07f5 call 0x07f5 + 001e 02bf 0f44 call 0x0f44 + 0020 0e00 lris $AC0.M, #0x00 + 0021 02bf 07d7 call 0x07d7 + 0023 009e 1111 lri $AC0.M, #0x1111 +// SEND_f355(0x1111) + 0025 02bf 07e1 call 0x07e1 + 0027 0e00 lris $AC0.M, #0x00 + 0028 00fe 034e sr @0x034e, $AC0.M + 002a 1305 sbset #0x05 + 002b 3a00 orr $AC0.M, $AX1.H + 002c 7400 incm $AC0.M + 002d 1f7e mrr $AX1.H, $AC0.M + 002e 0240 00ff andi $AC0.M, #0x00ff + 0030 0200 5500 addi $AC0.M, #0x5500 + 0032 02bf 00a0 call 0x00a0 + 0034 029f 0832 jmp 0x0832 + 0036 00df 0357 lr $AC1.M, @0x0357 + 0038 00ff 0345 sr @0x0345, $AC1.M + 003a 00de 0356 lr $AC0.M, @0x0356 + 003c 1ffe mrr $AC1.M, $AC0.M + 003d 0340 00ff andi $AC1.M, #0x00ff + 003f 00ff 0344 sr @0x0344, $AC1.M + 0041 1479 lsr $ACC0, #-7 + 0042 0240 007e andi $AC0.M, #0x007e + 0044 00fe 0343 sr @0x0343, $AC0.M + 0046 0200 0080 addi $AC0.M, #0x0080 + 0048 1c1e mrr $AR0, $AC0.M + 0049 170f jmpr $AR0 + 004a 0092 00ff lri $CR, #0x00ff + 004c 009e cafe lri $AC0.M, #0xcafe + 004e 02bf 00a0 call 0x00a0 + 0050 0e04 lris $AC0.M, #0x04 + 0051 02bf 07d7 call 0x07d7 + 0053 00de 0356 lr $AC0.M, @0x0356 + 0055 02bf 07e1 call 0x07e1 + 0057 029f 002b jmp 0x002b + 0059 1205 sbclr #0x05 + 005a 02bf 0062 call 0x0062 + 005c 0e01 lris $AC0.M, #0x01 + 005d 02bf 07d7 call 0x07d7 + 005f 1305 sbset #0x05 + 0060 029f 002b jmp 0x002b + 0062 1202 sbclr #0x02 + 0063 1203 sbclr #0x03 + 0064 1204 sbclr #0x04 + 0065 1306 sbset #0x06 + 0066 8e00 set16 + 0067 8c00 clr15 + 0068 8b00 m0 + 0069 009e ffff lri $AC0.M, #0xffff + 006b 1d1e mrr $WR0, $AC0.M + 006c 1d3e mrr $WR1, $AC0.M + 006d 1d5e mrr $WR2, $AC0.M + 006e 1d7e mrr $WR3, $AC0.M + 006f 0092 00ff lri $CR, #0x00ff + 0071 02df ret + 0072 0081 0358 lri $AR1, #0x0358 + 0074 0090 0000 lri $AC0.H, #0x0000 + 0076 0c00 lris $AC0.L, #0x00 + 0077 007e 007c bloop $AC0.M, 0x007c + 0079 193e lrri $AC0.M, @$AR1 + 007a 1b1e srri @$AR0, $AC0.M + 007b 193e lrri $AC0.M, @$AR1 + 007c 1b1e srri @$AR0, $AC0.M + 007d 02df ret + 007e 029f 004a jmp 0x004a + 0080 029f 004a jmp 0x004a + 0082 029f 00d9 jmp 0x00d9 + 0084 029f 02e3 jmp 0x02e3 + 0086 029f 007e jmp 0x007e + 0088 029f 066e jmp 0x066e + 008a 029f 0680 jmp 0x0680 + 008c 029f 004a jmp 0x004a + 008e 029f 05b7 jmp 0x05b7 + 0090 029f 0603 jmp 0x0603 + 0092 029f 05e7 jmp 0x05e7 + 0094 029f 004a jmp 0x004a + 0096 029f 004a jmp 0x004a + 0098 029f 004a jmp 0x004a + 009a 029f 0103 jmp 0x0103 + 009c 029f 00f6 jmp 0x00f6 + 009e 029f 004a jmp 0x004a + 00a0 00fe 0b00 sr @0x0b00, $AC0.M + 00a2 8100 clr $ACC0 + 00a3 00de 0354 lr $AC0.M, @0x0354 + 00a5 1408 lsl $ACC0, #8 + 00a6 00df 0341 lr $AC1.M, @0x0341 + 00a8 3e00 cw 0x3e00 ; *** UNKNOWN OPCODE *** + 00a9 00fe 0b01 sr @0x0b01, $AC0.M + 00ab 00de 0350 lr $AC0.M, @0x0350 + 00ad 00fe 0b02 sr @0x0b02, $AC0.M + 00af 00de 0351 lr $AC0.M, @0x0351 + 00b1 00fe 0b03 sr @0x0b03, $AC0.M + 00b3 00de 0352 lr $AC0.M, @0x0352 + 00b5 00fe 0b04 sr @0x0b04, $AC0.M + 00b7 00de 037d lr $AC0.M, @0x037d + 00b9 00dc 037e lr $AC0.L, @0x037e + 00bb 009f 0b00 lri $AC1.M, #0x0b00 + 00bd 0080 0010 lri $AR0, #0x0010 + 00bf 0090 0001 lri $AC0.H, #0x0001 + 00c1 1c3f mrr $AR1, $AC1.M + 00c2 0f0a lris $AC1.M, #0x0a + 00c3 2fd1 srs @SampleFormat, $AC1.M + 00c4 1f5e mrr $AX0.H, $AC0.M + 00c5 1f1c mrr $AX0.L, $AC0.L + 00c6 009e ffff lri $AC0.M, #0xffff + 00c8 2ed6 srs @ACEAH, $AC0.M + 00c9 2ed7 srs @ACEAL, $AC0.M + 00ca 1fda mrr $AC0.M, $AX0.H + 00cb 1f98 mrr $AC0.L, $AX0.L + 00cc 147f lsr $ACC0, #-1 + 00cd 2ed8 srs @ACCAH, $AC0.M + 00ce 2cd9 srs @ACCAL, $AC0.L + 00cf 1f40 mrr $AX0.H, $AR0 + 00d0 007a 00d7 bloop $AX0.H, 0x00d7 + 00d2 193e lrri $AC0.M, @$AR1 + 00d3 2ed3 srs @UnkZelda, $AC0.M + 00d4 0000 nop + 00d5 0000 nop + 00d6 0000 nop + 00d7 0000 nop + 00d8 02df ret + 00d9 0080 0380 lri $AR0, #0x0380 + 00db 0e04 lris $AC0.M, #0x04 + 00dc 02bf 0072 call 0x0072 + 00de 0081 0382 lri $AR1, #0x0382 + 00e0 009f 0000 lri $AC1.M, #0x0000 + 00e2 0080 0280 lri $AR0, #0x0280 + 00e4 02bf 063e call 0x063e + 00e6 0081 0384 lri $AR1, #0x0384 + 00e8 009f 0300 lri $AC1.M, #0x0300 + 00ea 0080 0020 lri $AR0, #0x0020 + 00ec 02bf 063e call 0x063e + 00ee 00de 0345 lr $AC0.M, @0x0345 + 00f0 00fe 0342 sr @0x0342, $AC0.M + 00f2 02bf 0d3b call 0x0d3b + 00f4 029f 004a jmp 0x004a + 00f6 0080 037d lri $AR0, #0x037d + 00f8 0e01 lris $AC0.M, #0x01 + 00f9 02bf 0072 call 0x0072 + 00fb 00de 037d lr $AC0.M, @0x037d + 00fd 0240 7fff andi $AC0.M, #0x7fff + 00ff 00fe 037d sr @0x037d, $AC0.M + 0101 029f 004a jmp 0x004a + 0103 0080 0374 lri $AR0, #0x0374 + 0105 0e01 lris $AC0.M, #0x01 + 0106 00fe 0377 sr @0x0377, $AC0.M + 0108 00fe 037c sr @0x037c, $AC0.M + 010a 02bf 0072 call 0x0072 + 010c 00de 0345 lr $AC0.M, @0x0345 + 010e 00fe 0376 sr @0x0376, $AC0.M + 0110 029f 004a jmp 0x004a + 0112 0081 034c lri $AR1, #0x034c + 0114 009f 0400 lri $AC1.M, #0x0400 + 0116 0080 00c0 lri $AR0, #0x00c0 + 0118 02bf 063e call 0x063e + 011a 02df ret + 011b 0081 034c lri $AR1, #0x034c + 011d 009f 0400 lri $AC1.M, #0x0400 + 011f 0080 0080 lri $AR0, #0x0080 + 0121 0081 034c lri $AR1, #0x034c + 0123 193e lrri $AC0.M, @$AR1 + 0124 193c lrri $AC0.L, @$AR1 + 0125 0098 0000 lri $AX0.L, #0x0000 + 0127 7000 addaxl $ACC0, $AX0.L + 0128 02bf 064d call 0x064d + 012a 02df ret + 012b 191e lrri $AC0.M, @$AR0 + 012c 191a lrri $AX0.H, @$AR0 + 012d 005f loop $AC1.M + 012e 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 012f 1b7e srri @$AR3, $AC0.M + 0130 1b7a srri @$AR3, $AX0.H + 0131 02df ret + 0132 0000 nop + 0133 007f 0138 bloop $AC1.M, 0x0138 + 0135 191e lrri $AC0.M, @$AR0 + 0136 1b7e srri @$AR3, $AC0.M + 0137 191e lrri $AC0.M, @$AR0 + 0138 1b7e srri @$AR3, $AC0.M + 0139 0000 nop + 013a 02df ret + 013b 191e lrri $AC0.M, @$AR0 + 013c 191a lrri $AX0.H, @$AR0 + 013d 007f 0142 bloop $AC1.M, 0x0142 + 013f 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H + 0140 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M + 0141 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H + 0142 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0143 0000 nop + 0144 02df ret + 0145 8a00 m2 + 0146 157f lsr $ACC1, #-1 + 0147 1c20 mrr $AR1, $AR0 + 0148 1c03 mrr $AR0, $AR3 + 0149 193a lrri $AX0.H, @$AR1 + 014a 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 + 014b 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 + 014c 007f 0151 bloop $AC1.M, 0x0151 + 014e 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 014f 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 0150 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 + 0151 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H + 0152 8b00 m0 + 0153 02df ret + 0154 8a00 m2 + 0155 191a lrri $AX0.H, @$AR0 + 0156 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0 + 0157 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0158 005f loop $AC1.M + 0159 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M + 015a 8b00 m0 + 015b 02df ret + 015c 8100 clr $ACC0 + 015d 8900 clr $ACC1 + 015e 0e50 lris $AC0.M, #0x50 + 015f 0080 0d00 lri $AR0, #0x0d00 + 0161 005e loop $AC0.M + 0162 1b1f srri @$AR0, $AC1.M + 0163 0080 0d60 lri $AR0, #0x0d60 + 0165 005e loop $AC0.M + 0166 1b1f srri @$AR0, $AC1.M + 0167 00da 0374 lr $AX0.H, @0x0374 + 0169 8600 tstaxh $AX0.H + 016a 02b5 0f6f callz 0x0f6f + 016c 8100 clr $ACC0 + 016d 8900 clr $ACC1 + 016e 0e50 lris $AC0.M, #0x50 + 016f 0080 0ca0 lri $AR0, #0x0ca0 + 0171 005e loop $AC0.M + 0172 1b1f srri @$AR0, $AC1.M + 0173 0080 0f40 lri $AR0, #0x0f40 + 0175 005e loop $AC0.M + 0176 1b1f srri @$AR0, $AC1.M + 0177 0080 0fa0 lri $AR0, #0x0fa0 + 0179 005e loop $AC0.M + 017a 1b1f srri @$AR0, $AC1.M + 017b 0080 0a00 lri $AR0, #0x0a00 + 017d 005e loop $AC0.M + 017e 1b1f srri @$AR0, $AC1.M + 017f 0080 09a0 lri $AR0, #0x09a0 + 0181 005e loop $AC0.M + 0182 1b1f srri @$AR0, $AC1.M + 0183 0f04 lris $AC1.M, #0x04 + 0184 0080 0e10 lri $AR0, #0x0e10 + 0186 0083 0dc0 lri $AR3, #0x0dc0 + 0188 02bf 0132 call 0x0132 + 018a 0080 0e70 lri $AR0, #0x0e70 + 018c 0083 0e20 lri $AR3, #0x0e20 + 018e 02bf 0132 call 0x0132 + 0190 0080 0ed0 lri $AR0, #0x0ed0 + 0192 0083 0e80 lri $AR3, #0x0e80 + 0194 02bf 0132 call 0x0132 + 0196 0080 0f30 lri $AR0, #0x0f30 + 0198 0083 0ee0 lri $AR3, #0x0ee0 + 019a 02bf 0132 call 0x0132 + 019c 8100 clr $ACC0 + 019d 0e50 lris $AC0.M, #0x50 + 019e 8900 clr $ACC1 + 019f 0080 0dc8 lri $AR0, #0x0dc8 + 01a1 005e loop $AC0.M + 01a2 1b1f srri @$AR0, $AC1.M + 01a3 0080 0e28 lri $AR0, #0x0e28 + 01a5 005e loop $AC0.M + 01a6 1b1f srri @$AR0, $AC1.M + 01a7 0080 0e88 lri $AR0, #0x0e88 + 01a9 005e loop $AC0.M + 01aa 1b1f srri @$AR0, $AC1.M + 01ab 0080 0ee8 lri $AR0, #0x0ee8 + 01ad 005e loop $AC0.M + 01ae 1b1f srri @$AR0, $AC1.M + 01af 02df ret + 01b0 009f 0580 lri $AC1.M, #0x0580 + 01b2 009b 00a0 lri $AX1.H, #0x00a0 + 01b4 0081 0393 lri $AR1, #0x0393 + 01b6 18bc lrrd $AC0.L, @$AR1 + 01b7 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 01b8 bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 01b9 0080 0050 lri $AR0, #0x0050 + 01bb 02bf 0640 call 0x0640 + 01bd 02df ret + 01be 00df 03a1 lr $AC1.M, @0x03a1 + 01c0 0508 addis $ACC1, #0x08 + 01c1 0080 0580 lri $AR0, #0x0580 + 01c3 1c7f mrr $AR3, $AC1.M + 01c4 0098 7fff lri $AX0.L, #0x7fff + 01c6 8900 clr $ACC1 + 01c7 0f50 lris $AC1.M, #0x50 + 01c8 02bf 0145 call 0x0145 + 01ca 02df ret + 01cb 00c0 03a0 lr $AR0, @0x03a0 + 01cd 191a lrri $AX0.H, @$AR0 + 01ce 02bf 01b0 call 0x01b0 + 01d0 02bf 01be call 0x01be + 01d2 8100 clr $ACC0 + 01d3 8900 clr $ACC1 + 01d4 00de 0390 lr $AC0.M, @0x0390 + 01d6 02a0 0001 andf $AC0.M, #0x0001 + 01d8 029d 01e1 jlz 0x01e1 + 01da 0080 0398 lri $AR0, #0x0398 + 01dc 0e08 lris $AC0.M, #0x08 + 01dd 00c1 03a1 lr $AR1, @0x03a1 + 01df 02bf 0c7d call 0x0c7d + 01e1 0f50 lris $AC1.M, #0x50 + 01e2 00c0 03a1 lr $AR0, @0x03a1 + 01e4 00da 0394 lr $AX0.H, @0x0394 + 01e6 8600 tstaxh $AX0.H + 01e7 0295 01ee jz 0x01ee + 01e9 1c7a mrr $AR3, $AX0.H + 01ea 00d8 0395 lr $AX0.L, @0x0395 + 01ec 02bf 0145 call 0x0145 + 01ee 0f50 lris $AC1.M, #0x50 + 01ef 00c0 03a1 lr $AR0, @0x03a1 + 01f1 00da 0396 lr $AX0.H, @0x0396 + 01f3 8600 tstaxh $AX0.H + 01f4 0295 01fb jz 0x01fb + 01f6 1c7a mrr $AR3, $AX0.H + 01f7 00d8 0397 lr $AX0.L, @0x0397 + 01f9 02bf 0145 call 0x0145 + 01fb 00de 0390 lr $AC0.M, @0x0390 + 01fd 02a0 0002 andf $AC0.M, #0x0002 + 01ff 02dd retlz + 0200 0080 0398 lri $AR0, #0x0398 + 0202 0e08 lris $AC0.M, #0x08 + 0203 00c1 03a1 lr $AR1, @0x03a1 + 0205 02bf 0c7d call 0x0c7d + 0207 02df ret + 0208 8900 clr $ACC1 + 0209 009f 0dc0 lri $AC1.M, #0x0dc0 + 020b 00ff 03a1 sr @0x03a1, $AC1.M + 020d 009f 03a8 lri $AC1.M, #0x03a8 + 020f 00ff 03a2 sr @0x03a2, $AC1.M + 0211 009f 03a4 lri $AC1.M, #0x03a4 + 0213 00ff 03a0 sr @0x03a0, $AC1.M + 0215 1104 0235 bloopi #0x04, 0x0235 + 0217 00c0 03a2 lr $AR0, @0x03a2 + 0219 0083 0390 lri $AR3, #0x0390 + 021b 8900 clr $ACC1 + 021c 0f08 lris $AC1.M, #0x08 + 021d 02bf 0132 call 0x0132 + 021f 00da 0390 lr $AX0.H, @0x0390 + 0221 8600 tstaxh $AX0.H + 0222 0295 0226 jz 0x0226 + 0224 02bf 01cb call 0x01cb + 0226 8100 clr $ACC0 + 0227 00de 03a2 lr $AC0.M, @0x03a2 + 0229 0410 addis $ACC0, #0x10 + 022a 00fe 03a2 sr @0x03a2, $AC0.M + 022c 00de 03a1 lr $AC0.M, @0x03a1 + 022e 0460 addis $ACC0, #0x60 + 022f 00fe 03a1 sr @0x03a1, $AC0.M + 0231 00de 03a0 lr $AC0.M, @0x03a0 + 0233 7400 incm $AC0.M + 0234 00fe 03a0 sr @0x03a0, $AC0.M + 0236 00da 0374 lr $AX0.H, @0x0374 + 0238 8600 tstaxh $AX0.H + 0239 0294 025f jnz 0x025f + 023b 0f50 lris $AC1.M, #0x50 + 023c 0080 0be0 lri $AR0, #0x0be0 + 023e 0083 0e80 lri $AR3, #0x0e80 + 0240 0098 7fff lri $AX0.L, #0x7fff + 0242 02bf 0145 call 0x0145 + 0244 0f50 lris $AC1.M, #0x50 + 0245 0080 0be0 lri $AR0, #0x0be0 + 0247 0083 0ee0 lri $AR3, #0x0ee0 + 0249 0098 b820 lri $AX0.L, #0xb820 + 024b 02bf 0145 call 0x0145 + 024d 0f28 lris $AC1.M, #0x28 + 024e 0080 0c68 lri $AR0, #0x0c68 + 0250 0083 0e80 lri $AR3, #0x0e80 + 0252 0098 b820 lri $AX0.L, #0xb820 + 0254 02bf 0145 call 0x0145 + 0256 0f28 lris $AC1.M, #0x28 + 0257 0080 0c68 lri $AR0, #0x0c68 + 0259 0083 0ee0 lri $AR3, #0x0ee0 + 025b 0098 7fff lri $AX0.L, #0x7fff + 025d 02bf 0145 call 0x0145 + 025f 8100 clr $ACC0 + 0260 8900 clr $ACC1 + 0261 0e50 lris $AC0.M, #0x50 + 0262 0080 0be0 lri $AR0, #0x0be0 + 0264 005e loop $AC0.M + 0265 1b1f srri @$AR0, $AC1.M + 0266 0080 0c40 lri $AR0, #0x0c40 + 0268 005e loop $AC0.M + 0269 1b1f srri @$AR0, $AC1.M + 026a 02df ret + 026b 00c0 03a0 lr $AR0, @0x03a0 + 026d 181a lrr $AX0.H, @$AR0 + 026e 8100 clr $ACC0 + 026f 181e lrr $AC0.M, @$AR0 + 0270 00db 0391 lr $AX1.H, @0x0391 + 0272 7400 incm $AC0.M + 0273 d100 cmpar $ACC1, $AX0.H + 0274 0270 ifge + 0275 8100 clr $ACC0 + 0276 1b1e srri @$AR0, $AC0.M + 0277 00df 03a1 lr $AC1.M, @0x03a1 + 0279 009b 00a0 lri $AX1.H, #0x00a0 + 027b 0081 0393 lri $AR1, #0x0393 + 027d 18bc lrrd $AC0.L, @$AR1 + 027e b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 + 027f bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 0280 0080 0050 lri $AR0, #0x0050 + 0282 02bf 064d call 0x064d + 0284 02df ret + 0285 00da 0374 lr $AX0.H, @0x0374 + 0287 8600 tstaxh $AX0.H + 0288 0294 029e jnz 0x029e + 028a 8900 clr $ACC1 + 028b 0f28 lris $AC1.M, #0x28 + 028c 0080 0c40 lri $AR0, #0x0c40 + 028e 0083 0ea8 lri $AR3, #0x0ea8 + 0290 0098 b820 lri $AX0.L, #0xb820 + 0292 02bf 0145 call 0x0145 + 0294 8900 clr $ACC1 + 0295 0f28 lris $AC1.M, #0x28 + 0296 0080 0c40 lri $AR0, #0x0c40 + 0298 0083 0f08 lri $AR3, #0x0f08 + 029a 0098 7fff lri $AX0.L, #0x7fff + 029c 02bf 0145 call 0x0145 + 029e 009f 0dc0 lri $AC1.M, #0x0dc0 + 02a0 00ff 03a1 sr @0x03a1, $AC1.M + 02a2 009f 03a8 lri $AC1.M, #0x03a8 + 02a4 00ff 03a2 sr @0x03a2, $AC1.M + 02a6 009f 03a4 lri $AC1.M, #0x03a4 + 02a8 00ff 03a0 sr @0x03a0, $AC1.M + 02aa 1104 02c8 bloopi #0x04, 0x02c8 + 02ac 00c0 03a2 lr $AR0, @0x03a2 + 02ae 0083 0390 lri $AR3, #0x0390 + 02b0 0f08 lris $AC1.M, #0x08 + 02b1 02bf 0132 call 0x0132 + 02b3 00da 0390 lr $AX0.H, @0x0390 + 02b5 8600 tstaxh $AX0.H + 02b6 0295 02ba jz 0x02ba + 02b8 02bf 026b call 0x026b + 02ba 00de 03a2 lr $AC0.M, @0x03a2 + 02bc 0410 addis $ACC0, #0x10 + 02bd 00fe 03a2 sr @0x03a2, $AC0.M + 02bf 00de 03a1 lr $AC0.M, @0x03a1 + 02c1 0460 addis $ACC0, #0x60 + 02c2 00fe 03a1 sr @0x03a1, $AC0.M + 02c4 00de 03a0 lr $AC0.M, @0x03a0 + 02c6 7400 incm $AC0.M + 02c7 00fe 03a0 sr @0x03a0, $AC0.M + 02c9 02df ret + 02ca 0081 0386 lri $AR1, #0x0386 + 02cc 009f 03a8 lri $AC1.M, #0x03a8 + 02ce 0080 0040 lri $AR0, #0x0040 + 02d0 02bf 063e call 0x063e + 02d2 02df ret + 02d3 191e lrri $AC0.M, @$AR0 + 02d4 189c lrrd $AC0.L, @$AR0 + 02d5 4800 addax $ACC0, $AX0.L + 02d6 1b1e srri @$AR0, $AC0.M + 02d7 1b1c srri @$AR0, $AC0.L + 02d8 02df ret + 02d9 8100 clr $ACC0 + 02da 8900 clr $ACC1 + 02db 00df 0354 lr $AC1.M, @0x0354 + 02dd 00de 034e lr $AC0.M, @0x034e + 02df 8200 cmp + 02e0 0293 02d9 jle 0x02d9 + 02e2 02df ret + 02e3 0080 0388 lri $AR0, #0x0388 + 02e5 0081 0072 lri $AR1, #0x0072 + 02e7 0e02 lris $AC0.M, #0x02 + 02e8 173f callr $AR1 + 02e9 02bf 04ce call 0x04ce + 02eb 00de 0344 lr $AC0.M, @0x0344 + 02ed 00fe 0341 sr @0x0341, $AC0.M + 02ef 00de 0345 lr $AC0.M, @0x0345 + 02f1 00fe 038e sr @0x038e, $AC0.M + 02f3 8100 clr $ACC0 + 02f4 00fe 0355 sr @0x0355, $AC0.M + 02f6 02bf 02ca call 0x02ca + 02f8 02bf 0692 call 0x0692 + 02fa 0092 00ff lri $CR, #0x00ff + 02fc 00de 0341 lr $AC0.M, @0x0341 + 02fe 007e 04c5 bloop $AC0.M, 0x04c5 + 0300 02bf 015c call 0x015c + 0302 02bf 0208 call 0x0208 + 0304 02bf 053a call 0x053a + 0306 02bf 0acb call 0x0acb + 0308 00de 0355 lr $AC0.M, @0x0355 + 030a 7400 incm $AC0.M + 030b 00fe 0355 sr @0x0355, $AC0.M + 030d 8100 clr $ACC0 + 030e 00fe 0354 sr @0x0354, $AC0.M + 0310 00de 0342 lr $AC0.M, @0x0342 + 0312 007e 0465 bloop $AC0.M, 0x0465 + 0314 009e fead lri $AC0.M, #0xfead + 0316 02bf 00a0 call 0x00a0 + 0318 02bf 02d9 call 0x02d9 + 031a 009e d0d0 lri $AC0.M, #0xd0d0 + 031c 02bf 00a0 call 0x00a0 + 031e 8100 clr $ACC0 + 031f 8900 clr $ACC1 + 0320 00de 0354 lr $AC0.M, @0x0354 + 0322 147c lsr $ACC0, #-4 + 0323 0200 04fc addi $AC0.M, #0x04fc + 0325 1c1e mrr $AR0, $AC0.M + 0326 181f lrr $AC1.M, @$AR0 + 0327 00de 0354 lr $AC0.M, @0x0354 + 0329 0240 000f andi $AC0.M, #0x000f + 032b 3d80 lsrnr $ACC1 + 032c 03c0 8000 andcf $AC1.M, #0x8000 + 032e 029c 0461 jlnz 0x0461 + 0330 00d8 0354 lr $AX0.L, @0x0354 + 0332 009a 0180 lri $AX0.H, #0x0180 + 0334 8100 clr $ACC0 + 0335 00de 0380 lr $AC0.M, @0x0380 + 0337 00dc 0381 lr $AC0.L, @0x0381 + 0339 9000 mul $AX0.L, $AX0.H + 033a 9400 mulac $AX0.L, $AX0.H, $ACC0 + 033b 00fe 034c sr @0x034c, $AC0.M + 033d 00fc 034d sr @0x034d, $AC0.L + 033f 02bf 0112 call 0x0112 + 0341 00da 0400 lr $AX0.H, @0x0400 + 0343 8600 tstaxh $AX0.H + 0344 0295 0461 jz 0x0461 + 0346 00da 0401 lr $AX0.H, @0x0401 + 0348 8600 tstaxh $AX0.H + 0349 0294 0461 jnz 0x0461 + 034b 00da 0433 lr $AX0.H, @0x0433 + 034d 00fa 03f8 sr @0x03f8, $AX0.H + 034f 00da 0406 lr $AX0.H, @0x0406 + 0351 8600 tstaxh $AX0.H + 0352 0294 0f2f jnz 0x0f2f + 0354 8100 clr $ACC0 + 0355 00de 0480 lr $AC0.M, @0x0480 + 0357 0609 cmpis $ACC0, #0x09 + 0358 0295 036b jz 0x036b + 035a 0605 cmpis $ACC0, #0x05 + 035b 0295 036b jz 0x036b + 035d 0608 cmpis $ACC0, #0x08 + 035e 0295 0afb jz 0x0afb + 0360 0610 cmpis $ACC0, #0x10 + 0361 0295 0b78 jz 0x0b78 + 0363 0620 cmpis $ACC0, #0x20 + 0364 0295 0be9 jz 0x0be9 + 0366 0621 cmpis $ACC0, #0x21 + 0367 0295 0bf1 jz 0x0bf1 + 0369 029f 09e8 jmp 0x09e8 + 036b 00d8 0402 lr $AX0.L, @0x0402 + 036d 8100 clr $ACC0 + 036e 8900 clr $ACC1 + 036f 00dc 0430 lr $AC0.L, @0x0430 + 0371 8d00 set15 + 0372 0950 lris $AX1.L, #0x50 + 0373 a000 mulx $AX0.L, $AX1.L + 0374 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0375 1404 lsl $ACC0, #4 + 0376 8c00 clr15 + 0377 1ffe mrr $AC1.M, $AC0.M + 0378 0083 0580 lri $AR3, #0x0580 + 037a 02bf 08aa call 0x08aa + 037c 029f 037e jmp 0x037e + 037e 0080 0580 lri $AR0, #0x0580 + 0380 0081 0520 lri $AR1, #0x0520 + 0382 0099 0000 lri $AX1.L, #0x0000 + 0384 02bf 0eaf call 0x0eaf + 0386 009e 0520 lri $AC0.M, #0x0520 + 0388 00fe 038f sr @0x038f, $AC0.M + 038a 8900 clr $ACC1 + 038b 00df 0484 lr $AC1.M, @0x0484 + 038d 0340 001f andi $AC1.M, #0x001f + 038f b900 tst $ACC1 + 0390 0295 03b6 jz 0x03b6 + 0392 00de 038f lr $AC0.M, @0x038f + 0394 5c00 sub $ACC0, $ACC1 + 0395 00fe 038f sr @0x038f, $AC0.M + 0397 1c7e mrr $AR3, $AC0.M + 0398 0080 0440 lri $AR0, #0x0440 + 039a 05fe addis $ACC1, #0xfe + 039b 02bf 012b call 0x012b + 039d 0080 0490 lri $AR0, #0x0490 + 039f 00c1 038f lr $AR1, @0x038f + 03a1 8900 clr $ACC1 + 03a2 00df 0484 lr $AC1.M, @0x0484 + 03a4 0340 001f andi $AC1.M, #0x001f + 03a6 02bf 0c9c call 0x0c9c + 03a8 00de 038f lr $AC0.M, @0x038f + 03aa 0450 addis $ACC0, #0x50 + 03ab 1c1e mrr $AR0, $AC0.M + 03ac 0083 0440 lri $AR3, #0x0440 + 03ae 8900 clr $ACC1 + 03af 00df 0484 lr $AC1.M, @0x0484 + 03b1 0340 001f andi $AC1.M, #0x001f + 03b3 05fe addis $ACC1, #0xfe + 03b4 02bf 012b call 0x012b + 03b6 00de 0484 lr $AC0.M, @0x0484 + 03b8 0240 0020 andi $AC0.M, #0x0020 + 03ba 0295 03d8 jz 0x03d8 + 03bc 0080 04a4 lri $AR0, #0x04a4 + 03be 00c1 038f lr $AR1, @0x038f + 03c0 0082 0454 lri $AR2, #0x0454 + 03c2 0083 04a7 lri $AR3, #0x04a7 + 03c4 18fa lrrd $AX0.H, @$AR3 + 03c5 8600 tstaxh $AX0.H + 03c6 0294 03d6 jnz 0x03d6 + 03c8 18fa lrrd $AX0.H, @$AR3 + 03c9 8600 tstaxh $AX0.H + 03ca 0294 03d6 jnz 0x03d6 + 03cc 18fa lrrd $AX0.H, @$AR3 + 03cd 8600 tstaxh $AX0.H + 03ce 0294 03d6 jnz 0x03d6 + 03d0 8100 clr $ACC0 + 03d1 18fe lrrd $AC0.M, @$AR3 + 03d2 0280 7fff cmpi $AC0.M, #0x7fff + 03d4 0295 03d8 jz 0x03d8 + 03d6 02bf 0cb7 call 0x0cb7 + 03d8 8100 clr $ACC0 + 03d9 00de 042c lr $AC0.M, @0x042c + 03db b100 tst $ACC0 + 03dc 0295 03e2 jz 0x03e2 + 03de 02bf 0dfd call 0x0dfd + 03e0 029f 0457 jmp 0x0457 + 03e2 8100 clr $ACC0 + 03e3 1c9e mrr $IX0, $AC0.M + 03e4 1cde mrr $IX2, $AC0.M + 03e5 7400 incm $AC0.M + 03e6 1cfe mrr $IX3, $AC0.M + 03e7 8100 clr $ACC0 + 03e8 00de 0407 lr $AC0.M, @0x0407 + 03ea b100 tst $ACC0 + 03eb 0295 03fa jz 0x03fa + 03ed 00c3 038f lr $AR3, @0x038f + 03ef 0007 dar $AR3 + 03f0 0080 0477 lri $AR0, #0x0477 + 03f2 0084 ffff lri $IX0, #0xffff + 03f4 0087 ffff lri $IX3, #0xffff + 03f6 199a lrrn $AX0.H, @$AR0 + 03f7 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0 + 03f8 005e loop $AC0.M + 03f9 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M + 03fa 00da 0485 lr $AX0.H, @0x0485 + 03fc 8600 tstaxh $AX0.H + 03fd 0295 0410 jz 0x0410 + 03ff 8900 clr $ACC1 + 0400 0086 0005 lri $IX2, #0x0005 + 0402 0082 040a lri $AR2, #0x040a + 0404 1106 0408 bloopi #0x06, 0x0408 + 0406 18de lrrd $AC0.M, @$AR2 + 0407 147f lsr $ACC0, #-1 + 0408 4d36 add'sn $ACC1, $ACC0 : @$AR2, $AC0.M + 0409 b900 tst $ACC1 + 040a 0294 0410 jnz 0x0410 + 040c 009a 0001 lri $AX0.H, #0x0001 + 040e 00fa 0401 sr @0x0401, $AX0.H + 0410 8f00 set40 + 0411 0086 0002 lri $IX2, #0x0002 + 0413 0082 0408 lri $AR2, #0x0408 + 0415 1106 0440 bloopi #0x06, 0x0440 + 0417 8100 clr $ACC0 + 0418 195e lrri $AC0.M, @$AR2 + 0419 1200 sbclr #0x00 + 041a b100 tst $ACC0 + 041b 0275 ifz + 041c 1300 sbset #0x00 + 041d 1c7e mrr $AR3, $AC0.M + 041e 195e lrri $AC0.M, @$AR2 + 041f 195f lrri $AC1.M, @$AR2 + 0420 5c00 sub $ACC0, $ACC1 + 0421 14fb asr $ACC0, #-5 + 0422 1f5e mrr $AX0.H, $AC0.M + 0423 1f1c mrr $AX0.L, $AC0.L + 0424 185e lrr $AC0.M, @$AR2 + 0425 0240 00ff andi $AC0.M, #0x00ff + 0427 1f7e mrr $AX1.H, $AC0.M + 0428 185e lrr $AC0.M, @$AR2 + 0429 1478 lsr $ACC0, #-8 + 042a 009c 0000 lri $AC0.L, #0x0000 + 042c d100 cmpar $ACC1, $AX0.H + 042d 0295 0435 jz 0x0435 + 042f 185e lrr $AC0.M, @$AR2 + 0430 0272 ifg + 0431 7400 incm $AC0.M + 0432 0271 ifl + 0433 7800 decm $AC0.M + 0434 1a5e srr @$AR2, $AC0.M + 0435 0006 dar $AR2 + 0436 00de 038f lr $AC0.M, @0x038f + 0438 5600 subr $ACC0, $AX1.H + 0439 029d 043e jlz 0x043e + 043b 1c1e mrr $AR0, $AC0.M + 043c 02bf 0dd3 call 0x0dd3 + 043e 0000 nop + 043f 1b5f srri @$AR2, $AC1.M + 0440 000a iar $AR2 + 0441 8e00 set16 + 0442 8100 clr $ACC0 + 0443 00de 0407 lr $AC0.M, @0x0407 + 0445 b100 tst $ACC0 + 0446 0295 0457 jz 0x0457 + 0448 00c3 038f lr $AR3, @0x038f + 044a 0087 004f lri $IX3, #0x004f + 044c 001f addarn $AR3, $IX3 + 044d 0080 0477 lri $AR0, #0x0477 + 044f 0084 ffff lri $IX0, #0xffff + 0451 0087 ffff lri $IX3, #0xffff + 0453 19fa lrrn $AX0.H, @$AR3 + 0454 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3 + 0455 005e loop $AC0.M + 0456 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H + 0457 00da 0406 lr $AX0.H, @0x0406 + 0459 8600 tstaxh $AX0.H + 045a 0294 045f jnz 0x045f + 045c 8100 clr $ACC0 + 045d 00fe 0404 sr @0x0404, $AC0.M + 045f 02bf 011b call 0x011b + 0461 00de 0354 lr $AC0.M, @0x0354 + 0463 7400 incm $AC0.M + 0464 00fe 0354 sr @0x0354, $AC0.M + 0466 009e b05e lri $AC0.M, #0xb05e + 0468 02bf 00a0 call 0x00a0 + 046a 0e00 lris $AC0.M, #0x00 + 046b 00fe 034e sr @0x034e, $AC0.M + 046d 0e04 lris $AC0.M, #0x04 + 046e 02bf 07d7 call 0x07d7 + 0470 00de 0355 lr $AC0.M, @0x0355 + 0472 0260 ff00 ori $AC0.M, #0xff00 + 0474 02bf 07e1 call 0x07e1 + 0476 02bf 0d59 call 0x0d59 + 0478 02bf 0d6b call 0x0d6b + 047a 02bf 0dc0 call 0x0dc0 + 047c 00de 0341 lr $AC0.M, @0x0341 + 047e 7800 decm $AC0.M + 047f 00fe 0341 sr @0x0341, $AC0.M + 0481 0080 09a0 lri $AR0, #0x09a0 + 0483 0083 0d00 lri $AR3, #0x0d00 + 0485 0f50 lris $AC1.M, #0x50 + 0486 0098 5a82 lri $AX0.L, #0x5a82 + 0488 02bf 0145 call 0x0145 + 048a 0080 09a0 lri $AR0, #0x09a0 + 048c 0083 0d60 lri $AR3, #0x0d60 + 048e 0f50 lris $AC1.M, #0x50 + 048f 02bf 0145 call 0x0145 + 0491 0083 0d00 lri $AR3, #0x0d00 + 0493 02bf 0deb call 0x0deb + 0495 0081 0388 lri $AR1, #0x0388 + 0497 009f 0d00 lri $AC1.M, #0x0d00 + 0499 0080 0050 lri $AR0, #0x0050 + 049b 02bf 064b call 0x064b + 049d 0080 0fa0 lri $AR0, #0x0fa0 + 049f 0083 0d60 lri $AR3, #0x0d60 + 04a1 0f50 lris $AC1.M, #0x50 + 04a2 0098 8000 lri $AX0.L, #0x8000 + 04a4 02bf 0145 call 0x0145 + 04a6 0083 0d60 lri $AR3, #0x0d60 + 04a8 02bf 0deb call 0x0deb + 04aa 0081 038a lri $AR1, #0x038a + 04ac 009f 0d60 lri $AC1.M, #0x0d60 + 04ae 0080 0050 lri $AR0, #0x0050 + 04b0 02bf 064b call 0x064b + 04b2 009a 0000 lri $AX0.H, #0x0000 + 04b4 0098 00a0 lri $AX0.L, #0x00a0 + 04b6 0080 0388 lri $AR0, #0x0388 + 04b8 02bf 02d3 call 0x02d3 + 04ba 0080 038a lri $AR0, #0x038a + 04bc 02bf 02d3 call 0x02d3 + 04be 02bf 0285 call 0x0285 + 04c0 02bf 0509 call 0x0509 + 04c2 02bf 04e0 call 0x04e0 + 04c4 0000 nop + 04c5 0000 nop + 04c6 009e 0dac lri $AC0.M, #0x0dac + 04c8 02bf 00a0 call 0x00a0 + 04ca 0080 002b lri $AR0, #0x002b + 04cc 029f 0770 jmp 0x0770 + 04ce 0080 0374 lri $AR0, #0x0374 + 04d0 0e02 lris $AC0.M, #0x02 + 04d1 02bf 0074 call 0x0074 + 04d3 00de 0374 lr $AC0.M, @0x0374 + 04d5 0240 7fff andi $AC0.M, #0x7fff + 04d7 00fe 0374 sr @0x0374, $AC0.M + 04d9 00de 0376 lr $AC0.M, @0x0376 + 04db 0240 7fff andi $AC0.M, #0x7fff + 04dd 00fe 0376 sr @0x0376, $AC0.M + 04df 02df ret + 04e0 00da 0374 lr $AX0.H, @0x0374 + 04e2 8600 tstaxh $AX0.H + 04e3 02d5 retz + 04e4 0083 0f40 lri $AR3, #0x0f40 + 04e6 02bf 0deb call 0x0deb + 04e8 0083 0ca0 lri $AR3, #0x0ca0 + 04ea 02bf 0deb call 0x0deb + 04ec 0081 0374 lri $AR1, #0x0374 + 04ee 009f 0f40 lri $AC1.M, #0x0f40 + 04f0 0080 0050 lri $AR0, #0x0050 + 04f2 02bf 064b call 0x064b + 04f4 0081 0376 lri $AR1, #0x0376 + 04f6 009f 0ca0 lri $AC1.M, #0x0ca0 + 04f8 0080 0050 lri $AR0, #0x0050 + 04fa 02bf 064b call 0x064b + 04fc 009a 0000 lri $AX0.H, #0x0000 + 04fe 0098 00a0 lri $AX0.L, #0x00a0 + 0500 0080 0374 lri $AR0, #0x0374 + 0502 02bf 02d3 call 0x02d3 + 0504 0080 0376 lri $AR0, #0x0376 + 0506 02bf 02d3 call 0x02d3 + 0508 02df ret + 0509 00da 0374 lr $AX0.H, @0x0374 + 050b 8600 tstaxh $AX0.H + 050c 02d5 retz + 050d 009f 0be0 lri $AC1.M, #0x0be0 + 050f 00ff 03a1 sr @0x03a1, $AC1.M + 0511 00df 03ca lr $AC1.M, @0x03ca + 0513 00ff 0392 sr @0x0392, $AC1.M + 0515 00df 03cb lr $AC1.M, @0x03cb + 0517 00ff 0393 sr @0x0393, $AC1.M + 0519 009f 03a6 lri $AC1.M, #0x03a6 + 051b 00ff 03a0 sr @0x03a0, $AC1.M + 051d 00df 03c9 lr $AC1.M, @0x03c9 + 051f 00ff 0391 sr @0x0391, $AC1.M + 0521 02bf 026b call 0x026b + 0523 009f 0c40 lri $AC1.M, #0x0c40 + 0525 00ff 03a1 sr @0x03a1, $AC1.M + 0527 00df 03da lr $AC1.M, @0x03da + 0529 00ff 0392 sr @0x0392, $AC1.M + 052b 00df 03db lr $AC1.M, @0x03db + 052d 00ff 0393 sr @0x0393, $AC1.M + 052f 009f 03a7 lri $AC1.M, #0x03a7 + 0531 00ff 03a0 sr @0x03a0, $AC1.M + 0533 00df 03d9 lr $AC1.M, @0x03d9 + 0535 00ff 0391 sr @0x0391, $AC1.M + 0537 02bf 026b call 0x026b + 0539 02df ret + 053a 00da 0374 lr $AX0.H, @0x0374 + 053c 8600 tstaxh $AX0.H + 053d 02d5 retz + 053e 00da 03d8 lr $AX0.H, @0x03d8 + 0540 8600 tstaxh $AX0.H + 0541 02d5 retz + 0542 0083 0be0 lri $AR3, #0x0be0 + 0544 0080 0c30 lri $AR0, #0x0c30 + 0546 0f04 lris $AC1.M, #0x04 + 0547 02bf 0132 call 0x0132 + 0549 0083 0c40 lri $AR3, #0x0c40 + 054b 0080 0c90 lri $AR0, #0x0c90 + 054d 0f04 lris $AC1.M, #0x04 + 054e 02bf 0132 call 0x0132 + 0550 00df 03ca lr $AC1.M, @0x03ca + 0552 00ff 0392 sr @0x0392, $AC1.M + 0554 00df 03cb lr $AC1.M, @0x03cb + 0556 00ff 0393 sr @0x0393, $AC1.M + 0558 00df 03a6 lr $AC1.M, @0x03a6 + 055a 7500 incm $AC1.M + 055b 1f5f mrr $AX0.H, $AC1.M + 055c 009f 0be8 lri $AC1.M, #0x0be8 + 055e 02bf 01b2 call 0x01b2 + 0560 00df 03da lr $AC1.M, @0x03da + 0562 00ff 0392 sr @0x0392, $AC1.M + 0564 00df 03db lr $AC1.M, @0x03db + 0566 00ff 0393 sr @0x0393, $AC1.M + 0568 00df 03a7 lr $AC1.M, @0x03a7 + 056a 7500 incm $AC1.M + 056b 1f5f mrr $AX0.H, $AC1.M + 056c 009f 0c48 lri $AC1.M, #0x0c48 + 056e 02bf 01b2 call 0x01b2 + 0570 00de 03c8 lr $AC0.M, @0x03c8 + 0572 02a0 0001 andf $AC0.M, #0x0001 + 0574 029d 057d jlz 0x057d + 0576 0080 03d0 lri $AR0, #0x03d0 + 0578 0e08 lris $AC0.M, #0x08 + 0579 0081 0be0 lri $AR1, #0x0be0 + 057b 02bf 0c7d call 0x0c7d + 057d 00de 03d8 lr $AC0.M, @0x03d8 + 057f 02a0 0001 andf $AC0.M, #0x0001 + 0581 029d 058a jlz 0x058a + 0583 0080 03e0 lri $AR0, #0x03e0 + 0585 0e08 lris $AC0.M, #0x08 + 0586 0081 0c40 lri $AR1, #0x0c40 + 0588 02bf 0c7d call 0x0c7d + 058a 0f50 lris $AC1.M, #0x50 + 058b 0080 0be0 lri $AR0, #0x0be0 + 058d 0083 0f40 lri $AR3, #0x0f40 + 058f 00d8 03cd lr $AX0.L, @0x03cd + 0591 02bf 0145 call 0x0145 + 0593 0f50 lris $AC1.M, #0x50 + 0594 0080 0c40 lri $AR0, #0x0c40 + 0596 0083 0ca0 lri $AR3, #0x0ca0 + 0598 00d8 03df lr $AX0.L, @0x03df + 059a 02bf 0145 call 0x0145 + 059c 00de 03c8 lr $AC0.M, @0x03c8 + 059e 02a0 0002 andf $AC0.M, #0x0002 + 05a0 029d 05a9 jlz 0x05a9 + 05a2 0080 03d0 lri $AR0, #0x03d0 + 05a4 0e08 lris $AC0.M, #0x08 + 05a5 0081 0be0 lri $AR1, #0x0be0 + 05a7 02bf 0c7d call 0x0c7d + 05a9 00de 03d8 lr $AC0.M, @0x03d8 + 05ab 02a0 0002 andf $AC0.M, #0x0002 + 05ad 029d 05b6 jlz 0x05b6 + 05af 0080 03e0 lri $AR0, #0x03e0 + 05b1 0e08 lris $AC0.M, #0x08 + 05b2 0081 0c40 lri $AR1, #0x0c40 + 05b4 02bf 0c7d call 0x0c7d + 05b6 02df ret + 05b7 0080 0346 lri $AR0, #0x0346 + 05b9 02bf 0072 call 0x0072 + 05bb 02bf 0072 call 0x0072 + 05bd 0081 0346 lri $AR1, #0x0346 + 05bf 193e lrri $AC0.M, @$AR1 + 05c0 193c lrri $AC0.L, @$AR1 + 05c1 009f 0400 lri $AC1.M, #0x0400 + 05c3 00c0 0345 lr $AR0, @0x0345 + 05c5 02bf 0640 call 0x0640 + 05c7 0081 0348 lri $AR1, #0x0348 + 05c9 193e lrri $AC0.M, @$AR1 + 05ca 193c lrri $AC0.L, @$AR1 + 05cb 009f 0800 lri $AC1.M, #0x0800 + 05cd 00c0 0345 lr $AR0, @0x0345 + 05cf 02bf 0640 call 0x0640 + 05d1 0081 0346 lri $AR1, #0x0346 + 05d3 193e lrri $AC0.M, @$AR1 + 05d4 193c lrri $AC0.L, @$AR1 + 05d5 009f 0800 lri $AC1.M, #0x0800 + 05d7 00c0 0345 lr $AR0, @0x0345 + 05d9 02bf 064d call 0x064d + 05db 0081 0348 lri $AR1, #0x0348 + 05dd 193e lrri $AC0.M, @$AR1 + 05de 193c lrri $AC0.L, @$AR1 + 05df 009f 0400 lri $AC1.M, #0x0400 + 05e1 00c0 0345 lr $AR0, @0x0345 + 05e3 02bf 064d call 0x064d + 05e5 029f 004a jmp 0x004a + 05e7 0080 0346 lri $AR0, #0x0346 + 05e9 02bf 0072 call 0x0072 + 05eb 02bf 0072 call 0x0072 + 05ed 0081 0346 lri $AR1, #0x0346 + 05ef 193e lrri $AC0.M, @$AR1 + 05f0 193c lrri $AC0.L, @$AR1 + 05f1 009f 0400 lri $AC1.M, #0x0400 + 05f3 00c0 0345 lr $AR0, @0x0345 + 05f5 02bf 0640 call 0x0640 + 05f7 0081 0348 lri $AR1, #0x0348 + 05f9 193e lrri $AC0.M, @$AR1 + 05fa 193c lrri $AC0.L, @$AR1 + 05fb 009f 0400 lri $AC1.M, #0x0400 + 05fd 00c0 0345 lr $AR0, @0x0345 + 05ff 02bf 064d call 0x064d + 0601 029f 004a jmp 0x004a + 0603 0080 0346 lri $AR0, #0x0346 + 0605 02bf 0072 call 0x0072 + 0607 02bf 0072 call 0x0072 + 0609 0081 0346 lri $AR1, #0x0346 + 060b 193e lrri $AC0.M, @$AR1 + 060c 193c lrri $AC0.L, @$AR1 + 060d 009f 0400 lri $AC1.M, #0x0400 + 060f 00c0 0344 lr $AR0, @0x0344 + 0611 02bf 0640 call 0x0640 + 0613 0081 0348 lri $AR1, #0x0348 + 0615 193e lrri $AC0.M, @$AR1 + 0616 193c lrri $AC0.L, @$AR1 + 0617 009f 0800 lri $AC1.M, #0x0800 + 0619 00c0 0344 lr $AR0, @0x0344 + 061b 02bf 0640 call 0x0640 + 061d 0080 0400 lri $AR0, #0x0400 + 061f 0083 0800 lri $AR3, #0x0800 + 0621 0084 0000 lri $IX0, #0x0000 + 0623 00da 0345 lr $AX0.H, @0x0345 + 0625 00df 0344 lr $AC1.M, @0x0344 + 0627 8f00 set40 + 0628 197b lrri $AX1.H, @$AR3 + 0629 b800 mulx $AX0.H, $AX1.H + 062a 197b lrri $AX1.H, @$AR3 + 062b 007f 0630 bloop $AC1.M, 0x0630 + 062d 199e lrrn $AC0.M, @$AR0 + 062e bc00 mulxac $AX0.H, $AX1.H, $ACC0 + 062f 80b2 nx'sl : $AC0.M, $AX1.H + 0630 0000 nop + 0631 8e00 set16 + 0632 0081 0346 lri $AR1, #0x0346 + 0634 193e lrri $AC0.M, @$AR1 + 0635 193c lrri $AC0.L, @$AR1 + 0636 009f 0400 lri $AC1.M, #0x0400 + 0638 00c0 0344 lr $AR0, @0x0344 + 063a 02bf 064d call 0x064d + 063c 029f 004a jmp 0x004a + 063e 193e lrri $AC0.M, @$AR1 + 063f 193c lrri $AC0.L, @$AR1 + 0640 2fcd srs @DSPA, $AC1.M + 0641 0f00 lris $AC1.M, #0x00 + 0642 2fc9 srs @DSCR, $AC1.M + 0643 2ece srs @DSMAH, $AC0.M + 0644 2ccf srs @DSMAL, $AC0.L + 0645 1fe0 mrr $AC1.M, $AR0 + 0646 1501 lsl $ACC1, #1 + 0647 2fcb srs @DSBL, $AC1.M + 0648 02bf 0651 call 0x0651 + 064a 02df ret + 064b 193e lrri $AC0.M, @$AR1 + 064c 193c lrri $AC0.L, @$AR1 + 064d 2fcd srs @DSPA, $AC1.M + 064e 0f01 lris $AC1.M, #0x01 + 064f 029f 0642 jmp 0x0642 + 0651 26c9 lrs $AC0.M, @DSCR + 0652 02a0 0004 andf $AC0.M, #0x0004 + 0654 029c 0651 jlnz 0x0651 + 0656 02df ret + 0657 193e lrri $AC0.M, @$AR1 + 0658 193c lrri $AC0.L, @$AR1 + 0659 00ff ffcd sr @DSPA, $AC1.M + 065b 0f00 lris $AC1.M, #0x00 + 065c 00ff ffc9 sr @DSCR, $AC1.M + 065e 00fe ffce sr @DSMAH, $AC0.M + 0660 00fc ffcf sr @DSMAL, $AC0.L + 0662 1fe0 mrr $AC1.M, $AR0 + 0663 1501 lsl $ACC1, #1 + 0664 00ff ffcb sr @DSBL, $AC1.M + 0666 02df ret + 0667 00de ffc9 lr $AC0.M, @DSCR + 0669 02a0 0004 andf $AC0.M, #0x0004 + 066b 029c 0667 jlnz 0x0667 + 066d 02df ret + 066e 0080 0346 lri $AR0, #0x0346 + 0670 02bf 0072 call 0x0072 + 0672 02bf 0072 call 0x0072 + 0674 0081 0346 lri $AR1, #0x0346 + 0676 00df 0349 lr $AC1.M, @0x0349 + 0678 0340 ffff andi $AC1.M, #0xffff + 067a 00c0 0345 lr $AR0, @0x0345 + 067c 02bf 063e call 0x063e + 067e 029f 004a jmp 0x004a + 0680 0080 0346 lri $AR0, #0x0346 + 0682 02bf 0072 call 0x0072 + 0684 02bf 0072 call 0x0072 + 0686 0081 0346 lri $AR1, #0x0346 + 0688 00df 0349 lr $AC1.M, @0x0349 + 068a 0340 ffff andi $AC1.M, #0xffff + 068c 00c0 0345 lr $AR0, @0x0345 + 068e 02bf 064b call 0x064b + 0690 029f 004a jmp 0x004a + 0692 0092 00ff lri $CR, #0x00ff + 0694 009e ffff lri $AC0.M, #0xffff + 0696 2ed4 srs @ACSAH, $AC0.M + 0697 2ed5 srs @ACSAL, $AC0.M + 0698 2ed6 srs @ACEAH, $AC0.M + 0699 2ed7 srs @ACEAL, $AC0.M + 069a 02df ret + 069b 00ff ffd1 sr @SampleFormat, $AC1.M + 069d 0340 0003 andi $AC1.M, #0x0003 + 069f 7900 decm $AC1.M + 06a0 02ca lsrn + 06a1 00df 037d lr $AC1.M, @0x037d + 06a3 00dd 037e lr $AC1.L, @0x037e + 06a5 4c00 add $ACC0, $ACC1 + 06a6 00fe ffd8 sr @ACCAH, $AC0.M + 06a8 00fc ffd9 sr @ACCAL, $AC0.L + 06aa 02df ret + 06ab 1fc3 mrr $AC0.M, $AR3 + 06ac 043f addis $ACC0, #0x3f + 06ad 0240 fff0 andi $AC0.M, #0xfff0 + 06af 00fe ffcd sr @DSPA, $AC0.M + 06b1 1c1a mrr $AR0, $AX0.H + 06b2 00da 037f lr $AX0.H, @0x037f + 06b4 4400 addr $ACC0, $AX0.H + 06b5 1f40 mrr $AX0.H, $AR0 + 06b6 1c1e mrr $AR0, $AC0.M + 06b7 1fda mrr $AC0.M, $AX0.H + 06b8 041f addis $ACC0, #0x1f + 06b9 0240 fff0 andi $AC0.M, #0xfff0 + 06bb 1401 lsl $ACC0, #1 + 06bc 00fe ffcb sr @DSBL, $AC0.M + 06be 00de ffc9 lr $AC0.M, @DSCR + 06c0 02a0 0004 andf $AC0.M, #0x0004 + 06c2 029c 06be jlnz 0x06be + 06c4 007a 06c7 bloop $AX0.H, 0x06c7 + 06c6 191e lrri $AC0.M, @$AR0 + 06c7 1b7e srri @$AR3, $AC0.M + 06c8 02df ret + 06c9 8900 clr $ACC1 + 06ca 1ffc mrr $AC1.M, $AC0.L + 06cb 0340 001f andi $AC1.M, #0x001f + 06cd 00ff 037f sr @0x037f, $AC1.M + 06cf 1ffc mrr $AC1.M, $AC0.L + 06d0 0340 ffe0 andi $AC1.M, #0xffe0 + 06d2 1f9f mrr $AC0.L, $AC1.M + 06d3 00df 037d lr $AC1.M, @0x037d + 06d5 00dd 037e lr $AC1.L, @0x037e + 06d7 4c00 add $ACC0, $ACC1 + 06d8 00fe ffce sr @DSMAH, $AC0.M + 06da 00fc ffcf sr @DSMAL, $AC0.L + 06dc 0f00 lris $AC1.M, #0x00 + 06dd 00ff ffc9 sr @DSCR, $AC1.M + 06df 02df ret + 06e0 00df 037f lr $AC1.M, @0x037f + 06e2 157f lsr $ACC1, #-1 + 06e3 00ff 037f sr @0x037f, $AC1.M + 06e5 02df ret + 06e6 8600 tstaxh $AX0.H + 06e7 02d5 retz + 06e8 1f1a mrr $AX0.L, $AX0.H + 06e9 009e 0780 lri $AC0.M, #0x0780 + 06eb 00fe ffcd sr @DSPA, $AC0.M + 06ed 1fda mrr $AC0.M, $AX0.H + 06ee 043f addis $ACC0, #0x3f + 06ef 0240 ffe0 andi $AC0.M, #0xffe0 + 06f1 00fe ffcb sr @DSBL, $AC0.M + 06f3 00de ffc9 lr $AC0.M, @DSCR + 06f5 02a0 0004 andf $AC0.M, #0x0004 + 06f7 029c 06f3 jlnz 0x06f3 + 06f9 8100 clr $ACC0 + 06fa 00de 037f lr $AC0.M, @0x037f + 06fc 147f lsr $ACC0, #-1 + 06fd 0200 0780 addi $AC0.M, #0x0780 + 06ff 1c1e mrr $AR0, $AC0.M + 0700 00de 037f lr $AC0.M, @0x037f + 0702 02a0 0001 andf $AC0.M, #0x0001 + 0704 029d 070d jlz 0x070d + 0706 8100 clr $ACC0 + 0707 191e lrri $AC0.M, @$AR0 + 0708 1488 asl $ACC0, #8 + 0709 1b7e srri @$AR3, $AC0.M + 070a 1fda mrr $AC0.M, $AX0.H + 070b 7800 decm $AC0.M + 070c 1f5e mrr $AX0.H, $AC0.M + 070d 8100 clr $ACC0 + 070e 1fda mrr $AC0.M, $AX0.H + 070f 147f lsr $ACC0, #-1 + 0710 007e 0719 bloop $AC0.M, 0x0719 + 0712 8100 clr $ACC0 + 0713 181e lrr $AC0.M, @$AR0 + 0714 0240 ff00 andi $AC0.M, #0xff00 + 0716 1b7e srri @$AR3, $AC0.M + 0717 191e lrri $AC0.M, @$AR0 + 0718 1488 asl $ACC0, #8 + 0719 1b7e srri @$AR3, $AC0.M + 071a 1fda mrr $AC0.M, $AX0.H + 071b 1f58 mrr $AX0.H, $AX0.L + 071c 02a0 0001 andf $AC0.M, #0x0001 + 071e 02dd retlz + 071f 8100 clr $ACC0 + 0720 181e lrr $AC0.M, @$AR0 + 0721 0240 ff00 andi $AC0.M, #0xff00 + 0723 1b7e srri @$AR3, $AC0.M + 0724 02df ret + 0725 1205 sbclr #0x05 + 0726 8e00 set16 + 0727 00f0 03fd sr @0x03fd, $AC0.H + 0729 00fc 03ff sr @0x03ff, $AC0.L + 072b f400 lsr16 $ACC0 + 072c 00fc 03fe sr @0x03fe, $AC0.L + 072e 00fa 03fa sr @0x03fa, $AX0.H + 0730 8100 clr $ACC0 + 0731 00de fffe lr $AC0.M, @CMBH + 0733 02c0 8000 andcf $AC0.M, #0x8000 + 0735 029c 0826 jlnz 0x0826 + 0737 00da ffff lr $AX0.H, @CMBL + 0739 8600 tstaxh $AX0.H + 073a 0294 07ff jnz 0x07ff + 073c 00de fffe lr $AC0.M, @CMBH + 073e 02c0 8000 andcf $AC0.M, #0x8000 + 0740 029c 073c jlnz 0x073c + 0742 0240 000f andi $AC0.M, #0x000f + 0744 1f5e mrr $AX0.H, $AC0.M + 0745 7400 incm $AC0.M + 0746 0c00 lris $AC0.L, #0x00 + 0747 1404 lsl $ACC0, #4 + 0748 00fe 034e sr @0x034e, $AC0.M + 074a 1fda mrr $AC0.M, $AX0.H + 074b 1f40 mrr $AX0.H, $AR0 + 074c 0200 04fc addi $AC0.M, #0x04fc + 074e 1c1e mrr $AR0, $AC0.M + 074f 00de ffff lr $AC0.M, @CMBL + 0751 1a1e srr @$AR0, $AC0.M + 0752 1c1a mrr $AR0, $AX0.H + 0753 00de 03fe lr $AC0.M, @0x03fe + 0755 00dc 03ff lr $AC0.L, @0x03ff + 0757 00d0 03fd lr $AC0.H, @0x03fd + 0759 00da 03fa lr $AX0.H, @0x03fa + 075b 1305 sbset #0x05 + 075c 02ff rti + 075d 009a 0002 lri $AX0.H, #0x0002 + 075f 00fa 03a3 sr @0x03a3, $AX0.H + 0761 00e0 03f9 sr @0x03f9, $AR0 + 0763 02bf 07e9 call 0x07e9 + 0765 16fc dcd1 si @DMBH, #0xdcd1 + 0767 16fd 0002 si @DMBL, #0x0002 + 0769 16fb 0001 si @DIRQ, #0x0001 + 076b 0021 halt + 076c 0784 cmpis $ACC1, #0x84 + 076d 0785 cmpis $ACC1, #0x85 + 076e 07c5 cmpis $ACC1, #0xc5 + 076f 07c8 cmpis $ACC1, #0xc8 + 0770 00e0 03f9 sr @0x03f9, $AR0 + 0772 009e 0005 lri $AC0.M, #0x0005 + 0774 02bf 07d7 call 0x07d7 + 0776 8e00 set16 + 0777 8100 clr $ACC0 + 0778 8900 clr $ACC1 + 0779 02bf 07cb call 0x07cb + 077b 27ff lrs $AC1.M, @CMBL + 077c 009e 076c lri $AC0.M, #0x076c + 077e 4c00 add $ACC0, $ACC1 + 077f 1c7e mrr $AR3, $AC0.M + 0780 0313 ilrr $AC1.M, @$AR3 + 0781 1c7f mrr $AR3, $AC1.M + 0782 176f jmpr $AR3 + 0783 0021 halt + 0784 0021 halt + 0785 009a 0002 lri $AX0.H, #0x0002 + 0787 00fa 03a3 sr @0x03a3, $AX0.H + 0789 8100 clr $ACC0 + 078a 8900 clr $ACC1 + 078b 02bf 07cb call 0x07cb + 078d 24ff lrs $AC0.L, @CMBL + 078e 02bf 07d1 call 0x07d1 + 0790 25ff lrs $AC1.L, @CMBL + 0791 02bf 07d1 call 0x07d1 + 0793 27ff lrs $AC1.M, @CMBL + 0794 2ece srs @DSMAH, $AC0.M + 0795 2ccf srs @DSMAL, $AC0.L + 0796 16c9 0001 si @DSCR, #0x0001 + 0798 2fcd srs @DSPA, $AC1.M + 0799 2dcb srs @DSBL, $AC1.L + 079a 8100 clr $ACC0 + 079b 8900 clr $ACC1 + 079c 02bf 07cb call 0x07cb + 079e 24ff lrs $AC0.L, @CMBL + 079f 1c9e mrr $IX0, $AC0.M + 07a0 1cbc mrr $IX1, $AC0.L + 07a1 02bf 07d1 call 0x07d1 + 07a3 25ff lrs $AC1.L, @CMBL + 07a4 02bf 07d1 call 0x07d1 + 07a6 27ff lrs $AC1.M, @CMBL + 07a7 1cdf mrr $IX2, $AC1.M + 07a8 1cfd mrr $IX3, $AC1.L + 07a9 8100 clr $ACC0 + 07aa 02bf 07cb call 0x07cb + 07ac 26ff lrs $AC0.M, @CMBL + 07ad 1c1e mrr $AR0, $AC0.M + 07ae 8900 clr $ACC1 + 07af 02bf 07d1 call 0x07d1 + 07b1 20ff lrs $AX0.L, @CMBL + 07b2 1f5f mrr $AX0.H, $AC1.M + 07b3 02bf 07cb call 0x07cb + 07b5 21ff lrs $AX1.L, @CMBL + 07b6 02bf 07cb call 0x07cb + 07b8 23ff lrs $AX1.H, @CMBL + 07b9 26c9 lrs $AC0.M, @DSCR + 07ba 02a0 0004 andf $AC0.M, #0x0004 + 07bc 029c 07b9 jlnz 0x07b9 + 07be 1206 sbclr #0x06 + 07bf 1203 sbclr #0x03 + 07c0 1204 sbclr #0x04 + 07c1 1205 sbclr #0x05 + 07c2 029f 80b5 jmp 0x80b5 + 07c4 0021 halt + 07c5 029f 8000 jmp 0x8000 + 07c7 0021 halt + 07c8 00c0 03f9 lr $AR0, @0x03f9 + 07ca 170f jmpr $AR0 + 07cb 26fe lrs $AC0.M, @CMBH + 07cc 02c0 8000 andcf $AC0.M, #0x8000 + 07ce 029c 07cb jlnz 0x07cb + 07d0 02df ret + 07d1 27fe lrs $AC1.M, @CMBH + 07d2 03c0 8000 andcf $AC1.M, #0x8000 + 07d4 029c 07d1 jlnz 0x07d1 + 07d6 02df ret + +void SEND_DCD1(AC0.M) { + 07d7 02bf 07ef call 0x07ef + 07d9 16fc dcd1 si @DMBH, #0xdcd1 + 07db 2efd srs @DMBL, $AC0.M + 07dc 16fb 0001 si @DIRQ, #0x0001 + 07de 02bf 07ef call 0x07ef + 07e0 02df ret +} + +void SEND_F355(AC0.M) { + 07e1 02bf 07ef call 0x07ef + 07e3 16fc f355 si @DMBH, #0xf355 + 07e5 2efd srs @DMBL, $AC0.M + 07e6 02bf 07ef call 0x07ef + 07e8 02df ret +} + + 07e9 26fc lrs $AC0.M, @DMBH + 07ea 02c0 8000 andcf $AC0.M, #0x8000 + 07ec 029d 07e9 jlz 0x07e9 + 07ee 02df ret + 07ef 27fc lrs $AC1.M, @DMBH + 07f0 03c0 8000 andcf $AC1.M, #0x8000 + 07f2 029d 07ef jlz 0x07ef + 07f4 02df ret + 07f5 009a 0280 lri $AX0.H, #0x0280 + 07f7 00fa 0350 sr @0x0350, $AX0.H + 07f9 00fa 0351 sr @0x0351, $AX0.H + 07fb 0a00 lris $AX0.H, #0x00 + 07fc 00fa 0352 sr @0x0352, $AX0.H + 07fe 02df ret + 07ff 00e0 03fb sr @0x03fb, $AR0 + 0801 00e8 03fc sr @0x03fc, $WR0 + 0803 00c0 0350 lr $AR0, @0x0350 + 0805 0088 002f lri $WR0, #0x002f + 0807 1b1a srri @$AR0, $AX0.H + 0808 00de fffe lr $AC0.M, @CMBH + 080a 02c0 8000 andcf $AC0.M, #0x8000 + 080c 029c 0808 jlnz 0x0808 + 080e 00dc ffff lr $AC0.L, @CMBL + 0810 1b1e srri @$AR0, $AC0.M + 0811 1b1c srri @$AR0, $AC0.L + 0812 1fda mrr $AC0.M, $AX0.H + 0813 7800 decm $AC0.M + 0814 1f5e mrr $AX0.H, $AC0.M + 0815 8600 tstaxh $AX0.H + 0816 0294 0808 jnz 0x0808 + 0818 8100 clr $ACC0 + 0819 00de 0352 lr $AC0.M, @0x0352 + 081b 7400 incm $AC0.M + 081c 00fe 0352 sr @0x0352, $AC0.M + 081e 00e0 0350 sr @0x0350, $AR0 + 0820 00c0 03fb lr $AR0, @0x03fb + 0822 00c8 03fc lr $WR0, @0x03fc + 0824 029f 0753 jmp 0x0753 + 0826 00e0 03fb sr @0x03fb, $AR0 + 0828 00e8 03fc sr @0x03fc, $WR0 + 082a 00c0 0350 lr $AR0, @0x0350 + 082c 0088 002f lri $WR0, #0x002f + 082e 0a00 lris $AX0.H, #0x00 + 082f 1b1a srri @$AR0, $AX0.H + 0830 029f 0818 jmp 0x0818 + 0832 00c0 0351 lr $AR0, @0x0351 + 0834 0088 002f lri $WR0, #0x002f + 0836 00da 0352 lr $AX0.H, @0x0352 + 0838 8600 tstaxh $AX0.H + 0839 0295 085a jz 0x085a + 083b 1205 sbclr #0x05 + 083c 00da 0352 lr $AX0.H, @0x0352 + 083e 1fda mrr $AC0.M, $AX0.H + 083f 7800 decm $AC0.M + 0840 00fe 0352 sr @0x0352, $AC0.M + 0842 1305 sbset #0x05 + 0843 0081 0356 lri $AR1, #0x0356 + 0845 191e lrri $AC0.M, @$AR0 + 0846 02c0 8000 andcf $AC0.M, #0x8000 + 0848 029d 085e jlz 0x085e + 084a 1f5e mrr $AX0.H, $AC0.M + 084b 8600 tstaxh $AX0.H + 084c 0295 0862 jz 0x0862 + 084e 007a 0853 bloop $AX0.H, 0x0853 + 0850 191e lrri $AC0.M, @$AR0 + 0851 1b3e srri @$AR1, $AC0.M + 0852 191e lrri $AC0.M, @$AR0 + 0853 1b3e srri @$AR1, $AC0.M + 0854 00e0 0351 sr @0x0351, $AR0 + 0856 0088 ffff lri $WR0, #0xffff + 0858 029f 0036 jmp 0x0036 + 085a 0088 ffff lri $WR0, #0xffff + 085c 029f 002b jmp 0x002b + 085e 00e0 0351 sr @0x0351, $AR0 + 0860 029f 0836 jmp 0x0836 + 0862 0080 0832 lri $AR0, #0x0832 + 0864 029f 075d jmp 0x075d + 0866 8100 clr $ACC0 + 0867 0e10 lris $AC0.M, #0x10 + 0868 2232 lrs $AX0.H, @0x0032 + 0869 8600 tstaxh $AX0.H + 086a 02d5 retz + 086b 5400 subr $ACC0, $AX0.H + 086c 0200 0458 addi $AC0.M, #0x0458 + 086e 1c1e mrr $AR0, $AC0.M + 086f 1fda mrr $AC0.M, $AX0.H + 0870 04fe addis $ACC0, #0xfe + 0871 1f1e mrr $AX0.L, $AC0.M + 0872 191e lrri $AC0.M, @$AR0 + 0873 0291 0879 jl 0x0879 + 0875 191a lrri $AX0.H, @$AR0 + 0876 0058 loop $AX0.L + 0877 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0878 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 0879 1b7e srri @$AR3, $AC0.M + 087a 02df ret + 087b 02bf 0866 call 0x0866 + 087d 8100 clr $ACC0 + 087e 2632 lrs $AC0.M, @0x0032 + 087f 5c00 sub $ACC0, $ACC1 + 0880 2e32 srs @0x0032, $AC0.M + 0881 0092 00ff lri $CR, #0x00ff + 0883 02df ret + 0884 00de 04fb lr $AC0.M, @0x04fb + 0886 7400 incm $AC0.M + 0887 00fe 04fb sr @0x04fb, $AC0.M + 0889 8100 clr $ACC0 + 088a 2e32 srs @0x0032, $AC0.M + 088b 2e66 srs @0x0066, $AC0.M + 088c 2e67 srs @0x0067, $AC0.M + 088d 268a lrs $AC0.M, @0xff8a + 088e 248b lrs $AC0.L, @0xff8b + 088f 2e3a srs @0x003a, $AC0.M + 0890 2c3b srs @0x003b, $AC0.L + 0891 268c lrs $AC0.M, @0xff8c + 0892 248d lrs $AC0.L, @0xff8d + 0893 2e38 srs @0x0038, $AC0.M + 0894 2c39 srs @0x0039, $AC0.L + 0895 02df ret + 0896 8100 clr $ACC0 + 0897 2689 lrs $AC0.M, @0xff89 + 0898 0240 000f andi $AC0.M, #0x000f + 089a 1f5e mrr $AX0.H, $AC0.M + 089b 8100 clr $ACC0 + 089c 0e10 lris $AC0.M, #0x10 + 089d 5400 subr $ACC0, $AX0.H + 089e 2e32 srs @0x0032, $AC0.M + 089f 268a lrs $AC0.M, @0xff8a + 08a0 248b lrs $AC0.L, @0xff8b + 08a1 2288 lrs $AX0.H, @0xff88 + 08a2 2089 lrs $AX0.L, @0xff89 + 08a3 5800 subax $ACC0, $AX0.L + 08a4 0a00 lris $AX0.H, #0x00 + 08a5 2032 lrs $AX0.L, @0x0032 + 08a6 5800 subax $ACC0, $AX0.L + 08a7 2e3a srs @0x003a, $AC0.M + 08a8 2c3b srs @0x003b, $AC0.L + 08a9 02df ret + 08aa 0092 0004 lri $CR, #0x0004 + 08ac 8100 clr $ACC0 + 08ad 2604 lrs $AC0.M, @0x0004 + 08ae b100 tst $ACC0 + 08af 02b4 0884 callnz 0x0884 + 08b1 8100 clr $ACC0 + 08b2 2601 lrs $AC0.M, @0x0001 + 08b3 b100 tst $ACC0 + 08b4 0294 0952 jnz 0x0952 + 08b6 2232 lrs $AX0.H, @0x0032 + 08b7 c900 cmpar $ACC0, $AX1.H + 08b8 0293 087b jle 0x087b + 08ba 5500 subr $ACC1, $AX0.H + 08bb 02bf 0866 call 0x0866 + 08bd 223a lrs $AX0.H, @0x003a + 08be 8600 tstaxh $AX0.H + 08bf 0294 08c6 jnz 0x08c6 + 08c1 8100 clr $ACC0 + 08c2 263b lrs $AC0.M, @0x003b + 08c3 8200 cmp + 08c4 0291 0918 jl 0x0918 + 08c6 8100 clr $ACC0 + 08c7 1fdf mrr $AC0.M, $AC1.M + 08c8 040f addis $ACC0, #0x0f + 08c9 147c lsr $ACC0, #-4 + 08ca 1f7e mrr $AX1.H, $AC0.M + 08cb 0c00 lris $AC0.L, #0x00 + 08cc 1404 lsl $ACC0, #4 + 08cd 1f1e mrr $AX0.L, $AC0.M + 08ce 0a00 lris $AX0.H, #0x00 + 08cf 8100 clr $ACC0 + 08d0 263a lrs $AC0.M, @0x003a + 08d1 243b lrs $AC0.L, @0x003b + 08d2 5800 subax $ACC0, $AX0.L + 08d3 0290 08de jge 0x08de + 08d5 8100 clr $ACC0 + 08d6 263b lrs $AC0.M, @0x003b + 08d7 5c00 sub $ACC0, $ACC1 + 08d8 2e32 srs @0x0032, $AC0.M + 08d9 8100 clr $ACC0 + 08da 2e3a srs @0x003a, $AC0.M + 08db 2e3b srs @0x003b, $AC0.M + 08dc 029f 08e4 jmp 0x08e4 + 08de 2e3a srs @0x003a, $AC0.M + 08df 2c3b srs @0x003b, $AC0.L + 08e0 0c00 lris $AC0.L, #0x00 + 08e1 1fd8 mrr $AC0.M, $AX0.L + 08e2 5c00 sub $ACC0, $ACC1 + 08e3 2e32 srs @0x0032, $AC0.M + 08e4 8100 clr $ACC0 + 08e5 1fdb mrr $AC0.M, $AX1.H + 08e6 02bf 0958 call 0x0958 + 08e8 2232 lrs $AX0.H, @0x0032 + 08e9 8600 tstaxh $AX0.H + 08ea 0295 0915 jz 0x0915 + 08ec 0a10 lris $AX0.H, #0x10 + 08ed 8100 clr $ACC0 + 08ee 1fc3 mrr $AC0.M, $AR3 + 08ef 5400 subr $ACC0, $AX0.H + 08f0 1c7e mrr $AR3, $AC0.M + 08f1 0080 0458 lri $AR0, #0x0458 + 08f3 197e lrri $AC0.M, @$AR3 + 08f4 197a lrri $AX0.H, @$AR3 + 08f5 100e loopi #0x0e + 08f6 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H + 08f7 1b1e srri @$AR0, $AC0.M + 08f8 1b1a srri @$AR0, $AX0.H + 08f9 8100 clr $ACC0 + 08fa 263a lrs $AC0.M, @0x003a + 08fb 243b lrs $AC0.L, @0x003b + 08fc b100 tst $ACC0 + 08fd 0294 0915 jnz 0x0915 + 08ff 2232 lrs $AX0.H, @0x0032 + 0900 8600 tstaxh $AX0.H + 0901 0295 0915 jz 0x0915 + 0903 0080 0467 lri $AR0, #0x0467 + 0905 8100 clr $ACC0 + 0906 268b lrs $AC0.M, @0xff8b + 0907 b100 tst $ACC0 + 0908 0295 0915 jz 0x0915 + 090a 0200 000f addi $AC0.M, #0x000f + 090c 0240 000f andi $AC0.M, #0x000f + 090e 0200 0458 addi $AC0.M, #0x0458 + 0910 1c7e mrr $AR3, $AC0.M + 0911 007a 0914 bloop $AX0.H, 0x0914 + 0913 18fe lrrd $AC0.M, @$AR3 + 0914 1a9e srrd @$AR0, $AC0.M + 0915 0092 00ff lri $CR, #0x00ff + 0917 02df ret + 0918 b100 tst $ACC0 + 0919 0295 0928 jz 0x0928 + 091b 5d00 sub $ACC1, $ACC0 + 091c 040f addis $ACC0, #0x0f + 091d 147c lsr $ACC0, #-4 + 091e 0c00 lris $AC0.L, #0x00 + 091f 00e3 0363 sr @0x0363, $AR3 + 0921 02bf 0958 call 0x0958 + 0923 00de 0363 lr $AC0.M, @0x0363 + 0925 223b lrs $AX0.H, @0x003b + 0926 4400 addr $ACC0, $AX0.H + 0927 1c7e mrr $AR3, $AC0.M + 0928 8100 clr $ACC0 + 0929 2681 lrs $AC0.M, @0xff81 + 092a b100 tst $ACC0 + 092b 0295 0950 jz 0x0950 + 092d 2380 lrs $AX1.H, @0xff80 + 092e 2688 lrs $AC0.M, @0xff88 + 092f 2489 lrs $AC0.L, @0xff89 + 0930 1408 lsl $ACC0, #8 + 0931 14f4 asr $ACC0, #-12 + 0932 2380 lrs $AX1.H, @0xff80 + 0933 8d00 set15 + 0934 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L + 0935 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0936 8c00 clr15 + 0937 f000 lsl16 $ACC0 + 0938 4e00 addp $ACC0 + 0939 238c lrs $AX1.H, @0xff8c + 093a 218d lrs $AX1.L, @0xff8d + 093b 4a00 addax $ACC0, $AX1.L + 093c 2e38 srs @0x0038, $AC0.M + 093d 2c39 srs @0x0039, $AC0.L + 093e 2682 lrs $AC0.M, @0xff82 + 093f 2e67 srs @0x0067, $AC0.M + 0940 2683 lrs $AC0.M, @0xff83 + 0941 2e66 srs @0x0066, $AC0.M + 0942 00e3 0363 sr @0x0363, $AR3 + 0944 0083 0458 lri $AR3, #0x0458 + 0946 8100 clr $ACC0 + 0947 0e01 lris $AC0.M, #0x01 + 0948 02bf 0958 call 0x0958 + 094a 00c3 0363 lr $AR3, @0x0363 + 094c 02bf 0896 call 0x0896 + 094e 029f 08b6 jmp 0x08b6 + 0950 0e01 lris $AC0.M, #0x01 + 0951 2e01 srs @0x0001, $AC0.M + 0952 8100 clr $ACC0 + 0953 005f loop $AC1.M + 0954 1b7e srri @$AR3, $AC0.M + 0955 0092 00ff lri $CR, #0x00ff + 0957 02df ret + 0958 00ff 0360 sr @0x0360, $AC1.M + 095a 00fe 0361 sr @0x0361, $AC0.M + 095c 2638 lrs $AC0.M, @0x0038 + 095d 2439 lrs $AC0.L, @0x0039 + 095e 0f05 lris $AC1.M, #0x05 + 095f 02bf 069b call 0x069b + 0961 2638 lrs $AC0.M, @0x0038 + 0962 2439 lrs $AC0.L, @0x0039 + 0963 8900 clr $ACC1 + 0964 00df 0361 lr $AC1.M, @0x0361 + 0966 2280 lrs $AX0.H, @0xff80 + 0967 d000 mulc $AC1.M, $AX0.H + 0968 6f00 movp $ACC1 + 0969 4c00 add $ACC0, $ACC1 + 096a 2e38 srs @0x0038, $AC0.M + 096b 2c39 srs @0x0039, $AC0.L + 096c 8100 clr $ACC0 + 096d 00de 0361 lr $AC0.M, @0x0361 + 096f 007e 09d6 bloop $AC0.M, 0x09d6 + 0971 0080 ffd3 lri $AR0, #0xffd3 + 0973 0084 0000 lri $IX0, #0x0000 + 0975 199e lrrn $AC0.M, @$AR0 + 0976 8900 clr $ACC1 + 0977 1ffe mrr $AC1.M, $AC0.M + 0978 1401 lsl $ACC0, #1 + 0979 0240 001e andi $AC0.M, #0x001e + 097b 0200 0300 addi $AC0.M, #0x0300 + 097d 1c3e mrr $AR1, $AC0.M + 097e 157c lsr $ACC1, #-4 + 097f 0340 000f andi $AC1.M, #0x000f + 0981 0a11 lris $AX0.H, #0x11 + 0982 5500 subr $ACC1, $AX0.H + 0983 8100 clr $ACC0 + 0984 2680 lrs $AC0.M, @0xff80 + 0985 0605 cmpis $ACC0, #0x05 + 0986 0295 099f jz 0x099f + 0988 009a 00f0 lri $AX0.H, #0x00f0 + 098a 0b0f lris $AX1.H, #0x0f + 098b 0082 0364 lri $AR2, #0x0364 + 098d 1998 lrrn $AX0.L, @$AR0 + 098e 6000 movr $ACC0, $AX0.L + 098f 1107 0996 bloopi #0x07, 0x0996 + 0991 3400 andr $AC0.M, $AX0.H + 0992 1408 lsl $ACC0, #8 + 0993 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0994 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 + 0995 140c lsl $ACC0, #12 + 0996 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 0997 3400 andr $AC0.M, $AX0.H + 0998 1408 lsl $ACC0, #8 + 0999 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 099a 3600 andr $AC0.M, $AX1.H + 099b 140c lsl $ACC0, #12 + 099c 1b5e srri @$AR2, $AC0.M + 099d 029f 09bf jmp 0x09bf + 099f 009a c000 lri $AX0.H, #0xc000 + 09a1 0082 0364 lri $AR2, #0x0364 + 09a3 1998 lrrn $AX0.L, @$AR0 + 09a4 6000 movr $ACC0, $AX0.L + 09a5 1103 09b2 bloopi #0x03, 0x09b2 + 09a7 1408 lsl $ACC0, #8 + 09a8 3400 andr $AC0.M, $AX0.H + 09a9 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09aa 140a lsl $ACC0, #10 + 09ab 3400 andr $AC0.M, $AX0.H + 09ac 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09ad 140c lsl $ACC0, #12 + 09ae 3400 andr $AC0.M, $AX0.H + 09af 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b0 140e lsl $ACC0, #14 + 09b1 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0 + 09b2 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b3 1408 lsl $ACC0, #8 + 09b4 3400 andr $AC0.M, $AX0.H + 09b5 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b6 140a lsl $ACC0, #10 + 09b7 3400 andr $AC0.M, $AX0.H + 09b8 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09b9 140c lsl $ACC0, #12 + 09ba 3400 andr $AC0.M, $AX0.H + 09bb 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M + 09bc 140e lsl $ACC0, #14 + 09bd 3400 andr $AC0.M, $AX0.H + 09be 1b5e srri @$AR2, $AC0.M + 09bf 8f00 set40 + 09c0 1f7f mrr $AX1.H, $AC1.M + 09c1 2066 lrs $AX0.L, @0x0066 + 09c2 2767 lrs $AC1.M, @0x0067 + 09c3 193a lrri $AX0.H, @$AR1 + 09c4 1939 lrri $AX1.L, @$AR1 + 09c5 0080 0364 lri $AR0, #0x0364 + 09c7 a000 mulx $AX0.L, $AX1.L + 09c8 ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 + 09c9 1108 09d2 bloopi #0x08, 0x09d2 + 09cb 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L + 09cc a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 + 09cd 1485 asl $ACC0, #5 + 09ce e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M + 09cf 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L + 09d0 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 + 09d1 1585 asl $ACC1, #5 + 09d2 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M + 09d3 2f67 srs @0x0067, $AC1.M + 09d4 8e00 set16 + 09d5 1ff8 mrr $AC1.M, $AX0.L + 09d6 2f66 srs @0x0066, $AC1.M + 09d7 8900 clr $ACC1 + 09d8 00df 0360 lr $AC1.M, @0x0360 + 09da 02df ret + 09db b100 tst $ACC0 + 09dc 02d5 retz + 09dd 04fe addis $ACC0, #0xfe + 09de 1f1e mrr $AX0.L, $AC0.M + 09df 191e lrri $AC0.M, @$AR0 + 09e0 0291 09e6 jl 0x09e6 + 09e2 191a lrri $AX0.H, @$AR0 + 09e3 0058 loop $AX0.L + 09e4 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 09e5 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M + 09e6 1b7e srri @$AR3, $AC0.M + 09e7 02df ret + 09e8 8100 clr $ACC0 + 09e9 1f5e mrr $AX0.H, $AC0.M + 09ea 00d8 0402 lr $AX0.L, @0x0402 + 09ec 00dc 0430 lr $AC0.L, @0x0430 + 09ee 0080 0520 lri $AR0, #0x0520 + 09f0 00df 0480 lr $AC1.M, @0x0480 + 09f2 1501 lsl $ACC1, #1 + 09f3 0340 007e andi $AC1.M, #0x007e + 09f5 0300 09fd addi $AC1.M, #0x09fd + 09f7 1c5f mrr $AR2, $AC1.M + 09f8 175f callr $AR2 + 09f9 00fc 0430 sr @0x0430, $AC0.L + 09fb 029f 0386 jmp 0x0386 + 09fd 029f 0a1e jmp 0x0a1e + 09ff 029f 0a59 jmp 0x0a59 + 0a01 029f 0a41 jmp 0x0a41 + 0a03 029f 0a2e jmp 0x0a2e + 0a05 029f 0a67 jmp 0x0a67 + 0a07 029f 0a1d jmp 0x0a1d + 0a09 029f 0a85 jmp 0x0a85 + 0a0b 029f 0a88 jmp 0x0a88 + 0a0d 029f 0a1d jmp 0x0a1d + 0a0f 029f 0a1d jmp 0x0a1d + 0a11 029f 0aa6 jmp 0x0aa6 + 0a13 029f 0a5f jmp 0x0a5f + 0a15 029f 0a63 jmp 0x0a63 + 0a17 029f 0a1d jmp 0x0a1d + 0a19 029f 0a1d jmp 0x0a1d + 0a1b 029f 0a1d jmp 0x0a1d + 0a1d 02df ret + 0a1e 1401 lsl $ACC0, #1 + 0a1f 009b c000 lri $AX1.H, #0xc000 + 0a21 0099 4000 lri $AX1.L, #0x4000 + 0a23 1150 0a2b bloopi #0x50, 0x0a2b + 0a25 02c0 0001 andcf $AC0.M, #0x0001 + 0a27 027c iflnz + 0a28 1b1b srri @$AR0, $AX1.H + 0a29 027d iflz + 0a2a 1b19 srri @$AR0, $AX1.L + 0a2b 4800 addax $ACC0, $AX0.L + 0a2c 147f lsr $ACC0, #-1 + 0a2d 02df ret + 0a2e 1402 lsl $ACC0, #2 + 0a2f 8900 clr $ACC1 + 0a30 1fb8 mrr $AC1.L, $AX0.L + 0a31 1501 lsl $ACC1, #1 + 0a32 009b c000 lri $AX1.H, #0xc000 + 0a34 0099 4000 lri $AX1.L, #0x4000 + 0a36 1150 0a3e bloopi #0x50, 0x0a3e + 0a38 02c0 0003 andcf $AC0.M, #0x0003 + 0a3a 027c iflnz + 0a3b 1b1b srri @$AR0, $AX1.H + 0a3c 027d iflz + 0a3d 1b19 srri @$AR0, $AX1.L + 0a3e 4c00 add $ACC0, $ACC1 + 0a3f 147e lsr $ACC0, #-2 + 0a40 02df ret + 0a41 1401 lsl $ACC0, #1 + 0a42 0081 0ca0 lri $AR1, #0x0ca0 + 0a44 009b c000 lri $AX1.H, #0xc000 + 0a46 0099 4000 lri $AX1.L, #0x4000 + 0a48 8900 clr $ACC1 + 0a49 0082 0000 lri $AR2, #0x0000 + 0a4b 1150 0a56 bloopi #0x50, 0x0a56 + 0a4d 02c0 0001 andcf $AC0.M, #0x0001 + 0a4f 027c iflnz + 0a50 1b1b srri @$AR0, $AX1.H + 0a51 027d iflz + 0a52 1b19 srri @$AR0, $AX1.L + 0a53 183d lrr $AC1.L, @$AR1 + 0a54 4900 addax $ACC1, $AX0.L + 0a55 1fe2 mrr $AC1.M, $AR2 + 0a56 4c39 add's $ACC0, $ACC1 : @$AR1, $AC1.M + 0a57 147f lsr $ACC0, #-1 + 0a58 02df ret + 0a59 8900 clr $ACC1 + 0a5a 1fb8 mrr $AC1.L, $AX0.L + 0a5b 157f lsr $ACC1, #-1 + 0a5c 1050 loopi #0x50 + 0a5d 4c20 add's $ACC0, $ACC1 : @$AR0, $AC0.L + 0a5e 02df ret + 0a5f 0082 0180 lri $AR2, #0x0180 + 0a61 029f 0a69 jmp 0x0a69 + 0a63 0082 01c0 lri $AR2, #0x01c0 + 0a65 029f 0a69 jmp 0x0a69 + 0a67 0082 0140 lri $AR2, #0x0140 + 0a69 008a 003f lri $WR2, #0x003f + 0a6b 0086 0000 lri $IX2, #0x0000 + 0a6d 1406 lsl $ACC0, #6 + 0a6e 8900 clr $ACC1 + 0a6f 1fb8 mrr $AC1.L, $AX0.L + 0a70 1505 lsl $ACC1, #5 + 0a71 009b 003f lri $AX1.H, #0x003f + 0a73 009a 0000 lri $AX0.H, #0x0000 + 0a75 3600 andr $AC0.M, $AX1.H + 0a76 1cde mrr $IX2, $AC0.M + 0a77 001a addarn $AR2, $IX2 + 0a78 3400 andr $AC0.M, $AX0.H + 0a79 1150 0a7f bloopi #0x50, 0x0a7f + 0a7b 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a7c 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a7d 1cde mrr $IX2, $AC0.M + 0a7e 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0a7f 1b19 srri @$AR0, $AX1.L + 0a80 1fc2 mrr $AC0.M, $AR2 + 0a81 147a lsr $ACC0, #-6 + 0a82 008a ffff lri $WR2, #0xffff + 0a84 02df ret + 0a85 1050 loopi #0x50 + 0a86 1b18 srri @$AR0, $AX0.L + 0a87 02df ret + 0a88 0082 0100 lri $AR2, #0x0100 + 0a8a 008a 003f lri $WR2, #0x003f + 0a8c 0086 0000 lri $IX2, #0x0000 + 0a8e 1406 lsl $ACC0, #6 + 0a8f 8900 clr $ACC1 + 0a90 1fb8 mrr $AC1.L, $AX0.L + 0a91 1505 lsl $ACC1, #5 + 0a92 009b 003f lri $AX1.H, #0x003f + 0a94 009a 0000 lri $AX0.H, #0x0000 + 0a96 3600 andr $AC0.M, $AX1.H + 0a97 1cde mrr $IX2, $AC0.M + 0a98 001a addarn $AR2, $IX2 + 0a99 3400 andr $AC0.M, $AX0.H + 0a9a 1150 0aa0 bloopi #0x50, 0x0aa0 + 0a9c 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0a9d 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0a9e 1cde mrr $IX2, $AC0.M + 0a9f 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0aa0 1b19 srri @$AR0, $AX1.L + 0aa1 1fc2 mrr $AC0.M, $AR2 + 0aa2 147a lsr $ACC0, #-6 + 0aa3 008a ffff lri $WR2, #0xffff + 0aa5 02df ret + 0aa6 0082 0100 lri $AR2, #0x0100 + 0aa8 008a 003f lri $WR2, #0x003f + 0aaa 0086 0000 lri $IX2, #0x0000 + 0aac 0081 0ca0 lri $AR1, #0x0ca0 + 0aae 1406 lsl $ACC0, #6 + 0aaf 8900 clr $ACC1 + 0ab0 1fb8 mrr $AC1.L, $AX0.L + 0ab1 1505 lsl $ACC1, #5 + 0ab2 009b 003f lri $AX1.H, #0x003f + 0ab4 009a 0000 lri $AX0.H, #0x0000 + 0ab6 3600 andr $AC0.M, $AX1.H + 0ab7 1cde mrr $IX2, $AC0.M + 0ab8 001a addarn $AR2, $IX2 + 0ab9 3400 andr $AC0.M, $AX0.H + 0aba 1150 0ac5 bloopi #0x50, 0x0ac5 + 0abc 1939 lrri $AX1.L, @$AR1 + 0abd a000 mulx $AX0.L, $AX1.L + 0abe 140a lsl $ACC0, #10 + 0abf 4e00 addp $ACC0 + 0ac0 1476 lsr $ACC0, #-10 + 0ac1 4c4a add'l $ACC0, $ACC1 : $AX1.L, @$AR2 + 0ac2 3606 andr'dr $AC0.M, $AX1.H : $AR2 + 0ac3 1cde mrr $IX2, $AC0.M + 0ac4 340e andr'nr $AC0.M, $AX0.H : $AR2 + 0ac5 1b19 srri @$AR0, $AX1.L + 0ac6 1fc2 mrr $AC0.M, $AR2 + 0ac7 147a lsr $ACC0, #-6 + 0ac8 008a ffff lri $WR2, #0xffff + 0aca 02df ret + 0acb 0080 01be lri $AR0, #0x01be + 0acd 1918 lrri $AX0.L, @$AR0 + 0ace 191a lrri $AX0.H, @$AR0 + 0acf 0080 0180 lri $AR0, #0x0180 + 0ad1 0083 0180 lri $AR3, #0x0180 + 0ad3 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0ad4 1ffe mrr $AC1.M, $AC0.M + 0ad5 1120 0adc bloopi #0x20, 0x0adc + 0ad7 7c00 neg $ACC0 + 0ad8 d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0 + 0ad9 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0ada c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0 + 0adb 1501 lsl $ACC1, #1 + 0adc 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M + 0add 0080 01fe lri $AR0, #0x01fe + 0adf 191a lrri $AX0.H, @$AR0 + 0ae0 1918 lrri $AX0.L, @$AR0 + 0ae1 0080 01c0 lri $AR0, #0x01c0 + 0ae3 0083 01c0 lri $AR3, #0x01c0 + 0ae5 1ff8 mrr $AC1.M, $AX0.L + 0ae6 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0 + 0ae7 f800 addpaxz $ACC0, $AX0.H + 0ae8 0240 01ff andi $AC0.M, #0x01ff + 0aea 0260 2000 ori $AC0.M, #0x2000 + 0aec 02bf 0aef call 0x0aef + 0aee 02df ret + 0aef b900 tst $ACC1 + 0af0 0272 ifg + 0af1 7c00 neg $ACC0 + 0af2 1f7e mrr $AX1.H, $AC0.M + 0af3 4700 addr $ACC1, $AX1.H + 0af4 1110 0af9 bloopi #0x10, 0x0af9 + 0af6 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0af7 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0af8 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0af9 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M + 0afa 02df ret + 0afb 02bf 0b68 call 0x0b68 + 0afd 2201 lrs $AX0.H, @0x0001 + 0afe 8600 tstaxh $AX0.H + 0aff 0294 0b10 jnz 0x0b10 + 0b01 2204 lrs $AX0.H, @0x0004 + 0b02 8600 tstaxh $AX0.H + 0b03 02b4 0b57 callnz 0x0b57 + 0b05 8100 clr $ACC0 + 0b06 2605 lrs $AC0.M, @0x0005 + 0b07 b100 tst $ACC0 + 0b08 0295 0b1d jz 0x0b1d + 0b0a 8100 clr $ACC0 + 0b0b 2e05 srs @0x0005, $AC0.M + 0b0c 2281 lrs $AX0.H, @0xff81 + 0b0d 8600 tstaxh $AX0.H + 0b0e 0294 0b17 jnz 0x0b17 + 0b10 8100 clr $ACC0 + 0b11 005f loop $AC1.M + 0b12 1b7e srri @$AR3, $AC0.M + 0b13 7400 incm $AC0.M + 0b14 2e01 srs @0x0001, $AC0.M + 0b15 029f 0b50 jmp 0x0b50 + 0b17 2688 lrs $AC0.M, @0xff88 + 0b18 2489 lrs $AC0.L, @0xff89 + 0b19 2e34 srs @0x0034, $AC0.M + 0b1a 2c35 srs @0x0035, $AC0.L + 0b1b 02bf 0b57 call 0x0b57 + 0b1d 00ff 0360 sr @0x0360, $AC1.M + 0b1f 2638 lrs $AC0.M, @0x0038 + 0b20 2439 lrs $AC0.L, @0x0039 + 0b21 02bf 06c9 call 0x06c9 + 0b23 00df 0360 lr $AC1.M, @0x0360 + 0b25 8100 clr $ACC0 + 0b26 263a lrs $AC0.M, @0x003a + 0b27 b100 tst $ACC0 + 0b28 0294 0b37 jnz 0x0b37 + 0b2a 263b lrs $AC0.M, @0x003b + 0b2b 5c00 sub $ACC0, $ACC1 + 0b2c 0290 0b37 jge 0x0b37 + 0b2e 223b lrs $AX0.H, @0x003b + 0b2f 02bf 06e6 call 0x06e6 + 0b31 5500 subr $ACC1, $AX0.H + 0b32 0a01 lris $AX0.H, #0x01 + 0b33 00fa 0405 sr @0x0405, $AX0.H + 0b35 029f 0b0a jmp 0x0b0a + 0b37 1f5f mrr $AX0.H, $AC1.M + 0b38 02bf 06e6 call 0x06e6 + 0b3a 00fa 0362 sr @0x0362, $AX0.H + 0b3c 8100 clr $ACC0 + 0b3d 263a lrs $AC0.M, @0x003a + 0b3e 243b lrs $AC0.L, @0x003b + 0b3f 1570 lsr $ACC1, #-16 + 0b40 0a01 lris $AX0.H, #0x01 + 0b41 0081 0405 lri $AR1, #0x0405 + 0b43 5c00 sub $ACC0, $ACC1 + 0b44 b100 tst $ACC0 + 0b45 0275 ifz + 0b46 1a3a srr @$AR1, $AX0.H + 0b47 2e3a srs @0x003a, $AC0.M + 0b48 2c3b srs @0x003b, $AC0.L + 0b49 2638 lrs $AC0.M, @0x0038 + 0b4a 2439 lrs $AC0.L, @0x0039 + 0b4b 00d8 0362 lr $AX0.L, @0x0362 + 0b4d 7000 addaxl $ACC0, $AX0.L + 0b4e 2c39 srs @0x0039, $AC0.L + 0b4f 2e38 srs @0x0038, $AC0.M + 0b50 0092 00ff lri $CR, #0x00ff + 0b52 029f 037e jmp 0x037e + 0b54 8100 clr $ACC0 + 0b55 2e34 srs @0x0034, $AC0.M + 0b56 2e35 srs @0x0035, $AC0.M + 0b57 2334 lrs $AX1.H, @0x0034 + 0b58 2135 lrs $AX1.L, @0x0035 + 0b59 268a lrs $AC0.M, @0xff8a + 0b5a 248b lrs $AC0.L, @0xff8b + 0b5b 5a00 subax $ACC0, $AX1.L + 0b5c 2e3a srs @0x003a, $AC0.M + 0b5d 2c3b srs @0x003b, $AC0.L + 0b5e 2634 lrs $AC0.M, @0x0034 + 0b5f 2435 lrs $AC0.L, @0x0035 + 0b60 238c lrs $AX1.H, @0xff8c + 0b61 218d lrs $AX1.L, @0xff8d + 0b62 4a00 addax $ACC0, $AX1.L + 0b63 2e38 srs @0x0038, $AC0.M + 0b64 2c39 srs @0x0039, $AC0.L + 0b65 8100 clr $ACC0 + 0b66 2e05 srs @0x0005, $AC0.M + 0b67 02df ret + 0b68 0092 0004 lri $CR, #0x0004 + 0b6a 2002 lrs $AX0.L, @0x0002 + 0b6b 8100 clr $ACC0 + 0b6c 8900 clr $ACC1 + 0b6d 2430 lrs $AC0.L, @0x0030 + 0b6e 8d00 set15 + 0b6f 0950 lris $AX1.L, #0x50 + 0b70 a000 mulx $AX0.L, $AX1.L + 0b71 a400 mulxac $AX0.L, $AX1.L, $ACC0 + 0b72 1404 lsl $ACC0, #4 + 0b73 8c00 clr15 + 0b74 1ffe mrr $AC1.M, $AC0.M + 0b75 0083 0580 lri $AR3, #0x0580 + 0b77 02df ret + 0b78 02bf 0b68 call 0x0b68 + 0b7a 2201 lrs $AX0.H, @0x0001 + 0b7b 8600 tstaxh $AX0.H + 0b7c 0294 0b8d jnz 0x0b8d + 0b7e 2204 lrs $AX0.H, @0x0004 + 0b7f 8600 tstaxh $AX0.H + 0b80 02b4 0bd7 callnz 0x0bd7 + 0b82 8100 clr $ACC0 + 0b83 2605 lrs $AC0.M, @0x0005 + 0b84 b100 tst $ACC0 + 0b85 0295 0b9a jz 0x0b9a + 0b87 8100 clr $ACC0 + 0b88 2e05 srs @0x0005, $AC0.M + 0b89 2281 lrs $AX0.H, @0xff81 + 0b8a 8600 tstaxh $AX0.H + 0b8b 0294 0b94 jnz 0x0b94 + 0b8d 8100 clr $ACC0 + 0b8e 005f loop $AC1.M + 0b8f 1b7e srri @$AR3, $AC0.M + 0b90 7400 incm $AC0.M + 0b91 2e01 srs @0x0001, $AC0.M + 0b92 029f 0bd0 jmp 0x0bd0 + 0b94 2688 lrs $AC0.M, @0xff88 + 0b95 2489 lrs $AC0.L, @0xff89 + 0b96 2e34 srs @0x0034, $AC0.M + 0b97 2c35 srs @0x0035, $AC0.L + 0b98 02bf 0bd7 call 0x0bd7 + 0b9a 00ff 0360 sr @0x0360, $AC1.M + 0b9c 2638 lrs $AC0.M, @0x0038 + 0b9d 2439 lrs $AC0.L, @0x0039 + 0b9e 02bf 06c9 call 0x06c9 + 0ba0 02bf 06e0 call 0x06e0 + 0ba2 00df 0360 lr $AC1.M, @0x0360 + 0ba4 8100 clr $ACC0 + 0ba5 263a lrs $AC0.M, @0x003a + 0ba6 b100 tst $ACC0 + 0ba7 0294 0bb6 jnz 0x0bb6 + 0ba9 263b lrs $AC0.M, @0x003b + 0baa 5c00 sub $ACC0, $ACC1 + 0bab 0290 0bb6 jge 0x0bb6 + 0bad 223b lrs $AX0.H, @0x003b + 0bae 02bf 06ab call 0x06ab + 0bb0 5500 subr $ACC1, $AX0.H + 0bb1 0a01 lris $AX0.H, #0x01 + 0bb2 00fa 0405 sr @0x0405, $AX0.H + 0bb4 029f 0b87 jmp 0x0b87 + 0bb6 1f5f mrr $AX0.H, $AC1.M + 0bb7 02bf 06ab call 0x06ab + 0bb9 00fa 0362 sr @0x0362, $AX0.H + 0bbb 8100 clr $ACC0 + 0bbc 263a lrs $AC0.M, @0x003a + 0bbd 243b lrs $AC0.L, @0x003b + 0bbe 1570 lsr $ACC1, #-16 + 0bbf 0a01 lris $AX0.H, #0x01 + 0bc0 0081 0405 lri $AR1, #0x0405 + 0bc2 5c00 sub $ACC0, $ACC1 + 0bc3 b100 tst $ACC0 + 0bc4 0275 ifz + 0bc5 1a3a srr @$AR1, $AX0.H + 0bc6 2e3a srs @0x003a, $AC0.M + 0bc7 2c3b srs @0x003b, $AC0.L + 0bc8 2638 lrs $AC0.M, @0x0038 + 0bc9 2439 lrs $AC0.L, @0x0039 + 0bca 00d8 0362 lr $AX0.L, @0x0362 + 0bcc 7000 addaxl $ACC0, $AX0.L + 0bcd 7000 addaxl $ACC0, $AX0.L + 0bce 2c39 srs @0x0039, $AC0.L + 0bcf 2e38 srs @0x0038, $AC0.M + 0bd0 0092 00ff lri $CR, #0x00ff + 0bd2 029f 037e jmp 0x037e + 0bd4 8100 clr $ACC0 + 0bd5 2e34 srs @0x0034, $AC0.M + 0bd6 2e35 srs @0x0035, $AC0.M + 0bd7 2334 lrs $AX1.H, @0x0034 + 0bd8 2135 lrs $AX1.L, @0x0035 + 0bd9 268a lrs $AC0.M, @0xff8a + 0bda 248b lrs $AC0.L, @0xff8b + 0bdb 5a00 subax $ACC0, $AX1.L + 0bdc 2e3a srs @0x003a, $AC0.M + 0bdd 2c3b srs @0x003b, $AC0.L + 0bde 2634 lrs $AC0.M, @0x0034 + 0bdf 2435 lrs $AC0.L, @0x0035 + 0be0 1401 lsl $ACC0, #1 + 0be1 238c lrs $AX1.H, @0xff8c + 0be2 218d lrs $AX1.L, @0xff8d + 0be3 4a00 addax $ACC0, $AX1.L + 0be4 2e38 srs @0x0038, $AC0.M + 0be5 2c39 srs @0x0039, $AC0.L + 0be6 8100 clr $ACC0 + 0be7 2e05 srs @0x0005, $AC0.M + 0be8 02df ret + 0be9 8900 clr $ACC1 + 0bea 0f50 lris $AC1.M, #0x50 + 0beb 0083 0520 lri $AR3, #0x0520 + 0bed 02bf 0c02 call 0x0c02 + 0bef 029f 0386 jmp 0x0386 + 0bf1 00d8 0402 lr $AX0.L, @0x0402 + 0bf3 8100 clr $ACC0 + 0bf4 8900 clr $ACC1 + 0bf5 00dc 0430 lr $AC0.L, @0x0430 + 0bf7 0a50 lris $AX0.H, #0x50 + 0bf8 9000 mul $AX0.L, $AX0.H + 0bf9 9400 mulac $AX0.L, $AX0.H, $ACC0 + 0bfa 1404 lsl $ACC0, #4 + 0bfb 1ffe mrr $AC1.M, $AC0.M + 0bfc 0083 0580 lri $AR3, #0x0580 + 0bfe 02bf 0c02 call 0x0c02 + 0c00 029f 037e jmp 0x037e + 0c02 0092 0004 lri $CR, #0x0004 + 0c04 8100 clr $ACC0 + 0c05 263a lrs $AC0.M, @0x003a + 0c06 243b lrs $AC0.L, @0x003b + 0c07 1f1f mrr $AX0.L, $AC1.M + 0c08 0a00 lris $AX0.H, #0x00 + 0c09 5800 subax $ACC0, $AX0.L + 0c0a 0292 0c20 jg 0x0c20 + 0c0c 8900 clr $ACC1 + 0c0d 00c0 043b lr $AR0, @0x043b + 0c0f 02bf 0c45 call 0x0c45 + 0c11 8100 clr $ACC0 + 0c12 1fd8 mrr $AC0.M, $AX0.L + 0c13 223b lrs $AX0.H, @0x003b + 0c14 5400 subr $ACC0, $AX0.H + 0c15 0007 dar $AR3 + 0c16 1979 lrri $AX1.L, @$AR3 + 0c17 005e loop $AC0.M + 0c18 1b79 srri @$AR3, $AX1.L + 0c19 0f01 lris $AC1.M, #0x01 + 0c1a 2f01 srs @0x0001, $AC1.M + 0c1b 8900 clr $ACC1 + 0c1c 2f3b srs @0x003b, $AC1.M + 0c1d 0092 00ff lri $CR, #0x00ff + 0c1f 02df ret + 0c20 2e3a srs @0x003a, $AC0.M + 0c21 2c3b srs @0x003b, $AC0.L + 0c22 8100 clr $ACC0 + 0c23 8900 clr $ACC1 + 0c24 268a lrs $AC0.M, @0xff8a + 0c25 2734 lrs $AC1.M, @0x0034 + 0c26 5c00 sub $ACC0, $ACC1 + 0c27 2e36 srs @0x0036, $AC0.M + 0c28 5000 subr $ACC0, $AX0.L + 0c29 0290 0c3f jge 0x0c3f + 0c2b 00c0 0436 lr $AR0, @0x0436 + 0c2d 02bf 0c45 call 0x0c45 + 0c2f 8100 clr $ACC0 + 0c30 1fd8 mrr $AC0.M, $AX0.L + 0c31 2236 lrs $AX0.H, @0x0036 + 0c32 5400 subr $ACC0, $AX0.H + 0c33 1c1e mrr $AR0, $AC0.M + 0c34 8100 clr $ACC0 + 0c35 2e34 srs @0x0034, $AC0.M + 0c36 2688 lrs $AC0.M, @0xff88 + 0c37 2489 lrs $AC0.L, @0xff89 + 0c38 2e8c srs @0xff8c, $AC0.M + 0c39 2c8d srs @0xff8d, $AC0.L + 0c3a 02bf 0c45 call 0x0c45 + 0c3c 0092 00ff lri $CR, #0x00ff + 0c3e 02df ret + 0c3f 1c18 mrr $AR0, $AX0.L + 0c40 02bf 0c45 call 0x0c45 + 0c42 0092 00ff lri $CR, #0x00ff + 0c44 02df ret + 0c45 8100 clr $ACC0 + 0c46 1fc0 mrr $AC0.M, $AR0 + 0c47 b100 tst $ACC0 + 0c48 02d5 retz + 0c49 8900 clr $ACC1 + 0c4a 2734 lrs $AC1.M, @0x0034 + 0c4b 0340 0001 andi $AC1.M, #0x0001 + 0c4d 0b00 lris $AX1.H, #0x00 + 0c4e 1f3f mrr $AX1.L, $AC1.M + 0c4f 268c lrs $AC0.M, @0xff8c + 0c50 248d lrs $AC0.L, @0xff8d + 0c51 8900 clr $ACC1 + 0c52 2534 lrs $AC1.L, @0x0034 + 0c53 1501 lsl $ACC1, #1 + 0c54 4c00 add $ACC0, $ACC1 + 0c55 5a00 subax $ACC0, $AX1.L + 0c56 5a00 subax $ACC0, $AX1.L + 0c57 1c20 mrr $AR1, $AR0 + 0c58 1fe0 mrr $AC1.M, $AR0 + 0c59 0502 addis $ACC1, #0x02 + 0c5a 1c1f mrr $AR0, $AC1.M + 0c5b 009f 0b00 lri $AC1.M, #0x0b00 + 0c5d 0092 00ff lri $CR, #0x00ff + 0c5f 02bf 0640 call 0x0640 + 0c61 0092 0004 lri $CR, #0x0004 + 0c63 2734 lrs $AC1.M, @0x0034 + 0c64 1f61 mrr $AX1.H, $AR1 + 0c65 4700 addr $ACC1, $AX1.H + 0c66 2f34 srs @0x0034, $AC1.M + 0c67 0080 0b00 lri $AR0, #0x0b00 + 0c69 8900 clr $ACC1 + 0c6a 1ff9 mrr $AC1.M, $AX1.L + 0c6b b900 tst $ACC1 + 0c6c 0274 ifnz + 0c6d 0008 iar $AR0 + 0c6e 8900 clr $ACC1 + 0c6f 1fe1 mrr $AC1.M, $AR1 + 0c70 191e lrri $AC0.M, @$AR0 + 0c71 0701 cmpis $ACC1, #0x01 + 0c72 0293 0c7b jle 0x0c7b + 0c74 191a lrri $AX0.H, @$AR0 + 0c75 05fe addis $ACC1, #0xfe + 0c76 005f loop $AC1.M + 0c77 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c78 1b7e srri @$AR3, $AC0.M + 0c79 1b7a srri @$AR3, $AX0.H + 0c7a 02df ret + 0c7b 1b7e srri @$AR3, $AC0.M + 0c7c 02df ret + 0c7d 0083 03e8 lri $AR3, #0x03e8 + 0c7f 191e lrri $AC0.M, @$AR0 + 0c80 191a lrri $AX0.H, @$AR0 + 0c81 1006 loopi #0x06 + 0c82 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0c83 1b7e srri @$AR3, $AC0.M + 0c84 1b7a srri @$AR3, $AX0.H + 0c85 0080 03e8 lri $AR0, #0x03e8 + 0c87 8a00 m2 + 0c88 0088 0007 lri $WR0, #0x0007 + 0c8a 1150 0c97 bloopi #0x50, 0x0c97 + 0c8c 1c61 mrr $AR3, $AR1 + 0c8d 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0c8e f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c8f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c90 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c91 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c92 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c93 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c94 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0c95 f200 madd $AX0.L, $AX0.H + 0c96 fe00 movpz $ACC0 + 0c97 1b3e srri @$AR1, $AC0.M + 0c98 0088 ffff lri $WR0, #0xffff + 0c9a 8b00 m0 + 0c9b 02df ret + 0c9c 8a00 m2 + 0c9d 05fe addis $ACC1, #0xfe + 0c9e 0083 03e8 lri $AR3, #0x03e8 + 0ca0 191e lrri $AC0.M, @$AR0 + 0ca1 191a lrri $AX0.H, @$AR0 + 0ca2 005f loop $AC1.M + 0ca3 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0ca4 1b7e srri @$AR3, $AC0.M + 0ca5 1b7a srri @$AR3, $AX0.H + 0ca6 0080 03e8 lri $AR0, #0x03e8 + 0ca8 0501 addis $ACC1, #0x01 + 0ca9 1d1f mrr $WR0, $AC1.M + 0caa 1150 0cb2 bloopi #0x50, 0x0cb2 + 0cac 1c61 mrr $AR3, $AR1 + 0cad 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3 + 0cae 005f loop $AC1.M + 0caf f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0cb0 f200 madd $AX0.L, $AX0.H + 0cb1 fe00 movpz $ACC0 + 0cb2 1b3e srri @$AR1, $AC0.M + 0cb3 0088 ffff lri $WR0, #0xffff + 0cb5 8b00 m0 + 0cb6 02df ret + 0cb7 0083 03e8 lri $AR3, #0x03e8 + 0cb9 191e lrri $AC0.M, @$AR0 + 0cba 191a lrri $AX0.H, @$AR0 + 0cbb 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cbc 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cbd 1b7e srri @$AR3, $AC0.M + 0cbe 1b7a srri @$AR3, $AX0.H + 0cbf 0080 03e8 lri $AR0, #0x03e8 + 0cc1 0088 0003 lri $WR0, #0x0003 + 0cc3 0085 0000 lri $IX1, #0x0000 + 0cc5 0087 0000 lri $IX3, #0x0000 + 0cc7 1fc2 mrr $AC0.M, $AR2 + 0cc8 195b lrri $AX1.H, @$AR2 + 0cc9 1959 lrri $AX1.L, @$AR2 + 0cca 195f lrri $AC1.M, @$AR2 + 0ccb 195a lrri $AX0.H, @$AR2 + 0ccc 1c5e mrr $AR2, $AC0.M + 0ccd 1fda mrr $AC0.M, $AX0.H + 0cce 1c61 mrr $AR3, $AR1 + 0ccf 8a00 m2 + 0cd0 8f00 set40 + 0cd1 191a lrri $AX0.H, @$AR0 + 0cd2 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0cd3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0cd4 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0cd5 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0cd6 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0cd7 1127 0ce2 bloopi #0x27, 0x0ce2 + 0cd9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0cda 197e lrri $AC0.M, @$AR3 + 0cdb e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0cdc eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0cdd bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0 + 0cde e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0cdf 197f lrri $AC1.M, @$AR3 + 0ce0 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0ce1 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0ce2 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0 + 0ce3 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0ce4 197e lrri $AC0.M, @$AR3 + 0ce5 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0ce6 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0ce7 bf00 mulxmv $AX0.H, $AX1.H, $ACC1 + 0ce8 1bff srrn @$AR3, $AC1.M + 0ce9 197f lrri $AC1.M, @$AR3 + 0cea 8e00 set16 + 0ceb 8b00 m0 + 0cec 0088 ffff lri $WR0, #0xffff + 0cee 1b5b srri @$AR2, $AX1.H + 0cef 1b59 srri @$AR2, $AX1.L + 0cf0 1b5f srri @$AR2, $AC1.M + 0cf1 1b5e srri @$AR2, $AC0.M + 0cf2 02df ret + 0cf3 0083 03e8 lri $AR3, #0x03e8 + 0cf5 191e lrri $AC0.M, @$AR0 + 0cf6 191a lrri $AX0.H, @$AR0 + 0cf7 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cf8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M + 0cf9 1b7e srri @$AR3, $AC0.M + 0cfa 1b7a srri @$AR3, $AX0.H + 0cfb 0080 03e8 lri $AR0, #0x03e8 + 0cfd 0088 0003 lri $WR0, #0x0003 + 0cff 0085 0000 lri $IX1, #0x0000 + 0d01 0087 0000 lri $IX3, #0x0000 + 0d03 1fc2 mrr $AC0.M, $AR2 + 0d04 195b lrri $AX1.H, @$AR2 + 0d05 1959 lrri $AX1.L, @$AR2 + 0d06 195f lrri $AC1.M, @$AR2 + 0d07 195a lrri $AX0.H, @$AR2 + 0d08 1c5e mrr $AR2, $AC0.M + 0d09 1fda mrr $AC0.M, $AX0.H + 0d0a 1c61 mrr $AR3, $AR1 + 0d0b 8a00 m2 + 0d0c 8f00 set40 + 0d0d 191a lrri $AX0.H, @$AR0 + 0d0e b800 mulx $AX0.H, $AX1.H + 0d0f e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0d10 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d11 ea00 maddc $AC1.M, $AX1.L + 0d12 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0d13 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0d14 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0d15 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0d16 1127 0d27 bloopi #0x27, 0x0d27 + 0d18 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d19 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0d1a 197e lrri $AC0.M, @$AR3 + 0d1b e800 maddc $AC0.M, $AX1.L + 0d1c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0d1d ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0d1e eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0d1f bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0d20 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 + 0d21 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M + 0d22 197f lrri $AC1.M, @$AR3 + 0d23 ea00 maddc $AC1.M, $AX1.L + 0d24 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0 + 0d25 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3 + 0d26 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0 + 0d27 b200 mulxmvz $AX0.H, $AX1.L, $ACC0 + 0d28 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 + 0d29 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M + 0d2a 197e lrri $AC0.M, @$AR3 + 0d2b e800 maddc $AC0.M, $AX1.L + 0d2c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0 + 0d2d ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3 + 0d2e eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0 + 0d2f bb00 mulxmvz $AX0.H, $AX1.H, $ACC1 + 0d30 1bff srrn @$AR3, $AC1.M + 0d31 197f lrri $AC1.M, @$AR3 + 0d32 8e00 set16 + 0d33 8b00 m0 + 0d34 0088 ffff lri $WR0, #0xffff + 0d36 1b5b srri @$AR2, $AX1.H + 0d37 1b59 srri @$AR2, $AX1.L + 0d38 1b5f srri @$AR2, $AC1.M + 0d39 1b5e srri @$AR2, $AC0.M + 0d3a 02df ret + 0d3b 0eff lris $AC0.M, #0xff + 0d3c 00fe 03f2 sr @0x03f2, $AC0.M + 0d3e 8100 clr $ACC0 + 0d3f 00fe 03f0 sr @0x03f0, $AC0.M + 0d41 00fe 03f6 sr @0x03f6, $AC0.M + 0d43 009e 0100 lri $AC0.M, #0x0100 + 0d45 00fe 03f7 sr @0x03f7, $AC0.M + 0d47 00da 03f7 lr $AX0.H, @0x03f7 + 0d49 009e 8000 lri $AC0.M, #0x8000 + 0d4b 5400 subr $ACC0, $AX0.H + 0d4c 00fe 03f5 sr @0x03f5, $AC0.M + 0d4e 0e30 lris $AC0.M, #0x30 + 0d4f 00fe 03f3 sr @0x03f3, $AC0.M + 0d51 0e10 lris $AC0.M, #0x10 + 0d52 00fe 03f4 sr @0x03f4, $AC0.M + 0d54 009e 0096 lri $AC0.M, #0x0096 + 0d56 00fe 03f1 sr @0x03f1, $AC0.M + 0d58 02df ret + 0d59 0080 0a00 lri $AR0, #0x0a00 + 0d5b 8100 clr $ACC0 + 0d5c 00de 03f0 lr $AC0.M, @0x03f0 + 0d5e 8900 clr $ACC1 + 0d5f b100 tst $ACC0 + 0d60 0275 ifz + 0d61 0550 addis $ACC1, #0x50 + 0d62 00ff 03f0 sr @0x03f0, $AC1.M + 0d64 0200 0a60 addi $AC0.M, #0x0a60 + 0d66 1c7e mrr $AR3, $AC0.M + 0d67 0f4e lris $AC1.M, #0x4e + 0d68 02bf 012b call 0x012b + 0d6a 02df ret + 0d6b 00de 03f1 lr $AC0.M, @0x03f1 + 0d6d 0200 0a60 addi $AC0.M, #0x0a60 + 0d6f 1c7e mrr $AR3, $AC0.M + 0d70 8100 clr $ACC0 + 0d71 8900 clr $ACC1 + 0d72 009f 00a0 lri $AC1.M, #0x00a0 + 0d74 00de 03f1 lr $AC0.M, @0x03f1 + 0d76 5d00 sub $ACC1, $ACC0 + 0d77 0e50 lris $AC0.M, #0x50 + 0d78 0750 cmpis $ACC1, #0x50 + 0d79 0270 ifge + 0d7a 5d00 sub $ACC1, $ACC0 + 0d7b 00da 03f2 lr $AX0.H, @0x03f2 + 0d7d 8600 tstaxh $AX0.H + 0d7e 0290 0d9c jge 0x0d9c + 0d80 00de 03f3 lr $AC0.M, @0x03f3 + 0d82 5c00 sub $ACC0, $ACC1 + 0d83 0293 0d87 jle 0x0d87 + 0d85 029f 0da1 jmp 0x0da1 + 0d87 00db 03f7 lr $AX1.H, @0x03f7 + 0d89 009e 8000 lri $AC0.M, #0x8000 + 0d8b 4600 addr $ACC0, $AX1.H + 0d8c 029f 0d93 jmp 0x0d93 + 0d8e 00db 03f7 lr $AX1.H, @0x03f7 + 0d90 009e 8000 lri $AC0.M, #0x8000 + 0d92 5600 subr $ACC0, $AX1.H + 0d93 00fe 03f5 sr @0x03f5, $AC0.M + 0d95 1fda mrr $AC0.M, $AX0.H + 0d96 7c00 neg $ACC0 + 0d97 1f5e mrr $AX0.H, $AC0.M + 0d98 00fe 03f2 sr @0x03f2, $AC0.M + 0d9a 029f 0da1 jmp 0x0da1 + 0d9c 00de 03f4 lr $AC0.M, @0x03f4 + 0d9e 5d00 sub $ACC1, $ACC0 + 0d9f 0293 0d8e jle 0x0d8e + 0da1 8900 clr $ACC1 + 0da2 00dd 03f5 lr $AC1.L, @0x03f5 + 0da4 1501 lsl $ACC1, #1 + 0da5 8100 clr $ACC0 + 0da6 00dc 03f6 lr $AC0.L, @0x03f6 + 0da8 008b 009f lri $WR3, #0x009f + 0daa 0080 0a00 lri $AR0, #0x0a00 + 0dac 0900 lris $AX1.L, #0x00 + 0dad 1150 0db4 bloopi #0x50, 0x0db4 + 0daf 1878 lrr $AX0.L, @$AR3 + 0db0 4c00 add $ACC0, $ACC1 + 0db1 1cfe mrr $IX3, $AC0.M + 0db2 001f addarn $AR3, $IX3 + 0db3 1fd9 mrr $AC0.M, $AX1.L + 0db4 1b18 srri @$AR0, $AX0.L + 0db5 009f 0a60 lri $AC1.M, #0x0a60 + 0db7 1fc3 mrr $AC0.M, $AR3 + 0db8 5c00 sub $ACC0, $ACC1 + 0db9 00fe 03f1 sr @0x03f1, $AC0.M + 0dbb 00fc 03f6 sr @0x03f6, $AC0.L + 0dbd 008b ffff lri $WR3, #0xffff + 0dbf 02df ret + 0dc0 0f50 lris $AC1.M, #0x50 + 0dc1 0080 0a00 lri $AR0, #0x0a00 + 0dc3 0083 0d60 lri $AR3, #0x0d60 + 0dc5 0098 3fff lri $AX0.L, #0x3fff + 0dc7 02bf 0145 call 0x0145 + 0dc9 0f50 lris $AC1.M, #0x50 + 0dca 0080 0a00 lri $AR0, #0x0a00 + 0dcc 0083 0d00 lri $AR3, #0x0d00 + 0dce 0098 3fff lri $AX0.L, #0x3fff + 0dd0 02bf 0145 call 0x0145 + 0dd2 02df ret + 0dd3 b900 tst $ACC1 + 0dd4 0294 0dd9 jnz 0x0dd9 + 0dd6 6800 movax $ACC0, $AX0.L + 0dd7 b100 tst $ACC0 + 0dd8 02d5 retz + 0dd9 1c23 mrr $AR1, $AR3 + 0dda 197e lrri $AC0.M, @$AR3 + 0ddb 191b lrri $AX1.H, @$AR0 + 0ddc d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0 + 0ddd 1120 0de3 bloopi #0x20, 0x0de3 + 0ddf dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0de0 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0de1 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0de2 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0de3 4900 addax $ACC1, $AX0.L + 0de4 1108 0de9 bloopi #0x08, 0x0de9 + 0de6 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0de7 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0de8 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3 + 0de9 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M + 0dea 02df ret + 0deb 8f00 set40 + 0dec 8d00 set15 + 0ded 1c03 mrr $AR0, $AR3 + 0dee 00d9 038e lr $AX1.L, @0x038e + 0df0 0b04 lris $AX1.H, #0x04 + 0df1 197a lrri $AX0.H, @$AR3 + 0df2 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3 + 0df3 b600 mulxmv $AX0.H, $AX1.L, $ACC0 + 0df4 1128 0df9 bloopi #0x28, 0x0df9 + 0df6 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0df7 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0df8 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3 + 0df9 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0dfa 8c00 clr15 + 0dfb 8e00 set16 + 0dfc 02df ret + 0dfd 00da 0485 lr $AX0.H, @0x0485 + 0dff 8600 tstaxh $AX0.H + 0e00 0295 0e0e jz 0x0e0e + 0e02 8100 clr $ACC0 + 0e03 00de 042a lr $AC0.M, @0x042a + 0e05 147f lsr $ACC0, #-1 + 0e06 00fe 042b sr @0x042b, $AC0.M + 0e08 b100 tst $ACC0 + 0e09 0294 0e0e jnz 0x0e0e + 0e0b 0a01 lris $AX0.H, #0x01 + 0e0c 00fa 0401 sr @0x0401, $AX0.H + 0e0e 8f00 set40 + 0e0f 8100 clr $ACC0 + 0e10 00de 0428 lr $AC0.M, @0x0428 + 0e12 1478 lsr $ACC0, #-8 + 0e13 00df 0428 lr $AC1.M, @0x0428 + 0e15 0340 007f andi $AC1.M, #0x007f + 0e17 1f1e mrr $AX0.L, $AC0.M + 0e18 1f5f mrr $AX0.H, $AC1.M + 0e19 0220 007f xori $ACC0, #0x007f + 0e1b 1f3e mrr $AX1.L, $AC0.M + 0e1c 0320 007f xori $ACC1, #0x007f + 0e1e 1f7f mrr $AX1.H, $AC1.M + 0e1f 8100 clr $ACC0 + 0e20 8900 clr $ACC1 + 0e21 009f 0200 lri $AC1.M, #0x0200 + 0e23 1fd8 mrr $AC0.M, $AX0.L + 0e24 4c00 add $ACC0, $ACC1 + 0e25 1c1e mrr $AR0, $AC0.M + 0e26 1818 lrr $AX0.L, @$AR0 + 0e27 1fda mrr $AC0.M, $AX0.H + 0e28 4c00 add $ACC0, $ACC1 + 0e29 1c1e mrr $AR0, $AC0.M + 0e2a 181a lrr $AX0.H, @$AR0 + 0e2b 1fd9 mrr $AC0.M, $AX1.L + 0e2c 4c00 add $ACC0, $ACC1 + 0e2d 1c1e mrr $AR0, $AC0.M + 0e2e 1819 lrr $AX1.L, @$AR0 + 0e2f 1fdb mrr $AC0.M, $AX1.H + 0e30 4c00 add $ACC0, $ACC1 + 0e31 1c1e mrr $AR0, $AC0.M + 0e32 181b lrr $AX1.H, @$AR0 + 0e33 8a00 m2 + 0e34 0080 0b00 lri $AR0, #0x0b00 + 0e36 9800 mul $AX1.L, $AX1.H + 0e37 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 + 0e38 b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M + 0e39 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M + 0e3a 6e30 movp's $ACC0 : @$AR0, $AC0.M + 0e3b 1b1e srri @$AR0, $AC0.M + 0e3c 8b00 m0 + 0e3d 0080 0b00 lri $AR0, #0x0b00 + 0e3f 0081 0b04 lri $AR1, #0x0b04 + 0e41 00da 042a lr $AX0.H, @0x042a + 0e43 02bf 0e8e call 0x0e8e + 0e45 0081 0b08 lri $AR1, #0x0b08 + 0e47 0080 0b00 lri $AR0, #0x0b00 + 0e49 00da 042a lr $AX0.H, @0x042a + 0e4b 00de 0429 lr $AC0.M, @0x0429 + 0e4d 8a00 m2 + 0e4e c000 mulc $AC0.M, $AX0.H + 0e4f 8b00 m0 + 0e50 6e00 movp $ACC0 + 0e51 1f5e mrr $AX0.H, $AC0.M + 0e52 02bf 0e8e call 0x0e8e + 0e54 0080 0b00 lri $AR0, #0x0b00 + 0e56 0081 0b0c lri $AR1, #0x0b0c + 0e58 8100 clr $ACC0 + 0e59 8900 clr $ACC1 + 0e5a 00de 042b lr $AC0.M, @0x042b + 0e5c 00df 042a lr $AC1.M, @0x042a + 0e5e 00fe 042a sr @0x042a, $AC0.M + 0e60 5c00 sub $ACC0, $ACC1 + 0e61 1f5e mrr $AX0.H, $AC0.M + 0e62 02bf 0e99 call 0x0e99 + 0e64 0080 0b0c lri $AR0, #0x0b0c + 0e66 0081 0b10 lri $AR1, #0x0b10 + 0e68 00da 0429 lr $AX0.H, @0x0429 + 0e6a 02bf 0e8e call 0x0e8e + 0e6c 0081 0b04 lri $AR1, #0x0b04 + 0e6e 0082 0b0c lri $AR2, #0x0b0c + 0e70 0083 0ea7 lri $AR3, #0x0ea7 + 0e72 1108 0e8b bloopi #0x08, 0x0e8b + 0e74 195f lrri $AC1.M, @$AR2 + 0e75 15fb asr $ACC1, #-5 + 0e76 1f1d mrr $AX0.L, $AC1.L + 0e77 1f5f mrr $AX0.H, $AC1.M + 0e78 193f lrri $AC1.M, @$AR1 + 0e79 00e1 0b24 sr @0x0b24, $AR1 + 0e7b 00e2 0b25 sr @0x0b25, $AR2 + 0e7d 021b ilrri $AC0.M, @$AR3 + 0e7e 00e3 0b26 sr @0x0b26, $AR3 + 0e80 1c7e mrr $AR3, $AC0.M + 0e81 00c0 038f lr $AR0, @0x038f + 0e83 02bf 0dd3 call 0x0dd3 + 0e85 00c1 0b24 lr $AR1, @0x0b24 + 0e87 00c2 0b25 lr $AR2, @0x0b25 + 0e89 00c3 0b26 lr $AR3, @0x0b26 + 0e8b 0000 nop + 0e8c 8e00 set16 + 0e8d 02df ret + 0e8e 8a00 m2 + 0e8f 191f lrri $AC1.M, @$AR0 + 0e90 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0 + 0e91 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0 + 0e92 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e93 191f lrri $AC1.M, @$AR0 + 0e94 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M + 0e95 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0e96 1b3e srri @$AR1, $AC0.M + 0e97 8b00 m0 + 0e98 02df ret + 0e99 8a00 m2 + 0e9a 8d00 set15 + 0e9b 1f7e mrr $AX1.H, $AC0.M + 0e9c 1918 lrri $AX0.L, @$AR0 + 0e9d a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0 + 0e9e ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0 + 0e9f ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ea0 1918 lrri $AX0.L, @$AR0 + 0ea1 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M + 0ea2 6e31 movp's $ACC0 : @$AR1, $AC0.M + 0ea3 1b3e srri @$AR1, $AC0.M + 0ea4 8c00 clr15 + 0ea5 8b00 m0 + 0ea6 02df ret + 0ea7 0d00 lris $AC1.L, #0x00 + 0ea8 0d60 lris $AC1.L, #0x60 + 0ea9 0f40 lris $AC1.M, #0x40 + 0eaa 0ca0 lris $AC0.L, #0xa0 + 0eab 0e80 lris $AC0.M, #0x80 + 0eac 0ee0 lris $AC0.M, #0xe0 + 0ead 0be0 lris $AX1.H, #0xe0 + 0eae 0c40 lris $AC0.L, #0x40 + 0eaf 00f9 0361 sr @0x0361, $AX1.L + 0eb1 1fc0 mrr $AC0.M, $AR0 + 0eb2 0200 fffc addi $AC0.M, #0xfffc + 0eb4 1c1e mrr $AR0, $AC0.M + 0eb5 1c5e mrr $AR2, $AC0.M + 0eb6 0083 043c lri $AR3, #0x043c + 0eb8 197e lrri $AC0.M, @$AR3 + 0eb9 197f lrri $AC1.M, @$AR3 + 0eba 80a2 nx'sl : $AC0.M, $AX0.H + 0ebb 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H + 0ebc 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M + 0ebd 1b1f srri @$AR0, $AC1.M + 0ebe 1c02 mrr $AR0, $AR2 + 0ebf 8100 clr $ACC0 + 0ec0 00de 0402 lr $AC0.M, @0x0402 + 0ec2 00fe 0362 sr @0x0362, $AC0.M + 0ec4 1474 lsr $ACC0, #-12 + 0ec5 1f7e mrr $AX1.H, $AC0.M + 0ec6 1f3c mrr $AX1.L, $AC0.L + 0ec7 8900 clr $ACC1 + 0ec8 00dd 0430 lr $AC1.L, @0x0430 + 0eca 1504 lsl $ACC1, #4 + 0ecb 0604 cmpis $ACC0, #0x04 + 0ecc 0290 0f23 jge 0x0f23 + 0ece 1fdd mrr $AC0.M, $AC1.L + 0ecf 0082 02b0 lri $AR2, #0x02b0 + 0ed1 1050 loopi #0x50 + 0ed2 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L + 0ed3 1fbe mrr $AC1.L, $AC0.M + 0ed4 00fe 0360 sr @0x0360, $AC0.M + 0ed6 8900 clr $ACC1 + 0ed7 1fbe mrr $AC1.L, $AC0.M + 0ed8 0af8 lris $AX0.H, #0xf8 + 0ed9 009b 00fc lri $AX1.H, #0x00fc + 0edb 00d8 0361 lr $AX0.L, @0x0361 + 0edd 0082 02b0 lri $AR2, #0x02b0 + 0edf 0083 02b0 lri $AR3, #0x02b0 + 0ee1 195e lrri $AC0.M, @$AR2 + 0ee2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M + 0ee3 1128 0ee8 bloopi #0x28, 0x0ee8 + 0ee5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 + 0ee6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H + 0ee7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 + 0ee8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H + 0ee9 8a00 m2 + 0eea 0082 02b0 lri $AR2, #0x02b0 + 0eec 00dd 0430 lr $AC1.L, @0x0430 + 0eee 1504 lsl $ACC1, #4 + 0eef 1fe0 mrr $AC1.M, $AR0 + 0ef0 8100 clr $ACC0 + 0ef1 00de 0362 lr $AC0.M, @0x0362 + 0ef3 1474 lsr $ACC0, #-12 + 0ef4 1f7e mrr $AX1.H, $AC0.M + 0ef5 1f3c mrr $AX1.L, $AC0.L + 0ef6 8f00 set40 + 0ef7 1943 lrri $AR3, @$AR2 + 0ef8 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0ef9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0efa f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0efb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0efc f200 madd $AX0.L, $AX0.H + 0efd fe00 movpz $ACC0 + 0efe 1c1f mrr $AR0, $AC1.M + 0eff 1943 lrri $AR3, @$AR2 + 0f00 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0f01 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f02 114e 0f0a bloopi #0x4e, 0x0f0a + 0f04 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f05 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f06 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0f07 1c1f mrr $AR0, $AC1.M + 0f08 1943 lrri $AR3, @$AR2 + 0f09 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3 + 0f0a 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3 + 0f0b f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f0c f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 + 0f0d f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M + 0f0e fe00 movpz $ACC0 + 0f0f 1b3e srri @$AR1, $AC0.M + 0f10 8b00 m0 + 0f11 8e00 set16 + 0f12 00fe 0433 sr @0x0433, $AC0.M + 0f14 1c1f mrr $AR0, $AC1.M + 0f15 150c lsl $ACC1, #12 + 0f16 0340 0fff andi $AC1.M, #0x0fff + 0f18 00ff 0430 sr @0x0430, $AC1.M + 0f1a 0083 043c lri $AR3, #0x043c + 0f1c 191e lrri $AC0.M, @$AR0 + 0f1d 191f lrri $AC1.M, @$AR0 + 0f1e 80a0 nx'ls : $AX0.H, $AC0.M + 0f1f 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M + 0f20 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M + 0f21 1b7f srri @$AR3, $AC1.M + 0f22 02df ret + 0f23 1fe0 mrr $AC1.M, $AR0 + 0f24 1c1f mrr $AR0, $AC1.M + 0f25 1128 0f2c bloopi #0x28, 0x0f2c + 0f27 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f28 1b3e srri @$AR1, $AC0.M + 0f29 1c1f mrr $AR0, $AC1.M + 0f2a 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0 + 0f2b 1b3e srri @$AR1, $AC0.M + 0f2c 1c1f mrr $AR0, $AC1.M + 0f2d 029f 0f12 jmp 0x0f12 + 0f2f 0083 0520 lri $AR3, #0x0520 + 0f31 00de 0433 lr $AC0.M, @0x0433 + 0f33 1050 loopi #0x50 + 0f34 1b7e srri @$AR3, $AC0.M + 0f35 029f 0386 jmp 0x0386 + 0f37 1c20 mrr $AR1, $AR0 + 0f38 185f lrr $AC1.M, @$AR2 + 0f39 1f7f mrr $AX1.H, $AC1.M + 0f3a 193a lrri $AX0.H, @$AR1 + 0f3b 6400 movr $ACC0, $AX0.H + 0f3c 0078 0f41 bloop $AX0.L, 0x0f41 + 0f3e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1 + 0f3f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M + 0f40 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1 + 0f41 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M + 0f42 1a5b srr @$AR2, $AX1.H + 0f43 02df ret + 0f44 0098 8240 lri $AX0.L, #0x8240 + 0f46 00f8 04e8 sr @0x04e8, $AX0.L + 0f48 0098 7fff lri $AX0.L, #0x7fff + 0f4a 00f8 04e9 sr @0x04e9, $AX0.L + 0f4c 0098 7dbf lri $AX0.L, #0x7dbf + 0f4e 00f8 04ea sr @0x04ea, $AX0.L + 0f50 0098 843f lri $AX0.L, #0x843f + 0f52 00f8 04eb sr @0x04eb, $AX0.L + 0f54 0098 b23b lri $AX0.L, #0xb23b + 0f56 00f8 04f0 sr @0x04f0, $AX0.L + 0f58 0098 7fff lri $AX0.L, #0x7fff + 0f5a 00f8 04f1 sr @0x04f1, $AX0.L + 0f5c 0098 4dc4 lri $AX0.L, #0x4dc4 + 0f5e 00f8 04f2 sr @0x04f2, $AX0.L + 0f60 0098 d808 lri $AX0.L, #0xd808 + 0f62 00f8 04f3 sr @0x04f3, $AX0.L + 0f64 0098 0000 lri $AX0.L, #0x0000 + 0f66 0080 04ec lri $AR0, #0x04ec + 0f68 1004 loopi #0x04 + 0f69 1b18 srri @$AR0, $AX0.L + 0f6a 0080 04f4 lri $AR0, #0x04f4 + 0f6c 1004 loopi #0x04 + 0f6d 1b18 srri @$AR0, $AX0.L + 0f6e 02df ret + 0f6f 0080 0f40 lri $AR0, #0x0f40 + 0f71 0083 0b00 lri $AR3, #0x0b00 + 0f73 8900 clr $ACC1 + 0f74 0f50 lris $AC1.M, #0x50 + 0f75 0098 6784 lri $AX0.L, #0x6784 + 0f77 02bf 0154 call 0x0154 + 0f79 0080 04e8 lri $AR0, #0x04e8 + 0f7b 0082 04ec lri $AR2, #0x04ec + 0f7d 0081 0b00 lri $AR1, #0x0b00 + 0f7f 8900 clr $ACC1 + 0f80 0f50 lris $AC1.M, #0x50 + 0f81 0080 0b00 lri $AR0, #0x0b00 + 0f83 0083 0d00 lri $AR3, #0x0d00 + 0f85 0098 7fff lri $AX0.L, #0x7fff + 0f87 02bf 0145 call 0x0145 + 0f89 8900 clr $ACC1 + 0f8a 0f50 lris $AC1.M, #0x50 + 0f8b 0080 0b00 lri $AR0, #0x0b00 + 0f8d 0083 0d60 lri $AR3, #0x0d60 + 0f8f 0098 b820 lri $AX0.L, #0xb820 + 0f91 02bf 0145 call 0x0145 + 0f93 0080 0ca0 lri $AR0, #0x0ca0 + 0f95 0083 0b00 lri $AR3, #0x0b00 + 0f97 8900 clr $ACC1 + 0f98 0f50 lris $AC1.M, #0x50 + 0f99 0098 6784 lri $AX0.L, #0x6784 + 0f9b 02bf 0154 call 0x0154 + 0f9d 0080 04e8 lri $AR0, #0x04e8 + 0f9f 0082 04f4 lri $AR2, #0x04f4 + 0fa1 0081 0b00 lri $AR1, #0x0b00 + 0fa3 8900 clr $ACC1 + 0fa4 0f50 lris $AC1.M, #0x50 + 0fa5 0080 0b00 lri $AR0, #0x0b00 + 0fa7 0083 0d00 lri $AR3, #0x0d00 + 0fa9 0098 47e0 lri $AX0.L, #0x47e0 + 0fab 02bf 0145 call 0x0145 + 0fad 8900 clr $ACC1 + 0fae 0f50 lris $AC1.M, #0x50 + 0faf 0080 0b00 lri $AR0, #0x0b00 + 0fb1 0083 0d60 lri $AR3, #0x0d60 + 0fb3 0098 8001 lri $AX0.L, #0x8001 + 0fb5 02bf 0145 call 0x0145 + 0fb7 02df ret + 0fb8 0000 nop + 0fb9 0000 nop + 0fba 0000 nop + 0fbb 0000 nop + 0fbc 0000 nop + 0fbd 0000 nop + 0fbe 0000 nop + 0fbf 0000 nop diff --git a/docs/DSP/wwdsp.c b/docs/DSP/wwdsp.c index eeb0aed848..36a00ce35d 100644 --- a/docs/DSP/wwdsp.c +++ b/docs/DSP/wwdsp.c @@ -1,423 +1,423 @@ -/* important variables */ -short mem[0x1000]; -#define v_0341 mem[0x0341] /* op#2 saves a copy of 344 here */ -#define v_0343 mem[0x0343] /* message type? */ -#define v_0344 mem[0x0344] /* low byte of first word of message */ -#define v_0345 mem[0x0345] /* copy of second word of message */ -#define a_0346 mem[0x0346] /* buffer for message contents, size unknown */ -#define v_034e mem[0x034e] /* init to 0, later set to most recent value written in a_04fc */ - -#define v_0350 mem[0x0350] /* init to 0x0280 (write location of messages) */ -#define v_0351 mem[0x0351] /* init to 0x0280 (read location?) */ -#define v_0352 mem[0x0352] /* init to 0 (number of messages pending?) */ -#define v_0355 mem[0x0355] /* used by op#2, init to 0 */ -#define a_0356 (mem+0x0356) /* message contents */ - -#define a_0388 (mem+0x388) /* where op 2 keeps its message */ -#define a_038e (mem+0x38e) /* op#2 saves a copy of 345 here */ - -#define a_03a8 (mem+0x3a8) /* where op#2 dmas in its data, at least 0x80 */ - -#define v_03fa mem[0x03fa] /* temp for ax0.h during exception */ -#define v_03fb mem[0x03fb] /* temp for ar0 during exception */ -#define v_03fc mem[0x03fc] /* temp for r08 during exception */ -#define v_03fd mem[0x03fd] /* temp for ac0.h during exception */ -#define v_03fe mem[0x03fe] /* temp for ac0.m during exception */ -#define v_03ff mem[0x03ff] /* temp for ac0.l during exception */ - -#define a_04e8 (mem+0x04e8) /* 4 element array */ -#define a_04ec (mem+0x04ec) /* 4 element array (empty) */ -#define a_04f0 (mem+0x04f0) /* 4 element array */ -#define a_04f4 (mem+0x04f4) /* 4 element array (empty) */ -#define a_04fc (mem+0x04fc) /* 16 element array, written by messages */ -#define a_09a0 (mem+0x09a0) /* 0x50 element array, used by op#2, cleared */ -#define a_0a00 (mem+0x0a00) /* 0x50 element array, used by op#2, cleared */ -#define a_0b00 (mem+0x0b00) /* array from 0x0b00-0x0bff, involves accelerator? */ -#define a_0ca0 (mem+0x0ca0) /* 0x50 element array, used by op#2, cleared */ -#define a_0d00 (mem+0x0d00) /* 0x50 element array, used by op#2, cleared */ -#define a_0d60 (mem+0x0d60) /* 0x50 element array, used by op#2, cleared */ -#define a_0f40 (mem+0x0f40) /* 0x50 element array, used by op#2, cleared */ - - - -/* reset exception vector 0x0000 */ -void main() { - /* JMP 0x0012 */ - /* various inits */ - SBCLR(5); /* disable interrupts? */ - fcn_0057(); /* init hardware stuff */ - for(ac1.m=0x1000,ac0.m=0;ac1.m>0;ac1.m--) mem[ac0.m++]=0; /* clear all vars */ - fcn_0688(); /* init some vars */ - fcn_04c0(); /* set something up related to the accelerator at a_0b00 */ - fcn_0e14(); /* set up a table */ - fcn_066a(0); /* send a message */ - fcn_0674(0x1111); /* send a message */ - v_034e=0; - SBSET(5); /* enable interrupts? */ - - /* jump to 0x06c5 */ -mainloop: - while (v_0352) ; /* while no messages pending */ - - SBCLR(5); /* do not distrub */ - v_0352--; /* important that this be atomic */ - SBSET(5); - - t=v_0351; - size=mem[t++]; - if (!(size&0x8000)) { /* size > 0x7fff invalid */ - if (size==0) { /* die on message of length 0? */ - /* jump to 0x06f5 */ - /* jump to 0x05f0 */ - - /* TODO: analysis of HALT */ - HALT(); - } - for (i=size,j=0;i>0;i--) { - a_0356[j++]=mem[t++]; - a_0356[j++]=mem[t++]; - } - v_0351=t; - - /* jump to 0x002f */ - /* actual command handling */ - v_0345=a_0356[1]; - v_0344=a_0356[0]&0x00ff; - v_0343=(a_0346[0]>>7)&0x7e; - - /* jump table at 0x75 used here */ - switch (v_0343>>1) { - - // 0x43 - case 0: - case 10: - case 11: - case 12: - case 14: - case 15: - /* invalid command? */ - config=0x00ff; - fcn_066a(0x04); /* send off a message */ - fcn_0674(a_0356[0]); /* send first word of command as a message */ - goto mainloop; - break; - case 1: - /* jmp 0x0095 */ - break; - - case 2: - /* jmp 0x0243 */ - sub_0243(); - break; - - case 3: - /* jmp 0x0073 */ - break; - - case 4: - /* jmp 0x580 */ - break; - - case 5: - /* jmp 0x592 */ - break; - - case 6: - /* jmp 0x469 */ - break; - - case 7: - /* jmp 0x41d */ - break; - - case 8: /* mix */ - /* jmp 0x0485 */ - fcn_0067(fcn_0067(0x0346)); /* read message twice? */ - /* take in the two buffers to mix */ - fcn_0525(mem[0x344],mem[0x346],mem[0x347],0x400); /* size, addrH, addrL, dsp addr */ - fcn_0525(mem[0x344],mem[0x348],mem[0x349],0x800); - S16(); /* saturate all adds, multiplies to 16 bits? */ - - i=mem[0x0344]; - src1=0x400; - src2=0x800; - scale=mem[0x345]; - - prod=scale*mem[src2++]; - val2=mem[src2++]; - do { - val1=mem[src1]; - val1+=prod; - prod=scale*val2; - mem[src1]=val1; - val2=mem[src2]; - src1++; - src2++; - } while (--i); - - S40(); - - /* dma out mixed buf */ - fcn_0523(mem[0x344],mem[0x346],mem[0x347],0x400); - - break; - - case 9: - /* jmp 0x44d */ - break; - - case 13: - /* jmp 0x00b2 */ - break; - } - } - - v_0351=t; - - goto mainloop; -} - -/* message in MBOX exception vector? 0x000e */ -void exception() { - /* JMP 0x05b8 */ - - SBCLR(5); - S40(); - /* save ax0.h,ac0.h,ac0.m, and ac0.l */ - - if ((tH=register_fffe)&0x8000) { /* CPU mailbox H */ - if (!(tsize=register_ffff)) { /* CPU mailbox L */ - /* empty message? */ - while (!((tH=register_fffe)&0x8000)) ; - tH&=0xf; - v_034e=(tH+1)<<4; - a_04fc[tH]=register_ffff; - } else { /* nonempty message? */ - /* jump to 0x0692 */ - /* save ar0, r08 */ - t=v_0350; - mem[t++]=tsize; - - do { - while (!((tH=register_fffe)&0x8000)) ; - mem[t++]=tH; - mem[t++]=register_ffff; - } while (--tsize); - - v_0350=t; - v_0352++; - /* restore ar0, r08 */ - - /* jump to 0x05e6 */ - } - } else { /* interrupt without message? */ - /* jump to 0x06b9 */ - /* save ar0, r08 */ - mem[v_0350]=0; /* empty message */ - /* jump to 0x06ab */ - v_0350++; - v_0352++; - /* restore ar0, r08 */ - - /* jump to 0x05e6 */ - } - - /* 0x05e6 */ - - /* restore ax0.h,ac0.h,ac0.m, and ac0.l */ - SBSET(5); - /* RTI */ -} - -/* set up some registers */ -void fcn_0057() { - SBCLR(2); - SBCLR(3); - SBCLR(4); - SBCLR(6); - S40(); /* 40-bit mode */ - CLR15(); - M0(); /* don't multiply result by 2 */ - r08=-1; - r09=-1; - r0a=-1; - r0b=-1; - config=0xff; -} - -void fcn_0688() { - v_0350=0x0280; - v_0351=0x0280; - v_0352=0; -} - -void fcn_04c0() { - config=0xff; - for(i=0xff,ar0=0xb00;i>0;i--) mem[ar0++]=0; - mem[ar0++]=0; /* get the last one */ - fcn_0573(0x0b00,0x0100,0); -} - -/* a=an address in ac1.m, l=a length in ar0, v=a value? in ac0.m */ -void fcn_0573(short a, short l, short v) { - fcn_0561(a,l,0x0001); -} - -/* a=an address in ac1.m, l=a length in ar0, v=a value? in ac0.m, f is a flag? in ac0.h */ -/* return is in ax0.h */ -short fcn_0561(short a, short l, short v, short f) { - register_ffd1=0x0a; /* unknown reg, accel? */ - register_ffd6=-1; /* accel end addr H */ - register_ffd7=-1; /* accel end addr L */ - register_ffd8=v>>1; /* - register_ffd9=?; /* has a value from way back? */ - - return f; -} - -/* initializes some tables that look useful... */ -void fcn_0e14() { - a_04e8[0]=0x8240; - a_04e8[1]=0x7fff; - a_04e8[2]=0x7dbf; - a_04e8[3]=0x843f; - a_04f0[0]=0xb23b; - a_04f0[1]=0x7fff; - a_04f0[2]=0x4dc4; - a_04f0[3]=0xd808; - a_04ec[0]=a_04ec[1]=a_04ec[2]=a_04ec[3]=0; - a_04f4[0]=a_04f4[1]=a_04f4[2]=a_04f4[3]=0; -} - -/* send a message via DSP MBOX */ -void fcn_066a(short m) { - fcn_0682(); /* wait for empty mbox */ - register_fffc=0xdcd1; - register_fffd=m; - register_fffb=1; /* IRQ */ - fcn_0682(); -} - -/* wait for dsp mbox empty */ -void fcn_0682() { - while (register_fffc&0x8000); -} - -void fcn_0674(short m) { - fcn_0682(); - register_fffc=0xf355; - register_fffd=m; - fcn_0682(); -} - -/* a=address in ar0 */ -/* fetch a message body (up to zero)? */ -short fcn_0067(short a) { - i=0x0357; - j=a; - do { - mem[j++]=mem[i++]; - mem[j++]=mem[i]; - } while (mem[i++]); - return a; -} - -/* dma in, I assume */ -/* size=words to transfer in ar0, addrL=low word of RAM address in ac0.l, addrH=high word of RAM address in ac0.m, dspaddr=dsp address in ac1.m */ -void fcn_0525(short size, short addrH, short addrL, short dspaddr) { - register_ffcd=dspaddr; /* dsp address */ - register_ffc9=0; /* direction: ram->dsp */ - register_ffce=addrH; /* memory address H */ - register_ffcf=addrL; /* memory address L */ - register_ffcb=size<<1; /* bytes to transfer (size must be in words) */ - fcn_0536(); /* dma wait */ -} - -/* dma wait? */ -void fcn_0536() { - while (!(register_ffc9&4)); -} - -/* dma out, I assume */ -/* size=words to transfer in ar0, addrL=low word of RAM address is ac0.l, addrH=high word of RAM address in ac0.m, dspaddr=dsp address in ac1.m */ -/* shares code with fcn_0525 */ -void fcn_0523(short size, short addrH, short addrL, shot dspaddr) { - register_ffcd=dspaddr; - /* jump back into 0525 */ - register_ffc9=1; /* direction dsp->ram */ - register_ffce=addrH; - register_ffcf=addrL; - register_ffcb=size<<1; - fcn_0536(); -} - -/* huge subroutine, op #2 */ -void sub_0243() { - fcn_0067(0x0388); /* called in an indirect manner... */ - v_0341=v_0344; /* low byte first word of message */ - v_038e=v_0345; - v_0355=0; - fcn_022a(); /* get stuffs */ - fcn_05a4(); /* write to accel */ - - for (i=v_0341;i>0i--) { - fcn_0102(); - - } -} - -void fcn_022a() { - /* something else must set 386, 387 */ - fcn_0525(0x0040,v_0386,v_0387,0x03a8); -} - -void fcn_05a4() { - register_ffd4=-1; - register_ffd5=-1; - register_ffd6=-1; - register_ffd7=-1; -} - -void fcn_0102() { - for (i=0;i<0x50;i++) a_0d00[i]=0; - for (i=0;i<0x50;i++) a_0d60[i]=0; - fcn_0e3f(); - for (i=0;i<0x50;i++) a_0ca0[i]=0; - for (i=0;i<0x50;i++) a_0f40[i]=0; - for (i=0;i<0x50;i++) a_0fa0[i]=0; - for (i=0;i<0x50;i++) a_0a00[i]=0; - for (i=0;i<0x50;i++) a_09a0[i]=0; -} - -void fcn_0e3f() { - fcn_00fa(0x0f40,0x0b00,0x50,0x6784); - fcn_0ba4(0x04e8,0x0b00,0x04ec); -} - -/* addr1=address in ar0, addr2=address in ar3, size=size of table at addr1 in ac1.m, val=in ax0.l */ -void fcn_00fa(short addr1, short addr2, short size, short val) { - M2(); /* all multiplications 2x */ - - tmp=mem[addr1++]; - prod=val*tmp*2; - tmp=mem[addr1++]; - ac0.m=prod; - prod=val*tmp*2; - tmp=mem[addr1++]; - - do { - ac0.m=prod; - prod=val*tmp*2; - mem[addr2]=ac0.m; - tmp=mem[addr1]; - addr1++; - addr2++; - } while (--size); - - M0(); -} - -/* addr1=address in ar0 (source 4 element table?), addr2=address in ar1 (accelerator?), addr3=address in ar2 (destination 4 element table?) */ -void fcn_00ba4(short addr1, short addr2, short addr3) { - +/* important variables */ +short mem[0x1000]; +#define v_0341 mem[0x0341] /* op#2 saves a copy of 344 here */ +#define v_0343 mem[0x0343] /* message type? */ +#define v_0344 mem[0x0344] /* low byte of first word of message */ +#define v_0345 mem[0x0345] /* copy of second word of message */ +#define a_0346 mem[0x0346] /* buffer for message contents, size unknown */ +#define v_034e mem[0x034e] /* init to 0, later set to most recent value written in a_04fc */ + +#define v_0350 mem[0x0350] /* init to 0x0280 (write location of messages) */ +#define v_0351 mem[0x0351] /* init to 0x0280 (read location?) */ +#define v_0352 mem[0x0352] /* init to 0 (number of messages pending?) */ +#define v_0355 mem[0x0355] /* used by op#2, init to 0 */ +#define a_0356 (mem+0x0356) /* message contents */ + +#define a_0388 (mem+0x388) /* where op 2 keeps its message */ +#define a_038e (mem+0x38e) /* op#2 saves a copy of 345 here */ + +#define a_03a8 (mem+0x3a8) /* where op#2 dmas in its data, at least 0x80 */ + +#define v_03fa mem[0x03fa] /* temp for ax0.h during exception */ +#define v_03fb mem[0x03fb] /* temp for ar0 during exception */ +#define v_03fc mem[0x03fc] /* temp for r08 during exception */ +#define v_03fd mem[0x03fd] /* temp for ac0.h during exception */ +#define v_03fe mem[0x03fe] /* temp for ac0.m during exception */ +#define v_03ff mem[0x03ff] /* temp for ac0.l during exception */ + +#define a_04e8 (mem+0x04e8) /* 4 element array */ +#define a_04ec (mem+0x04ec) /* 4 element array (empty) */ +#define a_04f0 (mem+0x04f0) /* 4 element array */ +#define a_04f4 (mem+0x04f4) /* 4 element array (empty) */ +#define a_04fc (mem+0x04fc) /* 16 element array, written by messages */ +#define a_09a0 (mem+0x09a0) /* 0x50 element array, used by op#2, cleared */ +#define a_0a00 (mem+0x0a00) /* 0x50 element array, used by op#2, cleared */ +#define a_0b00 (mem+0x0b00) /* array from 0x0b00-0x0bff, involves accelerator? */ +#define a_0ca0 (mem+0x0ca0) /* 0x50 element array, used by op#2, cleared */ +#define a_0d00 (mem+0x0d00) /* 0x50 element array, used by op#2, cleared */ +#define a_0d60 (mem+0x0d60) /* 0x50 element array, used by op#2, cleared */ +#define a_0f40 (mem+0x0f40) /* 0x50 element array, used by op#2, cleared */ + + + +/* reset exception vector 0x0000 */ +void main() { + /* JMP 0x0012 */ + /* various inits */ + SBCLR(5); /* disable interrupts? */ + fcn_0057(); /* init hardware stuff */ + for(ac1.m=0x1000,ac0.m=0;ac1.m>0;ac1.m--) mem[ac0.m++]=0; /* clear all vars */ + fcn_0688(); /* init some vars */ + fcn_04c0(); /* set something up related to the accelerator at a_0b00 */ + fcn_0e14(); /* set up a table */ + fcn_066a(0); /* send a message */ + fcn_0674(0x1111); /* send a message */ + v_034e=0; + SBSET(5); /* enable interrupts? */ + + /* jump to 0x06c5 */ +mainloop: + while (v_0352) ; /* while no messages pending */ + + SBCLR(5); /* do not distrub */ + v_0352--; /* important that this be atomic */ + SBSET(5); + + t=v_0351; + size=mem[t++]; + if (!(size&0x8000)) { /* size > 0x7fff invalid */ + if (size==0) { /* die on message of length 0? */ + /* jump to 0x06f5 */ + /* jump to 0x05f0 */ + + /* TODO: analysis of HALT */ + HALT(); + } + for (i=size,j=0;i>0;i--) { + a_0356[j++]=mem[t++]; + a_0356[j++]=mem[t++]; + } + v_0351=t; + + /* jump to 0x002f */ + /* actual command handling */ + v_0345=a_0356[1]; + v_0344=a_0356[0]&0x00ff; + v_0343=(a_0346[0]>>7)&0x7e; + + /* jump table at 0x75 used here */ + switch (v_0343>>1) { + + // 0x43 + case 0: + case 10: + case 11: + case 12: + case 14: + case 15: + /* invalid command? */ + config=0x00ff; + fcn_066a(0x04); /* send off a message */ + fcn_0674(a_0356[0]); /* send first word of command as a message */ + goto mainloop; + break; + case 1: + /* jmp 0x0095 */ + break; + + case 2: + /* jmp 0x0243 */ + sub_0243(); + break; + + case 3: + /* jmp 0x0073 */ + break; + + case 4: + /* jmp 0x580 */ + break; + + case 5: + /* jmp 0x592 */ + break; + + case 6: + /* jmp 0x469 */ + break; + + case 7: + /* jmp 0x41d */ + break; + + case 8: /* mix */ + /* jmp 0x0485 */ + fcn_0067(fcn_0067(0x0346)); /* read message twice? */ + /* take in the two buffers to mix */ + fcn_0525(mem[0x344],mem[0x346],mem[0x347],0x400); /* size, addrH, addrL, dsp addr */ + fcn_0525(mem[0x344],mem[0x348],mem[0x349],0x800); + S16(); /* saturate all adds, multiplies to 16 bits? */ + + i=mem[0x0344]; + src1=0x400; + src2=0x800; + scale=mem[0x345]; + + prod=scale*mem[src2++]; + val2=mem[src2++]; + do { + val1=mem[src1]; + val1+=prod; + prod=scale*val2; + mem[src1]=val1; + val2=mem[src2]; + src1++; + src2++; + } while (--i); + + S40(); + + /* dma out mixed buf */ + fcn_0523(mem[0x344],mem[0x346],mem[0x347],0x400); + + break; + + case 9: + /* jmp 0x44d */ + break; + + case 13: + /* jmp 0x00b2 */ + break; + } + } + + v_0351=t; + + goto mainloop; +} + +/* message in MBOX exception vector? 0x000e */ +void exception() { + /* JMP 0x05b8 */ + + SBCLR(5); + S40(); + /* save ax0.h,ac0.h,ac0.m, and ac0.l */ + + if ((tH=register_fffe)&0x8000) { /* CPU mailbox H */ + if (!(tsize=register_ffff)) { /* CPU mailbox L */ + /* empty message? */ + while (!((tH=register_fffe)&0x8000)) ; + tH&=0xf; + v_034e=(tH+1)<<4; + a_04fc[tH]=register_ffff; + } else { /* nonempty message? */ + /* jump to 0x0692 */ + /* save ar0, r08 */ + t=v_0350; + mem[t++]=tsize; + + do { + while (!((tH=register_fffe)&0x8000)) ; + mem[t++]=tH; + mem[t++]=register_ffff; + } while (--tsize); + + v_0350=t; + v_0352++; + /* restore ar0, r08 */ + + /* jump to 0x05e6 */ + } + } else { /* interrupt without message? */ + /* jump to 0x06b9 */ + /* save ar0, r08 */ + mem[v_0350]=0; /* empty message */ + /* jump to 0x06ab */ + v_0350++; + v_0352++; + /* restore ar0, r08 */ + + /* jump to 0x05e6 */ + } + + /* 0x05e6 */ + + /* restore ax0.h,ac0.h,ac0.m, and ac0.l */ + SBSET(5); + /* RTI */ +} + +/* set up some registers */ +void fcn_0057() { + SBCLR(2); + SBCLR(3); + SBCLR(4); + SBCLR(6); + S40(); /* 40-bit mode */ + CLR15(); + M0(); /* don't multiply result by 2 */ + r08=-1; + r09=-1; + r0a=-1; + r0b=-1; + config=0xff; +} + +void fcn_0688() { + v_0350=0x0280; + v_0351=0x0280; + v_0352=0; +} + +void fcn_04c0() { + config=0xff; + for(i=0xff,ar0=0xb00;i>0;i--) mem[ar0++]=0; + mem[ar0++]=0; /* get the last one */ + fcn_0573(0x0b00,0x0100,0); +} + +/* a=an address in ac1.m, l=a length in ar0, v=a value? in ac0.m */ +void fcn_0573(short a, short l, short v) { + fcn_0561(a,l,0x0001); +} + +/* a=an address in ac1.m, l=a length in ar0, v=a value? in ac0.m, f is a flag? in ac0.h */ +/* return is in ax0.h */ +short fcn_0561(short a, short l, short v, short f) { + register_ffd1=0x0a; /* unknown reg, accel? */ + register_ffd6=-1; /* accel end addr H */ + register_ffd7=-1; /* accel end addr L */ + register_ffd8=v>>1; /* + register_ffd9=?; /* has a value from way back? */ + + return f; +} + +/* initializes some tables that look useful... */ +void fcn_0e14() { + a_04e8[0]=0x8240; + a_04e8[1]=0x7fff; + a_04e8[2]=0x7dbf; + a_04e8[3]=0x843f; + a_04f0[0]=0xb23b; + a_04f0[1]=0x7fff; + a_04f0[2]=0x4dc4; + a_04f0[3]=0xd808; + a_04ec[0]=a_04ec[1]=a_04ec[2]=a_04ec[3]=0; + a_04f4[0]=a_04f4[1]=a_04f4[2]=a_04f4[3]=0; +} + +/* send a message via DSP MBOX */ +void fcn_066a(short m) { + fcn_0682(); /* wait for empty mbox */ + register_fffc=0xdcd1; + register_fffd=m; + register_fffb=1; /* IRQ */ + fcn_0682(); +} + +/* wait for dsp mbox empty */ +void fcn_0682() { + while (register_fffc&0x8000); +} + +void fcn_0674(short m) { + fcn_0682(); + register_fffc=0xf355; + register_fffd=m; + fcn_0682(); +} + +/* a=address in ar0 */ +/* fetch a message body (up to zero)? */ +short fcn_0067(short a) { + i=0x0357; + j=a; + do { + mem[j++]=mem[i++]; + mem[j++]=mem[i]; + } while (mem[i++]); + return a; +} + +/* dma in, I assume */ +/* size=words to transfer in ar0, addrL=low word of RAM address in ac0.l, addrH=high word of RAM address in ac0.m, dspaddr=dsp address in ac1.m */ +void fcn_0525(short size, short addrH, short addrL, short dspaddr) { + register_ffcd=dspaddr; /* dsp address */ + register_ffc9=0; /* direction: ram->dsp */ + register_ffce=addrH; /* memory address H */ + register_ffcf=addrL; /* memory address L */ + register_ffcb=size<<1; /* bytes to transfer (size must be in words) */ + fcn_0536(); /* dma wait */ +} + +/* dma wait? */ +void fcn_0536() { + while (!(register_ffc9&4)); +} + +/* dma out, I assume */ +/* size=words to transfer in ar0, addrL=low word of RAM address is ac0.l, addrH=high word of RAM address in ac0.m, dspaddr=dsp address in ac1.m */ +/* shares code with fcn_0525 */ +void fcn_0523(short size, short addrH, short addrL, shot dspaddr) { + register_ffcd=dspaddr; + /* jump back into 0525 */ + register_ffc9=1; /* direction dsp->ram */ + register_ffce=addrH; + register_ffcf=addrL; + register_ffcb=size<<1; + fcn_0536(); +} + +/* huge subroutine, op #2 */ +void sub_0243() { + fcn_0067(0x0388); /* called in an indirect manner... */ + v_0341=v_0344; /* low byte first word of message */ + v_038e=v_0345; + v_0355=0; + fcn_022a(); /* get stuffs */ + fcn_05a4(); /* write to accel */ + + for (i=v_0341;i>0i--) { + fcn_0102(); + + } +} + +void fcn_022a() { + /* something else must set 386, 387 */ + fcn_0525(0x0040,v_0386,v_0387,0x03a8); +} + +void fcn_05a4() { + register_ffd4=-1; + register_ffd5=-1; + register_ffd6=-1; + register_ffd7=-1; +} + +void fcn_0102() { + for (i=0;i<0x50;i++) a_0d00[i]=0; + for (i=0;i<0x50;i++) a_0d60[i]=0; + fcn_0e3f(); + for (i=0;i<0x50;i++) a_0ca0[i]=0; + for (i=0;i<0x50;i++) a_0f40[i]=0; + for (i=0;i<0x50;i++) a_0fa0[i]=0; + for (i=0;i<0x50;i++) a_0a00[i]=0; + for (i=0;i<0x50;i++) a_09a0[i]=0; +} + +void fcn_0e3f() { + fcn_00fa(0x0f40,0x0b00,0x50,0x6784); + fcn_0ba4(0x04e8,0x0b00,0x04ec); +} + +/* addr1=address in ar0, addr2=address in ar3, size=size of table at addr1 in ac1.m, val=in ax0.l */ +void fcn_00fa(short addr1, short addr2, short size, short val) { + M2(); /* all multiplications 2x */ + + tmp=mem[addr1++]; + prod=val*tmp*2; + tmp=mem[addr1++]; + ac0.m=prod; + prod=val*tmp*2; + tmp=mem[addr1++]; + + do { + ac0.m=prod; + prod=val*tmp*2; + mem[addr2]=ac0.m; + tmp=mem[addr1]; + addr1++; + addr2++; + } while (--size); + + M0(); +} + +/* addr1=address in ar0 (source 4 element table?), addr2=address in ar1 (accelerator?), addr3=address in ar2 (destination 4 element table?) */ +void fcn_00ba4(short addr1, short addr2, short addr3) { + } \ No newline at end of file