diff options
-rw-r--r-- | basys3/basys3.srcs/ppu_dispctl.vhd | 52 | ||||
-rw-r--r-- | basys3/basys3.srcs/ppu_pceg.vhd | 5 | ||||
-rw-r--r-- | basys3/basys3.srcs/ppu_sprite_bg.vhd | 11 | ||||
-rw-r--r-- | basys3/basys3.srcs/sources_1/ip/ppu_dispctl_pixclk/ppu_dispctl_pixclk.xci | 12 | ||||
-rw-r--r-- | basys3/basys3.xpr | 14 | ||||
-rw-r--r-- | basys3/ppu_tb_behav.wcfg | 29 | ||||
-rw-r--r-- | src/ds.c | 3 | ||||
-rw-r--r-- | src/main.c | 34 | ||||
-rw-r--r-- | src/makefile | 4 | ||||
-rw-r--r-- | src/ppu/stm.c | 19 | ||||
-rw-r--r-- | src/ppusim/sim.c | 1 | ||||
-rw-r--r-- | src/stm32/main.c | 5 | ||||
-rw-r--r-- | test/ppu-stm-integration-demo/data.h | 3 | ||||
-rw-r--r-- | test/ppu-stm-integration-demo/img.png | bin | 2438 -> 2473 bytes | |||
-rw-r--r-- | test/ppu-stm-integration-demo/test-image.txt | 2421 |
15 files changed, 1320 insertions, 1293 deletions
diff --git a/basys3/basys3.srcs/ppu_dispctl.vhd b/basys3/basys3.srcs/ppu_dispctl.vhd index 4f017f3..1465a58 100644 --- a/basys3/basys3.srcs/ppu_dispctl.vhd +++ b/basys3/basys3.srcs/ppu_dispctl.vhd @@ -57,28 +57,6 @@ begin ADDR_I <= std_logic_vector(resize(T_POS_X, ADDR_I'length)) when T_POS_Y(0) = '0' else std_logic_vector(resize(T_POS_X, ADDR_I'length) + PPU_SCREEN_WIDTH); T_POS_Y <= U_POS_Y; - -- tiny VCOUNT and HCOUNT - process(TPIXCLK, RESET) - variable TMP_T_POS_X : unsigned(PPU_SCREEN_T_POS_X_WIDTH-1 downto 0) := (others => '0'); - variable TMP_THBLANK, TMP_TVBLANK : std_logic := '0'; - begin - if RESET = '1' then - TMP_THBLANK := '0'; -- TODO - TMP_TVBLANK := '0'; -- TODO - elsif rising_edge(TPIXCLK) then - T_POS_X <= TMP_T_POS_X; - - THBLANK <= TMP_THBLANK; - TVBLANK <= TMP_TVBLANK; - - if NACTIVE = '1' then - TMP_T_POS_X := TMP_T_POS_X + 1; - if TMP_T_POS_X >= PPU_SCREEN_WIDTH then - TMP_T_POS_X := (others => '0'); - end if; - end if; - end if; - end process; X <= std_logic_vector(T_POS_X) when NACTIVE = '1' else (others => '0'); Y <= std_logic_vector(T_POS_Y) when NACTIVE = '1' else (others => '0'); @@ -92,26 +70,33 @@ begin GO <= DATA_O(7 downto 4) when NACTIVE = '1' else (others => '0'); BO <= DATA_O(3 downto 0) when NACTIVE = '1' else (others => '0'); - -- native (+upscaled) VCOUNT and HCOUNT - process(NPIXCLK, RESET) + -- tiny VCOUNT and HCOUNT + process(TPIXCLK, NPIXCLK, RESET) + variable TMP_T_POS_X : unsigned(PPU_SCREEN_T_POS_X_WIDTH-1 downto 0) := (others => '0'); + variable TMP_THBLANK, TMP_TVBLANK : std_logic := '0'; variable TMP_NHCOUNT, TMP_NVCOUNT : unsigned(PPU_VGA_SIGNAL_PIXEL_WIDTH-1 downto 0) := (others => '0'); variable TMP_NHACTIVE, TMP_NVACTIVE : std_logic := '0'; variable TMP_NHSYNC, TMP_NVSYNC : std_logic := '0'; + variable TMP_NACTIVE : std_logic := '0'; begin if RESET = '1' then TMP_NHCOUNT := (others => '0'); TMP_NVCOUNT := (others => '0'); TMP_NHACTIVE := '0'; TMP_NVACTIVE := '0'; + TMP_THBLANK := '0'; -- TODO + TMP_TVBLANK := '0'; -- TODO TMP_NVSYNC := '0'; TMP_NHSYNC := '0'; - elsif rising_edge(NPIXCLK) then + end if; + -- native (+upscaled) VCOUNT and HCOUNT + if rising_edge(NPIXCLK) then -- sync write (needs to be here to happen on rising edge) NVCOUNT <= TMP_NVCOUNT; NHCOUNT <= TMP_NHCOUNT; NHACTIVE <= TMP_NHACTIVE; NVACTIVE <= TMP_NVACTIVE; - NACTIVE <= TMP_NHACTIVE and TMP_NVACTIVE; + NACTIVE <= TMP_NACTIVE; NVSYNC <= TMP_NVSYNC; NHSYNC <= TMP_NHSYNC; N_POS_X <= resize(TMP_NHCOUNT - PPU_VGA_H_PORCH_BACK, N_POS_X'length) when TMP_NHACTIVE = '1' else (others => '0'); @@ -140,11 +125,26 @@ begin -- horizontal display area (active) if TMP_NHCOUNT = PPU_VGA_H_PORCH_BACK then TMP_NHACTIVE := '1'; end if; if TMP_NHCOUNT = PPU_VGA_H_PORCH_BACK + PPU_VGA_H_ACTIVE then TMP_NHACTIVE := '0'; end if; + TMP_NACTIVE := TMP_NHACTIVE and TMP_NVACTIVE; -- horizontal sync period if TMP_NHCOUNT = PPU_VGA_H_PORCH_BACK + PPU_VGA_H_ACTIVE then TMP_NHSYNC := '1'; end if; if TMP_NHCOUNT = PPU_VGA_H_PORCH_BACK + PPU_VGA_H_ACTIVE + PPU_VGA_H_SYNC then TMP_NHSYNC := '0'; end if; end if; + + if falling_edge(TPIXCLK) then -- NOTE: falling edge used because of clock offset of 90 (should be 270) + T_POS_X <= TMP_T_POS_X; + + THBLANK <= TMP_THBLANK; + TVBLANK <= TMP_TVBLANK; + + if TMP_NACTIVE = '1' then + TMP_T_POS_X := TMP_T_POS_X + 1; + if TMP_T_POS_X >= PPU_SCREEN_WIDTH then + TMP_T_POS_X := (others => '0'); + end if; + end if; + end if; end process; ACTIVE <= NACTIVE; diff --git a/basys3/basys3.srcs/ppu_pceg.vhd b/basys3/basys3.srcs/ppu_pceg.vhd index 3de3d23..67b7e1c 100644 --- a/basys3/basys3.srcs/ppu_pceg.vhd +++ b/basys3/basys3.srcs/ppu_pceg.vhd @@ -13,6 +13,7 @@ entity ppu_pceg is port( end ppu_pceg; architecture Behavioral of ppu_pceg is + signal CLK_IDX_T : natural range 0 to PPU_PCEG_TOTAL_STAGES+1 := 0; begin process(CLK, RESET) variable CLK_IDX : natural range 0 to PPU_PCEG_TOTAL_STAGES+1 := 0; @@ -24,7 +25,7 @@ begin SPRITE_FG <= PL_FG_IDLE; DONE <= '0'; READY <= '0'; - elsif rising_edge(CLK) then + elsif falling_edge(CLK) then case CLK_IDX is when 0 => DONE <= '0'; @@ -60,6 +61,8 @@ begin if CLK_IDX = PPU_PCEG_TOTAL_STAGES then CLK_IDX := 0; end if; + + CLK_IDX_T <= CLK_IDX; end if; end process; end Behavioral; diff --git a/basys3/basys3.srcs/ppu_sprite_bg.vhd b/basys3/basys3.srcs/ppu_sprite_bg.vhd index 1a91b5e..cc9c24b 100644 --- a/basys3/basys3.srcs/ppu_sprite_bg.vhd +++ b/basys3/basys3.srcs/ppu_sprite_bg.vhd @@ -62,13 +62,14 @@ architecture Behavioral of ppu_sprite_bg is signal PIXEL_BIT_OFFSET : integer := 0; -- pixel index within word of TMM signal TMM_DATA_PAL_IDX : std_logic_vector(PPU_PALETTE_COLOR_WIDTH-1 downto 0); -- color of palette signal T_CIDX : std_logic_vector(PPU_PALETTE_CIDX_WIDTH-1 downto 0) := (others => '0'); -- output color buffer/register + signal BAM_ADDR_EN, TMM_ADDR_EN : boolean := false; begin -- output drivers CIDX <= T_CIDX when OE = '1' else (others => 'Z'); - BAM_ADDR <= R_BAM_ADDR when PL_STAGE = PL_BG_BAM_ADDR else (others => 'Z'); - TMM_ADDR <= R_TMM_ADDR when PL_STAGE = PL_BG_TMM_ADDR else (others => 'Z'); T_BAM_DATA <= BAM_DATA; T_TMM_DATA <= TMM_DATA; + BAM_ADDR <= R_BAM_ADDR when BAM_ADDR_EN else (others => 'Z'); + TMM_ADDR <= R_TMM_ADDR when TMM_ADDR_EN else (others => 'Z'); -- CIDX combination T_CIDX <= BAM_DATA_COL_IDX & TMM_DATA_PAL_IDX; @@ -115,6 +116,12 @@ begin R_TMM_ADDR <= (others => '0'); R_TMM_DATA <= (others => '0'); elsif rising_edge(CLK) then + BAM_ADDR_EN <= true when PL_STAGE = PL_BG_BAM_ADDR else false; + TMM_ADDR_EN <= true when PL_STAGE = PL_BG_TMM_ADDR else false; + -- R_BAM_ADDR <= T_BAM_ADDR; + -- R_BAM_DATA <= T_BAM_DATA; + -- R_TMM_ADDR <= T_TMM_ADDR; + -- R_TMM_DATA <= T_TMM_DATA; case PL_STAGE is when PL_BG_BAM_ADDR => R_BAM_ADDR <= T_BAM_ADDR; diff --git a/basys3/basys3.srcs/sources_1/ip/ppu_dispctl_pixclk/ppu_dispctl_pixclk.xci b/basys3/basys3.srcs/sources_1/ip/ppu_dispctl_pixclk/ppu_dispctl_pixclk.xci index 2e48660..064d3ff 100644 --- a/basys3/basys3.srcs/sources_1/ip/ppu_dispctl_pixclk/ppu_dispctl_pixclk.xci +++ b/basys3/basys3.srcs/sources_1/ip/ppu_dispctl_pixclk/ppu_dispctl_pixclk.xci @@ -88,7 +88,7 @@ "CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], "CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], "CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "6.25", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], - "CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_REQUESTED_PHASE": [ { "value": "90.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], "CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], "CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], "CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], @@ -173,7 +173,7 @@ "MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], "MMCM_CLKOUT1_DIVIDE": [ { "value": "128", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], "MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], - "MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT1_PHASE": [ { "value": "90.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], "MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], "MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], "MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], @@ -339,7 +339,7 @@ "C_OUTCLK_SUM_ROW0A": [ { "value": " Output Output Phase Duty Cycle Pk-to-Pk Phase", "resolve_type": "generated", "usage": "all" } ], "C_OUTCLK_SUM_ROW0B": [ { "value": " Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)", "resolve_type": "generated", "usage": "all" } ], "C_OUTCLK_SUM_ROW1": [ { "value": "__npxclk__25.00000______0.000______50.0______191.696____114.212", "resolve_type": "generated", "usage": "all" } ], - "C_OUTCLK_SUM_ROW2": [ { "value": "__tpxclk___6.25000______0.000______50.0______251.196____114.212", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW2": [ { "value": "__tpxclk___6.25000_____90.000______50.0______251.196____114.212", "resolve_type": "generated", "usage": "all" } ], "C_OUTCLK_SUM_ROW3": [ { "value": "no_CLK_OUT3_output", "resolve_type": "generated", "usage": "all" } ], "C_OUTCLK_SUM_ROW4": [ { "value": "no_CLK_OUT4_output", "resolve_type": "generated", "usage": "all" } ], "C_OUTCLK_SUM_ROW5": [ { "value": "no_CLK_OUT5_output", "resolve_type": "generated", "usage": "all" } ], @@ -353,7 +353,7 @@ "C_CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], - "C_CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_REQUESTED_PHASE": [ { "value": "90.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], @@ -374,7 +374,7 @@ "C_CLKOUT6_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT7_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], - "C_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_PHASE": [ { "value": "90.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], @@ -424,7 +424,7 @@ "C_MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], - "C_MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT1_PHASE": [ { "value": "90.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], "C_MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], diff --git a/basys3/basys3.xpr b/basys3/basys3.xpr index b4e930e..8645fca 100644 --- a/basys3/basys3.xpr +++ b/basys3/basys3.xpr @@ -60,20 +60,20 @@ <Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/> <Option Name="EnableBDX" Val="FALSE"/> <Option Name="DSABoardId" Val="basys3"/> - <Option Name="WTXSimLaunchSim" Val="62"/> + <Option Name="WTXSimLaunchSim" Val="86"/> <Option Name="WTModelSimLaunchSim" Val="0"/> <Option Name="WTQuestaLaunchSim" Val="0"/> <Option Name="WTIesLaunchSim" Val="0"/> <Option Name="WTVcsLaunchSim" Val="0"/> <Option Name="WTRivieraLaunchSim" Val="0"/> <Option Name="WTActivehdlLaunchSim" Val="0"/> - <Option Name="WTXSimExportSim" Val="4"/> - <Option Name="WTModelSimExportSim" Val="4"/> - <Option Name="WTQuestaExportSim" Val="4"/> + <Option Name="WTXSimExportSim" Val="6"/> + <Option Name="WTModelSimExportSim" Val="6"/> + <Option Name="WTQuestaExportSim" Val="6"/> <Option Name="WTIesExportSim" Val="0"/> - <Option Name="WTVcsExportSim" Val="4"/> - <Option Name="WTRivieraExportSim" Val="4"/> - <Option Name="WTActivehdlExportSim" Val="4"/> + <Option Name="WTVcsExportSim" Val="6"/> + <Option Name="WTRivieraExportSim" Val="6"/> + <Option Name="WTActivehdlExportSim" Val="6"/> <Option Name="GenerateIPUpgradeLog" Val="TRUE"/> <Option Name="XSimRadix" Val="hex"/> <Option Name="XSimTimeUnit" Val="ns"/> diff --git a/basys3/ppu_tb_behav.wcfg b/basys3/ppu_tb_behav.wcfg index 085f335..afd33be 100644 --- a/basys3/ppu_tb_behav.wcfg +++ b/basys3/ppu_tb_behav.wcfg @@ -13,18 +13,19 @@ </db_ref> </db_ref_list> <zoom_setting> - <ZoomStartTime time="924.298300 us"></ZoomStartTime> - <ZoomEndTime time="943.298301 us"></ZoomEndTime> - <Cursor1Time time="932.318300 us"></Cursor1Time> + <ZoomStartTime time="925.165500 us"></ZoomStartTime> + <ZoomEndTime time="937.055501 us"></ZoomEndTime> + <Cursor1Time time="930.945500 us"></Cursor1Time> </zoom_setting> <column_width_setting> - <NameColumnWidth column_width="167"></NameColumnWidth> - <ValueColumnWidth column_width="149"></ValueColumnWidth> + <NameColumnWidth column_width="243"></NameColumnWidth> + <ValueColumnWidth column_width="145"></ValueColumnWidth> </column_width_setting> <WVObjectSize size="6" /> <wvobject type="group" fp_name="group136"> <obj_property name="label">clks</obj_property> <obj_property name="DisplayName">label</obj_property> + <obj_property name="isExpanded"></obj_property> <wvobject type="logic" fp_name="/ppu_tb/uut/CLK100"> <obj_property name="ElementShortName">CLK100</obj_property> <obj_property name="ObjectShortName">CLK100</obj_property> @@ -34,8 +35,10 @@ <obj_property name="ObjectShortName">NPIXCLK</obj_property> </wvobject> <wvobject type="logic" fp_name="/ppu_tb/uut/display_controller/TPIXCLK"> + <obj_property name="DisplayName">label</obj_property> <obj_property name="ElementShortName">TPIXCLK</obj_property> <obj_property name="ObjectShortName">TPIXCLK</obj_property> + <obj_property name="label">TPIXCLK</obj_property> </wvobject> </wvobject> <wvobject type="group" fp_name="group150"> @@ -281,10 +284,7 @@ <wvobject type="array" fp_name="/ppu_tb/uut/background_sprite/TMM_DATA"> <obj_property name="ElementShortName">TMM_DATA[14:0]</obj_property> <obj_property name="ObjectShortName">TMM_DATA[14:0]</obj_property> - </wvobject> - <wvobject type="array" fp_name="/ppu_tb/uut/background_sprite/CIDX"> - <obj_property name="ElementShortName">CIDX[5:0]</obj_property> - <obj_property name="ObjectShortName">CIDX[5:0]</obj_property> + <obj_property name="Radix">HEXRADIX</obj_property> </wvobject> <wvobject type="array" fp_name="/ppu_tb/uut/background_sprite/T_BAM_ADDR"> <obj_property name="ElementShortName">T_BAM_ADDR[10:0]</obj_property> @@ -366,10 +366,14 @@ <obj_property name="ElementShortName">TMM_DATA_PAL_IDX[2:0]</obj_property> <obj_property name="ObjectShortName">TMM_DATA_PAL_IDX[2:0]</obj_property> </wvobject> + <wvobject type="array" fp_name="/ppu_tb/uut/background_sprite/CIDX"> + <obj_property name="ElementShortName">CIDX[5:0]</obj_property> + <obj_property name="ObjectShortName">CIDX[5:0]</obj_property> + <obj_property name="isExpanded"></obj_property> + </wvobject> <wvobject type="array" fp_name="/ppu_tb/uut/background_sprite/T_CIDX"> <obj_property name="ElementShortName">T_CIDX[5:0]</obj_property> <obj_property name="ObjectShortName">T_CIDX[5:0]</obj_property> - <obj_property name="isExpanded"></obj_property> </wvobject> </wvobject> <wvobject type="group" fp_name="group142"> @@ -403,6 +407,7 @@ <wvobject type="group" fp_name="group276"> <obj_property name="label">active</obj_property> <obj_property name="DisplayName">label</obj_property> + <obj_property name="isExpanded"></obj_property> <wvobject type="logic" fp_name="/ppu_tb/uut/display_controller/NACTIVE"> <obj_property name="ElementShortName">NACTIVE</obj_property> <obj_property name="ObjectShortName">NACTIVE</obj_property> @@ -461,6 +466,10 @@ <obj_property name="ElementShortName">READY</obj_property> <obj_property name="ObjectShortName">READY</obj_property> </wvobject> + <wvobject type="other" fp_name="/ppu_tb/uut/pipeline_clock_edge_generator/CLK_IDX_T"> + <obj_property name="ElementShortName">CLK_IDX_T</obj_property> + <obj_property name="ObjectShortName">CLK_IDX_T</obj_property> + </wvobject> </wvobject> <wvobject type="group" fp_name="group126"> <obj_property name="label">aux</obj_property> @@ -1,11 +1,8 @@ -#include "demo.h" #include "main.h" #include "ppu/ppu.h" void hh_setup() { hh_ppu_init(); - - hh_demo_setup(); } void hh_exit() { @@ -1,36 +1,22 @@ #include <stdlib.h> -#include <stm32f0xx_hal.h> #include "main.h" -#include "stm32/setup.h" #include "../test/ppu-stm-integration-demo/data.h" +#include "ppu/internals.h" bool g_hh_run = true; -int main() { - hh_setup(); - - while (1) { - for (unsigned long i = 0; i < HH_PPUINTDEMO_LENGTH; i++) { - uint16_t addr = HH_PPUINTDEMO_ADDR[i]; - uint16_t data = HH_PPUINTDEMO_DATA[i]; - - uint8_t spi_data[4] = { - (addr & 0xff00) >> 8, - (addr & 0x00ff) >> 0, - (data & 0xff00) >> 8, - (data & 0x00ff) >> 0, - }; - - HAL_SPI_Transmit(&hspi1, spi_data, 4, HAL_MAX_DELAY); - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, true); - // HAL_Delay(1); - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, false); - // HAL_Delay(1); - } - HAL_Delay(1e3); +void hh_ppu_vblank_interrupt() { + for (unsigned long i = 0; i < HH_PPUINTDEMO_LENGTH; i++) { + uint16_t addr = HH_PPUINTDEMO_ADDR[i]; + uint16_t data = HH_PPUINTDEMO_DATA[i]; + hh_ppu_vram_dwrite(addr, data); } +} +int main() { + hh_setup(); + hh_loop(); hh_exit(); return 0; } diff --git a/src/makefile b/src/makefile index e2fc1d3..bbd859e 100644 --- a/src/makefile +++ b/src/makefile @@ -27,7 +27,9 @@ LFLAGS += -lm CFLAGS += $(if $(STM), -DHH_TARGET_STM32, ) CFLAGS += $(if $(DESKTOP), -DHH_TARGET_DESKTOP, ) -LOCAL_SRCS += main.c +LOCAL_SRCS += ppu/internals.c \ + ppu/ppu.c \ + main.c CFLAGS += $(SHARED_FLAGS) LFLAGS += $(SHARED_FLAGS) diff --git a/src/ppu/stm.c b/src/ppu/stm.c index fd4a18c..371e557 100644 --- a/src/ppu/stm.c +++ b/src/ppu/stm.c @@ -1,4 +1,23 @@ +#include <stm32f0xx_hal.h> + #include "ppu/ppu.h" +#include "ppu/internals.h" +#include "stm32/setup.h" void hh_ppu_init() {} void hh_ppu_deinit() {} + +void hh_ppu_vram_dwrite(hh_ppu_addr_t addr, hh_ppu_data_t data) { + // if (!hh_ppu_vram_valid_address(addr)) return; + + uint8_t spi_data[4] = { + (addr & 0xff00) >> 8, + (addr & 0x00ff) >> 0, + (data & 0xff00) >> 8, + (data & 0x00ff) >> 0, + }; + + HAL_SPI_Transmit(&hspi1, spi_data, 4, HAL_MAX_DELAY); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, true); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, false); +} diff --git a/src/ppusim/sim.c b/src/ppusim/sim.c index a5fec45..be5fbeb 100644 --- a/src/ppusim/sim.c +++ b/src/ppusim/sim.c @@ -25,7 +25,6 @@ void hh_ppu_init() { g_hh_ppusim_vram = malloc(sizeof(hh_ppu_data_t) * 0xffff); memset(g_hh_ppusim_vram, 0x0000, 0xffff); - hh_ppu_load_tilemap(); } void hh_ppu_load_tilemap() { diff --git a/src/stm32/main.c b/src/stm32/main.c index d381d35..84288c3 100644 --- a/src/stm32/main.c +++ b/src/stm32/main.c @@ -1,8 +1,11 @@ +#include <stm32f0xx_hal.h> + #include "main.h" #include "ppu/ppu.h" void hh_ppu_load_tilemap() {} void hh_loop() { - while(g_hh_run); + HAL_Delay(1e3); + hh_ppu_vblank_interrupt(); } diff --git a/test/ppu-stm-integration-demo/data.h b/test/ppu-stm-integration-demo/data.h index a1e3097..ac73e66 100644 --- a/test/ppu-stm-integration-demo/data.h +++ b/test/ppu-stm-integration-demo/data.h @@ -1,4 +1,5 @@ #pragma once -#include "test-image.h" +// #include "test-image.h" +#include "test-background-color.h" diff --git a/test/ppu-stm-integration-demo/img.png b/test/ppu-stm-integration-demo/img.png Binary files differindex 449d8ec..6926a8b 100644 --- a/test/ppu-stm-integration-demo/img.png +++ b/test/ppu-stm-integration-demo/img.png diff --git a/test/ppu-stm-integration-demo/test-image.txt b/test/ppu-stm-integration-demo/test-image.txt index 4384a33..a781f8a 100644 --- a/test/ppu-stm-integration-demo/test-image.txt +++ b/test/ppu-stm-integration-demo/test-image.txt @@ -103,1219 +103,1220 @@ 0066: 0200 0067: 0000 dc01: 0444 -d001: 5f5a -d002: 5f5a -d003: 5f5a -d004: 5f5a -d005: 5f5a -d006: 5f5a -d007: 5f5a -d008: 5f5a -d009: 5f5a -d00a: 5f5a -d00b: 5f5a -d00c: 5f5a -d00d: 5f5a -d00e: 5f5a -d00f: 5f5a -d010: 5f5a -d011: 5f5a -d012: 5f5a -d013: 5f5a -d014: 5f5a -d015: 5f5a -d016: 5f5a -d017: 5f5a -d018: 5f5a -d019: 5f5a -d01a: 5f5a -d01b: 5f5a -d01c: 5f5a -d01d: 5f5a -d01e: 5f5a -d01f: 5f5a -d020: 5f5a -d021: 5f5a -d022: 5f5a -d023: 5f5a -d024: 5f5a -d025: 5f5a -d026: 5f5a -d027: 5f5a -d028: 5f5a -d029: 5f5a -d02a: 5f5a -d02b: 5f5a -d02c: 5f5a -d02d: 5f5a -d02e: 5f5a -d02f: 5f5a -d030: 5f5a -d031: 5f5a -d032: 5f5a -d033: 5f5a -d034: 5f5a -d035: 5f5a -d036: 5f5a -d037: 5f5a -d038: 5f5a -d039: 5f5a -d03a: 5f5a -d03b: 5f5a -d03c: 5f5a -d03d: 5f5a -d03e: 5f5a -d03f: 5f5a -d040: 5f5a -d041: 5f5a -d042: 5f5a -d043: 5f5a -d044: 5f5a -d045: 5f5a -d046: 5f5a -d047: 5f5a -d048: 5f5a -d049: 5f5a -d04a: 5f5a -d04b: 5f5a -d04c: 5f5a -d04d: 5f5a -d04e: 5f5a -d04f: 5f5a -d050: 5f5a -d051: 5f5a -d052: 5f5a -d053: 5f5a -d054: 5f5a -d055: 5f5a -d056: 5f5a -d057: 5f5a -d058: 5f5a -d059: 5f5a -d05a: 5f5a -d05b: 5f5a -d05c: 5f5a -d05d: 5f5a -d05e: 5f5a -d05f: 5f5a -d060: 5f5a -d061: 5f5a -d062: 5f5a -d063: 5f5a -d064: 5f5a -d065: 5f5a -d066: 5f5a -d067: 5f5a -d068: 5f5a -d069: 5f5a -d06a: 5f5a -d06b: 5f5a -d06c: 5f5a -d06d: 5f5a -d06e: 5f5a -d06f: 5f5a -d070: 5f5a -d071: 5f5a -d072: 5f5a -d073: 5f5a -d074: 5f5a -d075: 5f5a -d076: 5f5a -d077: 5f5a -d078: 5f5a -d079: 5f5a -d07a: 5f5a -d07b: 5f5a -d07c: 5f5a -d07d: 5f5a -d07e: 5f5a -d07f: 5f5a -d080: 5f5a -d081: 5f5a -d082: 5f5a -d083: 5f5a -d084: 5f5a -d085: 5f5a -d086: 5f5a -d087: 5f5a -d088: 5f5a -d089: 5f5a -d08a: 5f5a -d08b: 5f5a -d08c: 5f5a -d08d: 5f5a -d08e: 5f5a -d08f: 5f5a -d090: 5f5a -d091: 5f5a -d092: 5f5a -d093: 5f5a -d094: 5f5a -d095: 5f5a -d096: 5f5a -d097: 5f5a -d098: 5f5a -d099: 5f5a -d09a: 5f5a -d09b: 5f5a -d09c: 5f5a -d09d: 5f5a -d09e: 5f5a -d09f: 5f5a -d0a0: 5f5a -d0a1: 5f5a -d0a2: 5f5a -d0a3: 5f5a -d0a4: 5f5a -d0a5: 5f5a -d0a6: 5f5a -d0a7: 5f5a -d0a8: 5f5a -d0a9: 5f5a -d0aa: 5f5a -d0ab: 5f5a -d0ac: 5f5a -d0ad: 5f5a -d0ae: 5f5a -d0af: 5f5a -d0b0: 5f5a -d0b1: 5f5a -d0b2: 5f5a -d0b3: 5f5a -d0b4: 5f5a -d0b5: 5f5a -d0b6: 5f5a -d0b7: 5f5a -d0b8: 5f5a -d0b9: 5f5a -d0ba: 5f5a -d0bb: 5f5a -d0bc: 5f5a -d0bd: 5f5a -d0be: 5f5a -d0bf: 5f5a -d0c0: 5f5a -d0c1: 5f5a -d0c2: 5f5a -d0c3: 5f5a -d0c4: 5f5a -d0c5: 5f5a -d0c6: 5f5a -d0c7: 5f5a -d0c8: 5f5a -d0c9: 5f5a -d0ca: 5f5a -d0cb: 5f5a -d0cc: 5f5a -d0cd: 5f5a -d0ce: 5f5a -d0cf: 5f5a -d0d0: 5f5a -d0d1: 5f5a -d0d2: 5f5a -d0d3: 5f5a -d0d4: 5f5a -d0d5: 5f5a -d0d6: 5f5a -d0d7: 5f5a -d0d8: 5f5a -d0d9: 5f5a -d0da: 5f5a -d0db: 5f5a -d0dc: 5f5a -d0dd: 5f5a -d0de: 5f5a -d0df: 5f5a -d0e0: 5f5a -d0e1: 5f5a -d0e2: 5f5a -d0e3: 5f5a -d0e4: 5f5a -d0e5: 5f5a -d0e6: 5f5a -d0e7: 5f5a -d0e8: 5f5a -d0e9: 5f5a -d0ea: 5f5a -d0eb: 5f5a -d0ec: 5f5a -d0ed: 5f5a -d0ee: 5f5a -d0ef: 5f5a -d0f0: 5f5a -d0f1: 5f5a -d0f2: 5f5a -d0f3: 5f5a -d0f4: 5f5a -d0f5: 5f5a -d0f6: 5f5a -d0f7: 5f5a -d0f8: 5f5a -d0f9: 5f5a -d0fa: 5f5a -d0fb: 5f5a -d0fc: 5f5a -d0fd: 5f5a -d0fe: 5f5a -d0ff: 5f5a -d100: 5f5a -d101: 5f5a -d102: 5f5a -d103: 5f5a -d104: 5f5a -d105: 5f5a -d106: 5f5a -d107: 5f5a -d108: 5f5a -d109: 5f5a -d10a: 5f5a -d10b: 5f5a -d10c: 5f5a -d10d: 5f5a -d10e: 5f5a -d10f: 5f5a -d110: 5f5a -d111: 5f5a -d112: 5f5a -d113: 5f5a -d114: 5f5a -d115: 5f5a -d116: 5f5a -d117: 5f5a -d118: 5f5a -d119: 5f5a -d11a: 5f5a -d11b: 5f5a -d11c: 5f5a -d11d: 5f5a -d11e: 5f5a -d11f: 5f5a -d120: 5f5a -d121: 5f5a -d122: 5f5a -d123: 5f5a -d124: 5f5a -d125: 5f5a -d126: 5f5a -d127: 5f5a -d128: 5f5a -d129: 5f5a -d12a: 5f5a -d12b: 5f5a -d12c: 5f5a -d12d: 5f5a -d12e: 5f5a -d12f: 5f5a -d130: 5f5a -d131: 5f5a -d132: 5f5a -d133: 5f5a -d134: 5f5a -d135: 5f5a -d136: 5f5a -d137: 5f5a -d138: 5f5a -d139: 5f5a -d13a: 5f5a -d13b: 5f5a -d13c: 5f5a -d13d: 5f5a -d13e: 5f5a -d13f: 5f5a -d140: 5f5a -d141: 5f5a -d142: 5f5a -d143: 5f5a -d144: 5f5a -d145: 5f5a -d146: 5f5a -d147: 5f5a -d148: 5f5a -d149: 5f5a -d14a: 5f5a -d14b: 5f5a -d14c: 5f5a -d14d: 5f5a -d14e: 5f5a -d14f: 5f5a -d150: 5f5a -d151: 5f5a -d152: 5f5a -d153: 5f5a -d154: 5f5a -d155: 5f5a -d156: 5f5a -d157: 5f5a -d158: 5f5a -d159: 5f5a -d15a: 5f5a -d15b: 5f5a -d15c: 5f5a -d15d: 5f5a -d15e: 5f5a -d15f: 5f5a -d160: 5f5a -d161: 5f5a -d162: 5f5a -d163: 5f5a -d164: 5f5a -d165: 5f5a -d166: 5f5a -d167: 5f5a -d168: 5f5a -d169: 5f5a -d16a: 5f5a -d16b: 5f5a -d16c: 5f5a -d16d: 5f5a -d16e: 5f5a -d16f: 5f5a -d170: 5f5a -d171: 5f5a -d172: 5f5a -d173: 5f5a -d174: 5f5a -d175: 5f5a -d176: 5f5a -d177: 5f5a -d178: 5f5a -d179: 5f5a -d17a: 5f5a -d17b: 5f5a -d17c: 5f5a -d17d: 5f5a -d17e: 5f5a -d17f: 5f5a -d180: 5f5a -d181: 5f5a -d182: 5f5a -d183: 5f5a -d184: 5f5a -d185: 5f5a -d186: 5f5a -d187: 5f5a -d188: 5f5a -d189: 5f5a -d18a: 5f5a -d18b: 5f5a -d18c: 5f5a -d18d: 5f5a -d18e: 5f5a -d18f: 5f5a -d190: 5f5a -d191: 5f5a -d192: 5f5a -d193: 5f5a -d194: 5f5a -d195: 5f5a -d196: 5f5a -d197: 5f5a -d198: 5f5a -d199: 5f5a -d19a: 5f5a -d19b: 5f5a -d19c: 5f5a -d19d: 5f5a -d19e: 5f5a -d19f: 5f5a -d1a0: 5f5a -d1a1: 5f5a -d1a2: 5f5a -d1a3: 5f5a -d1a4: 5f5a -d1a5: 5f5a -d1a6: 5f5a -d1a7: 5f5a -d1a8: 5f5a -d1a9: 5f5a -d1aa: 5f5a -d1ab: 5f5a -d1ac: 5f5a -d1ad: 5f5a -d1ae: 5f5a -d1af: 5f5a -d1b0: 5f5a -d1b1: 5f5a -d1b2: 5f5a -d1b3: 5f5a -d1b4: 5f5a -d1b5: 5f5a -d1b6: 5f5a -d1b7: 5f5a -d1b8: 5f5a -d1b9: 5f5a -d1ba: 5f5a -d1bb: 5f5a -d1bc: 5f5a -d1bd: 5f5a -d1be: 5f5a -d1bf: 5f5a -d1c0: 5f5a -d1c1: 5f5a -d1c2: 5f5a -d1c3: 5f5a -d1c4: 5f5a -d1c5: 5f5a -d1c6: 5f5a -d1c7: 5f5a -d1c8: 5f5a -d1c9: 5f5a -d1ca: 5f5a -d1cb: 5f5a -d1cc: 5f5a -d1cd: 5f5a -d1ce: 5f5a -d1cf: 5f5a -d1d0: 5f5a -d1d1: 5f5a -d1d2: 5f5a -d1d3: 5f5a -d1d4: 5f5a -d1d5: 5f5a -d1d6: 5f5a -d1d7: 5f5a -d1d8: 5f5a -d1d9: 5f5a -d1da: 5f5a -d1db: 5f5a -d1dc: 5f5a -d1dd: 5f5a -d1de: 5f5a -d1df: 5f5a -d1e0: 5f5a -d1e1: 5f5a -d1e2: 5f5a -d1e3: 5f5a -d1e4: 5f5a -d1e5: 5f5a -d1e6: 5f5a -d1e7: 5f5a -d1e8: 5f5a -d1e9: 5f5a -d1ea: 5f5a -d1eb: 5f5a -d1ec: 5f5a -d1ed: 5f5a -d1ee: 5f5a -d1ef: 5f5a -d1f0: 5f5a -d1f1: 5f5a -d1f2: 5f5a -d1f3: 5f5a -d1f4: 5f5a -d1f5: 5f5a -d1f6: 5f5a -d1f7: 5f5a -d1f8: 5f5a -d1f9: 5f5a -d1fa: 5f5a -d1fb: 5f5a -d1fc: 5f5a -d1fd: 5f5a -d1fe: 5f5a -d1ff: 5f5a -d200: 5f5a -d201: 5f5a -d202: 5f5a -d203: 5f5a -d204: 5f5a -d205: 5f5a -d206: 5f5a -d207: 5f5a -d208: 5f5a -d209: 5f5a -d20a: 5f5a -d20b: 5f5a -d20c: 5f5a -d20d: 5f5a -d20e: 5f5a -d20f: 5f5a -d210: 5f5a -d211: 5f5a -d212: 5f5a -d213: 5f5a -d214: 5f5a -d215: 5f5a -d216: 5f5a -d217: 5f5a -d218: 5f5a -d219: 5f5a -d21a: 5f5a -d21b: 5f5a -d21c: 5f5a -d21d: 5f5a -d21e: 5f5a -d21f: 5f5a -d220: 5f5a -d221: 5f5a -d222: 5f5a -d223: 5f5a -d224: 5f5a -d225: 5f5a -d226: 5f5a -d227: 5f5a -d228: 5f5a -d229: 5f5a -d22a: 5f5a -d22b: 5f5a -d22c: 5f5a -d22d: 5f5a -d22e: 5f5a -d22f: 5f5a -d230: 5f5a -d231: 5f5a -d232: 5f5a -d233: 5f5a -d234: 5f5a -d235: 5f5a -d236: 5f5a -d237: 5f5a -d238: 5f5a -d239: 5f5a -d23a: 5f5a -d23b: 5f5a -d23c: 5f5a -d23d: 5f5a -d23e: 5f5a -d23f: 5f5a -d240: 5f5a -d241: 5f5a -d242: 5f5a -d243: 5f5a -d244: 5f5a -d245: 5f5a -d246: 5f5a -d247: 5f5a -d248: 5f5a -d249: 5f5a -d24a: 5f5a -d24b: 5f5a -d24c: 5f5a -d24d: 5f5a -d24e: 5f5a -d24f: 5f5a -d250: 5f5a -d251: 5f5a -d252: 5f5a -d253: 5f5a -d254: 5f5a -d255: 5f5a -d256: 5f5a -d257: 5f5a -d258: 5f5a -d259: 5f5a -d25a: 5f5a -d25b: 5f5a -d25c: 5f5a -d25d: 5f5a -d25e: 5f5a -d25f: 5f5a -d260: 5f5a -d261: 5f5a -d262: 5f5a -d263: 5f5a -d264: 5f5a -d265: 5f5a -d266: 5f5a -d267: 5f5a -d268: 5f5a -d269: 5f5a -d26a: 5f5a -d26b: 5f5a -d26c: 5f5a -d26d: 5f5a -d26e: 5f5a -d26f: 5f5a -d270: 5f5a -d271: 5f5a -d272: 5f5a -d273: 5f5a -d274: 5f5a -d275: 5f5a -d276: 5f5a -d277: 5f5a -d278: 5f5a -d279: 5f5a -d27a: 5f5a -d27b: 5f5a -d27c: 5f5a -d27d: 5f5a -d27e: 5f5a -d27f: 5f5a -d280: 5f5a -d281: 5f5a -d282: 5f5a -d283: 5f5a -d284: 5f5a -d285: 5f5a -d286: 5f5a -d287: 5f5a -d288: 5f5a -d289: 5f5a -d28a: 5f5a -d28b: 5f5a -d28c: 5f5a -d28d: 5f5a -d28e: 5f5a -d28f: 5f5a -d290: 5f5a -d291: 5f5a -d292: 5f5a -d293: 5f5a -d294: 5f5a -d295: 5f5a -d296: 5f5a -d297: 5f5a -d298: 5f5a -d299: 5f5a -d29a: 5f5a -d29b: 5f5a -d29c: 5f5a -d29d: 5f5a -d29e: 5f5a -d29f: 5f5a -d2a0: 5f5a -d2a1: 5f5a -d2a2: 5f5a -d2a3: 5f5a -d2a4: 5f5a -d2a5: 5f5a -d2a6: 5f5a -d2a7: 5f5a -d2a8: 5f5a -d2a9: 5f5a -d2aa: 5f5a -d2ab: 5f5a -d2ac: 5f5a -d2ad: 5f5a -d2ae: 5f5a -d2af: 5f5a -d2b0: 5f5a -d2b1: 5f5a -d2b2: 5f5a -d2b3: 5f5a -d2b4: 5f5a -d2b5: 5f5a -d2b6: 5f5a -d2b7: 5f5a -d2b8: 5f5a -d2b9: 5f5a -d2ba: 5f5a -d2bb: 5f5a -d2bc: 5f5a -d2bd: 5f5a -d2be: 5f5a -d2bf: 5f5a -d2c0: 5f5a -d2c1: 5f5a -d2c2: 5f5a -d2c3: 5f5a -d2c4: 5f5a -d2c5: 5f5a -d2c6: 5f5a -d2c7: 5f5a -d2c8: 5f5a -d2c9: 5f5a -d2ca: 5f5a -d2cb: 5f5a -d2cc: 5f5a -d2cd: 5f5a -d2ce: 5f5a -d2cf: 5f5a -d2d0: 5f5a -d2d1: 5f5a -d2d2: 5f5a -d2d3: 5f5a -d2d4: 5f5a -d2d5: 5f5a -d2d6: 5f5a -d2d7: 5f5a -d2d8: 5f5a -d2d9: 5f5a -d2da: 5f5a -d2db: 5f5a -d2dc: 5f5a -d2dd: 5f5a -d2de: 5f5a -d2df: 5f5a -d2e0: 5f5a -d2e1: 5f5a -d2e2: 5f5a -d2e3: 5f5a -d2e4: 5f5a -d2e5: 5f5a -d2e6: 5f5a -d2e7: 5f5a -d2e8: 5f5a -d2e9: 5f5a -d2ea: 5f5a -d2eb: 5f5a -d2ec: 5f5a -d2ed: 5f5a -d2ee: 5f5a -d2ef: 5f5a -d2f0: 5f5a -d2f1: 5f5a -d2f2: 5f5a -d2f3: 5f5a -d2f4: 5f5a -d2f5: 5f5a -d2f6: 5f5a -d2f7: 5f5a -d2f8: 5f5a -d2f9: 5f5a -d2fa: 5f5a -d2fb: 5f5a -d2fc: 5f5a -d2fd: 5f5a -d2fe: 5f5a -d2ff: 5f5a -d300: 5f5a -d301: 5f5a -d302: 5f5a -d303: 5f5a -d304: 5f5a -d305: 5f5a -d306: 5f5a -d307: 5f5a -d308: 5f5a -d309: 5f5a -d30a: 5f5a -d30b: 5f5a -d30c: 5f5a -d30d: 5f5a -d30e: 5f5a -d30f: 5f5a -d310: 5f5a -d311: 5f5a -d312: 5f5a -d313: 5f5a -d314: 5f5a -d315: 5f5a -d316: 5f5a -d317: 5f5a -d318: 5f5a -d319: 5f5a -d31a: 5f5a -d31b: 5f5a -d31c: 5f5a -d31d: 5f5a -d31e: 5f5a -d31f: 5f5a -d320: 5f5a -d321: 5f5a -d322: 5f5a -d323: 5f5a -d324: 5f5a -d325: 5f5a -d326: 5f5a -d327: 5f5a -d328: 5f5a -d329: 5f5a -d32a: 5f5a -d32b: 5f5a -d32c: 5f5a -d32d: 5f5a -d32e: 5f5a -d32f: 5f5a -d330: 5f5a -d331: 5f5a -d332: 5f5a -d333: 5f5a -d334: 5f5a -d335: 5f5a -d336: 5f5a -d337: 5f5a -d338: 5f5a -d339: 5f5a -d33a: 5f5a -d33b: 5f5a -d33c: 5f5a -d33d: 5f5a -d33e: 5f5a -d33f: 5f5a -d340: 5f5a -d341: 5f5a -d342: 5f5a -d343: 5f5a -d344: 5f5a -d345: 5f5a -d346: 5f5a -d347: 5f5a -d348: 5f5a -d349: 5f5a -d34a: 5f5a -d34b: 5f5a -d34c: 5f5a -d34d: 5f5a -d34e: 5f5a -d34f: 5f5a -d350: 5f5a -d351: 5f5a -d352: 5f5a -d353: 5f5a -d354: 5f5a -d355: 5f5a -d356: 5f5a -d357: 5f5a -d358: 5f5a -d359: 5f5a -d35a: 5f5a -d35b: 5f5a -d35c: 5f5a -d35d: 5f5a -d35e: 5f5a -d35f: 5f5a -d360: 5f5a -d361: 5f5a -d362: 5f5a -d363: 5f5a -d364: 5f5a -d365: 5f5a -d366: 5f5a -d367: 5f5a -d368: 5f5a -d369: 5f5a -d36a: 5f5a -d36b: 5f5a -d36c: 5f5a -d36d: 5f5a -d36e: 5f5a -d36f: 5f5a -d370: 5f5a -d371: 5f5a -d372: 5f5a -d373: 5f5a -d374: 5f5a -d375: 5f5a -d376: 5f5a -d377: 5f5a -d378: 5f5a -d379: 5f5a -d37a: 5f5a -d37b: 5f5a -d37c: 5f5a -d37d: 5f5a -d37e: 5f5a -d37f: 5f5a -d380: 5f5a -d381: 5f5a -d382: 5f5a -d383: 5f5a -d384: 5f5a -d385: 5f5a -d386: 5f5a -d387: 5f5a -d388: 5f5a -d389: 5f5a -d38a: 5f5a -d38b: 5f5a -d38c: 5f5a -d38d: 5f5a -d38e: 5f5a -d38f: 5f5a -d390: 5f5a -d391: 5f5a -d392: 5f5a -d393: 5f5a -d394: 5f5a -d395: 5f5a -d396: 5f5a -d397: 5f5a -d398: 5f5a -d399: 5f5a -d39a: 5f5a -d39b: 5f5a -d39c: 5f5a -d39d: 5f5a -d39e: 5f5a -d39f: 5f5a -d3a0: 5f5a -d3a1: 5f5a -d3a2: 5f5a -d3a3: 5f5a -d3a4: 5f5a -d3a5: 5f5a -d3a6: 5f5a -d3a7: 5f5a -d3a8: 5f5a -d3a9: 5f5a -d3aa: 5f5a -d3ab: 5f5a -d3ac: 5f5a -d3ad: 5f5a -d3ae: 5f5a -d3af: 5f5a -d3b0: 5f5a -d3b1: 5f5a -d3b2: 5f5a -d3b3: 5f5a -d3b4: 5f5a -d3b5: 5f5a -d3b6: 5f5a -d3b7: 5f5a -d3b8: 5f5a -d3b9: 5f5a -d3ba: 5f5a -d3bb: 5f5a -d3bc: 5f5a -d3bd: 5f5a -d3be: 5f5a -d3bf: 5f5a -d3c0: 5f5a -d3c1: 5f5a -d3c2: 5f5a -d3c3: 5f5a -d3c4: 5f5a -d3c5: 5f5a -d3c6: 5f5a -d3c7: 5f5a -d3c8: 5f5a -d3c9: 5f5a -d3ca: 5f5a -d3cb: 5f5a -d3cc: 5f5a -d3cd: 5f5a -d3ce: 5f5a -d3cf: 5f5a -d3d0: 5f5a -d3d1: 5f5a -d3d2: 5f5a -d3d3: 5f5a -d3d4: 5f5a -d3d5: 5f5a -d3d6: 5f5a -d3d7: 5f5a -d3d8: 5f5a -d3d9: 5f5a -d3da: 5f5a -d3db: 5f5a -d3dc: 5f5a -d3dd: 5f5a -d3de: 5f5a -d3df: 5f5a -d3e0: 5f5a -d3e1: 5f5a -d3e2: 5f5a -d3e3: 5f5a -d3e4: 5f5a -d3e5: 5f5a -d3e6: 5f5a -d3e7: 5f5a -d3e8: 5f5a -d3e9: 5f5a -d3ea: 5f5a -d3eb: 5f5a -d3ec: 5f5a -d3ed: 5f5a -d3ee: 5f5a -d3ef: 5f5a -d3f0: 5f5a -d3f1: 5f5a -d3f2: 5f5a -d3f3: 5f5a -d3f4: 5f5a -d3f5: 5f5a -d3f6: 5f5a -d3f7: 5f5a -d3f8: 5f5a -d3f9: 5f5a -d3fa: 5f5a -d3fb: 5f5a -d3fc: 5f5a -d3fd: 5f5a -d3fe: 5f5a -d3ff: 5f5a -d400: 5f5a -d401: 5f5a -d402: 5f5a -d403: 5f5a -d404: 5f5a -d405: 5f5a -d406: 5f5a -d407: 5f5a -d408: 5f5a -d409: 5f5a -d40a: 5f5a -d40b: 5f5a -d40c: 5f5a -d40d: 5f5a -d40e: 5f5a -d40f: 5f5a -d410: 5f5a -d411: 5f5a -d412: 5f5a -d413: 5f5a -d414: 5f5a -d415: 5f5a -d416: 5f5a -d417: 5f5a -d418: 5f5a -d419: 5f5a -d41a: 5f5a -d41b: 5f5a -d41c: 5f5a -d41d: 5f5a -d41e: 5f5a -d41f: 5f5a -d420: 5f5a -d421: 5f5a -d422: 5f5a -d423: 5f5a -d424: 5f5a -d425: 5f5a -d426: 5f5a -d427: 5f5a -d428: 5f5a -d429: 5f5a -d42a: 5f5a -d42b: 5f5a -d42c: 5f5a -d42d: 5f5a -d42e: 5f5a -d42f: 5f5a -d430: 5f5a -d431: 5f5a -d432: 5f5a -d433: 5f5a -d434: 5f5a -d435: 5f5a -d436: 5f5a -d437: 5f5a -d438: 5f5a -d439: 5f5a -d43a: 5f5a -d43b: 5f5a -d43c: 5f5a -d43d: 5f5a -d43e: 5f5a -d43f: 5f5a -d440: 5f5a -d441: 5f5a -d442: 5f5a -d443: 5f5a -d444: 5f5a -d445: 5f5a -d446: 5f5a -d447: 5f5a -d448: 5f5a -d449: 5f5a -d44a: 5f5a -d44b: 5f5a -d44c: 5f5a -d44d: 5f5a -d44e: 5f5a -d44f: 5f5a -d450: 5f5a -d451: 5f5a -d452: 5f5a -d453: 5f5a -d454: 5f5a -d455: 5f5a -d456: 5f5a -d457: 5f5a -d458: 5f5a -d459: 5f5a -d45a: 5f5a -d45b: 5f5a -d45c: 5f5a -d45d: 5f5a -d45e: 5f5a -d45f: 5f5a -d460: 5f5a -d461: 5f5a -d462: 5f5a -d463: 5f5a -d464: 5f5a -d465: 5f5a -d466: 5f5a -d467: 5f5a -d468: 5f5a -d469: 5f5a -d46a: 5f5a -d46b: 5f5a -d46c: 5f5a -d46d: 5f5a -d46e: 5f5a -d46f: 5f5a -d470: 5f5a -d471: 5f5a -d472: 5f5a -d473: 5f5a -d474: 5f5a -d475: 5f5a -d476: 5f5a -d477: 5f5a -d478: 5f5a -d479: 5f5a -d47a: 5f5a -d47b: 5f5a -d47c: 5f5a -d47d: 5f5a -d47e: 5f5a -d47f: 5f5a -d480: 5f5a -d481: 5f5a -d482: 5f5a -d483: 5f5a -d484: 5f5a -d485: 5f5a -d486: 5f5a -d487: 5f5a -d488: 5f5a -d489: 5f5a -d48a: 5f5a -d48b: 5f5a -d48c: 5f5a -d48d: 5f5a -d48e: 5f5a -d48f: 5f5a -d490: 5f5a -d491: 5f5a -d492: 5f5a -d493: 5f5a -d494: 5f5a -d495: 5f5a -d496: 5f5a -d497: 5f5a -d498: 5f5a -d499: 5f5a -d49a: 5f5a -d49b: 5f5a -d49c: 5f5a -d49d: 5f5a -d49e: 5f5a -d49f: 5f5a -d4a0: 5f5a -d4a1: 5f5a -d4a2: 5f5a -d4a3: 5f5a -d4a4: 5f5a -d4a5: 5f5a -d4a6: 5f5a -d4a7: 5f5a -d4a8: 5f5a -d4a9: 5f5a -d4aa: 5f5a -d4ab: 5f5a -d4ac: 5f5a -d4ad: 5f5a -d4ae: 5f5a -d4af: 5f5a +d000: 0001 +d001: 0001 +d002: 0001 +d003: 0001 +d004: 0001 +d005: 0001 +d006: 0001 +d007: 0001 +d008: 0001 +d009: 0001 +d00a: 0001 +d00b: 0001 +d00c: 0001 +d00d: 0001 +d00e: 0001 +d00f: 0001 +d010: 0001 +d011: 0001 +d012: 0001 +d013: 0001 +d014: 0001 +d015: 0001 +d016: 0001 +d017: 0001 +d018: 0001 +d019: 0001 +d01a: 0001 +d01b: 0001 +d01c: 0001 +d01d: 0001 +d01e: 0001 +d01f: 0001 +d020: 0001 +d021: 0001 +d022: 0001 +d023: 0001 +d024: 0001 +d025: 0001 +d026: 0001 +d027: 0001 +d028: 0001 +d029: 0001 +d02a: 0001 +d02b: 0001 +d02c: 0001 +d02d: 0001 +d02e: 0001 +d02f: 0001 +d030: 0001 +d031: 0001 +d032: 0001 +d033: 0001 +d034: 0001 +d035: 0001 +d036: 0001 +d037: 0001 +d038: 0001 +d039: 0001 +d03a: 0001 +d03b: 0001 +d03c: 0001 +d03d: 0001 +d03e: 0001 +d03f: 0001 +d040: 0001 +d041: 0001 +d042: 0001 +d043: 0001 +d044: 0001 +d045: 0001 +d046: 0001 +d047: 0001 +d048: 0001 +d049: 0001 +d04a: 0001 +d04b: 0001 +d04c: 0001 +d04d: 0001 +d04e: 0001 +d04f: 0001 +d050: 0001 +d051: 0001 +d052: 0001 +d053: 0001 +d054: 0001 +d055: 0001 +d056: 0001 +d057: 0001 +d058: 0001 +d059: 0001 +d05a: 0001 +d05b: 0001 +d05c: 0001 +d05d: 0001 +d05e: 0001 +d05f: 0001 +d060: 0001 +d061: 0001 +d062: 0001 +d063: 0001 +d064: 0001 +d065: 0001 +d066: 0001 +d067: 0001 +d068: 0001 +d069: 0001 +d06a: 0001 +d06b: 0001 +d06c: 0001 +d06d: 0001 +d06e: 0001 +d06f: 0001 +d070: 0001 +d071: 0001 +d072: 0001 +d073: 0001 +d074: 0001 +d075: 0001 +d076: 0001 +d077: 0001 +d078: 0001 +d079: 0001 +d07a: 0001 +d07b: 0001 +d07c: 0001 +d07d: 0001 +d07e: 0001 +d07f: 0001 +d080: 0001 +d081: 0001 +d082: 0001 +d083: 0001 +d084: 0001 +d085: 0001 +d086: 0001 +d087: 0001 +d088: 0001 +d089: 0001 +d08a: 0001 +d08b: 0001 +d08c: 0001 +d08d: 0001 +d08e: 0001 +d08f: 0001 +d090: 0001 +d091: 0001 +d092: 0001 +d093: 0001 +d094: 0001 +d095: 0001 +d096: 0001 +d097: 0001 +d098: 0001 +d099: 0001 +d09a: 0001 +d09b: 0001 +d09c: 0001 +d09d: 0001 +d09e: 0001 +d09f: 0001 +d0a0: 0001 +d0a1: 0001 +d0a2: 0001 +d0a3: 0001 +d0a4: 0001 +d0a5: 0001 +d0a6: 0001 +d0a7: 0001 +d0a8: 0001 +d0a9: 0001 +d0aa: 0001 +d0ab: 0001 +d0ac: 0001 +d0ad: 0001 +d0ae: 0001 +d0af: 0001 +d0b0: 0001 +d0b1: 0001 +d0b2: 0001 +d0b3: 0001 +d0b4: 0001 +d0b5: 0001 +d0b6: 0001 +d0b7: 0001 +d0b8: 0001 +d0b9: 0001 +d0ba: 0001 +d0bb: 0001 +d0bc: 0001 +d0bd: 0001 +d0be: 0001 +d0bf: 0001 +d0c0: 0001 +d0c1: 0001 +d0c2: 0001 +d0c3: 0001 +d0c4: 0001 +d0c5: 0001 +d0c6: 0001 +d0c7: 0001 +d0c8: 0001 +d0c9: 0001 +d0ca: 0001 +d0cb: 0001 +d0cc: 0001 +d0cd: 0001 +d0ce: 0001 +d0cf: 0001 +d0d0: 0001 +d0d1: 0001 +d0d2: 0001 +d0d3: 0001 +d0d4: 0001 +d0d5: 0001 +d0d6: 0001 +d0d7: 0001 +d0d8: 0001 +d0d9: 0001 +d0da: 0001 +d0db: 0001 +d0dc: 0001 +d0dd: 0001 +d0de: 0001 +d0df: 0001 +d0e0: 0001 +d0e1: 0001 +d0e2: 0001 +d0e3: 0001 +d0e4: 0001 +d0e5: 0001 +d0e6: 0001 +d0e7: 0001 +d0e8: 0001 +d0e9: 0001 +d0ea: 0001 +d0eb: 0001 +d0ec: 0001 +d0ed: 0001 +d0ee: 0001 +d0ef: 0001 +d0f0: 0001 +d0f1: 0001 +d0f2: 0001 +d0f3: 0001 +d0f4: 0001 +d0f5: 0001 +d0f6: 0001 +d0f7: 0001 +d0f8: 0001 +d0f9: 0001 +d0fa: 0001 +d0fb: 0001 +d0fc: 0001 +d0fd: 0001 +d0fe: 0001 +d0ff: 0001 +d100: 0001 +d101: 0001 +d102: 0001 +d103: 0001 +d104: 0001 +d105: 0001 +d106: 0001 +d107: 0001 +d108: 0001 +d109: 0001 +d10a: 0001 +d10b: 0001 +d10c: 0001 +d10d: 0001 +d10e: 0001 +d10f: 0001 +d110: 0001 +d111: 0001 +d112: 0001 +d113: 0001 +d114: 0001 +d115: 0001 +d116: 0001 +d117: 0001 +d118: 0001 +d119: 0001 +d11a: 0001 +d11b: 0001 +d11c: 0001 +d11d: 0001 +d11e: 0001 +d11f: 0001 +d120: 0001 +d121: 0001 +d122: 0001 +d123: 0001 +d124: 0001 +d125: 0001 +d126: 0001 +d127: 0001 +d128: 0001 +d129: 0001 +d12a: 0001 +d12b: 0001 +d12c: 0001 +d12d: 0001 +d12e: 0001 +d12f: 0001 +d130: 0001 +d131: 0001 +d132: 0001 +d133: 0001 +d134: 0001 +d135: 0001 +d136: 0001 +d137: 0001 +d138: 0001 +d139: 0001 +d13a: 0001 +d13b: 0001 +d13c: 0001 +d13d: 0001 +d13e: 0001 +d13f: 0001 +d140: 0001 +d141: 0001 +d142: 0001 +d143: 0001 +d144: 0001 +d145: 0001 +d146: 0001 +d147: 0001 +d148: 0001 +d149: 0001 +d14a: 0001 +d14b: 0001 +d14c: 0001 +d14d: 0001 +d14e: 0001 +d14f: 0001 +d150: 0001 +d151: 0001 +d152: 0001 +d153: 0001 +d154: 0001 +d155: 0001 +d156: 0001 +d157: 0001 +d158: 0001 +d159: 0001 +d15a: 0001 +d15b: 0001 +d15c: 0001 +d15d: 0001 +d15e: 0001 +d15f: 0001 +d160: 0001 +d161: 0001 +d162: 0001 +d163: 0001 +d164: 0001 +d165: 0001 +d166: 0001 +d167: 0001 +d168: 0001 +d169: 0001 +d16a: 0001 +d16b: 0001 +d16c: 0001 +d16d: 0001 +d16e: 0001 +d16f: 0001 +d170: 0001 +d171: 0001 +d172: 0001 +d173: 0001 +d174: 0001 +d175: 0001 +d176: 0001 +d177: 0001 +d178: 0001 +d179: 0001 +d17a: 0001 +d17b: 0001 +d17c: 0001 +d17d: 0001 +d17e: 0001 +d17f: 0001 +d180: 0001 +d181: 0001 +d182: 0001 +d183: 0001 +d184: 0001 +d185: 0001 +d186: 0001 +d187: 0001 +d188: 0001 +d189: 0001 +d18a: 0001 +d18b: 0001 +d18c: 0001 +d18d: 0001 +d18e: 0001 +d18f: 0001 +d190: 0001 +d191: 0001 +d192: 0001 +d193: 0001 +d194: 0001 +d195: 0001 +d196: 0001 +d197: 0001 +d198: 0001 +d199: 0001 +d19a: 0001 +d19b: 0001 +d19c: 0001 +d19d: 0001 +d19e: 0001 +d19f: 0001 +d1a0: 0001 +d1a1: 0001 +d1a2: 0001 +d1a3: 0001 +d1a4: 0001 +d1a5: 0001 +d1a6: 0001 +d1a7: 0001 +d1a8: 0001 +d1a9: 0001 +d1aa: 0001 +d1ab: 0001 +d1ac: 0001 +d1ad: 0001 +d1ae: 0001 +d1af: 0001 +d1b0: 0001 +d1b1: 0001 +d1b2: 0001 +d1b3: 0001 +d1b4: 0001 +d1b5: 0001 +d1b6: 0001 +d1b7: 0001 +d1b8: 0001 +d1b9: 0001 +d1ba: 0001 +d1bb: 0001 +d1bc: 0001 +d1bd: 0001 +d1be: 0001 +d1bf: 0001 +d1c0: 0001 +d1c1: 0001 +d1c2: 0001 +d1c3: 0001 +d1c4: 0001 +d1c5: 0001 +d1c6: 0001 +d1c7: 0001 +d1c8: 0001 +d1c9: 0001 +d1ca: 0001 +d1cb: 0001 +d1cc: 0001 +d1cd: 0001 +d1ce: 0001 +d1cf: 0001 +d1d0: 0001 +d1d1: 0001 +d1d2: 0001 +d1d3: 0001 +d1d4: 0001 +d1d5: 0001 +d1d6: 0001 +d1d7: 0001 +d1d8: 0001 +d1d9: 0001 +d1da: 0001 +d1db: 0001 +d1dc: 0001 +d1dd: 0001 +d1de: 0001 +d1df: 0001 +d1e0: 0001 +d1e1: 0001 +d1e2: 0001 +d1e3: 0001 +d1e4: 0001 +d1e5: 0001 +d1e6: 0001 +d1e7: 0001 +d1e8: 0001 +d1e9: 0001 +d1ea: 0001 +d1eb: 0001 +d1ec: 0001 +d1ed: 0001 +d1ee: 0001 +d1ef: 0001 +d1f0: 0001 +d1f1: 0001 +d1f2: 0001 +d1f3: 0001 +d1f4: 0001 +d1f5: 0001 +d1f6: 0001 +d1f7: 0001 +d1f8: 0001 +d1f9: 0001 +d1fa: 0001 +d1fb: 0001 +d1fc: 0001 +d1fd: 0001 +d1fe: 0001 +d1ff: 0001 +d200: 0001 +d201: 0001 +d202: 0001 +d203: 0001 +d204: 0001 +d205: 0001 +d206: 0001 +d207: 0001 +d208: 0001 +d209: 0001 +d20a: 0001 +d20b: 0001 +d20c: 0001 +d20d: 0001 +d20e: 0001 +d20f: 0001 +d210: 0001 +d211: 0001 +d212: 0001 +d213: 0001 +d214: 0001 +d215: 0001 +d216: 0001 +d217: 0001 +d218: 0001 +d219: 0001 +d21a: 0001 +d21b: 0001 +d21c: 0001 +d21d: 0001 +d21e: 0001 +d21f: 0001 +d220: 0001 +d221: 0001 +d222: 0001 +d223: 0001 +d224: 0001 +d225: 0001 +d226: 0001 +d227: 0001 +d228: 0001 +d229: 0001 +d22a: 0001 +d22b: 0001 +d22c: 0001 +d22d: 0001 +d22e: 0001 +d22f: 0001 +d230: 0001 +d231: 0001 +d232: 0001 +d233: 0001 +d234: 0001 +d235: 0001 +d236: 0001 +d237: 0001 +d238: 0001 +d239: 0001 +d23a: 0001 +d23b: 0001 +d23c: 0001 +d23d: 0001 +d23e: 0001 +d23f: 0001 +d240: 0001 +d241: 0001 +d242: 0001 +d243: 0001 +d244: 0001 +d245: 0001 +d246: 0001 +d247: 0001 +d248: 0001 +d249: 0001 +d24a: 0001 +d24b: 0001 +d24c: 0001 +d24d: 0001 +d24e: 0001 +d24f: 0001 +d250: 0001 +d251: 0001 +d252: 0001 +d253: 0001 +d254: 0001 +d255: 0001 +d256: 0001 +d257: 0001 +d258: 0001 +d259: 0001 +d25a: 0001 +d25b: 0001 +d25c: 0001 +d25d: 0001 +d25e: 0001 +d25f: 0001 +d260: 0001 +d261: 0001 +d262: 0001 +d263: 0001 +d264: 0001 +d265: 0001 +d266: 0001 +d267: 0001 +d268: 0001 +d269: 0001 +d26a: 0001 +d26b: 0001 +d26c: 0001 +d26d: 0001 +d26e: 0001 +d26f: 0001 +d270: 0001 +d271: 0001 +d272: 0001 +d273: 0001 +d274: 0001 +d275: 0001 +d276: 0001 +d277: 0001 +d278: 0001 +d279: 0001 +d27a: 0001 +d27b: 0001 +d27c: 0001 +d27d: 0001 +d27e: 0001 +d27f: 0001 +d280: 0001 +d281: 0001 +d282: 0001 +d283: 0001 +d284: 0001 +d285: 0001 +d286: 0001 +d287: 0001 +d288: 0001 +d289: 0001 +d28a: 0001 +d28b: 0001 +d28c: 0001 +d28d: 0001 +d28e: 0001 +d28f: 0001 +d290: 0001 +d291: 0001 +d292: 0001 +d293: 0001 +d294: 0001 +d295: 0001 +d296: 0001 +d297: 0001 +d298: 0001 +d299: 0001 +d29a: 0001 +d29b: 0001 +d29c: 0001 +d29d: 0001 +d29e: 0001 +d29f: 0001 +d2a0: 0001 +d2a1: 0001 +d2a2: 0001 +d2a3: 0001 +d2a4: 0001 +d2a5: 0001 +d2a6: 0001 +d2a7: 0001 +d2a8: 0001 +d2a9: 0001 +d2aa: 0001 +d2ab: 0001 +d2ac: 0001 +d2ad: 0001 +d2ae: 0001 +d2af: 0001 +d2b0: 0001 +d2b1: 0001 +d2b2: 0001 +d2b3: 0001 +d2b4: 0001 +d2b5: 0001 +d2b6: 0001 +d2b7: 0001 +d2b8: 0001 +d2b9: 0001 +d2ba: 0001 +d2bb: 0001 +d2bc: 0001 +d2bd: 0001 +d2be: 0001 +d2bf: 0001 +d2c0: 0001 +d2c1: 0001 +d2c2: 0001 +d2c3: 0001 +d2c4: 0001 +d2c5: 0001 +d2c6: 0001 +d2c7: 0001 +d2c8: 0001 +d2c9: 0001 +d2ca: 0001 +d2cb: 0001 +d2cc: 0001 +d2cd: 0001 +d2ce: 0001 +d2cf: 0001 +d2d0: 0001 +d2d1: 0001 +d2d2: 0001 +d2d3: 0001 +d2d4: 0001 +d2d5: 0001 +d2d6: 0001 +d2d7: 0001 +d2d8: 0001 +d2d9: 0001 +d2da: 0001 +d2db: 0001 +d2dc: 0001 +d2dd: 0001 +d2de: 0001 +d2df: 0001 +d2e0: 0001 +d2e1: 0001 +d2e2: 0001 +d2e3: 0001 +d2e4: 0001 +d2e5: 0001 +d2e6: 0001 +d2e7: 0001 +d2e8: 0001 +d2e9: 0001 +d2ea: 0001 +d2eb: 0001 +d2ec: 0001 +d2ed: 0001 +d2ee: 0001 +d2ef: 0001 +d2f0: 0001 +d2f1: 0001 +d2f2: 0001 +d2f3: 0001 +d2f4: 0001 +d2f5: 0001 +d2f6: 0001 +d2f7: 0001 +d2f8: 0001 +d2f9: 0001 +d2fa: 0001 +d2fb: 0001 +d2fc: 0001 +d2fd: 0001 +d2fe: 0001 +d2ff: 0001 +d300: 0001 +d301: 0001 +d302: 0001 +d303: 0001 +d304: 0001 +d305: 0001 +d306: 0001 +d307: 0001 +d308: 0001 +d309: 0001 +d30a: 0001 +d30b: 0001 +d30c: 0001 +d30d: 0001 +d30e: 0001 +d30f: 0001 +d310: 0001 +d311: 0001 +d312: 0001 +d313: 0001 +d314: 0001 +d315: 0001 +d316: 0001 +d317: 0001 +d318: 0001 +d319: 0001 +d31a: 0001 +d31b: 0001 +d31c: 0001 +d31d: 0001 +d31e: 0001 +d31f: 0001 +d320: 0001 +d321: 0001 +d322: 0001 +d323: 0001 +d324: 0001 +d325: 0001 +d326: 0001 +d327: 0001 +d328: 0001 +d329: 0001 +d32a: 0001 +d32b: 0001 +d32c: 0001 +d32d: 0001 +d32e: 0001 +d32f: 0001 +d330: 0001 +d331: 0001 +d332: 0001 +d333: 0001 +d334: 0001 +d335: 0001 +d336: 0001 +d337: 0001 +d338: 0001 +d339: 0001 +d33a: 0001 +d33b: 0001 +d33c: 0001 +d33d: 0001 +d33e: 0001 +d33f: 0001 +d340: 0001 +d341: 0001 +d342: 0001 +d343: 0001 +d344: 0001 +d345: 0001 +d346: 0001 +d347: 0001 +d348: 0001 +d349: 0001 +d34a: 0001 +d34b: 0001 +d34c: 0001 +d34d: 0001 +d34e: 0001 +d34f: 0001 +d350: 0001 +d351: 0001 +d352: 0001 +d353: 0001 +d354: 0001 +d355: 0001 +d356: 0001 +d357: 0001 +d358: 0001 +d359: 0001 +d35a: 0001 +d35b: 0001 +d35c: 0001 +d35d: 0001 +d35e: 0001 +d35f: 0001 +d360: 0001 +d361: 0001 +d362: 0001 +d363: 0001 +d364: 0001 +d365: 0001 +d366: 0001 +d367: 0001 +d368: 0001 +d369: 0001 +d36a: 0001 +d36b: 0001 +d36c: 0001 +d36d: 0001 +d36e: 0001 +d36f: 0001 +d370: 0001 +d371: 0001 +d372: 0001 +d373: 0001 +d374: 0001 +d375: 0001 +d376: 0001 +d377: 0001 +d378: 0001 +d379: 0001 +d37a: 0001 +d37b: 0001 +d37c: 0001 +d37d: 0001 +d37e: 0001 +d37f: 0001 +d380: 0001 +d381: 0001 +d382: 0001 +d383: 0001 +d384: 0001 +d385: 0001 +d386: 0001 +d387: 0001 +d388: 0001 +d389: 0001 +d38a: 0001 +d38b: 0001 +d38c: 0001 +d38d: 0001 +d38e: 0001 +d38f: 0001 +d390: 0001 +d391: 0001 +d392: 0001 +d393: 0001 +d394: 0001 +d395: 0001 +d396: 0001 +d397: 0001 +d398: 0001 +d399: 0001 +d39a: 0001 +d39b: 0001 +d39c: 0001 +d39d: 0001 +d39e: 0001 +d39f: 0001 +d3a0: 0001 +d3a1: 0001 +d3a2: 0001 +d3a3: 0001 +d3a4: 0001 +d3a5: 0001 +d3a6: 0001 +d3a7: 0001 +d3a8: 0001 +d3a9: 0001 +d3aa: 0001 +d3ab: 0001 +d3ac: 0001 +d3ad: 0001 +d3ae: 0001 +d3af: 0001 +d3b0: 0001 +d3b1: 0001 +d3b2: 0001 +d3b3: 0001 +d3b4: 0001 +d3b5: 0001 +d3b6: 0001 +d3b7: 0001 +d3b8: 0001 +d3b9: 0001 +d3ba: 0001 +d3bb: 0001 +d3bc: 0001 +d3bd: 0001 +d3be: 0001 +d3bf: 0001 +d3c0: 0001 +d3c1: 0001 +d3c2: 0001 +d3c3: 0001 +d3c4: 0001 +d3c5: 0001 +d3c6: 0001 +d3c7: 0001 +d3c8: 0001 +d3c9: 0001 +d3ca: 0001 +d3cb: 0001 +d3cc: 0001 +d3cd: 0001 +d3ce: 0001 +d3cf: 0001 +d3d0: 0001 +d3d1: 0001 +d3d2: 0001 +d3d3: 0001 +d3d4: 0001 +d3d5: 0001 +d3d6: 0001 +d3d7: 0001 +d3d8: 0001 +d3d9: 0001 +d3da: 0001 +d3db: 0001 +d3dc: 0001 +d3dd: 0001 +d3de: 0001 +d3df: 0001 +d3e0: 0001 +d3e1: 0001 +d3e2: 0001 +d3e3: 0001 +d3e4: 0001 +d3e5: 0001 +d3e6: 0001 +d3e7: 0001 +d3e8: 0001 +d3e9: 0001 +d3ea: 0001 +d3eb: 0001 +d3ec: 0001 +d3ed: 0001 +d3ee: 0001 +d3ef: 0001 +d3f0: 0001 +d3f1: 0001 +d3f2: 0001 +d3f3: 0001 +d3f4: 0001 +d3f5: 0001 +d3f6: 0001 +d3f7: 0001 +d3f8: 0001 +d3f9: 0001 +d3fa: 0001 +d3fb: 0001 +d3fc: 0001 +d3fd: 0001 +d3fe: 0001 +d3ff: 0001 +d400: 0001 +d401: 0001 +d402: 0001 +d403: 0001 +d404: 0001 +d405: 0001 +d406: 0001 +d407: 0001 +d408: 0001 +d409: 0001 +d40a: 0001 +d40b: 0001 +d40c: 0001 +d40d: 0001 +d40e: 0001 +d40f: 0001 +d410: 0001 +d411: 0001 +d412: 0001 +d413: 0001 +d414: 0001 +d415: 0001 +d416: 0001 +d417: 0001 +d418: 0001 +d419: 0001 +d41a: 0001 +d41b: 0001 +d41c: 0001 +d41d: 0001 +d41e: 0001 +d41f: 0001 +d420: 0001 +d421: 0001 +d422: 0001 +d423: 0001 +d424: 0001 +d425: 0001 +d426: 0001 +d427: 0001 +d428: 0001 +d429: 0001 +d42a: 0001 +d42b: 0001 +d42c: 0001 +d42d: 0001 +d42e: 0001 +d42f: 0001 +d430: 0001 +d431: 0001 +d432: 0001 +d433: 0001 +d434: 0001 +d435: 0001 +d436: 0001 +d437: 0001 +d438: 0001 +d439: 0001 +d43a: 0001 +d43b: 0001 +d43c: 0001 +d43d: 0001 +d43e: 0001 +d43f: 0001 +d440: 0001 +d441: 0001 +d442: 0001 +d443: 0001 +d444: 0001 +d445: 0001 +d446: 0001 +d447: 0001 +d448: 0001 +d449: 0001 +d44a: 0001 +d44b: 0001 +d44c: 0001 +d44d: 0001 +d44e: 0001 +d44f: 0001 +d450: 0001 +d451: 0001 +d452: 0001 +d453: 0001 +d454: 0001 +d455: 0001 +d456: 0001 +d457: 0001 +d458: 0001 +d459: 0001 +d45a: 0001 +d45b: 0001 +d45c: 0001 +d45d: 0001 +d45e: 0001 +d45f: 0001 +d460: 0001 +d461: 0001 +d462: 0001 +d463: 0001 +d464: 0001 +d465: 0001 +d466: 0001 +d467: 0001 +d468: 0001 +d469: 0001 +d46a: 0001 +d46b: 0001 +d46c: 0001 +d46d: 0001 +d46e: 0001 +d46f: 0001 +d470: 0001 +d471: 0001 +d472: 0001 +d473: 0001 +d474: 0001 +d475: 0001 +d476: 0001 +d477: 0001 +d478: 0001 +d479: 0001 +d47a: 0001 +d47b: 0001 +d47c: 0001 +d47d: 0001 +d47e: 0001 +d47f: 0001 +d480: 0001 +d481: 0001 +d482: 0001 +d483: 0001 +d484: 0001 +d485: 0001 +d486: 0001 +d487: 0001 +d488: 0001 +d489: 0001 +d48a: 0001 +d48b: 0001 +d48c: 0001 +d48d: 0001 +d48e: 0001 +d48f: 0001 +d490: 0001 +d491: 0001 +d492: 0001 +d493: 0001 +d494: 0001 +d495: 0001 +d496: 0001 +d497: 0001 +d498: 0001 +d499: 0001 +d49a: 0001 +d49b: 0001 +d49c: 0001 +d49d: 0001 +d49e: 0001 +d49f: 0001 +d4a0: 0001 +d4a1: 0001 +d4a2: 0001 +d4a3: 0001 +d4a4: 0001 +d4a5: 0001 +d4a6: 0001 +d4a7: 0001 +d4a8: 0001 +d4a9: 0001 +d4aa: 0001 +d4ab: 0001 +d4ac: 0001 +d4ad: 0001 +d4ae: 0001 +d4af: 0001 dc09: 0f0f dc11: 0fff dc19: 0f00 dc21: 00ff dc29: 000f -de00: 0401 +de00: 0a06 de01: 0000 -d810: a400 -d811: 1ad3 -d812: 8800 -d813: 1773 -d814: 4c00 -d815: 1372 -d816: 7000 -d817: 0fb0 -d818: 7400 -d819: 0dce +d820: 0400 +d821: 0e6d +d822: a800 +d823: 0dae +d824: 8c00 +d825: 0f30 +d826: 7000 +d827: 1272 +d828: 9400 +d829: 1693 |